/ Hex Artifact Content
Login

Artifact 47d235a0c1b7a8d210a0a82b27e395c5adba0ddd42fc9f070de18ac17e3023c7:


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 54 68 65 20 73 74 61 74 69  ./*.** The stati
8cb0: 63 20 6d 75 74 65 78 20 77 69 74 68 20 77 68 69  c mutex with whi
8cc0: 63 68 20 74 6f 20 70 72 6f 74 65 63 74 20 72 65  ch to protect re
8cd0: 75 73 61 62 6c 65 20 73 63 68 65 6d 61 73 2e 0a  usable schemas..
8ce0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
8cf0: 45 5f 4d 55 54 45 58 5f 53 43 48 45 4d 41 5f 52  E_MUTEX_SCHEMA_R
8d00: 45 55 53 45 20 53 51 4c 49 54 45 5f 4d 55 54 45  EUSE SQLITE_MUTE
8d10: 58 5f 53 54 41 54 49 43 5f 41 50 50 31 0a 0a 2f  X_STATIC_APP1../
8d20: 2a 0a 2a 2a 20 46 6f 72 77 61 72 64 20 72 65 66  *.** Forward ref
8d30: 65 72 65 6e 63 65 73 20 74 6f 20 73 74 72 75 63  erences to struc
8d40: 74 75 72 65 73 0a 2a 2f 0a 74 79 70 65 64 65 66  tures.*/.typedef
8d50: 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 20   struct AggInfo 
8d60: 41 67 67 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66  AggInfo;.typedef
8d70: 20 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74   struct AuthCont
8d80: 65 78 74 20 41 75 74 68 43 6f 6e 74 65 78 74 3b  ext AuthContext;
8d90: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8da0: 41 75 74 6f 69 6e 63 49 6e 66 6f 20 41 75 74 6f  AutoincInfo Auto
8db0: 69 6e 63 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66  incInfo;.typedef
8dc0: 20 73 74 72 75 63 74 20 42 69 74 76 65 63 20 42   struct Bitvec B
8dd0: 69 74 76 65 63 3b 0a 74 79 70 65 64 65 66 20 73  itvec;.typedef s
8de0: 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 43 6f  truct CollSeq Co
8df0: 6c 6c 53 65 71 3b 0a 74 79 70 65 64 65 66 20 73  llSeq;.typedef s
8e00: 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 43 6f 6c  truct Column Col
8e10: 75 6d 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72  umn;.typedef str
8e20: 75 63 74 20 44 62 20 44 62 3b 0a 74 79 70 65 64  uct Db Db;.typed
8e30: 65 66 20 73 74 72 75 63 74 20 53 63 68 65 6d 61  ef struct Schema
8e40: 20 53 63 68 65 6d 61 3b 0a 74 79 70 65 64 65 66   Schema;.typedef
8e50: 20 73 74 72 75 63 74 20 45 78 70 72 20 45 78 70   struct Expr Exp
8e60: 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  r;.typedef struc
8e70: 74 20 45 78 70 72 4c 69 73 74 20 45 78 70 72 4c  t ExprList ExprL
8e80: 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ist;.typedef str
8e90: 75 63 74 20 46 4b 65 79 20 46 4b 65 79 3b 0a 74  uct FKey FKey;.t
8ea0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75  ypedef struct Fu
8eb0: 6e 63 44 65 73 74 72 75 63 74 6f 72 20 46 75 6e  ncDestructor Fun
8ec0: 63 44 65 73 74 72 75 63 74 6f 72 3b 0a 74 79 70  cDestructor;.typ
8ed0: 65 64 65 66 20 73 74 72 75 63 74 20 46 75 6e 63  edef struct Func
8ee0: 44 65 66 20 46 75 6e 63 44 65 66 3b 0a 74 79 70  Def FuncDef;.typ
8ef0: 65 64 65 66 20 73 74 72 75 63 74 20 46 75 6e 63  edef struct Func
8f00: 44 65 66 48 61 73 68 20 46 75 6e 63 44 65 66 48  DefHash FuncDefH
8f10: 61 73 68 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ash;.typedef str
8f20: 75 63 74 20 49 64 4c 69 73 74 20 49 64 4c 69 73  uct IdList IdLis
8f30: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
8f40: 74 20 49 6e 64 65 78 20 49 6e 64 65 78 3b 0a 74  t Index Index;.t
8f50: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 49 6e  ypedef struct In
8f60: 64 65 78 53 61 6d 70 6c 65 20 49 6e 64 65 78 53  dexSample IndexS
8f70: 61 6d 70 6c 65 3b 0a 74 79 70 65 64 65 66 20 73  ample;.typedef s
8f80: 74 72 75 63 74 20 4b 65 79 43 6c 61 73 73 20 4b  truct KeyClass K
8f90: 65 79 43 6c 61 73 73 3b 0a 74 79 70 65 64 65 66  eyClass;.typedef
8fa0: 20 73 74 72 75 63 74 20 4b 65 79 49 6e 66 6f 20   struct KeyInfo 
8fb0: 4b 65 79 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66  KeyInfo;.typedef
8fc0: 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64   struct Lookasid
8fd0: 65 20 4c 6f 6f 6b 61 73 69 64 65 3b 0a 74 79 70  e Lookaside;.typ
8fe0: 65 64 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b  edef struct Look
8ff0: 61 73 69 64 65 53 6c 6f 74 20 4c 6f 6f 6b 61 73  asideSlot Lookas
9000: 69 64 65 53 6c 6f 74 3b 0a 74 79 70 65 64 65 66  ideSlot;.typedef
9010: 20 73 74 72 75 63 74 20 4d 6f 64 75 6c 65 20 4d   struct Module M
9020: 6f 64 75 6c 65 3b 0a 74 79 70 65 64 65 66 20 73  odule;.typedef s
9030: 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78  truct NameContex
9040: 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 3b 0a 74  t NameContext;.t
9050: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 50 61  ypedef struct Pa
9060: 72 73 65 20 50 61 72 73 65 3b 0a 74 79 70 65 64  rse Parse;.typed
9070: 65 66 20 73 74 72 75 63 74 20 50 72 65 55 70 64  ef struct PreUpd
9080: 61 74 65 20 50 72 65 55 70 64 61 74 65 3b 0a 74  ate PreUpdate;.t
9090: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 50 72  ypedef struct Pr
90a0: 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 20 50 72  intfArguments Pr
90b0: 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 3b 0a 74  intfArguments;.t
90c0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 52 65  ypedef struct Re
90d0: 6e 61 6d 65 54 6f 6b 65 6e 20 52 65 6e 61 6d 65  nameToken Rename
90e0: 54 6f 6b 65 6e 3b 0a 74 79 70 65 64 65 66 20 73  Token;.typedef s
90f0: 74 72 75 63 74 20 52 6f 77 53 65 74 20 52 6f 77  truct RowSet Row
9100: 53 65 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  Set;.typedef str
9110: 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20 53 61  uct Savepoint Sa
9120: 76 65 70 6f 69 6e 74 3b 0a 74 79 70 65 64 65 66  vepoint;.typedef
9130: 20 73 74 72 75 63 74 20 53 65 6c 65 63 74 20 53   struct Select S
9140: 65 6c 65 63 74 3b 0a 74 79 70 65 64 65 66 20 73  elect;.typedef s
9150: 74 72 75 63 74 20 53 51 4c 69 74 65 54 68 72 65  truct SQLiteThre
9160: 61 64 20 53 51 4c 69 74 65 54 68 72 65 61 64 3b  ad SQLiteThread;
9170: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9180: 53 65 6c 65 63 74 44 65 73 74 20 53 65 6c 65 63  SelectDest Selec
9190: 74 44 65 73 74 3b 0a 74 79 70 65 64 65 66 20 73  tDest;.typedef s
91a0: 74 72 75 63 74 20 53 72 63 4c 69 73 74 20 53 72  truct SrcList Sr
91b0: 63 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73  cList;.typedef s
91c0: 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f 73 74  truct sqlite3_st
91d0: 72 20 53 74 72 41 63 63 75 6d 3b 20 2f 2a 20 49  r StrAccum; /* I
91e0: 6e 74 65 72 6e 61 6c 20 61 6c 69 61 73 20 66 6f  nternal alias fo
91f0: 72 20 73 71 6c 69 74 65 33 5f 73 74 72 20 2a 2f  r sqlite3_str */
9200: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9210: 54 61 62 6c 65 20 54 61 62 6c 65 3b 0a 74 79 70  Table Table;.typ
9220: 65 64 65 66 20 73 74 72 75 63 74 20 54 61 62 6c  edef struct Tabl
9230: 65 4c 6f 63 6b 20 54 61 62 6c 65 4c 6f 63 6b 3b  eLock TableLock;
9240: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9250: 54 6f 6b 65 6e 20 54 6f 6b 65 6e 3b 0a 74 79 70  Token Token;.typ
9260: 65 64 65 66 20 73 74 72 75 63 74 20 54 72 65 65  edef struct Tree
9270: 56 69 65 77 20 54 72 65 65 56 69 65 77 3b 0a 74  View TreeView;.t
9280: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72  ypedef struct Tr
9290: 69 67 67 65 72 20 54 72 69 67 67 65 72 3b 0a 74  igger Trigger;.t
92a0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72  ypedef struct Tr
92b0: 69 67 67 65 72 50 72 67 20 54 72 69 67 67 65 72  iggerPrg Trigger
92c0: 50 72 67 3b 0a 74 79 70 65 64 65 66 20 73 74 72  Prg;.typedef str
92d0: 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20  uct TriggerStep 
92e0: 54 72 69 67 67 65 72 53 74 65 70 3b 0a 74 79 70  TriggerStep;.typ
92f0: 65 64 65 66 20 73 74 72 75 63 74 20 55 6e 70 61  edef struct Unpa
9300: 63 6b 65 64 52 65 63 6f 72 64 20 55 6e 70 61 63  ckedRecord Unpac
9310: 6b 65 64 52 65 63 6f 72 64 3b 0a 74 79 70 65 64  kedRecord;.typed
9320: 65 66 20 73 74 72 75 63 74 20 55 70 73 65 72 74  ef struct Upsert
9330: 20 55 70 73 65 72 74 3b 0a 74 79 70 65 64 65 66   Upsert;.typedef
9340: 20 73 74 72 75 63 74 20 56 54 61 62 6c 65 20 56   struct VTable V
9350: 54 61 62 6c 65 3b 0a 74 79 70 65 64 65 66 20 73  Table;.typedef s
9360: 74 72 75 63 74 20 56 74 61 62 43 74 78 20 56 74  truct VtabCtx Vt
9370: 61 62 43 74 78 3b 0a 74 79 70 65 64 65 66 20 73  abCtx;.typedef s
9380: 74 72 75 63 74 20 57 61 6c 6b 65 72 20 57 61 6c  truct Walker Wal
9390: 6b 65 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ker;.typedef str
93a0: 75 63 74 20 57 68 65 72 65 49 6e 66 6f 20 57 68  uct WhereInfo Wh
93b0: 65 72 65 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66  ereInfo;.typedef
93c0: 20 73 74 72 75 63 74 20 57 69 6e 64 6f 77 20 57   struct Window W
93d0: 69 6e 64 6f 77 3b 0a 74 79 70 65 64 65 66 20 73  indow;.typedef s
93e0: 74 72 75 63 74 20 57 69 74 68 20 57 69 74 68 3b  truct With With;
93f0: 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 62 69 74  .../*.** The bit
9400: 6d 61 73 6b 20 64 61 74 61 74 79 70 65 20 64 65  mask datatype de
9410: 66 69 6e 65 64 20 62 65 6c 6f 77 20 69 73 20 75  fined below is u
9420: 73 65 64 20 66 6f 72 20 76 61 72 69 6f 75 73 20  sed for various 
9430: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a  optimizations..*
9440: 2a 0a 2a 2a 20 43 68 61 6e 67 69 6e 67 20 74 68  *.** Changing th
9450: 69 73 20 66 72 6f 6d 20 61 20 36 34 2d 62 69 74  is from a 64-bit
9460: 20 74 6f 20 61 20 33 32 2d 62 69 74 20 74 79 70   to a 32-bit typ
9470: 65 20 6c 69 6d 69 74 73 20 74 68 65 20 6e 75 6d  e limits the num
9480: 62 65 72 20 6f 66 0a 2a 2a 20 74 61 62 6c 65 73  ber of.** tables
9490: 20 69 6e 20 61 20 6a 6f 69 6e 20 74 6f 20 33 32   in a join to 32
94a0: 20 69 6e 73 74 65 61 64 20 6f 66 20 36 34 2e 20   instead of 64. 
94b0: 20 42 75 74 20 69 74 20 61 6c 73 6f 20 72 65 64   But it also red
94c0: 75 63 65 73 20 74 68 65 20 73 69 7a 65 0a 2a 2a  uces the size.**
94d0: 20 6f 66 20 74 68 65 20 6c 69 62 72 61 72 79 20   of the library 
94e0: 62 79 20 37 33 38 20 62 79 74 65 73 20 6f 6e 20  by 738 bytes on 
94f0: 69 78 38 36 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  ix86..*/.#ifdef 
9500: 53 51 4c 49 54 45 5f 42 49 54 4d 41 53 4b 5f 54  SQLITE_BITMASK_T
9510: 59 50 45 0a 20 20 74 79 70 65 64 65 66 20 53 51  YPE.  typedef SQ
9520: 4c 49 54 45 5f 42 49 54 4d 41 53 4b 5f 54 59 50  LITE_BITMASK_TYP
9530: 45 20 42 69 74 6d 61 73 6b 3b 0a 23 65 6c 73 65  E Bitmask;.#else
9540: 0a 20 20 74 79 70 65 64 65 66 20 75 36 34 20 42  .  typedef u64 B
9550: 69 74 6d 61 73 6b 3b 0a 23 65 6e 64 69 66 0a 0a  itmask;.#endif..
9560: 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72  /*.** The number
9570: 20 6f 66 20 62 69 74 73 20 69 6e 20 61 20 42 69   of bits in a Bi
9580: 74 6d 61 73 6b 2e 20 20 22 42 4d 53 22 20 6d 65  tmask.  "BMS" me
9590: 61 6e 73 20 22 42 69 74 4d 61 73 6b 20 53 69 7a  ans "BitMask Siz
95a0: 65 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 42  e"..*/.#define B
95b0: 4d 53 20 20 28 28 69 6e 74 29 28 73 69 7a 65 6f  MS  ((int)(sizeo
95c0: 66 28 42 69 74 6d 61 73 6b 29 2a 38 29 29 0a 0a  f(Bitmask)*8))..
95d0: 2f 2a 0a 2a 2a 20 41 20 62 69 74 20 69 6e 20 61  /*.** A bit in a
95e0: 20 42 69 74 6d 61 73 6b 0a 2a 2f 0a 23 64 65 66   Bitmask.*/.#def
95f0: 69 6e 65 20 4d 41 53 4b 42 49 54 28 6e 29 20 20  ine MASKBIT(n)  
9600: 20 28 28 28 42 69 74 6d 61 73 6b 29 31 29 3c 3c   (((Bitmask)1)<<
9610: 28 6e 29 29 0a 23 64 65 66 69 6e 65 20 4d 41 53  (n)).#define MAS
9620: 4b 42 49 54 33 32 28 6e 29 20 28 28 28 75 6e 73  KBIT32(n) (((uns
9630: 69 67 6e 65 64 20 69 6e 74 29 31 29 3c 3c 28 6e  igned int)1)<<(n
9640: 29 29 0a 23 64 65 66 69 6e 65 20 41 4c 4c 42 49  )).#define ALLBI
9650: 54 53 20 20 20 20 20 20 28 28 42 69 74 6d 61 73  TS      ((Bitmas
9660: 6b 29 2d 31 29 0a 0a 2f 2a 20 41 20 56 4c 69 73  k)-1)../* A VLis
9670: 74 20 6f 62 6a 65 63 74 20 72 65 63 6f 72 64 73  t object records
9680: 20 61 20 6d 61 70 70 69 6e 67 20 62 65 74 77 65   a mapping betwe
9690: 65 6e 20 70 61 72 61 6d 65 74 65 72 73 2f 76 61  en parameters/va
96a0: 72 69 61 62 6c 65 73 2f 77 69 6c 64 63 61 72 64  riables/wildcard
96b0: 73 0a 2a 2a 20 69 6e 20 74 68 65 20 53 51 4c 20  s.** in the SQL 
96c0: 73 74 61 74 65 6d 65 6e 74 20 28 73 75 63 68 20  statement (such 
96d0: 61 73 20 24 61 62 63 2c 20 40 70 71 72 2c 20 6f  as $abc, @pqr, o
96e0: 72 20 3a 78 79 7a 29 20 61 6e 64 20 74 68 65 20  r :xyz) and the 
96f0: 69 6e 74 65 67 65 72 0a 2a 2a 20 76 61 72 69 61  integer.** varia
9700: 62 6c 65 20 6e 75 6d 62 65 72 20 61 73 73 6f 63  ble number assoc
9710: 69 61 74 65 64 20 77 69 74 68 20 74 68 61 74 20  iated with that 
9720: 70 61 72 61 6d 65 74 65 72 2e 20 20 53 65 65 20  parameter.  See 
9730: 74 68 65 20 66 6f 72 6d 61 74 20 64 65 73 63 72  the format descr
9740: 69 70 74 69 6f 6e 0a 2a 2a 20 6f 6e 20 74 68 65  iption.** on the
9750: 20 73 71 6c 69 74 65 33 56 4c 69 73 74 41 64 64   sqlite3VListAdd
9760: 28 29 20 72 6f 75 74 69 6e 65 20 66 6f 72 20 6d  () routine for m
9770: 6f 72 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  ore information.
9780: 20 20 41 20 56 4c 69 73 74 20 69 73 20 72 65 61    A VList is rea
9790: 6c 6c 79 0a 2a 2a 20 6a 75 73 74 20 61 6e 20 61  lly.** just an a
97a0: 72 72 61 79 20 6f 66 20 69 6e 74 65 67 65 72 73  rray of integers
97b0: 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 69 6e 74  ..*/.typedef int
97c0: 20 56 4c 69 73 74 3b 0a 0a 2f 2a 0a 2a 2a 20 44   VList;../*.** D
97d0: 65 66 65 72 20 73 6f 75 72 63 69 6e 67 20 76 64  efer sourcing vd
97e0: 62 65 2e 68 20 61 6e 64 20 62 74 72 65 65 2e 68  be.h and btree.h
97f0: 20 75 6e 74 69 6c 20 61 66 74 65 72 20 74 68 65   until after the
9800: 20 22 75 38 22 20 61 6e 64 0a 2a 2a 20 22 42 75   "u8" and.** "Bu
9810: 73 79 48 61 6e 64 6c 65 72 22 20 74 79 70 65 64  syHandler" typed
9820: 65 66 73 2e 20 76 64 62 65 2e 68 20 61 6c 73 6f  efs. vdbe.h also
9830: 20 72 65 71 75 69 72 65 73 20 61 20 66 65 77 20   requires a few 
9840: 6f 66 20 74 68 65 20 6f 70 61 71 75 65 0a 2a 2a  of the opaque.**
9850: 20 70 6f 69 6e 74 65 72 20 74 79 70 65 73 20 28   pointer types (
9860: 69 2e 65 2e 20 46 75 6e 63 44 65 66 29 20 64 65  i.e. FuncDef) de
9870: 66 69 6e 65 64 20 61 62 6f 76 65 2e 0a 2a 2f 0a  fined above..*/.
9880: 23 69 6e 63 6c 75 64 65 20 22 62 74 72 65 65 2e  #include "btree.
9890: 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 76 64 62  h".#include "vdb
98a0: 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70  e.h".#include "p
98b0: 61 67 65 72 2e 68 22 0a 23 69 6e 63 6c 75 64 65  ager.h".#include
98c0: 20 22 70 63 61 63 68 65 2e 68 22 0a 23 69 6e 63   "pcache.h".#inc
98d0: 6c 75 64 65 20 22 6f 73 2e 68 22 0a 23 69 6e 63  lude "os.h".#inc
98e0: 6c 75 64 65 20 22 6d 75 74 65 78 2e 68 22 0a 0a  lude "mutex.h"..
98f0: 2f 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 45 58  /* The SQLITE_EX
9900: 54 52 41 5f 44 55 52 41 42 4c 45 20 63 6f 6d 70  TRA_DURABLE comp
9910: 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20  ile-time option 
9920: 75 73 65 64 20 74 6f 20 73 65 74 20 74 68 65 20  used to set the 
9930: 64 65 66 61 75 6c 74 0a 2a 2a 20 73 79 6e 63 68  default.** synch
9940: 72 6f 6e 6f 75 73 20 73 65 74 74 69 6e 67 20 74  ronous setting t
9950: 6f 20 45 58 54 52 41 2e 20 20 49 74 20 69 73 20  o EXTRA.  It is 
9960: 6e 6f 20 6c 6f 6e 67 65 72 20 73 75 70 70 6f 72  no longer suppor
9970: 74 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ted..*/.#ifdef S
9980: 51 4c 49 54 45 5f 45 58 54 52 41 5f 44 55 52 41  QLITE_EXTRA_DURA
9990: 42 4c 45 0a 23 20 77 61 72 6e 69 6e 67 20 55 73  BLE.# warning Us
99a0: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
99b0: 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 3d 33 20 69  _SYNCHRONOUS=3 i
99c0: 6e 73 74 65 61 64 20 6f 66 20 53 51 4c 49 54 45  nstead of SQLITE
99d0: 5f 45 58 54 52 41 5f 44 55 52 41 42 4c 45 0a 23  _EXTRA_DURABLE.#
99e0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44   define SQLITE_D
99f0: 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f  EFAULT_SYNCHRONO
9a00: 55 53 20 33 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  US 3.#endif../*.
9a10: 2a 2a 20 44 65 66 61 75 6c 74 20 73 79 6e 63 68  ** Default synch
9a20: 72 6f 6e 6f 75 73 20 6c 65 76 65 6c 73 2e 0a 2a  ronous levels..*
9a30: 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 28  *.** Note that (
9a40: 66 6f 72 20 68 69 73 74 6f 72 63 61 6c 20 72 65  for historcal re
9a50: 61 73 6f 6e 73 29 20 74 68 65 20 50 41 47 45 52  asons) the PAGER
9a60: 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 5f 2a 20 6d  _SYNCHRONOUS_* m
9a70: 61 63 72 6f 73 20 64 69 66 66 65 72 0a 2a 2a 20  acros differ.** 
9a80: 66 72 6f 6d 20 74 68 65 20 53 51 4c 49 54 45 5f  from the SQLITE_
9a90: 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e  DEFAULT_SYNCHRON
9aa0: 4f 55 53 20 76 61 6c 75 65 20 62 79 20 31 2e 0a  OUS value by 1..
9ab0: 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  **.**           
9ac0: 50 41 47 45 52 5f 53 59 4e 43 48 52 4f 4e 4f 55  PAGER_SYNCHRONOU
9ad0: 53 20 20 20 20 20 20 20 44 45 46 41 55 4c 54 5f  S       DEFAULT_
9ae0: 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 2a 2a 20 20  SYNCHRONOUS.**  
9af0: 20 4f 46 46 20 20 20 20 20 20 20 20 20 20 20 31   OFF           1
9b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b10: 20 20 20 20 20 20 20 20 20 30 0a 2a 2a 20 20 20           0.**   
9b20: 4e 4f 52 4d 41 4c 20 20 20 20 20 20 20 20 32 20  NORMAL        2 
9b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b40: 20 20 20 20 20 20 20 20 31 0a 2a 2a 20 20 20 46          1.**   F
9b50: 55 4c 4c 20 20 20 20 20 20 20 20 20 20 33 20 20  ULL          3  
9b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b70: 20 20 20 20 20 20 20 32 0a 2a 2a 20 20 20 45 58         2.**   EX
9b80: 54 52 41 20 20 20 20 20 20 20 20 20 34 20 20 20  TRA         4   
9b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9ba0: 20 20 20 20 20 20 33 0a 2a 2a 0a 2a 2a 20 54 68        3.**.** Th
9bb0: 65 20 22 50 52 41 47 4d 41 20 73 79 6e 63 68 72  e "PRAGMA synchr
9bc0: 6f 6e 6f 75 73 22 20 73 74 61 74 65 6d 65 6e 74  onous" statement
9bd0: 20 61 6c 73 6f 20 75 73 65 73 20 74 68 65 20 7a   also uses the z
9be0: 65 72 6f 2d 62 61 73 65 64 20 6e 75 6d 62 65 72  ero-based number
9bf0: 73 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77  s..** In other w
9c00: 6f 72 64 73 2c 20 74 68 65 20 7a 65 72 6f 2d 62  ords, the zero-b
9c10: 61 73 65 64 20 6e 75 6d 62 65 72 73 20 61 72 65  ased numbers are
9c20: 20 75 73 65 64 20 66 6f 72 20 61 6c 6c 20 65 78   used for all ex
9c30: 74 65 72 6e 61 6c 20 69 6e 74 65 72 66 61 63 65  ternal interface
9c40: 73 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6f 6e 65  s.** and the one
9c50: 2d 62 61 73 65 64 20 76 61 6c 75 65 73 20 61 72  -based values ar
9c60: 65 20 75 73 65 64 20 69 6e 74 65 72 6e 61 6c 6c  e used internall
9c70: 79 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  y..*/.#ifndef SQ
9c80: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e  LITE_DEFAULT_SYN
9c90: 43 48 52 4f 4e 4f 55 53 0a 23 20 64 65 66 69 6e  CHRONOUS.# defin
9ca0: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
9cb0: 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 32 0a 23  _SYNCHRONOUS 2.#
9cc0: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
9cd0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 41 4c  LITE_DEFAULT_WAL
9ce0: 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 23 20 64  _SYNCHRONOUS.# d
9cf0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46  efine SQLITE_DEF
9d00: 41 55 4c 54 5f 57 41 4c 5f 53 59 4e 43 48 52 4f  AULT_WAL_SYNCHRO
9d10: 4e 4f 55 53 20 53 51 4c 49 54 45 5f 44 45 46 41  NOUS SQLITE_DEFA
9d20: 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a  ULT_SYNCHRONOUS.
9d30: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61  #endif../*.** Ea
9d40: 63 68 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ch database file
9d50: 20 74 6f 20 62 65 20 61 63 63 65 73 73 65 64 20   to be accessed 
9d60: 62 79 20 74 68 65 20 73 79 73 74 65 6d 20 69 73  by the system is
9d70: 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20   an instance.** 
9d80: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
9d90: 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 68 65   structure.  The
9da0: 72 65 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 20  re are normally 
9db0: 74 77 6f 20 6f 66 20 74 68 65 73 65 20 73 74 72  two of these str
9dc0: 75 63 74 75 72 65 73 0a 2a 2a 20 69 6e 20 74 68  uctures.** in th
9dd0: 65 20 73 71 6c 69 74 65 2e 61 44 62 5b 5d 20 61  e sqlite.aDb[] a
9de0: 72 72 61 79 2e 20 20 61 44 62 5b 30 5d 20 69 73  rray.  aDb[0] is
9df0: 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
9e00: 73 65 20 66 69 6c 65 20 61 6e 64 0a 2a 2a 20 61  se file and.** a
9e10: 44 62 5b 31 5d 20 69 73 20 74 68 65 20 64 61 74  Db[1] is the dat
9e20: 61 62 61 73 65 20 66 69 6c 65 20 75 73 65 64 20  abase file used 
9e30: 74 6f 20 68 6f 6c 64 20 74 65 6d 70 6f 72 61 72  to hold temporar
9e40: 79 20 74 61 62 6c 65 73 2e 20 20 41 64 64 69 74  y tables.  Addit
9e50: 69 6f 6e 61 6c 0a 2a 2a 20 64 61 74 61 62 61 73  ional.** databas
9e60: 65 73 20 6d 61 79 20 62 65 20 61 74 74 61 63 68  es may be attach
9e70: 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 44 62  ed..*/.struct Db
9e80: 20 7b 0a 20 20 63 68 61 72 20 2a 7a 44 62 53 4e   {.  char *zDbSN
9e90: 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d  ame;      /* Nam
9ea0: 65 20 6f 66 20 74 68 69 73 20 64 61 74 61 62 61  e of this databa
9eb0: 73 65 2e 20 28 73 63 68 65 6d 61 20 6e 61 6d 65  se. (schema name
9ec0: 2c 20 6e 6f 74 20 66 69 6c 65 6e 61 6d 65 29 20  , not filename) 
9ed0: 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b  */.  Btree *pBt;
9ee0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
9ef0: 20 42 2a 54 72 65 65 20 73 74 72 75 63 74 75 72   B*Tree structur
9f00: 65 20 66 6f 72 20 74 68 69 73 20 64 61 74 61 62  e for this datab
9f10: 61 73 65 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38  ase file */.  u8
9f20: 20 73 61 66 65 74 79 5f 6c 65 76 65 6c 3b 20 20   safety_level;  
9f30: 20 20 20 2f 2a 20 48 6f 77 20 61 67 67 72 65 73     /* How aggres
9f40: 73 69 76 65 20 61 74 20 73 79 6e 63 69 6e 67 20  sive at syncing 
9f50: 64 61 74 61 20 74 6f 20 64 69 73 6b 20 2a 2f 0a  data to disk */.
9f60: 20 20 75 38 20 62 53 79 6e 63 53 65 74 3b 20 20    u8 bSyncSet;  
9f70: 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
9f80: 66 20 22 50 52 41 47 4d 41 20 73 79 6e 63 68 72  f "PRAGMA synchr
9f90: 6f 6e 6f 75 73 3d 4e 22 20 68 61 73 20 62 65 65  onous=N" has bee
9fa0: 6e 20 72 75 6e 20 2a 2f 0a 20 20 53 63 68 65 6d  n run */.  Schem
9fb0: 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20  a *pSchema;     
9fc0: 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 64 61  /* Pointer to da
9fd0: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 28 70  tabase schema (p
9fe0: 6f 73 73 69 62 6c 79 20 73 68 61 72 65 64 29 20  ossibly shared) 
9ff0: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  */.};../*.** An 
a000: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
a010: 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
a020: 75 72 65 20 73 74 6f 72 65 73 20 61 20 64 61 74  ure stores a dat
a030: 61 62 61 73 65 20 73 63 68 65 6d 61 2e 0a 2a 2a  abase schema..**
a040: 0a 2a 2a 20 4d 6f 73 74 20 53 63 68 65 6d 61 20  .** Most Schema 
a050: 6f 62 6a 65 63 74 73 20 61 72 65 20 61 73 73 6f  objects are asso
a060: 63 69 61 74 65 64 20 77 69 74 68 20 61 20 42 74  ciated with a Bt
a070: 72 65 65 2e 20 20 54 68 65 20 65 78 63 65 70 74  ree.  The except
a080: 69 6f 6e 20 69 73 0a 2a 2a 20 74 68 65 20 53 63  ion is.** the Sc
a090: 68 65 6d 61 20 66 6f 72 20 74 68 65 20 54 45 4d  hema for the TEM
a0a0: 50 20 64 61 74 61 62 61 65 73 20 28 73 71 6c 69  P databaes (sqli
a0b0: 74 65 33 2e 61 44 62 5b 31 5d 29 20 77 68 69 63  te3.aDb[1]) whic
a0c0: 68 20 69 73 20 66 72 65 65 2d 73 74 61 6e 64 69  h is free-standi
a0d0: 6e 67 2e 0a 2a 2a 20 49 6e 20 73 68 61 72 65 64  ng..** In shared
a0e0: 20 63 61 63 68 65 20 6d 6f 64 65 2c 20 61 20 73   cache mode, a s
a0f0: 69 6e 67 6c 65 20 53 63 68 65 6d 61 20 6f 62 6a  ingle Schema obj
a100: 65 63 74 20 63 61 6e 20 62 65 20 73 68 61 72 65  ect can be share
a110: 64 20 62 79 20 6d 75 6c 74 69 70 6c 65 0a 2a 2a  d by multiple.**
a120: 20 42 74 72 65 65 73 20 74 68 61 74 20 72 65 66   Btrees that ref
a130: 65 72 20 74 6f 20 74 68 65 20 73 61 6d 65 20 75  er to the same u
a140: 6e 64 65 72 6c 79 69 6e 67 20 42 74 53 68 61 72  nderlying BtShar
a150: 65 64 20 6f 62 6a 65 63 74 2e 0a 2a 2a 0a 2a 2a  ed object..**.**
a160: 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 20   Schema objects 
a170: 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  are automaticall
a180: 79 20 64 65 61 6c 6c 6f 63 61 74 65 64 20 77 68  y deallocated wh
a190: 65 6e 20 74 68 65 20 6c 61 73 74 20 42 74 72 65  en the last Btre
a1a0: 65 20 74 68 61 74 0a 2a 2a 20 72 65 66 65 72 65  e that.** refere
a1b0: 6e 63 65 73 20 74 68 65 6d 20 69 73 20 64 65 73  nces them is des
a1c0: 74 72 6f 79 65 64 2e 20 20 20 54 68 65 20 54 45  troyed.   The TE
a1d0: 4d 50 20 53 63 68 65 6d 61 20 69 73 20 6d 61 6e  MP Schema is man
a1e0: 75 61 6c 6c 79 20 66 72 65 65 64 20 62 79 0a 2a  ually freed by.*
a1f0: 2a 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28  * sqlite3_close(
a200: 29 2e 0a 2a 0a 2a 2a 20 41 20 74 68 72 65 61 64  )..*.** A thread
a210: 20 6d 75 73 74 20 62 65 20 68 6f 6c 64 69 6e 67   must be holding
a220: 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68 65 20   a mutex on the 
a230: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 42 74  corresponding Bt
a240: 72 65 65 20 69 6e 20 6f 72 64 65 72 0a 2a 2a 20  ree in order.** 
a250: 74 6f 20 61 63 63 65 73 73 20 53 63 68 65 6d 61  to access Schema
a260: 20 63 6f 6e 74 65 6e 74 2e 20 20 54 68 69 73 20   content.  This 
a270: 69 6d 70 6c 69 65 73 20 74 68 61 74 20 74 68 65  implies that the
a280: 20 74 68 72 65 61 64 20 6d 75 73 74 20 61 6c 73   thread must als
a290: 6f 20 62 65 0a 2a 2a 20 68 6f 6c 64 69 6e 67 20  o be.** holding 
a2a0: 61 20 6d 75 74 65 78 20 6f 6e 20 74 68 65 20 73  a mutex on the s
a2b0: 71 6c 69 74 65 33 20 63 6f 6e 6e 65 63 74 69 6f  qlite3 connectio
a2c0: 6e 20 70 6f 69 6e 74 65 72 20 74 68 61 74 20 6f  n pointer that o
a2d0: 77 6e 73 20 74 68 65 20 42 74 72 65 65 2e 0a 2a  wns the Btree..*
a2e0: 2a 20 46 6f 72 20 61 20 54 45 4d 50 20 53 63 68  * For a TEMP Sch
a2f0: 65 6d 61 2c 20 6f 6e 6c 79 20 74 68 65 20 63 6f  ema, only the co
a300: 6e 6e 65 63 74 69 6f 6e 20 6d 75 74 65 78 20 69  nnection mutex i
a310: 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2f 0a 73  s required..*/.s
a320: 74 72 75 63 74 20 53 63 68 65 6d 61 20 7b 0a 20  truct Schema {. 
a330: 20 69 6e 74 20 73 63 68 65 6d 61 5f 63 6f 6f 6b   int schema_cook
a340: 69 65 3b 20 20 20 2f 2a 20 44 61 74 61 62 61 73  ie;   /* Databas
a350: 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e  e schema version
a360: 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 69 73   number for this
a370: 20 66 69 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 69   file */.  int i
a380: 47 65 6e 65 72 61 74 69 6f 6e 3b 20 20 20 20 20  Generation;     
a390: 2f 2a 20 47 65 6e 65 72 61 74 69 6f 6e 20 63 6f  /* Generation co
a3a0: 75 6e 74 65 72 2e 20 20 49 6e 63 72 65 6d 65 6e  unter.  Incremen
a3b0: 74 65 64 20 77 69 74 68 20 65 61 63 68 20 63 68  ted with each ch
a3c0: 61 6e 67 65 20 2a 2f 0a 20 20 48 61 73 68 20 74  ange */.  Hash t
a3d0: 62 6c 48 61 73 68 3b 20 20 20 20 20 20 20 20 2f  blHash;        /
a3e0: 2a 20 41 6c 6c 20 74 61 62 6c 65 73 20 69 6e 64  * All tables ind
a3f0: 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a  exed by name */.
a400: 20 20 48 61 73 68 20 69 64 78 48 61 73 68 3b 20    Hash idxHash; 
a410: 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 28 6e         /* All (n
a420: 61 6d 65 64 29 20 69 6e 64 69 63 65 73 20 69 6e  amed) indices in
a430: 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f  dexed by name */
a440: 0a 20 20 48 61 73 68 20 74 72 69 67 48 61 73 68  .  Hash trigHash
a450: 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 74  ;       /* All t
a460: 72 69 67 67 65 72 73 20 69 6e 64 65 78 65 64 20  riggers indexed 
a470: 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73  by name */.  Has
a480: 68 20 66 6b 65 79 48 61 73 68 3b 20 20 20 20 20  h fkeyHash;     
a490: 20 20 2f 2a 20 41 6c 6c 20 66 6f 72 65 69 67 6e    /* All foreign
a4a0: 20 6b 65 79 73 20 62 79 20 72 65 66 65 72 65 6e   keys by referen
a4b0: 63 65 64 20 74 61 62 6c 65 20 6e 61 6d 65 20 2a  ced table name *
a4c0: 2f 0a 20 20 54 61 62 6c 65 20 2a 70 53 65 71 54  /.  Table *pSeqT
a4d0: 61 62 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ab;      /* The 
a4e0: 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20  sqlite_sequence 
a4f0: 74 61 62 6c 65 20 75 73 65 64 20 62 79 20 41 55  table used by AU
a500: 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 20  TOINCREMENT */. 
a510: 20 75 38 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3b   u8 file_format;
a520: 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20        /* Schema 
a530: 66 6f 72 6d 61 74 20 76 65 72 73 69 6f 6e 20 66  format version f
a540: 6f 72 20 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a  or this file */.
a550: 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20    u8 enc;       
a560: 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65         /* Text e
a570: 6e 63 6f 64 69 6e 67 20 75 73 65 64 20 62 79 20  ncoding used by 
a580: 74 68 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f  this database */
a590: 0a 20 20 75 31 36 20 73 63 68 65 6d 61 46 6c 61  .  u16 schemaFla
a5a0: 67 73 3b 20 20 20 20 20 2f 2a 20 46 6c 61 67 73  gs;     /* Flags
a5b0: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
a5c0: 20 74 68 69 73 20 73 63 68 65 6d 61 20 2a 2f 0a   this schema */.
a5d0: 20 20 69 6e 74 20 63 61 63 68 65 5f 73 69 7a 65    int cache_size
a5e0: 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72  ;      /* Number
a5f0: 20 6f 66 20 70 61 67 65 73 20 74 6f 20 75 73 65   of pages to use
a600: 20 69 6e 20 74 68 65 20 63 61 63 68 65 20 2a 2f   in the cache */
a610: 0a 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20  ..  int nRef;   
a620: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
a630: 65 72 20 6f 66 20 63 6f 6e 6e 65 63 74 69 6f 6e  er of connection
a640: 73 20 75 73 69 6e 67 20 74 68 69 73 20 73 63 68  s using this sch
a650: 65 6d 61 20 2a 2f 0a 20 20 75 36 34 20 63 6b 73  ema */.  u64 cks
a660: 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  um;           /*
a670: 20 43 68 65 63 6b 73 75 6d 20 66 6f 72 20 74 68   Checksum for th
a680: 69 73 20 64 61 74 61 62 61 73 65 20 73 63 68 65  is database sche
a690: 6d 61 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a  ma */.  Schema *
a6a0: 70 4e 65 78 74 3b 20 20 20 20 20 20 20 2f 2a 20  pNext;       /* 
a6b0: 4e 65 78 74 20 73 63 68 65 6d 61 20 69 6e 20 73  Next schema in s
a6c0: 68 61 72 65 64 20 73 63 68 65 6d 61 20 6c 69 73  hared schema lis
a6d0: 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  t */.};../*.** T
a6e0: 68 65 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20  hese macros can 
a6f0: 62 65 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c  be used to test,
a700: 20 73 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62   set, or clear b
a710: 69 74 73 20 69 6e 20 74 68 65 0a 2a 2a 20 44 62  its in the.** Db
a720: 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20  .pSchema->flags 
a730: 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e  field..*/.#defin
a740: 65 20 44 62 48 61 73 50 72 6f 70 65 72 74 79 28  e DbHasProperty(
a750: 44 2c 49 2c 50 29 20 20 20 20 20 28 28 28 44 29  D,I,P)     (((D)
a760: 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61  ->aDb[I].pSchema
a770: 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 28 50  ->schemaFlags&(P
a780: 29 29 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65  ))==(P)).#define
a790: 20 44 62 48 61 73 41 6e 79 50 72 6f 70 65 72 74   DbHasAnyPropert
a7a0: 79 28 44 2c 49 2c 50 29 20 20 28 28 28 44 29 2d  y(D,I,P)  (((D)-
a7b0: 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d  >aDb[I].pSchema-
a7c0: 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 28 50 29  >schemaFlags&(P)
a7d0: 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 44 62  )!=0).#define Db
a7e0: 53 65 74 50 72 6f 70 65 72 74 79 28 44 2c 49 2c  SetProperty(D,I,
a7f0: 50 29 20 20 20 20 20 28 44 29 2d 3e 61 44 62 5b  P)     (D)->aDb[
a800: 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65  I].pSchema->sche
a810: 6d 61 46 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65  maFlags|=(P).#de
a820: 66 69 6e 65 20 44 62 43 6c 65 61 72 50 72 6f 70  fine DbClearProp
a830: 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 28 44  erty(D,I,P)   (D
a840: 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d  )->aDb[I].pSchem
a850: 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 3d  a->schemaFlags&=
a860: 7e 28 50 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  ~(P)../*.** Allo
a870: 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74  wed values for t
a880: 68 65 20 44 42 2e 70 53 63 68 65 6d 61 2d 3e 66  he DB.pSchema->f
a890: 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a  lags field..**.*
a8a0: 2a 20 54 68 65 20 44 42 5f 53 63 68 65 6d 61 4c  * The DB_SchemaL
a8b0: 6f 61 64 65 64 20 66 6c 61 67 20 69 73 20 73 65  oaded flag is se
a8c0: 74 20 61 66 74 65 72 20 74 68 65 20 64 61 74 61  t after the data
a8d0: 62 61 73 65 20 73 63 68 65 6d 61 20 68 61 73 20  base schema has 
a8e0: 62 65 65 6e 0a 2a 2a 20 72 65 61 64 20 69 6e 74  been.** read int
a8f0: 6f 20 69 6e 74 65 72 6e 61 6c 20 68 61 73 68 20  o internal hash 
a900: 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 44 42  tables..**.** DB
a910: 5f 55 6e 72 65 73 65 74 56 69 65 77 73 20 6d 65  _UnresetViews me
a920: 61 6e 73 20 74 68 61 74 20 6f 6e 65 20 6f 72 20  ans that one or 
a930: 6d 6f 72 65 20 76 69 65 77 73 20 68 61 76 65 20  more views have 
a940: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61  column names tha
a950: 74 0a 2a 2a 20 68 61 76 65 20 62 65 65 6e 20 66  t.** have been f
a960: 69 6c 6c 65 64 20 6f 75 74 2e 20 20 49 66 20 74  illed out.  If t
a970: 68 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65  he schema change
a980: 73 2c 20 74 68 65 73 65 20 63 6f 6c 75 6d 6e 20  s, these column 
a990: 6e 61 6d 65 73 20 6d 69 67 68 74 0a 2a 2a 20 63  names might.** c
a9a0: 68 61 6e 67 65 73 20 61 6e 64 20 73 6f 20 74 68  hanges and so th
a9b0: 65 20 76 69 65 77 20 77 69 6c 6c 20 6e 65 65 64  e view will need
a9c0: 20 74 6f 20 62 65 20 72 65 73 65 74 2e 0a 2a 2f   to be reset..*/
a9d0: 0a 23 64 65 66 69 6e 65 20 44 42 5f 53 63 68 65  .#define DB_Sche
a9e0: 6d 61 4c 6f 61 64 65 64 20 20 20 20 30 78 30 30  maLoaded    0x00
a9f0: 30 31 20 20 2f 2a 20 54 68 65 20 73 63 68 65 6d  01  /* The schem
aa00: 61 20 68 61 73 20 62 65 65 6e 20 6c 6f 61 64 65  a has been loade
aa10: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f  d */.#define DB_
aa20: 55 6e 72 65 73 65 74 56 69 65 77 73 20 20 20 20  UnresetViews    
aa30: 30 78 30 30 30 32 20 20 2f 2a 20 53 6f 6d 65 20  0x0002  /* Some 
aa40: 76 69 65 77 73 20 68 61 76 65 20 64 65 66 69 6e  views have defin
aa50: 65 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  ed column names 
aa60: 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 45 6d  */.#define DB_Em
aa70: 70 74 79 20 20 20 20 20 20 20 20 20 20 20 30 78  pty           0x
aa80: 30 30 30 34 20 20 2f 2a 20 54 68 65 20 66 69 6c  0004  /* The fil
aa90: 65 20 69 73 20 65 6d 70 74 79 20 28 6c 65 6e 67  e is empty (leng
aaa0: 74 68 20 30 20 62 79 74 65 73 29 20 2a 2f 0a 23  th 0 bytes) */.#
aab0: 64 65 66 69 6e 65 20 44 42 5f 52 65 73 65 74 57  define DB_ResetW
aac0: 61 6e 74 65 64 20 20 20 20 20 30 78 30 30 30 38  anted     0x0008
aad0: 20 20 2f 2a 20 52 65 73 65 74 20 74 68 65 20 73    /* Reset the s
aae0: 63 68 65 6d 61 20 77 68 65 6e 20 6e 53 63 68 65  chema when nSche
aaf0: 6d 61 4c 6f 63 6b 3d 3d 30 20 2a 2f 0a 0a 2f 2a  maLock==0 */../*
ab00: 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 20 6f  .** The number o
ab10: 66 20 64 69 66 66 65 72 65 6e 74 20 6b 69 6e 64  f different kind
ab20: 73 20 6f 66 20 74 68 69 6e 67 73 20 74 68 61 74  s of things that
ab30: 20 63 61 6e 20 62 65 20 6c 69 6d 69 74 65 64 0a   can be limited.
ab40: 2a 2a 20 75 73 69 6e 67 20 74 68 65 20 73 71 6c  ** using the sql
ab50: 69 74 65 33 5f 6c 69 6d 69 74 28 29 20 69 6e 74  ite3_limit() int
ab60: 65 72 66 61 63 65 2e 0a 2a 2f 0a 23 64 65 66 69  erface..*/.#defi
ab70: 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49  ne SQLITE_N_LIMI
ab80: 54 20 28 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  T (SQLITE_LIMIT_
ab90: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 2b 31  WORKER_THREADS+1
aba0: 29 0a 0a 2f 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69  )../*.** Lookasi
abb0: 64 65 20 6d 61 6c 6c 6f 63 20 69 73 20 61 20 73  de malloc is a s
abc0: 65 74 20 6f 66 20 66 69 78 65 64 2d 73 69 7a 65  et of fixed-size
abd0: 20 62 75 66 66 65 72 73 20 74 68 61 74 20 63 61   buffers that ca
abe0: 6e 20 62 65 20 75 73 65 64 0a 2a 2a 20 74 6f 20  n be used.** to 
abf0: 73 61 74 69 73 66 79 20 73 6d 61 6c 6c 20 74 72  satisfy small tr
ac00: 61 6e 73 69 65 6e 74 20 6d 65 6d 6f 72 79 20 61  ansient memory a
ac10: 6c 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75 65 73  llocation reques
ac20: 74 73 20 66 6f 72 20 6f 62 6a 65 63 74 73 0a 2a  ts for objects.*
ac30: 2a 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  * associated wit
ac40: 68 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 64  h a particular d
ac50: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
ac60: 6f 6e 2e 20 20 54 68 65 20 75 73 65 20 6f 66 0a  on.  The use of.
ac70: 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c  ** lookaside mal
ac80: 6c 6f 63 20 70 72 6f 76 69 64 65 73 20 61 20 73  loc provides a s
ac90: 69 67 6e 69 66 69 63 61 6e 74 20 70 65 72 66 6f  ignificant perfo
aca0: 72 6d 61 6e 63 65 20 65 6e 68 61 6e 63 65 6d 65  rmance enhanceme
acb0: 6e 74 0a 2a 2a 20 28 61 70 70 72 6f 78 20 31 30  nt.** (approx 10
acc0: 25 29 20 62 79 20 61 76 6f 69 64 69 6e 67 20 6e  %) by avoiding n
acd0: 75 6d 65 72 6f 75 73 20 6d 61 6c 6c 6f 63 2f 66  umerous malloc/f
ace0: 72 65 65 20 72 65 71 75 65 73 74 73 20 77 68 69  ree requests whi
acf0: 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20 53 51  le parsing.** SQ
ad00: 4c 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a  L statements..**
ad10: 0a 2a 2a 20 54 68 65 20 4c 6f 6f 6b 61 73 69 64  .** The Lookasid
ad20: 65 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64  e structure hold
ad30: 73 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  s configuration 
ad40: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
ad50: 74 20 74 68 65 0a 2a 2a 20 6c 6f 6f 6b 61 73 69  t the.** lookasi
ad60: 64 65 20 6d 61 6c 6c 6f 63 20 73 75 62 73 79 73  de malloc subsys
ad70: 74 65 6d 2e 20 20 45 61 63 68 20 61 76 61 69 6c  tem.  Each avail
ad80: 61 62 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  able memory allo
ad90: 63 61 74 69 6f 6e 20 69 6e 0a 2a 2a 20 74 68 65  cation in.** the
ada0: 20 6c 6f 6f 6b 61 73 69 64 65 20 73 75 62 73 79   lookaside subsy
adb0: 73 74 65 6d 20 69 73 20 73 74 6f 72 65 64 20 6f  stem is stored o
adc0: 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  n a linked list 
add0: 6f 66 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74  of LookasideSlot
ade0: 0a 2a 2a 20 6f 62 6a 65 63 74 73 2e 0a 2a 2a 0a  .** objects..**.
adf0: 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c  ** Lookaside all
ae00: 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 6f 6e 6c  ocations are onl
ae10: 79 20 61 6c 6c 6f 77 65 64 20 66 6f 72 20 6f 62  y allowed for ob
ae20: 6a 65 63 74 73 20 74 68 61 74 20 61 72 65 20 61  jects that are a
ae30: 73 73 6f 63 69 61 74 65 64 0a 2a 2a 20 77 69 74  ssociated.** wit
ae40: 68 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 64  h a particular d
ae50: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
ae60: 6f 6e 2e 20 20 48 65 6e 63 65 2c 20 73 63 68 65  on.  Hence, sche
ae70: 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 63  ma information c
ae80: 61 6e 6e 6f 74 0a 2a 2a 20 62 65 20 73 74 6f 72  annot.** be stor
ae90: 65 64 20 69 6e 20 6c 6f 6f 6b 61 73 69 64 65 20  ed in lookaside 
aea0: 62 65 63 61 75 73 65 20 69 6e 20 73 68 61 72 65  because in share
aeb0: 64 20 63 61 63 68 65 20 6d 6f 64 65 20 74 68 65  d cache mode the
aec0: 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74   schema informat
aed0: 69 6f 6e 0a 2a 2a 20 69 73 20 73 68 61 72 65 64  ion.** is shared
aee0: 20 62 79 20 6d 75 6c 74 69 70 6c 65 20 64 61 74   by multiple dat
aef0: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
af00: 73 2e 20 20 54 68 65 72 65 66 6f 72 65 2c 20 77  s.  Therefore, w
af10: 68 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20  hile parsing.** 
af20: 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69  schema informati
af30: 6f 6e 2c 20 74 68 65 20 4c 6f 6f 6b 61 73 69 64  on, the Lookasid
af40: 65 2e 62 45 6e 61 62 6c 65 64 20 66 6c 61 67 20  e.bEnabled flag 
af50: 69 73 20 63 6c 65 61 72 65 64 20 73 6f 20 74 68  is cleared so th
af60: 61 74 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20  at.** lookaside 
af70: 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20  allocations are 
af80: 6e 6f 74 20 75 73 65 64 20 74 6f 20 63 6f 6e 73  not used to cons
af90: 74 72 75 63 74 20 74 68 65 20 73 63 68 65 6d 61  truct the schema
afa0: 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a 73 74 72   objects..*/.str
afb0: 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 20 7b 0a  uct Lookaside {.
afc0: 20 20 75 33 32 20 62 44 69 73 61 62 6c 65 3b 20    u32 bDisable; 
afd0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 6c            /* Onl
afe0: 79 20 6f 70 65 72 61 74 65 20 74 68 65 20 6c 6f  y operate the lo
aff0: 6f 6b 61 73 69 64 65 20 77 68 65 6e 20 7a 65 72  okaside when zer
b000: 6f 20 2a 2f 0a 20 20 75 31 36 20 73 7a 3b 20 20  o */.  u16 sz;  
b010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b020: 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20 62  * Size of each b
b030: 75 66 66 65 72 20 69 6e 20 62 79 74 65 73 20 2a  uffer in bytes *
b040: 2f 0a 20 20 75 38 20 62 4d 61 6c 6c 6f 63 65 64  /.  u8 bMalloced
b050: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
b060: 72 75 65 20 69 66 20 70 53 74 61 72 74 20 6f 62  rue if pStart ob
b070: 74 61 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69  tained from sqli
b080: 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a  te3_malloc() */.
b090: 20 20 75 33 32 20 6e 53 6c 6f 74 3b 20 20 20 20    u32 nSlot;    
b0a0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
b0b0: 62 65 72 20 6f 66 20 6c 6f 6f 6b 61 73 69 64 65  ber of lookaside
b0c0: 20 73 6c 6f 74 73 20 61 6c 6c 6f 63 61 74 65 64   slots allocated
b0d0: 20 2a 2f 0a 20 20 75 33 32 20 61 6e 53 74 61 74   */.  u32 anStat
b0e0: 5b 33 5d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  [3];          /*
b0f0: 20 30 3a 20 68 69 74 73 2e 20 20 31 3a 20 73 69   0: hits.  1: si
b100: 7a 65 20 6d 69 73 73 65 73 2e 20 20 32 3a 20 66  ze misses.  2: f
b110: 75 6c 6c 20 6d 69 73 73 65 73 20 2a 2f 0a 20 20  ull misses */.  
b120: 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70  LookasideSlot *p
b130: 49 6e 69 74 3b 20 20 20 2f 2a 20 4c 69 73 74 20  Init;   /* List 
b140: 6f 66 20 62 75 66 66 65 72 73 20 6e 6f 74 20 70  of buffers not p
b150: 72 65 76 69 6f 75 73 6c 79 20 75 73 65 64 20 2a  reviously used *
b160: 2f 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f  /.  LookasideSlo
b170: 74 20 2a 70 46 72 65 65 3b 20 20 20 2f 2a 20 4c  t *pFree;   /* L
b180: 69 73 74 20 6f 66 20 61 76 61 69 6c 61 62 6c 65  ist of available
b190: 20 62 75 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f   buffers */.  vo
b1a0: 69 64 20 2a 70 53 74 61 72 74 3b 20 20 20 20 20  id *pStart;     
b1b0: 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62        /* First b
b1c0: 79 74 65 20 6f 66 20 61 76 61 69 6c 61 62 6c 65  yte of available
b1d0: 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 2a 2f   memory space */
b1e0: 0a 20 20 76 6f 69 64 20 2a 70 45 6e 64 3b 20 20  .  void *pEnd;  
b1f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69             /* Fi
b200: 72 73 74 20 62 79 74 65 20 70 61 73 74 20 65 6e  rst byte past en
b210: 64 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 73  d of available s
b220: 70 61 63 65 20 2a 2f 0a 7d 3b 0a 73 74 72 75 63  pace */.};.struc
b230: 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20  t LookasideSlot 
b240: 7b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f  {.  LookasideSlo
b250: 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 2f 2a 20  t *pNext;    /* 
b260: 4e 65 78 74 20 62 75 66 66 65 72 20 69 6e 20 74  Next buffer in t
b270: 68 65 20 6c 69 73 74 20 6f 66 20 66 72 65 65 20  he list of free 
b280: 62 75 66 66 65 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f  buffers */.};../
b290: 2a 0a 2a 2a 20 41 20 68 61 73 68 20 74 61 62 6c  *.** A hash tabl
b2a0: 65 20 66 6f 72 20 62 75 69 6c 74 2d 69 6e 20 66  e for built-in f
b2b0: 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69  unction definiti
b2c0: 6f 6e 73 2e 20 20 28 41 70 70 6c 69 63 61 74 69  ons.  (Applicati
b2d0: 6f 6e 2d 64 65 66 69 6e 65 64 0a 2a 2a 20 66 75  on-defined.** fu
b2e0: 6e 63 74 69 6f 6e 73 20 75 73 65 20 61 20 72 65  nctions use a re
b2f0: 67 75 6c 61 72 20 74 61 62 6c 65 20 74 61 62 6c  gular table tabl
b300: 65 20 66 72 6f 6d 20 68 61 73 68 2e 68 2e 29 0a  e from hash.h.).
b310: 2a 2a 0a 2a 2a 20 48 61 73 68 20 65 61 63 68 20  **.** Hash each 
b320: 46 75 6e 63 44 65 66 20 73 74 72 75 63 74 75 72  FuncDef structur
b330: 65 20 69 6e 74 6f 20 6f 6e 65 20 6f 66 20 74 68  e into one of th
b340: 65 20 46 75 6e 63 44 65 66 48 61 73 68 2e 61 5b  e FuncDefHash.a[
b350: 5d 20 73 6c 6f 74 73 2e 0a 2a 2a 20 43 6f 6c 6c  ] slots..** Coll
b360: 69 73 69 6f 6e 73 20 61 72 65 20 6f 6e 20 74 68  isions are on th
b370: 65 20 46 75 6e 63 44 65 66 2e 75 2e 70 48 61 73  e FuncDef.u.pHas
b380: 68 20 63 68 61 69 6e 2e 20 20 55 73 65 20 74 68  h chain.  Use th
b390: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41  e SQLITE_FUNC_HA
b3a0: 53 48 28 29 0a 2a 2a 20 6d 61 63 72 6f 20 74 6f  SH().** macro to
b3b0: 20 63 6f 6d 70 75 74 65 20 61 20 68 61 73 68 20   compute a hash 
b3c0: 6f 6e 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  on the function 
b3d0: 6e 61 6d 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  name..*/.#define
b3e0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53   SQLITE_FUNC_HAS
b3f0: 48 5f 53 5a 20 32 33 0a 73 74 72 75 63 74 20 46  H_SZ 23.struct F
b400: 75 6e 63 44 65 66 48 61 73 68 20 7b 0a 20 20 46  uncDefHash {.  F
b410: 75 6e 63 44 65 66 20 2a 61 5b 53 51 4c 49 54 45  uncDef *a[SQLITE
b420: 5f 46 55 4e 43 5f 48 41 53 48 5f 53 5a 5d 3b 20  _FUNC_HASH_SZ]; 
b430: 20 20 20 20 20 20 2f 2a 20 48 61 73 68 20 74 61        /* Hash ta
b440: 62 6c 65 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e  ble for function
b450: 73 20 2a 2f 0a 7d 3b 0a 23 64 65 66 69 6e 65 20  s */.};.#define 
b460: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48  SQLITE_FUNC_HASH
b470: 28 43 2c 4c 29 20 28 28 28 43 29 2b 28 4c 29 29  (C,L) (((C)+(L))
b480: 25 53 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53  %SQLITE_FUNC_HAS
b490: 48 5f 53 5a 29 0a 0a 23 69 66 64 65 66 20 53 51  H_SZ)..#ifdef SQ
b4a0: 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e  LITE_USER_AUTHEN
b4b0: 54 49 43 41 54 49 4f 4e 0a 2f 2a 0a 2a 2a 20 49  TICATION./*.** I
b4c0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 68 65 6c 64 20  nformation held 
b4d0: 69 6e 20 74 68 65 20 22 73 71 6c 69 74 65 33 22  in the "sqlite3"
b4e0: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
b4f0: 74 69 6f 6e 20 6f 62 6a 65 63 74 20 61 6e 64 20  tion object and 
b500: 75 73 65 64 0a 2a 2a 20 74 6f 20 6d 61 6e 61 67  used.** to manag
b510: 65 20 75 73 65 72 20 61 75 74 68 65 6e 74 69 63  e user authentic
b520: 61 74 69 6f 6e 2e 0a 2a 2f 0a 74 79 70 65 64 65  ation..*/.typede
b530: 66 20 73 74 72 75 63 74 20 73 71 6c 69 74 65 33  f struct sqlite3
b540: 5f 75 73 65 72 61 75 74 68 20 73 71 6c 69 74 65  _userauth sqlite
b550: 33 5f 75 73 65 72 61 75 74 68 3b 0a 73 74 72 75  3_userauth;.stru
b560: 63 74 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61  ct sqlite3_usera
b570: 75 74 68 20 7b 0a 20 20 75 38 20 61 75 74 68 4c  uth {.  u8 authL
b580: 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20  evel;           
b590: 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74        /* Current
b5a0: 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20   authentication 
b5b0: 6c 65 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 6e  level */.  int n
b5c0: 41 75 74 68 50 57 3b 20 20 20 20 20 20 20 20 20  AuthPW;         
b5d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
b5e0: 20 6f 66 20 74 68 65 20 7a 41 75 74 68 50 57 20   of the zAuthPW 
b5f0: 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 63 68  in bytes */.  ch
b600: 61 72 20 2a 7a 41 75 74 68 50 57 3b 20 20 20 20  ar *zAuthPW;    
b610: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
b620: 61 73 73 77 6f 72 64 20 75 73 65 64 20 74 6f 20  assword used to 
b630: 61 75 74 68 65 6e 74 69 63 61 74 65 20 2a 2f 0a  authenticate */.
b640: 20 20 63 68 61 72 20 2a 7a 41 75 74 68 55 73 65    char *zAuthUse
b650: 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
b660: 2f 2a 20 55 73 65 72 20 6e 61 6d 65 20 75 73 65  /* User name use
b670: 64 20 74 6f 20 61 75 74 68 65 6e 74 69 63 61 74  d to authenticat
b680: 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f  e */.};../* Allo
b690: 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 73  wed values for s
b6a0: 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68 2e  qlite3_userauth.
b6b0: 61 75 74 68 4c 65 76 65 6c 20 2a 2f 0a 23 64 65  authLevel */.#de
b6c0: 66 69 6e 65 20 55 41 55 54 48 5f 55 6e 6b 6e 6f  fine UAUTH_Unkno
b6d0: 77 6e 20 20 20 20 20 30 20 20 20 20 20 2f 2a 20  wn     0     /* 
b6e0: 41 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 6e  Authentication n
b6f0: 6f 74 20 79 65 74 20 63 68 65 63 6b 65 64 20 2a  ot yet checked *
b700: 2f 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f  /.#define UAUTH_
b710: 46 61 69 6c 20 20 20 20 20 20 20 20 31 20 20 20  Fail        1   
b720: 20 20 2f 2a 20 55 73 65 72 20 61 75 74 68 65 6e    /* User authen
b730: 74 69 63 61 74 69 6f 6e 20 66 61 69 6c 65 64 20  tication failed 
b740: 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48  */.#define UAUTH
b750: 5f 55 73 65 72 20 20 20 20 20 20 20 20 32 20 20  _User        2  
b760: 20 20 20 2f 2a 20 41 75 74 68 65 6e 74 69 63 61     /* Authentica
b770: 74 65 64 20 61 73 20 61 20 6e 6f 72 6d 61 6c 20  ted as a normal 
b780: 75 73 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  user */.#define 
b790: 55 41 55 54 48 5f 41 64 6d 69 6e 20 20 20 20 20  UAUTH_Admin     
b7a0: 20 20 33 20 20 20 20 20 2f 2a 20 41 75 74 68 65    3     /* Authe
b7b0: 6e 74 69 63 61 74 65 64 20 61 73 20 61 6e 20 61  nticated as an a
b7c0: 64 6d 69 6e 69 73 74 72 61 74 6f 72 20 2a 2f 0a  dministrator */.
b7d0: 0a 2f 2a 20 46 75 6e 63 74 69 6f 6e 73 20 75 73  ./* Functions us
b7e0: 65 64 20 6f 6e 6c 79 20 62 79 20 75 73 65 72 20  ed only by user 
b7f0: 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 6c 6f  authorization lo
b800: 67 69 63 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  gic */.int sqlit
b810: 65 33 55 73 65 72 41 75 74 68 54 61 62 6c 65 28  e3UserAuthTable(
b820: 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e  const char*);.in
b830: 74 20 73 71 6c 69 74 65 33 55 73 65 72 41 75 74  t sqlite3UserAut
b840: 68 43 68 65 63 6b 4c 6f 67 69 6e 28 73 71 6c 69  hCheckLogin(sqli
b850: 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
b860: 2c 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,u8*);.void sqli
b870: 74 65 33 55 73 65 72 41 75 74 68 49 6e 69 74 28  te3UserAuthInit(
b880: 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20  sqlite3*);.void 
b890: 73 71 6c 69 74 65 33 43 72 79 70 74 46 75 6e 63  sqlite3CryptFunc
b8a0: 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
b8b0: 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61  *,int,sqlite3_va
b8c0: 6c 75 65 2a 2a 29 3b 0a 0a 23 65 6e 64 69 66 20  lue**);..#endif 
b8d0: 2f 2a 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41  /* SQLITE_USER_A
b8e0: 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 20 2a 2f  UTHENTICATION */
b8f0: 0a 0a 2f 2a 0a 2a 2a 20 74 79 70 65 64 65 66 20  ../*.** typedef 
b900: 66 6f 72 20 74 68 65 20 61 75 74 68 6f 72 69 7a  for the authoriz
b910: 61 74 69 6f 6e 20 63 61 6c 6c 62 61 63 6b 20 66  ation callback f
b920: 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 64  unction..*/.#ifd
b930: 65 66 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41  ef SQLITE_USER_A
b940: 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20  UTHENTICATION.  
b950: 74 79 70 65 64 65 66 20 69 6e 74 20 28 2a 73 71  typedef int (*sq
b960: 6c 69 74 65 33 5f 78 61 75 74 68 29 28 76 6f 69  lite3_xauth)(voi
b970: 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61  d*,int,const cha
b980: 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  r*,const char*,c
b990: 6f 6e 73 74 20 63 68 61 72 2a 2c 0a 20 20 20 20  onst char*,.    
b9a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b9b0: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74             const
b9c0: 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
b9d0: 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 74 79  ar*);.#else.  ty
b9e0: 70 65 64 65 66 20 69 6e 74 20 28 2a 73 71 6c 69  pedef int (*sqli
b9f0: 74 65 33 5f 78 61 75 74 68 29 28 76 6f 69 64 2a  te3_xauth)(void*
ba00: 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
ba10: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e  ,const char*,con
ba20: 73 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 20  st char*,.      
ba30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ba40: 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63           const c
ba50: 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  har*);.#endif..#
ba60: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
ba70: 49 54 5f 44 45 50 52 45 43 41 54 45 44 0a 2f 2a  IT_DEPRECATED./*
ba80: 20 54 68 69 73 20 69 73 20 61 6e 20 65 78 74 72   This is an extr
ba90: 61 20 53 51 4c 49 54 45 5f 54 52 41 43 45 20 6d  a SQLITE_TRACE m
baa0: 61 63 72 6f 20 74 68 61 74 20 69 6e 64 69 63 61  acro that indica
bab0: 74 65 73 20 22 6c 65 67 61 63 79 22 20 74 72 61  tes "legacy" tra
bac0: 63 69 6e 67 0a 2a 2a 20 69 6e 20 74 68 65 20 73  cing.** in the s
bad0: 74 79 6c 65 20 6f 66 20 73 71 6c 69 74 65 33 5f  tyle of sqlite3_
bae0: 74 72 61 63 65 28 29 0a 2a 2f 0a 23 64 65 66 69  trace().*/.#defi
baf0: 6e 65 20 53 51 4c 49 54 45 5f 54 52 41 43 45 5f  ne SQLITE_TRACE_
bb00: 4c 45 47 41 43 59 20 20 30 78 38 30 0a 23 65 6c  LEGACY  0x80.#el
bb10: 73 65 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  se.#define SQLIT
bb20: 45 5f 54 52 41 43 45 5f 4c 45 47 41 43 59 20 20  E_TRACE_LEGACY  
bb30: 30 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  0.#endif /* SQLI
bb40: 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54  TE_OMIT_DEPRECAT
bb50: 45 44 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61  ED */.../*.** Ea
bb60: 63 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ch database conn
bb70: 65 63 74 69 6f 6e 20 69 73 20 61 6e 20 69 6e 73  ection is an ins
bb80: 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
bb90: 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
bba0: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 73 71 6c 69  ..*/.struct sqli
bbb0: 74 65 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  te3 {.  sqlite3_
bbc0: 76 66 73 20 2a 70 56 66 73 3b 20 20 20 20 20 20  vfs *pVfs;      
bbd0: 20 20 20 20 20 20 2f 2a 20 4f 53 20 49 6e 74 65        /* OS Inte
bbe0: 72 66 61 63 65 20 2a 2f 0a 20 20 73 74 72 75 63  rface */.  struc
bbf0: 74 20 56 64 62 65 20 2a 70 56 64 62 65 3b 20 20  t Vdbe *pVdbe;  
bc00: 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74           /* List
bc10: 20 6f 66 20 61 63 74 69 76 65 20 76 69 72 74 75   of active virtu
bc20: 61 6c 20 6d 61 63 68 69 6e 65 73 20 2a 2f 0a 20  al machines */. 
bc30: 20 43 6f 6c 6c 53 65 71 20 2a 70 44 66 6c 74 43   CollSeq *pDfltC
bc40: 6f 6c 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f  oll;           /
bc50: 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20 63 6f  * The default co
bc60: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
bc70: 20 28 42 49 4e 41 52 59 29 20 2a 2f 0a 20 20 73   (BINARY) */.  s
bc80: 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 6d 75  qlite3_mutex *mu
bc90: 74 65 78 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  tex;         /* 
bca0: 43 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74 65 78  Connection mutex
bcb0: 20 2a 2f 0a 20 20 44 62 20 2a 61 44 62 3b 20 20   */.  Db *aDb;  
bcc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bcd0: 20 20 20 20 2f 2a 20 41 6c 6c 20 62 61 63 6b 65      /* All backe
bce0: 6e 64 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 44 62  nds */.  int nDb
bcf0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
bd00: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
bd10: 20 6f 66 20 62 61 63 6b 65 6e 64 73 20 63 75 72   of backends cur
bd20: 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a 2f  rently in use */
bd30: 0a 20 20 75 33 32 20 6d 44 62 46 6c 61 67 73 3b  .  u32 mDbFlags;
bd40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bd50: 20 2f 2a 20 66 6c 61 67 73 20 72 65 63 6f 72 64   /* flags record
bd60: 69 6e 67 20 69 6e 74 65 72 6e 61 6c 20 73 74 61  ing internal sta
bd70: 74 65 20 2a 2f 0a 20 20 75 36 34 20 66 6c 61 67  te */.  u64 flag
bd80: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
bd90: 20 20 20 20 20 20 2f 2a 20 66 6c 61 67 73 20 73        /* flags s
bda0: 65 74 74 61 62 6c 65 20 62 79 20 70 72 61 67 6d  ettable by pragm
bdb0: 61 73 2e 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f  as. See below */
bdc0: 0a 20 20 69 36 34 20 6c 61 73 74 52 6f 77 69 64  .  i64 lastRowid
bdd0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
bde0: 20 2f 2a 20 52 4f 57 49 44 20 6f 66 20 6d 6f 73   /* ROWID of mos
bdf0: 74 20 72 65 63 65 6e 74 20 69 6e 73 65 72 74 20  t recent insert 
be00: 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 20  (see above) */. 
be10: 20 69 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20   i64 szMmap;    
be20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
be30: 2a 20 44 65 66 61 75 6c 74 20 6d 6d 61 70 5f 73  * Default mmap_s
be40: 69 7a 65 20 73 65 74 74 69 6e 67 20 2a 2f 0a 20  ize setting */. 
be50: 20 75 33 32 20 6e 53 63 68 65 6d 61 4c 6f 63 6b   u32 nSchemaLock
be60: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
be70: 2a 20 44 6f 20 6e 6f 74 20 72 65 73 65 74 20 74  * Do not reset t
be80: 68 65 20 73 63 68 65 6d 61 20 77 68 65 6e 20 6e  he schema when n
be90: 6f 6e 2d 7a 65 72 6f 20 2a 2f 0a 20 20 75 6e 73  on-zero */.  uns
bea0: 69 67 6e 65 64 20 69 6e 74 20 6f 70 65 6e 46 6c  igned int openFl
beb0: 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 46 6c  ags;       /* Fl
bec0: 61 67 73 20 70 61 73 73 65 64 20 74 6f 20 73 71  ags passed to sq
bed0: 6c 69 74 65 33 5f 76 66 73 2e 78 4f 70 65 6e 28  lite3_vfs.xOpen(
bee0: 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 43 6f  ) */.  int errCo
bef0: 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  de;             
bf00: 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63       /* Most rec
bf10: 65 6e 74 20 65 72 72 6f 72 20 63 6f 64 65 20 28  ent error code (
bf20: 53 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20 20 69  SQLITE_*) */.  i
bf30: 6e 74 20 65 72 72 4d 61 73 6b 3b 20 20 20 20 20  nt errMask;     
bf40: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
bf50: 26 20 72 65 73 75 6c 74 20 63 6f 64 65 73 20 77  & result codes w
bf60: 69 74 68 20 74 68 69 73 20 62 65 66 6f 72 65 20  ith this before 
bf70: 72 65 74 75 72 6e 69 6e 67 20 2a 2f 0a 20 20 69  returning */.  i
bf80: 6e 74 20 69 53 79 73 45 72 72 6e 6f 3b 20 20 20  nt iSysErrno;   
bf90: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
bfa0: 45 72 72 6e 6f 20 76 61 6c 75 65 20 66 72 6f 6d  Errno value from
bfb0: 20 6c 61 73 74 20 73 79 73 74 65 6d 20 65 72 72   last system err
bfc0: 6f 72 20 2a 2f 0a 20 20 75 31 36 20 64 62 4f 70  or */.  u16 dbOp
bfd0: 74 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20  tFlags;         
bfe0: 20 20 20 20 20 20 2f 2a 20 46 6c 61 67 73 20 74        /* Flags t
bff0: 6f 20 65 6e 61 62 6c 65 2f 64 69 73 61 62 6c 65  o enable/disable
c000: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 2a   optimizations *
c010: 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20  /.  u8 enc;     
c020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c030: 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69    /* Text encodi
c040: 6e 67 20 2a 2f 0a 20 20 75 38 20 61 75 74 6f 43  ng */.  u8 autoC
c050: 6f 6d 6d 69 74 3b 20 20 20 20 20 20 20 20 20 20  ommit;          
c060: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 75 74        /* The aut
c070: 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 2e 20 2a  o-commit flag. *
c080: 2f 0a 20 20 75 38 20 74 65 6d 70 5f 73 74 6f 72  /.  u8 temp_stor
c090: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
c0a0: 20 20 2f 2a 20 31 3a 20 66 69 6c 65 20 32 3a 20    /* 1: file 2: 
c0b0: 6d 65 6d 6f 72 79 20 30 3a 20 64 65 66 61 75 6c  memory 0: defaul
c0c0: 74 20 2a 2f 0a 20 20 75 38 20 6d 61 6c 6c 6f 63  t */.  u8 malloc
c0d0: 46 61 69 6c 65 64 3b 20 20 20 20 20 20 20 20 20  Failed;         
c0e0: 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
c0f0: 77 65 20 68 61 76 65 20 73 65 65 6e 20 61 20 6d  we have seen a m
c100: 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 20 2a 2f  alloc failure */
c110: 0a 20 20 75 38 20 62 42 65 6e 69 67 6e 4d 61 6c  .  u8 bBenignMal
c120: 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  loc;            
c130: 20 2f 2a 20 44 6f 20 6e 6f 74 20 72 65 71 75 69   /* Do not requi
c140: 72 65 20 4f 4f 4d 73 20 69 66 20 74 72 75 65 20  re OOMs if true 
c150: 2a 2f 0a 20 20 75 38 20 64 66 6c 74 4c 6f 63 6b  */.  u8 dfltLock
c160: 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20  Mode;           
c170: 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f     /* Default lo
c180: 63 6b 69 6e 67 2d 6d 6f 64 65 20 66 6f 72 20 61  cking-mode for a
c190: 74 74 61 63 68 65 64 20 64 62 73 20 2a 2f 0a 20  ttached dbs */. 
c1a0: 20 73 69 67 6e 65 64 20 63 68 61 72 20 6e 65 78   signed char nex
c1b0: 74 41 75 74 6f 76 61 63 3b 20 20 20 20 20 20 2f  tAutovac;      /
c1c0: 2a 20 41 75 74 6f 76 61 63 20 73 65 74 74 69 6e  * Autovac settin
c1d0: 67 20 61 66 74 65 72 20 56 41 43 55 55 4d 20 69  g after VACUUM i
c1e0: 66 20 3e 3d 30 20 2a 2f 0a 20 20 75 38 20 73 75  f >=0 */.  u8 su
c1f0: 70 70 72 65 73 73 45 72 72 3b 20 20 20 20 20 20  ppressErr;      
c200: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e           /* Do n
c210: 6f 74 20 69 73 73 75 65 20 65 72 72 6f 72 20 6d  ot issue error m
c220: 65 73 73 61 67 65 73 20 69 66 20 74 72 75 65 20  essages if true 
c230: 2a 2f 0a 20 20 75 38 20 76 74 61 62 4f 6e 43 6f  */.  u8 vtabOnCo
c240: 6e 66 6c 69 63 74 3b 20 20 20 20 20 20 20 20 20  nflict;         
c250: 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72     /* Value to r
c260: 65 74 75 72 6e 20 66 6f 72 20 73 33 5f 76 74 61  eturn for s3_vta
c270: 62 5f 6f 6e 5f 63 6f 6e 66 6c 69 63 74 28 29 20  b_on_conflict() 
c280: 2a 2f 0a 20 20 75 38 20 69 73 54 72 61 6e 73 61  */.  u8 isTransa
c290: 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 20  ctionSavepoint; 
c2a0: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68     /* True if th
c2b0: 65 20 6f 75 74 65 72 6d 6f 73 74 20 73 61 76 65  e outermost save
c2c0: 70 6f 69 6e 74 20 69 73 20 61 20 54 53 20 2a 2f  point is a TS */
c2d0: 0a 20 20 75 38 20 6d 54 72 61 63 65 3b 20 20 20  .  u8 mTrace;   
c2e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c2f0: 20 2f 2a 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65   /* zero or more
c300: 20 53 51 4c 49 54 45 5f 54 52 41 43 45 20 66 6c   SQLITE_TRACE fl
c310: 61 67 73 20 2a 2f 0a 20 20 75 38 20 6e 6f 53 68  ags */.  u8 noSh
c320: 61 72 65 64 43 61 63 68 65 3b 20 20 20 20 20 20  aredCache;      
c330: 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
c340: 66 20 6e 6f 20 73 68 61 72 65 64 2d 63 61 63 68  f no shared-cach
c350: 65 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20  e backends */.  
c360: 75 38 20 6e 53 71 6c 45 78 65 63 3b 20 20 20 20  u8 nSqlExec;    
c370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c380: 20 4e 75 6d 62 65 72 20 6f 66 20 70 65 6e 64 69   Number of pendi
c390: 6e 67 20 4f 50 5f 53 71 6c 45 78 65 63 20 6f 70  ng OP_SqlExec op
c3a0: 63 6f 64 65 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  codes */.  int n
c3b0: 65 78 74 50 61 67 65 73 69 7a 65 3b 20 20 20 20  extPagesize;    
c3c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65           /* Page
c3d0: 73 69 7a 65 20 61 66 74 65 72 20 56 41 43 55 55  size after VACUU
c3e0: 4d 20 69 66 20 3e 30 20 2a 2f 0a 20 20 75 33 32  M if >0 */.  u32
c3f0: 20 6d 61 67 69 63 3b 20 20 20 20 20 20 20 20 20   magic;         
c400: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61             /* Ma
c410: 67 69 63 20 6e 75 6d 62 65 72 20 66 6f 72 20 64  gic number for d
c420: 65 74 65 63 74 20 6c 69 62 72 61 72 79 20 6d 69  etect library mi
c430: 73 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 43  suse */.  int nC
c440: 68 61 6e 67 65 3b 20 20 20 20 20 20 20 20 20 20  hange;          
c450: 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
c460: 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c   returned by sql
c470: 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29 20 2a  ite3_changes() *
c480: 2f 0a 20 20 69 6e 74 20 6e 54 6f 74 61 6c 43 68  /.  int nTotalCh
c490: 61 6e 67 65 3b 20 20 20 20 20 20 20 20 20 20 20  ange;           
c4a0: 20 20 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72    /* Value retur
c4b0: 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 74  ned by sqlite3_t
c4c0: 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28 29 20 2a  otal_changes() *
c4d0: 2f 0a 20 20 69 6e 74 20 61 4c 69 6d 69 74 5b 53  /.  int aLimit[S
c4e0: 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 5d 3b 20  QLITE_N_LIMIT]; 
c4f0: 20 20 2f 2a 20 4c 69 6d 69 74 73 20 2a 2f 0a 20    /* Limits */. 
c500: 20 69 6e 74 20 6e 4d 61 78 53 6f 72 74 65 72 4d   int nMaxSorterM
c510: 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 2f  map;           /
c520: 2a 20 4d 61 78 69 6d 75 6d 20 73 69 7a 65 20 6f  * Maximum size o
c530: 66 20 72 65 67 69 6f 6e 73 20 6d 61 70 70 65 64  f regions mapped
c540: 20 62 79 20 73 6f 72 74 65 72 20 2a 2f 0a 20 20   by sorter */.  
c550: 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 49 6e  struct sqlite3In
c560: 69 74 49 6e 66 6f 20 7b 20 20 20 20 20 20 2f 2a  itInfo {      /*
c570: 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65   Information use
c580: 64 20 64 75 72 69 6e 67 20 69 6e 69 74 69 61 6c  d during initial
c590: 69 7a 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69  ization */.    i
c5a0: 6e 74 20 6e 65 77 54 6e 75 6d 3b 20 20 20 20 20  nt newTnum;     
c5b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f             /* Ro
c5c0: 6f 74 70 61 67 65 20 6f 66 20 74 61 62 6c 65 20  otpage of table 
c5d0: 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65  being initialize
c5e0: 64 20 2a 2f 0a 20 20 20 20 75 38 20 69 44 62 3b  d */.    u8 iDb;
c5f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c600: 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 64 62       /* Which db
c610: 20 66 69 6c 65 20 69 73 20 62 65 69 6e 67 20 69   file is being i
c620: 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20  nitialized */.  
c630: 20 20 75 38 20 62 75 73 79 3b 20 20 20 20 20 20    u8 busy;      
c640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c650: 20 54 52 55 45 20 69 66 20 63 75 72 72 65 6e 74   TRUE if current
c660: 6c 79 20 69 6e 69 74 69 61 6c 69 7a 69 6e 67 20  ly initializing 
c670: 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20  */.    unsigned 
c680: 6f 72 70 68 61 6e 54 72 69 67 67 65 72 20 3a 20  orphanTrigger : 
c690: 31 3b 20 2f 2a 20 4c 61 73 74 20 73 74 61 74 65  1; /* Last state
c6a0: 6d 65 6e 74 20 69 73 20 6f 72 70 68 61 6e 65 64  ment is orphaned
c6b0: 20 54 45 4d 50 20 74 72 69 67 67 65 72 20 2a 2f   TEMP trigger */
c6c0: 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 6d  .    unsigned im
c6d0: 70 6f 73 74 65 72 54 61 62 6c 65 20 3a 20 31 3b  posterTable : 1;
c6e0: 20 2f 2a 20 42 75 69 6c 64 69 6e 67 20 61 6e 20   /* Building an 
c6f0: 69 6d 70 6f 73 74 65 72 20 74 61 62 6c 65 20 2a  imposter table *
c700: 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 72  /.    unsigned r
c710: 65 6f 70 65 6e 4d 65 6d 64 62 20 3a 20 31 3b 20  eopenMemdb : 1; 
c720: 20 20 2f 2a 20 41 54 54 41 43 48 20 69 73 20 72    /* ATTACH is r
c730: 65 61 6c 6c 79 20 61 20 72 65 6f 70 65 6e 20 75  eally a reopen u
c740: 73 69 6e 67 20 4d 65 6d 44 42 20 2a 2f 0a 20 20  sing MemDB */.  
c750: 7d 20 69 6e 69 74 3b 0a 20 20 69 6e 74 20 6e 56  } init;.  int nV
c760: 64 62 65 41 63 74 69 76 65 3b 20 20 20 20 20 20  dbeActive;      
c770: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
c780: 72 20 6f 66 20 56 44 42 45 73 20 63 75 72 72 65  r of VDBEs curre
c790: 6e 74 6c 79 20 72 75 6e 6e 69 6e 67 20 2a 2f 0a  ntly running */.
c7a0: 20 20 69 6e 74 20 6e 56 64 62 65 52 65 61 64 3b    int nVdbeRead;
c7b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c7c0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74  /* Number of act
c7d0: 69 76 65 20 56 44 42 45 73 20 74 68 61 74 20 72  ive VDBEs that r
c7e0: 65 61 64 20 6f 72 20 77 72 69 74 65 20 2a 2f 0a  ead or write */.
c7f0: 20 20 69 6e 74 20 6e 56 64 62 65 57 72 69 74 65    int nVdbeWrite
c800: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
c810: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74  /* Number of act
c820: 69 76 65 20 56 44 42 45 73 20 74 68 61 74 20 72  ive VDBEs that r
c830: 65 61 64 20 61 6e 64 20 77 72 69 74 65 20 2a 2f  ead and write */
c840: 0a 20 20 69 6e 74 20 6e 56 64 62 65 45 78 65 63  .  int nVdbeExec
c850: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
c860: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65   /* Number of ne
c870: 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20 56 64  sted calls to Vd
c880: 62 65 45 78 65 63 28 29 20 2a 2f 0a 20 20 69 6e  beExec() */.  in
c890: 74 20 6e 56 44 65 73 74 72 6f 79 3b 20 20 20 20  t nVDestroy;    
c8a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
c8b0: 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65 20  umber of active 
c8c0: 4f 50 5f 56 44 65 73 74 72 6f 79 20 6f 70 65 72  OP_VDestroy oper
c8d0: 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20  ations */.  int 
c8e0: 6e 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20  nExtension;     
c8f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
c900: 62 65 72 20 6f 66 20 6c 6f 61 64 65 64 20 65 78  ber of loaded ex
c910: 74 65 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20 76 6f  tensions */.  vo
c920: 69 64 20 2a 2a 61 45 78 74 65 6e 73 69 6f 6e 3b  id **aExtension;
c930: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
c940: 72 72 61 79 20 6f 66 20 73 68 61 72 65 64 20 6c  rray of shared l
c950: 69 62 72 61 72 79 20 68 61 6e 64 6c 65 73 20 2a  ibrary handles *
c960: 2f 0a 20 20 69 6e 74 20 28 2a 78 54 72 61 63 65  /.  int (*xTrace
c970: 29 28 75 33 32 2c 76 6f 69 64 2a 2c 76 6f 69 64  )(u32,void*,void
c980: 2a 2c 76 6f 69 64 2a 29 3b 20 20 20 20 20 2f 2a  *,void*);     /*
c990: 20 54 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20   Trace function 
c9a0: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 54 72 61 63  */.  void *pTrac
c9b0: 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  eArg;           
c9c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c9d0: 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  * Argument to th
c9e0: 65 20 74 72 61 63 65 20 66 75 6e 63 74 69 6f 6e  e trace function
c9f0: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 50 72   */.  void (*xPr
ca00: 6f 66 69 6c 65 29 28 76 6f 69 64 2a 2c 63 6f 6e  ofile)(void*,con
ca10: 73 74 20 63 68 61 72 2a 2c 75 36 34 29 3b 20 20  st char*,u64);  
ca20: 2f 2a 20 50 72 6f 66 69 6c 69 6e 67 20 66 75 6e  /* Profiling fun
ca30: 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20  ction */.  void 
ca40: 2a 70 50 72 6f 66 69 6c 65 41 72 67 3b 20 20 20  *pProfileArg;   
ca50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ca60: 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74       /* Argument
ca70: 20 74 6f 20 70 72 6f 66 69 6c 65 20 66 75 6e 63   to profile func
ca80: 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  tion */.  void *
ca90: 70 43 6f 6d 6d 69 74 41 72 67 3b 20 20 20 20 20  pCommitArg;     
caa0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
cab0: 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6f 6d 6d  rgument to xComm
cac0: 69 74 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 0a  itCallback() */.
cad0: 20 20 69 6e 74 20 28 2a 78 43 6f 6d 6d 69 74 43    int (*xCommitC
cae0: 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29 3b  allback)(void*);
caf0: 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 61      /* Invoked a
cb00: 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e 20  t every commit. 
cb10: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 52 6f 6c 6c  */.  void *pRoll
cb20: 62 61 63 6b 41 72 67 3b 20 20 20 20 20 20 20 20  backArg;        
cb30: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
cb40: 6e 74 20 74 6f 20 78 52 6f 6c 6c 62 61 63 6b 43  nt to xRollbackC
cb50: 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 0a 20 20 76  allback() */.  v
cb60: 6f 69 64 20 28 2a 78 52 6f 6c 6c 62 61 63 6b 43  oid (*xRollbackC
cb70: 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29 3b  allback)(void*);
cb80: 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 61 74 20 65   /* Invoked at e
cb90: 76 65 72 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a  very commit. */.
cba0: 20 20 76 6f 69 64 20 2a 70 55 70 64 61 74 65 41    void *pUpdateA
cbb0: 72 67 3b 0a 20 20 76 6f 69 64 20 28 2a 78 55 70  rg;.  void (*xUp
cbc0: 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 28 76 6f  dateCallback)(vo
cbd0: 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 63  id*,int, const c
cbe0: 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
cbf0: 2c 73 71 6c 69 74 65 5f 69 6e 74 36 34 29 3b 0a  ,sqlite_int64);.
cc00: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
cc10: 41 42 4c 45 5f 50 52 45 55 50 44 41 54 45 5f 48  ABLE_PREUPDATE_H
cc20: 4f 4f 4b 0a 20 20 76 6f 69 64 20 2a 70 50 72 65  OOK.  void *pPre
cc30: 55 70 64 61 74 65 41 72 67 3b 20 20 20 20 20 20  UpdateArg;      
cc40: 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67      /* First arg
cc50: 75 6d 65 6e 74 20 74 6f 20 78 50 72 65 55 70 64  ument to xPreUpd
cc60: 61 74 65 43 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  ateCallback */. 
cc70: 20 76 6f 69 64 20 28 2a 78 50 72 65 55 70 64 61   void (*xPreUpda
cc80: 74 65 43 61 6c 6c 62 61 63 6b 29 28 20 20 20 2f  teCallback)(   /
cc90: 2a 20 52 65 67 69 73 74 65 72 65 64 20 75 73 69  * Registered usi
cca0: 6e 67 20 73 71 6c 69 74 65 33 5f 70 72 65 75 70  ng sqlite3_preup
ccb0: 64 61 74 65 5f 68 6f 6f 6b 28 29 20 2a 2f 0a 20  date_hook() */. 
ccc0: 20 20 20 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33     void*,sqlite3
ccd0: 2a 2c 69 6e 74 2c 63 68 61 72 20 63 6f 6e 73 74  *,int,char const
cce0: 2a 2c 63 68 61 72 20 63 6f 6e 73 74 2a 2c 73 71  *,char const*,sq
ccf0: 6c 69 74 65 33 5f 69 6e 74 36 34 2c 73 71 6c 69  lite3_int64,sqli
cd00: 74 65 33 5f 69 6e 74 36 34 0a 20 20 29 3b 0a 20  te3_int64.  );. 
cd10: 20 50 72 65 55 70 64 61 74 65 20 2a 70 50 72 65   PreUpdate *pPre
cd20: 55 70 64 61 74 65 3b 20 20 20 20 20 20 20 20 2f  Update;        /
cd30: 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72 20 61 63  * Context for ac
cd40: 74 69 76 65 20 70 72 65 2d 75 70 64 61 74 65 20  tive pre-update 
cd50: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e 64  callback */.#end
cd60: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 45 4e 41  if /* SQLITE_ENA
cd70: 42 4c 45 5f 50 52 45 55 50 44 41 54 45 5f 48 4f  BLE_PREUPDATE_HO
cd80: 4f 4b 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  OK */.#ifndef SQ
cd90: 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20  LITE_OMIT_WAL.  
cda0: 69 6e 74 20 28 2a 78 57 61 6c 43 61 6c 6c 62 61  int (*xWalCallba
cdb0: 63 6b 29 28 76 6f 69 64 20 2a 2c 20 73 71 6c 69  ck)(void *, sqli
cdc0: 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  te3 *, const cha
cdd0: 72 20 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  r *, int);.  voi
cde0: 64 20 2a 70 57 61 6c 41 72 67 3b 0a 23 65 6e 64  d *pWalArg;.#end
cdf0: 69 66 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c  if.  void(*xColl
ce00: 4e 65 65 64 65 64 29 28 76 6f 69 64 2a 2c 73 71  Needed)(void*,sq
ce10: 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74  lite3*,int eText
ce20: 52 65 70 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  Rep,const char*)
ce30: 3b 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e  ;.  void(*xCollN
ce40: 65 65 64 65 64 31 36 29 28 76 6f 69 64 2a 2c 73  eeded16)(void*,s
ce50: 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78  qlite3*,int eTex
ce60: 74 52 65 70 2c 63 6f 6e 73 74 20 76 6f 69 64 2a  tRep,const void*
ce70: 29 3b 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6c 6c  );.  void *pColl
ce80: 4e 65 65 64 65 64 41 72 67 3b 0a 20 20 73 71 6c  NeededArg;.  sql
ce90: 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 45 72 72  ite3_value *pErr
cea0: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f  ;          /* Mo
ceb0: 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20  st recent error 
cec0: 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20 75 6e 69  message */.  uni
ced0: 6f 6e 20 7b 0a 20 20 20 20 76 6f 6c 61 74 69 6c  on {.    volatil
cee0: 65 20 69 6e 74 20 69 73 49 6e 74 65 72 72 75 70  e int isInterrup
cef0: 74 65 64 3b 20 2f 2a 20 54 72 75 65 20 69 66 20  ted; /* True if 
cf00: 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
cf10: 74 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65  t has been calle
cf20: 64 20 2a 2f 0a 20 20 20 20 64 6f 75 62 6c 65 20  d */.    double 
cf30: 6e 6f 74 55 73 65 64 31 3b 20 20 20 20 20 20 20  notUsed1;       
cf40: 20 20 20 20 20 2f 2a 20 53 70 61 63 65 72 20 2a       /* Spacer *
cf50: 2f 0a 20 20 7d 20 75 31 3b 0a 20 20 4c 6f 6f 6b  /.  } u1;.  Look
cf60: 61 73 69 64 65 20 6c 6f 6f 6b 61 73 69 64 65 3b  aside lookaside;
cf70: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f            /* Loo
cf80: 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 63 6f  kaside malloc co
cf90: 6e 66 69 67 75 72 61 74 69 6f 6e 20 2a 2f 0a 23  nfiguration */.#
cfa0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
cfb0: 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e  IT_AUTHORIZATION
cfc0: 0a 20 20 73 71 6c 69 74 65 33 5f 78 61 75 74 68  .  sqlite3_xauth
cfd0: 20 78 41 75 74 68 3b 20 20 20 20 20 20 20 20 20   xAuth;         
cfe0: 20 2f 2a 20 41 63 63 65 73 73 20 61 75 74 68 6f   /* Access autho
cff0: 72 69 7a 61 74 69 6f 6e 20 66 75 6e 63 74 69 6f  rization functio
d000: 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75  n */.  void *pAu
d010: 74 68 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  thArg;          
d020: 20 20 20 20 20 2f 2a 20 31 73 74 20 61 72 67 75       /* 1st argu
d030: 6d 65 6e 74 20 74 6f 20 74 68 65 20 61 63 63 65  ment to the acce
d040: 73 73 20 61 75 74 68 20 66 75 6e 63 74 69 6f 6e  ss auth function
d050: 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64   */.#endif.#ifnd
d060: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
d070: 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b  ROGRESS_CALLBACK
d080: 0a 20 20 69 6e 74 20 28 2a 78 50 72 6f 67 72 65  .  int (*xProgre
d090: 73 73 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20  ss)(void *);    
d0a0: 20 2f 2a 20 54 68 65 20 70 72 6f 67 72 65 73 73   /* The progress
d0b0: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76   callback */.  v
d0c0: 6f 69 64 20 2a 70 50 72 6f 67 72 65 73 73 41 72  oid *pProgressAr
d0d0: 67 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  g;           /* 
d0e0: 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  Argument to the 
d0f0: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
d100: 6b 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  k */.  unsigned 
d110: 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b 20 20 20  nProgressOps;   
d120: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
d130: 66 20 6f 70 63 6f 64 65 73 20 66 6f 72 20 70 72  f opcodes for pr
d140: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
d150: 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  */.#endif.#ifnde
d160: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
d170: 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74  RTUALTABLE.  int
d180: 20 6e 56 54 72 61 6e 73 3b 20 20 20 20 20 20 20   nVTrans;       
d190: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c             /* Al
d1a0: 6c 6f 63 61 74 65 64 20 73 69 7a 65 20 6f 66 20  located size of 
d1b0: 61 56 54 72 61 6e 73 20 2a 2f 0a 20 20 48 61 73  aVTrans */.  Has
d1c0: 68 20 61 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20  h aModule;      
d1d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70 6f             /* po
d1e0: 70 75 6c 61 74 65 64 20 62 79 20 73 71 6c 69 74  pulated by sqlit
d1f0: 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65  e3_create_module
d200: 28 29 20 2a 2f 0a 20 20 56 74 61 62 43 74 78 20  () */.  VtabCtx 
d210: 2a 70 56 74 61 62 43 74 78 3b 20 20 20 20 20 20  *pVtabCtx;      
d220: 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 78 74        /* Context
d230: 20 66 6f 72 20 61 63 74 69 76 65 20 76 74 61 62   for active vtab
d240: 20 63 6f 6e 6e 65 63 74 2f 63 72 65 61 74 65 20   connect/create 
d250: 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 2a 61 56  */.  VTable **aV
d260: 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20  Trans;          
d270: 20 20 20 2f 2a 20 56 69 72 74 75 61 6c 20 74 61     /* Virtual ta
d280: 62 6c 65 73 20 77 69 74 68 20 6f 70 65 6e 20 74  bles with open t
d290: 72 61 6e 73 61 63 74 69 6f 6e 73 20 2a 2f 0a 20  ransactions */. 
d2a0: 20 56 54 61 62 6c 65 20 2a 70 44 69 73 63 6f 6e   VTable *pDiscon
d2b0: 6e 65 63 74 3b 20 20 20 20 20 20 20 20 20 20 2f  nect;          /
d2c0: 2a 20 44 69 73 63 6f 6e 6e 65 63 74 20 74 68 65  * Disconnect the
d2d0: 73 65 20 69 6e 20 6e 65 78 74 20 73 71 6c 69 74  se in next sqlit
d2e0: 65 33 5f 70 72 65 70 61 72 65 28 29 20 2a 2f 0a  e3_prepare() */.
d2f0: 23 65 6e 64 69 66 0a 20 20 48 61 73 68 20 61 46  #endif.  Hash aF
d300: 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  unc;            
d310: 20 20 20 20 20 20 20 2f 2a 20 48 61 73 68 20 74         /* Hash t
d320: 61 62 6c 65 20 6f 66 20 63 6f 6e 6e 65 63 74 69  able of connecti
d330: 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a  on functions */.
d340: 20 20 48 61 73 68 20 61 43 6f 6c 6c 53 65 71 3b    Hash aCollSeq;
d350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d360: 2f 2a 20 41 6c 6c 20 63 6f 6c 6c 61 74 69 6e 67  /* All collating
d370: 20 73 65 71 75 65 6e 63 65 73 20 2a 2f 0a 20 20   sequences */.  
d380: 42 75 73 79 48 61 6e 64 6c 65 72 20 62 75 73 79  BusyHandler busy
d390: 48 61 6e 64 6c 65 72 3b 20 20 20 20 20 20 2f 2a  Handler;      /*
d3a0: 20 42 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a   Busy callback *
d3b0: 2f 0a 20 20 44 62 20 61 44 62 53 74 61 74 69 63  /.  Db aDbStatic
d3c0: 5b 32 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20  [2];            
d3d0: 20 20 2f 2a 20 53 74 61 74 69 63 20 73 70 61 63    /* Static spac
d3e0: 65 20 66 6f 72 20 74 68 65 20 32 20 64 65 66 61  e for the 2 defa
d3f0: 75 6c 74 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a  ult backends */.
d400: 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 53 61    Savepoint *pSa
d410: 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20  vepoint;        
d420: 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63 74 69 76  /* List of activ
d430: 65 20 73 61 76 65 70 6f 69 6e 74 73 20 2a 2f 0a  e savepoints */.
d440: 20 20 69 6e 74 20 62 75 73 79 54 69 6d 65 6f 75    int busyTimeou
d450: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
d460: 2f 2a 20 42 75 73 79 20 68 61 6e 64 6c 65 72 20  /* Busy handler 
d470: 74 69 6d 65 6f 75 74 2c 20 69 6e 20 6d 73 65 63  timeout, in msec
d480: 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61 76 65 70   */.  int nSavep
d490: 6f 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20  oint;           
d4a0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
d4b0: 20 6e 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f 6e   non-transaction
d4c0: 20 73 61 76 65 70 6f 69 6e 74 73 20 2a 2f 0a 20   savepoints */. 
d4d0: 20 69 6e 74 20 6e 53 74 61 74 65 6d 65 6e 74 3b   int nStatement;
d4e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
d4f0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74  * Number of nest
d500: 65 64 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61  ed statement-tra
d510: 6e 73 61 63 74 69 6f 6e 73 20 20 2a 2f 0a 20 20  nsactions  */.  
d520: 69 36 34 20 6e 44 65 66 65 72 72 65 64 43 6f 6e  i64 nDeferredCon
d530: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  s;            /*
d540: 20 4e 65 74 20 64 65 66 65 72 72 65 64 20 63 6f   Net deferred co
d550: 6e 73 74 72 61 69 6e 74 73 20 74 68 69 73 20 74  nstraints this t
d560: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 2a 2f 0a 20  ransaction. */. 
d570: 20 69 36 34 20 6e 44 65 66 65 72 72 65 64 49 6d   i64 nDeferredIm
d580: 6d 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 2f  mCons;         /
d590: 2a 20 4e 65 74 20 64 65 66 65 72 72 65 64 20 69  * Net deferred i
d5a0: 6d 6d 65 64 69 61 74 65 20 63 6f 6e 73 74 72 61  mmediate constra
d5b0: 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 2a 70  ints */.  int *p
d5c0: 6e 42 79 74 65 73 46 72 65 65 64 3b 20 20 20 20  nBytesFreed;    
d5d0: 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f          /* If no
d5e0: 74 20 4e 55 4c 4c 2c 20 69 6e 63 72 65 6d 65 6e  t NULL, incremen
d5f0: 74 20 74 68 69 73 20 69 6e 20 44 62 46 72 65 65  t this in DbFree
d600: 28 29 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  () */.#ifdef SQL
d610: 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43  ITE_ENABLE_UNLOC
d620: 4b 5f 4e 4f 54 49 46 59 0a 20 20 2f 2a 20 54 68  K_NOTIFY.  /* Th
d630: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 72 69  e following vari
d640: 61 62 6c 65 73 20 61 72 65 20 61 6c 6c 20 70 72  ables are all pr
d650: 6f 74 65 63 74 65 64 20 62 79 20 74 68 65 20 53  otected by the S
d660: 54 41 54 49 43 5f 4d 41 53 54 45 52 0a 20 20 2a  TATIC_MASTER.  *
d670: 2a 20 6d 75 74 65 78 2c 20 6e 6f 74 20 62 79 20  * mutex, not by 
d680: 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 2e 20 54  sqlite3.mutex. T
d690: 68 65 79 20 61 72 65 20 75 73 65 64 20 62 79 20  hey are used by 
d6a0: 63 6f 64 65 20 69 6e 20 6e 6f 74 69 66 79 2e 63  code in notify.c
d6b0: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e  ..  **.  ** When
d6c0: 20 58 2e 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63   X.pUnlockConnec
d6d0: 74 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65  tion==Y, that me
d6e0: 61 6e 73 20 74 68 61 74 20 58 20 69 73 20 77 61  ans that X is wa
d6f0: 69 74 69 6e 67 20 66 6f 72 20 59 20 74 6f 0a 20  iting for Y to. 
d700: 20 2a 2a 20 75 6e 6c 6f 63 6b 20 73 6f 20 74 68   ** unlock so th
d710: 61 74 20 69 74 20 63 61 6e 20 70 72 6f 63 65 65  at it can procee
d720: 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65  d..  **.  ** Whe
d730: 6e 20 58 2e 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e  n X.pBlockingCon
d740: 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20 74 68 61 74  nection==Y, that
d750: 20 6d 65 61 6e 73 20 74 68 61 74 20 73 6f 6d 65   means that some
d760: 74 68 69 6e 67 20 74 68 61 74 20 58 20 74 72 69  thing that X tri
d770: 65 64 0a 20 20 2a 2a 20 74 72 69 65 64 20 74 6f  ed.  ** tried to
d780: 20 64 6f 20 72 65 63 65 6e 74 6c 79 20 66 61 69   do recently fai
d790: 6c 65 64 20 77 69 74 68 20 61 6e 20 53 51 4c 49  led with an SQLI
d7a0: 54 45 5f 4c 4f 43 4b 45 44 20 65 72 72 6f 72 20  TE_LOCKED error 
d7b0: 64 75 65 20 74 6f 20 6c 6f 63 6b 73 0a 20 20 2a  due to locks.  *
d7c0: 2a 20 68 65 6c 64 20 62 79 20 59 2e 0a 20 20 2a  * held by Y..  *
d7d0: 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 42 6c  /.  sqlite3 *pBl
d7e0: 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e  ockingConnection
d7f0: 3b 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20  ; /* Connection 
d800: 74 68 61 74 20 63 61 75 73 65 64 20 53 51 4c 49  that caused SQLI
d810: 54 45 5f 4c 4f 43 4b 45 44 20 2a 2f 0a 20 20 73  TE_LOCKED */.  s
d820: 71 6c 69 74 65 33 20 2a 70 55 6e 6c 6f 63 6b 43  qlite3 *pUnlockC
d830: 6f 6e 6e 65 63 74 69 6f 6e 3b 20 20 20 20 20 20  onnection;      
d840: 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69       /* Connecti
d850: 6f 6e 20 74 6f 20 77 61 74 63 68 20 66 6f 72 20  on to watch for 
d860: 75 6e 6c 6f 63 6b 20 2a 2f 0a 20 20 76 6f 69 64  unlock */.  void
d870: 20 2a 70 55 6e 6c 6f 63 6b 41 72 67 3b 20 20 20   *pUnlockArg;   
d880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d890: 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f    /* Argument to
d8a0: 20 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 20 2a   xUnlockNotify *
d8b0: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 55 6e 6c 6f  /.  void (*xUnlo
d8c0: 63 6b 4e 6f 74 69 66 79 29 28 76 6f 69 64 20 2a  ckNotify)(void *
d8d0: 2a 2c 20 69 6e 74 29 3b 20 20 2f 2a 20 55 6e 6c  *, int);  /* Unl
d8e0: 6f 63 6b 20 6e 6f 74 69 66 79 20 63 61 6c 6c 62  ock notify callb
d8f0: 61 63 6b 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ack */.  sqlite3
d900: 20 2a 70 4e 65 78 74 42 6c 6f 63 6b 65 64 3b 20   *pNextBlocked; 
d910: 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 69         /* Next i
d920: 6e 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 62 6c  n list of all bl
d930: 6f 63 6b 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e  ocked connection
d940: 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 64  s */.#endif.#ifd
d950: 65 66 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41  ef SQLITE_USER_A
d960: 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20  UTHENTICATION.  
d970: 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68  sqlite3_userauth
d980: 20 61 75 74 68 3b 20 20 20 20 20 20 20 20 2f 2a   auth;        /*
d990: 20 55 73 65 72 20 61 75 74 68 65 6e 74 69 63 61   User authentica
d9a0: 74 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  tion information
d9b0: 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f   */.#endif.};../
d9c0: 2a 0a 2a 2a 20 41 20 6d 61 63 72 6f 20 74 6f 20  *.** A macro to 
d9d0: 64 69 73 63 6f 76 65 72 20 74 68 65 20 65 6e 63  discover the enc
d9e0: 6f 64 69 6e 67 20 6f 66 20 61 20 64 61 74 61 62  oding of a datab
d9f0: 61 73 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ase..*/.#define 
da00: 53 43 48 45 4d 41 5f 45 4e 43 28 64 62 29 20 28  SCHEMA_ENC(db) (
da10: 28 64 62 29 2d 3e 61 44 62 5b 30 5d 2e 70 53 63  (db)->aDb[0].pSc
da20: 68 65 6d 61 2d 3e 65 6e 63 29 0a 23 64 65 66 69  hema->enc).#defi
da30: 6e 65 20 45 4e 43 28 64 62 29 20 20 20 20 20 20  ne ENC(db)      
da40: 20 20 28 28 64 62 29 2d 3e 65 6e 63 29 0a 0a 2f    ((db)->enc)../
da50: 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61  *.** Possible va
da60: 6c 75 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c  lues for the sql
da70: 69 74 65 33 2e 66 6c 61 67 73 2e 0a 2a 2a 0a 2a  ite3.flags..**.*
da80: 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69  * Value constrai
da90: 6e 74 73 20 28 65 6e 66 6f 72 63 65 64 20 76 69  nts (enforced vi
daa0: 61 20 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20  a assert()):.** 
dab0: 20 20 20 20 20 53 51 4c 49 54 45 5f 46 75 6c 6c       SQLITE_Full
dac0: 46 53 79 6e 63 20 20 20 20 20 3d 3d 20 50 41 47  FSync     == PAG
dad0: 45 52 5f 46 55 4c 4c 46 53 59 4e 43 0a 2a 2a 20  ER_FULLFSYNC.** 
dae0: 20 20 20 20 20 53 51 4c 49 54 45 5f 43 6b 70 74       SQLITE_Ckpt
daf0: 46 75 6c 6c 46 53 79 6e 63 20 3d 3d 20 50 41 47  FullFSync == PAG
db00: 45 52 5f 43 4b 50 54 5f 46 55 4c 4c 46 53 59 4e  ER_CKPT_FULLFSYN
db10: 43 0a 2a 2a 20 20 20 20 20 20 53 51 4c 49 54 45  C.**      SQLITE
db20: 5f 43 61 63 68 65 53 70 69 6c 6c 20 20 20 20 3d  _CacheSpill    =
db30: 3d 20 50 41 47 45 52 5f 43 41 43 48 45 5f 53 50  = PAGER_CACHE_SP
db40: 49 4c 4c 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ILL.*/.#define S
db50: 51 4c 49 54 45 5f 57 72 69 74 65 53 63 68 65 6d  QLITE_WriteSchem
db60: 61 20 20 20 20 30 78 30 30 30 30 30 30 30 31 20  a    0x00000001 
db70: 20 2f 2a 20 4f 4b 20 74 6f 20 75 70 64 61 74 65   /* OK to update
db80: 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 2a   SQLITE_MASTER *
db90: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
dba0: 5f 4c 65 67 61 63 79 46 69 6c 65 46 6d 74 20 20  _LegacyFileFmt  
dbb0: 30 78 30 30 30 30 30 30 30 32 20 20 2f 2a 20 43  0x00000002  /* C
dbc0: 72 65 61 74 65 20 6e 65 77 20 64 61 74 61 62 61  reate new databa
dbd0: 73 65 73 20 69 6e 20 66 6f 72 6d 61 74 20 31 20  ses in format 1 
dbe0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
dbf0: 45 5f 46 75 6c 6c 43 6f 6c 4e 61 6d 65 73 20 20  E_FullColNames  
dc00: 20 30 78 30 30 30 30 30 30 30 34 20 20 2f 2a 20   0x00000004  /* 
dc10: 53 68 6f 77 20 66 75 6c 6c 20 63 6f 6c 75 6d 6e  Show full column
dc20: 20 6e 61 6d 65 73 20 6f 6e 20 53 45 4c 45 43 54   names on SELECT
dc30: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
dc40: 54 45 5f 46 75 6c 6c 46 53 79 6e 63 20 20 20 20  TE_FullFSync    
dc50: 20 20 30 78 30 30 30 30 30 30 30 38 20 20 2f 2a    0x00000008  /*
dc60: 20 55 73 65 20 66 75 6c 6c 20 66 73 79 6e 63 20   Use full fsync 
dc70: 6f 6e 20 74 68 65 20 62 61 63 6b 65 6e 64 20 2a  on the backend *
dc80: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
dc90: 5f 43 6b 70 74 46 75 6c 6c 46 53 79 6e 63 20 20  _CkptFullFSync  
dca0: 30 78 30 30 30 30 30 30 31 30 20 20 2f 2a 20 55  0x00000010  /* U
dcb0: 73 65 20 66 75 6c 6c 20 66 73 79 6e 63 20 66 6f  se full fsync fo
dcc0: 72 20 63 68 65 63 6b 70 6f 69 6e 74 20 2a 2f 0a  r checkpoint */.
dcd0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43  #define SQLITE_C
dce0: 61 63 68 65 53 70 69 6c 6c 20 20 20 20 20 30 78  acheSpill     0x
dcf0: 30 30 30 30 30 30 32 30 20 20 2f 2a 20 4f 4b 20  00000020  /* OK 
dd00: 74 6f 20 73 70 69 6c 6c 20 70 61 67 65 72 20 63  to spill pager c
dd10: 61 63 68 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ache */.#define 
dd20: 53 51 4c 49 54 45 5f 53 68 6f 72 74 43 6f 6c 4e  SQLITE_ShortColN
dd30: 61 6d 65 73 20 20 30 78 30 30 30 30 30 30 34 30  ames  0x00000040
dd40: 20 20 2f 2a 20 53 68 6f 77 20 73 68 6f 72 74 20    /* Show short 
dd50: 63 6f 6c 75 6d 6e 73 20 6e 61 6d 65 73 20 2a 2f  columns names */
dd60: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
dd70: 43 6f 75 6e 74 52 6f 77 73 20 20 20 20 20 20 30  CountRows      0
dd80: 78 30 30 30 30 30 30 38 30 20 20 2f 2a 20 43 6f  x00000080  /* Co
dd90: 75 6e 74 20 72 6f 77 73 20 63 68 61 6e 67 65 64  unt rows changed
dda0: 20 62 79 20 49 4e 53 45 52 54 2c 20 2a 2f 0a 20   by INSERT, */. 
ddb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ddc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ddd0: 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 44 45           /*   DE
dde0: 4c 45 54 45 2c 20 6f 72 20 55 50 44 41 54 45 20  LETE, or UPDATE 
ddf0: 61 6e 64 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20  and return */.  
de00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de20: 20 20 20 20 20 20 20 20 2f 2a 20 20 20 74 68 65          /*   the
de30: 20 63 6f 75 6e 74 20 75 73 69 6e 67 20 61 20 63   count using a c
de40: 61 6c 6c 62 61 63 6b 2e 20 2a 2f 0a 23 64 65 66  allback. */.#def
de50: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 75 6c 6c 43  ine SQLITE_NullC
de60: 61 6c 6c 62 61 63 6b 20 20 20 30 78 30 30 30 30  allback   0x0000
de70: 30 31 30 30 20 20 2f 2a 20 49 6e 76 6f 6b 65 20  0100  /* Invoke 
de80: 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 6f 6e 63  the callback onc
de90: 65 20 69 66 20 74 68 65 20 2a 2f 0a 20 20 20 20  e if the */.    
dea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
deb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dec0: 20 20 20 20 20 20 2f 2a 20 20 20 72 65 73 75 6c        /*   resul
ded0: 74 20 73 65 74 20 69 73 20 65 6d 70 74 79 20 2a  t set is empty *
dee0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
def0: 5f 49 67 6e 6f 72 65 43 68 65 63 6b 73 20 20 20  _IgnoreChecks   
df00: 30 78 30 30 30 30 30 32 30 30 20 20 2f 2a 20 44  0x00000200  /* D
df10: 6f 20 6e 6f 74 20 65 6e 66 6f 72 63 65 20 63 68  o not enforce ch
df20: 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  eck constraints 
df30: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
df40: 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74 20 20  E_ReadUncommit  
df50: 20 30 78 30 30 30 30 30 34 30 30 20 20 2f 2a 20   0x00000400  /* 
df60: 52 45 41 44 20 55 4e 43 4f 4d 4d 49 54 54 45 44  READ UNCOMMITTED
df70: 20 69 6e 20 73 68 61 72 65 64 2d 63 61 63 68 65   in shared-cache
df80: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
df90: 54 45 5f 4e 6f 43 6b 70 74 4f 6e 43 6c 6f 73 65  TE_NoCkptOnClose
dfa0: 20 20 30 78 30 30 30 30 30 38 30 30 20 20 2f 2a    0x00000800  /*
dfb0: 20 4e 6f 20 63 68 65 63 6b 70 6f 69 6e 74 20 6f   No checkpoint o
dfc0: 6e 20 63 6c 6f 73 65 28 29 2f 44 45 54 41 43 48  n close()/DETACH
dfd0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
dfe0: 54 45 5f 52 65 76 65 72 73 65 4f 72 64 65 72 20  TE_ReverseOrder 
dff0: 20 20 30 78 30 30 30 30 31 30 30 30 20 20 2f 2a    0x00001000  /*
e000: 20 52 65 76 65 72 73 65 20 75 6e 6f 72 64 65 72   Reverse unorder
e010: 65 64 20 53 45 4c 45 43 54 73 20 2a 2f 0a 23 64  ed SELECTs */.#d
e020: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 63  efine SQLITE_Rec
e030: 54 72 69 67 67 65 72 73 20 20 20 20 30 78 30 30  Triggers    0x00
e040: 30 30 32 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c  002000  /* Enabl
e050: 65 20 72 65 63 75 72 73 69 76 65 20 74 72 69 67  e recursive trig
e060: 67 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  gers */.#define 
e070: 53 51 4c 49 54 45 5f 46 6f 72 65 69 67 6e 4b 65  SQLITE_ForeignKe
e080: 79 73 20 20 20 20 30 78 30 30 30 30 34 30 30 30  ys    0x00004000
e090: 20 20 2f 2a 20 45 6e 66 6f 72 63 65 20 66 6f 72    /* Enforce for
e0a0: 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
e0b0: 69 6e 74 73 20 20 2a 2f 0a 23 64 65 66 69 6e 65  ints  */.#define
e0c0: 20 53 51 4c 49 54 45 5f 41 75 74 6f 49 6e 64 65   SQLITE_AutoInde
e0d0: 78 20 20 20 20 20 20 30 78 30 30 30 30 38 30 30  x      0x0000800
e0e0: 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 61 75 74  0  /* Enable aut
e0f0: 6f 6d 61 74 69 63 20 69 6e 64 65 78 65 73 20 2a  omatic indexes *
e100: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e110: 5f 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 20 20  _LoadExtension  
e120: 30 78 30 30 30 31 30 30 30 30 20 20 2f 2a 20 45  0x00010000  /* E
e130: 6e 61 62 6c 65 20 6c 6f 61 64 5f 65 78 74 65 6e  nable load_exten
e140: 73 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  sion */.#define 
e150: 53 51 4c 49 54 45 5f 4c 6f 61 64 45 78 74 46 75  SQLITE_LoadExtFu
e160: 6e 63 20 20 20 20 30 78 30 30 30 32 30 30 30 30  nc    0x00020000
e170: 20 20 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f 61 64    /* Enable load
e180: 5f 65 78 74 65 6e 73 69 6f 6e 28 29 20 53 51 4c  _extension() SQL
e190: 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65   func */.#define
e1a0: 20 53 51 4c 49 54 45 5f 45 6e 61 62 6c 65 54 72   SQLITE_EnableTr
e1b0: 69 67 67 65 72 20 20 30 78 30 30 30 34 30 30 30  igger  0x0004000
e1c0: 30 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e  0  /* True to en
e1d0: 61 62 6c 65 20 74 72 69 67 67 65 72 73 20 2a 2f  able triggers */
e1e0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e1f0: 44 65 66 65 72 46 4b 73 20 20 20 20 20 20 20 30  DeferFKs       0
e200: 78 30 30 30 38 30 30 30 30 20 20 2f 2a 20 44 65  x00080000  /* De
e210: 66 65 72 20 61 6c 6c 20 46 4b 20 63 6f 6e 73 74  fer all FK const
e220: 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e  raints */.#defin
e230: 65 20 53 51 4c 49 54 45 5f 51 75 65 72 79 4f 6e  e SQLITE_QueryOn
e240: 6c 79 20 20 20 20 20 20 30 78 30 30 31 30 30 30  ly      0x001000
e250: 30 30 20 20 2f 2a 20 44 69 73 61 62 6c 65 20 64  00  /* Disable d
e260: 61 74 61 62 61 73 65 20 63 68 61 6e 67 65 73 20  atabase changes 
e270: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e280: 45 5f 43 65 6c 6c 53 69 7a 65 43 6b 20 20 20 20  E_CellSizeCk    
e290: 20 30 78 30 30 32 30 30 30 30 30 20 20 2f 2a 20   0x00200000  /* 
e2a0: 43 68 65 63 6b 20 62 74 72 65 65 20 63 65 6c 6c  Check btree cell
e2b0: 20 73 69 7a 65 73 20 6f 6e 20 6c 6f 61 64 20 2a   sizes on load *
e2c0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e2d0: 5f 46 74 73 33 54 6f 6b 65 6e 69 7a 65 72 20 20  _Fts3Tokenizer  
e2e0: 30 78 30 30 34 30 30 30 30 30 20 20 2f 2a 20 45  0x00400000  /* E
e2f0: 6e 61 62 6c 65 20 66 74 73 33 5f 74 6f 6b 65 6e  nable fts3_token
e300: 69 7a 65 72 28 32 29 20 2a 2f 0a 23 64 65 66 69  izer(2) */.#defi
e310: 6e 65 20 53 51 4c 49 54 45 5f 45 6e 61 62 6c 65  ne SQLITE_Enable
e320: 51 50 53 47 20 20 20 20 20 30 78 30 30 38 30 30  QPSG     0x00800
e330: 30 30 30 20 20 2f 2a 20 51 75 65 72 79 20 50 6c  000  /* Query Pl
e340: 61 6e 6e 65 72 20 53 74 61 62 69 6c 69 74 79 20  anner Stability 
e350: 47 75 61 72 61 6e 74 65 65 2a 2f 0a 23 64 65 66  Guarantee*/.#def
e360: 69 6e 65 20 53 51 4c 49 54 45 5f 54 72 69 67 67  ine SQLITE_Trigg
e370: 65 72 45 51 50 20 20 20 20 20 30 78 30 31 30 30  erEQP     0x0100
e380: 30 30 30 30 20 20 2f 2a 20 53 68 6f 77 20 74 72  0000  /* Show tr
e390: 69 67 67 65 72 20 45 58 50 4c 41 49 4e 20 51 55  igger EXPLAIN QU
e3a0: 45 52 59 20 50 4c 41 4e 20 2a 2f 0a 23 64 65 66  ERY PLAN */.#def
e3b0: 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 73 65 74  ine SQLITE_Reset
e3c0: 44 61 74 61 62 61 73 65 20 20 30 78 30 32 30 30  Database  0x0200
e3d0: 30 30 30 30 20 20 2f 2a 20 52 65 73 65 74 20 74  0000  /* Reset t
e3e0: 68 65 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 23  he database */.#
e3f0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 65  define SQLITE_Le
e400: 67 61 63 79 41 6c 74 65 72 20 20 20 20 30 78 30  gacyAlter    0x0
e410: 34 30 30 30 30 30 30 20 20 2f 2a 20 4c 65 67 61  4000000  /* Lega
e420: 63 79 20 41 4c 54 45 52 20 54 41 42 4c 45 20 62  cy ALTER TABLE b
e430: 65 68 61 76 69 6f 75 72 20 2a 2f 0a 23 64 65 66  ehaviour */.#def
e440: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 6f 53 63 68  ine SQLITE_NoSch
e450: 65 6d 61 45 72 72 6f 72 20 20 30 78 30 38 30 30  emaError  0x0800
e460: 30 30 30 30 20 20 2f 2a 20 44 6f 20 6e 6f 74 20  0000  /* Do not 
e470: 72 65 70 6f 72 74 20 73 63 68 65 6d 61 20 70 61  report schema pa
e480: 72 73 65 20 65 72 72 6f 72 73 2a 2f 0a 23 64 65  rse errors*/.#de
e490: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 65 66 65  fine SQLITE_Defe
e4a0: 6e 73 69 76 65 20 20 20 20 20 20 30 78 31 30 30  nsive      0x100
e4b0: 30 30 30 30 30 20 20 2f 2a 20 49 6e 70 75 74 20  00000  /* Input 
e4c0: 53 51 4c 20 69 73 20 6c 69 6b 65 6c 79 20 68 6f  SQL is likely ho
e4d0: 73 74 69 6c 65 20 2a 2f 0a 0a 2f 2a 20 46 6c 61  stile */../* Fla
e4e0: 67 73 20 75 73 65 64 20 6f 6e 6c 79 20 69 66 20  gs used only if 
e4f0: 64 65 62 75 67 67 69 6e 67 20 2a 2f 0a 23 64 65  debugging */.#de
e500: 66 69 6e 65 20 48 49 28 58 29 20 20 28 28 75 36  fine HI(X)  ((u6
e510: 34 29 28 58 29 3c 3c 33 32 29 0a 23 69 66 64 65  4)(X)<<32).#ifde
e520: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23  f SQLITE_DEBUG.#
e530: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 71  define SQLITE_Sq
e540: 6c 54 72 61 63 65 20 20 20 20 20 20 20 48 49 28  lTrace       HI(
e550: 30 78 30 30 30 31 29 20 20 2f 2a 20 44 65 62 75  0x0001)  /* Debu
e560: 67 20 70 72 69 6e 74 20 53 51 4c 20 61 73 20 69  g print SQL as i
e570: 74 20 65 78 65 63 75 74 65 73 20 2a 2f 0a 23 64  t executes */.#d
e580: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62  efine SQLITE_Vdb
e590: 65 4c 69 73 74 69 6e 67 20 20 20 20 48 49 28 30  eListing    HI(0
e5a0: 78 30 30 30 32 29 20 20 2f 2a 20 44 65 62 75 67  x0002)  /* Debug
e5b0: 20 6c 69 73 74 69 6e 67 73 20 6f 66 20 56 44 42   listings of VDB
e5c0: 45 20 70 72 6f 67 73 20 2a 2f 0a 23 64 65 66 69  E progs */.#defi
e5d0: 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72  ne SQLITE_VdbeTr
e5e0: 61 63 65 20 20 20 20 20 20 48 49 28 30 78 30 30  ace      HI(0x00
e5f0: 30 34 29 20 20 2f 2a 20 54 72 75 65 20 74 6f 20  04)  /* True to 
e600: 74 72 61 63 65 20 56 44 42 45 20 65 78 65 63 75  trace VDBE execu
e610: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
e620: 53 51 4c 49 54 45 5f 56 64 62 65 41 64 64 6f 70  SQLITE_VdbeAddop
e630: 54 72 61 63 65 20 48 49 28 30 78 30 30 30 38 29  Trace HI(0x0008)
e640: 20 20 2f 2a 20 54 72 61 63 65 20 73 71 6c 69 74    /* Trace sqlit
e650: 65 33 56 64 62 65 41 64 64 4f 70 28 29 20 63 61  e3VdbeAddOp() ca
e660: 6c 6c 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  lls */.#define S
e670: 51 4c 49 54 45 5f 56 64 62 65 45 51 50 20 20 20  QLITE_VdbeEQP   
e680: 20 20 20 20 20 48 49 28 30 78 30 30 31 30 29 20       HI(0x0010) 
e690: 20 2f 2a 20 44 65 62 75 67 20 45 58 50 4c 41 49   /* Debug EXPLAI
e6a0: 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 2a 2f 0a  N QUERY PLAN */.
e6b0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c  #endif../*.** Al
e6c0: 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72  lowed values for
e6d0: 20 73 71 6c 69 74 65 33 2e 6d 44 62 46 6c 61 67   sqlite3.mDbFlag
e6e0: 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 46  s.*/.#define DBF
e6f0: 4c 41 47 5f 53 63 68 65 6d 61 43 68 61 6e 67 65  LAG_SchemaChange
e700: 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 55 6e     0x0001  /* Un
e710: 63 6f 6d 6d 69 74 74 65 64 20 48 61 73 68 20 74  committed Hash t
e720: 61 62 6c 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a  able changes */.
e730: 23 64 65 66 69 6e 65 20 44 42 46 4c 41 47 5f 50  #define DBFLAG_P
e740: 72 65 66 65 72 42 75 69 6c 74 69 6e 20 20 30 78  referBuiltin  0x
e750: 30 30 30 32 20 20 2f 2a 20 50 72 65 66 65 72 65  0002  /* Prefere
e760: 6e 63 65 20 74 6f 20 62 75 69 6c 74 2d 69 6e 20  nce to built-in 
e770: 66 75 6e 63 73 20 2a 2f 0a 23 64 65 66 69 6e 65  funcs */.#define
e780: 20 44 42 46 4c 41 47 5f 56 61 63 75 75 6d 20 20   DBFLAG_Vacuum  
e790: 20 20 20 20 20 20 20 30 78 30 30 30 34 20 20 2f         0x0004  /
e7a0: 2a 20 43 75 72 72 65 6e 74 6c 79 20 69 6e 20 61  * Currently in a
e7b0: 20 56 41 43 55 55 4d 20 2a 2f 0a 23 64 65 66 69   VACUUM */.#defi
e7c0: 6e 65 20 44 42 46 4c 41 47 5f 53 63 68 65 6d 61  ne DBFLAG_Schema
e7d0: 4b 6e 6f 77 6e 4f 6b 20 20 30 78 30 30 30 38 20  KnownOk  0x0008 
e7e0: 20 2f 2a 20 53 63 68 65 6d 61 20 69 73 20 6b 6e   /* Schema is kn
e7f0: 6f 77 6e 20 74 6f 20 62 65 20 76 61 6c 69 64 20  own to be valid 
e800: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 73 20 6f  */../*.** Bits o
e810: 66 20 74 68 65 20 73 71 6c 69 74 65 33 2e 64 62  f the sqlite3.db
e820: 4f 70 74 46 6c 61 67 73 20 66 69 65 6c 64 20 74  OptFlags field t
e830: 68 61 74 20 61 72 65 20 75 73 65 64 20 62 79 20  hat are used by 
e840: 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74  the.** sqlite3_t
e850: 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49  est_control(SQLI
e860: 54 45 5f 54 45 53 54 43 54 52 4c 5f 4f 50 54 49  TE_TESTCTRL_OPTI
e870: 4d 49 5a 41 54 49 4f 4e 53 2c 2e 2e 2e 29 20 69  MIZATIONS,...) i
e880: 6e 74 65 72 66 61 63 65 20 74 6f 0a 2a 2a 20 73  nterface to.** s
e890: 65 6c 65 63 74 69 76 65 6c 79 20 64 69 73 61 62  electively disab
e8a0: 6c 65 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d  le various optim
e8b0: 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65  izations..*/.#de
e8c0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 51 75 65 72  fine SQLITE_Quer
e8d0: 79 46 6c 61 74 74 65 6e 65 72 20 30 78 30 30 30  yFlattener 0x000
e8e0: 31 20 20 20 2f 2a 20 51 75 65 72 79 20 66 6c 61  1   /* Query fla
e8f0: 74 74 65 6e 69 6e 67 20 2a 2f 0a 20 20 20 20 20  ttening */.     
e900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e910: 20 20 20 20 20 2f 2a 20 20 30 78 30 30 30 32 20       /*  0x0002 
e920: 20 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20    available for 
e930: 72 65 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65  reuse */.#define
e940: 20 53 51 4c 49 54 45 5f 47 72 6f 75 70 42 79 4f   SQLITE_GroupByO
e950: 72 64 65 72 20 20 20 30 78 30 30 30 34 20 20 20  rder   0x0004   
e960: 2f 2a 20 47 52 4f 55 50 42 59 20 63 6f 76 65 72  /* GROUPBY cover
e970: 20 6f 66 20 4f 52 44 45 52 42 59 20 2a 2f 0a 23   of ORDERBY */.#
e980: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 61  define SQLITE_Fa
e990: 63 74 6f 72 4f 75 74 43 6f 6e 73 74 20 30 78 30  ctorOutConst 0x0
e9a0: 30 30 38 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e  008   /* Constan
e9b0: 74 20 66 61 63 74 6f 72 69 6e 67 20 2a 2f 0a 23  t factoring */.#
e9c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 69  define SQLITE_Di
e9d0: 73 74 69 6e 63 74 4f 70 74 20 20 20 20 30 78 30  stinctOpt    0x0
e9e0: 30 31 30 20 20 20 2f 2a 20 44 49 53 54 49 4e 43  010   /* DISTINC
e9f0: 54 20 75 73 69 6e 67 20 69 6e 64 65 78 65 73 20  T using indexes 
ea00: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
ea10: 45 5f 43 6f 76 65 72 49 64 78 53 63 61 6e 20 20  E_CoverIdxScan  
ea20: 20 30 78 30 30 32 30 20 20 20 2f 2a 20 43 6f 76   0x0020   /* Cov
ea30: 65 72 69 6e 67 20 69 6e 64 65 78 20 73 63 61 6e  ering index scan
ea40: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
ea50: 49 54 45 5f 4f 72 64 65 72 42 79 49 64 78 4a 6f  ITE_OrderByIdxJo
ea60: 69 6e 20 30 78 30 30 34 30 20 20 20 2f 2a 20 4f  in 0x0040   /* O
ea70: 52 44 45 52 20 42 59 20 6f 66 20 6a 6f 69 6e 73  RDER BY of joins
ea80: 20 76 69 61 20 69 6e 64 65 78 20 2a 2f 0a 23 64   via index */.#d
ea90: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 72 61  efine SQLITE_Tra
eaa0: 6e 73 69 74 69 76 65 20 20 20 20 20 30 78 30 30  nsitive     0x00
eab0: 38 30 20 20 20 2f 2a 20 54 72 61 6e 73 69 74 69  80   /* Transiti
eac0: 76 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  ve constraints *
ead0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
eae0: 5f 4f 6d 69 74 4e 6f 6f 70 4a 6f 69 6e 20 20 20  _OmitNoopJoin   
eaf0: 30 78 30 31 30 30 20 20 20 2f 2a 20 4f 6d 69 74  0x0100   /* Omit
eb00: 20 75 6e 75 73 65 64 20 74 61 62 6c 65 73 20 69   unused tables i
eb10: 6e 20 6a 6f 69 6e 73 20 2a 2f 0a 23 64 65 66 69  n joins */.#defi
eb20: 6e 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 4f  ne SQLITE_CountO
eb30: 66 56 69 65 77 20 20 20 20 30 78 30 32 30 30 20  fView    0x0200 
eb40: 20 20 2f 2a 20 54 68 65 20 63 6f 75 6e 74 2d 6f    /* The count-o
eb50: 66 2d 76 69 65 77 20 6f 70 74 69 6d 69 7a 61 74  f-view optimizat
eb60: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
eb70: 51 4c 49 54 45 5f 43 75 72 73 6f 72 48 69 6e 74  QLITE_CursorHint
eb80: 73 20 20 20 20 30 78 30 34 30 30 20 20 20 2f 2a  s    0x0400   /*
eb90: 20 41 64 64 20 4f 50 5f 43 75 72 73 6f 72 48 69   Add OP_CursorHi
eba0: 6e 74 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 23 64  nt opcodes */.#d
ebb0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 74 61  efine SQLITE_Sta
ebc0: 74 33 34 20 20 20 20 20 20 20 20 20 30 78 30 38  t34         0x08
ebd0: 30 30 20 20 20 2f 2a 20 55 73 65 20 53 54 41 54  00   /* Use STAT
ebe0: 33 20 6f 72 20 53 54 41 54 34 20 64 61 74 61 20  3 or STAT4 data 
ebf0: 2a 2f 0a 20 20 20 2f 2a 20 54 48 33 20 65 78 70  */.   /* TH3 exp
ec00: 65 63 74 73 20 74 68 65 20 53 74 61 74 33 34 20  ects the Stat34 
ec10: 20 5e 5e 5e 5e 5e 5e 20 76 61 6c 75 65 20 74 6f   ^^^^^^ value to
ec20: 20 62 65 20 30 78 30 38 30 30 2e 20 20 44 6f 6e   be 0x0800.  Don
ec30: 27 74 20 63 68 61 6e 67 65 20 69 74 20 2a 2f 0a  't change it */.
ec40: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50  #define SQLITE_P
ec50: 75 73 68 44 6f 77 6e 20 20 20 20 20 20 20 30 78  ushDown       0x
ec60: 31 30 30 30 20 20 20 2f 2a 20 54 68 65 20 70 75  1000   /* The pu
ec70: 73 68 2d 64 6f 77 6e 20 6f 70 74 69 6d 69 7a 61  sh-down optimiza
ec80: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
ec90: 53 51 4c 49 54 45 5f 53 69 6d 70 6c 69 66 79 4a  SQLITE_SimplifyJ
eca0: 6f 69 6e 20 20 20 30 78 32 30 30 30 20 20 20 2f  oin   0x2000   /
ecb0: 2a 20 43 6f 6e 76 65 72 74 20 4c 45 46 54 20 4a  * Convert LEFT J
ecc0: 4f 49 4e 20 74 6f 20 4a 4f 49 4e 20 2a 2f 0a 23  OIN to JOIN */.#
ecd0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 6b  define SQLITE_Sk
ece0: 69 70 53 63 61 6e 20 20 20 20 20 20 20 30 78 34  ipScan       0x4
ecf0: 30 30 30 20 20 20 2f 2a 20 53 6b 69 70 2d 73 63  000   /* Skip-sc
ed00: 61 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ans */.#define S
ed10: 51 4c 49 54 45 5f 50 72 6f 70 61 67 61 74 65 43  QLITE_PropagateC
ed20: 6f 6e 73 74 20 30 78 38 30 30 30 20 20 20 2f 2a  onst 0x8000   /*
ed30: 20 54 68 65 20 63 6f 6e 73 74 61 6e 74 20 70 72   The constant pr
ed40: 6f 70 61 67 61 74 69 6f 6e 20 6f 70 74 20 2a 2f  opagation opt */
ed50: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
ed60: 41 6c 6c 4f 70 74 73 20 20 20 20 20 20 20 20 30  AllOpts        0
ed70: 78 66 66 66 66 20 20 20 2f 2a 20 41 6c 6c 20 6f  xffff   /* All o
ed80: 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a  ptimizations */.
ed90: 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 66 6f  ./*.** Macros fo
eda0: 72 20 74 65 73 74 69 6e 67 20 77 68 65 74 68 65  r testing whethe
edb0: 72 20 6f 72 20 6e 6f 74 20 6f 70 74 69 6d 69 7a  r or not optimiz
edc0: 61 74 69 6f 6e 73 20 61 72 65 20 65 6e 61 62 6c  ations are enabl
edd0: 65 64 20 6f 72 20 64 69 73 61 62 6c 65 64 2e 0a  ed or disabled..
ede0: 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d  */.#define Optim
edf0: 69 7a 61 74 69 6f 6e 44 69 73 61 62 6c 65 64 28  izationDisabled(
ee00: 64 62 2c 20 6d 61 73 6b 29 20 20 28 28 28 64 62  db, mask)  (((db
ee10: 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26 28 6d  )->dbOptFlags&(m
ee20: 61 73 6b 29 29 21 3d 30 29 0a 23 64 65 66 69 6e  ask))!=0).#defin
ee30: 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 45 6e  e OptimizationEn
ee40: 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20  abled(db, mask) 
ee50: 20 20 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46    (((db)->dbOptF
ee60: 6c 61 67 73 26 28 6d 61 73 6b 29 29 3d 3d 30 29  lags&(mask))==0)
ee70: 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74  ../*.** Return t
ee80: 72 75 65 20 69 66 20 69 74 20 4f 4b 20 74 6f 20  rue if it OK to 
ee90: 66 61 63 74 6f 72 20 63 6f 6e 73 74 61 6e 74 20  factor constant 
eea0: 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 74 6f  expressions into
eeb0: 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 61 74   the initializat
eec0: 69 6f 6e 0a 2a 2a 20 63 6f 64 65 2e 20 54 68 65  ion.** code. The
eed0: 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20 50   argument is a P
eee0: 61 72 73 65 20 6f 62 6a 65 63 74 20 66 6f 72 20  arse object for 
eef0: 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74  the code generat
ef00: 6f 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43  or..*/.#define C
ef10: 6f 6e 73 74 46 61 63 74 6f 72 4f 6b 28 50 29 20  onstFactorOk(P) 
ef20: 28 28 50 29 2d 3e 6f 6b 43 6f 6e 73 74 46 61 63  ((P)->okConstFac
ef30: 74 6f 72 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73  tor)../*.** Poss
ef40: 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20  ible values for 
ef50: 74 68 65 20 73 71 6c 69 74 65 2e 6d 61 67 69 63  the sqlite.magic
ef60: 20 66 69 65 6c 64 2e 0a 2a 2a 20 54 68 65 20 6e   field..** The n
ef70: 75 6d 62 65 72 73 20 61 72 65 20 6f 62 74 61 69  umbers are obtai
ef80: 6e 65 64 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e  ned at random an
ef90: 64 20 68 61 76 65 20 6e 6f 20 73 70 65 63 69 61  d have no specia
efa0: 6c 20 6d 65 61 6e 69 6e 67 2c 20 6f 74 68 65 72  l meaning, other
efb0: 0a 2a 2a 20 74 68 61 6e 20 62 65 69 6e 67 20 64  .** than being d
efc0: 69 73 74 69 6e 63 74 20 66 72 6f 6d 20 6f 6e 65  istinct from one
efd0: 20 61 6e 6f 74 68 65 72 2e 0a 2a 2f 0a 23 64 65   another..*/.#de
efe0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49  fine SQLITE_MAGI
eff0: 43 5f 4f 50 45 4e 20 20 20 20 20 30 78 61 30 32  C_OPEN     0xa02
f000: 39 61 36 39 37 20 20 2f 2a 20 44 61 74 61 62 61  9a697  /* Databa
f010: 73 65 20 69 73 20 6f 70 65 6e 20 2a 2f 0a 23 64  se is open */.#d
f020: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47  efine SQLITE_MAG
f030: 49 43 5f 43 4c 4f 53 45 44 20 20 20 30 78 39 66  IC_CLOSED   0x9f
f040: 33 63 32 64 33 33 20 20 2f 2a 20 44 61 74 61 62  3c2d33  /* Datab
f050: 61 73 65 20 69 73 20 63 6c 6f 73 65 64 20 2a 2f  ase is closed */
f060: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
f070: 4d 41 47 49 43 5f 53 49 43 4b 20 20 20 20 20 30  MAGIC_SICK     0
f080: 78 34 62 37 37 31 32 39 30 20 20 2f 2a 20 45 72  x4b771290  /* Er
f090: 72 6f 72 20 61 6e 64 20 61 77 61 69 74 69 6e 67  ror and awaiting
f0a0: 20 63 6c 6f 73 65 20 2a 2f 0a 23 64 65 66 69 6e   close */.#defin
f0b0: 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42  e SQLITE_MAGIC_B
f0c0: 55 53 59 20 20 20 20 20 30 78 66 30 33 62 37 39  USY     0xf03b79
f0d0: 30 36 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20  06  /* Database 
f0e0: 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65  currently in use
f0f0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
f100: 54 45 5f 4d 41 47 49 43 5f 45 52 52 4f 52 20 20  TE_MAGIC_ERROR  
f110: 20 20 30 78 62 35 33 35 37 39 33 30 20 20 2f 2a    0xb5357930  /*
f120: 20 41 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53   An SQLITE_MISUS
f130: 45 20 65 72 72 6f 72 20 6f 63 63 75 72 72 65 64  E error occurred
f140: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
f150: 54 45 5f 4d 41 47 49 43 5f 5a 4f 4d 42 49 45 20  TE_MAGIC_ZOMBIE 
f160: 20 20 30 78 36 34 63 66 66 63 37 66 20 20 2f 2a    0x64cffc7f  /*
f170: 20 43 6c 6f 73 65 20 77 69 74 68 20 6c 61 73 74   Close with last
f180: 20 73 74 61 74 65 6d 65 6e 74 20 63 6c 6f 73 65   statement close
f190: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20   */../*.** Each 
f1a0: 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  SQL function is 
f1b0: 64 65 66 69 6e 65 64 20 62 79 20 61 6e 20 69 6e  defined by an in
f1c0: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
f1d0: 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63  llowing.** struc
f1e0: 74 75 72 65 2e 20 20 46 6f 72 20 67 6c 6f 62 61  ture.  For globa
f1f0: 6c 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63 74  l built-in funct
f200: 69 6f 6e 73 20 28 65 78 3a 20 73 75 62 73 74 72  ions (ex: substr
f210: 28 29 2c 20 6d 61 78 28 29 2c 20 63 6f 75 6e 74  (), max(), count
f220: 28 29 29 0a 2a 2a 20 61 20 70 6f 69 6e 74 65 72  ()).** a pointer
f230: 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75   to this structu
f240: 72 65 20 69 73 20 68 65 6c 64 20 69 6e 20 74 68  re is held in th
f250: 65 20 73 71 6c 69 74 65 33 42 75 69 6c 74 69 6e  e sqlite3Builtin
f260: 46 75 6e 63 74 69 6f 6e 73 20 6f 62 6a 65 63 74  Functions object
f270: 2e 0a 2a 2a 20 46 6f 72 20 70 65 72 2d 63 6f 6e  ..** For per-con
f280: 6e 65 63 74 69 6f 6e 20 61 70 70 6c 69 63 61 74  nection applicat
f290: 69 6f 6e 2d 64 65 66 69 6e 65 64 20 66 75 6e 63  ion-defined func
f2a0: 74 69 6f 6e 73 2c 20 61 20 70 6f 69 6e 74 65 72  tions, a pointer
f2b0: 20 74 6f 20 74 68 69 73 0a 2a 2a 20 73 74 72 75   to this.** stru
f2c0: 63 74 75 72 65 20 69 73 20 68 65 6c 64 20 69 6e  cture is held in
f2d0: 20 74 68 65 20 64 62 2d 3e 61 48 61 73 68 20 68   the db->aHash h
f2e0: 61 73 68 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a  ash table..**.**
f2f0: 20 54 68 65 20 75 2e 70 48 61 73 68 20 66 69 65   The u.pHash fie
f300: 6c 64 20 69 73 20 75 73 65 64 20 62 79 20 74 68  ld is used by th
f310: 65 20 67 6c 6f 62 61 6c 20 62 75 69 6c 74 2d 69  e global built-i
f320: 6e 73 2e 20 20 54 68 65 20 75 2e 70 44 65 73 74  ns.  The u.pDest
f330: 72 75 63 74 6f 72 0a 2a 2a 20 66 69 65 6c 64 20  ructor.** field 
f340: 69 73 20 75 73 65 64 20 62 79 20 70 65 72 2d 63  is used by per-c
f350: 6f 6e 6e 65 63 74 69 6f 6e 20 61 70 70 2d 64 65  onnection app-de
f360: 66 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2f 0a  f functions..*/.
f370: 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 20 7b  struct FuncDef {
f380: 0a 20 20 69 38 20 6e 41 72 67 3b 20 20 20 20 20  .  i8 nArg;     
f390: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
f3a0: 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e 20  r of arguments. 
f3b0: 20 2d 31 20 6d 65 61 6e 73 20 75 6e 6c 69 6d 69   -1 means unlimi
f3c0: 74 65 64 20 2a 2f 0a 20 20 75 33 32 20 66 75 6e  ted */.  u32 fun
f3d0: 63 46 6c 61 67 73 3b 20 20 20 20 20 20 20 2f 2a  cFlags;       /*
f3e0: 20 53 6f 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f   Some combinatio
f3f0: 6e 20 6f 66 20 53 51 4c 49 54 45 5f 46 55 4e 43  n of SQLITE_FUNC
f400: 5f 2a 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55  _* */.  void *pU
f410: 73 65 72 44 61 74 61 3b 20 20 20 20 20 2f 2a 20  serData;     /* 
f420: 55 73 65 72 20 64 61 74 61 20 70 61 72 61 6d 65  User data parame
f430: 74 65 72 20 2a 2f 0a 20 20 46 75 6e 63 44 65 66  ter */.  FuncDef
f440: 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a   *pNext;      /*
f450: 20 4e 65 78 74 20 66 75 6e 63 74 69 6f 6e 20 77   Next function w
f460: 69 74 68 20 73 61 6d 65 20 6e 61 6d 65 20 2a 2f  ith same name */
f470: 0a 20 20 76 6f 69 64 20 28 2a 78 53 46 75 6e 63  .  void (*xSFunc
f480: 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
f490: 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
f4a0: 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 66 75 6e 63  alue**); /* func
f4b0: 20 6f 72 20 61 67 67 2d 73 74 65 70 20 2a 2f 0a   or agg-step */.
f4c0: 20 20 76 6f 69 64 20 28 2a 78 46 69 6e 61 6c 69    void (*xFinali
f4d0: 7a 65 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ze)(sqlite3_cont
f4e0: 65 78 74 2a 29 3b 20 20 20 20 20 20 20 20 20 20  ext*);          
f4f0: 20 20 20 20 20 20 20 20 2f 2a 20 41 67 67 20 66          /* Agg f
f500: 69 6e 61 6c 69 7a 65 72 20 2a 2f 0a 20 20 76 6f  inalizer */.  vo
f510: 69 64 20 28 2a 78 56 61 6c 75 65 29 28 73 71 6c  id (*xValue)(sql
f520: 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 20  ite3_context*); 
f530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f540: 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 61      /* Current a
f550: 67 67 20 76 61 6c 75 65 20 2a 2f 0a 20 20 76 6f  gg value */.  vo
f560: 69 64 20 28 2a 78 49 6e 76 65 72 73 65 29 28 73  id (*xInverse)(s
f570: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
f580: 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
f590: 65 2a 2a 29 3b 20 2f 2a 20 69 6e 76 65 72 73 65  e**); /* inverse
f5a0: 20 61 67 67 2d 73 74 65 70 20 2a 2f 0a 20 20 63   agg-step */.  c
f5b0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65  onst char *zName
f5c0: 3b 20 20 20 2f 2a 20 53 51 4c 20 6e 61 6d 65 20  ;   /* SQL name 
f5d0: 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e  of the function.
f5e0: 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20   */.  union {.  
f5f0: 20 20 46 75 6e 63 44 65 66 20 2a 70 48 61 73 68    FuncDef *pHash
f600: 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 77  ;      /* Next w
f610: 69 74 68 20 61 20 64 69 66 66 65 72 65 6e 74 20  ith a different 
f620: 6e 61 6d 65 20 62 75 74 20 74 68 65 20 73 61 6d  name but the sam
f630: 65 20 68 61 73 68 20 2a 2f 0a 20 20 20 20 46 75  e hash */.    Fu
f640: 6e 63 44 65 73 74 72 75 63 74 6f 72 20 2a 70 44  ncDestructor *pD
f650: 65 73 74 72 75 63 74 6f 72 3b 20 20 20 2f 2a 20  estructor;   /* 
f660: 52 65 66 65 72 65 6e 63 65 20 63 6f 75 6e 74 65  Reference counte
f670: 64 20 64 65 73 74 72 75 63 74 6f 72 20 66 75 6e  d destructor fun
f680: 63 74 69 6f 6e 20 2a 2f 0a 20 20 7d 20 75 3b 0a  ction */.  } u;.
f690: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 73  };../*.** This s
f6a0: 74 72 75 63 74 75 72 65 20 65 6e 63 61 70 73 75  tructure encapsu
f6b0: 6c 61 74 65 73 20 61 20 75 73 65 72 2d 66 75 6e  lates a user-fun
f6c0: 63 74 69 6f 6e 20 64 65 73 74 72 75 63 74 6f 72  ction destructor
f6d0: 20 63 61 6c 6c 62 61 63 6b 20 28 61 73 0a 2a 2a   callback (as.**
f6e0: 20 63 6f 6e 66 69 67 75 72 65 64 20 75 73 69 6e   configured usin
f6f0: 67 20 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  g create_functio
f700: 6e 5f 76 32 28 29 29 20 61 6e 64 20 61 20 72 65  n_v2()) and a re
f710: 66 65 72 65 6e 63 65 20 63 6f 75 6e 74 65 72 2e  ference counter.
f720: 20 57 68 65 6e 0a 2a 2a 20 63 72 65 61 74 65 5f   When.** create_
f730: 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29 20 69 73  function_v2() is
f740: 20 63 61 6c 6c 65 64 20 74 6f 20 63 72 65 61 74   called to creat
f750: 65 20 61 20 66 75 6e 63 74 69 6f 6e 20 77 69 74  e a function wit
f760: 68 20 61 20 64 65 73 74 72 75 63 74 6f 72 2c 0a  h a destructor,.
f770: 2a 2a 20 61 20 73 69 6e 67 6c 65 20 6f 62 6a 65  ** a single obje
f780: 63 74 20 6f 66 20 74 68 69 73 20 74 79 70 65 20  ct of this type 
f790: 69 73 20 61 6c 6c 6f 63 61 74 65 64 2e 20 46 75  is allocated. Fu
f7a0: 6e 63 44 65 73 74 72 75 63 74 6f 72 2e 6e 52 65  ncDestructor.nRe
f7b0: 66 20 69 73 20 73 65 74 20 74 6f 0a 2a 2a 20 74  f is set to.** t
f7c0: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 46 75 6e  he number of Fun
f7d0: 63 44 65 66 20 6f 62 6a 65 63 74 73 20 63 72 65  cDef objects cre
f7e0: 61 74 65 64 20 28 65 69 74 68 65 72 20 31 20 6f  ated (either 1 o
f7f0: 72 20 33 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f  r 3, depending o
f800: 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20 6f 72 20  n whether.** or 
f810: 6e 6f 74 20 74 68 65 20 73 70 65 63 69 66 69 65  not the specifie
f820: 64 20 65 6e 63 6f 64 69 6e 67 20 69 73 20 53 51  d encoding is SQ
f830: 4c 49 54 45 5f 41 4e 59 29 2e 20 54 68 65 20 46  LITE_ANY). The F
f840: 75 6e 63 44 65 66 2e 70 44 65 73 74 72 75 63 74  uncDef.pDestruct
f850: 6f 72 0a 2a 2a 20 6d 65 6d 62 65 72 20 6f 66 20  or.** member of 
f860: 65 61 63 68 20 6f 66 20 74 68 65 20 6e 65 77 20  each of the new 
f870: 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20  FuncDef objects 
f880: 69 73 20 73 65 74 20 74 6f 20 70 6f 69 6e 74 20  is set to point 
f890: 74 6f 20 74 68 65 20 61 6c 6c 6f 63 61 74 65 64  to the allocated
f8a0: 0a 2a 2a 20 46 75 6e 63 44 65 73 74 72 75 63 74  .** FuncDestruct
f8b0: 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 61  or..**.** Therea
f8c0: 66 74 65 72 2c 20 77 68 65 6e 20 6f 6e 65 20 6f  fter, when one o
f8d0: 66 20 74 68 65 20 46 75 6e 63 44 65 66 20 6f 62  f the FuncDef ob
f8e0: 6a 65 63 74 73 20 69 73 20 64 65 6c 65 74 65 64  jects is deleted
f8f0: 2c 20 74 68 65 20 72 65 66 65 72 65 6e 63 65 0a  , the reference.
f900: 2a 2a 20 63 6f 75 6e 74 20 6f 6e 20 74 68 69 73  ** count on this
f910: 20 6f 62 6a 65 63 74 20 69 73 20 64 65 63 72 65   object is decre
f920: 6d 65 6e 74 65 64 2e 20 57 68 65 6e 20 69 74 20  mented. When it 
f930: 72 65 61 63 68 65 73 20 30 2c 20 74 68 65 20 64  reaches 0, the d
f940: 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 69 73 20  estructor.** is 
f950: 69 6e 76 6f 6b 65 64 20 61 6e 64 20 74 68 65 20  invoked and the 
f960: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 73  FuncDestructor s
f970: 74 72 75 63 74 75 72 65 20 66 72 65 65 64 2e 0a  tructure freed..
f980: 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65  */.struct FuncDe
f990: 73 74 72 75 63 74 6f 72 20 7b 0a 20 20 69 6e 74  structor {.  int
f9a0: 20 6e 52 65 66 3b 0a 20 20 76 6f 69 64 20 28 2a   nRef;.  void (*
f9b0: 78 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a  xDestroy)(void *
f9c0: 29 3b 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72  );.  void *pUser
f9d0: 44 61 74 61 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  Data;.};../*.** 
f9e0: 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20  Possible values 
f9f0: 66 6f 72 20 46 75 6e 63 44 65 66 2e 66 6c 61 67  for FuncDef.flag
fa00: 73 2e 20 20 4e 6f 74 65 20 74 68 61 74 20 74 68  s.  Note that th
fa10: 65 20 5f 4c 45 4e 47 54 48 20 61 6e 64 20 5f 54  e _LENGTH and _T
fa20: 59 50 45 4f 46 0a 2a 2a 20 76 61 6c 75 65 73 20  YPEOF.** values 
fa30: 6d 75 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 20  must correspond 
fa40: 74 6f 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48  to OPFLAG_LENGTH
fa50: 41 52 47 20 61 6e 64 20 4f 50 46 4c 41 47 5f 54  ARG and OPFLAG_T
fa60: 59 50 45 4f 46 41 52 47 2e 20 20 41 6e 64 0a 2a  YPEOFARG.  And.*
fa70: 2a 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  * SQLITE_FUNC_CO
fa80: 4e 53 54 41 4e 54 20 6d 75 73 74 20 62 65 20 74  NSTANT must be t
fa90: 68 65 20 73 61 6d 65 20 61 73 20 53 51 4c 49 54  he same as SQLIT
faa0: 45 5f 44 45 54 45 52 4d 49 4e 49 53 54 49 43 2e  E_DETERMINISTIC.
fab0: 20 20 54 68 65 72 65 0a 2a 2a 20 61 72 65 20 61    There.** are a
fac0: 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e  ssert() statemen
fad0: 74 73 20 69 6e 20 74 68 65 20 63 6f 64 65 20 74  ts in the code t
fae0: 6f 20 76 65 72 69 66 79 20 74 68 69 73 2e 0a 2a  o verify this..*
faf0: 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74  *.** Value const
fb00: 72 61 69 6e 74 73 20 28 65 6e 66 6f 72 63 65 64  raints (enforced
fb10: 20 76 69 61 20 61 73 73 65 72 74 28 29 29 3a 0a   via assert()):.
fb20: 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 46 55  **     SQLITE_FU
fb30: 4e 43 5f 4d 49 4e 4d 41 58 20 20 20 20 3d 3d 20  NC_MINMAX    == 
fb40: 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20 20 20   NC_MinMaxAgg   
fb50: 20 20 20 3d 3d 20 53 46 5f 4d 69 6e 4d 61 78 41     == SF_MinMaxA
fb60: 67 67 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45  gg.**     SQLITE
fb70: 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 20 20 20 20  _FUNC_LENGTH    
fb80: 3d 3d 20 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54  ==  OPFLAG_LENGT
fb90: 48 41 52 47 0a 2a 2a 20 20 20 20 20 53 51 4c 49  HARG.**     SQLI
fba0: 54 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46 20 20  TE_FUNC_TYPEOF  
fbb0: 20 20 3d 3d 20 20 4f 50 46 4c 41 47 5f 54 59 50    ==  OPFLAG_TYP
fbc0: 45 4f 46 41 52 47 0a 2a 2a 20 20 20 20 20 53 51  EOFARG.**     SQ
fbd0: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41  LITE_FUNC_CONSTA
fbe0: 4e 54 20 20 3d 3d 20 20 53 51 4c 49 54 45 5f 44  NT  ==  SQLITE_D
fbf0: 45 54 45 52 4d 49 4e 49 53 54 49 43 20 66 72 6f  ETERMINISTIC fro
fc00: 6d 20 74 68 65 20 41 50 49 0a 2a 2a 20 20 20 20  m the API.**    
fc10: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 4e 43   SQLITE_FUNC_ENC
fc20: 4d 41 53 4b 20 20 20 64 65 70 65 6e 64 73 20 6f  MASK   depends o
fc30: 6e 20 53 51 4c 49 54 45 5f 55 54 46 2a 20 6d 61  n SQLITE_UTF* ma
fc40: 63 72 6f 73 20 69 6e 20 74 68 65 20 41 50 49 0a  cros in the API.
fc50: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
fc60: 45 5f 46 55 4e 43 5f 45 4e 43 4d 41 53 4b 20 20  E_FUNC_ENCMASK  
fc70: 30 78 30 30 30 33 20 2f 2a 20 53 51 4c 49 54 45  0x0003 /* SQLITE
fc80: 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 55 54  _UTF8, SQLITE_UT
fc90: 46 31 36 42 45 20 6f 72 20 55 54 46 31 36 4c 45  F16BE or UTF16LE
fca0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
fcb0: 54 45 5f 46 55 4e 43 5f 4c 49 4b 45 20 20 20 20  TE_FUNC_LIKE    
fcc0: 20 30 78 30 30 30 34 20 2f 2a 20 43 61 6e 64 69   0x0004 /* Candi
fcd0: 64 61 74 65 20 66 6f 72 20 74 68 65 20 4c 49 4b  date for the LIK
fce0: 45 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 2a  E optimization *
fcf0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
fd00: 5f 46 55 4e 43 5f 43 41 53 45 20 20 20 20 20 30  _FUNC_CASE     0
fd10: 78 30 30 30 38 20 2f 2a 20 43 61 73 65 2d 73 65  x0008 /* Case-se
fd20: 6e 73 69 74 69 76 65 20 4c 49 4b 45 2d 74 79 70  nsitive LIKE-typ
fd30: 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  e function */.#d
fd40: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
fd50: 43 5f 45 50 48 45 4d 20 20 20 20 30 78 30 30 31  C_EPHEM    0x001
fd60: 30 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c 2e 20  0 /* Ephemeral. 
fd70: 20 44 65 6c 65 74 65 20 77 69 74 68 20 56 44 42   Delete with VDB
fd80: 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  E */.#define SQL
fd90: 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
fda0: 4c 20 30 78 30 30 32 30 20 2f 2a 20 73 71 6c 69  L 0x0020 /* sqli
fdb0: 74 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65  te3GetFuncCollSe
fdc0: 71 28 29 20 6d 69 67 68 74 20 62 65 20 63 61 6c  q() might be cal
fdd0: 6c 65 64 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  led*/.#define SQ
fde0: 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48  LITE_FUNC_LENGTH
fdf0: 20 20 20 30 78 30 30 34 30 20 2f 2a 20 42 75 69     0x0040 /* Bui
fe00: 6c 74 2d 69 6e 20 6c 65 6e 67 74 68 28 29 20 66  lt-in length() f
fe10: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  unction */.#defi
fe20: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54  ne SQLITE_FUNC_T
fe30: 59 50 45 4f 46 20 20 20 30 78 30 30 38 30 20 2f  YPEOF   0x0080 /
fe40: 2a 20 42 75 69 6c 74 2d 69 6e 20 74 79 70 65 6f  * Built-in typeo
fe50: 66 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  f() function */.
fe60: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
fe70: 55 4e 43 5f 43 4f 55 4e 54 20 20 20 20 30 78 30  UNC_COUNT    0x0
fe80: 31 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20  100 /* Built-in 
fe90: 63 6f 75 6e 74 28 2a 29 20 61 67 67 72 65 67 61  count(*) aggrega
fea0: 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  te */.#define SQ
feb0: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 41 4c 45 53  LITE_FUNC_COALES
fec0: 43 45 20 30 78 30 32 30 30 20 2f 2a 20 42 75 69  CE 0x0200 /* Bui
fed0: 6c 74 2d 69 6e 20 63 6f 61 6c 65 73 63 65 28 29  lt-in coalesce()
fee0: 20 6f 72 20 69 66 6e 75 6c 6c 28 29 20 2a 2f 0a   or ifnull() */.
fef0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
ff00: 55 4e 43 5f 55 4e 4c 49 4b 45 4c 59 20 30 78 30  UNC_UNLIKELY 0x0
ff10: 34 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20  400 /* Built-in 
ff20: 75 6e 6c 69 6b 65 6c 79 28 29 20 66 75 6e 63 74  unlikely() funct
ff30: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
ff40: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
ff50: 41 4e 54 20 30 78 30 38 30 30 20 2f 2a 20 43 6f  ANT 0x0800 /* Co
ff60: 6e 73 74 61 6e 74 20 69 6e 70 75 74 73 20 67 69  nstant inputs gi
ff70: 76 65 20 61 20 63 6f 6e 73 74 61 6e 74 20 6f 75  ve a constant ou
ff80: 74 70 75 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tput */.#define 
ff90: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d  SQLITE_FUNC_MINM
ffa0: 41 58 20 20 20 30 78 31 30 30 30 20 2f 2a 20 54  AX   0x1000 /* T
ffb0: 72 75 65 20 66 6f 72 20 6d 69 6e 28 29 20 61 6e  rue for min() an
ffc0: 64 20 6d 61 78 28 29 20 61 67 67 72 65 67 61 74  d max() aggregat
ffd0: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
ffe0: 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e  LITE_FUNC_SLOCHN
fff0: 47 20 20 30 78 32 30 30 30 20 2f 2a 20 22 53 6c  G  0x2000 /* "Sl
10000 6f 77 20 43 68 61 6e 67 65 22 2e 20 56 61 6c 75  ow Change". Valu
10010 65 20 63 6f 6e 73 74 61 6e 74 20 64 75 72 69 6e  e constant durin
10020 67 20 61 0a 20 20 20 20 20 20 20 20 20 20 20 20  g a.            
10030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10040 20 20 20 20 20 20 20 20 2a 2a 20 73 69 6e 67 6c          ** singl
10050 65 20 71 75 65 72 79 20 2d 20 6d 69 67 68 74 20  e query - might 
10060 63 68 61 6e 67 65 20 6f 76 65 72 20 74 69 6d 65  change over time
10070 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
10080 54 45 5f 46 55 4e 43 5f 41 46 46 49 4e 49 54 59  TE_FUNC_AFFINITY
10090 20 30 78 34 30 30 30 20 2f 2a 20 42 75 69 6c 74   0x4000 /* Built
100a0 2d 69 6e 20 61 66 66 69 6e 69 74 79 28 29 20 66  -in affinity() f
100b0 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  unction */.#defi
100c0 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4f  ne SQLITE_FUNC_O
100d0 46 46 53 45 54 20 20 20 30 78 38 30 30 30 20 2f  FFSET   0x8000 /
100e0 2a 20 42 75 69 6c 74 2d 69 6e 20 73 71 6c 69 74  * Built-in sqlit
100f0 65 5f 6f 66 66 73 65 74 28 29 20 66 75 6e 63 74  e_offset() funct
10100 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
10110 51 4c 49 54 45 5f 46 55 4e 43 5f 57 49 4e 44 4f  QLITE_FUNC_WINDO
10120 57 20 20 30 78 31 30 30 30 30 20 2f 2a 20 42 75  W  0x10000 /* Bu
10130 69 6c 74 2d 69 6e 20 77 69 6e 64 6f 77 2d 6f 6e  ilt-in window-on
10140 6c 79 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  ly function */.#
10150 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
10160 4e 43 5f 57 49 4e 44 4f 57 5f 53 49 5a 45 20 20  NC_WINDOW_SIZE  
10170 30 78 32 30 30 30 30 20 20 2f 2a 20 52 65 71 75  0x20000  /* Requ
10180 69 72 65 73 20 70 61 72 74 69 74 69 6f 6e 20 73  ires partition s
10190 69 7a 65 20 61 73 20 61 72 67 2e 20 2a 2f 0a 0a  ize as arg. */..
101a0 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
101b0 69 6e 67 20 74 68 72 65 65 20 6d 61 63 72 6f 73  ing three macros
101c0 2c 20 46 55 4e 43 54 49 4f 4e 28 29 2c 20 4c 49  , FUNCTION(), LI
101d0 4b 45 46 55 4e 43 28 29 20 61 6e 64 20 41 47 47  KEFUNC() and AGG
101e0 52 45 47 41 54 45 28 29 20 61 72 65 0a 2a 2a 20  REGATE() are.** 
101f0 75 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 74  used to create t
10200 68 65 20 69 6e 69 74 69 61 6c 69 7a 65 72 73 20  he initializers 
10210 66 6f 72 20 74 68 65 20 46 75 6e 63 44 65 66 20  for the FuncDef 
10220 73 74 72 75 63 74 75 72 65 73 2e 0a 2a 2a 0a 2a  structures..**.*
10230 2a 20 20 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61  *   FUNCTION(zNa
10240 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
10250 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20  bNC, xFunc).**  
10260 20 20 20 55 73 65 64 20 74 6f 20 63 72 65 61 74     Used to creat
10270 65 20 61 20 73 63 61 6c 61 72 20 66 75 6e 63 74  e a scalar funct
10280 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f  ion definition o
10290 66 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61  f a function zNa
102a0 6d 65 0a 2a 2a 20 20 20 20 20 69 6d 70 6c 65 6d  me.**     implem
102b0 65 6e 74 65 64 20 62 79 20 43 20 66 75 6e 63 74  ented by C funct
102c0 69 6f 6e 20 78 46 75 6e 63 20 74 68 61 74 20 61  ion xFunc that a
102d0 63 63 65 70 74 73 20 6e 41 72 67 20 61 72 67 75  ccepts nArg argu
102e0 6d 65 6e 74 73 2e 20 54 68 65 0a 2a 2a 20 20 20  ments. The.**   
102f0 20 20 76 61 6c 75 65 20 70 61 73 73 65 64 20 61    value passed a
10300 73 20 69 41 72 67 20 69 73 20 63 61 73 74 20 74  s iArg is cast t
10310 6f 20 61 20 28 76 6f 69 64 2a 29 20 61 6e 64 20  o a (void*) and 
10320 6d 61 64 65 20 61 76 61 69 6c 61 62 6c 65 0a 2a  made available.*
10330 2a 20 20 20 20 20 61 73 20 74 68 65 20 75 73 65  *     as the use
10340 72 2d 64 61 74 61 20 28 73 71 6c 69 74 65 33 5f  r-data (sqlite3_
10350 75 73 65 72 5f 64 61 74 61 28 29 29 20 66 6f 72  user_data()) for
10360 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 49   the function. I
10370 66 0a 2a 2a 20 20 20 20 20 61 72 67 75 6d 65 6e  f.**     argumen
10380 74 20 62 4e 43 20 69 73 20 74 72 75 65 2c 20 74  t bNC is true, t
10390 68 65 6e 20 74 68 65 20 53 51 4c 49 54 45 5f 46  hen the SQLITE_F
103a0 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 66 6c 61  UNC_NEEDCOLL fla
103b0 67 20 69 73 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20  g is set..**.** 
103c0 20 20 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d    VFUNCTION(zNam
103d0 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
103e0 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20  NC, xFunc).**   
103f0 20 20 4c 69 6b 65 20 46 55 4e 43 54 49 4f 4e 20    Like FUNCTION 
10400 65 78 63 65 70 74 20 69 74 20 6f 6d 69 74 73 20  except it omits 
10410 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  the SQLITE_FUNC_
10420 43 4f 4e 53 54 41 4e 54 20 66 6c 61 67 2e 0a 2a  CONSTANT flag..*
10430 2a 0a 2a 2a 20 20 20 44 46 55 4e 43 54 49 4f 4e  *.**   DFUNCTION
10440 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
10450 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a  rg, bNC, xFunc).
10460 2a 2a 20 20 20 20 20 4c 69 6b 65 20 46 55 4e 43  **     Like FUNC
10470 54 49 4f 4e 20 65 78 63 65 70 74 20 69 74 20 6f  TION except it o
10480 6d 69 74 73 20 74 68 65 20 53 51 4c 49 54 45 5f  mits the SQLITE_
10490 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66 6c  FUNC_CONSTANT fl
104a0 61 67 20 61 6e 64 0a 2a 2a 20 20 20 20 20 61 64  ag and.**     ad
104b0 64 73 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55  ds the SQLITE_FU
104c0 4e 43 5f 53 4c 4f 43 48 4e 47 20 66 6c 61 67 2e  NC_SLOCHNG flag.
104d0 20 20 55 73 65 64 20 66 6f 72 20 64 61 74 65 20    Used for date 
104e0 26 20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73  & time functions
104f0 0a 2a 2a 20 20 20 20 20 61 6e 64 20 66 75 6e 63  .**     and func
10500 74 69 6f 6e 73 20 6c 69 6b 65 20 73 71 6c 69 74  tions like sqlit
10510 65 5f 76 65 72 73 69 6f 6e 28 29 20 74 68 61 74  e_version() that
10520 20 63 61 6e 20 63 68 61 6e 67 65 2c 20 62 75 74   can change, but
10530 20 6e 6f 74 20 64 75 72 69 6e 67 0a 2a 2a 20 20   not during.**  
10540 20 20 20 61 20 73 69 6e 67 6c 65 20 71 75 65 72     a single quer
10550 79 2e 20 20 54 68 65 20 69 41 72 67 20 69 73 20  y.  The iArg is 
10560 69 67 6e 6f 72 65 64 2e 20 20 54 68 65 20 75 73  ignored.  The us
10570 65 72 2d 64 61 74 61 20 69 73 20 61 6c 77 61 79  er-data is alway
10580 73 20 73 65 74 0a 2a 2a 20 20 20 20 20 74 6f 20  s set.**     to 
10590 61 20 4e 55 4c 4c 20 70 6f 69 6e 74 65 72 2e 20  a NULL pointer. 
105a0 20 54 68 65 20 62 4e 43 20 70 61 72 61 6d 65 74   The bNC paramet
105b0 65 72 20 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a  er is not used..
105c0 2a 2a 0a 2a 2a 20 20 20 50 55 52 45 5f 44 41 54  **.**   PURE_DAT
105d0 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69  E(zName, nArg, i
105e0 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29  Arg, bNC, xFunc)
105f0 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 66 6f 72  .**     Used for
10600 20 22 70 75 72 65 22 20 64 61 74 65 2f 74 69 6d   "pure" date/tim
10610 65 20 66 75 6e 63 74 69 6f 6e 73 2c 20 74 68 69  e functions, thi
10620 73 20 6d 61 63 72 6f 20 69 73 20 6c 69 6b 65 20  s macro is like 
10630 44 46 55 4e 43 54 49 4f 4e 0a 2a 2a 20 20 20 20  DFUNCTION.**    
10640 20 65 78 63 65 70 74 20 74 68 61 74 20 69 74 20   except that it 
10650 64 6f 65 73 20 73 65 74 20 74 68 65 20 53 51 4c  does set the SQL
10660 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
10670 54 20 66 6c 61 67 73 2e 20 20 69 41 72 67 20 69  T flags.  iArg i
10680 73 0a 2a 2a 20 20 20 20 20 69 67 6e 6f 72 65 64  s.**     ignored
10690 20 61 6e 64 20 74 68 65 20 75 73 65 72 2d 64 61   and the user-da
106a0 74 61 20 66 6f 72 20 74 68 65 73 65 20 66 75 6e  ta for these fun
106b0 63 74 69 6f 6e 73 20 69 73 20 73 65 74 20 74 6f  ctions is set to
106c0 20 61 6e 20 0a 2a 2a 20 20 20 20 20 61 72 62 69   an .**     arbi
106d0 74 72 61 72 79 20 6e 6f 6e 2d 4e 55 4c 4c 20 70  trary non-NULL p
106e0 6f 69 6e 74 65 72 2e 20 20 54 68 65 20 62 4e 43  ointer.  The bNC
106f0 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e 6f   parameter is no
10700 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 20 20  t used..**.**   
10710 41 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c  AGGREGATE(zName,
10720 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
10730 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 29  , xStep, xFinal)
10740 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20  .**     Used to 
10750 63 72 65 61 74 65 20 61 6e 20 61 67 67 72 65 67  create an aggreg
10760 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 64 65 66  ate function def
10770 69 6e 69 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e  inition implemen
10780 74 65 64 20 62 79 0a 2a 2a 20 20 20 20 20 74 68  ted by.**     th
10790 65 20 43 20 66 75 6e 63 74 69 6f 6e 73 20 78 53  e C functions xS
107a0 74 65 70 20 61 6e 64 20 78 46 69 6e 61 6c 2e 20  tep and xFinal. 
107b0 54 68 65 20 66 69 72 73 74 20 66 6f 75 72 20 70  The first four p
107c0 61 72 61 6d 65 74 65 72 73 0a 2a 2a 20 20 20 20  arameters.**    
107d0 20 61 72 65 20 69 6e 74 65 72 70 72 65 74 65 64   are interpreted
107e0 20 69 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79   in the same way
107f0 20 61 73 20 74 68 65 20 66 69 72 73 74 20 34 20   as the first 4 
10800 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a 2a 2a  parameters to.**
10810 20 20 20 20 20 46 55 4e 43 54 49 4f 4e 28 29 2e       FUNCTION().
10820 0a 2a 2a 0a 2a 2a 20 20 20 57 46 55 4e 43 54 49  .**.**   WFUNCTI
10830 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  ON(zName, nArg, 
10840 69 41 72 67 2c 20 78 53 74 65 70 2c 20 78 46 69  iArg, xStep, xFi
10850 6e 61 6c 2c 20 78 56 61 6c 75 65 2c 20 78 49 6e  nal, xValue, xIn
10860 76 65 72 73 65 29 0a 2a 2a 20 20 20 20 20 55 73  verse).**     Us
10870 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 6e 20  ed to create an 
10880 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
10890 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 6d  on definition im
108a0 70 6c 65 6d 65 6e 74 65 64 20 62 79 0a 2a 2a 20  plemented by.** 
108b0 20 20 20 20 74 68 65 20 43 20 66 75 6e 63 74 69      the C functi
108c0 6f 6e 73 20 78 53 74 65 70 20 61 6e 64 20 78 46  ons xStep and xF
108d0 69 6e 61 6c 2e 20 54 68 65 20 66 69 72 73 74 20  inal. The first 
108e0 66 6f 75 72 20 70 61 72 61 6d 65 74 65 72 73 0a  four parameters.
108f0 2a 2a 20 20 20 20 20 61 72 65 20 69 6e 74 65 72  **     are inter
10900 70 72 65 74 65 64 20 69 6e 20 74 68 65 20 73 61  preted in the sa
10910 6d 65 20 77 61 79 20 61 73 20 74 68 65 20 66 69  me way as the fi
10920 72 73 74 20 34 20 70 61 72 61 6d 65 74 65 72 73  rst 4 parameters
10930 20 74 6f 0a 2a 2a 20 20 20 20 20 46 55 4e 43 54   to.**     FUNCT
10940 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c  ION()..**.**   L
10950 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e  IKEFUNC(zName, n
10960 41 72 67 2c 20 70 41 72 67 2c 20 66 6c 61 67 73  Arg, pArg, flags
10970 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f  ).**     Used to
10980 20 63 72 65 61 74 65 20 61 20 73 63 61 6c 61 72   create a scalar
10990 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69   function defini
109a0 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74 69  tion of a functi
109b0 6f 6e 20 7a 4e 61 6d 65 0a 2a 2a 20 20 20 20 20  on zName.**     
109c0 74 68 61 74 20 61 63 63 65 70 74 73 20 6e 41 72  that accepts nAr
109d0 67 20 61 72 67 75 6d 65 6e 74 73 20 61 6e 64 20  g arguments and 
109e0 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62  is implemented b
109f0 79 20 61 20 63 61 6c 6c 20 74 6f 20 43 0a 2a 2a  y a call to C.**
10a00 20 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 6c 69       function li
10a10 6b 65 46 75 6e 63 2e 20 41 72 67 75 6d 65 6e 74  keFunc. Argument
10a20 20 70 41 72 67 20 69 73 20 63 61 73 74 20 74 6f   pArg is cast to
10a30 20 61 20 28 76 6f 69 64 20 2a 29 20 61 6e 64 20   a (void *) and 
10a40 6d 61 64 65 0a 2a 2a 20 20 20 20 20 61 76 61 69  made.**     avai
10a50 6c 61 62 6c 65 20 61 73 20 74 68 65 20 66 75 6e  lable as the fun
10a60 63 74 69 6f 6e 20 75 73 65 72 2d 64 61 74 61 20  ction user-data 
10a70 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61  (sqlite3_user_da
10a80 74 61 28 29 29 2e 20 54 68 65 0a 2a 2a 20 20 20  ta()). The.**   
10a90 20 20 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 20    FuncDef.flags 
10aa0 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74 20  variable is set 
10ab0 74 6f 20 74 68 65 20 76 61 6c 75 65 20 70 61 73  to the value pas
10ac0 73 65 64 20 61 73 20 74 68 65 20 66 6c 61 67 73  sed as the flags
10ad0 0a 2a 2a 20 20 20 20 20 70 61 72 61 6d 65 74 65  .**     paramete
10ae0 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 46 55  r..*/.#define FU
10af0 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
10b00 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
10b10 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  Func) \.  {nArg,
10b20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
10b30 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46  STANT|SQLITE_UTF
10b40 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55  8|(bNC*SQLITE_FU
10b50 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a  NC_NEEDCOLL), \.
10b60 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f     SQLITE_INT_TO
10b70 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78  _PTR(iArg), 0, x
10b80 46 75 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23  Func, 0, 0, 0, #
10b90 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65  zName, {0} }.#de
10ba0 66 69 6e 65 20 56 46 55 4e 43 54 49 4f 4e 28 7a  fine VFUNCTION(z
10bb0 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67  Name, nArg, iArg
10bc0 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a  , bNC, xFunc) \.
10bd0 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
10be0 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45  UTF8|(bNC*SQLITE
10bf0 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c  _FUNC_NEEDCOLL),
10c00 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54   \.   SQLITE_INT
10c10 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30  _TO_PTR(iArg), 0
10c20 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 30  , xFunc, 0, 0, 0
10c30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a  , #zName, {0} }.
10c40 23 64 65 66 69 6e 65 20 44 46 55 4e 43 54 49 4f  #define DFUNCTIO
10c50 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69  N(zName, nArg, i
10c60 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29  Arg, bNC, xFunc)
10c70 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
10c80 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c  TE_FUNC_SLOCHNG|
10c90 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 5c 0a 20  SQLITE_UTF8, \. 
10ca0 20 20 30 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30    0, 0, xFunc, 0
10cb0 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20  , 0, 0, #zName, 
10cc0 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 50 55  {0} }.#define PU
10cd0 52 45 5f 44 41 54 45 28 7a 4e 61 6d 65 2c 20 6e  RE_DATE(zName, n
10ce0 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
10cf0 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67  xFunc) \.  {nArg
10d00 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c  , SQLITE_FUNC_SL
10d10 4f 43 48 4e 47 7c 53 51 4c 49 54 45 5f 55 54 46  OCHNG|SQLITE_UTF
10d20 38 7c 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  8|SQLITE_FUNC_CO
10d30 4e 53 54 41 4e 54 2c 20 5c 0a 20 20 20 28 76 6f  NSTANT, \.   (vo
10d40 69 64 2a 29 26 73 71 6c 69 74 65 33 43 6f 6e 66  id*)&sqlite3Conf
10d50 69 67 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c  ig, 0, xFunc, 0,
10d60 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b   0, 0, #zName, {
10d70 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 46 55 4e  0} }.#define FUN
10d80 43 54 49 4f 4e 32 28 7a 4e 61 6d 65 2c 20 6e 41  CTION2(zName, nA
10d90 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
10da0 46 75 6e 63 2c 20 65 78 74 72 61 46 6c 61 67 73  Func, extraFlags
10db0 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 53 51 4c 49  ) \.  {nArg,SQLI
10dc0 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
10dd0 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e  |SQLITE_UTF8|(bN
10de0 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  C*SQLITE_FUNC_NE
10df0 45 44 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61  EDCOLL)|extraFla
10e00 67 73 2c 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49  gs,\.   SQLITE_I
10e10 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c  NT_TO_PTR(iArg),
10e20 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c   0, xFunc, 0, 0,
10e30 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20   0, #zName, {0} 
10e40 7d 0a 23 64 65 66 69 6e 65 20 53 54 52 5f 46 55  }.#define STR_FU
10e50 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
10e60 72 67 2c 20 70 41 72 67 2c 20 62 4e 43 2c 20 78  rg, pArg, bNC, x
10e70 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  Func) \.  {nArg,
10e80 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f   SQLITE_FUNC_SLO
10e90 43 48 4e 47 7c 53 51 4c 49 54 45 5f 55 54 46 38  CHNG|SQLITE_UTF8
10ea0 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e  |(bNC*SQLITE_FUN
10eb0 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20  C_NEEDCOLL), \. 
10ec0 20 20 70 41 72 67 2c 20 30 2c 20 78 46 75 6e 63    pArg, 0, xFunc
10ed0 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d  , 0, 0, 0, #zNam
10ee0 65 2c 20 7d 0a 23 64 65 66 69 6e 65 20 4c 49 4b  e, }.#define LIK
10ef0 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72  EFUNC(zName, nAr
10f00 67 2c 20 61 72 67 2c 20 66 6c 61 67 73 29 20 5c  g, arg, flags) \
10f10 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45  .  {nArg, SQLITE
10f20 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53  _FUNC_CONSTANT|S
10f30 51 4c 49 54 45 5f 55 54 46 38 7c 66 6c 61 67 73  QLITE_UTF8|flags
10f40 2c 20 5c 0a 20 20 20 28 76 6f 69 64 20 2a 29 61  , \.   (void *)a
10f50 72 67 2c 20 30 2c 20 6c 69 6b 65 46 75 6e 63 2c  rg, 0, likeFunc,
10f60 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65   0, 0, 0, #zName
10f70 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20  , {0} }.#define 
10f80 41 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c  AGGREGATE(zName,
10f90 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20   nArg, arg, nc, 
10fa0 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 2c 20 78  xStep, xFinal, x
10fb0 56 61 6c 75 65 29 20 5c 0a 20 20 7b 6e 41 72 67  Value) \.  {nArg
10fc0 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e  , SQLITE_UTF8|(n
10fd0 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  c*SQLITE_FUNC_NE
10fe0 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51  EDCOLL), \.   SQ
10ff0 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28  LITE_INT_TO_PTR(
11000 61 72 67 29 2c 20 30 2c 20 78 53 74 65 70 2c 78  arg), 0, xStep,x
11010 46 69 6e 61 6c 2c 78 56 61 6c 75 65 2c 30 2c 23  Final,xValue,0,#
11020 7a 4e 61 6d 65 2c 20 7b 30 7d 7d 0a 23 64 65 66  zName, {0}}.#def
11030 69 6e 65 20 41 47 47 52 45 47 41 54 45 32 28 7a  ine AGGREGATE2(z
11040 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c  Name, nArg, arg,
11050 20 6e 63 2c 20 78 53 74 65 70 2c 20 78 46 69 6e   nc, xStep, xFin
11060 61 6c 2c 20 65 78 74 72 61 46 6c 61 67 73 29 20  al, extraFlags) 
11070 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
11080 45 5f 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54  E_UTF8|(nc*SQLIT
11090 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29  E_FUNC_NEEDCOLL)
110a0 7c 65 78 74 72 61 46 6c 61 67 73 2c 20 5c 0a 20  |extraFlags, \. 
110b0 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f    SQLITE_INT_TO_
110c0 50 54 52 28 61 72 67 29 2c 20 30 2c 20 78 53 74  PTR(arg), 0, xSt
110d0 65 70 2c 78 46 69 6e 61 6c 2c 78 46 69 6e 61 6c  ep,xFinal,xFinal
110e0 2c 30 2c 23 7a 4e 61 6d 65 2c 20 7b 30 7d 7d 0a  ,0,#zName, {0}}.
110f0 0a 23 64 65 66 69 6e 65 20 57 41 47 47 52 45 47  .#define WAGGREG
11100 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ATE(zName, nArg,
11110 20 61 72 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c   arg, nc, xStep,
11120 20 78 46 69 6e 61 6c 2c 20 78 56 61 6c 75 65 2c   xFinal, xValue,
11130 20 78 49 6e 76 65 72 73 65 2c 20 66 29 20 5c 0a   xInverse, f) \.
11140 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
11150 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f  UTF8|(nc*SQLITE_
11160 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 66  FUNC_NEEDCOLL)|f
11170 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e  , \.   SQLITE_IN
11180 54 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c 20 30  T_TO_PTR(arg), 0
11190 2c 20 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c 78  , xStep,xFinal,x
111a0 56 61 6c 75 65 2c 78 49 6e 76 65 72 73 65 2c 23  Value,xInverse,#
111b0 7a 4e 61 6d 65 2c 20 7b 30 7d 7d 0a 0a 2f 2a 0a  zName, {0}}../*.
111c0 2a 2a 20 41 6c 6c 20 63 75 72 72 65 6e 74 20 73  ** All current s
111d0 61 76 65 70 6f 69 6e 74 73 20 61 72 65 20 73 74  avepoints are st
111e0 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64  ored in a linked
111f0 20 6c 69 73 74 20 73 74 61 72 74 69 6e 67 20 61   list starting a
11200 74 0a 2a 2a 20 73 71 6c 69 74 65 33 2e 70 53 61  t.** sqlite3.pSa
11210 76 65 70 6f 69 6e 74 2e 20 54 68 65 20 66 69 72  vepoint. The fir
11220 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20 74 68  st element in th
11230 65 20 6c 69 73 74 20 69 73 20 74 68 65 20 6d 6f  e list is the mo
11240 73 74 20 72 65 63 65 6e 74 6c 79 0a 2a 2a 20 6f  st recently.** o
11250 70 65 6e 65 64 20 73 61 76 65 70 6f 69 6e 74 2e  pened savepoint.
11260 20 53 61 76 65 70 6f 69 6e 74 73 20 61 72 65 20   Savepoints are 
11270 61 64 64 65 64 20 74 6f 20 74 68 65 20 6c 69 73  added to the lis
11280 74 20 62 79 20 74 68 65 20 76 64 62 65 0a 2a 2a  t by the vdbe.**
11290 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e   OP_Savepoint in
112a0 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74  struction..*/.st
112b0 72 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20 7b  ruct Savepoint {
112c0 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
112d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
112e0 20 20 20 20 20 20 20 2f 2a 20 53 61 76 65 70 6f         /* Savepo
112f0 69 6e 74 20 6e 61 6d 65 20 28 6e 75 6c 2d 74 65  int name (nul-te
11300 72 6d 69 6e 61 74 65 64 29 20 2a 2f 0a 20 20 69  rminated) */.  i
11310 36 34 20 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  64 nDeferredCons
11320 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
11330 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
11340 64 65 66 65 72 72 65 64 20 66 6b 20 76 69 6f 6c  deferred fk viol
11350 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 69 36 34 20  ations */.  i64 
11360 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
11370 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
11380 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64 65 66  /* Number of def
11390 65 72 72 65 64 20 69 6d 6d 20 66 6b 2e 20 2a 2f  erred imm fk. */
113a0 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 4e  .  Savepoint *pN
113b0 65 78 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ext;            
113c0 20 20 20 20 20 20 20 2f 2a 20 50 61 72 65 6e 74         /* Parent
113d0 20 73 61 76 65 70 6f 69 6e 74 20 28 69 66 20 61   savepoint (if a
113e0 6e 79 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ny) */.};../*.**
113f0 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61   The following a
11400 72 65 20 75 73 65 64 20 61 73 20 74 68 65 20 73  re used as the s
11410 65 63 6f 6e 64 20 70 61 72 61 6d 65 74 65 72 20  econd parameter 
11420 74 6f 20 73 71 6c 69 74 65 33 53 61 76 65 70 6f  to sqlite3Savepo
11430 69 6e 74 28 29 2c 0a 2a 2a 20 61 6e 64 20 61 73  int(),.** and as
11440 20 74 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74   the P1 argument
11450 20 74 6f 20 74 68 65 20 4f 50 5f 53 61 76 65 70   to the OP_Savep
11460 6f 69 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  oint instruction
11470 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 41 56  ..*/.#define SAV
11480 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20 20 20 20  EPOINT_BEGIN    
11490 20 20 30 0a 23 64 65 66 69 6e 65 20 53 41 56 45    0.#define SAVE
114a0 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 20 20  POINT_RELEASE   
114b0 20 31 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50   1.#define SAVEP
114c0 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 20 20  OINT_ROLLBACK   
114d0 32 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53  2.../*.** Each S
114e0 51 4c 69 74 65 20 6d 6f 64 75 6c 65 20 28 76 69  QLite module (vi
114f0 72 74 75 61 6c 20 74 61 62 6c 65 20 64 65 66 69  rtual table defi
11500 6e 69 74 69 6f 6e 29 20 69 73 20 64 65 66 69 6e  nition) is defin
11510 65 64 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74  ed by an.** inst
11520 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
11530 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2c  owing structure,
11540 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73   stored in the s
11550 71 6c 69 74 65 33 2e 61 4d 6f 64 75 6c 65 0a 2a  qlite3.aModule.*
11560 2a 20 68 61 73 68 20 74 61 62 6c 65 2e 0a 2a 2f  * hash table..*/
11570 0a 73 74 72 75 63 74 20 4d 6f 64 75 6c 65 20 7b  .struct Module {
11580 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  .  const sqlite3
11590 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65  _module *pModule
115a0 3b 20 20 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62  ;       /* Callb
115b0 61 63 6b 20 70 6f 69 6e 74 65 72 73 20 2a 2f 0a  ack pointers */.
115c0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e    const char *zN
115d0 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
115e0 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 70         /* Name p
115f0 61 73 73 65 64 20 74 6f 20 63 72 65 61 74 65 5f  assed to create_
11600 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f  module() */.  vo
11610 69 64 20 2a 70 41 75 78 3b 20 20 20 20 20 20 20  id *pAux;       
11620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11630 20 20 20 2f 2a 20 70 41 75 78 20 70 61 73 73 65     /* pAux passe
11640 64 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75  d to create_modu
11650 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28  le() */.  void (
11660 2a 78 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20  *xDestroy)(void 
11670 2a 29 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  *);            /
11680 2a 20 4d 6f 64 75 6c 65 20 64 65 73 74 72 75 63  * Module destruc
11690 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  tor function */.
116a0 20 20 54 61 62 6c 65 20 2a 70 45 70 6f 54 61 62    Table *pEpoTab
116b0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
116c0 20 20 20 20 20 20 20 2f 2a 20 45 70 6f 6e 79 6d         /* Eponym
116d0 6f 75 73 20 74 61 62 6c 65 20 66 6f 72 20 74 68  ous table for th
116e0 69 73 20 6d 6f 64 75 6c 65 20 2a 2f 0a 7d 3b 0a  is module */.};.
116f0 0a 2f 2a 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69  ./*.** informati
11700 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20 63 6f  on about each co
11710 6c 75 6d 6e 20 6f 66 20 61 6e 20 53 51 4c 20 74  lumn of an SQL t
11720 61 62 6c 65 20 69 73 20 68 65 6c 64 20 69 6e 20  able is held in 
11730 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f  an instance.** o
11740 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
11750 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c 75  ..*/.struct Colu
11760 6d 6e 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  mn {.  char *zNa
11770 6d 65 3b 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20  me;     /* Name 
11780 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2c 20  of this column, 
11790 5c 30 30 30 2c 20 74 68 65 6e 20 74 68 65 20 74  \000, then the t
117a0 79 70 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  ype */.  Expr *p
117b0 44 66 6c 74 3b 20 20 20 20 20 2f 2a 20 44 65 66  Dflt;     /* Def
117c0 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 74 68  ault value of th
117d0 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63  is column */.  c
117e0 68 61 72 20 2a 7a 43 6f 6c 6c 3b 20 20 20 20 20  har *zColl;     
117f0 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71  /* Collating seq
11800 75 65 6e 63 65 2e 20 20 49 66 20 4e 55 4c 4c 2c  uence.  If NULL,
11810 20 75 73 65 20 74 68 65 20 64 65 66 61 75 6c 74   use the default
11820 20 2a 2f 0a 20 20 75 38 20 6e 6f 74 4e 75 6c 6c   */.  u8 notNull
11830 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20 4f 45 5f  ;      /* An OE_
11840 20 63 6f 64 65 20 66 6f 72 20 68 61 6e 64 6c 69   code for handli
11850 6e 67 20 61 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f  ng a NOT NULL co
11860 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 20 20 63 68  nstraint */.  ch
11870 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20 2f  ar affinity;   /
11880 2a 20 4f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c  * One of the SQL
11890 49 54 45 5f 41 46 46 5f 2e 2e 2e 20 76 61 6c 75  ITE_AFF_... valu
118a0 65 73 20 2a 2f 0a 20 20 75 38 20 73 7a 45 73 74  es */.  u8 szEst
118b0 3b 20 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69  ;        /* Esti
118c0 6d 61 74 65 64 20 73 69 7a 65 20 6f 66 20 76 61  mated size of va
118d0 6c 75 65 20 69 6e 20 74 68 69 73 20 63 6f 6c 75  lue in this colu
118e0 6d 6e 2e 20 73 69 7a 65 6f 66 28 49 4e 54 29 3d  mn. sizeof(INT)=
118f0 3d 31 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 46 6c  =1 */.  u8 colFl
11900 61 67 73 3b 20 20 20 20 20 2f 2a 20 42 6f 6f 6c  ags;     /* Bool
11910 65 61 6e 20 70 72 6f 70 65 72 74 69 65 73 2e 20  ean properties. 
11920 20 53 65 65 20 43 4f 4c 46 4c 41 47 5f 20 64 65   See COLFLAG_ de
11930 66 69 6e 65 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d  fines below */.}
11940 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61  ;../* Allowed va
11950 6c 75 65 73 20 66 6f 72 20 43 6f 6c 75 6d 6e 2e  lues for Column.
11960 63 6f 6c 46 6c 61 67 73 3a 0a 2a 2f 0a 23 64 65  colFlags:.*/.#de
11970 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 50 52 49  fine COLFLAG_PRI
11980 4d 4b 45 59 20 20 30 78 30 30 30 31 20 20 20 20  MKEY  0x0001    
11990 2f 2a 20 43 6f 6c 75 6d 6e 20 69 73 20 70 61 72  /* Column is par
119a0 74 20 6f 66 20 74 68 65 20 70 72 69 6d 61 72 79  t of the primary
119b0 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20   key */.#define 
119c0 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 20 20  COLFLAG_HIDDEN  
119d0 20 30 78 30 30 30 32 20 20 20 20 2f 2a 20 41 20   0x0002    /* A 
119e0 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 69 6e  hidden column in
119f0 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
11a00 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46   */.#define COLF
11a10 4c 41 47 5f 48 41 53 54 59 50 45 20 20 30 78 30  LAG_HASTYPE  0x0
11a20 30 30 34 20 20 20 20 2f 2a 20 54 79 70 65 20 6e  004    /* Type n
11a30 61 6d 65 20 66 6f 6c 6c 6f 77 73 20 63 6f 6c 75  ame follows colu
11a40 6d 6e 20 6e 61 6d 65 20 2a 2f 0a 23 64 65 66 69  mn name */.#defi
11a50 6e 65 20 43 4f 4c 46 4c 41 47 5f 55 4e 49 51 55  ne COLFLAG_UNIQU
11a60 45 20 20 20 30 78 30 30 30 38 20 20 20 20 2f 2a  E   0x0008    /*
11a70 20 43 6f 6c 75 6d 6e 20 64 65 66 20 63 6f 6e 74   Column def cont
11a80 61 69 6e 73 20 22 55 4e 49 51 55 45 22 20 6f 72  ains "UNIQUE" or
11a90 20 22 50 4b 22 20 2a 2f 0a 23 64 65 66 69 6e 65   "PK" */.#define
11aa0 20 43 4f 4c 46 4c 41 47 5f 53 4f 52 54 45 52 52   COLFLAG_SORTERR
11ab0 45 46 20 30 78 30 30 31 30 20 20 20 2f 2a 20 55  EF 0x0010   /* U
11ac0 73 65 20 73 6f 72 74 65 72 2d 72 65 66 73 20 77  se sorter-refs w
11ad0 69 74 68 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20  ith this column 
11ae0 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 22 43 6f 6c  */../*.** A "Col
11af0 6c 61 74 69 6e 67 20 53 65 71 75 65 6e 63 65 22  lating Sequence"
11b00 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61   is defined by a
11b10 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
11b20 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73  e following.** s
11b30 74 72 75 63 74 75 72 65 2e 20 43 6f 6e 63 65 70  tructure. Concep
11b40 74 75 61 6c 6c 79 2c 20 61 20 63 6f 6c 6c 61 74  tually, a collat
11b50 69 6e 67 20 73 65 71 75 65 6e 63 65 20 63 6f 6e  ing sequence con
11b60 73 69 73 74 73 20 6f 66 20 61 20 6e 61 6d 65 20  sists of a name 
11b70 61 6e 64 0a 2a 2a 20 61 20 63 6f 6d 70 61 72 69  and.** a compari
11b80 73 6f 6e 20 72 6f 75 74 69 6e 65 20 74 68 61 74  son routine that
11b90 20 64 65 66 69 6e 65 73 20 74 68 65 20 6f 72 64   defines the ord
11ba0 65 72 20 6f 66 20 74 68 61 74 20 73 65 71 75 65  er of that seque
11bb0 6e 63 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 43 6f  nce..**.** If Co
11bc0 6c 6c 53 65 71 2e 78 43 6d 70 20 69 73 20 4e 55  llSeq.xCmp is NU
11bd0 4c 4c 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61  LL, it means tha
11be0 74 20 74 68 65 0a 2a 2a 20 63 6f 6c 6c 61 74 69  t the.** collati
11bf0 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73 20 75  ng sequence is u
11c00 6e 64 65 66 69 6e 65 64 2e 20 20 49 6e 64 69 63  ndefined.  Indic
11c10 65 73 20 62 75 69 6c 74 20 6f 6e 20 61 6e 20 75  es built on an u
11c20 6e 64 65 66 69 6e 65 64 0a 2a 2a 20 63 6f 6c 6c  ndefined.** coll
11c30 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 6d  ating sequence m
11c40 61 79 20 6e 6f 74 20 62 65 20 72 65 61 64 20 6f  ay not be read o
11c50 72 20 77 72 69 74 74 65 6e 2e 0a 2a 2f 0a 73 74  r written..*/.st
11c60 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 7b 0a 20  ruct CollSeq {. 
11c70 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
11c80 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
11c90 66 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20  f the collating 
11ca0 73 65 71 75 65 6e 63 65 2c 20 55 54 46 2d 38 20  sequence, UTF-8 
11cb0 65 6e 63 6f 64 65 64 20 2a 2f 0a 20 20 75 38 20  encoded */.  u8 
11cc0 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  enc;            
11cd0 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64     /* Text encod
11ce0 69 6e 67 20 68 61 6e 64 6c 65 64 20 62 79 20 78  ing handled by x
11cf0 43 6d 70 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20  Cmp() */.  void 
11d00 2a 70 55 73 65 72 3b 20 20 20 20 20 20 20 20 20  *pUser;         
11d10 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65   /* First argume
11d20 6e 74 20 74 6f 20 78 43 6d 70 28 29 20 2a 2f 0a  nt to xCmp() */.
11d30 20 20 69 6e 74 20 28 2a 78 43 6d 70 29 28 76 6f    int (*xCmp)(vo
11d40 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 76  id*,int, const v
11d50 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  oid*, int, const
11d60 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20   void*);.  void 
11d70 28 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29 3b 20  (*xDel)(void*); 
11d80 20 2f 2a 20 44 65 73 74 72 75 63 74 6f 72 20 66   /* Destructor f
11d90 6f 72 20 70 55 73 65 72 20 2a 2f 0a 7d 3b 0a 0a  or pUser */.};..
11da0 2f 2a 0a 2a 2a 20 41 20 73 6f 72 74 20 6f 72 64  /*.** A sort ord
11db0 65 72 20 63 61 6e 20 62 65 20 65 69 74 68 65 72  er can be either
11dc0 20 41 53 43 20 6f 72 20 44 45 53 43 2e 0a 2a 2f   ASC or DESC..*/
11dd0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
11de0 53 4f 5f 41 53 43 20 20 20 20 20 20 20 30 20 20  SO_ASC       0  
11df0 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73 63 65 6e  /* Sort in ascen
11e00 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64  ding order */.#d
11e10 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f  efine SQLITE_SO_
11e20 44 45 53 43 20 20 20 20 20 20 31 20 20 2f 2a 20  DESC      1  /* 
11e30 53 6f 72 74 20 69 6e 20 61 73 63 65 6e 64 69 6e  Sort in ascendin
11e40 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66 69  g order */.#defi
11e50 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 55 4e 44  ne SQLITE_SO_UND
11e60 45 46 49 4e 45 44 20 2d 31 20 2f 2a 20 4e 6f 20  EFINED -1 /* No 
11e70 73 6f 72 74 20 6f 72 64 65 72 20 73 70 65 63 69  sort order speci
11e80 66 69 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43  fied */../*.** C
11e90 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74  olumn affinity t
11ea0 79 70 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 73  ypes..**.** Thes
11eb0 65 20 75 73 65 64 20 74 6f 20 68 61 76 65 20 6d  e used to have m
11ec0 6e 65 6d 6f 6e 69 63 20 6e 61 6d 65 20 6c 69 6b  nemonic name lik
11ed0 65 20 27 69 27 20 66 6f 72 20 53 51 4c 49 54 45  e 'i' for SQLITE
11ee0 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 61 6e 64  _AFF_INTEGER and
11ef0 0a 2a 2a 20 27 74 27 20 66 6f 72 20 53 51 4c 49  .** 't' for SQLI
11f00 54 45 5f 41 46 46 5f 54 45 58 54 2e 20 20 42 75  TE_AFF_TEXT.  Bu
11f10 74 20 77 65 20 63 61 6e 20 73 61 76 65 20 61 20  t we can save a 
11f20 6c 69 74 74 6c 65 20 73 70 61 63 65 20 61 6e 64  little space and
11f30 20 69 6d 70 72 6f 76 65 0a 2a 2a 20 74 68 65 20   improve.** the 
11f40 73 70 65 65 64 20 61 20 6c 69 74 74 6c 65 20 62  speed a little b
11f50 79 20 6e 75 6d 62 65 72 69 6e 67 20 74 68 65 20  y numbering the 
11f60 76 61 6c 75 65 73 20 63 6f 6e 73 65 63 75 74 69  values consecuti
11f70 76 65 6c 79 2e 0a 2a 2a 0a 2a 2a 20 42 75 74 20  vely..**.** But 
11f80 72 61 74 68 65 72 20 74 68 61 6e 20 73 74 61 72  rather than star
11f90 74 20 77 69 74 68 20 30 20 6f 72 20 31 2c 20 77  t with 0 or 1, w
11fa0 65 20 62 65 67 69 6e 20 77 69 74 68 20 27 41 27  e begin with 'A'
11fb0 2e 20 20 54 68 61 74 20 77 61 79 2c 0a 2a 2a 20  .  That way,.** 
11fc0 77 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20 61 66  when multiple af
11fd0 66 69 6e 69 74 79 20 74 79 70 65 73 20 61 72 65  finity types are
11fe0 20 63 6f 6e 63 61 74 65 6e 61 74 65 64 20 69 6e   concatenated in
11ff0 74 6f 20 61 20 73 74 72 69 6e 67 20 61 6e 64 0a  to a string and.
12000 2a 2a 20 75 73 65 64 20 61 73 20 74 68 65 20 50  ** used as the P
12010 34 20 6f 70 65 72 61 6e 64 2c 20 74 68 65 79 20  4 operand, they 
12020 77 69 6c 6c 20 62 65 20 6d 6f 72 65 20 72 65 61  will be more rea
12030 64 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74  dable..**.** Not
12040 65 20 61 6c 73 6f 20 74 68 61 74 20 74 68 65 20  e also that the 
12050 6e 75 6d 65 72 69 63 20 74 79 70 65 73 20 61 72  numeric types ar
12060 65 20 67 72 6f 75 70 65 64 20 74 6f 67 65 74 68  e grouped togeth
12070 65 72 20 73 6f 20 74 68 61 74 20 74 65 73 74 69  er so that testi
12080 6e 67 0a 2a 2a 20 66 6f 72 20 61 20 6e 75 6d 65  ng.** for a nume
12090 72 69 63 20 74 79 70 65 20 69 73 20 61 20 73 69  ric type is a si
120a0 6e 67 6c 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e  ngle comparison.
120b0 20 20 41 6e 64 20 74 68 65 20 42 4c 4f 42 20 74    And the BLOB t
120c0 79 70 65 20 69 73 20 66 69 72 73 74 2e 0a 2a 2f  ype is first..*/
120d0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
120e0 41 46 46 5f 42 4c 4f 42 20 20 20 20 20 27 41 27  AFF_BLOB     'A'
120f0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
12100 41 46 46 5f 54 45 58 54 20 20 20 20 20 27 42 27  AFF_TEXT     'B'
12110 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
12120 41 46 46 5f 4e 55 4d 45 52 49 43 20 20 27 43 27  AFF_NUMERIC  'C'
12130 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
12140 41 46 46 5f 49 4e 54 45 47 45 52 20 20 27 44 27  AFF_INTEGER  'D'
12150 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
12160 41 46 46 5f 52 45 41 4c 20 20 20 20 20 27 45 27  AFF_REAL     'E'
12170 0a 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65  ..#define sqlite
12180 33 49 73 4e 75 6d 65 72 69 63 41 66 66 69 6e 69  3IsNumericAffini
12190 74 79 28 58 29 20 20 28 28 58 29 3e 3d 53 51 4c  ty(X)  ((X)>=SQL
121a0 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 29  ITE_AFF_NUMERIC)
121b0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49  ../*.** The SQLI
121c0 54 45 5f 41 46 46 5f 4d 41 53 4b 20 76 61 6c 75  TE_AFF_MASK valu
121d0 65 73 20 6d 61 73 6b 73 20 6f 66 66 20 74 68 65  es masks off the
121e0 20 73 69 67 6e 69 66 69 63 61 6e 74 20 62 69 74   significant bit
121f0 73 20 6f 66 20 61 6e 0a 2a 2a 20 61 66 66 69 6e  s of an.** affin
12200 69 74 79 20 76 61 6c 75 65 2e 0a 2a 2f 0a 23 64  ity value..*/.#d
12210 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46  efine SQLITE_AFF
12220 5f 4d 41 53 4b 20 20 20 20 20 30 78 34 37 0a 0a  _MASK     0x47..
12230 2f 2a 0a 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c  /*.** Additional
12240 20 62 69 74 20 76 61 6c 75 65 73 20 74 68 61 74   bit values that
12250 20 63 61 6e 20 62 65 20 4f 52 65 64 20 77 69 74   can be ORed wit
12260 68 20 61 6e 20 61 66 66 69 6e 69 74 79 20 77 69  h an affinity wi
12270 74 68 6f 75 74 0a 2a 2a 20 63 68 61 6e 67 69 6e  thout.** changin
12280 67 20 74 68 65 20 61 66 66 69 6e 69 74 79 2e 0a  g the affinity..
12290 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45  **.** The SQLITE
122a0 5f 4e 4f 54 4e 55 4c 4c 20 66 6c 61 67 20 69 73  _NOTNULL flag is
122b0 20 61 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f   a combination o
122c0 66 20 4e 55 4c 4c 45 51 20 61 6e 64 20 4a 55 4d  f NULLEQ and JUM
122d0 50 49 46 4e 55 4c 4c 2e 0a 2a 2a 20 49 74 20 63  PIFNULL..** It c
122e0 61 75 73 65 73 20 61 6e 20 61 73 73 65 72 74 28  auses an assert(
122f0 29 20 74 6f 20 66 69 72 65 20 69 66 20 65 69 74  ) to fire if eit
12300 68 65 72 20 6f 70 65 72 61 6e 64 20 74 6f 20 61  her operand to a
12310 20 63 6f 6d 70 61 72 69 73 6f 6e 0a 2a 2a 20 6f   comparison.** o
12320 70 65 72 61 74 6f 72 20 69 73 20 4e 55 4c 4c 2e  perator is NULL.
12330 20 20 49 74 20 69 73 20 61 64 64 65 64 20 74 6f    It is added to
12340 20 63 65 72 74 61 69 6e 20 63 6f 6d 70 61 72 69   certain compari
12350 73 6f 6e 20 6f 70 65 72 61 74 6f 72 73 20 74 6f  son operators to
12360 0a 2a 2a 20 70 72 6f 76 65 20 74 68 61 74 20 74  .** prove that t
12370 68 65 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20  he operands are 
12380 61 6c 77 61 79 73 20 4e 4f 54 20 4e 55 4c 4c 2e  always NOT NULL.
12390 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
123a0 54 45 5f 4b 45 45 50 4e 55 4c 4c 20 20 20 20 20  TE_KEEPNULL     
123b0 30 78 30 38 20 20 2f 2a 20 55 73 65 64 20 62 79  0x08  /* Used by
123c0 20 76 65 63 74 6f 72 20 3d 3d 20 6f 72 20 3c 3e   vector == or <>
123d0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
123e0 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 20 20  TE_JUMPIFNULL   
123f0 30 78 31 30 20 20 2f 2a 20 6a 75 6d 70 73 20 69  0x10  /* jumps i
12400 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64  f either operand
12410 20 69 73 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66   is NULL */.#def
12420 69 6e 65 20 53 51 4c 49 54 45 5f 53 54 4f 52 45  ine SQLITE_STORE
12430 50 32 20 20 20 20 20 20 30 78 32 30 20 20 2f 2a  P2      0x20  /*
12440 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e   Store result in
12450 20 72 65 67 5b 50 32 5d 20 72 61 74 68 65 72 20   reg[P2] rather 
12460 74 68 61 6e 20 6a 75 6d 70 20 2a 2f 0a 23 64 65  than jump */.#de
12470 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c  fine SQLITE_NULL
12480 45 51 20 20 20 20 20 20 20 30 78 38 30 20 20 2f  EQ       0x80  /
12490 2a 20 4e 55 4c 4c 3d 4e 55 4c 4c 20 2a 2f 0a 23  * NULL=NULL */.#
124a0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f  define SQLITE_NO
124b0 54 4e 55 4c 4c 20 20 20 20 20 20 30 78 39 30 20  TNULL      0x90 
124c0 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20   /* Assert that 
124d0 6f 70 65 72 61 6e 64 73 20 61 72 65 20 6e 65 76  operands are nev
124e0 65 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a  er NULL */../*.*
124f0 2a 20 41 6e 20 6f 62 6a 65 63 74 20 6f 66 20 74  * An object of t
12500 68 69 73 20 74 79 70 65 20 69 73 20 63 72 65 61  his type is crea
12510 74 65 64 20 66 6f 72 20 65 61 63 68 20 76 69 72  ted for each vir
12520 74 75 61 6c 20 74 61 62 6c 65 20 70 72 65 73 65  tual table prese
12530 6e 74 20 69 6e 0a 2a 2a 20 74 68 65 20 64 61 74  nt in.** the dat
12540 61 62 61 73 65 20 73 63 68 65 6d 61 2e 0a 2a 2a  abase schema..**
12550 0a 2a 2a 20 49 66 20 74 68 65 20 64 61 74 61 62  .** If the datab
12560 61 73 65 20 73 63 68 65 6d 61 20 69 73 20 73 68  ase schema is sh
12570 61 72 65 64 2c 20 74 68 65 6e 20 74 68 65 72 65  ared, then there
12580 20 69 73 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65   is one instance
12590 20 6f 66 20 74 68 69 73 0a 2a 2a 20 73 74 72 75   of this.** stru
125a0 63 74 75 72 65 20 66 6f 72 20 65 61 63 68 20 64  cture for each d
125b0 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
125c0 6f 6e 20 28 73 71 6c 69 74 65 33 2a 29 20 74 68  on (sqlite3*) th
125d0 61 74 20 75 73 65 73 20 74 68 65 20 73 68 61 72  at uses the shar
125e0 65 64 0a 2a 2a 20 73 63 68 65 6d 61 2e 20 54 68  ed.** schema. Th
125f0 69 73 20 69 73 20 62 65 63 61 75 73 65 20 65 61  is is because ea
12600 63 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ch database conn
12610 65 63 74 69 6f 6e 20 72 65 71 75 69 72 65 73 20  ection requires 
12620 69 74 73 20 6f 77 6e 20 75 6e 69 71 75 65 0a 2a  its own unique.*
12630 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  * instance of th
12640 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20  e sqlite3_vtab* 
12650 68 61 6e 64 6c 65 20 75 73 65 64 20 74 6f 20 61  handle used to a
12660 63 63 65 73 73 20 74 68 65 20 76 69 72 74 75 61  ccess the virtua
12670 6c 20 74 61 62 6c 65 0a 2a 2a 20 69 6d 70 6c 65  l table.** imple
12680 6d 65 6e 74 61 74 69 6f 6e 2e 20 73 71 6c 69 74  mentation. sqlit
12690 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73  e3_vtab* handles
126a0 20 63 61 6e 20 6e 6f 74 20 62 65 20 73 68 61 72   can not be shar
126b0 65 64 20 62 65 74 77 65 65 6e 0a 2a 2a 20 64 61  ed between.** da
126c0 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
126d0 6e 73 2c 20 65 76 65 6e 20 77 68 65 6e 20 74 68  ns, even when th
126e0 65 20 72 65 73 74 20 6f 66 20 74 68 65 20 69 6e  e rest of the in
126f0 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65  -memory database
12700 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 73 68  .** schema is sh
12710 61 72 65 64 2c 20 61 73 20 74 68 65 20 69 6d 70  ared, as the imp
12720 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 74 65  lementation ofte
12730 6e 20 73 74 6f 72 65 73 20 74 68 65 20 64 61 74  n stores the dat
12740 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74  abase.** connect
12750 69 6f 6e 20 68 61 6e 64 6c 65 20 70 61 73 73 65  ion handle passe
12760 64 20 74 6f 20 69 74 20 76 69 61 20 74 68 65 20  d to it via the 
12770 78 43 6f 6e 6e 65 63 74 28 29 20 6f 72 20 78 43  xConnect() or xC
12780 72 65 61 74 65 28 29 20 6d 65 74 68 6f 64 0a 2a  reate() method.*
12790 2a 20 64 75 72 69 6e 67 20 69 6e 69 74 69 61 6c  * during initial
127a0 69 7a 61 74 69 6f 6e 20 69 6e 74 65 72 6e 61 6c  ization internal
127b0 6c 79 2e 20 54 68 69 73 20 64 61 74 61 62 61 73  ly. This databas
127c0 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e  e connection han
127d0 64 6c 65 20 6d 61 79 0a 2a 2a 20 74 68 65 6e 20  dle may.** then 
127e0 62 65 20 75 73 65 64 20 62 79 20 74 68 65 20 76  be used by the v
127f0 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70  irtual table imp
12800 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20 61  lementation to a
12810 63 63 65 73 73 20 72 65 61 6c 20 74 61 62 6c 65  ccess real table
12820 73 0a 2a 2a 20 77 69 74 68 69 6e 20 74 68 65 20  s.** within the 
12830 64 61 74 61 62 61 73 65 2e 20 53 6f 20 74 68 61  database. So tha
12840 74 20 74 68 65 79 20 61 70 70 65 61 72 20 61 73  t they appear as
12850 20 70 61 72 74 20 6f 66 20 74 68 65 20 63 61 6c   part of the cal
12860 6c 65 72 73 0a 2a 2a 20 74 72 61 6e 73 61 63 74  lers.** transact
12870 69 6f 6e 2c 20 74 68 65 73 65 20 61 63 63 65 73  ion, these acces
12880 73 65 73 20 6e 65 65 64 20 74 6f 20 62 65 20 6d  ses need to be m
12890 61 64 65 20 76 69 61 20 74 68 65 20 73 61 6d 65  ade via the same
128a0 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e   database.** con
128b0 6e 65 63 74 69 6f 6e 20 61 73 20 74 68 61 74 20  nection as that 
128c0 75 73 65 64 20 74 6f 20 65 78 65 63 75 74 65 20  used to execute 
128d0 53 51 4c 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f  SQL operations o
128e0 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  n the virtual ta
128f0 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 56  ble..**.** All V
12900 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 74 68  Table objects th
12910 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f  at correspond to
12920 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20   a single table 
12930 69 6e 20 61 20 73 68 61 72 65 64 0a 2a 2a 20 64  in a shared.** d
12940 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 61  atabase schema a
12950 72 65 20 69 6e 69 74 69 61 6c 6c 79 20 73 74 6f  re initially sto
12960 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 2d  red in a linked-
12970 6c 69 73 74 20 70 6f 69 6e 74 65 64 20 74 6f 20  list pointed to 
12980 62 79 0a 2a 2a 20 74 68 65 20 54 61 62 6c 65 2e  by.** the Table.
12990 70 56 54 61 62 6c 65 20 6d 65 6d 62 65 72 20 76  pVTable member v
129a0 61 72 69 61 62 6c 65 20 6f 66 20 74 68 65 20 63  ariable of the c
129b0 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 54 61 62  orresponding Tab
129c0 6c 65 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 57 68  le object..** Wh
129d0 65 6e 20 61 6e 20 73 71 6c 69 74 65 33 5f 70 72  en an sqlite3_pr
129e0 65 70 61 72 65 28 29 20 6f 70 65 72 61 74 69 6f  epare() operatio
129f0 6e 20 69 73 20 72 65 71 75 69 72 65 64 20 74 6f  n is required to
12a00 20 61 63 63 65 73 73 20 74 68 65 20 76 69 72 74   access the virt
12a10 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 2c 20 69 74  ual.** table, it
12a20 20 73 65 61 72 63 68 65 73 20 74 68 65 20 6c 69   searches the li
12a30 73 74 20 66 6f 72 20 74 68 65 20 56 54 61 62 6c  st for the VTabl
12a40 65 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e  e that correspon
12a50 64 73 20 74 6f 20 74 68 65 0a 2a 2a 20 64 61 74  ds to the.** dat
12a60 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
12a70 20 64 6f 69 6e 67 20 74 68 65 20 70 72 65 70 61   doing the prepa
12a80 72 69 6e 67 20 73 6f 20 61 73 20 74 6f 20 75 73  ring so as to us
12a90 65 20 74 68 65 20 63 6f 72 72 65 63 74 0a 2a 2a  e the correct.**
12aa0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68   sqlite3_vtab* h
12ab0 61 6e 64 6c 65 20 69 6e 20 74 68 65 20 63 6f 6d  andle in the com
12ac0 70 69 6c 65 64 20 71 75 65 72 79 2e 0a 2a 2a 0a  piled query..**.
12ad0 2a 2a 20 57 68 65 6e 20 61 6e 20 69 6e 2d 6d 65  ** When an in-me
12ae0 6d 6f 72 79 20 54 61 62 6c 65 20 6f 62 6a 65 63  mory Table objec
12af0 74 20 69 73 20 64 65 6c 65 74 65 64 20 28 66 6f  t is deleted (fo
12b00 72 20 65 78 61 6d 70 6c 65 20 77 68 65 6e 20 74  r example when t
12b10 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73 20  he.** schema is 
12b20 62 65 69 6e 67 20 72 65 6c 6f 61 64 65 64 20 66  being reloaded f
12b30 6f 72 20 73 6f 6d 65 20 72 65 61 73 6f 6e 29 2c  or some reason),
12b40 20 74 68 65 20 56 54 61 62 6c 65 20 6f 62 6a 65   the VTable obje
12b50 63 74 73 20 61 72 65 20 6e 6f 74 0a 2a 2a 20 64  cts are not.** d
12b60 65 6c 65 74 65 64 20 61 6e 64 20 74 68 65 20 73  eleted and the s
12b70 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e  qlite3_vtab* han
12b80 64 6c 65 73 20 61 72 65 20 6e 6f 74 20 78 44 69  dles are not xDi
12b90 73 63 6f 6e 6e 65 63 74 28 29 65 64 0a 2a 2a 20  sconnect()ed.** 
12ba0 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 49 6e 73  immediately. Ins
12bb0 74 65 61 64 2c 20 74 68 65 79 20 61 72 65 20 6d  tead, they are m
12bc0 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20 54 61  oved from the Ta
12bd0 62 6c 65 2e 70 56 54 61 62 6c 65 20 6c 69 73 74  ble.pVTable list
12be0 20 74 6f 0a 2a 2a 20 61 6e 6f 74 68 65 72 20 6c   to.** another l
12bf0 69 6e 6b 65 64 20 6c 69 73 74 20 68 65 61 64 65  inked list heade
12c00 64 20 62 79 20 74 68 65 20 73 71 6c 69 74 65 33  d by the sqlite3
12c10 2e 70 44 69 73 63 6f 6e 6e 65 63 74 20 6d 65 6d  .pDisconnect mem
12c20 62 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 63 6f  ber of the.** co
12c30 72 72 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69  rresponding sqli
12c40 74 65 33 20 73 74 72 75 63 74 75 72 65 2e 20 54  te3 structure. T
12c50 68 65 79 20 61 72 65 20 74 68 65 6e 20 64 65 6c  hey are then del
12c60 65 74 65 64 2f 78 44 69 73 63 6f 6e 6e 65 63 74  eted/xDisconnect
12c70 65 64 0a 2a 2a 20 6e 65 78 74 20 74 69 6d 65 20  ed.** next time 
12c80 61 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 70  a statement is p
12c90 72 65 70 61 72 65 64 20 75 73 69 6e 67 20 73 61  repared using sa
12ca0 69 64 20 73 71 6c 69 74 65 33 2a 2e 20 54 68 69  id sqlite3*. Thi
12cb0 73 20 69 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20  s is done.** to 
12cc0 61 76 6f 69 64 20 64 65 61 64 6c 6f 63 6b 20 69  avoid deadlock i
12cd0 73 73 75 65 73 20 69 6e 76 6f 6c 76 69 6e 67 20  ssues involving 
12ce0 6d 75 6c 74 69 70 6c 65 20 73 71 6c 69 74 65 33  multiple sqlite3
12cf0 2e 6d 75 74 65 78 20 6d 75 74 65 78 65 73 2e 0a  .mutex mutexes..
12d00 2a 2a 20 52 65 66 65 72 20 74 6f 20 63 6f 6d 6d  ** Refer to comm
12d10 65 6e 74 73 20 61 62 6f 76 65 20 66 75 6e 63 74  ents above funct
12d20 69 6f 6e 20 73 71 6c 69 74 65 33 56 74 61 62 55  ion sqlite3VtabU
12d30 6e 6c 6f 63 6b 4c 69 73 74 28 29 20 66 6f 72 20  nlockList() for 
12d40 61 6e 0a 2a 2a 20 65 78 70 6c 61 6e 61 74 69 6f  an.** explanatio
12d50 6e 20 61 73 20 74 6f 20 77 68 79 20 69 74 20 69  n as to why it i
12d60 73 20 73 61 66 65 20 74 6f 20 61 64 64 20 61 6e  s safe to add an
12d70 20 65 6e 74 72 79 20 74 6f 20 61 6e 20 73 71 6c   entry to an sql
12d80 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74  ite3.pDisconnect
12d90 0a 2a 2a 20 6c 69 73 74 20 77 69 74 68 6f 75 74  .** list without
12da0 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 63 6f 72   holding the cor
12db0 72 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74  responding sqlit
12dc0 65 33 2e 6d 75 74 65 78 20 6d 75 74 65 78 2e 0a  e3.mutex mutex..
12dd0 2a 2a 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79  **.** The memory
12de0 20 66 6f 72 20 6f 62 6a 65 63 74 73 20 6f 66 20   for objects of 
12df0 74 68 69 73 20 74 79 70 65 20 69 73 20 61 6c 77  this type is alw
12e00 61 79 73 20 61 6c 6c 6f 63 61 74 65 64 20 62 79  ays allocated by
12e10 0a 2a 2a 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  .** sqlite3DbMal
12e20 6c 6f 63 28 29 2c 20 75 73 69 6e 67 20 74 68 65  loc(), using the
12e30 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64   connection hand
12e40 6c 65 20 73 74 6f 72 65 64 20 69 6e 20 56 54 61  le stored in VTa
12e50 62 6c 65 2e 64 62 20 61 73 0a 2a 2a 20 74 68 65  ble.db as.** the
12e60 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e   first argument.
12e70 0a 2a 2f 0a 73 74 72 75 63 74 20 56 54 61 62 6c  .*/.struct VTabl
12e80 65 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  e {.  sqlite3 *d
12e90 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b;              
12ea0 2f 2a 20 44 61 74 61 62 61 73 65 20 63 6f 6e 6e  /* Database conn
12eb0 65 63 74 69 6f 6e 20 61 73 73 6f 63 69 61 74 65  ection associate
12ec0 64 20 77 69 74 68 20 74 68 69 73 20 74 61 62 6c  d with this tabl
12ed0 65 20 2a 2f 0a 20 20 4d 6f 64 75 6c 65 20 2a 70  e */.  Module *p
12ee0 4d 6f 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mod;            
12ef0 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 6d   /* Pointer to m
12f00 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61  odule implementa
12f10 74 69 6f 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65  tion */.  sqlite
12f20 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 20 20  3_vtab *pVtab;  
12f30 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
12f40 6f 20 76 74 61 62 20 69 6e 73 74 61 6e 63 65 20  o vtab instance 
12f50 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20  */.  int nRef;  
12f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
12f70 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e  * Number of poin
12f80 74 65 72 73 20 74 6f 20 74 68 69 73 20 73 74 72  ters to this str
12f90 75 63 74 75 72 65 20 2a 2f 0a 20 20 75 38 20 62  ucture */.  u8 b
12fa0 43 6f 6e 73 74 72 61 69 6e 74 3b 20 20 20 20 20  Constraint;     
12fb0 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
12fc0 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 61 72 65   constraints are
12fd0 20 73 75 70 70 6f 72 74 65 64 20 2a 2f 0a 20 20   supported */.  
12fe0 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 3b 20  int iSavepoint; 
12ff0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 70            /* Dep
13000 74 68 20 6f 66 20 74 68 65 20 53 41 56 45 50 4f  th of the SAVEPO
13010 49 4e 54 20 73 74 61 63 6b 20 2a 2f 0a 20 20 56  INT stack */.  V
13020 54 61 62 6c 65 20 2a 70 4e 65 78 74 3b 20 20 20  Table *pNext;   
13030 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74           /* Next
13040 20 69 6e 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20   in linked list 
13050 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 7d  (see above) */.}
13060 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 73 63 68  ;../*.** The sch
13070 65 6d 61 20 66 6f 72 20 65 61 63 68 20 53 51 4c  ema for each SQL
13080 20 74 61 62 6c 65 20 61 6e 64 20 76 69 65 77 20   table and view 
13090 69 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 69  is represented i
130a0 6e 20 6d 65 6d 6f 72 79 0a 2a 2a 20 62 79 20 61  n memory.** by a
130b0 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
130c0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
130d0 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  cture..*/.struct
130e0 20 54 61 62 6c 65 20 7b 0a 20 20 63 68 61 72 20   Table {.  char 
130f0 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
13100 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74  /* Name of the t
13110 61 62 6c 65 20 6f 72 20 76 69 65 77 20 2a 2f 0a  able or view */.
13120 20 20 43 6f 6c 75 6d 6e 20 2a 61 43 6f 6c 3b 20    Column *aCol; 
13130 20 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d         /* Inform
13140 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68  ation about each
13150 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 69 66 64 65   column */.#ifde
13160 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
13170 4e 4f 52 4d 41 4c 49 5a 45 0a 20 20 48 61 73 68  NORMALIZE.  Hash
13180 20 2a 70 43 6f 6c 48 61 73 68 3b 20 20 20 20 20   *pColHash;     
13190 20 2f 2a 20 41 6c 6c 20 63 6f 6c 75 6d 6e 73 20   /* All columns 
131a0 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20  indexed by name 
131b0 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 49 6e 64 65  */.#endif.  Inde
131c0 78 20 2a 70 49 6e 64 65 78 3b 20 20 20 20 20 20  x *pIndex;      
131d0 20 2f 2a 20 4c 69 73 74 20 6f 66 20 53 51 4c 20   /* List of SQL 
131e0 69 6e 64 65 78 65 73 20 6f 6e 20 74 68 69 73 20  indexes on this 
131f0 74 61 62 6c 65 2e 20 2a 2f 0a 20 20 53 65 6c 65  table. */.  Sele
13200 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20  ct *pSelect;    
13210 20 2f 2a 20 4e 55 4c 4c 20 66 6f 72 20 74 61 62   /* NULL for tab
13220 6c 65 73 2e 20 20 50 6f 69 6e 74 73 20 74 6f 20  les.  Points to 
13230 64 65 66 69 6e 69 74 69 6f 6e 20 69 66 20 61 20  definition if a 
13240 76 69 65 77 2e 20 2a 2f 0a 20 20 46 4b 65 79 20  view. */.  FKey 
13250 2a 70 46 4b 65 79 3b 20 20 20 20 20 20 20 20 20  *pFKey;         
13260 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f  /* Linked list o
13270 66 20 61 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65  f all foreign ke
13280 79 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65  ys in this table
13290 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c   */.  char *zCol
132a0 41 66 66 3b 20 20 20 20 20 20 20 2f 2a 20 53 74  Aff;       /* St
132b0 72 69 6e 67 20 64 65 66 69 6e 69 6e 67 20 74 68  ring defining th
132c0 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20 65 61  e affinity of ea
132d0 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 45  ch column */.  E
132e0 78 70 72 4c 69 73 74 20 2a 70 43 68 65 63 6b 3b  xprList *pCheck;
132f0 20 20 20 20 2f 2a 20 41 6c 6c 20 43 48 45 43 4b      /* All CHECK
13300 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
13310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13320 20 20 20 20 20 20 20 2f 2a 20 20 20 2e 2e 2e 20         /*   ... 
13330 61 6c 73 6f 20 75 73 65 64 20 61 73 20 63 6f 6c  also used as col
13340 75 6d 6e 20 6e 61 6d 65 20 6c 69 73 74 20 69 6e  umn name list in
13350 20 61 20 56 49 45 57 20 2a 2f 0a 20 20 69 6e 74   a VIEW */.  int
13360 20 74 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20   tnum;          
13370 20 20 2f 2a 20 52 6f 6f 74 20 42 54 72 65 65 20    /* Root BTree 
13380 70 61 67 65 20 66 6f 72 20 74 68 69 73 20 74 61  page for this ta
13390 62 6c 65 20 2a 2f 0a 20 20 75 33 32 20 6e 54 61  ble */.  u32 nTa
133a0 62 52 65 66 3b 20 20 20 20 20 20 20 20 20 2f 2a  bRef;         /*
133b0 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74   Number of point
133c0 65 72 73 20 74 6f 20 74 68 69 73 20 54 61 62 6c  ers to this Tabl
133d0 65 20 2a 2f 0a 20 20 75 33 32 20 74 61 62 46 6c  e */.  u32 tabFl
133e0 61 67 73 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d  ags;        /* M
133f0 61 73 6b 20 6f 66 20 54 46 5f 2a 20 76 61 6c 75  ask of TF_* valu
13400 65 73 20 2a 2f 0a 20 20 69 31 36 20 69 50 4b 65  es */.  i16 iPKe
13410 79 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  y;           /* 
13420 49 66 20 6e 6f 74 20 6e 65 67 61 74 69 76 65 2c  If not negative,
13430 20 75 73 65 20 61 43 6f 6c 5b 69 50 4b 65 79 5d   use aCol[iPKey]
13440 20 61 73 20 74 68 65 20 72 6f 77 69 64 20 2a 2f   as the rowid */
13450 0a 20 20 69 31 36 20 6e 43 6f 6c 3b 20 20 20 20  .  i16 nCol;    
13460 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
13470 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
13480 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
13490 4c 6f 67 45 73 74 20 6e 52 6f 77 4c 6f 67 45 73  LogEst nRowLogEs
134a0 74 3b 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65  t;   /* Estimate
134b0 64 20 72 6f 77 73 20 69 6e 20 74 61 62 6c 65 20  d rows in table 
134c0 2d 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74  - from sqlite_st
134d0 61 74 31 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4c  at1 table */.  L
134e0 6f 67 45 73 74 20 73 7a 54 61 62 52 6f 77 3b 20  ogEst szTabRow; 
134f0 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64      /* Estimated
13500 20 73 69 7a 65 20 6f 66 20 65 61 63 68 20 74 61   size of each ta
13510 62 6c 65 20 72 6f 77 20 69 6e 20 62 79 74 65 73  ble row in bytes
13520 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
13530 45 5f 45 4e 41 42 4c 45 5f 43 4f 53 54 4d 55 4c  E_ENABLE_COSTMUL
13540 54 0a 20 20 4c 6f 67 45 73 74 20 63 6f 73 74 4d  T.  LogEst costM
13550 75 6c 74 3b 20 20 20 20 20 2f 2a 20 43 6f 73 74  ult;     /* Cost
13560 20 6d 75 6c 74 69 70 6c 69 65 72 20 66 6f 72 20   multiplier for 
13570 75 73 69 6e 67 20 74 68 69 73 20 74 61 62 6c 65  using this table
13580 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 75 38 20   */.#endif.  u8 
13590 6b 65 79 43 6f 6e 66 3b 20 20 20 20 20 20 20 20  keyConf;        
135a0 20 20 2f 2a 20 57 68 61 74 20 74 6f 20 64 6f 20    /* What to do 
135b0 69 6e 20 63 61 73 65 20 6f 66 20 75 6e 69 71 75  in case of uniqu
135c0 65 6e 65 73 73 20 63 6f 6e 66 6c 69 63 74 20 6f  eness conflict o
135d0 6e 20 69 50 4b 65 79 20 2a 2f 0a 23 69 66 6e 64  n iPKey */.#ifnd
135e0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
135f0 4c 54 45 52 54 41 42 4c 45 0a 20 20 69 6e 74 20  LTERTABLE.  int 
13600 61 64 64 43 6f 6c 4f 66 66 73 65 74 3b 20 20 20  addColOffset;   
13610 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e 20 43 52   /* Offset in CR
13620 45 41 54 45 20 54 41 42 4c 45 20 73 74 6d 74 20  EATE TABLE stmt 
13630 74 6f 20 61 64 64 20 61 20 6e 65 77 20 63 6f 6c  to add a new col
13640 75 6d 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69  umn */.#endif.#i
13650 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
13660 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
13670 20 69 6e 74 20 6e 4d 6f 64 75 6c 65 41 72 67 3b   int nModuleArg;
13680 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
13690 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20  of arguments to 
136a0 74 68 65 20 6d 6f 64 75 6c 65 20 2a 2f 0a 20 20  the module */.  
136b0 63 68 61 72 20 2a 2a 61 7a 4d 6f 64 75 6c 65 41  char **azModuleA
136c0 72 67 3b 20 20 2f 2a 20 30 3a 20 6d 6f 64 75 6c  rg;  /* 0: modul
136d0 65 20 31 3a 20 73 63 68 65 6d 61 20 32 3a 20 76  e 1: schema 2: v
136e0 74 61 62 20 6e 61 6d 65 20 33 2e 2e 2e 3a 20 61  tab name 3...: a
136f0 72 67 73 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20  rgs */.  VTable 
13700 2a 70 56 54 61 62 6c 65 3b 20 20 20 20 20 2f 2a  *pVTable;     /*
13710 20 4c 69 73 74 20 6f 66 20 56 54 61 62 6c 65 20   List of VTable 
13720 6f 62 6a 65 63 74 73 2e 20 2a 2f 0a 23 65 6e 64  objects. */.#end
13730 69 66 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54  if.  Trigger *pT
13740 72 69 67 67 65 72 3b 20 20 20 2f 2a 20 4c 69 73  rigger;   /* Lis
13750 74 20 6f 66 20 74 72 69 67 67 65 72 73 20 73 74  t of triggers st
13760 6f 72 65 64 20 69 6e 20 70 53 63 68 65 6d 61 20  ored in pSchema 
13770 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63  */.  Schema *pSc
13780 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63 68  hema;     /* Sch
13790 65 6d 61 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ema that contain
137a0 73 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  s this table */.
137b0 20 20 54 61 62 6c 65 20 2a 70 4e 65 78 74 5a 6f    Table *pNextZo
137c0 6d 62 69 65 3b 20 20 2f 2a 20 4e 65 78 74 20 6f  mbie;  /* Next o
137d0 6e 20 74 68 65 20 50 61 72 73 65 2e 70 5a 6f 6d  n the Parse.pZom
137e0 62 69 65 54 61 62 20 6c 69 73 74 20 2a 2f 0a 7d  bieTab list */.}
137f0 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64  ;../*.** Allowed
13800 20 76 61 6c 75 65 73 20 66 6f 72 20 54 61 62 6c   values for Tabl
13810 65 2e 74 61 62 46 6c 61 67 73 2e 0a 2a 2a 0a 2a  e.tabFlags..**.*
13820 2a 20 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20 61  * TF_OOOHidden a
13830 70 70 6c 69 65 73 20 74 6f 20 74 61 62 6c 65 73  pplies to tables
13840 20 6f 72 20 76 69 65 77 20 74 68 61 74 20 68 61   or view that ha
13850 76 65 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e  ve hidden column
13860 73 20 74 68 61 74 20 61 72 65 0a 2a 2a 20 66 6f  s that are.** fo
13870 6c 6c 6f 77 65 64 20 62 79 20 6e 6f 6e 2d 68 69  llowed by non-hi
13880 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 2e 20 20 45  dden columns.  E
13890 78 61 6d 70 6c 65 3a 20 20 22 43 52 45 41 54 45  xample:  "CREATE
138a0 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 78   VIRTUAL TABLE x
138b0 20 55 53 49 4e 47 0a 2a 2a 20 76 74 61 62 31 28   USING.** vtab1(
138c0 61 20 48 49 44 44 45 4e 2c 20 62 29 3b 22 2e 20  a HIDDEN, b);". 
138d0 20 53 69 6e 63 65 20 22 62 22 20 69 73 20 61 20   Since "b" is a 
138e0 6e 6f 6e 2d 68 69 64 64 65 6e 20 63 6f 6c 75 6d  non-hidden colum
138f0 6e 20 62 75 74 20 22 61 22 20 69 73 20 68 69 64  n but "a" is hid
13900 64 65 6e 2c 0a 2a 2a 20 74 68 65 20 54 46 5f 4f  den,.** the TF_O
13910 4f 4f 48 69 64 64 65 6e 20 61 74 74 72 69 62 75  OOHidden attribu
13920 74 65 20 77 6f 75 6c 64 20 61 70 70 6c 79 20 69  te would apply i
13930 6e 20 74 68 69 73 20 63 61 73 65 2e 20 20 53 75  n this case.  Su
13940 63 68 20 74 61 62 6c 65 73 20 72 65 71 75 69 72  ch tables requir
13950 65 0a 2a 2a 20 73 70 65 63 69 61 6c 20 68 61 6e  e.** special han
13960 64 6c 69 6e 67 20 64 75 72 69 6e 67 20 49 4e 53  dling during INS
13970 45 52 54 20 70 72 6f 63 65 73 73 69 6e 67 2e 0a  ERT processing..
13980 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 52 65  */.#define TF_Re
13990 61 64 6f 6e 6c 79 20 20 20 20 20 20 20 20 30 78  adonly        0x
139a0 30 30 30 31 20 20 20 20 2f 2a 20 52 65 61 64 2d  0001    /* Read-
139b0 6f 6e 6c 79 20 73 79 73 74 65 6d 20 74 61 62 6c  only system tabl
139c0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  e */.#define TF_
139d0 45 70 68 65 6d 65 72 61 6c 20 20 20 20 20 20 20  Ephemeral       
139e0 30 78 30 30 30 32 20 20 20 20 2f 2a 20 41 6e 20  0x0002    /* An 
139f0 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20  ephemeral table 
13a00 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61  */.#define TF_Ha
13a10 73 50 72 69 6d 61 72 79 4b 65 79 20 20 20 30 78  sPrimaryKey   0x
13a20 30 30 30 34 20 20 20 20 2f 2a 20 54 61 62 6c 65  0004    /* Table
13a30 20 68 61 73 20 61 20 70 72 69 6d 61 72 79 20 6b   has a primary k
13a40 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  ey */.#define TF
13a50 5f 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 20  _Autoincrement  
13a60 20 30 78 30 30 30 38 20 20 20 20 2f 2a 20 49 6e   0x0008    /* In
13a70 74 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65  teger primary ke
13a80 79 20 69 73 20 61 75 74 6f 69 6e 63 72 65 6d 65  y is autoincreme
13a90 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  nt */.#define TF
13aa0 5f 48 61 73 53 74 61 74 31 20 20 20 20 20 20 20  _HasStat1       
13ab0 20 30 78 30 30 31 30 20 20 20 20 2f 2a 20 6e 52   0x0010    /* nR
13ac0 6f 77 4c 6f 67 45 73 74 20 73 65 74 20 66 72 6f  owLogEst set fro
13ad0 6d 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 2a  m sqlite_stat1 *
13ae0 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 57 69 74  /.#define TF_Wit
13af0 68 6f 75 74 52 6f 77 69 64 20 20 20 20 30 78 30  houtRowid    0x0
13b00 30 32 30 20 20 20 20 2f 2a 20 4e 6f 20 72 6f 77  020    /* No row
13b10 69 64 2e 20 20 50 52 49 4d 41 52 59 20 4b 45 59  id.  PRIMARY KEY
13b20 20 69 73 20 74 68 65 20 6b 65 79 20 2a 2f 0a 23   is the key */.#
13b30 64 65 66 69 6e 65 20 54 46 5f 4e 6f 56 69 73 69  define TF_NoVisi
13b40 62 6c 65 52 6f 77 69 64 20 20 30 78 30 30 34 30  bleRowid  0x0040
13b50 20 20 20 20 2f 2a 20 4e 6f 20 75 73 65 72 2d 76      /* No user-v
13b60 69 73 69 62 6c 65 20 22 72 6f 77 69 64 22 20 63  isible "rowid" c
13b70 6f 6c 75 6d 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  olumn */.#define
13b80 20 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20 20 20   TF_OOOHidden   
13b90 20 20 20 20 30 78 30 30 38 30 20 20 20 20 2f 2a      0x0080    /*
13ba0 20 4f 75 74 2d 6f 66 2d 4f 72 64 65 72 20 68 69   Out-of-Order hi
13bb0 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a  dden columns */.
13bc0 23 64 65 66 69 6e 65 20 54 46 5f 53 74 61 74 73  #define TF_Stats
13bd0 55 73 65 64 20 20 20 20 20 20 20 30 78 30 31 30  Used       0x010
13be0 30 20 20 20 20 2f 2a 20 51 75 65 72 79 20 70 6c  0    /* Query pl
13bf0 61 6e 6e 65 72 20 64 65 63 69 73 69 6f 6e 73 20  anner decisions 
13c00 61 66 66 65 63 74 65 64 20 62 79 0a 20 20 20 20  affected by.    
13c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c30 20 2a 2a 20 49 6e 64 65 78 2e 61 69 52 6f 77 4c   ** Index.aiRowL
13c40 6f 67 45 73 74 5b 5d 20 76 61 6c 75 65 73 20 2a  ogEst[] values *
13c50 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73  /.#define TF_Has
13c60 4e 6f 74 4e 75 6c 6c 20 20 20 20 20 20 30 78 30  NotNull      0x0
13c70 32 30 30 20 20 20 20 2f 2a 20 43 6f 6e 74 61 69  200    /* Contai
13c80 6e 73 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73  ns NOT NULL cons
13c90 74 72 61 69 6e 74 73 20 2a 2f 0a 0a 2f 2a 0a 2a  traints */../*.*
13ca0 2a 20 54 65 73 74 20 74 6f 20 73 65 65 20 77 68  * Test to see wh
13cb0 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 20 74  ether or not a t
13cc0 61 62 6c 65 20 69 73 20 61 20 76 69 72 74 75 61  able is a virtua
13cd0 6c 20 74 61 62 6c 65 2e 20 20 54 68 69 73 20 69  l table.  This i
13ce0 73 0a 2a 2a 20 64 6f 6e 65 20 61 73 20 61 20 6d  s.** done as a m
13cf0 61 63 72 6f 20 73 6f 20 74 68 61 74 20 69 74 20  acro so that it 
13d00 77 69 6c 6c 20 62 65 20 6f 70 74 69 6d 69 7a 65  will be optimize
13d10 64 20 6f 75 74 20 77 68 65 6e 20 76 69 72 74 75  d out when virtu
13d20 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 73 75 70 70  al.** table supp
13d30 6f 72 74 20 69 73 20 6f 6d 69 74 74 65 64 20 66  ort is omitted f
13d40 72 6f 6d 20 74 68 65 20 62 75 69 6c 64 2e 0a 2a  rom the build..*
13d50 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
13d60 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
13d70 4c 45 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56  LE.#  define IsV
13d80 69 72 74 75 61 6c 28 58 29 20 20 20 20 20 20 28  irtual(X)      (
13d90 28 58 29 2d 3e 6e 4d 6f 64 75 6c 65 41 72 67 29  (X)->nModuleArg)
13da0 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  .#else.#  define
13db0 20 49 73 56 69 72 74 75 61 6c 28 58 29 20 20 20   IsVirtual(X)   
13dc0 20 20 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a     0.#endif../*.
13dd0 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74  ** Macros to det
13de0 65 72 6d 69 6e 65 20 69 66 20 61 20 63 6f 6c 75  ermine if a colu
13df0 6d 6e 20 69 73 20 68 69 64 64 65 6e 2e 20 20 49  mn is hidden.  I
13e00 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43  sOrdinaryHiddenC
13e10 6f 6c 75 6d 6e 28 29 0a 2a 2a 20 6f 6e 6c 79 20  olumn().** only 
13e20 77 6f 72 6b 73 20 66 6f 72 20 6e 6f 6e 2d 76 69  works for non-vi
13e30 72 74 75 61 6c 20 74 61 62 6c 65 73 20 28 6f 72  rtual tables (or
13e40 64 69 6e 61 72 79 20 74 61 62 6c 65 73 20 61 6e  dinary tables an
13e50 64 20 76 69 65 77 73 29 20 61 6e 64 20 69 73 0a  d views) and is.
13e60 2a 2a 20 61 6c 77 61 79 73 20 66 61 6c 73 65 20  ** always false 
13e70 75 6e 6c 65 73 73 20 53 51 4c 49 54 45 5f 45 4e  unless SQLITE_EN
13e80 41 42 4c 45 5f 48 49 44 44 45 4e 5f 43 4f 4c 55  ABLE_HIDDEN_COLU
13e90 4d 4e 53 20 69 73 20 64 65 66 69 6e 65 64 2e 20  MNS is defined. 
13ea0 20 54 68 65 0a 2a 2a 20 49 73 48 69 64 64 65 6e   The.** IsHidden
13eb0 43 6f 6c 75 6d 6e 28 29 20 6d 61 63 72 6f 20 69  Column() macro i
13ec0 73 20 67 65 6e 65 72 61 6c 20 70 75 72 70 6f 73  s general purpos
13ed0 65 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  e..*/.#if define
13ee0 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
13ef0 48 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53 29 0a  HIDDEN_COLUMNS).
13f00 23 20 20 64 65 66 69 6e 65 20 49 73 48 69 64 64  #  define IsHidd
13f10 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20  enColumn(X)     
13f20 20 20 20 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c      (((X)->colFl
13f30 61 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49  ags & COLFLAG_HI
13f40 44 44 45 4e 29 21 3d 30 29 0a 23 20 20 64 65 66  DDEN)!=0).#  def
13f50 69 6e 65 20 49 73 4f 72 64 69 6e 61 72 79 48 69  ine IsOrdinaryHi
13f60 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 28 28  ddenColumn(X) ((
13f70 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20  (X)->colFlags & 
13f80 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21  COLFLAG_HIDDEN)!
13f90 3d 30 29 0a 23 65 6c 69 66 20 21 64 65 66 69 6e  =0).#elif !defin
13fa0 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ed(SQLITE_OMIT_V
13fb0 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 23 20 20  IRTUALTABLE).#  
13fc0 64 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43  define IsHiddenC
13fd0 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20 20 20 20  olumn(X)        
13fe0 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73   (((X)->colFlags
13ff0 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45   & COLFLAG_HIDDE
14000 4e 29 21 3d 30 29 0a 23 20 20 64 65 66 69 6e 65  N)!=0).#  define
14010 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65   IsOrdinaryHidde
14020 6e 43 6f 6c 75 6d 6e 28 58 29 20 30 0a 23 65 6c  nColumn(X) 0.#el
14030 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48  se.#  define IsH
14040 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 20  iddenColumn(X)  
14050 20 20 20 20 20 20 20 30 0a 23 20 20 64 65 66 69         0.#  defi
14060 6e 65 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64  ne IsOrdinaryHid
14070 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 30 0a 23  denColumn(X) 0.#
14080 65 6e 64 69 66 0a 0a 0a 2f 2a 20 44 6f 65 73 20  endif.../* Does 
14090 74 68 65 20 74 61 62 6c 65 20 68 61 76 65 20 61  the table have a
140a0 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e   rowid */.#defin
140b0 65 20 48 61 73 52 6f 77 69 64 28 58 29 20 20 20  e HasRowid(X)   
140c0 20 20 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67    (((X)->tabFlag
140d0 73 20 26 20 54 46 5f 57 69 74 68 6f 75 74 52 6f  s & TF_WithoutRo
140e0 77 69 64 29 3d 3d 30 29 0a 23 64 65 66 69 6e 65  wid)==0).#define
140f0 20 56 69 73 69 62 6c 65 52 6f 77 69 64 28 58 29   VisibleRowid(X)
14100 20 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73   (((X)->tabFlags
14110 20 26 20 54 46 5f 4e 6f 56 69 73 69 62 6c 65 52   & TF_NoVisibleR
14120 6f 77 69 64 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a  owid)==0)../*.**
14130 20 45 61 63 68 20 66 6f 72 65 69 67 6e 20 6b 65   Each foreign ke
14140 79 20 63 6f 6e 73 74 72 61 69 6e 74 20 69 73 20  y constraint is 
14150 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
14160 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
14170 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 41 20  ucture..**.** A 
14180 66 6f 72 65 69 67 6e 20 6b 65 79 20 69 73 20 61  foreign key is a
14190 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
141a0 77 6f 20 74 61 62 6c 65 73 2e 20 20 54 68 65 20  wo tables.  The 
141b0 22 66 72 6f 6d 22 20 74 61 62 6c 65 20 69 73 0a  "from" table is.
141c0 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  ** the table tha
141d0 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 52  t contains the R
141e0 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65  EFERENCES clause
141f0 20 74 68 61 74 20 63 72 65 61 74 65 73 20 74 68   that creates th
14200 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79  e foreign.** key
14210 2e 20 20 54 68 65 20 22 74 6f 22 20 74 61 62 6c  .  The "to" tabl
14220 65 20 69 73 20 74 68 65 20 74 61 62 6c 65 20 74  e is the table t
14230 68 61 74 20 69 73 20 6e 61 6d 65 64 20 69 6e 20  hat is named in 
14240 74 68 65 20 52 45 46 45 52 45 4e 43 45 53 20 63  the REFERENCES c
14250 6c 61 75 73 65 2e 0a 2a 2a 20 43 6f 6e 73 69 64  lause..** Consid
14260 65 72 20 74 68 69 73 20 65 78 61 6d 70 6c 65 3a  er this example:
14270 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54  .**.**     CREAT
14280 45 20 54 41 42 4c 45 20 65 78 31 28 0a 2a 2a 20  E TABLE ex1(.** 
14290 20 20 20 20 20 20 61 20 49 4e 54 45 47 45 52 20        a INTEGER 
142a0 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 2a 2a 20  PRIMARY KEY,.** 
142b0 20 20 20 20 20 20 62 20 49 4e 54 45 47 45 52 20        b INTEGER 
142c0 43 4f 4e 53 54 52 41 49 4e 54 20 66 6b 31 20 52  CONSTRAINT fk1 R
142d0 45 46 45 52 45 4e 43 45 53 20 65 78 32 28 78 29  EFERENCES ex2(x)
142e0 0a 2a 2a 20 20 20 20 20 29 3b 0a 2a 2a 0a 2a 2a  .**     );.**.**
142f0 20 46 6f 72 20 66 6f 72 65 69 67 6e 20 6b 65 79   For foreign key
14300 20 22 66 6b 31 22 2c 20 74 68 65 20 66 72 6f 6d   "fk1", the from
14310 2d 74 61 62 6c 65 20 69 73 20 22 65 78 31 22 20  -table is "ex1" 
14320 61 6e 64 20 74 68 65 20 74 6f 2d 74 61 62 6c 65  and the to-table
14330 20 69 73 20 22 65 78 32 22 2e 0a 2a 2a 20 45 71   is "ex2"..** Eq
14340 75 69 76 61 6c 65 6e 74 20 6e 61 6d 65 73 3a 0a  uivalent names:.
14350 2a 2a 0a 2a 2a 20 20 20 20 20 66 72 6f 6d 2d 74  **.**     from-t
14360 61 62 6c 65 20 3d 3d 20 63 68 69 6c 64 2d 74 61  able == child-ta
14370 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20 74 6f 2d  ble.**       to-
14380 74 61 62 6c 65 20 3d 3d 20 70 61 72 65 6e 74 2d  table == parent-
14390 74 61 62 6c 65 0a 2a 2a 0a 2a 2a 20 45 61 63 68  table.**.** Each
143a0 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75   REFERENCES clau
143b0 73 65 20 67 65 6e 65 72 61 74 65 73 20 61 6e 20  se generates an 
143c0 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
143d0 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
143e0 75 72 65 0a 2a 2a 20 77 68 69 63 68 20 69 73 20  ure.** which is 
143f0 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20  attached to the 
14400 66 72 6f 6d 2d 74 61 62 6c 65 2e 20 20 54 68 65  from-table.  The
14410 20 74 6f 2d 74 61 62 6c 65 20 6e 65 65 64 20 6e   to-table need n
14420 6f 74 20 65 78 69 73 74 20 77 68 65 6e 0a 2a 2a  ot exist when.**
14430 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20   the from-table 
14440 69 73 20 63 72 65 61 74 65 64 2e 20 20 54 68 65  is created.  The
14450 20 65 78 69 73 74 65 6e 63 65 20 6f 66 20 74 68   existence of th
14460 65 20 74 6f 2d 74 61 62 6c 65 20 69 73 20 6e 6f  e to-table is no
14470 74 20 63 68 65 63 6b 65 64 2e 0a 2a 2a 0a 2a 2a  t checked..**.**
14480 20 54 68 65 20 6c 69 73 74 20 6f 66 20 61 6c 6c   The list of all
14490 20 70 61 72 65 6e 74 73 20 66 6f 72 20 63 68 69   parents for chi
144a0 6c 64 20 54 61 62 6c 65 20 58 20 69 73 20 68 65  ld Table X is he
144b0 6c 64 20 61 74 20 58 2e 70 46 4b 65 79 2e 0a 2a  ld at X.pFKey..*
144c0 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20 61  *.** A list of a
144d0 6c 6c 20 63 68 69 6c 64 72 65 6e 20 66 6f 72 20  ll children for 
144e0 61 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 5a 20  a table named Z 
144f0 28 77 68 69 63 68 20 6d 69 67 68 74 20 6e 6f 74  (which might not
14500 20 65 76 65 6e 20 65 78 69 73 74 29 0a 2a 2a 20   even exist).** 
14510 69 73 20 68 65 6c 64 20 69 6e 20 53 63 68 65 6d  is held in Schem
14520 61 2e 66 6b 65 79 48 61 73 68 20 77 69 74 68 20  a.fkeyHash with 
14530 61 20 68 61 73 68 20 6b 65 79 20 6f 66 20 5a 2e  a hash key of Z.
14540 0a 2a 2f 0a 73 74 72 75 63 74 20 46 4b 65 79 20  .*/.struct FKey 
14550 7b 0a 20 20 54 61 62 6c 65 20 2a 70 46 72 6f 6d  {.  Table *pFrom
14560 3b 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63  ;     /* Table c
14570 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 52 45  ontaining the RE
14580 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20  FERENCES clause 
14590 28 61 6b 61 3a 20 43 68 69 6c 64 29 20 2a 2f 0a  (aka: Child) */.
145a0 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 46 72 6f    FKey *pNextFro
145b0 6d 3b 20 20 2f 2a 20 4e 65 78 74 20 46 4b 65 79  m;  /* Next FKey
145c0 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 69   with the same i
145d0 6e 20 70 46 72 6f 6d 2e 20 4e 65 78 74 20 70 61  n pFrom. Next pa
145e0 72 65 6e 74 20 6f 66 20 70 46 72 6f 6d 20 2a 2f  rent of pFrom */
145f0 0a 20 20 63 68 61 72 20 2a 7a 54 6f 3b 20 20 20  .  char *zTo;   
14600 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
14610 74 61 62 6c 65 20 74 68 61 74 20 74 68 65 20 6b  table that the k
14620 65 79 20 70 6f 69 6e 74 73 20 74 6f 20 28 61 6b  ey points to (ak
14630 61 3a 20 50 61 72 65 6e 74 29 20 2a 2f 0a 20 20  a: Parent) */.  
14640 46 4b 65 79 20 2a 70 4e 65 78 74 54 6f 3b 20 20  FKey *pNextTo;  
14650 20 20 2f 2a 20 4e 65 78 74 20 77 69 74 68 20 74    /* Next with t
14660 68 65 20 73 61 6d 65 20 7a 54 6f 2e 20 4e 65 78  he same zTo. Nex
14670 74 20 63 68 69 6c 64 20 6f 66 20 7a 54 6f 2e 20  t child of zTo. 
14680 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 50 72 65 76  */.  FKey *pPrev
14690 54 6f 3b 20 20 20 20 2f 2a 20 50 72 65 76 69 6f  To;    /* Previo
146a0 75 73 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  us with the same
146b0 20 7a 54 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e 43   zTo */.  int nC
146c0 6f 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ol;         /* N
146d0 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
146e0 20 69 6e 20 74 68 69 73 20 6b 65 79 20 2a 2f 0a   in this key */.
146f0 20 20 2f 2a 20 45 56 3a 20 52 2d 33 30 33 32 33    /* EV: R-30323
14700 2d 32 31 39 31 37 20 2a 2f 0a 20 20 75 38 20 69  -21917 */.  u8 i
14710 73 44 65 66 65 72 72 65 64 3b 20 20 20 20 20 20  sDeferred;      
14720 20 2f 2a 20 54 72 75 65 20 69 66 20 63 6f 6e 73   /* True if cons
14730 74 72 61 69 6e 74 20 63 68 65 63 6b 69 6e 67 20  traint checking 
14740 69 73 20 64 65 66 65 72 72 65 64 20 74 69 6c 6c  is deferred till
14750 20 43 4f 4d 4d 49 54 20 2a 2f 0a 20 20 75 38 20   COMMIT */.  u8 
14760 61 41 63 74 69 6f 6e 5b 32 5d 3b 20 20 20 20 20  aAction[2];     
14770 20 20 20 2f 2a 20 4f 4e 20 44 45 4c 45 54 45 20     /* ON DELETE 
14780 61 6e 64 20 4f 4e 20 55 50 44 41 54 45 20 61 63  and ON UPDATE ac
14790 74 69 6f 6e 73 2c 20 72 65 73 70 65 63 74 69 76  tions, respectiv
147a0 65 6c 79 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  ely */.  Trigger
147b0 20 2a 61 70 54 72 69 67 67 65 72 5b 32 5d 3b 2f   *apTrigger[2];/
147c0 2a 20 54 72 69 67 67 65 72 73 20 66 6f 72 20 61  * Triggers for a
147d0 41 63 74 69 6f 6e 5b 5d 20 61 63 74 69 6f 6e 73  Action[] actions
147e0 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 73 43 6f   */.  struct sCo
147f0 6c 4d 61 70 20 7b 20 20 20 20 20 20 2f 2a 20 4d  lMap {      /* M
14800 61 70 70 69 6e 67 20 6f 66 20 63 6f 6c 75 6d 6e  apping of column
14810 73 20 69 6e 20 70 46 72 6f 6d 20 74 6f 20 63 6f  s in pFrom to co
14820 6c 75 6d 6e 73 20 69 6e 20 7a 54 6f 20 2a 2f 0a  lumns in zTo */.
14830 20 20 20 20 69 6e 74 20 69 46 72 6f 6d 3b 20 20      int iFrom;  
14840 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64            /* Ind
14850 65 78 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20  ex of column in 
14860 70 46 72 6f 6d 20 2a 2f 0a 20 20 20 20 63 68 61  pFrom */.    cha
14870 72 20 2a 7a 43 6f 6c 3b 20 20 20 20 20 20 20 20  r *zCol;        
14880 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 63 6f     /* Name of co
14890 6c 75 6d 6e 20 69 6e 20 7a 54 6f 2e 20 20 49 66  lumn in zTo.  If
148a0 20 4e 55 4c 4c 20 75 73 65 20 50 52 49 4d 41 52   NULL use PRIMAR
148b0 59 20 4b 45 59 20 2a 2f 0a 20 20 7d 20 61 43 6f  Y KEY */.  } aCo
148c0 6c 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20 20  l[1];           
148d0 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f   /* One entry fo
148e0 72 20 65 61 63 68 20 6f 66 20 6e 43 6f 6c 20 63  r each of nCol c
148f0 6f 6c 75 6d 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  olumns */.};../*
14900 0a 2a 2a 20 53 51 4c 69 74 65 20 73 75 70 70 6f  .** SQLite suppo
14910 72 74 73 20 6d 61 6e 79 20 64 69 66 66 65 72 65  rts many differe
14920 6e 74 20 77 61 79 73 20 74 6f 20 72 65 73 6f 6c  nt ways to resol
14930 76 65 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 0a  ve a constraint.
14940 2a 2a 20 65 72 72 6f 72 2e 20 20 52 4f 4c 4c 42  ** error.  ROLLB
14950 41 43 4b 20 70 72 6f 63 65 73 73 69 6e 67 20 6d  ACK processing m
14960 65 61 6e 73 20 74 68 61 74 20 61 20 63 6f 6e 73  eans that a cons
14970 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
14980 0a 2a 2a 20 63 61 75 73 65 73 20 74 68 65 20 6f  .** causes the o
14990 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63  peration in proc
149a0 65 73 73 20 74 6f 20 66 61 69 6c 20 61 6e 64 20  ess to fail and 
149b0 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20  for the current 
149c0 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 74  transaction.** t
149d0 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b  o be rolled back
149e0 2e 20 20 41 42 4f 52 54 20 70 72 6f 63 65 73 73  .  ABORT process
149f0 69 6e 67 20 6d 65 61 6e 73 20 74 68 65 20 6f 70  ing means the op
14a00 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65  eration in proce
14a10 73 73 0a 2a 2a 20 66 61 69 6c 73 20 61 6e 64 20  ss.** fails and 
14a20 61 6e 79 20 70 72 69 6f 72 20 63 68 61 6e 67 65  any prior change
14a30 73 20 66 72 6f 6d 20 74 68 61 74 20 6f 6e 65 20  s from that one 
14a40 6f 70 65 72 61 74 69 6f 6e 20 61 72 65 20 62 61  operation are ba
14a50 63 6b 65 64 20 6f 75 74 2c 0a 2a 2a 20 62 75 74  cked out,.** but
14a60 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
14a70 20 69 73 20 6e 6f 74 20 72 6f 6c 6c 65 64 20 62   is not rolled b
14a80 61 63 6b 2e 20 20 46 41 49 4c 20 70 72 6f 63 65  ack.  FAIL proce
14a90 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 61 74  ssing means that
14aa0 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 74 69 6f  .** the operatio
14ab0 6e 20 69 6e 20 70 72 6f 67 72 65 73 73 20 73 74  n in progress st
14ac0 6f 70 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20  ops and returns 
14ad0 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 2e 20 20  an error code.  
14ae0 42 75 74 20 70 72 69 6f 72 0a 2a 2a 20 63 68 61  But prior.** cha
14af0 6e 67 65 73 20 64 75 65 20 74 6f 20 74 68 65 20  nges due to the 
14b00 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 61  same operation a
14b10 72 65 20 6e 6f 74 20 62 61 63 6b 65 64 20 6f 75  re not backed ou
14b20 74 20 61 6e 64 20 6e 6f 20 72 6f 6c 6c 62 61 63  t and no rollbac
14b30 6b 0a 2a 2a 20 6f 63 63 75 72 73 2e 20 20 49 47  k.** occurs.  IG
14b40 4e 4f 52 45 20 6d 65 61 6e 73 20 74 68 61 74 20  NORE means that 
14b50 74 68 65 20 70 61 72 74 69 63 75 6c 61 72 20 72  the particular r
14b60 6f 77 20 74 68 61 74 20 63 61 75 73 65 64 20 74  ow that caused t
14b70 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a  he constraint.**
14b80 20 65 72 72 6f 72 20 69 73 20 6e 6f 74 20 69 6e   error is not in
14b90 73 65 72 74 65 64 20 6f 72 20 75 70 64 61 74 65  serted or update
14ba0 64 2e 20 20 50 72 6f 63 65 73 73 69 6e 67 20 63  d.  Processing c
14bb0 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20  ontinues and no 
14bc0 65 72 72 6f 72 0a 2a 2a 20 69 73 20 72 65 74 75  error.** is retu
14bd0 72 6e 65 64 2e 20 20 52 45 50 4c 41 43 45 20 6d  rned.  REPLACE m
14be0 65 61 6e 73 20 74 68 61 74 20 70 72 65 65 78 69  eans that preexi
14bf0 73 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 72  sting database r
14c00 6f 77 73 20 74 68 61 74 20 63 61 75 73 65 64 0a  ows that caused.
14c10 2a 2a 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73  ** a UNIQUE cons
14c20 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
14c30 20 61 72 65 20 72 65 6d 6f 76 65 64 20 73 6f 20   are removed so 
14c40 74 68 61 74 20 74 68 65 20 6e 65 77 20 69 6e 73  that the new ins
14c50 65 72 74 20 6f 72 0a 2a 2a 20 75 70 64 61 74 65  ert or.** update
14c60 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 20 20 50   can proceed.  P
14c70 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e  rocessing contin
14c80 75 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72  ues and no error
14c90 20 69 73 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a   is reported..**
14ca0 0a 2a 2a 20 52 45 53 54 52 49 43 54 2c 20 53 45  .** RESTRICT, SE
14cb0 54 4e 55 4c 4c 2c 20 61 6e 64 20 43 41 53 43 41  TNULL, and CASCA
14cc0 44 45 20 61 63 74 69 6f 6e 73 20 61 70 70 6c 79  DE actions apply
14cd0 20 6f 6e 6c 79 20 74 6f 20 66 6f 72 65 69 67 6e   only to foreign
14ce0 20 6b 65 79 73 2e 0a 2a 2a 20 52 45 53 54 52 49   keys..** RESTRI
14cf0 43 54 20 69 73 20 74 68 65 20 73 61 6d 65 20 61  CT is the same a
14d00 73 20 41 42 4f 52 54 20 66 6f 72 20 49 4d 4d 45  s ABORT for IMME
14d10 44 49 41 54 45 20 66 6f 72 65 69 67 6e 20 6b 65  DIATE foreign ke
14d20 79 73 20 61 6e 64 20 74 68 65 0a 2a 2a 20 73 61  ys and the.** sa
14d30 6d 65 20 61 73 20 52 4f 4c 4c 42 41 43 4b 20 66  me as ROLLBACK f
14d40 6f 72 20 44 45 46 45 52 52 45 44 20 6b 65 79 73  or DEFERRED keys
14d50 2e 20 20 53 45 54 4e 55 4c 4c 20 6d 65 61 6e 73  .  SETNULL means
14d60 20 74 68 61 74 20 74 68 65 20 66 6f 72 65 69 67   that the foreig
14d70 6e 0a 2a 2a 20 6b 65 79 20 69 73 20 73 65 74 20  n.** key is set 
14d80 74 6f 20 4e 55 4c 4c 2e 20 20 43 41 53 43 41 44  to NULL.  CASCAD
14d90 45 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20 44  E means that a D
14da0 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45 20  ELETE or UPDATE 
14db0 6f 66 20 74 68 65 0a 2a 2a 20 72 65 66 65 72 65  of the.** refere
14dc0 6e 63 65 64 20 74 61 62 6c 65 20 72 6f 77 20 69  nced table row i
14dd0 73 20 70 72 6f 70 61 67 61 74 65 64 20 69 6e 74  s propagated int
14de0 6f 20 74 68 65 20 72 6f 77 20 74 68 61 74 20 68  o the row that h
14df0 6f 6c 64 73 20 74 68 65 0a 2a 2a 20 66 6f 72 65  olds the.** fore
14e00 69 67 6e 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54  ign key..**.** T
14e10 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79 6d  he following sym
14e20 62 6f 6c 69 63 20 76 61 6c 75 65 73 20 61 72 65  bolic values are
14e30 20 75 73 65 64 20 74 6f 20 72 65 63 6f 72 64 20   used to record 
14e40 77 68 69 63 68 20 74 79 70 65 0a 2a 2a 20 6f 66  which type.** of
14e50 20 61 63 74 69 6f 6e 20 74 6f 20 74 61 6b 65 2e   action to take.
14e60 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 4e  .*/.#define OE_N
14e70 6f 6e 65 20 20 20 20 20 30 20 20 20 2f 2a 20 54  one     0   /* T
14e80 68 65 72 65 20 69 73 20 6e 6f 20 63 6f 6e 73 74  here is no const
14e90 72 61 69 6e 74 20 74 6f 20 63 68 65 63 6b 20 2a  raint to check *
14ea0 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 6f 6c  /.#define OE_Rol
14eb0 6c 62 61 63 6b 20 31 20 20 20 2f 2a 20 46 61 69  lback 1   /* Fai
14ec0 6c 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  l the operation 
14ed0 61 6e 64 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65  and rollback the
14ee0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a   transaction */.
14ef0 23 64 65 66 69 6e 65 20 4f 45 5f 41 62 6f 72 74  #define OE_Abort
14f00 20 20 20 20 32 20 20 20 2f 2a 20 42 61 63 6b 20      2   /* Back 
14f10 6f 75 74 20 63 68 61 6e 67 65 73 20 62 75 74 20  out changes but 
14f20 64 6f 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 20 74  do no rollback t
14f30 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64  ransaction */.#d
14f40 65 66 69 6e 65 20 4f 45 5f 46 61 69 6c 20 20 20  efine OE_Fail   
14f50 20 20 33 20 20 20 2f 2a 20 53 74 6f 70 20 74 68    3   /* Stop th
14f60 65 20 6f 70 65 72 61 74 69 6f 6e 20 62 75 74 20  e operation but 
14f70 6c 65 61 76 65 20 61 6c 6c 20 70 72 69 6f 72 20  leave all prior 
14f80 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69  changes */.#defi
14f90 6e 65 20 4f 45 5f 49 67 6e 6f 72 65 20 20 20 34  ne OE_Ignore   4
14fa0 20 20 20 2f 2a 20 49 67 6e 6f 72 65 20 74 68 65     /* Ignore the
14fb0 20 65 72 72 6f 72 2e 20 44 6f 20 6e 6f 74 20 64   error. Do not d
14fc0 6f 20 74 68 65 20 49 4e 53 45 52 54 20 6f 72 20  o the INSERT or 
14fd0 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e  UPDATE */.#defin
14fe0 65 20 4f 45 5f 52 65 70 6c 61 63 65 20 20 35 20  e OE_Replace  5 
14ff0 20 20 2f 2a 20 44 65 6c 65 74 65 20 65 78 69 73    /* Delete exis
15000 74 69 6e 67 20 72 65 63 6f 72 64 2c 20 74 68 65  ting record, the
15010 6e 20 64 6f 20 49 4e 53 45 52 54 20 6f 72 20 55  n do INSERT or U
15020 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65  PDATE */.#define
15030 20 4f 45 5f 55 70 64 61 74 65 20 20 20 36 20 20   OE_Update   6  
15040 20 2f 2a 20 50 72 6f 63 65 73 73 20 61 73 20 61   /* Process as a
15050 20 44 4f 20 55 50 44 41 54 45 20 69 6e 20 61 6e   DO UPDATE in an
15060 20 75 70 73 65 72 74 20 2a 2f 0a 23 64 65 66 69   upsert */.#defi
15070 6e 65 20 4f 45 5f 52 65 73 74 72 69 63 74 20 37  ne OE_Restrict 7
15080 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 20 66     /* OE_Abort f
15090 6f 72 20 49 4d 4d 45 44 49 41 54 45 2c 20 4f 45  or IMMEDIATE, OE
150a0 5f 52 6f 6c 6c 62 61 63 6b 20 66 6f 72 20 44 45  _Rollback for DE
150b0 46 45 52 52 45 44 20 2a 2f 0a 23 64 65 66 69 6e  FERRED */.#defin
150c0 65 20 4f 45 5f 53 65 74 4e 75 6c 6c 20 20 38 20  e OE_SetNull  8 
150d0 20 20 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72    /* Set the for
150e0 65 69 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74  eign key value t
150f0 6f 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e  o NULL */.#defin
15100 65 20 4f 45 5f 53 65 74 44 66 6c 74 20 20 39 20  e OE_SetDflt  9 
15110 20 20 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72    /* Set the for
15120 65 69 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74  eign key value t
15130 6f 20 69 74 73 20 64 65 66 61 75 6c 74 20 2a 2f  o its default */
15140 0a 23 64 65 66 69 6e 65 20 4f 45 5f 43 61 73 63  .#define OE_Casc
15150 61 64 65 20 20 31 30 20 20 2f 2a 20 43 61 73 63  ade  10  /* Casc
15160 61 64 65 20 74 68 65 20 63 68 61 6e 67 65 73 20  ade the changes 
15170 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 44 65  */.#define OE_De
15180 66 61 75 6c 74 20 20 31 31 20 20 2f 2a 20 44 6f  fault  11  /* Do
15190 20 77 68 61 74 65 76 65 72 20 74 68 65 20 64 65   whatever the de
151a0 66 61 75 6c 74 20 61 63 74 69 6f 6e 20 69 73 20  fault action is 
151b0 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  */.../*.** An in
151c0 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
151d0 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
151e0 65 20 69 73 20 70 61 73 73 65 64 20 61 73 20 74  e is passed as t
151f0 68 65 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75  he first.** argu
15200 6d 65 6e 74 20 74 6f 20 73 71 6c 69 74 65 33 56  ment to sqlite3V
15210 64 62 65 4b 65 79 43 6f 6d 70 61 72 65 20 61 6e  dbeKeyCompare an
15220 64 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6e  d is used to con
15230 74 72 6f 6c 20 74 68 65 0a 2a 2a 20 63 6f 6d 70  trol the.** comp
15240 61 72 69 73 6f 6e 20 6f 66 20 74 68 65 20 74 77  arison of the tw
15250 6f 20 69 6e 64 65 78 20 6b 65 79 73 2e 0a 2a 2a  o index keys..**
15260 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 61 53  .** Note that aS
15270 6f 72 74 4f 72 64 65 72 5b 5d 20 61 6e 64 20 61  ortOrder[] and a
15280 43 6f 6c 6c 5b 5d 20 68 61 76 65 20 6e 46 69 65  Coll[] have nFie
15290 6c 64 2b 31 20 73 6c 6f 74 73 2e 20 20 54 68 65  ld+1 slots.  The
152a0 72 65 0a 2a 2a 20 61 72 65 20 6e 46 69 65 6c 64  re.** are nField
152b0 20 73 6c 6f 74 73 20 66 6f 72 20 74 68 65 20 63   slots for the c
152c0 6f 6c 75 6d 6e 73 20 6f 66 20 61 6e 20 69 6e 64  olumns of an ind
152d0 65 78 20 74 68 65 6e 20 6f 6e 65 20 65 78 74 72  ex then one extr
152e0 61 20 73 6c 6f 74 0a 2a 2a 20 66 6f 72 20 74 68  a slot.** for th
152f0 65 20 72 6f 77 69 64 20 61 74 20 74 68 65 20 65  e rowid at the e
15300 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4b 65  nd..*/.struct Ke
15310 79 49 6e 66 6f 20 7b 0a 20 20 75 33 32 20 6e 52  yInfo {.  u32 nR
15320 65 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ef;           /*
15330 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 66 65 72   Number of refer
15340 65 6e 63 65 73 20 74 6f 20 74 68 69 73 20 4b 65  ences to this Ke
15350 79 49 6e 66 6f 20 6f 62 6a 65 63 74 20 2a 2f 0a  yInfo object */.
15360 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20    u8 enc;       
15370 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e        /* Text en
15380 63 6f 64 69 6e 67 20 2d 20 6f 6e 65 20 6f 66 20  coding - one of 
15390 74 68 65 20 53 51 4c 49 54 45 5f 55 54 46 2a 20  the SQLITE_UTF* 
153a0 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31 36 20  values */.  u16 
153b0 6e 4b 65 79 46 69 65 6c 64 3b 20 20 20 20 20 20  nKeyField;      
153c0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6b 65 79  /* Number of key
153d0 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
153e0 69 6e 64 65 78 20 2a 2f 0a 20 20 75 31 36 20 6e  index */.  u16 n
153f0 41 6c 6c 46 69 65 6c 64 3b 20 20 20 20 20 20 2f  AllField;      /
15400 2a 20 54 6f 74 61 6c 20 63 6f 6c 75 6d 6e 73 2c  * Total columns,
15410 20 69 6e 63 6c 75 64 69 6e 67 20 6b 65 79 20 70   including key p
15420 6c 75 73 20 6f 74 68 65 72 73 20 2a 2f 0a 20 20  lus others */.  
15430 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20  sqlite3 *db;    
15440 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62      /* The datab
15450 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a  ase connection *
15460 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72 64  /.  u8 *aSortOrd
15470 65 72 3b 20 20 20 20 20 2f 2a 20 53 6f 72 74 20  er;     /* Sort 
15480 6f 72 64 65 72 20 66 6f 72 20 65 61 63 68 20 63  order for each c
15490 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20 20 43 6f 6c 6c  olumn. */.  Coll
154a0 53 65 71 20 2a 61 43 6f 6c 6c 5b 31 5d 3b 20 20  Seq *aColl[1];  
154b0 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71  /* Collating seq
154c0 75 65 6e 63 65 20 66 6f 72 20 65 61 63 68 20 74  uence for each t
154d0 65 72 6d 20 6f 66 20 74 68 65 20 6b 65 79 20 2a  erm of the key *
154e0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73  /.};../*.** This
154f0 20 6f 62 6a 65 63 74 20 68 6f 6c 64 73 20 61 20   object holds a 
15500 72 65 63 6f 72 64 20 77 68 69 63 68 20 68 61 73  record which has
15510 20 62 65 65 6e 20 70 61 72 73 65 64 20 6f 75 74   been parsed out
15520 20 69 6e 74 6f 20 69 6e 64 69 76 69 64 75 61 6c   into individual
15530 0a 2a 2a 20 66 69 65 6c 64 73 2c 20 66 6f 72 20  .** fields, for 
15540 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20  the purposes of 
15550 64 6f 69 6e 67 20 61 20 63 6f 6d 70 61 72 69 73  doing a comparis
15560 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 20 72 65 63 6f  on..**.** A reco
15570 72 64 20 69 73 20 61 6e 20 6f 62 6a 65 63 74 20  rd is an object 
15580 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 6f 6e  that contains on
15590 65 20 6f 72 20 6d 6f 72 65 20 66 69 65 6c 64 73  e or more fields
155a0 20 6f 66 20 64 61 74 61 2e 0a 2a 2a 20 52 65 63   of data..** Rec
155b0 6f 72 64 73 20 61 72 65 20 75 73 65 64 20 74 6f  ords are used to
155c0 20 73 74 6f 72 65 20 74 68 65 20 63 6f 6e 74 65   store the conte
155d0 6e 74 20 6f 66 20 61 20 74 61 62 6c 65 20 72 6f  nt of a table ro
155e0 77 20 61 6e 64 20 74 6f 20 73 74 6f 72 65 0a 2a  w and to store.*
155f0 2a 20 74 68 65 20 6b 65 79 20 6f 66 20 61 6e 20  * the key of an 
15600 69 6e 64 65 78 2e 20 20 41 20 62 6c 6f 62 20 65  index.  A blob e
15610 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20 72 65 63  ncoding of a rec
15620 6f 72 64 20 69 73 20 63 72 65 61 74 65 64 20 62  ord is created b
15630 79 0a 2a 2a 20 74 68 65 20 4f 50 5f 4d 61 6b 65  y.** the OP_Make
15640 52 65 63 6f 72 64 20 6f 70 63 6f 64 65 20 6f 66  Record opcode of
15650 20 74 68 65 20 56 44 42 45 20 61 6e 64 20 69 73   the VDBE and is
15660 20 64 69 73 61 73 73 65 6d 62 6c 65 64 20 62 79   disassembled by
15670 20 74 68 65 0a 2a 2a 20 4f 50 5f 43 6f 6c 75 6d   the.** OP_Colum
15680 6e 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  n opcode..**.** 
15690 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
156a0 68 69 73 20 6f 62 6a 65 63 74 20 73 65 72 76 65  his object serve
156b0 73 20 61 73 20 61 20 22 6b 65 79 22 20 66 6f 72  s as a "key" for
156c0 20 64 6f 69 6e 67 20 61 20 73 65 61 72 63 68 20   doing a search 
156d0 6f 6e 0a 2a 2a 20 61 6e 20 69 6e 64 65 78 20 62  on.** an index b
156e0 2b 74 72 65 65 2e 20 54 68 65 20 67 6f 61 6c 20  +tree. The goal 
156f0 6f 66 20 74 68 65 20 73 65 61 72 63 68 20 69 73  of the search is
15700 20 74 6f 20 66 69 6e 64 20 74 68 65 20 65 6e 74   to find the ent
15710 72 79 20 74 68 61 74 0a 2a 2a 20 69 73 20 63 6c  ry that.** is cl
15720 6f 73 65 64 20 74 6f 20 74 68 65 20 6b 65 79 20  osed to the key 
15730 64 65 73 63 72 69 62 65 64 20 62 79 20 74 68 69  described by thi
15740 73 20 6f 62 6a 65 63 74 2e 20 20 54 68 69 73 20  s object.  This 
15750 6f 62 6a 65 63 74 20 6d 69 67 68 74 20 68 6f 6c  object might hol
15760 64 0a 2a 2a 20 6a 75 73 74 20 61 20 70 72 65 66  d.** just a pref
15770 69 78 20 6f 66 20 74 68 65 20 6b 65 79 2e 20 20  ix of the key.  
15780 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 66 69  The number of fi
15790 65 6c 64 73 20 69 73 20 67 69 76 65 6e 20 62 79  elds is given by
157a0 0a 2a 2a 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46  .** pKeyInfo->nF
157b0 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ield..**.** The 
157c0 72 31 20 61 6e 64 20 72 32 20 66 69 65 6c 64 73  r1 and r2 fields
157d0 20 61 72 65 20 74 68 65 20 76 61 6c 75 65 73 20   are the values 
157e0 74 6f 20 72 65 74 75 72 6e 20 69 66 20 74 68 69  to return if thi
157f0 73 20 6b 65 79 20 69 73 20 6c 65 73 73 20 74 68  s key is less th
15800 61 6e 0a 2a 2a 20 6f 72 20 67 72 65 61 74 65 72  an.** or greater
15810 20 74 68 61 6e 20 61 20 6b 65 79 20 69 6e 20 74   than a key in t
15820 68 65 20 62 74 72 65 65 2c 20 72 65 73 70 65 63  he btree, respec
15830 74 69 76 65 6c 79 2e 20 20 54 68 65 73 65 20 61  tively.  These a
15840 72 65 20 6e 6f 72 6d 61 6c 6c 79 0a 2a 2a 20 2d  re normally.** -
15850 31 20 61 6e 64 20 2b 31 20 72 65 73 70 65 63 74  1 and +1 respect
15860 69 76 65 6c 79 2c 20 62 75 74 20 6d 69 67 68 74  ively, but might
15870 20 62 65 20 69 6e 76 65 72 74 65 64 20 74 6f 20   be inverted to 
15880 2b 31 20 61 6e 64 20 2d 31 20 69 66 20 74 68 65  +1 and -1 if the
15890 20 62 2d 74 72 65 65 0a 2a 2a 20 69 73 20 69 6e   b-tree.** is in
158a0 20 44 45 53 43 20 6f 72 64 65 72 2e 0a 2a 2a 0a   DESC order..**.
158b0 2a 2a 20 54 68 65 20 6b 65 79 20 63 6f 6d 70 61  ** The key compa
158c0 72 69 73 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20  rison functions 
158d0 61 63 74 75 61 6c 6c 79 20 72 65 74 75 72 6e 20  actually return 
158e0 64 65 66 61 75 6c 74 5f 72 63 20 77 68 65 6e 20  default_rc when 
158f0 74 68 65 79 20 66 69 6e 64 0a 2a 2a 20 61 6e 20  they find.** an 
15900 65 71 75 61 6c 73 20 63 6f 6d 70 61 72 69 73 6f  equals compariso
15910 6e 2e 20 20 64 65 66 61 75 6c 74 5f 72 63 20 63  n.  default_rc c
15920 61 6e 20 62 65 20 2d 31 2c 20 30 2c 20 6f 72 20  an be -1, 0, or 
15930 2b 31 2e 20 20 49 66 20 74 68 65 72 65 20 61 72  +1.  If there ar
15940 65 0a 2a 2a 20 6d 75 6c 74 69 70 6c 65 20 65 6e  e.** multiple en
15950 74 72 69 65 73 20 69 6e 20 74 68 65 20 62 2d 74  tries in the b-t
15960 72 65 65 20 77 69 74 68 20 74 68 65 20 73 61 6d  ree with the sam
15970 65 20 6b 65 79 20 28 77 68 65 6e 20 6f 6e 6c 79  e key (when only
15980 20 6c 6f 6f 6b 69 6e 67 0a 2a 2a 20 61 74 20 74   looking.** at t
15990 68 65 20 66 69 72 73 74 20 70 4b 65 79 49 6e 66  he first pKeyInf
159a0 6f 2d 3e 6e 46 69 65 6c 64 73 2c 29 20 74 68 65  o->nFields,) the
159b0 6e 20 64 65 66 61 75 6c 74 5f 72 63 20 63 61 6e  n default_rc can
159c0 20 62 65 20 73 65 74 20 74 6f 20 2d 31 20 74 6f   be set to -1 to
159d0 0a 2a 2a 20 63 61 75 73 65 20 74 68 65 20 73 65  .** cause the se
159e0 61 72 63 68 20 74 6f 20 66 69 6e 64 20 74 68 65  arch to find the
159f0 20 6c 61 73 74 20 6d 61 74 63 68 2c 20 6f 72 20   last match, or 
15a00 2b 31 20 74 6f 20 63 61 75 73 65 20 74 68 65 20  +1 to cause the 
15a10 73 65 61 72 63 68 20 74 6f 0a 2a 2a 20 66 69 6e  search to.** fin
15a20 64 20 74 68 65 20 66 69 72 73 74 20 6d 61 74 63  d the first matc
15a30 68 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6b 65 79  h..**.** The key
15a40 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66 75 6e 63   comparison func
15a50 74 69 6f 6e 73 20 77 69 6c 6c 20 73 65 74 20 65  tions will set e
15a60 71 53 65 65 6e 20 74 6f 20 74 72 75 65 20 69 66  qSeen to true if
15a70 20 74 68 65 79 20 65 76 65 72 0a 2a 2a 20 67 65   they ever.** ge
15a80 74 20 61 6e 64 20 65 71 75 61 6c 20 72 65 73 75  t and equal resu
15a90 6c 74 73 20 77 68 65 6e 20 63 6f 6d 70 61 72 69  lts when compari
15aa0 6e 67 20 74 68 69 73 20 73 74 72 75 63 74 75 72  ng this structur
15ab0 65 20 74 6f 20 61 20 62 2d 74 72 65 65 20 72 65  e to a b-tree re
15ac0 63 6f 72 64 2e 0a 2a 2a 20 57 68 65 6e 20 64 65  cord..** When de
15ad0 66 61 75 6c 74 5f 72 63 21 3d 30 2c 20 74 68 65  fault_rc!=0, the
15ae0 20 73 65 61 72 63 68 20 6d 69 67 68 74 20 65 6e   search might en
15af0 64 20 75 70 20 6f 6e 20 74 68 65 20 72 65 63 6f  d up on the reco
15b00 72 64 20 69 6d 6d 65 64 69 61 74 65 6c 79 0a 2a  rd immediately.*
15b10 2a 20 62 65 66 6f 72 65 20 74 68 65 20 66 69 72  * before the fir
15b20 73 74 20 6d 61 74 63 68 20 6f 72 20 69 6d 6d 65  st match or imme
15b30 64 69 61 74 65 6c 79 20 61 66 74 65 72 20 74 68  diately after th
15b40 65 20 6c 61 73 74 20 6d 61 74 63 68 2e 20 20 54  e last match.  T
15b50 68 65 0a 2a 2a 20 65 71 53 65 65 6e 20 66 69 65  he.** eqSeen fie
15b60 6c 64 20 77 69 6c 6c 20 69 6e 64 69 63 61 74 65  ld will indicate
15b70 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
15b80 61 6e 20 65 78 61 63 74 20 6d 61 74 63 68 20 65  an exact match e
15b90 78 69 73 74 73 20 69 6e 20 74 68 65 0a 2a 2a 20  xists in the.** 
15ba0 62 2d 74 72 65 65 2e 0a 2a 2f 0a 73 74 72 75 63  b-tree..*/.struc
15bb0 74 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64  t UnpackedRecord
15bc0 20 7b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b   {.  KeyInfo *pK
15bd0 65 79 49 6e 66 6f 3b 20 20 2f 2a 20 43 6f 6c 6c  eyInfo;  /* Coll
15be0 61 74 69 6f 6e 20 61 6e 64 20 73 6f 72 74 2d 6f  ation and sort-o
15bf0 72 64 65 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  rder information
15c00 20 2a 2f 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d 3b   */.  Mem *aMem;
15c10 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
15c20 75 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 46 69  ues */.  u16 nFi
15c30 65 6c 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  eld;         /* 
15c40 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65  Number of entrie
15c50 73 20 69 6e 20 61 70 4d 65 6d 5b 5d 20 2a 2f 0a  s in apMem[] */.
15c60 20 20 69 38 20 64 65 66 61 75 6c 74 5f 72 63 3b    i8 default_rc;
15c70 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70 61 72 69        /* Compari
15c80 73 6f 6e 20 72 65 73 75 6c 74 20 69 66 20 6b 65  son result if ke
15c90 79 73 20 61 72 65 20 65 71 75 61 6c 20 2a 2f 0a  ys are equal */.
15ca0 20 20 75 38 20 65 72 72 43 6f 64 65 3b 20 20 20    u8 errCode;   
15cb0 20 20 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 64        /* Error d
15cc0 65 74 65 63 74 65 64 20 62 79 20 78 52 65 63 6f  etected by xReco
15cd0 72 64 43 6f 6d 70 61 72 65 20 28 43 4f 52 52 55  rdCompare (CORRU
15ce0 50 54 20 6f 72 20 4e 4f 4d 45 4d 29 20 2a 2f 0a  PT or NOMEM) */.
15cf0 20 20 69 38 20 72 31 3b 20 20 20 20 20 20 20 20    i8 r1;        
15d00 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74        /* Value t
15d10 6f 20 72 65 74 75 72 6e 20 69 66 20 28 6c 68 73  o return if (lhs
15d20 20 3c 20 72 68 73 29 20 2a 2f 0a 20 20 69 38 20   < rhs) */.  i8 
15d30 72 32 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  r2;             
15d40 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74   /* Value to ret
15d50 75 72 6e 20 69 66 20 28 6c 68 73 20 3e 20 72 68  urn if (lhs > rh
15d60 73 29 20 2a 2f 0a 20 20 75 38 20 65 71 53 65 65  s) */.  u8 eqSee
15d70 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  n;          /* T
15d80 72 75 65 20 69 66 20 61 6e 20 65 71 75 61 6c 69  rue if an equali
15d90 74 79 20 63 6f 6d 70 61 72 69 73 6f 6e 20 68 61  ty comparison ha
15da0 73 20 62 65 65 6e 20 73 65 65 6e 20 2a 2f 0a 7d  s been seen */.}
15db0 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53  ;.../*.** Each S
15dc0 51 4c 20 69 6e 64 65 78 20 69 73 20 72 65 70 72  QL index is repr
15dd0 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72  esented in memor
15de0 79 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61  y by an.** insta
15df0 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
15e00 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a  wing structure..
15e10 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6c 75 6d 6e  **.** The column
15e20 73 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  s of the table t
15e30 68 61 74 20 61 72 65 20 74 6f 20 62 65 20 69 6e  hat are to be in
15e40 64 65 78 65 64 20 61 72 65 20 64 65 73 63 72 69  dexed are descri
15e50 62 65 64 0a 2a 2a 20 62 79 20 74 68 65 20 61 69  bed.** by the ai
15e60 43 6f 6c 75 6d 6e 5b 5d 20 66 69 65 6c 64 20 6f  Column[] field o
15e70 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
15e80 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20  .  For example, 
15e90 73 75 70 70 6f 73 65 0a 2a 2a 20 77 65 20 68 61  suppose.** we ha
15ea0 76 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ve the following
15eb0 20 74 61 62 6c 65 20 61 6e 64 20 69 6e 64 65 78   table and index
15ec0 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41  :.**.**     CREA
15ed0 54 45 20 54 41 42 4c 45 20 45 78 31 28 63 31 20  TE TABLE Ex1(c1 
15ee0 69 6e 74 2c 20 63 32 20 69 6e 74 2c 20 63 33 20  int, c2 int, c3 
15ef0 74 65 78 74 29 3b 0a 2a 2a 20 20 20 20 20 43 52  text);.**     CR
15f00 45 41 54 45 20 49 4e 44 45 58 20 45 78 32 20 4f  EATE INDEX Ex2 O
15f10 4e 20 45 78 31 28 63 33 2c 63 31 29 3b 0a 2a 2a  N Ex1(c3,c1);.**
15f20 0a 2a 2a 20 49 6e 20 74 68 65 20 54 61 62 6c 65  .** In the Table
15f30 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72   structure descr
15f40 69 62 69 6e 67 20 45 78 31 2c 20 6e 43 6f 6c 3d  ibing Ex1, nCol=
15f50 3d 33 20 62 65 63 61 75 73 65 20 74 68 65 72 65  =3 because there
15f60 20 61 72 65 0a 2a 2a 20 74 68 72 65 65 20 63 6f   are.** three co
15f70 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62  lumns in the tab
15f80 6c 65 2e 20 20 49 6e 20 74 68 65 20 49 6e 64 65  le.  In the Inde
15f90 78 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63  x structure desc
15fa0 72 69 62 69 6e 67 0a 2a 2a 20 45 78 32 2c 20 6e  ribing.** Ex2, n
15fb0 43 6f 6c 75 6d 6e 3d 3d 32 20 73 69 6e 63 65 20  Column==2 since 
15fc0 32 20 6f 66 20 74 68 65 20 33 20 63 6f 6c 75 6d  2 of the 3 colum
15fd0 6e 73 20 6f 66 20 45 78 31 20 61 72 65 20 69 6e  ns of Ex1 are in
15fe0 64 65 78 65 64 2e 0a 2a 2a 20 54 68 65 20 76 61  dexed..** The va
15ff0 6c 75 65 20 6f 66 20 61 69 43 6f 6c 75 6d 6e 20  lue of aiColumn 
16000 69 73 20 7b 32 2c 20 30 7d 2e 20 20 61 69 43 6f  is {2, 0}.  aiCo
16010 6c 75 6d 6e 5b 30 5d 3d 3d 32 20 62 65 63 61 75  lumn[0]==2 becau
16020 73 65 20 74 68 65 0a 2a 2a 20 66 69 72 73 74 20  se the.** first 
16030 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64  column to be ind
16040 65 78 65 64 20 28 63 33 29 20 68 61 73 20 61 6e  exed (c3) has an
16050 20 69 6e 64 65 78 20 6f 66 20 32 20 69 6e 20 45   index of 2 in E
16060 78 31 2e 61 43 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68  x1.aCol[]..** Th
16070 65 20 73 65 63 6f 6e 64 20 63 6f 6c 75 6d 6e 20  e second column 
16080 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20 28 63  to be indexed (c
16090 31 29 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20  1) has an index 
160a0 6f 66 20 30 20 69 6e 0a 2a 2a 20 45 78 31 2e 61  of 0 in.** Ex1.a
160b0 43 6f 6c 5b 5d 2c 20 68 65 6e 63 65 20 45 78 32  Col[], hence Ex2
160c0 2e 61 69 43 6f 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e  .aiColumn[1]==0.
160d0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 6e 64 65 78  .**.** The Index
160e0 2e 6f 6e 45 72 72 6f 72 20 66 69 65 6c 64 20 64  .onError field d
160f0 65 74 65 72 6d 69 6e 65 73 20 77 68 65 74 68 65  etermines whethe
16100 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 69 6e 64  r or not the ind
16110 65 78 65 64 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20  exed columns.** 
16120 6d 75 73 74 20 62 65 20 75 6e 69 71 75 65 20 61  must be unique a
16130 6e 64 20 77 68 61 74 20 74 6f 20 64 6f 20 69 66  nd what to do if
16140 20 74 68 65 79 20 61 72 65 20 6e 6f 74 2e 20 20   they are not.  
16150 57 68 65 6e 20 49 6e 64 65 78 2e 6f 6e 45 72 72  When Index.onErr
16160 6f 72 3d 4f 45 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69  or=OE_None,.** i
16170 74 20 6d 65 61 6e 73 20 74 68 69 73 20 69 73 20  t means this is 
16180 6e 6f 74 20 61 20 75 6e 69 71 75 65 20 69 6e 64  not a unique ind
16190 65 78 2e 20 20 4f 74 68 65 72 77 69 73 65 20 69  ex.  Otherwise i
161a0 74 20 69 73 20 61 20 75 6e 69 71 75 65 20 69 6e  t is a unique in
161b0 64 65 78 0a 2a 2a 20 61 6e 64 20 74 68 65 20 76  dex.** and the v
161c0 61 6c 75 65 20 6f 66 20 49 6e 64 65 78 2e 6f 6e  alue of Index.on
161d0 45 72 72 6f 72 20 69 6e 64 69 63 61 74 65 20 74  Error indicate t
161e0 68 65 20 77 68 69 63 68 20 63 6f 6e 66 6c 69 63  he which conflic
161f0 74 20 72 65 73 6f 6c 75 74 69 6f 6e 0a 2a 2a 20  t resolution.** 
16200 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20 65 6d 70  algorithm to emp
16210 6c 6f 79 20 77 68 65 6e 65 76 65 72 20 61 6e 20  loy whenever an 
16220 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20  attempt is made 
16230 74 6f 20 69 6e 73 65 72 74 20 61 20 6e 6f 6e 2d  to insert a non-
16240 75 6e 69 71 75 65 0a 2a 2a 20 65 6c 65 6d 65 6e  unique.** elemen
16250 74 2e 0a 2a 2a 0a 2a 2a 20 57 68 69 6c 65 20 70  t..**.** While p
16260 61 72 73 69 6e 67 20 61 20 43 52 45 41 54 45 20  arsing a CREATE 
16270 54 41 42 4c 45 20 6f 72 20 43 52 45 41 54 45 20  TABLE or CREATE 
16280 49 4e 44 45 58 20 73 74 61 74 65 6d 65 6e 74 20  INDEX statement 
16290 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67  in order to.** g
162a0 65 6e 65 72 61 74 65 20 56 44 42 45 20 63 6f 64  enerate VDBE cod
162b0 65 20 28 61 73 20 6f 70 70 6f 73 65 64 20 74 6f  e (as opposed to
162c0 20 70 61 72 73 69 6e 67 20 6f 6e 65 20 72 65 61   parsing one rea
162d0 64 20 66 72 6f 6d 20 61 6e 20 73 71 6c 69 74 65  d from an sqlite
162e0 5f 6d 61 73 74 65 72 0a 2a 2a 20 74 61 62 6c 65  _master.** table
162f0 20 61 73 20 70 61 72 74 20 6f 66 20 70 61 72 73   as part of pars
16300 69 6e 67 20 61 6e 20 65 78 69 73 74 69 6e 67 20  ing an existing 
16310 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 29  database schema)
16320 2c 20 74 72 61 6e 73 69 65 6e 74 20 69 6e 73 74  , transient inst
16330 61 6e 63 65 73 0a 2a 2a 20 6f 66 20 74 68 69 73  ances.** of this
16340 20 73 74 72 75 63 74 75 72 65 20 6d 61 79 20 62   structure may b
16350 65 20 63 72 65 61 74 65 64 2e 20 49 6e 20 74 68  e created. In th
16360 69 73 20 63 61 73 65 20 74 68 65 20 49 6e 64 65  is case the Inde
16370 78 2e 74 6e 75 6d 20 76 61 72 69 61 62 6c 65 20  x.tnum variable 
16380 69 73 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73 74  is.** used to st
16390 6f 72 65 20 74 68 65 20 61 64 64 72 65 73 73 20  ore the address 
163a0 6f 66 20 61 20 56 44 42 45 20 69 6e 73 74 72 75  of a VDBE instru
163b0 63 74 69 6f 6e 2c 20 6e 6f 74 20 61 20 64 61 74  ction, not a dat
163c0 61 62 61 73 65 20 70 61 67 65 0a 2a 2a 20 6e 75  abase page.** nu
163d0 6d 62 65 72 20 28 69 74 20 63 61 6e 6e 6f 74 20  mber (it cannot 
163e0 2d 20 74 68 65 20 64 61 74 61 62 61 73 65 20 70  - the database p
163f0 61 67 65 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 63  age is not alloc
16400 61 74 65 64 20 75 6e 74 69 6c 20 74 68 65 20 56  ated until the V
16410 44 42 45 0a 2a 2a 20 70 72 6f 67 72 61 6d 20 69  DBE.** program i
16420 73 20 65 78 65 63 75 74 65 64 29 2e 20 53 65 65  s executed). See
16430 20 63 6f 6e 76 65 72 74 54 6f 57 69 74 68 6f 75   convertToWithou
16440 74 52 6f 77 69 64 54 61 62 6c 65 28 29 20 66 6f  tRowidTable() fo
16450 72 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 73 74  r details..*/.st
16460 72 75 63 74 20 49 6e 64 65 78 20 7b 0a 20 20 63  ruct Index {.  c
16470 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
16480 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
16490 6f 66 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f  of this index */
164a0 0a 20 20 69 31 36 20 2a 61 69 43 6f 6c 75 6d 6e  .  i16 *aiColumn
164b0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57  ;           /* W
164c0 68 69 63 68 20 63 6f 6c 75 6d 6e 73 20 61 72 65  hich columns are
164d0 20 75 73 65 64 20 62 79 20 74 68 69 73 20 69 6e   used by this in
164e0 64 65 78 2e 20 20 31 73 74 20 69 73 20 30 20 2a  dex.  1st is 0 *
164f0 2f 0a 20 20 4c 6f 67 45 73 74 20 2a 61 69 52 6f  /.  LogEst *aiRo
16500 77 4c 6f 67 45 73 74 3b 20 20 20 20 20 2f 2a 20  wLogEst;     /* 
16510 46 72 6f 6d 20 41 4e 41 4c 59 5a 45 3a 20 45 73  From ANALYZE: Es
16520 74 2e 20 72 6f 77 73 20 73 65 6c 65 63 74 65 64  t. rows selected
16530 20 62 79 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20   by each column 
16540 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62  */.  Table *pTab
16550 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  le;           /*
16560 20 54 68 65 20 53 51 4c 20 74 61 62 6c 65 20 62   The SQL table b
16570 65 69 6e 67 20 69 6e 64 65 78 65 64 20 2a 2f 0a  eing indexed */.
16580 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b    char *zColAff;
16590 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74             /* St
165a0 72 69 6e 67 20 64 65 66 69 6e 69 6e 67 20 74 68  ring defining th
165b0 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20 65 61  e affinity of ea
165c0 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49  ch column */.  I
165d0 6e 64 65 78 20 2a 70 4e 65 78 74 3b 20 20 20 20  ndex *pNext;    
165e0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e          /* The n
165f0 65 78 74 20 69 6e 64 65 78 20 61 73 73 6f 63 69  ext index associ
16600 61 74 65 64 20 77 69 74 68 20 74 68 65 20 73 61  ated with the sa
16610 6d 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 53 63  me table */.  Sc
16620 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20  hema *pSchema;  
16630 20 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61         /* Schema
16640 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 69 73   containing this
16650 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20 2a   index */.  u8 *
16660 61 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20  aSortOrder;     
16670 20 20 20 20 20 2f 2a 20 66 6f 72 20 65 61 63 68       /* for each
16680 20 63 6f 6c 75 6d 6e 3a 20 54 72 75 65 3d 3d 44   column: True==D
16690 45 53 43 2c 20 46 61 6c 73 65 3d 3d 41 53 43 20  ESC, False==ASC 
166a0 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
166b0 2a 2a 61 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a  **azColl;     /*
166c0 20 41 72 72 61 79 20 6f 66 20 63 6f 6c 6c 61 74   Array of collat
166d0 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 6e 61 6d  ion sequence nam
166e0 65 73 20 66 6f 72 20 69 6e 64 65 78 20 2a 2f 0a  es for index */.
166f0 20 20 45 78 70 72 20 2a 70 50 61 72 74 49 64 78    Expr *pPartIdx
16700 57 68 65 72 65 3b 20 20 20 20 20 2f 2a 20 57 48  Where;     /* WH
16710 45 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20 70  ERE clause for p
16720 61 72 74 69 61 6c 20 69 6e 64 69 63 65 73 20 2a  artial indices *
16730 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 61 43  /.  ExprList *aC
16740 6f 6c 45 78 70 72 3b 20 20 20 20 20 20 2f 2a 20  olExpr;      /* 
16750 43 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73 69 6f  Column expressio
16760 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d  ns */.  int tnum
16770 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
16780 20 2f 2a 20 44 42 20 50 61 67 65 20 63 6f 6e 74   /* DB Page cont
16790 61 69 6e 69 6e 67 20 72 6f 6f 74 20 6f 66 20 74  aining root of t
167a0 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 4c  his index */.  L
167b0 6f 67 45 73 74 20 73 7a 49 64 78 52 6f 77 3b 20  ogEst szIdxRow; 
167c0 20 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d          /* Estim
167d0 61 74 65 64 20 61 76 65 72 61 67 65 20 72 6f 77  ated average row
167e0 20 73 69 7a 65 20 69 6e 20 62 79 74 65 73 20 2a   size in bytes *
167f0 2f 0a 20 20 75 31 36 20 6e 4b 65 79 43 6f 6c 3b  /.  u16 nKeyCol;
16800 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
16810 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  Number of column
16820 73 20 66 6f 72 6d 69 6e 67 20 74 68 65 20 6b 65  s forming the ke
16830 79 20 2a 2f 0a 20 20 75 31 36 20 6e 43 6f 6c 75  y */.  u16 nColu
16840 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  mn;             
16850 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
16860 75 6d 6e 73 20 73 74 6f 72 65 64 20 69 6e 20 74  umns stored in t
16870 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38  he index */.  u8
16880 20 6f 6e 45 72 72 6f 72 3b 20 20 20 20 20 20 20   onError;       
16890 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f 41 62 6f         /* OE_Abo
168a0 72 74 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 4f  rt, OE_Ignore, O
168b0 45 5f 52 65 70 6c 61 63 65 2c 20 6f 72 20 4f 45  E_Replace, or OE
168c0 5f 4e 6f 6e 65 20 2a 2f 0a 20 20 75 6e 73 69 67  _None */.  unsig
168d0 6e 65 64 20 69 64 78 54 79 70 65 3a 32 3b 20 20  ned idxType:2;  
168e0 20 20 20 20 2f 2a 20 31 3d 3d 55 4e 49 51 55 45      /* 1==UNIQUE
168f0 2c 20 32 3d 3d 50 52 49 4d 41 52 59 20 4b 45 59  , 2==PRIMARY KEY
16900 2c 20 30 3d 3d 43 52 45 41 54 45 20 49 4e 44 45  , 0==CREATE INDE
16910 58 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  X */.  unsigned 
16920 62 55 6e 6f 72 64 65 72 65 64 3a 31 3b 20 20 20  bUnordered:1;   
16930 2f 2a 20 55 73 65 20 74 68 69 73 20 69 6e 64 65  /* Use this inde
16940 78 20 66 6f 72 20 3d 3d 20 6f 72 20 49 4e 20 71  x for == or IN q
16950 75 65 72 69 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20  ueries only */. 
16960 20 75 6e 73 69 67 6e 65 64 20 75 6e 69 71 4e 6f   unsigned uniqNo
16970 74 4e 75 6c 6c 3a 31 3b 20 20 2f 2a 20 54 72 75  tNull:1;  /* Tru
16980 65 20 69 66 20 55 4e 49 51 55 45 20 61 6e 64 20  e if UNIQUE and 
16990 4e 4f 54 20 4e 55 4c 4c 20 66 6f 72 20 61 6c 6c  NOT NULL for all
169a0 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 75 6e   columns */.  un
169b0 73 69 67 6e 65 64 20 69 73 52 65 73 69 7a 65 64  signed isResized
169c0 3a 31 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69  :1;    /* True i
169d0 66 20 72 65 73 69 7a 65 49 6e 64 65 78 4f 62 6a  f resizeIndexObj
169e0 65 63 74 28 29 20 68 61 73 20 62 65 65 6e 20 63  ect() has been c
169f0 61 6c 6c 65 64 20 2a 2f 0a 20 20 75 6e 73 69 67  alled */.  unsig
16a00 6e 65 64 20 69 73 43 6f 76 65 72 69 6e 67 3a 31  ned isCovering:1
16a10 3b 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74  ;   /* True if t
16a20 68 69 73 20 69 73 20 61 20 63 6f 76 65 72 69 6e  his is a coverin
16a30 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 6e 73  g index */.  uns
16a40 69 67 6e 65 64 20 6e 6f 53 6b 69 70 53 63 61 6e  igned noSkipScan
16a50 3a 31 3b 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20  :1;   /* Do not 
16a60 74 72 79 20 74 6f 20 75 73 65 20 73 6b 69 70 2d  try to use skip-
16a70 73 63 61 6e 20 69 66 20 74 72 75 65 20 2a 2f 0a  scan if true */.
16a80 20 20 75 6e 73 69 67 6e 65 64 20 68 61 73 53 74    unsigned hasSt
16a90 61 74 31 3a 31 3b 20 20 20 20 20 2f 2a 20 61 69  at1:1;     /* ai
16aa0 52 6f 77 4c 6f 67 45 73 74 20 76 61 6c 75 65 73  RowLogEst values
16ab0 20 63 6f 6d 65 20 66 72 6f 6d 20 73 71 6c 69 74   come from sqlit
16ac0 65 5f 73 74 61 74 31 20 2a 2f 0a 20 20 75 6e 73  e_stat1 */.  uns
16ad0 69 67 6e 65 64 20 62 4e 6f 51 75 65 72 79 3a 31  igned bNoQuery:1
16ae0 3b 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20  ;     /* Do not 
16af0 75 73 65 20 74 68 69 73 20 69 6e 64 65 78 20 74  use this index t
16b00 6f 20 6f 70 74 69 6d 69 7a 65 20 71 75 65 72 69  o optimize queri
16b10 65 73 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  es */.#ifdef SQL
16b20 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
16b30 5f 4f 52 5f 53 54 41 54 34 0a 20 20 69 6e 74 20  _OR_STAT4.  int 
16b40 6e 53 61 6d 70 6c 65 3b 20 20 20 20 20 20 20 20  nSample;        
16b50 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
16b60 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20 61 53  f elements in aS
16b70 61 6d 70 6c 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74  ample[] */.  int
16b80 20 6e 53 61 6d 70 6c 65 43 6f 6c 3b 20 20 20 20   nSampleCol;    
16b90 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
16ba0 20 49 6e 64 65 78 53 61 6d 70 6c 65 2e 61 6e 45   IndexSample.anE
16bb0 71 5b 5d 20 61 6e 64 20 73 6f 20 6f 6e 20 2a 2f  q[] and so on */
16bc0 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 41 76 67  .  tRowcnt *aAvg
16bd0 45 71 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41  Eq;         /* A
16be0 76 65 72 61 67 65 20 6e 45 71 20 76 61 6c 75 65  verage nEq value
16bf0 73 20 66 6f 72 20 6b 65 79 73 20 6e 6f 74 20 69  s for keys not i
16c00 6e 20 61 53 61 6d 70 6c 65 20 2a 2f 0a 20 20 49  n aSample */.  I
16c10 6e 64 65 78 53 61 6d 70 6c 65 20 2a 61 53 61 6d  ndexSample *aSam
16c20 70 6c 65 3b 20 20 20 20 2f 2a 20 53 61 6d 70 6c  ple;    /* Sampl
16c30 65 73 20 6f 66 20 74 68 65 20 6c 65 66 74 2d 6d  es of the left-m
16c40 6f 73 74 20 6b 65 79 20 2a 2f 0a 20 20 74 52 6f  ost key */.  tRo
16c50 77 63 6e 74 20 2a 61 69 52 6f 77 45 73 74 3b 20  wcnt *aiRowEst; 
16c60 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67        /* Non-log
16c70 61 72 69 74 68 6d 69 63 20 73 74 61 74 31 20 64  arithmic stat1 d
16c80 61 74 61 20 66 6f 72 20 74 68 69 73 20 69 6e 64  ata for this ind
16c90 65 78 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20  ex */.  tRowcnt 
16ca0 6e 52 6f 77 45 73 74 30 3b 20 20 20 20 20 20 20  nRowEst0;       
16cb0 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68   /* Non-logarith
16cc0 6d 69 63 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  mic number of ro
16cd0 77 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20  ws in the index 
16ce0 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 42 69 74 6d  */.#endif.  Bitm
16cf0 61 73 6b 20 63 6f 6c 4e 6f 74 49 64 78 65 64 3b  ask colNotIdxed;
16d00 20 20 20 20 20 2f 2a 20 30 20 66 6f 72 20 75 6e       /* 0 for un
16d10 69 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 73 20  indexed columns 
16d20 69 6e 20 70 54 61 62 20 2a 2f 0a 7d 3b 0a 0a 2f  in pTab */.};../
16d30 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  *.** Allowed val
16d40 75 65 73 20 66 6f 72 20 49 6e 64 65 78 2e 69 64  ues for Index.id
16d50 78 54 79 70 65 0a 2a 2f 0a 23 64 65 66 69 6e 65  xType.*/.#define
16d60 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f   SQLITE_IDXTYPE_
16d70 41 50 50 44 45 46 20 20 20 20 20 20 30 20 20 20  APPDEF      0   
16d80 2f 2a 20 43 72 65 61 74 65 64 20 75 73 69 6e 67  /* Created using
16d90 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f   CREATE INDEX */
16da0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
16db0 49 44 58 54 59 50 45 5f 55 4e 49 51 55 45 20 20  IDXTYPE_UNIQUE  
16dc0 20 20 20 20 31 20 20 20 2f 2a 20 49 6d 70 6c 65      1   /* Imple
16dd0 6d 65 6e 74 73 20 61 20 55 4e 49 51 55 45 20 63  ments a UNIQUE c
16de0 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65  onstraint */.#de
16df0 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54  fine SQLITE_IDXT
16e00 59 50 45 5f 50 52 49 4d 41 52 59 4b 45 59 20 20  YPE_PRIMARYKEY  
16e10 32 20 20 20 2f 2a 20 49 73 20 74 68 65 20 50 52  2   /* Is the PR
16e20 49 4d 41 52 59 20 4b 45 59 20 66 6f 72 20 74 68  IMARY KEY for th
16e30 65 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 20 52  e table */../* R
16e40 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 69 6e  eturn true if in
16e50 64 65 78 20 58 20 69 73 20 61 20 50 52 49 4d 41  dex X is a PRIMA
16e60 52 59 20 4b 45 59 20 69 6e 64 65 78 20 2a 2f 0a  RY KEY index */.
16e70 23 64 65 66 69 6e 65 20 49 73 50 72 69 6d 61 72  #define IsPrimar
16e80 79 4b 65 79 49 6e 64 65 78 28 58 29 20 20 28 28  yKeyIndex(X)  ((
16e90 58 29 2d 3e 69 64 78 54 79 70 65 3d 3d 53 51 4c  X)->idxType==SQL
16ea0 49 54 45 5f 49 44 58 54 59 50 45 5f 50 52 49 4d  ITE_IDXTYPE_PRIM
16eb0 41 52 59 4b 45 59 29 0a 0a 2f 2a 20 52 65 74 75  ARYKEY)../* Retu
16ec0 72 6e 20 74 72 75 65 20 69 66 20 69 6e 64 65 78  rn true if index
16ed0 20 58 20 69 73 20 61 20 55 4e 49 51 55 45 20 69   X is a UNIQUE i
16ee0 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ndex */.#define 
16ef0 49 73 55 6e 69 71 75 65 49 6e 64 65 78 28 58 29  IsUniqueIndex(X)
16f00 20 20 20 20 20 20 28 28 58 29 2d 3e 6f 6e 45 72        ((X)->onEr
16f10 72 6f 72 21 3d 4f 45 5f 4e 6f 6e 65 29 0a 0a 2f  ror!=OE_None)../
16f20 2a 20 54 68 65 20 49 6e 64 65 78 2e 61 69 43 6f  * The Index.aiCo
16f30 6c 75 6d 6e 5b 5d 20 76 61 6c 75 65 73 20 61 72  lumn[] values ar
16f40 65 20 6e 6f 72 6d 61 6c 6c 79 20 70 6f 73 69 74  e normally posit
16f50 69 76 65 20 69 6e 74 65 67 65 72 2e 20 20 42 75  ive integer.  Bu
16f60 74 0a 2a 2a 20 74 68 65 72 65 20 61 72 65 20 73  t.** there are s
16f70 6f 6d 65 20 6e 65 67 61 74 69 76 65 20 76 61 6c  ome negative val
16f80 75 65 73 20 74 68 61 74 20 68 61 76 65 20 73 70  ues that have sp
16f90 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67 3a 0a 2a  ecial meaning:.*
16fa0 2f 0a 23 64 65 66 69 6e 65 20 58 4e 5f 52 4f 57  /.#define XN_ROW
16fb0 49 44 20 20 20 20 20 28 2d 31 29 20 20 20 20 20  ID     (-1)     
16fc0 2f 2a 20 49 6e 64 65 78 65 64 20 63 6f 6c 75 6d  /* Indexed colum
16fd0 6e 20 69 73 20 74 68 65 20 72 6f 77 69 64 20 2a  n is the rowid *
16fe0 2f 0a 23 64 65 66 69 6e 65 20 58 4e 5f 45 58 50  /.#define XN_EXP
16ff0 52 20 20 20 20 20 20 28 2d 32 29 20 20 20 20 20  R      (-2)     
17000 2f 2a 20 49 6e 64 65 78 65 64 20 63 6f 6c 75 6d  /* Indexed colum
17010 6e 20 69 73 20 61 6e 20 65 78 70 72 65 73 73 69  n is an expressi
17020 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  on */../*.** Eac
17030 68 20 73 61 6d 70 6c 65 20 73 74 6f 72 65 64 20  h sample stored 
17040 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74  in the sqlite_st
17050 61 74 33 20 74 61 62 6c 65 20 69 73 20 72 65 70  at3 table is rep
17060 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f  resented in memo
17070 72 79 0a 2a 2a 20 75 73 69 6e 67 20 61 20 73 74  ry.** using a st
17080 72 75 63 74 75 72 65 20 6f 66 20 74 68 69 73 20  ructure of this 
17090 74 79 70 65 2e 20 20 53 65 65 20 64 6f 63 75 6d  type.  See docum
170a0 65 6e 74 61 74 69 6f 6e 20 61 74 20 74 68 65 20  entation at the 
170b0 74 6f 70 20 6f 66 20 74 68 65 0a 2a 2a 20 61 6e  top of the.** an
170c0 61 6c 79 7a 65 2e 63 20 73 6f 75 72 63 65 20 66  alyze.c source f
170d0 69 6c 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ile for addition
170e0 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
170f0 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64 65 78 53  */.struct IndexS
17100 61 6d 70 6c 65 20 7b 0a 20 20 76 6f 69 64 20 2a  ample {.  void *
17110 70 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50  p;          /* P
17120 6f 69 6e 74 65 72 20 74 6f 20 73 61 6d 70 6c 65  ointer to sample
17130 64 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  d record */.  in
17140 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  t n;            
17150 2f 2a 20 53 69 7a 65 20 6f 66 20 72 65 63 6f 72  /* Size of recor
17160 64 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20  d in bytes */.  
17170 74 52 6f 77 63 6e 74 20 2a 61 6e 45 71 3b 20 20  tRowcnt *anEq;  
17180 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72    /* Est. number
17190 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20 74   of rows where t
171a0 68 65 20 6b 65 79 20 65 71 75 61 6c 73 20 74 68  he key equals th
171b0 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74  is sample */.  t
171c0 52 6f 77 63 6e 74 20 2a 61 6e 4c 74 3b 20 20 20  Rowcnt *anLt;   
171d0 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20   /* Est. number 
171e0 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20 6b 65  of rows where ke
171f0 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74  y is less than t
17200 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20  his sample */.  
17210 74 52 6f 77 63 6e 74 20 2a 61 6e 44 4c 74 3b 20  tRowcnt *anDLt; 
17220 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72    /* Est. number
17230 20 6f 66 20 64 69 73 74 69 6e 63 74 20 6b 65 79   of distinct key
17240 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73  s less than this
17250 20 73 61 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f   sample */.};../
17260 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61  *.** Possible va
17270 6c 75 65 73 20 74 6f 20 75 73 65 20 77 69 74 68  lues to use with
17280 69 6e 20 74 68 65 20 66 6c 61 67 73 20 61 72 67  in the flags arg
17290 75 6d 65 6e 74 20 74 6f 20 73 71 6c 69 74 65 33  ument to sqlite3
172a0 47 65 74 54 6f 6b 65 6e 28 29 2e 0a 2a 2f 0a 23  GetToken()..*/.#
172b0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 4f  define SQLITE_TO
172c0 4b 45 4e 5f 51 55 4f 54 45 44 20 20 20 20 30 78  KEN_QUOTED    0x
172d0 31 20 2f 2a 20 54 6f 6b 65 6e 20 69 73 20 61 20  1 /* Token is a 
172e0 71 75 6f 74 65 64 20 69 64 65 6e 74 69 66 69 65  quoted identifie
172f0 72 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  r. */.#define SQ
17300 4c 49 54 45 5f 54 4f 4b 45 4e 5f 4b 45 59 57 4f  LITE_TOKEN_KEYWO
17310 52 44 20 20 20 30 78 32 20 2f 2a 20 54 6f 6b 65  RD   0x2 /* Toke
17320 6e 20 69 73 20 61 20 6b 65 79 77 6f 72 64 2e 20  n is a keyword. 
17330 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 74  */../*.** Each t
17340 6f 6b 65 6e 20 63 6f 6d 69 6e 67 20 6f 75 74 20  oken coming out 
17350 6f 66 20 74 68 65 20 6c 65 78 65 72 20 69 73 20  of the lexer is 
17360 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 2a  an instance of.*
17370 2a 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  * this structure
17380 2e 20 20 54 6f 6b 65 6e 73 20 61 72 65 20 61 6c  .  Tokens are al
17390 73 6f 20 75 73 65 64 20 61 73 20 70 61 72 74 20  so used as part 
173a0 6f 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  of an expression
173b0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f  ..**.** The memo
173c0 72 79 20 74 68 61 74 20 22 7a 22 20 70 6f 69 6e  ry that "z" poin
173d0 74 73 20 74 6f 20 69 73 20 6f 77 6e 65 64 20 62  ts to is owned b
173e0 79 20 6f 74 68 65 72 20 6f 62 6a 65 63 74 73 2e  y other objects.
173f0 20 20 54 61 6b 65 20 63 61 72 65 0a 2a 2a 20 74    Take care.** t
17400 68 61 74 20 74 68 65 20 6f 77 6e 65 72 20 6f 66  hat the owner of
17410 20 74 68 65 20 22 7a 22 20 73 74 72 69 6e 67 20   the "z" string 
17420 64 6f 65 73 20 6e 6f 74 20 64 65 61 6c 6c 6f 63  does not dealloc
17430 61 74 65 20 74 68 65 20 73 74 72 69 6e 67 20 62  ate the string b
17440 65 66 6f 72 65 0a 2a 2a 20 74 68 65 20 54 6f 6b  efore.** the Tok
17450 65 6e 20 67 6f 65 73 20 6f 75 74 20 6f 66 20 73  en goes out of s
17460 63 6f 70 65 21 20 20 56 65 72 79 20 6f 66 74 65  cope!  Very ofte
17470 6e 2c 20 74 68 65 20 22 7a 22 20 70 6f 69 6e 74  n, the "z" point
17480 73 20 74 6f 20 73 6f 6d 65 20 70 6c 61 63 65 0a  s to some place.
17490 2a 2a 20 69 6e 20 74 68 65 20 6d 69 64 64 6c 65  ** in the middle
174a0 20 6f 66 20 74 68 65 20 50 61 72 73 65 2e 7a 53   of the Parse.zS
174b0 71 6c 20 74 65 78 74 2e 20 20 42 75 74 20 69 74  ql text.  But it
174c0 20 6d 69 67 68 74 20 61 6c 73 6f 20 70 6f 69 6e   might also poin
174d0 74 20 74 6f 20 61 0a 2a 2a 20 73 74 61 74 69 63  t to a.** static
174e0 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a 73 74 72 75   string..*/.stru
174f0 63 74 20 54 6f 6b 65 6e 20 7b 0a 20 20 63 6f 6e  ct Token {.  con
17500 73 74 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20  st char *z;     
17510 2f 2a 20 54 65 78 74 20 6f 66 20 74 68 65 20 74  /* Text of the t
17520 6f 6b 65 6e 2e 20 20 4e 6f 74 20 4e 55 4c 4c 2d  oken.  Not NULL-
17530 74 65 72 6d 69 6e 61 74 65 64 21 20 2a 2f 0a 20  terminated! */. 
17540 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6e 3b   unsigned int n;
17550 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
17560 20 63 68 61 72 61 63 74 65 72 73 20 69 6e 20 74   characters in t
17570 68 69 73 20 74 6f 6b 65 6e 20 2a 2f 0a 7d 3b 0a  his token */.};.
17580 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
17590 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ce of this struc
175a0 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e  ture contains in
175b0 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64  formation needed
175c0 20 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20   to generate.** 
175d0 63 6f 64 65 20 66 6f 72 20 61 20 53 45 4c 45 43  code for a SELEC
175e0 54 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  T that contains 
175f0 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
17600 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 45 78  ons..**.** If Ex
17610 70 72 2e 6f 70 3d 3d 54 4b 5f 41 47 47 5f 43 4f  pr.op==TK_AGG_CO
17620 4c 55 4d 4e 20 6f 72 20 54 4b 5f 41 47 47 5f 46  LUMN or TK_AGG_F
17630 55 4e 43 54 49 4f 4e 20 74 68 65 6e 20 45 78 70  UNCTION then Exp
17640 72 2e 70 41 67 67 49 6e 66 6f 20 69 73 20 61 0a  r.pAggInfo is a.
17650 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68  ** pointer to th
17660 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 54  is structure.  T
17670 68 65 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20  he Expr.iColumn 
17680 66 69 65 6c 64 20 69 73 20 74 68 65 20 69 6e 64  field is the ind
17690 65 78 20 69 6e 0a 2a 2a 20 41 67 67 49 6e 66 6f  ex in.** AggInfo
176a0 2e 61 43 6f 6c 5b 5d 20 6f 72 20 41 67 67 49 6e  .aCol[] or AggIn
176b0 66 6f 2e 61 46 75 6e 63 5b 5d 20 6f 66 20 69 6e  fo.aFunc[] of in
176c0 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64  formation needed
176d0 20 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20   to generate.** 
176e0 63 6f 64 65 20 66 6f 72 20 74 68 61 74 20 6e 6f  code for that no
176f0 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 67 67 49 6e 66  de..**.** AggInf
17700 6f 2e 70 47 72 6f 75 70 42 79 20 61 6e 64 20 41  o.pGroupBy and A
17710 67 67 49 6e 66 6f 2e 61 46 75 6e 63 2e 70 45 78  ggInfo.aFunc.pEx
17720 70 72 20 70 6f 69 6e 74 20 74 6f 20 66 69 65 6c  pr point to fiel
17730 64 73 20 77 69 74 68 69 6e 20 74 68 65 0a 2a 2a  ds within the.**
17740 20 6f 72 69 67 69 6e 61 6c 20 53 65 6c 65 63 74   original Select
17750 20 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20   structure that 
17760 64 65 73 63 72 69 62 65 73 20 74 68 65 20 53 45  describes the SE
17770 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20  LECT statement. 
17780 20 54 68 65 73 65 0a 2a 2a 20 66 69 65 6c 64 73   These.** fields
17790 20 64 6f 20 6e 6f 74 20 6e 65 65 64 20 74 6f 20   do not need to 
177a0 62 65 20 66 72 65 65 64 20 77 68 65 6e 20 64 65  be freed when de
177b0 61 6c 6c 6f 63 61 74 69 6e 67 20 74 68 65 20 41  allocating the A
177c0 67 67 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65  ggInfo structure
177d0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 67 67 49  ..*/.struct AggI
177e0 6e 66 6f 20 7b 0a 20 20 75 38 20 64 69 72 65 63  nfo {.  u8 direc
177f0 74 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20  tMode;          
17800 2f 2a 20 44 69 72 65 63 74 20 72 65 6e 64 65 72  /* Direct render
17810 69 6e 67 20 6d 6f 64 65 20 6d 65 61 6e 73 20 74  ing mode means t
17820 61 6b 65 20 64 61 74 61 20 64 69 72 65 63 74 6c  ake data directl
17830 79 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  y.              
17840 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 66              ** f
17850 72 6f 6d 20 73 6f 75 72 63 65 20 74 61 62 6c 65  rom source table
17860 73 20 72 61 74 68 65 72 20 74 68 61 6e 20 66 72  s rather than fr
17870 6f 6d 20 61 63 63 75 6d 75 6c 61 74 6f 72 73 20  om accumulators 
17880 2a 2f 0a 20 20 75 38 20 75 73 65 53 6f 72 74 69  */.  u8 useSorti
17890 6e 67 49 64 78 3b 20 20 20 20 20 20 20 2f 2a 20  ngIdx;       /* 
178a0 49 6e 20 64 69 72 65 63 74 20 6d 6f 64 65 2c 20  In direct mode, 
178b0 72 65 66 65 72 65 6e 63 65 20 74 68 65 20 73 6f  reference the so
178c0 72 74 69 6e 67 20 69 6e 64 65 78 20 72 61 74 68  rting index rath
178d0 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  er.             
178e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
178f0 74 68 61 6e 20 74 68 65 20 73 6f 75 72 63 65 20  than the source 
17900 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 73  table */.  int s
17910 6f 72 74 69 6e 67 49 64 78 3b 20 20 20 20 20 20  ortingIdx;      
17920 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d     /* Cursor num
17930 62 65 72 20 6f 66 20 74 68 65 20 73 6f 72 74 69  ber of the sorti
17940 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e  ng index */.  in
17950 74 20 73 6f 72 74 69 6e 67 49 64 78 50 54 61 62  t sortingIdxPTab
17960 3b 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20  ;     /* Cursor 
17970 6e 75 6d 62 65 72 20 6f 66 20 70 73 65 75 64 6f  number of pseudo
17980 2d 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20  -table */.  int 
17990 6e 53 6f 72 74 69 6e 67 43 6f 6c 75 6d 6e 3b 20  nSortingColumn; 
179a0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
179b0 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
179c0 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f  sorting index */
179d0 0a 20 20 69 6e 74 20 6d 6e 52 65 67 2c 20 6d 78  .  int mnReg, mx
179e0 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 52 61  Reg;       /* Ra
179f0 6e 67 65 20 6f 66 20 72 65 67 69 73 74 65 72 73  nge of registers
17a00 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 61   allocated for a
17a10 43 6f 6c 20 61 6e 64 20 61 46 75 6e 63 20 2a 2f  Col and aFunc */
17a20 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72  .  ExprList *pGr
17a30 6f 75 70 42 79 3b 20 20 20 20 20 2f 2a 20 54 68  oupBy;     /* Th
17a40 65 20 67 72 6f 75 70 20 62 79 20 63 6c 61 75 73  e group by claus
17a50 65 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67  e */.  struct Ag
17a60 67 49 6e 66 6f 5f 63 6f 6c 20 7b 20 20 20 20 2f  gInfo_col {    /
17a70 2a 20 46 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d  * For each colum
17a80 6e 20 75 73 65 64 20 69 6e 20 73 6f 75 72 63 65  n used in source
17a90 20 74 61 62 6c 65 73 20 2a 2f 0a 20 20 20 20 54   tables */.    T
17aa0 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20  able *pTab;     
17ab0 20 20 20 20 20 20 20 20 2f 2a 20 53 6f 75 72 63          /* Sourc
17ac0 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69  e table */.    i
17ad0 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20  nt iTable;      
17ae0 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f          /* Curso
17af0 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20  r number of the 
17b00 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a  source table */.
17b10 20 20 20 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b      int iColumn;
17b20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
17b30 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 77 69  Column number wi
17b40 74 68 69 6e 20 74 68 65 20 73 6f 75 72 63 65 20  thin the source 
17b50 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74  table */.    int
17b60 20 69 53 6f 72 74 65 72 43 6f 6c 75 6d 6e 3b 20   iSorterColumn; 
17b70 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20        /* Column 
17b80 6e 75 6d 62 65 72 20 69 6e 20 74 68 65 20 73 6f  number in the so
17b90 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20  rting index */. 
17ba0 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20     int iMem;    
17bb0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
17bc0 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74  emory location t
17bd0 68 61 74 20 61 63 74 73 20 61 73 20 61 63 63 75  hat acts as accu
17be0 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 45  mulator */.    E
17bf0 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20  xpr *pExpr;     
17c00 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6f          /* The o
17c10 72 69 67 69 6e 61 6c 20 65 78 70 72 65 73 73 69  riginal expressi
17c20 6f 6e 20 2a 2f 0a 20 20 7d 20 2a 61 43 6f 6c 3b  on */.  } *aCol;
17c30 0a 20 20 69 6e 74 20 6e 43 6f 6c 75 6d 6e 3b 20  .  int nColumn; 
17c40 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
17c50 6d 62 65 72 20 6f 66 20 75 73 65 64 20 65 6e 74  mber of used ent
17c60 72 69 65 73 20 69 6e 20 61 43 6f 6c 5b 5d 20 2a  ries in aCol[] *
17c70 2f 0a 20 20 69 6e 74 20 6e 41 63 63 75 6d 75 6c  /.  int nAccumul
17c80 61 74 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e  ator;       /* N
17c90 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
17ca0 20 74 68 61 74 20 73 68 6f 77 20 74 68 72 6f 75   that show throu
17cb0 67 68 20 74 6f 20 74 68 65 20 6f 75 74 70 75 74  gh to the output
17cc0 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17cd0 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 41              ** A
17ce0 64 64 69 74 69 6f 6e 61 6c 20 63 6f 6c 75 6d 6e  dditional column
17cf0 73 20 61 72 65 20 75 73 65 64 20 6f 6e 6c 79 20  s are used only 
17d00 61 73 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f  as parameters to
17d10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17d20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 61 67             ** ag
17d30 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
17d40 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67  s */.  struct Ag
17d50 67 49 6e 66 6f 5f 66 75 6e 63 20 7b 20 20 20 2f  gInfo_func {   /
17d60 2a 20 46 6f 72 20 65 61 63 68 20 61 67 67 72 65  * For each aggre
17d70 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  gate function */
17d80 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72  .    Expr *pExpr
17d90 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
17da0 20 45 78 70 72 65 73 73 69 6f 6e 20 65 6e 63 6f   Expression enco
17db0 64 69 6e 67 20 74 68 65 20 66 75 6e 63 74 69 6f  ding the functio
17dc0 6e 20 2a 2f 0a 20 20 20 20 46 75 6e 63 44 65 66  n */.    FuncDef
17dd0 20 2a 70 46 75 6e 63 3b 20 20 20 20 20 20 20 20   *pFunc;        
17de0 20 20 2f 2a 20 54 68 65 20 61 67 67 72 65 67 61    /* The aggrega
17df0 74 65 20 66 75 6e 63 74 69 6f 6e 20 69 6d 70 6c  te function impl
17e00 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20  ementation */.  
17e10 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20    int iMem;     
17e20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65             /* Me
17e30 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68  mory location th
17e40 61 74 20 61 63 74 73 20 61 73 20 61 63 63 75 6d  at acts as accum
17e50 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 69 6e  ulator */.    in
17e60 74 20 69 44 69 73 74 69 6e 63 74 3b 20 20 20 20  t iDistinct;    
17e70 20 20 20 20 20 20 20 2f 2a 20 45 70 68 65 6d 65         /* Epheme
17e80 72 61 6c 20 74 61 62 6c 65 20 75 73 65 64 20 74  ral table used t
17e90 6f 20 65 6e 66 6f 72 63 65 20 44 49 53 54 49 4e  o enforce DISTIN
17ea0 43 54 20 2a 2f 0a 20 20 7d 20 2a 61 46 75 6e 63  CT */.  } *aFunc
17eb0 3b 0a 20 20 69 6e 74 20 6e 46 75 6e 63 3b 20 20  ;.  int nFunc;  
17ec0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
17ed0 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73  umber of entries
17ee0 20 69 6e 20 61 46 75 6e 63 5b 5d 20 2a 2f 0a 7d   in aFunc[] */.}
17ef0 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74  ;../*.** The dat
17f00 61 74 79 70 65 20 79 6e 56 61 72 20 69 73 20 61  atype ynVar is a
17f10 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 2c   signed integer,
17f20 20 65 69 74 68 65 72 20 31 36 2d 62 69 74 20 6f   either 16-bit o
17f30 72 20 33 32 2d 62 69 74 2e 0a 2a 2a 20 55 73 75  r 32-bit..** Usu
17f40 61 6c 6c 79 20 69 74 20 69 73 20 31 36 2d 62 69  ally it is 16-bi
17f50 74 73 2e 20 20 42 75 74 20 69 66 20 53 51 4c 49  ts.  But if SQLI
17f60 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f  TE_MAX_VARIABLE_
17f70 4e 55 4d 42 45 52 20 69 73 20 67 72 65 61 74 65  NUMBER is greate
17f80 72 0a 2a 2a 20 74 68 61 6e 20 33 32 37 36 37 20  r.** than 32767 
17f90 77 65 20 68 61 76 65 20 74 6f 20 6d 61 6b 65 20  we have to make 
17fa0 69 74 20 33 32 2d 62 69 74 2e 20 20 31 36 2d 62  it 32-bit.  16-b
17fb0 69 74 20 69 73 20 70 72 65 66 65 72 72 65 64 20  it is preferred 
17fc0 62 65 63 61 75 73 65 0a 2a 2a 20 69 74 20 75 73  because.** it us
17fd0 65 73 20 6c 65 73 73 20 6d 65 6d 6f 72 79 20 69  es less memory i
17fe0 6e 20 74 68 65 20 45 78 70 72 20 6f 62 6a 65 63  n the Expr objec
17ff0 74 2c 20 77 68 69 63 68 20 69 73 20 61 20 62 69  t, which is a bi
18000 67 20 6d 65 6d 6f 72 79 20 75 73 65 72 0a 2a 2a  g memory user.**
18010 20 69 6e 20 73 79 73 74 65 6d 73 20 77 69 74 68   in systems with
18020 20 6c 6f 74 73 20 6f 66 20 70 72 65 70 61 72 65   lots of prepare
18030 64 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 20 41  d statements.  A
18040 6e 64 20 66 65 77 20 61 70 70 6c 69 63 61 74 69  nd few applicati
18050 6f 6e 73 0a 2a 2a 20 6e 65 65 64 20 6d 6f 72 65  ons.** need more
18060 20 74 68 61 6e 20 61 62 6f 75 74 20 31 30 20 6f   than about 10 o
18070 72 20 32 30 20 76 61 72 69 61 62 6c 65 73 2e 20  r 20 variables. 
18080 20 42 75 74 20 73 6f 6d 65 20 65 78 74 72 65 6d   But some extrem
18090 65 20 75 73 65 72 73 20 77 61 6e 74 0a 2a 2a 20  e users want.** 
180a0 74 6f 20 68 61 76 65 20 70 72 65 70 61 72 65 64  to have prepared
180b0 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68   statements with
180c0 20 6f 76 65 72 20 33 32 37 36 37 20 76 61 72 69   over 32767 vari
180d0 61 62 6c 65 73 2c 20 61 6e 64 20 66 6f 72 20 74  ables, and for t
180e0 68 65 6d 0a 2a 2a 20 74 68 65 20 6f 70 74 69 6f  hem.** the optio
180f0 6e 20 69 73 20 61 76 61 69 6c 61 62 6c 65 20 28  n is available (
18100 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 29  at compile-time)
18110 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f  ..*/.#if SQLITE_
18120 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d  MAX_VARIABLE_NUM
18130 42 45 52 3c 3d 33 32 37 36 37 0a 74 79 70 65 64  BER<=32767.typed
18140 65 66 20 69 31 36 20 79 6e 56 61 72 3b 0a 23 65  ef i16 ynVar;.#e
18150 6c 73 65 0a 74 79 70 65 64 65 66 20 69 6e 74 20  lse.typedef int 
18160 79 6e 56 61 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f  ynVar;.#endif../
18170 2a 0a 2a 2a 20 45 61 63 68 20 6e 6f 64 65 20 6f  *.** Each node o
18180 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  f an expression 
18190 69 6e 20 74 68 65 20 70 61 72 73 65 20 74 72 65  in the parse tre
181a0 65 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  e is an instance
181b0 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75  .** of this stru
181c0 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 45 78 70  cture..**.** Exp
181d0 72 2e 6f 70 20 69 73 20 74 68 65 20 6f 70 63 6f  r.op is the opco
181e0 64 65 2e 20 54 68 65 20 69 6e 74 65 67 65 72 20  de. The integer 
181f0 70 61 72 73 65 72 20 74 6f 6b 65 6e 20 63 6f 64  parser token cod
18200 65 73 20 61 72 65 20 72 65 75 73 65 64 0a 2a 2a  es are reused.**
18210 20 61 73 20 6f 70 63 6f 64 65 73 20 68 65 72 65   as opcodes here
18220 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74  . For example, t
18230 68 65 20 70 61 72 73 65 72 20 64 65 66 69 6e 65  he parser define
18240 73 20 54 4b 5f 47 45 20 74 6f 20 62 65 20 61 6e  s TK_GE to be an
18250 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63 6f 64 65   integer.** code
18260 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68   representing th
18270 65 20 22 3e 3d 22 20 6f 70 65 72 61 74 6f 72 2e  e ">=" operator.
18280 20 54 68 69 73 20 73 61 6d 65 20 69 6e 74 65 67   This same integ
18290 65 72 20 63 6f 64 65 20 69 73 20 72 65 75 73 65  er code is reuse
182a0 64 0a 2a 2a 20 74 6f 20 72 65 70 72 65 73 65 6e  d.** to represen
182b0 74 20 74 68 65 20 67 72 65 61 74 65 72 2d 74 68  t the greater-th
182c0 61 6e 2d 6f 72 2d 65 71 75 61 6c 2d 74 6f 20 6f  an-or-equal-to o
182d0 70 65 72 61 74 6f 72 20 69 6e 20 74 68 65 20 65  perator in the e
182e0 78 70 72 65 73 73 69 6f 6e 0a 2a 2a 20 74 72 65  xpression.** tre
182f0 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  e..**.** If the 
18300 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e  expression is an
18310 20 53 51 4c 20 6c 69 74 65 72 61 6c 20 28 54 4b   SQL literal (TK
18320 5f 49 4e 54 45 47 45 52 2c 20 54 4b 5f 46 4c 4f  _INTEGER, TK_FLO
18330 41 54 2c 20 54 4b 5f 42 4c 4f 42 2c 0a 2a 2a 20  AT, TK_BLOB,.** 
18340 6f 72 20 54 4b 5f 53 54 52 49 4e 47 29 2c 20 74  or TK_STRING), t
18350 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63  hen Expr.token c
18360 6f 6e 74 61 69 6e 73 20 74 68 65 20 74 65 78 74  ontains the text
18370 20 6f 66 20 74 68 65 20 53 51 4c 20 6c 69 74 65   of the SQL lite
18380 72 61 6c 2e 20 49 66 0a 2a 2a 20 74 68 65 20 65  ral. If.** the e
18390 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 76  xpression is a v
183a0 61 72 69 61 62 6c 65 20 28 54 4b 5f 56 41 52 49  ariable (TK_VARI
183b0 41 42 4c 45 29 2c 20 74 68 65 6e 20 45 78 70 72  ABLE), then Expr
183c0 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20  .token contains 
183d0 74 68 65 0a 2a 2a 20 76 61 72 69 61 62 6c 65 20  the.** variable 
183e0 6e 61 6d 65 2e 20 46 69 6e 61 6c 6c 79 2c 20 69  name. Finally, i
183f0 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
18400 20 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63 74   is an SQL funct
18410 69 6f 6e 20 28 54 4b 5f 46 55 4e 43 54 49 4f 4e  ion (TK_FUNCTION
18420 29 2c 0a 2a 2a 20 74 68 65 6e 20 45 78 70 72 2e  ),.** then Expr.
18430 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74  token contains t
18440 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66  he name of the f
18450 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 45  unction..**.** E
18460 78 70 72 2e 70 52 69 67 68 74 20 61 6e 64 20 45  xpr.pRight and E
18470 78 70 72 2e 70 4c 65 66 74 20 61 72 65 20 74 68  xpr.pLeft are th
18480 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74  e left and right
18490 20 73 75 62 65 78 70 72 65 73 73 69 6f 6e 73 20   subexpressions 
184a0 6f 66 20 61 0a 2a 2a 20 62 69 6e 61 72 79 20 6f  of a.** binary o
184b0 70 65 72 61 74 6f 72 2e 20 45 69 74 68 65 72 20  perator. Either 
184c0 6f 72 20 62 6f 74 68 20 6d 61 79 20 62 65 20 4e  or both may be N
184d0 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e  ULL..**.** Expr.
184e0 78 2e 70 4c 69 73 74 20 69 73 20 61 20 6c 69 73  x.pList is a lis
184f0 74 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 69  t of arguments i
18500 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
18510 20 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63 74   is an SQL funct
18520 69 6f 6e 2c 0a 2a 2a 20 61 20 43 41 53 45 20 65  ion,.** a CASE e
18530 78 70 72 65 73 73 69 6f 6e 20 6f 72 20 61 6e 20  xpression or an 
18540 49 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66  IN expression of
18550 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e   the form "<lhs>
18560 20 49 4e 20 28 3c 79 3e 2c 20 3c 7a 3e 2e 2e 2e   IN (<y>, <z>...
18570 29 22 2e 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 53  )"..** Expr.x.pS
18580 65 6c 65 63 74 20 69 73 20 75 73 65 64 20 69 66  elect is used if
18590 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
185a0 69 73 20 61 20 73 75 62 2d 73 65 6c 65 63 74 20  is a sub-select 
185b0 6f 72 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  or an expression
185c0 20 6f 66 0a 2a 2a 20 74 68 65 20 66 6f 72 6d 20   of.** the form 
185d0 22 3c 6c 68 73 3e 20 49 4e 20 28 53 45 4c 45 43  "<lhs> IN (SELEC
185e0 54 20 2e 2e 2e 29 22 2e 20 49 66 20 74 68 65 20  T ...)". If the 
185f0 45 50 5f 78 49 73 53 65 6c 65 63 74 20 62 69 74  EP_xIsSelect bit
18600 20 69 73 20 73 65 74 20 69 6e 20 74 68 65 0a 2a   is set in the.*
18610 2a 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73  * Expr.flags mas
18620 6b 2c 20 74 68 65 6e 20 45 78 70 72 2e 78 2e 70  k, then Expr.x.p
18630 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69 64 2e  Select is valid.
18640 20 4f 74 68 65 72 77 69 73 65 2c 20 45 78 70 72   Otherwise, Expr
18650 2e 78 2e 70 4c 69 73 74 20 69 73 0a 2a 2a 20 76  .x.pList is.** v
18660 61 6c 69 64 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 65  alid..**.** An e
18670 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74 68 65  xpression of the
18680 20 66 6f 72 6d 20 49 44 20 6f 72 20 49 44 2e 49   form ID or ID.I
18690 44 20 72 65 66 65 72 73 20 74 6f 20 61 20 63 6f  D refers to a co
186a0 6c 75 6d 6e 20 69 6e 20 61 20 74 61 62 6c 65 2e  lumn in a table.
186b0 0a 2a 2a 20 46 6f 72 20 73 75 63 68 20 65 78 70  .** For such exp
186c0 72 65 73 73 69 6f 6e 73 2c 20 45 78 70 72 2e 6f  ressions, Expr.o
186d0 70 20 69 73 20 73 65 74 20 74 6f 20 54 4b 5f 43  p is set to TK_C
186e0 4f 4c 55 4d 4e 20 61 6e 64 20 45 78 70 72 2e 69  OLUMN and Expr.i
186f0 54 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20  Table is.** the 
18700 69 6e 74 65 67 65 72 20 63 75 72 73 6f 72 20 6e  integer cursor n
18710 75 6d 62 65 72 20 6f 66 20 61 20 56 44 42 45 20  umber of a VDBE 
18720 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20  cursor pointing 
18730 74 6f 20 74 68 61 74 20 74 61 62 6c 65 20 61 6e  to that table an
18740 64 0a 2a 2a 20 45 78 70 72 2e 69 43 6f 6c 75 6d  d.** Expr.iColum
18750 6e 20 69 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20  n is the column 
18760 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 65 20 73  number for the s
18770 70 65 63 69 66 69 63 20 63 6f 6c 75 6d 6e 2e 20  pecific column. 
18780 20 49 66 20 74 68 65 0a 2a 2a 20 65 78 70 72 65   If the.** expre
18790 73 73 69 6f 6e 20 69 73 20 75 73 65 64 20 61 73  ssion is used as
187a0 20 61 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20   a result in an 
187b0 61 67 67 72 65 67 61 74 65 20 53 45 4c 45 43 54  aggregate SELECT
187c0 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 76 61  , then the.** va
187d0 6c 75 65 20 69 73 20 61 6c 73 6f 20 73 74 6f 72  lue is also stor
187e0 65 64 20 69 6e 20 74 68 65 20 45 78 70 72 2e 69  ed in the Expr.i
187f0 41 67 67 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68  Agg column in th
18800 65 20 61 67 67 72 65 67 61 74 65 20 73 6f 20 74  e aggregate so t
18810 68 61 74 0a 2a 2a 20 69 74 20 63 61 6e 20 62 65  hat.** it can be
18820 20 61 63 63 65 73 73 65 64 20 61 66 74 65 72 20   accessed after 
18830 61 6c 6c 20 61 67 67 72 65 67 61 74 65 73 20 61  all aggregates a
18840 72 65 20 63 6f 6d 70 75 74 65 64 2e 0a 2a 2a 0a  re computed..**.
18850 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72 65 73  ** If the expres
18860 73 69 6f 6e 20 69 73 20 61 6e 20 75 6e 62 6f 75  sion is an unbou
18870 6e 64 20 76 61 72 69 61 62 6c 65 20 6d 61 72 6b  nd variable mark
18880 65 72 20 28 61 20 71 75 65 73 74 69 6f 6e 20 6d  er (a question m
18890 61 72 6b 0a 2a 2a 20 63 68 61 72 61 63 74 65 72  ark.** character
188a0 20 27 3f 27 20 69 6e 20 74 68 65 20 6f 72 69 67   '?' in the orig
188b0 69 6e 61 6c 20 53 51 4c 29 20 74 68 65 6e 20 74  inal SQL) then t
188c0 68 65 20 45 78 70 72 2e 69 54 61 62 6c 65 20 68  he Expr.iTable h
188d0 6f 6c 64 73 20 74 68 65 20 69 6e 64 65 78 0a 2a  olds the index.*
188e0 2a 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 61  * number for tha
188f0 74 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 0a 2a  t variable..**.*
18900 2a 20 49 66 20 74 68 65 20 65 78 70 72 65 73 73  * If the express
18910 69 6f 6e 20 69 73 20 61 20 73 75 62 71 75 65 72  ion is a subquer
18920 79 20 74 68 65 6e 20 45 78 70 72 2e 69 43 6f 6c  y then Expr.iCol
18930 75 6d 6e 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74  umn holds an int
18940 65 67 65 72 0a 2a 2a 20 72 65 67 69 73 74 65 72  eger.** register
18950 20 6e 75 6d 62 65 72 20 63 6f 6e 74 61 69 6e 69   number containi
18960 6e 67 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  ng the result of
18970 20 74 68 65 20 73 75 62 71 75 65 72 79 2e 20 20   the subquery.  
18980 49 66 20 74 68 65 0a 2a 2a 20 73 75 62 71 75 65  If the.** subque
18990 72 79 20 67 69 76 65 73 20 61 20 63 6f 6e 73 74  ry gives a const
189a0 61 6e 74 20 72 65 73 75 6c 74 2c 20 74 68 65 6e  ant result, then
189b0 20 69 54 61 62 6c 65 20 69 73 20 2d 31 2e 20 20   iTable is -1.  
189c0 49 66 20 74 68 65 20 73 75 62 71 75 65 72 79 0a  If the subquery.
189d0 2a 2a 20 67 69 76 65 73 20 61 20 64 69 66 66 65  ** gives a diffe
189e0 72 65 6e 74 20 61 6e 73 77 65 72 20 61 74 20 64  rent answer at d
189f0 69 66 66 65 72 65 6e 74 20 74 69 6d 65 73 20 64  ifferent times d
18a00 75 72 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20  uring statement 
18a10 70 72 6f 63 65 73 73 69 6e 67 0a 2a 2a 20 74 68  processing.** th
18a20 65 6e 20 69 54 61 62 6c 65 20 69 73 20 74 68 65  en iTable is the
18a30 20 61 64 64 72 65 73 73 20 6f 66 20 61 20 73 75   address of a su
18a40 62 72 6f 75 74 69 6e 65 20 74 68 61 74 20 63 6f  broutine that co
18a50 6d 70 75 74 65 73 20 74 68 65 20 73 75 62 71 75  mputes the subqu
18a60 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ery..**.** If th
18a70 65 20 45 78 70 72 20 69 73 20 6f 66 20 74 79 70  e Expr is of typ
18a80 65 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 61 6e 64  e OP_Column, and
18a90 20 74 68 65 20 74 61 62 6c 65 20 69 74 20 69 73   the table it is
18aa0 20 73 65 6c 65 63 74 69 6e 67 20 66 72 6f 6d 0a   selecting from.
18ab0 2a 2a 20 69 73 20 61 20 64 69 73 6b 20 74 61 62  ** is a disk tab
18ac0 6c 65 20 6f 72 20 74 68 65 20 22 6f 6c 64 2e 2a  le or the "old.*
18ad0 22 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2c 20  " pseudo-table, 
18ae0 74 68 65 6e 20 70 54 61 62 20 70 6f 69 6e 74 73  then pTab points
18af0 20 74 6f 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65   to the.** corre
18b00 73 70 6f 6e 64 69 6e 67 20 74 61 62 6c 65 20 64  sponding table d
18b10 65 66 69 6e 69 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  efinition..**.**
18b20 20 41 4c 4c 4f 43 41 54 49 4f 4e 20 4e 4f 54 45   ALLOCATION NOTE
18b30 53 3a 0a 2a 2a 0a 2a 2a 20 45 78 70 72 20 6f 62  S:.**.** Expr ob
18b40 6a 65 63 74 73 20 63 61 6e 20 75 73 65 20 61 20  jects can use a 
18b50 6c 6f 74 20 6f 66 20 6d 65 6d 6f 72 79 20 73 70  lot of memory sp
18b60 61 63 65 20 69 6e 20 64 61 74 61 62 61 73 65 20  ace in database 
18b70 73 63 68 65 6d 61 2e 20 20 54 6f 0a 2a 2a 20 68  schema.  To.** h
18b80 65 6c 70 20 72 65 64 75 63 65 20 6d 65 6d 6f 72  elp reduce memor
18b90 79 20 72 65 71 75 69 72 65 6d 65 6e 74 73 2c 20  y requirements, 
18ba0 73 6f 6d 65 74 69 6d 65 73 20 61 6e 20 45 78 70  sometimes an Exp
18bb0 72 20 6f 62 6a 65 63 74 20 77 69 6c 6c 20 62 65  r object will be
18bc0 0a 2a 2a 20 74 72 75 6e 63 61 74 65 64 2e 20 20  .** truncated.  
18bd0 41 6e 64 20 74 6f 20 72 65 64 75 63 65 20 74 68  And to reduce th
18be0 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f  e number of memo
18bf0 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2c 20  ry allocations, 
18c00 73 6f 6d 65 74 69 6d 65 73 0a 2a 2a 20 74 77 6f  sometimes.** two
18c10 20 6f 72 20 6d 6f 72 65 20 45 78 70 72 20 6f 62   or more Expr ob
18c20 6a 65 63 74 73 20 77 69 6c 6c 20 62 65 20 73 74  jects will be st
18c30 6f 72 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 65  ored in a single
18c40 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
18c50 6f 6e 2c 0a 2a 2a 20 74 6f 67 65 74 68 65 72 20  on,.** together 
18c60 77 69 74 68 20 45 78 70 72 2e 7a 54 6f 6b 65 6e  with Expr.zToken
18c70 20 73 74 72 69 6e 67 73 2e 0a 2a 2a 0a 2a 2a 20   strings..**.** 
18c80 49 66 20 74 68 65 20 45 50 5f 52 65 64 75 63 65  If the EP_Reduce
18c90 64 20 61 6e 64 20 45 50 5f 54 6f 6b 65 6e 4f 6e  d and EP_TokenOn
18ca0 6c 79 20 66 6c 61 67 73 20 61 72 65 20 73 65 74  ly flags are set
18cb0 20 77 68 65 6e 0a 2a 2a 20 61 6e 20 45 78 70 72   when.** an Expr
18cc0 20 6f 62 6a 65 63 74 20 69 73 20 74 72 75 6e 63   object is trunc
18cd0 61 74 65 64 2e 20 20 57 68 65 6e 20 45 50 5f 52  ated.  When EP_R
18ce0 65 64 75 63 65 64 20 69 73 20 73 65 74 2c 20 74  educed is set, t
18cf0 68 65 6e 20 61 6c 6c 0a 2a 2a 20 74 68 65 20 63  hen all.** the c
18d00 68 69 6c 64 20 45 78 70 72 20 6f 62 6a 65 63 74  hild Expr object
18d10 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e 70 4c  s in the Expr.pL
18d20 65 66 74 20 61 6e 64 20 45 78 70 72 2e 70 52 69  eft and Expr.pRi
18d30 67 68 74 20 73 75 62 74 72 65 65 73 0a 2a 2a 20  ght subtrees.** 
18d40 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20 77 69  are contained wi
18d50 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20 6d 65  thin the same me
18d60 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e  mory allocation.
18d70 20 20 4e 6f 74 65 2c 20 68 6f 77 65 76 65 72 2c    Note, however,
18d80 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 73 75 62   that.** the sub
18d90 74 72 65 65 73 20 69 6e 20 45 78 70 72 2e 78 2e  trees in Expr.x.
18da0 70 4c 69 73 74 20 6f 72 20 45 78 70 72 2e 78 2e  pList or Expr.x.
18db0 70 53 65 6c 65 63 74 20 61 72 65 20 61 6c 77 61  pSelect are alwa
18dc0 79 73 20 73 65 70 61 72 61 74 65 6c 79 0a 2a 2a  ys separately.**
18dd0 20 61 6c 6c 6f 63 61 74 65 64 2c 20 72 65 67 61   allocated, rega
18de0 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65  rdless of whethe
18df0 72 20 6f 72 20 6e 6f 74 20 45 50 5f 52 65 64 75  r or not EP_Redu
18e00 63 65 64 20 69 73 20 73 65 74 2e 0a 2a 2f 0a 73  ced is set..*/.s
18e10 74 72 75 63 74 20 45 78 70 72 20 7b 0a 20 20 75  truct Expr {.  u
18e20 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20  8 op;           
18e30 20 20 20 20 20 20 2f 2a 20 4f 70 65 72 61 74 69        /* Operati
18e40 6f 6e 20 70 65 72 66 6f 72 6d 65 64 20 62 79 20  on performed by 
18e50 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 20 20 63  this node */.  c
18e60 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20  har affinity;   
18e70 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66        /* The aff
18e80 69 6e 69 74 79 20 6f 66 20 74 68 65 20 63 6f 6c  inity of the col
18e90 75 6d 6e 20 6f 72 20 30 20 69 66 20 6e 6f 74 20  umn or 0 if not 
18ea0 61 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75 33  a column */.  u3
18eb0 32 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20  2 flags;        
18ec0 20 20 20 20 20 2f 2a 20 56 61 72 69 6f 75 73 20       /* Various 
18ed0 66 6c 61 67 73 2e 20 20 45 50 5f 2a 20 53 65 65  flags.  EP_* See
18ee0 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 75 6e 69 6f   below */.  unio
18ef0 6e 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 54  n {.    char *zT
18f00 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20 20 20 2f  oken;          /
18f10 2a 20 54 6f 6b 65 6e 20 76 61 6c 75 65 2e 20 5a  * Token value. Z
18f20 65 72 6f 20 74 65 72 6d 69 6e 61 74 65 64 20 61  ero terminated a
18f30 6e 64 20 64 65 71 75 6f 74 65 64 20 2a 2f 0a 20  nd dequoted */. 
18f40 20 20 20 69 6e 74 20 69 56 61 6c 75 65 3b 20 20     int iValue;  
18f50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e            /* Non
18f60 2d 6e 65 67 61 74 69 76 65 20 69 6e 74 65 67 65  -negative intege
18f70 72 20 76 61 6c 75 65 20 69 66 20 45 50 5f 49 6e  r value if EP_In
18f80 74 56 61 6c 75 65 20 2a 2f 0a 20 20 7d 20 75 3b  tValue */.  } u;
18f90 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 45 50  ..  /* If the EP
18fa0 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20  _TokenOnly flag 
18fb0 69 73 20 73 65 74 20 69 6e 20 74 68 65 20 45 78  is set in the Ex
18fc0 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74  pr.flags mask, t
18fd0 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63  hen no.  ** spac
18fe0 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 66  e is allocated f
18ff0 6f 72 20 74 68 65 20 66 69 65 6c 64 73 20 62 65  or the fields be
19000 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e 74 2e 20  low this point. 
19010 41 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a 20 20  An attempt to.  
19020 2a 2a 20 61 63 63 65 73 73 20 74 68 65 6d 20 77  ** access them w
19030 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 20  ill result in a 
19040 73 65 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66  segfault or malf
19050 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a  unction..  *****
19060 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19070 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19080 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19090 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
190a0 2f 0a 0a 20 20 45 78 70 72 20 2a 70 4c 65 66 74  /..  Expr *pLeft
190b0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  ;           /* L
190c0 65 66 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a 20  eft subnode */. 
190d0 20 45 78 70 72 20 2a 70 52 69 67 68 74 3b 20 20   Expr *pRight;  
190e0 20 20 20 20 20 20 20 20 2f 2a 20 52 69 67 68 74          /* Right
190f0 20 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 75 6e   subnode */.  un
19100 69 6f 6e 20 7b 0a 20 20 20 20 45 78 70 72 4c 69  ion {.    ExprLi
19110 73 74 20 2a 70 4c 69 73 74 3b 20 20 20 20 20 2f  st *pList;     /
19120 2a 20 6f 70 20 3d 20 49 4e 2c 20 45 58 49 53 54  * op = IN, EXIST
19130 53 2c 20 53 45 4c 45 43 54 2c 20 43 41 53 45 2c  S, SELECT, CASE,
19140 20 46 55 4e 43 54 49 4f 4e 2c 20 42 45 54 57 45   FUNCTION, BETWE
19150 45 4e 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74  EN */.    Select
19160 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f   *pSelect;     /
19170 2a 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20 61  * EP_xIsSelect a
19180 6e 64 20 6f 70 20 3d 20 49 4e 2c 20 45 58 49 53  nd op = IN, EXIS
19190 54 53 2c 20 53 45 4c 45 43 54 20 2a 2f 0a 20 20  TS, SELECT */.  
191a0 7d 20 78 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68  } x;..  /* If th
191b0 65 20 45 50 5f 52 65 64 75 63 65 64 20 66 6c 61  e EP_Reduced fla
191c0 67 20 69 73 20 73 65 74 20 69 6e 20 74 68 65 20  g is set in the 
191d0 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c  Expr.flags mask,
191e0 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70   then no.  ** sp
191f0 61 63 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64  ace is allocated
19200 20 66 6f 72 20 74 68 65 20 66 69 65 6c 64 73 20   for the fields 
19210 62 65 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e 74  below this point
19220 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a  . An attempt to.
19230 20 20 2a 2a 20 61 63 63 65 73 73 20 74 68 65 6d    ** access them
19240 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20   will result in 
19250 61 20 73 65 67 66 61 75 6c 74 20 6f 72 20 6d 61  a segfault or ma
19260 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a  lfunction..  ***
19270 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19280 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19290 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
192a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
192b0 2a 2a 2f 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f  **/..#if SQLITE_
192c0 4d 41 58 5f 45 58 50 52 5f 44 45 50 54 48 3e 30  MAX_EXPR_DEPTH>0
192d0 0a 20 20 69 6e 74 20 6e 48 65 69 67 68 74 3b 20  .  int nHeight; 
192e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 65 69            /* Hei
192f0 67 68 74 20 6f 66 20 74 68 65 20 74 72 65 65 20  ght of the tree 
19300 68 65 61 64 65 64 20 62 79 20 74 68 69 73 20 6e  headed by this n
19310 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ode */.#endif.  
19320 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20  int iTable;     
19330 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c         /* TK_COL
19340 55 4d 4e 3a 20 63 75 72 73 6f 72 20 6e 75 6d 62  UMN: cursor numb
19350 65 72 20 6f 66 20 74 61 62 6c 65 20 68 6f 6c 64  er of table hold
19360 69 6e 67 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 20  ing column.     
19370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19380 20 20 20 20 2a 2a 20 54 4b 5f 52 45 47 49 53 54      ** TK_REGIST
19390 45 52 3a 20 72 65 67 69 73 74 65 72 20 6e 75 6d  ER: register num
193a0 62 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 20  ber.            
193b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
193c0 54 4b 5f 54 52 49 47 47 45 52 3a 20 31 20 2d 3e  TK_TRIGGER: 1 ->
193d0 20 6e 65 77 2c 20 30 20 2d 3e 20 6f 6c 64 0a 20   new, 0 -> old. 
193e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
193f0 20 20 20 20 20 20 20 20 2a 2a 20 45 50 5f 55 6e          ** EP_Un
19400 6c 69 6b 65 6c 79 3a 20 20 31 33 34 32 31 37 37  likely:  1342177
19410 32 38 20 74 69 6d 65 73 20 6c 69 6b 65 6c 69 68  28 times likelih
19420 6f 6f 64 0a 20 20 20 20 20 20 20 20 20 20 20 20  ood.            
19430 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
19440 54 4b 5f 53 45 4c 45 43 54 3a 20 31 73 74 20 72  TK_SELECT: 1st r
19450 65 67 69 73 74 65 72 20 6f 66 20 72 65 73 75 6c  egister of resul
19460 74 20 76 65 63 74 6f 72 20 2a 2f 0a 20 20 79 6e  t vector */.  yn
19470 56 61 72 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20  Var iColumn;    
19480 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d       /* TK_COLUM
19490 4e 3a 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 2e  N: column index.
194a0 20 20 2d 31 20 66 6f 72 20 72 6f 77 69 64 2e 0a    -1 for rowid..
194b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
194c0 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 56           ** TK_V
194d0 41 52 49 41 42 4c 45 3a 20 76 61 72 69 61 62 6c  ARIABLE: variabl
194e0 65 20 6e 75 6d 62 65 72 20 28 61 6c 77 61 79 73  e number (always
194f0 20 3e 3d 20 31 29 2e 0a 20 20 20 20 20 20 20 20   >= 1)..        
19500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19510 20 2a 2a 20 54 4b 5f 53 45 4c 45 43 54 5f 43 4f   ** TK_SELECT_CO
19520 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 6f 66 20  LUMN: column of 
19530 74 68 65 20 72 65 73 75 6c 74 20 76 65 63 74 6f  the result vecto
19540 72 20 2a 2f 0a 20 20 69 31 36 20 69 41 67 67 3b  r */.  i16 iAgg;
19550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
19560 20 57 68 69 63 68 20 65 6e 74 72 79 20 69 6e 20   Which entry in 
19570 70 41 67 67 49 6e 66 6f 2d 3e 61 43 6f 6c 5b 5d  pAggInfo->aCol[]
19580 20 6f 72 20 2d 3e 61 46 75 6e 63 5b 5d 20 2a 2f   or ->aFunc[] */
19590 0a 20 20 69 31 36 20 69 52 69 67 68 74 4a 6f 69  .  i16 iRightJoi
195a0 6e 54 61 62 6c 65 3b 20 20 20 2f 2a 20 49 66 20  nTable;   /* If 
195b0 45 50 5f 46 72 6f 6d 4a 6f 69 6e 2c 20 74 68 65  EP_FromJoin, the
195c0 20 72 69 67 68 74 20 74 61 62 6c 65 20 6f 66 20   right table of 
195d0 74 68 65 20 6a 6f 69 6e 20 2a 2f 0a 20 20 75 38  the join */.  u8
195e0 20 6f 70 32 3b 20 20 20 20 20 20 20 20 20 20 20   op2;           
195f0 20 20 20 20 20 2f 2a 20 54 4b 5f 52 45 47 49 53       /* TK_REGIS
19600 54 45 52 3a 20 6f 72 69 67 69 6e 61 6c 20 76 61  TER: original va
19610 6c 75 65 20 6f 66 20 45 78 70 72 2e 6f 70 0a 20  lue of Expr.op. 
19620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19630 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 43 4f          ** TK_CO
19640 4c 55 4d 4e 3a 20 74 68 65 20 76 61 6c 75 65 20  LUMN: the value 
19650 6f 66 20 70 35 20 66 6f 72 20 4f 50 5f 43 6f 6c  of p5 for OP_Col
19660 75 6d 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20  umn.            
19670 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
19680 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 3a  TK_AGG_FUNCTION:
19690 20 6e 65 73 74 69 6e 67 20 64 65 70 74 68 20 2a   nesting depth *
196a0 2f 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70 41 67  /.  AggInfo *pAg
196b0 67 49 6e 66 6f 3b 20 20 20 20 20 2f 2a 20 55 73  gInfo;     /* Us
196c0 65 64 20 62 79 20 54 4b 5f 41 47 47 5f 43 4f 4c  ed by TK_AGG_COL
196d0 55 4d 4e 20 61 6e 64 20 54 4b 5f 41 47 47 5f 46  UMN and TK_AGG_F
196e0 55 4e 43 54 49 4f 4e 20 2a 2f 0a 20 20 75 6e 69  UNCTION */.  uni
196f0 6f 6e 20 7b 0a 20 20 20 20 54 61 62 6c 65 20 2a  on {.    Table *
19700 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20  pTab;           
19710 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 54 61  /* TK_COLUMN: Ta
19720 62 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 63  ble containing c
19730 6f 6c 75 6d 6e 2e 20 43 61 6e 20 62 65 20 4e 55  olumn. Can be NU
19740 4c 4c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  LL.             
19750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
19760 20 66 6f 72 20 61 20 63 6f 6c 75 6d 6e 20 6f 66   for a column of
19770 20 61 6e 20 69 6e 64 65 78 20 6f 6e 20 61 6e 20   an index on an 
19780 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20  expression */.  
19790 20 20 57 69 6e 64 6f 77 20 2a 70 57 69 6e 3b 20    Window *pWin; 
197a0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 46           /* TK_F
197b0 55 4e 43 54 49 4f 4e 3a 20 57 69 6e 64 6f 77 20  UNCTION: Window 
197c0 64 65 66 69 6e 69 74 69 6f 6e 20 66 6f 72 20 74  definition for t
197d0 68 65 20 66 75 6e 63 20 2a 2f 0a 20 20 7d 20 79  he func */.  } y
197e0 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ;.};../*.** The 
197f0 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74 68  following are th
19800 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 62 69  e meanings of bi
19810 74 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66  ts in the Expr.f
19820 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23  lags field..*/.#
19830 64 65 66 69 6e 65 20 45 50 5f 46 72 6f 6d 4a 6f  define EP_FromJo
19840 69 6e 20 20 30 78 30 30 30 30 30 31 20 2f 2a 20  in  0x000001 /* 
19850 4f 72 69 67 69 6e 61 74 65 73 20 69 6e 20 4f 4e  Originates in ON
19860 2f 55 53 49 4e 47 20 63 6c 61 75 73 65 20 6f 66  /USING clause of
19870 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23   outer join */.#
19880 64 65 66 69 6e 65 20 45 50 5f 41 67 67 20 20 20  define EP_Agg   
19890 20 20 20 20 30 78 30 30 30 30 30 32 20 2f 2a 20      0x000002 /* 
198a0 43 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20  Contains one or 
198b0 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65 20 66  more aggregate f
198c0 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66  unctions */.#def
198d0 69 6e 65 20 45 50 5f 48 61 73 46 75 6e 63 20 20  ine EP_HasFunc  
198e0 20 30 78 30 30 30 30 30 34 20 2f 2a 20 43 6f 6e   0x000004 /* Con
198f0 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72  tains one or mor
19900 65 20 66 75 6e 63 74 69 6f 6e 73 20 6f 66 20 61  e functions of a
19910 6e 79 20 6b 69 6e 64 20 2a 2f 0a 23 64 65 66 69  ny kind */.#defi
19920 6e 65 20 45 50 5f 46 69 78 65 64 43 6f 6c 20 20  ne EP_FixedCol  
19930 30 78 30 30 30 30 30 38 20 2f 2a 20 54 4b 5f 43  0x000008 /* TK_C
19940 6f 6c 75 6d 6e 20 77 69 74 68 20 61 20 6b 6e 6f  olumn with a kno
19950 77 6e 20 66 69 78 65 64 20 76 61 6c 75 65 20 2a  wn fixed value *
19960 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 44 69 73  /.#define EP_Dis
19970 74 69 6e 63 74 20 20 30 78 30 30 30 30 31 30 20  tinct  0x000010 
19980 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66 75 6e  /* Aggregate fun
19990 63 74 69 6f 6e 20 77 69 74 68 20 44 49 53 54 49  ction with DISTI
199a0 4e 43 54 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23  NCT keyword */.#
199b0 64 65 66 69 6e 65 20 45 50 5f 56 61 72 53 65 6c  define EP_VarSel
199c0 65 63 74 20 30 78 30 30 30 30 32 30 20 2f 2a 20  ect 0x000020 /* 
199d0 70 53 65 6c 65 63 74 20 69 73 20 63 6f 72 72 65  pSelect is corre
199e0 6c 61 74 65 64 2c 20 6e 6f 74 20 63 6f 6e 73 74  lated, not const
199f0 61 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ant */.#define E
19a00 50 5f 44 62 6c 51 75 6f 74 65 64 20 30 78 30 30  P_DblQuoted 0x00
19a10 30 30 34 30 20 2f 2a 20 74 6f 6b 65 6e 2e 7a 20  0040 /* token.z 
19a20 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 69  was originally i
19a30 6e 20 22 2e 2e 2e 22 20 2a 2f 0a 23 64 65 66 69  n "..." */.#defi
19a40 6e 65 20 45 50 5f 49 6e 66 69 78 46 75 6e 63 20  ne EP_InfixFunc 
19a50 30 78 30 30 30 30 38 30 20 2f 2a 20 54 72 75 65  0x000080 /* True
19a60 20 66 6f 72 20 61 6e 20 69 6e 66 69 78 20 66 75   for an infix fu
19a70 6e 63 74 69 6f 6e 3a 20 4c 49 4b 45 2c 20 47 4c  nction: LIKE, GL
19a80 4f 42 2c 20 65 74 63 20 2a 2f 0a 23 64 65 66 69  OB, etc */.#defi
19a90 6e 65 20 45 50 5f 43 6f 6c 6c 61 74 65 20 20 20  ne EP_Collate   
19aa0 30 78 30 30 30 31 30 30 20 2f 2a 20 54 72 65 65  0x000100 /* Tree
19ab0 20 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f 43   contains a TK_C
19ac0 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 20  OLLATE operator 
19ad0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 47 65  */.#define EP_Ge
19ae0 6e 65 72 69 63 20 20 20 30 78 30 30 30 32 30 30  neric   0x000200
19af0 20 2f 2a 20 49 67 6e 6f 72 65 20 43 4f 4c 4c 41   /* Ignore COLLA
19b00 54 45 20 6f 72 20 61 66 66 69 6e 69 74 79 20 6f  TE or affinity o
19b10 6e 20 74 68 69 73 20 74 72 65 65 20 2a 2f 0a 23  n this tree */.#
19b20 64 65 66 69 6e 65 20 45 50 5f 49 6e 74 56 61 6c  define EP_IntVal
19b30 75 65 20 20 30 78 30 30 30 34 30 30 20 2f 2a 20  ue  0x000400 /* 
19b40 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 63 6f  Integer value co
19b50 6e 74 61 69 6e 65 64 20 69 6e 20 75 2e 69 56 61  ntained in u.iVa
19b60 6c 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  lue */.#define E
19b70 50 5f 78 49 73 53 65 6c 65 63 74 20 30 78 30 30  P_xIsSelect 0x00
19b80 30 38 30 30 20 2f 2a 20 78 2e 70 53 65 6c 65 63  0800 /* x.pSelec
19b90 74 20 69 73 20 76 61 6c 69 64 20 28 6f 74 68 65  t is valid (othe
19ba0 72 77 69 73 65 20 78 2e 70 4c 69 73 74 20 69 73  rwise x.pList is
19bb0 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  ) */.#define EP_
19bc0 53 6b 69 70 20 20 20 20 20 20 30 78 30 30 31 30  Skip      0x0010
19bd0 30 30 20 2f 2a 20 43 4f 4c 4c 41 54 45 2c 20 41  00 /* COLLATE, A
19be0 53 2c 20 6f 72 20 55 4e 4c 49 4b 45 4c 59 20 2a  S, or UNLIKELY *
19bf0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 52 65 64  /.#define EP_Red
19c00 75 63 65 64 20 20 20 30 78 30 30 32 30 30 30 20  uced   0x002000 
19c10 2f 2a 20 45 78 70 72 20 73 74 72 75 63 74 20 45  /* Expr struct E
19c20 58 50 52 5f 52 45 44 55 43 45 44 53 49 5a 45 20  XPR_REDUCEDSIZE 
19c30 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64  bytes only */.#d
19c40 65 66 69 6e 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e  efine EP_TokenOn
19c50 6c 79 20 30 78 30 30 34 30 30 30 20 2f 2a 20 45  ly 0x004000 /* E
19c60 78 70 72 20 73 74 72 75 63 74 20 45 58 50 52 5f  xpr struct EXPR_
19c70 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 62 79  TOKENONLYSIZE by
19c80 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66  tes only */.#def
19c90 69 6e 65 20 45 50 5f 53 74 61 74 69 63 20 20 20  ine EP_Static   
19ca0 20 30 78 30 30 38 30 30 30 20 2f 2a 20 48 65 6c   0x008000 /* Hel
19cb0 64 20 69 6e 20 6d 65 6d 6f 72 79 20 6e 6f 74 20  d in memory not 
19cc0 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 6d 61  obtained from ma
19cd0 6c 6c 6f 63 28 29 20 2a 2f 0a 23 64 65 66 69 6e  lloc() */.#defin
19ce0 65 20 45 50 5f 4d 65 6d 54 6f 6b 65 6e 20 20 30  e EP_MemToken  0
19cf0 78 30 31 30 30 30 30 20 2f 2a 20 4e 65 65 64 20  x010000 /* Need 
19d00 74 6f 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  to sqlite3DbFree
19d10 28 29 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 2a  () Expr.zToken *
19d20 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 4e 6f 52  /.#define EP_NoR
19d30 65 64 75 63 65 20 20 30 78 30 32 30 30 30 30 20  educe  0x020000 
19d40 2f 2a 20 43 61 6e 6e 6f 74 20 45 58 50 52 44 55  /* Cannot EXPRDU
19d50 50 5f 52 45 44 55 43 45 20 74 68 69 73 20 45 78  P_REDUCE this Ex
19d60 70 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  pr */.#define EP
19d70 5f 55 6e 6c 69 6b 65 6c 79 20 20 30 78 30 34 30  _Unlikely  0x040
19d80 30 30 30 20 2f 2a 20 75 6e 6c 69 6b 65 6c 79 28  000 /* unlikely(
19d90 29 20 6f 72 20 6c 69 6b 65 6c 69 68 6f 6f 64 28  ) or likelihood(
19da0 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  ) function */.#d
19db0 65 66 69 6e 65 20 45 50 5f 43 6f 6e 73 74 46 75  efine EP_ConstFu
19dc0 6e 63 20 30 78 30 38 30 30 30 30 20 2f 2a 20 41  nc 0x080000 /* A
19dd0 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
19de0 53 54 41 4e 54 20 6f 72 20 5f 53 4c 4f 43 48 4e  STANT or _SLOCHN
19df0 47 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  G function */.#d
19e00 65 66 69 6e 65 20 45 50 5f 43 61 6e 42 65 4e 75  efine EP_CanBeNu
19e10 6c 6c 20 30 78 31 30 30 30 30 30 20 2f 2a 20 43  ll 0x100000 /* C
19e20 61 6e 20 62 65 20 6e 75 6c 6c 20 64 65 73 70 69  an be null despi
19e30 74 65 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73  te NOT NULL cons
19e40 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  traint */.#defin
19e50 65 20 45 50 5f 53 75 62 71 75 65 72 79 20 20 30  e EP_Subquery  0
19e60 78 32 30 30 30 30 30 20 2f 2a 20 54 72 65 65 20  x200000 /* Tree 
19e70 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f 53 45  contains a TK_SE
19e80 4c 45 43 54 20 6f 70 65 72 61 74 6f 72 20 2a 2f  LECT operator */
19e90 0a 23 64 65 66 69 6e 65 20 45 50 5f 41 6c 69 61  .#define EP_Alia
19ea0 73 20 20 20 20 20 30 78 34 30 30 30 30 30 20 2f  s     0x400000 /
19eb0 2a 20 49 73 20 61 6e 20 61 6c 69 61 73 20 66 6f  * Is an alias fo
19ec0 72 20 61 20 72 65 73 75 6c 74 20 73 65 74 20 63  r a result set c
19ed0 6f 6c 75 6d 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  olumn */.#define
19ee0 20 45 50 5f 4c 65 61 66 20 20 20 20 20 20 30 78   EP_Leaf      0x
19ef0 38 30 30 30 30 30 20 2f 2a 20 45 78 70 72 2e 70  800000 /* Expr.p
19f00 4c 65 66 74 2c 20 2e 70 52 69 67 68 74 2c 20 2e  Left, .pRight, .
19f10 75 2e 70 53 65 6c 65 63 74 20 61 6c 6c 20 4e 55  u.pSelect all NU
19f20 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  LL */.#define EP
19f30 5f 57 69 6e 46 75 6e 63 20 20 30 78 31 30 30 30  _WinFunc  0x1000
19f40 30 30 30 20 2f 2a 20 54 4b 5f 46 55 4e 43 54 49  000 /* TK_FUNCTI
19f50 4f 4e 20 77 69 74 68 20 45 78 70 72 2e 79 2e 70  ON with Expr.y.p
19f60 57 69 6e 20 73 65 74 20 2a 2f 0a 0a 2f 2a 0a 2a  Win set */../*.*
19f70 2a 20 54 68 65 20 45 50 5f 50 72 6f 70 61 67 61  * The EP_Propaga
19f80 74 65 20 6d 61 73 6b 20 69 73 20 61 20 73 65 74  te mask is a set
19f90 20 6f 66 20 70 72 6f 70 65 72 74 69 65 73 20 74   of properties t
19fa0 68 61 74 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  hat automaticall
19fb0 79 20 70 72 6f 70 61 67 61 74 65 0a 2a 2a 20 75  y propagate.** u
19fc0 70 77 61 72 64 73 20 69 6e 74 6f 20 70 61 72 65  pwards into pare
19fd0 6e 74 20 6e 6f 64 65 73 2e 0a 2a 2f 0a 23 64 65  nt nodes..*/.#de
19fe0 66 69 6e 65 20 45 50 5f 50 72 6f 70 61 67 61 74  fine EP_Propagat
19ff0 65 20 28 45 50 5f 43 6f 6c 6c 61 74 65 7c 45 50  e (EP_Collate|EP
1a000 5f 53 75 62 71 75 65 72 79 7c 45 50 5f 48 61 73  _Subquery|EP_Has
1a010 46 75 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  Func)../*.** The
1a020 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62 65  se macros can be
1a030 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20 73   used to test, s
1a040 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69 74  et, or clear bit
1a050 73 20 69 6e 20 74 68 65 0a 2a 2a 20 45 78 70 72  s in the.** Expr
1a060 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f  .flags field..*/
1a070 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48 61 73  .#define ExprHas
1a080 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20  Property(E,P)   
1a090 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28    (((E)->flags&(
1a0a0 50 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20  P))!=0).#define 
1a0b0 45 78 70 72 48 61 73 41 6c 6c 50 72 6f 70 65 72  ExprHasAllProper
1a0c0 74 79 28 45 2c 50 29 20 20 28 28 28 45 29 2d 3e  ty(E,P)  (((E)->
1a0d0 66 6c 61 67 73 26 28 50 29 29 3d 3d 28 50 29 29  flags&(P))==(P))
1a0e0 0a 23 64 65 66 69 6e 65 20 45 78 70 72 53 65 74  .#define ExprSet
1a0f0 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20  Property(E,P)   
1a100 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50    (E)->flags|=(P
1a110 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 43 6c  ).#define ExprCl
1a120 65 61 72 50 72 6f 70 65 72 74 79 28 45 2c 50 29  earProperty(E,P)
1a130 20 20 20 28 45 29 2d 3e 66 6c 61 67 73 26 3d 7e     (E)->flags&=~
1a140 28 50 29 0a 0a 2f 2a 20 54 68 65 20 45 78 70 72  (P)../* The Expr
1a150 53 65 74 56 56 41 50 72 6f 70 65 72 74 79 28 29  SetVVAProperty()
1a160 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 66   macro is used f
1a170 6f 72 20 56 65 72 69 66 69 63 61 74 69 6f 6e 2c  or Verification,
1a180 20 56 61 6c 69 64 61 74 69 6f 6e 2c 0a 2a 2a 20   Validation,.** 
1a190 61 6e 64 20 41 63 63 72 65 64 69 74 61 74 69 6f  and Accreditatio
1a1a0 6e 20 6f 6e 6c 79 2e 20 20 49 74 20 77 6f 72 6b  n only.  It work
1a1b0 73 20 6c 69 6b 65 20 45 78 70 72 53 65 74 50 72  s like ExprSetPr
1a1c0 6f 70 65 72 74 79 28 29 20 64 75 72 69 6e 67 20  operty() during 
1a1d0 56 56 41 0a 2a 2a 20 70 72 6f 63 65 73 73 65 73  VVA.** processes
1a1e0 20 62 75 74 20 69 73 20 61 20 6e 6f 2d 6f 70 20   but is a no-op 
1a1f0 66 6f 72 20 64 65 6c 69 76 65 72 79 2e 0a 2a 2f  for delivery..*/
1a200 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
1a210 45 42 55 47 0a 23 20 64 65 66 69 6e 65 20 45 78  EBUG.# define Ex
1a220 70 72 53 65 74 56 56 41 50 72 6f 70 65 72 74 79  prSetVVAProperty
1a230 28 45 2c 50 29 20 20 28 45 29 2d 3e 66 6c 61 67  (E,P)  (E)->flag
1a240 73 7c 3d 28 50 29 0a 23 65 6c 73 65 0a 23 20 64  s|=(P).#else.# d
1a250 65 66 69 6e 65 20 45 78 70 72 53 65 74 56 56 41  efine ExprSetVVA
1a260 50 72 6f 70 65 72 74 79 28 45 2c 50 29 0a 23 65  Property(E,P).#e
1a270 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72  ndif../*.** Macr
1a280 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  os to determine 
1a290 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79  the number of by
1a2a0 74 65 73 20 72 65 71 75 69 72 65 64 20 62 79 20  tes required by 
1a2b0 61 20 6e 6f 72 6d 61 6c 20 45 78 70 72 0a 2a 2a  a normal Expr.**
1a2c0 20 73 74 72 75 63 74 2c 20 61 6e 20 45 78 70 72   struct, an Expr
1a2d0 20 73 74 72 75 63 74 20 77 69 74 68 20 74 68 65   struct with the
1a2e0 20 45 50 5f 52 65 64 75 63 65 64 20 66 6c 61 67   EP_Reduced flag
1a2f0 20 73 65 74 20 69 6e 20 45 78 70 72 2e 66 6c 61   set in Expr.fla
1a300 67 73 0a 2a 2a 20 61 6e 64 20 61 6e 20 45 78 70  gs.** and an Exp
1a310 72 20 73 74 72 75 63 74 20 77 69 74 68 20 74 68  r struct with th
1a320 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66  e EP_TokenOnly f
1a330 6c 61 67 20 73 65 74 2e 0a 2a 2f 0a 23 64 65 66  lag set..*/.#def
1a340 69 6e 65 20 45 58 50 52 5f 46 55 4c 4c 53 49 5a  ine EXPR_FULLSIZ
1a350 45 20 20 20 20 20 20 20 20 20 20 20 73 69 7a 65  E           size
1a360 6f 66 28 45 78 70 72 29 20 20 20 20 20 20 20 20  of(Expr)        
1a370 20 20 20 2f 2a 20 46 75 6c 6c 20 73 69 7a 65 20     /* Full size 
1a380 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f  */.#define EXPR_
1a390 52 45 44 55 43 45 44 53 49 5a 45 20 20 20 20 20  REDUCEDSIZE     
1a3a0 20 20 20 6f 66 66 73 65 74 6f 66 28 45 78 70 72     offsetof(Expr
1a3b0 2c 69 54 61 62 6c 65 29 20 20 2f 2a 20 43 6f 6d  ,iTable)  /* Com
1a3c0 6d 6f 6e 20 66 65 61 74 75 72 65 73 20 2a 2f 0a  mon features */.
1a3d0 23 64 65 66 69 6e 65 20 45 58 50 52 5f 54 4f 4b  #define EXPR_TOK
1a3e0 45 4e 4f 4e 4c 59 53 49 5a 45 20 20 20 20 20 20  ENONLYSIZE      
1a3f0 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c 70 4c  offsetof(Expr,pL
1a400 65 66 74 29 20 20 20 2f 2a 20 46 65 77 65 72 20  eft)   /* Fewer 
1a410 66 65 61 74 75 72 65 73 20 2a 2f 0a 0a 2f 2a 0a  features */../*.
1a420 2a 2a 20 46 6c 61 67 73 20 70 61 73 73 65 64 20  ** Flags passed 
1a430 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 45 78  to the sqlite3Ex
1a440 70 72 44 75 70 28 29 20 66 75 6e 63 74 69 6f 6e  prDup() function
1a450 2e 20 53 65 65 20 74 68 65 20 68 65 61 64 65 72  . See the header
1a460 20 63 6f 6d 6d 65 6e 74 0a 2a 2a 20 61 62 6f 76   comment.** abov
1a470 65 20 73 71 6c 69 74 65 33 45 78 70 72 44 75 70  e sqlite3ExprDup
1a480 28 29 20 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a  () for details..
1a490 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 44  */.#define EXPRD
1a4a0 55 50 5f 52 45 44 55 43 45 20 20 20 20 20 20 20  UP_REDUCE       
1a4b0 20 20 30 78 30 30 30 31 20 20 2f 2a 20 55 73 65    0x0001  /* Use
1a4c0 64 20 72 65 64 75 63 65 64 2d 73 69 7a 65 20 45  d reduced-size E
1a4d0 78 70 72 20 6e 6f 64 65 73 20 2a 2f 0a 0a 2f 2a  xpr nodes */../*
1a4e0 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20 65 78  .** A list of ex
1a4f0 70 72 65 73 73 69 6f 6e 73 2e 20 20 45 61 63 68  pressions.  Each
1a500 20 65 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 20   expression may 
1a510 6f 70 74 69 6f 6e 61 6c 6c 79 20 68 61 76 65 20  optionally have 
1a520 61 0a 2a 2a 20 6e 61 6d 65 2e 20 20 41 6e 20 65  a.** name.  An e
1a530 78 70 72 2f 6e 61 6d 65 20 63 6f 6d 62 69 6e 61  xpr/name combina
1a540 74 69 6f 6e 20 63 61 6e 20 62 65 20 75 73 65 64  tion can be used
1a550 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61 79 73   in several ways
1a560 2c 20 73 75 63 68 0a 2a 2a 20 61 73 20 74 68 65  , such.** as the
1a570 20 6c 69 73 74 20 6f 66 20 22 65 78 70 72 20 41   list of "expr A
1a580 53 20 49 44 22 20 66 69 65 6c 64 73 20 66 6f 6c  S ID" fields fol
1a590 6c 6f 77 69 6e 67 20 61 20 22 53 45 4c 45 43 54  lowing a "SELECT
1a5a0 22 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 6c  " or in the.** l
1a5b0 69 73 74 20 6f 66 20 22 49 44 20 3d 20 65 78 70  ist of "ID = exp
1a5c0 72 22 20 69 74 65 6d 73 20 69 6e 20 61 6e 20 55  r" items in an U
1a5d0 50 44 41 54 45 2e 20 20 41 20 6c 69 73 74 20 6f  PDATE.  A list o
1a5e0 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20 63 61  f expressions ca
1a5f0 6e 0a 2a 2a 20 61 6c 73 6f 20 62 65 20 75 73 65  n.** also be use
1a600 64 20 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e  d as the argumen
1a610 74 20 74 6f 20 61 20 66 75 6e 63 74 69 6f 6e 2c  t to a function,
1a620 20 69 6e 20 77 68 69 63 68 20 63 61 73 65 20 74   in which case t
1a630 68 65 20 61 2e 7a 4e 61 6d 65 0a 2a 2a 20 66 69  he a.zName.** fi
1a640 65 6c 64 20 69 73 20 6e 6f 74 20 75 73 65 64 2e  eld is not used.
1a650 0a 2a 2a 0a 2a 2a 20 42 79 20 64 65 66 61 75 6c  .**.** By defaul
1a660 74 20 74 68 65 20 45 78 70 72 2e 7a 53 70 61 6e  t the Expr.zSpan
1a670 20 66 69 65 6c 64 20 68 6f 6c 64 73 20 61 20 68   field holds a h
1a680 75 6d 61 6e 2d 72 65 61 64 61 62 6c 65 20 64 65  uman-readable de
1a690 73 63 72 69 70 74 69 6f 6e 20 6f 66 0a 2a 2a 20  scription of.** 
1a6a0 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 74  the expression t
1a6b0 68 61 74 20 69 73 20 75 73 65 64 20 69 6e 20 74  hat is used in t
1a6c0 68 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66  he generation of
1a6d0 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20   error messages 
1a6e0 61 6e 64 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6c 61  and.** column la
1a6f0 62 65 6c 73 2e 20 20 49 6e 20 74 68 69 73 20 63  bels.  In this c
1a700 61 73 65 2c 20 45 78 70 72 2e 7a 53 70 61 6e 20  ase, Expr.zSpan 
1a710 69 73 20 74 79 70 69 63 61 6c 6c 79 20 74 68 65  is typically the
1a720 20 74 65 78 74 20 6f 66 20 61 0a 2a 2a 20 63 6f   text of a.** co
1a730 6c 75 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  lumn expression 
1a740 61 73 20 69 74 20 65 78 69 73 74 73 20 69 6e 20  as it exists in 
1a750 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  a SELECT stateme
1a760 6e 74 2e 20 20 48 6f 77 65 76 65 72 2c 20 69 66  nt.  However, if
1a770 0a 2a 2a 20 74 68 65 20 62 53 70 61 6e 49 73 54  .** the bSpanIsT
1a780 61 62 20 66 6c 61 67 20 69 73 20 73 65 74 2c 20  ab flag is set, 
1a790 74 68 65 6e 20 7a 53 70 61 6e 20 69 73 20 6f 76  then zSpan is ov
1a7a0 65 72 6c 6f 61 64 65 64 20 74 6f 20 6d 65 61 6e  erloaded to mean
1a7b0 20 74 68 65 20 6e 61 6d 65 0a 2a 2a 20 6f 66 20   the name.** of 
1a7c0 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d  the result colum
1a7d0 6e 20 69 6e 20 74 68 65 20 66 6f 72 6d 3a 20 44  n in the form: D
1a7e0 41 54 41 42 41 53 45 2e 54 41 42 4c 45 2e 43 4f  ATABASE.TABLE.CO
1a7f0 4c 55 4d 4e 2e 20 20 54 68 69 73 20 6c 61 74 65  LUMN.  This late
1a800 72 0a 2a 2a 20 66 6f 72 6d 20 69 73 20 75 73 65  r.** form is use
1a810 64 20 66 6f 72 20 6e 61 6d 65 20 72 65 73 6f 6c  d for name resol
1a820 75 74 69 6f 6e 20 77 69 74 68 20 6e 65 73 74 65  ution with neste
1a830 64 20 46 52 4f 4d 20 63 6c 61 75 73 65 73 2e 0a  d FROM clauses..
1a840 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72 4c 69  */.struct ExprLi
1a850 73 74 20 7b 0a 20 20 69 6e 74 20 6e 45 78 70 72  st {.  int nExpr
1a860 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
1a870 20 4e 75 6d 62 65 72 20 6f 66 20 65 78 70 72 65   Number of expre
1a880 73 73 69 6f 6e 73 20 6f 6e 20 74 68 65 20 6c 69  ssions on the li
1a890 73 74 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 45  st */.  struct E
1a8a0 78 70 72 4c 69 73 74 5f 69 74 65 6d 20 7b 20 2f  xprList_item { /
1a8b0 2a 20 46 6f 72 20 65 61 63 68 20 65 78 70 72 65  * For each expre
1a8c0 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 6c 69 73  ssion in the lis
1a8d0 74 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70  t */.    Expr *p
1a8e0 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20  Expr;           
1a8f0 20 2f 2a 20 54 68 65 20 70 61 72 73 65 20 74 72   /* The parse tr
1a900 65 65 20 66 6f 72 20 74 68 69 73 20 65 78 70 72  ee for this expr
1a910 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 63 68  ession */.    ch
1a920 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
1a930 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 61        /* Token a
1a940 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
1a950 68 69 73 20 65 78 70 72 65 73 73 69 6f 6e 20 2a  his expression *
1a960 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 53 70 61  /.    char *zSpa
1a970 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  n;            /*
1a980 20 4f 72 69 67 69 6e 61 6c 20 74 65 78 74 20 6f   Original text o
1a990 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
1a9a0 20 2a 2f 0a 20 20 20 20 75 38 20 73 6f 72 74 4f   */.    u8 sortO
1a9b0 72 64 65 72 3b 20 20 20 20 20 20 20 20 20 20 20  rder;           
1a9c0 2f 2a 20 31 20 66 6f 72 20 44 45 53 43 20 6f 72  /* 1 for DESC or
1a9d0 20 30 20 66 6f 72 20 41 53 43 20 2a 2f 0a 20 20   0 for ASC */.  
1a9e0 20 20 75 6e 73 69 67 6e 65 64 20 64 6f 6e 65 20    unsigned done 
1a9f0 3a 31 3b 20 20 20 20 20 20 20 2f 2a 20 41 20 66  :1;       /* A f
1aa00 6c 61 67 20 74 6f 20 69 6e 64 69 63 61 74 65 20  lag to indicate 
1aa10 77 68 65 6e 20 70 72 6f 63 65 73 73 69 6e 67 20  when processing 
1aa20 69 73 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20  is finished */. 
1aa30 20 20 20 75 6e 73 69 67 6e 65 64 20 62 53 70 61     unsigned bSpa
1aa40 6e 49 73 54 61 62 20 3a 31 3b 20 2f 2a 20 7a 53  nIsTab :1; /* zS
1aa50 70 61 6e 20 68 6f 6c 64 73 20 44 42 2e 54 41 42  pan holds DB.TAB
1aa60 4c 45 2e 43 4f 4c 55 4d 4e 20 2a 2f 0a 20 20 20  LE.COLUMN */.   
1aa70 20 75 6e 73 69 67 6e 65 64 20 72 65 75 73 61 62   unsigned reusab
1aa80 6c 65 20 3a 31 3b 20 20 20 2f 2a 20 43 6f 6e 73  le :1;   /* Cons
1aa90 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 20  tant expression 
1aaa0 69 73 20 72 65 75 73 61 62 6c 65 20 2a 2f 0a 20  is reusable */. 
1aab0 20 20 20 75 6e 73 69 67 6e 65 64 20 62 53 6f 72     unsigned bSor
1aac0 74 65 72 52 65 66 20 3a 31 3b 20 2f 2a 20 44 65  terRef :1; /* De
1aad0 66 65 72 20 65 76 61 6c 75 61 74 69 6f 6e 20 75  fer evaluation u
1aae0 6e 74 69 6c 20 61 66 74 65 72 20 73 6f 72 74 69  ntil after sorti
1aaf0 6e 67 20 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20  ng */.    union 
1ab00 7b 0a 20 20 20 20 20 20 73 74 72 75 63 74 20 7b  {.      struct {
1ab10 0a 20 20 20 20 20 20 20 20 75 31 36 20 69 4f 72  .        u16 iOr
1ab20 64 65 72 42 79 43 6f 6c 3b 20 20 20 20 20 20 2f  derByCol;      /
1ab30 2a 20 46 6f 72 20 4f 52 44 45 52 20 42 59 2c 20  * For ORDER BY, 
1ab40 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e  column number in
1ab50 20 72 65 73 75 6c 74 20 73 65 74 20 2a 2f 0a 20   result set */. 
1ab60 20 20 20 20 20 20 20 75 31 36 20 69 41 6c 69 61         u16 iAlia
1ab70 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  s;           /* 
1ab80 49 6e 64 65 78 20 69 6e 74 6f 20 50 61 72 73 65  Index into Parse
1ab90 2e 61 41 6c 69 61 73 5b 5d 20 66 6f 72 20 7a 4e  .aAlias[] for zN
1aba0 61 6d 65 20 2a 2f 0a 20 20 20 20 20 20 7d 20 78  ame */.      } x
1abb0 3b 0a 20 20 20 20 20 20 69 6e 74 20 69 43 6f 6e  ;.      int iCon
1abc0 73 74 45 78 70 72 52 65 67 3b 20 20 20 20 20 20  stExprReg;      
1abd0 2f 2a 20 52 65 67 69 73 74 65 72 20 69 6e 20 77  /* Register in w
1abe0 68 69 63 68 20 45 78 70 72 20 76 61 6c 75 65 20  hich Expr value 
1abf0 69 73 20 63 61 63 68 65 64 20 2a 2f 0a 20 20 20  is cached */.   
1ac00 20 7d 20 75 3b 0a 20 20 7d 20 61 5b 31 5d 3b 20   } u;.  } a[1]; 
1ac10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac20 20 2f 2a 20 4f 6e 65 20 73 6c 6f 74 20 66 6f 72   /* One slot for
1ac30 20 65 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e   each expression
1ac40 20 69 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a   in the list */.
1ac50 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  };../*.** An ins
1ac60 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74  tance of this st
1ac70 72 75 63 74 75 72 65 20 63 61 6e 20 68 6f 6c 64  ructure can hold
1ac80 20 61 20 73 69 6d 70 6c 65 20 6c 69 73 74 20 6f   a simple list o
1ac90 66 20 69 64 65 6e 74 69 66 69 65 72 73 2c 0a 2a  f identifiers,.*
1aca0 2a 20 73 75 63 68 20 61 73 20 74 68 65 20 6c 69  * such as the li
1acb0 73 74 20 22 61 2c 62 2c 63 22 20 69 6e 20 74 68  st "a,b,c" in th
1acc0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74  e following stat
1acd0 65 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 20 20  ements:.**.**   
1ace0 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
1acf0 28 61 2c 62 2c 63 29 20 56 41 4c 55 45 53 20 2e  (a,b,c) VALUES .
1ad00 2e 2e 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45 41  ..;.**      CREA
1ad10 54 45 20 49 4e 44 45 58 20 69 64 78 20 4f 4e 20  TE INDEX idx ON 
1ad20 74 28 61 2c 62 2c 63 29 3b 0a 2a 2a 20 20 20 20  t(a,b,c);.**    
1ad30 20 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52    CREATE TRIGGER
1ad40 20 74 72 69 67 20 42 45 46 4f 52 45 20 55 50 44   trig BEFORE UPD
1ad50 41 54 45 20 4f 4e 20 74 28 61 2c 62 2c 63 29 20  ATE ON t(a,b,c) 
1ad60 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49  ...;.**.** The I
1ad70 64 4c 69 73 74 2e 61 2e 69 64 78 20 66 69 65 6c  dList.a.idx fiel
1ad80 64 20 69 73 20 75 73 65 64 20 77 68 65 6e 20 74  d is used when t
1ad90 68 65 20 49 64 4c 69 73 74 20 72 65 70 72 65 73  he IdList repres
1ada0 65 6e 74 73 20 74 68 65 20 6c 69 73 74 20 6f 66  ents the list of
1adb0 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  .** column names
1adc0 20 61 66 74 65 72 20 61 20 74 61 62 6c 65 20 6e   after a table n
1add0 61 6d 65 20 69 6e 20 61 6e 20 49 4e 53 45 52 54  ame in an INSERT
1ade0 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20   statement.  In 
1adf0 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a  the statement.**
1ae00 0a 2a 2a 20 20 20 20 20 49 4e 53 45 52 54 20 49  .**     INSERT I
1ae10 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e  NTO t(a,b,c) ...
1ae20 0a 2a 2a 0a 2a 2a 20 49 66 20 22 61 22 20 69 73  .**.** If "a" is
1ae30 20 74 68 65 20 6b 2d 74 68 20 63 6f 6c 75 6d 6e   the k-th column
1ae40 20 6f 66 20 74 61 62 6c 65 20 22 74 22 2c 20 74   of table "t", t
1ae50 68 65 6e 20 49 64 4c 69 73 74 2e 61 5b 30 5d 2e  hen IdList.a[0].
1ae60 69 64 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72 75 63  idx==k..*/.struc
1ae70 74 20 49 64 4c 69 73 74 20 7b 0a 20 20 73 74 72  t IdList {.  str
1ae80 75 63 74 20 49 64 4c 69 73 74 5f 69 74 65 6d 20  uct IdList_item 
1ae90 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d  {.    char *zNam
1aea0 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20  e;      /* Name 
1aeb0 6f 66 20 74 68 65 20 69 64 65 6e 74 69 66 69 65  of the identifie
1aec0 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 64 78  r */.    int idx
1aed0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e  ;          /* In
1aee0 64 65 78 20 69 6e 20 73 6f 6d 65 20 54 61 62 6c  dex in some Tabl
1aef0 65 2e 61 43 6f 6c 5b 5d 20 6f 66 20 61 20 63 6f  e.aCol[] of a co
1af00 6c 75 6d 6e 20 6e 61 6d 65 64 20 7a 4e 61 6d 65  lumn named zName
1af10 20 2a 2f 0a 20 20 7d 20 2a 61 3b 0a 20 20 69 6e   */.  } *a;.  in
1af20 74 20 6e 49 64 3b 20 20 20 20 20 20 20 20 20 2f  t nId;         /
1af30 2a 20 4e 75 6d 62 65 72 20 6f 66 20 69 64 65 6e  * Number of iden
1af40 74 69 66 69 65 72 73 20 6f 6e 20 74 68 65 20 6c  tifiers on the l
1af50 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ist */.};../*.**
1af60 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   The following s
1af70 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62  tructure describ
1af80 65 73 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  es the FROM clau
1af90 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73  se of a SELECT s
1afa0 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 45 61 63  tatement..** Eac
1afb0 68 20 74 61 62 6c 65 20 6f 72 20 73 75 62 71 75  h table or subqu
1afc0 65 72 79 20 69 6e 20 74 68 65 20 46 52 4f 4d 20  ery in the FROM 
1afd0 63 6c 61 75 73 65 20 69 73 20 61 20 73 65 70 61  clause is a sepa
1afe0 72 61 74 65 20 65 6c 65 6d 65 6e 74 20 6f 66 0a  rate element of.
1aff0 2a 2a 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61  ** the SrcList.a
1b000 5b 5d 20 61 72 72 61 79 2e 0a 2a 2a 0a 2a 2a 20  [] array..**.** 
1b010 57 69 74 68 20 74 68 65 20 61 64 64 69 74 69 6f  With the additio
1b020 6e 20 6f 66 20 6d 75 6c 74 69 70 6c 65 20 64 61  n of multiple da
1b030 74 61 62 61 73 65 20 73 75 70 70 6f 72 74 2c 20  tabase support, 
1b040 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
1b050 72 75 63 74 75 72 65 0a 2a 2a 20 63 61 6e 20 61  ructure.** can a
1b060 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f 20 64  lso be used to d
1b070 65 73 63 72 69 62 65 20 61 20 70 61 72 74 69 63  escribe a partic
1b080 75 6c 61 72 20 74 61 62 6c 65 20 73 75 63 68 20  ular table such 
1b090 61 73 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  as the table tha
1b0a0 74 0a 2a 2a 20 69 73 20 6d 6f 64 69 66 69 65 64  t.** is modified
1b0b0 20 62 79 20 61 6e 20 49 4e 53 45 52 54 2c 20 44   by an INSERT, D
1b0c0 45 4c 45 54 45 2c 20 6f 72 20 55 50 44 41 54 45  ELETE, or UPDATE
1b0d0 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20   statement.  In 
1b0e0 73 74 61 6e 64 61 72 64 20 53 51 4c 2c 0a 2a 2a  standard SQL,.**
1b0f0 20 73 75 63 68 20 61 20 74 61 62 6c 65 20 6d 75   such a table mu
1b100 73 74 20 62 65 20 61 20 73 69 6d 70 6c 65 20 6e  st be a simple n
1b110 61 6d 65 3a 20 49 44 2e 20 20 42 75 74 20 69 6e  ame: ID.  But in
1b120 20 53 51 4c 69 74 65 2c 20 74 68 65 20 74 61 62   SQLite, the tab
1b130 6c 65 20 63 61 6e 0a 2a 2a 20 6e 6f 77 20 62 65  le can.** now be
1b140 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 61   identified by a
1b150 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 2c 20   database name, 
1b160 61 20 64 6f 74 2c 20 74 68 65 6e 20 74 68 65 20  a dot, then the 
1b170 74 61 62 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 49  table name: ID.I
1b180 44 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6a 6f 69  D..**.** The joi
1b190 6e 74 79 70 65 20 73 74 61 72 74 73 20 6f 75 74  ntype starts out
1b1a0 20 73 68 6f 77 69 6e 67 20 74 68 65 20 6a 6f 69   showing the joi
1b1b0 6e 20 74 79 70 65 20 62 65 74 77 65 65 6e 20 74  n type between t
1b1c0 68 65 20 63 75 72 72 65 6e 74 20 74 61 62 6c 65  he current table
1b1d0 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6e 65 78 74  .** and the next
1b1e0 20 74 61 62 6c 65 20 6f 6e 20 74 68 65 20 6c 69   table on the li
1b1f0 73 74 2e 20 20 54 68 65 20 70 61 72 73 65 72 20  st.  The parser 
1b200 62 75 69 6c 64 73 20 74 68 65 20 6c 69 73 74 20  builds the list 
1b210 74 68 69 73 20 77 61 79 2e 0a 2a 2a 20 42 75 74  this way..** But
1b220 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 53   sqlite3SrcListS
1b230 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 29 20 6c  hiftJoinType() l
1b240 61 74 65 72 20 73 68 69 66 74 73 20 74 68 65 20  ater shifts the 
1b250 6a 6f 69 6e 74 79 70 65 73 20 73 6f 20 74 68 61  jointypes so tha
1b260 74 20 65 61 63 68 0a 2a 2a 20 6a 6f 69 6e 74 79  t each.** jointy
1b270 70 65 20 65 78 70 72 65 73 73 65 73 20 74 68 65  pe expresses the
1b280 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20 74 68   join between th
1b290 65 20 74 61 62 6c 65 20 61 6e 64 20 74 68 65 20  e table and the 
1b2a0 70 72 65 76 69 6f 75 73 20 74 61 62 6c 65 2e 0a  previous table..
1b2b0 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 63 6f 6c  **.** In the col
1b2c0 55 73 65 64 20 66 69 65 6c 64 2c 20 74 68 65 20  Used field, the 
1b2d0 68 69 67 68 2d 6f 72 64 65 72 20 62 69 74 20 28  high-order bit (
1b2e0 62 69 74 20 36 33 29 20 69 73 20 73 65 74 20 69  bit 63) is set i
1b2f0 66 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20 63  f the table.** c
1b300 6f 6e 74 61 69 6e 73 20 6d 6f 72 65 20 74 68 61  ontains more tha
1b310 6e 20 36 33 20 63 6f 6c 75 6d 6e 73 20 61 6e 64  n 63 columns and
1b320 20 74 68 65 20 36 34 2d 74 68 20 6f 72 20 6c 61   the 64-th or la
1b330 74 65 72 20 63 6f 6c 75 6d 6e 20 69 73 20 75 73  ter column is us
1b340 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 72  ed..*/.struct Sr
1b350 63 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e 53  cList {.  int nS
1b360 72 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  rc;        /* Nu
1b370 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73 20 6f  mber of tables o
1b380 72 20 73 75 62 71 75 65 72 69 65 73 20 69 6e 20  r subqueries in 
1b390 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
1b3a0 2a 2f 0a 20 20 75 33 32 20 6e 41 6c 6c 6f 63 3b  */.  u32 nAlloc;
1b3b0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1b3c0 6f 66 20 65 6e 74 72 69 65 73 20 61 6c 6c 6f 63  of entries alloc
1b3d0 61 74 65 64 20 69 6e 20 61 5b 5d 20 62 65 6c 6f  ated in a[] belo
1b3e0 77 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 53 72  w */.  struct Sr
1b3f0 63 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20  cList_item {.   
1b400 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61   Schema *pSchema
1b410 3b 20 20 2f 2a 20 53 63 68 65 6d 61 20 74 6f 20  ;  /* Schema to 
1b420 77 68 69 63 68 20 74 68 69 73 20 69 74 65 6d 20  which this item 
1b430 69 73 20 66 69 78 65 64 20 2a 2f 0a 20 20 20 20  is fixed */.    
1b440 63 68 61 72 20 2a 7a 44 61 74 61 62 61 73 65 3b  char *zDatabase;
1b450 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74    /* Name of dat
1b460 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20 74 68  abase holding th
1b470 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  is table */.    
1b480 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
1b490 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65    /* Name of the
1b4a0 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68   table */.    ch
1b4b0 61 72 20 2a 7a 41 6c 69 61 73 3b 20 20 20 20 20  ar *zAlias;     
1b4c0 2f 2a 20 54 68 65 20 22 42 22 20 70 61 72 74 20  /* The "B" part 
1b4d0 6f 66 20 61 20 22 41 20 41 53 20 42 22 20 70 68  of a "A AS B" ph
1b4e0 72 61 73 65 2e 20 20 7a 4e 61 6d 65 20 69 73 20  rase.  zName is 
1b4f0 74 68 65 20 22 41 22 20 2a 2f 0a 20 20 20 20 54  the "A" */.    T
1b500 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20  able *pTab;     
1b510 20 2f 2a 20 41 6e 20 53 51 4c 20 74 61 62 6c 65   /* An SQL table
1b520 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74   corresponding t
1b530 6f 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 53  o zName */.    S
1b540 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20  elect *pSelect; 
1b550 20 2f 2a 20 41 20 53 45 4c 45 43 54 20 73 74 61   /* A SELECT sta
1b560 74 65 6d 65 6e 74 20 75 73 65 64 20 69 6e 20 70  tement used in p
1b570 6c 61 63 65 20 6f 66 20 61 20 74 61 62 6c 65 20  lace of a table 
1b580 6e 61 6d 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20  name */.    int 
1b590 61 64 64 72 46 69 6c 6c 53 75 62 3b 20 20 2f 2a  addrFillSub;  /*
1b5a0 20 41 64 64 72 65 73 73 20 6f 66 20 73 75 62 72   Address of subr
1b5b0 6f 75 74 69 6e 65 20 74 6f 20 6d 61 6e 69 66 65  outine to manife
1b5c0 73 74 20 61 20 73 75 62 71 75 65 72 79 20 2a 2f  st a subquery */
1b5d0 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65 74 75  .    int regRetu
1b5e0 72 6e 3b 20 20 20 20 2f 2a 20 52 65 67 69 73 74  rn;    /* Regist
1b5f0 65 72 20 68 6f 6c 64 69 6e 67 20 72 65 74 75 72  er holding retur
1b600 6e 20 61 64 64 72 65 73 73 20 6f 66 20 61 64 64  n address of add
1b610 72 46 69 6c 6c 53 75 62 20 2a 2f 0a 20 20 20 20  rFillSub */.    
1b620 69 6e 74 20 72 65 67 52 65 73 75 6c 74 3b 20 20  int regResult;  
1b630 20 20 2f 2a 20 52 65 67 69 73 74 65 72 73 20 68    /* Registers h
1b640 6f 6c 64 69 6e 67 20 72 65 73 75 6c 74 73 20 6f  olding results o
1b650 66 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a  f a co-routine *
1b660 2f 0a 20 20 20 20 73 74 72 75 63 74 20 7b 0a 20  /.    struct {. 
1b670 20 20 20 20 20 75 38 20 6a 6f 69 6e 74 79 70 65       u8 jointype
1b680 3b 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20 6f  ;      /* Type o
1b690 66 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20 74  f join between t
1b6a0 68 69 73 20 74 61 62 6c 65 20 61 6e 64 20 74 68  his table and th
1b6b0 65 20 70 72 65 76 69 6f 75 73 20 2a 2f 0a 20 20  e previous */.  
1b6c0 20 20 20 20 75 6e 73 69 67 6e 65 64 20 6e 6f 74      unsigned not
1b6d0 49 6e 64 65 78 65 64 20 3a 31 3b 20 20 20 20 2f  Indexed :1;    /
1b6e0 2a 20 54 72 75 65 20 69 66 20 74 68 65 72 65 20  * True if there 
1b6f0 69 73 20 61 20 4e 4f 54 20 49 4e 44 45 58 45 44  is a NOT INDEXED
1b700 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 20   clause */.     
1b710 20 75 6e 73 69 67 6e 65 64 20 69 73 49 6e 64 65   unsigned isInde
1b720 78 65 64 42 79 20 3a 31 3b 20 20 20 2f 2a 20 54  xedBy :1;   /* T
1b730 72 75 65 20 69 66 20 74 68 65 72 65 20 69 73 20  rue if there is 
1b740 61 6e 20 49 4e 44 45 58 45 44 20 42 59 20 63 6c  an INDEXED BY cl
1b750 61 75 73 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e  ause */.      un
1b760 73 69 67 6e 65 64 20 69 73 54 61 62 46 75 6e 63  signed isTabFunc
1b770 20 3a 31 3b 20 20 20 20 20 2f 2a 20 54 72 75 65   :1;     /* True
1b780 20 69 66 20 74 61 62 6c 65 2d 76 61 6c 75 65 64   if table-valued
1b790 2d 66 75 6e 63 74 69 6f 6e 20 73 79 6e 74 61 78  -function syntax
1b7a0 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e   */.      unsign
1b7b0 65 64 20 69 73 43 6f 72 72 65 6c 61 74 65 64 20  ed isCorrelated 
1b7c0 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69 66 20  :1;  /* True if 
1b7d0 73 75 62 2d 71 75 65 72 79 20 69 73 20 63 6f 72  sub-query is cor
1b7e0 72 65 6c 61 74 65 64 20 2a 2f 0a 20 20 20 20 20  related */.     
1b7f0 20 75 6e 73 69 67 6e 65 64 20 76 69 61 43 6f 72   unsigned viaCor
1b800 6f 75 74 69 6e 65 20 3a 31 3b 20 20 2f 2a 20 49  outine :1;  /* I
1b810 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73 20 61 20  mplemented as a 
1b820 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20  co-routine */.  
1b830 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73 52      unsigned isR
1b840 65 63 75 72 73 69 76 65 20 3a 31 3b 20 20 20 2f  ecursive :1;   /
1b850 2a 20 54 72 75 65 20 66 6f 72 20 72 65 63 75 72  * True for recur
1b860 73 69 76 65 20 72 65 66 65 72 65 6e 63 65 20 69  sive reference i
1b870 6e 20 57 49 54 48 20 2a 2f 0a 20 20 20 20 7d 20  n WITH */.    } 
1b880 66 67 3b 0a 20 20 20 20 69 6e 74 20 69 43 75 72  fg;.    int iCur
1b890 73 6f 72 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  sor;      /* The
1b8a0 20 56 44 42 45 20 63 75 72 73 6f 72 20 6e 75 6d   VDBE cursor num
1b8b0 62 65 72 20 75 73 65 64 20 74 6f 20 61 63 63 65  ber used to acce
1b8c0 73 73 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  ss this table */
1b8d0 0a 20 20 20 20 45 78 70 72 20 2a 70 4f 6e 3b 20  .    Expr *pOn; 
1b8e0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 4f 4e         /* The ON
1b8f0 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69   clause of a joi
1b900 6e 20 2a 2f 0a 20 20 20 20 49 64 4c 69 73 74 20  n */.    IdList 
1b910 2a 70 55 73 69 6e 67 3b 20 20 20 2f 2a 20 54 68  *pUsing;   /* Th
1b920 65 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20 6f  e USING clause o
1b930 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20  f a join */.    
1b940 42 69 74 6d 61 73 6b 20 63 6f 6c 55 73 65 64 3b  Bitmask colUsed;
1b950 20 20 2f 2a 20 42 69 74 20 4e 20 28 31 3c 3c 4e    /* Bit N (1<<N
1b960 29 20 73 65 74 20 69 66 20 63 6f 6c 75 6d 6e 20  ) set if column 
1b970 4e 20 6f 66 20 70 54 61 62 20 69 73 20 75 73 65  N of pTab is use
1b980 64 20 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b  d */.    union {
1b990 0a 20 20 20 20 20 20 63 68 61 72 20 2a 7a 49 6e  .      char *zIn
1b9a0 64 65 78 65 64 42 79 3b 20 20 20 20 2f 2a 20 49  dexedBy;    /* I
1b9b0 64 65 6e 74 69 66 69 65 72 20 66 72 6f 6d 20 22  dentifier from "
1b9c0 49 4e 44 45 58 45 44 20 42 59 20 3c 7a 49 6e 64  INDEXED BY <zInd
1b9d0 65 78 3e 22 20 63 6c 61 75 73 65 20 2a 2f 0a 20  ex>" clause */. 
1b9e0 20 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70       ExprList *p
1b9f0 46 75 6e 63 41 72 67 3b 20 20 2f 2a 20 41 72 67  FuncArg;  /* Arg
1ba00 75 6d 65 6e 74 73 20 74 6f 20 74 61 62 6c 65 2d  uments to table-
1ba10 76 61 6c 75 65 64 2d 66 75 6e 63 74 69 6f 6e 20  valued-function 
1ba20 2a 2f 0a 20 20 20 20 7d 20 75 31 3b 0a 20 20 20  */.    } u1;.   
1ba30 20 49 6e 64 65 78 20 2a 70 49 42 49 6e 64 65 78   Index *pIBIndex
1ba40 3b 20 20 2f 2a 20 49 6e 64 65 78 20 73 74 72 75  ;  /* Index stru
1ba50 63 74 75 72 65 20 63 6f 72 72 65 73 70 6f 6e 64  cture correspond
1ba60 69 6e 67 20 74 6f 20 75 31 2e 7a 49 6e 64 65 78  ing to u1.zIndex
1ba70 65 64 42 79 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d  edBy */.  } a[1]
1ba80 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
1ba90 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65   One entry for e
1baa0 61 63 68 20 69 64 65 6e 74 69 66 69 65 72 20 6f  ach identifier o
1bab0 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b  n the list */.};
1bac0 0a 0a 2f 2a 0a 2a 2a 20 50 65 72 6d 69 74 74 65  ../*.** Permitte
1bad0 64 20 76 61 6c 75 65 73 20 6f 66 20 74 68 65 20  d values of the 
1bae0 53 72 63 4c 69 73 74 2e 61 2e 6a 6f 69 6e 74 79  SrcList.a.jointy
1baf0 70 65 20 66 69 65 6c 64 0a 2a 2f 0a 23 64 65 66  pe field.*/.#def
1bb00 69 6e 65 20 4a 54 5f 49 4e 4e 45 52 20 20 20 20  ine JT_INNER    
1bb10 20 30 78 30 30 30 31 20 20 20 20 2f 2a 20 41 6e   0x0001    /* An
1bb20 79 20 6b 69 6e 64 20 6f 66 20 69 6e 6e 65 72 20  y kind of inner 
1bb30 6f 72 20 63 72 6f 73 73 20 6a 6f 69 6e 20 2a 2f  or cross join */
1bb40 0a 23 64 65 66 69 6e 65 20 4a 54 5f 43 52 4f 53  .#define JT_CROS
1bb50 53 20 20 20 20 20 30 78 30 30 30 32 20 20 20 20  S     0x0002    
1bb60 2f 2a 20 45 78 70 6c 69 63 69 74 20 75 73 65 20  /* Explicit use 
1bb70 6f 66 20 74 68 65 20 43 52 4f 53 53 20 6b 65 79  of the CROSS key
1bb80 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  word */.#define 
1bb90 4a 54 5f 4e 41 54 55 52 41 4c 20 20 20 30 78 30  JT_NATURAL   0x0
1bba0 30 30 34 20 20 20 20 2f 2a 20 54 72 75 65 20 66  004    /* True f
1bbb0 6f 72 20 61 20 22 6e 61 74 75 72 61 6c 22 20 6a  or a "natural" j
1bbc0 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  oin */.#define J
1bbd0 54 5f 4c 45 46 54 20 20 20 20 20 20 30 78 30 30  T_LEFT      0x00
1bbe0 30 38 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 75  08    /* Left ou
1bbf0 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66  ter join */.#def
1bc00 69 6e 65 20 4a 54 5f 52 49 47 48 54 20 20 20 20  ine JT_RIGHT    
1bc10 20 30 78 30 30 31 30 20 20 20 20 2f 2a 20 52 69   0x0010    /* Ri
1bc20 67 68 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a  ght outer join *
1bc30 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4f 55 54  /.#define JT_OUT
1bc40 45 52 20 20 20 20 20 30 78 30 30 32 30 20 20 20  ER     0x0020   
1bc50 20 2f 2a 20 54 68 65 20 22 4f 55 54 45 52 22 20   /* The "OUTER" 
1bc60 6b 65 79 77 6f 72 64 20 69 73 20 70 72 65 73 65  keyword is prese
1bc70 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  nt */.#define JT
1bc80 5f 45 52 52 4f 52 20 20 20 20 20 30 78 30 30 34  _ERROR     0x004
1bc90 30 20 20 20 20 2f 2a 20 75 6e 6b 6e 6f 77 6e 20  0    /* unknown 
1bca0 6f 72 20 75 6e 73 75 70 70 6f 72 74 65 64 20 6a  or unsupported j
1bcb0 6f 69 6e 20 74 79 70 65 20 2a 2f 0a 0a 0a 2f 2a  oin type */.../*
1bcc0 0a 2a 2a 20 46 6c 61 67 73 20 61 70 70 72 6f 70  .** Flags approp
1bcd0 72 69 61 74 65 20 66 6f 72 20 74 68 65 20 77 63  riate for the wc
1bce0 74 72 6c 46 6c 61 67 73 20 70 61 72 61 6d 65 74  trlFlags paramet
1bcf0 65 72 20 6f 66 20 73 71 6c 69 74 65 33 57 68 65  er of sqlite3Whe
1bd00 72 65 42 65 67 69 6e 28 29 0a 2a 2a 20 61 6e 64  reBegin().** and
1bd10 20 74 68 65 20 57 68 65 72 65 49 6e 66 6f 2e 77   the WhereInfo.w
1bd20 63 74 72 6c 46 6c 61 67 73 20 6d 65 6d 62 65 72  ctrlFlags member
1bd30 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f  ..**.** Value co
1bd40 6e 73 74 72 61 69 6e 74 73 20 28 65 6e 66 6f 72  nstraints (enfor
1bd50 63 65 64 20 76 69 61 20 61 73 73 65 72 74 28 29  ced via assert()
1bd60 29 3a 0a 2a 2a 20 20 20 20 20 57 48 45 52 45 5f  ):.**     WHERE_
1bd70 55 53 45 5f 4c 49 4d 49 54 20 20 3d 3d 20 53 46  USE_LIMIT  == SF
1bd80 5f 46 69 78 65 64 4c 69 6d 69 74 0a 2a 2f 0a 23  _FixedLimit.*/.#
1bd90 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44  define WHERE_ORD
1bda0 45 52 42 59 5f 4e 4f 52 4d 41 4c 20 20 20 30 78  ERBY_NORMAL   0x
1bdb0 30 30 30 30 20 2f 2a 20 4e 6f 2d 6f 70 20 2a 2f  0000 /* No-op */
1bdc0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
1bdd0 52 44 45 52 42 59 5f 4d 49 4e 20 20 20 20 20 20  RDERBY_MIN      
1bde0 30 78 30 30 30 31 20 2f 2a 20 4f 52 44 45 52 20  0x0001 /* ORDER 
1bdf0 42 59 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f  BY processing fo
1be00 72 20 6d 69 6e 28 29 20 66 75 6e 63 20 2a 2f 0a  r min() func */.
1be10 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52  #define WHERE_OR
1be20 44 45 52 42 59 5f 4d 41 58 20 20 20 20 20 20 30  DERBY_MAX      0
1be30 78 30 30 30 32 20 2f 2a 20 4f 52 44 45 52 20 42  x0002 /* ORDER B
1be40 59 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72  Y processing for
1be50 20 6d 61 78 28 29 20 66 75 6e 63 20 2a 2f 0a 23   max() func */.#
1be60 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45  define WHERE_ONE
1be70 50 41 53 53 5f 44 45 53 49 52 45 44 20 20 30 78  PASS_DESIRED  0x
1be80 30 30 30 34 20 2f 2a 20 57 61 6e 74 20 74 6f 20  0004 /* Want to 
1be90 64 6f 20 6f 6e 65 2d 70 61 73 73 20 55 50 44 41  do one-pass UPDA
1bea0 54 45 2f 44 45 4c 45 54 45 20 2a 2f 0a 23 64 65  TE/DELETE */.#de
1beb0 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50 41  fine WHERE_ONEPA
1bec0 53 53 5f 4d 55 4c 54 49 52 4f 57 20 30 78 30 30  SS_MULTIROW 0x00
1bed0 30 38 20 2f 2a 20 4f 4e 45 50 41 53 53 20 69 73  08 /* ONEPASS is
1bee0 20 6f 6b 20 77 69 74 68 20 6d 75 6c 74 69 70 6c   ok with multipl
1bef0 65 20 72 6f 77 73 20 2a 2f 0a 23 64 65 66 69 6e  e rows */.#defin
1bf00 65 20 57 48 45 52 45 5f 44 55 50 4c 49 43 41 54  e WHERE_DUPLICAT
1bf10 45 53 5f 4f 4b 20 20 20 20 30 78 30 30 31 30 20  ES_OK    0x0010 
1bf20 2f 2a 20 4f 6b 20 74 6f 20 72 65 74 75 72 6e 20  /* Ok to return 
1bf30 61 20 72 6f 77 20 6d 6f 72 65 20 74 68 61 6e 20  a row more than 
1bf40 6f 6e 63 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  once */.#define 
1bf50 57 48 45 52 45 5f 4f 52 5f 53 55 42 43 4c 41 55  WHERE_OR_SUBCLAU
1bf60 53 45 20 20 20 20 20 30 78 30 30 32 30 20 2f 2a  SE     0x0020 /*
1bf70 20 50 72 6f 63 65 73 73 69 6e 67 20 61 20 73 75   Processing a su
1bf80 62 2d 57 48 45 52 45 20 61 73 20 70 61 72 74 20  b-WHERE as part 
1bf90 6f 66 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  of.             
1bfa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bfb0 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65 20           ** the 
1bfc0 4f 52 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20  OR optimization 
1bfd0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
1bfe0 45 5f 47 52 4f 55 50 42 59 20 20 20 20 20 20 20  E_GROUPBY       
1bff0 20 20 20 30 78 30 30 34 30 20 2f 2a 20 70 4f 72     0x0040 /* pOr
1c000 64 65 72 42 79 20 69 73 20 72 65 61 6c 6c 79 20  derBy is really 
1c010 61 20 47 52 4f 55 50 20 42 59 20 2a 2f 0a 23 64  a GROUP BY */.#d
1c020 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54  efine WHERE_DIST
1c030 49 4e 43 54 42 59 20 20 20 20 20 20 20 30 78 30  INCTBY       0x0
1c040 30 38 30 20 2f 2a 20 70 4f 72 64 65 72 62 79 20  080 /* pOrderby 
1c050 69 73 20 72 65 61 6c 6c 79 20 61 20 44 49 53 54  is really a DIST
1c060 49 4e 43 54 20 63 6c 61 75 73 65 20 2a 2f 0a 23  INCT clause */.#
1c070 64 65 66 69 6e 65 20 57 48 45 52 45 5f 57 41 4e  define WHERE_WAN
1c080 54 5f 44 49 53 54 49 4e 43 54 20 20 20 20 30 78  T_DISTINCT    0x
1c090 30 31 30 30 20 2f 2a 20 41 6c 6c 20 6f 75 74 70  0100 /* All outp
1c0a0 75 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 64  ut needs to be d
1c0b0 69 73 74 69 6e 63 74 20 2a 2f 0a 23 64 65 66 69  istinct */.#defi
1c0c0 6e 65 20 57 48 45 52 45 5f 53 4f 52 54 42 59 47  ne WHERE_SORTBYG
1c0d0 52 4f 55 50 20 20 20 20 20 20 30 78 30 32 30 30  ROUP      0x0200
1c0e0 20 2f 2a 20 53 75 70 70 6f 72 74 20 73 71 6c 69   /* Support sqli
1c0f0 74 65 33 57 68 65 72 65 49 73 53 6f 72 74 65 64  te3WhereIsSorted
1c100 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  () */.#define WH
1c110 45 52 45 5f 53 45 45 4b 5f 54 41 42 4c 45 20 20  ERE_SEEK_TABLE  
1c120 20 20 20 20 20 30 78 30 34 30 30 20 2f 2a 20 44       0x0400 /* D
1c130 6f 20 6e 6f 74 20 64 65 66 65 72 20 73 65 65 6b  o not defer seek
1c140 73 20 6f 6e 20 6d 61 69 6e 20 74 61 62 6c 65 20  s on main table 
1c150 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1c160 5f 4f 52 44 45 52 42 59 5f 4c 49 4d 49 54 20 20  _ORDERBY_LIMIT  
1c170 20 20 30 78 30 38 30 30 20 2f 2a 20 4f 52 44 45    0x0800 /* ORDE
1c180 52 42 59 2b 4c 49 4d 49 54 20 6f 6e 20 74 68 65  RBY+LIMIT on the
1c190 20 69 6e 6e 65 72 20 6c 6f 6f 70 20 2a 2f 0a 23   inner loop */.#
1c1a0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 53 45 45  define WHERE_SEE
1c1b0 4b 5f 55 4e 49 51 5f 54 41 42 4c 45 20 20 30 78  K_UNIQ_TABLE  0x
1c1c0 31 30 30 30 20 2f 2a 20 44 6f 20 6e 6f 74 20 64  1000 /* Do not d
1c1d0 65 66 65 72 20 73 65 65 6b 73 20 69 66 20 75 6e  efer seeks if un
1c1e0 69 71 75 65 20 2a 2f 0a 20 20 20 20 20 20 20 20  ique */.        
1c1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c200 2f 2a 20 20 20 20 20 30 78 32 30 30 30 20 20 20  /*     0x2000   
1c210 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 75   not currently u
1c220 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  sed */.#define W
1c230 48 45 52 45 5f 55 53 45 5f 4c 49 4d 49 54 20 20  HERE_USE_LIMIT  
1c240 20 20 20 20 20 20 30 78 34 30 30 30 20 2f 2a 20        0x4000 /* 
1c250 55 73 65 20 74 68 65 20 4c 49 4d 49 54 20 69 6e  Use the LIMIT in
1c260 20 63 6f 73 74 20 65 73 74 69 6d 61 74 65 73 20   cost estimates 
1c270 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  */.             
1c280 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20             /*   
1c290 20 20 30 78 38 30 30 30 20 20 20 20 6e 6f 74 20    0x8000    not 
1c2a0 63 75 72 72 65 6e 74 6c 79 20 75 73 65 64 20 2a  currently used *
1c2b0 2f 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 72 65  /../* Allowed re
1c2c0 74 75 72 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d  turn values from
1c2d0 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 44   sqlite3WhereIsD
1c2e0 69 73 74 69 6e 63 74 28 29 0a 2a 2f 0a 23 64 65  istinct().*/.#de
1c2f0 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49  fine WHERE_DISTI
1c300 4e 43 54 5f 4e 4f 4f 50 20 20 20 20 20 20 30 20  NCT_NOOP      0 
1c310 20 2f 2a 20 44 49 53 54 49 4e 43 54 20 6b 65 79   /* DISTINCT key
1c320 77 6f 72 64 20 6e 6f 74 20 75 73 65 64 20 2a 2f  word not used */
1c330 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44  .#define WHERE_D
1c340 49 53 54 49 4e 43 54 5f 55 4e 49 51 55 45 20 20  ISTINCT_UNIQUE  
1c350 20 20 31 20 20 2f 2a 20 4e 6f 20 64 75 70 6c 69    1  /* No dupli
1c360 63 61 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  cates */.#define
1c370 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f   WHERE_DISTINCT_
1c380 4f 52 44 45 52 45 44 20 20 20 32 20 20 2f 2a 20  ORDERED   2  /* 
1c390 41 6c 6c 20 64 75 70 6c 69 63 61 74 65 73 20 61  All duplicates a
1c3a0 72 65 20 61 64 6a 61 63 65 6e 74 20 2a 2f 0a 23  re adjacent */.#
1c3b0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53  define WHERE_DIS
1c3c0 54 49 4e 43 54 5f 55 4e 4f 52 44 45 52 45 44 20  TINCT_UNORDERED 
1c3d0 33 20 20 2f 2a 20 44 75 70 6c 69 63 61 74 65 73  3  /* Duplicates
1c3e0 20 61 72 65 20 73 63 61 74 74 65 72 65 64 20 2a   are scattered *
1c3f0 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e 61 6d 65 43  /../*.** A NameC
1c400 6f 6e 74 65 78 74 20 64 65 66 69 6e 65 73 20 61  ontext defines a
1c410 20 63 6f 6e 74 65 78 74 20 69 6e 20 77 68 69 63   context in whic
1c420 68 20 74 6f 20 72 65 73 6f 6c 76 65 20 74 61 62  h to resolve tab
1c430 6c 65 20 61 6e 64 20 63 6f 6c 75 6d 6e 0a 2a 2a  le and column.**
1c440 20 6e 61 6d 65 73 2e 20 20 54 68 65 20 63 6f 6e   names.  The con
1c450 74 65 78 74 20 63 6f 6e 73 69 73 74 73 20 6f 66  text consists of
1c460 20 61 20 6c 69 73 74 20 6f 66 20 74 61 62 6c 65   a list of table
1c470 73 20 28 74 68 65 20 70 53 72 63 4c 69 73 74 29  s (the pSrcList)
1c480 20 66 69 65 6c 64 20 61 6e 64 0a 2a 2a 20 61 20   field and.** a 
1c490 6c 69 73 74 20 6f 66 20 6e 61 6d 65 64 20 65 78  list of named ex
1c4a0 70 72 65 73 73 69 6f 6e 20 28 70 45 4c 69 73 74  pression (pEList
1c4b0 29 2e 20 20 54 68 65 20 6e 61 6d 65 64 20 65 78  ).  The named ex
1c4c0 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 20 6d 61  pression list ma
1c4d0 79 0a 2a 2a 20 62 65 20 4e 55 4c 4c 2e 20 20 54  y.** be NULL.  T
1c4e0 68 65 20 70 53 72 63 20 63 6f 72 72 65 73 70 6f  he pSrc correspo
1c4f0 6e 64 73 20 74 6f 20 74 68 65 20 46 52 4f 4d 20  nds to the FROM 
1c500 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45  clause of a SELE
1c510 43 54 20 6f 72 0a 2a 2a 20 74 6f 20 74 68 65 20  CT or.** to the 
1c520 74 61 62 6c 65 20 62 65 69 6e 67 20 6f 70 65 72  table being oper
1c530 61 74 65 64 20 6f 6e 20 62 79 20 49 4e 53 45 52  ated on by INSER
1c540 54 2c 20 55 50 44 41 54 45 2c 20 6f 72 20 44 45  T, UPDATE, or DE
1c550 4c 45 54 45 2e 20 20 54 68 65 0a 2a 2a 20 70 45  LETE.  The.** pE
1c560 4c 69 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 73  List corresponds
1c570 20 74 6f 20 74 68 65 20 72 65 73 75 6c 74 20 73   to the result s
1c580 65 74 20 6f 66 20 61 20 53 45 4c 45 43 54 20 61  et of a SELECT a
1c590 6e 64 20 69 73 20 4e 55 4c 4c 20 66 6f 72 0a 2a  nd is NULL for.*
1c5a0 2a 20 6f 74 68 65 72 20 73 74 61 74 65 6d 65 6e  * other statemen
1c5b0 74 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65 43 6f  ts..**.** NameCo
1c5c0 6e 74 65 78 74 73 20 63 61 6e 20 62 65 20 6e 65  ntexts can be ne
1c5d0 73 74 65 64 2e 20 20 57 68 65 6e 20 72 65 73 6f  sted.  When reso
1c5e0 6c 76 69 6e 67 20 6e 61 6d 65 73 2c 20 74 68 65  lving names, the
1c5f0 20 69 6e 6e 65 72 2d 6d 6f 73 74 0a 2a 2a 20 63   inner-most.** c
1c600 6f 6e 74 65 78 74 20 69 73 20 73 65 61 72 63 68  ontext is search
1c610 65 64 20 66 69 72 73 74 2e 20 20 49 66 20 6e 6f  ed first.  If no
1c620 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c   match is found,
1c630 20 74 68 65 20 6e 65 78 74 20 6f 75 74 65 72 0a   the next outer.
1c640 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73 20 63 68  ** context is ch
1c650 65 63 6b 65 64 2e 20 20 49 66 20 74 68 65 72 65  ecked.  If there
1c660 20 69 73 20 73 74 69 6c 6c 20 6e 6f 20 6d 61 74   is still no mat
1c670 63 68 2c 20 74 68 65 20 6e 65 78 74 20 63 6f 6e  ch, the next con
1c680 74 65 78 74 0a 2a 2a 20 69 73 20 63 68 65 63 6b  text.** is check
1c690 65 64 2e 20 20 54 68 69 73 20 70 72 6f 63 65 73  ed.  This proces
1c6a0 73 20 63 6f 6e 74 69 6e 75 65 73 20 75 6e 74 69  s continues unti
1c6b0 6c 20 65 69 74 68 65 72 20 61 20 6d 61 74 63 68  l either a match
1c6c0 20 69 73 20 66 6f 75 6e 64 0a 2a 2a 20 6f 72 20   is found.** or 
1c6d0 61 6c 6c 20 63 6f 6e 74 65 78 74 73 20 61 72 65  all contexts are
1c6e0 20 63 68 65 63 6b 2e 20 20 57 68 65 6e 20 61 20   check.  When a 
1c6f0 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20  match is found, 
1c700 74 68 65 20 6e 52 65 66 20 6d 65 6d 62 65 72 20  the nRef member 
1c710 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 78  of.** the contex
1c720 74 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  t containing the
1c730 20 6d 61 74 63 68 20 69 73 20 69 6e 63 72 65 6d   match is increm
1c740 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 45 61 63  ented..**.** Eac
1c750 68 20 73 75 62 71 75 65 72 79 20 67 65 74 73 20  h subquery gets 
1c760 61 20 6e 65 77 20 4e 61 6d 65 43 6f 6e 74 65 78  a new NameContex
1c770 74 2e 20 20 54 68 65 20 70 4e 65 78 74 20 66 69  t.  The pNext fi
1c780 65 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20 74 68  eld points to th
1c790 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74  e.** NameContext
1c7a0 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20 71   in the parent q
1c7b0 75 65 72 79 2e 20 20 54 68 75 73 20 74 68 65 20  uery.  Thus the 
1c7c0 70 72 6f 63 65 73 73 20 6f 66 20 73 63 61 6e 6e  process of scann
1c7d0 69 6e 67 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43  ing the.** NameC
1c7e0 6f 6e 74 65 78 74 20 6c 69 73 74 20 63 6f 72 72  ontext list corr
1c7f0 65 73 70 6f 6e 64 73 20 74 6f 20 73 65 61 72 63  esponds to searc
1c800 68 69 6e 67 20 74 68 72 6f 75 67 68 20 73 75 63  hing through suc
1c810 63 65 73 73 69 76 65 6c 79 20 6f 75 74 65 72 0a  cessively outer.
1c820 2a 2a 20 73 75 62 71 75 65 72 69 65 73 20 6c 6f  ** subqueries lo
1c830 6f 6b 69 6e 67 20 66 6f 72 20 61 20 6d 61 74 63  oking for a matc
1c840 68 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4e 61 6d  h..*/.struct Nam
1c850 65 43 6f 6e 74 65 78 74 20 7b 0a 20 20 50 61 72  eContext {.  Par
1c860 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20  se *pParse;     
1c870 20 20 2f 2a 20 54 68 65 20 70 61 72 73 65 72 20    /* The parser 
1c880 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53  */.  SrcList *pS
1c890 72 63 4c 69 73 74 3b 20 20 20 2f 2a 20 4f 6e 65  rcList;   /* One
1c8a0 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65 73 20   or more tables 
1c8b0 75 73 65 64 20 74 6f 20 72 65 73 6f 6c 76 65 20  used to resolve 
1c8c0 6e 61 6d 65 73 20 2a 2f 0a 20 20 75 6e 69 6f 6e  names */.  union
1c8d0 20 7b 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20   {.    ExprList 
1c8e0 2a 70 45 4c 69 73 74 3b 20 20 20 20 2f 2a 20 4f  *pEList;    /* O
1c8f0 70 74 69 6f 6e 61 6c 20 6c 69 73 74 20 6f 66 20  ptional list of 
1c900 72 65 73 75 6c 74 2d 73 65 74 20 63 6f 6c 75 6d  result-set colum
1c910 6e 73 20 2a 2f 0a 20 20 20 20 41 67 67 49 6e 66  ns */.    AggInf
1c920 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20 2f  o *pAggInfo;   /
1c930 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  * Information ab
1c940 6f 75 74 20 61 67 67 72 65 67 61 74 65 73 20 61  out aggregates a
1c950 74 20 74 68 69 73 20 6c 65 76 65 6c 20 2a 2f 0a  t this level */.
1c960 20 20 20 20 55 70 73 65 72 74 20 2a 70 55 70 73      Upsert *pUps
1c970 65 72 74 3b 20 20 20 20 20 2f 2a 20 4f 4e 20 43  ert;     /* ON C
1c980 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 69  ONFLICT clause i
1c990 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20  nformation from 
1c9a0 61 6e 20 75 70 73 65 72 74 20 2a 2f 0a 20 20 7d  an upsert */.  }
1c9b0 20 75 4e 43 3b 0a 20 20 4e 61 6d 65 43 6f 6e 74   uNC;.  NameCont
1c9c0 65 78 74 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20  ext *pNext;  /* 
1c9d0 4e 65 78 74 20 6f 75 74 65 72 20 6e 61 6d 65 20  Next outer name 
1c9e0 63 6f 6e 74 65 78 74 2e 20 20 4e 55 4c 4c 20 66  context.  NULL f
1c9f0 6f 72 20 6f 75 74 65 72 6d 6f 73 74 20 2a 2f 0a  or outermost */.
1ca00 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20    int nRef;     
1ca10 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1ca20 20 6f 66 20 6e 61 6d 65 73 20 72 65 73 6f 6c 76   of names resolv
1ca30 65 64 20 62 79 20 74 68 69 73 20 63 6f 6e 74 65  ed by this conte
1ca40 78 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72  xt */.  int nErr
1ca50 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1ca60 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73  Number of errors
1ca70 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 77 68 69   encountered whi
1ca80 6c 65 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d  le resolving nam
1ca90 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 63 46 6c  es */.  u16 ncFl
1caa0 61 67 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ags;         /* 
1cab0 5a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 4e 43 5f  Zero or more NC_
1cac0 2a 20 66 6c 61 67 73 20 64 65 66 69 6e 65 64 20  * flags defined 
1cad0 62 65 6c 6f 77 20 2a 2f 0a 20 20 53 65 6c 65 63  below */.  Selec
1cae0 74 20 2a 70 57 69 6e 53 65 6c 65 63 74 3b 20 20  t *pWinSelect;  
1caf0 2f 2a 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  /* SELECT statem
1cb00 65 6e 74 20 66 6f 72 20 61 6e 79 20 77 69 6e 64  ent for any wind
1cb10 6f 77 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a  ow functions */.
1cb20 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  };../*.** Allowe
1cb30 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65  d values for the
1cb40 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2c 20 6e 63   NameContext, nc
1cb50 46 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a  Flags field..**.
1cb60 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61  ** Value constra
1cb70 69 6e 74 73 20 28 61 6c 6c 20 63 68 65 63 6b 65  ints (all checke
1cb80 64 20 76 69 61 20 61 73 73 65 72 74 28 29 29 3a  d via assert()):
1cb90 0a 2a 2a 20 20 20 20 4e 43 5f 48 61 73 41 67 67  .**    NC_HasAgg
1cba0 20 20 20 20 3d 3d 20 53 46 5f 48 61 73 41 67 67      == SF_HasAgg
1cbb0 0a 2a 2a 20 20 20 20 4e 43 5f 4d 69 6e 4d 61 78  .**    NC_MinMax
1cbc0 41 67 67 20 3d 3d 20 53 46 5f 4d 69 6e 4d 61 78  Agg == SF_MinMax
1cbd0 41 67 67 20 3d 3d 20 53 51 4c 49 54 45 5f 46 55  Agg == SQLITE_FU
1cbe0 4e 43 5f 4d 49 4e 4d 41 58 0a 2a 2a 0a 2a 2f 0a  NC_MINMAX.**.*/.
1cbf0 23 64 65 66 69 6e 65 20 4e 43 5f 41 6c 6c 6f 77  #define NC_Allow
1cc00 41 67 67 20 20 30 78 30 30 30 31 20 20 2f 2a 20  Agg  0x0001  /* 
1cc10 41 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  Aggregate functi
1cc20 6f 6e 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 20  ons are allowed 
1cc30 68 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  here */.#define 
1cc40 4e 43 5f 50 61 72 74 49 64 78 20 20 20 30 78 30  NC_PartIdx   0x0
1cc50 30 30 32 20 20 2f 2a 20 54 72 75 65 20 69 66 20  002  /* True if 
1cc60 72 65 73 6f 6c 76 69 6e 67 20 61 20 70 61 72 74  resolving a part
1cc70 69 61 6c 20 69 6e 64 65 78 20 57 48 45 52 45 20  ial index WHERE 
1cc80 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 73  */.#define NC_Is
1cc90 43 68 65 63 6b 20 20 20 30 78 30 30 30 34 20 20  Check   0x0004  
1cca0 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c  /* True if resol
1ccb0 76 69 6e 67 20 6e 61 6d 65 73 20 69 6e 20 61 20  ving names in a 
1ccc0 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74  CHECK constraint
1ccd0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49   */.#define NC_I
1cce0 6e 41 67 67 46 75 6e 63 20 30 78 30 30 30 38 20  nAggFunc 0x0008 
1ccf0 20 2f 2a 20 54 72 75 65 20 69 66 20 61 6e 61 6c   /* True if anal
1cd00 79 7a 69 6e 67 20 61 72 67 75 6d 65 6e 74 73 20  yzing arguments 
1cd10 74 6f 20 61 6e 20 61 67 67 20 66 75 6e 63 20 2a  to an agg func *
1cd20 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 48 61 73  /.#define NC_Has
1cd30 41 67 67 20 20 20 20 30 78 30 30 31 30 20 20 2f  Agg    0x0010  /
1cd40 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67  * One or more ag
1cd50 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
1cd60 73 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e  s seen */.#defin
1cd70 65 20 4e 43 5f 49 64 78 45 78 70 72 20 20 20 30  e NC_IdxExpr   0
1cd80 78 30 30 32 30 20 20 2f 2a 20 54 72 75 65 20 69  x0020  /* True i
1cd90 66 20 72 65 73 6f 6c 76 69 6e 67 20 63 6f 6c 75  f resolving colu
1cda0 6d 6e 73 20 6f 66 20 43 52 45 41 54 45 20 49 4e  mns of CREATE IN
1cdb0 44 45 58 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  DEX */.#define N
1cdc0 43 5f 56 61 72 53 65 6c 65 63 74 20 30 78 30 30  C_VarSelect 0x00
1cdd0 34 30 20 20 2f 2a 20 41 20 63 6f 72 72 65 6c 61  40  /* A correla
1cde0 74 65 64 20 73 75 62 71 75 65 72 79 20 68 61 73  ted subquery has
1cdf0 20 62 65 65 6e 20 73 65 65 6e 20 2a 2f 0a 23 64   been seen */.#d
1ce00 65 66 69 6e 65 20 4e 43 5f 55 45 4c 69 73 74 20  efine NC_UEList 
1ce10 20 20 20 30 78 30 30 38 30 20 20 2f 2a 20 54 72     0x0080  /* Tr
1ce20 75 65 20 69 66 20 75 4e 43 2e 70 45 4c 69 73 74  ue if uNC.pEList
1ce30 20 69 73 20 75 73 65 64 20 2a 2f 0a 23 64 65 66   is used */.#def
1ce40 69 6e 65 20 4e 43 5f 55 41 67 67 49 6e 66 6f 20  ine NC_UAggInfo 
1ce50 20 30 78 30 31 30 30 20 20 2f 2a 20 54 72 75 65   0x0100  /* True
1ce60 20 69 66 20 75 4e 43 2e 70 41 67 67 49 6e 66 6f   if uNC.pAggInfo
1ce70 20 69 73 20 75 73 65 64 20 2a 2f 0a 23 64 65 66   is used */.#def
1ce80 69 6e 65 20 4e 43 5f 55 55 70 73 65 72 74 20 20  ine NC_UUpsert  
1ce90 20 30 78 30 32 30 30 20 20 2f 2a 20 54 72 75 65   0x0200  /* True
1cea0 20 69 66 20 75 4e 43 2e 70 55 70 73 65 72 74 20   if uNC.pUpsert 
1ceb0 69 73 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69  is used */.#defi
1cec0 6e 65 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20  ne NC_MinMaxAgg 
1ced0 30 78 31 30 30 30 20 20 2f 2a 20 6d 69 6e 2f 6d  0x1000  /* min/m
1cee0 61 78 20 61 67 67 72 65 67 61 74 65 73 20 73 65  ax aggregates se
1cef0 65 6e 2e 20 20 53 65 65 20 6e 6f 74 65 20 61 62  en.  See note ab
1cf00 6f 76 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  ove */.#define N
1cf10 43 5f 43 6f 6d 70 6c 65 78 20 20 20 30 78 32 30  C_Complex   0x20
1cf20 30 30 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61  00  /* True if a
1cf30 20 66 75 6e 63 74 69 6f 6e 20 6f 72 20 73 75 62   function or sub
1cf40 71 75 65 72 79 20 73 65 65 6e 20 2a 2f 0a 23 64  query seen */.#d
1cf50 65 66 69 6e 65 20 4e 43 5f 41 6c 6c 6f 77 57 69  efine NC_AllowWi
1cf60 6e 20 20 30 78 34 30 30 30 20 20 2f 2a 20 57 69  n  0x4000  /* Wi
1cf70 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 73 20 61  ndow functions a
1cf80 72 65 20 61 6c 6c 6f 77 65 64 20 68 65 72 65 20  re allowed here 
1cf90 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  */../*.** An ins
1cfa0 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
1cfb0 6c 6f 77 69 6e 67 20 6f 62 6a 65 63 74 20 64 65  lowing object de
1cfc0 73 63 72 69 62 65 73 20 61 20 73 69 6e 67 6c 65  scribes a single
1cfd0 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 0a 2a 2a 20   ON CONFLICT.** 
1cfe0 63 6c 61 75 73 65 20 69 6e 20 61 6e 20 75 70 73  clause in an ups
1cff0 65 72 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70  ert..**.** The p
1d000 55 70 73 65 72 74 54 61 72 67 65 74 20 66 69 65  UpsertTarget fie
1d010 6c 64 20 69 73 20 6f 6e 6c 79 20 73 65 74 20 69  ld is only set i
1d020 66 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43  f the ON CONFLIC
1d030 54 20 63 6c 61 75 73 65 20 69 6e 63 6c 75 64 65  T clause include
1d040 73 0a 2a 2a 20 63 6f 6e 66 6c 69 63 74 2d 74 61  s.** conflict-ta
1d050 72 67 65 74 20 63 6c 61 75 73 65 2e 20 20 28 49  rget clause.  (I
1d060 6e 20 22 4f 4e 20 43 4f 4e 46 4c 49 43 54 28 61  n "ON CONFLICT(a
1d070 2c 62 29 22 20 74 68 65 20 22 28 61 2c 62 29 22  ,b)" the "(a,b)"
1d080 20 69 73 20 74 68 65 0a 2a 2a 20 63 6f 6e 66 6c   is the.** confl
1d090 69 63 74 2d 74 61 72 67 65 74 20 63 6c 61 75 73  ict-target claus
1d0a0 65 2e 29 20 20 54 68 65 20 70 55 70 73 65 72 74  e.)  The pUpsert
1d0b0 54 61 72 67 65 74 57 68 65 72 65 20 69 73 20 74  TargetWhere is t
1d0c0 68 65 20 6f 70 74 69 6f 6e 61 6c 0a 2a 2a 20 57  he optional.** W
1d0d0 48 45 52 45 20 63 6c 61 75 73 65 20 75 73 65 64  HERE clause used
1d0e0 20 74 6f 20 69 64 65 6e 74 69 66 79 20 70 61 72   to identify par
1d0f0 74 69 61 6c 20 75 6e 69 71 75 65 20 69 6e 64 65  tial unique inde
1d100 78 65 73 2e 0a 2a 2a 0a 2a 2a 20 70 55 70 73 65  xes..**.** pUpse
1d110 72 74 53 65 74 20 69 73 20 74 68 65 20 6c 69 73  rtSet is the lis
1d120 74 20 6f 66 20 63 6f 6c 75 6d 6e 3d 65 78 70 72  t of column=expr
1d130 20 74 65 72 6d 73 20 6f 66 20 74 68 65 20 55 50   terms of the UP
1d140 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 2e 20  DATE statement. 
1d150 0a 2a 2a 20 54 68 65 20 70 55 70 73 65 72 74 53  .** The pUpsertS
1d160 65 74 20 66 69 65 6c 64 20 69 73 20 4e 55 4c 4c  et field is NULL
1d170 20 66 6f 72 20 61 20 4f 4e 20 43 4f 4e 46 4c 49   for a ON CONFLI
1d180 43 54 20 44 4f 20 4e 4f 54 48 49 4e 47 2e 20 20  CT DO NOTHING.  
1d190 54 68 65 0a 2a 2a 20 70 55 70 73 65 72 74 57 68  The.** pUpsertWh
1d1a0 65 72 65 20 69 73 20 74 68 65 20 57 48 45 52 45  ere is the WHERE
1d1b0 20 63 6c 61 75 73 65 20 66 6f 72 20 74 68 65 20   clause for the 
1d1c0 55 50 44 41 54 45 20 61 6e 64 20 69 73 20 4e 55  UPDATE and is NU
1d1d0 4c 4c 20 69 66 20 74 68 65 0a 2a 2a 20 57 48 45  LL if the.** WHE
1d1e0 52 45 20 63 6c 61 75 73 65 20 69 73 20 6f 6d 69  RE clause is omi
1d1f0 74 74 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tted..*/.struct 
1d200 55 70 73 65 72 74 20 7b 0a 20 20 45 78 70 72 4c  Upsert {.  ExprL
1d210 69 73 74 20 2a 70 55 70 73 65 72 74 54 61 72 67  ist *pUpsertTarg
1d220 65 74 3b 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c  et;  /* Optional
1d230 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 20   description of 
1d240 63 6f 6e 66 6c 69 63 74 69 6e 67 20 69 6e 64 65  conflicting inde
1d250 78 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 55 70  x */.  Expr *pUp
1d260 73 65 72 74 54 61 72 67 65 74 57 68 65 72 65 3b  sertTargetWhere;
1d270 20 2f 2a 20 57 48 45 52 45 20 63 6c 61 75 73 65   /* WHERE clause
1d280 20 66 6f 72 20 70 61 72 74 69 61 6c 20 69 6e 64   for partial ind
1d290 65 78 20 74 61 72 67 65 74 73 20 2a 2f 0a 20 20  ex targets */.  
1d2a0 45 78 70 72 4c 69 73 74 20 2a 70 55 70 73 65 72  ExprList *pUpser
1d2b0 74 53 65 74 3b 20 20 20 20 20 2f 2a 20 54 68 65  tSet;     /* The
1d2c0 20 53 45 54 20 63 6c 61 75 73 65 20 66 72 6f 6d   SET clause from
1d2d0 20 61 6e 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20   an ON CONFLICT 
1d2e0 55 50 44 41 54 45 20 2a 2f 0a 20 20 45 78 70 72  UPDATE */.  Expr
1d2f0 20 2a 70 55 70 73 65 72 74 57 68 65 72 65 3b 20   *pUpsertWhere; 
1d300 20 20 20 20 20 20 2f 2a 20 57 48 45 52 45 20 63        /* WHERE c
1d310 6c 61 75 73 65 20 66 6f 72 20 74 68 65 20 4f 4e  lause for the ON
1d320 20 43 4f 4e 46 4c 49 43 54 20 55 50 44 41 54 45   CONFLICT UPDATE
1d330 20 2a 2f 0a 20 20 2f 2a 20 54 68 65 20 66 69 65   */.  /* The fie
1d340 6c 64 73 20 61 62 6f 76 65 20 63 6f 6d 70 72 69  lds above compri
1d350 73 65 20 74 68 65 20 70 61 72 73 65 20 74 72 65  se the parse tre
1d360 65 20 66 6f 72 20 74 68 65 20 75 70 73 65 72 74  e for the upsert
1d370 20 63 6c 61 75 73 65 2e 0a 20 20 2a 2a 20 54 68   clause..  ** Th
1d380 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 61  e fields below a
1d390 72 65 20 75 73 65 64 20 74 6f 20 74 72 61 6e 73  re used to trans
1d3a0 66 65 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  fer information 
1d3b0 66 72 6f 6d 20 74 68 65 20 49 4e 53 45 52 54 0a  from the INSERT.
1d3c0 20 20 2a 2a 20 70 72 6f 63 65 73 73 69 6e 67 20    ** processing 
1d3d0 64 6f 77 6e 20 69 6e 74 6f 20 74 68 65 20 55 50  down into the UP
1d3e0 44 41 54 45 20 70 72 6f 63 65 73 73 69 6e 67 20  DATE processing 
1d3f0 77 68 69 6c 65 20 67 65 6e 65 72 61 74 69 6e 67  while generating
1d400 20 63 6f 64 65 2e 0a 20 20 2a 2a 20 55 70 73 65   code..  ** Upse
1d410 72 74 20 6f 77 6e 73 20 74 68 65 20 6d 65 6d 6f  rt owns the memo
1d420 72 79 20 61 6c 6c 6f 63 61 74 65 64 20 61 62 6f  ry allocated abo
1d430 76 65 2c 20 62 75 74 20 6e 6f 74 20 74 68 65 20  ve, but not the 
1d440 6d 65 6d 6f 72 79 20 62 65 6c 6f 77 2e 20 2a 2f  memory below. */
1d450 0a 20 20 49 6e 64 65 78 20 2a 70 55 70 73 65 72  .  Index *pUpser
1d460 74 49 64 78 3b 20 20 20 20 20 20 20 20 2f 2a 20  tIdx;        /* 
1d470 43 6f 6e 73 74 72 61 69 6e 74 20 74 68 61 74 20  Constraint that 
1d480 70 55 70 73 65 72 74 54 61 72 67 65 74 20 69 64  pUpsertTarget id
1d490 65 6e 74 69 66 69 65 73 20 2a 2f 0a 20 20 53 72  entifies */.  Sr
1d4a0 63 4c 69 73 74 20 2a 70 55 70 73 65 72 74 53 72  cList *pUpsertSr
1d4b0 63 3b 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65  c;      /* Table
1d4c0 20 74 6f 20 62 65 20 75 70 64 61 74 65 64 20 2a   to be updated *
1d4d0 2f 0a 20 20 69 6e 74 20 72 65 67 44 61 74 61 3b  /.  int regData;
1d4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1d4f0 20 46 69 72 73 74 20 72 65 67 69 73 74 65 72 20   First register 
1d500 68 6f 6c 64 69 6e 67 20 61 72 72 61 79 20 6f 66  holding array of
1d510 20 56 41 4c 55 45 53 20 2a 2f 0a 20 20 69 6e 74   VALUES */.  int
1d520 20 69 44 61 74 61 43 75 72 3b 20 20 20 20 20 20   iDataCur;      
1d530 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20         /* Index 
1d540 6f 66 20 74 68 65 20 64 61 74 61 20 63 75 72 73  of the data curs
1d550 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 69 49 64 78  or */.  int iIdx
1d560 43 75 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Cur;            
1d570 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74 68    /* Index of th
1d580 65 20 66 69 72 73 74 20 69 6e 64 65 78 20 63 75  e first index cu
1d590 72 73 6f 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  rsor */.};../*.*
1d5a0 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
1d5b0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
1d5c0 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e  tructure contain
1d5d0 73 20 61 6c 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  s all informatio
1d5e0 6e 0a 2a 2a 20 6e 65 65 64 65 64 20 74 6f 20 67  n.** needed to g
1d5f0 65 6e 65 72 61 74 65 20 63 6f 64 65 20 66 6f 72  enerate code for
1d600 20 61 20 73 69 6e 67 6c 65 20 53 45 4c 45 43 54   a single SELECT
1d610 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a   statement..**.*
1d620 2a 20 53 65 65 20 74 68 65 20 68 65 61 64 65 72  * See the header
1d630 20 63 6f 6d 6d 65 6e 74 20 6f 6e 20 74 68 65 20   comment on the 
1d640 63 6f 6d 70 75 74 65 4c 69 6d 69 74 52 65 67 69  computeLimitRegi
1d650 73 74 65 72 73 28 29 20 72 6f 75 74 69 6e 65 20  sters() routine 
1d660 66 6f 72 20 61 0a 2a 2a 20 64 65 74 61 69 6c 65  for a.** detaile
1d670 64 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66  d description of
1d680 20 74 68 65 20 6d 65 61 6e 69 6e 67 20 6f 66 20   the meaning of 
1d690 74 68 65 20 69 4c 69 6d 69 74 20 61 6e 64 20 69  the iLimit and i
1d6a0 4f 66 66 73 65 74 20 66 69 65 6c 64 73 2e 0a 2a  Offset fields..*
1d6b0 2a 0a 2a 2a 20 61 64 64 72 4f 70 65 6e 45 70 68  *.** addrOpenEph
1d6c0 6d 5b 5d 20 65 6e 74 72 69 65 73 20 63 6f 6e 74  m[] entries cont
1d6d0 61 69 6e 20 74 68 65 20 61 64 64 72 65 73 73 20  ain the address 
1d6e0 6f 66 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65  of OP_OpenEpheme
1d6f0 72 61 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 20  ral opcodes..** 
1d700 54 68 65 73 65 20 61 64 64 72 65 73 73 65 73 20  These addresses 
1d710 6d 75 73 74 20 62 65 20 73 74 6f 72 65 64 20 73  must be stored s
1d720 6f 20 74 68 61 74 20 77 65 20 63 61 6e 20 67 6f  o that we can go
1d730 20 62 61 63 6b 20 61 6e 64 20 66 69 6c 6c 20 69   back and fill i
1d740 6e 0a 2a 2a 20 74 68 65 20 50 34 5f 4b 45 59 49  n.** the P4_KEYI
1d750 4e 46 4f 20 61 6e 64 20 50 32 20 70 61 72 61 6d  NFO and P2 param
1d760 65 74 65 72 73 20 6c 61 74 65 72 2e 20 20 4e 65  eters later.  Ne
1d770 69 74 68 65 72 20 74 68 65 20 4b 65 79 49 6e 66  ither the KeyInf
1d780 6f 20 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e 75 6d  o nor.** the num
1d790 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
1d7a0 6e 20 50 32 20 63 61 6e 20 62 65 20 63 6f 6d 70  n P2 can be comp
1d7b0 75 74 65 64 20 61 74 20 74 68 65 20 73 61 6d 65  uted at the same
1d7c0 20 74 69 6d 65 0a 2a 2a 20 61 73 20 74 68 65 20   time.** as the 
1d7d0 4f 50 5f 4f 70 65 6e 45 70 68 6d 20 69 6e 73 74  OP_OpenEphm inst
1d7e0 72 75 63 74 69 6f 6e 20 69 73 20 63 6f 64 65 64  ruction is coded
1d7f0 20 62 65 63 61 75 73 65 20 6e 6f 74 0a 2a 2a 20   because not.** 
1d800 65 6e 6f 75 67 68 20 69 6e 66 6f 72 6d 61 74 69  enough informati
1d810 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 63 6f 6d  on about the com
1d820 70 6f 75 6e 64 20 71 75 65 72 79 20 69 73 20 6b  pound query is k
1d830 6e 6f 77 6e 20 61 74 20 74 68 61 74 20 70 6f 69  nown at that poi
1d840 6e 74 2e 0a 2a 2a 20 54 68 65 20 4b 65 79 49 6e  nt..** The KeyIn
1d850 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 54  fo for addrOpenT
1d860 72 61 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d 20 63  ran[0] and [1] c
1d870 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e  ontains collatin
1d880 67 20 73 65 71 75 65 6e 63 65 73 0a 2a 2a 20 66  g sequences.** f
1d890 6f 72 20 74 68 65 20 72 65 73 75 6c 74 20 73 65  or the result se
1d8a0 74 2e 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20  t.  The KeyInfo 
1d8b0 66 6f 72 20 61 64 64 72 4f 70 65 6e 45 70 68 6d  for addrOpenEphm
1d8c0 5b 32 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c  [2] contains col
1d8d0 6c 61 74 69 6e 67 0a 2a 2a 20 73 65 71 75 65 6e  lating.** sequen
1d8e0 63 65 73 20 66 6f 72 20 74 68 65 20 4f 52 44 45  ces for the ORDE
1d8f0 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a  R BY clause..*/.
1d900 73 74 72 75 63 74 20 53 65 6c 65 63 74 20 7b 0a  struct Select {.
1d910 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c 69    ExprList *pELi
1d920 73 74 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20  st;      /* The 
1d930 66 69 65 6c 64 73 20 6f 66 20 74 68 65 20 72 65  fields of the re
1d940 73 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6f 70 3b  sult */.  u8 op;
1d950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d960 20 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b 5f 55   /* One of: TK_U
1d970 4e 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b 5f 49  NION TK_ALL TK_I
1d980 4e 54 45 52 53 45 43 54 20 54 4b 5f 45 58 43 45  NTERSECT TK_EXCE
1d990 50 54 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 6e  PT */.  LogEst n
1d9a0 53 65 6c 65 63 74 52 6f 77 3b 20 20 20 20 20 2f  SelectRow;     /
1d9b0 2a 20 45 73 74 69 6d 61 74 65 64 20 6e 75 6d 62  * Estimated numb
1d9c0 65 72 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77  er of result row
1d9d0 73 20 2a 2f 0a 20 20 75 33 32 20 73 65 6c 46 6c  s */.  u32 selFl
1d9e0 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ags;          /*
1d9f0 20 56 61 72 69 6f 75 73 20 53 46 5f 2a 20 76 61   Various SF_* va
1da00 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20 69 4c  lues */.  int iL
1da10 69 6d 69 74 2c 20 69 4f 66 66 73 65 74 3b 20 20  imit, iOffset;  
1da20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69 73   /* Memory regis
1da30 74 65 72 73 20 68 6f 6c 64 69 6e 67 20 4c 49 4d  ters holding LIM
1da40 49 54 20 26 20 4f 46 46 53 45 54 20 63 6f 75 6e  IT & OFFSET coun
1da50 74 65 72 73 20 2a 2f 0a 20 20 75 33 32 20 73 65  ters */.  u32 se
1da60 6c 49 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  lId;            
1da70 20 2f 2a 20 55 6e 69 71 75 65 20 69 64 65 6e 74   /* Unique ident
1da80 69 66 69 65 72 20 6e 75 6d 62 65 72 20 66 6f 72  ifier number for
1da90 20 74 68 69 73 20 53 45 4c 45 43 54 20 2a 2f 0a   this SELECT */.
1daa0 20 20 69 6e 74 20 61 64 64 72 4f 70 65 6e 45 70    int addrOpenEp
1dab0 68 6d 5b 32 5d 3b 20 20 20 2f 2a 20 4f 50 5f 4f  hm[2];   /* OP_O
1dac0 70 65 6e 45 70 68 65 6d 20 6f 70 63 6f 64 65 73  penEphem opcodes
1dad0 20 72 65 6c 61 74 65 64 20 74 6f 20 74 68 69 73   related to this
1dae0 20 73 65 6c 65 63 74 20 2a 2f 0a 20 20 53 72 63   select */.  Src
1daf0 4c 69 73 74 20 2a 70 53 72 63 3b 20 20 20 20 20  List *pSrc;     
1db00 20 20 20 20 2f 2a 20 54 68 65 20 46 52 4f 4d 20      /* The FROM 
1db10 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72  clause */.  Expr
1db20 20 2a 70 57 68 65 72 65 3b 20 20 20 20 20 20 20   *pWhere;       
1db30 20 20 20 2f 2a 20 54 68 65 20 57 48 45 52 45 20     /* The WHERE 
1db40 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72  clause */.  Expr
1db50 4c 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20  List *pGroupBy; 
1db60 20 20 20 2f 2a 20 54 68 65 20 47 52 4f 55 50 20     /* The GROUP 
1db70 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45  BY clause */.  E
1db80 78 70 72 20 2a 70 48 61 76 69 6e 67 3b 20 20 20  xpr *pHaving;   
1db90 20 20 20 20 20 20 2f 2a 20 54 68 65 20 48 41 56        /* The HAV
1dba0 49 4e 47 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  ING clause */.  
1dbb0 45 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72  ExprList *pOrder
1dbc0 42 79 3b 20 20 20 20 2f 2a 20 54 68 65 20 4f 52  By;    /* The OR
1dbd0 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 2a 2f  DER BY clause */
1dbe0 0a 20 20 53 65 6c 65 63 74 20 2a 70 50 72 69 6f  .  Select *pPrio
1dbf0 72 3b 20 20 20 20 20 20 20 20 2f 2a 20 50 72 69  r;        /* Pri
1dc00 6f 72 20 73 65 6c 65 63 74 20 69 6e 20 61 20 63  or select in a c
1dc10 6f 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74 20 73  ompound select s
1dc20 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 53 65  tatement */.  Se
1dc30 6c 65 63 74 20 2a 70 4e 65 78 74 3b 20 20 20 20  lect *pNext;    
1dc40 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 73 65 6c       /* Next sel
1dc50 65 63 74 20 74 6f 20 74 68 65 20 6c 65 66 74 20  ect to the left 
1dc60 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 2a 2f  in a compound */
1dc70 0a 20 20 45 78 70 72 20 2a 70 4c 69 6d 69 74 3b  .  Expr *pLimit;
1dc80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 49 4d            /* LIM
1dc90 49 54 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e  IT expression. N
1dca0 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73  ULL means not us
1dcb0 65 64 2e 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70  ed. */.  With *p
1dcc0 57 69 74 68 3b 20 20 20 20 20 20 20 20 20 20 20  With;           
1dcd0 2f 2a 20 57 49 54 48 20 63 6c 61 75 73 65 20 61  /* WITH clause a
1dce0 74 74 61 63 68 65 64 20 74 6f 20 74 68 69 73 20  ttached to this 
1dcf0 73 65 6c 65 63 74 2e 20 4f 72 20 4e 55 4c 4c 2e  select. Or NULL.
1dd00 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
1dd10 54 45 5f 4f 4d 49 54 5f 57 49 4e 44 4f 57 46 55  TE_OMIT_WINDOWFU
1dd20 4e 43 0a 20 20 57 69 6e 64 6f 77 20 2a 70 57 69  NC.  Window *pWi
1dd30 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  n;          /* L
1dd40 69 73 74 20 6f 66 20 77 69 6e 64 6f 77 20 66 75  ist of window fu
1dd50 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 57 69 6e  nctions */.  Win
1dd60 64 6f 77 20 2a 70 57 69 6e 44 65 66 6e 3b 20 20  dow *pWinDefn;  
1dd70 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 6e      /* List of n
1dd80 61 6d 65 64 20 77 69 6e 64 6f 77 20 64 65 66 69  amed window defi
1dd90 6e 69 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e 64 69  nitions */.#endi
1dda0 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  f.};../*.** Allo
1ddb0 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 53  wed values for S
1ddc0 65 6c 65 63 74 2e 73 65 6c 46 6c 61 67 73 2e 20  elect.selFlags. 
1ddd0 20 54 68 65 20 22 53 46 22 20 70 72 65 66 69 78   The "SF" prefix
1dde0 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22   stands for.** "
1ddf0 53 65 6c 65 63 74 20 46 6c 61 67 22 2e 0a 2a 2a  Select Flag"..**
1de00 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72  .** Value constr
1de10 61 69 6e 74 73 20 28 61 6c 6c 20 63 68 65 63 6b  aints (all check
1de20 65 64 20 76 69 61 20 61 73 73 65 72 74 28 29 29  ed via assert())
1de30 0a 2a 2a 20 20 20 20 20 53 46 5f 48 61 73 41 67  .**     SF_HasAg
1de40 67 20 20 20 20 20 3d 3d 20 4e 43 5f 48 61 73 41  g     == NC_HasA
1de50 67 67 0a 2a 2a 20 20 20 20 20 53 46 5f 4d 69 6e  gg.**     SF_Min
1de60 4d 61 78 41 67 67 20 20 3d 3d 20 4e 43 5f 4d 69  MaxAgg  == NC_Mi
1de70 6e 4d 61 78 41 67 67 20 20 20 20 20 3d 3d 20 53  nMaxAgg     == S
1de80 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41  QLITE_FUNC_MINMA
1de90 58 0a 2a 2a 20 20 20 20 20 53 46 5f 46 69 78 65  X.**     SF_Fixe
1dea0 64 4c 69 6d 69 74 20 3d 3d 20 57 48 45 52 45 5f  dLimit == WHERE_
1deb0 55 53 45 5f 4c 49 4d 49 54 0a 2a 2f 0a 23 64 65  USE_LIMIT.*/.#de
1dec0 66 69 6e 65 20 53 46 5f 44 69 73 74 69 6e 63 74  fine SF_Distinct
1ded0 20 20 20 20 20 20 20 30 78 30 30 30 30 31 20 20         0x00001  
1dee0 2f 2a 20 4f 75 74 70 75 74 20 73 68 6f 75 6c 64  /* Output should
1def0 20 62 65 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a   be DISTINCT */.
1df00 23 64 65 66 69 6e 65 20 53 46 5f 41 6c 6c 20 20  #define SF_All  
1df10 20 20 20 20 20 20 20 20 20 20 30 78 30 30 30 30            0x0000
1df20 32 20 20 2f 2a 20 49 6e 63 6c 75 64 65 73 20 74  2  /* Includes t
1df30 68 65 20 41 4c 4c 20 6b 65 79 77 6f 72 64 20 2a  he ALL keyword *
1df40 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 52 65 73  /.#define SF_Res
1df50 6f 6c 76 65 64 20 20 20 20 20 20 20 30 78 30 30  olved       0x00
1df60 30 30 34 20 20 2f 2a 20 49 64 65 6e 74 69 66 69  004  /* Identifi
1df70 65 72 73 20 68 61 76 65 20 62 65 65 6e 20 72 65  ers have been re
1df80 73 6f 6c 76 65 64 20 2a 2f 0a 23 64 65 66 69 6e  solved */.#defin
1df90 65 20 53 46 5f 41 67 67 72 65 67 61 74 65 20 20  e SF_Aggregate  
1dfa0 20 20 20 20 30 78 30 30 30 30 38 20 20 2f 2a 20      0x00008  /* 
1dfb0 43 6f 6e 74 61 69 6e 73 20 61 67 67 20 66 75 6e  Contains agg fun
1dfc0 63 74 69 6f 6e 73 20 6f 72 20 61 20 47 52 4f 55  ctions or a GROU
1dfd0 50 20 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20  P BY */.#define 
1dfe0 53 46 5f 48 61 73 41 67 67 20 20 20 20 20 20 20  SF_HasAgg       
1dff0 20 20 30 78 30 30 30 31 30 20 20 2f 2a 20 43 6f    0x00010  /* Co
1e000 6e 74 61 69 6e 73 20 61 67 67 72 65 67 61 74 65  ntains aggregate
1e010 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64   functions */.#d
1e020 65 66 69 6e 65 20 53 46 5f 55 73 65 73 45 70 68  efine SF_UsesEph
1e030 65 6d 65 72 61 6c 20 20 30 78 30 30 30 32 30 20  emeral  0x00020 
1e040 20 2f 2a 20 55 73 65 73 20 74 68 65 20 4f 70 65   /* Uses the Ope
1e050 6e 45 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64  nEphemeral opcod
1e060 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  e */.#define SF_
1e070 45 78 70 61 6e 64 65 64 20 20 20 20 20 20 20 30  Expanded       0
1e080 78 30 30 30 34 30 20 20 2f 2a 20 73 71 6c 69 74  x00040  /* sqlit
1e090 65 33 53 65 6c 65 63 74 45 78 70 61 6e 64 28 29  e3SelectExpand()
1e0a0 20 63 61 6c 6c 65 64 20 6f 6e 20 74 68 69 73 20   called on this 
1e0b0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 48 61  */.#define SF_Ha
1e0c0 73 54 79 70 65 49 6e 66 6f 20 20 20 20 30 78 30  sTypeInfo    0x0
1e0d0 30 30 38 30 20 20 2f 2a 20 46 52 4f 4d 20 73 75  0080  /* FROM su
1e0e0 62 71 75 65 72 69 65 73 20 68 61 76 65 20 54 61  bqueries have Ta
1e0f0 62 6c 65 20 6d 65 74 61 64 61 74 61 20 2a 2f 0a  ble metadata */.
1e100 23 64 65 66 69 6e 65 20 53 46 5f 43 6f 6d 70 6f  #define SF_Compo
1e110 75 6e 64 20 20 20 20 20 20 20 30 78 30 30 31 30  und       0x0010
1e120 30 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 61 20  0  /* Part of a 
1e130 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79 20 2a  compound query *
1e140 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 56 61 6c  /.#define SF_Val
1e150 75 65 73 20 20 20 20 20 20 20 20 20 30 78 30 30  ues         0x00
1e160 32 30 30 20 20 2f 2a 20 53 79 6e 74 68 65 73 69  200  /* Synthesi
1e170 7a 65 64 20 66 72 6f 6d 20 56 41 4c 55 45 53 20  zed from VALUES 
1e180 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e  clause */.#defin
1e190 65 20 53 46 5f 4d 75 6c 74 69 56 61 6c 75 65 20  e SF_MultiValue 
1e1a0 20 20 20 20 30 78 30 30 34 30 30 20 20 2f 2a 20      0x00400  /* 
1e1b0 53 69 6e 67 6c 65 20 56 41 4c 55 45 53 20 74 65  Single VALUES te
1e1c0 72 6d 20 77 69 74 68 20 6d 75 6c 74 69 70 6c 65  rm with multiple
1e1d0 20 72 6f 77 73 20 2a 2f 0a 23 64 65 66 69 6e 65   rows */.#define
1e1e0 20 53 46 5f 4e 65 73 74 65 64 46 72 6f 6d 20 20   SF_NestedFrom  
1e1f0 20 20 20 30 78 30 30 38 30 30 20 20 2f 2a 20 50     0x00800  /* P
1e200 61 72 74 20 6f 66 20 61 20 70 61 72 65 6e 74 68  art of a parenth
1e210 65 73 69 7a 65 64 20 46 52 4f 4d 20 63 6c 61 75  esized FROM clau
1e220 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  se */.#define SF
1e230 5f 4d 69 6e 4d 61 78 41 67 67 20 20 20 20 20 20  _MinMaxAgg      
1e240 30 78 30 31 30 30 30 20 20 2f 2a 20 41 67 67 72  0x01000  /* Aggr
1e250 65 67 61 74 65 20 63 6f 6e 74 61 69 6e 69 6e 67  egate containing
1e260 20 6d 69 6e 28 29 20 6f 72 20 6d 61 78 28 29 20   min() or max() 
1e270 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 52 65  */.#define SF_Re
1e280 63 75 72 73 69 76 65 20 20 20 20 20 20 30 78 30  cursive      0x0
1e290 32 30 30 30 20 20 2f 2a 20 54 68 65 20 72 65 63  2000  /* The rec
1e2a0 75 72 73 69 76 65 20 70 61 72 74 20 6f 66 20 61  ursive part of a
1e2b0 20 72 65 63 75 72 73 69 76 65 20 43 54 45 20 2a   recursive CTE *
1e2c0 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 46 69 78  /.#define SF_Fix
1e2d0 65 64 4c 69 6d 69 74 20 20 20 20 20 30 78 30 34  edLimit     0x04
1e2e0 30 30 30 20 20 2f 2a 20 6e 53 65 6c 65 63 74 52  000  /* nSelectR
1e2f0 6f 77 20 73 65 74 20 62 79 20 61 20 63 6f 6e 73  ow set by a cons
1e300 74 61 6e 74 20 4c 49 4d 49 54 20 2a 2f 0a 23 64  tant LIMIT */.#d
1e310 65 66 69 6e 65 20 53 46 5f 4d 61 79 62 65 43 6f  efine SF_MaybeCo
1e320 6e 76 65 72 74 20 20 20 30 78 30 38 30 30 30 20  nvert   0x08000 
1e330 20 2f 2a 20 4e 65 65 64 20 63 6f 6e 76 65 72 74   /* Need convert
1e340 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f  CompoundSelectTo
1e350 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 23 64  Subquery() */.#d
1e360 65 66 69 6e 65 20 53 46 5f 43 6f 6e 76 65 72 74  efine SF_Convert
1e370 65 64 20 20 20 20 20 20 30 78 31 30 30 30 30 20  ed      0x10000 
1e380 20 2f 2a 20 42 79 20 63 6f 6e 76 65 72 74 43 6f   /* By convertCo
1e390 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75  mpoundSelectToSu
1e3a0 62 71 75 65 72 79 28 29 20 2a 2f 0a 23 64 65 66  bquery() */.#def
1e3b0 69 6e 65 20 53 46 5f 49 6e 63 6c 75 64 65 48 69  ine SF_IncludeHi
1e3c0 64 64 65 6e 20 20 30 78 32 30 30 30 30 20 20 2f  dden  0x20000  /
1e3d0 2a 20 49 6e 63 6c 75 64 65 20 68 69 64 64 65 6e  * Include hidden
1e3e0 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 6f 75 74 70   columns in outp
1e3f0 75 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  ut */.#define SF
1e400 5f 43 6f 6d 70 6c 65 78 52 65 73 75 6c 74 20 20  _ComplexResult  
1e410 30 78 34 30 30 30 30 20 20 2f 2a 20 52 65 73 75  0x40000  /* Resu
1e420 6c 74 20 63 6f 6e 74 61 69 6e 73 20 73 75 62 71  lt contains subq
1e430 75 65 72 79 20 6f 72 20 66 75 6e 63 74 69 6f 6e  uery or function
1e440 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72   */../*.** The r
1e450 65 73 75 6c 74 73 20 6f 66 20 61 20 53 45 4c 45  esults of a SELE
1e460 43 54 20 63 61 6e 20 62 65 20 64 69 73 74 72 69  CT can be distri
1e470 62 75 74 65 64 20 69 6e 20 73 65 76 65 72 61 6c  buted in several
1e480 20 77 61 79 73 2c 20 61 73 20 64 65 66 69 6e 65   ways, as define
1e490 64 0a 2a 2a 20 62 79 20 6f 6e 65 20 6f 66 20 74  d.** by one of t
1e4a0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63  he following mac
1e4b0 72 6f 73 2e 20 20 54 68 65 20 22 53 52 54 22 20  ros.  The "SRT" 
1e4c0 70 72 65 66 69 78 20 6d 65 61 6e 73 20 22 53 45  prefix means "SE
1e4d0 4c 45 43 54 20 52 65 73 75 6c 74 0a 2a 2a 20 54  LECT Result.** T
1e4e0 79 70 65 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ype"..**.**     
1e4f0 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20  SRT_Union       
1e500 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 61 73  Store results as
1e510 20 61 20 6b 65 79 20 69 6e 20 61 20 74 65 6d 70   a key in a temp
1e520 6f 72 61 72 79 20 69 6e 64 65 78 0a 2a 2a 20 20  orary index.**  
1e530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e540 20 20 20 69 64 65 6e 74 69 66 69 65 64 20 62 79     identified by
1e550 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e   pDest->iSDParm.
1e560 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45  .**.**     SRT_E
1e570 78 63 65 70 74 20 20 20 20 20 20 52 65 6d 6f 76  xcept      Remov
1e580 65 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20 74  e results from t
1e590 68 65 20 74 65 6d 70 6f 72 61 72 79 20 69 6e 64  he temporary ind
1e5a0 65 78 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  ex pDest->iSDPar
1e5b0 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  m..**.**     SRT
1e5c0 5f 45 78 69 73 74 73 20 20 20 20 20 20 53 74 6f  _Exists      Sto
1e5d0 72 65 20 61 20 31 20 69 6e 20 6d 65 6d 6f 72 79  re a 1 in memory
1e5e0 20 63 65 6c 6c 20 70 44 65 73 74 2d 3e 69 53 44   cell pDest->iSD
1e5f0 50 61 72 6d 20 69 66 20 74 68 65 20 72 65 73 75  Parm if the resu
1e600 6c 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  lt.**           
1e610 20 20 20 20 20 20 20 20 20 20 73 65 74 20 69 73            set is
1e620 20 6e 6f 74 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a   not empty..**.*
1e630 2a 20 20 20 20 20 53 52 54 5f 44 69 73 63 61 72  *     SRT_Discar
1e640 64 20 20 20 20 20 54 68 72 6f 77 20 74 68 65 20  d     Throw the 
1e650 72 65 73 75 6c 74 73 20 61 77 61 79 2e 20 20 54  results away.  T
1e660 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20 53  his is used by S
1e670 45 4c 45 43 54 0a 2a 2a 20 20 20 20 20 20 20 20  ELECT.**        
1e680 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61               sta
1e690 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74  tements within t
1e6a0 72 69 67 67 65 72 73 20 77 68 6f 73 65 20 6f 6e  riggers whose on
1e6b0 6c 79 20 70 75 72 70 6f 73 65 20 69 73 0a 2a 2a  ly purpose is.**
1e6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e6d0 20 20 20 20 20 74 68 65 20 73 69 64 65 2d 65 66       the side-ef
1e6e0 66 65 63 74 73 20 6f 66 20 66 75 6e 63 74 69 6f  fects of functio
1e6f0 6e 73 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66  ns..**.** All of
1e700 20 74 68 65 20 61 62 6f 76 65 20 61 72 65 20 66   the above are f
1e710 72 65 65 20 74 6f 20 69 67 6e 6f 72 65 20 74 68  ree to ignore th
1e720 65 69 72 20 4f 52 44 45 52 20 42 59 20 63 6c 61  eir ORDER BY cla
1e730 75 73 65 2e 20 54 68 6f 73 65 20 74 68 61 74 0a  use. Those that.
1e740 2a 2a 20 66 6f 6c 6c 6f 77 20 6d 75 73 74 20 68  ** follow must h
1e750 6f 6e 6f 72 20 74 68 65 20 4f 52 44 45 52 20 42  onor the ORDER B
1e760 59 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20  Y clause..**.** 
1e770 20 20 20 20 53 52 54 5f 4f 75 74 70 75 74 20 20      SRT_Output  
1e780 20 20 20 20 47 65 6e 65 72 61 74 65 20 61 20 72      Generate a r
1e790 6f 77 20 6f 66 20 6f 75 74 70 75 74 20 28 75 73  ow of output (us
1e7a0 69 6e 67 20 74 68 65 20 4f 50 5f 52 65 73 75 6c  ing the OP_Resul
1e7b0 74 52 6f 77 0a 2a 2a 20 20 20 20 20 20 20 20 20  tRow.**         
1e7c0 20 20 20 20 20 20 20 20 20 20 20 20 6f 70 63 6f              opco
1e7d0 64 65 29 20 66 6f 72 20 65 61 63 68 20 72 6f 77  de) for each row
1e7e0 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 73   in the result s
1e7f0 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  et..**.**     SR
1e800 54 5f 4d 65 6d 20 20 20 20 20 20 20 20 20 4f 6e  T_Mem         On
1e810 6c 79 20 76 61 6c 69 64 20 69 66 20 74 68 65 20  ly valid if the 
1e820 72 65 73 75 6c 74 20 69 73 20 61 20 73 69 6e 67  result is a sing
1e830 6c 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 20 20  le column..**   
1e840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e850 20 20 53 74 6f 72 65 20 74 68 65 20 66 69 72 73    Store the firs
1e860 74 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20  t column of the 
1e870 66 69 72 73 74 20 72 65 73 75 6c 74 20 72 6f 77  first result row
1e880 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1e890 20 20 20 20 20 20 20 20 69 6e 20 72 65 67 69 73          in regis
1e8a0 74 65 72 20 70 44 65 73 74 2d 3e 69 53 44 50 61  ter pDest->iSDPa
1e8b0 72 6d 20 74 68 65 6e 20 61 62 61 6e 64 6f 6e 20  rm then abandon 
1e8c0 74 68 65 20 72 65 73 74 0a 2a 2a 20 20 20 20 20  the rest.**     
1e8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e8e0 6f 66 20 74 68 65 20 71 75 65 72 79 2e 20 20 54  of the query.  T
1e8f0 68 69 73 20 64 65 73 74 69 6e 61 74 69 6f 6e 20  his destination 
1e900 69 6d 70 6c 69 65 73 20 22 4c 49 4d 49 54 20 31  implies "LIMIT 1
1e910 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  "..**.**     SRT
1e920 5f 53 65 74 20 20 20 20 20 20 20 20 20 54 68 65  _Set         The
1e930 20 72 65 73 75 6c 74 20 6d 75 73 74 20 62 65 20   result must be 
1e940 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e  a single column.
1e950 20 20 53 74 6f 72 65 20 65 61 63 68 0a 2a 2a 20    Store each.** 
1e960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e970 20 20 20 20 72 6f 77 20 6f 66 20 72 65 73 75 6c      row of resul
1e980 74 20 61 73 20 74 68 65 20 6b 65 79 20 69 6e 20  t as the key in 
1e990 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44  table pDest->iSD
1e9a0 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 20 20 20  Parm..**        
1e9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 41 70 70               App
1e9c0 6c 79 20 74 68 65 20 61 66 66 69 6e 69 74 79 20  ly the affinity 
1e9d0 70 44 65 73 74 2d 3e 61 66 66 53 64 73 74 20 62  pDest->affSdst b
1e9e0 65 66 6f 72 65 20 73 74 6f 72 69 6e 67 0a 2a 2a  efore storing.**
1e9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea00 20 20 20 20 20 72 65 73 75 6c 74 73 2e 20 20 55       results.  U
1ea10 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74  sed to implement
1ea20 20 22 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e   "IN (SELECT ...
1ea30 29 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  )"..**.**     SR
1ea40 54 5f 45 70 68 65 6d 54 61 62 20 20 20 20 43 72  T_EphemTab    Cr
1ea50 65 61 74 65 20 61 6e 20 74 65 6d 70 6f 72 61 72  eate an temporar
1ea60 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69  y table pDest->i
1ea70 53 44 50 61 72 6d 20 61 6e 64 20 73 74 6f 72 65  SDParm and store
1ea80 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1ea90 20 20 20 20 20 20 20 20 74 68 65 20 72 65 73 75          the resu
1eaa0 6c 74 20 74 68 65 72 65 2e 20 54 68 65 20 63 75  lt there. The cu
1eab0 72 73 6f 72 20 69 73 20 6c 65 66 74 20 6f 70 65  rsor is left ope
1eac0 6e 20 61 66 74 65 72 0a 2a 2a 20 20 20 20 20 20  n after.**      
1ead0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1eae0 65 74 75 72 6e 69 6e 67 2e 20 20 54 68 69 73 20  eturning.  This 
1eaf0 69 73 20 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c  is like SRT_Tabl
1eb00 65 20 65 78 63 65 70 74 20 74 68 61 74 0a 2a 2a  e except that.**
1eb10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb20 20 20 20 20 20 74 68 69 73 20 64 65 73 74 69 6e       this destin
1eb30 61 74 69 6f 6e 20 75 73 65 73 20 4f 50 5f 4f 70  ation uses OP_Op
1eb40 65 6e 45 70 68 65 6d 65 72 61 6c 20 74 6f 20 63  enEphemeral to c
1eb50 72 65 61 74 65 0a 2a 2a 20 20 20 20 20 20 20 20  reate.**        
1eb60 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
1eb70 20 74 61 62 6c 65 20 66 69 72 73 74 2e 0a 2a 2a   table first..**
1eb80 0a 2a 2a 20 20 20 20 20 53 52 54 5f 43 6f 72 6f  .**     SRT_Coro
1eb90 75 74 69 6e 65 20 20 20 47 65 6e 65 72 61 74 65  utine   Generate
1eba0 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 74 68   a co-routine th
1ebb0 61 74 20 72 65 74 75 72 6e 73 20 61 20 6e 65 77  at returns a new
1ebc0 20 72 6f 77 20 6f 66 0a 2a 2a 20 20 20 20 20 20   row of.**      
1ebd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1ebe0 65 73 75 6c 74 73 20 65 61 63 68 20 74 69 6d 65  esults each time
1ebf0 20 69 74 20 69 73 20 69 6e 76 6f 6b 65 64 2e 20   it is invoked. 
1ec00 20 54 68 65 20 65 6e 74 72 79 20 70 6f 69 6e 74   The entry point
1ec10 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1ec20 20 20 20 20 20 20 20 20 6f 66 20 74 68 65 20 63          of the c
1ec30 6f 2d 72 6f 75 74 69 6e 65 20 69 73 20 73 74 6f  o-routine is sto
1ec40 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
1ec50 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 0a 2a  pDest->iSDParm.*
1ec60 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1ec70 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 72 65        and the re
1ec80 73 75 6c 74 20 72 6f 77 20 69 73 20 73 74 6f 72  sult row is stor
1ec90 65 64 20 69 6e 20 70 44 65 73 74 2d 3e 6e 44 65  ed in pDest->nDe
1eca0 73 74 20 72 65 67 69 73 74 65 72 73 0a 2a 2a 20  st registers.** 
1ecb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ecc0 20 20 20 20 73 74 61 72 74 69 6e 67 20 77 69 74      starting wit
1ecd0 68 20 70 44 65 73 74 2d 3e 69 53 64 73 74 2e 0a  h pDest->iSdst..
1ece0 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 54 61  **.**     SRT_Ta
1ecf0 62 6c 65 20 20 20 20 20 20 20 53 74 6f 72 65 20  ble       Store 
1ed00 72 65 73 75 6c 74 73 20 69 6e 20 74 65 6d 70 6f  results in tempo
1ed10 72 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74  rary table pDest
1ed20 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20  ->iSDParm..**   
1ed30 20 20 53 52 54 5f 46 69 66 6f 20 20 20 20 20 20    SRT_Fifo      
1ed40 20 20 54 68 69 73 20 69 73 20 6c 69 6b 65 20 53    This is like S
1ed50 52 54 5f 45 70 68 65 6d 54 61 62 20 65 78 63 65  RT_EphemTab exce
1ed60 70 74 20 74 68 61 74 20 74 68 65 20 74 61 62 6c  pt that the tabl
1ed70 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
1ed80 20 20 20 20 20 20 20 20 20 69 73 20 61 73 73 75           is assu
1ed90 6d 65 64 20 74 6f 20 61 6c 72 65 61 64 79 20 62  med to already b
1eda0 65 20 6f 70 65 6e 2e 20 20 53 52 54 5f 46 69 66  e open.  SRT_Fif
1edb0 6f 20 68 61 73 0a 2a 2a 20 20 20 20 20 20 20 20  o has.**        
1edc0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
1edd0 20 61 64 64 69 74 69 6f 6e 61 6c 20 70 72 6f 70   additional prop
1ede0 65 72 74 79 20 6f 66 20 62 65 69 6e 67 20 61 62  erty of being ab
1edf0 6c 65 20 74 6f 20 69 67 6e 6f 72 65 0a 2a 2a 20  le to ignore.** 
1ee00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee10 20 20 20 20 74 68 65 20 4f 52 44 45 52 20 42 59      the ORDER BY
1ee20 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20   clause..**.**  
1ee30 20 20 20 53 52 54 5f 44 69 73 74 46 69 66 6f 20     SRT_DistFifo 
1ee40 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73     Store results
1ee50 20 69 6e 20 61 20 74 65 6d 70 6f 72 61 72 79 20   in a temporary 
1ee60 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44  table pDest->iSD
1ee70 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 20 20 20  Parm..**        
1ee80 20 20 20 20 20 20 20 20 20 20 20 20 20 42 75 74               But
1ee90 20 61 6c 73 6f 20 75 73 65 20 74 65 6d 70 6f 72   also use tempor
1eea0 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d  ary table pDest-
1eeb0 3e 69 53 44 50 61 72 6d 2b 31 20 61 73 0a 2a 2a  >iSDParm+1 as.**
1eec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eed0 20 20 20 20 20 61 20 72 65 63 6f 72 64 20 6f 66       a record of
1eee0 20 61 6c 6c 20 70 72 69 6f 72 20 72 65 73 75 6c   all prior resul
1eef0 74 73 20 61 6e 64 20 69 67 6e 6f 72 65 20 61 6e  ts and ignore an
1ef00 79 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20 20  y duplicate.**  
1ef10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef20 20 20 20 72 6f 77 73 2e 20 20 4e 61 6d 65 20 6d     rows.  Name m
1ef30 65 61 6e 73 3a 20 20 22 44 69 73 74 69 6e 63 74  eans:  "Distinct
1ef40 20 46 69 66 6f 22 2e 0a 2a 2a 0a 2a 2a 20 20 20   Fifo"..**.**   
1ef50 20 20 53 52 54 5f 51 75 65 75 65 20 20 20 20 20    SRT_Queue     
1ef60 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20    Store results 
1ef70 69 6e 20 70 72 69 6f 72 69 74 79 20 71 75 65 75  in priority queu
1ef80 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  e pDest->iSDParm
1ef90 20 28 72 65 61 6c 6c 79 0a 2a 2a 20 20 20 20 20   (really.**     
1efa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1efb0 61 6e 20 69 6e 64 65 78 29 2e 20 20 41 70 70 65  an index).  Appe
1efc0 6e 64 20 61 20 73 65 71 75 65 6e 63 65 20 6e 75  nd a sequence nu
1efd0 6d 62 65 72 20 73 6f 20 74 68 61 74 20 61 6c 6c  mber so that all
1efe0 20 65 6e 74 72 69 65 73 0a 2a 2a 20 20 20 20 20   entries.**     
1eff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f000 61 72 65 20 64 69 73 74 69 6e 63 74 2e 0a 2a 2a  are distinct..**
1f010 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73 74  .**     SRT_Dist
1f020 51 75 65 75 65 20 20 20 53 74 6f 72 65 20 72 65  Queue   Store re
1f030 73 75 6c 74 73 20 69 6e 20 70 72 69 6f 72 69 74  sults in priorit
1f040 79 20 71 75 65 75 65 20 70 44 65 73 74 2d 3e 69  y queue pDest->i
1f050 53 44 50 61 72 6d 20 6f 6e 6c 79 20 69 66 0a 2a  SDParm only if.*
1f060 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1f070 20 20 20 20 20 20 74 68 65 20 73 61 6d 65 20 72        the same r
1f080 65 63 6f 72 64 20 68 61 73 20 6e 65 76 65 72 20  ecord has never 
1f090 62 65 65 6e 20 73 74 6f 72 65 64 20 62 65 66 6f  been stored befo
1f0a0 72 65 2e 20 20 54 68 65 0a 2a 2a 20 20 20 20 20  re.  The.**     
1f0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f0c0 69 6e 64 65 78 20 61 74 20 70 44 65 73 74 2d 3e  index at pDest->
1f0d0 69 53 44 50 61 72 6d 2b 31 20 68 6f 6c 64 20 61  iSDParm+1 hold a
1f0e0 6c 6c 20 70 72 69 6f 72 20 73 74 6f 72 65 73 2e  ll prior stores.
1f0f0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f  .*/.#define SRT_
1f100 55 6e 69 6f 6e 20 20 20 20 20 20 20 20 31 20 20  Union        1  
1f110 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20  /* Store result 
1f120 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e  as keys in an in
1f130 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  dex */.#define S
1f140 52 54 5f 45 78 63 65 70 74 20 20 20 20 20 20 20  RT_Except       
1f150 32 20 20 2f 2a 20 52 65 6d 6f 76 65 20 72 65 73  2  /* Remove res
1f160 75 6c 74 20 66 72 6f 6d 20 61 20 55 4e 49 4f 4e  ult from a UNION
1f170 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e   index */.#defin
1f180 65 20 53 52 54 5f 45 78 69 73 74 73 20 20 20 20  e SRT_Exists    
1f190 20 20 20 33 20 20 2f 2a 20 53 74 6f 72 65 20 31     3  /* Store 1
1f1a0 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 69   if the result i
1f1b0 73 20 6e 6f 74 20 65 6d 70 74 79 20 2a 2f 0a 23  s not empty */.#
1f1c0 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73 63 61  define SRT_Disca
1f1d0 72 64 20 20 20 20 20 20 34 20 20 2f 2a 20 44 6f  rd      4  /* Do
1f1e0 20 6e 6f 74 20 73 61 76 65 20 74 68 65 20 72 65   not save the re
1f1f0 73 75 6c 74 73 20 61 6e 79 77 68 65 72 65 20 2a  sults anywhere *
1f200 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 46 69  /.#define SRT_Fi
1f210 66 6f 20 20 20 20 20 20 20 20 20 35 20 20 2f 2a  fo         5  /*
1f220 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73   Store result as
1f230 20 64 61 74 61 20 77 69 74 68 20 61 6e 20 61 75   data with an au
1f240 74 6f 6d 61 74 69 63 20 72 6f 77 69 64 20 2a 2f  tomatic rowid */
1f250 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73  .#define SRT_Dis
1f260 74 46 69 66 6f 20 20 20 20 20 36 20 20 2f 2a 20  tFifo     6  /* 
1f270 4c 69 6b 65 20 53 52 54 5f 46 69 66 6f 2c 20 62  Like SRT_Fifo, b
1f280 75 74 20 75 6e 69 71 75 65 20 72 65 73 75 6c 74  ut unique result
1f290 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e  s only */.#defin
1f2a0 65 20 53 52 54 5f 51 75 65 75 65 20 20 20 20 20  e SRT_Queue     
1f2b0 20 20 20 37 20 20 2f 2a 20 53 74 6f 72 65 20 72     7  /* Store r
1f2c0 65 73 75 6c 74 20 69 6e 20 61 6e 20 71 75 65 75  esult in an queu
1f2d0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  e */.#define SRT
1f2e0 5f 44 69 73 74 51 75 65 75 65 20 20 20 20 38 20  _DistQueue    8 
1f2f0 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 51 75 65   /* Like SRT_Que
1f300 75 65 2c 20 62 75 74 20 75 6e 69 71 75 65 20 72  ue, but unique r
1f310 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a 0a  esults only */..
1f320 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59 20  /* The ORDER BY 
1f330 63 6c 61 75 73 65 20 69 73 20 69 67 6e 6f 72 65  clause is ignore
1f340 64 20 66 6f 72 20 61 6c 6c 20 6f 66 20 74 68 65  d for all of the
1f350 20 61 62 6f 76 65 20 2a 2f 0a 23 64 65 66 69 6e   above */.#defin
1f360 65 20 49 67 6e 6f 72 61 62 6c 65 4f 72 64 65 72  e IgnorableOrder
1f370 62 79 28 58 29 20 28 28 58 2d 3e 65 44 65 73 74  by(X) ((X->eDest
1f380 29 3c 3d 53 52 54 5f 44 69 73 74 51 75 65 75 65  )<=SRT_DistQueue
1f390 29 0a 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 4f  )..#define SRT_O
1f3a0 75 74 70 75 74 20 20 20 20 20 20 20 39 20 20 2f  utput       9  /
1f3b0 2a 20 4f 75 74 70 75 74 20 65 61 63 68 20 72 6f  * Output each ro
1f3c0 77 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23  w of result */.#
1f3d0 64 65 66 69 6e 65 20 53 52 54 5f 4d 65 6d 20 20  define SRT_Mem  
1f3e0 20 20 20 20 20 20 20 31 30 20 20 2f 2a 20 53 74         10  /* St
1f3f0 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20 61 20  ore result in a 
1f400 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 2a 2f 0a 23  memory cell */.#
1f410 64 65 66 69 6e 65 20 53 52 54 5f 53 65 74 20 20  define SRT_Set  
1f420 20 20 20 20 20 20 20 31 31 20 20 2f 2a 20 53 74         11  /* St
1f430 6f 72 65 20 72 65 73 75 6c 74 73 20 61 73 20 6b  ore results as k
1f440 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20  eys in an index 
1f450 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45  */.#define SRT_E
1f460 70 68 65 6d 54 61 62 20 20 20 20 31 32 20 20 2f  phemTab    12  /
1f470 2a 20 43 72 65 61 74 65 20 74 72 61 6e 73 69 65  * Create transie
1f480 6e 74 20 74 61 62 20 61 6e 64 20 73 74 6f 72 65  nt tab and store
1f490 20 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c 65 20   like SRT_Table 
1f4a0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 43  */.#define SRT_C
1f4b0 6f 72 6f 75 74 69 6e 65 20 20 20 31 33 20 20 2f  oroutine   13  /
1f4c0 2a 20 47 65 6e 65 72 61 74 65 20 61 20 73 69 6e  * Generate a sin
1f4d0 67 6c 65 20 72 6f 77 20 6f 66 20 72 65 73 75 6c  gle row of resul
1f4e0 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  t */.#define SRT
1f4f0 5f 54 61 62 6c 65 20 20 20 20 20 20 20 31 34 20  _Table       14 
1f500 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
1f510 20 61 73 20 64 61 74 61 20 77 69 74 68 20 61 6e   as data with an
1f520 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 77 69 64   automatic rowid
1f530 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e   */../*.** An in
1f540 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 6f  stance of this o
1f550 62 6a 65 63 74 20 64 65 73 63 72 69 62 65 73 20  bject describes 
1f560 77 68 65 72 65 20 74 6f 20 70 75 74 20 6f 66 20  where to put of 
1f570 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 0a 2a  the results of.*
1f580 2a 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65  * a SELECT state
1f590 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ment..*/.struct 
1f5a0 53 65 6c 65 63 74 44 65 73 74 20 7b 0a 20 20 75  SelectDest {.  u
1f5b0 38 20 65 44 65 73 74 3b 20 20 20 20 20 20 20 20  8 eDest;        
1f5c0 20 20 20 20 2f 2a 20 48 6f 77 20 74 6f 20 64 69      /* How to di
1f5d0 73 70 6f 73 65 20 6f 66 20 74 68 65 20 72 65 73  spose of the res
1f5e0 75 6c 74 73 2e 20 20 4f 6e 20 6f 66 20 53 52 54  ults.  On of SRT
1f5f0 5f 2a 20 61 62 6f 76 65 2e 20 2a 2f 0a 20 20 69  _* above. */.  i
1f600 6e 74 20 69 53 44 50 61 72 6d 3b 20 20 20 20 20  nt iSDParm;     
1f610 20 20 20 20 2f 2a 20 41 20 70 61 72 61 6d 65 74      /* A paramet
1f620 65 72 20 75 73 65 64 20 62 79 20 74 68 65 20 65  er used by the e
1f630 44 65 73 74 20 64 69 73 70 6f 73 61 6c 20 6d 65  Dest disposal me
1f640 74 68 6f 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53  thod */.  int iS
1f650 64 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  dst;           /
1f660 2a 20 42 61 73 65 20 72 65 67 69 73 74 65 72 20  * Base register 
1f670 77 68 65 72 65 20 72 65 73 75 6c 74 73 20 61 72  where results ar
1f680 65 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20 69  e written */.  i
1f690 6e 74 20 6e 53 64 73 74 3b 20 20 20 20 20 20 20  nt nSdst;       
1f6a0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1f6b0 20 72 65 67 69 73 74 65 72 73 20 61 6c 6c 6f 63   registers alloc
1f6c0 61 74 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a  ated */.  char *
1f6d0 7a 41 66 66 53 64 73 74 3b 20 20 20 20 20 20 2f  zAffSdst;      /
1f6e0 2a 20 41 66 66 69 6e 69 74 79 20 75 73 65 64 20  * Affinity used 
1f6f0 77 68 65 6e 20 65 44 65 73 74 3d 3d 53 52 54 5f  when eDest==SRT_
1f700 53 65 74 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  Set */.  ExprLis
1f710 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 2f 2a  t *pOrderBy;  /*
1f720 20 4b 65 79 20 63 6f 6c 75 6d 6e 73 20 66 6f 72   Key columns for
1f730 20 53 52 54 5f 51 75 65 75 65 20 61 6e 64 20 53   SRT_Queue and S
1f740 52 54 5f 44 69 73 74 51 75 65 75 65 20 2a 2f 0a  RT_DistQueue */.
1f750 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 44 75 72 69 6e 67  };../*.** During
1f760 20 63 6f 64 65 20 67 65 6e 65 72 61 74 69 6f 6e   code generation
1f770 20 6f 66 20 73 74 61 74 65 6d 65 6e 74 73 20 74   of statements t
1f780 68 61 74 20 64 6f 20 69 6e 73 65 72 74 73 20 69  hat do inserts i
1f790 6e 74 6f 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e  nto AUTOINCREMEN
1f7a0 54 0a 2a 2a 20 74 61 62 6c 65 73 2c 20 74 68 65  T.** tables, the
1f7b0 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 66 6f 72   following infor
1f7c0 6d 61 74 69 6f 6e 20 69 73 20 61 74 74 61 63 68  mation is attach
1f7d0 65 64 20 74 6f 20 74 68 65 20 54 61 62 6c 65 2e  ed to the Table.
1f7e0 75 2e 61 75 74 6f 49 6e 63 2e 70 0a 2a 2a 20 70  u.autoInc.p.** p
1f7f0 6f 69 6e 74 65 72 20 6f 66 20 65 61 63 68 20 61  ointer of each a
1f800 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 74 61 62  utoincrement tab
1f810 6c 65 20 74 6f 20 72 65 63 6f 72 64 20 73 6f 6d  le to record som
1f820 65 20 73 69 64 65 20 69 6e 66 6f 72 6d 61 74 69  e side informati
1f830 6f 6e 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 63  on that.** the c
1f840 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20 6e 65  ode generator ne
1f850 65 64 73 2e 20 20 57 65 20 68 61 76 65 20 74 6f  eds.  We have to
1f860 20 6b 65 65 70 20 70 65 72 2d 74 61 62 6c 65 20   keep per-table 
1f870 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 0a 2a 2a  autoincrement.**
1f880 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20   information in 
1f890 63 61 73 65 20 69 6e 73 65 72 74 73 20 61 72 65  case inserts are
1f8a0 20 64 6f 6e 65 20 77 69 74 68 69 6e 20 74 72 69   done within tri
1f8b0 67 67 65 72 73 2e 20 20 54 72 69 67 67 65 72 73  ggers.  Triggers
1f8c0 20 64 6f 20 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d 61   do not.** norma
1f8d0 6c 6c 79 20 63 6f 6f 72 64 69 6e 61 74 65 20 74  lly coordinate t
1f8e0 68 65 69 72 20 61 63 74 69 76 69 74 69 65 73 2c  heir activities,
1f8f0 20 62 75 74 20 77 65 20 64 6f 20 6e 65 65 64 20   but we do need 
1f900 74 6f 20 63 6f 6f 72 64 69 6e 61 74 65 20 74 68  to coordinate th
1f910 65 0a 2a 2a 20 6c 6f 61 64 69 6e 67 20 61 6e 64  e.** loading and
1f920 20 73 61 76 69 6e 67 20 6f 66 20 61 75 74 6f 69   saving of autoi
1f930 6e 63 72 65 6d 65 6e 74 20 69 6e 66 6f 72 6d 61  ncrement informa
1f940 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tion..*/.struct 
1f950 41 75 74 6f 69 6e 63 49 6e 66 6f 20 7b 0a 20 20  AutoincInfo {.  
1f960 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 4e 65  AutoincInfo *pNe
1f970 78 74 3b 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e  xt;   /* Next in
1f980 66 6f 20 62 6c 6f 63 6b 20 69 6e 20 61 20 6c 69  fo block in a li
1f990 73 74 20 6f 66 20 74 68 65 6d 20 61 6c 6c 20 2a  st of them all *
1f9a0 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b  /.  Table *pTab;
1f9b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62            /* Tab
1f9c0 6c 65 20 74 68 69 73 20 69 6e 66 6f 20 62 6c 6f  le this info blo
1f9d0 63 6b 20 72 65 66 65 72 73 20 74 6f 20 2a 2f 0a  ck refers to */.
1f9e0 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20    int iDb;      
1f9f0 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78          /* Index
1fa00 20 69 6e 20 73 71 6c 69 74 65 33 2e 61 44 62 5b   in sqlite3.aDb[
1fa10 5d 20 6f 66 20 64 61 74 61 62 61 73 65 20 68 6f  ] of database ho
1fa20 6c 64 69 6e 67 20 70 54 61 62 20 2a 2f 0a 20 20  lding pTab */.  
1fa30 69 6e 74 20 72 65 67 43 74 72 3b 20 20 20 20 20  int regCtr;     
1fa40 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20        /* Memory 
1fa50 72 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67  register holding
1fa60 20 74 68 65 20 72 6f 77 69 64 20 63 6f 75 6e 74   the rowid count
1fa70 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  er */.};../*.** 
1fa80 41 74 20 6c 65 61 73 74 20 6f 6e 65 20 69 6e 73  At least one ins
1fa90 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
1faa0 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
1fab0 20 69 73 20 63 72 65 61 74 65 64 20 66 6f 72 20   is created for 
1fac0 65 61 63 68 0a 2a 2a 20 74 72 69 67 67 65 72 20  each.** trigger 
1fad0 74 68 61 74 20 6d 61 79 20 62 65 20 66 69 72 65  that may be fire
1fae0 64 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67 20  d while parsing 
1faf0 61 6e 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54  an INSERT, UPDAT
1fb00 45 20 6f 72 20 44 45 4c 45 54 45 0a 2a 2a 20 73  E or DELETE.** s
1fb10 74 61 74 65 6d 65 6e 74 2e 20 41 6c 6c 20 73 75  tatement. All su
1fb20 63 68 20 6f 62 6a 65 63 74 73 20 61 72 65 20 73  ch objects are s
1fb30 74 6f 72 65 64 20 69 6e 20 74 68 65 20 6c 69 6e  tored in the lin
1fb40 6b 65 64 20 6c 69 73 74 20 68 65 61 64 65 64 20  ked list headed 
1fb50 61 74 0a 2a 2a 20 50 61 72 73 65 2e 70 54 72 69  at.** Parse.pTri
1fb60 67 67 65 72 50 72 67 20 61 6e 64 20 64 65 6c 65  ggerPrg and dele
1fb70 74 65 64 20 6f 6e 63 65 20 73 74 61 74 65 6d 65  ted once stateme
1fb80 6e 74 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 68  nt compilation h
1fb90 61 73 20 62 65 65 6e 0a 2a 2a 20 63 6f 6d 70 6c  as been.** compl
1fba0 65 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 56 64  eted..**.** A Vd
1fbb0 62 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74  be sub-program t
1fbc0 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74  hat implements t
1fbd0 68 65 20 62 6f 64 79 20 61 6e 64 20 57 48 45 4e  he body and WHEN
1fbe0 20 63 6c 61 75 73 65 20 6f 66 20 74 72 69 67 67   clause of trigg
1fbf0 65 72 0a 2a 2a 20 54 72 69 67 67 65 72 50 72 67  er.** TriggerPrg
1fc00 2e 70 54 72 69 67 67 65 72 2c 20 61 73 73 75 6d  .pTrigger, assum
1fc10 69 6e 67 20 61 20 64 65 66 61 75 6c 74 20 4f 4e  ing a default ON
1fc20 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65   CONFLICT clause
1fc30 20 6f 66 0a 2a 2a 20 54 72 69 67 67 65 72 50 72   of.** TriggerPr
1fc40 67 2e 6f 72 63 6f 6e 66 2c 20 69 73 20 73 74 6f  g.orconf, is sto
1fc50 72 65 64 20 69 6e 20 74 68 65 20 54 72 69 67 67  red in the Trigg
1fc60 65 72 50 72 67 2e 70 50 72 6f 67 72 61 6d 20 76  erPrg.pProgram v
1fc70 61 72 69 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20  ariable..** The 
1fc80 50 61 72 73 65 2e 70 54 72 69 67 67 65 72 50 72  Parse.pTriggerPr
1fc90 67 20 6c 69 73 74 20 6e 65 76 65 72 20 63 6f 6e  g list never con
1fca0 74 61 69 6e 73 20 74 77 6f 20 65 6e 74 72 69 65  tains two entrie
1fcb0 73 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 0a  s with the same.
1fcc0 2a 2a 20 76 61 6c 75 65 73 20 66 6f 72 20 62 6f  ** values for bo
1fcd0 74 68 20 70 54 72 69 67 67 65 72 20 61 6e 64 20  th pTrigger and 
1fce0 6f 72 63 6f 6e 66 2e 0a 2a 2a 0a 2a 2a 20 54 68  orconf..**.** Th
1fcf0 65 20 54 72 69 67 67 65 72 50 72 67 2e 61 43 6f  e TriggerPrg.aCo
1fd00 6c 6d 61 73 6b 5b 30 5d 20 76 61 72 69 61 62 6c  lmask[0] variabl
1fd10 65 20 69 73 20 73 65 74 20 74 6f 20 61 20 6d 61  e is set to a ma
1fd20 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75  sk of old.* colu
1fd30 6d 6e 73 0a 2a 2a 20 61 63 63 65 73 73 65 64 20  mns.** accessed 
1fd40 28 6f 72 20 73 65 74 20 74 6f 20 30 20 66 6f 72  (or set to 0 for
1fd50 20 74 72 69 67 67 65 72 73 20 66 69 72 65 64 20   triggers fired 
1fd60 61 73 20 61 20 72 65 73 75 6c 74 20 6f 66 20 49  as a result of I
1fd70 4e 53 45 52 54 0a 2a 2a 20 73 74 61 74 65 6d 65  NSERT.** stateme
1fd80 6e 74 73 29 2e 20 53 69 6d 69 6c 61 72 6c 79 2c  nts). Similarly,
1fd90 20 74 68 65 20 54 72 69 67 67 65 72 50 72 67 2e   the TriggerPrg.
1fda0 61 43 6f 6c 6d 61 73 6b 5b 31 5d 20 76 61 72 69  aColmask[1] vari
1fdb0 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f 0a 2a  able is set to.*
1fdc0 2a 20 61 20 6d 61 73 6b 20 6f 66 20 6e 65 77 2e  * a mask of new.
1fdd0 2a 20 63 6f 6c 75 6d 6e 73 20 75 73 65 64 20 62  * columns used b
1fde0 79 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a  y the program..*
1fdf0 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72  /.struct Trigger
1fe00 50 72 67 20 7b 0a 20 20 54 72 69 67 67 65 72 20  Prg {.  Trigger 
1fe10 2a 70 54 72 69 67 67 65 72 3b 20 20 20 20 20 20  *pTrigger;      
1fe20 2f 2a 20 54 72 69 67 67 65 72 20 74 68 69 73 20  /* Trigger this 
1fe30 70 72 6f 67 72 61 6d 20 77 61 73 20 63 6f 64 65  program was code
1fe40 64 20 66 72 6f 6d 20 2a 2f 0a 20 20 54 72 69 67  d from */.  Trig
1fe50 67 65 72 50 72 67 20 2a 70 4e 65 78 74 3b 20 20  gerPrg *pNext;  
1fe60 20 20 20 20 2f 2a 20 4e 65 78 74 20 65 6e 74 72      /* Next entr
1fe70 79 20 69 6e 20 50 61 72 73 65 2e 70 54 72 69 67  y in Parse.pTrig
1fe80 67 65 72 50 72 67 20 6c 69 73 74 20 2a 2f 0a 20  gerPrg list */. 
1fe90 20 69 6e 74 20 69 46 69 78 44 62 3b 20 20 20 20   int iFixDb;    
1fea0 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
1feb0 65 20 6f 66 20 50 61 72 73 65 2e 69 46 69 78 44  e of Parse.iFixD
1fec0 62 20 77 68 65 6e 20 74 68 69 73 20 77 61 73 20  b when this was 
1fed0 63 6f 64 65 64 20 2a 2f 0a 20 20 53 75 62 50 72  coded */.  SubPr
1fee0 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b  ogram *pProgram;
1fef0 20 20 20 2f 2a 20 50 72 6f 67 72 61 6d 20 69 6d     /* Program im
1ff00 70 6c 65 6d 65 6e 74 69 6e 67 20 70 54 72 69 67  plementing pTrig
1ff10 67 65 72 2f 6f 72 63 6f 6e 66 20 2a 2f 0a 20 20  ger/orconf */.  
1ff20 69 6e 74 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20  int orconf;     
1ff30 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
1ff40 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70  lt ON CONFLICT p
1ff50 6f 6c 69 63 79 20 2a 2f 0a 20 20 75 33 32 20 61  olicy */.  u32 a
1ff60 43 6f 6c 6d 61 73 6b 5b 32 5d 3b 20 20 20 20 20  Colmask[2];     
1ff70 20 20 20 2f 2a 20 4d 61 73 6b 73 20 6f 66 20 6f     /* Masks of o
1ff80 6c 64 2e 2a 2c 20 6e 65 77 2e 2a 20 63 6f 6c 75  ld.*, new.* colu
1ff90 6d 6e 73 20 61 63 63 65 73 73 65 64 20 2a 2f 0a  mns accessed */.
1ffa0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 79 44  };../*.** The yD
1ffb0 62 4d 61 73 6b 20 64 61 74 61 74 79 70 65 20 66  bMask datatype f
1ffc0 6f 72 20 74 68 65 20 62 69 74 6d 61 73 6b 20 6f  or the bitmask o
1ffd0 66 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64  f all attached d
1ffe0 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 69 66  atabases..*/.#if
1fff0 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41   SQLITE_MAX_ATTA
20000 43 48 45 44 3e 33 30 0a 20 20 74 79 70 65 64 65  CHED>30.  typede
20010 66 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  f unsigned char 
20020 79 44 62 4d 61 73 6b 5b 28 53 51 4c 49 54 45 5f  yDbMask[(SQLITE_
20030 4d 41 58 5f 41 54 54 41 43 48 45 44 2b 39 29 2f  MAX_ATTACHED+9)/
20040 38 5d 3b 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  8];.# define DbM
20050 61 73 6b 54 65 73 74 28 4d 2c 49 29 20 20 20 20  askTest(M,I)    
20060 28 28 28 4d 29 5b 28 49 29 2f 38 5d 26 28 31 3c  (((M)[(I)/8]&(1<
20070 3c 28 28 49 29 26 37 29 29 29 21 3d 30 29 0a 23  <((I)&7)))!=0).#
20080 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a 65   define DbMaskZe
20090 72 6f 28 4d 29 20 20 20 20 20 20 6d 65 6d 73 65  ro(M)      memse
200a0 74 28 28 4d 29 2c 30 2c 73 69 7a 65 6f 66 28 4d  t((M),0,sizeof(M
200b0 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  )).# define DbMa
200c0 73 6b 53 65 74 28 4d 2c 49 29 20 20 20 20 20 28  skSet(M,I)     (
200d0 4d 29 5b 28 49 29 2f 38 5d 7c 3d 28 31 3c 3c 28  M)[(I)/8]|=(1<<(
200e0 28 49 29 26 37 29 29 0a 23 20 64 65 66 69 6e 65  (I)&7)).# define
200f0 20 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d   DbMaskAllZero(M
20100 29 20 20 20 73 71 6c 69 74 65 33 44 62 4d 61 73  )   sqlite3DbMas
20110 6b 41 6c 6c 5a 65 72 6f 28 4d 29 0a 23 20 64 65  kAllZero(M).# de
20120 66 69 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65  fine DbMaskNonZe
20130 72 6f 28 4d 29 20 20 20 28 73 71 6c 69 74 65 33  ro(M)   (sqlite3
20140 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29  DbMaskAllZero(M)
20150 3d 3d 30 29 0a 23 65 6c 73 65 0a 20 20 74 79 70  ==0).#else.  typ
20160 65 64 65 66 20 75 6e 73 69 67 6e 65 64 20 69 6e  edef unsigned in
20170 74 20 79 44 62 4d 61 73 6b 3b 0a 23 20 64 65 66  t yDbMask;.# def
20180 69 6e 65 20 44 62 4d 61 73 6b 54 65 73 74 28 4d  ine DbMaskTest(M
20190 2c 49 29 20 20 20 20 28 28 28 4d 29 26 28 28 28  ,I)    (((M)&(((
201a0 79 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29  yDbMask)1)<<(I))
201b0 29 21 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 44  )!=0).# define D
201c0 62 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20  bMaskZero(M)    
201d0 20 20 28 4d 29 3d 30 0a 23 20 64 65 66 69 6e 65    (M)=0.# define
201e0 20 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20   DbMaskSet(M,I) 
201f0 20 20 20 20 28 4d 29 7c 3d 28 28 28 79 44 62 4d      (M)|=(((yDbM
20200 61 73 6b 29 31 29 3c 3c 28 49 29 29 0a 23 20 64  ask)1)<<(I)).# d
20210 65 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a  efine DbMaskAllZ
20220 65 72 6f 28 4d 29 20 20 20 28 4d 29 3d 3d 30 0a  ero(M)   (M)==0.
20230 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e  # define DbMaskN
20240 6f 6e 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29 21  onZero(M)   (M)!
20250 3d 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  =0.#endif../*.**
20260 20 41 6e 20 53 51 4c 20 70 61 72 73 65 72 20 63   An SQL parser c
20270 6f 6e 74 65 78 74 2e 20 20 41 20 63 6f 70 79 20  ontext.  A copy 
20280 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
20290 65 20 69 73 20 70 61 73 73 65 64 20 74 68 72 6f  e is passed thro
202a0 75 67 68 0a 2a 2a 20 74 68 65 20 70 61 72 73 65  ugh.** the parse
202b0 72 20 61 6e 64 20 64 6f 77 6e 20 69 6e 74 6f 20  r and down into 
202c0 61 6c 6c 20 74 68 65 20 70 61 72 73 65 72 20 61  all the parser a
202d0 63 74 69 6f 6e 20 72 6f 75 74 69 6e 65 20 69 6e  ction routine in
202e0 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 63 61 72   order to.** car
202f0 72 79 20 61 72 6f 75 6e 64 20 69 6e 66 6f 72 6d  ry around inform
20300 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20 67 6c  ation that is gl
20310 6f 62 61 6c 20 74 6f 20 74 68 65 20 65 6e 74 69  obal to the enti
20320 72 65 20 70 61 72 73 65 2e 0a 2a 2a 0a 2a 2a 20  re parse..**.** 
20330 54 68 65 20 73 74 72 75 63 74 75 72 65 20 69 73  The structure is
20340 20 64 69 76 69 64 65 64 20 69 6e 74 6f 20 74 77   divided into tw
20350 6f 20 70 61 72 74 73 2e 20 20 57 68 65 6e 20 74  o parts.  When t
20360 68 65 20 70 61 72 73 65 72 20 61 6e 64 20 63 6f  he parser and co
20370 64 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20 63  de.** generate c
20380 61 6c 6c 20 74 68 65 6d 73 65 6c 76 65 73 20 72  all themselves r
20390 65 63 75 72 73 69 76 65 6c 79 2c 20 74 68 65 20  ecursively, the 
203a0 66 69 72 73 74 20 70 61 72 74 20 6f 66 20 74 68  first part of th
203b0 65 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 69  e structure.** i
203c0 73 20 63 6f 6e 73 74 61 6e 74 20 62 75 74 20 74  s constant but t
203d0 68 65 20 73 65 63 6f 6e 64 20 70 61 72 74 20 69  he second part i
203e0 73 20 72 65 73 65 74 20 61 74 20 74 68 65 20 62  s reset at the b
203f0 65 67 69 6e 6e 69 6e 67 20 61 6e 64 20 65 6e 64  eginning and end
20400 20 6f 66 0a 2a 2a 20 65 61 63 68 20 72 65 63 75   of.** each recu
20410 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  rsion..**.** The
20420 20 6e 54 61 62 6c 65 4c 6f 63 6b 20 61 6e 64 20   nTableLock and 
20430 61 54 61 62 6c 65 4c 6f 63 6b 20 76 61 72 69 61  aTableLock varia
20440 62 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20 75 73  bles are only us
20450 65 64 20 69 66 20 74 68 65 20 73 68 61 72 65 64  ed if the shared
20460 2d 63 61 63 68 65 0a 2a 2a 20 66 65 61 74 75 72  -cache.** featur
20470 65 20 69 73 20 65 6e 61 62 6c 65 64 20 28 69 66  e is enabled (if
20480 20 73 71 6c 69 74 65 33 54 73 64 28 29 2d 3e 75   sqlite3Tsd()->u
20490 73 65 53 68 61 72 65 64 44 61 74 61 20 69 73 20  seSharedData is 
204a0 74 72 75 65 29 2e 20 54 68 65 79 20 61 72 65 0a  true). They are.
204b0 2a 2a 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  ** used to store
204c0 20 74 68 65 20 73 65 74 20 6f 66 20 74 61 62 6c   the set of tabl
204d0 65 2d 6c 6f 63 6b 73 20 72 65 71 75 69 72 65 64  e-locks required
204e0 20 62 79 20 74 68 65 20 73 74 61 74 65 6d 65 6e   by the statemen
204f0 74 20 62 65 69 6e 67 0a 2a 2a 20 63 6f 6d 70 69  t being.** compi
20500 6c 65 64 2e 20 46 75 6e 63 74 69 6f 6e 20 73 71  led. Function sq
20510 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 29  lite3TableLock()
20520 20 69 73 20 75 73 65 64 20 74 6f 20 61 64 64 20   is used to add 
20530 65 6e 74 72 69 65 73 20 74 6f 20 74 68 65 0a 2a  entries to the.*
20540 2a 20 6c 69 73 74 2e 0a 2a 2f 0a 73 74 72 75 63  * list..*/.struc
20550 74 20 50 61 72 73 65 20 7b 0a 20 20 73 71 6c 69  t Parse {.  sqli
20560 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20  te3 *db;        
20570 20 2f 2a 20 54 68 65 20 6d 61 69 6e 20 64 61 74   /* The main dat
20580 61 62 61 73 65 20 73 74 72 75 63 74 75 72 65 20  abase structure 
20590 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d  */.  char *zErrM
205a0 73 67 3b 20 20 20 20 20 20 20 2f 2a 20 41 6e 20  sg;       /* An 
205b0 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f  error message */
205c0 0a 20 20 56 64 62 65 20 2a 70 56 64 62 65 3b 20  .  Vdbe *pVdbe; 
205d0 20 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 65 6e          /* An en
205e0 67 69 6e 65 20 66 6f 72 20 65 78 65 63 75 74 69  gine for executi
205f0 6e 67 20 64 61 74 61 62 61 73 65 20 62 79 74 65  ng database byte
20600 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 72 63  code */.  int rc
20610 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
20620 2a 20 52 65 74 75 72 6e 20 63 6f 64 65 20 66 72  * Return code fr
20630 6f 6d 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a  om execution */.
20640 20 20 75 38 20 63 6f 6c 4e 61 6d 65 73 53 65 74    u8 colNamesSet
20650 3b 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20 61  ;      /* TRUE a
20660 66 74 65 72 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61  fter OP_ColumnNa
20670 6d 65 20 68 61 73 20 62 65 65 6e 20 69 73 73 75  me has been issu
20680 65 64 20 74 6f 20 70 56 64 62 65 20 2a 2f 0a 20  ed to pVdbe */. 
20690 20 75 38 20 63 68 65 63 6b 53 63 68 65 6d 61 3b   u8 checkSchema;
206a0 20 20 20 20 20 20 2f 2a 20 43 61 75 73 65 73 20        /* Causes 
206b0 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68  schema cookie ch
206c0 65 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72 72  eck after an err
206d0 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 65 73 74 65  or */.  u8 neste
206e0 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  d;           /* 
206f0 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64  Number of nested
20700 20 63 61 6c 6c 73 20 74 6f 20 74 68 65 20 70 61   calls to the pa
20710 72 73 65 72 2f 63 6f 64 65 20 67 65 6e 65 72 61  rser/code genera
20720 74 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 54 65 6d  tor */.  u8 nTem
20730 70 52 65 67 3b 20 20 20 20 20 20 20 20 20 2f 2a  pReg;         /*
20740 20 4e 75 6d 62 65 72 20 6f 66 20 74 65 6d 70 6f   Number of tempo
20750 72 61 72 79 20 72 65 67 69 73 74 65 72 73 20 69  rary registers i
20760 6e 20 61 54 65 6d 70 52 65 67 5b 5d 20 2a 2f 0a  n aTempReg[] */.
20770 20 20 75 38 20 69 73 4d 75 6c 74 69 57 72 69 74    u8 isMultiWrit
20780 65 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69  e;     /* True i
20790 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20  f statement may 
207a0 6d 6f 64 69 66 79 2f 69 6e 73 65 72 74 20 6d 75  modify/insert mu
207b0 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 20  ltiple rows */. 
207c0 20 75 38 20 6d 61 79 41 62 6f 72 74 3b 20 20 20   u8 mayAbort;   
207d0 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
207e0 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 74   statement may t
207f0 68 72 6f 77 20 61 6e 20 41 42 4f 52 54 20 65 78  hrow an ABORT ex
20800 63 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20  ception */.  u8 
20810 68 61 73 43 6f 6d 70 6f 75 6e 64 3b 20 20 20 20  hasCompound;    
20820 20 20 2f 2a 20 4e 65 65 64 20 74 6f 20 69 6e 76    /* Need to inv
20830 6f 6b 65 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f  oke convertCompo
20840 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75  undSelectToSubqu
20850 65 72 79 28 29 20 2a 2f 0a 20 20 75 38 20 6f 6b  ery() */.  u8 ok
20860 43 6f 6e 73 74 46 61 63 74 6f 72 3b 20 20 20 20  ConstFactor;    
20870 2f 2a 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20  /* OK to factor 
20880 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73 20 2a 2f  out constants */
20890 0a 20 20 75 38 20 64 69 73 61 62 6c 65 4c 6f 6f  .  u8 disableLoo
208a0 6b 61 73 69 64 65 3b 20 2f 2a 20 4e 75 6d 62 65  kaside; /* Numbe
208b0 72 20 6f 66 20 74 69 6d 65 73 20 6c 6f 6f 6b 61  r of times looka
208c0 73 69 64 65 20 68 61 73 20 62 65 65 6e 20 64 69  side has been di
208d0 73 61 62 6c 65 64 20 2a 2f 0a 20 20 69 6e 74 20  sabled */.  int 
208e0 6e 52 61 6e 67 65 52 65 67 3b 20 20 20 20 20 20  nRangeReg;      
208f0 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20   /* Size of the 
20900 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74  temporary regist
20910 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e  er block */.  in
20920 74 20 69 52 61 6e 67 65 52 65 67 3b 20 20 20 20  t iRangeReg;    
20930 20 20 20 2f 2a 20 46 69 72 73 74 20 72 65 67 69     /* First regi
20940 73 74 65 72 20 69 6e 20 74 65 6d 70 6f 72 61 72  ster in temporar
20950 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f 63 6b  y register block
20960 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20   */.  int nErr; 
20970 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
20980 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 73  mber of errors s
20990 65 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 61  een */.  int nTa
209a0 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  b;            /*
209b0 20 4e 75 6d 62 65 72 20 6f 66 20 70 72 65 76 69   Number of previ
209c0 6f 75 73 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20  ously allocated 
209d0 56 44 42 45 20 63 75 72 73 6f 72 73 20 2a 2f 0a  VDBE cursors */.
209e0 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20    int nMem;     
209f0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
20a00 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73   of memory cells
20a10 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a   used so far */.
20a20 20 20 69 6e 74 20 6e 4f 70 41 6c 6c 6f 63 3b 20    int nOpAlloc; 
20a30 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
20a40 20 6f 66 20 73 6c 6f 74 73 20 61 6c 6c 6f 63 61   of slots alloca
20a50 74 65 64 20 66 6f 72 20 56 64 62 65 2e 61 4f 70  ted for Vdbe.aOp
20a60 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 4f 70  [] */.  int szOp
20a70 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 2f 2a 20  Alloc;       /* 
20a80 42 79 74 65 73 20 6f 66 20 6d 65 6d 6f 72 79 20  Bytes of memory 
20a90 73 70 61 63 65 20 61 6c 6c 6f 63 61 74 65 64 20  space allocated 
20aa0 66 6f 72 20 56 64 62 65 2e 61 4f 70 5b 5d 20 2a  for Vdbe.aOp[] *
20ab0 2f 0a 20 20 69 6e 74 20 69 53 65 6c 66 54 61 62  /.  int iSelfTab
20ac0 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c  ;        /* Tabl
20ad0 65 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  e associated wit
20ae0 68 20 61 6e 20 69 6e 64 65 78 20 6f 6e 20 65 78  h an index on ex
20af0 70 72 2c 20 6f 72 20 6e 65 67 61 74 69 76 65 0a  pr, or negative.
20b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20b10 20 20 20 20 20 20 20 2a 2a 20 6f 66 20 74 68 65         ** of the
20b20 20 62 61 73 65 20 72 65 67 69 73 74 65 72 20 64   base register d
20b30 75 72 69 6e 67 20 63 68 65 63 6b 2d 63 6f 6e 73  uring check-cons
20b40 74 72 61 69 6e 74 20 65 76 61 6c 20 2a 2f 0a 20  traint eval */. 
20b50 20 69 6e 74 20 6e 4c 61 62 65 6c 3b 20 20 20 20   int nLabel;    
20b60 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
20b70 6f 66 20 6c 61 62 65 6c 73 20 75 73 65 64 20 2a  of labels used *
20b80 2f 0a 20 20 69 6e 74 20 2a 61 4c 61 62 65 6c 3b  /.  int *aLabel;
20b90 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63           /* Spac
20ba0 65 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 6c 61  e to hold the la
20bb0 62 65 6c 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69  bels */.  ExprLi
20bc0 73 74 20 2a 70 43 6f 6e 73 74 45 78 70 72 3b 2f  st *pConstExpr;/
20bd0 2a 20 43 6f 6e 73 74 61 6e 74 20 65 78 70 72 65  * Constant expre
20be0 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 54 6f 6b 65  ssions */.  Toke
20bf0 6e 20 63 6f 6e 73 74 72 61 69 6e 74 4e 61 6d 65  n constraintName
20c00 3b 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20  ;/* Name of the 
20c10 63 6f 6e 73 74 72 61 69 6e 74 20 63 75 72 72 65  constraint curre
20c20 6e 74 6c 79 20 62 65 69 6e 67 20 70 61 72 73 65  ntly being parse
20c30 64 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 77  d */.  yDbMask w
20c40 72 69 74 65 4d 61 73 6b 3b 20 20 20 2f 2a 20 53  riteMask;   /* S
20c50 74 61 72 74 20 61 20 77 72 69 74 65 20 74 72 61  tart a write tra
20c60 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68 65 73  nsaction on thes
20c70 65 20 64 61 74 61 62 61 73 65 73 20 2a 2f 0a 20  e databases */. 
20c80 20 79 44 62 4d 61 73 6b 20 63 6f 6f 6b 69 65 4d   yDbMask cookieM
20c90 61 73 6b 3b 20 20 2f 2a 20 42 69 74 6d 61 73 6b  ask;  /* Bitmask
20ca0 20 6f 66 20 73 63 68 65 6d 61 20 76 65 72 69 66   of schema verif
20cb0 69 65 64 20 64 61 74 61 62 61 73 65 73 20 2a 2f  ied databases */
20cc0 0a 20 20 69 6e 74 20 72 65 67 52 6f 77 69 64 3b  .  int regRowid;
20cd0 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73          /* Regis
20ce0 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 77 69  ter holding rowi
20cf0 64 20 6f 66 20 43 52 45 41 54 45 20 54 41 42 4c  d of CREATE TABL
20d00 45 20 65 6e 74 72 79 20 2a 2f 0a 20 20 69 6e 74  E entry */.  int
20d10 20 72 65 67 52 6f 6f 74 3b 20 20 20 20 20 20 20   regRoot;       
20d20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f    /* Register ho
20d30 6c 64 69 6e 67 20 72 6f 6f 74 20 70 61 67 65 20  lding root page 
20d40 6e 75 6d 62 65 72 20 66 6f 72 20 6e 65 77 20 6f  number for new o
20d50 62 6a 65 63 74 73 20 2a 2f 0a 20 20 69 6e 74 20  bjects */.  int 
20d60 6e 4d 61 78 41 72 67 3b 20 20 20 20 20 20 20 20  nMaxArg;        
20d70 20 2f 2a 20 4d 61 78 20 61 72 67 73 20 70 61 73   /* Max args pas
20d80 73 65 64 20 74 6f 20 75 73 65 72 20 66 75 6e 63  sed to user func
20d90 74 69 6f 6e 20 62 79 20 73 75 62 2d 70 72 6f 67  tion by sub-prog
20da0 72 61 6d 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 65  ram */.  int nSe
20db0 6c 65 63 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  lect;         /*
20dc0 20 4e 75 6d 62 65 72 20 6f 66 20 53 45 4c 45 43   Number of SELEC
20dd0 54 20 73 74 6d 74 73 2e 20 43 6f 75 6e 74 65 72  T stmts. Counter
20de0 20 66 6f 72 20 53 65 6c 65 63 74 2e 73 65 6c 49   for Select.selI
20df0 64 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  d */.#ifndef SQL
20e00 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f  ITE_OMIT_SHARED_
20e10 43 41 43 48 45 0a 20 20 69 6e 74 20 6e 54 61 62  CACHE.  int nTab
20e20 6c 65 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 2f  leLock;        /
20e30 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 63 6b  * Number of lock
20e40 73 20 69 6e 20 61 54 61 62 6c 65 4c 6f 63 6b 20  s in aTableLock 
20e50 2a 2f 0a 20 20 54 61 62 6c 65 4c 6f 63 6b 20 2a  */.  TableLock *
20e60 61 54 61 62 6c 65 4c 6f 63 6b 3b 20 2f 2a 20 52  aTableLock; /* R
20e70 65 71 75 69 72 65 64 20 74 61 62 6c 65 20 6c 6f  equired table lo
20e80 63 6b 73 20 66 6f 72 20 73 68 61 72 65 64 2d 63  cks for shared-c
20e90 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a 23 65 6e  ache mode */.#en
20ea0 64 69 66 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66  dif.  AutoincInf
20eb0 6f 20 2a 70 41 69 6e 63 3b 20 20 2f 2a 20 49 6e  o *pAinc;  /* In
20ec0 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
20ed0 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 63 6f  AUTOINCREMENT co
20ee0 75 6e 74 65 72 73 20 2a 2f 0a 20 20 50 61 72 73  unters */.  Pars
20ef0 65 20 2a 70 54 6f 70 6c 65 76 65 6c 3b 20 20 20  e *pToplevel;   
20f00 20 2f 2a 20 50 61 72 73 65 20 73 74 72 75 63 74   /* Parse struct
20f10 75 72 65 20 66 6f 72 20 6d 61 69 6e 20 70 72 6f  ure for main pro
20f20 67 72 61 6d 20 28 6f 72 20 4e 55 4c 4c 29 20 2a  gram (or NULL) *
20f30 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 72 69 67  /.  Table *pTrig
20f40 67 65 72 54 61 62 3b 20 20 2f 2a 20 54 61 62 6c  gerTab;  /* Tabl
20f50 65 20 74 72 69 67 67 65 72 73 20 61 72 65 20 62  e triggers are b
20f60 65 69 6e 67 20 63 6f 64 65 64 20 66 6f 72 20 2a  eing coded for *
20f70 2f 0a 20 20 69 6e 74 20 61 64 64 72 43 72 54 61  /.  int addrCrTa
20f80 62 3b 20 20 20 20 20 20 20 2f 2a 20 41 64 64 72  b;       /* Addr
20f90 65 73 73 20 6f 66 20 4f 50 5f 43 72 65 61 74 65  ess of OP_Create
20fa0 42 74 72 65 65 20 6f 70 63 6f 64 65 20 6f 6e 20  Btree opcode on 
20fb0 43 52 45 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a  CREATE TABLE */.
20fc0 20 20 75 33 32 20 6e 51 75 65 72 79 4c 6f 6f 70    u32 nQueryLoop
20fd0 3b 20 20 20 20 20 20 2f 2a 20 45 73 74 20 6e 75  ;      /* Est nu
20fe0 6d 62 65 72 20 6f 66 20 69 74 65 72 61 74 69 6f  mber of iteratio
20ff0 6e 73 20 6f 66 20 61 20 71 75 65 72 79 20 28 31  ns of a query (1
21000 30 2a 6c 6f 67 32 28 4e 29 29 20 2a 2f 0a 20 20  0*log2(N)) */.  
21010 75 33 32 20 6f 6c 64 6d 61 73 6b 3b 20 20 20 20  u32 oldmask;    
21020 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20       /* Mask of 
21030 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65  old.* columns re
21040 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 33  ferenced */.  u3
21050 32 20 6e 65 77 6d 61 73 6b 3b 20 20 20 20 20 20  2 newmask;      
21060 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6e 65     /* Mask of ne
21070 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65  w.* columns refe
21080 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 38 20 65  renced */.  u8 e
21090 54 72 69 67 67 65 72 4f 70 3b 20 20 20 20 20 20  TriggerOp;      
210a0 20 2f 2a 20 54 4b 5f 55 50 44 41 54 45 2c 20 54   /* TK_UPDATE, T
210b0 4b 5f 49 4e 53 45 52 54 20 6f 72 20 54 4b 5f 44  K_INSERT or TK_D
210c0 45 4c 45 54 45 20 2a 2f 0a 20 20 75 38 20 65 4f  ELETE */.  u8 eO
210d0 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20  rconf;          
210e0 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f  /* Default ON CO
210f0 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79 20 66 6f  NFLICT policy fo
21100 72 20 74 72 69 67 67 65 72 20 73 74 65 70 73 20  r trigger steps 
21110 2a 2f 0a 20 20 75 38 20 64 69 73 61 62 6c 65 54  */.  u8 disableT
21120 72 69 67 67 65 72 73 3b 20 20 2f 2a 20 54 72 75  riggers;  /* Tru
21130 65 20 74 6f 20 64 69 73 61 62 6c 65 20 74 72 69  e to disable tri
21140 67 67 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a  ggers */..  /***
21150 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21160 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21170 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21180 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21190 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a 20 46 69 65  *******.  ** Fie
211a0 6c 64 73 20 61 62 6f 76 65 20 6d 75 73 74 20 62  lds above must b
211b0 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f  e initialized to
211c0 20 7a 65 72 6f 2e 20 20 54 68 65 20 66 69 65 6c   zero.  The fiel
211d0 64 73 20 74 68 61 74 20 66 6f 6c 6c 6f 77 2c 0a  ds that follow,.
211e0 20 20 2a 2a 20 64 6f 77 6e 20 74 6f 20 74 68 65    ** down to the
211f0 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68   beginning of th
21200 65 20 72 65 63 75 72 73 69 76 65 20 73 65 63 74  e recursive sect
21210 69 6f 6e 2c 20 64 6f 20 6e 6f 74 20 6e 65 65 64  ion, do not need
21220 20 74 6f 20 62 65 0a 20 20 2a 2a 20 69 6e 69 74   to be.  ** init
21230 69 61 6c 69 7a 65 64 20 61 73 20 74 68 65 79 20  ialized as they 
21240 77 69 6c 6c 20 62 65 20 73 65 74 20 62 65 66 6f  will be set befo
21250 72 65 20 62 65 69 6e 67 20 75 73 65 64 2e 20 20  re being used.  
21260 54 68 65 20 62 6f 75 6e 64 61 72 79 20 69 73 0a  The boundary is.
21270 20 20 2a 2a 20 64 65 74 65 72 6d 69 6e 65 64 20    ** determined 
21280 62 79 20 6f 66 66 73 65 74 6f 66 28 50 61 72 73  by offsetof(Pars
21290 65 2c 61 54 65 6d 70 52 65 67 29 2e 0a 20 20 2a  e,aTempReg)..  *
212a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
212b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
212c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
212d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
212e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 69 6e  *********/..  in
212f0 74 20 61 54 65 6d 70 52 65 67 5b 38 5d 3b 20 20  t aTempReg[8];  
21300 20 20 20 20 20 20 2f 2a 20 48 6f 6c 64 69 6e 67        /* Holding
21310 20 61 72 65 61 20 66 6f 72 20 74 65 6d 70 6f 72   area for tempor
21320 61 72 79 20 72 65 67 69 73 74 65 72 73 20 2a 2f  ary registers */
21330 0a 20 20 54 6f 6b 65 6e 20 73 4e 61 6d 65 54 6f  .  Token sNameTo
21340 6b 65 6e 3b 20 20 20 20 20 20 20 2f 2a 20 54 6f  ken;       /* To
21350 6b 65 6e 20 77 69 74 68 20 75 6e 71 75 61 6c 69  ken with unquali
21360 66 69 65 64 20 73 63 68 65 6d 61 20 6f 62 6a 65  fied schema obje
21370 63 74 20 6e 61 6d 65 20 2a 2f 0a 0a 20 20 2f 2a  ct name */..  /*
21380 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21390 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
213a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
213b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
213c0 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a 20 41 62 6f  *******.  ** Abo
213d0 76 65 20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62  ve is constant b
213e0 65 74 77 65 65 6e 20 72 65 63 75 72 73 69 6f 6e  etween recursion
213f0 73 2e 20 20 42 65 6c 6f 77 20 69 73 20 72 65 73  s.  Below is res
21400 65 74 20 62 65 66 6f 72 65 20 61 6e 64 20 61 66  et before and af
21410 74 65 72 0a 20 20 2a 2a 20 65 61 63 68 20 72 65  ter.  ** each re
21420 63 75 72 73 69 6f 6e 2e 20 20 54 68 65 20 62 6f  cursion.  The bo
21430 75 6e 64 61 72 79 20 62 65 74 77 65 65 6e 20 74  undary between t
21440 68 65 73 65 20 74 77 6f 20 72 65 67 69 6f 6e 73  hese two regions
21450 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 0a 20   is determined. 
21460 20 2a 2a 20 75 73 69 6e 67 20 6f 66 66 73 65 74   ** using offset
21470 6f 66 28 50 61 72 73 65 2c 73 4c 61 73 74 54 6f  of(Parse,sLastTo
21480 6b 65 6e 29 20 73 6f 20 74 68 65 20 73 4c 61 73  ken) so the sLas
21490 74 54 6f 6b 65 6e 20 66 69 65 6c 64 20 6d 75 73  tToken field mus
214a0 74 20 62 65 20 74 68 65 0a 20 20 2a 2a 20 66 69  t be the.  ** fi
214b0 72 73 74 20 66 69 65 6c 64 20 69 6e 20 74 68 65  rst field in the
214c0 20 72 65 63 75 72 73 69 76 65 20 72 65 67 69 6f   recursive regio
214d0 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  n..  ***********
214e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
214f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21500 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21510 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a  *************/..
21520 20 20 54 6f 6b 65 6e 20 73 4c 61 73 74 54 6f 6b    Token sLastTok
21530 65 6e 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65  en;       /* The
21540 20 6c 61 73 74 20 74 6f 6b 65 6e 20 70 61 72 73   last token pars
21550 65 64 20 2a 2f 0a 20 20 79 6e 56 61 72 20 6e 56  ed */.  ynVar nV
21560 61 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ar;             
21570 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 27    /* Number of '
21580 3f 27 20 76 61 72 69 61 62 6c 65 73 20 73 65 65  ?' variables see
21590 6e 20 69 6e 20 74 68 65 20 53 51 4c 20 73 6f 20  n in the SQL so 
215a0 66 61 72 20 2a 2f 0a 20 20 75 38 20 69 50 6b 53  far */.  u8 iPkS
215b0 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20  ortOrder;       
215c0 20 20 20 2f 2a 20 41 53 43 20 6f 72 20 44 45 53     /* ASC or DES
215d0 43 20 66 6f 72 20 49 4e 54 45 47 45 52 20 50 52  C for INTEGER PR
215e0 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 75  IMARY KEY */.  u
215f0 38 20 65 78 70 6c 61 69 6e 3b 20 20 20 20 20 20  8 explain;      
21600 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
21610 20 69 66 20 74 68 65 20 45 58 50 4c 41 49 4e 20   if the EXPLAIN 
21620 66 6c 61 67 20 69 73 20 66 6f 75 6e 64 20 6f 6e  flag is found on
21630 20 74 68 65 20 71 75 65 72 79 20 2a 2f 0a 23 69   the query */.#i
21640 66 20 21 28 64 65 66 69 6e 65 64 28 53 51 4c 49  f !(defined(SQLI
21650 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
21660 41 42 4c 45 29 20 26 26 20 64 65 66 69 6e 65 64  ABLE) && defined
21670 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54  (SQLITE_OMIT_ALT
21680 45 52 54 41 42 4c 45 29 29 0a 20 20 75 38 20 65  ERTABLE)).  u8 e
21690 50 61 72 73 65 4d 6f 64 65 3b 20 20 20 20 20 20  ParseMode;      
216a0 20 20 20 20 20 20 2f 2a 20 50 41 52 53 45 5f 4d        /* PARSE_M
216b0 4f 44 45 5f 58 58 58 20 63 6f 6e 73 74 61 6e 74  ODE_XXX constant
216c0 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64   */.#endif.#ifnd
216d0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
216e0 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e  IRTUALTABLE.  in
216f0 74 20 6e 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20  t nVtabLock;    
21700 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
21710 72 20 6f 66 20 76 69 72 74 75 61 6c 20 74 61 62  r of virtual tab
21720 6c 65 73 20 74 6f 20 6c 6f 63 6b 20 2a 2f 0a 23  les to lock */.#
21730 65 6e 64 69 66 0a 20 20 69 6e 74 20 6e 48 65 69  endif.  int nHei
21740 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ght;            
21750 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20    /* Expression 
21760 74 72 65 65 20 68 65 69 67 68 74 20 6f 66 20 63  tree height of c
21770 75 72 72 65 6e 74 20 73 75 62 2d 73 65 6c 65 63  urrent sub-selec
21780 74 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  t */.#ifndef SQL
21790 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e  ITE_OMIT_EXPLAIN
217a0 0a 20 20 69 6e 74 20 61 64 64 72 45 78 70 6c 61  .  int addrExpla
217b0 69 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  in;          /* 
217c0 41 64 64 72 65 73 73 20 6f 66 20 63 75 72 72 65  Address of curre
217d0 6e 74 20 4f 50 5f 45 78 70 6c 61 69 6e 20 6f 70  nt OP_Explain op
217e0 63 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  code */.#endif. 
217f0 20 56 4c 69 73 74 20 2a 70 56 4c 69 73 74 3b 20   VList *pVList; 
21800 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61             /* Ma
21810 70 70 69 6e 67 20 62 65 74 77 65 65 6e 20 76 61  pping between va
21820 72 69 61 62 6c 65 20 6e 61 6d 65 73 20 61 6e 64  riable names and
21830 20 6e 75 6d 62 65 72 73 20 2a 2f 0a 20 20 56 64   numbers */.  Vd
21840 62 65 20 2a 70 52 65 70 72 65 70 61 72 65 3b 20  be *pReprepare; 
21850 20 20 20 20 20 20 20 20 2f 2a 20 56 4d 20 62 65          /* VM be
21860 69 6e 67 20 72 65 70 72 65 70 61 72 65 64 20 28  ing reprepared (
21870 73 71 6c 69 74 65 33 52 65 70 72 65 70 61 72 65  sqlite3Reprepare
21880 28 29 29 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ()) */.  const c
21890 68 61 72 20 2a 7a 54 61 69 6c 3b 20 20 20 20 20  har *zTail;     
218a0 20 20 20 2f 2a 20 41 6c 6c 20 53 51 4c 20 74 65     /* All SQL te
218b0 78 74 20 70 61 73 74 20 74 68 65 20 6c 61 73 74  xt past the last
218c0 20 73 65 6d 69 63 6f 6c 6f 6e 20 70 61 72 73 65   semicolon parse
218d0 64 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e  d */.  Table *pN
218e0 65 77 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20  ewTable;        
218f0 20 2f 2a 20 41 20 74 61 62 6c 65 20 62 65 69 6e   /* A table bein
21900 67 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79  g constructed by
21910 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 2a 2f   CREATE TABLE */
21920 0a 20 20 49 6e 64 65 78 20 2a 70 4e 65 77 49 6e  .  Index *pNewIn
21930 64 65 78 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  dex;         /* 
21940 41 6e 20 69 6e 64 65 78 20 62 65 69 6e 67 20 63  An index being c
21950 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 43 52  onstructed by CR
21960 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a 20 20  EATE INDEX */.  
21970 54 72 69 67 67 65 72 20 2a 70 4e 65 77 54 72 69  Trigger *pNewTri
21980 67 67 65 72 3b 20 20 20 20 20 2f 2a 20 54 72 69  gger;     /* Tri
21990 67 67 65 72 20 75 6e 64 65 72 20 63 6f 6e 73 74  gger under const
219a0 72 75 63 74 20 62 79 20 61 20 43 52 45 41 54 45  ruct by a CREATE
219b0 20 54 52 49 47 47 45 52 20 2a 2f 0a 20 20 63 6f   TRIGGER */.  co
219c0 6e 73 74 20 63 68 61 72 20 2a 7a 41 75 74 68 43  nst char *zAuthC
219d0 6f 6e 74 65 78 74 3b 20 2f 2a 20 54 68 65 20 36  ontext; /* The 6
219e0 74 68 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20  th parameter to 
219f0 64 62 2d 3e 78 41 75 74 68 20 63 61 6c 6c 62 61  db->xAuth callba
21a00 63 6b 73 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  cks */.#ifndef S
21a10 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
21a20 41 4c 54 41 42 4c 45 0a 20 20 54 6f 6b 65 6e 20  ALTABLE.  Token 
21a30 73 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  sArg;           
21a40 20 20 20 20 2f 2a 20 43 6f 6d 70 6c 65 74 65 20      /* Complete 
21a50 74 65 78 74 20 6f 66 20 61 20 6d 6f 64 75 6c 65  text of a module
21a60 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 20 20 54   argument */.  T
21a70 61 62 6c 65 20 2a 2a 61 70 56 74 61 62 4c 6f 63  able **apVtabLoc
21a80 6b 3b 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e  k;       /* Poin
21a90 74 65 72 20 74 6f 20 76 69 72 74 75 61 6c 20 74  ter to virtual t
21aa0 61 62 6c 65 73 20 6e 65 65 64 69 6e 67 20 6c 6f  ables needing lo
21ab0 63 6b 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a  cking */.#endif.
21ac0 20 20 54 61 62 6c 65 20 2a 70 5a 6f 6d 62 69 65    Table *pZombie
21ad0 54 61 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c  Tab;        /* L
21ae0 69 73 74 20 6f 66 20 54 61 62 6c 65 20 6f 62 6a  ist of Table obj
21af0 65 63 74 73 20 74 6f 20 64 65 6c 65 74 65 20 61  ects to delete a
21b00 66 74 65 72 20 63 6f 64 65 20 67 65 6e 20 2a 2f  fter code gen */
21b10 0a 20 20 54 72 69 67 67 65 72 50 72 67 20 2a 70  .  TriggerPrg *p
21b20 54 72 69 67 67 65 72 50 72 67 3b 20 20 2f 2a 20  TriggerPrg;  /* 
21b30 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 63  Linked list of c
21b40 6f 64 65 64 20 74 72 69 67 67 65 72 73 20 2a 2f  oded triggers */
21b50 0a 20 20 57 69 74 68 20 2a 70 57 69 74 68 3b 20  .  With *pWith; 
21b60 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
21b70 43 75 72 72 65 6e 74 20 57 49 54 48 20 63 6c 61  Current WITH cla
21b80 75 73 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a  use, or NULL */.
21b90 20 20 57 69 74 68 20 2a 70 57 69 74 68 54 6f 46    With *pWithToF
21ba0 72 65 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 46  ree;        /* F
21bb0 72 65 65 20 74 68 69 73 20 57 49 54 48 20 6f 62  ree this WITH ob
21bc0 6a 65 63 74 20 61 74 20 74 68 65 20 65 6e 64 20  ject at the end 
21bd0 6f 66 20 74 68 65 20 70 61 72 73 65 20 2a 2f 0a  of the parse */.
21be0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
21bf0 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c 45 0a 20  MIT_ALTERTABLE. 
21c00 20 52 65 6e 61 6d 65 54 6f 6b 65 6e 20 2a 70 52   RenameToken *pR
21c10 65 6e 61 6d 65 3b 20 20 20 20 20 2f 2a 20 54 6f  ename;     /* To
21c20 6b 65 6e 73 20 73 75 62 6a 65 63 74 20 74 6f 20  kens subject to 
21c30 72 65 6e 61 6d 69 6e 67 20 62 79 20 41 4c 54 45  renaming by ALTE
21c40 52 20 54 41 42 4c 45 20 2a 2f 0a 23 65 6e 64 69  R TABLE */.#endi
21c50 66 0a 20 20 69 6e 74 20 69 46 69 78 44 62 3b 0a  f.  int iFixDb;.
21c60 7d 3b 0a 0a 23 64 65 66 69 6e 65 20 50 41 52 53  };..#define PARS
21c70 45 5f 4d 4f 44 45 5f 4e 4f 52 4d 41 4c 20 20 20  E_MODE_NORMAL   
21c80 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20 50       0.#define P
21c90 41 52 53 45 5f 4d 4f 44 45 5f 44 45 43 4c 41 52  ARSE_MODE_DECLAR
21ca0 45 5f 56 54 41 42 20 20 31 0a 23 64 65 66 69 6e  E_VTAB  1.#defin
21cb0 65 20 50 41 52 53 45 5f 4d 4f 44 45 5f 52 45 4e  e PARSE_MODE_REN
21cc0 41 4d 45 5f 43 4f 4c 55 4d 4e 20 32 0a 23 64 65  AME_COLUMN 2.#de
21cd0 66 69 6e 65 20 50 41 52 53 45 5f 4d 4f 44 45 5f  fine PARSE_MODE_
21ce0 52 45 4e 41 4d 45 5f 54 41 42 4c 45 20 20 33 0a  RENAME_TABLE  3.
21cf0 0a 2f 2a 0a 2a 2a 20 53 69 7a 65 73 20 61 6e 64  ./*.** Sizes and
21d00 20 70 6f 69 6e 74 65 72 73 20 6f 66 20 76 61 72   pointers of var
21d10 69 6f 75 73 20 70 61 72 74 73 20 6f 66 20 74 68  ious parts of th
21d20 65 20 50 61 72 73 65 20 6f 62 6a 65 63 74 2e 0a  e Parse object..
21d30 2a 2f 0a 23 64 65 66 69 6e 65 20 50 41 52 53 45  */.#define PARSE
21d40 5f 48 44 52 5f 53 5a 20 6f 66 66 73 65 74 6f 66  _HDR_SZ offsetof
21d50 28 50 61 72 73 65 2c 61 54 65 6d 70 52 65 67 29  (Parse,aTempReg)
21d60 20 2f 2a 20 52 65 63 75 72 73 69 76 65 20 70 61   /* Recursive pa
21d70 72 74 20 77 2f 6f 20 61 43 6f 6c 43 61 63 68 65  rt w/o aColCache
21d80 2a 2f 0a 23 64 65 66 69 6e 65 20 50 41 52 53 45  */.#define PARSE
21d90 5f 52 45 43 55 52 53 45 5f 53 5a 20 6f 66 66 73  _RECURSE_SZ offs
21da0 65 74 6f 66 28 50 61 72 73 65 2c 73 4c 61 73 74  etof(Parse,sLast
21db0 54 6f 6b 65 6e 29 20 20 20 20 2f 2a 20 52 65 63  Token)    /* Rec
21dc0 75 72 73 69 76 65 20 70 61 72 74 20 2a 2f 0a 23  ursive part */.#
21dd0 64 65 66 69 6e 65 20 50 41 52 53 45 5f 54 41 49  define PARSE_TAI
21de0 4c 5f 53 5a 20 28 73 69 7a 65 6f 66 28 50 61 72  L_SZ (sizeof(Par
21df0 73 65 29 2d 50 41 52 53 45 5f 52 45 43 55 52 53  se)-PARSE_RECURS
21e00 45 5f 53 5a 29 20 2f 2a 20 4e 6f 6e 2d 72 65 63  E_SZ) /* Non-rec
21e10 75 72 73 69 76 65 20 70 61 72 74 20 2a 2f 0a 23  ursive part */.#
21e20 64 65 66 69 6e 65 20 50 41 52 53 45 5f 54 41 49  define PARSE_TAI
21e30 4c 28 58 29 20 28 28 28 63 68 61 72 2a 29 28 58  L(X) (((char*)(X
21e40 29 29 2b 50 41 52 53 45 5f 52 45 43 55 52 53 45  ))+PARSE_RECURSE
21e50 5f 53 5a 29 20 20 2f 2a 20 50 6f 69 6e 74 65 72  _SZ)  /* Pointer
21e60 20 74 6f 20 74 61 69 6c 20 2a 2f 0a 0a 2f 2a 0a   to tail */../*.
21e70 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69  ** Return true i
21e80 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 73 69  f currently insi
21e90 64 65 20 61 6e 20 73 71 6c 69 74 65 33 5f 64 65  de an sqlite3_de
21ea0 63 6c 61 72 65 5f 76 74 61 62 28 29 20 63 61 6c  clare_vtab() cal
21eb0 6c 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  l..*/.#ifdef SQL
21ec0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
21ed0 54 41 42 4c 45 0a 20 20 23 64 65 66 69 6e 65 20  TABLE.  #define 
21ee0 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41 42 20  IN_DECLARE_VTAB 
21ef0 30 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  0.#else.  #defin
21f00 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41  e IN_DECLARE_VTA
21f10 42 20 28 70 50 61 72 73 65 2d 3e 65 50 61 72 73  B (pParse->ePars
21f20 65 4d 6f 64 65 3d 3d 50 41 52 53 45 5f 4d 4f 44  eMode==PARSE_MOD
21f30 45 5f 44 45 43 4c 41 52 45 5f 56 54 41 42 29 0a  E_DECLARE_VTAB).
21f40 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69  #endif..#if defi
21f50 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
21f60 41 4c 54 45 52 54 41 42 4c 45 29 0a 20 20 23 64  ALTERTABLE).  #d
21f70 65 66 69 6e 65 20 49 4e 5f 52 45 4e 41 4d 45 5f  efine IN_RENAME_
21f80 4f 42 4a 45 43 54 20 30 0a 23 65 6c 73 65 0a 20  OBJECT 0.#else. 
21f90 20 23 64 65 66 69 6e 65 20 49 4e 5f 52 45 4e 41   #define IN_RENA
21fa0 4d 45 5f 4f 42 4a 45 43 54 20 28 70 50 61 72 73  ME_OBJECT (pPars
21fb0 65 2d 3e 65 50 61 72 73 65 4d 6f 64 65 3e 3d 50  e->eParseMode>=P
21fc0 41 52 53 45 5f 4d 4f 44 45 5f 52 45 4e 41 4d 45  ARSE_MODE_RENAME
21fd0 5f 43 4f 4c 55 4d 4e 29 0a 23 65 6e 64 69 66 0a  _COLUMN).#endif.
21fe0 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
21ff0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
22000 54 41 42 4c 45 29 20 26 26 20 64 65 66 69 6e 65  TABLE) && define
22010 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c  d(SQLITE_OMIT_AL
22020 54 45 52 54 41 42 4c 45 29 0a 20 20 23 64 65 66  TERTABLE).  #def
22030 69 6e 65 20 49 4e 5f 53 50 45 43 49 41 4c 5f 50  ine IN_SPECIAL_P
22040 41 52 53 45 20 30 0a 23 65 6c 73 65 0a 20 20 23  ARSE 0.#else.  #
22050 64 65 66 69 6e 65 20 49 4e 5f 53 50 45 43 49 41  define IN_SPECIA
22060 4c 5f 50 41 52 53 45 20 28 70 50 61 72 73 65 2d  L_PARSE (pParse-
22070 3e 65 50 61 72 73 65 4d 6f 64 65 21 3d 50 41 52  >eParseMode!=PAR
22080 53 45 5f 4d 4f 44 45 5f 4e 4f 52 4d 41 4c 29 0a  SE_MODE_NORMAL).
22090 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e  #endif../*.** An
220a0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
220b0 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
220c0 74 75 72 65 20 63 61 6e 20 62 65 20 64 65 63 6c  ture can be decl
220d0 61 72 65 64 20 6f 6e 20 61 20 73 74 61 63 6b 20  ared on a stack 
220e0 61 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73  and used.** to s
220f0 61 76 65 20 74 68 65 20 50 61 72 73 65 2e 7a 41  ave the Parse.zA
22100 75 74 68 43 6f 6e 74 65 78 74 20 76 61 6c 75 65  uthContext value
22110 20 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20   so that it can 
22120 62 65 20 72 65 73 74 6f 72 65 64 20 6c 61 74 65  be restored late
22130 72 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74  r..*/.struct Aut
22140 68 43 6f 6e 74 65 78 74 20 7b 0a 20 20 63 6f 6e  hContext {.  con
22150 73 74 20 63 68 61 72 20 2a 7a 41 75 74 68 43 6f  st char *zAuthCo
22160 6e 74 65 78 74 3b 20 20 20 2f 2a 20 50 75 74 20  ntext;   /* Put 
22170 73 61 76 65 64 20 50 61 72 73 65 2e 7a 41 75 74  saved Parse.zAut
22180 68 43 6f 6e 74 65 78 74 20 68 65 72 65 20 2a 2f  hContext here */
22190 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65  .  Parse *pParse
221a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
221b0 2a 20 54 68 65 20 50 61 72 73 65 20 73 74 72 75  * The Parse stru
221c0 63 74 75 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  cture */.};../*.
221d0 2a 2a 20 42 69 74 66 69 65 6c 64 20 66 6c 61 67  ** Bitfield flag
221e0 73 20 66 6f 72 20 50 35 20 76 61 6c 75 65 20 69  s for P5 value i
221f0 6e 20 76 61 72 69 6f 75 73 20 6f 70 63 6f 64 65  n various opcode
22200 73 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63  s..**.** Value c
22210 6f 6e 73 74 72 61 69 6e 74 73 20 28 65 6e 66 6f  onstraints (enfo
22220 72 63 65 64 20 76 69 61 20 61 73 73 65 72 74 28  rced via assert(
22230 29 29 3a 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47  )):.**    OPFLAG
22240 5f 4c 45 4e 47 54 48 41 52 47 20 20 20 20 3d 3d  _LENGTHARG    ==
22250 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e   SQLITE_FUNC_LEN
22260 47 54 48 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47  GTH.**    OPFLAG
22270 5f 54 59 50 45 4f 46 41 52 47 20 20 20 20 3d 3d  _TYPEOFARG    ==
22280 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59 50   SQLITE_FUNC_TYP
22290 45 4f 46 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47  EOF.**    OPFLAG
222a0 5f 42 55 4c 4b 43 53 52 20 20 20 20 20 20 3d 3d  _BULKCSR      ==
222b0 20 42 54 52 45 45 5f 42 55 4c 4b 4c 4f 41 44 0a   BTREE_BULKLOAD.
222c0 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 53 45 45  **    OPFLAG_SEE
222d0 4b 45 51 20 20 20 20 20 20 20 3d 3d 20 42 54 52  KEQ       == BTR
222e0 45 45 5f 53 45 45 4b 5f 45 51 0a 2a 2a 20 20 20  EE_SEEK_EQ.**   
222f0 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54   OPFLAG_FORDELET
22300 45 20 20 20 20 3d 3d 20 42 54 52 45 45 5f 46 4f  E    == BTREE_FO
22310 52 44 45 4c 45 54 45 0a 2a 2a 20 20 20 20 4f 50  RDELETE.**    OP
22320 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f  FLAG_SAVEPOSITIO
22330 4e 20 3d 3d 20 42 54 52 45 45 5f 53 41 56 45 50  N == BTREE_SAVEP
22340 4f 53 49 54 49 4f 4e 0a 2a 2a 20 20 20 20 4f 50  OSITION.**    OP
22350 46 4c 41 47 5f 41 55 58 44 45 4c 45 54 45 20 20  FLAG_AUXDELETE  
22360 20 20 3d 3d 20 42 54 52 45 45 5f 41 55 58 44 45    == BTREE_AUXDE
22370 4c 45 54 45 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  LETE.*/.#define 
22380 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 20  OPFLAG_NCHANGE  
22390 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20       0x01    /* 
223a0 4f 50 5f 49 6e 73 65 72 74 3a 20 53 65 74 20 74  OP_Insert: Set t
223b0 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6e 43 68  o update db->nCh
223c0 61 6e 67 65 20 2a 2f 0a 20 20 20 20 20 20 20 20  ange */.        
223d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
223e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
223f0 41 6c 73 6f 20 75 73 65 64 20 69 6e 20 50 32 20  Also used in P2 
22400 28 6e 6f 74 20 50 35 29 20 6f 66 20 4f 50 5f 44  (not P5) of OP_D
22410 65 6c 65 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65  elete */.#define
22420 20 4f 50 46 4c 41 47 5f 4e 4f 43 48 4e 47 20 20   OPFLAG_NOCHNG  
22430 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a        0x01    /*
22440 20 4f 50 5f 56 43 6f 6c 75 6d 6e 20 6e 6f 63 68   OP_VColumn noch
22450 61 6e 67 65 20 66 6f 72 20 55 50 44 41 54 45 20  ange for UPDATE 
22460 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
22470 47 5f 45 50 48 45 4d 20 20 20 20 20 20 20 20 20  G_EPHEM         
22480 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43 6f  0x01    /* OP_Co
22490 6c 75 6d 6e 3a 20 45 70 68 65 6d 65 72 61 6c 20  lumn: Ephemeral 
224a0 6f 75 74 70 75 74 20 69 73 20 6f 6b 20 2a 2f 0a  output is ok */.
224b0 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c  #define OPFLAG_L
224c0 41 53 54 52 4f 57 49 44 20 20 20 20 20 30 78 32  ASTROWID     0x2
224d0 30 20 20 20 20 2f 2a 20 53 65 74 20 74 6f 20 75  0    /* Set to u
224e0 70 64 61 74 65 20 64 62 2d 3e 6c 61 73 74 52 6f  pdate db->lastRo
224f0 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  wid */.#define O
22500 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20 20  PFLAG_ISUPDATE  
22510 20 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20 54      0x04    /* T
22520 68 69 73 20 4f 50 5f 49 6e 73 65 72 74 20 69 73  his OP_Insert is
22530 20 61 6e 20 73 71 6c 20 55 50 44 41 54 45 20 2a   an sql UPDATE *
22540 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
22550 5f 41 50 50 45 4e 44 20 20 20 20 20 20 20 20 30  _APPEND        0
22560 78 30 38 20 20 20 20 2f 2a 20 54 68 69 73 20 69  x08    /* This i
22570 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20 61  s likely to be a
22580 6e 20 61 70 70 65 6e 64 20 2a 2f 0a 23 64 65 66  n append */.#def
22590 69 6e 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45  ine OPFLAG_USESE
225a0 45 4b 52 45 53 55 4c 54 20 30 78 31 30 20 20 20  EKRESULT 0x10   
225b0 20 2f 2a 20 54 72 79 20 74 6f 20 61 76 6f 69 64   /* Try to avoid
225c0 20 61 20 73 65 65 6b 20 69 6e 20 42 74 72 65 65   a seek in Btree
225d0 49 6e 73 65 72 74 28 29 20 2a 2f 0a 23 64 65 66  Insert() */.#def
225e0 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53 4e 4f 4f  ine OPFLAG_ISNOO
225f0 50 20 20 20 20 20 20 20 20 30 78 34 30 20 20 20  P        0x40   
22600 20 2f 2a 20 4f 50 5f 44 65 6c 65 74 65 20 64 6f   /* OP_Delete do
22610 65 73 20 70 72 65 2d 75 70 64 61 74 65 2d 68 6f  es pre-update-ho
22620 6f 6b 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69  ok only */.#defi
22630 6e 65 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48  ne OPFLAG_LENGTH
22640 41 52 47 20 20 20 20 20 30 78 34 30 20 20 20 20  ARG     0x40    
22650 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c  /* OP_Column onl
22660 79 20 75 73 65 64 20 66 6f 72 20 6c 65 6e 67 74  y used for lengt
22670 68 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  h() */.#define O
22680 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 20  PFLAG_TYPEOFARG 
22690 20 20 20 20 30 78 38 30 20 20 20 20 2f 2a 20 4f      0x80    /* O
226a0 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73  P_Column only us
226b0 65 64 20 66 6f 72 20 74 79 70 65 6f 66 28 29 20  ed for typeof() 
226c0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
226d0 47 5f 42 55 4c 4b 43 53 52 20 20 20 20 20 20 20  G_BULKCSR       
226e0 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 4f 70  0x01    /* OP_Op
226f0 65 6e 2a 2a 20 75 73 65 64 20 74 6f 20 6f 70 65  en** used to ope
22700 6e 20 62 75 6c 6b 20 63 75 72 73 6f 72 20 2a 2f  n bulk cursor */
22710 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
22720 53 45 45 4b 45 51 20 20 20 20 20 20 20 20 30 78  SEEKEQ        0x
22730 30 32 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e  02    /* OP_Open
22740 2a 2a 20 63 75 72 73 6f 72 20 75 73 65 73 20 45  ** cursor uses E
22750 51 20 73 65 65 6b 20 6f 6e 6c 79 20 2a 2f 0a 23  Q seek only */.#
22760 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 46 4f  define OPFLAG_FO
22770 52 44 45 4c 45 54 45 20 20 20 20 20 30 78 30 38  RDELETE     0x08
22780 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 20 73      /* OP_Open s
22790 68 6f 75 6c 64 20 75 73 65 20 42 54 52 45 45 5f  hould use BTREE_
227a0 46 4f 52 44 45 4c 45 54 45 20 2a 2f 0a 23 64 65  FORDELETE */.#de
227b0 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50 32 49 53  fine OPFLAG_P2IS
227c0 52 45 47 20 20 20 20 20 20 20 30 78 31 30 20 20  REG       0x10  
227d0 20 20 2f 2a 20 50 32 20 74 6f 20 4f 50 5f 4f 70    /* P2 to OP_Op
227e0 65 6e 2a 2a 20 69 73 20 61 20 72 65 67 69 73 74  en** is a regist
227f0 65 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 23 64 65  er number */.#de
22800 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d  fine OPFLAG_PERM
22810 55 54 45 20 20 20 20 20 20 20 30 78 30 31 20 20  UTE       0x01  
22820 20 20 2f 2a 20 4f 50 5f 43 6f 6d 70 61 72 65 3a    /* OP_Compare:
22830 20 75 73 65 20 74 68 65 20 70 65 72 6d 75 74 61   use the permuta
22840 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
22850 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54  OPFLAG_SAVEPOSIT
22860 49 4f 4e 20 20 30 78 30 32 20 20 20 20 2f 2a 20  ION  0x02    /* 
22870 4f 50 5f 44 65 6c 65 74 65 2f 49 6e 73 65 72 74  OP_Delete/Insert
22880 3a 20 73 61 76 65 20 63 75 72 73 6f 72 20 70 6f  : save cursor po
22890 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  s */.#define OPF
228a0 4c 41 47 5f 41 55 58 44 45 4c 45 54 45 20 20 20  LAG_AUXDELETE   
228b0 20 20 30 78 30 34 20 20 20 20 2f 2a 20 4f 50 5f    0x04    /* OP_
228c0 44 65 6c 65 74 65 3a 20 69 6e 64 65 78 20 69 6e  Delete: index in
228d0 20 61 20 44 45 4c 45 54 45 20 6f 70 20 2a 2f 0a   a DELETE op */.
228e0 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4e  #define OPFLAG_N
228f0 4f 43 48 4e 47 5f 4d 41 47 49 43 20 20 30 78 36  OCHNG_MAGIC  0x6
22900 64 20 20 20 20 2f 2a 20 4f 50 5f 4d 61 6b 65 52  d    /* OP_MakeR
22910 65 63 6f 72 64 3a 20 73 65 72 69 61 6c 74 79 70  ecord: serialtyp
22920 65 20 31 30 20 69 73 20 6f 6b 20 2a 2f 0a 0a 2f  e 10 is ok */../
22930 2a 0a 20 2a 20 45 61 63 68 20 74 72 69 67 67 65  *. * Each trigge
22940 72 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65  r present in the
22950 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
22960 20 69 73 20 73 74 6f 72 65 64 20 61 73 20 61 6e   is stored as an
22970 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 20 2a 20   instance of. * 
22980 73 74 72 75 63 74 20 54 72 69 67 67 65 72 2e 0a  struct Trigger..
22990 20 2a 0a 20 2a 20 50 6f 69 6e 74 65 72 73 20 74   *. * Pointers t
229a0 6f 20 69 6e 73 74 61 6e 63 65 73 20 6f 66 20 73  o instances of s
229b0 74 72 75 63 74 20 54 72 69 67 67 65 72 20 61 72  truct Trigger ar
229c0 65 20 73 74 6f 72 65 64 20 69 6e 20 74 77 6f 20  e stored in two 
229d0 77 61 79 73 2e 0a 20 2a 20 31 2e 20 49 6e 20 74  ways.. * 1. In t
229e0 68 65 20 22 74 72 69 67 48 61 73 68 22 20 68 61  he "trigHash" ha
229f0 73 68 20 74 61 62 6c 65 20 28 70 61 72 74 20 6f  sh table (part o
22a00 66 20 74 68 65 20 73 71 6c 69 74 65 33 2a 20 74  f the sqlite3* t
22a10 68 61 74 20 72 65 70 72 65 73 65 6e 74 73 20 74  hat represents t
22a20 68 65 0a 20 2a 20 20 20 20 64 61 74 61 62 61 73  he. *    databas
22a30 65 29 2e 20 54 68 69 73 20 61 6c 6c 6f 77 73 20  e). This allows 
22a40 54 72 69 67 67 65 72 20 73 74 72 75 63 74 75 72  Trigger structur
22a50 65 73 20 74 6f 20 62 65 20 72 65 74 72 69 65 76  es to be retriev
22a60 65 64 20 62 79 20 6e 61 6d 65 2e 0a 20 2a 20 32  ed by name.. * 2
22a70 2e 20 41 6c 6c 20 74 72 69 67 67 65 72 73 20 61  . All triggers a
22a80 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
22a90 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 66 6f   single table fo
22aa0 72 6d 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74  rm a linked list
22ab0 2c 20 75 73 69 6e 67 20 74 68 65 0a 20 2a 20 20  , using the. *  
22ac0 20 20 70 4e 65 78 74 20 6d 65 6d 62 65 72 20 6f    pNext member o
22ad0 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  f struct Trigger
22ae0 2e 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  . A pointer to t
22af0 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74  he first element
22b00 20 6f 66 20 74 68 65 0a 20 2a 20 20 20 20 6c 69   of the. *    li
22b10 6e 6b 65 64 20 6c 69 73 74 20 69 73 20 73 74 6f  nked list is sto
22b20 72 65 64 20 61 73 20 74 68 65 20 22 70 54 72 69  red as the "pTri
22b30 67 67 65 72 22 20 6d 65 6d 62 65 72 20 6f 66 20  gger" member of 
22b40 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 0a 20  the associated. 
22b50 2a 20 20 20 20 73 74 72 75 63 74 20 54 61 62 6c  *    struct Tabl
22b60 65 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22 73 74  e.. *. * The "st
22b70 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72 20  ep_list" member 
22b80 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66 69  points to the fi
22b90 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 61  rst element of a
22ba0 20 6c 69 6e 6b 65 64 20 6c 69 73 74 0a 20 2a 20   linked list. * 
22bb0 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 53  containing the S
22bc0 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 73 70  QL statements sp
22bd0 65 63 69 66 69 65 64 20 61 73 20 74 68 65 20 74  ecified as the t
22be0 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 0a  rigger program..
22bf0 20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67   */.struct Trigg
22c00 65 72 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  er {.  char *zNa
22c10 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  me;            /
22c20 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  * The name of th
22c30 65 20 74 72 69 67 67 65 72 20 20 20 20 20 20 20  e trigger       
22c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22c50 20 2a 2f 0a 20 20 63 68 61 72 20 2a 74 61 62 6c   */.  char *tabl
22c60 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
22c70 20 54 68 65 20 74 61 62 6c 65 20 6f 72 20 76 69   The table or vi
22c80 65 77 20 74 6f 20 77 68 69 63 68 20 74 68 65 20  ew to which the 
22c90 74 72 69 67 67 65 72 20 61 70 70 6c 69 65 73 20  trigger applies 
22ca0 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20  */.  u8 op;     
22cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
22cc0 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45  One of TK_DELETE
22cd0 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f  , TK_UPDATE, TK_
22ce0 49 4e 53 45 52 54 20 20 20 20 20 20 20 20 20 2a  INSERT         *
22cf0 2f 0a 20 20 75 38 20 74 72 5f 74 6d 3b 20 20 20  /.  u8 tr_tm;   
22d00 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
22d10 6e 65 20 6f 66 20 54 52 49 47 47 45 52 5f 42 45  ne of TRIGGER_BE
22d20 46 4f 52 45 2c 20 54 52 49 47 47 45 52 5f 41 46  FORE, TRIGGER_AF
22d30 54 45 52 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  TER */.  Expr *p
22d40 57 68 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20  When;           
22d50 20 2f 2a 20 54 68 65 20 57 48 45 4e 20 63 6c 61   /* The WHEN cla
22d60 75 73 65 20 6f 66 20 74 68 65 20 65 78 70 72 65  use of the expre
22d70 73 73 69 6f 6e 20 28 6d 61 79 20 62 65 20 4e 55  ssion (may be NU
22d80 4c 4c 29 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20  LL) */.  IdList 
22d90 2a 70 43 6f 6c 75 6d 6e 73 3b 20 20 20 20 20 20  *pColumns;      
22da0 20 2f 2a 20 49 66 20 74 68 69 73 20 69 73 20 61   /* If this is a
22db0 6e 20 55 50 44 41 54 45 20 4f 46 20 3c 63 6f 6c  n UPDATE OF <col
22dc0 75 6d 6e 2d 6c 69 73 74 3e 20 74 72 69 67 67 65  umn-list> trigge
22dd0 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  r,.             
22de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22df0 74 68 65 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74  the <column-list
22e00 3e 20 69 73 20 73 74 6f 72 65 64 20 68 65 72 65  > is stored here
22e10 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53   */.  Schema *pS
22e20 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20 2f 2a  chema;        /*
22e30 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69   Schema containi
22e40 6e 67 20 74 68 65 20 74 72 69 67 67 65 72 20 2a  ng the trigger *
22e50 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 54 61 62  /.  Schema *pTab
22e60 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53  Schema;     /* S
22e70 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67  chema containing
22e80 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20   the table */.  
22e90 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 74 65  TriggerStep *ste
22ea0 70 5f 6c 69 73 74 3b 20 2f 2a 20 4c 69 6e 6b 20  p_list; /* Link 
22eb0 6c 69 73 74 20 6f 66 20 74 72 69 67 67 65 72 20  list of trigger 
22ec0 70 72 6f 67 72 61 6d 20 73 74 65 70 73 20 20 20  program steps   
22ed0 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 54            */.  T
22ee0 72 69 67 67 65 72 20 2a 70 4e 65 78 74 3b 20 20  rigger *pNext;  
22ef0 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 74         /* Next t
22f00 72 69 67 67 65 72 20 61 73 73 6f 63 69 61 74 65  rigger associate
22f10 64 20 77 69 74 68 20 74 68 65 20 74 61 62 6c 65  d with the table
22f20 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20   */.};../*.** A 
22f30 74 72 69 67 67 65 72 20 69 73 20 65 69 74 68 65  trigger is eithe
22f40 72 20 61 20 42 45 46 4f 52 45 20 6f 72 20 61 6e  r a BEFORE or an
22f50 20 41 46 54 45 52 20 74 72 69 67 67 65 72 2e 20   AFTER trigger. 
22f60 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63   The following c
22f70 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65 74 65  onstants.** dete
22f80 72 6d 69 6e 65 20 77 68 69 63 68 2e 0a 2a 2a 0a  rmine which..**.
22f90 2a 2a 20 49 66 20 74 68 65 72 65 20 61 72 65 20  ** If there are 
22fa0 6d 75 6c 74 69 70 6c 65 20 74 72 69 67 67 65 72  multiple trigger
22fb0 73 2c 20 79 6f 75 20 6d 69 67 68 74 20 6f 66 20  s, you might of 
22fc0 73 6f 6d 65 20 42 45 46 4f 52 45 20 61 6e 64 20  some BEFORE and 
22fd0 73 6f 6d 65 20 41 46 54 45 52 2e 0a 2a 2a 20 49  some AFTER..** I
22fe0 6e 20 74 68 61 74 20 63 61 73 65 73 2c 20 74 68  n that cases, th
22ff0 65 20 63 6f 6e 73 74 61 6e 74 73 20 62 65 6c 6f  e constants belo
23000 77 20 63 61 6e 20 62 65 20 4f 52 65 64 20 74 6f  w can be ORed to
23010 67 65 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69  gether..*/.#defi
23020 6e 65 20 54 52 49 47 47 45 52 5f 42 45 46 4f 52  ne TRIGGER_BEFOR
23030 45 20 20 31 0a 23 64 65 66 69 6e 65 20 54 52 49  E  1.#define TRI
23040 47 47 45 52 5f 41 46 54 45 52 20 20 20 32 0a 0a  GGER_AFTER   2..
23050 2f 2a 0a 20 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*. * An instanc
23060 65 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67  e of struct Trig
23070 67 65 72 53 74 65 70 20 69 73 20 75 73 65 64 20  gerStep is used 
23080 74 6f 20 73 74 6f 72 65 20 61 20 73 69 6e 67 6c  to store a singl
23090 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 0a  e SQL statement.
230a0 20 2a 20 74 68 61 74 20 69 73 20 61 20 70 61 72   * that is a par
230b0 74 20 6f 66 20 61 20 74 72 69 67 67 65 72 2d 70  t of a trigger-p
230c0 72 6f 67 72 61 6d 2e 0a 20 2a 0a 20 2a 20 49 6e  rogram.. *. * In
230d0 73 74 61 6e 63 65 73 20 6f 66 20 73 74 72 75 63  stances of struc
230e0 74 20 54 72 69 67 67 65 72 53 74 65 70 20 61 72  t TriggerStep ar
230f0 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 73 69  e stored in a si
23100 6e 67 6c 79 20 6c 69 6e 6b 65 64 20 6c 69 73 74  ngly linked list
23110 20 28 6c 69 6e 6b 65 64 0a 20 2a 20 75 73 69 6e   (linked. * usin
23120 67 20 74 68 65 20 22 70 4e 65 78 74 22 20 6d 65  g the "pNext" me
23130 6d 62 65 72 29 20 72 65 66 65 72 65 6e 63 65 64  mber) referenced
23140 20 62 79 20 74 68 65 20 22 73 74 65 70 5f 6c 69   by the "step_li
23150 73 74 22 20 6d 65 6d 62 65 72 20 6f 66 20 74 68  st" member of th
23160 65 0a 20 2a 20 61 73 73 6f 63 69 61 74 65 64 20  e. * associated 
23170 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20 69  struct Trigger i
23180 6e 73 74 61 6e 63 65 2e 20 54 68 65 20 66 69 72  nstance. The fir
23190 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68  st element of th
231a0 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69 73  e linked list is
231b0 0a 20 2a 20 74 68 65 20 66 69 72 73 74 20 73 74  . * the first st
231c0 65 70 20 6f 66 20 74 68 65 20 74 72 69 67 67 65  ep of the trigge
231d0 72 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a 0a 20 2a  r-program.. *. *
231e0 20 54 68 65 20 22 6f 70 22 20 6d 65 6d 62 65 72   The "op" member
231f0 20 69 6e 64 69 63 61 74 65 73 20 77 68 65 74 68   indicates wheth
23200 65 72 20 74 68 69 73 20 69 73 20 61 20 22 44 45  er this is a "DE
23210 4c 45 54 45 22 2c 20 22 49 4e 53 45 52 54 22 2c  LETE", "INSERT",
23220 20 22 55 50 44 41 54 45 22 20 6f 72 0a 20 2a 20   "UPDATE" or. * 
23230 22 53 45 4c 45 43 54 22 20 73 74 61 74 65 6d 65  "SELECT" stateme
23240 6e 74 2e 20 54 68 65 20 6d 65 61 6e 69 6e 67 73  nt. The meanings
23250 20 6f 66 20 74 68 65 20 6f 74 68 65 72 20 6d 65   of the other me
23260 6d 62 65 72 73 20 69 73 20 64 65 74 65 72 6d 69  mbers is determi
23270 6e 65 64 20 62 79 20 74 68 65 0a 20 2a 20 76 61  ned by the. * va
23280 6c 75 65 20 6f 66 20 22 6f 70 22 20 61 73 20 66  lue of "op" as f
23290 6f 6c 6c 6f 77 73 3a 0a 20 2a 0a 20 2a 20 28 6f  ollows:. *. * (o
232a0 70 20 3d 3d 20 54 4b 5f 49 4e 53 45 52 54 29 0a  p == TK_INSERT).
232b0 20 2a 20 6f 72 63 6f 6e 66 20 20 20 20 2d 3e 20   * orconf    -> 
232c0 73 74 6f 72 65 73 20 74 68 65 20 4f 4e 20 43 4f  stores the ON CO
232d0 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68 6d  NFLICT algorithm
232e0 0a 20 2a 20 70 53 65 6c 65 63 74 20 20 20 2d 3e  . * pSelect   ->
232f0 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 49   If this is an I
23300 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 53  NSERT INTO ... S
23310 45 4c 45 43 54 20 2e 2e 2e 20 73 74 61 74 65 6d  ELECT ... statem
23320 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20  ent, then. *    
23330 20 20 20 20 20 20 20 20 20 20 74 68 69 73 20 73            this s
23340 74 6f 72 65 73 20 61 20 70 6f 69 6e 74 65 72 20  tores a pointer 
23350 74 6f 20 74 68 65 20 53 45 4c 45 43 54 20 73 74  to the SELECT st
23360 61 74 65 6d 65 6e 74 2e 20 4f 74 68 65 72 77 69  atement. Otherwi
23370 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 7a 54 61 72  se NULL.. * zTar
23380 67 65 74 20 20 20 2d 3e 20 44 65 71 75 6f 74 65  get   -> Dequote
23390 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  d name of the ta
233a0 62 6c 65 20 74 6f 20 69 6e 73 65 72 74 20 69 6e  ble to insert in
233b0 74 6f 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73 74  to.. * pExprList
233c0 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20 61   -> If this is a
233d0 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e  n INSERT INTO ..
233e0 2e 20 56 41 4c 55 45 53 20 2e 2e 2e 20 73 74 61  . VALUES ... sta
233f0 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20  tement, then. * 
23400 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
23410 73 20 73 74 6f 72 65 73 20 76 61 6c 75 65 73 20  s stores values 
23420 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64 2e 20  to be inserted. 
23430 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a  Otherwise NULL..
23440 20 2a 20 70 49 64 4c 69 73 74 20 20 20 2d 3e 20   * pIdList   -> 
23450 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e  If this is an IN
23460 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 28 3c  SERT INTO ... (<
23470 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 3e 29 20 56  column-names>) V
23480 41 4c 55 45 53 20 2e 2e 2e 0a 20 2a 20 20 20 20  ALUES .... *    
23490 20 20 20 20 20 20 20 20 20 20 73 74 61 74 65 6d            statem
234a0 65 6e 74 2c 20 74 68 65 6e 20 74 68 69 73 20 73  ent, then this s
234b0 74 6f 72 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e  tores the column
234c0 2d 6e 61 6d 65 73 20 74 6f 20 62 65 0a 20 2a 20  -names to be. * 
234d0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 73               ins
234e0 65 72 74 65 64 20 69 6e 74 6f 2e 0a 20 2a 0a 20  erted into.. *. 
234f0 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 44 45 4c 45  * (op == TK_DELE
23500 54 45 29 0a 20 2a 20 7a 54 61 72 67 65 74 20 20  TE). * zTarget  
23510 20 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e 61 6d   -> Dequoted nam
23520 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  e of the table t
23530 6f 20 64 65 6c 65 74 65 20 66 72 6f 6d 2e 0a 20  o delete from.. 
23540 2a 20 70 57 68 65 72 65 20 20 20 20 2d 3e 20 54  * pWhere    -> T
23550 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
23560 6f 66 20 74 68 65 20 44 45 4c 45 54 45 20 73 74  of the DELETE st
23570 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69  atement if one i
23580 73 20 73 70 65 63 69 66 69 65 64 2e 0a 20 2a 20  s specified.. * 
23590 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 74 68               Oth
235a0 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 0a  erwise NULL.. *.
235b0 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 55 50 44   * (op == TK_UPD
235c0 41 54 45 29 0a 20 2a 20 7a 54 61 72 67 65 74 20  ATE). * zTarget 
235d0 20 20 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e 61    -> Dequoted na
235e0 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
235f0 74 6f 20 75 70 64 61 74 65 2e 0a 20 2a 20 70 57  to update.. * pW
23600 68 65 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57  here    -> The W
23610 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74  HERE clause of t
23620 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  he UPDATE statem
23630 65 6e 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70  ent if one is sp
23640 65 63 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20  ecified.. *     
23650 20 20 20 20 20 20 20 20 20 4f 74 68 65 72 77 69           Otherwi
23660 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 45 78 70  se NULL.. * pExp
23670 72 4c 69 73 74 20 2d 3e 20 41 20 6c 69 73 74 20  rList -> A list 
23680 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 74  of the columns t
23690 6f 20 75 70 64 61 74 65 20 61 6e 64 20 74 68 65  o update and the
236a0 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74 6f 20   expressions to 
236b0 75 70 64 61 74 65 0a 20 2a 20 20 20 20 20 20 20  update. *       
236c0 20 20 20 20 20 20 20 74 68 65 6d 20 74 6f 2e 20         them to. 
236d0 53 65 65 20 73 71 6c 69 74 65 33 55 70 64 61 74  See sqlite3Updat
236e0 65 28 29 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  e() documentatio
236f0 6e 20 6f 66 20 22 70 43 68 61 6e 67 65 73 22 0a  n of "pChanges".
23700 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
23710 61 72 67 75 6d 65 6e 74 2e 0a 20 2a 0a 20 2a 2f  argument.. *. */
23720 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53  .struct TriggerS
23730 74 65 70 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20  tep {.  u8 op;  
23740 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
23750 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45  One of TK_DELETE
23760 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f  , TK_UPDATE, TK_
23770 49 4e 53 45 52 54 2c 20 54 4b 5f 53 45 4c 45 43  INSERT, TK_SELEC
23780 54 20 2a 2f 0a 20 20 75 38 20 6f 72 63 6f 6e 66  T */.  u8 orconf
23790 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f  ;           /* O
237a0 45 5f 52 6f 6c 6c 62 61 63 6b 20 65 74 63 2e 20  E_Rollback etc. 
237b0 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54  */.  Trigger *pT
237c0 72 69 67 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  rig;      /* The
237d0 20 74 72 69 67 67 65 72 20 74 68 61 74 20 74 68   trigger that th
237e0 69 73 20 73 74 65 70 20 69 73 20 61 20 70 61 72  is step is a par
237f0 74 20 6f 66 20 2a 2f 0a 20 20 53 65 6c 65 63 74  t of */.  Select
23800 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f   *pSelect;     /
23810 2a 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  * SELECT stateme
23820 6e 74 20 6f 72 20 52 48 53 20 6f 66 20 49 4e 53  nt or RHS of INS
23830 45 52 54 20 49 4e 54 4f 20 53 45 4c 45 43 54 20  ERT INTO SELECT 
23840 2e 2e 2e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ... */.  char *z
23850 54 61 72 67 65 74 3b 20 20 20 20 20 20 20 2f 2a  Target;       /*
23860 20 54 61 72 67 65 74 20 74 61 62 6c 65 20 66 6f   Target table fo
23870 72 20 44 45 4c 45 54 45 2c 20 55 50 44 41 54 45  r DELETE, UPDATE
23880 2c 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 45 78  , INSERT */.  Ex
23890 70 72 20 2a 70 57 68 65 72 65 3b 20 20 20 20 20  pr *pWhere;     
238a0 20 20 20 2f 2a 20 54 68 65 20 57 48 45 52 45 20     /* The WHERE 
238b0 63 6c 61 75 73 65 20 66 6f 72 20 44 45 4c 45 54  clause for DELET
238c0 45 20 6f 72 20 55 50 44 41 54 45 20 73 74 65 70  E or UPDATE step
238d0 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  s */.  ExprList 
238e0 2a 70 45 78 70 72 4c 69 73 74 3b 20 2f 2a 20 53  *pExprList; /* S
238f0 45 54 20 63 6c 61 75 73 65 20 66 6f 72 20 55 50  ET clause for UP
23900 44 41 54 45 20 2a 2f 0a 20 20 49 64 4c 69 73 74  DATE */.  IdList
23910 20 2a 70 49 64 4c 69 73 74 3b 20 20 20 20 20 2f   *pIdList;     /
23920 2a 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 66  * Column names f
23930 6f 72 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 55  or INSERT */.  U
23940 70 73 65 72 74 20 2a 70 55 70 73 65 72 74 3b 20  psert *pUpsert; 
23950 20 20 20 20 2f 2a 20 55 70 73 65 72 74 20 63 6c      /* Upsert cl
23960 61 75 73 65 73 20 6f 6e 20 61 6e 20 49 4e 53 45  auses on an INSE
23970 52 54 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 53  RT */.  char *zS
23980 70 61 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  pan;         /* 
23990 4f 72 69 67 69 6e 61 6c 20 53 51 4c 20 74 65 78  Original SQL tex
239a0 74 20 6f 66 20 74 68 69 73 20 63 6f 6d 6d 61 6e  t of this comman
239b0 64 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74  d */.  TriggerSt
239c0 65 70 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e  ep *pNext;  /* N
239d0 65 78 74 20 69 6e 20 74 68 65 20 6c 69 6e 6b 2d  ext in the link-
239e0 6c 69 73 74 20 2a 2f 0a 20 20 54 72 69 67 67 65  list */.  Trigge
239f0 72 53 74 65 70 20 2a 70 4c 61 73 74 3b 20 20 2f  rStep *pLast;  /
23a00 2a 20 4c 61 73 74 20 65 6c 65 6d 65 6e 74 20 69  * Last element i
23a10 6e 20 6c 69 6e 6b 2d 6c 69 73 74 2e 20 56 61 6c  n link-list. Val
23a20 69 64 20 66 6f 72 20 31 73 74 20 65 6c 65 6d 20  id for 1st elem 
23a30 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  only */.};../*.*
23a40 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
23a50 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69  structure contai
23a60 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 75  ns information u
23a70 73 65 64 20 62 79 20 74 68 65 20 73 71 6c 69 74  sed by the sqlit
23a80 65 46 69 78 2e 2e 2e 0a 2a 2a 20 72 6f 75 74 69  eFix....** routi
23a90 6e 65 73 20 61 73 20 74 68 65 79 20 77 61 6c 6b  nes as they walk
23aa0 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65 20   the parse tree 
23ab0 74 6f 20 6d 61 6b 65 20 64 61 74 61 62 61 73 65  to make database
23ac0 20 72 65 66 65 72 65 6e 63 65 73 0a 2a 2a 20 65   references.** e
23ad0 78 70 6c 69 63 69 74 2e 0a 2a 2f 0a 74 79 70 65  xplicit..*/.type
23ae0 64 65 66 20 73 74 72 75 63 74 20 44 62 46 69 78  def struct DbFix
23af0 65 72 20 44 62 46 69 78 65 72 3b 0a 73 74 72 75  er DbFixer;.stru
23b00 63 74 20 44 62 46 69 78 65 72 20 7b 0a 20 20 50  ct DbFixer {.  P
23b10 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20  arse *pParse;   
23b20 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73 69 6e     /* The parsin
23b30 67 20 63 6f 6e 74 65 78 74 2e 20 20 45 72 72 6f  g context.  Erro
23b40 72 20 6d 65 73 73 61 67 65 73 20 77 72 69 74 74  r messages writt
23b50 65 6e 20 68 65 72 65 20 2a 2f 0a 20 20 53 63 68  en here */.  Sch
23b60 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20  ema *pSchema;   
23b70 20 2f 2a 20 46 69 78 20 69 74 65 6d 73 20 74 6f   /* Fix items to
23b80 20 74 68 69 73 20 73 63 68 65 6d 61 20 2a 2f 0a   this schema */.
23b90 20 20 69 6e 74 20 62 56 61 72 4f 6e 6c 79 3b 20    int bVarOnly; 
23ba0 20 20 20 20 20 20 2f 2a 20 43 68 65 63 6b 20 66        /* Check f
23bb0 6f 72 20 76 61 72 69 61 62 6c 65 20 72 65 66 65  or variable refe
23bc0 72 65 6e 63 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20  rences only */. 
23bd0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62   const char *zDb
23be0 3b 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72  ;    /* Make sur
23bf0 65 20 61 6c 6c 20 6f 62 6a 65 63 74 73 20 61 72  e all objects ar
23c00 65 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74  e contained in t
23c10 68 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a  his database */.
23c20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54    const char *zT
23c30 79 70 65 3b 20 20 2f 2a 20 54 79 70 65 20 6f 66  ype;  /* Type of
23c40 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d   the container -
23c50 20 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72 20   used for error 
23c60 6d 65 73 73 61 67 65 73 20 2a 2f 0a 20 20 63 6f  messages */.  co
23c70 6e 73 74 20 54 6f 6b 65 6e 20 2a 70 4e 61 6d 65  nst Token *pName
23c80 3b 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65  ; /* Name of the
23c90 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73 65   container - use
23ca0 64 20 66 6f 72 20 65 72 72 6f 72 20 6d 65 73 73  d for error mess
23cb0 61 67 65 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ages */.};../*.*
23cc0 2a 20 41 6e 20 6f 62 6a 65 63 74 65 64 20 75 73  * An objected us
23cd0 65 64 20 74 6f 20 61 63 63 75 6d 75 6c 61 74 65  ed to accumulate
23ce0 20 74 68 65 20 74 65 78 74 20 6f 66 20 61 20 73   the text of a s
23cf0 74 72 69 6e 67 20 77 68 65 72 65 20 77 65 0a 2a  tring where we.*
23d00 2a 20 64 6f 20 6e 6f 74 20 6e 65 63 65 73 73 61  * do not necessa
23d10 72 69 6c 79 20 6b 6e 6f 77 20 68 6f 77 20 62 69  rily know how bi
23d20 67 20 74 68 65 20 73 74 72 69 6e 67 20 77 69 6c  g the string wil
23d30 6c 20 62 65 20 69 6e 20 74 68 65 20 65 6e 64 2e  l be in the end.
23d40 0a 2a 2f 0a 73 74 72 75 63 74 20 73 71 6c 69 74  .*/.struct sqlit
23d50 65 33 5f 73 74 72 20 7b 0a 20 20 73 71 6c 69 74  e3_str {.  sqlit
23d60 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20  e3 *db;         
23d70 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 64 61 74 61  /* Optional data
23d80 62 61 73 65 20 66 6f 72 20 6c 6f 6f 6b 61 73 69  base for lookasi
23d90 64 65 2e 20 20 43 61 6e 20 62 65 20 4e 55 4c 4c  de.  Can be NULL
23da0 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 65 78   */.  char *zTex
23db0 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  t;         /* Th
23dc0 65 20 73 74 72 69 6e 67 20 63 6f 6c 6c 65 63 74  e string collect
23dd0 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 75  ed so far */.  u
23de0 33 32 20 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20  32  nAlloc;     
23df0 20 20 20 20 2f 2a 20 41 6d 6f 75 6e 74 20 6f 66      /* Amount of
23e00 20 73 70 61 63 65 20 61 6c 6c 6f 63 61 74 65 64   space allocated
23e10 20 69 6e 20 7a 54 65 78 74 20 2a 2f 0a 20 20 75   in zText */.  u
23e20 33 32 20 20 6d 78 41 6c 6c 6f 63 3b 20 20 20 20  32  mxAlloc;    
23e30 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 61      /* Maximum a
23e40 6c 6c 6f 77 65 64 20 61 6c 6c 6f 63 61 74 69 6f  llowed allocatio
23e50 6e 2e 20 20 30 20 66 6f 72 20 6e 6f 20 6d 61 6c  n.  0 for no mal
23e60 6c 6f 63 20 75 73 61 67 65 20 2a 2f 0a 20 20 75  loc usage */.  u
23e70 33 32 20 20 6e 43 68 61 72 3b 20 20 20 20 20 20  32  nChar;      
23e80 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66      /* Length of
23e90 20 74 68 65 20 73 74 72 69 6e 67 20 73 6f 20 66   the string so f
23ea0 61 72 20 2a 2f 0a 20 20 75 38 20 20 20 61 63 63  ar */.  u8   acc
23eb0 45 72 72 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20  Error;       /* 
23ec0 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 6f 72 20  SQLITE_NOMEM or 
23ed0 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 20 2a 2f  SQLITE_TOOBIG */
23ee0 0a 20 20 75 38 20 20 20 70 72 69 6e 74 66 46 6c  .  u8   printfFl
23ef0 61 67 73 3b 20 20 20 20 2f 2a 20 53 51 4c 49 54  ags;    /* SQLIT
23f00 45 5f 50 52 49 4e 54 46 20 66 6c 61 67 73 20 62  E_PRINTF flags b
23f10 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 23 64 65 66 69  elow */.};.#defi
23f20 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46  ne SQLITE_PRINTF
23f30 5f 49 4e 54 45 52 4e 41 4c 20 30 78 30 31 20 20  _INTERNAL 0x01  
23f40 2f 2a 20 49 6e 74 65 72 6e 61 6c 2d 75 73 65 2d  /* Internal-use-
23f50 6f 6e 6c 79 20 63 6f 6e 76 65 72 74 65 72 73 20  only converters 
23f60 61 6c 6c 6f 77 65 64 20 2a 2f 0a 23 64 65 66 69  allowed */.#defi
23f70 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46  ne SQLITE_PRINTF
23f80 5f 53 51 4c 46 55 4e 43 20 20 30 78 30 32 20 20  _SQLFUNC  0x02  
23f90 2f 2a 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20  /* SQL function 
23fa0 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 56 58 50  arguments to VXP
23fb0 72 69 6e 74 66 20 2a 2f 0a 23 64 65 66 69 6e 65  rintf */.#define
23fc0 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 4d   SQLITE_PRINTF_M
23fd0 41 4c 4c 4f 43 45 44 20 30 78 30 34 20 20 2f 2a  ALLOCED 0x04  /*
23fe0 20 54 72 75 65 20 69 66 20 78 54 65 78 74 20 69   True if xText i
23ff0 73 20 61 6c 6c 6f 63 61 74 65 64 20 73 70 61 63  s allocated spac
24000 65 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 69 73  e */..#define is
24010 4d 61 6c 6c 6f 63 65 64 28 58 29 20 20 28 28 28  Malloced(X)  (((
24020 58 29 2d 3e 70 72 69 6e 74 66 46 6c 61 67 73 20  X)->printfFlags 
24030 26 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f  & SQLITE_PRINTF_
24040 4d 41 4c 4c 4f 43 45 44 29 21 3d 30 29 0a 0a 0a  MALLOCED)!=0)...
24050 2f 2a 0a 2a 2a 20 41 20 70 6f 69 6e 74 65 72 20  /*.** A pointer 
24060 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72  to this structur
24070 65 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d  e is used to com
24080 6d 75 6e 69 63 61 74 65 20 69 6e 66 6f 72 6d 61  municate informa
24090 74 69 6f 6e 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c  tion.** from sql
240a0 69 74 65 33 49 6e 69 74 20 61 6e 64 20 4f 50 5f  ite3Init and OP_
240b0 50 61 72 73 65 53 63 68 65 6d 61 20 69 6e 74 6f  ParseSchema into
240c0 20 74 68 65 20 73 71 6c 69 74 65 33 49 6e 69 74   the sqlite3Init
240d0 43 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 74 79 70  Callback..*/.typ
240e0 65 64 65 66 20 73 74 72 75 63 74 20 7b 0a 20 20  edef struct {.  
240f0 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20  sqlite3 *db;    
24100 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62      /* The datab
24110 61 73 65 20 62 65 69 6e 67 20 69 6e 69 74 69 61  ase being initia
24120 6c 69 7a 65 64 20 2a 2f 0a 20 20 63 68 61 72 20  lized */.  char 
24130 2a 2a 70 7a 45 72 72 4d 73 67 3b 20 20 20 20 2f  **pzErrMsg;    /
24140 2a 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20  * Error message 
24150 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20  stored here */. 
24160 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20   int iDb;       
24170 20 20 20 20 20 2f 2a 20 30 20 66 6f 72 20 6d 61       /* 0 for ma
24180 69 6e 20 64 61 74 61 62 61 73 65 2e 20 20 31 20  in database.  1 
24190 66 6f 72 20 54 45 4d 50 2c 20 32 2e 2e 20 66 6f  for TEMP, 2.. fo
241a0 72 20 41 54 54 41 43 48 65 64 20 2a 2f 0a 20 20  r ATTACHed */.  
241b0 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20 20  int rc;         
241c0 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 63 6f      /* Result co
241d0 64 65 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a  de stored here *
241e0 2f 0a 20 20 75 33 32 20 6d 49 6e 69 74 46 6c 61  /.  u32 mInitFla
241f0 67 73 3b 20 20 20 20 20 2f 2a 20 46 6c 61 67 73  gs;     /* Flags
24200 20 63 6f 6e 74 72 6f 6c 6c 69 6e 67 20 65 72 72   controlling err
24210 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 7d  or messages */.}
24220 20 49 6e 69 74 44 61 74 61 3b 0a 0a 2f 2a 0a 2a   InitData;../*.*
24230 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
24240 20 66 6f 72 20 6d 49 6e 69 74 46 6c 61 67 73 0a   for mInitFlags.
24250 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 49 54 46  */.#define INITF
24260 4c 41 47 5f 41 6c 74 65 72 54 61 62 6c 65 20 20  LAG_AlterTable  
24270 20 30 78 30 30 30 31 20 20 2f 2a 20 54 68 69 73   0x0001  /* This
24280 20 69 73 20 61 20 72 65 70 61 72 73 65 20 61 66   is a reparse af
24290 74 65 72 20 41 4c 54 45 52 20 54 41 42 4c 45 20  ter ALTER TABLE 
242a0 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53 74 72 75 63 74  */../*.** Struct
242b0 75 72 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 67  ure containing g
242c0 6c 6f 62 61 6c 20 63 6f 6e 66 69 67 75 72 61 74  lobal configurat
242d0 69 6f 6e 20 64 61 74 61 20 66 6f 72 20 74 68 65  ion data for the
242e0 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e   SQLite library.
242f0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72 75  .**.** This stru
24300 63 74 75 72 65 20 61 6c 73 6f 20 63 6f 6e 74 61  cture also conta
24310 69 6e 73 20 73 6f 6d 65 20 73 74 61 74 65 20 69  ins some state i
24320 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73  nformation..*/.s
24330 74 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e  truct Sqlite3Con
24340 66 69 67 20 7b 0a 20 20 69 6e 74 20 62 4d 65 6d  fig {.  int bMem
24350 73 74 61 74 3b 20 20 20 20 20 20 20 20 20 20 20  stat;           
24360 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
24370 65 20 74 6f 20 65 6e 61 62 6c 65 20 6d 65 6d 6f  e to enable memo
24380 72 79 20 73 74 61 74 75 73 20 2a 2f 0a 20 20 69  ry status */.  i
24390 6e 74 20 62 43 6f 72 65 4d 75 74 65 78 3b 20 20  nt bCoreMutex;  
243a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
243b0 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62   /* True to enab
243c0 6c 65 20 63 6f 72 65 20 6d 75 74 65 78 69 6e 67  le core mutexing
243d0 20 2a 2f 0a 20 20 69 6e 74 20 62 46 75 6c 6c 4d   */.  int bFullM
243e0 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 20 20  utex;           
243f0 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
24400 74 6f 20 65 6e 61 62 6c 65 20 66 75 6c 6c 20 6d  to enable full m
24410 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74  utexing */.  int
24420 20 62 4f 70 65 6e 55 72 69 3b 20 20 20 20 20 20   bOpenUri;      
24430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
24440 2a 20 54 72 75 65 20 74 6f 20 69 6e 74 65 72 70  * True to interp
24450 72 65 74 20 66 69 6c 65 6e 61 6d 65 73 20 61 73  ret filenames as
24460 20 55 52 49 73 20 2a 2f 0a 20 20 69 6e 74 20 62   URIs */.  int b
24470 55 73 65 43 69 73 3b 20 20 20 20 20 20 20 20 20  UseCis;         
24480 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
24490 55 73 65 20 63 6f 76 65 72 69 6e 67 20 69 6e 64  Use covering ind
244a0 69 63 65 73 20 66 6f 72 20 66 75 6c 6c 2d 73 63  ices for full-sc
244b0 61 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 62 53 6d  ans */.  int bSm
244c0 61 6c 6c 4d 61 6c 6c 6f 63 3b 20 20 20 20 20 20  allMalloc;      
244d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 76             /* Av
244e0 6f 69 64 20 6c 61 72 67 65 20 6d 65 6d 6f 72 79  oid large memory
244f0 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 69 66 20   allocations if 
24500 74 72 75 65 20 2a 2f 0a 20 20 69 6e 74 20 6d 78  true */.  int mx
24510 53 74 72 6c 65 6e 3b 20 20 20 20 20 20 20 20 20  Strlen;         
24520 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
24530 61 78 69 6d 75 6d 20 73 74 72 69 6e 67 20 6c 65  aximum string le
24540 6e 67 74 68 20 2a 2f 0a 20 20 69 6e 74 20 6e 65  ngth */.  int ne
24550 76 65 72 43 6f 72 72 75 70 74 3b 20 20 20 20 20  verCorrupt;     
24560 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
24570 61 74 61 62 61 73 65 20 69 73 20 61 6c 77 61 79  atabase is alway
24580 73 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 2a 2f  s well-formed */
24590 0a 20 20 69 6e 74 20 73 7a 4c 6f 6f 6b 61 73 69  .  int szLookasi
245a0 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  de;             
245b0 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
245c0 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72  lookaside buffer
245d0 20 73 69 7a 65 20 2a 2f 0a 20 20 69 6e 74 20 6e   size */.  int n
245e0 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20  Lookaside;      
245f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
24600 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64  Default lookasid
24610 65 20 62 75 66 66 65 72 20 63 6f 75 6e 74 20 2a  e buffer count *
24620 2f 0a 20 20 69 6e 74 20 6e 53 74 6d 74 53 70 69  /.  int nStmtSpi
24630 6c 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ll;             
24640 20 20 20 20 20 20 2f 2a 20 53 74 6d 74 2d 6a 6f        /* Stmt-jo
24650 75 72 6e 61 6c 20 73 70 69 6c 6c 2d 74 6f 2d 64  urnal spill-to-d
24660 69 73 6b 20 74 68 72 65 73 68 6f 6c 64 20 2a 2f  isk threshold */
24670 0a 20 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d  .  sqlite3_mem_m
24680 65 74 68 6f 64 73 20 6d 3b 20 20 20 20 20 20 20  ethods m;       
24690 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65       /* Low-leve
246a0 6c 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  l memory allocat
246b0 69 6f 6e 20 69 6e 74 65 72 66 61 63 65 20 2a 2f  ion interface */
246c0 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
246d0 5f 6d 65 74 68 6f 64 73 20 6d 75 74 65 78 3b 20  _methods mutex; 
246e0 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65       /* Low-leve
246f0 6c 20 6d 75 74 65 78 20 69 6e 74 65 72 66 61 63  l mutex interfac
24700 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 70  e */.  sqlite3_p
24710 63 61 63 68 65 5f 6d 65 74 68 6f 64 73 32 20 70  cache_methods2 p
24720 63 61 63 68 65 32 3b 20 20 2f 2a 20 4c 6f 77 2d  cache2;  /* Low-
24730 6c 65 76 65 6c 20 70 61 67 65 2d 63 61 63 68 65  level page-cache
24740 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20   interface */.  
24750 76 6f 69 64 20 2a 70 48 65 61 70 3b 20 20 20 20  void *pHeap;    
24760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24770 20 20 2f 2a 20 48 65 61 70 20 73 74 6f 72 61 67    /* Heap storag
24780 65 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74  e space */.  int
24790 20 6e 48 65 61 70 3b 20 20 20 20 20 20 20 20 20   nHeap;         
247a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
247b0 2a 20 53 69 7a 65 20 6f 66 20 70 48 65 61 70 5b  * Size of pHeap[
247c0 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 71  ] */.  int mnReq
247d0 2c 20 6d 78 52 65 71 3b 20 20 20 20 20 20 20 20  , mxReq;        
247e0 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 6e 20           /* Min 
247f0 61 6e 64 20 6d 61 78 20 68 65 61 70 20 72 65 71  and max heap req
24800 75 65 73 74 73 20 73 69 7a 65 73 20 2a 2f 0a 20  uests sizes */. 
24810 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73   sqlite3_int64 s
24820 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20  zMmap;          
24830 20 20 20 2f 2a 20 6d 6d 61 70 28 29 20 73 70 61     /* mmap() spa
24840 63 65 20 70 65 72 20 6f 70 65 6e 20 66 69 6c 65  ce per open file
24850 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e   */.  sqlite3_in
24860 74 36 34 20 6d 78 4d 6d 61 70 3b 20 20 20 20 20  t64 mxMmap;     
24870 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d          /* Maxim
24880 75 6d 20 76 61 6c 75 65 20 66 6f 72 20 73 7a 4d  um value for szM
24890 6d 61 70 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  map */.  void *p
248a0 50 61 67 65 3b 20 20 20 20 20 20 20 20 20 20 20  Page;           
248b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61             /* Pa
248c0 67 65 20 63 61 63 68 65 20 6d 65 6d 6f 72 79 20  ge cache memory 
248d0 2a 2f 0a 20 20 69 6e 74 20 73 7a 50 61 67 65 3b  */.  int szPage;
248e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
248f0 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
24900 66 20 65 61 63 68 20 70 61 67 65 20 69 6e 20 70  f each page in p
24910 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  Page[] */.  int 
24920 6e 50 61 67 65 3b 20 20 20 20 20 20 20 20 20 20  nPage;          
24930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
24940 20 4e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   Number of pages
24950 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20   in pPage[] */. 
24960 20 69 6e 74 20 6d 78 50 61 72 73 65 72 53 74 61   int mxParserSta
24970 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ck;             
24980 20 20 20 2f 2a 20 6d 61 78 69 6d 75 6d 20 64 65     /* maximum de
24990 70 74 68 20 6f 66 20 74 68 65 20 70 61 72 73 65  pth of the parse
249a0 72 20 73 74 61 63 6b 20 2a 2f 0a 20 20 69 6e 74  r stack */.  int
249b0 20 73 68 61 72 65 64 43 61 63 68 65 45 6e 61 62   sharedCacheEnab
249c0 6c 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f  led;           /
249d0 2a 20 74 72 75 65 20 69 66 20 73 68 61 72 65 64  * true if shared
249e0 2d 63 61 63 68 65 20 6d 6f 64 65 20 65 6e 61 62  -cache mode enab
249f0 6c 65 64 20 2a 2f 0a 20 20 75 33 32 20 73 7a 50  led */.  u32 szP
24a00 6d 61 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ma;             
24a10 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61             /* Ma
24a20 78 69 6d 75 6d 20 53 6f 72 74 65 72 20 50 4d 41  ximum Sorter PMA
24a30 20 73 69 7a 65 20 2a 2f 0a 20 20 2f 2a 20 54 68   size */.  /* Th
24a40 65 20 61 62 6f 76 65 20 6d 69 67 68 74 20 62 65  e above might be
24a50 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20   initialized to 
24a60 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 54 68 65 20 66  non-zero.  The f
24a70 6f 6c 6c 6f 77 69 6e 67 20 6e 65 65 64 20 74 6f  ollowing need to
24a80 20 61 6c 77 61 79 73 0a 20 20 2a 2a 20 69 6e 69   always.  ** ini
24a90 74 69 61 6c 6c 79 20 62 65 20 7a 65 72 6f 2c 20  tially be zero, 
24aa0 68 6f 77 65 76 65 72 2e 20 2a 2f 0a 20 20 69 6e  however. */.  in
24ab0 74 20 69 73 49 6e 69 74 3b 20 20 20 20 20 20 20  t isInit;       
24ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ad0 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 69 6e  /* True after in
24ae0 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 68 61 73  itialization has
24af0 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20 69   finished */.  i
24b00 6e 74 20 69 6e 50 72 6f 67 72 65 73 73 3b 20 20  nt inProgress;  
24b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b20 20 2f 2a 20 54 72 75 65 20 77 68 69 6c 65 20 69   /* True while i
24b30 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e  nitialization in
24b40 20 70 72 6f 67 72 65 73 73 20 2a 2f 0a 20 20 69   progress */.  i
24b50 6e 74 20 69 73 4d 75 74 65 78 49 6e 69 74 3b 20  nt isMutexInit; 
24b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b70 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d   /* True after m
24b80 75 74 65 78 65 73 20 61 72 65 20 69 6e 69 74 69  utexes are initi
24b90 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20  alized */.  int 
24ba0 69 73 4d 61 6c 6c 6f 63 49 6e 69 74 3b 20 20 20  isMallocInit;   
24bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
24bc0 20 54 72 75 65 20 61 66 74 65 72 20 6d 61 6c 6c   True after mall
24bd0 6f 63 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65  oc is initialize
24be0 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73 50 43 61  d */.  int isPCa
24bf0 63 68 65 49 6e 69 74 3b 20 20 20 20 20 20 20 20  cheInit;        
24c00 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
24c10 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73   after malloc is
24c20 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a   initialized */.
24c30 20 20 69 6e 74 20 6e 52 65 66 49 6e 69 74 4d 75    int nRefInitMu
24c40 74 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20  tex;            
24c50 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
24c60 20 75 73 65 72 73 20 6f 66 20 70 49 6e 69 74 4d   users of pInitM
24c70 75 74 65 78 20 2a 2f 0a 20 20 73 71 6c 69 74 65  utex */.  sqlite
24c80 33 5f 6d 75 74 65 78 20 2a 70 49 6e 69 74 4d 75  3_mutex *pInitMu
24c90 74 65 78 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d  tex;        /* M
24ca0 75 74 65 78 20 75 73 65 64 20 62 79 20 73 71 6c  utex used by sql
24cb0 69 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28  ite3_initialize(
24cc0 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 4c  ) */.  void (*xL
24cd0 6f 67 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f  og)(void*,int,co
24ce0 6e 73 74 20 63 68 61 72 2a 29 3b 20 2f 2a 20 46  nst char*); /* F
24cf0 75 6e 63 74 69 6f 6e 20 66 6f 72 20 6c 6f 67 67  unction for logg
24d00 69 6e 67 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ing */.  void *p
24d10 4c 6f 67 41 72 67 3b 20 20 20 20 20 20 20 20 20  LogArg;         
24d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
24d30 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20   First argument 
24d40 74 6f 20 78 4c 6f 67 28 29 20 2a 2f 0a 23 69 66  to xLog() */.#if
24d50 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
24d60 45 5f 53 51 4c 4c 4f 47 0a 20 20 76 6f 69 64 28  E_SQLLOG.  void(
24d70 2a 78 53 71 6c 6c 6f 67 29 28 76 6f 69 64 2a 2c  *xSqllog)(void*,
24d80 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
24d90 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f  har*, int);.  vo
24da0 69 64 20 2a 70 53 71 6c 6c 6f 67 41 72 67 3b 0a  id *pSqllogArg;.
24db0 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51  #endif.#ifdef SQ
24dc0 4c 49 54 45 5f 56 44 42 45 5f 43 4f 56 45 52 41  LITE_VDBE_COVERA
24dd0 47 45 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c  GE.  /* The foll
24de0 6f 77 69 6e 67 20 63 61 6c 6c 62 61 63 6b 20 28  owing callback (
24df0 69 66 20 6e 6f 74 20 4e 55 4c 4c 29 20 69 73 20  if not NULL) is 
24e00 69 6e 76 6f 6b 65 64 20 6f 6e 20 65 76 65 72 79  invoked on every
24e10 20 56 44 42 45 20 62 72 61 6e 63 68 0a 20 20 2a   VDBE branch.  *
24e20 2a 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 53 65  * operation.  Se
24e30 74 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 75  t the callback u
24e40 73 69 6e 67 20 53 51 4c 49 54 45 5f 54 45 53 54  sing SQLITE_TEST
24e50 43 54 52 4c 5f 56 44 42 45 5f 43 4f 56 45 52 41  CTRL_VDBE_COVERA
24e60 47 45 2e 0a 20 20 2a 2f 0a 20 20 76 6f 69 64 20  GE..  */.  void 
24e70 28 2a 78 56 64 62 65 42 72 61 6e 63 68 29 28 76  (*xVdbeBranch)(v
24e80 6f 69 64 2a 2c 75 6e 73 69 67 6e 65 64 20 69 53  oid*,unsigned iS
24e90 72 63 4c 69 6e 65 2c 75 38 20 65 54 68 69 73 2c  rcLine,u8 eThis,
24ea0 75 38 20 65 4d 78 29 3b 20 20 2f 2a 20 43 61 6c  u8 eMx);  /* Cal
24eb0 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20  lback */.  void 
24ec0 2a 70 56 64 62 65 42 72 61 6e 63 68 41 72 67 3b  *pVdbeBranchArg;
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 20 20 20 20 20 20 20                  
24ef0 20 20 20 20 20 2f 2a 20 31 73 74 20 61 72 67 75       /* 1st argu
24f00 6d 65 6e 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 23  ment */.#endif.#
24f10 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e  ifndef SQLITE_UN
24f20 54 45 53 54 41 42 4c 45 0a 20 20 69 6e 74 20 28  TESTABLE.  int (
24f30 2a 78 54 65 73 74 43 61 6c 6c 62 61 63 6b 29 28  *xTestCallback)(
24f40 69 6e 74 29 3b 20 20 20 20 20 20 20 20 2f 2a 20  int);        /* 
24f50 49 6e 76 6f 6b 65 64 20 62 79 20 73 71 6c 69 74  Invoked by sqlit
24f60 65 33 46 61 75 6c 74 53 69 6d 28 29 20 2a 2f 0a  e3FaultSim() */.
24f70 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 62 4c 6f  #endif.  int bLo
24f80 63 61 6c 74 69 6d 65 46 61 75 6c 74 3b 20 20 20  caltimeFault;   
24f90 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
24fa0 75 65 20 74 6f 20 66 61 69 6c 20 6c 6f 63 61 6c  ue to fail local
24fb0 74 69 6d 65 28 29 20 63 61 6c 6c 73 20 2a 2f 0a  time() calls */.
24fc0 20 20 69 6e 74 20 69 4f 6e 63 65 52 65 73 65 74    int iOnceReset
24fd0 54 68 72 65 73 68 6f 6c 64 3b 20 20 20 20 20 20  Threshold;      
24fe0 20 20 20 20 2f 2a 20 57 68 65 6e 20 74 6f 20 72      /* When to r
24ff0 65 73 65 74 20 4f 50 5f 4f 6e 63 65 20 63 6f 75  eset OP_Once cou
25000 6e 74 65 72 73 20 2a 2f 0a 20 20 75 33 32 20 73  nters */.  u32 s
25010 7a 53 6f 72 74 65 72 52 65 66 3b 20 20 20 20 20  zSorterRef;     
25020 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
25030 4d 69 6e 20 73 69 7a 65 20 69 6e 20 62 79 74 65  Min size in byte
25040 73 20 74 6f 20 75 73 65 20 73 6f 72 74 65 72 2d  s to use sorter-
25050 72 65 66 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  refs */.};../*.*
25060 2a 20 54 68 69 73 20 6d 61 63 72 6f 20 69 73 20  * This macro is 
25070 75 73 65 64 20 69 6e 73 69 64 65 20 6f 66 20 61  used inside of a
25080 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e  ssert() statemen
25090 74 73 20 74 6f 20 69 6e 64 69 63 61 74 65 20 74  ts to indicate t
250a0 68 61 74 0a 2a 2a 20 74 68 65 20 61 73 73 65 72  hat.** the asser
250b0 74 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20  t is only valid 
250c0 6f 6e 20 61 20 77 65 6c 6c 2d 66 6f 72 6d 65 64  on a well-formed
250d0 20 64 61 74 61 62 61 73 65 2e 20 20 49 6e 73 74   database.  Inst
250e0 65 61 64 20 6f 66 3a 0a 2a 2a 0a 2a 2a 20 20 20  ead of:.**.**   
250f0 20 20 61 73 73 65 72 74 28 20 58 20 29 3b 0a 2a    assert( X );.*
25100 2a 0a 2a 2a 20 4f 6e 65 20 77 72 69 74 65 73 3a  *.** One writes:
25110 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65 72  .**.**     asser
25120 74 28 20 58 20 7c 7c 20 43 4f 52 52 55 50 54 5f  t( X || CORRUPT_
25130 44 42 20 29 3b 0a 2a 2a 0a 2a 2a 20 43 4f 52 52  DB );.**.** CORR
25140 55 50 54 5f 44 42 20 69 73 20 74 72 75 65 20 64  UPT_DB is true d
25150 75 72 69 6e 67 20 6e 6f 72 6d 61 6c 20 6f 70 65  uring normal ope
25160 72 61 74 69 6f 6e 2e 20 20 43 4f 52 52 55 50 54  ration.  CORRUPT
25170 5f 44 42 20 64 6f 65 73 20 6e 6f 74 20 69 6e 64  _DB does not ind
25180 69 63 61 74 65 0a 2a 2a 20 74 68 61 74 20 74 68  icate.** that th
25190 65 20 64 61 74 61 62 61 73 65 20 69 73 20 64 65  e database is de
251a0 66 69 6e 69 74 65 6c 79 20 63 6f 72 72 75 70 74  finitely corrupt
251b0 2c 20 6f 6e 6c 79 20 74 68 61 74 20 69 74 20 6d  , only that it m
251c0 69 67 68 74 20 62 65 20 63 6f 72 72 75 70 74 2e  ight be corrupt.
251d0 0a 2a 2a 20 46 6f 72 20 6d 6f 73 74 20 74 65 73  .** For most tes
251e0 74 20 63 61 73 65 73 2c 20 43 4f 52 52 55 50 54  t cases, CORRUPT
251f0 5f 44 42 20 69 73 20 73 65 74 20 74 6f 20 66 61  _DB is set to fa
25200 6c 73 65 20 75 73 69 6e 67 20 61 20 73 70 65 63  lse using a spec
25210 69 61 6c 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74  ial.** sqlite3_t
25220 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 29 2e 20 20  est_control().  
25230 54 68 69 73 20 65 6e 61 62 6c 65 73 20 61 73 73  This enables ass
25240 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73  ert() statements
25250 20 74 6f 20 70 72 6f 76 65 0a 2a 2a 20 74 68 69   to prove.** thi
25260 6e 67 73 20 74 68 61 74 20 61 72 65 20 61 6c 77  ngs that are alw
25270 61 79 73 20 74 72 75 65 20 66 6f 72 20 77 65 6c  ays true for wel
25280 6c 2d 66 6f 72 6d 65 64 20 64 61 74 61 62 61 73  l-formed databas
25290 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43  es..*/.#define C
252a0 4f 52 52 55 50 54 5f 44 42 20 20 28 73 71 6c 69  ORRUPT_DB  (sqli
252b0 74 65 33 43 6f 6e 66 69 67 2e 6e 65 76 65 72 43  te3Config.neverC
252c0 6f 72 72 75 70 74 3d 3d 30 29 0a 0a 2f 2a 0a 2a  orrupt==0)../*.*
252d0 2a 20 43 6f 6e 74 65 78 74 20 70 6f 69 6e 74 65  * Context pointe
252e0 72 20 70 61 73 73 65 64 20 64 6f 77 6e 20 74 68  r passed down th
252f0 72 6f 75 67 68 20 74 68 65 20 74 72 65 65 2d 77  rough the tree-w
25300 61 6c 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57  alk..*/.struct W
25310 61 6c 6b 65 72 20 7b 0a 20 20 50 61 72 73 65 20  alker {.  Parse 
25320 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20 20  *pParse;        
25330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25340 20 20 20 20 2f 2a 20 50 61 72 73 65 72 20 63 6f      /* Parser co
25350 6e 74 65 78 74 2e 20 20 2a 2f 0a 20 20 69 6e 74  ntext.  */.  int
25360 20 28 2a 78 45 78 70 72 43 61 6c 6c 62 61 63 6b   (*xExprCallback
25370 29 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a  )(Walker*, Expr*
25380 29 3b 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61  );     /* Callba
25390 63 6b 20 66 6f 72 20 65 78 70 72 65 73 73 69 6f  ck for expressio
253a0 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 53  ns */.  int (*xS
253b0 65 6c 65 63 74 43 61 6c 6c 62 61 63 6b 29 28 57  electCallback)(W
253c0 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b  alker*,Select*);
253d0 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f    /* Callback fo
253e0 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a 20 20 76  r SELECTs */.  v
253f0 6f 69 64 20 28 2a 78 53 65 6c 65 63 74 43 61 6c  oid (*xSelectCal
25400 6c 62 61 63 6b 32 29 28 57 61 6c 6b 65 72 2a 2c  lback2)(Walker*,
25410 53 65 6c 65 63 74 2a 29 3b 2f 2a 20 53 65 63 6f  Select*);/* Seco
25420 6e 64 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20  nd callback for 
25430 53 45 4c 45 43 54 73 20 2a 2f 0a 20 20 69 6e 74  SELECTs */.  int
25440 20 77 61 6c 6b 65 72 44 65 70 74 68 3b 20 20 20   walkerDepth;   
25450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25460 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
25470 20 6f 66 20 73 75 62 71 75 65 72 69 65 73 20 2a   of subqueries *
25480 2f 0a 20 20 75 38 20 65 43 6f 64 65 3b 20 20 20  /.  u8 eCode;   
25490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
254a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
254b0 20 41 20 73 6d 61 6c 6c 20 70 72 6f 63 65 73 73   A small process
254c0 69 6e 67 20 63 6f 64 65 20 2a 2f 0a 20 20 75 6e  ing code */.  un
254d0 69 6f 6e 20 7b 20 20 20 20 20 20 20 20 20 20 20  ion {           
254e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
254f0 20 20 20 20 20 20 20 20 2f 2a 20 45 78 74 72 61          /* Extra
25500 20 64 61 74 61 20 66 6f 72 20 63 61 6c 6c 62 61   data for callba
25510 63 6b 20 2a 2f 0a 20 20 20 20 4e 61 6d 65 43 6f  ck */.    NameCo
25520 6e 74 65 78 74 20 2a 70 4e 43 3b 20 20 20 20 20  ntext *pNC;     
25530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25540 20 20 20 20 2f 2a 20 4e 61 6d 69 6e 67 20 63 6f      /* Naming co
25550 6e 74 65 78 74 20 2a 2f 0a 20 20 20 20 69 6e 74  ntext */.    int
25560 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   n;             
25570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25580 20 20 20 20 20 20 20 2f 2a 20 41 20 63 6f 75 6e         /* A coun
25590 74 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ter */.    int i
255a0 43 75 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Cur;            
255b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
255c0 20 20 20 20 20 2f 2a 20 41 20 63 75 72 73 6f 72       /* A cursor
255d0 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 53   number */.    S
255e0 72 63 4c 69 73 74 20 2a 70 53 72 63 4c 69 73 74  rcList *pSrcList
255f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
25600 20 20 20 20 20 20 20 20 20 2f 2a 20 46 52 4f 4d           /* FROM
25610 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 73   clause */.    s
25620 74 72 75 63 74 20 53 72 63 43 6f 75 6e 74 20 2a  truct SrcCount *
25630 70 53 72 63 43 6f 75 6e 74 3b 20 20 20 20 20 20  pSrcCount;      
25640 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e           /* Coun
25650 74 69 6e 67 20 63 6f 6c 75 6d 6e 20 72 65 66 65  ting column refe
25660 72 65 6e 63 65 73 20 2a 2f 0a 20 20 20 20 73 74  rences */.    st
25670 72 75 63 74 20 43 43 75 72 48 69 6e 74 20 2a 70  ruct CCurHint *p
25680 43 43 75 72 48 69 6e 74 3b 20 20 20 20 20 20 20  CCurHint;       
25690 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 64 20          /* Used 
256a0 62 79 20 63 6f 64 65 43 75 72 73 6f 72 48 69 6e  by codeCursorHin
256b0 74 28 29 20 2a 2f 0a 20 20 20 20 69 6e 74 20 2a  t() */.    int *
256c0 61 69 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20  aiCol;          
256d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
256e0 20 20 20 20 20 2f 2a 20 61 72 72 61 79 20 6f 66       /* array of
256f0 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 65 73 20   column indexes 
25700 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 49 64  */.    struct Id
25710 78 43 6f 76 65 72 20 2a 70 49 64 78 43 6f 76 65  xCover *pIdxCove
25720 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
25730 20 2f 2a 20 43 68 65 63 6b 20 66 6f 72 20 69 6e   /* Check for in
25740 64 65 78 20 63 6f 76 65 72 61 67 65 20 2a 2f 0a  dex coverage */.
25750 20 20 20 20 73 74 72 75 63 74 20 49 64 78 45 78      struct IdxEx
25760 70 72 54 72 61 6e 73 20 2a 70 49 64 78 54 72 61  prTrans *pIdxTra
25770 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ns;           /*
25780 20 43 6f 6e 76 65 72 74 20 69 64 78 65 64 20 65   Convert idxed e
25790 78 70 72 20 74 6f 20 63 6f 6c 75 6d 6e 20 2a 2f  xpr to column */
257a0 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70  .    ExprList *p
257b0 47 72 6f 75 70 42 79 3b 20 20 20 20 20 20 20 20  GroupBy;        
257c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
257d0 2a 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73  * GROUP BY claus
257e0 65 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20  e */.    Select 
257f0 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 20 20  *pSelect;       
25800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25810 20 20 20 2f 2a 20 48 41 56 49 4e 47 20 74 6f 20     /* HAVING to 
25820 57 48 45 52 45 20 63 6c 61 75 73 65 20 63 74 78  WHERE clause ctx
25830 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 57   */.    struct W
25840 69 6e 64 6f 77 52 65 77 72 69 74 65 20 2a 70 52  indowRewrite *pR
25850 65 77 72 69 74 65 3b 20 20 20 20 20 20 20 20 20  ewrite;         
25860 20 20 2f 2a 20 57 69 6e 64 6f 77 20 72 65 77 72    /* Window rewr
25870 69 74 65 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20  ite context */. 
25880 20 20 20 73 74 72 75 63 74 20 57 68 65 72 65 43     struct WhereC
25890 6f 6e 73 74 20 2a 70 43 6f 6e 73 74 3b 20 20 20  onst *pConst;   
258a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
258b0 57 48 45 52 45 20 63 6c 61 75 73 65 20 63 6f 6e  WHERE clause con
258c0 73 74 61 6e 74 73 20 2a 2f 0a 20 20 20 20 73 74  stants */.    st
258d0 72 75 63 74 20 52 65 6e 61 6d 65 43 74 78 20 2a  ruct RenameCtx *
258e0 70 52 65 6e 61 6d 65 3b 20 20 20 20 20 20 20 20  pRename;        
258f0 20 20 20 20 20 20 20 20 2f 2a 20 52 45 4e 41 4d          /* RENAM
25900 45 20 43 4f 4c 55 4d 4e 20 63 6f 6e 74 65 78 74  E COLUMN context
25910 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f   */.  } u;.};../
25920 2a 20 46 6f 72 77 61 72 64 20 64 65 63 6c 61 72  * Forward declar
25930 61 74 69 6f 6e 73 20 2a 2f 0a 69 6e 74 20 73 71  ations */.int sq
25940 6c 69 74 65 33 57 61 6c 6b 45 78 70 72 28 57 61  lite3WalkExpr(Wa
25950 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69  lker*, Expr*);.i
25960 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 45 78  nt sqlite3WalkEx
25970 70 72 4c 69 73 74 28 57 61 6c 6b 65 72 2a 2c 20  prList(Walker*, 
25980 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20  ExprList*);.int 
25990 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63  sqlite3WalkSelec
259a0 74 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63  t(Walker*, Selec
259b0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
259c0 57 61 6c 6b 53 65 6c 65 63 74 45 78 70 72 28 57  WalkSelectExpr(W
259d0 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29  alker*, Select*)
259e0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c  ;.int sqlite3Wal
259f0 6b 53 65 6c 65 63 74 46 72 6f 6d 28 57 61 6c 6b  kSelectFrom(Walk
25a00 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69  er*, Select*);.i
25a10 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 57 61  nt sqlite3ExprWa
25a20 6c 6b 4e 6f 6f 70 28 57 61 6c 6b 65 72 2a 2c 20  lkNoop(Walker*, 
25a30 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
25a40 74 65 33 53 65 6c 65 63 74 57 61 6c 6b 4e 6f 6f  te3SelectWalkNoo
25a50 70 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63  p(Walker*, Selec
25a60 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
25a70 53 65 6c 65 63 74 57 61 6c 6b 46 61 69 6c 28 57  SelectWalkFail(W
25a80 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29  alker*, Select*)
25a90 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
25aa0 44 45 42 55 47 0a 76 6f 69 64 20 73 71 6c 69 74  DEBUG.void sqlit
25ab0 65 33 53 65 6c 65 63 74 57 61 6c 6b 41 73 73 65  e3SelectWalkAsse
25ac0 72 74 32 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c  rt2(Walker*, Sel
25ad0 65 63 74 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f  ect*);.#endif../
25ae0 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 63 6f 64 65  *.** Return code
25af0 20 66 72 6f 6d 20 74 68 65 20 70 61 72 73 65 2d   from the parse-
25b00 74 72 65 65 20 77 61 6c 6b 69 6e 67 20 70 72 69  tree walking pri
25b10 6d 69 74 69 76 65 73 20 61 6e 64 20 74 68 65 69  mitives and thei
25b20 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 73 2e 0a  r.** callbacks..
25b30 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 43  */.#define WRC_C
25b40 6f 6e 74 69 6e 75 65 20 20 20 20 30 20 20 20 2f  ontinue    0   /
25b50 2a 20 43 6f 6e 74 69 6e 75 65 20 64 6f 77 6e 20  * Continue down 
25b60 69 6e 74 6f 20 63 68 69 6c 64 72 65 6e 20 2a 2f  into children */
25b70 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 50 72 75  .#define WRC_Pru
25b80 6e 65 20 20 20 20 20 20 20 31 20 20 20 2f 2a 20  ne       1   /* 
25b90 4f 6d 69 74 20 63 68 69 6c 64 72 65 6e 20 62 75  Omit children bu
25ba0 74 20 63 6f 6e 74 69 6e 75 65 20 77 61 6c 6b 69  t continue walki
25bb0 6e 67 20 73 69 62 6c 69 6e 67 73 20 2a 2f 0a 23  ng siblings */.#
25bc0 64 65 66 69 6e 65 20 57 52 43 5f 41 62 6f 72 74  define WRC_Abort
25bd0 20 20 20 20 20 20 20 32 20 20 20 2f 2a 20 41 62         2   /* Ab
25be0 61 6e 64 6f 6e 20 74 68 65 20 74 72 65 65 20 77  andon the tree w
25bf0 61 6c 6b 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e  alk */../*.** An
25c00 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
25c10 73 20 73 74 72 75 63 74 75 72 65 20 72 65 70 72  s structure repr
25c20 65 73 65 6e 74 73 20 61 20 73 65 74 20 6f 66 20  esents a set of 
25c30 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 43 54 45 73  one or more CTEs
25c40 0a 2a 2a 20 28 63 6f 6d 6d 6f 6e 20 74 61 62 6c  .** (common tabl
25c50 65 20 65 78 70 72 65 73 73 69 6f 6e 73 29 20 63  e expressions) c
25c60 72 65 61 74 65 64 20 62 79 20 61 20 73 69 6e 67  reated by a sing
25c70 6c 65 20 57 49 54 48 20 63 6c 61 75 73 65 2e 0a  le WITH clause..
25c80 2a 2f 0a 73 74 72 75 63 74 20 57 69 74 68 20 7b  */.struct With {
25c90 0a 20 20 69 6e 74 20 6e 43 74 65 3b 20 20 20 20  .  int nCte;    
25ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25cb0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
25cc0 43 54 45 73 20 69 6e 20 74 68 65 20 57 49 54 48  CTEs in the WITH
25cd0 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 57 69 74   clause */.  Wit
25ce0 68 20 2a 70 4f 75 74 65 72 3b 20 20 20 20 20 20  h *pOuter;      
25cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
25d00 43 6f 6e 74 61 69 6e 69 6e 67 20 57 49 54 48 20  Containing WITH 
25d10 63 6c 61 75 73 65 2c 20 6f 72 20 4e 55 4c 4c 20  clause, or NULL 
25d20 2a 2f 0a 20 20 73 74 72 75 63 74 20 43 74 65 20  */.  struct Cte 
25d30 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
25d40 20 20 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68       /* For each
25d50 20 43 54 45 20 69 6e 20 74 68 65 20 57 49 54 48   CTE in the WITH
25d60 20 63 6c 61 75 73 65 2e 2e 2e 2e 20 2a 2f 0a 20   clause.... */. 
25d70 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20     char *zName; 
25d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25d90 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
25da0 69 73 20 43 54 45 20 2a 2f 0a 20 20 20 20 45 78  is CTE */.    Ex
25db0 70 72 4c 69 73 74 20 2a 70 43 6f 6c 73 3b 20 20  prList *pCols;  
25dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
25dd0 20 4c 69 73 74 20 6f 66 20 65 78 70 6c 69 63 69   List of explici
25de0 74 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 2c 20  t column names, 
25df0 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 53  or NULL */.    S
25e00 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20  elect *pSelect; 
25e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
25e20 2a 20 54 68 65 20 64 65 66 69 6e 69 74 69 6f 6e  * The definition
25e30 20 6f 66 20 74 68 69 73 20 43 54 45 20 2a 2f 0a   of this CTE */.
25e40 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
25e50 7a 43 74 65 45 72 72 3b 20 20 20 20 20 20 20 20  zCteErr;        
25e60 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73      /* Error mes
25e70 73 61 67 65 20 66 6f 72 20 63 69 72 63 75 6c 61  sage for circula
25e80 72 20 72 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a  r references */.
25e90 20 20 7d 20 61 5b 31 5d 3b 0a 7d 3b 0a 0a 23 69    } a[1];.};..#i
25ea0 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
25eb0 47 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  G./*.** An insta
25ec0 6e 63 65 20 6f 66 20 74 68 65 20 54 72 65 65 56  nce of the TreeV
25ed0 69 65 77 20 6f 62 6a 65 63 74 20 69 73 20 75 73  iew object is us
25ee0 65 64 20 66 6f 72 20 70 72 69 6e 74 69 6e 67 20  ed for printing 
25ef0 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a  the content of.*
25f00 2a 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65  * data structure
25f10 73 20 6f 6e 20 73 71 6c 69 74 65 33 44 65 62 75  s on sqlite3Debu
25f20 67 50 72 69 6e 74 66 28 29 20 75 73 69 6e 67 20  gPrintf() using 
25f30 61 20 74 72 65 65 2d 6c 69 6b 65 20 76 69 65 77  a tree-like view
25f40 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 72 65 65  ..*/.struct Tree
25f50 56 69 65 77 20 7b 0a 20 20 69 6e 74 20 69 4c 65  View {.  int iLe
25f60 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20  vel;            
25f70 20 2f 2a 20 57 68 69 63 68 20 6c 65 76 65 6c 20   /* Which level 
25f80 6f 66 20 74 68 65 20 74 72 65 65 20 77 65 20 61  of the tree we a
25f90 72 65 20 6f 6e 20 2a 2f 0a 20 20 75 38 20 20 62  re on */.  u8  b
25fa0 4c 69 6e 65 5b 31 30 30 5d 3b 20 20 20 20 20 20  Line[100];      
25fb0 20 20 20 2f 2a 20 44 72 61 77 20 76 65 72 74 69     /* Draw verti
25fc0 63 61 6c 20 69 6e 20 63 6f 6c 75 6d 6e 20 69 20  cal in column i 
25fd0 69 66 20 62 4c 69 6e 65 5b 69 5d 20 69 73 20 74  if bLine[i] is t
25fe0 72 75 65 20 2a 2f 0a 7d 3b 0a 23 65 6e 64 69 66  rue */.};.#endif
25ff0 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47   /* SQLITE_DEBUG
26000 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20   */../*.** This 
26010 6f 62 6a 65 63 74 20 69 73 20 75 73 65 64 20 69  object is used i
26020 6e 20 76 61 72 69 6f 69 75 73 20 77 61 79 73 2c  n varioius ways,
26030 20 61 6c 6c 20 72 65 6c 61 74 65 64 20 74 6f 20   all related to 
26040 77 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 73  window functions
26050 0a 2a 2a 0a 2a 2a 20 20 20 28 31 29 20 41 20 73  .**.**   (1) A s
26060 69 6e 67 6c 65 20 69 6e 73 74 61 6e 63 65 20 6f  ingle instance o
26070 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
26080 20 69 73 20 61 74 74 61 63 68 65 64 20 74 6f 20   is attached to 
26090 74 68 65 0a 2a 2a 20 20 20 20 20 20 20 74 68 65  the.**       the
260a0 20 45 78 70 72 2e 70 57 69 6e 20 66 69 65 6c 64   Expr.pWin field
260b0 20 66 6f 72 20 65 61 63 68 20 77 69 6e 64 6f 77   for each window
260c0 20 66 75 6e 63 74 69 6f 6e 20 69 6e 20 61 6e 20   function in an 
260d0 65 78 70 72 65 73 73 69 6f 6e 20 74 72 65 65 2e  expression tree.
260e0 0a 2a 2a 20 20 20 20 20 20 20 54 68 69 73 20 6f  .**       This o
260f0 62 6a 65 63 74 20 68 6f 6c 64 73 20 74 68 65 20  bject holds the 
26100 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 63 6f 6e 74  information cont
26110 61 69 6e 65 64 20 69 6e 20 74 68 65 20 4f 56 45  ained in the OVE
26120 52 20 63 6c 61 75 73 65 2c 0a 2a 2a 20 20 20 20  R clause,.**    
26130 20 20 20 70 6c 75 73 20 61 64 64 69 74 69 6f 6e     plus addition
26140 61 6c 20 66 69 65 6c 64 73 20 75 73 65 64 20 64  al fields used d
26150 75 72 69 6e 67 20 63 6f 64 65 20 67 65 6e 65 72  uring code gener
26160 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 20 20 28  ation..**.**   (
26170 32 29 20 41 6c 6c 20 77 69 6e 64 6f 77 20 66 75  2) All window fu
26180 6e 63 74 69 6f 6e 73 20 69 6e 20 61 20 73 69 6e  nctions in a sin
26190 67 6c 65 20 53 45 4c 45 43 54 20 66 6f 72 6d 20  gle SELECT form 
261a0 61 20 6c 69 6e 6b 65 64 2d 6c 69 73 74 0a 2a 2a  a linked-list.**
261b0 20 20 20 20 20 20 20 61 74 74 61 63 68 65 64 20         attached 
261c0 74 6f 20 53 65 6c 65 63 74 2e 70 57 69 6e 2e 20  to Select.pWin. 
261d0 20 54 68 65 20 57 69 6e 64 6f 77 2e 70 46 75 6e   The Window.pFun
261e0 63 20 61 6e 64 20 57 69 6e 64 6f 77 2e 70 45 78  c and Window.pEx
261f0 70 72 0a 2a 2a 20 20 20 20 20 20 20 66 69 65 6c  pr.**       fiel
26200 64 73 20 70 6f 69 6e 74 20 62 61 63 6b 20 74 6f  ds point back to
26210 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
26220 74 68 61 74 20 69 73 20 74 68 65 20 77 69 6e 64  that is the wind
26230 6f 77 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a  ow function..**.
26240 2a 2a 20 20 20 28 33 29 20 54 68 65 20 74 65 72  **   (3) The ter
26250 6d 73 20 6f 66 20 74 68 65 20 57 49 4e 44 4f 57  ms of the WINDOW
26260 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c   clause of a SEL
26270 45 43 54 20 61 72 65 20 69 6e 73 74 61 6e 63 65  ECT are instance
26280 73 20 6f 66 20 74 68 69 73 0a 2a 2a 20 20 20 20  s of this.**    
26290 20 20 20 6f 62 6a 65 63 74 20 6f 6e 20 61 20 6c     object on a l
262a0 69 6e 6b 65 64 20 6c 69 73 74 20 61 74 74 61 63  inked list attac
262b0 68 65 64 20 74 6f 20 53 65 6c 65 63 74 2e 70 57  hed to Select.pW
262c0 69 6e 44 65 66 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  inDefn..**.** Th
262d0 65 20 75 73 65 73 20 28 31 29 20 61 6e 64 20 28  e uses (1) and (
262e0 32 29 20 61 72 65 20 72 65 61 6c 6c 79 20 74 68  2) are really th
262f0 65 20 73 61 6d 65 20 57 69 6e 64 6f 77 20 6f 62  e same Window ob
26300 6a 65 63 74 20 74 68 61 74 20 6a 75 73 74 20 68  ject that just h
26310 61 70 70 65 6e 73 0a 2a 2a 20 74 6f 20 62 65 20  appens.** to be 
26320 61 63 63 65 73 73 69 62 6c 65 20 69 6e 20 74 77  accessible in tw
26330 6f 20 64 69 66 66 65 72 65 6e 74 20 77 61 79 73  o different ways
26340 2e 20 20 55 73 65 20 28 33 29 20 69 73 20 61 72  .  Use (3) is ar
26350 65 20 73 65 70 61 72 61 74 65 20 6f 62 6a 65 63  e separate objec
26360 74 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57 69  ts..*/.struct Wi
26370 6e 64 6f 77 20 7b 0a 20 20 63 68 61 72 20 2a 7a  ndow {.  char *z
26380 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20  Name;           
26390 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 77 69 6e 64   /* Name of wind
263a0 6f 77 20 28 6d 61 79 20 62 65 20 4e 55 4c 4c 29  ow (may be NULL)
263b0 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
263c0 70 50 61 72 74 69 74 69 6f 6e 3b 20 20 20 2f 2a  pPartition;   /*
263d0 20 50 41 52 54 49 54 49 4f 4e 20 42 59 20 63 6c   PARTITION BY cl
263e0 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69  ause */.  ExprLi
263f0 73 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 20  st *pOrderBy;   
26400 20 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 63 6c    /* ORDER BY cl
26410 61 75 73 65 20 2a 2f 0a 20 20 75 38 20 65 54 79  ause */.  u8 eTy
26420 70 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  pe;             
26430 20 20 2f 2a 20 54 4b 5f 52 41 4e 47 45 20 6f 72    /* TK_RANGE or
26440 20 54 4b 5f 52 4f 57 53 20 2a 2f 0a 20 20 75 38   TK_ROWS */.  u8
26450 20 65 53 74 61 72 74 3b 20 20 20 20 20 20 20 20   eStart;        
26460 20 20 20 20 20 20 2f 2a 20 55 4e 42 4f 55 4e 44        /* UNBOUND
26470 45 44 2c 20 43 55 52 52 45 4e 54 2c 20 50 52 45  ED, CURRENT, PRE
26480 43 45 44 49 4e 47 20 6f 72 20 46 4f 4c 4c 4f 57  CEDING or FOLLOW
26490 49 4e 47 20 2a 2f 0a 20 20 75 38 20 65 45 6e 64  ING */.  u8 eEnd
264a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
264b0 20 2f 2a 20 55 4e 42 4f 55 4e 44 45 44 2c 20 43   /* UNBOUNDED, C
264c0 55 52 52 45 4e 54 2c 20 50 52 45 43 45 44 49 4e  URRENT, PRECEDIN
264d0 47 20 6f 72 20 46 4f 4c 4c 4f 57 49 4e 47 20 2a  G or FOLLOWING *
264e0 2f 0a 20 20 45 78 70 72 20 2a 70 53 74 61 72 74  /.  Expr *pStart
264f0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45  ;           /* E
26500 78 70 72 65 73 73 69 6f 6e 20 66 6f 72 20 22 3c  xpression for "<
26510 65 78 70 72 3e 20 50 52 45 43 45 44 49 4e 47 22  expr> PRECEDING"
26520 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 45 6e 64   */.  Expr *pEnd
26530 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
26540 20 45 78 70 72 65 73 73 69 6f 6e 20 66 6f 72 20   Expression for 
26550 22 3c 65 78 70 72 3e 20 46 4f 4c 4c 4f 57 49 4e  "<expr> FOLLOWIN
26560 47 22 20 2a 2f 0a 20 20 57 69 6e 64 6f 77 20 2a  G" */.  Window *
26570 70 4e 65 78 74 57 69 6e 3b 20 20 20 20 20 20 20  pNextWin;       
26580 2f 2a 20 4e 65 78 74 20 77 69 6e 64 6f 77 20 66  /* Next window f
26590 75 6e 63 74 69 6f 6e 20 62 65 6c 6f 6e 67 69 6e  unction belongin
265a0 67 20 74 6f 20 74 68 69 73 20 53 45 4c 45 43 54  g to this SELECT
265b0 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 46 69 6c   */.  Expr *pFil
265c0 74 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ter;          /*
265d0 20 54 68 65 20 46 49 4c 54 45 52 20 65 78 70 72   The FILTER expr
265e0 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 46 75 6e 63  ession */.  Func
265f0 44 65 66 20 2a 70 46 75 6e 63 3b 20 20 20 20 20  Def *pFunc;     
26600 20 20 20 20 2f 2a 20 54 68 65 20 66 75 6e 63 74      /* The funct
26610 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 69 45 70  ion */.  int iEp
26620 68 43 73 72 3b 20 20 20 20 20 20 20 20 20 20 20  hCsr;           
26630 20 2f 2a 20 50 61 72 74 69 74 69 6f 6e 20 62 75   /* Partition bu
26640 66 66 65 72 20 6f 72 20 50 65 65 72 20 62 75 66  ffer or Peer buf
26650 66 65 72 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67  fer */.  int reg
26660 41 63 63 75 6d 3b 0a 20 20 69 6e 74 20 72 65 67  Accum;.  int reg
26670 52 65 73 75 6c 74 3b 0a 20 20 69 6e 74 20 63 73  Result;.  int cs
26680 72 41 70 70 3b 20 20 20 20 20 20 20 20 20 20 20  rApp;           
26690 20 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20 63 75    /* Function cu
266a0 72 73 6f 72 20 28 75 73 65 64 20 62 79 20 6d 69  rsor (used by mi
266b0 6e 2f 6d 61 78 29 20 2a 2f 0a 20 20 69 6e 74 20  n/max) */.  int 
266c0 72 65 67 41 70 70 3b 20 20 20 20 20 20 20 20 20  regApp;         
266d0 20 20 20 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20      /* Function 
266e0 72 65 67 69 73 74 65 72 20 28 61 6c 73 6f 20 75  register (also u
266f0 73 65 64 20 62 79 20 6d 69 6e 2f 6d 61 78 29 20  sed by min/max) 
26700 2a 2f 0a 20 20 69 6e 74 20 72 65 67 50 61 72 74  */.  int regPart
26710 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
26720 46 69 72 73 74 20 69 6e 20 61 20 73 65 74 20 6f  First in a set o
26730 66 20 72 65 67 69 73 74 65 72 73 20 68 6f 6c 64  f registers hold
26740 69 6e 67 20 50 41 52 54 49 54 49 4f 4e 20 42 59  ing PARTITION BY
26750 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26760 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 61 6e             ** an
26770 64 20 4f 52 44 45 52 20 42 59 20 76 61 6c 75 65  d ORDER BY value
26780 73 20 66 6f 72 20 74 68 65 20 77 69 6e 64 6f 77  s for the window
26790 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 4f 77 6e   */.  Expr *pOwn
267a0 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  er;           /*
267b0 20 45 78 70 72 65 73 73 69 6f 6e 20 6f 62 6a 65   Expression obje
267c0 63 74 20 74 68 69 73 20 77 69 6e 64 6f 77 20 69  ct this window i
267d0 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 2a 2f  s attached to */
267e0 0a 20 20 69 6e 74 20 6e 42 75 66 66 65 72 43 6f  .  int nBufferCo
267f0 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  l;         /* Nu
26800 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
26810 69 6e 20 62 75 66 66 65 72 20 74 61 62 6c 65 20  in buffer table 
26820 2a 2f 0a 20 20 69 6e 74 20 69 41 72 67 43 6f 6c  */.  int iArgCol
26830 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
26840 4f 66 66 73 65 74 20 6f 66 20 66 69 72 73 74 20  Offset of first 
26850 61 72 67 75 6d 65 6e 74 20 66 6f 72 20 74 68 69  argument for thi
26860 73 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d 3b  s function */.};
26870 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
26880 5f 4f 4d 49 54 5f 57 49 4e 44 4f 57 46 55 4e 43  _OMIT_WINDOWFUNC
26890 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 6e  .void sqlite3Win
268a0 64 6f 77 44 65 6c 65 74 65 28 73 71 6c 69 74 65  dowDelete(sqlite
268b0 33 2a 2c 20 57 69 6e 64 6f 77 2a 29 3b 0a 76 6f  3*, Window*);.vo
268c0 69 64 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77  id sqlite3Window
268d0 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74  ListDelete(sqlit
268e0 65 33 20 2a 64 62 2c 20 57 69 6e 64 6f 77 20 2a  e3 *db, Window *
268f0 70 29 3b 0a 57 69 6e 64 6f 77 20 2a 73 71 6c 69  p);.Window *sqli
26900 74 65 33 57 69 6e 64 6f 77 41 6c 6c 6f 63 28 50  te3WindowAlloc(P
26910 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  arse*, int, int,
26920 20 45 78 70 72 2a 2c 20 69 6e 74 20 2c 20 45 78   Expr*, int , Ex
26930 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
26940 65 33 57 69 6e 64 6f 77 41 74 74 61 63 68 28 50  e3WindowAttach(P
26950 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 57 69  arse*, Expr*, Wi
26960 6e 64 6f 77 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ndow*);.int sqli
26970 74 65 33 57 69 6e 64 6f 77 43 6f 6d 70 61 72 65  te3WindowCompare
26980 28 50 61 72 73 65 2a 2c 20 57 69 6e 64 6f 77 2a  (Parse*, Window*
26990 2c 20 57 69 6e 64 6f 77 2a 29 3b 0a 76 6f 69 64  , Window*);.void
269a0 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 43 6f   sqlite3WindowCo
269b0 64 65 49 6e 69 74 28 50 61 72 73 65 2a 2c 20 57  deInit(Parse*, W
269c0 69 6e 64 6f 77 2a 29 3b 0a 76 6f 69 64 20 73 71  indow*);.void sq
269d0 6c 69 74 65 33 57 69 6e 64 6f 77 43 6f 64 65 53  lite3WindowCodeS
269e0 74 65 70 28 50 61 72 73 65 2a 2c 20 53 65 6c 65  tep(Parse*, Sele
269f0 63 74 2a 2c 20 57 68 65 72 65 49 6e 66 6f 2a 2c  ct*, WhereInfo*,
26a00 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20   int, int);.int 
26a10 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 52 65 77  sqlite3WindowRew
26a20 72 69 74 65 28 50 61 72 73 65 2a 2c 20 53 65 6c  rite(Parse*, Sel
26a30 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ect*);.int sqlit
26a40 65 33 45 78 70 61 6e 64 53 75 62 71 75 65 72 79  e3ExpandSubquery
26a50 28 50 61 72 73 65 2a 2c 20 73 74 72 75 63 74 20  (Parse*, struct 
26a60 53 72 63 4c 69 73 74 5f 69 74 65 6d 2a 29 3b 0a  SrcList_item*);.
26a70 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 6e 64  void sqlite3Wind
26a80 6f 77 55 70 64 61 74 65 28 50 61 72 73 65 2a 2c  owUpdate(Parse*,
26a90 20 57 69 6e 64 6f 77 2a 2c 20 57 69 6e 64 6f 77   Window*, Window
26aa0 2a 2c 20 46 75 6e 63 44 65 66 2a 29 3b 0a 57 69  *, FuncDef*);.Wi
26ab0 6e 64 6f 77 20 2a 73 71 6c 69 74 65 33 57 69 6e  ndow *sqlite3Win
26ac0 64 6f 77 44 75 70 28 73 71 6c 69 74 65 33 20 2a  dowDup(sqlite3 *
26ad0 64 62 2c 20 45 78 70 72 20 2a 70 4f 77 6e 65 72  db, Expr *pOwner
26ae0 2c 20 57 69 6e 64 6f 77 20 2a 70 29 3b 0a 57 69  , Window *p);.Wi
26af0 6e 64 6f 77 20 2a 73 71 6c 69 74 65 33 57 69 6e  ndow *sqlite3Win
26b00 64 6f 77 4c 69 73 74 44 75 70 28 73 71 6c 69 74  dowListDup(sqlit
26b10 65 33 20 2a 64 62 2c 20 57 69 6e 64 6f 77 20 2a  e3 *db, Window *
26b20 70 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  p);.void sqlite3
26b30 57 69 6e 64 6f 77 46 75 6e 63 74 69 6f 6e 73 28  WindowFunctions(
26b40 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 23 20 64  void);.#else.# d
26b50 65 66 69 6e 65 20 73 71 6c 69 74 65 33 57 69 6e  efine sqlite3Win
26b60 64 6f 77 44 65 6c 65 74 65 28 61 2c 62 29 0a 23  dowDelete(a,b).#
26b70 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 57   define sqlite3W
26b80 69 6e 64 6f 77 46 75 6e 63 74 69 6f 6e 73 28 29  indowFunctions()
26b90 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
26ba0 33 57 69 6e 64 6f 77 41 74 74 61 63 68 28 61 2c  3WindowAttach(a,
26bb0 62 2c 63 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  b,c).#endif../*.
26bc0 2a 2a 20 41 73 73 75 6d 69 6e 67 20 7a 49 6e 20  ** Assuming zIn 
26bd0 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66 69  points to the fi
26be0 72 73 74 20 62 79 74 65 20 6f 66 20 61 20 55 54  rst byte of a UT
26bf0 46 2d 38 20 63 68 61 72 61 63 74 65 72 2c 0a 2a  F-8 character,.*
26c00 2a 20 61 64 76 61 6e 63 65 20 7a 49 6e 20 74 6f  * advance zIn to
26c10 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 66 69   point to the fi
26c20 72 73 74 20 62 79 74 65 20 6f 66 20 74 68 65 20  rst byte of the 
26c30 6e 65 78 74 20 55 54 46 2d 38 20 63 68 61 72 61  next UTF-8 chara
26c40 63 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  cter..*/.#define
26c50 20 53 51 4c 49 54 45 5f 53 4b 49 50 5f 55 54 46   SQLITE_SKIP_UTF
26c60 38 28 7a 49 6e 29 20 7b 20 20 20 20 20 20 20 20  8(zIn) {        
26c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26c80 5c 0a 20 20 69 66 28 20 28 2a 28 7a 49 6e 2b 2b  \.  if( (*(zIn++
26c90 29 29 3e 3d 30 78 63 30 20 29 7b 20 20 20 20 20  ))>=0xc0 ){     
26ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26cb0 20 20 20 20 20 20 20 20 20 5c 0a 20 20 20 20 77           \.    w
26cc0 68 69 6c 65 28 20 28 2a 7a 49 6e 20 26 20 30 78  hile( (*zIn & 0x
26cd0 63 30 29 3d 3d 30 78 38 30 20 29 7b 20 7a 49 6e  c0)==0x80 ){ zIn
26ce0 2b 2b 3b 20 7d 20 20 20 20 20 20 20 20 20 20 20  ++; }           
26cf0 20 20 5c 0a 20 20 7d 20 20 20 20 20 20 20 20 20    \.  }         
26d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26d20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 7d 0a 0a             \.}..
26d30 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45  /*.** The SQLITE
26d40 5f 2a 5f 42 4b 50 54 20 6d 61 63 72 6f 73 20 61  _*_BKPT macros a
26d50 72 65 20 73 75 62 73 74 69 74 75 74 65 73 20 66  re substitutes f
26d60 6f 72 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64  or the error cod
26d70 65 73 20 77 69 74 68 0a 2a 2a 20 74 68 65 20 73  es with.** the s
26d80 61 6d 65 20 6e 61 6d 65 20 62 75 74 20 77 69 74  ame name but wit
26d90 68 6f 75 74 20 74 68 65 20 5f 42 4b 50 54 20 73  hout the _BKPT s
26da0 75 66 66 69 78 2e 20 20 54 68 65 73 65 20 6d 61  uffix.  These ma
26db0 63 72 6f 73 20 69 6e 76 6f 6b 65 0a 2a 2a 20 72  cros invoke.** r
26dc0 6f 75 74 69 6e 65 73 20 74 68 61 74 20 72 65 70  outines that rep
26dd0 6f 72 74 20 74 68 65 20 6c 69 6e 65 2d 6e 75 6d  ort the line-num
26de0 62 65 72 20 6f 6e 20 77 68 69 63 68 20 74 68 65  ber on which the
26df0 20 65 72 72 6f 72 20 6f 72 69 67 69 6e 61 74 65   error originate
26e00 64 0a 2a 2a 20 75 73 69 6e 67 20 73 71 6c 69 74  d.** using sqlit
26e10 65 33 5f 6c 6f 67 28 29 2e 20 20 54 68 65 20 72  e3_log().  The r
26e20 6f 75 74 69 6e 65 73 20 61 6c 73 6f 20 70 72 6f  outines also pro
26e30 76 69 64 65 20 61 20 63 6f 6e 76 65 6e 69 65 6e  vide a convenien
26e40 74 20 70 6c 61 63 65 0a 2a 2a 20 74 6f 20 73 65  t place.** to se
26e50 74 20 61 20 64 65 62 75 67 67 65 72 20 62 72 65  t a debugger bre
26e60 61 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a 69 6e 74 20  akpoint..*/.int 
26e70 73 71 6c 69 74 65 33 52 65 70 6f 72 74 45 72 72  sqlite3ReportErr
26e80 6f 72 28 69 6e 74 20 69 45 72 72 2c 20 69 6e 74  or(int iErr, int
26e90 20 6c 69 6e 65 6e 6f 2c 20 63 6f 6e 73 74 20 63   lineno, const c
26ea0 68 61 72 20 2a 7a 54 79 70 65 29 3b 0a 69 6e 74  har *zType);.int
26eb0 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45   sqlite3CorruptE
26ec0 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73  rror(int);.int s
26ed0 71 6c 69 74 65 33 4d 69 73 75 73 65 45 72 72 6f  qlite3MisuseErro
26ee0 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  r(int);.int sqli
26ef0 74 65 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72  te3CantopenError
26f00 28 69 6e 74 29 3b 0a 23 64 65 66 69 6e 65 20 53  (int);.#define S
26f10 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b  QLITE_CORRUPT_BK
26f20 50 54 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70  PT sqlite3Corrup
26f30 74 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29  tError(__LINE__)
26f40 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
26f50 4d 49 53 55 53 45 5f 42 4b 50 54 20 73 71 6c 69  MISUSE_BKPT sqli
26f60 74 65 33 4d 69 73 75 73 65 45 72 72 6f 72 28 5f  te3MisuseError(_
26f70 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65  _LINE__).#define
26f80 20 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e   SQLITE_CANTOPEN
26f90 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 43 61 6e  _BKPT sqlite3Can
26fa0 74 6f 70 65 6e 45 72 72 6f 72 28 5f 5f 4c 49 4e  topenError(__LIN
26fb0 45 5f 5f 29 0a 23 69 66 64 65 66 20 53 51 4c 49  E__).#ifdef SQLI
26fc0 54 45 5f 44 45 42 55 47 0a 20 20 69 6e 74 20 73  TE_DEBUG.  int s
26fd0 71 6c 69 74 65 33 4e 6f 6d 65 6d 45 72 72 6f 72  qlite3NomemError
26fe0 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c  (int);.  int sql
26ff0 69 74 65 33 49 6f 65 72 72 6e 6f 6d 65 6d 45 72  ite3IoerrnomemEr
27000 72 6f 72 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20  ror(int);.  int 
27010 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74 50 67  sqlite3CorruptPg
27020 6e 6f 45 72 72 6f 72 28 69 6e 74 2c 50 67 6e 6f  noError(int,Pgno
27030 29 3b 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  );.# define SQLI
27040 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20 73 71  TE_NOMEM_BKPT sq
27050 6c 69 74 65 33 4e 6f 6d 65 6d 45 72 72 6f 72 28  lite3NomemError(
27060 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 20 64 65 66 69  __LINE__).# defi
27070 6e 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f  ne SQLITE_IOERR_
27080 4e 4f 4d 45 4d 5f 42 4b 50 54 20 73 71 6c 69 74  NOMEM_BKPT sqlit
27090 65 33 49 6f 65 72 72 6e 6f 6d 65 6d 45 72 72 6f  e3IoerrnomemErro
270a0 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 20 64 65  r(__LINE__).# de
270b0 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52 52  fine SQLITE_CORR
270c0 55 50 54 5f 50 47 4e 4f 28 50 29 20 73 71 6c 69  UPT_PGNO(P) sqli
270d0 74 65 33 43 6f 72 72 75 70 74 50 67 6e 6f 45 72  te3CorruptPgnoEr
270e0 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 2c 28 50 29  ror(__LINE__,(P)
270f0 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
27100 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b   SQLITE_NOMEM_BK
27110 50 54 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 0a  PT SQLITE_NOMEM.
27120 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
27130 49 4f 45 52 52 5f 4e 4f 4d 45 4d 5f 42 4b 50 54  IOERR_NOMEM_BKPT
27140 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f   SQLITE_IOERR_NO
27150 4d 45 4d 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  MEM.# define SQL
27160 49 54 45 5f 43 4f 52 52 55 50 54 5f 50 47 4e 4f  ITE_CORRUPT_PGNO
27170 28 50 29 20 73 71 6c 69 74 65 33 43 6f 72 72 75  (P) sqlite3Corru
27180 70 74 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f  ptError(__LINE__
27190 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
271a0 46 54 53 33 20 61 6e 64 20 46 54 53 34 20 62 6f  FTS3 and FTS4 bo
271b0 74 68 20 72 65 71 75 69 72 65 20 76 69 72 74 75  th require virtu
271c0 61 6c 20 74 61 62 6c 65 20 73 75 70 70 6f 72 74  al table support
271d0 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
271e0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
271f0 55 41 4c 54 41 42 4c 45 29 0a 23 20 75 6e 64 65  UALTABLE).# unde
27200 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
27210 46 54 53 33 0a 23 20 75 6e 64 65 66 20 53 51 4c  FTS3.# undef SQL
27220 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 0a  ITE_ENABLE_FTS4.
27230 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 54  #endif../*.** FT
27240 53 34 20 69 73 20 72 65 61 6c 6c 79 20 61 6e 20  S4 is really an 
27250 65 78 74 65 6e 73 69 6f 6e 20 66 6f 72 20 46 54  extension for FT
27260 53 33 2e 20 20 49 74 20 69 73 20 65 6e 61 62 6c  S3.  It is enabl
27270 65 64 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20  ed using the.** 
27280 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
27290 53 33 20 6d 61 63 72 6f 2e 20 20 42 75 74 20 74  S3 macro.  But t
272a0 6f 20 61 76 6f 69 64 20 63 6f 6e 66 75 73 69 6f  o avoid confusio
272b0 6e 20 77 65 20 61 6c 73 6f 20 63 61 6c 6c 0a 2a  n we also call.*
272c0 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e 41  * the SQLITE_ENA
272d0 42 4c 45 5f 46 54 53 34 20 6d 61 63 72 6f 20 74  BLE_FTS4 macro t
272e0 6f 20 73 65 72 76 65 20 61 73 20 61 6e 20 61 6c  o serve as an al
272f0 69 61 73 20 66 6f 72 20 53 51 4c 49 54 45 5f 45  ias for SQLITE_E
27300 4e 41 42 4c 45 5f 46 54 53 33 2e 0a 2a 2f 0a 23  NABLE_FTS3..*/.#
27310 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
27320 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 29 20 26  E_ENABLE_FTS4) &
27330 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
27340 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29 0a 23  E_ENABLE_FTS3).#
27350 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45   define SQLITE_E
27360 4e 41 42 4c 45 5f 46 54 53 33 20 31 0a 23 65 6e  NABLE_FTS3 1.#en
27370 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63  dif../*.** The c
27380 74 79 70 65 2e 68 20 68 65 61 64 65 72 20 69 73  type.h header is
27390 20 6e 65 65 64 65 64 20 66 6f 72 20 6e 6f 6e 2d   needed for non-
273a0 41 53 43 49 49 20 73 79 73 74 65 6d 73 2e 20 20  ASCII systems.  
273b0 49 74 20 69 73 20 61 6c 73 6f 0a 2a 2a 20 6e 65  It is also.** ne
273c0 65 64 65 64 20 62 79 20 46 54 53 33 20 77 68 65  eded by FTS3 whe
273d0 6e 20 46 54 53 33 20 69 73 20 69 6e 63 6c 75 64  n FTS3 is includ
273e0 65 64 20 69 6e 20 74 68 65 20 61 6d 61 6c 67 61  ed in the amalga
273f0 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 21  mation..*/.#if !
27400 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 41  defined(SQLITE_A
27410 53 43 49 49 29 20 7c 7c 20 5c 0a 20 20 20 20 28  SCII) || \.    (
27420 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
27430 4e 41 42 4c 45 5f 46 54 53 33 29 20 26 26 20 64  NABLE_FTS3) && d
27440 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 41 4d  efined(SQLITE_AM
27450 41 4c 47 41 4d 41 54 49 4f 4e 29 29 0a 23 20 69  ALGAMATION)).# i
27460 6e 63 6c 75 64 65 20 3c 63 74 79 70 65 2e 68 3e  nclude <ctype.h>
27470 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
27480 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63  he following mac
27490 72 6f 73 20 6d 69 6d 69 63 20 74 68 65 20 73 74  ros mimic the st
274a0 61 6e 64 61 72 64 20 6c 69 62 72 61 72 79 20 66  andard library f
274b0 75 6e 63 74 69 6f 6e 73 20 74 6f 75 70 70 65 72  unctions toupper
274c0 28 29 2c 0a 2a 2a 20 69 73 73 70 61 63 65 28 29  (),.** isspace()
274d0 2c 20 69 73 61 6c 6e 75 6d 28 29 2c 20 69 73 64  , isalnum(), isd
274e0 69 67 69 74 28 29 20 61 6e 64 20 69 73 78 64 69  igit() and isxdi
274f0 67 69 74 28 29 2c 20 72 65 73 70 65 63 74 69 76  git(), respectiv
27500 65 6c 79 2e 20 54 68 65 0a 2a 2a 20 73 71 6c 69  ely. The.** sqli
27510 74 65 20 76 65 72 73 69 6f 6e 73 20 6f 6e 6c 79  te versions only
27520 20 77 6f 72 6b 20 66 6f 72 20 41 53 43 49 49 20   work for ASCII 
27530 63 68 61 72 61 63 74 65 72 73 2c 20 72 65 67 61  characters, rega
27540 72 64 6c 65 73 73 20 6f 66 20 6c 6f 63 61 6c 65  rdless of locale
27550 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
27560 54 45 5f 41 53 43 49 49 0a 23 20 64 65 66 69 6e  TE_ASCII.# defin
27570 65 20 73 71 6c 69 74 65 33 54 6f 75 70 70 65 72  e sqlite3Toupper
27580 28 78 29 20 20 28 28 78 29 26 7e 28 73 71 6c 69  (x)  ((x)&~(sqli
27590 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
275a0 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
275b0 30 78 32 30 29 29 0a 23 20 64 65 66 69 6e 65 20  0x20)).# define 
275c0 73 71 6c 69 74 65 33 49 73 73 70 61 63 65 28 78  sqlite3Isspace(x
275d0 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  )   (sqlite3Ctyp
275e0 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
275f0 68 61 72 29 28 78 29 5d 26 30 78 30 31 29 0a 23  har)(x)]&0x01).#
27600 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
27610 73 61 6c 6e 75 6d 28 78 29 20 20 20 28 73 71 6c  salnum(x)   (sql
27620 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
27630 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
27640 26 30 78 30 36 29 0a 23 20 64 65 66 69 6e 65 20  &0x06).# define 
27650 73 71 6c 69 74 65 33 49 73 61 6c 70 68 61 28 78  sqlite3Isalpha(x
27660 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  )   (sqlite3Ctyp
27670 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
27680 68 61 72 29 28 78 29 5d 26 30 78 30 32 29 0a 23  har)(x)]&0x02).#
27690 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
276a0 73 64 69 67 69 74 28 78 29 20 20 20 28 73 71 6c  sdigit(x)   (sql
276b0 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
276c0 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
276d0 26 30 78 30 34 29 0a 23 20 64 65 66 69 6e 65 20  &0x04).# define 
276e0 73 71 6c 69 74 65 33 49 73 78 64 69 67 69 74 28  sqlite3Isxdigit(
276f0 78 29 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  x)  (sqlite3Ctyp
27700 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
27710 68 61 72 29 28 78 29 5d 26 30 78 30 38 29 0a 23  har)(x)]&0x08).#
27720 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
27730 6f 6c 6f 77 65 72 28 78 29 20 20 20 28 73 71 6c  olower(x)   (sql
27740 69 74 65 33 55 70 70 65 72 54 6f 4c 6f 77 65 72  ite3UpperToLower
27750 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
27760 28 78 29 5d 29 0a 23 20 64 65 66 69 6e 65 20 73  (x)]).# define s
27770 71 6c 69 74 65 33 49 73 71 75 6f 74 65 28 78 29  qlite3Isquote(x)
27780 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65     (sqlite3Ctype
27790 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
277a0 61 72 29 28 78 29 5d 26 30 78 38 30 29 0a 23 65  ar)(x)]&0x80).#e
277b0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
277c0 69 74 65 33 54 6f 75 70 70 65 72 28 78 29 20 20  ite3Toupper(x)  
277d0 20 74 6f 75 70 70 65 72 28 28 75 6e 73 69 67 6e   toupper((unsign
277e0 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64  ed char)(x)).# d
277f0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73  efine sqlite3Iss
27800 70 61 63 65 28 78 29 20 20 20 69 73 73 70 61 63  pace(x)   isspac
27810 65 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  e((unsigned char
27820 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
27830 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29  qlite3Isalnum(x)
27840 20 20 20 69 73 61 6c 6e 75 6d 28 28 75 6e 73 69     isalnum((unsi
27850 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
27860 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
27870 73 61 6c 70 68 61 28 78 29 20 20 20 69 73 61 6c  salpha(x)   isal
27880 70 68 61 28 28 75 6e 73 69 67 6e 65 64 20 63 68  pha((unsigned ch
27890 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65  ar)(x)).# define
278a0 20 73 71 6c 69 74 65 33 49 73 64 69 67 69 74 28   sqlite3Isdigit(
278b0 78 29 20 20 20 69 73 64 69 67 69 74 28 28 75 6e  x)   isdigit((un
278c0 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29  signed char)(x))
278d0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
278e0 33 49 73 78 64 69 67 69 74 28 78 29 20 20 69 73  3Isxdigit(x)  is
278f0 78 64 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64  xdigit((unsigned
27900 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
27910 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77  ine sqlite3Tolow
27920 65 72 28 78 29 20 20 20 74 6f 6c 6f 77 65 72 28  er(x)   tolower(
27930 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
27940 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  x)).# define sql
27950 69 74 65 33 49 73 71 75 6f 74 65 28 78 29 20 20  ite3Isquote(x)  
27960 20 28 28 78 29 3d 3d 27 22 27 7c 7c 28 78 29 3d   ((x)=='"'||(x)=
27970 3d 27 5c 27 27 7c 7c 28 78 29 3d 3d 27 5b 27 7c  ='\''||(x)=='['|
27980 7c 28 78 29 3d 3d 27 60 27 29 0a 23 65 6e 64 69  |(x)=='`').#endi
27990 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 49  f.int sqlite3IsI
279a0 64 43 68 61 72 28 75 38 29 3b 0a 0a 2f 2a 0a 2a  dChar(u8);../*.*
279b0 2a 20 49 6e 74 65 72 6e 61 6c 20 66 75 6e 63 74  * Internal funct
279c0 69 6f 6e 20 70 72 6f 74 6f 74 79 70 65 73 0a 2a  ion prototypes.*
279d0 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 72  /.int sqlite3Str
279e0 49 43 6d 70 28 63 6f 6e 73 74 20 63 68 61 72 2a  ICmp(const char*
279f0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69  ,const char*);.i
27a00 6e 74 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  nt sqlite3Strlen
27a10 33 30 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  30(const char*);
27a20 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  .#define sqlite3
27a30 53 74 72 6c 65 6e 33 30 4e 4e 28 43 29 20 28 73  Strlen30NN(C) (s
27a40 74 72 6c 65 6e 28 43 29 26 30 78 33 66 66 66 66  trlen(C)&0x3ffff
27a50 66 66 66 29 0a 63 68 61 72 20 2a 73 71 6c 69 74  fff).char *sqlit
27a60 65 33 43 6f 6c 75 6d 6e 54 79 70 65 28 43 6f 6c  e3ColumnType(Col
27a70 75 6d 6e 2a 2c 63 68 61 72 2a 29 3b 0a 23 64 65  umn*,char*);.#de
27a80 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 72 4e  fine sqlite3StrN
27a90 49 43 6d 70 20 73 71 6c 69 74 65 33 5f 73 74 72  ICmp sqlite3_str
27aa0 6e 69 63 6d 70 0a 0a 69 6e 74 20 73 71 6c 69 74  nicmp..int sqlit
27ab0 65 33 4d 61 6c 6c 6f 63 49 6e 69 74 28 76 6f 69  e3MallocInit(voi
27ac0 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  d);.void sqlite3
27ad0 4d 61 6c 6c 6f 63 45 6e 64 28 76 6f 69 64 29 3b  MallocEnd(void);
27ae0 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61  .void *sqlite3Ma
27af0 6c 6c 6f 63 28 75 36 34 29 3b 0a 76 6f 69 64 20  lloc(u64);.void 
27b00 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 5a 65  *sqlite3MallocZe
27b10 72 6f 28 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73  ro(u64);.void *s
27b20 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65  qlite3DbMallocZe
27b30 72 6f 28 73 71 6c 69 74 65 33 2a 2c 20 75 36 34  ro(sqlite3*, u64
27b40 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
27b50 44 62 4d 61 6c 6c 6f 63 52 61 77 28 73 71 6c 69  DbMallocRaw(sqli
27b60 74 65 33 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64  te3*, u64);.void
27b70 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f   *sqlite3DbMallo
27b80 63 52 61 77 4e 4e 28 73 71 6c 69 74 65 33 2a 2c  cRawNN(sqlite3*,
27b90 20 75 36 34 29 3b 0a 63 68 61 72 20 2a 73 71 6c   u64);.char *sql
27ba0 69 74 65 33 44 62 53 74 72 44 75 70 28 73 71 6c  ite3DbStrDup(sql
27bb0 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
27bc0 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  *);.char *sqlite
27bd0 33 44 62 53 74 72 4e 44 75 70 28 73 71 6c 69 74  3DbStrNDup(sqlit
27be0 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
27bf0 20 75 36 34 29 3b 0a 63 68 61 72 20 2a 73 71 6c   u64);.char *sql
27c00 69 74 65 33 44 62 53 70 61 6e 44 75 70 28 73 71  ite3DbSpanDup(sq
27c10 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
27c20 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  r*,const char*);
27c30 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 52 65  .void *sqlite3Re
27c40 61 6c 6c 6f 63 28 76 6f 69 64 2a 2c 20 75 36 34  alloc(void*, u64
27c50 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
27c60 44 62 52 65 61 6c 6c 6f 63 4f 72 46 72 65 65 28  DbReallocOrFree(
27c70 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64 20  sqlite3 *, void 
27c80 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73  *, u64);.void *s
27c90 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 28  qlite3DbRealloc(
27ca0 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64 20  sqlite3 *, void 
27cb0 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 73 71  *, u64);.void sq
27cc0 6c 69 74 65 33 44 62 46 72 65 65 28 73 71 6c 69  lite3DbFree(sqli
27cd0 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f  te3*, void*);.vo
27ce0 69 64 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  id sqlite3DbFree
27cf0 4e 4e 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69  NN(sqlite3*, voi
27d00 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  d*);.int sqlite3
27d10 4d 61 6c 6c 6f 63 53 69 7a 65 28 76 6f 69 64 2a  MallocSize(void*
27d20 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 62  );.int sqlite3Db
27d30 4d 61 6c 6c 6f 63 53 69 7a 65 28 73 71 6c 69 74  MallocSize(sqlit
27d40 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69  e3*, void*);.voi
27d50 64 20 2a 73 71 6c 69 74 65 33 50 61 67 65 4d 61  d *sqlite3PageMa
27d60 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20  lloc(int);.void 
27d70 73 71 6c 69 74 65 33 50 61 67 65 46 72 65 65 28  sqlite3PageFree(
27d80 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  void*);.void sql
27d90 69 74 65 33 4d 65 6d 53 65 74 44 65 66 61 75 6c  ite3MemSetDefaul
27da0 74 28 76 6f 69 64 29 3b 0a 23 69 66 6e 64 65 66  t(void);.#ifndef
27db0 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42   SQLITE_UNTESTAB
27dc0 4c 45 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  LE.void sqlite3B
27dd0 65 6e 69 67 6e 4d 61 6c 6c 6f 63 48 6f 6f 6b 73  enignMallocHooks
27de0 28 76 6f 69 64 20 28 2a 29 28 76 6f 69 64 29 2c  (void (*)(void),
27df0 20 76 6f 69 64 20 28 2a 29 28 76 6f 69 64 29 29   void (*)(void))
27e00 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c  ;.#endif.int sql
27e10 69 74 65 33 48 65 61 70 4e 65 61 72 6c 79 46 75  ite3HeapNearlyFu
27e20 6c 6c 28 76 6f 69 64 29 3b 0a 0a 2f 2a 0a 2a 2a  ll(void);../*.**
27e30 20 4f 6e 20 73 79 73 74 65 6d 73 20 77 69 74 68   On systems with
27e40 20 61 6d 70 6c 65 20 73 74 61 63 6b 20 73 70 61   ample stack spa
27e50 63 65 20 61 6e 64 20 74 68 61 74 20 73 75 70 70  ce and that supp
27e60 6f 72 74 20 61 6c 6c 6f 63 61 28 29 2c 20 6d 61  ort alloca(), ma
27e70 6b 65 0a 2a 2a 20 75 73 65 20 6f 66 20 61 6c 6c  ke.** use of all
27e80 6f 63 61 28 29 20 74 6f 20 6f 62 74 61 69 6e 20  oca() to obtain 
27e90 73 70 61 63 65 20 66 6f 72 20 6c 61 72 67 65 20  space for large 
27ea0 61 75 74 6f 6d 61 74 69 63 20 6f 62 6a 65 63 74  automatic object
27eb0 73 2e 20 20 42 79 20 64 65 66 61 75 6c 74 2c 0a  s.  By default,.
27ec0 2a 2a 20 6f 62 74 61 69 6e 20 73 70 61 63 65 20  ** obtain space 
27ed0 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 2e 0a 2a  from malloc()..*
27ee0 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c 6f 63 61 28  *.** The alloca(
27ef0 29 20 72 6f 75 74 69 6e 65 20 6e 65 76 65 72 20  ) routine never 
27f00 72 65 74 75 72 6e 73 20 4e 55 4c 4c 2e 20 20 54  returns NULL.  T
27f10 68 69 73 20 77 69 6c 6c 20 63 61 75 73 65 20 63  his will cause c
27f20 6f 64 65 20 70 61 74 68 73 0a 2a 2a 20 74 68 61  ode paths.** tha
27f30 74 20 64 65 61 6c 20 77 69 74 68 20 73 71 6c 69  t deal with sqli
27f40 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 28 29 20  te3StackAlloc() 
27f50 66 61 69 6c 75 72 65 73 20 74 6f 20 62 65 20 75  failures to be u
27f60 6e 72 65 61 63 68 61 62 6c 65 2e 0a 2a 2f 0a 23  nreachable..*/.#
27f70 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45  ifdef SQLITE_USE
27f80 5f 41 4c 4c 4f 43 41 0a 23 20 64 65 66 69 6e 65  _ALLOCA.# define
27f90 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c   sqlite3StackAll
27fa0 6f 63 52 61 77 28 44 2c 4e 29 20 20 20 61 6c 6c  ocRaw(D,N)   all
27fb0 6f 63 61 28 4e 29 0a 23 20 64 65 66 69 6e 65 20  oca(N).# define 
27fc0 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f  sqlite3StackAllo
27fd0 63 5a 65 72 6f 28 44 2c 4e 29 20 20 6d 65 6d 73  cZero(D,N)  mems
27fe0 65 74 28 61 6c 6c 6f 63 61 28 4e 29 2c 20 30 2c  et(alloca(N), 0,
27ff0 20 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c   N).# define sql
28000 69 74 65 33 53 74 61 63 6b 46 72 65 65 28 44 2c  ite3StackFree(D,
28010 50 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  P).#else.# defin
28020 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c  e sqlite3StackAl
28030 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20 73 71  locRaw(D,N)   sq
28040 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77  lite3DbMallocRaw
28050 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20 73  (D,N).# define s
28060 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63  qlite3StackAlloc
28070 5a 65 72 6f 28 44 2c 4e 29 20 20 73 71 6c 69 74  Zero(D,N)  sqlit
28080 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 44  e3DbMallocZero(D
28090 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,N).# define sql
280a0 69 74 65 33 53 74 61 63 6b 46 72 65 65 28 44 2c  ite3StackFree(D,
280b0 50 29 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  P)       sqlite3
280c0 44 62 46 72 65 65 28 44 2c 50 29 0a 23 65 6e 64  DbFree(D,P).#end
280d0 69 66 0a 0a 2f 2a 20 44 6f 20 6e 6f 74 20 61 6c  if../* Do not al
280e0 6c 6f 77 20 62 6f 74 68 20 4d 45 4d 53 59 53 35  low both MEMSYS5
280f0 20 61 6e 64 20 4d 45 4d 53 59 53 33 20 74 6f 20   and MEMSYS3 to 
28100 62 65 20 64 65 66 69 6e 65 64 20 74 6f 67 65 74  be defined toget
28110 68 65 72 2e 20 20 49 66 20 74 68 65 79 0a 2a 2a  her.  If they.**
28120 20 61 72 65 2c 20 64 69 73 61 62 6c 65 20 4d 45   are, disable ME
28130 4d 53 59 53 33 0a 2a 2f 0a 23 69 66 64 65 66 20  MSYS3.*/.#ifdef 
28140 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45  SQLITE_ENABLE_ME
28150 4d 53 59 53 35 0a 63 6f 6e 73 74 20 73 71 6c 69  MSYS5.const sqli
28160 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20  te3_mem_methods 
28170 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65  *sqlite3MemGetMe
28180 6d 73 79 73 35 28 76 6f 69 64 29 3b 0a 23 75 6e  msys5(void);.#un
28190 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
281a0 45 5f 4d 45 4d 53 59 53 33 0a 23 65 6e 64 69 66  E_MEMSYS3.#endif
281b0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
281c0 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a 63 6f  NABLE_MEMSYS3.co
281d0 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f  nst sqlite3_mem_
281e0 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69 74 65 33  methods *sqlite3
281f0 4d 65 6d 47 65 74 4d 65 6d 73 79 73 33 28 76 6f  MemGetMemsys3(vo
28200 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 23 69  id);.#endif...#i
28210 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 55 54  fndef SQLITE_MUT
28220 45 58 5f 4f 4d 49 54 0a 20 20 73 71 6c 69 74 65  EX_OMIT.  sqlite
28230 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20  3_mutex_methods 
28240 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33 44 65  const *sqlite3De
28250 66 61 75 6c 74 4d 75 74 65 78 28 76 6f 69 64 29  faultMutex(void)
28260 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  ;.  sqlite3_mute
28270 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74 20  x_methods const 
28280 2a 73 71 6c 69 74 65 33 4e 6f 6f 70 4d 75 74 65  *sqlite3NoopMute
28290 78 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74  x(void);.  sqlit
282a0 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65  e3_mutex *sqlite
282b0 33 4d 75 74 65 78 41 6c 6c 6f 63 28 69 6e 74 29  3MutexAlloc(int)
282c0 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d  ;.  int sqlite3M
282d0 75 74 65 78 49 6e 69 74 28 76 6f 69 64 29 3b 0a  utexInit(void);.
282e0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 74    int sqlite3Mut
282f0 65 78 45 6e 64 28 76 6f 69 64 29 3b 0a 23 65 6e  exEnd(void);.#en
28300 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64  dif.#if !defined
28310 28 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d  (SQLITE_MUTEX_OM
28320 49 54 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  IT) && !defined(
28330 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4e 4f 4f  SQLITE_MUTEX_NOO
28340 50 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  P).  void sqlite
28350 33 4d 65 6d 6f 72 79 42 61 72 72 69 65 72 28 76  3MemoryBarrier(v
28360 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  oid);.#else.# de
28370 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 6f  fine sqlite3Memo
28380 72 79 42 61 72 72 69 65 72 28 29 0a 23 65 6e 64  ryBarrier().#end
28390 69 66 0a 0a 73 71 6c 69 74 65 33 5f 69 6e 74 36  if..sqlite3_int6
283a0 34 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 56  4 sqlite3StatusV
283b0 61 6c 75 65 28 69 6e 74 29 3b 0a 76 6f 69 64 20  alue(int);.void 
283c0 73 71 6c 69 74 65 33 53 74 61 74 75 73 55 70 28  sqlite3StatusUp(
283d0 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
283e0 73 71 6c 69 74 65 33 53 74 61 74 75 73 44 6f 77  sqlite3StatusDow
283f0 6e 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  n(int, int);.voi
28400 64 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 48  d sqlite3StatusH
28410 69 67 68 77 61 74 65 72 28 69 6e 74 2c 20 69 6e  ighwater(int, in
28420 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4c  t);.int sqlite3L
28430 6f 6f 6b 61 73 69 64 65 55 73 65 64 28 73 71 6c  ookasideUsed(sql
28440 69 74 65 33 2a 2c 69 6e 74 2a 29 3b 0a 0a 2f 2a  ite3*,int*);../*
28450 20 41 63 63 65 73 73 20 74 6f 20 6d 75 74 65 78   Access to mutex
28460 65 73 20 75 73 65 64 20 62 79 20 73 71 6c 69 74  es used by sqlit
28470 65 33 5f 73 74 61 74 75 73 28 29 20 2a 2f 0a 73  e3_status() */.s
28480 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71  qlite3_mutex *sq
28490 6c 69 74 65 33 50 63 61 63 68 65 31 4d 75 74 65  lite3Pcache1Mute
284a0 78 28 76 6f 69 64 29 3b 0a 73 71 6c 69 74 65 33  x(void);.sqlite3
284b0 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65 33 4d  _mutex *sqlite3M
284c0 61 6c 6c 6f 63 4d 75 74 65 78 28 76 6f 69 64 29  allocMutex(void)
284d0 3b 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  ;..#if defined(S
284e0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 55 4c  QLITE_ENABLE_MUL
284f0 54 49 54 48 52 45 41 44 45 44 5f 43 48 45 43 4b  TITHREADED_CHECK
28500 53 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  S) && !defined(S
28510 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d 49 54  QLITE_MUTEX_OMIT
28520 29 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 75  ).void sqlite3Mu
28530 74 65 78 57 61 72 6e 4f 6e 43 6f 6e 74 65 6e 74  texWarnOnContent
28540 69 6f 6e 28 73 71 6c 69 74 65 33 5f 6d 75 74 65  ion(sqlite3_mute
28550 78 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  x*);.#else.# def
28560 69 6e 65 20 73 71 6c 69 74 65 33 4d 75 74 65 78  ine sqlite3Mutex
28570 57 61 72 6e 4f 6e 43 6f 6e 74 65 6e 74 69 6f 6e  WarnOnContention
28580 28 78 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e  (x).#endif..#ifn
28590 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
285a0 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20  FLOATING_POINT. 
285b0 20 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4e 61   int sqlite3IsNa
285c0 4e 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6c 73 65  N(double);.#else
285d0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
285e0 33 49 73 4e 61 4e 28 58 29 20 20 30 0a 23 65 6e  3IsNaN(X)  0.#en
285f0 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  dif../*.** An in
28600 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
28610 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
28620 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72 6d 61 74  e holds informat
28630 69 6f 6e 20 61 62 6f 75 74 20 53 51 4c 0a 2a 2a  ion about SQL.**
28640 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 67 75 6d   functions argum
28650 65 6e 74 73 20 74 68 61 74 20 61 72 65 20 74 68  ents that are th
28660 65 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 20  e parameters to 
28670 74 68 65 20 70 72 69 6e 74 66 28 29 20 66 75 6e  the printf() fun
28680 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  ction..*/.struct
28690 20 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73   PrintfArguments
286a0 20 7b 0a 20 20 69 6e 74 20 6e 41 72 67 3b 20 20   {.  int nArg;  
286b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
286c0 20 54 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66   Total number of
286d0 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20   arguments */.  
286e0 69 6e 74 20 6e 55 73 65 64 3b 20 20 20 20 20 20  int nUsed;      
286f0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
28700 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
28710 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20  used so far */. 
28720 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
28730 2a 61 70 41 72 67 3b 20 20 20 2f 2a 20 54 68 65  *apArg;   /* The
28740 20 61 72 67 75 6d 65 6e 74 20 76 61 6c 75 65 73   argument values
28750 20 2a 2f 0a 7d 3b 0a 0a 63 68 61 72 20 2a 73 71   */.};..char *sq
28760 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 73 71 6c  lite3MPrintf(sql
28770 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
28780 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73  *, ...);.char *s
28790 71 6c 69 74 65 33 56 4d 50 72 69 6e 74 66 28 73  qlite3VMPrintf(s
287a0 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
287b0 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 23  ar*, va_list);.#
287c0 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
287d0 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69  E_DEBUG) || defi
287e0 6e 65 64 28 53 51 4c 49 54 45 5f 48 41 56 45 5f  ned(SQLITE_HAVE_
287f0 4f 53 5f 54 52 41 43 45 29 0a 20 20 76 6f 69 64  OS_TRACE).  void
28800 20 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69   sqlite3DebugPri
28810 6e 74 66 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ntf(const char*,
28820 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69 66 0a 23 69   ...);.#endif.#i
28830 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
28840 5f 54 45 53 54 29 0a 20 20 76 6f 69 64 20 2a 73  _TEST).  void *s
28850 71 6c 69 74 65 33 54 65 73 74 54 65 78 74 54 6f  qlite3TestTextTo
28860 50 74 72 28 63 6f 6e 73 74 20 63 68 61 72 2a 29  Ptr(const char*)
28870 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 65  ;.#endif..#if de
28880 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
28890 55 47 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  UG).  void sqlit
288a0 65 33 54 72 65 65 56 69 65 77 45 78 70 72 28 54  e3TreeViewExpr(T
288b0 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20  reeView*, const 
288c0 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20 20 76 6f  Expr*, u8);.  vo
288d0 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69  id sqlite3TreeVi
288e0 65 77 42 61 72 65 45 78 70 72 4c 69 73 74 28 54  ewBareExprList(T
288f0 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20  reeView*, const 
28900 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74  ExprList*, const
28910 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20   char*);.  void 
28920 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 45  sqlite3TreeViewE
28930 78 70 72 4c 69 73 74 28 54 72 65 65 56 69 65 77  xprList(TreeView
28940 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72 4c 69 73  *, const ExprLis
28950 74 2a 2c 20 75 38 2c 20 63 6f 6e 73 74 20 63 68  t*, u8, const ch
28960 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  ar*);.  void sql
28970 69 74 65 33 54 72 65 65 56 69 65 77 53 72 63 4c  ite3TreeViewSrcL
28980 69 73 74 28 54 72 65 65 56 69 65 77 2a 2c 20 63  ist(TreeView*, c
28990 6f 6e 73 74 20 53 72 63 4c 69 73 74 2a 29 3b 0a  onst SrcList*);.
289a0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72    void sqlite3Tr
289b0 65 65 56 69 65 77 53 65 6c 65 63 74 28 54 72 65  eeViewSelect(Tre
289c0 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 53 65  eView*, const Se
289d0 6c 65 63 74 2a 2c 20 75 38 29 3b 0a 20 20 76 6f  lect*, u8);.  vo
289e0 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69  id sqlite3TreeVi
289f0 65 77 57 69 74 68 28 54 72 65 65 56 69 65 77 2a  ewWith(TreeView*
28a00 2c 20 63 6f 6e 73 74 20 57 69 74 68 2a 2c 20 75  , const With*, u
28a10 38 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  8);.#ifndef SQLI
28a20 54 45 5f 4f 4d 49 54 5f 57 49 4e 44 4f 57 46 55  TE_OMIT_WINDOWFU
28a30 4e 43 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  NC.  void sqlite
28a40 33 54 72 65 65 56 69 65 77 57 69 6e 64 6f 77 28  3TreeViewWindow(
28a50 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74  TreeView*, const
28a60 20 57 69 6e 64 6f 77 2a 2c 20 75 38 29 3b 0a 20   Window*, u8);. 
28a70 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65   void sqlite3Tre
28a80 65 56 69 65 77 57 69 6e 46 75 6e 63 28 54 72 65  eViewWinFunc(Tre
28a90 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 57 69  eView*, const Wi
28aa0 6e 64 6f 77 2a 2c 20 75 38 29 3b 0a 23 65 6e 64  ndow*, u8);.#end
28ab0 69 66 0a 23 65 6e 64 69 66 0a 0a 0a 76 6f 69 64  if.#endif...void
28ac0 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
28ad0 67 28 63 68 61 72 20 2a 2a 2c 20 73 71 6c 69 74  g(char **, sqlit
28ae0 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  e3*, const char*
28af0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
28b00 72 72 6f 72 4d 73 67 28 50 61 72 73 65 2a 2c 20  rrorMsg(Parse*, 
28b10 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e  const char*, ...
28b20 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
28b30 65 71 75 6f 74 65 28 63 68 61 72 2a 29 3b 0a 76  equote(char*);.v
28b40 6f 69 64 20 73 71 6c 69 74 65 33 54 6f 6b 65 6e  oid sqlite3Token
28b50 49 6e 69 74 28 54 6f 6b 65 6e 2a 2c 63 68 61 72  Init(Token*,char
28b60 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4b  *);.int sqlite3K
28b70 65 79 77 6f 72 64 43 6f 64 65 28 63 6f 6e 73 74  eywordCode(const
28b80 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c   unsigned char*,
28b90 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
28ba0 65 33 52 75 6e 50 61 72 73 65 72 28 50 61 72 73  e3RunParser(Pars
28bb0 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e*, const char*,
28bc0 20 63 68 61 72 20 2a 2a 29 3b 0a 76 6f 69 64 20   char **);.void 
28bd0 73 71 6c 69 74 65 33 46 69 6e 69 73 68 43 6f 64  sqlite3FinishCod
28be0 69 6e 67 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74  ing(Parse*);.int
28bf0 20 73 71 6c 69 74 65 33 47 65 74 54 65 6d 70 52   sqlite3GetTempR
28c00 65 67 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64  eg(Parse*);.void
28c10 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54   sqlite3ReleaseT
28c20 65 6d 70 52 65 67 28 50 61 72 73 65 2a 2c 69 6e  empReg(Parse*,in
28c30 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47  t);.int sqlite3G
28c40 65 74 54 65 6d 70 52 61 6e 67 65 28 50 61 72 73  etTempRange(Pars
28c50 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  e*,int);.void sq
28c60 6c 69 74 65 33 52 65 6c 65 61 73 65 54 65 6d 70  lite3ReleaseTemp
28c70 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74  Range(Parse*,int
28c80 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
28c90 74 65 33 43 6c 65 61 72 54 65 6d 70 52 65 67 43  te3ClearTempRegC
28ca0 61 63 68 65 28 50 61 72 73 65 2a 29 3b 0a 23 69  ache(Parse*);.#i
28cb0 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
28cc0 47 0a 69 6e 74 20 73 71 6c 69 74 65 33 4e 6f 54  G.int sqlite3NoT
28cd0 65 6d 70 73 49 6e 52 61 6e 67 65 28 50 61 72 73  empsInRange(Pars
28ce0 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 23 65 6e  e*,int,int);.#en
28cf0 64 69 66 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  dif.Expr *sqlite
28d00 33 45 78 70 72 41 6c 6c 6f 63 28 73 71 6c 69 74  3ExprAlloc(sqlit
28d10 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 54 6f  e3*,int,const To
28d20 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 20  ken*,int);.Expr 
28d30 2a 73 71 6c 69 74 65 33 45 78 70 72 28 73 71 6c  *sqlite3Expr(sql
28d40 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  ite3*,int,const 
28d50 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
28d60 69 74 65 33 45 78 70 72 41 74 74 61 63 68 53 75  ite3ExprAttachSu
28d70 62 74 72 65 65 73 28 73 71 6c 69 74 65 33 2a 2c  btrees(sqlite3*,
28d80 45 78 70 72 2a 2c 45 78 70 72 2a 2c 45 78 70 72  Expr*,Expr*,Expr
28d90 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  *);.Expr *sqlite
28da0 33 50 45 78 70 72 28 50 61 72 73 65 2a 2c 20 69  3PExpr(Parse*, i
28db0 6e 74 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a  nt, Expr*, Expr*
28dc0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
28dd0 45 78 70 72 41 64 64 53 65 6c 65 63 74 28 50 61  ExprAddSelect(Pa
28de0 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 53 65 6c  rse*, Expr*, Sel
28df0 65 63 74 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c  ect*);.Expr *sql
28e00 69 74 65 33 45 78 70 72 41 6e 64 28 73 71 6c 69  ite3ExprAnd(sqli
28e10 74 65 33 2a 2c 45 78 70 72 2a 2c 20 45 78 70 72  te3*,Expr*, Expr
28e20 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  *);.Expr *sqlite
28e30 33 45 78 70 72 46 75 6e 63 74 69 6f 6e 28 50 61  3ExprFunction(Pa
28e40 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20  rse*,ExprList*, 
28e50 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 76 6f  Token*, int);.vo
28e60 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 73  id sqlite3ExprAs
28e70 73 69 67 6e 56 61 72 4e 75 6d 62 65 72 28 50 61  signVarNumber(Pa
28e80 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 75 33 32  rse*, Expr*, u32
28e90 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
28ea0 78 70 72 44 65 6c 65 74 65 28 73 71 6c 69 74 65  xprDelete(sqlite
28eb0 33 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72  3*, Expr*);.Expr
28ec0 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70  List *sqlite3Exp
28ed0 72 4c 69 73 74 41 70 70 65 6e 64 28 50 61 72 73  rListAppend(Pars
28ee0 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70  e*,ExprList*,Exp
28ef0 72 2a 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73  r*);.ExprList *s
28f00 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 41 70  qlite3ExprListAp
28f10 70 65 6e 64 56 65 63 74 6f 72 28 50 61 72 73 65  pendVector(Parse
28f20 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 49 64 4c 69  *,ExprList*,IdLi
28f30 73 74 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64  st*,Expr*);.void
28f40 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
28f50 53 65 74 53 6f 72 74 4f 72 64 65 72 28 45 78 70  SetSortOrder(Exp
28f60 72 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 76 6f 69  rList*,int);.voi
28f70 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  d sqlite3ExprLis
28f80 74 53 65 74 4e 61 6d 65 28 50 61 72 73 65 2a 2c  tSetName(Parse*,
28f90 45 78 70 72 4c 69 73 74 2a 2c 54 6f 6b 65 6e 2a  ExprList*,Token*
28fa0 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
28fb0 74 65 33 45 78 70 72 4c 69 73 74 53 65 74 53 70  te3ExprListSetSp
28fc0 61 6e 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69  an(Parse*,ExprLi
28fd0 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  st*,const char*,
28fe0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
28ff0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  id sqlite3ExprLi
29000 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  stDelete(sqlite3
29010 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 75  *, ExprList*);.u
29020 33 32 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  32 sqlite3ExprLi
29030 73 74 46 6c 61 67 73 28 63 6f 6e 73 74 20 45 78  stFlags(const Ex
29040 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  prList*);.int sq
29050 6c 69 74 65 33 49 6e 69 74 28 73 71 6c 69 74 65  lite3Init(sqlite
29060 33 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 69 6e 74  3*, char**);.int
29070 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c   sqlite3InitCall
29080 62 61 63 6b 28 76 6f 69 64 2a 2c 20 69 6e 74 2c  back(void*, int,
29090 20 63 68 61 72 2a 2a 2c 20 63 68 61 72 2a 2a 29   char**, char**)
290a0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69  ;.int sqlite3Ini
290b0 74 4f 6e 65 28 73 71 6c 69 74 65 33 2a 2c 20 69  tOne(sqlite3*, i
290c0 6e 74 2c 20 63 68 61 72 2a 2a 2c 20 75 33 32 29  nt, char**, u32)
290d0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72  ;.void sqlite3Pr
290e0 61 67 6d 61 28 50 61 72 73 65 2a 2c 54 6f 6b 65  agma(Parse*,Toke
290f0 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  n*,Token*,Token*
29100 2c 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53  ,int);.#ifndef S
29110 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
29120 41 4c 54 41 42 4c 45 0a 4d 6f 64 75 6c 65 20 2a  ALTABLE.Module *
29130 73 71 6c 69 74 65 33 50 72 61 67 6d 61 56 74 61  sqlite3PragmaVta
29140 62 52 65 67 69 73 74 65 72 28 73 71 6c 69 74 65  bRegister(sqlite
29150 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  3*,const char *z
29160 4e 61 6d 65 29 3b 0a 23 65 6e 64 69 66 0a 76 6f  Name);.#endif.vo
29170 69 64 20 73 71 6c 69 74 65 33 52 65 73 65 74 41  id sqlite3ResetA
29180 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65  llSchemasOfConne
29190 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 29 3b  ction(sqlite3*);
291a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73  .void sqlite3Res
291b0 65 74 4f 6e 65 53 63 68 65 6d 61 28 73 71 6c 69  etOneSchema(sqli
291c0 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  te3*,int);.void 
291d0 73 71 6c 69 74 65 33 43 6f 6c 6c 61 70 73 65 44  sqlite3CollapseD
291e0 61 74 61 62 61 73 65 41 72 72 61 79 28 73 71 6c  atabaseArray(sql
291f0 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
29200 69 74 65 33 43 6f 6d 6d 69 74 49 6e 74 65 72 6e  ite3CommitIntern
29210 61 6c 43 68 61 6e 67 65 73 28 73 71 6c 69 74 65  alChanges(sqlite
29220 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  3*);.void sqlite
29230 33 44 65 6c 65 74 65 43 6f 6c 75 6d 6e 4e 61 6d  3DeleteColumnNam
29240 65 73 28 73 71 6c 69 74 65 33 2a 2c 54 61 62 6c  es(sqlite3*,Tabl
29250 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  e*);.int sqlite3
29260 43 6f 6c 75 6d 6e 73 46 72 6f 6d 45 78 70 72 4c  ColumnsFromExprL
29270 69 73 74 28 50 61 72 73 65 2a 2c 45 78 70 72 4c  ist(Parse*,ExprL
29280 69 73 74 2a 2c 69 31 36 2a 2c 43 6f 6c 75 6d 6e  ist*,i16*,Column
29290 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  **);.void sqlite
292a0 33 53 65 6c 65 63 74 41 64 64 43 6f 6c 75 6d 6e  3SelectAddColumn
292b0 54 79 70 65 41 6e 64 43 6f 6c 6c 61 74 69 6f 6e  TypeAndCollation
292c0 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 53  (Parse*,Table*,S
292d0 65 6c 65 63 74 2a 29 3b 0a 54 61 62 6c 65 20 2a  elect*);.Table *
292e0 73 71 6c 69 74 65 33 52 65 73 75 6c 74 53 65 74  sqlite3ResultSet
292f0 4f 66 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c  OfSelect(Parse*,
29300 53 65 6c 65 63 74 2a 29 3b 0a 76 6f 69 64 20 73  Select*);.void s
29310 71 6c 69 74 65 33 4f 70 65 6e 4d 61 73 74 65 72  qlite3OpenMaster
29320 54 61 62 6c 65 28 50 61 72 73 65 20 2a 2c 20 69  Table(Parse *, i
29330 6e 74 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69  nt);.Index *sqli
29340 74 65 33 50 72 69 6d 61 72 79 4b 65 79 49 6e 64  te3PrimaryKeyInd
29350 65 78 28 54 61 62 6c 65 2a 29 3b 0a 69 31 36 20  ex(Table*);.i16 
29360 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 4f 66 49  sqlite3ColumnOfI
29370 6e 64 65 78 28 49 6e 64 65 78 2a 2c 20 69 31 36  ndex(Index*, i16
29380 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
29390 74 61 72 74 54 61 62 6c 65 28 50 61 72 73 65 2a  tartTable(Parse*
293a0 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69  ,Token*,Token*,i
293b0 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b  nt,int,int,int);
293c0 0a 23 69 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  .#if SQLITE_ENAB
293d0 4c 45 5f 48 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e  LE_HIDDEN_COLUMN
293e0 53 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  S.  void sqlite3
293f0 43 6f 6c 75 6d 6e 50 72 6f 70 65 72 74 69 65 73  ColumnProperties
29400 46 72 6f 6d 4e 61 6d 65 28 54 61 62 6c 65 2a 2c  FromName(Table*,
29410 20 43 6f 6c 75 6d 6e 2a 29 3b 0a 23 65 6c 73 65   Column*);.#else
29420 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
29430 33 43 6f 6c 75 6d 6e 50 72 6f 70 65 72 74 69 65  3ColumnPropertie
29440 73 46 72 6f 6d 4e 61 6d 65 28 54 2c 43 29 20 2f  sFromName(T,C) /
29450 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 65 6e 64 69  * no-op */.#endi
29460 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  f.void sqlite3Ad
29470 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 54  dColumn(Parse*,T
29480 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76  oken*,Token*);.v
29490 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 4e 6f  oid sqlite3AddNo
294a0 74 4e 75 6c 6c 28 50 61 72 73 65 2a 2c 20 69 6e  tNull(Parse*, in
294b0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
294c0 41 64 64 50 72 69 6d 61 72 79 4b 65 79 28 50 61  AddPrimaryKey(Pa
294d0 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  rse*, ExprList*,
294e0 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
294f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64  .void sqlite3Add
29500 43 68 65 63 6b 43 6f 6e 73 74 72 61 69 6e 74 28  CheckConstraint(
29510 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a  Parse*, Expr*);.
29520 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 44  void sqlite3AddD
29530 65 66 61 75 6c 74 56 61 6c 75 65 28 50 61 72 73  efaultValue(Pars
29540 65 2a 2c 45 78 70 72 2a 2c 63 6f 6e 73 74 20 63  e*,Expr*,const c
29550 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
29560 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
29570 64 64 43 6f 6c 6c 61 74 65 54 79 70 65 28 50 61  ddCollateType(Pa
29580 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76  rse*, Token*);.v
29590 6f 69 64 20 73 71 6c 69 74 65 33 45 6e 64 54 61  oid sqlite3EndTa
295a0 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  ble(Parse*,Token
295b0 2a 2c 54 6f 6b 65 6e 2a 2c 75 38 2c 53 65 6c 65  *,Token*,u8,Sele
295c0 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ct*);.int sqlite
295d0 33 50 61 72 73 65 55 72 69 28 63 6f 6e 73 74 20  3ParseUri(const 
295e0 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
295f0 2a 2c 75 6e 73 69 67 6e 65 64 20 69 6e 74 2a 2c  *,unsigned int*,
29600 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29610 20 20 20 20 20 73 71 6c 69 74 65 33 5f 76 66 73       sqlite3_vfs
29620 2a 2a 2c 63 68 61 72 2a 2a 2c 63 68 61 72 20 2a  **,char**,char *
29630 2a 29 3b 0a 42 74 72 65 65 20 2a 73 71 6c 69 74  *);.Btree *sqlit
29640 65 33 44 62 4e 61 6d 65 54 6f 42 74 72 65 65 28  e3DbNameToBtree(
29650 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
29660 68 61 72 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53  har*);..#ifdef S
29670 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45  QLITE_UNTESTABLE
29680 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
29690 33 46 61 75 6c 74 53 69 6d 28 58 29 20 53 51 4c  3FaultSim(X) SQL
296a0 49 54 45 5f 4f 4b 0a 23 65 6c 73 65 0a 20 20 69  ITE_OK.#else.  i
296b0 6e 74 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53  nt sqlite3FaultS
296c0 69 6d 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a  im(int);.#endif.
296d0 0a 42 69 74 76 65 63 20 2a 73 71 6c 69 74 65 33  .Bitvec *sqlite3
296e0 42 69 74 76 65 63 43 72 65 61 74 65 28 75 33 32  BitvecCreate(u32
296f0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69  );.int sqlite3Bi
29700 74 76 65 63 54 65 73 74 28 42 69 74 76 65 63 2a  tvecTest(Bitvec*
29710 2c 20 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69  , u32);.int sqli
29720 74 65 33 42 69 74 76 65 63 54 65 73 74 4e 6f 74  te3BitvecTestNot
29730 4e 75 6c 6c 28 42 69 74 76 65 63 2a 2c 20 75 33  Null(Bitvec*, u3
29740 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42  2);.int sqlite3B
29750 69 74 76 65 63 53 65 74 28 42 69 74 76 65 63 2a  itvecSet(Bitvec*
29760 2c 20 75 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c  , u32);.void sql
29770 69 74 65 33 42 69 74 76 65 63 43 6c 65 61 72 28  ite3BitvecClear(
29780 42 69 74 76 65 63 2a 2c 20 75 33 32 2c 20 76 6f  Bitvec*, u32, vo
29790 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  id*);.void sqlit
297a0 65 33 42 69 74 76 65 63 44 65 73 74 72 6f 79 28  e3BitvecDestroy(
297b0 42 69 74 76 65 63 2a 29 3b 0a 75 33 32 20 73 71  Bitvec*);.u32 sq
297c0 6c 69 74 65 33 42 69 74 76 65 63 53 69 7a 65 28  lite3BitvecSize(
297d0 42 69 74 76 65 63 2a 29 3b 0a 23 69 66 6e 64 65  Bitvec*);.#ifnde
297e0 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41  f SQLITE_UNTESTA
297f0 42 4c 45 0a 69 6e 74 20 73 71 6c 69 74 65 33 42  BLE.int sqlite3B
29800 69 74 76 65 63 42 75 69 6c 74 69 6e 54 65 73 74  itvecBuiltinTest
29810 28 69 6e 74 2c 69 6e 74 2a 29 3b 0a 23 65 6e 64  (int,int*);.#end
29820 69 66 0a 0a 52 6f 77 53 65 74 20 2a 73 71 6c 69  if..RowSet *sqli
29830 74 65 33 52 6f 77 53 65 74 49 6e 69 74 28 73 71  te3RowSetInit(sq
29840 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71  lite3*);.void sq
29850 6c 69 74 65 33 52 6f 77 53 65 74 44 65 6c 65 74  lite3RowSetDelet
29860 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73  e(void*);.void s
29870 71 6c 69 74 65 33 52 6f 77 53 65 74 43 6c 65 61  qlite3RowSetClea
29880 72 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73  r(void*);.void s
29890 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65  qlite3RowSetInse
298a0 72 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 29  rt(RowSet*, i64)
298b0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f 77  ;.int sqlite3Row
298c0 53 65 74 54 65 73 74 28 52 6f 77 53 65 74 2a 2c  SetTest(RowSet*,
298d0 20 69 6e 74 20 69 42 61 74 63 68 2c 20 69 36 34   int iBatch, i64
298e0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f  );.int sqlite3Ro
298f0 77 53 65 74 4e 65 78 74 28 52 6f 77 53 65 74 2a  wSetNext(RowSet*
29900 2c 20 69 36 34 2a 29 3b 0a 0a 76 6f 69 64 20 73  , i64*);..void s
29910 71 6c 69 74 65 33 43 72 65 61 74 65 56 69 65 77  qlite3CreateView
29920 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54  (Parse*,Token*,T
29930 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70  oken*,Token*,Exp
29940 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a 2c 69  rList*,Select*,i
29950 6e 74 2c 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64  nt,int);..#if !d
29960 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
29970 49 54 5f 56 49 45 57 29 20 7c 7c 20 21 64 65 66  IT_VIEW) || !def
29980 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
29990 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 20  _VIRTUALTABLE). 
299a0 20 69 6e 74 20 73 71 6c 69 74 65 33 56 69 65 77   int sqlite3View
299b0 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 50  GetColumnNames(P
299c0 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23  arse*,Table*);.#
299d0 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
299e0 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75  lite3ViewGetColu
299f0 6d 6e 4e 61 6d 65 73 28 41 2c 42 29 20 30 0a 23  mnNames(A,B) 0.#
29a00 65 6e 64 69 66 0a 0a 23 69 66 20 53 51 4c 49 54  endif..#if SQLIT
29a10 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3e 33  E_MAX_ATTACHED>3
29a20 30 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 44  0.  int sqlite3D
29a30 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 79 44 62  bMaskAllZero(yDb
29a40 4d 61 73 6b 29 3b 0a 23 65 6e 64 69 66 0a 76 6f  Mask);.#endif.vo
29a50 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 61  id sqlite3DropTa
29a60 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ble(Parse*, SrcL
29a70 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  ist*, int, int);
29a80 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64  .void sqlite3Cod
29a90 65 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65  eDropTable(Parse
29aa0 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
29ab0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
29ac0 65 33 44 65 6c 65 74 65 54 61 62 6c 65 28 73 71  e3DeleteTable(sq
29ad0 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b  lite3*, Table*);
29ae0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 72 65  .void sqlite3Fre
29af0 65 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c  eIndex(sqlite3*,
29b00 20 49 6e 64 65 78 2a 29 3b 0a 23 69 66 6e 64 65   Index*);.#ifnde
29b10 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
29b20 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 76 6f  TOINCREMENT.  vo
29b30 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e  id sqlite3Autoin
29b40 63 72 65 6d 65 6e 74 42 65 67 69 6e 28 50 61 72  crementBegin(Par
29b50 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 20 20 76  se *pParse);.  v
29b60 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f 69  oid sqlite3Autoi
29b70 6e 63 72 65 6d 65 6e 74 45 6e 64 28 50 61 72 73  ncrementEnd(Pars
29b80 65 20 2a 70 50 61 72 73 65 29 3b 0a 23 65 6c 73  e *pParse);.#els
29b90 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
29ba0 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42  e3AutoincrementB
29bb0 65 67 69 6e 28 58 29 0a 23 20 64 65 66 69 6e 65  egin(X).# define
29bc0 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72   sqlite3Autoincr
29bd0 65 6d 65 6e 74 45 6e 64 28 58 29 0a 23 65 6e 64  ementEnd(X).#end
29be0 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49  if.void sqlite3I
29bf0 6e 73 65 72 74 28 50 61 72 73 65 2a 2c 20 53 72  nsert(Parse*, Sr
29c00 63 4c 69 73 74 2a 2c 20 53 65 6c 65 63 74 2a 2c  cList*, Select*,
29c10 20 49 64 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 55   IdList*, int, U
29c20 70 73 65 72 74 2a 29 3b 0a 76 6f 69 64 20 2a 73  psert*);.void *s
29c30 71 6c 69 74 65 33 41 72 72 61 79 41 6c 6c 6f 63  qlite3ArrayAlloc
29c40 61 74 65 28 73 71 6c 69 74 65 33 2a 2c 76 6f 69  ate(sqlite3*,voi
29c50 64 2a 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a  d*,int,int*,int*
29c60 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69 74  );.IdList *sqlit
29c70 65 33 49 64 4c 69 73 74 41 70 70 65 6e 64 28 50  e3IdListAppend(P
29c80 61 72 73 65 2a 2c 20 49 64 4c 69 73 74 2a 2c 20  arse*, IdList*, 
29c90 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
29ca0 69 74 65 33 49 64 4c 69 73 74 49 6e 64 65 78 28  ite3IdListIndex(
29cb0 49 64 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68  IdList*,const ch
29cc0 61 72 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73  ar*);.SrcList *s
29cd0 71 6c 69 74 65 33 53 72 63 4c 69 73 74 45 6e 6c  qlite3SrcListEnl
29ce0 61 72 67 65 28 73 71 6c 69 74 65 33 2a 2c 20 53  arge(sqlite3*, S
29cf0 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e  rcList*, int, in
29d00 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c  t);.SrcList *sql
29d10 69 74 65 33 53 72 63 4c 69 73 74 41 70 70 65 6e  ite3SrcListAppen
29d20 64 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c  d(sqlite3*, SrcL
29d30 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  ist*, Token*, To
29d40 6b 65 6e 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a  ken*);.SrcList *
29d50 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41 70  sqlite3SrcListAp
29d60 70 65 6e 64 46 72 6f 6d 54 65 72 6d 28 50 61 72  pendFromTerm(Par
29d70 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54  se*, SrcList*, T
29d80 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a 20  oken*, Token*,. 
29d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29db0 20 20 20 20 20 54 6f 6b 65 6e 2a 2c 20 53 65 6c       Token*, Sel
29dc0 65 63 74 2a 2c 20 45 78 70 72 2a 2c 20 49 64 4c  ect*, Expr*, IdL
29dd0 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ist*);.void sqli
29de0 74 65 33 53 72 63 4c 69 73 74 49 6e 64 65 78 65  te3SrcListIndexe
29df0 64 42 79 28 50 61 72 73 65 20 2a 2c 20 53 72 63  dBy(Parse *, Src
29e00 4c 69 73 74 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29  List *, Token *)
29e10 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72  ;.void sqlite3Sr
29e20 63 4c 69 73 74 46 75 6e 63 41 72 67 73 28 50 61  cListFuncArgs(Pa
29e30 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
29e40 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20  ExprList*);.int 
29e50 73 71 6c 69 74 65 33 49 6e 64 65 78 65 64 42 79  sqlite3IndexedBy
29e60 4c 6f 6f 6b 75 70 28 50 61 72 73 65 20 2a 2c 20  Lookup(Parse *, 
29e70 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69  struct SrcList_i
29e80 74 65 6d 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  tem *);.void sql
29e90 69 74 65 33 53 72 63 4c 69 73 74 53 68 69 66 74  ite3SrcListShift
29ea0 4a 6f 69 6e 54 79 70 65 28 53 72 63 4c 69 73 74  JoinType(SrcList
29eb0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
29ec0 53 72 63 4c 69 73 74 41 73 73 69 67 6e 43 75 72  SrcListAssignCur
29ed0 73 6f 72 73 28 50 61 72 73 65 2a 2c 20 53 72 63  sors(Parse*, Src
29ee0 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  List*);.void sql
29ef0 69 74 65 33 49 64 4c 69 73 74 44 65 6c 65 74 65  ite3IdListDelete
29f00 28 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73  (sqlite3*, IdLis
29f10 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
29f20 33 53 72 63 4c 69 73 74 44 65 6c 65 74 65 28 73  3SrcListDelete(s
29f30 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74  qlite3*, SrcList
29f40 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74  *);.Index *sqlit
29f50 65 33 41 6c 6c 6f 63 61 74 65 49 6e 64 65 78 4f  e3AllocateIndexO
29f60 62 6a 65 63 74 28 73 71 6c 69 74 65 33 2a 2c 69  bject(sqlite3*,i
29f70 31 36 2c 69 6e 74 2c 63 68 61 72 2a 2a 29 3b 0a  16,int,char**);.
29f80 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65 61  void sqlite3Crea
29f90 74 65 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 54  teIndex(Parse*,T
29fa0 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 72 63  oken*,Token*,Src
29fb0 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  List*,ExprList*,
29fc0 69 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20  int,Token*,.    
29fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29fe0 20 20 20 20 20 20 45 78 70 72 2a 2c 20 69 6e 74        Expr*, int
29ff0 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 76 6f 69 64  , int, u8);.void
2a000 20 73 71 6c 69 74 65 33 44 72 6f 70 49 6e 64 65   sqlite3DropInde
2a010 78 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  x(Parse*, SrcLis
2a020 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  t*, int);.int sq
2a030 6c 69 74 65 33 53 65 6c 65 63 74 28 50 61 72 73  lite3Select(Pars
2a040 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 53 65 6c  e*, Select*, Sel
2a050 65 63 74 44 65 73 74 2a 29 3b 0a 53 65 6c 65 63  ectDest*);.Selec
2a060 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65 63 74  t *sqlite3Select
2a070 4e 65 77 28 50 61 72 73 65 2a 2c 45 78 70 72 4c  New(Parse*,ExprL
2a080 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78  ist*,SrcList*,Ex
2a090 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 0a 20  pr*,ExprList*,. 
2a0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a0b0 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 45 78          Expr*,Ex
2a0c0 70 72 4c 69 73 74 2a 2c 75 33 32 2c 45 78 70 72  prList*,u32,Expr
2a0d0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2a0e0 53 65 6c 65 63 74 44 65 6c 65 74 65 28 73 71 6c  SelectDelete(sql
2a0f0 69 74 65 33 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  ite3*, Select*);
2a100 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 53  .Table *sqlite3S
2a110 72 63 4c 69 73 74 4c 6f 6f 6b 75 70 28 50 61 72  rcListLookup(Par
2a120 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a  se*, SrcList*);.
2a130 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52 65 61  int sqlite3IsRea
2a140 64 4f 6e 6c 79 28 50 61 72 73 65 2a 2c 20 54 61  dOnly(Parse*, Ta
2a150 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  ble*, int);.void
2a160 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c   sqlite3OpenTabl
2a170 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 20 69 43  e(Parse*, int iC
2a180 75 72 2c 20 69 6e 74 20 69 44 62 2c 20 54 61 62  ur, int iDb, Tab
2a190 6c 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 20 64  le*, int);.#if d
2a1a0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
2a1b0 41 42 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45  ABLE_UPDATE_DELE
2a1c0 54 45 5f 4c 49 4d 49 54 29 20 26 26 20 21 64 65  TE_LIMIT) && !de
2a1d0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
2a1e0 54 5f 53 55 42 51 55 45 52 59 29 0a 45 78 70 72  T_SUBQUERY).Expr
2a1f0 20 2a 73 71 6c 69 74 65 33 4c 69 6d 69 74 57 68   *sqlite3LimitWh
2a200 65 72 65 28 50 61 72 73 65 2a 2c 53 72 63 4c 69  ere(Parse*,SrcLi
2a210 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69  st*,Expr*,ExprLi
2a220 73 74 2a 2c 45 78 70 72 2a 2c 63 68 61 72 2a 29  st*,Expr*,char*)
2a230 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  ;.#endif.void sq
2a240 6c 69 74 65 33 44 65 6c 65 74 65 46 72 6f 6d 28  lite3DeleteFrom(
2a250 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
2a260 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 4c 69 73  , Expr*, ExprLis
2a270 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  t*, Expr*);.void
2a280 20 73 71 6c 69 74 65 33 55 70 64 61 74 65 28 50   sqlite3Update(P
2a290 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
2a2a0 20 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a   ExprList*,Expr*
2a2b0 2c 69 6e 74 2c 45 78 70 72 4c 69 73 74 2a 2c 45  ,int,ExprList*,E
2a2c0 78 70 72 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  xpr*,.          
2a2d0 20 20 20 20 20 20 20 20 20 55 70 73 65 72 74 2a           Upsert*
2a2e0 29 3b 0a 57 68 65 72 65 49 6e 66 6f 20 2a 73 71  );.WhereInfo *sq
2a2f0 6c 69 74 65 33 57 68 65 72 65 42 65 67 69 6e 28  lite3WhereBegin(
2a300 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c  Parse*,SrcList*,
2a310 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  Expr*,ExprList*,
2a320 45 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c 69 6e  ExprList*,u16,in
2a330 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2a340 57 68 65 72 65 45 6e 64 28 57 68 65 72 65 49 6e  WhereEnd(WhereIn
2a350 66 6f 2a 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c  fo*);.LogEst sql
2a360 69 74 65 33 57 68 65 72 65 4f 75 74 70 75 74 52  ite3WhereOutputR
2a370 6f 77 43 6f 75 6e 74 28 57 68 65 72 65 49 6e 66  owCount(WhereInf
2a380 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  o*);.int sqlite3
2a390 57 68 65 72 65 49 73 44 69 73 74 69 6e 63 74 28  WhereIsDistinct(
2a3a0 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74  WhereInfo*);.int
2a3b0 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 4f   sqlite3WhereIsO
2a3c0 72 64 65 72 65 64 28 57 68 65 72 65 49 6e 66 6f  rdered(WhereInfo
2a3d0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
2a3e0 68 65 72 65 4f 72 64 65 72 42 79 4c 69 6d 69 74  hereOrderByLimit
2a3f0 4f 70 74 4c 61 62 65 6c 28 57 68 65 72 65 49 6e  OptLabel(WhereIn
2a400 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  fo*);.int sqlite
2a410 33 57 68 65 72 65 49 73 53 6f 72 74 65 64 28 57  3WhereIsSorted(W
2a420 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
2a430 73 71 6c 69 74 65 33 57 68 65 72 65 43 6f 6e 74  sqlite3WhereCont
2a440 69 6e 75 65 4c 61 62 65 6c 28 57 68 65 72 65 49  inueLabel(WhereI
2a450 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  nfo*);.int sqlit
2a460 65 33 57 68 65 72 65 42 72 65 61 6b 4c 61 62 65  e3WhereBreakLabe
2a470 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69  l(WhereInfo*);.i
2a480 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 4f  nt sqlite3WhereO
2a490 6b 4f 6e 65 50 61 73 73 28 57 68 65 72 65 49 6e  kOnePass(WhereIn
2a4a0 66 6f 2a 2c 20 69 6e 74 2a 29 3b 0a 23 64 65 66  fo*, int*);.#def
2a4b0 69 6e 65 20 4f 4e 45 50 41 53 53 5f 4f 46 46 20  ine ONEPASS_OFF 
2a4c0 20 20 20 20 20 30 20 20 20 20 20 20 20 20 2f 2a       0        /*
2a4d0 20 55 73 65 20 6f 66 20 4f 4e 45 50 41 53 53 20   Use of ONEPASS 
2a4e0 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 2a 2f 0a 23  not allowed */.#
2a4f0 64 65 66 69 6e 65 20 4f 4e 45 50 41 53 53 5f 53  define ONEPASS_S
2a500 49 4e 47 4c 45 20 20 20 31 20 20 20 20 20 20 20  INGLE   1       
2a510 20 2f 2a 20 4f 4e 45 50 41 53 53 20 76 61 6c 69   /* ONEPASS vali
2a520 64 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 72  d for a single r
2a530 6f 77 20 75 70 64 61 74 65 20 2a 2f 0a 23 64 65  ow update */.#de
2a540 66 69 6e 65 20 4f 4e 45 50 41 53 53 5f 4d 55 4c  fine ONEPASS_MUL
2a550 54 49 20 20 20 20 32 20 20 20 20 20 20 20 20 2f  TI    2        /
2a560 2a 20 4f 4e 45 50 41 53 53 20 69 73 20 76 61 6c  * ONEPASS is val
2a570 69 64 20 66 6f 72 20 6d 75 6c 74 69 70 6c 65 20  id for multiple 
2a580 72 6f 77 73 20 2a 2f 0a 76 6f 69 64 20 73 71 6c  rows */.void sql
2a590 69 74 65 33 45 78 70 72 43 6f 64 65 4c 6f 61 64  ite3ExprCodeLoad
2a5a0 49 6e 64 65 78 43 6f 6c 75 6d 6e 28 50 61 72 73  IndexColumn(Pars
2a5b0 65 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74 2c  e*, Index*, int,
2a5c0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20   int, int);.int 
2a5d0 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47  sqlite3ExprCodeG
2a5e0 65 74 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c  etColumn(Parse*,
2a5f0 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
2a600 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 76 6f 69  t, int, u8);.voi
2a610 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
2a620 65 47 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c  eGetColumnOfTabl
2a630 65 28 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c  e(Vdbe*, Table*,
2a640 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
2a650 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
2a660 72 43 6f 64 65 4d 6f 76 65 28 50 61 72 73 65 2a  rCodeMove(Parse*
2a670 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
2a680 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
2a690 70 72 43 6f 64 65 28 50 61 72 73 65 2a 2c 20 45  prCode(Parse*, E
2a6a0 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  xpr*, int);.void
2a6b0 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
2a6c0 43 6f 70 79 28 50 61 72 73 65 2a 2c 20 45 78 70  Copy(Parse*, Exp
2a6d0 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  r*, int);.void s
2a6e0 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 46 61  qlite3ExprCodeFa
2a6f0 63 74 6f 72 61 62 6c 65 28 50 61 72 73 65 2a 2c  ctorable(Parse*,
2a700 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e   Expr*, int);.in
2a710 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  t sqlite3ExprCod
2a720 65 41 74 49 6e 69 74 28 50 61 72 73 65 2a 2c 20  eAtInit(Parse*, 
2a730 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  Expr*, int);.int
2a740 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
2a750 54 65 6d 70 28 50 61 72 73 65 2a 2c 20 45 78 70  Temp(Parse*, Exp
2a760 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73  r*, int*);.int s
2a770 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 54 61  qlite3ExprCodeTa
2a780 72 67 65 74 28 50 61 72 73 65 2a 2c 20 45 78 70  rget(Parse*, Exp
2a790 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  r*, int);.void s
2a7a0 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 41 6e  qlite3ExprCodeAn
2a7b0 64 43 61 63 68 65 28 50 61 72 73 65 2a 2c 20 45  dCache(Parse*, E
2a7c0 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  xpr*, int);.int 
2a7d0 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 45  sqlite3ExprCodeE
2a7e0 78 70 72 4c 69 73 74 28 50 61 72 73 65 2a 2c 20  xprList(Parse*, 
2a7f0 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20  ExprList*, int, 
2a800 69 6e 74 2c 20 75 38 29 3b 0a 23 64 65 66 69 6e  int, u8);.#defin
2a810 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 44 55  e SQLITE_ECEL_DU
2a820 50 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a 20  P      0x01  /* 
2a830 44 65 65 70 2c 20 6e 6f 74 20 73 68 61 6c 6c 6f  Deep, not shallo
2a840 77 20 63 6f 70 69 65 73 20 2a 2f 0a 23 64 65 66  w copies */.#def
2a850 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f  ine SQLITE_ECEL_
2a860 46 41 43 54 4f 52 20 20 20 30 78 30 32 20 20 2f  FACTOR   0x02  /
2a870 2a 20 46 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e  * Factor out con
2a880 73 74 61 6e 74 20 74 65 72 6d 73 20 2a 2f 0a 23  stant terms */.#
2a890 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43  define SQLITE_EC
2a8a0 45 4c 5f 52 45 46 20 20 20 20 20 20 30 78 30 34  EL_REF      0x04
2a8b0 20 20 2f 2a 20 55 73 65 20 45 78 70 72 4c 69 73    /* Use ExprLis
2a8c0 74 2e 75 2e 78 2e 69 4f 72 64 65 72 42 79 43 6f  t.u.x.iOrderByCo
2a8d0 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  l */.#define SQL
2a8e0 49 54 45 5f 45 43 45 4c 5f 4f 4d 49 54 52 45 46  ITE_ECEL_OMITREF
2a8f0 20 20 30 78 30 38 20 20 2f 2a 20 4f 6d 69 74 20    0x08  /* Omit 
2a900 69 66 20 45 78 70 72 4c 69 73 74 2e 75 2e 78 2e  if ExprList.u.x.
2a910 69 4f 72 64 65 72 42 79 43 6f 6c 20 2a 2f 0a 76  iOrderByCol */.v
2a920 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 49  oid sqlite3ExprI
2a930 66 54 72 75 65 28 50 61 72 73 65 2a 2c 20 45 78  fTrue(Parse*, Ex
2a940 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  pr*, int, int);.
2a950 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
2a960 49 66 46 61 6c 73 65 28 50 61 72 73 65 2a 2c 20  IfFalse(Parse*, 
2a970 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  Expr*, int, int)
2a980 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
2a990 70 72 49 66 46 61 6c 73 65 44 75 70 28 50 61 72  prIfFalseDup(Par
2a9a0 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c  se*, Expr*, int,
2a9b0 20 69 6e 74 29 3b 0a 54 61 62 6c 65 20 2a 73 71   int);.Table *sq
2a9c0 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28 73  lite3FindTable(s
2a9d0 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
2a9e0 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
2a9f0 29 3b 0a 23 64 65 66 69 6e 65 20 4c 4f 43 41 54  );.#define LOCAT
2aa00 45 5f 56 49 45 57 20 20 20 20 30 78 30 31 0a 23  E_VIEW    0x01.#
2aa10 64 65 66 69 6e 65 20 4c 4f 43 41 54 45 5f 4e 4f  define LOCATE_NO
2aa20 45 52 52 20 20 20 30 78 30 32 0a 54 61 62 6c 65  ERR   0x02.Table
2aa30 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54   *sqlite3LocateT
2aa40 61 62 6c 65 28 50 61 72 73 65 2a 2c 75 33 32 20  able(Parse*,u32 
2aa50 66 6c 61 67 73 2c 63 6f 6e 73 74 20 63 68 61 72  flags,const char
2aa60 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
2aa70 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c  .Table *sqlite3L
2aa80 6f 63 61 74 65 54 61 62 6c 65 49 74 65 6d 28 50  ocateTableItem(P
2aa90 61 72 73 65 2a 2c 75 33 32 20 66 6c 61 67 73 2c  arse*,u32 flags,
2aaa0 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69  struct SrcList_i
2aab0 74 65 6d 20 2a 29 3b 0a 49 6e 64 65 78 20 2a 73  tem *);.Index *s
2aac0 71 6c 69 74 65 33 46 69 6e 64 49 6e 64 65 78 28  qlite3FindIndex(
2aad0 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
2aae0 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
2aaf0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2ab00 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54  UnlinkAndDeleteT
2ab10 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 69 6e  able(sqlite3*,in
2ab20 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  t,const char*);.
2ab30 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69  void sqlite3Unli
2ab40 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64 65 78  nkAndDeleteIndex
2ab50 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f  (sqlite3*,int,co
2ab60 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
2ab70 20 73 71 6c 69 74 65 33 56 61 63 75 75 6d 28 50   sqlite3Vacuum(P
2ab80 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 69  arse*,Token*);.i
2ab90 6e 74 20 73 71 6c 69 74 65 33 52 75 6e 56 61 63  nt sqlite3RunVac
2aba0 75 75 6d 28 63 68 61 72 2a 2a 2c 20 73 71 6c 69  uum(char**, sqli
2abb0 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 63 68 61 72  te3*, int);.char
2abc0 20 2a 73 71 6c 69 74 65 33 4e 61 6d 65 46 72 6f   *sqlite3NameFro
2abd0 6d 54 6f 6b 65 6e 28 73 71 6c 69 74 65 33 2a 2c  mToken(sqlite3*,
2abe0 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
2abf0 6c 69 74 65 33 45 78 70 72 43 6f 6d 70 61 72 65  lite3ExprCompare
2ac00 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 20 45  (Parse*,Expr*, E
2ac10 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  xpr*, int);.int 
2ac20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6d 70 61  sqlite3ExprCompa
2ac30 72 65 53 6b 69 70 28 45 78 70 72 2a 2c 20 45 78  reSkip(Expr*, Ex
2ac40 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  pr*, int);.int s
2ac50 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 43 6f  qlite3ExprListCo
2ac60 6d 70 61 72 65 28 45 78 70 72 4c 69 73 74 2a 2c  mpare(ExprList*,
2ac70 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29   ExprList*, int)
2ac80 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
2ac90 72 49 6d 70 6c 69 65 73 45 78 70 72 28 50 61 72  rImpliesExpr(Par
2aca0 73 65 2a 2c 45 78 70 72 2a 2c 20 45 78 70 72 2a  se*,Expr*, Expr*
2acb0 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
2acc0 74 65 33 45 78 70 72 49 6d 70 6c 69 65 73 4e 6f  te3ExprImpliesNo
2acd0 6e 4e 75 6c 6c 52 6f 77 28 45 78 70 72 2a 2c 69  nNullRow(Expr*,i
2ace0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2acf0 33 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67 72  3ExprAnalyzeAggr
2ad00 65 67 61 74 65 73 28 4e 61 6d 65 43 6f 6e 74 65  egates(NameConte
2ad10 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  xt*, Expr*);.voi
2ad20 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e 61  d sqlite3ExprAna
2ad30 6c 79 7a 65 41 67 67 4c 69 73 74 28 4e 61 6d 65  lyzeAggList(Name
2ad40 43 6f 6e 74 65 78 74 2a 2c 45 78 70 72 4c 69 73  Context*,ExprLis
2ad50 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
2ad60 45 78 70 72 43 6f 76 65 72 65 64 42 79 49 6e 64  ExprCoveredByInd
2ad70 65 78 28 45 78 70 72 2a 2c 20 69 6e 74 20 69 43  ex(Expr*, int iC
2ad80 75 72 2c 20 49 6e 64 65 78 20 2a 70 49 64 78 29  ur, Index *pIdx)
2ad90 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 75 6e  ;.int sqlite3Fun
2ada0 63 74 69 6f 6e 55 73 65 73 54 68 69 73 53 72 63  ctionUsesThisSrc
2adb0 28 45 78 70 72 2a 2c 20 53 72 63 4c 69 73 74 2a  (Expr*, SrcList*
2adc0 29 3b 0a 56 64 62 65 20 2a 73 71 6c 69 74 65 33  );.Vdbe *sqlite3
2add0 47 65 74 56 64 62 65 28 50 61 72 73 65 2a 29 3b  GetVdbe(Parse*);
2ade0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2adf0 55 4e 54 45 53 54 41 42 4c 45 0a 76 6f 69 64 20  UNTESTABLE.void 
2ae00 73 71 6c 69 74 65 33 50 72 6e 67 53 61 76 65 53  sqlite3PrngSaveS
2ae10 74 61 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64  tate(void);.void
2ae20 20 73 71 6c 69 74 65 33 50 72 6e 67 52 65 73 74   sqlite3PrngRest
2ae30 6f 72 65 53 74 61 74 65 28 76 6f 69 64 29 3b 0a  oreState(void);.
2ae40 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
2ae50 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 73  te3RollbackAll(s
2ae60 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f  qlite3*,int);.vo
2ae70 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65  id sqlite3CodeVe
2ae80 72 69 66 79 53 63 68 65 6d 61 28 50 61 72 73 65  rifySchema(Parse
2ae90 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
2aea0 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 4e  lite3CodeVerifyN
2aeb0 61 6d 65 64 53 63 68 65 6d 61 28 50 61 72 73 65  amedSchema(Parse
2aec0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  *, const char *z
2aed0 44 62 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  Db);.void sqlite
2aee0 33 42 65 67 69 6e 54 72 61 6e 73 61 63 74 69 6f  3BeginTransactio
2aef0 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  n(Parse*, int);.
2af00 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e 64 54  void sqlite3EndT
2af10 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65  ransaction(Parse
2af20 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
2af30 69 74 65 33 53 61 76 65 70 6f 69 6e 74 28 50 61  ite3Savepoint(Pa
2af40 72 73 65 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e  rse*, int, Token
2af50 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2af60 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74 73 28  CloseSavepoints(
2af70 73 71 6c 69 74 65 33 20 2a 29 3b 0a 76 6f 69 64  sqlite3 *);.void
2af80 20 73 71 6c 69 74 65 33 4c 65 61 76 65 4d 75 74   sqlite3LeaveMut
2af90 65 78 41 6e 64 43 6c 6f 73 65 5a 6f 6d 62 69 65  exAndCloseZombie
2afa0 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20  (sqlite3*);.int 
2afb0 73 71 6c 69 74 65 33 45 78 70 72 49 64 54 6f 54  sqlite3ExprIdToT
2afc0 72 75 65 46 61 6c 73 65 28 45 78 70 72 2a 29 3b  rueFalse(Expr*);
2afd0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
2afe0 54 72 75 74 68 56 61 6c 75 65 28 63 6f 6e 73 74  TruthValue(const
2aff0 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   Expr*);.int sql
2b000 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61  ite3ExprIsConsta
2b010 6e 74 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  nt(Expr*);.int s
2b020 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73  qlite3ExprIsCons
2b030 74 61 6e 74 4e 6f 74 4a 6f 69 6e 28 45 78 70 72  tantNotJoin(Expr
2b040 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
2b050 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4f 72 46  xprIsConstantOrF
2b060 75 6e 63 74 69 6f 6e 28 45 78 70 72 2a 2c 20 75  unction(Expr*, u
2b070 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  8);.int sqlite3E
2b080 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4f 72 47  xprIsConstantOrG
2b090 72 6f 75 70 42 79 28 50 61 72 73 65 2a 2c 20 45  roupBy(Parse*, E
2b0a0 78 70 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29  xpr*, ExprList*)
2b0b0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
2b0c0 72 49 73 54 61 62 6c 65 43 6f 6e 73 74 61 6e 74  rIsTableConstant
2b0d0 28 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 23 69 66  (Expr*,int);.#if
2b0e0 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
2b0f0 45 5f 43 55 52 53 4f 52 5f 48 49 4e 54 53 0a 69  E_CURSOR_HINTS.i
2b100 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
2b110 6e 74 61 69 6e 73 53 75 62 71 75 65 72 79 28 45  ntainsSubquery(E
2b120 78 70 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 69 6e  xpr*);.#endif.in
2b130 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 49  t sqlite3ExprIsI
2b140 6e 74 65 67 65 72 28 45 78 70 72 2a 2c 20 69 6e  nteger(Expr*, in
2b150 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
2b160 45 78 70 72 43 61 6e 42 65 4e 75 6c 6c 28 63 6f  ExprCanBeNull(co
2b170 6e 73 74 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20  nst Expr*);.int 
2b180 73 71 6c 69 74 65 33 45 78 70 72 4e 65 65 64 73  sqlite3ExprNeeds
2b190 4e 6f 41 66 66 69 6e 69 74 79 43 68 61 6e 67 65  NoAffinityChange
2b1a0 28 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20 63 68  (const Expr*, ch
2b1b0 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  ar);.int sqlite3
2b1c0 49 73 52 6f 77 69 64 28 63 6f 6e 73 74 20 63 68  IsRowid(const ch
2b1d0 61 72 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  ar*);.#ifdef SQL
2b1e0 49 54 45 5f 45 4e 41 42 4c 45 5f 4e 4f 52 4d 41  ITE_ENABLE_NORMA
2b1f0 4c 49 5a 45 0a 69 6e 74 20 73 71 6c 69 74 65 33  LIZE.int sqlite3
2b200 49 73 52 6f 77 69 64 4e 28 63 6f 6e 73 74 20 63  IsRowidN(const c
2b210 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 23 65 6e 64  har*, int);.#end
2b220 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47  if.void sqlite3G
2b230 65 6e 65 72 61 74 65 52 6f 77 44 65 6c 65 74 65  enerateRowDelete
2b240 28 0a 20 20 20 20 50 61 72 73 65 2a 2c 69 6e 74  (.    Parse*,int
2b250 2c 54 61 62 6c 65 2a 2c 54 72 69 67 67 65 72 2a  ,Table*,Trigger*
2b260 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 31 36  ,int,int,int,i16
2b270 2c 75 38 2c 75 38 2c 75 38 2c 69 6e 74 29 3b 0a  ,u8,u8,u8,int);.
2b280 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65  void sqlite3Gene
2b290 72 61 74 65 52 6f 77 49 6e 64 65 78 44 65 6c 65  rateRowIndexDele
2b2a0 74 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  te(Parse*, Table
2b2b0 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
2b2c0 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
2b2d0 69 74 65 33 47 65 6e 65 72 61 74 65 49 6e 64 65  ite3GenerateInde
2b2e0 78 4b 65 79 28 50 61 72 73 65 2a 2c 20 49 6e 64  xKey(Parse*, Ind
2b2f0 65 78 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  ex*, int, int, i
2b300 6e 74 2c 20 69 6e 74 2a 2c 49 6e 64 65 78 2a 2c  nt, int*,Index*,
2b310 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2b320 65 33 52 65 73 6f 6c 76 65 50 61 72 74 49 64 78  e3ResolvePartIdx
2b330 4c 61 62 65 6c 28 50 61 72 73 65 2a 2c 69 6e 74  Label(Parse*,int
2b340 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
2b350 70 72 52 65 66 65 72 65 6e 63 65 73 55 70 64 61  prReferencesUpda
2b360 74 65 64 43 6f 6c 75 6d 6e 28 45 78 70 72 2a 2c  tedColumn(Expr*,
2b370 69 6e 74 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  int*,int);.void 
2b380 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 43  sqlite3GenerateC
2b390 6f 6e 73 74 72 61 69 6e 74 43 68 65 63 6b 73 28  onstraintChecks(
2b3a0 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e  Parse*,Table*,in
2b3b0 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69  t*,int,int,int,i
2b3c0 6e 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  nt,.            
2b3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b3e0 20 20 20 20 20 20 20 20 20 75 38 2c 75 38 2c 69           u8,u8,i
2b3f0 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a 2c 55 70 73  nt,int*,int*,Ups
2b400 65 72 74 2a 29 3b 0a 23 69 66 64 65 66 20 53 51  ert*);.#ifdef SQ
2b410 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4e 55 4c 4c  LITE_ENABLE_NULL
2b420 5f 54 52 49 4d 0a 20 20 76 6f 69 64 20 73 71 6c  _TRIM.  void sql
2b430 69 74 65 33 53 65 74 4d 61 6b 65 52 65 63 6f 72  ite3SetMakeRecor
2b440 64 50 35 28 56 64 62 65 2a 2c 54 61 62 6c 65 2a  dP5(Vdbe*,Table*
2b450 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
2b460 65 20 73 71 6c 69 74 65 33 53 65 74 4d 61 6b 65  e sqlite3SetMake
2b470 52 65 63 6f 72 64 50 35 28 41 2c 42 29 0a 23 65  RecordP5(A,B).#e
2b480 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
2b490 33 43 6f 6d 70 6c 65 74 65 49 6e 73 65 72 74 69  3CompleteInserti
2b4a0 6f 6e 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a  on(Parse*,Table*
2b4b0 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  ,int,int,int,int
2b4c0 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a  *,int,int,int);.
2b4d0 69 6e 74 20 73 71 6c 69 74 65 33 4f 70 65 6e 54  int sqlite3OpenT
2b4e0 61 62 6c 65 41 6e 64 49 6e 64 69 63 65 73 28 50  ableAndIndices(P
2b4f0 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54 61 62 6c  arse*, int, Tabl
2b500 65 2a 2c 20 69 6e 74 2c 20 75 38 2c 20 69 6e 74  e*, int, u8, int
2b510 2c 75 38 2a 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b  ,u8*,int*,int*);
2b520 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67  .void sqlite3Beg
2b530 69 6e 57 72 69 74 65 4f 70 65 72 61 74 69 6f 6e  inWriteOperation
2b540 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e  (Parse*, int, in
2b550 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2b560 4d 75 6c 74 69 57 72 69 74 65 28 50 61 72 73 65  MultiWrite(Parse
2b570 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2b580 4d 61 79 41 62 6f 72 74 28 50 61 72 73 65 2a 29  MayAbort(Parse*)
2b590 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 48 61  ;.void sqlite3Ha
2b5a0 6c 74 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72  ltConstraint(Par
2b5b0 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 63  se*, int, int, c
2b5c0 68 61 72 2a 2c 20 69 38 2c 20 75 38 29 3b 0a 76  har*, i8, u8);.v
2b5d0 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 69 71 75  oid sqlite3Uniqu
2b5e0 65 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73  eConstraint(Pars
2b5f0 65 2a 2c 20 69 6e 74 2c 20 49 6e 64 65 78 2a 29  e*, int, Index*)
2b600 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f  ;.void sqlite3Ro
2b610 77 69 64 43 6f 6e 73 74 72 61 69 6e 74 28 50 61  widConstraint(Pa
2b620 72 73 65 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65  rse*, int, Table
2b630 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  *);.Expr *sqlite
2b640 33 45 78 70 72 44 75 70 28 73 71 6c 69 74 65 33  3ExprDup(sqlite3
2b650 2a 2c 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 45 78  *,Expr*,int);.Ex
2b660 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45  prList *sqlite3E
2b670 78 70 72 4c 69 73 74 44 75 70 28 73 71 6c 69 74  xprListDup(sqlit
2b680 65 33 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e  e3*,ExprList*,in
2b690 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c  t);.SrcList *sql
2b6a0 69 74 65 33 53 72 63 4c 69 73 74 44 75 70 28 73  ite3SrcListDup(s
2b6b0 71 6c 69 74 65 33 2a 2c 53 72 63 4c 69 73 74 2a  qlite3*,SrcList*
2b6c0 2c 69 6e 74 29 3b 0a 49 64 4c 69 73 74 20 2a 73  ,int);.IdList *s
2b6d0 71 6c 69 74 65 33 49 64 4c 69 73 74 44 75 70 28  qlite3IdListDup(
2b6e0 73 71 6c 69 74 65 33 2a 2c 49 64 4c 69 73 74 2a  sqlite3*,IdList*
2b6f0 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69 74  );.Select *sqlit
2b700 65 33 53 65 6c 65 63 74 44 75 70 28 73 71 6c 69  e3SelectDup(sqli
2b710 74 65 33 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74  te3*,Select*,int
2b720 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
2b730 5f 45 4e 41 42 4c 45 5f 4e 4f 52 4d 41 4c 49 5a  _ENABLE_NORMALIZ
2b740 45 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c 69 74  E.FuncDef *sqlit
2b750 65 33 46 75 6e 63 74 69 6f 6e 53 65 61 72 63 68  e3FunctionSearch
2b760 4e 28 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  N(int,const char
2b770 2a 2c 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 76  *,int);.#endif.v
2b780 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 73 65 72  oid sqlite3Inser
2b790 74 42 75 69 6c 74 69 6e 46 75 6e 63 73 28 46 75  tBuiltinFuncs(Fu
2b7a0 6e 63 44 65 66 2a 2c 69 6e 74 29 3b 0a 46 75 6e  ncDef*,int);.Fun
2b7b0 63 44 65 66 20 2a 73 71 6c 69 74 65 33 46 69 6e  cDef *sqlite3Fin
2b7c0 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65  dFunction(sqlite
2b7d0 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69  3*,const char*,i
2b7e0 6e 74 2c 75 38 2c 75 38 29 3b 0a 76 6f 69 64 20  nt,u8,u8);.void 
2b7f0 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 42  sqlite3RegisterB
2b800 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 28  uiltinFunctions(
2b810 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69  void);.void sqli
2b820 74 65 33 52 65 67 69 73 74 65 72 44 61 74 65 54  te3RegisterDateT
2b830 69 6d 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69  imeFunctions(voi
2b840 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  d);.void sqlite3
2b850 52 65 67 69 73 74 65 72 50 65 72 43 6f 6e 6e 65  RegisterPerConne
2b860 63 74 69 6f 6e 42 75 69 6c 74 69 6e 46 75 6e 63  ctionBuiltinFunc
2b870 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b  tions(sqlite3*);
2b880 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65  .int sqlite3Safe
2b890 74 79 43 68 65 63 6b 4f 6b 28 73 71 6c 69 74 65  tyCheckOk(sqlite
2b8a0 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  3*);.int sqlite3
2b8b0 53 61 66 65 74 79 43 68 65 63 6b 53 69 63 6b 4f  SafetyCheckSickO
2b8c0 72 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76  rOk(sqlite3*);.v
2b8d0 6f 69 64 20 73 71 6c 69 74 65 33 43 68 61 6e 67  oid sqlite3Chang
2b8e0 65 43 6f 6f 6b 69 65 28 50 61 72 73 65 2a 2c 20  eCookie(Parse*, 
2b8f0 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65 66 69  int);..#if !defi
2b900 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
2b910 56 49 45 57 29 20 26 26 20 21 64 65 66 69 6e 65  VIEW) && !define
2b920 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  d(SQLITE_OMIT_TR
2b930 49 47 47 45 52 29 0a 76 6f 69 64 20 73 71 6c 69  IGGER).void sqli
2b940 74 65 33 4d 61 74 65 72 69 61 6c 69 7a 65 56 69  te3MaterializeVi
2b950 65 77 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  ew(Parse*, int, 
2b960 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 45  Table*, Expr*, E
2b970 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 69  xprList*,Expr*,i
2b980 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  nt);.#endif..#if
2b990 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2b9a0 5f 54 52 49 47 47 45 52 0a 20 20 76 6f 69 64 20  _TRIGGER.  void 
2b9b0 73 71 6c 69 74 65 33 42 65 67 69 6e 54 72 69 67  sqlite3BeginTrig
2b9c0 67 65 72 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  ger(Parse*, Toke
2b9d0 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e  n*,Token*,int,in
2b9e0 74 2c 49 64 4c 69 73 74 2a 2c 53 72 63 4c 69 73  t,IdList*,SrcLis
2b9f0 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  t*,.            
2ba00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45                 E
2ba10 78 70 72 2a 2c 69 6e 74 2c 20 69 6e 74 29 3b 0a  xpr*,int, int);.
2ba20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69    void sqlite3Fi
2ba30 6e 69 73 68 54 72 69 67 67 65 72 28 50 61 72 73  nishTrigger(Pars
2ba40 65 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a  e*, TriggerStep*
2ba50 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 20 20 76 6f 69  , Token*);.  voi
2ba60 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69  d sqlite3DropTri
2ba70 67 67 65 72 28 50 61 72 73 65 2a 2c 20 53 72 63  gger(Parse*, Src
2ba80 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76  List*, int);.  v
2ba90 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54  oid sqlite3DropT
2baa0 72 69 67 67 65 72 50 74 72 28 50 61 72 73 65 2a  riggerPtr(Parse*
2bab0 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20 54  , Trigger*);.  T
2bac0 72 69 67 67 65 72 20 2a 73 71 6c 69 74 65 33 54  rigger *sqlite3T
2bad0 72 69 67 67 65 72 73 45 78 69 73 74 28 50 61 72  riggersExist(Par
2bae0 73 65 20 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  se *, Table*, in
2baf0 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e  t, ExprList*, in
2bb00 74 20 2a 70 4d 61 73 6b 29 3b 0a 20 20 54 72 69  t *pMask);.  Tri
2bb10 67 67 65 72 20 2a 73 71 6c 69 74 65 33 54 72 69  gger *sqlite3Tri
2bb20 67 67 65 72 4c 69 73 74 28 50 61 72 73 65 20 2a  ggerList(Parse *
2bb30 2c 20 54 61 62 6c 65 20 2a 29 3b 0a 20 20 76 6f  , Table *);.  vo
2bb40 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f  id sqlite3CodeRo
2bb50 77 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c  wTrigger(Parse*,
2bb60 20 69 6e 74 2c 20 54 72 69 67 67 65 72 20 2a 2c   int, Trigger *,
2bb70 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c   int, ExprList*,
2bb80 20 69 6e 74 2c 20 0a 20 20 20 20 20 20 20 20 20   int, .         
2bb90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bba0 20 20 20 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74      Table *, int
2bbb0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76  , int, int);.  v
2bbc0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52  oid sqlite3CodeR
2bbd0 6f 77 54 72 69 67 67 65 72 44 69 72 65 63 74 28  owTriggerDirect(
2bbe0 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54 72 69  Parse*, int, Tri
2bbf0 67 67 65 72 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  gger*, Table*, i
2bc00 6e 74 2c 20 69 6e 74 2c 69 6e 74 29 3b 0a 20 20  nt, int,int);.  
2bc10 76 6f 69 64 20 73 71 6c 69 74 65 56 69 65 77 54  void sqliteViewT
2bc20 72 69 67 67 65 72 73 28 50 61 72 73 65 2a 2c 20  riggers(Parse*, 
2bc30 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Table*, Expr*, i
2bc40 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a  nt, ExprList*);.
2bc50 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65    void sqlite3De
2bc60 6c 65 74 65 54 72 69 67 67 65 72 53 74 65 70 28  leteTriggerStep(
2bc70 73 71 6c 69 74 65 33 2a 2c 20 54 72 69 67 67 65  sqlite3*, Trigge
2bc80 72 53 74 65 70 2a 29 3b 0a 20 20 54 72 69 67 67  rStep*);.  Trigg
2bc90 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54  erStep *sqlite3T
2bca0 72 69 67 67 65 72 53 65 6c 65 63 74 53 74 65 70  riggerSelectStep
2bcb0 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74  (sqlite3*,Select
2bcc0 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
2bcd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bce0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74             const
2bcf0 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
2bd00 72 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74  r*);.  TriggerSt
2bd10 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67  ep *sqlite3Trigg
2bd20 65 72 49 6e 73 65 72 74 53 74 65 70 28 50 61 72  erInsertStep(Par
2bd30 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 20 49 64 4c 69  se*,Token*, IdLi
2bd40 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  st*,.           
2bd50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bd60 20 20 20 20 20 20 20 20 20 20 20 20 20 53 65 6c               Sel
2bd70 65 63 74 2a 2c 75 38 2c 55 70 73 65 72 74 2a 2c  ect*,u8,Upsert*,
2bd80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2bd90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bda0 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63           const c
2bdb0 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
2bdc0 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70  );.  TriggerStep
2bdd0 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72   *sqlite3Trigger
2bde0 55 70 64 61 74 65 53 74 65 70 28 50 61 72 73 65  UpdateStep(Parse
2bdf0 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73  *,Token*,ExprLis
2be00 74 2a 2c 20 45 78 70 72 2a 2c 20 75 38 2c 0a 20  t*, Expr*, u8,. 
2be10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2be20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2be30 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61         const cha
2be40 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  r*,const char*);
2be50 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
2be60 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 44 65  sqlite3TriggerDe
2be70 6c 65 74 65 53 74 65 70 28 50 61 72 73 65 2a 2c  leteStep(Parse*,
2be80 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 2a 2c 0a 20  Token*, Expr*,. 
2be90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2beb0 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61         const cha
2bec0 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  r*,const char*);
2bed0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44  .  void sqlite3D
2bee0 65 6c 65 74 65 54 72 69 67 67 65 72 28 73 71 6c  eleteTrigger(sql
2bef0 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72 2a 29  ite3*, Trigger*)
2bf00 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2bf10 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54  UnlinkAndDeleteT
2bf20 72 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a 2c  rigger(sqlite3*,
2bf30 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  int,const char*)
2bf40 3b 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33 54  ;.  u32 sqlite3T
2bf50 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28 50 61  riggerColmask(Pa
2bf60 72 73 65 2a 2c 69 6e 74 2c 54 72 69 67 67 65 72  rse*,int,Trigger
2bf70 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c  *,ExprList*,int,
2bf80 69 6e 74 2c 54 61 62 6c 65 2a 2c 69 6e 74 29 3b  int,Table*,int);
2bf90 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2bfa0 33 50 61 72 73 65 54 6f 70 6c 65 76 65 6c 28 70  3ParseToplevel(p
2bfb0 29 20 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65  ) ((p)->pTopleve
2bfc0 6c 20 3f 20 28 70 29 2d 3e 70 54 6f 70 6c 65 76  l ? (p)->pToplev
2bfd0 65 6c 20 3a 20 28 70 29 29 0a 23 20 64 65 66 69  el : (p)).# defi
2bfe0 6e 65 20 73 71 6c 69 74 65 33 49 73 54 6f 70 6c  ne sqlite3IsTopl
2bff0 65 76 65 6c 28 70 29 20 28 28 70 29 2d 3e 70 54  evel(p) ((p)->pT
2c000 6f 70 6c 65 76 65 6c 3d 3d 30 29 0a 23 65 6c 73  oplevel==0).#els
2c010 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
2c020 65 33 54 72 69 67 67 65 72 73 45 78 69 73 74 28  e3TriggersExist(
2c030 42 2c 43 2c 44 2c 45 2c 46 29 20 30 0a 23 20 64  B,C,D,E,F) 0.# d
2c040 65 66 69 6e 65 20 73 71 6c 69 74 65 33 44 65 6c  efine sqlite3Del
2c050 65 74 65 54 72 69 67 67 65 72 28 41 2c 42 29 0a  eteTrigger(A,B).
2c060 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2c070 44 72 6f 70 54 72 69 67 67 65 72 50 74 72 28 41  DropTriggerPtr(A
2c080 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,B).# define sql
2c090 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c  ite3UnlinkAndDel
2c0a0 65 74 65 54 72 69 67 67 65 72 28 41 2c 42 2c 43  eteTrigger(A,B,C
2c0b0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
2c0c0 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72  e3CodeRowTrigger
2c0d0 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 2c 48  (A,B,C,D,E,F,G,H
2c0e0 2c 49 2c 4a 29 0a 23 20 64 65 66 69 6e 65 20 73  ,I,J).# define s
2c0f0 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69  qlite3CodeRowTri
2c100 67 67 65 72 44 69 72 65 63 74 28 41 2c 42 2c 43  ggerDirect(A,B,C
2c110 2c 44 2c 45 2c 46 2c 47 29 0a 23 20 64 65 66 69  ,D,E,F,G).# defi
2c120 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67 67 65  ne sqlite3Trigge
2c130 72 4c 69 73 74 28 58 2c 20 59 29 20 30 0a 23 20  rList(X, Y) 0.# 
2c140 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 50 61  define sqlite3Pa
2c150 72 73 65 54 6f 70 6c 65 76 65 6c 28 70 29 20 70  rseToplevel(p) p
2c160 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2c170 33 49 73 54 6f 70 6c 65 76 65 6c 28 70 29 20 31  3IsToplevel(p) 1
2c180 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2c190 33 54 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28  3TriggerColmask(
2c1a0 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 2c 48 29  A,B,C,D,E,F,G,H)
2c1b0 20 30 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73   0.#endif..int s
2c1c0 71 6c 69 74 65 33 4a 6f 69 6e 54 79 70 65 28 50  qlite3JoinType(P
2c1d0 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  arse*, Token*, T
2c1e0 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  oken*, Token*);.
2c1f0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65 61  void sqlite3Crea
2c200 74 65 46 6f 72 65 69 67 6e 4b 65 79 28 50 61 72  teForeignKey(Par
2c210 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  se*, ExprList*, 
2c220 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 4c 69 73 74  Token*, ExprList
2c230 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
2c240 6c 69 74 65 33 44 65 66 65 72 46 6f 72 65 69 67  lite3DeferForeig
2c250 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20 69 6e 74  nKey(Parse*, int
2c260 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
2c270 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41  E_OMIT_AUTHORIZA
2c280 54 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69  TION.  void sqli
2c290 74 65 33 41 75 74 68 52 65 61 64 28 50 61 72 73  te3AuthRead(Pars
2c2a0 65 2a 2c 45 78 70 72 2a 2c 53 63 68 65 6d 61 2a  e*,Expr*,Schema*
2c2b0 2c 53 72 63 4c 69 73 74 2a 29 3b 0a 20 20 69 6e  ,SrcList*);.  in
2c2c0 74 20 73 71 6c 69 74 65 33 41 75 74 68 43 68 65  t sqlite3AuthChe
2c2d0 63 6b 28 50 61 72 73 65 2a 2c 69 6e 74 2c 20 63  ck(Parse*,int, c
2c2e0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
2c2f0 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
2c300 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  har*);.  void sq
2c310 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74  lite3AuthContext
2c320 50 75 73 68 28 50 61 72 73 65 2a 2c 20 41 75 74  Push(Parse*, Aut
2c330 68 43 6f 6e 74 65 78 74 2a 2c 20 63 6f 6e 73 74  hContext*, const
2c340 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20   char*);.  void 
2c350 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65  sqlite3AuthConte
2c360 78 74 50 6f 70 28 41 75 74 68 43 6f 6e 74 65 78  xtPop(AuthContex
2c370 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  t*);.  int sqlit
2c380 65 33 41 75 74 68 52 65 61 64 43 6f 6c 28 50 61  e3AuthReadCol(Pa
2c390 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  rse*, const char
2c3a0 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a   *, const char *
2c3b0 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 23 20  , int);.#else.# 
2c3c0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
2c3d0 74 68 52 65 61 64 28 61 2c 62 2c 63 2c 64 29 0a  thRead(a,b,c,d).
2c3e0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2c3f0 41 75 74 68 43 68 65 63 6b 28 61 2c 62 2c 63 2c  AuthCheck(a,b,c,
2c400 64 2c 65 29 20 20 20 20 53 51 4c 49 54 45 5f 4f  d,e)    SQLITE_O
2c410 4b 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  K.# define sqlit
2c420 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 75 73  e3AuthContextPus
2c430 68 28 61 2c 62 2c 63 29 0a 23 20 64 65 66 69 6e  h(a,b,c).# defin
2c440 65 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e  e sqlite3AuthCon
2c450 74 65 78 74 50 6f 70 28 61 29 20 20 28 28 76 6f  textPop(a)  ((vo
2c460 69 64 29 28 61 29 29 0a 23 65 6e 64 69 66 0a 76  id)(a)).#endif.v
2c470 6f 69 64 20 73 71 6c 69 74 65 33 41 74 74 61 63  oid sqlite3Attac
2c480 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  h(Parse*, Expr*,
2c490 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a   Expr*, Expr*);.
2c4a0 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 74 61  void sqlite3Deta
2c4b0 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  ch(Parse*, Expr*
2c4c0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46  );.void sqlite3F
2c4d0 69 78 49 6e 69 74 28 44 62 46 69 78 65 72 2a 2c  ixInit(DbFixer*,
2c4e0 20 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 63 6f   Parse*, int, co
2c4f0 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
2c500 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
2c510 6c 69 74 65 33 46 69 78 53 72 63 4c 69 73 74 28  lite3FixSrcList(
2c520 44 62 46 69 78 65 72 2a 2c 20 53 72 63 4c 69 73  DbFixer*, SrcLis
2c530 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
2c540 46 69 78 53 65 6c 65 63 74 28 44 62 46 69 78 65  FixSelect(DbFixe
2c550 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e  r*, Select*);.in
2c560 74 20 73 71 6c 69 74 65 33 46 69 78 45 78 70 72  t sqlite3FixExpr
2c570 28 44 62 46 69 78 65 72 2a 2c 20 45 78 70 72 2a  (DbFixer*, Expr*
2c580 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
2c590 78 45 78 70 72 4c 69 73 74 28 44 62 46 69 78 65  xExprList(DbFixe
2c5a0 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a  r*, ExprList*);.
2c5b0 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 54 72  int sqlite3FixTr
2c5c0 69 67 67 65 72 53 74 65 70 28 44 62 46 69 78 65  iggerStep(DbFixe
2c5d0 72 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a  r*, TriggerStep*
2c5e0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74  );.int sqlite3At
2c5f0 6f 46 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  oF(const char *z
2c600 2c 20 64 6f 75 62 6c 65 2a 2c 20 69 6e 74 2c 20  , double*, int, 
2c610 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  u8);.int sqlite3
2c620 47 65 74 49 6e 74 33 32 28 63 6f 6e 73 74 20 63  GetInt32(const c
2c630 68 61 72 20 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e  har *, int*);.in
2c640 74 20 73 71 6c 69 74 65 33 41 74 6f 69 28 63 6f  t sqlite3Atoi(co
2c650 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 69 66 6e  nst char*);.#ifn
2c660 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2c670 55 54 46 31 36 0a 69 6e 74 20 73 71 6c 69 74 65  UTF16.int sqlite
2c680 33 55 74 66 31 36 42 79 74 65 4c 65 6e 28 63 6f  3Utf16ByteLen(co
2c690 6e 73 74 20 76 6f 69 64 20 2a 70 44 61 74 61 2c  nst void *pData,
2c6a0 20 69 6e 74 20 6e 43 68 61 72 29 3b 0a 23 65 6e   int nChar);.#en
2c6b0 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 55  dif.int sqlite3U
2c6c0 74 66 38 43 68 61 72 4c 65 6e 28 63 6f 6e 73 74  tf8CharLen(const
2c6d0 20 63 68 61 72 20 2a 70 44 61 74 61 2c 20 69 6e   char *pData, in
2c6e0 74 20 6e 42 79 74 65 29 3b 0a 75 33 32 20 73 71  t nByte);.u32 sq
2c6f0 6c 69 74 65 33 55 74 66 38 52 65 61 64 28 63 6f  lite3Utf8Read(co
2c700 6e 73 74 20 75 38 2a 2a 29 3b 0a 4c 6f 67 45 73  nst u8**);.LogEs
2c710 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 28  t sqlite3LogEst(
2c720 75 36 34 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c  u64);.LogEst sql
2c730 69 74 65 33 4c 6f 67 45 73 74 41 64 64 28 4c 6f  ite3LogEstAdd(Lo
2c740 67 45 73 74 2c 4c 6f 67 45 73 74 29 3b 0a 23 69  gEst,LogEst);.#i
2c750 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2c760 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 4c  T_VIRTUALTABLE.L
2c770 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67  ogEst sqlite3Log
2c780 45 73 74 46 72 6f 6d 44 6f 75 62 6c 65 28 64 6f  EstFromDouble(do
2c790 75 62 6c 65 29 3b 0a 23 65 6e 64 69 66 0a 23 69  uble);.#endif.#i
2c7a0 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
2c7b0 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41  _ENABLE_STMT_SCA
2c7c0 4e 53 54 41 54 55 53 29 20 7c 7c 20 5c 0a 20 20  NSTATUS) || \.  
2c7d0 20 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45    defined(SQLITE
2c7e0 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52  _ENABLE_STAT3_OR
2c7f0 5f 53 54 41 54 34 29 20 7c 7c 20 5c 0a 20 20 20  _STAT4) || \.   
2c800 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
2c810 45 58 50 4c 41 49 4e 5f 45 53 54 49 4d 41 54 45  EXPLAIN_ESTIMATE
2c820 44 5f 52 4f 57 53 29 0a 75 36 34 20 73 71 6c 69  D_ROWS).u64 sqli
2c830 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74 28 4c  te3LogEstToInt(L
2c840 6f 67 45 73 74 29 3b 0a 23 65 6e 64 69 66 0a 56  ogEst);.#endif.V
2c850 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 56 4c 69  List *sqlite3VLi
2c860 73 74 41 64 64 28 73 71 6c 69 74 65 33 2a 2c 56  stAdd(sqlite3*,V
2c870 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72  List*,const char
2c880 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 63 6f 6e 73  *,int,int);.cons
2c890 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 56  t char *sqlite3V
2c8a0 4c 69 73 74 4e 75 6d 54 6f 4e 61 6d 65 28 56 4c  ListNumToName(VL
2c8b0 69 73 74 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73  ist*,int);.int s
2c8c0 71 6c 69 74 65 33 56 4c 69 73 74 4e 61 6d 65 54  qlite3VListNameT
2c8d0 6f 4e 75 6d 28 56 4c 69 73 74 2a 2c 63 6f 6e 73  oNum(VList*,cons
2c8e0 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 0a 2f  t char*,int);../
2c8f0 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65 73 20 74 6f  *.** Routines to
2c900 20 72 65 61 64 20 61 6e 64 20 77 72 69 74 65 20   read and write 
2c910 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20  variable-length 
2c920 69 6e 74 65 67 65 72 73 2e 20 20 54 68 65 73 65  integers.  These
2c930 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20 64   used to.** be d
2c940 65 66 69 6e 65 64 20 6c 6f 63 61 6c 6c 79 2c 20  efined locally, 
2c950 62 75 74 20 6e 6f 77 20 77 65 20 75 73 65 20 74  but now we use t
2c960 68 65 20 76 61 72 69 6e 74 20 72 6f 75 74 69 6e  he varint routin
2c970 65 73 20 69 6e 20 74 68 65 20 75 74 69 6c 2e 63  es in the util.c
2c980 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2f 0a 69 6e 74  .** file..*/.int
2c990 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e   sqlite3PutVarin
2c9a0 74 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a  t(unsigned char*
2c9b0 2c 20 75 36 34 29 3b 0a 75 38 20 73 71 6c 69 74  , u64);.u8 sqlit
2c9c0 65 33 47 65 74 56 61 72 69 6e 74 28 63 6f 6e 73  e3GetVarint(cons
2c9d0 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
2c9e0 2a 2c 20 75 36 34 20 2a 29 3b 0a 75 38 20 73 71  *, u64 *);.u8 sq
2c9f0 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 33 32  lite3GetVarint32
2ca00 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20  (const unsigned 
2ca10 63 68 61 72 20 2a 2c 20 75 33 32 20 2a 29 3b 0a  char *, u32 *);.
2ca20 69 6e 74 20 73 71 6c 69 74 65 33 56 61 72 69 6e  int sqlite3Varin
2ca30 74 4c 65 6e 28 75 36 34 20 76 29 3b 0a 0a 2f 2a  tLen(u64 v);../*
2ca40 0a 2a 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e 20 63  .** The common c
2ca50 61 73 65 20 69 73 20 66 6f 72 20 61 20 76 61 72  ase is for a var
2ca60 69 6e 74 20 74 6f 20 62 65 20 61 20 73 69 6e 67  int to be a sing
2ca70 6c 65 20 62 79 74 65 2e 20 20 54 68 65 79 20 66  le byte.  They f
2ca80 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 6d 61 63 72  ollowing.** macr
2ca90 6f 73 20 68 61 6e 64 6c 65 20 74 68 65 20 63 6f  os handle the co
2caa0 6d 6d 6f 6e 20 63 61 73 65 20 77 69 74 68 6f 75  mmon case withou
2cab0 74 20 61 20 70 72 6f 63 65 64 75 72 65 20 63 61  t a procedure ca
2cac0 6c 6c 2c 20 62 75 74 20 74 68 65 6e 20 63 61 6c  ll, but then cal
2cad0 6c 0a 2a 2a 20 74 68 65 20 70 72 6f 63 65 64 75  l.** the procedu
2cae0 72 65 20 66 6f 72 20 6c 61 72 67 65 72 20 76 61  re for larger va
2caf0 72 69 6e 74 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  rints..*/.#defin
2cb00 65 20 67 65 74 56 61 72 69 6e 74 33 32 28 41 2c  e getVarint32(A,
2cb10 42 29 20 20 5c 0a 20 20 28 75 38 29 28 28 2a 28  B)  \.  (u8)((*(
2cb20 41 29 3c 28 75 38 29 30 78 38 30 29 3f 28 28 42  A)<(u8)0x80)?((B
2cb30 29 3d 28 75 33 32 29 2a 28 41 29 29 2c 31 3a 73  )=(u32)*(A)),1:s
2cb40 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 33  qlite3GetVarint3
2cb50 32 28 28 41 29 2c 28 75 33 32 20 2a 29 26 28 42  2((A),(u32 *)&(B
2cb60 29 29 29 0a 23 64 65 66 69 6e 65 20 70 75 74 56  ))).#define putV
2cb70 61 72 69 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a  arint32(A,B)  \.
2cb80 20 20 28 75 38 29 28 28 28 75 33 32 29 28 42 29    (u8)(((u32)(B)
2cb90 3c 28 75 33 32 29 30 78 38 30 29 3f 28 2a 28 41  <(u32)0x80)?(*(A
2cba0 29 3d 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  )=(unsigned char
2cbb0 29 28 42 29 29 2c 31 3a 5c 0a 20 20 73 71 6c 69  )(B)),1:\.  sqli
2cbc0 74 65 33 50 75 74 56 61 72 69 6e 74 28 28 41 29  te3PutVarint((A)
2cbd0 2c 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20 67  ,(B))).#define g
2cbe0 65 74 56 61 72 69 6e 74 20 20 20 20 73 71 6c 69  etVarint    sqli
2cbf0 74 65 33 47 65 74 56 61 72 69 6e 74 0a 23 64 65  te3GetVarint.#de
2cc00 66 69 6e 65 20 70 75 74 56 61 72 69 6e 74 20 20  fine putVarint  
2cc10 20 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69    sqlite3PutVari
2cc20 6e 74 0a 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20  nt...const char 
2cc30 2a 73 71 6c 69 74 65 33 49 6e 64 65 78 41 66 66  *sqlite3IndexAff
2cc40 69 6e 69 74 79 53 74 72 28 73 71 6c 69 74 65 33  inityStr(sqlite3
2cc50 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64  *, Index*);.void
2cc60 20 73 71 6c 69 74 65 33 54 61 62 6c 65 41 66 66   sqlite3TableAff
2cc70 69 6e 69 74 79 28 56 64 62 65 2a 2c 20 54 61 62  inity(Vdbe*, Tab
2cc80 6c 65 2a 2c 20 69 6e 74 29 3b 0a 63 68 61 72 20  le*, int);.char 
2cc90 73 71 6c 69 74 65 33 43 6f 6d 70 61 72 65 41 66  sqlite3CompareAf
2cca0 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70 45 78  finity(Expr *pEx
2ccb0 70 72 2c 20 63 68 61 72 20 61 66 66 32 29 3b 0a  pr, char aff2);.
2ccc0 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 64 65 78  int sqlite3Index
2ccd0 41 66 66 69 6e 69 74 79 4f 6b 28 45 78 70 72 20  AffinityOk(Expr 
2cce0 2a 70 45 78 70 72 2c 20 63 68 61 72 20 69 64 78  *pExpr, char idx
2ccf0 5f 61 66 66 69 6e 69 74 79 29 3b 0a 63 68 61 72  _affinity);.char
2cd00 20 73 71 6c 69 74 65 33 54 61 62 6c 65 43 6f 6c   sqlite3TableCol
2cd10 75 6d 6e 41 66 66 69 6e 69 74 79 28 54 61 62 6c  umnAffinity(Tabl
2cd20 65 2a 2c 69 6e 74 29 3b 0a 63 68 61 72 20 73 71  e*,int);.char sq
2cd30 6c 69 74 65 33 45 78 70 72 41 66 66 69 6e 69 74  lite3ExprAffinit
2cd40 79 28 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a  y(Expr *pExpr);.
2cd50 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 69 36  int sqlite3Atoi6
2cd60 34 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69  4(const char*, i
2cd70 36 34 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69  64*, int, u8);.i
2cd80 6e 74 20 73 71 6c 69 74 65 33 44 65 63 4f 72 48  nt sqlite3DecOrH
2cd90 65 78 54 6f 49 36 34 28 63 6f 6e 73 74 20 63 68  exToI64(const ch
2cda0 61 72 2a 2c 20 69 36 34 2a 29 3b 0a 76 6f 69 64  ar*, i64*);.void
2cdb0 20 73 71 6c 69 74 65 33 45 72 72 6f 72 57 69 74   sqlite3ErrorWit
2cdc0 68 4d 73 67 28 73 71 6c 69 74 65 33 2a 2c 20 69  hMsg(sqlite3*, i
2cdd0 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  nt, const char*,
2cde0 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ...);.void sqlit
2cdf0 65 33 45 72 72 6f 72 28 73 71 6c 69 74 65 33 2a  e3Error(sqlite3*
2ce00 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
2ce10 74 65 33 53 79 73 74 65 6d 45 72 72 6f 72 28 73  te3SystemError(s
2ce20 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f  qlite3*,int);.vo
2ce30 69 64 20 2a 73 71 6c 69 74 65 33 48 65 78 54 6f  id *sqlite3HexTo
2ce40 42 6c 6f 62 28 73 71 6c 69 74 65 33 2a 2c 20 63  Blob(sqlite3*, c
2ce50 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e  onst char *z, in
2ce60 74 20 6e 29 3b 0a 75 38 20 73 71 6c 69 74 65 33  t n);.u8 sqlite3
2ce70 48 65 78 54 6f 49 6e 74 28 69 6e 74 20 68 29 3b  HexToInt(int h);
2ce80 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 77 6f 50  .int sqlite3TwoP
2ce90 61 72 74 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c  artName(Parse *,
2cea0 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20   Token *, Token 
2ceb0 2a 2c 20 54 6f 6b 65 6e 20 2a 2a 29 3b 0a 0a 23  *, Token **);..#
2cec0 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
2ced0 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45 29  E_NEED_ERR_NAME)
2cee0 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c  .const char *sql
2cef0 69 74 65 33 45 72 72 4e 61 6d 65 28 69 6e 74 29  ite3ErrName(int)
2cf00 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  ;.#endif..#ifdef
2cf10 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 44   SQLITE_ENABLE_D
2cf20 45 53 45 52 49 41 4c 49 5a 45 0a 69 6e 74 20 73  ESERIALIZE.int s
2cf30 71 6c 69 74 65 33 4d 65 6d 64 62 49 6e 69 74 28  qlite3MemdbInit(
2cf40 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 63  void);.#endif..c
2cf50 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74  onst char *sqlit
2cf60 65 33 45 72 72 53 74 72 28 69 6e 74 29 3b 0a 69  e3ErrStr(int);.i
2cf70 6e 74 20 73 71 6c 69 74 65 33 52 65 61 64 53 63  nt sqlite3ReadSc
2cf80 68 65 6d 61 28 50 61 72 73 65 20 2a 70 50 61 72  hema(Parse *pPar
2cf90 73 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71  se);.CollSeq *sq
2cfa0 6c 69 74 65 33 46 69 6e 64 43 6f 6c 6c 53 65 71  lite3FindCollSeq
2cfb0 28 73 71 6c 69 74 65 33 2a 2c 75 38 20 65 6e 63  (sqlite3*,u8 enc
2cfc0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e  , const char*,in
2cfd0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  t);.int sqlite3I
2cfe0 73 42 69 6e 61 72 79 28 63 6f 6e 73 74 20 43 6f  sBinary(const Co
2cff0 6c 6c 53 65 71 2a 29 3b 0a 43 6f 6c 6c 53 65 71  llSeq*);.CollSeq
2d000 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 43   *sqlite3LocateC
2d010 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70 50  ollSeq(Parse *pP
2d020 61 72 73 65 2c 20 63 6f 6e 73 74 20 63 68 61 72  arse, const char
2d030 2a 7a 4e 61 6d 65 29 3b 0a 43 6f 6c 6c 53 65 71  *zName);.CollSeq
2d040 20 2a 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6c   *sqlite3ExprCol
2d050 6c 53 65 71 28 50 61 72 73 65 20 2a 70 50 61 72  lSeq(Parse *pPar
2d060 73 65 2c 20 45 78 70 72 20 2a 70 45 78 70 72 29  se, Expr *pExpr)
2d070 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74  ;.CollSeq *sqlit
2d080 65 33 45 78 70 72 4e 4e 43 6f 6c 6c 53 65 71 28  e3ExprNNCollSeq(
2d090 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45  Parse *pParse, E
2d0a0 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74  xpr *pExpr);.int
2d0b0 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6c 6c   sqlite3ExprColl
2d0c0 53 65 71 4d 61 74 63 68 28 50 61 72 73 65 2a 2c  SeqMatch(Parse*,
2d0d0 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 45 78  Expr*,Expr*);.Ex
2d0e0 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41  pr *sqlite3ExprA
2d0f0 64 64 43 6f 6c 6c 61 74 65 54 6f 6b 65 6e 28 50  ddCollateToken(P
2d100 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78  arse *pParse, Ex
2d110 70 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e  pr*, const Token
2d120 2a 2c 20 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73  *, int);.Expr *s
2d130 71 6c 69 74 65 33 45 78 70 72 41 64 64 43 6f 6c  qlite3ExprAddCol
2d140 6c 61 74 65 53 74 72 69 6e 67 28 50 61 72 73 65  lateString(Parse
2d150 2a 2c 45 78 70 72 2a 2c 63 6f 6e 73 74 20 63 68  *,Expr*,const ch
2d160 61 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  ar*);.Expr *sqli
2d170 74 65 33 45 78 70 72 53 6b 69 70 43 6f 6c 6c 61  te3ExprSkipColla
2d180 74 65 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  te(Expr*);.int s
2d190 71 6c 69 74 65 33 43 68 65 63 6b 43 6f 6c 6c 53  qlite3CheckCollS
2d1a0 65 71 28 50 61 72 73 65 20 2a 2c 20 43 6f 6c 6c  eq(Parse *, Coll
2d1b0 53 65 71 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Seq *);.int sqli
2d1c0 74 65 33 57 72 69 74 61 62 6c 65 53 63 68 65 6d  te3WritableSchem
2d1d0 61 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74  a(sqlite3*);.int
2d1e0 20 73 71 6c 69 74 65 33 43 68 65 63 6b 4f 62 6a   sqlite3CheckObj
2d1f0 65 63 74 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c  ectName(Parse *,
2d200 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a   const char *);.
2d210 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62 65  void sqlite3Vdbe
2d220 53 65 74 43 68 61 6e 67 65 73 28 73 71 6c 69 74  SetChanges(sqlit
2d230 65 33 20 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  e3 *, int);.int 
2d240 73 71 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28  sqlite3AddInt64(
2d250 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73  i64*,i64);.int s
2d260 71 6c 69 74 65 33 53 75 62 49 6e 74 36 34 28 69  qlite3SubInt64(i
2d270 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71  64*,i64);.int sq
2d280 6c 69 74 65 33 4d 75 6c 49 6e 74 36 34 28 69 36  lite3MulInt64(i6
2d290 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c  4*,i64);.int sql
2d2a0 69 74 65 33 41 62 73 49 6e 74 33 32 28 69 6e 74  ite3AbsInt32(int
2d2b0 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
2d2c0 5f 45 4e 41 42 4c 45 5f 38 5f 33 5f 4e 41 4d 45  _ENABLE_8_3_NAME
2d2d0 53 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69  S.void sqlite3Fi
2d2e0 6c 65 53 75 66 66 69 78 33 28 63 6f 6e 73 74 20  leSuffix3(const 
2d2f0 63 68 61 72 2a 2c 20 63 68 61 72 2a 29 3b 0a 23  char*, char*);.#
2d300 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
2d310 6c 69 74 65 33 46 69 6c 65 53 75 66 66 69 78 33  lite3FileSuffix3
2d320 28 58 2c 59 29 0a 23 65 6e 64 69 66 0a 75 38 20  (X,Y).#endif.u8 
2d330 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61  sqlite3GetBoolea
2d340 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c  n(const char *z,
2d350 75 38 29 3b 0a 0a 63 6f 6e 73 74 20 76 6f 69 64  u8);..const void
2d360 20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65 54 65   *sqlite3ValueTe
2d370 78 74 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  xt(sqlite3_value
2d380 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69  *, u8);.int sqli
2d390 74 65 33 56 61 6c 75 65 42 79 74 65 73 28 73 71  te3ValueBytes(sq
2d3a0 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38  lite3_value*, u8
2d3b0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
2d3c0 61 6c 75 65 53 65 74 53 74 72 28 73 71 6c 69 74  alueSetStr(sqlit
2d3d0 65 33 5f 76 61 6c 75 65 2a 2c 20 69 6e 74 2c 20  e3_value*, int, 
2d3e0 63 6f 6e 73 74 20 76 6f 69 64 20 2a 2c 75 38 2c  const void *,u8,
2d3f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d400 20 20 20 20 20 20 20 20 20 76 6f 69 64 28 2a 29           void(*)
2d410 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69 64 20 73  (void*));.void s
2d420 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74 4e 75  qlite3ValueSetNu
2d430 6c 6c 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ll(sqlite3_value
2d440 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2d450 56 61 6c 75 65 46 72 65 65 28 73 71 6c 69 74 65  ValueFree(sqlite
2d460 33 5f 76 61 6c 75 65 2a 29 3b 0a 73 71 6c 69 74  3_value*);.sqlit
2d470 65 33 5f 76 61 6c 75 65 20 2a 73 71 6c 69 74 65  e3_value *sqlite
2d480 33 56 61 6c 75 65 4e 65 77 28 73 71 6c 69 74 65  3ValueNew(sqlite
2d490 33 20 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  3 *);.#ifndef SQ
2d4a0 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a  LITE_OMIT_UTF16.
2d4b0 63 68 61 72 20 2a 73 71 6c 69 74 65 33 55 74 66  char *sqlite3Utf
2d4c0 31 36 74 6f 38 28 73 71 6c 69 74 65 33 20 2a 2c  16to8(sqlite3 *,
2d4d0 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e   const void*, in
2d4e0 74 2c 20 75 38 29 3b 0a 23 65 6e 64 69 66 0a 69  t, u8);.#endif.i
2d4f0 6e 74 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46  nt sqlite3ValueF
2d500 72 6f 6d 45 78 70 72 28 73 71 6c 69 74 65 33 20  romExpr(sqlite3 
2d510 2a 2c 20 45 78 70 72 20 2a 2c 20 75 38 2c 20 75  *, Expr *, u8, u
2d520 38 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  8, sqlite3_value
2d530 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   **);.void sqlit
2d540 65 33 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69  e3ValueApplyAffi
2d550 6e 69 74 79 28 73 71 6c 69 74 65 33 5f 76 61 6c  nity(sqlite3_val
2d560 75 65 20 2a 2c 20 75 38 2c 20 75 38 29 3b 0a 23  ue *, u8, u8);.#
2d570 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 41 4d  ifndef SQLITE_AM
2d580 41 4c 47 41 4d 41 54 49 4f 4e 0a 65 78 74 65 72  ALGAMATION.exter
2d590 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  n const unsigned
2d5a0 20 63 68 61 72 20 73 71 6c 69 74 65 33 4f 70 63   char sqlite3Opc
2d5b0 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d 3b 0a 65  odeProperty[];.e
2d5c0 78 74 65 72 6e 20 63 6f 6e 73 74 20 63 68 61 72  xtern const char
2d5d0 20 73 71 6c 69 74 65 33 53 74 72 42 49 4e 41 52   sqlite3StrBINAR
2d5e0 59 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73  Y[];.extern cons
2d5f0 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
2d600 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f  sqlite3UpperToLo
2d610 77 65 72 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f  wer[];.extern co
2d620 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
2d630 72 20 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61  r sqlite3CtypeMa
2d640 70 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73  p[];.extern cons
2d650 74 20 54 6f 6b 65 6e 20 73 71 6c 69 74 65 33 49  t Token sqlite3I
2d660 6e 74 54 6f 6b 65 6e 73 5b 5d 3b 0a 65 78 74 65  ntTokens[];.exte
2d670 72 6e 20 53 51 4c 49 54 45 5f 57 53 44 20 73 74  rn SQLITE_WSD st
2d680 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66  ruct Sqlite3Conf
2d690 69 67 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67  ig sqlite3Config
2d6a0 3b 0a 65 78 74 65 72 6e 20 46 75 6e 63 44 65 66  ;.extern FuncDef
2d6b0 48 61 73 68 20 73 71 6c 69 74 65 33 42 75 69 6c  Hash sqlite3Buil
2d6c0 74 69 6e 46 75 6e 63 74 69 6f 6e 73 3b 0a 23 69  tinFunctions;.#i
2d6d0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2d6e0 54 5f 57 53 44 0a 65 78 74 65 72 6e 20 69 6e 74  T_WSD.extern int
2d6f0 20 73 71 6c 69 74 65 33 50 65 6e 64 69 6e 67 42   sqlite3PendingB
2d700 79 74 65 3b 0a 23 65 6e 64 69 66 0a 23 65 6e 64  yte;.#endif.#end
2d710 69 66 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50  if.#ifdef VDBE_P
2d720 52 4f 46 49 4c 45 0a 65 78 74 65 72 6e 20 73 71  ROFILE.extern sq
2d730 6c 69 74 65 33 5f 75 69 6e 74 36 34 20 73 71 6c  lite3_uint64 sql
2d740 69 74 65 33 4e 50 72 6f 66 69 6c 65 43 6e 74 3b  ite3NProfileCnt;
2d750 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
2d760 69 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65  ite3RootPageMove
2d770 64 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c  d(sqlite3*, int,
2d780 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
2d790 20 73 71 6c 69 74 65 33 52 65 69 6e 64 65 78 28   sqlite3Reindex(
2d7a0 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Parse*, Token*, 
2d7b0 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
2d7c0 6c 69 74 65 33 41 6c 74 65 72 46 75 6e 63 74 69  lite3AlterFuncti
2d7d0 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20  ons(void);.void 
2d7e0 73 71 6c 69 74 65 33 41 6c 74 65 72 52 65 6e 61  sqlite3AlterRena
2d7f0 6d 65 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20  meTable(Parse*, 
2d800 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a  SrcList*, Token*
2d810 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
2d820 6c 74 65 72 52 65 6e 61 6d 65 43 6f 6c 75 6d 6e  lterRenameColumn
2d830 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
2d840 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
2d850 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47  *);.int sqlite3G
2d860 65 74 54 6f 6b 65 6e 28 63 6f 6e 73 74 20 75 6e  etToken(const un
2d870 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 69  signed char *, i
2d880 6e 74 20 2a 29 3b 0a 23 69 66 64 65 66 20 53 51  nt *);.#ifdef SQ
2d890 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4e 4f 52 4d  LITE_ENABLE_NORM
2d8a0 41 4c 49 5a 45 0a 69 6e 74 20 73 71 6c 69 74 65  ALIZE.int sqlite
2d8b0 33 47 65 74 54 6f 6b 65 6e 4e 6f 72 6d 61 6c 69  3GetTokenNormali
2d8c0 7a 65 64 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e  zed(const unsign
2d8d0 65 64 20 63 68 61 72 20 2a 2c 20 69 6e 74 20 2a  ed char *, int *
2d8e0 2c 20 69 6e 74 20 2a 29 3b 0a 23 65 6e 64 69 66  , int *);.#endif
2d8f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4e 65 73  .void sqlite3Nes
2d900 74 65 64 50 61 72 73 65 28 50 61 72 73 65 2a 2c  tedParse(Parse*,
2d910 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e   const char*, ..
2d920 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .);.void sqlite3
2d930 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74  ExpirePreparedSt
2d940 61 74 65 6d 65 6e 74 73 28 73 71 6c 69 74 65 33  atements(sqlite3
2d950 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
2d960 69 74 65 33 43 6f 64 65 53 75 62 73 65 6c 65 63  ite3CodeSubselec
2d970 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 20 2a  t(Parse*, Expr *
2d980 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
2d990 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 50  d sqlite3SelectP
2d9a0 72 65 70 28 50 61 72 73 65 2a 2c 20 53 65 6c 65  rep(Parse*, Sele
2d9b0 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74  ct*, NameContext
2d9c0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2d9d0 53 65 6c 65 63 74 57 72 6f 6e 67 4e 75 6d 54 65  SelectWrongNumTe
2d9e0 72 6d 73 45 72 72 6f 72 28 50 61 72 73 65 20 2a  rmsError(Parse *
2d9f0 70 50 61 72 73 65 2c 20 53 65 6c 65 63 74 20 2a  pParse, Select *
2da00 70 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d  p);.int sqlite3M
2da10 61 74 63 68 53 70 61 6e 4e 61 6d 65 28 63 6f 6e  atchSpanName(con
2da20 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
2da30 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
2da40 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  r*, const char*)
2da50 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73  ;.int sqlite3Res
2da60 6f 6c 76 65 45 78 70 72 4e 61 6d 65 73 28 4e 61  olveExprNames(Na
2da70 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72  meContext*, Expr
2da80 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  *);.int sqlite3R
2da90 65 73 6f 6c 76 65 45 78 70 72 4c 69 73 74 4e 61  esolveExprListNa
2daa0 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a  mes(NameContext*
2dab0 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 76 6f  , ExprList*);.vo
2dac0 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76  id sqlite3Resolv
2dad0 65 53 65 6c 65 63 74 4e 61 6d 65 73 28 50 61 72  eSelectNames(Par
2dae0 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61  se*, Select*, Na
2daf0 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f 69  meContext*);.voi
2db00 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65  d sqlite3Resolve
2db10 53 65 6c 66 52 65 66 65 72 65 6e 63 65 28 50 61  SelfReference(Pa
2db20 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c  rse*,Table*,int,
2db30 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 29  Expr*,ExprList*)
2db40 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73  ;.int sqlite3Res
2db50 6f 6c 76 65 4f 72 64 65 72 47 72 6f 75 70 42 79  olveOrderGroupBy
2db60 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a  (Parse*, Select*
2db70 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e  , ExprList*, con
2db80 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
2db90 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 44 65 66  sqlite3ColumnDef
2dba0 61 75 6c 74 28 56 64 62 65 20 2a 2c 20 54 61 62  ault(Vdbe *, Tab
2dbb0 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  le *, int, int);
2dbc0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74  .void sqlite3Alt
2dbd0 65 72 46 69 6e 69 73 68 41 64 64 43 6f 6c 75 6d  erFinishAddColum
2dbe0 6e 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e  n(Parse *, Token
2dbf0 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
2dc00 33 41 6c 74 65 72 42 65 67 69 6e 41 64 64 43 6f  3AlterBeginAddCo
2dc10 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 53 72  lumn(Parse *, Sr
2dc20 63 4c 69 73 74 20 2a 29 3b 0a 76 6f 69 64 20 2a  cList *);.void *
2dc30 73 71 6c 69 74 65 33 52 65 6e 61 6d 65 54 6f 6b  sqlite3RenameTok
2dc40 65 6e 4d 61 70 28 50 61 72 73 65 2a 2c 20 76 6f  enMap(Parse*, vo
2dc50 69 64 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  id*, Token*);.vo
2dc60 69 64 20 73 71 6c 69 74 65 33 52 65 6e 61 6d 65  id sqlite3Rename
2dc70 54 6f 6b 65 6e 52 65 6d 61 70 28 50 61 72 73 65  TokenRemap(Parse
2dc80 2a 2c 20 76 6f 69 64 20 2a 70 54 6f 2c 20 76 6f  *, void *pTo, vo
2dc90 69 64 20 2a 70 46 72 6f 6d 29 3b 0a 76 6f 69 64  id *pFrom);.void
2dca0 20 73 71 6c 69 74 65 33 52 65 6e 61 6d 65 45 78   sqlite3RenameEx
2dcb0 70 72 55 6e 6d 61 70 28 50 61 72 73 65 2a 2c 20  prUnmap(Parse*, 
2dcc0 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
2dcd0 69 74 65 33 52 65 6e 61 6d 65 45 78 70 72 6c 69  ite3RenameExprli
2dce0 73 74 55 6e 6d 61 70 28 50 61 72 73 65 2a 2c 20  stUnmap(Parse*, 
2dcf0 45 78 70 72 4c 69 73 74 2a 29 3b 0a 43 6f 6c 6c  ExprList*);.Coll
2dd00 53 65 71 20 2a 73 71 6c 69 74 65 33 47 65 74 43  Seq *sqlite3GetC
2dd10 6f 6c 6c 53 65 71 28 50 61 72 73 65 2a 2c 20 75  ollSeq(Parse*, u
2dd20 38 2c 20 43 6f 6c 6c 53 65 71 20 2a 2c 20 63 6f  8, CollSeq *, co
2dd30 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68 61 72  nst char*);.char
2dd40 20 73 71 6c 69 74 65 33 41 66 66 69 6e 69 74 79   sqlite3Affinity
2dd50 54 79 70 65 28 63 6f 6e 73 74 20 63 68 61 72 2a  Type(const char*
2dd60 2c 20 43 6f 6c 75 6d 6e 2a 29 3b 0a 76 6f 69 64  , Column*);.void
2dd70 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65 28   sqlite3Analyze(
2dd80 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Parse*, Token*, 
2dd90 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
2dda0 69 74 65 33 49 6e 76 6f 6b 65 42 75 73 79 48 61  ite3InvokeBusyHa
2ddb0 6e 64 6c 65 72 28 42 75 73 79 48 61 6e 64 6c 65  ndler(BusyHandle
2ddc0 72 2a 2c 20 73 71 6c 69 74 65 33 5f 66 69 6c 65  r*, sqlite3_file
2ddd0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
2dde0 69 6e 64 44 62 28 73 71 6c 69 74 65 33 2a 2c 20  indDb(sqlite3*, 
2ddf0 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
2de00 69 74 65 33 46 69 6e 64 44 62 4e 61 6d 65 28 73  ite3FindDbName(s
2de10 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20  qlite3 *, const 
2de20 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c  char *);.int sql
2de30 69 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64  ite3AnalysisLoad
2de40 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 69 44  (sqlite3*,int iD
2de50 42 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  B);.void sqlite3
2de60 44 65 6c 65 74 65 49 6e 64 65 78 53 61 6d 70 6c  DeleteIndexSampl
2de70 65 73 28 73 71 6c 69 74 65 33 2a 2c 49 6e 64 65  es(sqlite3*,Inde
2de80 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  x*);.void sqlite
2de90 33 44 65 66 61 75 6c 74 52 6f 77 45 73 74 28 49  3DefaultRowEst(I
2dea0 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ndex*);.void sql
2deb0 69 74 65 33 52 65 67 69 73 74 65 72 4c 69 6b 65  ite3RegisterLike
2dec0 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65  Functions(sqlite
2ded0 33 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  3*, int);.int sq
2dee0 6c 69 74 65 33 49 73 4c 69 6b 65 46 75 6e 63 74  lite3IsLikeFunct
2def0 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 45 78 70  ion(sqlite3*,Exp
2df00 72 2a 2c 69 6e 74 2a 2c 63 68 61 72 2a 29 3b 0a  r*,int*,char*);.
2df10 76 6f 69 64 20 73 71 6c 69 74 65 33 53 63 68 65  void sqlite3Sche
2df20 6d 61 43 6c 65 61 72 28 76 6f 69 64 20 2a 29 3b  maClear(void *);
2df30 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 63 68  .void sqlite3Sch
2df40 65 6d 61 55 6e 75 73 65 28 73 71 6c 69 74 65 33  emaUnuse(sqlite3
2df50 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
2df60 6c 69 74 65 33 53 63 68 65 6d 61 52 65 75 73 65  lite3SchemaReuse
2df70 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b  (sqlite3*, int);
2df80 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 63 68  .void sqlite3Sch
2df90 65 6d 61 57 72 69 74 61 62 6c 65 28 50 61 72 73  emaWritable(Pars
2dfa0 65 2a 2c 20 69 6e 74 29 3b 0a 53 63 68 65 6d 61  e*, int);.Schema
2dfb0 20 2a 73 71 6c 69 74 65 33 53 63 68 65 6d 61 47   *sqlite3SchemaG
2dfc0 65 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 42 74  et(sqlite3 *, Bt
2dfd0 72 65 65 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ree *);.int sqli
2dfe0 74 65 33 53 63 68 65 6d 61 54 6f 49 6e 64 65 78  te3SchemaToIndex
2dff0 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 53 63  (sqlite3 *db, Sc
2e000 68 65 6d 61 20 2a 29 3b 0a 69 6e 74 20 73 71 6c  hema *);.int sql
2e010 69 74 65 33 53 63 68 65 6d 61 54 6f 49 6e 64 65  ite3SchemaToInde
2e020 78 32 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  x2(sqlite3 *db, 
2e030 53 63 68 65 6d 61 20 2a 2c 20 63 6f 6e 73 74 20  Schema *, const 
2e040 63 68 61 72 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20  char*);.KeyInfo 
2e050 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 41  *sqlite3KeyInfoA
2e060 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e  lloc(sqlite3*,in
2e070 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  t,int);.void sql
2e080 69 74 65 33 4b 65 79 49 6e 66 6f 55 6e 72 65 66  ite3KeyInfoUnref
2e090 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49  (KeyInfo*);.KeyI
2e0a0 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49  nfo *sqlite3KeyI
2e0b0 6e 66 6f 52 65 66 28 4b 65 79 49 6e 66 6f 2a 29  nfoRef(KeyInfo*)
2e0c0 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74  ;.KeyInfo *sqlit
2e0d0 65 33 4b 65 79 49 6e 66 6f 4f 66 49 6e 64 65 78  e3KeyInfoOfIndex
2e0e0 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 29  (Parse*, Index*)
2e0f0 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74  ;.KeyInfo *sqlit
2e100 65 33 4b 65 79 49 6e 66 6f 46 72 6f 6d 45 78 70  e3KeyInfoFromExp
2e110 72 4c 69 73 74 28 50 61 72 73 65 2a 2c 20 45 78  rList(Parse*, Ex
2e120 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e  prList*, int, in
2e130 74 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  t);..#ifdef SQLI
2e140 54 45 5f 44 45 42 55 47 0a 69 6e 74 20 73 71 6c  TE_DEBUG.int sql
2e150 69 74 65 33 4b 65 79 49 6e 66 6f 49 73 57 72 69  ite3KeyInfoIsWri
2e160 74 65 61 62 6c 65 28 4b 65 79 49 6e 66 6f 2a 29  teable(KeyInfo*)
2e170 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c  ;.#endif.int sql
2e180 69 74 65 33 43 72 65 61 74 65 46 75 6e 63 28 73  ite3CreateFunc(s
2e190 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20  qlite3 *, const 
2e1a0 63 68 61 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  char *, int, int
2e1b0 2c 20 76 6f 69 64 20 2a 2c 0a 20 20 76 6f 69 64  , void *,.  void
2e1c0 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e   (*)(sqlite3_con
2e1d0 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
2e1e0 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a 20 20 76  3_value **),.  v
2e1f0 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f  oid (*)(sqlite3_
2e200 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c  context*,int,sql
2e210 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 20  ite3_value **), 
2e220 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69  .  void (*)(sqli
2e230 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a 20  te3_context*),. 
2e240 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65   void (*)(sqlite
2e250 33 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a 20 20 76  3_context*),.  v
2e260 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f  oid (*)(sqlite3_
2e270 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c  context*,int,sql
2e280 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 20  ite3_value **), 
2e290 0a 20 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  .  FuncDestructo
2e2a0 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72 0a 29  r *pDestructor.)
2e2b0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4e 6f  ;.void sqlite3No
2e2c0 6f 70 44 65 73 74 72 75 63 74 6f 72 28 76 6f 69  opDestructor(voi
2e2d0 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  d*);.void sqlite
2e2e0 33 4f 6f 6d 46 61 75 6c 74 28 73 71 6c 69 74 65  3OomFault(sqlite
2e2f0 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  3*);.void sqlite
2e300 33 4f 6f 6d 43 6c 65 61 72 28 73 71 6c 69 74 65  3OomClear(sqlite
2e310 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  3*);.int sqlite3
2e320 41 70 69 45 78 69 74 28 73 71 6c 69 74 65 33 20  ApiExit(sqlite3 
2e330 2a 64 62 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  *db, int);.int s
2e340 71 6c 69 74 65 33 4f 70 65 6e 54 65 6d 70 44 61  qlite3OpenTempDa
2e350 74 61 62 61 73 65 28 50 61 72 73 65 20 2a 29 3b  tabase(Parse *);
2e360 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ..void sqlite3St
2e370 72 41 63 63 75 6d 49 6e 69 74 28 53 74 72 41 63  rAccumInit(StrAc
2e380 63 75 6d 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20  cum*, sqlite3*, 
2e390 63 68 61 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  char*, int, int)
2e3a0 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 53  ;.char *sqlite3S
2e3b0 74 72 41 63 63 75 6d 46 69 6e 69 73 68 28 53 74  trAccumFinish(St
2e3c0 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73  rAccum*);.void s
2e3d0 71 6c 69 74 65 33 53 65 6c 65 63 74 44 65 73 74  qlite3SelectDest
2e3e0 49 6e 69 74 28 53 65 6c 65 63 74 44 65 73 74 2a  Init(SelectDest*
2e3f0 2c 69 6e 74 2c 69 6e 74 29 3b 0a 45 78 70 72 20  ,int,int);.Expr 
2e400 2a 73 71 6c 69 74 65 33 43 72 65 61 74 65 43 6f  *sqlite3CreateCo
2e410 6c 75 6d 6e 45 78 70 72 28 73 71 6c 69 74 65 33  lumnExpr(sqlite3
2e420 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 69   *, SrcList *, i
2e430 6e 74 2c 20 69 6e 74 29 3b 0a 0a 76 6f 69 64 20  nt, int);..void 
2e440 73 71 6c 69 74 65 33 42 61 63 6b 75 70 52 65 73  sqlite3BackupRes
2e450 74 61 72 74 28 73 71 6c 69 74 65 33 5f 62 61 63  tart(sqlite3_bac
2e460 6b 75 70 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  kup *);.void sql
2e470 69 74 65 33 42 61 63 6b 75 70 55 70 64 61 74 65  ite3BackupUpdate
2e480 28 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 20  (sqlite3_backup 
2e490 2a 2c 20 50 67 6e 6f 2c 20 63 6f 6e 73 74 20 75  *, Pgno, const u
2e4a0 38 20 2a 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53  8 *);..#ifndef S
2e4b0 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55  QLITE_OMIT_SUBQU
2e4c0 45 52 59 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  ERY.int sqlite3E
2e4d0 78 70 72 43 68 65 63 6b 49 4e 28 50 61 72 73 65  xprCheckIN(Parse
2e4e0 2a 2c 20 45 78 70 72 2a 29 3b 0a 23 65 6c 73 65  *, Expr*);.#else
2e4f0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2e500 33 45 78 70 72 43 68 65 63 6b 49 4e 28 78 2c 79  3ExprCheckIN(x,y
2e510 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 65 6e 64  ) SQLITE_OK.#end
2e520 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
2e530 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f  E_ENABLE_STAT3_O
2e540 52 5f 53 54 41 54 34 0a 76 6f 69 64 20 73 71 6c  R_STAT4.void sql
2e550 69 74 65 33 41 6e 61 6c 79 7a 65 46 75 6e 63 74  ite3AnalyzeFunct
2e560 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 69 6e 74 20  ions(void);.int 
2e570 73 71 6c 69 74 65 33 53 74 61 74 34 50 72 6f 62  sqlite3Stat4Prob
2e580 65 53 65 74 56 61 6c 75 65 28 0a 20 20 20 20 50  eSetValue(.    P
2e590 61 72 73 65 2a 2c 49 6e 64 65 78 2a 2c 55 6e 70  arse*,Index*,Unp
2e5a0 61 63 6b 65 64 52 65 63 6f 72 64 2a 2a 2c 45 78  ackedRecord**,Ex
2e5b0 70 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2a  pr*,int,int,int*
2e5c0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74  );.int sqlite3St
2e5d0 61 74 34 56 61 6c 75 65 46 72 6f 6d 45 78 70 72  at4ValueFromExpr
2e5e0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
2e5f0 75 38 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  u8, sqlite3_valu
2e600 65 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  e**);.void sqlit
2e610 65 33 53 74 61 74 34 50 72 6f 62 65 46 72 65 65  e3Stat4ProbeFree
2e620 28 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 2a  (UnpackedRecord*
2e630 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74  );.int sqlite3St
2e640 61 74 34 43 6f 6c 75 6d 6e 28 73 71 6c 69 74 65  at4Column(sqlite
2e650 33 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c  3*, const void*,
2e660 20 69 6e 74 2c 20 69 6e 74 2c 20 73 71 6c 69 74   int, int, sqlit
2e670 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 63 68 61  e3_value**);.cha
2e680 72 20 73 71 6c 69 74 65 33 49 6e 64 65 78 43 6f  r sqlite3IndexCo
2e690 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28 73 71 6c  lumnAffinity(sql
2e6a0 69 74 65 33 2a 2c 20 49 6e 64 65 78 2a 2c 20 69  ite3*, Index*, i
2e6b0 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  nt);.#endif../*.
2e6c0 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63 65  ** The interface
2e6d0 20 74 6f 20 74 68 65 20 4c 45 4d 4f 4e 2d 67 65   to the LEMON-ge
2e6e0 6e 65 72 61 74 65 64 20 70 61 72 73 65 72 0a 2a  nerated parser.*
2e6f0 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
2e700 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 20 20  _AMALGAMATION.  
2e710 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61 72  void *sqlite3Par
2e720 73 65 72 41 6c 6c 6f 63 28 76 6f 69 64 2a 28 2a  serAlloc(void*(*
2e730 29 28 75 36 34 29 2c 20 50 61 72 73 65 2a 29 3b  )(u64), Parse*);
2e740 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 50  .  void sqlite3P
2e750 61 72 73 65 72 46 72 65 65 28 76 6f 69 64 2a 2c  arserFree(void*,
2e760 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 29   void(*)(void*))
2e770 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  ;.#endif.void sq
2e780 6c 69 74 65 33 50 61 72 73 65 72 28 76 6f 69 64  lite3Parser(void
2e790 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 29 3b 0a  *, int, Token);.
2e7a0 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73 65  int sqlite3Parse
2e7b0 72 46 61 6c 6c 62 61 63 6b 28 69 6e 74 29 3b 0a  rFallback(int);.
2e7c0 23 69 66 64 65 66 20 59 59 54 52 41 43 4b 4d 41  #ifdef YYTRACKMA
2e7d0 58 53 54 41 43 4b 44 45 50 54 48 0a 20 20 69 6e  XSTACKDEPTH.  in
2e7e0 74 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 53  t sqlite3ParserS
2e7f0 74 61 63 6b 50 65 61 6b 28 76 6f 69 64 2a 29 3b  tackPeak(void*);
2e800 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71  .#endif..void sq
2e810 6c 69 74 65 33 41 75 74 6f 4c 6f 61 64 45 78 74  lite3AutoLoadExt
2e820 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a  ensions(sqlite3*
2e830 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
2e840 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58 54 45  E_OMIT_LOAD_EXTE
2e850 4e 53 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c  NSION.  void sql
2e860 69 74 65 33 43 6c 6f 73 65 45 78 74 65 6e 73 69  ite3CloseExtensi
2e870 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23  ons(sqlite3*);.#
2e880 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
2e890 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65 6e 73  lite3CloseExtens
2e8a0 69 6f 6e 73 28 58 29 0a 23 65 6e 64 69 66 0a 0a  ions(X).#endif..
2e8b0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2e8c0 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45  MIT_SHARED_CACHE
2e8d0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54  .  void sqlite3T
2e8e0 61 62 6c 65 4c 6f 63 6b 28 50 61 72 73 65 20 2a  ableLock(Parse *
2e8f0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 2c 20  , int, int, u8, 
2e900 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 23  const char *);.#
2e910 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
2e920 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28  qlite3TableLock(
2e930 76 2c 77 2c 78 2c 79 2c 7a 29 0a 23 65 6e 64 69  v,w,x,y,z).#endi
2e940 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
2e950 5f 54 45 53 54 0a 20 20 69 6e 74 20 73 71 6c 69  _TEST.  int sqli
2e960 74 65 33 55 74 66 38 54 6f 38 28 75 6e 73 69 67  te3Utf8To8(unsig
2e970 6e 65 64 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64  ned char*);.#end
2e980 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
2e990 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
2e9a0 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20 73 71  BLE.#  define sq
2e9b0 6c 69 74 65 33 56 74 61 62 43 6c 65 61 72 28 59  lite3VtabClear(Y
2e9c0 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  ).#  define sqli
2e9d0 74 65 33 56 74 61 62 53 79 6e 63 28 58 2c 59 29  te3VtabSync(X,Y)
2e9e0 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65   SQLITE_OK.#  de
2e9f0 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
2ea00 52 6f 6c 6c 62 61 63 6b 28 58 29 0a 23 20 20 64  Rollback(X).#  d
2ea10 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
2ea20 62 43 6f 6d 6d 69 74 28 58 29 0a 23 20 20 64 65  bCommit(X).#  de
2ea30 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
2ea40 49 6e 53 79 6e 63 28 64 62 29 20 30 0a 23 20 20  InSync(db) 0.#  
2ea50 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
2ea60 61 62 4c 6f 63 6b 28 58 29 0a 23 20 20 64 65 66  abLock(X).#  def
2ea70 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 55  ine sqlite3VtabU
2ea80 6e 6c 6f 63 6b 28 58 29 0a 23 20 20 64 65 66 69  nlock(X).#  defi
2ea90 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e  ne sqlite3VtabUn
2eaa0 6c 6f 63 6b 4c 69 73 74 28 58 29 0a 23 20 20 64  lockList(X).#  d
2eab0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
2eac0 62 53 61 76 65 70 6f 69 6e 74 28 58 2c 20 59 2c  bSavepoint(X, Y,
2ead0 20 5a 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20   Z) SQLITE_OK.# 
2eae0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47   define sqlite3G
2eaf0 65 74 56 54 61 62 6c 65 28 58 2c 59 29 20 20 28  etVTable(X,Y)  (
2eb00 28 56 54 61 62 6c 65 2a 29 30 29 0a 23 65 6c 73  (VTable*)0).#els
2eb10 65 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65  e.   void sqlite
2eb20 33 56 74 61 62 43 6c 65 61 72 28 73 71 6c 69 74  3VtabClear(sqlit
2eb30 65 33 20 2a 64 62 2c 20 54 61 62 6c 65 2a 29 3b  e3 *db, Table*);
2eb40 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  .   void sqlite3
2eb50 56 74 61 62 44 69 73 63 6f 6e 6e 65 63 74 28 73  VtabDisconnect(s
2eb60 71 6c 69 74 65 33 20 2a 64 62 2c 20 54 61 62 6c  qlite3 *db, Tabl
2eb70 65 20 2a 70 29 3b 0a 20 20 20 69 6e 74 20 73 71  e *p);.   int sq
2eb80 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28 73 71  lite3VtabSync(sq
2eb90 6c 69 74 65 33 20 2a 64 62 2c 20 56 64 62 65 2a  lite3 *db, Vdbe*
2eba0 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65  );.   int sqlite
2ebb0 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28 73 71  3VtabRollback(sq
2ebc0 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 20 69  lite3 *db);.   i
2ebd0 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 6f  nt sqlite3VtabCo
2ebe0 6d 6d 69 74 28 73 71 6c 69 74 65 33 20 2a 64 62  mmit(sqlite3 *db
2ebf0 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  );.   void sqlit
2ec00 65 33 56 74 61 62 4c 6f 63 6b 28 56 54 61 62 6c  e3VtabLock(VTabl
2ec10 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71  e *);.   void sq
2ec20 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28  lite3VtabUnlock(
2ec30 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f  VTable *);.   vo
2ec40 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e  id sqlite3VtabUn
2ec50 6c 6f 63 6b 4c 69 73 74 28 73 71 6c 69 74 65 33  lockList(sqlite3
2ec60 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74  *);.   int sqlit
2ec70 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28  e3VtabSavepoint(
2ec80 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74 2c 20  sqlite3 *, int, 
2ec90 69 6e 74 29 3b 0a 20 20 20 76 6f 69 64 20 73 71  int);.   void sq
2eca0 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45  lite3VtabImportE
2ecb0 72 72 6d 73 67 28 56 64 62 65 2a 2c 20 73 71 6c  rrmsg(Vdbe*, sql
2ecc0 69 74 65 33 5f 76 74 61 62 2a 29 3b 0a 20 20 20  ite3_vtab*);.   
2ecd0 56 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 47  VTable *sqlite3G
2ece0 65 74 56 54 61 62 6c 65 28 73 71 6c 69 74 65 33  etVTable(sqlite3
2ecf0 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 20 4d  *, Table*);.   M
2ed00 6f 64 75 6c 65 20 2a 73 71 6c 69 74 65 33 56 74  odule *sqlite3Vt
2ed10 61 62 43 72 65 61 74 65 4d 6f 64 75 6c 65 28 0a  abCreateModule(.
2ed20 20 20 20 20 20 73 71 6c 69 74 65 33 2a 2c 0a 20       sqlite3*,. 
2ed30 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c      const char*,
2ed40 0a 20 20 20 20 20 63 6f 6e 73 74 20 73 71 6c 69  .     const sqli
2ed50 74 65 33 5f 6d 6f 64 75 6c 65 2a 2c 0a 20 20 20  te3_module*,.   
2ed60 20 20 76 6f 69 64 2a 2c 0a 20 20 20 20 20 76 6f    void*,.     vo
2ed70 69 64 28 2a 29 28 76 6f 69 64 2a 29 0a 20 20 20  id(*)(void*).   
2ed80 29 3b 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  );.#  define sql
2ed90 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63 28 64  ite3VtabInSync(d
2eda0 62 29 20 28 28 64 62 29 2d 3e 6e 56 54 72 61 6e  b) ((db)->nVTran
2edb0 73 3e 30 20 26 26 20 28 64 62 29 2d 3e 61 56 54  s>0 && (db)->aVT
2edc0 72 61 6e 73 3d 3d 30 29 0a 23 65 6e 64 69 66 0a  rans==0).#endif.
2edd0 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 45  int sqlite3VtabE
2ede0 70 6f 6e 79 6d 6f 75 73 54 61 62 6c 65 49 6e 69  ponymousTableIni
2edf0 74 28 50 61 72 73 65 2a 2c 4d 6f 64 75 6c 65 2a  t(Parse*,Module*
2ee00 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
2ee10 74 61 62 45 70 6f 6e 79 6d 6f 75 73 54 61 62 6c  tabEponymousTabl
2ee20 65 43 6c 65 61 72 28 73 71 6c 69 74 65 33 2a 2c  eClear(sqlite3*,
2ee30 4d 6f 64 75 6c 65 2a 29 3b 0a 76 6f 69 64 20 73  Module*);.void s
2ee40 71 6c 69 74 65 33 56 74 61 62 4d 61 6b 65 57 72  qlite3VtabMakeWr
2ee50 69 74 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 61  itable(Parse*,Ta
2ee60 62 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ble*);.void sqli
2ee70 74 65 33 56 74 61 62 42 65 67 69 6e 50 61 72 73  te3VtabBeginPars
2ee80 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  e(Parse*, Token*
2ee90 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
2eea0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
2eeb0 69 74 65 33 56 74 61 62 46 69 6e 69 73 68 50 61  ite3VtabFinishPa
2eec0 72 73 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  rse(Parse*, Toke
2eed0 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
2eee0 33 56 74 61 62 41 72 67 49 6e 69 74 28 50 61 72  3VtabArgInit(Par
2eef0 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
2ef00 65 33 56 74 61 62 41 72 67 45 78 74 65 6e 64 28  e3VtabArgExtend(
2ef10 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Parse*, Token*);
2ef20 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62  .int sqlite3Vtab
2ef30 43 61 6c 6c 43 72 65 61 74 65 28 73 71 6c 69 74  CallCreate(sqlit
2ef40 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20  e3*, int, const 
2ef50 63 68 61 72 20 2a 2c 20 63 68 61 72 20 2a 2a 29  char *, char **)
2ef60 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61  ;.int sqlite3Vta
2ef70 62 43 61 6c 6c 43 6f 6e 6e 65 63 74 28 50 61 72  bCallConnect(Par
2ef80 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 69 6e  se*, Table*);.in
2ef90 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c  t sqlite3VtabCal
2efa0 6c 44 65 73 74 72 6f 79 28 73 71 6c 69 74 65 33  lDestroy(sqlite3
2efb0 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68  *, int, const ch
2efc0 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ar *);.int sqlit
2efd0 65 33 56 74 61 62 42 65 67 69 6e 28 73 71 6c 69  e3VtabBegin(sqli
2efe0 74 65 33 20 2a 2c 20 56 54 61 62 6c 65 20 2a 29  te3 *, VTable *)
2eff0 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c 69 74  ;.FuncDef *sqlit
2f000 65 33 56 74 61 62 4f 76 65 72 6c 6f 61 64 46 75  e3VtabOverloadFu
2f010 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 20 2a  nction(sqlite3 *
2f020 2c 46 75 6e 63 44 65 66 2a 2c 20 69 6e 74 20 6e  ,FuncDef*, int n
2f030 41 72 67 2c 20 45 78 70 72 2a 29 3b 0a 73 71 6c  Arg, Expr*);.sql
2f040 69 74 65 33 5f 69 6e 74 36 34 20 73 71 6c 69 74  ite3_int64 sqlit
2f050 65 33 53 74 6d 74 43 75 72 72 65 6e 74 54 69 6d  e3StmtCurrentTim
2f060 65 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  e(sqlite3_contex
2f070 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
2f080 56 64 62 65 50 61 72 61 6d 65 74 65 72 49 6e 64  VdbeParameterInd
2f090 65 78 28 56 64 62 65 2a 2c 20 63 6f 6e 73 74 20  ex(Vdbe*, const 
2f0a0 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  char*, int);.int
2f0b0 20 73 71 6c 69 74 65 33 54 72 61 6e 73 66 65 72   sqlite3Transfer
2f0c0 42 69 6e 64 69 6e 67 73 28 73 71 6c 69 74 65 33  Bindings(sqlite3
2f0d0 5f 73 74 6d 74 20 2a 2c 20 73 71 6c 69 74 65 33  _stmt *, sqlite3
2f0e0 5f 73 74 6d 74 20 2a 29 3b 0a 76 6f 69 64 20 73  _stmt *);.void s
2f0f0 71 6c 69 74 65 33 50 61 72 73 65 72 52 65 73 65  qlite3ParserRese
2f100 74 28 50 61 72 73 65 2a 29 3b 0a 23 69 66 64 65  t(Parse*);.#ifde
2f110 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
2f120 4e 4f 52 4d 41 4c 49 5a 45 0a 76 6f 69 64 20 73  NORMALIZE.void s
2f130 71 6c 69 74 65 33 4e 6f 72 6d 61 6c 69 7a 65 28  qlite3Normalize(
2f140 56 64 62 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61  Vdbe*, const cha
2f150 72 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 23 65  r*, int, u8);.#e
2f160 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33  ndif.int sqlite3
2f170 52 65 70 72 65 70 61 72 65 28 56 64 62 65 2a 29  Reprepare(Vdbe*)
2f180 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
2f190 70 72 4c 69 73 74 43 68 65 63 6b 4c 65 6e 67 74  prListCheckLengt
2f1a0 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69  h(Parse*, ExprLi
2f1b0 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  st*, const char*
2f1c0 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69  );.CollSeq *sqli
2f1d0 74 65 33 42 69 6e 61 72 79 43 6f 6d 70 61 72 65  te3BinaryCompare
2f1e0 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c  CollSeq(Parse *,
2f1f0 20 45 78 70 72 20 2a 2c 20 45 78 70 72 20 2a 29   Expr *, Expr *)
2f200 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 65 6d  ;.int sqlite3Tem
2f210 70 49 6e 4d 65 6d 6f 72 79 28 63 6f 6e 73 74 20  pInMemory(const 
2f220 73 71 6c 69 74 65 33 2a 29 3b 0a 63 6f 6e 73 74  sqlite3*);.const
2f230 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4a 6f   char *sqlite3Jo
2f240 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e  urnalModename(in
2f250 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  t);.#ifndef SQLI
2f260 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e  TE_OMIT_WAL.  in
2f270 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 70 6f  t sqlite3Checkpo
2f280 69 6e 74 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  int(sqlite3*, in
2f290 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e  t, int, int*, in
2f2a0 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  t*);.  int sqlit
2f2b0 65 33 57 61 6c 44 65 66 61 75 6c 74 48 6f 6f 6b  e3WalDefaultHook
2f2c0 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c  (void*,sqlite3*,
2f2d0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29  const char*,int)
2f2e0 3b 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  ;.#endif.#ifndef
2f2f0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 54 45   SQLITE_OMIT_CTE
2f300 0a 20 20 57 69 74 68 20 2a 73 71 6c 69 74 65 33  .  With *sqlite3
2f310 57 69 74 68 41 64 64 28 50 61 72 73 65 2a 2c 57  WithAdd(Parse*,W
2f320 69 74 68 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72  ith*,Token*,Expr
2f330 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a  List*,Select*);.
2f340 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69    void sqlite3Wi
2f350 74 68 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  thDelete(sqlite3
2f360 2a 2c 57 69 74 68 2a 29 3b 0a 20 20 76 6f 69 64  *,With*);.  void
2f370 20 73 71 6c 69 74 65 33 57 69 74 68 50 75 73 68   sqlite3WithPush
2f380 28 50 61 72 73 65 2a 2c 20 57 69 74 68 2a 2c 20  (Parse*, With*, 
2f390 75 38 29 3b 0a 23 65 6c 73 65 0a 23 64 65 66 69  u8);.#else.#defi
2f3a0 6e 65 20 73 71 6c 69 74 65 33 57 69 74 68 50 75  ne sqlite3WithPu
2f3b0 73 68 28 78 2c 79 2c 7a 29 0a 23 64 65 66 69 6e  sh(x,y,z).#defin
2f3c0 65 20 73 71 6c 69 74 65 33 57 69 74 68 44 65 6c  e sqlite3WithDel
2f3d0 65 74 65 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a  ete(x,y).#endif.
2f3e0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2f3f0 4d 49 54 5f 55 50 53 45 52 54 0a 20 20 55 70 73  MIT_UPSERT.  Ups
2f400 65 72 74 20 2a 73 71 6c 69 74 65 33 55 70 73 65  ert *sqlite3Upse
2f410 72 74 4e 65 77 28 73 71 6c 69 74 65 33 2a 2c 45  rtNew(sqlite3*,E
2f420 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45  xprList*,Expr*,E
2f430 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b  xprList*,Expr*);
2f440 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 55  .  void sqlite3U
2f450 70 73 65 72 74 44 65 6c 65 74 65 28 73 71 6c 69  psertDelete(sqli
2f460 74 65 33 2a 2c 55 70 73 65 72 74 2a 29 3b 0a 20  te3*,Upsert*);. 
2f470 20 55 70 73 65 72 74 20 2a 73 71 6c 69 74 65 33   Upsert *sqlite3
2f480 55 70 73 65 72 74 44 75 70 28 73 71 6c 69 74 65  UpsertDup(sqlite
2f490 33 2a 2c 55 70 73 65 72 74 2a 29 3b 0a 20 20 69  3*,Upsert*);.  i
2f4a0 6e 74 20 73 71 6c 69 74 65 33 55 70 73 65 72 74  nt sqlite3Upsert
2f4b0 41 6e 61 6c 79 7a 65 54 61 72 67 65 74 28 50 61  AnalyzeTarget(Pa
2f4c0 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 55 70  rse*,SrcList*,Up
2f4d0 73 65 72 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73  sert*);.  void s
2f4e0 71 6c 69 74 65 33 55 70 73 65 72 74 44 6f 55 70  qlite3UpsertDoUp
2f4f0 64 61 74 65 28 50 61 72 73 65 2a 2c 55 70 73 65  date(Parse*,Upse
2f500 72 74 2a 2c 54 61 62 6c 65 2a 2c 49 6e 64 65 78  rt*,Table*,Index
2f510 2a 2c 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 23 64  *,int);.#else.#d
2f520 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55 70 73  efine sqlite3Ups
2f530 65 72 74 4e 65 77 28 76 2c 77 2c 78 2c 79 2c 7a  ertNew(v,w,x,y,z
2f540 29 20 28 28 55 70 73 65 72 74 2a 29 30 29 0a 23  ) ((Upsert*)0).#
2f550 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55 70  define sqlite3Up
2f560 73 65 72 74 44 65 6c 65 74 65 28 78 2c 79 29 0a  sertDelete(x,y).
2f570 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55  #define sqlite3U
2f580 70 73 65 72 74 44 75 70 28 78 2c 79 29 20 20 20  psertDup(x,y)   
2f590 20 20 20 20 28 28 55 70 73 65 72 74 2a 29 30 29      ((Upsert*)0)
2f5a0 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20 44 65 63  .#endif.../* Dec
2f5b0 6c 61 72 61 74 69 6f 6e 73 20 66 6f 72 20 66 75  larations for fu
2f5c0 6e 63 74 69 6f 6e 73 20 69 6e 20 66 6b 65 79 2e  nctions in fkey.
2f5d0 63 2e 20 41 6c 6c 20 6f 66 20 74 68 65 73 65 20  c. All of these 
2f5e0 61 72 65 20 72 65 70 6c 61 63 65 64 20 62 79 0a  are replaced by.
2f5f0 2a 2a 20 6e 6f 2d 6f 70 20 6d 61 63 72 6f 73 20  ** no-op macros 
2f600 69 66 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  if OMIT_FOREIGN_
2f610 4b 45 59 20 69 73 20 64 65 66 69 6e 65 64 2e 20  KEY is defined. 
2f620 49 6e 20 74 68 69 73 20 63 61 73 65 20 6e 6f 20  In this case no 
2f630 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 66  foreign.** key f
2f640 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 20  unctionality is 
2f650 61 76 61 69 6c 61 62 6c 65 2e 20 49 66 20 4f 4d  available. If OM
2f660 49 54 5f 54 52 49 47 47 45 52 20 69 73 20 64 65  IT_TRIGGER is de
2f670 66 69 6e 65 64 20 62 75 74 0a 2a 2a 20 4f 4d 49  fined but.** OMI
2f680 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73  T_FOREIGN_KEY is
2f690 20 6e 6f 74 2c 20 6f 6e 6c 79 20 73 6f 6d 65 20   not, only some 
2f6a0 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 73  of the functions
2f6b0 20 61 72 65 20 6e 6f 2d 6f 70 65 64 2e 20 49 6e   are no-oped. In
2f6c0 0a 2a 2a 20 74 68 69 73 20 63 61 73 65 20 66 6f  .** this case fo
2f6d0 72 65 69 67 6e 20 6b 65 79 73 20 61 72 65 20 70  reign keys are p
2f6e0 61 72 73 65 64 2c 20 62 75 74 20 6e 6f 20 6f 74  arsed, but no ot
2f6f0 68 65 72 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74  her functionalit
2f700 79 20 69 73 0a 2a 2a 20 70 72 6f 76 69 64 65 64  y is.** provided
2f710 20 28 65 6e 66 6f 72 63 65 6d 65 6e 74 20 6f 66   (enforcement of
2f720 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20   FK constraints 
2f730 72 65 71 75 69 72 65 73 20 74 68 65 20 74 72 69  requires the tri
2f740 67 67 65 72 73 20 73 75 62 2d 73 79 73 74 65 6d  ggers sub-system
2f750 29 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  )..*/.#if !defin
2f760 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ed(SQLITE_OMIT_F
2f770 4f 52 45 49 47 4e 5f 4b 45 59 29 20 26 26 20 21  OREIGN_KEY) && !
2f780 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
2f790 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 20 20 76  MIT_TRIGGER).  v
2f7a0 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 43 68 65  oid sqlite3FkChe
2f7b0 63 6b 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  ck(Parse*, Table
2f7c0 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
2f7d0 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  *, int);.  void 
2f7e0 73 71 6c 69 74 65 33 46 6b 44 72 6f 70 54 61 62  sqlite3FkDropTab
2f7f0 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  le(Parse*, SrcLi
2f800 73 74 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20  st *, Table*);. 
2f810 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 41   void sqlite3FkA
2f820 63 74 69 6f 6e 73 28 50 61 72 73 65 2a 2c 20 69  ctions(Parse*, i
2f830 6e 74 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72  nt, Table*, Expr
2f840 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2a  List*, int, int*
2f850 2c 20 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71  , int);.  int sq
2f860 6c 69 74 65 33 46 6b 52 65 71 75 69 72 65 64 28  lite3FkRequired(
2f870 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
2f880 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 75 33  int*, int);.  u3
2f890 32 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61  2 sqlite3FkOldma
2f8a0 73 6b 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  sk(Parse*, Table
2f8b0 2a 29 3b 0a 20 20 46 4b 65 79 20 2a 73 71 6c 69  *);.  FKey *sqli
2f8c0 74 65 33 46 6b 52 65 66 65 72 65 6e 63 65 73 28  te3FkReferences(
2f8d0 54 61 62 6c 65 20 2a 29 3b 0a 23 65 6c 73 65 0a  Table *);.#else.
2f8e0 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
2f8f0 33 46 6b 41 63 74 69 6f 6e 73 28 61 2c 62 2c 63  3FkActions(a,b,c
2f900 2c 64 2c 65 2c 66 2c 67 29 0a 20 20 23 64 65 66  ,d,e,f,g).  #def
2f910 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 43 68 65  ine sqlite3FkChe
2f920 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a  ck(a,b,c,d,e,f).
2f930 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
2f940 33 46 6b 44 72 6f 70 54 61 62 6c 65 28 61 2c 62  3FkDropTable(a,b
2f950 2c 63 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ,c).  #define sq
2f960 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 61  lite3FkOldmask(a
2f970 2c 62 29 20 20 20 20 20 20 20 20 20 30 0a 20 20  ,b)         0.  
2f980 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
2f990 6b 52 65 71 75 69 72 65 64 28 61 2c 62 2c 63 2c  kRequired(a,b,c,
2f9a0 64 29 20 20 20 20 30 0a 20 20 23 64 65 66 69 6e  d)    0.  #defin
2f9b0 65 20 73 71 6c 69 74 65 33 46 6b 52 65 66 65 72  e sqlite3FkRefer
2f9c0 65 6e 63 65 73 28 61 29 20 20 20 20 20 20 20 20  ences(a)        
2f9d0 30 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  0.#endif.#ifndef
2f9e0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52   SQLITE_OMIT_FOR
2f9f0 45 49 47 4e 5f 4b 45 59 0a 20 20 76 6f 69 64 20  EIGN_KEY.  void 
2fa00 73 71 6c 69 74 65 33 46 6b 44 65 6c 65 74 65 28  sqlite3FkDelete(
2fa10 73 71 6c 69 74 65 33 20 2a 2c 20 54 61 62 6c 65  sqlite3 *, Table
2fa20 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  *);.  int sqlite
2fa30 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 50  3FkLocateIndex(P
2fa40 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 46 4b 65  arse*,Table*,FKe
2fa50 79 2a 2c 49 6e 64 65 78 2a 2a 2c 69 6e 74 2a 2a  y*,Index**,int**
2fa60 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
2fa70 6e 65 20 73 71 6c 69 74 65 33 46 6b 44 65 6c 65  ne sqlite3FkDele
2fa80 74 65 28 61 2c 62 29 0a 20 20 23 64 65 66 69 6e  te(a,b).  #defin
2fa90 65 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74  e sqlite3FkLocat
2faa0 65 49 6e 64 65 78 28 61 2c 62 2c 63 2c 64 2c 65  eIndex(a,b,c,d,e
2fab0 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a  ).#endif.../*.**
2fac0 20 41 76 61 69 6c 61 62 6c 65 20 66 61 75 6c 74   Available fault
2fad0 20 69 6e 6a 65 63 74 6f 72 73 2e 20 20 53 68 6f   injectors.  Sho
2fae0 75 6c 64 20 62 65 20 6e 75 6d 62 65 72 65 64 20  uld be numbered 
2faf0 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 30  beginning with 0
2fb00 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
2fb10 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f  ITE_FAULTINJECTO
2fb20 52 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 30 0a 23  R_MALLOC     0.#
2fb30 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 41  define SQLITE_FA
2fb40 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 43 4f 55 4e  ULTINJECTOR_COUN
2fb50 54 20 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20  T      1../*.** 
2fb60 54 68 65 20 69 6e 74 65 72 66 61 63 65 20 74 6f  The interface to
2fb70 20 74 68 65 20 63 6f 64 65 20 69 6e 20 66 61 75   the code in fau
2fb80 6c 74 2e 63 20 75 73 65 64 20 66 6f 72 20 69 64  lt.c used for id
2fb90 65 6e 74 69 66 79 69 6e 67 20 22 62 65 6e 69 67  entifying "benig
2fba0 6e 22 0a 2a 2a 20 6d 61 6c 6c 6f 63 20 66 61 69  n".** malloc fai
2fbb0 6c 75 72 65 73 2e 20 54 68 69 73 20 69 73 20 6f  lures. This is o
2fbc0 6e 6c 79 20 70 72 65 73 65 6e 74 20 69 66 20 53  nly present if S
2fbd0 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45  QLITE_UNTESTABLE
2fbe0 0a 2a 2a 20 69 73 20 6e 6f 74 20 64 65 66 69 6e  .** is not defin
2fbf0 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ed..*/.#ifndef S
2fc00 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45  QLITE_UNTESTABLE
2fc10 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 42  .  void sqlite3B
2fc20 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  eginBenignMalloc
2fc30 28 76 6f 69 64 29 3b 0a 20 20 76 6f 69 64 20 73  (void);.  void s
2fc40 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d  qlite3EndBenignM
2fc50 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 23 65 6c  alloc(void);.#el
2fc60 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  se.  #define sql
2fc70 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d  ite3BeginBenignM
2fc80 61 6c 6c 6f 63 28 29 0a 20 20 23 64 65 66 69 6e  alloc().  #defin
2fc90 65 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69  e sqlite3EndBeni
2fca0 67 6e 4d 61 6c 6c 6f 63 28 29 0a 23 65 6e 64 69  gnMalloc().#endi
2fcb0 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64  f../*.** Allowed
2fcc0 20 72 65 74 75 72 6e 20 76 61 6c 75 65 73 20 66   return values f
2fcd0 72 6f 6d 20 73 71 6c 69 74 65 33 46 69 6e 64 49  rom sqlite3FindI
2fce0 6e 49 6e 64 65 78 28 29 0a 2a 2f 0a 23 64 65 66  nIndex().*/.#def
2fcf0 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 52 4f 57  ine IN_INDEX_ROW
2fd00 49 44 20 20 20 20 20 20 20 20 31 20 20 20 2f 2a  ID        1   /*
2fd10 20 53 65 61 72 63 68 20 74 68 65 20 72 6f 77 69   Search the rowi
2fd20 64 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 2a  d of the table *
2fd30 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44  /.#define IN_IND
2fd40 45 58 5f 45 50 48 20 20 20 20 20 20 20 20 20 20  EX_EPH          
2fd50 32 20 20 20 2f 2a 20 53 65 61 72 63 68 20 61 6e  2   /* Search an
2fd60 20 65 70 68 65 6d 65 72 61 6c 20 62 2d 74 72 65   ephemeral b-tre
2fd70 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f  e */.#define IN_
2fd80 49 4e 44 45 58 5f 49 4e 44 45 58 5f 41 53 43 20  INDEX_INDEX_ASC 
2fd90 20 20 20 33 20 20 20 2f 2a 20 45 78 69 73 74 69     3   /* Existi
2fda0 6e 67 20 69 6e 64 65 78 20 41 53 43 45 4e 44 49  ng index ASCENDI
2fdb0 4e 47 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e  NG */.#define IN
2fdc0 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f 44 45 53  _INDEX_INDEX_DES
2fdd0 43 20 20 20 34 20 20 20 2f 2a 20 45 78 69 73 74  C   4   /* Exist
2fde0 69 6e 67 20 69 6e 64 65 78 20 44 45 53 43 45 4e  ing index DESCEN
2fdf0 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e 65 20  DING */.#define 
2fe00 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20 20 20  IN_INDEX_NOOP   
2fe10 20 20 20 20 20 20 35 20 20 20 2f 2a 20 4e 6f 20        5   /* No 
2fe20 74 61 62 6c 65 20 61 76 61 69 6c 61 62 6c 65 2e  table available.
2fe30 20 55 73 65 20 63 6f 6d 70 61 72 69 73 6f 6e 73   Use comparisons
2fe40 20 2a 2f 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65   */./*.** Allowe
2fe50 64 20 66 6c 61 67 73 20 66 6f 72 20 74 68 65 20  d flags for the 
2fe60 33 72 64 20 70 61 72 61 6d 65 74 65 72 20 74 6f  3rd parameter to
2fe70 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e   sqlite3FindInIn
2fe80 64 65 78 28 29 2e 0a 2a 2f 0a 23 64 65 66 69 6e  dex()..*/.#defin
2fe90 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 5f  e IN_INDEX_NOOP_
2fea0 4f 4b 20 20 20 20 20 30 78 30 30 30 31 20 20 2f  OK     0x0001  /
2feb0 2a 20 4f 4b 20 74 6f 20 72 65 74 75 72 6e 20 49  * OK to return I
2fec0 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20 2a 2f 0a  N_INDEX_NOOP */.
2fed0 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58  #define IN_INDEX
2fee0 5f 4d 45 4d 42 45 52 53 48 49 50 20 20 30 78 30  _MEMBERSHIP  0x0
2fef0 30 30 32 20 20 2f 2a 20 49 4e 20 6f 70 65 72 61  002  /* IN opera
2ff00 74 6f 72 20 75 73 65 64 20 66 6f 72 20 6d 65 6d  tor used for mem
2ff10 62 65 72 73 68 69 70 20 74 65 73 74 20 2a 2f 0a  bership test */.
2ff20 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58  #define IN_INDEX
2ff30 5f 4c 4f 4f 50 20 20 20 20 20 20 20 20 30 78 30  _LOOP        0x0
2ff40 30 30 34 20 20 2f 2a 20 49 4e 20 6f 70 65 72 61  004  /* IN opera
2ff50 74 6f 72 20 75 73 65 64 20 61 73 20 61 20 6c 6f  tor used as a lo
2ff60 6f 70 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  op */.int sqlite
2ff70 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 50 61 72  3FindInIndex(Par
2ff80 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75 33  se *, Expr *, u3
2ff90 32 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a  2, int*, int*);.
2ffa0 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72  .int sqlite3Jour
2ffb0 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f  nalOpen(sqlite3_
2ffc0 76 66 73 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  vfs *, const cha
2ffd0 72 20 2a 2c 20 73 71 6c 69 74 65 33 5f 66 69 6c  r *, sqlite3_fil
2ffe0 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  e *, int, int);.
2fff0 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e  int sqlite3Journ
30000 61 6c 53 69 7a 65 28 73 71 6c 69 74 65 33 5f 76  alSize(sqlite3_v
30010 66 73 20 2a 29 3b 0a 23 69 66 20 64 65 66 69 6e  fs *);.#if defin
30020 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
30030 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45 29 20 5c  _ATOMIC_WRITE) \
30040 0a 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c  . || defined(SQL
30050 49 54 45 5f 45 4e 41 42 4c 45 5f 42 41 54 43 48  ITE_ENABLE_BATCH
30060 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45 29 0a 20  _ATOMIC_WRITE). 
30070 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72   int sqlite3Jour
30080 6e 61 6c 43 72 65 61 74 65 28 73 71 6c 69 74 65  nalCreate(sqlite
30090 33 5f 66 69 6c 65 20 2a 29 3b 0a 23 65 6e 64 69  3_file *);.#endi
300a0 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f  f..int sqlite3Jo
300b0 75 72 6e 61 6c 49 73 49 6e 4d 65 6d 6f 72 79 28  urnalIsInMemory(
300c0 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 70 29  sqlite3_file *p)
300d0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65  ;.void sqlite3Me
300e0 6d 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c  mJournalOpen(sql
300f0 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 0a 76  ite3_file *);..v
30100 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 53  oid sqlite3ExprS
30110 65 74 48 65 69 67 68 74 41 6e 64 46 6c 61 67 73  etHeightAndFlags
30120 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20  (Parse *pParse, 
30130 45 78 70 72 20 2a 70 29 3b 0a 23 69 66 20 53 51  Expr *p);.#if SQ
30140 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45  LITE_MAX_EXPR_DE
30150 50 54 48 3e 30 0a 20 20 69 6e 74 20 73 71 6c 69  PTH>0.  int sqli
30160 74 65 33 53 65 6c 65 63 74 45 78 70 72 48 65 69  te3SelectExprHei
30170 67 68 74 28 53 65 6c 65 63 74 20 2a 29 3b 0a 20  ght(Select *);. 
30180 20 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72   int sqlite3Expr
30190 43 68 65 63 6b 48 65 69 67 68 74 28 50 61 72 73  CheckHeight(Pars
301a0 65 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a  e*, int);.#else.
301b0 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
301c0 33 53 65 6c 65 63 74 45 78 70 72 48 65 69 67 68  3SelectExprHeigh
301d0 74 28 78 29 20 30 0a 20 20 23 64 65 66 69 6e 65  t(x) 0.  #define
301e0 20 73 71 6c 69 74 65 33 45 78 70 72 43 68 65 63   sqlite3ExprChec
301f0 6b 48 65 69 67 68 74 28 78 2c 79 29 0a 23 65 6e  kHeight(x,y).#en
30200 64 69 66 0a 0a 75 33 32 20 73 71 6c 69 74 65 33  dif..u32 sqlite3
30210 47 65 74 34 62 79 74 65 28 63 6f 6e 73 74 20 75  Get4byte(const u
30220 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  8*);.void sqlite
30230 33 50 75 74 34 62 79 74 65 28 75 38 2a 2c 20 75  3Put4byte(u8*, u
30240 33 32 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c  32);..#ifdef SQL
30250 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43  ITE_ENABLE_UNLOC
30260 4b 5f 4e 4f 54 49 46 59 0a 20 20 76 6f 69 64 20  K_NOTIFY.  void 
30270 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f  sqlite3Connectio
30280 6e 42 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65 33  nBlocked(sqlite3
30290 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a 29 3b 0a   *, sqlite3 *);.
302a0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f    void sqlite3Co
302b0 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64  nnectionUnlocked
302c0 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20  (sqlite3 *db);. 
302d0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e   void sqlite3Con
302e0 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 73 71  nectionClosed(sq
302f0 6c 69 74 65 33 20 2a 64 62 29 3b 0a 23 65 6c 73  lite3 *db);.#els
30300 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
30310 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f  te3ConnectionBlo
30320 63 6b 65 64 28 78 2c 79 29 0a 20 20 23 64 65 66  cked(x,y).  #def
30330 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65  ine sqlite3Conne
30340 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 78 29  ctionUnlocked(x)
30350 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
30360 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73  e3ConnectionClos
30370 65 64 28 78 29 0a 23 65 6e 64 69 66 0a 0a 23 69  ed(x).#endif..#i
30380 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
30390 47 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  G.  void sqlite3
303a0 50 61 72 73 65 72 54 72 61 63 65 28 46 49 4c 45  ParserTrace(FILE
303b0 2a 2c 20 63 68 61 72 20 2a 29 3b 0a 23 65 6e 64  *, char *);.#end
303c0 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 59  if.#if defined(Y
303d0 59 43 4f 56 45 52 41 47 45 29 0a 20 20 69 6e 74  YCOVERAGE).  int
303e0 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 43 6f   sqlite3ParserCo
303f0 76 65 72 61 67 65 28 46 49 4c 45 2a 29 3b 0a 23  verage(FILE*);.#
30400 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20  endif../*.** If 
30410 74 68 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  the SQLITE_ENABL
30420 45 20 49 4f 54 52 41 43 45 20 65 78 69 73 74 73  E IOTRACE exists
30430 20 74 68 65 6e 20 74 68 65 20 67 6c 6f 62 61 6c   then the global
30440 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 73 71 6c   variable.** sql
30450 69 74 65 33 49 6f 54 72 61 63 65 20 69 73 20 61  ite3IoTrace is a
30460 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 70 72   pointer to a pr
30470 69 6e 74 66 2d 6c 69 6b 65 20 72 6f 75 74 69 6e  intf-like routin
30480 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 70 72 69  e used to.** pri
30490 6e 74 20 49 2f 4f 20 74 72 61 63 69 6e 67 20 6d  nt I/O tracing m
304a0 65 73 73 61 67 65 73 2e 0a 2a 2f 0a 23 69 66 64  essages..*/.#ifd
304b0 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
304c0 5f 49 4f 54 52 41 43 45 0a 23 20 64 65 66 69 6e  _IOTRACE.# defin
304d0 65 20 49 4f 54 52 41 43 45 28 41 29 20 20 69 66  e IOTRACE(A)  if
304e0 28 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65  ( sqlite3IoTrace
304f0 20 29 7b 20 73 71 6c 69 74 65 33 49 6f 54 72 61   ){ sqlite3IoTra
30500 63 65 20 41 3b 20 7d 0a 20 20 76 6f 69 64 20 73  ce A; }.  void s
30510 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61 63  qlite3VdbeIOTrac
30520 65 53 71 6c 28 56 64 62 65 2a 29 3b 0a 53 51 4c  eSql(Vdbe*);.SQL
30530 49 54 45 5f 41 50 49 20 53 51 4c 49 54 45 5f 45  ITE_API SQLITE_E
30540 58 54 45 52 4e 20 76 6f 69 64 20 28 53 51 4c 49  XTERN void (SQLI
30550 54 45 5f 43 44 45 43 4c 20 2a 73 71 6c 69 74 65  TE_CDECL *sqlite
30560 33 49 6f 54 72 61 63 65 29 28 63 6f 6e 73 74 20  3IoTrace)(const 
30570 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23 65 6c 73  char*,...);.#els
30580 65 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41  e.# define IOTRA
30590 43 45 28 41 29 0a 23 20 64 65 66 69 6e 65 20 73  CE(A).# define s
305a0 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61 63  qlite3VdbeIOTrac
305b0 65 53 71 6c 28 58 29 0a 23 65 6e 64 69 66 0a 0a  eSql(X).#endif..
305c0 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 72 6f 75 74  /*.** These rout
305d0 69 6e 65 73 20 61 72 65 20 61 76 61 69 6c 61 62  ines are availab
305e0 6c 65 20 66 6f 72 20 74 68 65 20 6d 65 6d 32 2e  le for the mem2.
305f0 63 20 64 65 62 75 67 67 69 6e 67 20 6d 65 6d 6f  c debugging memo
30600 72 79 20 61 6c 6c 6f 63 61 74 6f 72 0a 2a 2a 20  ry allocator.** 
30610 6f 6e 6c 79 2e 20 20 54 68 65 79 20 61 72 65 20  only.  They are 
30620 75 73 65 64 20 74 6f 20 76 65 72 69 66 79 20 74  used to verify t
30630 68 61 74 20 64 69 66 66 65 72 65 6e 74 20 22 74  hat different "t
30640 79 70 65 73 22 20 6f 66 20 6d 65 6d 6f 72 79 0a  ypes" of memory.
30650 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61  ** allocations a
30660 72 65 20 70 72 6f 70 65 72 6c 79 20 74 72 61 63  re properly trac
30670 6b 65 64 20 62 79 20 74 68 65 20 73 79 73 74 65  ked by the syste
30680 6d 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33  m..**.** sqlite3
30690 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28  MemdebugSetType(
306a0 29 20 73 65 74 73 20 74 68 65 20 22 74 79 70 65  ) sets the "type
306b0 22 20 6f 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69  " of an allocati
306c0 6f 6e 20 74 6f 20 6f 6e 65 20 6f 66 0a 2a 2a 20  on to one of.** 
306d0 74 68 65 20 4d 45 4d 54 59 50 45 5f 2a 20 6d 61  the MEMTYPE_* ma
306e0 63 72 6f 73 20 64 65 66 69 6e 65 64 20 62 65 6c  cros defined bel
306f0 6f 77 2e 20 20 54 68 65 20 74 79 70 65 20 6d 75  ow.  The type mu
30700 73 74 20 62 65 20 61 20 62 69 74 6d 61 73 6b 20  st be a bitmask 
30710 77 69 74 68 0a 2a 2a 20 61 20 73 69 6e 67 6c 65  with.** a single
30720 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20   bit set..**.** 
30730 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48  sqlite3MemdebugH
30740 61 73 54 79 70 65 28 29 20 72 65 74 75 72 6e 73  asType() returns
30750 20 74 72 75 65 20 69 66 20 61 6e 79 20 6f 66 20   true if any of 
30760 74 68 65 20 62 69 74 73 20 69 6e 20 69 74 73 20  the bits in its 
30770 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65  second.** argume
30780 6e 74 20 6d 61 74 63 68 20 74 68 65 20 74 79 70  nt match the typ
30790 65 20 73 65 74 20 62 79 20 74 68 65 20 70 72 65  e set by the pre
307a0 76 69 6f 75 73 20 73 71 6c 69 74 65 33 4d 65 6d  vious sqlite3Mem
307b0 64 65 62 75 67 53 65 74 54 79 70 65 28 29 2e 0a  debugSetType()..
307c0 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ** sqlite3Memdeb
307d0 75 67 48 61 73 54 79 70 65 28 29 20 69 73 20 69  ugHasType() is i
307e0 6e 74 65 6e 64 65 64 20 66 6f 72 20 75 73 65 20  ntended for use 
307f0 69 6e 73 69 64 65 20 61 73 73 65 72 74 28 29 20  inside assert() 
30800 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a  statements..**.*
30810 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  * sqlite3Memdebu
30820 67 4e 6f 54 79 70 65 28 29 20 72 65 74 75 72 6e  gNoType() return
30830 73 20 74 72 75 65 20 69 66 20 6e 6f 6e 65 20 6f  s true if none o
30840 66 20 74 68 65 20 62 69 74 73 20 69 6e 20 69 74  f the bits in it
30850 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75  s second.** argu
30860 6d 65 6e 74 20 6d 61 74 63 68 20 74 68 65 20 74  ment match the t
30870 79 70 65 20 73 65 74 20 62 79 20 74 68 65 20 70  ype set by the p
30880 72 65 76 69 6f 75 73 20 73 71 6c 69 74 65 33 4d  revious sqlite3M
30890 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 29  emdebugSetType()
308a0 2e 0a 2a 2a 0a 2a 2a 20 50 65 72 68 61 70 73 20  ..**.** Perhaps 
308b0 74 68 65 20 6d 6f 73 74 20 69 6d 70 6f 72 74 61  the most importa
308c0 6e 74 20 70 6f 69 6e 74 20 69 73 20 74 68 65 20  nt point is the 
308d0 64 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65  difference betwe
308e0 65 6e 20 4d 45 4d 54 59 50 45 5f 48 45 41 50 0a  en MEMTYPE_HEAP.
308f0 2a 2a 20 61 6e 64 20 4d 45 4d 54 59 50 45 5f 4c  ** and MEMTYPE_L
30900 4f 4f 4b 41 53 49 44 45 2e 20 20 49 66 20 61 6e  OOKASIDE.  If an
30910 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 73 20 4d   allocation is M
30920 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45  EMTYPE_LOOKASIDE
30930 2c 20 74 68 61 74 20 6d 65 61 6e 73 0a 2a 2a 20  , that means.** 
30940 69 74 20 6d 69 67 68 74 20 68 61 76 65 20 62 65  it might have be
30950 65 6e 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20  en allocated by 
30960 6c 6f 6f 6b 61 73 69 64 65 2c 20 65 78 63 65 70  lookaside, excep
30970 74 20 74 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e  t the allocation
30980 20 77 61 73 0a 2a 2a 20 74 6f 6f 20 6c 61 72 67   was.** too larg
30990 65 20 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 20 77  e or lookaside w
309a0 61 73 20 61 6c 72 65 61 64 79 20 66 75 6c 6c 2e  as already full.
309b0 20 20 49 74 20 69 73 20 69 6d 70 6f 72 74 61 6e    It is importan
309c0 74 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74  t to verify.** t
309d0 68 61 74 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  hat allocations 
309e0 74 68 61 74 20 6d 69 67 68 74 20 68 61 76 65 20  that might have 
309f0 62 65 65 6e 20 73 61 74 69 73 66 69 65 64 20 62  been satisfied b
30a00 79 20 6c 6f 6f 6b 61 73 69 64 65 20 61 72 65 20  y lookaside are 
30a10 6e 6f 74 0a 2a 2a 20 70 61 73 73 65 64 20 62 61  not.** passed ba
30a20 63 6b 20 74 6f 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73  ck to non-lookas
30a30 69 64 65 20 66 72 65 65 28 29 20 72 6f 75 74 69  ide free() routi
30a40 6e 65 73 2e 20 20 41 73 73 65 72 74 73 20 73 75  nes.  Asserts su
30a50 63 68 20 61 73 20 74 68 65 0a 2a 2a 20 65 78 61  ch as the.** exa
30a60 6d 70 6c 65 20 61 62 6f 76 65 20 61 72 65 20 70  mple above are p
30a70 6c 61 63 65 64 20 6f 6e 20 74 68 65 20 6e 6f 6e  laced on the non
30a80 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65 65 28  -lookaside free(
30a90 29 20 72 6f 75 74 69 6e 65 73 20 74 6f 20 76 65  ) routines to ve
30aa0 72 69 66 79 0a 2a 2a 20 74 68 69 73 20 63 6f 6e  rify.** this con
30ab0 73 74 72 61 69 6e 74 2e 0a 2a 2a 0a 2a 2a 20 41  straint..**.** A
30ac0 6c 6c 20 6f 66 20 74 68 69 73 20 69 73 20 6e 6f  ll of this is no
30ad0 2d 6f 70 20 66 6f 72 20 61 20 70 72 6f 64 75 63  -op for a produc
30ae0 74 69 6f 6e 20 62 75 69 6c 64 2e 20 20 49 74 20  tion build.  It 
30af0 6f 6e 6c 79 20 63 6f 6d 65 73 20 69 6e 74 6f 0a  only comes into.
30b00 2a 2a 20 70 6c 61 79 20 77 68 65 6e 20 74 68 65  ** play when the
30b10 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47   SQLITE_MEMDEBUG
30b20 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70   compile-time op
30b30 74 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f  tion is used..*/
30b40 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4d  .#ifdef SQLITE_M
30b50 45 4d 44 45 42 55 47 0a 20 20 76 6f 69 64 20 73  EMDEBUG.  void s
30b60 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65  qlite3MemdebugSe
30b70 74 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b  tType(void*,u8);
30b80 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 65  .  int sqlite3Me
30b90 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 76 6f  mdebugHasType(vo
30ba0 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73  id*,u8);.  int s
30bb0 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f  qlite3MemdebugNo
30bc0 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a  Type(void*,u8);.
30bd0 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
30be0 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65  qlite3MemdebugSe
30bf0 74 54 79 70 65 28 58 2c 59 29 20 20 2f 2a 20 6e  tType(X,Y)  /* n
30c00 6f 2d 6f 70 20 2a 2f 0a 23 20 64 65 66 69 6e 65  o-op */.# define
30c10 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
30c20 48 61 73 54 79 70 65 28 58 2c 59 29 20 20 31 0a  HasType(X,Y)  1.
30c30 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
30c40 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 58  MemdebugNoType(X
30c50 2c 59 29 20 20 20 31 0a 23 65 6e 64 69 66 0a 23  ,Y)   1.#endif.#
30c60 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 48  define MEMTYPE_H
30c70 45 41 50 20 20 20 20 20 20 20 30 78 30 31 20 20  EAP       0x01  
30c80 2f 2a 20 47 65 6e 65 72 61 6c 20 68 65 61 70 20  /* General heap 
30c90 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23  allocations */.#
30ca0 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 4c  define MEMTYPE_L
30cb0 4f 4f 4b 41 53 49 44 45 20 20 30 78 30 32 20 20  OOKASIDE  0x02  
30cc0 2f 2a 20 48 65 61 70 20 74 68 61 74 20 6d 69 67  /* Heap that mig
30cd0 68 74 20 68 61 76 65 20 62 65 65 6e 20 6c 6f 6f  ht have been loo
30ce0 6b 61 73 69 64 65 20 2a 2f 0a 23 64 65 66 69 6e  kaside */.#defin
30cf0 65 20 4d 45 4d 54 59 50 45 5f 50 43 41 43 48 45  e MEMTYPE_PCACHE
30d00 20 20 20 20 20 30 78 30 34 20 20 2f 2a 20 50 61       0x04  /* Pa
30d10 67 65 20 63 61 63 68 65 20 61 6c 6c 6f 63 61 74  ge cache allocat
30d20 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54  ions */../*.** T
30d30 68 72 65 61 64 69 6e 67 20 69 6e 74 65 72 66 61  hreading interfa
30d40 63 65 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45  ce.*/.#if SQLITE
30d50 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
30d60 41 44 53 3e 30 0a 69 6e 74 20 73 71 6c 69 74 65  ADS>0.int sqlite
30d70 33 54 68 72 65 61 64 43 72 65 61 74 65 28 53 51  3ThreadCreate(SQ
30d80 4c 69 74 65 54 68 72 65 61 64 2a 2a 2c 76 6f 69  LiteThread**,voi
30d90 64 2a 28 2a 29 28 76 6f 69 64 2a 29 2c 76 6f 69  d*(*)(void*),voi
30da0 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  d*);.int sqlite3
30db0 54 68 72 65 61 64 4a 6f 69 6e 28 53 51 4c 69 74  ThreadJoin(SQLit
30dc0 65 54 68 72 65 61 64 2a 2c 20 76 6f 69 64 2a 2a  eThread*, void**
30dd0 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64  );.#endif..#if d
30de0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
30df0 41 42 4c 45 5f 44 42 50 41 47 45 5f 56 54 41 42  ABLE_DBPAGE_VTAB
30e00 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c  ) || defined(SQL
30e10 49 54 45 5f 54 45 53 54 29 0a 69 6e 74 20 73 71  ITE_TEST).int sq
30e20 6c 69 74 65 33 44 62 70 61 67 65 52 65 67 69 73  lite3DbpageRegis
30e30 74 65 72 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23  ter(sqlite3*);.#
30e40 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65  endif.#if define
30e50 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
30e60 44 42 53 54 41 54 5f 56 54 41 42 29 20 7c 7c 20  DBSTAT_VTAB) || 
30e70 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54  defined(SQLITE_T
30e80 45 53 54 29 0a 69 6e 74 20 73 71 6c 69 74 65 33  EST).int sqlite3
30e90 44 62 73 74 61 74 52 65 67 69 73 74 65 72 28 73  DbstatRegister(s
30ea0 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6e 64 69 66  qlite3*);.#endif
30eb0 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ..int sqlite3Exp
30ec0 72 56 65 63 74 6f 72 53 69 7a 65 28 45 78 70 72  rVectorSize(Expr
30ed0 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74 20 73 71   *pExpr);.int sq
30ee0 6c 69 74 65 33 45 78 70 72 49 73 56 65 63 74 6f  lite3ExprIsVecto
30ef0 72 28 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a  r(Expr *pExpr);.
30f00 45 78 70 72 20 2a 73 71 6c 69 74 65 33 56 65 63  Expr *sqlite3Vec
30f10 74 6f 72 46 69 65 6c 64 53 75 62 65 78 70 72 28  torFieldSubexpr(
30f20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 45 78 70  Expr*, int);.Exp
30f30 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 46 6f  r *sqlite3ExprFo
30f40 72 56 65 63 74 6f 72 46 69 65 6c 64 28 50 61 72  rVectorField(Par
30f50 73 65 2a 2c 45 78 70 72 2a 2c 69 6e 74 29 3b 0a  se*,Expr*,int);.
30f60 76 6f 69 64 20 73 71 6c 69 74 65 33 56 65 63 74  void sqlite3Vect
30f70 6f 72 45 72 72 6f 72 4d 73 67 28 50 61 72 73 65  orErrorMsg(Parse
30f80 2a 2c 20 45 78 70 72 2a 29 3b 0a 0a 23 69 66 6e  *, Expr*);..#ifn
30f90 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
30fa0 43 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f 44 49  COMPILEOPTION_DI
30fb0 41 47 53 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a  AGS.const char *
30fc0 2a 73 71 6c 69 74 65 33 43 6f 6d 70 69 6c 65 4f  *sqlite3CompileO
30fd0 70 74 69 6f 6e 73 28 69 6e 74 20 2a 70 6e 4f 70  ptions(int *pnOp
30fe0 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 65 6e 64  t);.#endif..#end
30ff0 69 66 20 2f 2a 20 53 51 4c 49 54 45 49 4e 54 5f  if /* SQLITEINT_
31000 48 20 2a 2f 0a                                   H */.