/ Hex Artifact Content
Login

Artifact 5dec6a1043426fb25aa7cc54e522ae0a8d9b4a3331ac0f93d36887ab2aa38aef:


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 54 68 69 73 20 69 73 20 61  ./*.** This is a
2ff0: 20 6d 61 67 69 63 20 73 74 72 69 6e 67 20 74 68   magic string th
3000: 61 74 20 61 70 70 65 61 72 73 20 61 74 20 74 68  at appears at th
3010: 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 65  e beginning of e
3020: 76 65 72 79 0a 2a 2a 20 53 51 4c 69 74 65 20 64  very.** SQLite d
3030: 61 74 61 62 61 73 65 20 69 6e 20 6f 72 64 65 72  atabase in order
3040: 20 74 6f 20 69 64 65 6e 74 69 66 79 20 74 68 65   to identify the
3050: 20 66 69 6c 65 20 61 73 20 61 20 72 65 61 6c 20   file as a real 
3060: 64 61 74 61 62 61 73 65 2e 0a 2a 2a 0a 2a 2a 20  database..**.** 
3070: 59 6f 75 20 63 61 6e 20 63 68 61 6e 67 65 20 74  You can change t
3080: 68 69 73 20 76 61 6c 75 65 20 61 74 20 63 6f 6d  his value at com
3090: 70 69 6c 65 2d 74 69 6d 65 20 62 79 20 73 70 65  pile-time by spe
30a0: 63 69 66 79 69 6e 67 20 61 0a 2a 2a 20 2d 44 53  cifying a.** -DS
30b0: 51 4c 49 54 45 5f 46 49 4c 45 5f 48 45 41 44 45  QLITE_FILE_HEADE
30c0: 52 3d 22 2e 2e 2e 22 20 6f 6e 20 74 68 65 20 63  R="..." on the c
30d0: 6f 6d 70 69 6c 65 72 20 63 6f 6d 6d 61 6e 64 2d  ompiler command-
30e0: 6c 69 6e 65 2e 20 20 54 68 65 0a 2a 2a 20 68 65  line.  The.** he
30f0: 61 64 65 72 20 6d 75 73 74 20 62 65 20 65 78 61  ader must be exa
3100: 63 74 6c 79 20 31 36 20 62 79 74 65 73 20 69 6e  ctly 16 bytes in
3110: 63 6c 75 64 69 6e 67 20 74 68 65 20 7a 65 72 6f  cluding the zero
3120: 2d 74 65 72 6d 69 6e 61 74 6f 72 20 73 6f 0a 2a  -terminator so.*
3130: 2a 20 74 68 65 20 73 74 72 69 6e 67 20 69 74 73  * the string its
3140: 65 6c 66 20 73 68 6f 75 6c 64 20 62 65 20 31 35  elf should be 15
3150: 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67   characters long
3160: 2e 20 20 49 66 20 79 6f 75 20 63 68 61 6e 67 65  .  If you change
3170: 0a 2a 2a 20 74 68 65 20 68 65 61 64 65 72 2c 20  .** the header, 
3180: 74 68 65 6e 20 79 6f 75 72 20 63 75 73 74 6f 6d  then your custom
3190: 20 6c 69 62 72 61 72 79 20 77 69 6c 6c 20 6e 6f   library will no
31a0: 74 20 62 65 20 61 62 6c 65 20 74 6f 20 72 65 61  t be able to rea
31b0: 64 20 0a 2a 2a 20 64 61 74 61 62 61 73 65 73 20  d .** databases 
31c0: 67 65 6e 65 72 61 74 65 64 20 62 79 20 74 68 65  generated by the
31d0: 20 73 74 61 6e 64 61 72 64 20 74 6f 6f 6c 73 20   standard tools 
31e0: 61 6e 64 20 74 68 65 20 73 74 61 6e 64 61 72 64  and the standard
31f0: 20 74 6f 6f 6c 73 0a 2a 2a 20 77 69 6c 6c 20 6e   tools.** will n
3200: 6f 74 20 62 65 20 61 62 6c 65 20 74 6f 20 72 65  ot be able to re
3210: 61 64 20 64 61 74 61 62 61 73 65 73 20 63 72 65  ad databases cre
3220: 61 74 65 64 20 62 79 20 79 6f 75 72 20 63 75 73  ated by your cus
3230: 74 6f 6d 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a  tom library..*/.
3240: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 46  #ifndef SQLITE_F
3250: 49 4c 45 5f 48 45 41 44 45 52 20 2f 2a 20 31 32  ILE_HEADER /* 12
3260: 33 34 35 36 37 38 39 20 31 32 33 34 35 36 20 2a  3456789 123456 *
3270: 2f 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49  /.#  define SQLI
3280: 54 45 5f 46 49 4c 45 5f 48 45 41 44 45 52 20 22  TE_FILE_HEADER "
3290: 53 51 4c 69 74 65 20 66 6f 72 6d 61 74 20 33 22  SQLite format 3"
32a0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49  .#endif../*.** I
32b0: 66 20 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f  f SQLITE_MALLOC_
32c0: 53 4f 46 54 5f 4c 49 4d 49 54 20 69 73 20 6e 6f  SOFT_LIMIT is no
32d0: 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 72 79  t zero, then try
32e0: 20 74 6f 20 6b 65 65 70 20 74 68 65 0a 2a 2a 20   to keep the.** 
32f0: 73 69 7a 65 73 20 6f 66 20 6d 65 6d 6f 72 79 20  sizes of memory 
3300: 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 62 65 6c 6f  allocations belo
3310: 77 20 74 68 69 73 20 76 61 6c 75 65 20 77 68 65  w this value whe
3320: 72 65 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2f 0a  re possible..*/.
3330: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
3340: 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f  ITE_MALLOC_SOFT_
3350: 4c 49 4d 49 54 29 0a 23 20 64 65 66 69 6e 65 20  LIMIT).# define 
3360: 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f  SQLITE_MALLOC_SO
3370: 46 54 5f 4c 49 4d 49 54 20 31 30 32 34 0a 23 65  FT_LIMIT 1024.#e
3380: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 57 65 20 6e  ndif../*.** We n
3390: 65 65 64 20 74 6f 20 64 65 66 69 6e 65 20 5f 58  eed to define _X
33a0: 4f 50 45 4e 5f 53 4f 55 52 43 45 20 61 73 20 66  OPEN_SOURCE as f
33b0: 6f 6c 6c 6f 77 73 20 69 6e 20 6f 72 64 65 72 20  ollows in order 
33c0: 74 6f 20 65 6e 61 62 6c 65 0a 2a 2a 20 72 65 63  to enable.** rec
33d0: 75 72 73 69 76 65 20 6d 75 74 65 78 65 73 20 6f  ursive mutexes o
33e0: 6e 20 6d 6f 73 74 20 55 6e 69 78 20 73 79 73 74  n most Unix syst
33f0: 65 6d 73 20 61 6e 64 20 66 63 68 6d 6f 64 28 29  ems and fchmod()
3400: 20 6f 6e 20 4f 70 65 6e 42 53 44 2e 0a 2a 2a 20   on OpenBSD..** 
3410: 42 75 74 20 5f 58 4f 50 45 4e 5f 53 4f 55 52 43  But _XOPEN_SOURC
3420: 45 20 64 65 66 69 6e 65 20 63 61 75 73 65 73 20  E define causes 
3430: 70 72 6f 62 6c 65 6d 73 20 66 6f 72 20 4d 61 63  problems for Mac
3440: 20 4f 53 20 58 2c 20 73 6f 20 6f 6d 69 74 0a 2a   OS X, so omit.*
3450: 2a 20 69 74 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  * it..*/.#if !de
3460: 66 69 6e 65 64 28 5f 58 4f 50 45 4e 5f 53 4f 55  fined(_XOPEN_SOU
3470: 52 43 45 29 20 26 26 20 21 64 65 66 69 6e 65 64  RCE) && !defined
3480: 28 5f 5f 44 41 52 57 49 4e 5f 5f 29 20 26 26 20  (__DARWIN__) && 
3490: 21 64 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45  !defined(__APPLE
34a0: 5f 5f 29 0a 23 20 20 64 65 66 69 6e 65 20 5f 58  __).#  define _X
34b0: 4f 50 45 4e 5f 53 4f 55 52 43 45 20 36 30 30 0a  OPEN_SOURCE 600.
34c0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4e 44  #endif../*.** ND
34d0: 45 42 55 47 20 61 6e 64 20 53 51 4c 49 54 45 5f  EBUG and SQLITE_
34e0: 44 45 42 55 47 20 61 72 65 20 6f 70 70 6f 73 69  DEBUG are opposi
34f0: 74 65 73 2e 20 20 49 74 20 73 68 6f 75 6c 64 20  tes.  It should 
3500: 61 6c 77 61 79 73 20 62 65 20 74 72 75 65 20 74  always be true t
3510: 68 61 74 0a 2a 2a 20 64 65 66 69 6e 65 64 28 4e  hat.** defined(N
3520: 44 45 42 55 47 29 3d 3d 21 64 65 66 69 6e 65 64  DEBUG)==!defined
3530: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 2e 20  (SQLITE_DEBUG). 
3540: 20 49 66 20 74 68 69 73 20 69 73 20 6e 6f 74 20   If this is not 
3550: 63 75 72 72 65 6e 74 6c 79 20 74 72 75 65 2c 0a  currently true,.
3560: 2a 2a 20 6d 61 6b 65 20 69 74 20 74 72 75 65 20  ** make it true 
3570: 62 79 20 64 65 66 69 6e 69 6e 67 20 6f 72 20 75  by defining or u
3580: 6e 64 65 66 69 6e 69 6e 67 20 4e 44 45 42 55 47  ndefining NDEBUG
3590: 2e 0a 2a 2a 0a 2a 2a 20 53 65 74 74 69 6e 67 20  ..**.** Setting 
35a0: 4e 44 45 42 55 47 20 6d 61 6b 65 73 20 74 68 65  NDEBUG makes the
35b0: 20 63 6f 64 65 20 73 6d 61 6c 6c 65 72 20 61 6e   code smaller an
35c0: 64 20 66 61 73 74 65 72 20 62 79 20 64 69 73 61  d faster by disa
35d0: 62 6c 69 6e 67 20 74 68 65 0a 2a 2a 20 61 73 73  bling the.** ass
35e0: 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73  ert() statements
35f0: 20 69 6e 20 74 68 65 20 63 6f 64 65 2e 20 20 53   in the code.  S
3600: 6f 20 77 65 20 77 61 6e 74 20 74 68 65 20 64 65  o we want the de
3610: 66 61 75 6c 74 20 61 63 74 69 6f 6e 0a 2a 2a 20  fault action.** 
3620: 74 6f 20 62 65 20 66 6f 72 20 4e 44 45 42 55 47  to be for NDEBUG
3630: 20 74 6f 20 62 65 20 73 65 74 20 61 6e 64 20 4e   to be set and N
3640: 44 45 42 55 47 20 74 6f 20 62 65 20 75 6e 64 65  DEBUG to be unde
3650: 66 69 6e 65 64 20 6f 6e 6c 79 20 69 66 20 53 51  fined only if SQ
3660: 4c 49 54 45 5f 44 45 42 55 47 0a 2a 2a 20 69 73  LITE_DEBUG.** is
3670: 20 73 65 74 2e 20 20 54 68 75 73 20 4e 44 45 42   set.  Thus NDEB
3680: 55 47 20 62 65 63 6f 6d 65 73 20 61 6e 20 6f 70  UG becomes an op
3690: 74 2d 69 6e 20 72 61 74 68 65 72 20 74 68 61 6e  t-in rather than
36a0: 20 61 6e 20 6f 70 74 2d 6f 75 74 0a 2a 2a 20 66   an opt-out.** f
36b0: 65 61 74 75 72 65 2e 0a 2a 2f 0a 23 69 66 20 21  eature..*/.#if !
36c0: 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20  defined(NDEBUG) 
36d0: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
36e0: 54 45 5f 44 45 42 55 47 29 0a 23 20 64 65 66 69  TE_DEBUG).# defi
36f0: 6e 65 20 4e 44 45 42 55 47 20 31 0a 23 65 6e 64  ne NDEBUG 1.#end
3700: 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 4e  if.#if defined(N
3710: 44 45 42 55 47 29 20 26 26 20 64 65 66 69 6e 65  DEBUG) && define
3720: 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a  d(SQLITE_DEBUG).
3730: 23 20 75 6e 64 65 66 20 4e 44 45 42 55 47 0a 23  # undef NDEBUG.#
3740: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 6e 61  endif../*.** Ena
3750: 62 6c 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ble SQLITE_ENABL
3760: 45 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e  E_EXPLAIN_COMMEN
3770: 54 53 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42  TS if SQLITE_DEB
3780: 55 47 20 69 73 20 74 75 72 6e 65 64 20 6f 6e 2e  UG is turned on.
3790: 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .*/.#if !defined
37a0: 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45  (SQLITE_ENABLE_E
37b0: 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 29  XPLAIN_COMMENTS)
37c0: 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49   && defined(SQLI
37d0: 54 45 5f 44 45 42 55 47 29 0a 23 20 64 65 66 69  TE_DEBUG).# defi
37e0: 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ne SQLITE_ENABLE
37f0: 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54  _EXPLAIN_COMMENT
3800: 53 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  S 1.#endif../*.*
3810: 2a 20 54 68 65 20 74 65 73 74 63 61 73 65 28 29  * The testcase()
3820: 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 74   macro is used t
3830: 6f 20 61 69 64 20 69 6e 20 63 6f 76 65 72 61 67  o aid in coverag
3840: 65 20 74 65 73 74 69 6e 67 2e 20 20 57 68 65 6e  e testing.  When
3850: 0a 2a 2a 20 64 6f 69 6e 67 20 63 6f 76 65 72 61  .** doing covera
3860: 67 65 20 74 65 73 74 69 6e 67 2c 20 74 68 65 20  ge testing, the 
3870: 63 6f 6e 64 69 74 69 6f 6e 20 69 6e 73 69 64 65  condition inside
3880: 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f   the argument to
3890: 0a 2a 2a 20 74 65 73 74 63 61 73 65 28 29 20 6d  .** testcase() m
38a0: 75 73 74 20 62 65 20 65 76 61 6c 75 61 74 65 64  ust be evaluated
38b0: 20 62 6f 74 68 20 74 72 75 65 20 61 6e 64 20 66   both true and f
38c0: 61 6c 73 65 20 69 6e 20 6f 72 64 65 72 20 74 6f  alse in order to
38d0: 0a 2a 2a 20 67 65 74 20 66 75 6c 6c 20 62 72 61  .** get full bra
38e0: 6e 63 68 20 63 6f 76 65 72 61 67 65 2e 20 20 54  nch coverage.  T
38f0: 68 65 20 74 65 73 74 63 61 73 65 28 29 20 6d 61  he testcase() ma
3900: 63 72 6f 20 69 73 20 69 6e 73 65 72 74 65 64 0a  cro is inserted.
3910: 2a 2a 20 74 6f 20 68 65 6c 70 20 65 6e 73 75 72  ** to help ensur
3920: 65 20 61 64 65 71 75 61 74 65 20 74 65 73 74 20  e adequate test 
3930: 63 6f 76 65 72 61 67 65 20 69 6e 20 70 6c 61 63  coverage in plac
3940: 65 73 20 77 68 65 72 65 20 73 69 6d 70 6c 65 0a  es where simple.
3950: 2a 2a 20 63 6f 6e 64 69 74 69 6f 6e 2f 64 65 63  ** condition/dec
3960: 69 73 69 6f 6e 20 63 6f 76 65 72 61 67 65 20 69  ision coverage i
3970: 73 20 69 6e 61 64 65 71 75 61 74 65 2e 20 20 46  s inadequate.  F
3980: 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 65 73 74  or example, test
3990: 63 61 73 65 28 29 0a 2a 2a 20 63 61 6e 20 62 65  case().** can be
39a0: 20 75 73 65 64 20 74 6f 20 6d 61 6b 65 20 73 75   used to make su
39b0: 72 65 20 62 6f 75 6e 64 61 72 79 20 76 61 6c 75  re boundary valu
39c0: 65 73 20 61 72 65 20 74 65 73 74 65 64 2e 20 20  es are tested.  
39d0: 46 6f 72 0a 2a 2a 20 62 69 74 6d 61 73 6b 20 74  For.** bitmask t
39e0: 65 73 74 73 2c 20 74 65 73 74 63 61 73 65 28 29  ests, testcase()
39f0: 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20   can be used to 
3a00: 6d 61 6b 65 20 73 75 72 65 20 65 61 63 68 20 62  make sure each b
3a10: 69 74 0a 2a 2a 20 69 73 20 73 69 67 6e 69 66 69  it.** is signifi
3a20: 63 61 6e 74 20 61 6e 64 20 75 73 65 64 20 61 74  cant and used at
3a30: 20 6c 65 61 73 74 20 6f 6e 63 65 2e 20 20 4f 6e   least once.  On
3a40: 20 73 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e   switch statemen
3a50: 74 73 0a 2a 2a 20 77 68 65 72 65 20 6d 75 6c 74  ts.** where mult
3a60: 69 70 6c 65 20 63 61 73 65 73 20 67 6f 20 74 6f  iple cases go to
3a70: 20 74 68 65 20 73 61 6d 65 20 62 6c 6f 63 6b 20   the same block 
3a80: 6f 66 20 63 6f 64 65 2c 20 74 65 73 74 63 61 73  of code, testcas
3a90: 65 28 29 0a 2a 2a 20 63 61 6e 20 69 6e 73 75 72  e().** can insur
3aa0: 65 20 74 68 61 74 20 61 6c 6c 20 63 61 73 65 73  e that all cases
3ab0: 20 61 72 65 20 65 76 61 6c 75 61 74 65 64 2e 0a   are evaluated..
3ac0: 2a 2a 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  **.*/.#ifdef SQL
3ad0: 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53  ITE_COVERAGE_TES
3ae0: 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  T.  void sqlite3
3af0: 43 6f 76 65 72 61 67 65 28 69 6e 74 29 3b 0a 23  Coverage(int);.#
3b00: 20 64 65 66 69 6e 65 20 74 65 73 74 63 61 73 65   define testcase
3b10: 28 58 29 20 20 69 66 28 20 58 20 29 7b 20 73 71  (X)  if( X ){ sq
3b20: 6c 69 74 65 33 43 6f 76 65 72 61 67 65 28 5f 5f  lite3Coverage(__
3b30: 4c 49 4e 45 5f 5f 29 3b 20 7d 0a 23 65 6c 73 65  LINE__); }.#else
3b40: 0a 23 20 64 65 66 69 6e 65 20 74 65 73 74 63 61  .# define testca
3b50: 73 65 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  se(X).#endif../*
3b60: 0a 2a 2a 20 54 68 65 20 54 45 53 54 4f 4e 4c 59  .** The TESTONLY
3b70: 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 74   macro is used t
3b80: 6f 20 65 6e 63 6c 6f 73 65 20 76 61 72 69 61 62  o enclose variab
3b90: 6c 65 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20  le declarations 
3ba0: 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 62 69 74 73  or.** other bits
3bb0: 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20 61 72   of code that ar
3bc0: 65 20 6e 65 65 64 65 64 20 74 6f 20 73 75 70 70  e needed to supp
3bd0: 6f 72 74 20 74 68 65 20 61 72 67 75 6d 65 6e 74  ort the argument
3be0: 73 0a 2a 2a 20 77 69 74 68 69 6e 20 74 65 73 74  s.** within test
3bf0: 63 61 73 65 28 29 20 61 6e 64 20 61 73 73 65 72  case() and asser
3c00: 74 28 29 20 6d 61 63 72 6f 73 2e 0a 2a 2f 0a 23  t() macros..*/.#
3c10: 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44 45 42  if !defined(NDEB
3c20: 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53  UG) || defined(S
3c30: 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54  QLITE_COVERAGE_T
3c40: 45 53 54 29 0a 23 20 64 65 66 69 6e 65 20 54 45  EST).# define TE
3c50: 53 54 4f 4e 4c 59 28 58 29 20 20 58 0a 23 65 6c  STONLY(X)  X.#el
3c60: 73 65 0a 23 20 64 65 66 69 6e 65 20 54 45 53 54  se.# define TEST
3c70: 4f 4e 4c 59 28 58 29 0a 23 65 6e 64 69 66 0a 0a  ONLY(X).#endif..
3c80: 2f 2a 0a 2a 2a 20 53 6f 6d 65 74 69 6d 65 73 20  /*.** Sometimes 
3c90: 77 65 20 6e 65 65 64 20 61 20 73 6d 61 6c 6c 20  we need a small 
3ca0: 61 6d 6f 75 6e 74 20 6f 66 20 63 6f 64 65 20 73  amount of code s
3cb0: 75 63 68 20 61 73 20 61 20 76 61 72 69 61 62 6c  uch as a variabl
3cc0: 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  e initialization
3cd0: 0a 2a 2a 20 74 6f 20 73 65 74 75 70 20 66 6f 72  .** to setup for
3ce0: 20 61 20 6c 61 74 65 72 20 61 73 73 65 72 74 28   a later assert(
3cf0: 29 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 57 65  ) statement.  We
3d00: 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74 68 69   do not want thi
3d10: 73 20 63 6f 64 65 20 74 6f 0a 2a 2a 20 61 70 70  s code to.** app
3d20: 65 61 72 20 77 68 65 6e 20 61 73 73 65 72 74 28  ear when assert(
3d30: 29 20 69 73 20 64 69 73 61 62 6c 65 64 2e 20 20  ) is disabled.  
3d40: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
3d50: 63 72 6f 20 69 73 20 74 68 65 72 65 66 6f 72 65  cro is therefore
3d60: 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63 6f 6e 74  .** used to cont
3d70: 61 69 6e 20 74 68 61 74 20 73 65 74 75 70 20 63  ain that setup c
3d80: 6f 64 65 2e 20 20 54 68 65 20 22 56 56 41 22 20  ode.  The "VVA" 
3d90: 61 63 72 6f 6e 79 6d 20 73 74 61 6e 64 73 20 66  acronym stands f
3da0: 6f 72 0a 2a 2a 20 22 56 65 72 69 66 69 63 61 74  or.** "Verificat
3db0: 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69 6f 6e 2c  ion, Validation,
3dc0: 20 61 6e 64 20 41 63 63 72 65 64 69 74 61 74 69   and Accreditati
3dd0: 6f 6e 22 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  on".  In other w
3de0: 6f 72 64 73 2c 20 74 68 65 0a 2a 2a 20 63 6f 64  ords, the.** cod
3df0: 65 20 77 69 74 68 69 6e 20 56 56 41 5f 4f 4e 4c  e within VVA_ONL
3e00: 59 28 29 20 77 69 6c 6c 20 6f 6e 6c 79 20 72 75  Y() will only ru
3e10: 6e 20 64 75 72 69 6e 67 20 76 65 72 69 66 69 63  n during verific
3e20: 61 74 69 6f 6e 20 70 72 6f 63 65 73 73 65 73 2e  ation processes.
3e30: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 4e 44 45 42  .*/.#ifndef NDEB
3e40: 55 47 0a 23 20 64 65 66 69 6e 65 20 56 56 41 5f  UG.# define VVA_
3e50: 4f 4e 4c 59 28 58 29 20 20 58 0a 23 65 6c 73 65  ONLY(X)  X.#else
3e60: 0a 23 20 64 65 66 69 6e 65 20 56 56 41 5f 4f 4e  .# define VVA_ON
3e70: 4c 59 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  LY(X).#endif../*
3e80: 0a 2a 2a 20 54 68 65 20 41 4c 57 41 59 53 20 61  .** The ALWAYS a
3e90: 6e 64 20 4e 45 56 45 52 20 6d 61 63 72 6f 73 20  nd NEVER macros 
3ea0: 73 75 72 72 6f 75 6e 64 20 62 6f 6f 6c 65 61 6e  surround boolean
3eb0: 20 65 78 70 72 65 73 73 69 6f 6e 73 20 77 68 69   expressions whi
3ec0: 63 68 0a 2a 2a 20 61 72 65 20 69 6e 74 65 6e 64  ch.** are intend
3ed0: 65 64 20 74 6f 20 61 6c 77 61 79 73 20 62 65 20  ed to always be 
3ee0: 74 72 75 65 20 6f 72 20 66 61 6c 73 65 2c 20 72  true or false, r
3ef0: 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20 53 75  espectively.  Su
3f00: 63 68 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e  ch.** expression
3f10: 73 20 63 6f 75 6c 64 20 62 65 20 6f 6d 69 74 74  s could be omitt
3f20: 65 64 20 66 72 6f 6d 20 74 68 65 20 63 6f 64 65  ed from the code
3f30: 20 63 6f 6d 70 6c 65 74 65 6c 79 2e 20 20 42 75   completely.  Bu
3f40: 74 20 74 68 65 79 0a 2a 2a 20 61 72 65 20 69 6e  t they.** are in
3f50: 63 6c 75 64 65 64 20 69 6e 20 61 20 66 65 77 20  cluded in a few 
3f60: 63 61 73 65 73 20 69 6e 20 6f 72 64 65 72 20 74  cases in order t
3f70: 6f 20 65 6e 68 61 6e 63 65 20 74 68 65 20 72 65  o enhance the re
3f80: 73 69 6c 69 65 6e 63 65 0a 2a 2a 20 6f 66 20 53  silience.** of S
3f90: 51 4c 69 74 65 20 74 6f 20 75 6e 65 78 70 65 63  QLite to unexpec
3fa0: 74 65 64 20 62 65 68 61 76 69 6f 72 20 2d 20 74  ted behavior - t
3fb0: 6f 20 6d 61 6b 65 20 74 68 65 20 63 6f 64 65 20  o make the code 
3fc0: 22 73 65 6c 66 2d 68 65 61 6c 69 6e 67 22 0a 2a  "self-healing".*
3fd0: 2a 20 6f 72 20 22 64 75 63 74 69 6c 65 22 20 72  * or "ductile" r
3fe0: 61 74 68 65 72 20 74 68 61 6e 20 62 65 69 6e 67  ather than being
3ff0: 20 22 62 72 69 74 74 6c 65 22 20 61 6e 64 20 63   "brittle" and c
4000: 72 61 73 68 69 6e 67 20 61 74 20 74 68 65 20 66  rashing at the f
4010: 69 72 73 74 0a 2a 2a 20 68 69 6e 74 20 6f 66 20  irst.** hint of 
4020: 75 6e 70 6c 61 6e 6e 65 64 20 62 65 68 61 76 69  unplanned behavi
4030: 6f 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 6f 74 68  or..**.** In oth
4040: 65 72 20 77 6f 72 64 73 2c 20 41 4c 57 41 59 53  er words, ALWAYS
4050: 20 61 6e 64 20 4e 45 56 45 52 20 61 72 65 20 61   and NEVER are a
4060: 64 64 65 64 20 66 6f 72 20 64 65 66 65 6e 73 69  dded for defensi
4070: 76 65 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 57  ve code..**.** W
4080: 68 65 6e 20 64 6f 69 6e 67 20 63 6f 76 65 72 61  hen doing covera
4090: 67 65 20 74 65 73 74 69 6e 67 20 41 4c 57 41 59  ge testing ALWAY
40a0: 53 20 61 6e 64 20 4e 45 56 45 52 20 61 72 65 20  S and NEVER are 
40b0: 68 61 72 64 2d 63 6f 64 65 64 20 74 6f 0a 2a 2a  hard-coded to.**
40c0: 20 62 65 20 74 72 75 65 20 61 6e 64 20 66 61 6c   be true and fal
40d0: 73 65 20 73 6f 20 74 68 61 74 20 74 68 65 20 75  se so that the u
40e0: 6e 72 65 61 63 68 61 62 6c 65 20 63 6f 64 65 20  nreachable code 
40f0: 74 68 65 79 20 73 70 65 63 69 66 79 20 77 69 6c  they specify wil
4100: 6c 0a 2a 2a 20 6e 6f 74 20 62 65 20 63 6f 75 6e  l.** not be coun
4110: 74 65 64 20 61 73 20 75 6e 74 65 73 74 65 64 20  ted as untested 
4120: 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  code..*/.#if def
4130: 69 6e 65 64 28 53 51 4c 49 54 45 5f 43 4f 56 45  ined(SQLITE_COVE
4140: 52 41 47 45 5f 54 45 53 54 29 20 7c 7c 20 64 65  RAGE_TEST) || de
4150: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55 54  fined(SQLITE_MUT
4160: 41 54 49 4f 4e 5f 54 45 53 54 29 0a 23 20 64 65  ATION_TEST).# de
4170: 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20 20  fine ALWAYS(X)  
4180: 20 20 20 20 28 31 29 0a 23 20 64 65 66 69 6e 65      (1).# define
4190: 20 4e 45 56 45 52 28 58 29 20 20 20 20 20 20 20   NEVER(X)       
41a0: 28 30 29 0a 23 65 6c 69 66 20 21 64 65 66 69 6e  (0).#elif !defin
41b0: 65 64 28 4e 44 45 42 55 47 29 0a 23 20 64 65 66  ed(NDEBUG).# def
41c0: 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20 20 20  ine ALWAYS(X)   
41d0: 20 20 20 28 28 58 29 3f 31 3a 28 61 73 73 65 72     ((X)?1:(asser
41e0: 74 28 30 29 2c 30 29 29 0a 23 20 64 65 66 69 6e  t(0),0)).# defin
41f0: 65 20 4e 45 56 45 52 28 58 29 20 20 20 20 20 20  e NEVER(X)      
4200: 20 28 28 58 29 3f 28 61 73 73 65 72 74 28 30 29   ((X)?(assert(0)
4210: 2c 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23 20 64  ,1):0).#else.# d
4220: 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20  efine ALWAYS(X) 
4230: 20 20 20 20 20 28 58 29 0a 23 20 64 65 66 69 6e       (X).# defin
4240: 65 20 4e 45 56 45 52 28 58 29 20 20 20 20 20 20  e NEVER(X)      
4250: 20 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a   (X).#endif../*.
4260: 2a 2a 20 53 6f 6d 65 20 63 6f 6e 64 69 74 69 6f  ** Some conditio
4270: 6e 61 6c 73 20 61 72 65 20 6f 70 74 69 6d 69 7a  nals are optimiz
4280: 61 74 69 6f 6e 73 20 6f 6e 6c 79 2e 20 20 49 6e  ations only.  In
4290: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66   other words, if
42a0: 20 74 68 65 0a 2a 2a 20 63 6f 6e 64 69 74 69 6f   the.** conditio
42b0: 6e 61 6c 73 20 61 72 65 20 72 65 70 6c 61 63 65  nals are replace
42c0: 64 20 77 69 74 68 20 61 20 63 6f 6e 73 74 61 6e  d with a constan
42d0: 74 20 31 20 28 74 72 75 65 29 20 6f 72 20 30 20  t 1 (true) or 0 
42e0: 28 66 61 6c 73 65 29 20 74 68 65 6e 0a 2a 2a 20  (false) then.** 
42f0: 74 68 65 20 63 6f 72 72 65 63 74 20 61 6e 73 77  the correct answ
4300: 65 72 20 69 73 20 73 74 69 6c 6c 20 6f 62 74 61  er is still obta
4310: 69 6e 65 64 2c 20 74 68 6f 75 67 68 20 70 65 72  ined, though per
4320: 68 61 70 73 20 6e 6f 74 20 61 73 20 71 75 69 63  haps not as quic
4330: 6b 6c 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66  kly..**.** The f
4340: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20  ollowing macros 
4350: 6d 61 72 6b 20 74 68 65 73 65 20 6f 70 74 69 6d  mark these optim
4360: 69 7a 61 74 69 6f 6e 73 20 63 6f 6e 64 69 74 69  izations conditi
4370: 6f 6e 61 6c 73 2e 0a 2a 2f 0a 23 69 66 20 64 65  onals..*/.#if de
4380: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55 54  fined(SQLITE_MUT
4390: 41 54 49 4f 4e 5f 54 45 53 54 29 0a 23 20 64 65  ATION_TEST).# de
43a0: 66 69 6e 65 20 4f 4b 5f 49 46 5f 41 4c 57 41 59  fine OK_IF_ALWAY
43b0: 53 5f 54 52 55 45 28 58 29 20 20 28 31 29 0a 23  S_TRUE(X)  (1).#
43c0: 20 64 65 66 69 6e 65 20 4f 4b 5f 49 46 5f 41 4c   define OK_IF_AL
43d0: 57 41 59 53 5f 46 41 4c 53 45 28 58 29 20 28 30  WAYS_FALSE(X) (0
43e0: 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
43f0: 20 4f 4b 5f 49 46 5f 41 4c 57 41 59 53 5f 54 52   OK_IF_ALWAYS_TR
4400: 55 45 28 58 29 20 20 28 58 29 0a 23 20 64 65 66  UE(X)  (X).# def
4410: 69 6e 65 20 4f 4b 5f 49 46 5f 41 4c 57 41 59 53  ine OK_IF_ALWAYS
4420: 5f 46 41 4c 53 45 28 58 29 20 28 58 29 0a 23 65  _FALSE(X) (X).#e
4430: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65  ndif../*.** Some
4440: 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 73   malloc failures
4450: 20 61 72 65 20 6f 6e 6c 79 20 70 6f 73 73 69 62   are only possib
4460: 6c 65 20 69 66 20 53 51 4c 49 54 45 5f 54 45 53  le if SQLITE_TES
4470: 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53 53  T_REALLOC_STRESS
4480: 20 69 73 0a 2a 2a 20 64 65 66 69 6e 65 64 2e 20   is.** defined. 
4490: 20 57 65 20 6e 65 65 64 20 74 6f 20 64 65 66 65   We need to defe
44a0: 6e 64 20 61 67 61 69 6e 73 74 20 74 68 6f 73 65  nd against those
44b0: 20 66 61 69 6c 75 72 65 73 20 77 68 65 6e 20 74   failures when t
44c0: 65 73 74 69 6e 67 20 77 69 74 68 0a 2a 2a 20 53  esting with.** S
44d0: 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c  QLITE_TEST_REALL
44e0: 4f 43 5f 53 54 52 45 53 53 2c 20 62 75 74 20 77  OC_STRESS, but w
44f0: 65 20 64 6f 6e 27 74 20 77 61 6e 74 20 74 68 65  e don't want the
4500: 20 75 6e 72 65 61 63 68 61 62 6c 65 20 62 72 61   unreachable bra
4510: 6e 63 68 65 73 0a 2a 2a 20 64 75 72 69 6e 67 20  nches.** during 
4520: 61 20 6e 6f 72 6d 61 6c 20 62 75 69 6c 64 2e 20  a normal build. 
4530: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   The following m
4540: 61 63 72 6f 20 63 61 6e 20 62 65 20 75 73 65 64  acro can be used
4550: 20 74 6f 20 64 69 73 61 62 6c 65 20 74 65 73 74   to disable test
4560: 73 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 61 6c  s.** that are al
4570: 77 61 79 73 20 66 61 6c 73 65 20 65 78 63 65 70  ways false excep
4580: 74 20 77 68 65 6e 20 53 51 4c 49 54 45 5f 54 45  t when SQLITE_TE
4590: 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53  ST_REALLOC_STRES
45a0: 53 20 69 73 20 73 65 74 2e 0a 2a 2f 0a 23 69 66  S is set..*/.#if
45b0: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
45c0: 54 45 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52  TEST_REALLOC_STR
45d0: 45 53 53 29 0a 23 20 64 65 66 69 6e 65 20 4f 4e  ESS).# define ON
45e0: 4c 59 5f 49 46 5f 52 45 41 4c 4c 4f 43 5f 53 54  LY_IF_REALLOC_ST
45f0: 52 45 53 53 28 58 29 20 20 28 58 29 0a 23 65 6c  RESS(X)  (X).#el
4600: 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44 45 42  if !defined(NDEB
4610: 55 47 29 0a 23 20 64 65 66 69 6e 65 20 4f 4e 4c  UG).# define ONL
4620: 59 5f 49 46 5f 52 45 41 4c 4c 4f 43 5f 53 54 52  Y_IF_REALLOC_STR
4630: 45 53 53 28 58 29 20 20 28 28 58 29 3f 28 61 73  ESS(X)  ((X)?(as
4640: 73 65 72 74 28 30 29 2c 31 29 3a 30 29 0a 23 65  sert(0),1):0).#e
4650: 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 4f 4e 4c  lse.# define ONL
4660: 59 5f 49 46 5f 52 45 41 4c 4c 4f 43 5f 53 54 52  Y_IF_REALLOC_STR
4670: 45 53 53 28 58 29 20 20 28 30 29 0a 23 65 6e 64  ESS(X)  (0).#end
4680: 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 63 6c 61 72  if../*.** Declar
4690: 61 74 69 6f 6e 73 20 75 73 65 64 20 66 6f 72 20  ations used for 
46a0: 74 72 61 63 69 6e 67 20 74 68 65 20 6f 70 65 72  tracing the oper
46b0: 61 74 69 6e 67 20 73 79 73 74 65 6d 20 69 6e 74  ating system int
46c0: 65 72 66 61 63 65 73 2e 0a 2a 2f 0a 23 69 66 20  erfaces..*/.#if 
46d0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 46  defined(SQLITE_F
46e0: 4f 52 43 45 5f 4f 53 5f 54 52 41 43 45 29 20 7c  ORCE_OS_TRACE) |
46f0: 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  | defined(SQLITE
4700: 5f 54 45 53 54 29 20 7c 7c 20 5c 0a 20 20 20 20  _TEST) || \.    
4710: 28 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  (defined(SQLITE_
4720: 44 45 42 55 47 29 20 26 26 20 53 51 4c 49 54 45  DEBUG) && SQLITE
4730: 5f 4f 53 5f 57 49 4e 29 0a 20 20 65 78 74 65 72  _OS_WIN).  exter
4740: 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 4f 53 54  n int sqlite3OST
4750: 72 61 63 65 3b 0a 23 20 64 65 66 69 6e 65 20 4f  race;.# define O
4760: 53 54 52 41 43 45 28 58 29 20 20 20 20 20 20 20  STRACE(X)       
4770: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 4f 53     if( sqlite3OS
4780: 54 72 61 63 65 20 29 20 73 71 6c 69 74 65 33 44  Trace ) sqlite3D
4790: 65 62 75 67 50 72 69 6e 74 66 20 58 0a 23 20 64  ebugPrintf X.# d
47a0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 48 41 56  efine SQLITE_HAV
47b0: 45 5f 4f 53 5f 54 52 41 43 45 0a 23 65 6c 73 65  E_OS_TRACE.#else
47c0: 0a 23 20 64 65 66 69 6e 65 20 4f 53 54 52 41 43  .# define OSTRAC
47d0: 45 28 58 29 0a 23 20 75 6e 64 65 66 20 20 53 51  E(X).# undef  SQ
47e0: 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41  LITE_HAVE_OS_TRA
47f0: 43 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  CE.#endif../*.**
4800: 20 49 73 20 74 68 65 20 73 71 6c 69 74 65 33 45   Is the sqlite3E
4810: 72 72 4e 61 6d 65 28 29 20 66 75 6e 63 74 69 6f  rrName() functio
4820: 6e 20 6e 65 65 64 65 64 20 69 6e 20 74 68 65 20  n needed in the 
4830: 62 75 69 6c 64 3f 20 20 43 75 72 72 65 6e 74 6c  build?  Currentl
4840: 79 2c 0a 2a 2a 20 69 74 20 69 73 20 6e 65 65 64  y,.** it is need
4850: 65 64 20 62 79 20 22 6d 75 74 65 78 5f 77 33 32  ed by "mutex_w32
4860: 2e 63 22 20 28 77 68 65 6e 20 64 65 62 75 67 67  .c" (when debugg
4870: 69 6e 67 29 2c 20 22 6f 73 5f 77 69 6e 2e 63 22  ing), "os_win.c"
4880: 20 28 77 68 65 6e 0a 2a 2a 20 4f 53 54 52 41 43   (when.** OSTRAC
4890: 45 20 69 73 20 65 6e 61 62 6c 65 64 29 2c 20 61  E is enabled), a
48a0: 6e 64 20 62 79 20 73 65 76 65 72 61 6c 20 22 74  nd by several "t
48b0: 65 73 74 2a 2e 63 22 20 66 69 6c 65 73 20 28 77  est*.c" files (w
48c0: 68 69 63 68 20 61 72 65 0a 2a 2a 20 63 6f 6d 70  hich are.** comp
48d0: 69 6c 65 64 20 75 73 69 6e 67 20 53 51 4c 49 54  iled using SQLIT
48e0: 45 5f 54 45 53 54 29 2e 0a 2a 2f 0a 23 69 66 20  E_TEST)..*/.#if 
48f0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 48  defined(SQLITE_H
4900: 41 56 45 5f 4f 53 5f 54 52 41 43 45 29 20 7c 7c  AVE_OS_TRACE) ||
4910: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
4920: 54 45 53 54 29 20 7c 7c 20 5c 0a 20 20 20 20 28  TEST) || \.    (
4930: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
4940: 45 42 55 47 29 20 26 26 20 53 51 4c 49 54 45 5f  EBUG) && SQLITE_
4950: 4f 53 5f 57 49 4e 29 0a 23 20 64 65 66 69 6e 65  OS_WIN).# define
4960: 20 53 51 4c 49 54 45 5f 4e 45 45 44 5f 45 52 52   SQLITE_NEED_ERR
4970: 5f 4e 41 4d 45 0a 23 65 6c 73 65 0a 23 20 75 6e  _NAME.#else.# un
4980: 64 65 66 20 20 53 51 4c 49 54 45 5f 4e 45 45 44  def  SQLITE_NEED
4990: 5f 45 52 52 5f 4e 41 4d 45 0a 23 65 6e 64 69 66  _ERR_NAME.#endif
49a0: 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 45  ../*.** SQLITE_E
49b0: 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e 5f 43 4f  NABLE_EXPLAIN_CO
49c0: 4d 4d 45 4e 54 53 20 69 73 20 69 6e 63 6f 6d 70  MMENTS is incomp
49d0: 61 74 69 62 6c 65 20 77 69 74 68 20 53 51 4c 49  atible with SQLI
49e0: 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a  TE_OMIT_EXPLAIN.
49f0: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
4a00: 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 23 20  _OMIT_EXPLAIN.# 
4a10: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  undef SQLITE_ENA
4a20: 42 4c 45 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d  BLE_EXPLAIN_COMM
4a30: 45 4e 54 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ENTS.#endif../*.
4a40: 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 28  ** Return true (
4a50: 6e 6f 6e 2d 7a 65 72 6f 29 20 69 66 20 74 68 65  non-zero) if the
4a60: 20 69 6e 70 75 74 20 69 73 20 61 6e 20 69 6e 74   input is an int
4a70: 65 67 65 72 20 74 68 61 74 20 69 73 20 74 6f 6f  eger that is too
4a80: 20 6c 61 72 67 65 0a 2a 2a 20 74 6f 20 66 69 74   large.** to fit
4a90: 20 69 6e 20 33 32 2d 62 69 74 73 2e 20 20 54 68   in 32-bits.  Th
4aa0: 69 73 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64  is macro is used
4ab0: 20 69 6e 73 69 64 65 20 6f 66 20 76 61 72 69 6f   inside of vario
4ac0: 75 73 20 74 65 73 74 63 61 73 65 28 29 0a 2a 2a  us testcase().**
4ad0: 20 6d 61 63 72 6f 73 20 74 6f 20 76 65 72 69 66   macros to verif
4ae0: 79 20 74 68 61 74 20 77 65 20 68 61 76 65 20 74  y that we have t
4af0: 65 73 74 65 64 20 53 51 4c 69 74 65 20 66 6f 72  ested SQLite for
4b00: 20 6c 61 72 67 65 2d 66 69 6c 65 20 73 75 70 70   large-file supp
4b10: 6f 72 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ort..*/.#define 
4b20: 49 53 5f 42 49 47 5f 49 4e 54 28 58 29 20 20 28  IS_BIG_INT(X)  (
4b30: 28 28 58 29 26 7e 28 69 36 34 29 30 78 66 66 66  ((X)&~(i64)0xfff
4b40: 66 66 66 66 66 29 21 3d 30 29 0a 0a 2f 2a 0a 2a  fffff)!=0)../*.*
4b50: 2a 20 54 68 65 20 6d 61 63 72 6f 20 75 6e 6c 69  * The macro unli
4b60: 6b 65 6c 79 28 29 20 69 73 20 61 20 68 69 6e 74  kely() is a hint
4b70: 20 74 68 61 74 20 73 75 72 72 6f 75 6e 64 73 20   that surrounds 
4b80: 61 20 62 6f 6f 6c 65 61 6e 0a 2a 2a 20 65 78 70  a boolean.** exp
4b90: 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20  ression that is 
4ba0: 75 73 75 61 6c 6c 79 20 66 61 6c 73 65 2e 20 20  usually false.  
4bb0: 4d 61 63 72 6f 20 6c 69 6b 65 6c 79 28 29 20 73  Macro likely() s
4bc0: 75 72 72 6f 75 6e 64 73 0a 2a 2a 20 61 20 62 6f  urrounds.** a bo
4bd0: 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  olean expression
4be0: 20 74 68 61 74 20 69 73 20 75 73 75 61 6c 6c 79   that is usually
4bf0: 20 74 72 75 65 2e 20 20 54 68 65 73 65 20 68 69   true.  These hi
4c00: 6e 74 73 20 63 6f 75 6c 64 2c 0a 2a 2a 20 69 6e  nts could,.** in
4c10: 20 74 68 65 6f 72 79 2c 20 62 65 20 75 73 65 64   theory, be used
4c20: 20 62 79 20 74 68 65 20 63 6f 6d 70 69 6c 65 72   by the compiler
4c30: 20 74 6f 20 67 65 6e 65 72 61 74 65 20 62 65 74   to generate bet
4c40: 74 65 72 20 63 6f 64 65 2c 20 62 75 74 0a 2a 2a  ter code, but.**
4c50: 20 63 75 72 72 65 6e 74 6c 79 20 74 68 65 79 20   currently they 
4c60: 61 72 65 20 6a 75 73 74 20 63 6f 6d 6d 65 6e 74  are just comment
4c70: 73 20 66 6f 72 20 68 75 6d 61 6e 20 72 65 61 64  s for human read
4c80: 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ers..*/.#define 
4c90: 6c 69 6b 65 6c 79 28 58 29 20 20 20 20 28 58 29  likely(X)    (X)
4ca0: 0a 23 64 65 66 69 6e 65 20 75 6e 6c 69 6b 65 6c  .#define unlikel
4cb0: 79 28 58 29 20 20 28 58 29 0a 0a 23 69 6e 63 6c  y(X)  (X)..#incl
4cc0: 75 64 65 20 22 68 61 73 68 2e 68 22 0a 23 69 6e  ude "hash.h".#in
4cd0: 63 6c 75 64 65 20 22 70 61 72 73 65 2e 68 22 0a  clude "parse.h".
4ce0: 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 69 6f 2e  #include <stdio.
4cf0: 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64  h>.#include <std
4d00: 6c 69 62 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20  lib.h>.#include 
4d10: 3c 73 74 72 69 6e 67 2e 68 3e 0a 23 69 6e 63 6c  <string.h>.#incl
4d20: 75 64 65 20 3c 61 73 73 65 72 74 2e 68 3e 0a 23  ude <assert.h>.#
4d30: 69 6e 63 6c 75 64 65 20 3c 73 74 64 64 65 66 2e  include <stddef.
4d40: 68 3e 0a 0a 2f 2a 0a 2a 2a 20 55 73 65 20 61 20  h>../*.** Use a 
4d50: 6d 61 63 72 6f 20 74 6f 20 72 65 70 6c 61 63 65  macro to replace
4d60: 20 6d 65 6d 63 70 79 28 29 20 69 66 20 63 6f 6d   memcpy() if com
4d70: 70 69 6c 65 64 20 77 69 74 68 20 53 51 4c 49 54  piled with SQLIT
4d80: 45 5f 49 4e 4c 49 4e 45 5f 4d 45 4d 43 50 59 2e  E_INLINE_MEMCPY.
4d90: 0a 2a 2a 20 54 68 69 73 20 61 6c 6c 6f 77 73 20  .** This allows 
4da0: 62 65 74 74 65 72 20 6d 65 61 73 75 72 65 6d 65  better measureme
4db0: 6e 74 73 20 6f 66 20 77 68 65 72 65 20 6d 65 6d  nts of where mem
4dc0: 63 70 79 28 29 20 69 73 20 75 73 65 64 20 77 68  cpy() is used wh
4dd0: 65 6e 20 72 75 6e 6e 69 6e 67 0a 2a 2a 20 63 61  en running.** ca
4de0: 63 68 65 67 72 69 6e 64 2e 20 20 42 75 74 20 74  chegrind.  But t
4df0: 68 69 73 20 6d 61 63 72 6f 20 76 65 72 73 69 6f  his macro versio
4e00: 6e 20 6f 66 20 6d 65 6d 63 70 79 28 29 20 69 73  n of memcpy() is
4e10: 20 76 65 72 79 20 73 6c 6f 77 20 73 6f 20 69 74   very slow so it
4e20: 0a 2a 2a 20 73 68 6f 75 6c 64 20 6e 6f 74 20 62  .** should not b
4e30: 65 20 75 73 65 64 20 69 6e 20 70 72 6f 64 75 63  e used in produc
4e40: 74 69 6f 6e 2e 20 20 54 68 69 73 20 69 73 20 61  tion.  This is a
4e50: 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 6d 65 61   performance mea
4e60: 73 75 72 65 6d 65 6e 74 0a 2a 2a 20 68 61 63 6b  surement.** hack
4e70: 20 6f 6e 6c 79 2e 0a 2a 2f 0a 23 69 66 64 65 66   only..*/.#ifdef
4e80: 20 53 51 4c 49 54 45 5f 49 4e 4c 49 4e 45 5f 4d   SQLITE_INLINE_M
4e90: 45 4d 43 50 59 0a 23 20 64 65 66 69 6e 65 20 6d  EMCPY.# define m
4ea0: 65 6d 63 70 79 28 44 2c 53 2c 4e 29 20 7b 63 68  emcpy(D,S,N) {ch
4eb0: 61 72 2a 78 78 64 3d 28 63 68 61 72 2a 29 28 44  ar*xxd=(char*)(D
4ec0: 29 3b 63 6f 6e 73 74 20 63 68 61 72 2a 78 78 73  );const char*xxs
4ed0: 3d 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 28 53  =(const char*)(S
4ee0: 29 3b 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20  );\.            
4ef0: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
4f00: 78 78 6e 3d 28 4e 29 3b 77 68 69 6c 65 28 78 78  xxn=(N);while(xx
4f10: 6e 2d 2d 3e 30 29 2a 28 78 78 64 2b 2b 29 3d 2a  n-->0)*(xxd++)=*
4f20: 28 78 78 73 2b 2b 29 3b 7d 0a 23 65 6e 64 69 66  (xxs++);}.#endif
4f30: 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 63 6f 6d 70 69  ../*.** If compi
4f40: 6c 69 6e 67 20 66 6f 72 20 61 20 70 72 6f 63 65  ling for a proce
4f50: 73 73 6f 72 20 74 68 61 74 20 6c 61 63 6b 73 20  ssor that lacks 
4f60: 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 73  floating point s
4f70: 75 70 70 6f 72 74 2c 0a 2a 2a 20 73 75 62 73 74  upport,.** subst
4f80: 69 74 75 74 65 20 69 6e 74 65 67 65 72 20 66 6f  itute integer fo
4f90: 72 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74  r floating-point
4fa0: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
4fb0: 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
4fc0: 50 4f 49 4e 54 0a 23 20 64 65 66 69 6e 65 20 64  POINT.# define d
4fd0: 6f 75 62 6c 65 20 73 71 6c 69 74 65 5f 69 6e 74  ouble sqlite_int
4fe0: 36 34 0a 23 20 64 65 66 69 6e 65 20 66 6c 6f 61  64.# define floa
4ff0: 74 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23  t sqlite_int64.#
5000: 20 64 65 66 69 6e 65 20 4c 4f 4e 47 44 4f 55 42   define LONGDOUB
5010: 4c 45 5f 54 59 50 45 20 73 71 6c 69 74 65 5f 69  LE_TYPE sqlite_i
5020: 6e 74 36 34 0a 23 20 69 66 6e 64 65 66 20 53 51  nt64.# ifndef SQ
5030: 4c 49 54 45 5f 42 49 47 5f 44 42 4c 0a 23 20 20  LITE_BIG_DBL.#  
5040: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42   define SQLITE_B
5050: 49 47 5f 44 42 4c 20 28 28 28 73 71 6c 69 74 65  IG_DBL (((sqlite
5060: 33 5f 69 6e 74 36 34 29 31 29 3c 3c 35 30 29 0a  3_int64)1)<<50).
5070: 23 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e 65  # endif.# define
5080: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 41 54   SQLITE_OMIT_DAT
5090: 45 54 49 4d 45 5f 46 55 4e 43 53 20 31 0a 23 20  ETIME_FUNCS 1.# 
50a0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 4d  define SQLITE_OM
50b0: 49 54 5f 54 52 41 43 45 20 31 0a 23 20 75 6e 64  IT_TRACE 1.# und
50c0: 65 66 20 53 51 4c 49 54 45 5f 4d 49 58 45 44 5f  ef SQLITE_MIXED_
50d0: 45 4e 44 49 41 4e 5f 36 34 42 49 54 5f 46 4c 4f  ENDIAN_64BIT_FLO
50e0: 41 54 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54  AT.# undef SQLIT
50f0: 45 5f 48 41 56 45 5f 49 53 4e 41 4e 0a 23 65 6e  E_HAVE_ISNAN.#en
5100: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
5110: 54 45 5f 42 49 47 5f 44 42 4c 0a 23 20 64 65 66  TE_BIG_DBL.# def
5120: 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 5f 44  ine SQLITE_BIG_D
5130: 42 4c 20 28 31 65 39 39 29 0a 23 65 6e 64 69 66  BL (1e99).#endif
5140: 0a 0a 2f 2a 0a 2a 2a 20 4f 4d 49 54 5f 54 45 4d  ../*.** OMIT_TEM
5150: 50 44 42 20 69 73 20 73 65 74 20 74 6f 20 31 20  PDB is set to 1 
5160: 69 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  if SQLITE_OMIT_T
5170: 45 4d 50 44 42 20 69 73 20 64 65 66 69 6e 65 64  EMPDB is defined
5180: 2c 20 6f 72 20 30 0a 2a 2a 20 61 66 74 65 72 77  , or 0.** afterw
5190: 61 72 64 2e 20 48 61 76 69 6e 67 20 74 68 69 73  ard. Having this
51a0: 20 6d 61 63 72 6f 20 61 6c 6c 6f 77 73 20 75 73   macro allows us
51b0: 20 74 6f 20 63 61 75 73 65 20 74 68 65 20 43 20   to cause the C 
51c0: 63 6f 6d 70 69 6c 65 72 0a 2a 2a 20 74 6f 20 6f  compiler.** to o
51d0: 6d 69 74 20 63 6f 64 65 20 75 73 65 64 20 62 79  mit code used by
51e0: 20 54 45 4d 50 20 74 61 62 6c 65 73 20 77 69 74   TEMP tables wit
51f0: 68 6f 75 74 20 6d 65 73 73 79 20 23 69 66 6e 64  hout messy #ifnd
5200: 65 66 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a  ef statements..*
5210: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
5220: 4f 4d 49 54 5f 54 45 4d 50 44 42 0a 23 64 65 66  OMIT_TEMPDB.#def
5230: 69 6e 65 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20  ine OMIT_TEMPDB 
5240: 31 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20  1.#else.#define 
5250: 4f 4d 49 54 5f 54 45 4d 50 44 42 20 30 0a 23 65  OMIT_TEMPDB 0.#e
5260: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
5270: 22 66 69 6c 65 20 66 6f 72 6d 61 74 22 20 6e 75  "file format" nu
5280: 6d 62 65 72 20 69 73 20 61 6e 20 69 6e 74 65 67  mber is an integ
5290: 65 72 20 74 68 61 74 20 69 73 20 69 6e 63 72 65  er that is incre
52a0: 6d 65 6e 74 65 64 20 77 68 65 6e 65 76 65 72 0a  mented whenever.
52b0: 2a 2a 20 74 68 65 20 56 44 42 45 2d 6c 65 76 65  ** the VDBE-leve
52c0: 6c 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 63 68  l file format ch
52d0: 61 6e 67 65 73 2e 20 20 54 68 65 20 66 6f 6c 6c  anges.  The foll
52e0: 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 64 65 66  owing macros def
52f0: 69 6e 65 20 74 68 65 0a 2a 2a 20 74 68 65 20 64  ine the.** the d
5300: 65 66 61 75 6c 74 20 66 69 6c 65 20 66 6f 72 6d  efault file form
5310: 61 74 20 66 6f 72 20 6e 65 77 20 64 61 74 61 62  at for new datab
5320: 61 73 65 73 20 61 6e 64 20 74 68 65 20 6d 61 78  ases and the max
5330: 69 6d 75 6d 20 66 69 6c 65 20 66 6f 72 6d 61 74  imum file format
5340: 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 6c 69 62  .** that the lib
5350: 72 61 72 79 20 63 61 6e 20 72 65 61 64 2e 0a 2a  rary can read..*
5360: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
5370: 5f 4d 41 58 5f 46 49 4c 45 5f 46 4f 52 4d 41 54  _MAX_FILE_FORMAT
5380: 20 34 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54   4.#ifndef SQLIT
5390: 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46  E_DEFAULT_FILE_F
53a0: 4f 52 4d 41 54 0a 23 20 64 65 66 69 6e 65 20 53  ORMAT.# define S
53b0: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 46 49  QLITE_DEFAULT_FI
53c0: 4c 45 5f 46 4f 52 4d 41 54 20 34 0a 23 65 6e 64  LE_FORMAT 4.#end
53d0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65 72 6d  if../*.** Determ
53e0: 69 6e 65 20 77 68 65 74 68 65 72 20 74 72 69 67  ine whether trig
53f0: 67 65 72 73 20 61 72 65 20 72 65 63 75 72 73 69  gers are recursi
5400: 76 65 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20  ve by default.  
5410: 54 68 69 73 20 63 61 6e 20 62 65 0a 2a 2a 20 63  This can be.** c
5420: 68 61 6e 67 65 64 20 61 74 20 72 75 6e 2d 74 69  hanged at run-ti
5430: 6d 65 20 75 73 69 6e 67 20 61 20 70 72 61 67 6d  me using a pragm
5440: 61 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  a..*/.#ifndef SQ
5450: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 52 45 43  LITE_DEFAULT_REC
5460: 55 52 53 49 56 45 5f 54 52 49 47 47 45 52 53 0a  URSIVE_TRIGGERS.
5470: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
5480: 44 45 46 41 55 4c 54 5f 52 45 43 55 52 53 49 56  DEFAULT_RECURSIV
5490: 45 5f 54 52 49 47 47 45 52 53 20 30 0a 23 65 6e  E_TRIGGERS 0.#en
54a0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 76 69  dif../*.** Provi
54b0: 64 65 20 61 20 64 65 66 61 75 6c 74 20 76 61 6c  de a default val
54c0: 75 65 20 66 6f 72 20 53 51 4c 49 54 45 5f 54 45  ue for SQLITE_TE
54d0: 4d 50 5f 53 54 4f 52 45 20 69 6e 20 63 61 73 65  MP_STORE in case
54e0: 20 69 74 20 69 73 20 6e 6f 74 20 73 70 65 63 69   it is not speci
54f0: 66 69 65 64 0a 2a 2a 20 6f 6e 20 74 68 65 20 63  fied.** on the c
5500: 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 0a 2a 2f 0a 23  ommand-line.*/.#
5510: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 54 45  ifndef SQLITE_TE
5520: 4d 50 5f 53 54 4f 52 45 0a 23 20 64 65 66 69 6e  MP_STORE.# defin
5530: 65 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54  e SQLITE_TEMP_ST
5540: 4f 52 45 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ORE 1.#endif../*
5550: 0a 2a 2a 20 49 66 20 6e 6f 20 76 61 6c 75 65 20  .** If no value 
5560: 68 61 73 20 62 65 65 6e 20 70 72 6f 76 69 64 65  has been provide
5570: 64 20 66 6f 72 20 53 51 4c 49 54 45 5f 4d 41 58  d for SQLITE_MAX
5580: 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 2c  _WORKER_THREADS,
5590: 20 6f 72 20 69 66 0a 2a 2a 20 53 51 4c 49 54 45   or if.** SQLITE
55a0: 5f 54 45 4d 50 5f 53 54 4f 52 45 20 69 73 20 73  _TEMP_STORE is s
55b0: 65 74 20 74 6f 20 33 20 28 6e 65 76 65 72 20 75  et to 3 (never u
55c0: 73 65 20 74 65 6d 70 6f 72 61 72 79 20 66 69 6c  se temporary fil
55d0: 65 73 29 2c 20 73 65 74 20 69 74 0a 2a 2a 20 74  es), set it.** t
55e0: 6f 20 7a 65 72 6f 2e 0a 2a 2f 0a 23 69 66 20 53  o zero..*/.#if S
55f0: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
5600: 3d 3d 33 20 7c 7c 20 53 51 4c 49 54 45 5f 54 48  ==3 || SQLITE_TH
5610: 52 45 41 44 53 41 46 45 3d 3d 30 0a 23 20 75 6e  READSAFE==0.# un
5620: 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57  def SQLITE_MAX_W
5630: 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20  ORKER_THREADS.# 
5640: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
5650: 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53  X_WORKER_THREADS
5660: 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65   0.#endif.#ifnde
5670: 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52  f SQLITE_MAX_WOR
5680: 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20 64 65  KER_THREADS.# de
5690: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f  fine SQLITE_MAX_
56a0: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 20 38  WORKER_THREADS 8
56b0: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
56c0: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57  SQLITE_DEFAULT_W
56d0: 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20  ORKER_THREADS.# 
56e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
56f0: 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52  FAULT_WORKER_THR
5700: 45 41 44 53 20 30 0a 23 65 6e 64 69 66 0a 23 69  EADS 0.#endif.#i
5710: 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  f SQLITE_DEFAULT
5720: 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 3e  _WORKER_THREADS>
5730: 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45  SQLITE_MAX_WORKE
5740: 52 5f 54 48 52 45 41 44 53 0a 23 20 75 6e 64 65  R_THREADS.# unde
5750: 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52  f SQLITE_MAX_WOR
5760: 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20 64 65  KER_THREADS.# de
5770: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f  fine SQLITE_MAX_
5780: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 20 53  WORKER_THREADS S
5790: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f  QLITE_DEFAULT_WO
57a0: 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 65 6e  RKER_THREADS.#en
57b0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64  dif../*.** The d
57c0: 65 66 61 75 6c 74 20 69 6e 69 74 69 61 6c 20 61  efault initial a
57d0: 6c 6c 6f 63 61 74 69 6f 6e 20 66 6f 72 20 74 68  llocation for th
57e0: 65 20 70 61 67 65 63 61 63 68 65 20 77 68 65 6e  e pagecache when
57f0: 20 75 73 69 6e 67 20 73 65 70 61 72 61 74 65 0a   using separate.
5800: 2a 2a 20 70 61 67 65 63 61 63 68 65 73 20 66 6f  ** pagecaches fo
5810: 72 20 65 61 63 68 20 64 61 74 61 62 61 73 65 20  r each database 
5820: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 41 20 70  connection.  A p
5830: 6f 73 69 74 69 76 65 20 6e 75 6d 62 65 72 20 69  ositive number i
5840: 73 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20  s the.** number 
5850: 6f 66 20 70 61 67 65 73 2e 20 20 41 20 6e 65 67  of pages.  A neg
5860: 61 74 69 76 65 20 6e 75 6d 62 65 72 20 4e 20 74  ative number N t
5870: 72 61 6e 73 6c 61 74 69 6f 6e 73 20 6d 65 61 6e  ranslations mean
5880: 73 20 74 68 61 74 20 61 20 62 75 66 66 65 72 0a  s that a buffer.
5890: 2a 2a 20 6f 66 20 2d 31 30 32 34 2a 4e 20 62 79  ** of -1024*N by
58a0: 74 65 73 20 69 73 20 61 6c 6c 6f 63 61 74 65 64  tes is allocated
58b0: 20 61 6e 64 20 75 73 65 64 20 66 6f 72 20 61 73   and used for as
58c0: 20 6d 61 6e 79 20 70 61 67 65 73 20 61 73 20 69   many pages as i
58d0: 74 20 77 69 6c 6c 20 68 6f 6c 64 2e 0a 2a 2a 0a  t will hold..**.
58e0: 2a 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20 76  ** The default v
58f0: 61 6c 75 65 20 6f 66 20 22 32 30 22 20 77 61 73  alue of "20" was
5900: 20 63 68 6f 6f 73 65 6e 20 74 6f 20 6d 69 6e 69   choosen to mini
5910: 6d 69 7a 65 20 74 68 65 20 72 75 6e 2d 74 69 6d  mize the run-tim
5920: 65 20 6f 66 20 74 68 65 0a 2a 2a 20 73 70 65 65  e of the.** spee
5930: 64 74 65 73 74 31 20 74 65 73 74 20 70 72 6f 67  dtest1 test prog
5940: 72 61 6d 20 77 69 74 68 20 6f 70 74 69 6f 6e 73  ram with options
5950: 3a 20 2d 2d 73 68 72 69 6e 6b 2d 6d 65 6d 6f 72  : --shrink-memor
5960: 79 20 2d 2d 72 65 70 72 65 70 61 72 65 0a 2a 2f  y --reprepare.*/
5970: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
5980: 44 45 46 41 55 4c 54 5f 50 43 41 43 48 45 5f 49  DEFAULT_PCACHE_I
5990: 4e 49 54 53 5a 0a 23 20 64 65 66 69 6e 65 20 53  NITSZ.# define S
59a0: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 50 43  QLITE_DEFAULT_PC
59b0: 41 43 48 45 5f 49 4e 49 54 53 5a 20 32 30 0a 23  ACHE_INITSZ 20.#
59c0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 66  endif../*.** Def
59d0: 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72 20 74  ault value for t
59e0: 68 65 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47  he SQLITE_CONFIG
59f0: 5f 53 4f 52 54 45 52 52 45 46 5f 53 49 5a 45 20  _SORTERREF_SIZE 
5a00: 6f 70 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 6e 64  option..*/.#ifnd
5a10: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
5a20: 54 5f 53 4f 52 54 45 52 52 45 46 5f 53 49 5a 45  T_SORTERREF_SIZE
5a30: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
5a40: 5f 44 45 46 41 55 4c 54 5f 53 4f 52 54 45 52 52  _DEFAULT_SORTERR
5a50: 45 46 5f 53 49 5a 45 20 30 78 37 66 66 66 66 66  EF_SIZE 0x7fffff
5a60: 66 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  ff.#endif../*.**
5a70: 20 54 68 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d   The compile-tim
5a80: 65 20 6f 70 74 69 6f 6e 73 20 53 51 4c 49 54 45  e options SQLITE
5a90: 5f 4d 4d 41 50 5f 52 45 41 44 57 52 49 54 45 20  _MMAP_READWRITE 
5aa0: 61 6e 64 20 0a 2a 2a 20 53 51 4c 49 54 45 5f 45  and .** SQLITE_E
5ab0: 4e 41 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f 4d  NABLE_BATCH_ATOM
5ac0: 49 43 5f 57 52 49 54 45 20 61 72 65 20 6e 6f 74  IC_WRITE are not
5ad0: 20 63 6f 6d 70 61 74 69 62 6c 65 20 77 69 74 68   compatible with
5ae0: 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2e 0a 2a 2a   one another..**
5af0: 20 59 6f 75 20 6d 75 73 74 20 63 68 6f 6f 73 65   You must choose
5b00: 20 6f 6e 65 20 6f 72 20 74 68 65 20 6f 74 68 65   one or the othe
5b10: 72 20 28 6f 72 20 6e 65 69 74 68 65 72 29 20 62  r (or neither) b
5b20: 75 74 20 6e 6f 74 20 62 6f 74 68 2e 0a 2a 2f 0a  ut not both..*/.
5b30: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
5b40: 54 45 5f 4d 4d 41 50 5f 52 45 41 44 57 52 49 54  TE_MMAP_READWRIT
5b50: 45 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51  E) && defined(SQ
5b60: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 42 41 54 43  LITE_ENABLE_BATC
5b70: 48 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45 29 0a  H_ATOMIC_WRITE).
5b80: 23 65 72 72 6f 72 20 43 61 6e 6e 6f 74 20 75 73  #error Cannot us
5b90: 65 20 62 6f 74 68 20 53 51 4c 49 54 45 5f 4d 4d  e both SQLITE_MM
5ba0: 41 50 5f 52 45 41 44 57 52 49 54 45 20 61 6e 64  AP_READWRITE and
5bb0: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 42   SQLITE_ENABLE_B
5bc0: 41 54 43 48 5f 41 54 4f 4d 49 43 5f 57 52 49 54  ATCH_ATOMIC_WRIT
5bd0: 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  E.#endif../*.** 
5be0: 47 43 43 20 64 6f 65 73 20 6e 6f 74 20 64 65 66  GCC does not def
5bf0: 69 6e 65 20 74 68 65 20 6f 66 66 73 65 74 6f 66  ine the offsetof
5c00: 28 29 20 6d 61 63 72 6f 20 73 6f 20 77 65 27 6c  () macro so we'l
5c10: 6c 20 68 61 76 65 20 74 6f 20 64 6f 20 69 74 0a  l have to do it.
5c20: 2a 2a 20 6f 75 72 73 65 6c 76 65 73 2e 0a 2a 2f  ** ourselves..*/
5c30: 0a 23 69 66 6e 64 65 66 20 6f 66 66 73 65 74 6f  .#ifndef offseto
5c40: 66 0a 23 64 65 66 69 6e 65 20 6f 66 66 73 65 74  f.#define offset
5c50: 6f 66 28 53 54 52 55 43 54 55 52 45 2c 46 49 45  of(STRUCTURE,FIE
5c60: 4c 44 29 20 28 28 69 6e 74 29 28 28 63 68 61 72  LD) ((int)((char
5c70: 2a 29 26 28 28 53 54 52 55 43 54 55 52 45 2a 29  *)&((STRUCTURE*)
5c80: 30 29 2d 3e 46 49 45 4c 44 29 29 0a 23 65 6e 64  0)->FIELD)).#end
5c90: 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73  if../*.** Macros
5ca0: 20 74 6f 20 63 6f 6d 70 75 74 65 20 6d 69 6e 69   to compute mini
5cb0: 6d 75 6d 20 61 6e 64 20 6d 61 78 69 6d 75 6d 20  mum and maximum 
5cc0: 6f 66 20 74 77 6f 20 6e 75 6d 62 65 72 73 2e 0a  of two numbers..
5cd0: 2a 2f 0a 23 69 66 6e 64 65 66 20 4d 49 4e 0a 23  */.#ifndef MIN.#
5ce0: 20 64 65 66 69 6e 65 20 4d 49 4e 28 41 2c 42 29   define MIN(A,B)
5cf0: 20 28 28 41 29 3c 28 42 29 3f 28 41 29 3a 28 42   ((A)<(B)?(A):(B
5d00: 29 29 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  )).#endif.#ifnde
5d10: 66 20 4d 41 58 0a 23 20 64 65 66 69 6e 65 20 4d  f MAX.# define M
5d20: 41 58 28 41 2c 42 29 20 28 28 41 29 3e 28 42 29  AX(A,B) ((A)>(B)
5d30: 3f 28 41 29 3a 28 42 29 29 0a 23 65 6e 64 69 66  ?(A):(B)).#endif
5d40: 0a 0a 2f 2a 0a 2a 2a 20 53 77 61 70 20 74 77 6f  ../*.** Swap two
5d50: 20 6f 62 6a 65 63 74 73 20 6f 66 20 74 79 70 65   objects of type
5d60: 20 54 59 50 45 2e 0a 2a 2f 0a 23 64 65 66 69 6e   TYPE..*/.#defin
5d70: 65 20 53 57 41 50 28 54 59 50 45 2c 41 2c 42 29  e SWAP(TYPE,A,B)
5d80: 20 7b 54 59 50 45 20 74 3d 41 3b 20 41 3d 42 3b   {TYPE t=A; A=B;
5d90: 20 42 3d 74 3b 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68   B=t;}../*.** Ch
5da0: 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74 68  eck to see if th
5db0: 69 73 20 6d 61 63 68 69 6e 65 20 75 73 65 73 20  is machine uses 
5dc0: 45 42 43 44 49 43 2e 20 20 28 59 65 73 2c 20 62  EBCDIC.  (Yes, b
5dd0: 65 6c 69 65 76 65 20 69 74 20 6f 72 0a 2a 2a 20  elieve it or.** 
5de0: 6e 6f 74 2c 20 74 68 65 72 65 20 61 72 65 20 73  not, there are s
5df0: 74 69 6c 6c 20 6d 61 63 68 69 6e 65 73 20 6f 75  till machines ou
5e00: 74 20 74 68 65 72 65 20 74 68 61 74 20 75 73 65  t there that use
5e10: 20 45 42 43 44 49 43 2e 29 0a 2a 2f 0a 23 69 66   EBCDIC.).*/.#if
5e20: 20 27 41 27 20 3d 3d 20 27 5c 33 30 31 27 0a 23   'A' == '\301'.#
5e30: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45   define SQLITE_E
5e40: 42 43 44 49 43 20 31 0a 23 65 6c 73 65 0a 23 20  BCDIC 1.#else.# 
5e50: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 53  define SQLITE_AS
5e60: 43 49 49 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a  CII 1.#endif../*
5e70: 0a 2a 2a 20 49 6e 74 65 67 65 72 73 20 6f 66 20  .** Integers of 
5e80: 6b 6e 6f 77 6e 20 73 69 7a 65 73 2e 20 20 54 68  known sizes.  Th
5e90: 65 73 65 20 74 79 70 65 64 65 66 73 20 6d 69 67  ese typedefs mig
5ea0: 68 74 20 63 68 61 6e 67 65 20 66 6f 72 20 61 72  ht change for ar
5eb0: 63 68 69 74 65 63 74 75 72 65 73 0a 2a 2a 20 77  chitectures.** w
5ec0: 68 65 72 65 20 74 68 65 20 73 69 7a 65 73 20 76  here the sizes v
5ed0: 65 72 79 2e 20 20 50 72 65 70 72 6f 63 65 73 73  ery.  Preprocess
5ee0: 6f 72 20 6d 61 63 72 6f 73 20 61 72 65 20 61 76  or macros are av
5ef0: 61 69 6c 61 62 6c 65 20 73 6f 20 74 68 61 74 20  ailable so that 
5f00: 74 68 65 0a 2a 2a 20 74 79 70 65 73 20 63 61 6e  the.** types can
5f10: 20 62 65 20 63 6f 6e 76 65 6e 69 65 6e 74 6c 79   be conveniently
5f20: 20 72 65 64 65 66 69 6e 65 64 20 61 74 20 63 6f   redefined at co
5f30: 6d 70 69 6c 65 2d 74 79 70 65 2e 20 20 4c 69 6b  mpile-type.  Lik
5f40: 65 20 74 68 69 73 3a 0a 2a 2a 0a 2a 2a 20 20 20  e this:.**.**   
5f50: 20 20 20 20 20 20 63 63 20 27 2d 44 55 49 4e 54        cc '-DUINT
5f60: 50 54 52 5f 54 59 50 45 3d 6c 6f 6e 67 20 6c 6f  PTR_TYPE=long lo
5f70: 6e 67 20 69 6e 74 27 20 2e 2e 2e 0a 2a 2f 0a 23  ng int' ....*/.#
5f80: 69 66 6e 64 65 66 20 55 49 4e 54 33 32 5f 54 59  ifndef UINT32_TY
5f90: 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f  PE.# ifdef HAVE_
5fa0: 55 49 4e 54 33 32 5f 54 0a 23 20 20 64 65 66 69  UINT32_T.#  defi
5fb0: 6e 65 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75  ne UINT32_TYPE u
5fc0: 69 6e 74 33 32 5f 74 0a 23 20 65 6c 73 65 0a 23  int32_t.# else.#
5fd0: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 33 32 5f    define UINT32_
5fe0: 54 59 50 45 20 75 6e 73 69 67 6e 65 64 20 69 6e  TYPE unsigned in
5ff0: 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  t.# endif.#endif
6000: 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 31 36 5f  .#ifndef UINT16_
6010: 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56  TYPE.# ifdef HAV
6020: 45 5f 55 49 4e 54 31 36 5f 54 0a 23 20 20 64 65  E_UINT16_T.#  de
6030: 66 69 6e 65 20 55 49 4e 54 31 36 5f 54 59 50 45  fine UINT16_TYPE
6040: 20 75 69 6e 74 31 36 5f 74 0a 23 20 65 6c 73 65   uint16_t.# else
6050: 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 31  .#  define UINT1
6060: 36 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64 20  6_TYPE unsigned 
6070: 73 68 6f 72 74 20 69 6e 74 0a 23 20 65 6e 64 69  short int.# endi
6080: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
6090: 20 49 4e 54 31 36 5f 54 59 50 45 0a 23 20 69 66   INT16_TYPE.# if
60a0: 64 65 66 20 48 41 56 45 5f 49 4e 54 31 36 5f 54  def HAVE_INT16_T
60b0: 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 31 36  .#  define INT16
60c0: 5f 54 59 50 45 20 69 6e 74 31 36 5f 74 0a 23 20  _TYPE int16_t.# 
60d0: 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49  else.#  define I
60e0: 4e 54 31 36 5f 54 59 50 45 20 73 68 6f 72 74 20  NT16_TYPE short 
60f0: 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64  int.# endif.#end
6100: 69 66 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 38  if.#ifndef UINT8
6110: 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41  _TYPE.# ifdef HA
6120: 56 45 5f 55 49 4e 54 38 5f 54 0a 23 20 20 64 65  VE_UINT8_T.#  de
6130: 66 69 6e 65 20 55 49 4e 54 38 5f 54 59 50 45 20  fine UINT8_TYPE 
6140: 75 69 6e 74 38 5f 74 0a 23 20 65 6c 73 65 0a 23  uint8_t.# else.#
6150: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 38 5f 54    define UINT8_T
6160: 59 50 45 20 75 6e 73 69 67 6e 65 64 20 63 68 61  YPE unsigned cha
6170: 72 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  r.# endif.#endif
6180: 0a 23 69 66 6e 64 65 66 20 49 4e 54 38 5f 54 59  .#ifndef INT8_TY
6190: 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f  PE.# ifdef HAVE_
61a0: 49 4e 54 38 5f 54 0a 23 20 20 64 65 66 69 6e 65  INT8_T.#  define
61b0: 20 49 4e 54 38 5f 54 59 50 45 20 69 6e 74 38 5f   INT8_TYPE int8_
61c0: 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  t.# else.#  defi
61d0: 6e 65 20 49 4e 54 38 5f 54 59 50 45 20 73 69 67  ne INT8_TYPE sig
61e0: 6e 65 64 20 63 68 61 72 0a 23 20 65 6e 64 69 66  ned char.# endif
61f0: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
6200: 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 0a  LONGDOUBLE_TYPE.
6210: 23 20 64 65 66 69 6e 65 20 4c 4f 4e 47 44 4f 55  # define LONGDOU
6220: 42 4c 45 5f 54 59 50 45 20 6c 6f 6e 67 20 64 6f  BLE_TYPE long do
6230: 75 62 6c 65 0a 23 65 6e 64 69 66 0a 74 79 70 65  uble.#endif.type
6240: 64 65 66 20 73 71 6c 69 74 65 5f 69 6e 74 36 34  def sqlite_int64
6250: 20 69 36 34 3b 20 20 20 20 20 20 20 20 20 20 2f   i64;          /
6260: 2a 20 38 2d 62 79 74 65 20 73 69 67 6e 65 64 20  * 8-byte signed 
6270: 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64  integer */.typed
6280: 65 66 20 73 71 6c 69 74 65 5f 75 69 6e 74 36 34  ef sqlite_uint64
6290: 20 75 36 34 3b 20 20 20 20 20 20 20 20 20 2f 2a   u64;         /*
62a0: 20 38 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64   8-byte unsigned
62b0: 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65   integer */.type
62c0: 64 65 66 20 55 49 4e 54 33 32 5f 54 59 50 45 20  def UINT32_TYPE 
62d0: 75 33 32 3b 20 20 20 20 20 20 20 20 20 20 20 2f  u32;           /
62e0: 2a 20 34 2d 62 79 74 65 20 75 6e 73 69 67 6e 65  * 4-byte unsigne
62f0: 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70  d integer */.typ
6300: 65 64 65 66 20 55 49 4e 54 31 36 5f 54 59 50 45  edef UINT16_TYPE
6310: 20 75 31 36 3b 20 20 20 20 20 20 20 20 20 20 20   u16;           
6320: 2f 2a 20 32 2d 62 79 74 65 20 75 6e 73 69 67 6e  /* 2-byte unsign
6330: 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79  ed integer */.ty
6340: 70 65 64 65 66 20 49 4e 54 31 36 5f 54 59 50 45  pedef INT16_TYPE
6350: 20 69 31 36 3b 20 20 20 20 20 20 20 20 20 20 20   i16;           
6360: 20 2f 2a 20 32 2d 62 79 74 65 20 73 69 67 6e 65   /* 2-byte signe
6370: 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70  d integer */.typ
6380: 65 64 65 66 20 55 49 4e 54 38 5f 54 59 50 45 20  edef UINT8_TYPE 
6390: 75 38 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  u8;             
63a0: 2f 2a 20 31 2d 62 79 74 65 20 75 6e 73 69 67 6e  /* 1-byte unsign
63b0: 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79  ed integer */.ty
63c0: 70 65 64 65 66 20 49 4e 54 38 5f 54 59 50 45 20  pedef INT8_TYPE 
63d0: 69 38 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  i8;             
63e0: 20 2f 2a 20 31 2d 62 79 74 65 20 73 69 67 6e 65   /* 1-byte signe
63f0: 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 0a 2f 2a  d integer */../*
6400: 0a 2a 2a 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55  .** SQLITE_MAX_U
6410: 33 32 20 69 73 20 61 20 75 36 34 20 63 6f 6e 73  32 is a u64 cons
6420: 74 61 6e 74 20 74 68 61 74 20 69 73 20 74 68 65  tant that is the
6430: 20 6d 61 78 69 6d 75 6d 20 75 36 34 20 76 61 6c   maximum u64 val
6440: 75 65 0a 2a 2a 20 74 68 61 74 20 63 61 6e 20 62  ue.** that can b
6450: 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 75 33  e stored in a u3
6460: 32 20 77 69 74 68 6f 75 74 20 6c 6f 73 73 20 6f  2 without loss o
6470: 66 20 64 61 74 61 2e 20 20 54 68 65 20 76 61 6c  f data.  The val
6480: 75 65 0a 2a 2a 20 69 73 20 30 78 30 30 30 30 30  ue.** is 0x00000
6490: 30 30 30 66 66 66 66 66 66 66 66 2e 20 20 42 75  000ffffffff.  Bu
64a0: 74 20 62 65 63 61 75 73 65 20 6f 66 20 71 75 69  t because of qui
64b0: 72 6b 73 20 6f 66 20 73 6f 6d 65 20 63 6f 6d 70  rks of some comp
64c0: 69 6c 65 72 73 2c 20 77 65 0a 2a 2a 20 68 61 76  ilers, we.** hav
64d0: 65 20 74 6f 20 73 70 65 63 69 66 79 20 74 68 65  e to specify the
64e0: 20 76 61 6c 75 65 20 69 6e 20 74 68 65 20 6c 65   value in the le
64f0: 73 73 20 69 6e 74 75 69 74 69 76 65 20 6d 61 6e  ss intuitive man
6500: 6e 65 72 20 73 68 6f 77 6e 3a 0a 2a 2f 0a 23 64  ner shown:.*/.#d
6510: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58  efine SQLITE_MAX
6520: 5f 55 33 32 20 20 28 28 28 28 75 36 34 29 31 29  _U32  ((((u64)1)
6530: 3c 3c 33 32 29 2d 31 29 0a 0a 2f 2a 0a 2a 2a 20  <<32)-1)../*.** 
6540: 54 68 65 20 64 61 74 61 74 79 70 65 20 75 73 65  The datatype use
6550: 64 20 74 6f 20 73 74 6f 72 65 20 65 73 74 69 6d  d to store estim
6560: 61 74 65 73 20 6f 66 20 74 68 65 20 6e 75 6d 62  ates of the numb
6570: 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 61 0a  er of rows in a.
6580: 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  ** table or inde
6590: 78 2e 20 20 54 68 69 73 20 69 73 20 61 6e 20 75  x.  This is an u
65a0: 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20  nsigned integer 
65b0: 74 79 70 65 2e 20 20 46 6f 72 20 39 39 2e 39 25  type.  For 99.9%
65c0: 20 6f 66 0a 2a 2a 20 74 68 65 20 77 6f 72 6c 64   of.** the world
65d0: 2c 20 61 20 33 32 2d 62 69 74 20 69 6e 74 65 67  , a 32-bit integ
65e0: 65 72 20 69 73 20 73 75 66 66 69 63 69 65 6e 74  er is sufficient
65f0: 2e 20 20 42 75 74 20 61 20 36 34 2d 62 69 74 20  .  But a 64-bit 
6600: 69 6e 74 65 67 65 72 0a 2a 2a 20 63 61 6e 20 62  integer.** can b
6610: 65 20 75 73 65 64 20 61 74 20 63 6f 6d 70 69 6c  e used at compil
6620: 65 2d 74 69 6d 65 20 69 66 20 64 65 73 69 72 65  e-time if desire
6630: 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  d..*/.#ifdef SQL
6640: 49 54 45 5f 36 34 42 49 54 5f 53 54 41 54 53 0a  ITE_64BIT_STATS.
6650: 20 74 79 70 65 64 65 66 20 75 36 34 20 74 52 6f   typedef u64 tRo
6660: 77 63 6e 74 3b 20 20 20 20 2f 2a 20 36 34 2d 62  wcnt;    /* 64-b
6670: 69 74 20 6f 6e 6c 79 20 69 66 20 72 65 71 75 65  it only if reque
6680: 73 74 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d  sted at compile-
6690: 74 69 6d 65 20 2a 2f 0a 23 65 6c 73 65 0a 20 74  time */.#else. t
66a0: 79 70 65 64 65 66 20 75 33 32 20 74 52 6f 77 63  ypedef u32 tRowc
66b0: 6e 74 3b 20 20 20 20 2f 2a 20 33 32 2d 62 69 74  nt;    /* 32-bit
66c0: 20 69 73 20 74 68 65 20 64 65 66 61 75 6c 74 20   is the default 
66d0: 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  */.#endif../*.**
66e0: 20 45 73 74 69 6d 61 74 65 64 20 71 75 61 6e 74   Estimated quant
66f0: 69 74 69 65 73 20 75 73 65 64 20 66 6f 72 20 71  ities used for q
6700: 75 65 72 79 20 70 6c 61 6e 6e 69 6e 67 20 61 72  uery planning ar
6710: 65 20 73 74 6f 72 65 64 20 61 73 20 31 36 2d 62  e stored as 16-b
6720: 69 74 0a 2a 2a 20 6c 6f 67 61 72 69 74 68 6d 73  it.** logarithms
6730: 2e 20 20 46 6f 72 20 71 75 61 6e 74 69 74 79 20  .  For quantity 
6740: 58 2c 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f  X, the value sto
6750: 72 65 64 20 69 73 20 31 30 2a 6c 6f 67 32 28 58  red is 10*log2(X
6760: 29 2e 20 20 54 68 69 73 0a 2a 2a 20 67 69 76 65  ).  This.** give
6770: 73 20 61 20 70 6f 73 73 69 62 6c 65 20 72 61 6e  s a possible ran
6780: 67 65 20 6f 66 20 76 61 6c 75 65 73 20 6f 66 20  ge of values of 
6790: 61 70 70 72 6f 78 69 6d 61 74 65 6c 79 20 31 2e  approximately 1.
67a0: 30 65 39 38 36 20 74 6f 20 31 65 2d 39 38 36 2e  0e986 to 1e-986.
67b0: 0a 2a 2a 20 42 75 74 20 74 68 65 20 61 6c 6c 6f  .** But the allo
67c0: 77 65 64 20 76 61 6c 75 65 73 20 61 72 65 20 22  wed values are "
67d0: 67 72 61 69 6e 79 22 2e 20 20 4e 6f 74 20 65 76  grainy".  Not ev
67e0: 65 72 79 20 76 61 6c 75 65 20 69 73 20 72 65 70  ery value is rep
67f0: 72 65 73 65 6e 74 61 62 6c 65 2e 0a 2a 2a 20 46  resentable..** F
6800: 6f 72 20 65 78 61 6d 70 6c 65 2c 20 71 75 61 6e  or example, quan
6810: 74 69 74 69 65 73 20 31 36 20 61 6e 64 20 31 37  tities 16 and 17
6820: 20 61 72 65 20 62 6f 74 68 20 72 65 70 72 65 73   are both repres
6830: 65 6e 74 65 64 20 62 79 20 61 20 4c 6f 67 45 73  ented by a LogEs
6840: 74 0a 2a 2a 20 6f 66 20 34 30 2e 20 20 48 6f 77  t.** of 40.  How
6850: 65 76 65 72 2c 20 73 69 6e 63 65 20 4c 6f 67 45  ever, since LogE
6860: 73 74 20 71 75 61 6e 74 69 74 69 65 73 20 61 72  st quantities ar
6870: 65 20 73 75 70 70 6f 73 65 20 74 6f 20 62 65 20  e suppose to be 
6880: 65 73 74 69 6d 61 74 65 73 2c 0a 2a 2a 20 6e 6f  estimates,.** no
6890: 74 20 65 78 61 63 74 20 76 61 6c 75 65 73 2c 20  t exact values, 
68a0: 74 68 69 73 20 69 6d 70 72 65 63 69 73 69 6f 6e  this imprecision
68b0: 20 69 73 20 6e 6f 74 20 61 20 70 72 6f 62 6c 65   is not a proble
68c0: 6d 2e 0a 2a 2a 0a 2a 2a 20 22 4c 6f 67 45 73 74  m..**.** "LogEst
68d0: 22 20 69 73 20 73 68 6f 72 74 20 66 6f 72 20 22  " is short for "
68e0: 4c 6f 67 61 72 69 74 68 6d 69 63 20 45 73 74 69  Logarithmic Esti
68f0: 6d 61 74 65 22 2e 0a 2a 2a 0a 2a 2a 20 45 78 61  mate"..**.** Exa
6900: 6d 70 6c 65 73 3a 0a 2a 2a 20 20 20 20 20 20 31  mples:.**      1
6910: 20 2d 3e 20 30 20 20 20 20 20 20 20 20 20 20 20   -> 0           
6920: 20 20 20 32 30 20 2d 3e 20 34 33 20 20 20 20 20     20 -> 43     
6930: 20 20 20 20 20 31 30 30 30 30 20 2d 3e 20 31 33       10000 -> 13
6940: 32 0a 2a 2a 20 20 20 20 20 20 32 20 2d 3e 20 31  2.**      2 -> 1
6950: 30 20 20 20 20 20 20 20 20 20 20 20 20 20 32 35  0             25
6960: 20 2d 3e 20 34 36 20 20 20 20 20 20 20 20 20 20   -> 46          
6970: 32 35 30 30 30 20 2d 3e 20 31 34 36 0a 2a 2a 20  25000 -> 146.** 
6980: 20 20 20 20 20 33 20 2d 3e 20 31 36 20 20 20 20       3 -> 16    
6990: 20 20 20 20 20 20 20 20 31 30 30 20 2d 3e 20 36          100 -> 6
69a0: 36 20 20 20 20 20 20 20 20 31 30 30 30 30 30 30  6        1000000
69b0: 20 2d 3e 20 31 39 39 0a 2a 2a 20 20 20 20 20 20   -> 199.**      
69c0: 34 20 2d 3e 20 32 30 20 20 20 20 20 20 20 20 20  4 -> 20         
69d0: 20 20 31 30 30 30 20 2d 3e 20 39 39 20 20 20 20    1000 -> 99    
69e0: 20 20 20 20 31 30 34 38 35 37 36 20 2d 3e 20 32      1048576 -> 2
69f0: 30 30 0a 2a 2a 20 20 20 20 20 31 30 20 2d 3e 20  00.**     10 -> 
6a00: 33 33 20 20 20 20 20 20 20 20 20 20 20 31 30 32  33           102
6a10: 34 20 2d 3e 20 31 30 30 20 20 20 20 34 32 39 34  4 -> 100    4294
6a20: 39 36 37 32 39 36 20 2d 3e 20 33 32 30 0a 2a 2a  967296 -> 320.**
6a30: 0a 2a 2a 20 54 68 65 20 4c 6f 67 45 73 74 20 63  .** The LogEst c
6a40: 61 6e 20 62 65 20 6e 65 67 61 74 69 76 65 20 74  an be negative t
6a50: 6f 20 69 6e 64 69 63 61 74 65 20 66 72 61 63 74  o indicate fract
6a60: 69 6f 6e 61 6c 20 76 61 6c 75 65 73 2e 0a 2a 2a  ional values..**
6a70: 20 45 78 61 6d 70 6c 65 73 3a 0a 2a 2a 0a 2a 2a   Examples:.**.**
6a80: 20 20 20 20 30 2e 35 20 2d 3e 20 2d 31 30 20 20      0.5 -> -10  
6a90: 20 20 20 20 20 20 20 20 20 30 2e 31 20 2d 3e 20           0.1 -> 
6aa0: 2d 33 33 20 20 20 20 20 20 20 20 30 2e 30 36 32  -33        0.062
6ab0: 35 20 2d 3e 20 2d 34 30 0a 2a 2f 0a 74 79 70 65  5 -> -40.*/.type
6ac0: 64 65 66 20 49 4e 54 31 36 5f 54 59 50 45 20 4c  def INT16_TYPE L
6ad0: 6f 67 45 73 74 3b 0a 0a 2f 2a 0a 2a 2a 20 53 65  ogEst;../*.** Se
6ae0: 74 20 74 68 65 20 53 51 4c 49 54 45 5f 50 54 52  t the SQLITE_PTR
6af0: 53 49 5a 45 20 6d 61 63 72 6f 20 74 6f 20 74 68  SIZE macro to th
6b00: 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  e number of byte
6b10: 73 20 69 6e 20 61 20 70 6f 69 6e 74 65 72 0a 2a  s in a pointer.*
6b20: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
6b30: 5f 50 54 52 53 49 5a 45 0a 23 20 69 66 20 64 65  _PTRSIZE.# if de
6b40: 66 69 6e 65 64 28 5f 5f 53 49 5a 45 4f 46 5f 50  fined(__SIZEOF_P
6b50: 4f 49 4e 54 45 52 5f 5f 29 0a 23 20 20 20 64 65  OINTER__).#   de
6b60: 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 53  fine SQLITE_PTRS
6b70: 49 5a 45 20 5f 5f 53 49 5a 45 4f 46 5f 50 4f 49  IZE __SIZEOF_POI
6b80: 4e 54 45 52 5f 5f 0a 23 20 65 6c 69 66 20 64 65  NTER__.# elif de
6b90: 66 69 6e 65 64 28 69 33 38 36 29 20 20 20 20 20  fined(i386)     
6ba0: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 69 33 38  || defined(__i38
6bb0: 36 5f 5f 29 20 20 20 7c 7c 20 64 65 66 69 6e 65  6__)   || define
6bc0: 64 28 5f 4d 5f 49 58 38 36 29 20 7c 7c 20 20 20  d(_M_IX86) ||   
6bd0: 20 5c 0a 20 20 20 20 20 20 20 64 65 66 69 6e 65   \.       define
6be0: 64 28 5f 4d 5f 41 52 4d 29 20 20 20 7c 7c 20 64  d(_M_ARM)   || d
6bf0: 65 66 69 6e 65 64 28 5f 5f 61 72 6d 5f 5f 29 20  efined(__arm__) 
6c00: 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f     || defined(__
6c10: 78 38 36 29 20 20 20 7c 7c 20 20 20 20 5c 0a 20  x86)   ||    \. 
6c20: 20 20 20 20 20 28 64 65 66 69 6e 65 64 28 5f 5f       (defined(__
6c30: 54 4f 53 5f 41 49 58 5f 5f 29 20 26 26 20 21 64  TOS_AIX__) && !d
6c40: 65 66 69 6e 65 64 28 5f 5f 36 34 42 49 54 5f 5f  efined(__64BIT__
6c50: 29 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51  )).#   define SQ
6c60: 4c 49 54 45 5f 50 54 52 53 49 5a 45 20 34 0a 23  LITE_PTRSIZE 4.#
6c70: 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e 65   else.#   define
6c80: 20 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 20   SQLITE_PTRSIZE 
6c90: 38 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  8.# endif.#endif
6ca0: 0a 0a 2f 2a 20 54 68 65 20 75 70 74 72 20 74 79  ../* The uptr ty
6cb0: 70 65 20 69 73 20 61 6e 20 75 6e 73 69 67 6e 65  pe is an unsigne
6cc0: 64 20 69 6e 74 65 67 65 72 20 6c 61 72 67 65 20  d integer large 
6cd0: 65 6e 6f 75 67 68 20 74 6f 20 68 6f 6c 64 20 61  enough to hold a
6ce0: 20 70 6f 69 6e 74 65 72 0a 2a 2f 0a 23 69 66 20   pointer.*/.#if 
6cf0: 64 65 66 69 6e 65 64 28 48 41 56 45 5f 53 54 44  defined(HAVE_STD
6d00: 49 4e 54 5f 48 29 0a 20 20 74 79 70 65 64 65 66  INT_H).  typedef
6d10: 20 75 69 6e 74 70 74 72 5f 74 20 75 70 74 72 3b   uintptr_t uptr;
6d20: 0a 23 65 6c 69 66 20 53 51 4c 49 54 45 5f 50 54  .#elif SQLITE_PT
6d30: 52 53 49 5a 45 3d 3d 34 0a 20 20 74 79 70 65 64  RSIZE==4.  typed
6d40: 65 66 20 75 33 32 20 75 70 74 72 3b 0a 23 65 6c  ef u32 uptr;.#el
6d50: 73 65 0a 20 20 74 79 70 65 64 65 66 20 75 36 34  se.  typedef u64
6d60: 20 75 70 74 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f   uptr;.#endif../
6d70: 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f  *.** The SQLITE_
6d80: 57 49 54 48 49 4e 28 50 2c 53 2c 45 29 20 6d 61  WITHIN(P,S,E) ma
6d90: 63 72 6f 20 63 68 65 63 6b 73 20 74 6f 20 73 65  cro checks to se
6da0: 65 20 69 66 20 70 6f 69 6e 74 65 72 20 50 20 70  e if pointer P p
6db0: 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 6f 6d 65  oints to.** some
6dc0: 74 68 69 6e 67 20 62 65 74 77 65 65 6e 20 53 20  thing between S 
6dd0: 28 69 6e 63 6c 75 73 69 76 65 29 20 61 6e 64 20  (inclusive) and 
6de0: 45 20 28 65 78 63 6c 75 73 69 76 65 29 2e 0a 2a  E (exclusive)..*
6df0: 2a 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f  *.** In other wo
6e00: 72 64 73 2c 20 53 20 69 73 20 61 20 62 75 66 66  rds, S is a buff
6e10: 65 72 20 61 6e 64 20 45 20 69 73 20 61 20 70 6f  er and E is a po
6e20: 69 6e 74 65 72 20 74 6f 20 74 68 65 20 66 69 72  inter to the fir
6e30: 73 74 20 62 79 74 65 20 61 66 74 65 72 0a 2a 2a  st byte after.**
6e40: 20 74 68 65 20 65 6e 64 20 6f 66 20 62 75 66 66   the end of buff
6e50: 65 72 20 53 2e 20 20 54 68 69 73 20 6d 61 63 72  er S.  This macr
6e60: 6f 20 72 65 74 75 72 6e 73 20 74 72 75 65 20 69  o returns true i
6e70: 66 20 50 20 70 6f 69 6e 74 73 20 74 6f 20 73 6f  f P points to so
6e80: 6d 65 74 68 69 6e 67 0a 2a 2a 20 63 6f 6e 74 61  mething.** conta
6e90: 69 6e 65 64 20 77 69 74 68 69 6e 20 74 68 65 20  ined within the 
6ea0: 62 75 66 66 65 72 20 53 2e 0a 2a 2f 0a 23 64 65  buffer S..*/.#de
6eb0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 49 54 48  fine SQLITE_WITH
6ec0: 49 4e 28 50 2c 53 2c 45 29 20 28 28 28 75 70 74  IN(P,S,E) (((upt
6ed0: 72 29 28 50 29 3e 3d 28 75 70 74 72 29 28 53 29  r)(P)>=(uptr)(S)
6ee0: 29 26 26 28 28 75 70 74 72 29 28 50 29 3c 28 75  )&&((uptr)(P)<(u
6ef0: 70 74 72 29 28 45 29 29 29 0a 0a 0a 2f 2a 0a 2a  ptr)(E))).../*.*
6f00: 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74 65  * Macros to dete
6f10: 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 74 68  rmine whether th
6f20: 65 20 6d 61 63 68 69 6e 65 20 69 73 20 62 69 67  e machine is big
6f30: 20 6f 72 20 6c 69 74 74 6c 65 20 65 6e 64 69 61   or little endia
6f40: 6e 2c 0a 2a 2a 20 61 6e 64 20 77 68 65 74 68 65  n,.** and whethe
6f50: 72 20 6f 72 20 6e 6f 74 20 74 68 61 74 20 64 65  r or not that de
6f60: 74 65 72 6d 69 6e 61 74 69 6f 6e 20 69 73 20 72  termination is r
6f70: 75 6e 2d 74 69 6d 65 20 6f 72 20 63 6f 6d 70 69  un-time or compi
6f80: 6c 65 2d 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 46  le-time..**.** F
6f90: 6f 72 20 62 65 73 74 20 70 65 72 66 6f 72 6d 61  or best performa
6fa0: 6e 63 65 2c 20 61 6e 20 61 74 74 65 6d 70 74 20  nce, an attempt 
6fb0: 69 73 20 6d 61 64 65 20 74 6f 20 67 75 65 73 73  is made to guess
6fc0: 20 61 74 20 74 68 65 20 62 79 74 65 2d 6f 72 64   at the byte-ord
6fd0: 65 72 0a 2a 2a 20 75 73 69 6e 67 20 43 2d 70 72  er.** using C-pr
6fe0: 65 70 72 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f  eprocessor macro
6ff0: 73 2e 20 20 49 66 20 74 68 61 74 20 69 73 20 75  s.  If that is u
7000: 6e 73 75 63 63 65 73 73 66 75 6c 2c 20 6f 72 20  nsuccessful, or 
7010: 69 66 0a 2a 2a 20 2d 44 53 51 4c 49 54 45 5f 42  if.** -DSQLITE_B
7020: 59 54 45 4f 52 44 45 52 3d 30 20 69 73 20 73 65  YTEORDER=0 is se
7030: 74 2c 20 74 68 65 6e 20 62 79 74 65 2d 6f 72 64  t, then byte-ord
7040: 65 72 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  er is determined
7050: 0a 2a 2a 20 61 74 20 72 75 6e 2d 74 69 6d 65 2e  .** at run-time.
7060: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
7070: 54 45 5f 42 59 54 45 4f 52 44 45 52 0a 23 20 69  TE_BYTEORDER.# i
7080: 66 20 64 65 66 69 6e 65 64 28 69 33 38 36 29 20  f defined(i386) 
7090: 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f      || defined(_
70a0: 5f 69 33 38 36 5f 5f 29 20 20 20 7c 7c 20 64 65  _i386__)   || de
70b0: 66 69 6e 65 64 28 5f 4d 5f 49 58 38 36 29 20 7c  fined(_M_IX86) |
70c0: 7c 20 20 20 20 5c 0a 20 20 20 20 20 64 65 66 69  |    \.     defi
70d0: 6e 65 64 28 5f 5f 78 38 36 5f 36 34 29 20 7c 7c  ned(__x86_64) ||
70e0: 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36   defined(__x86_6
70f0: 34 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  4__) || defined(
7100: 5f 4d 5f 58 36 34 29 20 20 7c 7c 20 20 20 20 5c  _M_X64)  ||    \
7110: 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28 5f 4d  .     defined(_M
7120: 5f 41 4d 44 36 34 29 20 7c 7c 20 64 65 66 69 6e  _AMD64) || defin
7130: 65 64 28 5f 4d 5f 41 52 4d 29 20 20 20 20 20 7c  ed(_M_ARM)     |
7140: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 29  | defined(__x86)
7150: 20 20 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20     ||    \.     
7160: 64 65 66 69 6e 65 64 28 5f 5f 61 72 6d 5f 5f 29  defined(__arm__)
7170: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f    || defined(_M_
7180: 41 52 4d 36 34 29 0a 23 20 20 20 64 65 66 69 6e  ARM64).#   defin
7190: 65 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44  e SQLITE_BYTEORD
71a0: 45 52 20 20 20 20 31 32 33 34 0a 23 20 65 6c 69  ER    1234.# eli
71b0: 66 20 64 65 66 69 6e 65 64 28 73 70 61 72 63 29  f defined(sparc)
71c0: 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f      || defined(_
71d0: 5f 70 70 63 5f 5f 29 0a 23 20 20 20 64 65 66 69  _ppc__).#   defi
71e0: 6e 65 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52  ne SQLITE_BYTEOR
71f0: 44 45 52 20 20 20 20 34 33 32 31 0a 23 20 65 6c  DER    4321.# el
7200: 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51  se.#   define SQ
7210: 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52 20 30  LITE_BYTEORDER 0
7220: 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  .# endif.#endif.
7230: 23 69 66 20 53 51 4c 49 54 45 5f 42 59 54 45 4f  #if SQLITE_BYTEO
7240: 52 44 45 52 3d 3d 34 33 32 31 0a 23 20 64 65 66  RDER==4321.# def
7250: 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e  ine SQLITE_BIGEN
7260: 44 49 41 4e 20 20 20 20 31 0a 23 20 64 65 66 69  DIAN    1.# defi
7270: 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45  ne SQLITE_LITTLE
7280: 45 4e 44 49 41 4e 20 30 0a 23 20 64 65 66 69 6e  ENDIAN 0.# defin
7290: 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41  e SQLITE_UTF16NA
72a0: 54 49 56 45 20 20 53 51 4c 49 54 45 5f 55 54 46  TIVE  SQLITE_UTF
72b0: 31 36 42 45 0a 23 65 6c 69 66 20 53 51 4c 49 54  16BE.#elif SQLIT
72c0: 45 5f 42 59 54 45 4f 52 44 45 52 3d 3d 31 32 33  E_BYTEORDER==123
72d0: 34 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  4.# define SQLIT
72e0: 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20 30  E_BIGENDIAN    0
72f0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
7300: 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 31 0a  _LITTLEENDIAN 1.
7310: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
7320: 55 54 46 31 36 4e 41 54 49 56 45 20 20 53 51 4c  UTF16NATIVE  SQL
7330: 49 54 45 5f 55 54 46 31 36 4c 45 0a 23 65 6c 73  ITE_UTF16LE.#els
7340: 65 0a 23 20 69 66 64 65 66 20 53 51 4c 49 54 45  e.# ifdef SQLITE
7350: 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 20 20  _AMALGAMATION.  
7360: 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69 74 65  const int sqlite
7370: 33 6f 6e 65 20 3d 20 31 3b 0a 23 20 65 6c 73 65  3one = 1;.# else
7380: 0a 20 20 65 78 74 65 72 6e 20 63 6f 6e 73 74 20  .  extern const 
7390: 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65 3b 0a  int sqlite3one;.
73a0: 23 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e 65  # endif.# define
73b0: 20 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41   SQLITE_BIGENDIA
73c0: 4e 20 20 20 20 28 2a 28 63 68 61 72 20 2a 29 28  N    (*(char *)(
73d0: 26 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d 30 29  &sqlite3one)==0)
73e0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
73f0: 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 28 2a  _LITTLEENDIAN (*
7400: 28 63 68 61 72 20 2a 29 28 26 73 71 6c 69 74 65  (char *)(&sqlite
7410: 33 6f 6e 65 29 3d 3d 31 29 0a 23 20 64 65 66 69  3one)==1).# defi
7420: 6e 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e  ne SQLITE_UTF16N
7430: 41 54 49 56 45 20 20 28 53 51 4c 49 54 45 5f 42  ATIVE  (SQLITE_B
7440: 49 47 45 4e 44 49 41 4e 3f 53 51 4c 49 54 45 5f  IGENDIAN?SQLITE_
7450: 55 54 46 31 36 42 45 3a 53 51 4c 49 54 45 5f 55  UTF16BE:SQLITE_U
7460: 54 46 31 36 4c 45 29 0a 23 65 6e 64 69 66 0a 0a  TF16LE).#endif..
7470: 2f 2a 0a 2a 2a 20 43 6f 6e 73 74 61 6e 74 73 20  /*.** Constants 
7480: 66 6f 72 20 74 68 65 20 6c 61 72 67 65 73 74 20  for the largest 
7490: 61 6e 64 20 73 6d 61 6c 6c 65 73 74 20 70 6f 73  and smallest pos
74a0: 73 69 62 6c 65 20 36 34 2d 62 69 74 20 73 69 67  sible 64-bit sig
74b0: 6e 65 64 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a  ned integers..**
74c0: 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 61 72   These macros ar
74d0: 65 20 64 65 73 69 67 6e 65 64 20 74 6f 20 77 6f  e designed to wo
74e0: 72 6b 20 63 6f 72 72 65 63 74 6c 79 20 6f 6e 20  rk correctly on 
74f0: 62 6f 74 68 20 33 32 2d 62 69 74 20 61 6e 64 20  both 32-bit and 
7500: 36 34 2d 62 69 74 0a 2a 2a 20 63 6f 6d 70 69 6c  64-bit.** compil
7510: 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ers..*/.#define 
7520: 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 20 20 28  LARGEST_INT64  (
7530: 30 78 66 66 66 66 66 66 66 66 7c 28 28 28 69 36  0xffffffff|(((i6
7540: 34 29 30 78 37 66 66 66 66 66 66 66 29 3c 3c 33  4)0x7fffffff)<<3
7550: 32 29 29 0a 23 64 65 66 69 6e 65 20 53 4d 41 4c  2)).#define SMAL
7560: 4c 45 53 54 5f 49 4e 54 36 34 20 28 28 28 69 36  LEST_INT64 (((i6
7570: 34 29 2d 31 29 20 2d 20 4c 41 52 47 45 53 54 5f  4)-1) - LARGEST_
7580: 49 4e 54 36 34 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f  INT64)../*.** Ro
7590: 75 6e 64 20 75 70 20 61 20 6e 75 6d 62 65 72 20  und up a number 
75a0: 74 6f 20 74 68 65 20 6e 65 78 74 20 6c 61 72 67  to the next larg
75b0: 65 72 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 38  er multiple of 8
75c0: 2e 20 20 54 68 69 73 20 69 73 20 75 73 65 64 0a  .  This is used.
75d0: 2a 2a 20 74 6f 20 66 6f 72 63 65 20 38 2d 62 79  ** to force 8-by
75e0: 74 65 20 61 6c 69 67 6e 6d 65 6e 74 20 6f 6e 20  te alignment on 
75f0: 36 34 2d 62 69 74 20 61 72 63 68 69 74 65 63 74  64-bit architect
7600: 75 72 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ures..*/.#define
7610: 20 52 4f 55 4e 44 38 28 78 29 20 20 20 20 20 28   ROUND8(x)     (
7620: 28 28 78 29 2b 37 29 26 7e 37 29 0a 0a 2f 2a 0a  ((x)+7)&~7)../*.
7630: 2a 2a 20 52 6f 75 6e 64 20 64 6f 77 6e 20 74 6f  ** Round down to
7640: 20 74 68 65 20 6e 65 61 72 65 73 74 20 6d 75 6c   the nearest mul
7650: 74 69 70 6c 65 20 6f 66 20 38 0a 2a 2f 0a 23 64  tiple of 8.*/.#d
7660: 65 66 69 6e 65 20 52 4f 55 4e 44 44 4f 57 4e 38  efine ROUNDDOWN8
7670: 28 78 29 20 28 28 78 29 26 7e 37 29 0a 0a 2f 2a  (x) ((x)&~7)../*
7680: 0a 2a 2a 20 41 73 73 65 72 74 20 74 68 61 74 20  .** Assert that 
7690: 74 68 65 20 70 6f 69 6e 74 65 72 20 58 20 69 73  the pointer X is
76a0: 20 61 6c 69 67 6e 65 64 20 74 6f 20 61 6e 20 38   aligned to an 8
76b0: 2d 62 79 74 65 20 62 6f 75 6e 64 61 72 79 2e 20  -byte boundary. 
76c0: 20 54 68 69 73 0a 2a 2a 20 6d 61 63 72 6f 20 69   This.** macro i
76d0: 73 20 75 73 65 64 20 6f 6e 6c 79 20 77 69 74 68  s used only with
76e0: 69 6e 20 61 73 73 65 72 74 28 29 20 74 6f 20 76  in assert() to v
76f0: 65 72 69 66 79 20 74 68 61 74 20 74 68 65 20 63  erify that the c
7700: 6f 64 65 20 67 65 74 73 0a 2a 2a 20 61 6c 6c 20  ode gets.** all 
7710: 61 6c 69 67 6e 6d 65 6e 74 20 72 65 73 74 72 69  alignment restri
7720: 63 74 69 6f 6e 73 20 63 6f 72 72 65 63 74 2e 0a  ctions correct..
7730: 2a 2a 0a 2a 2a 20 45 78 63 65 70 74 2c 20 69 66  **.** Except, if
7740: 20 53 51 4c 49 54 45 5f 34 5f 42 59 54 45 5f 41   SQLITE_4_BYTE_A
7750: 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43 20 69 73  LIGNED_MALLOC is
7760: 20 64 65 66 69 6e 65 64 2c 20 74 68 65 6e 20 74   defined, then t
7770: 68 65 0a 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67  he.** underlying
7780: 20 6d 61 6c 6c 6f 63 28 29 20 69 6d 70 6c 65 6d   malloc() implem
7790: 65 6e 74 61 74 69 6f 6e 20 6d 69 67 68 74 20 72  entation might r
77a0: 65 74 75 72 6e 20 75 73 20 34 2d 62 79 74 65 20  eturn us 4-byte 
77b0: 61 6c 69 67 6e 65 64 0a 2a 2a 20 70 6f 69 6e 74  aligned.** point
77c0: 65 72 73 2e 20 20 49 6e 20 74 68 61 74 20 63 61  ers.  In that ca
77d0: 73 65 2c 20 6f 6e 6c 79 20 76 65 72 69 66 79 20  se, only verify 
77e0: 34 2d 62 79 74 65 20 61 6c 69 67 6e 6d 65 6e 74  4-byte alignment
77f0: 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
7800: 54 45 5f 34 5f 42 59 54 45 5f 41 4c 49 47 4e 45  TE_4_BYTE_ALIGNE
7810: 44 5f 4d 41 4c 4c 4f 43 0a 23 20 64 65 66 69 6e  D_MALLOC.# defin
7820: 65 20 45 49 47 48 54 5f 42 59 54 45 5f 41 4c 49  e EIGHT_BYTE_ALI
7830: 47 4e 4d 45 4e 54 28 58 29 20 20 20 28 28 28 28  GNMENT(X)   ((((
7840: 63 68 61 72 2a 29 28 58 29 20 2d 20 28 63 68 61  char*)(X) - (cha
7850: 72 2a 29 30 29 26 33 29 3d 3d 30 29 0a 23 65 6c  r*)0)&3)==0).#el
7860: 73 65 0a 23 20 64 65 66 69 6e 65 20 45 49 47 48  se.# define EIGH
7870: 54 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54  T_BYTE_ALIGNMENT
7880: 28 58 29 20 20 20 28 28 28 28 63 68 61 72 2a 29  (X)   ((((char*)
7890: 28 58 29 20 2d 20 28 63 68 61 72 2a 29 30 29 26  (X) - (char*)0)&
78a0: 37 29 3d 3d 30 29 0a 23 65 6e 64 69 66 0a 0a 2f  7)==0).#endif../
78b0: 2a 0a 2a 2a 20 44 69 73 61 62 6c 65 20 4d 4d 41  *.** Disable MMA
78c0: 50 20 6f 6e 20 70 6c 61 74 66 6f 72 6d 73 20 77  P on platforms w
78d0: 68 65 72 65 20 69 74 20 69 73 20 6b 6e 6f 77 6e  here it is known
78e0: 20 74 6f 20 6e 6f 74 20 77 6f 72 6b 0a 2a 2f 0a   to not work.*/.
78f0: 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 4f 70  #if defined(__Op
7900: 65 6e 42 53 44 5f 5f 29 20 7c 7c 20 64 65 66 69  enBSD__) || defi
7910: 6e 65 64 28 5f 5f 51 4e 58 4e 54 4f 5f 5f 29 0a  ned(__QNXNTO__).
7920: 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d  # undef SQLITE_M
7930: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 64  AX_MMAP_SIZE.# d
7940: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58  efine SQLITE_MAX
7950: 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23 65 6e  _MMAP_SIZE 0.#en
7960: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 61 75  dif../*.** Defau
7970: 6c 74 20 6d 61 78 69 6d 75 6d 20 73 69 7a 65 20  lt maximum size 
7980: 6f 66 20 6d 65 6d 6f 72 79 20 75 73 65 64 20 62  of memory used b
7990: 79 20 6d 65 6d 6f 72 79 2d 6d 61 70 70 65 64 20  y memory-mapped 
79a0: 49 2f 4f 20 69 6e 20 74 68 65 20 56 46 53 0a 2a  I/O in the VFS.*
79b0: 2f 0a 23 69 66 64 65 66 20 5f 5f 41 50 50 4c 45  /.#ifdef __APPLE
79c0: 5f 5f 0a 23 20 69 6e 63 6c 75 64 65 20 3c 54 61  __.# include <Ta
79d0: 72 67 65 74 43 6f 6e 64 69 74 69 6f 6e 61 6c 73  rgetConditionals
79e0: 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  .h>.#endif.#ifnd
79f0: 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d  ef SQLITE_MAX_MM
7a00: 41 50 5f 53 49 5a 45 0a 23 20 69 66 20 64 65 66  AP_SIZE.# if def
7a10: 69 6e 65 64 28 5f 5f 6c 69 6e 75 78 5f 5f 29 20  ined(__linux__) 
7a20: 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  \.  || defined(_
7a30: 57 49 4e 33 32 29 20 5c 0a 20 20 7c 7c 20 28 64  WIN32) \.  || (d
7a40: 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f  efined(__APPLE__
7a50: 29 20 26 26 20 64 65 66 69 6e 65 64 28 5f 5f 4d  ) && defined(__M
7a60: 41 43 48 5f 5f 29 29 20 5c 0a 20 20 7c 7c 20 64  ACH__)) \.  || d
7a70: 65 66 69 6e 65 64 28 5f 5f 73 75 6e 29 20 5c 0a  efined(__sun) \.
7a80: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 46    || defined(__F
7a90: 72 65 65 42 53 44 5f 5f 29 20 5c 0a 20 20 7c 7c  reeBSD__) \.  ||
7aa0: 20 64 65 66 69 6e 65 64 28 5f 5f 44 72 61 67 6f   defined(__Drago
7ab0: 6e 46 6c 79 5f 5f 29 0a 23 20 20 20 64 65 66 69  nFly__).#   defi
7ac0: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d  ne SQLITE_MAX_MM
7ad0: 41 50 5f 53 49 5a 45 20 30 78 37 66 66 66 30 30  AP_SIZE 0x7fff00
7ae0: 30 30 20 20 2f 2a 20 32 31 34 37 34 31 38 31 31  00  /* 214741811
7af0: 32 20 2a 2f 0a 23 20 65 6c 73 65 0a 23 20 20 20  2 */.# else.#   
7b00: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
7b10: 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23 20  X_MMAP_SIZE 0.# 
7b20: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a  endif.#endif../*
7b30: 0a 2a 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20  .** The default 
7b40: 4d 4d 41 50 5f 53 49 5a 45 20 69 73 20 7a 65 72  MMAP_SIZE is zer
7b50: 6f 20 6f 6e 20 61 6c 6c 20 70 6c 61 74 66 6f 72  o on all platfor
7b60: 6d 73 2e 20 20 4f 72 2c 20 65 76 65 6e 20 69 66  ms.  Or, even if
7b70: 20 61 20 6c 61 72 67 65 72 0a 2a 2a 20 64 65 66   a larger.** def
7b80: 61 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45 20 69  ault MMAP_SIZE i
7b90: 73 20 73 70 65 63 69 66 69 65 64 20 61 74 20 63  s specified at c
7ba0: 6f 6d 70 69 6c 65 2d 74 69 6d 65 2c 20 6d 61 6b  ompile-time, mak
7bb0: 65 20 73 75 72 65 20 74 68 61 74 20 69 74 20 64  e sure that it d
7bc0: 6f 65 73 0a 2a 2a 20 6e 6f 74 20 65 78 63 65 65  oes.** not excee
7bd0: 64 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6d 6d  d the maximum mm
7be0: 61 70 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66 6e  ap size..*/.#ifn
7bf0: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55  def SQLITE_DEFAU
7c00: 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 64  LT_MMAP_SIZE.# d
7c10: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46  efine SQLITE_DEF
7c20: 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 20 30  AULT_MMAP_SIZE 0
7c30: 0a 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49  .#endif.#if SQLI
7c40: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f  TE_DEFAULT_MMAP_
7c50: 53 49 5a 45 3e 53 51 4c 49 54 45 5f 4d 41 58 5f  SIZE>SQLITE_MAX_
7c60: 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 75 6e 64 65  MMAP_SIZE.# unde
7c70: 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  f SQLITE_DEFAULT
7c80: 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 64 65 66  _MMAP_SIZE.# def
7c90: 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  ine SQLITE_DEFAU
7ca0: 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 20 53 51 4c  LT_MMAP_SIZE SQL
7cb0: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
7cc0: 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  E.#endif../*.** 
7cd0: 4f 6e 6c 79 20 6f 6e 65 20 6f 66 20 53 51 4c 49  Only one of SQLI
7ce0: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 20  TE_ENABLE_STAT3 
7cf0: 6f 72 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  or SQLITE_ENABLE
7d00: 5f 53 54 41 54 34 20 63 61 6e 20 62 65 20 64 65  _STAT4 can be de
7d10: 66 69 6e 65 64 2e 0a 2a 2a 20 50 72 69 6f 72 69  fined..** Priori
7d20: 74 79 20 69 73 20 67 69 76 65 6e 20 74 6f 20 53  ty is given to S
7d30: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
7d40: 54 34 2e 20 20 49 66 20 65 69 74 68 65 72 20 61  T4.  If either a
7d50: 72 65 20 64 65 66 69 6e 65 64 2c 20 61 6c 73 6f  re defined, also
7d60: 0a 2a 2a 20 64 65 66 69 6e 65 20 53 51 4c 49 54  .** define SQLIT
7d70: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f  E_ENABLE_STAT3_O
7d80: 52 5f 53 54 41 54 34 0a 2a 2f 0a 23 69 66 64 65  R_STAT4.*/.#ifde
7d90: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
7da0: 53 54 41 54 34 0a 23 20 75 6e 64 65 66 20 53 51  STAT4.# undef SQ
7db0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
7dc0: 33 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  3.# define SQLIT
7dd0: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f  E_ENABLE_STAT3_O
7de0: 52 5f 53 54 41 54 34 20 31 0a 23 65 6c 69 66 20  R_STAT4 1.#elif 
7df0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
7e00: 41 54 33 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  AT3.# define SQL
7e10: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
7e20: 5f 4f 52 5f 53 54 41 54 34 20 31 0a 23 65 6c 69  _OR_STAT4 1.#eli
7e30: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
7e40: 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 23  STAT3_OR_STAT4.#
7e50: 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e   undef SQLITE_EN
7e60: 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54  ABLE_STAT3_OR_ST
7e70: 41 54 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  AT4.#endif../*.*
7e80: 2a 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e  * SELECTTRACE_EN
7e90: 41 42 4c 45 44 20 77 69 6c 6c 20 62 65 20 65 69  ABLED will be ei
7ea0: 74 68 65 72 20 31 20 6f 72 20 30 20 64 65 70 65  ther 1 or 0 depe
7eb0: 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72  nding on whether
7ec0: 20 6f 72 20 6e 6f 74 0a 2a 2a 20 74 68 65 20 53   or not.** the S
7ed0: 65 6c 65 63 74 20 71 75 65 72 79 20 67 65 6e 65  elect query gene
7ee0: 72 61 74 6f 72 20 74 72 61 63 69 6e 67 20 6c 6f  rator tracing lo
7ef0: 67 69 63 20 69 73 20 74 75 72 6e 65 64 20 6f 6e  gic is turned on
7f00: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
7f10: 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53  (SQLITE_ENABLE_S
7f20: 45 4c 45 43 54 54 52 41 43 45 29 0a 23 20 64 65  ELECTTRACE).# de
7f30: 66 69 6e 65 20 53 45 4c 45 43 54 54 52 41 43 45  fine SELECTTRACE
7f40: 5f 45 4e 41 42 4c 45 44 20 31 0a 23 65 6c 73 65  _ENABLED 1.#else
7f50: 0a 23 20 64 65 66 69 6e 65 20 53 45 4c 45 43 54  .# define SELECT
7f60: 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 30 0a  TRACE_ENABLED 0.
7f70: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e  #endif../*.** An
7f80: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
7f90: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
7fa0: 74 75 72 65 20 69 73 20 75 73 65 64 20 74 6f 20  ture is used to 
7fb0: 73 74 6f 72 65 20 74 68 65 20 62 75 73 79 2d 68  store the busy-h
7fc0: 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62 61  andler.** callba
7fd0: 63 6b 20 66 6f 72 20 61 20 67 69 76 65 6e 20 73  ck for a given s
7fe0: 71 6c 69 74 65 20 68 61 6e 64 6c 65 2e 0a 2a 2a  qlite handle..**
7ff0: 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74 65 2e 62  .** The sqlite.b
8000: 75 73 79 48 61 6e 64 6c 65 72 20 6d 65 6d 62 65  usyHandler membe
8010: 72 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 20  r of the sqlite 
8020: 73 74 72 75 63 74 20 63 6f 6e 74 61 69 6e 73 20  struct contains 
8030: 74 68 65 20 62 75 73 79 0a 2a 2a 20 63 61 6c 6c  the busy.** call
8040: 62 61 63 6b 20 66 6f 72 20 74 68 65 20 64 61 74  back for the dat
8050: 61 62 61 73 65 20 68 61 6e 64 6c 65 2e 20 45 61  abase handle. Ea
8060: 63 68 20 70 61 67 65 72 20 6f 70 65 6e 65 64 20  ch pager opened 
8070: 76 69 61 20 74 68 65 20 73 71 6c 69 74 65 0a 2a  via the sqlite.*
8080: 2a 20 68 61 6e 64 6c 65 20 69 73 20 70 61 73 73  * handle is pass
8090: 65 64 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  ed a pointer to 
80a0: 73 71 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c  sqlite.busyHandl
80b0: 65 72 2e 20 54 68 65 20 62 75 73 79 2d 68 61 6e  er. The busy-han
80c0: 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b  dler.** callback
80d0: 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e   is currently in
80e0: 76 6f 6b 65 64 20 6f 6e 6c 79 20 66 72 6f 6d 20  voked only from 
80f0: 77 69 74 68 69 6e 20 70 61 67 65 72 2e 63 2e 0a  within pager.c..
8100: 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
8110: 74 20 42 75 73 79 48 61 6e 64 6c 65 72 20 42 75  t BusyHandler Bu
8120: 73 79 48 61 6e 64 6c 65 72 3b 0a 73 74 72 75 63  syHandler;.struc
8130: 74 20 42 75 73 79 48 61 6e 64 6c 65 72 20 7b 0a  t BusyHandler {.
8140: 20 20 69 6e 74 20 28 2a 78 42 75 73 79 48 61 6e    int (*xBusyHan
8150: 64 6c 65 72 29 28 76 6f 69 64 20 2a 2c 69 6e 74  dler)(void *,int
8160: 29 3b 20 20 2f 2a 20 54 68 65 20 62 75 73 79 20  );  /* The busy 
8170: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f  callback */.  vo
8180: 69 64 20 2a 70 42 75 73 79 41 72 67 3b 20 20 20  id *pBusyArg;   
8190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
81a0: 2f 2a 20 46 69 72 73 74 20 61 72 67 20 74 6f 20  /* First arg to 
81b0: 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  busy callback */
81c0: 0a 20 20 69 6e 74 20 6e 42 75 73 79 3b 20 20 20  .  int nBusy;   
81d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
81e0: 20 20 20 20 20 2f 2a 20 49 6e 63 72 65 6d 65 6e       /* Incremen
81f0: 74 65 64 20 77 69 74 68 20 65 61 63 68 20 62 75  ted with each bu
8200: 73 79 20 63 61 6c 6c 20 2a 2f 0a 20 20 75 38 20  sy call */.  u8 
8210: 62 45 78 74 72 61 46 69 6c 65 41 72 67 3b 20 20  bExtraFileArg;  
8220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8230: 2a 20 49 6e 63 6c 75 64 65 20 73 71 6c 69 74 65  * Include sqlite
8240: 33 5f 66 69 6c 65 20 61 73 20 63 61 6c 6c 62 61  3_file as callba
8250: 63 6b 20 61 72 67 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  ck arg */.};../*
8260: 0a 2a 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20  .** Name of the 
8270: 6d 61 73 74 65 72 20 64 61 74 61 62 61 73 65 20  master database 
8280: 74 61 62 6c 65 2e 20 20 54 68 65 20 6d 61 73 74  table.  The mast
8290: 65 72 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  er database tabl
82a0: 65 0a 2a 2a 20 69 73 20 61 20 73 70 65 63 69 61  e.** is a specia
82b0: 6c 20 74 61 62 6c 65 20 74 68 61 74 20 68 6f 6c  l table that hol
82c0: 64 73 20 74 68 65 20 6e 61 6d 65 73 20 61 6e 64  ds the names and
82d0: 20 61 74 74 72 69 62 75 74 65 73 20 6f 66 20 61   attributes of a
82e0: 6c 6c 0a 2a 2a 20 75 73 65 72 20 74 61 62 6c 65  ll.** user table
82f0: 73 20 61 6e 64 20 69 6e 64 69 63 65 73 2e 0a 2a  s and indices..*
8300: 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52  /.#define MASTER
8310: 5f 4e 41 4d 45 20 20 20 20 20 20 20 22 73 71 6c  _NAME       "sql
8320: 69 74 65 5f 6d 61 73 74 65 72 22 0a 23 64 65 66  ite_master".#def
8330: 69 6e 65 20 54 45 4d 50 5f 4d 41 53 54 45 52 5f  ine TEMP_MASTER_
8340: 4e 41 4d 45 20 20 22 73 71 6c 69 74 65 5f 74 65  NAME  "sqlite_te
8350: 6d 70 5f 6d 61 73 74 65 72 22 0a 0a 2f 2a 0a 2a  mp_master"../*.*
8360: 2a 20 54 68 65 20 72 6f 6f 74 2d 70 61 67 65 20  * The root-page 
8370: 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20 64 61  of the master da
8380: 74 61 62 61 73 65 20 74 61 62 6c 65 2e 0a 2a 2f  tabase table..*/
8390: 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52 5f  .#define MASTER_
83a0: 52 4f 4f 54 20 20 20 20 20 20 20 31 0a 0a 2f 2a  ROOT       1../*
83b0: 0a 2a 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20  .** The name of 
83c0: 74 68 65 20 73 63 68 65 6d 61 20 74 61 62 6c 65  the schema table
83d0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43 48  ..*/.#define SCH
83e0: 45 4d 41 5f 54 41 42 4c 45 28 78 29 20 20 28 28  EMA_TABLE(x)  ((
83f0: 21 4f 4d 49 54 5f 54 45 4d 50 44 42 29 26 26 28  !OMIT_TEMPDB)&&(
8400: 78 3d 3d 31 29 3f 54 45 4d 50 5f 4d 41 53 54 45  x==1)?TEMP_MASTE
8410: 52 5f 4e 41 4d 45 3a 4d 41 53 54 45 52 5f 4e 41  R_NAME:MASTER_NA
8420: 4d 45 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 63 6f 6e  ME)../*.** A con
8430: 76 65 6e 69 65 6e 63 65 20 6d 61 63 72 6f 20 74  venience macro t
8440: 68 61 74 20 72 65 74 75 72 6e 73 20 74 68 65 20  hat returns the 
8450: 6e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e  number of elemen
8460: 74 73 20 69 6e 0a 2a 2a 20 61 6e 20 61 72 72 61  ts in.** an arra
8470: 79 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 41 72  y..*/.#define Ar
8480: 72 61 79 53 69 7a 65 28 58 29 20 20 20 20 28 28  raySize(X)    ((
8490: 69 6e 74 29 28 73 69 7a 65 6f 66 28 58 29 2f 73  int)(sizeof(X)/s
84a0: 69 7a 65 6f 66 28 58 5b 30 5d 29 29 29 0a 0a 2f  izeof(X[0])))../
84b0: 2a 0a 2a 2a 20 44 65 74 65 72 6d 69 6e 65 20 69  *.** Determine i
84c0: 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 69  f the argument i
84d0: 73 20 61 20 70 6f 77 65 72 20 6f 66 20 74 77 6f  s a power of two
84e0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 50 6f  .*/.#define IsPo
84f0: 77 65 72 4f 66 54 77 6f 28 58 29 20 28 28 28 58  werOfTwo(X) (((X
8500: 29 26 28 28 58 29 2d 31 29 29 3d 3d 30 29 0a 0a  )&((X)-1))==0)..
8510: 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
8520: 69 6e 67 20 76 61 6c 75 65 20 61 73 20 61 20 64  ing value as a d
8530: 65 73 74 72 75 63 74 6f 72 20 6d 65 61 6e 73 20  estructor means 
8540: 74 6f 20 75 73 65 20 73 71 6c 69 74 65 33 44 62  to use sqlite3Db
8550: 46 72 65 65 28 29 2e 0a 2a 2a 20 54 68 65 20 73  Free()..** The s
8560: 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 20 72  qlite3DbFree() r
8570: 6f 75 74 69 6e 65 20 72 65 71 75 69 72 65 73 20  outine requires 
8580: 74 77 6f 20 70 61 72 61 6d 65 74 65 72 73 20 69  two parameters i
8590: 6e 73 74 65 61 64 20 6f 66 20 74 68 65 0a 2a 2a  nstead of the.**
85a0: 20 6f 6e 65 20 70 61 72 61 6d 65 74 65 72 20 74   one parameter t
85b0: 68 61 74 20 64 65 73 74 72 75 63 74 6f 72 73 20  hat destructors 
85c0: 6e 6f 72 6d 61 6c 6c 79 20 77 61 6e 74 2e 20 20  normally want.  
85d0: 53 6f 20 77 65 20 68 61 76 65 20 74 6f 20 69 6e  So we have to in
85e0: 74 72 6f 64 75 63 65 0a 2a 2a 20 74 68 69 73 20  troduce.** this 
85f0: 6d 61 67 69 63 20 76 61 6c 75 65 20 74 68 61 74  magic value that
8600: 20 74 68 65 20 63 6f 64 65 20 6b 6e 6f 77 73 20   the code knows 
8610: 74 6f 20 68 61 6e 64 6c 65 20 64 69 66 66 65 72  to handle differ
8620: 65 6e 74 6c 79 2e 20 20 41 6e 79 0a 2a 2a 20 70  ently.  Any.** p
8630: 6f 69 6e 74 65 72 20 77 69 6c 6c 20 77 6f 72 6b  ointer will work
8640: 20 68 65 72 65 20 61 73 20 6c 6f 6e 67 20 61 73   here as long as
8650: 20 69 74 20 69 73 20 64 69 73 74 69 6e 63 74 20   it is distinct 
8660: 66 72 6f 6d 20 53 51 4c 49 54 45 5f 53 54 41 54  from SQLITE_STAT
8670: 49 43 0a 2a 2a 20 61 6e 64 20 53 51 4c 49 54 45  IC.** and SQLITE
8680: 5f 54 52 41 4e 53 49 45 4e 54 2e 0a 2a 2f 0a 23  _TRANSIENT..*/.#
8690: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 59  define SQLITE_DY
86a0: 4e 41 4d 49 43 20 20 20 28 28 73 71 6c 69 74 65  NAMIC   ((sqlite
86b0: 33 5f 64 65 73 74 72 75 63 74 6f 72 5f 74 79 70  3_destructor_typ
86c0: 65 29 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 53  e)sqlite3MallocS
86d0: 69 7a 65 29 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e  ize)../*.** When
86e0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44   SQLITE_OMIT_WSD
86f0: 20 69 73 20 64 65 66 69 6e 65 64 2c 20 69 74 20   is defined, it 
8700: 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 74  means that the t
8710: 61 72 67 65 74 20 70 6c 61 74 66 6f 72 6d 20 64  arget platform d
8720: 6f 65 73 0a 2a 2a 20 6e 6f 74 20 73 75 70 70 6f  oes.** not suppo
8730: 72 74 20 57 72 69 74 61 62 6c 65 20 53 74 61 74  rt Writable Stat
8740: 69 63 20 44 61 74 61 20 28 57 53 44 29 20 73 75  ic Data (WSD) su
8750: 63 68 20 61 73 20 67 6c 6f 62 61 6c 20 61 6e 64  ch as global and
8760: 20 73 74 61 74 69 63 20 76 61 72 69 61 62 6c 65   static variable
8770: 73 2e 0a 2a 2a 20 41 6c 6c 20 76 61 72 69 61 62  s..** All variab
8780: 6c 65 73 20 6d 75 73 74 20 65 69 74 68 65 72 20  les must either 
8790: 62 65 20 6f 6e 20 74 68 65 20 73 74 61 63 6b 20  be on the stack 
87a0: 6f 72 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61  or dynamically a
87b0: 6c 6c 6f 63 61 74 65 64 20 66 72 6f 6d 0a 2a 2a  llocated from.**
87c0: 20 74 68 65 20 68 65 61 70 2e 20 20 57 68 65 6e   the heap.  When
87d0: 20 57 53 44 20 69 73 20 75 6e 73 75 70 70 6f 72   WSD is unsuppor
87e0: 74 65 64 2c 20 74 68 65 20 76 61 72 69 61 62 6c  ted, the variabl
87f0: 65 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 73  e declarations s
8800: 63 61 74 74 65 72 65 64 0a 2a 2a 20 74 68 72 6f  cattered.** thro
8810: 75 67 68 6f 75 74 20 74 68 65 20 53 51 4c 69 74  ughout the SQLit
8820: 65 20 63 6f 64 65 20 6d 75 73 74 20 62 65 63 6f  e code must beco
8830: 6d 65 20 63 6f 6e 73 74 61 6e 74 73 20 69 6e 73  me constants ins
8840: 74 65 61 64 2e 20 20 54 68 65 20 53 51 4c 49 54  tead.  The SQLIT
8850: 45 5f 57 53 44 0a 2a 2a 20 6d 61 63 72 6f 20 69  E_WSD.** macro i
8860: 73 20 75 73 65 64 20 66 6f 72 20 74 68 69 73 20  s used for this 
8870: 70 75 72 70 6f 73 65 2e 20 20 41 6e 64 20 69 6e  purpose.  And in
8880: 73 74 65 61 64 20 6f 66 20 72 65 66 65 72 65 6e  stead of referen
8890: 63 69 6e 67 20 74 68 65 20 76 61 72 69 61 62 6c  cing the variabl
88a0: 65 0a 2a 2a 20 64 69 72 65 63 74 6c 79 2c 20 77  e.** directly, w
88b0: 65 20 75 73 65 20 69 74 73 20 63 6f 6e 73 74 61  e use its consta
88c0: 6e 74 20 61 73 20 61 20 6b 65 79 20 74 6f 20 6c  nt as a key to l
88d0: 6f 6f 6b 75 70 20 74 68 65 20 72 75 6e 2d 74 69  ookup the run-ti
88e0: 6d 65 20 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20  me allocated.** 
88f0: 62 75 66 66 65 72 20 74 68 61 74 20 68 6f 6c 64  buffer that hold
8900: 73 20 72 65 61 6c 20 76 61 72 69 61 62 6c 65 2e  s real variable.
8910: 20 20 54 68 65 20 63 6f 6e 73 74 61 6e 74 20 69    The constant i
8920: 73 20 61 6c 73 6f 20 74 68 65 20 69 6e 69 74 69  s also the initi
8930: 61 6c 69 7a 65 72 0a 2a 2a 20 66 6f 72 20 74 68  alizer.** for th
8940: 65 20 72 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63  e run-time alloc
8950: 61 74 65 64 20 62 75 66 66 65 72 2e 0a 2a 2a 0a  ated buffer..**.
8960: 2a 2a 20 49 6e 20 74 68 65 20 75 73 75 61 6c 20  ** In the usual 
8970: 63 61 73 65 20 77 68 65 72 65 20 57 53 44 20 69  case where WSD i
8980: 73 20 73 75 70 70 6f 72 74 65 64 2c 20 74 68 65  s supported, the
8990: 20 53 51 4c 49 54 45 5f 57 53 44 20 61 6e 64 20   SQLITE_WSD and 
89a0: 47 4c 4f 42 41 4c 0a 2a 2a 20 6d 61 63 72 6f 73  GLOBAL.** macros
89b0: 20 62 65 63 6f 6d 65 20 6e 6f 2d 6f 70 73 20 61   become no-ops a
89c0: 6e 64 20 68 61 76 65 20 7a 65 72 6f 20 70 65 72  nd have zero per
89d0: 66 6f 72 6d 61 6e 63 65 20 69 6d 70 61 63 74 2e  formance impact.
89e0: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
89f0: 45 5f 4f 4d 49 54 5f 57 53 44 0a 20 20 23 64 65  E_OMIT_WSD.  #de
8a00: 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 53 44 20  fine SQLITE_WSD 
8a10: 63 6f 6e 73 74 0a 20 20 23 64 65 66 69 6e 65 20  const.  #define 
8a20: 47 4c 4f 42 41 4c 28 74 2c 76 29 20 28 2a 28 74  GLOBAL(t,v) (*(t
8a30: 2a 29 73 71 6c 69 74 65 33 5f 77 73 64 5f 66 69  *)sqlite3_wsd_fi
8a40: 6e 64 28 28 76 6f 69 64 2a 29 26 28 76 29 2c 20  nd((void*)&(v), 
8a50: 73 69 7a 65 6f 66 28 76 29 29 29 0a 20 20 23 64  sizeof(v))).  #d
8a60: 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47 6c 6f  efine sqlite3Glo
8a70: 62 61 6c 43 6f 6e 66 69 67 20 47 4c 4f 42 41 4c  balConfig GLOBAL
8a80: 28 73 74 72 75 63 74 20 53 71 6c 69 74 65 33 43  (struct Sqlite3C
8a90: 6f 6e 66 69 67 2c 20 73 71 6c 69 74 65 33 43 6f  onfig, sqlite3Co
8aa0: 6e 66 69 67 29 0a 20 20 69 6e 74 20 73 71 6c 69  nfig).  int sqli
8ab0: 74 65 33 5f 77 73 64 5f 69 6e 69 74 28 69 6e 74  te3_wsd_init(int
8ac0: 20 4e 2c 20 69 6e 74 20 4a 29 3b 0a 20 20 76 6f   N, int J);.  vo
8ad0: 69 64 20 2a 73 71 6c 69 74 65 33 5f 77 73 64 5f  id *sqlite3_wsd_
8ae0: 66 69 6e 64 28 76 6f 69 64 20 2a 4b 2c 20 69 6e  find(void *K, in
8af0: 74 20 4c 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  t L);.#else.  #d
8b00: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 53 44  efine SQLITE_WSD
8b10: 0a 20 20 23 64 65 66 69 6e 65 20 47 4c 4f 42 41  .  #define GLOBA
8b20: 4c 28 74 2c 76 29 20 76 0a 20 20 23 64 65 66 69  L(t,v) v.  #defi
8b30: 6e 65 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c  ne sqlite3Global
8b40: 43 6f 6e 66 69 67 20 73 71 6c 69 74 65 33 43 6f  Config sqlite3Co
8b50: 6e 66 69 67 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  nfig.#endif../*.
8b60: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
8b70: 20 6d 61 63 72 6f 73 20 61 72 65 20 75 73 65 64   macros are used
8b80: 20 74 6f 20 73 75 70 70 72 65 73 73 20 63 6f 6d   to suppress com
8b90: 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 73 20 61  piler warnings a
8ba0: 6e 64 20 74 6f 0a 2a 2a 20 6d 61 6b 65 20 69 74  nd to.** make it
8bb0: 20 63 6c 65 61 72 20 74 6f 20 68 75 6d 61 6e 20   clear to human 
8bc0: 72 65 61 64 65 72 73 20 77 68 65 6e 20 61 20 66  readers when a f
8bd0: 75 6e 63 74 69 6f 6e 20 70 61 72 61 6d 65 74 65  unction paramete
8be0: 72 20 69 73 20 64 65 6c 69 62 65 72 61 74 65 6c  r is deliberatel
8bf0: 79 0a 2a 2a 20 6c 65 66 74 20 75 6e 75 73 65 64  y.** left unused
8c00: 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79   within the body
8c10: 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2e 20   of a function. 
8c20: 54 68 69 73 20 75 73 75 61 6c 6c 79 20 68 61 70  This usually hap
8c30: 70 65 6e 73 20 77 68 65 6e 0a 2a 2a 20 61 20 66  pens when.** a f
8c40: 75 6e 63 74 69 6f 6e 20 69 73 20 63 61 6c 6c 65  unction is calle
8c50: 64 20 76 69 61 20 61 20 66 75 6e 63 74 69 6f 6e  d via a function
8c60: 20 70 6f 69 6e 74 65 72 2e 20 46 6f 72 20 65 78   pointer. For ex
8c70: 61 6d 70 6c 65 20 74 68 65 0a 2a 2a 20 69 6d 70  ample the.** imp
8c80: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 61  lementation of a
8c90: 6e 20 53 51 4c 20 61 67 67 72 65 67 61 74 65 20  n SQL aggregate 
8ca0: 73 74 65 70 20 63 61 6c 6c 62 61 63 6b 20 6d 61  step callback ma
8cb0: 79 20 6e 6f 74 20 75 73 65 20 74 68 65 0a 2a 2a  y not use the.**
8cc0: 20 70 61 72 61 6d 65 74 65 72 20 69 6e 64 69 63   parameter indic
8cd0: 61 74 69 6e 67 20 74 68 65 20 6e 75 6d 62 65 72  ating the number
8ce0: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 70 61   of arguments pa
8cf0: 73 73 65 64 20 74 6f 20 74 68 65 20 61 67 67 72  ssed to the aggr
8d00: 65 67 61 74 65 2c 0a 2a 2a 20 69 66 20 69 74 20  egate,.** if it 
8d10: 6b 6e 6f 77 73 20 74 68 61 74 20 74 68 69 73 20  knows that this 
8d20: 69 73 20 65 6e 66 6f 72 63 65 64 20 65 6c 73 65  is enforced else
8d30: 77 68 65 72 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65  where..**.** Whe
8d40: 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61 72  n a function par
8d50: 61 6d 65 74 65 72 20 69 73 20 6e 6f 74 20 75 73  ameter is not us
8d60: 65 64 20 61 74 20 61 6c 6c 20 77 69 74 68 69 6e  ed at all within
8d70: 20 74 68 65 20 62 6f 64 79 20 6f 66 20 61 20 66   the body of a f
8d80: 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 69 74 20 69  unction,.** it i
8d90: 73 20 67 65 6e 65 72 61 6c 6c 79 20 6e 61 6d 65  s generally name
8da0: 64 20 22 4e 6f 74 55 73 65 64 22 20 6f 72 20 22  d "NotUsed" or "
8db0: 4e 6f 74 55 73 65 64 32 22 20 74 6f 20 6d 61 6b  NotUsed2" to mak
8dc0: 65 20 74 68 69 6e 67 73 20 65 76 65 6e 20 63 6c  e things even cl
8dd0: 65 61 72 65 72 2e 0a 2a 2a 20 48 6f 77 65 76 65  earer..** Howeve
8de0: 72 2c 20 74 68 65 73 65 20 6d 61 63 72 6f 73 20  r, these macros 
8df0: 6d 61 79 20 61 6c 73 6f 20 62 65 20 75 73 65 64  may also be used
8e00: 20 74 6f 20 73 75 70 70 72 65 73 73 20 77 61 72   to suppress war
8e10: 6e 69 6e 67 73 20 72 65 6c 61 74 65 64 20 74 6f  nings related to
8e20: 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 73 20 74  .** parameters t
8e30: 68 61 74 20 6d 61 79 20 6f 72 20 6d 61 79 20 6e  hat may or may n
8e40: 6f 74 20 62 65 20 75 73 65 64 20 64 65 70 65 6e  ot be used depen
8e50: 64 69 6e 67 20 6f 6e 20 63 6f 6d 70 69 6c 61 74  ding on compilat
8e60: 69 6f 6e 20 6f 70 74 69 6f 6e 73 2e 0a 2a 2a 20  ion options..** 
8e70: 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 6f 73  For example thos
8e80: 65 20 70 61 72 61 6d 65 74 65 72 73 20 6f 6e 6c  e parameters onl
8e90: 79 20 75 73 65 64 20 69 6e 20 61 73 73 65 72 74  y used in assert
8ea0: 28 29 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 49  () statements. I
8eb0: 6e 20 74 68 65 73 65 0a 2a 2a 20 63 61 73 65 73  n these.** cases
8ec0: 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 73 20   the parameters 
8ed0: 61 72 65 20 6e 61 6d 65 64 20 61 73 20 70 65 72  are named as per
8ee0: 20 74 68 65 20 75 73 75 61 6c 20 63 6f 6e 76 65   the usual conve
8ef0: 6e 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69  ntions..*/.#defi
8f00: 6e 65 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45  ne UNUSED_PARAME
8f10: 54 45 52 28 78 29 20 28 76 6f 69 64 29 28 78 29  TER(x) (void)(x)
8f20: 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44 5f  .#define UNUSED_
8f30: 50 41 52 41 4d 45 54 45 52 32 28 78 2c 79 29 20  PARAMETER2(x,y) 
8f40: 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
8f50: 28 78 29 2c 55 4e 55 53 45 44 5f 50 41 52 41 4d  (x),UNUSED_PARAM
8f60: 45 54 45 52 28 79 29 0a 0a 2f 2a 0a 2a 2a 20 46  ETER(y)../*.** F
8f70: 6f 72 77 61 72 64 20 72 65 66 65 72 65 6e 63 65  orward reference
8f80: 73 20 74 6f 20 73 74 72 75 63 74 75 72 65 73 0a  s to structures.
8f90: 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
8fa0: 74 20 41 67 67 49 6e 66 6f 20 41 67 67 49 6e 66  t AggInfo AggInf
8fb0: 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  o;.typedef struc
8fc0: 74 20 41 75 74 68 43 6f 6e 74 65 78 74 20 41 75  t AuthContext Au
8fd0: 74 68 43 6f 6e 74 65 78 74 3b 0a 74 79 70 65 64  thContext;.typed
8fe0: 65 66 20 73 74 72 75 63 74 20 41 75 74 6f 69 6e  ef struct Autoin
8ff0: 63 49 6e 66 6f 20 41 75 74 6f 69 6e 63 49 6e 66  cInfo AutoincInf
9000: 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  o;.typedef struc
9010: 74 20 42 69 74 76 65 63 20 42 69 74 76 65 63 3b  t Bitvec Bitvec;
9020: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9030: 43 6f 6c 6c 53 65 71 20 43 6f 6c 6c 53 65 71 3b  CollSeq CollSeq;
9040: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9050: 43 6f 6c 75 6d 6e 20 43 6f 6c 75 6d 6e 3b 0a 74  Column Column;.t
9060: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 44 62  ypedef struct Db
9070: 20 44 62 3b 0a 74 79 70 65 64 65 66 20 73 74 72   Db;.typedef str
9080: 75 63 74 20 53 63 68 65 6d 61 20 53 63 68 65 6d  uct Schema Schem
9090: 61 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  a;.typedef struc
90a0: 74 20 45 78 70 72 20 45 78 70 72 3b 0a 74 79 70  t Expr Expr;.typ
90b0: 65 64 65 66 20 73 74 72 75 63 74 20 45 78 70 72  edef struct Expr
90c0: 4c 69 73 74 20 45 78 70 72 4c 69 73 74 3b 0a 74  List ExprList;.t
90d0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46 4b  ypedef struct FK
90e0: 65 79 20 46 4b 65 79 3b 0a 74 79 70 65 64 65 66  ey FKey;.typedef
90f0: 20 73 74 72 75 63 74 20 46 75 6e 63 44 65 73 74   struct FuncDest
9100: 72 75 63 74 6f 72 20 46 75 6e 63 44 65 73 74 72  ructor FuncDestr
9110: 75 63 74 6f 72 3b 0a 74 79 70 65 64 65 66 20 73  uctor;.typedef s
9120: 74 72 75 63 74 20 46 75 6e 63 44 65 66 20 46 75  truct FuncDef Fu
9130: 6e 63 44 65 66 3b 0a 74 79 70 65 64 65 66 20 73  ncDef;.typedef s
9140: 74 72 75 63 74 20 46 75 6e 63 44 65 66 48 61 73  truct FuncDefHas
9150: 68 20 46 75 6e 63 44 65 66 48 61 73 68 3b 0a 74  h FuncDefHash;.t
9160: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 49 64  ypedef struct Id
9170: 4c 69 73 74 20 49 64 4c 69 73 74 3b 0a 74 79 70  List IdList;.typ
9180: 65 64 65 66 20 73 74 72 75 63 74 20 49 6e 64 65  edef struct Inde
9190: 78 20 49 6e 64 65 78 3b 0a 74 79 70 65 64 65 66  x Index;.typedef
91a0: 20 73 74 72 75 63 74 20 49 6e 64 65 78 53 61 6d   struct IndexSam
91b0: 70 6c 65 20 49 6e 64 65 78 53 61 6d 70 6c 65 3b  ple IndexSample;
91c0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
91d0: 4b 65 79 43 6c 61 73 73 20 4b 65 79 43 6c 61 73  KeyClass KeyClas
91e0: 73 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  s;.typedef struc
91f0: 74 20 4b 65 79 49 6e 66 6f 20 4b 65 79 49 6e 66  t KeyInfo KeyInf
9200: 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  o;.typedef struc
9210: 74 20 4c 6f 6f 6b 61 73 69 64 65 20 4c 6f 6f 6b  t Lookaside Look
9220: 61 73 69 64 65 3b 0a 74 79 70 65 64 65 66 20 73  aside;.typedef s
9230: 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 53  truct LookasideS
9240: 6c 6f 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f  lot LookasideSlo
9250: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
9260: 74 20 4d 6f 64 75 6c 65 20 4d 6f 64 75 6c 65 3b  t Module Module;
9270: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9280: 4e 61 6d 65 43 6f 6e 74 65 78 74 20 4e 61 6d 65  NameContext Name
9290: 43 6f 6e 74 65 78 74 3b 0a 74 79 70 65 64 65 66  Context;.typedef
92a0: 20 73 74 72 75 63 74 20 50 61 72 73 65 20 50 61   struct Parse Pa
92b0: 72 73 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72  rse;.typedef str
92c0: 75 63 74 20 50 72 65 55 70 64 61 74 65 20 50 72  uct PreUpdate Pr
92d0: 65 55 70 64 61 74 65 3b 0a 74 79 70 65 64 65 66  eUpdate;.typedef
92e0: 20 73 74 72 75 63 74 20 50 72 69 6e 74 66 41 72   struct PrintfAr
92f0: 67 75 6d 65 6e 74 73 20 50 72 69 6e 74 66 41 72  guments PrintfAr
9300: 67 75 6d 65 6e 74 73 3b 0a 74 79 70 65 64 65 66  guments;.typedef
9310: 20 73 74 72 75 63 74 20 52 65 6e 61 6d 65 54 6f   struct RenameTo
9320: 6b 65 6e 20 52 65 6e 61 6d 65 54 6f 6b 65 6e 3b  ken RenameToken;
9330: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9340: 52 6f 77 53 65 74 20 52 6f 77 53 65 74 3b 0a 74  RowSet RowSet;.t
9350: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 61  ypedef struct Sa
9360: 76 65 70 6f 69 6e 74 20 53 61 76 65 70 6f 69 6e  vepoint Savepoin
9370: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
9380: 74 20 53 65 6c 65 63 74 20 53 65 6c 65 63 74 3b  t Select Select;
9390: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
93a0: 53 51 4c 69 74 65 54 68 72 65 61 64 20 53 51 4c  SQLiteThread SQL
93b0: 69 74 65 54 68 72 65 61 64 3b 0a 74 79 70 65 64  iteThread;.typed
93c0: 65 66 20 73 74 72 75 63 74 20 53 65 6c 65 63 74  ef struct Select
93d0: 44 65 73 74 20 53 65 6c 65 63 74 44 65 73 74 3b  Dest SelectDest;
93e0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
93f0: 53 72 63 4c 69 73 74 20 53 72 63 4c 69 73 74 3b  SrcList SrcList;
9400: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9410: 73 71 6c 69 74 65 33 5f 73 74 72 20 53 74 72 41  sqlite3_str StrA
9420: 63 63 75 6d 3b 20 2f 2a 20 49 6e 74 65 72 6e 61  ccum; /* Interna
9430: 6c 20 61 6c 69 61 73 20 66 6f 72 20 73 71 6c 69  l alias for sqli
9440: 74 65 33 5f 73 74 72 20 2a 2f 0a 74 79 70 65 64  te3_str */.typed
9450: 65 66 20 73 74 72 75 63 74 20 54 61 62 6c 65 20  ef struct Table 
9460: 54 61 62 6c 65 3b 0a 74 79 70 65 64 65 66 20 73  Table;.typedef s
9470: 74 72 75 63 74 20 54 61 62 6c 65 4c 6f 63 6b 20  truct TableLock 
9480: 54 61 62 6c 65 4c 6f 63 6b 3b 0a 74 79 70 65 64  TableLock;.typed
9490: 65 66 20 73 74 72 75 63 74 20 54 6f 6b 65 6e 20  ef struct Token 
94a0: 54 6f 6b 65 6e 3b 0a 74 79 70 65 64 65 66 20 73  Token;.typedef s
94b0: 74 72 75 63 74 20 54 72 65 65 56 69 65 77 20 54  truct TreeView T
94c0: 72 65 65 56 69 65 77 3b 0a 74 79 70 65 64 65 66  reeView;.typedef
94d0: 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20   struct Trigger 
94e0: 54 72 69 67 67 65 72 3b 0a 74 79 70 65 64 65 66  Trigger;.typedef
94f0: 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 50   struct TriggerP
9500: 72 67 20 54 72 69 67 67 65 72 50 72 67 3b 0a 74  rg TriggerPrg;.t
9510: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72  ypedef struct Tr
9520: 69 67 67 65 72 53 74 65 70 20 54 72 69 67 67 65  iggerStep Trigge
9530: 72 53 74 65 70 3b 0a 74 79 70 65 64 65 66 20 73  rStep;.typedef s
9540: 74 72 75 63 74 20 55 6e 70 61 63 6b 65 64 52 65  truct UnpackedRe
9550: 63 6f 72 64 20 55 6e 70 61 63 6b 65 64 52 65 63  cord UnpackedRec
9560: 6f 72 64 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ord;.typedef str
9570: 75 63 74 20 55 70 73 65 72 74 20 55 70 73 65 72  uct Upsert Upser
9580: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
9590: 74 20 56 54 61 62 6c 65 20 56 54 61 62 6c 65 3b  t VTable VTable;
95a0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
95b0: 56 74 61 62 43 74 78 20 56 74 61 62 43 74 78 3b  VtabCtx VtabCtx;
95c0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
95d0: 57 61 6c 6b 65 72 20 57 61 6c 6b 65 72 3b 0a 74  Walker Walker;.t
95e0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 57 68  ypedef struct Wh
95f0: 65 72 65 49 6e 66 6f 20 57 68 65 72 65 49 6e 66  ereInfo WhereInf
9600: 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  o;.typedef struc
9610: 74 20 57 69 6e 64 6f 77 20 57 69 6e 64 6f 77 3b  t Window Window;
9620: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9630: 57 69 74 68 20 57 69 74 68 3b 0a 0a 0a 2f 2a 0a  With With;.../*.
9640: 2a 2a 20 54 68 65 20 62 69 74 6d 61 73 6b 20 64  ** The bitmask d
9650: 61 74 61 74 79 70 65 20 64 65 66 69 6e 65 64 20  atatype defined 
9660: 62 65 6c 6f 77 20 69 73 20 75 73 65 64 20 66 6f  below is used fo
9670: 72 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69  r various optimi
9680: 7a 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 43  zations..**.** C
9690: 68 61 6e 67 69 6e 67 20 74 68 69 73 20 66 72 6f  hanging this fro
96a0: 6d 20 61 20 36 34 2d 62 69 74 20 74 6f 20 61 20  m a 64-bit to a 
96b0: 33 32 2d 62 69 74 20 74 79 70 65 20 6c 69 6d 69  32-bit type limi
96c0: 74 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ts the number of
96d0: 0a 2a 2a 20 74 61 62 6c 65 73 20 69 6e 20 61 20  .** tables in a 
96e0: 6a 6f 69 6e 20 74 6f 20 33 32 20 69 6e 73 74 65  join to 32 inste
96f0: 61 64 20 6f 66 20 36 34 2e 20 20 42 75 74 20 69  ad of 64.  But i
9700: 74 20 61 6c 73 6f 20 72 65 64 75 63 65 73 20 74  t also reduces t
9710: 68 65 20 73 69 7a 65 0a 2a 2a 20 6f 66 20 74 68  he size.** of th
9720: 65 20 6c 69 62 72 61 72 79 20 62 79 20 37 33 38  e library by 738
9730: 20 62 79 74 65 73 20 6f 6e 20 69 78 38 36 2e 0a   bytes on ix86..
9740: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
9750: 5f 42 49 54 4d 41 53 4b 5f 54 59 50 45 0a 20 20  _BITMASK_TYPE.  
9760: 74 79 70 65 64 65 66 20 53 51 4c 49 54 45 5f 42  typedef SQLITE_B
9770: 49 54 4d 41 53 4b 5f 54 59 50 45 20 42 69 74 6d  ITMASK_TYPE Bitm
9780: 61 73 6b 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70  ask;.#else.  typ
9790: 65 64 65 66 20 75 36 34 20 42 69 74 6d 61 73 6b  edef u64 Bitmask
97a0: 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ;.#endif../*.** 
97b0: 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 69  The number of bi
97c0: 74 73 20 69 6e 20 61 20 42 69 74 6d 61 73 6b 2e  ts in a Bitmask.
97d0: 20 20 22 42 4d 53 22 20 6d 65 61 6e 73 20 22 42    "BMS" means "B
97e0: 69 74 4d 61 73 6b 20 53 69 7a 65 22 2e 0a 2a 2f  itMask Size"..*/
97f0: 0a 23 64 65 66 69 6e 65 20 42 4d 53 20 20 28 28  .#define BMS  ((
9800: 69 6e 74 29 28 73 69 7a 65 6f 66 28 42 69 74 6d  int)(sizeof(Bitm
9810: 61 73 6b 29 2a 38 29 29 0a 0a 2f 2a 0a 2a 2a 20  ask)*8))../*.** 
9820: 41 20 62 69 74 20 69 6e 20 61 20 42 69 74 6d 61  A bit in a Bitma
9830: 73 6b 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41  sk.*/.#define MA
9840: 53 4b 42 49 54 28 6e 29 20 20 20 28 28 28 42 69  SKBIT(n)   (((Bi
9850: 74 6d 61 73 6b 29 31 29 3c 3c 28 6e 29 29 0a 23  tmask)1)<<(n)).#
9860: 64 65 66 69 6e 65 20 4d 41 53 4b 42 49 54 33 32  define MASKBIT32
9870: 28 6e 29 20 28 28 28 75 6e 73 69 67 6e 65 64 20  (n) (((unsigned 
9880: 69 6e 74 29 31 29 3c 3c 28 6e 29 29 0a 23 64 65  int)1)<<(n)).#de
9890: 66 69 6e 65 20 41 4c 4c 42 49 54 53 20 20 20 20  fine ALLBITS    
98a0: 20 20 28 28 42 69 74 6d 61 73 6b 29 2d 31 29 0a    ((Bitmask)-1).
98b0: 0a 2f 2a 20 41 20 56 4c 69 73 74 20 6f 62 6a 65  ./* A VList obje
98c0: 63 74 20 72 65 63 6f 72 64 73 20 61 20 6d 61 70  ct records a map
98d0: 70 69 6e 67 20 62 65 74 77 65 65 6e 20 70 61 72  ping between par
98e0: 61 6d 65 74 65 72 73 2f 76 61 72 69 61 62 6c 65  ameters/variable
98f0: 73 2f 77 69 6c 64 63 61 72 64 73 0a 2a 2a 20 69  s/wildcards.** i
9900: 6e 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d  n the SQL statem
9910: 65 6e 74 20 28 73 75 63 68 20 61 73 20 24 61 62  ent (such as $ab
9920: 63 2c 20 40 70 71 72 2c 20 6f 72 20 3a 78 79 7a  c, @pqr, or :xyz
9930: 29 20 61 6e 64 20 74 68 65 20 69 6e 74 65 67 65  ) and the intege
9940: 72 0a 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e 75  r.** variable nu
9950: 6d 62 65 72 20 61 73 73 6f 63 69 61 74 65 64 20  mber associated 
9960: 77 69 74 68 20 74 68 61 74 20 70 61 72 61 6d 65  with that parame
9970: 74 65 72 2e 20 20 53 65 65 20 74 68 65 20 66 6f  ter.  See the fo
9980: 72 6d 61 74 20 64 65 73 63 72 69 70 74 69 6f 6e  rmat description
9990: 0a 2a 2a 20 6f 6e 20 74 68 65 20 73 71 6c 69 74  .** on the sqlit
99a0: 65 33 56 4c 69 73 74 41 64 64 28 29 20 72 6f 75  e3VListAdd() rou
99b0: 74 69 6e 65 20 66 6f 72 20 6d 6f 72 65 20 69 6e  tine for more in
99c0: 66 6f 72 6d 61 74 69 6f 6e 2e 20 20 41 20 56 4c  formation.  A VL
99d0: 69 73 74 20 69 73 20 72 65 61 6c 6c 79 0a 2a 2a  ist is really.**
99e0: 20 6a 75 73 74 20 61 6e 20 61 72 72 61 79 20 6f   just an array o
99f0: 66 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2f 0a 74  f integers..*/.t
9a00: 79 70 65 64 65 66 20 69 6e 74 20 56 4c 69 73 74  ypedef int VList
9a10: 3b 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 65 72 20 73  ;../*.** Defer s
9a20: 6f 75 72 63 69 6e 67 20 76 64 62 65 2e 68 20 61  ourcing vdbe.h a
9a30: 6e 64 20 62 74 72 65 65 2e 68 20 75 6e 74 69 6c  nd btree.h until
9a40: 20 61 66 74 65 72 20 74 68 65 20 22 75 38 22 20   after the "u8" 
9a50: 61 6e 64 0a 2a 2a 20 22 42 75 73 79 48 61 6e 64  and.** "BusyHand
9a60: 6c 65 72 22 20 74 79 70 65 64 65 66 73 2e 20 76  ler" typedefs. v
9a70: 64 62 65 2e 68 20 61 6c 73 6f 20 72 65 71 75 69  dbe.h also requi
9a80: 72 65 73 20 61 20 66 65 77 20 6f 66 20 74 68 65  res a few of the
9a90: 20 6f 70 61 71 75 65 0a 2a 2a 20 70 6f 69 6e 74   opaque.** point
9aa0: 65 72 20 74 79 70 65 73 20 28 69 2e 65 2e 20 46  er types (i.e. F
9ab0: 75 6e 63 44 65 66 29 20 64 65 66 69 6e 65 64 20  uncDef) defined 
9ac0: 61 62 6f 76 65 2e 0a 2a 2f 0a 23 69 6e 63 6c 75  above..*/.#inclu
9ad0: 64 65 20 22 62 74 72 65 65 2e 68 22 0a 23 69 6e  de "btree.h".#in
9ae0: 63 6c 75 64 65 20 22 76 64 62 65 2e 68 22 0a 23  clude "vdbe.h".#
9af0: 69 6e 63 6c 75 64 65 20 22 70 61 67 65 72 2e 68  include "pager.h
9b00: 22 0a 23 69 6e 63 6c 75 64 65 20 22 70 63 61 63  ".#include "pcac
9b10: 68 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22  he.h".#include "
9b20: 6f 73 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22  os.h".#include "
9b30: 6d 75 74 65 78 2e 68 22 0a 0a 2f 2a 20 54 68 65  mutex.h"../* The
9b40: 20 53 51 4c 49 54 45 5f 45 58 54 52 41 5f 44 55   SQLITE_EXTRA_DU
9b50: 52 41 42 4c 45 20 63 6f 6d 70 69 6c 65 2d 74 69  RABLE compile-ti
9b60: 6d 65 20 6f 70 74 69 6f 6e 20 75 73 65 64 20 74  me option used t
9b70: 6f 20 73 65 74 20 74 68 65 20 64 65 66 61 75 6c  o set the defaul
9b80: 74 0a 2a 2a 20 73 79 6e 63 68 72 6f 6e 6f 75 73  t.** synchronous
9b90: 20 73 65 74 74 69 6e 67 20 74 6f 20 45 58 54 52   setting to EXTR
9ba0: 41 2e 20 20 49 74 20 69 73 20 6e 6f 20 6c 6f 6e  A.  It is no lon
9bb0: 67 65 72 20 73 75 70 70 6f 72 74 65 64 2e 0a 2a  ger supported..*
9bc0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
9bd0: 45 58 54 52 41 5f 44 55 52 41 42 4c 45 0a 23 20  EXTRA_DURABLE.# 
9be0: 77 61 72 6e 69 6e 67 20 55 73 65 20 53 51 4c 49  warning Use SQLI
9bf0: 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48  TE_DEFAULT_SYNCH
9c00: 52 4f 4e 4f 55 53 3d 33 20 69 6e 73 74 65 61 64  RONOUS=3 instead
9c10: 20 6f 66 20 53 51 4c 49 54 45 5f 45 58 54 52 41   of SQLITE_EXTRA
9c20: 5f 44 55 52 41 42 4c 45 0a 23 20 64 65 66 69 6e  _DURABLE.# defin
9c30: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
9c40: 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 33 0a 23  _SYNCHRONOUS 3.#
9c50: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 66  endif../*.** Def
9c60: 61 75 6c 74 20 73 79 6e 63 68 72 6f 6e 6f 75 73  ault synchronous
9c70: 20 6c 65 76 65 6c 73 2e 0a 2a 2a 0a 2a 2a 20 4e   levels..**.** N
9c80: 6f 74 65 20 74 68 61 74 20 28 66 6f 72 20 68 69  ote that (for hi
9c90: 73 74 6f 72 63 61 6c 20 72 65 61 73 6f 6e 73 29  storcal reasons)
9ca0: 20 74 68 65 20 50 41 47 45 52 5f 53 59 4e 43 48   the PAGER_SYNCH
9cb0: 52 4f 4e 4f 55 53 5f 2a 20 6d 61 63 72 6f 73 20  RONOUS_* macros 
9cc0: 64 69 66 66 65 72 0a 2a 2a 20 66 72 6f 6d 20 74  differ.** from t
9cd0: 68 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  he SQLITE_DEFAUL
9ce0: 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 76 61  T_SYNCHRONOUS va
9cf0: 6c 75 65 20 62 79 20 31 2e 0a 2a 2a 0a 2a 2a 20  lue by 1..**.** 
9d00: 20 20 20 20 20 20 20 20 20 20 50 41 47 45 52 5f            PAGER_
9d10: 53 59 4e 43 48 52 4f 4e 4f 55 53 20 20 20 20 20  SYNCHRONOUS     
9d20: 20 20 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52    DEFAULT_SYNCHR
9d30: 4f 4e 4f 55 53 0a 2a 2a 20 20 20 4f 46 46 20 20  ONOUS.**   OFF  
9d40: 20 20 20 20 20 20 20 20 20 31 20 20 20 20 20 20           1      
9d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9d60: 20 20 20 30 0a 2a 2a 20 20 20 4e 4f 52 4d 41 4c     0.**   NORMAL
9d70: 20 20 20 20 20 20 20 20 32 20 20 20 20 20 20 20          2       
9d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9d90: 20 20 31 0a 2a 2a 20 20 20 46 55 4c 4c 20 20 20    1.**   FULL   
9da0: 20 20 20 20 20 20 20 33 20 20 20 20 20 20 20 20         3        
9db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9dc0: 20 32 0a 2a 2a 20 20 20 45 58 54 52 41 20 20 20   2.**   EXTRA   
9dd0: 20 20 20 20 20 20 34 20 20 20 20 20 20 20 20 20        4         
9de0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9df0: 33 0a 2a 2a 0a 2a 2a 20 54 68 65 20 22 50 52 41  3.**.** The "PRA
9e00: 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 22  GMA synchronous"
9e10: 20 73 74 61 74 65 6d 65 6e 74 20 61 6c 73 6f 20   statement also 
9e20: 75 73 65 73 20 74 68 65 20 7a 65 72 6f 2d 62 61  uses the zero-ba
9e30: 73 65 64 20 6e 75 6d 62 65 72 73 2e 0a 2a 2a 20  sed numbers..** 
9e40: 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
9e50: 74 68 65 20 7a 65 72 6f 2d 62 61 73 65 64 20 6e  the zero-based n
9e60: 75 6d 62 65 72 73 20 61 72 65 20 75 73 65 64 20  umbers are used 
9e70: 66 6f 72 20 61 6c 6c 20 65 78 74 65 72 6e 61 6c  for all external
9e80: 20 69 6e 74 65 72 66 61 63 65 73 0a 2a 2a 20 61   interfaces.** a
9e90: 6e 64 20 74 68 65 20 6f 6e 65 2d 62 61 73 65 64  nd the one-based
9ea0: 20 76 61 6c 75 65 73 20 61 72 65 20 75 73 65 64   values are used
9eb0: 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 0a 2a 2f 0a   internally..*/.
9ec0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44  #ifndef SQLITE_D
9ed0: 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f  EFAULT_SYNCHRONO
9ee0: 55 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  US.# define SQLI
9ef0: 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48  TE_DEFAULT_SYNCH
9f00: 52 4f 4e 4f 55 53 20 32 0a 23 65 6e 64 69 66 0a  RONOUS 2.#endif.
9f10: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44  #ifndef SQLITE_D
9f20: 45 46 41 55 4c 54 5f 57 41 4c 5f 53 59 4e 43 48  EFAULT_WAL_SYNCH
9f30: 52 4f 4e 4f 55 53 0a 23 20 64 65 66 69 6e 65 20  RONOUS.# define 
9f40: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57  SQLITE_DEFAULT_W
9f50: 41 4c 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 53  AL_SYNCHRONOUS S
9f60: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59  QLITE_DEFAULT_SY
9f70: 4e 43 48 52 4f 4e 4f 55 53 0a 23 65 6e 64 69 66  NCHRONOUS.#endif
9f80: 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74  ../*.** Each dat
9f90: 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20 62 65  abase file to be
9fa0: 20 61 63 63 65 73 73 65 64 20 62 79 20 74 68 65   accessed by the
9fb0: 20 73 79 73 74 65 6d 20 69 73 20 61 6e 20 69 6e   system is an in
9fc0: 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 65  stance.** of the
9fd0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
9fe0: 74 75 72 65 2e 20 20 54 68 65 72 65 20 61 72 65  ture.  There are
9ff0: 20 6e 6f 72 6d 61 6c 6c 79 20 74 77 6f 20 6f 66   normally two of
a000: 20 74 68 65 73 65 20 73 74 72 75 63 74 75 72 65   these structure
a010: 73 0a 2a 2a 20 69 6e 20 74 68 65 20 73 71 6c 69  s.** in the sqli
a020: 74 65 2e 61 44 62 5b 5d 20 61 72 72 61 79 2e 20  te.aDb[] array. 
a030: 20 61 44 62 5b 30 5d 20 69 73 20 74 68 65 20 6d   aDb[0] is the m
a040: 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
a050: 65 20 61 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d 20  e and.** aDb[1] 
a060: 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  is the database 
a070: 66 69 6c 65 20 75 73 65 64 20 74 6f 20 68 6f 6c  file used to hol
a080: 64 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  d temporary tabl
a090: 65 73 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a  es.  Additional.
a0a0: 2a 2a 20 64 61 74 61 62 61 73 65 73 20 6d 61 79  ** databases may
a0b0: 20 62 65 20 61 74 74 61 63 68 65 64 2e 0a 2a 2f   be attached..*/
a0c0: 0a 73 74 72 75 63 74 20 44 62 20 7b 0a 20 20 63  .struct Db {.  c
a0d0: 68 61 72 20 2a 7a 44 62 53 4e 61 6d 65 3b 20 20  har *zDbSName;  
a0e0: 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
a0f0: 68 69 73 20 64 61 74 61 62 61 73 65 2e 20 28 73  his database. (s
a100: 63 68 65 6d 61 20 6e 61 6d 65 2c 20 6e 6f 74 20  chema name, not 
a110: 66 69 6c 65 6e 61 6d 65 29 20 2a 2f 0a 20 20 42  filename) */.  B
a120: 74 72 65 65 20 2a 70 42 74 3b 20 20 20 20 20 20  tree *pBt;      
a130: 20 20 20 20 2f 2a 20 54 68 65 20 42 2a 54 72 65      /* The B*Tre
a140: 65 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 20  e structure for 
a150: 74 68 69 73 20 64 61 74 61 62 61 73 65 20 66 69  this database fi
a160: 6c 65 20 2a 2f 0a 20 20 75 38 20 73 61 66 65 74  le */.  u8 safet
a170: 79 5f 6c 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20  y_level;     /* 
a180: 48 6f 77 20 61 67 67 72 65 73 73 69 76 65 20 61  How aggressive a
a190: 74 20 73 79 6e 63 69 6e 67 20 64 61 74 61 20 74  t syncing data t
a1a0: 6f 20 64 69 73 6b 20 2a 2f 0a 20 20 75 38 20 62  o disk */.  u8 b
a1b0: 53 79 6e 63 53 65 74 3b 20 20 20 20 20 20 20 20  SyncSet;        
a1c0: 20 2f 2a 20 54 72 75 65 20 69 66 20 22 50 52 41   /* True if "PRA
a1d0: 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3d  GMA synchronous=
a1e0: 4e 22 20 68 61 73 20 62 65 65 6e 20 72 75 6e 20  N" has been run 
a1f0: 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63  */.  Schema *pSc
a200: 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 50 6f 69  hema;     /* Poi
a210: 6e 74 65 72 20 74 6f 20 64 61 74 61 62 61 73 65  nter to database
a220: 20 73 63 68 65 6d 61 20 28 70 6f 73 73 69 62 6c   schema (possibl
a230: 79 20 73 68 61 72 65 64 29 20 2a 2f 0a 7d 3b 0a  y shared) */.};.
a240: 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
a250: 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
a260: 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 73 74  ing structure st
a270: 6f 72 65 73 20 61 20 64 61 74 61 62 61 73 65 20  ores a database 
a280: 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 4d 6f  schema..**.** Mo
a290: 73 74 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74  st Schema object
a2a0: 73 20 61 72 65 20 61 73 73 6f 63 69 61 74 65 64  s are associated
a2b0: 20 77 69 74 68 20 61 20 42 74 72 65 65 2e 20 20   with a Btree.  
a2c0: 54 68 65 20 65 78 63 65 70 74 69 6f 6e 20 69 73  The exception is
a2d0: 0a 2a 2a 20 74 68 65 20 53 63 68 65 6d 61 20 66  .** the Schema f
a2e0: 6f 72 20 74 68 65 20 54 45 4d 50 20 64 61 74 61  or the TEMP data
a2f0: 62 61 65 73 20 28 73 71 6c 69 74 65 33 2e 61 44  baes (sqlite3.aD
a300: 62 5b 31 5d 29 20 77 68 69 63 68 20 69 73 20 66  b[1]) which is f
a310: 72 65 65 2d 73 74 61 6e 64 69 6e 67 2e 0a 2a 2a  ree-standing..**
a320: 20 49 6e 20 73 68 61 72 65 64 20 63 61 63 68 65   In shared cache
a330: 20 6d 6f 64 65 2c 20 61 20 73 69 6e 67 6c 65 20   mode, a single 
a340: 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 20 63 61  Schema object ca
a350: 6e 20 62 65 20 73 68 61 72 65 64 20 62 79 20 6d  n be shared by m
a360: 75 6c 74 69 70 6c 65 0a 2a 2a 20 42 74 72 65 65  ultiple.** Btree
a370: 73 20 74 68 61 74 20 72 65 66 65 72 20 74 6f 20  s that refer to 
a380: 74 68 65 20 73 61 6d 65 20 75 6e 64 65 72 6c 79  the same underly
a390: 69 6e 67 20 42 74 53 68 61 72 65 64 20 6f 62 6a  ing BtShared obj
a3a0: 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 53 63 68 65 6d  ect..**.** Schem
a3b0: 61 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61 75  a objects are au
a3c0: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 61 6c  tomatically deal
a3d0: 6c 6f 63 61 74 65 64 20 77 68 65 6e 20 74 68 65  located when the
a3e0: 20 6c 61 73 74 20 42 74 72 65 65 20 74 68 61 74   last Btree that
a3f0: 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65 73 20 74  .** references t
a400: 68 65 6d 20 69 73 20 64 65 73 74 72 6f 79 65 64  hem is destroyed
a410: 2e 20 20 20 54 68 65 20 54 45 4d 50 20 53 63 68  .   The TEMP Sch
a420: 65 6d 61 20 69 73 20 6d 61 6e 75 61 6c 6c 79 20  ema is manually 
a430: 66 72 65 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69  freed by.** sqli
a440: 74 65 33 5f 63 6c 6f 73 65 28 29 2e 0a 2a 0a 2a  te3_close()..*.*
a450: 2a 20 41 20 74 68 72 65 61 64 20 6d 75 73 74 20  * A thread must 
a460: 62 65 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74  be holding a mut
a470: 65 78 20 6f 6e 20 74 68 65 20 63 6f 72 72 65 73  ex on the corres
a480: 70 6f 6e 64 69 6e 67 20 42 74 72 65 65 20 69 6e  ponding Btree in
a490: 20 6f 72 64 65 72 0a 2a 2a 20 74 6f 20 61 63 63   order.** to acc
a4a0: 65 73 73 20 53 63 68 65 6d 61 20 63 6f 6e 74 65  ess Schema conte
a4b0: 6e 74 2e 20 20 54 68 69 73 20 69 6d 70 6c 69 65  nt.  This implie
a4c0: 73 20 74 68 61 74 20 74 68 65 20 74 68 72 65 61  s that the threa
a4d0: 64 20 6d 75 73 74 20 61 6c 73 6f 20 62 65 0a 2a  d must also be.*
a4e0: 2a 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65  * holding a mute
a4f0: 78 20 6f 6e 20 74 68 65 20 73 71 6c 69 74 65 33  x on the sqlite3
a500: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f 69 6e   connection poin
a510: 74 65 72 20 74 68 61 74 20 6f 77 6e 73 20 74 68  ter that owns th
a520: 65 20 42 74 72 65 65 2e 0a 2a 2a 20 46 6f 72 20  e Btree..** For 
a530: 61 20 54 45 4d 50 20 53 63 68 65 6d 61 2c 20 6f  a TEMP Schema, o
a540: 6e 6c 79 20 74 68 65 20 63 6f 6e 6e 65 63 74 69  nly the connecti
a550: 6f 6e 20 6d 75 74 65 78 20 69 73 20 72 65 71 75  on mutex is requ
a560: 69 72 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ired..*/.struct 
a570: 53 63 68 65 6d 61 20 7b 0a 20 20 69 6e 74 20 73  Schema {.  int s
a580: 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 3b 20 20 20  chema_cookie;   
a590: 2f 2a 20 44 61 74 61 62 61 73 65 20 73 63 68 65  /* Database sche
a5a0: 6d 61 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65  ma version numbe
a5b0: 72 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20  r for this file 
a5c0: 2a 2f 0a 20 20 69 6e 74 20 69 47 65 6e 65 72 61  */.  int iGenera
a5d0: 74 69 6f 6e 3b 20 20 20 20 20 2f 2a 20 47 65 6e  tion;     /* Gen
a5e0: 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 2e  eration counter.
a5f0: 20 20 49 6e 63 72 65 6d 65 6e 74 65 64 20 77 69    Incremented wi
a600: 74 68 20 65 61 63 68 20 63 68 61 6e 67 65 20 2a  th each change *
a610: 2f 0a 20 20 48 61 73 68 20 74 62 6c 48 61 73 68  /.  Hash tblHash
a620: 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  ;        /* All 
a630: 74 61 62 6c 65 73 20 69 6e 64 65 78 65 64 20 62  tables indexed b
a640: 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68  y name */.  Hash
a650: 20 69 64 78 48 61 73 68 3b 20 20 20 20 20 20 20   idxHash;       
a660: 20 2f 2a 20 41 6c 6c 20 28 6e 61 6d 65 64 29 20   /* All (named) 
a670: 69 6e 64 69 63 65 73 20 69 6e 64 65 78 65 64 20  indices indexed 
a680: 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73  by name */.  Has
a690: 68 20 74 72 69 67 48 61 73 68 3b 20 20 20 20 20  h trigHash;     
a6a0: 20 20 2f 2a 20 41 6c 6c 20 74 72 69 67 67 65 72    /* All trigger
a6b0: 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d  s indexed by nam
a6c0: 65 20 2a 2f 0a 20 20 48 61 73 68 20 66 6b 65 79  e */.  Hash fkey
a6d0: 48 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20 41  Hash;       /* A
a6e0: 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20  ll foreign keys 
a6f0: 62 79 20 72 65 66 65 72 65 6e 63 65 64 20 74 61  by referenced ta
a700: 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 61  ble name */.  Ta
a710: 62 6c 65 20 2a 70 53 65 71 54 61 62 3b 20 20 20  ble *pSeqTab;   
a720: 20 20 20 2f 2a 20 54 68 65 20 73 71 6c 69 74 65     /* The sqlite
a730: 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c 65 20  _sequence table 
a740: 75 73 65 64 20 62 79 20 41 55 54 4f 49 4e 43 52  used by AUTOINCR
a750: 45 4d 45 4e 54 20 2a 2f 0a 20 20 75 38 20 66 69  EMENT */.  u8 fi
a760: 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20 20 20  le_format;      
a770: 2f 2a 20 53 63 68 65 6d 61 20 66 6f 72 6d 61 74  /* Schema format
a780: 20 76 65 72 73 69 6f 6e 20 66 6f 72 20 74 68 69   version for thi
a790: 73 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 65  s file */.  u8 e
a7a0: 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nc;             
a7b0: 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e   /* Text encodin
a7c0: 67 20 75 73 65 64 20 62 79 20 74 68 69 73 20 64  g used by this d
a7d0: 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 75 31 36  atabase */.  u16
a7e0: 20 73 63 68 65 6d 61 46 6c 61 67 73 3b 20 20 20   schemaFlags;   
a7f0: 20 20 2f 2a 20 46 6c 61 67 73 20 61 73 73 6f 63    /* Flags assoc
a800: 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20  iated with this 
a810: 73 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20  schema */.  int 
a820: 63 61 63 68 65 5f 73 69 7a 65 3b 20 20 20 20 20  cache_size;     
a830: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 61   /* Number of pa
a840: 67 65 73 20 74 6f 20 75 73 65 20 69 6e 20 74 68  ges to use in th
a850: 65 20 63 61 63 68 65 20 2a 2f 0a 7d 3b 0a 0a 2f  e cache */.};../
a860: 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f  *.** These macro
a870: 73 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  s can be used to
a880: 20 74 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63   test, set, or c
a890: 6c 65 61 72 20 62 69 74 73 20 69 6e 20 74 68 65  lear bits in the
a8a0: 0a 2a 2a 20 44 62 2e 70 53 63 68 65 6d 61 2d 3e  .** Db.pSchema->
a8b0: 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a  flags field..*/.
a8c0: 23 64 65 66 69 6e 65 20 44 62 48 61 73 50 72 6f  #define DbHasPro
a8d0: 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 20  perty(D,I,P)    
a8e0: 20 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70   (((D)->aDb[I].p
a8f0: 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c  Schema->schemaFl
a900: 61 67 73 26 28 50 29 29 3d 3d 28 50 29 29 0a 23  ags&(P))==(P)).#
a910: 64 65 66 69 6e 65 20 44 62 48 61 73 41 6e 79 50  define DbHasAnyP
a920: 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20  roperty(D,I,P)  
a930: 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53  (((D)->aDb[I].pS
a940: 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61  chema->schemaFla
a950: 67 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66  gs&(P))!=0).#def
a960: 69 6e 65 20 44 62 53 65 74 50 72 6f 70 65 72 74  ine DbSetPropert
a970: 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28 44 29  y(D,I,P)     (D)
a980: 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61  ->aDb[I].pSchema
a990: 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 7c 3d 28  ->schemaFlags|=(
a9a0: 50 29 0a 23 64 65 66 69 6e 65 20 44 62 43 6c 65  P).#define DbCle
a9b0: 61 72 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50  arProperty(D,I,P
a9c0: 29 20 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e  )   (D)->aDb[I].
a9d0: 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46  pSchema->schemaF
a9e0: 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 0a 2a  lags&=~(P)../*.*
a9f0: 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
aa00: 20 66 6f 72 20 74 68 65 20 44 42 2e 70 53 63 68   for the DB.pSch
aa10: 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69 65 6c 64  ema->flags field
aa20: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 44 42 5f 53  ..**.** The DB_S
aa30: 63 68 65 6d 61 4c 6f 61 64 65 64 20 66 6c 61 67  chemaLoaded flag
aa40: 20 69 73 20 73 65 74 20 61 66 74 65 72 20 74 68   is set after th
aa50: 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
aa60: 61 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20 72 65  a has been.** re
aa70: 61 64 20 69 6e 74 6f 20 69 6e 74 65 72 6e 61 6c  ad into internal
aa80: 20 68 61 73 68 20 74 61 62 6c 65 73 2e 0a 2a 2a   hash tables..**
aa90: 0a 2a 2a 20 44 42 5f 55 6e 72 65 73 65 74 56 69  .** DB_UnresetVi
aaa0: 65 77 73 20 6d 65 61 6e 73 20 74 68 61 74 20 6f  ews means that o
aab0: 6e 65 20 6f 72 20 6d 6f 72 65 20 76 69 65 77 73  ne or more views
aac0: 20 68 61 76 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d   have column nam
aad0: 65 73 20 74 68 61 74 0a 2a 2a 20 68 61 76 65 20  es that.** have 
aae0: 62 65 65 6e 20 66 69 6c 6c 65 64 20 6f 75 74 2e  been filled out.
aaf0: 20 20 49 66 20 74 68 65 20 73 63 68 65 6d 61 20    If the schema 
ab00: 63 68 61 6e 67 65 73 2c 20 74 68 65 73 65 20 63  changes, these c
ab10: 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6d 69 67 68  olumn names migh
ab20: 74 0a 2a 2a 20 63 68 61 6e 67 65 73 20 61 6e 64  t.** changes and
ab30: 20 73 6f 20 74 68 65 20 76 69 65 77 20 77 69 6c   so the view wil
ab40: 6c 20 6e 65 65 64 20 74 6f 20 62 65 20 72 65 73  l need to be res
ab50: 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44  et..*/.#define D
ab60: 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 20 20  B_SchemaLoaded  
ab70: 20 20 30 78 30 30 30 31 20 20 2f 2a 20 54 68 65    0x0001  /* The
ab80: 20 73 63 68 65 6d 61 20 68 61 73 20 62 65 65 6e   schema has been
ab90: 20 6c 6f 61 64 65 64 20 2a 2f 0a 23 64 65 66 69   loaded */.#defi
aba0: 6e 65 20 44 42 5f 55 6e 72 65 73 65 74 56 69 65  ne DB_UnresetVie
abb0: 77 73 20 20 20 20 30 78 30 30 30 32 20 20 2f 2a  ws    0x0002  /*
abc0: 20 53 6f 6d 65 20 76 69 65 77 73 20 68 61 76 65   Some views have
abd0: 20 64 65 66 69 6e 65 64 20 63 6f 6c 75 6d 6e 20   defined column 
abe0: 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  names */.#define
abf0: 20 44 42 5f 45 6d 70 74 79 20 20 20 20 20 20 20   DB_Empty       
ac00: 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20 54      0x0004  /* T
ac10: 68 65 20 66 69 6c 65 20 69 73 20 65 6d 70 74 79  he file is empty
ac20: 20 28 6c 65 6e 67 74 68 20 30 20 62 79 74 65 73   (length 0 bytes
ac30: 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f  ) */.#define DB_
ac40: 52 65 73 65 74 57 61 6e 74 65 64 20 20 20 20 20  ResetWanted     
ac50: 30 78 30 30 30 38 20 20 2f 2a 20 52 65 73 65 74  0x0008  /* Reset
ac60: 20 74 68 65 20 73 63 68 65 6d 61 20 77 68 65 6e   the schema when
ac70: 20 6e 53 63 68 65 6d 61 4c 6f 63 6b 3d 3d 30 20   nSchemaLock==0 
ac80: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75  */../*.** The nu
ac90: 6d 62 65 72 20 6f 66 20 64 69 66 66 65 72 65 6e  mber of differen
aca0: 74 20 6b 69 6e 64 73 20 6f 66 20 74 68 69 6e 67  t kinds of thing
acb0: 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 6c 69  s that can be li
acc0: 6d 69 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20 74  mited.** using t
acd0: 68 65 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74  he sqlite3_limit
ace0: 28 29 20 69 6e 74 65 72 66 61 63 65 2e 0a 2a 2f  () interface..*/
acf0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
ad00: 4e 5f 4c 49 4d 49 54 20 28 53 51 4c 49 54 45 5f  N_LIMIT (SQLITE_
ad10: 4c 49 4d 49 54 5f 57 4f 52 4b 45 52 5f 54 48 52  LIMIT_WORKER_THR
ad20: 45 41 44 53 2b 31 29 0a 0a 2f 2a 0a 2a 2a 20 4c  EADS+1)../*.** L
ad30: 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20  ookaside malloc 
ad40: 69 73 20 61 20 73 65 74 20 6f 66 20 66 69 78 65  is a set of fixe
ad50: 64 2d 73 69 7a 65 20 62 75 66 66 65 72 73 20 74  d-size buffers t
ad60: 68 61 74 20 63 61 6e 20 62 65 20 75 73 65 64 0a  hat can be used.
ad70: 2a 2a 20 74 6f 20 73 61 74 69 73 66 79 20 73 6d  ** to satisfy sm
ad80: 61 6c 6c 20 74 72 61 6e 73 69 65 6e 74 20 6d 65  all transient me
ad90: 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
ada0: 72 65 71 75 65 73 74 73 20 66 6f 72 20 6f 62 6a  requests for obj
adb0: 65 63 74 73 0a 2a 2a 20 61 73 73 6f 63 69 61 74  ects.** associat
adc0: 65 64 20 77 69 74 68 20 61 20 70 61 72 74 69 63  ed with a partic
add0: 75 6c 61 72 20 64 61 74 61 62 61 73 65 20 63 6f  ular database co
ade0: 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68 65 20 75  nnection.  The u
adf0: 73 65 20 6f 66 0a 2a 2a 20 6c 6f 6f 6b 61 73 69  se of.** lookasi
ae00: 64 65 20 6d 61 6c 6c 6f 63 20 70 72 6f 76 69 64  de malloc provid
ae10: 65 73 20 61 20 73 69 67 6e 69 66 69 63 61 6e 74  es a significant
ae20: 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 65 6e 68   performance enh
ae30: 61 6e 63 65 6d 65 6e 74 0a 2a 2a 20 28 61 70 70  ancement.** (app
ae40: 72 6f 78 20 31 30 25 29 20 62 79 20 61 76 6f 69  rox 10%) by avoi
ae50: 64 69 6e 67 20 6e 75 6d 65 72 6f 75 73 20 6d 61  ding numerous ma
ae60: 6c 6c 6f 63 2f 66 72 65 65 20 72 65 71 75 65 73  lloc/free reques
ae70: 74 73 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67  ts while parsing
ae80: 0a 2a 2a 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  .** SQL statemen
ae90: 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f  ts..**.** The Lo
aea0: 6f 6b 61 73 69 64 65 20 73 74 72 75 63 74 75 72  okaside structur
aeb0: 65 20 68 6f 6c 64 73 20 63 6f 6e 66 69 67 75 72  e holds configur
aec0: 61 74 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f  ation informatio
aed0: 6e 20 61 62 6f 75 74 20 74 68 65 0a 2a 2a 20 6c  n about the.** l
aee0: 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20  ookaside malloc 
aef0: 73 75 62 73 79 73 74 65 6d 2e 20 20 45 61 63 68  subsystem.  Each
af00: 20 61 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72   available memor
af10: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 0a  y allocation in.
af20: 2a 2a 20 74 68 65 20 6c 6f 6f 6b 61 73 69 64 65  ** the lookaside
af30: 20 73 75 62 73 79 73 74 65 6d 20 69 73 20 73 74   subsystem is st
af40: 6f 72 65 64 20 6f 6e 20 61 20 6c 69 6e 6b 65 64  ored on a linked
af50: 20 6c 69 73 74 20 6f 66 20 4c 6f 6f 6b 61 73 69   list of Lookasi
af60: 64 65 53 6c 6f 74 0a 2a 2a 20 6f 62 6a 65 63 74  deSlot.** object
af70: 73 2e 0a 2a 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69  s..**.** Lookasi
af80: 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61  de allocations a
af90: 72 65 20 6f 6e 6c 79 20 61 6c 6c 6f 77 65 64 20  re only allowed 
afa0: 66 6f 72 20 6f 62 6a 65 63 74 73 20 74 68 61 74  for objects that
afb0: 20 61 72 65 20 61 73 73 6f 63 69 61 74 65 64 0a   are associated.
afc0: 2a 2a 20 77 69 74 68 20 61 20 70 61 72 74 69 63  ** with a partic
afd0: 75 6c 61 72 20 64 61 74 61 62 61 73 65 20 63 6f  ular database co
afe0: 6e 6e 65 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65  nnection.  Hence
aff0: 2c 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61  , schema informa
b000: 74 69 6f 6e 20 63 61 6e 6e 6f 74 0a 2a 2a 20 62  tion cannot.** b
b010: 65 20 73 74 6f 72 65 64 20 69 6e 20 6c 6f 6f 6b  e stored in look
b020: 61 73 69 64 65 20 62 65 63 61 75 73 65 20 69 6e  aside because in
b030: 20 73 68 61 72 65 64 20 63 61 63 68 65 20 6d 6f   shared cache mo
b040: 64 65 20 74 68 65 20 73 63 68 65 6d 61 20 69 6e  de the schema in
b050: 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 69 73 20  formation.** is 
b060: 73 68 61 72 65 64 20 62 79 20 6d 75 6c 74 69 70  shared by multip
b070: 6c 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  le database conn
b080: 65 63 74 69 6f 6e 73 2e 20 20 54 68 65 72 65 66  ections.  Theref
b090: 6f 72 65 2c 20 77 68 69 6c 65 20 70 61 72 73 69  ore, while parsi
b0a0: 6e 67 0a 2a 2a 20 73 63 68 65 6d 61 20 69 6e 66  ng.** schema inf
b0b0: 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 20 4c 6f  ormation, the Lo
b0c0: 6f 6b 61 73 69 64 65 2e 62 45 6e 61 62 6c 65 64  okaside.bEnabled
b0d0: 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72 65 64   flag is cleared
b0e0: 20 73 6f 20 74 68 61 74 0a 2a 2a 20 6c 6f 6f 6b   so that.** look
b0f0: 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e  aside allocation
b100: 73 20 61 72 65 20 6e 6f 74 20 75 73 65 64 20 74  s are not used t
b110: 6f 20 63 6f 6e 73 74 72 75 63 74 20 74 68 65 20  o construct the 
b120: 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 2e 0a  schema objects..
b130: 2a 2f 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73  */.struct Lookas
b140: 69 64 65 20 7b 0a 20 20 75 33 32 20 62 44 69 73  ide {.  u32 bDis
b150: 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  able;           
b160: 2f 2a 20 4f 6e 6c 79 20 6f 70 65 72 61 74 65 20  /* Only operate 
b170: 74 68 65 20 6c 6f 6f 6b 61 73 69 64 65 20 77 68  the lookaside wh
b180: 65 6e 20 7a 65 72 6f 20 2a 2f 0a 20 20 75 31 36  en zero */.  u16
b190: 20 73 7a 3b 20 20 20 20 20 20 20 20 20 20 20 20   sz;            
b1a0: 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
b1b0: 65 61 63 68 20 62 75 66 66 65 72 20 69 6e 20 62  each buffer in b
b1c0: 79 74 65 73 20 2a 2f 0a 20 20 75 38 20 62 4d 61  ytes */.  u8 bMa
b1d0: 6c 6c 6f 63 65 64 3b 20 20 20 20 20 20 20 20 20  lloced;         
b1e0: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 70 53 74    /* True if pSt
b1f0: 61 72 74 20 6f 62 74 61 69 6e 65 64 20 66 72 6f  art obtained fro
b200: 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63  m sqlite3_malloc
b210: 28 29 20 2a 2f 0a 20 20 75 33 32 20 6e 53 6c 6f  () */.  u32 nSlo
b220: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
b230: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 6f  /* Number of loo
b240: 6b 61 73 69 64 65 20 73 6c 6f 74 73 20 61 6c 6c  kaside slots all
b250: 6f 63 61 74 65 64 20 2a 2f 0a 20 20 75 33 32 20  ocated */.  u32 
b260: 61 6e 53 74 61 74 5b 33 5d 3b 20 20 20 20 20 20  anStat[3];      
b270: 20 20 20 20 2f 2a 20 30 3a 20 68 69 74 73 2e 20      /* 0: hits. 
b280: 20 31 3a 20 73 69 7a 65 20 6d 69 73 73 65 73 2e   1: size misses.
b290: 20 20 32 3a 20 66 75 6c 6c 20 6d 69 73 73 65 73    2: full misses
b2a0: 20 2a 2f 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53   */.  LookasideS
b2b0: 6c 6f 74 20 2a 70 49 6e 69 74 3b 20 20 20 2f 2a  lot *pInit;   /*
b2c0: 20 4c 69 73 74 20 6f 66 20 62 75 66 66 65 72 73   List of buffers
b2d0: 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20   not previously 
b2e0: 75 73 65 64 20 2a 2f 0a 20 20 4c 6f 6f 6b 61 73  used */.  Lookas
b2f0: 69 64 65 53 6c 6f 74 20 2a 70 46 72 65 65 3b 20  ideSlot *pFree; 
b300: 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 76 61    /* List of ava
b310: 69 6c 61 62 6c 65 20 62 75 66 66 65 72 73 20 2a  ilable buffers *
b320: 2f 0a 20 20 76 6f 69 64 20 2a 70 53 74 61 72 74  /.  void *pStart
b330: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  ;           /* F
b340: 69 72 73 74 20 62 79 74 65 20 6f 66 20 61 76 61  irst byte of ava
b350: 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73 70  ilable memory sp
b360: 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ace */.  void *p
b370: 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  End;            
b380: 20 2f 2a 20 46 69 72 73 74 20 62 79 74 65 20 70   /* First byte p
b390: 61 73 74 20 65 6e 64 20 6f 66 20 61 76 61 69 6c  ast end of avail
b3a0: 61 62 6c 65 20 73 70 61 63 65 20 2a 2f 0a 7d 3b  able space */.};
b3b0: 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64  .struct Lookasid
b3c0: 65 53 6c 6f 74 20 7b 0a 20 20 4c 6f 6f 6b 61 73  eSlot {.  Lookas
b3d0: 69 64 65 53 6c 6f 74 20 2a 70 4e 65 78 74 3b 20  ideSlot *pNext; 
b3e0: 20 20 20 2f 2a 20 4e 65 78 74 20 62 75 66 66 65     /* Next buffe
b3f0: 72 20 69 6e 20 74 68 65 20 6c 69 73 74 20 6f 66  r in the list of
b400: 20 66 72 65 65 20 62 75 66 66 65 72 73 20 2a 2f   free buffers */
b410: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 68 61 73  .};../*.** A has
b420: 68 20 74 61 62 6c 65 20 66 6f 72 20 62 75 69 6c  h table for buil
b430: 74 2d 69 6e 20 66 75 6e 63 74 69 6f 6e 20 64 65  t-in function de
b440: 66 69 6e 69 74 69 6f 6e 73 2e 20 20 28 41 70 70  finitions.  (App
b450: 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64  lication-defined
b460: 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 75 73  .** functions us
b470: 65 20 61 20 72 65 67 75 6c 61 72 20 74 61 62 6c  e a regular tabl
b480: 65 20 74 61 62 6c 65 20 66 72 6f 6d 20 68 61 73  e table from has
b490: 68 2e 68 2e 29 0a 2a 2a 0a 2a 2a 20 48 61 73 68  h.h.).**.** Hash
b4a0: 20 65 61 63 68 20 46 75 6e 63 44 65 66 20 73 74   each FuncDef st
b4b0: 72 75 63 74 75 72 65 20 69 6e 74 6f 20 6f 6e 65  ructure into one
b4c0: 20 6f 66 20 74 68 65 20 46 75 6e 63 44 65 66 48   of the FuncDefH
b4d0: 61 73 68 2e 61 5b 5d 20 73 6c 6f 74 73 2e 0a 2a  ash.a[] slots..*
b4e0: 2a 20 43 6f 6c 6c 69 73 69 6f 6e 73 20 61 72 65  * Collisions are
b4f0: 20 6f 6e 20 74 68 65 20 46 75 6e 63 44 65 66 2e   on the FuncDef.
b500: 75 2e 70 48 61 73 68 20 63 68 61 69 6e 2e 20 20  u.pHash chain.  
b510: 55 73 65 20 74 68 65 20 53 51 4c 49 54 45 5f 46  Use the SQLITE_F
b520: 55 4e 43 5f 48 41 53 48 28 29 0a 2a 2a 20 6d 61  UNC_HASH().** ma
b530: 63 72 6f 20 74 6f 20 63 6f 6d 70 75 74 65 20 61  cro to compute a
b540: 20 68 61 73 68 20 6f 6e 20 74 68 65 20 66 75 6e   hash on the fun
b550: 63 74 69 6f 6e 20 6e 61 6d 65 2e 0a 2a 2f 0a 23  ction name..*/.#
b560: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
b570: 4e 43 5f 48 41 53 48 5f 53 5a 20 32 33 0a 73 74  NC_HASH_SZ 23.st
b580: 72 75 63 74 20 46 75 6e 63 44 65 66 48 61 73 68  ruct FuncDefHash
b590: 20 7b 0a 20 20 46 75 6e 63 44 65 66 20 2a 61 5b   {.  FuncDef *a[
b5a0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48  SQLITE_FUNC_HASH
b5b0: 5f 53 5a 5d 3b 20 20 20 20 20 20 20 2f 2a 20 48  _SZ];       /* H
b5c0: 61 73 68 20 74 61 62 6c 65 20 66 6f 72 20 66 75  ash table for fu
b5d0: 6e 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 23 64  nctions */.};.#d
b5e0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
b5f0: 43 5f 48 41 53 48 28 43 2c 4c 29 20 28 28 28 43  C_HASH(C,L) (((C
b600: 29 2b 28 4c 29 29 25 53 51 4c 49 54 45 5f 46 55  )+(L))%SQLITE_FU
b610: 4e 43 5f 48 41 53 48 5f 53 5a 29 0a 0a 23 69 66  NC_HASH_SZ)..#if
b620: 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45 52 5f  def SQLITE_USER_
b630: 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a 2f  AUTHENTICATION./
b640: 2a 0a 2a 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e  *.** Information
b650: 20 68 65 6c 64 20 69 6e 20 74 68 65 20 22 73 71   held in the "sq
b660: 6c 69 74 65 33 22 20 64 61 74 61 62 61 73 65 20  lite3" database 
b670: 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63  connection objec
b680: 74 20 61 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f  t and used.** to
b690: 20 6d 61 6e 61 67 65 20 75 73 65 72 20 61 75 74   manage user aut
b6a0: 68 65 6e 74 69 63 61 74 69 6f 6e 2e 0a 2a 2f 0a  hentication..*/.
b6b0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 73  typedef struct s
b6c0: 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68 20  qlite3_userauth 
b6d0: 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68  sqlite3_userauth
b6e0: 3b 0a 73 74 72 75 63 74 20 73 71 6c 69 74 65 33  ;.struct sqlite3
b6f0: 5f 75 73 65 72 61 75 74 68 20 7b 0a 20 20 75 38  _userauth {.  u8
b700: 20 61 75 74 68 4c 65 76 65 6c 3b 20 20 20 20 20   authLevel;     
b710: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
b720: 75 72 72 65 6e 74 20 61 75 74 68 65 6e 74 69 63  urrent authentic
b730: 61 74 69 6f 6e 20 6c 65 76 65 6c 20 2a 2f 0a 20  ation level */. 
b740: 20 69 6e 74 20 6e 41 75 74 68 50 57 3b 20 20 20   int nAuthPW;   
b750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b760: 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20 7a 41  * Size of the zA
b770: 75 74 68 50 57 20 69 6e 20 62 79 74 65 73 20 2a  uthPW in bytes *
b780: 2f 0a 20 20 63 68 61 72 20 2a 7a 41 75 74 68 50  /.  char *zAuthP
b790: 57 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  W;              
b7a0: 20 20 2f 2a 20 50 61 73 73 77 6f 72 64 20 75 73    /* Password us
b7b0: 65 64 20 74 6f 20 61 75 74 68 65 6e 74 69 63 61  ed to authentica
b7c0: 74 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41  te */.  char *zA
b7d0: 75 74 68 55 73 65 72 3b 20 20 20 20 20 20 20 20  uthUser;        
b7e0: 20 20 20 20 20 20 2f 2a 20 55 73 65 72 20 6e 61        /* User na
b7f0: 6d 65 20 75 73 65 64 20 74 6f 20 61 75 74 68 65  me used to authe
b800: 6e 74 69 63 61 74 65 20 2a 2f 0a 7d 3b 0a 0a 2f  nticate */.};../
b810: 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
b820: 20 66 6f 72 20 73 71 6c 69 74 65 33 5f 75 73 65   for sqlite3_use
b830: 72 61 75 74 68 2e 61 75 74 68 4c 65 76 65 6c 20  rauth.authLevel 
b840: 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48  */.#define UAUTH
b850: 5f 55 6e 6b 6e 6f 77 6e 20 20 20 20 20 30 20 20  _Unknown     0  
b860: 20 20 20 2f 2a 20 41 75 74 68 65 6e 74 69 63 61     /* Authentica
b870: 74 69 6f 6e 20 6e 6f 74 20 79 65 74 20 63 68 65  tion not yet che
b880: 63 6b 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  cked */.#define 
b890: 55 41 55 54 48 5f 46 61 69 6c 20 20 20 20 20 20  UAUTH_Fail      
b8a0: 20 20 31 20 20 20 20 20 2f 2a 20 55 73 65 72 20    1     /* User 
b8b0: 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 66  authentication f
b8c0: 61 69 6c 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  ailed */.#define
b8d0: 20 55 41 55 54 48 5f 55 73 65 72 20 20 20 20 20   UAUTH_User     
b8e0: 20 20 20 32 20 20 20 20 20 2f 2a 20 41 75 74 68     2     /* Auth
b8f0: 65 6e 74 69 63 61 74 65 64 20 61 73 20 61 20 6e  enticated as a n
b900: 6f 72 6d 61 6c 20 75 73 65 72 20 2a 2f 0a 23 64  ormal user */.#d
b910: 65 66 69 6e 65 20 55 41 55 54 48 5f 41 64 6d 69  efine UAUTH_Admi
b920: 6e 20 20 20 20 20 20 20 33 20 20 20 20 20 2f 2a  n       3     /*
b930: 20 41 75 74 68 65 6e 74 69 63 61 74 65 64 20 61   Authenticated a
b940: 73 20 61 6e 20 61 64 6d 69 6e 69 73 74 72 61 74  s an administrat
b950: 6f 72 20 2a 2f 0a 0a 2f 2a 20 46 75 6e 63 74 69  or */../* Functi
b960: 6f 6e 73 20 75 73 65 64 20 6f 6e 6c 79 20 62 79  ons used only by
b970: 20 75 73 65 72 20 61 75 74 68 6f 72 69 7a 61 74   user authorizat
b980: 69 6f 6e 20 6c 6f 67 69 63 20 2a 2f 0a 69 6e 74  ion logic */.int
b990: 20 73 71 6c 69 74 65 33 55 73 65 72 41 75 74 68   sqlite3UserAuth
b9a0: 54 61 62 6c 65 28 63 6f 6e 73 74 20 63 68 61 72  Table(const char
b9b0: 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 55  *);.int sqlite3U
b9c0: 73 65 72 41 75 74 68 43 68 65 63 6b 4c 6f 67 69  serAuthCheckLogi
b9d0: 6e 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  n(sqlite3*,const
b9e0: 20 63 68 61 72 2a 2c 75 38 2a 29 3b 0a 76 6f 69   char*,u8*);.voi
b9f0: 64 20 73 71 6c 69 74 65 33 55 73 65 72 41 75 74  d sqlite3UserAut
ba00: 68 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 29 3b  hInit(sqlite3*);
ba10: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72 79  .void sqlite3Cry
ba20: 70 74 46 75 6e 63 28 73 71 6c 69 74 65 33 5f 63  ptFunc(sqlite3_c
ba30: 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69  ontext*,int,sqli
ba40: 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 0a 23  te3_value**);..#
ba50: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
ba60: 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54  USER_AUTHENTICAT
ba70: 49 4f 4e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 74 79  ION */../*.** ty
ba80: 70 65 64 65 66 20 66 6f 72 20 74 68 65 20 61 75  pedef for the au
ba90: 74 68 6f 72 69 7a 61 74 69 6f 6e 20 63 61 6c 6c  thorization call
baa0: 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a  back function..*
bab0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
bac0: 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54  USER_AUTHENTICAT
bad0: 49 4f 4e 0a 20 20 74 79 70 65 64 65 66 20 69 6e  ION.  typedef in
bae0: 74 20 28 2a 73 71 6c 69 74 65 33 5f 78 61 75 74  t (*sqlite3_xaut
baf0: 68 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e  h)(void*,int,con
bb00: 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
bb10: 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
bb20: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
bb30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bb40: 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f   const char*, co
bb50: 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73  nst char*);.#els
bb60: 65 0a 20 20 74 79 70 65 64 65 66 20 69 6e 74 20  e.  typedef int 
bb70: 28 2a 73 71 6c 69 74 65 33 5f 78 61 75 74 68 29  (*sqlite3_xauth)
bb80: 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74  (void*,int,const
bb90: 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
bba0: 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 0a  r*,const char*,.
bbb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bbc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
bbd0: 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e  onst char*);.#en
bbe0: 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  dif..#ifndef SQL
bbf0: 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41  ITE_OMIT_DEPRECA
bc00: 54 45 44 0a 2f 2a 20 54 68 69 73 20 69 73 20 61  TED./* This is a
bc10: 6e 20 65 78 74 72 61 20 53 51 4c 49 54 45 5f 54  n extra SQLITE_T
bc20: 52 41 43 45 20 6d 61 63 72 6f 20 74 68 61 74 20  RACE macro that 
bc30: 69 6e 64 69 63 61 74 65 73 20 22 6c 65 67 61 63  indicates "legac
bc40: 79 22 20 74 72 61 63 69 6e 67 0a 2a 2a 20 69 6e  y" tracing.** in
bc50: 20 74 68 65 20 73 74 79 6c 65 20 6f 66 20 73 71   the style of sq
bc60: 6c 69 74 65 33 5f 74 72 61 63 65 28 29 0a 2a 2f  lite3_trace().*/
bc70: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
bc80: 54 52 41 43 45 5f 4c 45 47 41 43 59 20 20 20 20  TRACE_LEGACY    
bc90: 20 20 20 20 20 20 30 78 34 30 20 20 20 20 20 2f        0x40     /
bca0: 2a 20 55 73 65 20 74 68 65 20 6c 65 67 61 63 79  * Use the legacy
bcb0: 20 78 54 72 61 63 65 20 2a 2f 0a 23 64 65 66 69   xTrace */.#defi
bcc0: 6e 65 20 53 51 4c 49 54 45 5f 54 52 41 43 45 5f  ne SQLITE_TRACE_
bcd0: 58 50 52 4f 46 49 4c 45 20 20 20 20 20 20 20 20  XPROFILE        
bce0: 30 78 38 30 20 20 20 20 20 2f 2a 20 55 73 65 20  0x80     /* Use 
bcf0: 74 68 65 20 6c 65 67 61 63 79 20 78 50 72 6f 66  the legacy xProf
bd00: 69 6c 65 20 2a 2f 0a 23 65 6c 73 65 0a 23 64 65  ile */.#else.#de
bd10: 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 52 41 43  fine SQLITE_TRAC
bd20: 45 5f 4c 45 47 41 43 59 20 20 20 20 20 20 20 20  E_LEGACY        
bd30: 20 20 30 0a 23 64 65 66 69 6e 65 20 53 51 4c 49    0.#define SQLI
bd40: 54 45 5f 54 52 41 43 45 5f 58 50 52 4f 46 49 4c  TE_TRACE_XPROFIL
bd50: 45 20 20 20 20 20 20 20 20 30 0a 23 65 6e 64 69  E        0.#endi
bd60: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
bd70: 5f 44 45 50 52 45 43 41 54 45 44 20 2a 2f 0a 23  _DEPRECATED */.#
bd80: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 52  define SQLITE_TR
bd90: 41 43 45 5f 4e 4f 4e 4c 45 47 41 43 59 5f 4d 41  ACE_NONLEGACY_MA
bda0: 53 4b 20 20 30 78 30 66 20 20 20 20 20 2f 2a 20  SK  0x0f     /* 
bdb0: 4e 6f 72 6d 61 6c 20 66 6c 61 67 73 20 2a 2f 0a  Normal flags */.
bdc0: 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74  ../*.** Each dat
bdd0: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
bde0: 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20   is an instance 
bdf0: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
be00: 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73   structure..*/.s
be10: 74 72 75 63 74 20 73 71 6c 69 74 65 33 20 7b 0a  truct sqlite3 {.
be20: 20 20 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 70    sqlite3_vfs *p
be30: 56 66 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  Vfs;            
be40: 2f 2a 20 4f 53 20 49 6e 74 65 72 66 61 63 65 20  /* OS Interface 
be50: 2a 2f 0a 20 20 73 74 72 75 63 74 20 56 64 62 65  */.  struct Vdbe
be60: 20 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20 20   *pVdbe;        
be70: 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63     /* List of ac
be80: 74 69 76 65 20 76 69 72 74 75 61 6c 20 6d 61 63  tive virtual mac
be90: 68 69 6e 65 73 20 2a 2f 0a 20 20 43 6f 6c 6c 53  hines */.  CollS
bea0: 65 71 20 2a 70 44 66 6c 74 43 6f 6c 6c 3b 20 20  eq *pDfltColl;  
beb0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
bec0: 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e  default collatin
bed0: 67 20 73 65 71 75 65 6e 63 65 20 28 42 49 4e 41  g sequence (BINA
bee0: 52 59 29 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  RY) */.  sqlite3
bef0: 5f 6d 75 74 65 78 20 2a 6d 75 74 65 78 3b 20 20  _mutex *mutex;  
bf00: 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63         /* Connec
bf10: 74 69 6f 6e 20 6d 75 74 65 78 20 2a 2f 0a 20 20  tion mutex */.  
bf20: 44 62 20 2a 61 44 62 3b 20 20 20 20 20 20 20 20  Db *aDb;        
bf30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
bf40: 20 41 6c 6c 20 62 61 63 6b 65 6e 64 73 20 2a 2f   All backends */
bf50: 0a 20 20 69 6e 74 20 6e 44 62 3b 20 20 20 20 20  .  int nDb;     
bf60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bf70: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 61   /* Number of ba
bf80: 63 6b 65 6e 64 73 20 63 75 72 72 65 6e 74 6c 79  ckends currently
bf90: 20 69 6e 20 75 73 65 20 2a 2f 0a 20 20 75 33 32   in use */.  u32
bfa0: 20 6d 44 62 46 6c 61 67 73 3b 20 20 20 20 20 20   mDbFlags;      
bfb0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 66 6c             /* fl
bfc0: 61 67 73 20 72 65 63 6f 72 64 69 6e 67 20 69 6e  ags recording in
bfd0: 74 65 72 6e 61 6c 20 73 74 61 74 65 20 2a 2f 0a  ternal state */.
bfe0: 20 20 75 36 34 20 66 6c 61 67 73 3b 20 20 20 20    u64 flags;    
bff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c000: 2f 2a 20 66 6c 61 67 73 20 73 65 74 74 61 62 6c  /* flags settabl
c010: 65 20 62 79 20 70 72 61 67 6d 61 73 2e 20 53 65  e by pragmas. Se
c020: 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 69 36 34  e below */.  i64
c030: 20 6c 61 73 74 52 6f 77 69 64 3b 20 20 20 20 20   lastRowid;     
c040: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 4f             /* RO
c050: 57 49 44 20 6f 66 20 6d 6f 73 74 20 72 65 63 65  WID of most rece
c060: 6e 74 20 69 6e 73 65 72 74 20 28 73 65 65 20 61  nt insert (see a
c070: 62 6f 76 65 29 20 2a 2f 0a 20 20 69 36 34 20 73  bove) */.  i64 s
c080: 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20  zMmap;          
c090: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61           /* Defa
c0a0: 75 6c 74 20 6d 6d 61 70 5f 73 69 7a 65 20 73 65  ult mmap_size se
c0b0: 74 74 69 6e 67 20 2a 2f 0a 20 20 75 33 32 20 6e  tting */.  u32 n
c0c0: 53 63 68 65 6d 61 4c 6f 63 6b 3b 20 20 20 20 20  SchemaLock;     
c0d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e           /* Do n
c0e0: 6f 74 20 72 65 73 65 74 20 74 68 65 20 73 63 68  ot reset the sch
c0f0: 65 6d 61 20 77 68 65 6e 20 6e 6f 6e 2d 7a 65 72  ema when non-zer
c100: 6f 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  o */.  unsigned 
c110: 69 6e 74 20 6f 70 65 6e 46 6c 61 67 73 3b 20 20  int openFlags;  
c120: 20 20 20 20 20 2f 2a 20 46 6c 61 67 73 20 70 61       /* Flags pa
c130: 73 73 65 64 20 74 6f 20 73 71 6c 69 74 65 33 5f  ssed to sqlite3_
c140: 76 66 73 2e 78 4f 70 65 6e 28 29 20 2a 2f 0a 20  vfs.xOpen() */. 
c150: 20 69 6e 74 20 65 72 72 43 6f 64 65 3b 20 20 20   int errCode;   
c160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c170: 2a 20 4d 6f 73 74 20 72 65 63 65 6e 74 20 65 72  * Most recent er
c180: 72 6f 72 20 63 6f 64 65 20 28 53 51 4c 49 54 45  ror code (SQLITE
c190: 5f 2a 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72  _*) */.  int err
c1a0: 4d 61 73 6b 3b 20 20 20 20 20 20 20 20 20 20 20  Mask;           
c1b0: 20 20 20 20 20 20 20 2f 2a 20 26 20 72 65 73 75         /* & resu
c1c0: 6c 74 20 63 6f 64 65 73 20 77 69 74 68 20 74 68  lt codes with th
c1d0: 69 73 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e  is before return
c1e0: 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69 53 79  ing */.  int iSy
c1f0: 73 45 72 72 6e 6f 3b 20 20 20 20 20 20 20 20 20  sErrno;         
c200: 20 20 20 20 20 20 20 2f 2a 20 45 72 72 6e 6f 20         /* Errno 
c210: 76 61 6c 75 65 20 66 72 6f 6d 20 6c 61 73 74 20  value from last 
c220: 73 79 73 74 65 6d 20 65 72 72 6f 72 20 2a 2f 0a  system error */.
c230: 20 20 75 31 36 20 64 62 4f 70 74 46 6c 61 67 73    u16 dbOptFlags
c240: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
c250: 2f 2a 20 46 6c 61 67 73 20 74 6f 20 65 6e 61 62  /* Flags to enab
c260: 6c 65 2f 64 69 73 61 62 6c 65 20 6f 70 74 69 6d  le/disable optim
c270: 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38  izations */.  u8
c280: 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20   enc;           
c290: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
c2a0: 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a  ext encoding */.
c2b0: 20 20 75 38 20 61 75 74 6f 43 6f 6d 6d 69 74 3b    u8 autoCommit;
c2c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c2d0: 2f 2a 20 54 68 65 20 61 75 74 6f 2d 63 6f 6d 6d  /* The auto-comm
c2e0: 69 74 20 66 6c 61 67 2e 20 2a 2f 0a 20 20 75 38  it flag. */.  u8
c2f0: 20 74 65 6d 70 5f 73 74 6f 72 65 3b 20 20 20 20   temp_store;    
c300: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31              /* 1
c310: 3a 20 66 69 6c 65 20 32 3a 20 6d 65 6d 6f 72 79  : file 2: memory
c320: 20 30 3a 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20   0: default */. 
c330: 20 75 38 20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64   u8 mallocFailed
c340: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
c350: 2a 20 54 72 75 65 20 69 66 20 77 65 20 68 61 76  * True if we hav
c360: 65 20 73 65 65 6e 20 61 20 6d 61 6c 6c 6f 63 20  e seen a malloc 
c370: 66 61 69 6c 75 72 65 20 2a 2f 0a 20 20 75 38 20  failure */.  u8 
c380: 62 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 3b 20 20  bBenignMalloc;  
c390: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f             /* Do
c3a0: 20 6e 6f 74 20 72 65 71 75 69 72 65 20 4f 4f 4d   not require OOM
c3b0: 73 20 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75  s if true */.  u
c3c0: 38 20 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65 3b 20  8 dfltLockMode; 
c3d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c3e0: 44 65 66 61 75 6c 74 20 6c 6f 63 6b 69 6e 67 2d  Default locking-
c3f0: 6d 6f 64 65 20 66 6f 72 20 61 74 74 61 63 68 65  mode for attache
c400: 64 20 64 62 73 20 2a 2f 0a 20 20 73 69 67 6e 65  d dbs */.  signe
c410: 64 20 63 68 61 72 20 6e 65 78 74 41 75 74 6f 76  d char nextAutov
c420: 61 63 3b 20 20 20 20 20 20 2f 2a 20 41 75 74 6f  ac;      /* Auto
c430: 76 61 63 20 73 65 74 74 69 6e 67 20 61 66 74 65  vac setting afte
c440: 72 20 56 41 43 55 55 4d 20 69 66 20 3e 3d 30 20  r VACUUM if >=0 
c450: 2a 2f 0a 20 20 75 38 20 73 75 70 70 72 65 73 73  */.  u8 suppress
c460: 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Err;            
c470: 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 69 73 73     /* Do not iss
c480: 75 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  ue error message
c490: 73 20 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75  s if true */.  u
c4a0: 38 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74  8 vtabOnConflict
c4b0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
c4c0: 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20  Value to return 
c4d0: 66 6f 72 20 73 33 5f 76 74 61 62 5f 6f 6e 5f 63  for s3_vtab_on_c
c4e0: 6f 6e 66 6c 69 63 74 28 29 20 2a 2f 0a 20 20 75  onflict() */.  u
c4f0: 38 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53  8 isTransactionS
c500: 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 2f 2a 20  avepoint;    /* 
c510: 54 72 75 65 20 69 66 20 74 68 65 20 6f 75 74 65  True if the oute
c520: 72 6d 6f 73 74 20 73 61 76 65 70 6f 69 6e 74 20  rmost savepoint 
c530: 69 73 20 61 20 54 53 20 2a 2f 0a 20 20 75 38 20  is a TS */.  u8 
c540: 6d 54 72 61 63 65 3b 20 20 20 20 20 20 20 20 20  mTrace;         
c550: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 7a 65             /* ze
c560: 72 6f 20 6f 72 20 6d 6f 72 65 20 53 51 4c 49 54  ro or more SQLIT
c570: 45 5f 54 52 41 43 45 20 66 6c 61 67 73 20 2a 2f  E_TRACE flags */
c580: 0a 20 20 75 38 20 6e 6f 53 68 61 72 65 64 43 61  .  u8 noSharedCa
c590: 63 68 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  che;            
c5a0: 20 2f 2a 20 54 72 75 65 20 69 66 20 6e 6f 20 73   /* True if no s
c5b0: 68 61 72 65 64 2d 63 61 63 68 65 20 62 61 63 6b  hared-cache back
c5c0: 65 6e 64 73 20 2a 2f 0a 20 20 75 38 20 6e 53 71  ends */.  u8 nSq
c5d0: 6c 45 78 65 63 3b 20 20 20 20 20 20 20 20 20 20  lExec;          
c5e0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
c5f0: 72 20 6f 66 20 70 65 6e 64 69 6e 67 20 4f 50 5f  r of pending OP_
c600: 53 71 6c 45 78 65 63 20 6f 70 63 6f 64 65 73 20  SqlExec opcodes 
c610: 2a 2f 0a 20 20 69 6e 74 20 6e 65 78 74 50 61 67  */.  int nextPag
c620: 65 73 69 7a 65 3b 20 20 20 20 20 20 20 20 20 20  esize;          
c630: 20 20 20 2f 2a 20 50 61 67 65 73 69 7a 65 20 61     /* Pagesize a
c640: 66 74 65 72 20 56 41 43 55 55 4d 20 69 66 20 3e  fter VACUUM if >
c650: 30 20 2a 2f 0a 20 20 75 33 32 20 6d 61 67 69 63  0 */.  u32 magic
c660: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
c670: 20 20 20 20 20 2f 2a 20 4d 61 67 69 63 20 6e 75       /* Magic nu
c680: 6d 62 65 72 20 66 6f 72 20 64 65 74 65 63 74 20  mber for detect 
c690: 6c 69 62 72 61 72 79 20 6d 69 73 75 73 65 20 2a  library misuse *
c6a0: 2f 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b  /.  int nChange;
c6b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c6c0: 20 20 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72    /* Value retur
c6d0: 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63  ned by sqlite3_c
c6e0: 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e  hanges() */.  in
c6f0: 74 20 6e 54 6f 74 61 6c 43 68 61 6e 67 65 3b 20  t nTotalChange; 
c700: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
c710: 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62 79  alue returned by
c720: 20 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63   sqlite3_total_c
c730: 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e  hanges() */.  in
c740: 74 20 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  t aLimit[SQLITE_
c750: 4e 5f 4c 49 4d 49 54 5d 3b 20 20 20 2f 2a 20 4c  N_LIMIT];   /* L
c760: 69 6d 69 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  imits */.  int n
c770: 4d 61 78 53 6f 72 74 65 72 4d 6d 61 70 3b 20 20  MaxSorterMmap;  
c780: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69           /* Maxi
c790: 6d 75 6d 20 73 69 7a 65 20 6f 66 20 72 65 67 69  mum size of regi
c7a0: 6f 6e 73 20 6d 61 70 70 65 64 20 62 79 20 73 6f  ons mapped by so
c7b0: 72 74 65 72 20 2a 2f 0a 20 20 73 74 72 75 63 74  rter */.  struct
c7c0: 20 73 71 6c 69 74 65 33 49 6e 69 74 49 6e 66 6f   sqlite3InitInfo
c7d0: 20 7b 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72   {      /* Infor
c7e0: 6d 61 74 69 6f 6e 20 75 73 65 64 20 64 75 72 69  mation used duri
c7f0: 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  ng initializatio
c800: 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 65 77  n */.    int new
c810: 54 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20  Tnum;           
c820: 20 20 20 20 20 2f 2a 20 52 6f 6f 74 70 61 67 65       /* Rootpage
c830: 20 6f 66 20 74 61 62 6c 65 20 62 65 69 6e 67 20   of table being 
c840: 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20  initialized */. 
c850: 20 20 20 75 38 20 69 44 62 3b 20 20 20 20 20 20     u8 iDb;      
c860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c870: 2a 20 57 68 69 63 68 20 64 62 20 66 69 6c 65 20  * Which db file 
c880: 69 73 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c  is being initial
c890: 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38 20 62  ized */.    u8 b
c8a0: 75 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20  usy;            
c8b0: 20 20 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20          /* TRUE 
c8c0: 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 69  if currently ini
c8d0: 74 69 61 6c 69 7a 69 6e 67 20 2a 2f 0a 20 20 20  tializing */.   
c8e0: 20 75 6e 73 69 67 6e 65 64 20 6f 72 70 68 61 6e   unsigned orphan
c8f0: 54 72 69 67 67 65 72 20 3a 20 31 3b 20 2f 2a 20  Trigger : 1; /* 
c900: 4c 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20 69  Last statement i
c910: 73 20 6f 72 70 68 61 6e 65 64 20 54 45 4d 50 20  s orphaned TEMP 
c920: 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 20 20 75  trigger */.    u
c930: 6e 73 69 67 6e 65 64 20 69 6d 70 6f 73 74 65 72  nsigned imposter
c940: 54 61 62 6c 65 20 3a 20 31 3b 20 2f 2a 20 42 75  Table : 1; /* Bu
c950: 69 6c 64 69 6e 67 20 61 6e 20 69 6d 70 6f 73 74  ilding an impost
c960: 65 72 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  er table */.    
c970: 75 6e 73 69 67 6e 65 64 20 72 65 6f 70 65 6e 4d  unsigned reopenM
c980: 65 6d 64 62 20 3a 20 31 3b 20 20 20 2f 2a 20 41  emdb : 1;   /* A
c990: 54 54 41 43 48 20 69 73 20 72 65 61 6c 6c 79 20  TTACH is really 
c9a0: 61 20 72 65 6f 70 65 6e 20 75 73 69 6e 67 20 4d  a reopen using M
c9b0: 65 6d 44 42 20 2a 2f 0a 20 20 7d 20 69 6e 69 74  emDB */.  } init
c9c0: 3b 0a 20 20 69 6e 74 20 6e 56 64 62 65 41 63 74  ;.  int nVdbeAct
c9d0: 69 76 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ive;            
c9e0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 56    /* Number of V
c9f0: 44 42 45 73 20 63 75 72 72 65 6e 74 6c 79 20 72  DBEs currently r
ca00: 75 6e 6e 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20  unning */.  int 
ca10: 6e 56 64 62 65 52 65 61 64 3b 20 20 20 20 20 20  nVdbeRead;      
ca20: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
ca30: 62 65 72 20 6f 66 20 61 63 74 69 76 65 20 56 44  ber of active VD
ca40: 42 45 73 20 74 68 61 74 20 72 65 61 64 20 6f 72  BEs that read or
ca50: 20 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e 74 20   write */.  int 
ca60: 6e 56 64 62 65 57 72 69 74 65 3b 20 20 20 20 20  nVdbeWrite;     
ca70: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
ca80: 62 65 72 20 6f 66 20 61 63 74 69 76 65 20 56 44  ber of active VD
ca90: 42 45 73 20 74 68 61 74 20 72 65 61 64 20 61 6e  BEs that read an
caa0: 64 20 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e 74  d write */.  int
cab0: 20 6e 56 64 62 65 45 78 65 63 3b 20 20 20 20 20   nVdbeExec;     
cac0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
cad0: 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20 63  mber of nested c
cae0: 61 6c 6c 73 20 74 6f 20 56 64 62 65 45 78 65 63  alls to VdbeExec
caf0: 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 44 65  () */.  int nVDe
cb00: 73 74 72 6f 79 3b 20 20 20 20 20 20 20 20 20 20  stroy;          
cb10: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
cb20: 6f 66 20 61 63 74 69 76 65 20 4f 50 5f 56 44 65  of active OP_VDe
cb30: 73 74 72 6f 79 20 6f 70 65 72 61 74 69 6f 6e 73  stroy operations
cb40: 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 78 74 65 6e   */.  int nExten
cb50: 73 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20  sion;           
cb60: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
cb70: 20 6c 6f 61 64 65 64 20 65 78 74 65 6e 73 69 6f   loaded extensio
cb80: 6e 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 2a 61  ns */.  void **a
cb90: 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20  Extension;      
cba0: 20 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f        /* Array o
cbb0: 66 20 73 68 61 72 65 64 20 6c 69 62 72 61 72 79  f shared library
cbc0: 20 68 61 6e 64 6c 65 73 20 2a 2f 0a 20 20 69 6e   handles */.  in
cbd0: 74 20 28 2a 78 54 72 61 63 65 29 28 75 33 32 2c  t (*xTrace)(u32,
cbe0: 76 6f 69 64 2a 2c 76 6f 69 64 2a 2c 76 6f 69 64  void*,void*,void
cbf0: 2a 29 3b 20 20 20 20 20 2f 2a 20 54 72 61 63 65  *);     /* Trace
cc00: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76   function */.  v
cc10: 6f 69 64 20 2a 70 54 72 61 63 65 41 72 67 3b 20  oid *pTraceArg; 
cc20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cc30: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75           /* Argu
cc40: 6d 65 6e 74 20 74 6f 20 74 68 65 20 74 72 61 63  ment to the trac
cc50: 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 69  e function */.#i
cc60: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
cc70: 54 5f 44 45 50 52 45 43 41 54 45 44 0a 20 20 76  T_DEPRECATED.  v
cc80: 6f 69 64 20 28 2a 78 50 72 6f 66 69 6c 65 29 28  oid (*xProfile)(
cc90: 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61 72  void*,const char
cca0: 2a 2c 75 36 34 29 3b 20 20 2f 2a 20 50 72 6f 66  *,u64);  /* Prof
ccb0: 69 6c 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 2a  iling function *
ccc0: 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f 66 69  /.  void *pProfi
ccd0: 6c 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  leArg;          
cce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
ccf0: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 70 72 6f   Argument to pro
cd00: 66 69 6c 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  file function */
cd10: 0a 23 65 6e 64 69 66 0a 20 20 76 6f 69 64 20 2a  .#endif.  void *
cd20: 70 43 6f 6d 6d 69 74 41 72 67 3b 20 20 20 20 20  pCommitArg;     
cd30: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
cd40: 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6f 6d 6d  rgument to xComm
cd50: 69 74 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 0a  itCallback() */.
cd60: 20 20 69 6e 74 20 28 2a 78 43 6f 6d 6d 69 74 43    int (*xCommitC
cd70: 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29 3b  allback)(void*);
cd80: 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 61      /* Invoked a
cd90: 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e 20  t every commit. 
cda0: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 52 6f 6c 6c  */.  void *pRoll
cdb0: 62 61 63 6b 41 72 67 3b 20 20 20 20 20 20 20 20  backArg;        
cdc0: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
cdd0: 6e 74 20 74 6f 20 78 52 6f 6c 6c 62 61 63 6b 43  nt to xRollbackC
cde0: 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 0a 20 20 76  allback() */.  v
cdf0: 6f 69 64 20 28 2a 78 52 6f 6c 6c 62 61 63 6b 43  oid (*xRollbackC
ce00: 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29 3b  allback)(void*);
ce10: 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 61 74 20 65   /* Invoked at e
ce20: 76 65 72 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a  very commit. */.
ce30: 20 20 76 6f 69 64 20 2a 70 55 70 64 61 74 65 41    void *pUpdateA
ce40: 72 67 3b 0a 20 20 76 6f 69 64 20 28 2a 78 55 70  rg;.  void (*xUp
ce50: 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 28 76 6f  dateCallback)(vo
ce60: 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 63  id*,int, const c
ce70: 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
ce80: 2c 73 71 6c 69 74 65 5f 69 6e 74 36 34 29 3b 0a  ,sqlite_int64);.
ce90: 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b    Parse *pParse;
cea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ceb0: 2f 2a 20 43 75 72 72 65 6e 74 20 70 61 72 73 65  /* Current parse
cec0: 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
ced0: 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50 44 41  E_ENABLE_PREUPDA
cee0: 54 45 5f 48 4f 4f 4b 0a 20 20 76 6f 69 64 20 2a  TE_HOOK.  void *
cef0: 70 50 72 65 55 70 64 61 74 65 41 72 67 3b 20 20  pPreUpdateArg;  
cf00: 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
cf10: 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 50 72   argument to xPr
cf20: 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20  eUpdateCallback 
cf30: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 50 72 65  */.  void (*xPre
cf40: 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 28  UpdateCallback)(
cf50: 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 65 64     /* Registered
cf60: 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 70   using sqlite3_p
cf70: 72 65 75 70 64 61 74 65 5f 68 6f 6f 6b 28 29 20  reupdate_hook() 
cf80: 2a 2f 0a 20 20 20 20 76 6f 69 64 2a 2c 73 71 6c  */.    void*,sql
cf90: 69 74 65 33 2a 2c 69 6e 74 2c 63 68 61 72 20 63  ite3*,int,char c
cfa0: 6f 6e 73 74 2a 2c 63 68 61 72 20 63 6f 6e 73 74  onst*,char const
cfb0: 2a 2c 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 2c  *,sqlite3_int64,
cfc0: 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 0a 20 20  sqlite3_int64.  
cfd0: 29 3b 0a 20 20 50 72 65 55 70 64 61 74 65 20 2a  );.  PreUpdate *
cfe0: 70 50 72 65 55 70 64 61 74 65 3b 20 20 20 20 20  pPreUpdate;     
cff0: 20 20 20 2f 2a 20 43 6f 6e 74 65 78 74 20 66 6f     /* Context fo
d000: 72 20 61 63 74 69 76 65 20 70 72 65 2d 75 70 64  r active pre-upd
d010: 61 74 65 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  ate callback */.
d020: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
d030: 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50 44 41 54  _ENABLE_PREUPDAT
d040: 45 5f 48 4f 4f 4b 20 2a 2f 0a 23 69 66 6e 64 65  E_HOOK */.#ifnde
d050: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41  f SQLITE_OMIT_WA
d060: 4c 0a 20 20 69 6e 74 20 28 2a 78 57 61 6c 43 61  L.  int (*xWalCa
d070: 6c 6c 62 61 63 6b 29 28 76 6f 69 64 20 2a 2c 20  llback)(void *, 
d080: 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74  sqlite3 *, const
d090: 20 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 20   char *, int);. 
d0a0: 20 76 6f 69 64 20 2a 70 57 61 6c 41 72 67 3b 0a   void *pWalArg;.
d0b0: 23 65 6e 64 69 66 0a 20 20 76 6f 69 64 28 2a 78  #endif.  void(*x
d0c0: 43 6f 6c 6c 4e 65 65 64 65 64 29 28 76 6f 69 64  CollNeeded)(void
d0d0: 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65  *,sqlite3*,int e
d0e0: 54 65 78 74 52 65 70 2c 63 6f 6e 73 74 20 63 68  TextRep,const ch
d0f0: 61 72 2a 29 3b 0a 20 20 76 6f 69 64 28 2a 78 43  ar*);.  void(*xC
d100: 6f 6c 6c 4e 65 65 64 65 64 31 36 29 28 76 6f 69  ollNeeded16)(voi
d110: 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20  d*,sqlite3*,int 
d120: 65 54 65 78 74 52 65 70 2c 63 6f 6e 73 74 20 76  eTextRep,const v
d130: 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70  oid*);.  void *p
d140: 43 6f 6c 6c 4e 65 65 64 65 64 41 72 67 3b 0a 20  CollNeededArg;. 
d150: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
d160: 70 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 2f  pErr;          /
d170: 2a 20 4d 6f 73 74 20 72 65 63 65 6e 74 20 65 72  * Most recent er
d180: 72 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20  ror message */. 
d190: 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 76 6f 6c   union {.    vol
d1a0: 61 74 69 6c 65 20 69 6e 74 20 69 73 49 6e 74 65  atile int isInte
d1b0: 72 72 75 70 74 65 64 3b 20 2f 2a 20 54 72 75 65  rrupted; /* True
d1c0: 20 69 66 20 73 71 6c 69 74 65 33 5f 69 6e 74 65   if sqlite3_inte
d1d0: 72 72 75 70 74 20 68 61 73 20 62 65 65 6e 20 63  rrupt has been c
d1e0: 61 6c 6c 65 64 20 2a 2f 0a 20 20 20 20 64 6f 75  alled */.    dou
d1f0: 62 6c 65 20 6e 6f 74 55 73 65 64 31 3b 20 20 20  ble notUsed1;   
d200: 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63           /* Spac
d210: 65 72 20 2a 2f 0a 20 20 7d 20 75 31 3b 0a 20 20  er */.  } u1;.  
d220: 4c 6f 6f 6b 61 73 69 64 65 20 6c 6f 6f 6b 61 73  Lookaside lookas
d230: 69 64 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ide;          /*
d240: 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f   Lookaside mallo
d250: 63 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  c configuration 
d260: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
d270: 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41  E_OMIT_AUTHORIZA
d280: 54 49 4f 4e 0a 20 20 73 71 6c 69 74 65 33 5f 78  TION.  sqlite3_x
d290: 61 75 74 68 20 78 41 75 74 68 3b 20 20 20 20 20  auth xAuth;     
d2a0: 20 20 20 20 20 2f 2a 20 41 63 63 65 73 73 20 61       /* Access a
d2b0: 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 66 75 6e  uthorization fun
d2c0: 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20  ction */.  void 
d2d0: 2a 70 41 75 74 68 41 72 67 3b 20 20 20 20 20 20  *pAuthArg;      
d2e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20           /* 1st 
d2f0: 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  argument to the 
d300: 61 63 63 65 73 73 20 61 75 74 68 20 66 75 6e 63  access auth func
d310: 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23  tion */.#endif.#
d320: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
d330: 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c  IT_PROGRESS_CALL
d340: 42 41 43 4b 0a 20 20 69 6e 74 20 28 2a 78 50 72  BACK.  int (*xPr
d350: 6f 67 72 65 73 73 29 28 76 6f 69 64 20 2a 29 3b  ogress)(void *);
d360: 20 20 20 20 20 2f 2a 20 54 68 65 20 70 72 6f 67       /* The prog
d370: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  ress callback */
d380: 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f 67 72 65  .  void *pProgre
d390: 73 73 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  ssArg;          
d3a0: 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20   /* Argument to 
d3b0: 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c  the progress cal
d3c0: 6c 62 61 63 6b 20 2a 2f 0a 20 20 75 6e 73 69 67  lback */.  unsig
d3d0: 6e 65 64 20 6e 50 72 6f 67 72 65 73 73 4f 70 73  ned nProgressOps
d3e0: 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ;        /* Numb
d3f0: 65 72 20 6f 66 20 6f 70 63 6f 64 65 73 20 66 6f  er of opcodes fo
d400: 72 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  r progress callb
d410: 61 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69  ack */.#endif.#i
d420: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
d430: 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
d440: 20 69 6e 74 20 6e 56 54 72 61 6e 73 3b 20 20 20   int nVTrans;   
d450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
d460: 2a 20 41 6c 6c 6f 63 61 74 65 64 20 73 69 7a 65  * Allocated size
d470: 20 6f 66 20 61 56 54 72 61 6e 73 20 2a 2f 0a 20   of aVTrans */. 
d480: 20 48 61 73 68 20 61 4d 6f 64 75 6c 65 3b 20 20   Hash aModule;  
d490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
d4a0: 2a 20 70 6f 70 75 6c 61 74 65 64 20 62 79 20 73  * populated by s
d4b0: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f  qlite3_create_mo
d4c0: 64 75 6c 65 28 29 20 2a 2f 0a 20 20 56 74 61 62  dule() */.  Vtab
d4d0: 43 74 78 20 2a 70 56 74 61 62 43 74 78 3b 20 20  Ctx *pVtabCtx;  
d4e0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e            /* Con
d4f0: 74 65 78 74 20 66 6f 72 20 61 63 74 69 76 65 20  text for active 
d500: 76 74 61 62 20 63 6f 6e 6e 65 63 74 2f 63 72 65  vtab connect/cre
d510: 61 74 65 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20  ate */.  VTable 
d520: 2a 2a 61 56 54 72 61 6e 73 3b 20 20 20 20 20 20  **aVTrans;      
d530: 20 20 20 20 20 20 20 2f 2a 20 56 69 72 74 75 61         /* Virtua
d540: 6c 20 74 61 62 6c 65 73 20 77 69 74 68 20 6f 70  l tables with op
d550: 65 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20  en transactions 
d560: 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 44 69  */.  VTable *pDi
d570: 73 63 6f 6e 6e 65 63 74 3b 20 20 20 20 20 20 20  sconnect;       
d580: 20 20 20 2f 2a 20 44 69 73 63 6f 6e 6e 65 63 74     /* Disconnect
d590: 20 74 68 65 73 65 20 69 6e 20 6e 65 78 74 20 73   these in next s
d5a0: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29  qlite3_prepare()
d5b0: 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 48 61 73   */.#endif.  Has
d5c0: 68 20 61 46 75 6e 63 3b 20 20 20 20 20 20 20 20  h aFunc;        
d5d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 61             /* Ha
d5e0: 73 68 20 74 61 62 6c 65 20 6f 66 20 63 6f 6e 6e  sh table of conn
d5f0: 65 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 73  ection functions
d600: 20 2a 2f 0a 20 20 48 61 73 68 20 61 43 6f 6c 6c   */.  Hash aColl
d610: 53 65 71 3b 20 20 20 20 20 20 20 20 20 20 20 20  Seq;            
d620: 20 20 20 20 2f 2a 20 41 6c 6c 20 63 6f 6c 6c 61      /* All colla
d630: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 2a  ting sequences *
d640: 2f 0a 20 20 42 75 73 79 48 61 6e 64 6c 65 72 20  /.  BusyHandler 
d650: 62 75 73 79 48 61 6e 64 6c 65 72 3b 20 20 20 20  busyHandler;    
d660: 20 20 2f 2a 20 42 75 73 79 20 63 61 6c 6c 62 61    /* Busy callba
d670: 63 6b 20 2a 2f 0a 20 20 44 62 20 61 44 62 53 74  ck */.  Db aDbSt
d680: 61 74 69 63 5b 32 5d 3b 20 20 20 20 20 20 20 20  atic[2];        
d690: 20 20 20 20 20 20 2f 2a 20 53 74 61 74 69 63 20        /* Static 
d6a0: 73 70 61 63 65 20 66 6f 72 20 74 68 65 20 32 20  space for the 2 
d6b0: 64 65 66 61 75 6c 74 20 62 61 63 6b 65 6e 64 73  default backends
d6c0: 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74 20   */.  Savepoint 
d6d0: 2a 70 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20  *pSavepoint;    
d6e0: 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61      /* List of a
d6f0: 63 74 69 76 65 20 73 61 76 65 70 6f 69 6e 74 73  ctive savepoints
d700: 20 2a 2f 0a 20 20 69 6e 74 20 62 75 73 79 54 69   */.  int busyTi
d710: 6d 65 6f 75 74 3b 20 20 20 20 20 20 20 20 20 20  meout;          
d720: 20 20 20 20 2f 2a 20 42 75 73 79 20 68 61 6e 64      /* Busy hand
d730: 6c 65 72 20 74 69 6d 65 6f 75 74 2c 20 69 6e 20  ler timeout, in 
d740: 6d 73 65 63 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  msec */.  int nS
d750: 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20  avepoint;       
d760: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
d770: 72 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63  r of non-transac
d780: 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73 20  tion savepoints 
d790: 2a 2f 0a 20 20 69 6e 74 20 6e 53 74 61 74 65 6d  */.  int nStatem
d7a0: 65 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ent;            
d7b0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
d7c0: 6e 65 73 74 65 64 20 73 74 61 74 65 6d 65 6e 74  nested statement
d7d0: 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 20 2a  -transactions  *
d7e0: 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65  /.  i64 nDeferre
d7f0: 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20  dCons;          
d800: 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72 65    /* Net deferre
d810: 64 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 74 68  d constraints th
d820: 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  is transaction. 
d830: 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72  */.  i64 nDeferr
d840: 65 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20  edImmCons;      
d850: 20 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72     /* Net deferr
d860: 65 64 20 69 6d 6d 65 64 69 61 74 65 20 63 6f 6e  ed immediate con
d870: 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 69 6e  straints */.  in
d880: 74 20 2a 70 6e 42 79 74 65 73 46 72 65 65 64 3b  t *pnBytesFreed;
d890: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
d8a0: 66 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 6e 63 72  f not NULL, incr
d8b0: 65 6d 65 6e 74 20 74 68 69 73 20 69 6e 20 44 62  ement this in Db
d8c0: 46 72 65 65 28 29 20 2a 2f 0a 23 69 66 64 65 66  Free() */.#ifdef
d8d0: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55   SQLITE_ENABLE_U
d8e0: 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 2f  NLOCK_NOTIFY.  /
d8f0: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
d900: 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 61 6c  variables are al
d910: 6c 20 70 72 6f 74 65 63 74 65 64 20 62 79 20 74  l protected by t
d920: 68 65 20 53 54 41 54 49 43 5f 4d 41 53 54 45 52  he STATIC_MASTER
d930: 0a 20 20 2a 2a 20 6d 75 74 65 78 2c 20 6e 6f 74  .  ** mutex, not
d940: 20 62 79 20 73 71 6c 69 74 65 33 2e 6d 75 74 65   by sqlite3.mute
d950: 78 2e 20 54 68 65 79 20 61 72 65 20 75 73 65 64  x. They are used
d960: 20 62 79 20 63 6f 64 65 20 69 6e 20 6e 6f 74 69   by code in noti
d970: 66 79 2e 63 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  fy.c..  **.  ** 
d980: 57 68 65 6e 20 58 2e 70 55 6e 6c 6f 63 6b 43 6f  When X.pUnlockCo
d990: 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20 74 68 61  nnection==Y, tha
d9a0: 74 20 6d 65 61 6e 73 20 74 68 61 74 20 58 20 69  t means that X i
d9b0: 73 20 77 61 69 74 69 6e 67 20 66 6f 72 20 59 20  s waiting for Y 
d9c0: 74 6f 0a 20 20 2a 2a 20 75 6e 6c 6f 63 6b 20 73  to.  ** unlock s
d9d0: 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20 70 72  o that it can pr
d9e0: 6f 63 65 65 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  oceed..  **.  **
d9f0: 20 57 68 65 6e 20 58 2e 70 42 6c 6f 63 6b 69 6e   When X.pBlockin
da00: 67 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20  gConnection==Y, 
da10: 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20  that means that 
da20: 73 6f 6d 65 74 68 69 6e 67 20 74 68 61 74 20 58  something that X
da30: 20 74 72 69 65 64 0a 20 20 2a 2a 20 74 72 69 65   tried.  ** trie
da40: 64 20 74 6f 20 64 6f 20 72 65 63 65 6e 74 6c 79  d to do recently
da50: 20 66 61 69 6c 65 64 20 77 69 74 68 20 61 6e 20   failed with an 
da60: 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 65 72  SQLITE_LOCKED er
da70: 72 6f 72 20 64 75 65 20 74 6f 20 6c 6f 63 6b 73  ror due to locks
da80: 0a 20 20 2a 2a 20 68 65 6c 64 20 62 79 20 59 2e  .  ** held by Y.
da90: 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20  .  */.  sqlite3 
daa0: 2a 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63  *pBlockingConnec
dab0: 74 69 6f 6e 3b 20 2f 2a 20 43 6f 6e 6e 65 63 74  tion; /* Connect
dac0: 69 6f 6e 20 74 68 61 74 20 63 61 75 73 65 64 20  ion that caused 
dad0: 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 2a 2f  SQLITE_LOCKED */
dae0: 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 55 6e 6c  .  sqlite3 *pUnl
daf0: 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 20  ockConnection;  
db00: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e           /* Conn
db10: 65 63 74 69 6f 6e 20 74 6f 20 77 61 74 63 68 20  ection to watch 
db20: 66 6f 72 20 75 6e 6c 6f 63 6b 20 2a 2f 0a 20 20  for unlock */.  
db30: 76 6f 69 64 20 2a 70 55 6e 6c 6f 63 6b 41 72 67  void *pUnlockArg
db40: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
db50: 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e        /* Argumen
db60: 74 20 74 6f 20 78 55 6e 6c 6f 63 6b 4e 6f 74 69  t to xUnlockNoti
db70: 66 79 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  fy */.  void (*x
db80: 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 29 28 76 6f  UnlockNotify)(vo
db90: 69 64 20 2a 2a 2c 20 69 6e 74 29 3b 20 20 2f 2a  id **, int);  /*
dba0: 20 55 6e 6c 6f 63 6b 20 6e 6f 74 69 66 79 20 63   Unlock notify c
dbb0: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 73 71 6c  allback */.  sql
dbc0: 69 74 65 33 20 2a 70 4e 65 78 74 42 6c 6f 63 6b  ite3 *pNextBlock
dbd0: 65 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 65  ed;        /* Ne
dbe0: 78 74 20 69 6e 20 6c 69 73 74 20 6f 66 20 61 6c  xt in list of al
dbf0: 6c 20 62 6c 6f 63 6b 65 64 20 63 6f 6e 6e 65 63  l blocked connec
dc00: 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e 64 69 66 0a  tions */.#endif.
dc10: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53  #ifdef SQLITE_US
dc20: 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f  ER_AUTHENTICATIO
dc30: 4e 0a 20 20 73 71 6c 69 74 65 33 5f 75 73 65 72  N.  sqlite3_user
dc40: 61 75 74 68 20 61 75 74 68 3b 20 20 20 20 20 20  auth auth;      
dc50: 20 20 2f 2a 20 55 73 65 72 20 61 75 74 68 65 6e    /* User authen
dc60: 74 69 63 61 74 69 6f 6e 20 69 6e 66 6f 72 6d 61  tication informa
dc70: 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d  tion */.#endif.}
dc80: 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63 72 6f  ;../*.** A macro
dc90: 20 74 6f 20 64 69 73 63 6f 76 65 72 20 74 68 65   to discover the
dca0: 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20 64   encoding of a d
dcb0: 61 74 61 62 61 73 65 2e 0a 2a 2f 0a 23 64 65 66  atabase..*/.#def
dcc0: 69 6e 65 20 53 43 48 45 4d 41 5f 45 4e 43 28 64  ine SCHEMA_ENC(d
dcd0: 62 29 20 28 28 64 62 29 2d 3e 61 44 62 5b 30 5d  b) ((db)->aDb[0]
dce0: 2e 70 53 63 68 65 6d 61 2d 3e 65 6e 63 29 0a 23  .pSchema->enc).#
dcf0: 64 65 66 69 6e 65 20 45 4e 43 28 64 62 29 20 20  define ENC(db)  
dd00: 20 20 20 20 20 20 28 28 64 62 29 2d 3e 65 6e 63        ((db)->enc
dd10: 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c  )../*.** Possibl
dd20: 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65  e values for the
dd30: 20 73 71 6c 69 74 65 33 2e 66 6c 61 67 73 2e 0a   sqlite3.flags..
dd40: 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73  **.** Value cons
dd50: 74 72 61 69 6e 74 73 20 28 65 6e 66 6f 72 63 65  traints (enforce
dd60: 64 20 76 69 61 20 61 73 73 65 72 74 28 29 29 3a  d via assert()):
dd70: 0a 2a 2a 20 20 20 20 20 20 53 51 4c 49 54 45 5f  .**      SQLITE_
dd80: 46 75 6c 6c 46 53 79 6e 63 20 20 20 20 20 3d 3d  FullFSync     ==
dd90: 20 50 41 47 45 52 5f 46 55 4c 4c 46 53 59 4e 43   PAGER_FULLFSYNC
dda0: 0a 2a 2a 20 20 20 20 20 20 53 51 4c 49 54 45 5f  .**      SQLITE_
ddb0: 43 6b 70 74 46 75 6c 6c 46 53 79 6e 63 20 3d 3d  CkptFullFSync ==
ddc0: 20 50 41 47 45 52 5f 43 4b 50 54 5f 46 55 4c 4c   PAGER_CKPT_FULL
ddd0: 46 53 59 4e 43 0a 2a 2a 20 20 20 20 20 20 53 51  FSYNC.**      SQ
dde0: 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c 6c 20  LITE_CacheSpill 
ddf0: 20 20 20 3d 3d 20 50 41 47 45 52 5f 43 41 43 48     == PAGER_CACH
de00: 45 5f 53 50 49 4c 4c 0a 2a 2f 0a 23 64 65 66 69  E_SPILL.*/.#defi
de10: 6e 65 20 53 51 4c 49 54 45 5f 57 72 69 74 65 53  ne SQLITE_WriteS
de20: 63 68 65 6d 61 20 20 20 20 30 78 30 30 30 30 30  chema    0x00000
de30: 30 30 31 20 20 2f 2a 20 4f 4b 20 74 6f 20 75 70  001  /* OK to up
de40: 64 61 74 65 20 53 51 4c 49 54 45 5f 4d 41 53 54  date SQLITE_MAST
de50: 45 52 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ER */.#define SQ
de60: 4c 49 54 45 5f 4c 65 67 61 63 79 46 69 6c 65 46  LITE_LegacyFileF
de70: 6d 74 20 20 30 78 30 30 30 30 30 30 30 32 20 20  mt  0x00000002  
de80: 2f 2a 20 43 72 65 61 74 65 20 6e 65 77 20 64 61  /* Create new da
de90: 74 61 62 61 73 65 73 20 69 6e 20 66 6f 72 6d 61  tabases in forma
dea0: 74 20 31 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  t 1 */.#define S
deb0: 51 4c 49 54 45 5f 46 75 6c 6c 43 6f 6c 4e 61 6d  QLITE_FullColNam
dec0: 65 73 20 20 20 30 78 30 30 30 30 30 30 30 34 20  es   0x00000004 
ded0: 20 2f 2a 20 53 68 6f 77 20 66 75 6c 6c 20 63 6f   /* Show full co
dee0: 6c 75 6d 6e 20 6e 61 6d 65 73 20 6f 6e 20 53 45  lumn names on SE
def0: 4c 45 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20  LECT */.#define 
df00: 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79 6e 63  SQLITE_FullFSync
df10: 20 20 20 20 20 20 30 78 30 30 30 30 30 30 30 38        0x00000008
df20: 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66 73    /* Use full fs
df30: 79 6e 63 20 6f 6e 20 74 68 65 20 62 61 63 6b 65  ync on the backe
df40: 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  nd */.#define SQ
df50: 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53 79  LITE_CkptFullFSy
df60: 6e 63 20 20 30 78 30 30 30 30 30 30 31 30 20 20  nc  0x00000010  
df70: 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66 73 79 6e  /* Use full fsyn
df80: 63 20 66 6f 72 20 63 68 65 63 6b 70 6f 69 6e 74  c for checkpoint
df90: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
dfa0: 54 45 5f 43 61 63 68 65 53 70 69 6c 6c 20 20 20  TE_CacheSpill   
dfb0: 20 20 30 78 30 30 30 30 30 30 32 30 20 20 2f 2a    0x00000020  /*
dfc0: 20 4f 4b 20 74 6f 20 73 70 69 6c 6c 20 70 61 67   OK to spill pag
dfd0: 65 72 20 63 61 63 68 65 20 2a 2f 0a 23 64 65 66  er cache */.#def
dfe0: 69 6e 65 20 53 51 4c 49 54 45 5f 53 68 6f 72 74  ine SQLITE_Short
dff0: 43 6f 6c 4e 61 6d 65 73 20 20 30 78 30 30 30 30  ColNames  0x0000
e000: 30 30 34 30 20 20 2f 2a 20 53 68 6f 77 20 73 68  0040  /* Show sh
e010: 6f 72 74 20 63 6f 6c 75 6d 6e 73 20 6e 61 6d 65  ort columns name
e020: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
e030: 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 20 20  ITE_CountRows   
e040: 20 20 20 30 78 30 30 30 30 30 30 38 30 20 20 2f     0x00000080  /
e050: 2a 20 43 6f 75 6e 74 20 72 6f 77 73 20 63 68 61  * Count rows cha
e060: 6e 67 65 64 20 62 79 20 49 4e 53 45 52 54 2c 20  nged by INSERT, 
e070: 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  */.             
e080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e090: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
e0a0: 20 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44    DELETE, or UPD
e0b0: 41 54 45 20 61 6e 64 20 72 65 74 75 72 6e 20 2a  ATE and return *
e0c0: 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
e0d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e0e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20              /*  
e0f0: 20 74 68 65 20 63 6f 75 6e 74 20 75 73 69 6e 67   the count using
e100: 20 61 20 63 61 6c 6c 62 61 63 6b 2e 20 2a 2f 0a   a callback. */.
e110: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e  #define SQLITE_N
e120: 75 6c 6c 43 61 6c 6c 62 61 63 6b 20 20 20 30 78  ullCallback   0x
e130: 30 30 30 30 30 31 30 30 20 20 2f 2a 20 49 6e 76  00000100  /* Inv
e140: 6f 6b 65 20 74 68 65 20 63 61 6c 6c 62 61 63 6b  oke the callback
e150: 20 6f 6e 63 65 20 69 66 20 74 68 65 20 2a 2f 0a   once if the */.
e160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e180: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 72            /*   r
e190: 65 73 75 6c 74 20 73 65 74 20 69 73 20 65 6d 70  esult set is emp
e1a0: 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ty */.#define SQ
e1b0: 4c 49 54 45 5f 49 67 6e 6f 72 65 43 68 65 63 6b  LITE_IgnoreCheck
e1c0: 73 20 20 20 30 78 30 30 30 30 30 32 30 30 20 20  s   0x00000200  
e1d0: 2f 2a 20 44 6f 20 6e 6f 74 20 65 6e 66 6f 72 63  /* Do not enforc
e1e0: 65 20 63 68 65 63 6b 20 63 6f 6e 73 74 72 61 69  e check constrai
e1f0: 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  nts */.#define S
e200: 51 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d  QLITE_ReadUncomm
e210: 69 74 20 20 20 30 78 30 30 30 30 30 34 30 30 20  it   0x00000400 
e220: 20 2f 2a 20 52 45 41 44 20 55 4e 43 4f 4d 4d 49   /* READ UNCOMMI
e230: 54 54 45 44 20 69 6e 20 73 68 61 72 65 64 2d 63  TTED in shared-c
e240: 61 63 68 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ache */.#define 
e250: 53 51 4c 49 54 45 5f 4e 6f 43 6b 70 74 4f 6e 43  SQLITE_NoCkptOnC
e260: 6c 6f 73 65 20 20 30 78 30 30 30 30 30 38 30 30  lose  0x00000800
e270: 20 20 2f 2a 20 4e 6f 20 63 68 65 63 6b 70 6f 69    /* No checkpoi
e280: 6e 74 20 6f 6e 20 63 6c 6f 73 65 28 29 2f 44 45  nt on close()/DE
e290: 54 41 43 48 20 2a 2f 0a 23 64 65 66 69 6e 65 20  TACH */.#define 
e2a0: 53 51 4c 49 54 45 5f 52 65 76 65 72 73 65 4f 72  SQLITE_ReverseOr
e2b0: 64 65 72 20 20 20 30 78 30 30 30 30 31 30 30 30  der   0x00001000
e2c0: 20 20 2f 2a 20 52 65 76 65 72 73 65 20 75 6e 6f    /* Reverse uno
e2d0: 72 64 65 72 65 64 20 53 45 4c 45 43 54 73 20 2a  rdered SELECTs *
e2e0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e2f0: 5f 52 65 63 54 72 69 67 67 65 72 73 20 20 20 20  _RecTriggers    
e300: 30 78 30 30 30 30 32 30 30 30 20 20 2f 2a 20 45  0x00002000  /* E
e310: 6e 61 62 6c 65 20 72 65 63 75 72 73 69 76 65 20  nable recursive 
e320: 74 72 69 67 67 65 72 73 20 2a 2f 0a 23 64 65 66  triggers */.#def
e330: 69 6e 65 20 53 51 4c 49 54 45 5f 46 6f 72 65 69  ine SQLITE_Forei
e340: 67 6e 4b 65 79 73 20 20 20 20 30 78 30 30 30 30  gnKeys    0x0000
e350: 34 30 30 30 20 20 2f 2a 20 45 6e 66 6f 72 63 65  4000  /* Enforce
e360: 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
e370: 73 74 72 61 69 6e 74 73 20 20 2a 2f 0a 23 64 65  straints  */.#de
e380: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 75 74 6f  fine SQLITE_Auto
e390: 49 6e 64 65 78 20 20 20 20 20 20 30 78 30 30 30  Index      0x000
e3a0: 30 38 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65  08000  /* Enable
e3b0: 20 61 75 74 6f 6d 61 74 69 63 20 69 6e 64 65 78   automatic index
e3c0: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
e3d0: 4c 49 54 45 5f 4c 6f 61 64 45 78 74 65 6e 73 69  LITE_LoadExtensi
e3e0: 6f 6e 20 20 30 78 30 30 30 31 30 30 30 30 20 20  on  0x00010000  
e3f0: 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f 61 64 5f 65  /* Enable load_e
e400: 78 74 65 6e 73 69 6f 6e 20 2a 2f 0a 23 64 65 66  xtension */.#def
e410: 69 6e 65 20 53 51 4c 49 54 45 5f 4c 6f 61 64 45  ine SQLITE_LoadE
e420: 78 74 46 75 6e 63 20 20 20 20 30 78 30 30 30 32  xtFunc    0x0002
e430: 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20  0000  /* Enable 
e440: 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 29  load_extension()
e450: 20 53 51 4c 20 66 75 6e 63 20 2a 2f 0a 23 64 65   SQL func */.#de
e460: 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 6e 61 62  fine SQLITE_Enab
e470: 6c 65 54 72 69 67 67 65 72 20 20 30 78 30 30 30  leTrigger  0x000
e480: 34 30 30 30 30 20 20 2f 2a 20 54 72 75 65 20 74  40000  /* True t
e490: 6f 20 65 6e 61 62 6c 65 20 74 72 69 67 67 65 72  o enable trigger
e4a0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
e4b0: 49 54 45 5f 44 65 66 65 72 46 4b 73 20 20 20 20  ITE_DeferFKs    
e4c0: 20 20 20 30 78 30 30 30 38 30 30 30 30 20 20 2f     0x00080000  /
e4d0: 2a 20 44 65 66 65 72 20 61 6c 6c 20 46 4b 20 63  * Defer all FK c
e4e0: 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64  onstraints */.#d
e4f0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 51 75 65  efine SQLITE_Que
e500: 72 79 4f 6e 6c 79 20 20 20 20 20 20 30 78 30 30  ryOnly      0x00
e510: 31 30 30 30 30 30 20 20 2f 2a 20 44 69 73 61 62  100000  /* Disab
e520: 6c 65 20 64 61 74 61 62 61 73 65 20 63 68 61 6e  le database chan
e530: 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ges */.#define S
e540: 51 4c 49 54 45 5f 43 65 6c 6c 53 69 7a 65 43 6b  QLITE_CellSizeCk
e550: 20 20 20 20 20 30 78 30 30 32 30 30 30 30 30 20       0x00200000 
e560: 20 2f 2a 20 43 68 65 63 6b 20 62 74 72 65 65 20   /* Check btree 
e570: 63 65 6c 6c 20 73 69 7a 65 73 20 6f 6e 20 6c 6f  cell sizes on lo
e580: 61 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ad */.#define SQ
e590: 4c 49 54 45 5f 46 74 73 33 54 6f 6b 65 6e 69 7a  LITE_Fts3Tokeniz
e5a0: 65 72 20 20 30 78 30 30 34 30 30 30 30 30 20 20  er  0x00400000  
e5b0: 2f 2a 20 45 6e 61 62 6c 65 20 66 74 73 33 5f 74  /* Enable fts3_t
e5c0: 6f 6b 65 6e 69 7a 65 72 28 32 29 20 2a 2f 0a 23  okenizer(2) */.#
e5d0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 6e  define SQLITE_En
e5e0: 61 62 6c 65 51 50 53 47 20 20 20 20 20 30 78 30  ableQPSG     0x0
e5f0: 30 38 30 30 30 30 30 20 20 2f 2a 20 51 75 65 72  0800000  /* Quer
e600: 79 20 50 6c 61 6e 6e 65 72 20 53 74 61 62 69 6c  y Planner Stabil
e610: 69 74 79 20 47 75 61 72 61 6e 74 65 65 2a 2f 0a  ity Guarantee*/.
e620: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54  #define SQLITE_T
e630: 72 69 67 67 65 72 45 51 50 20 20 20 20 20 30 78  riggerEQP     0x
e640: 30 31 30 30 30 30 30 30 20 20 2f 2a 20 53 68 6f  01000000  /* Sho
e650: 77 20 74 72 69 67 67 65 72 20 45 58 50 4c 41 49  w trigger EXPLAI
e660: 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 2a 2f 0a  N QUERY PLAN */.
e670: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52  #define SQLITE_R
e680: 65 73 65 74 44 61 74 61 62 61 73 65 20 20 30 78  esetDatabase  0x
e690: 30 32 30 30 30 30 30 30 20 20 2f 2a 20 52 65 73  02000000  /* Res
e6a0: 65 74 20 74 68 65 20 64 61 74 61 62 61 73 65 20  et the database 
e6b0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e6c0: 45 5f 4c 65 67 61 63 79 41 6c 74 65 72 20 20 20  E_LegacyAlter   
e6d0: 20 30 78 30 34 30 30 30 30 30 30 20 20 2f 2a 20   0x04000000  /* 
e6e0: 4c 65 67 61 63 79 20 41 4c 54 45 52 20 54 41 42  Legacy ALTER TAB
e6f0: 4c 45 20 62 65 68 61 76 69 6f 75 72 20 2a 2f 0a  LE behaviour */.
e700: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e  #define SQLITE_N
e710: 6f 53 63 68 65 6d 61 45 72 72 6f 72 20 20 30 78  oSchemaError  0x
e720: 30 38 30 30 30 30 30 30 20 20 2f 2a 20 44 6f 20  08000000  /* Do 
e730: 6e 6f 74 20 72 65 70 6f 72 74 20 73 63 68 65 6d  not report schem
e740: 61 20 70 61 72 73 65 20 65 72 72 6f 72 73 2a 2f  a parse errors*/
e750: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e760: 44 65 66 65 6e 73 69 76 65 20 20 20 20 20 20 30  Defensive      0
e770: 78 31 30 30 30 30 30 30 30 20 20 2f 2a 20 49 6e  x10000000  /* In
e780: 70 75 74 20 53 51 4c 20 69 73 20 6c 69 6b 65 6c  put SQL is likel
e790: 79 20 68 6f 73 74 69 6c 65 20 2a 2f 0a 0a 2f 2a  y hostile */../*
e7a0: 20 46 6c 61 67 73 20 75 73 65 64 20 6f 6e 6c 79   Flags used only
e7b0: 20 69 66 20 64 65 62 75 67 67 69 6e 67 20 2a 2f   if debugging */
e7c0: 0a 23 64 65 66 69 6e 65 20 48 49 28 58 29 20 20  .#define HI(X)  
e7d0: 28 28 75 36 34 29 28 58 29 3c 3c 33 32 29 0a 23  ((u64)(X)<<32).#
e7e0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
e7f0: 55 47 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  UG.#define SQLIT
e800: 45 5f 53 71 6c 54 72 61 63 65 20 20 20 20 20 20  E_SqlTrace      
e810: 20 48 49 28 30 78 30 30 30 31 29 20 20 2f 2a 20   HI(0x0001)  /* 
e820: 44 65 62 75 67 20 70 72 69 6e 74 20 53 51 4c 20  Debug print SQL 
e830: 61 73 20 69 74 20 65 78 65 63 75 74 65 73 20 2a  as it executes *
e840: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e850: 5f 56 64 62 65 4c 69 73 74 69 6e 67 20 20 20 20  _VdbeListing    
e860: 48 49 28 30 78 30 30 30 32 29 20 20 2f 2a 20 44  HI(0x0002)  /* D
e870: 65 62 75 67 20 6c 69 73 74 69 6e 67 73 20 6f 66  ebug listings of
e880: 20 56 44 42 45 20 70 72 6f 67 73 20 2a 2f 0a 23   VDBE progs */.#
e890: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64  define SQLITE_Vd
e8a0: 62 65 54 72 61 63 65 20 20 20 20 20 20 48 49 28  beTrace      HI(
e8b0: 30 78 30 30 30 34 29 20 20 2f 2a 20 54 72 75 65  0x0004)  /* True
e8c0: 20 74 6f 20 74 72 61 63 65 20 56 44 42 45 20 65   to trace VDBE e
e8d0: 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  xecution */.#def
e8e0: 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 41  ine SQLITE_VdbeA
e8f0: 64 64 6f 70 54 72 61 63 65 20 48 49 28 30 78 30  ddopTrace HI(0x0
e900: 30 30 38 29 20 20 2f 2a 20 54 72 61 63 65 20 73  008)  /* Trace s
e910: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 28  qlite3VdbeAddOp(
e920: 29 20 63 61 6c 6c 73 20 2a 2f 0a 23 64 65 66 69  ) calls */.#defi
e930: 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 45 51  ne SQLITE_VdbeEQ
e940: 50 20 20 20 20 20 20 20 20 48 49 28 30 78 30 30  P        HI(0x00
e950: 31 30 29 20 20 2f 2a 20 44 65 62 75 67 20 45 58  10)  /* Debug EX
e960: 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e  PLAIN QUERY PLAN
e970: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e980: 54 45 5f 50 61 72 73 65 72 54 72 61 63 65 20 20  TE_ParserTrace  
e990: 20 20 48 49 28 30 78 30 30 32 30 29 20 20 2f 2a    HI(0x0020)  /*
e9a0: 20 50 52 41 47 4d 41 20 70 61 72 73 65 72 5f 74   PRAGMA parser_t
e9b0: 72 61 63 65 3d 4f 4e 20 2a 2f 0a 23 65 6e 64 69  race=ON */.#endi
e9c0: 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64  f../*.** Allowed
e9d0: 20 76 61 6c 75 65 73 20 66 6f 72 20 73 71 6c 69   values for sqli
e9e0: 74 65 33 2e 6d 44 62 46 6c 61 67 73 0a 2a 2f 0a  te3.mDbFlags.*/.
e9f0: 23 64 65 66 69 6e 65 20 44 42 46 4c 41 47 5f 53  #define DBFLAG_S
ea00: 63 68 65 6d 61 43 68 61 6e 67 65 20 20 20 30 78  chemaChange   0x
ea10: 30 30 30 31 20 20 2f 2a 20 55 6e 63 6f 6d 6d 69  0001  /* Uncommi
ea20: 74 74 65 64 20 48 61 73 68 20 74 61 62 6c 65 20  tted Hash table 
ea30: 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69  changes */.#defi
ea40: 6e 65 20 44 42 46 4c 41 47 5f 50 72 65 66 65 72  ne DBFLAG_Prefer
ea50: 42 75 69 6c 74 69 6e 20 20 30 78 30 30 30 32 20  Builtin  0x0002 
ea60: 20 2f 2a 20 50 72 65 66 65 72 65 6e 63 65 20 74   /* Preference t
ea70: 6f 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63 73  o built-in funcs
ea80: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 46 4c   */.#define DBFL
ea90: 41 47 5f 56 61 63 75 75 6d 20 20 20 20 20 20 20  AG_Vacuum       
eaa0: 20 20 30 78 30 30 30 34 20 20 2f 2a 20 43 75 72    0x0004  /* Cur
eab0: 72 65 6e 74 6c 79 20 69 6e 20 61 20 56 41 43 55  rently in a VACU
eac0: 55 4d 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42  UM */.#define DB
ead0: 46 4c 41 47 5f 56 61 63 75 75 6d 49 6e 74 6f 20  FLAG_VacuumInto 
eae0: 20 20 20 20 30 78 30 30 30 38 20 20 2f 2a 20 43      0x0008  /* C
eaf0: 75 72 72 65 6e 74 6c 79 20 72 75 6e 6e 69 6e 67  urrently running
eb00: 20 56 41 43 55 55 4d 20 49 4e 54 4f 20 2a 2f 0a   VACUUM INTO */.
eb10: 23 64 65 66 69 6e 65 20 44 42 46 4c 41 47 5f 53  #define DBFLAG_S
eb20: 63 68 65 6d 61 4b 6e 6f 77 6e 4f 6b 20 20 30 78  chemaKnownOk  0x
eb30: 30 30 31 30 20 20 2f 2a 20 53 63 68 65 6d 61 20  0010  /* Schema 
eb40: 69 73 20 6b 6e 6f 77 6e 20 74 6f 20 62 65 20 76  is known to be v
eb50: 61 6c 69 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 42  alid */../*.** B
eb60: 69 74 73 20 6f 66 20 74 68 65 20 73 71 6c 69 74  its of the sqlit
eb70: 65 33 2e 64 62 4f 70 74 46 6c 61 67 73 20 66 69  e3.dbOptFlags fi
eb80: 65 6c 64 20 74 68 61 74 20 61 72 65 20 75 73 65  eld that are use
eb90: 64 20 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69  d by the.** sqli
eba0: 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c  te3_test_control
ebb0: 28 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c  (SQLITE_TESTCTRL
ebc0: 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 53 2c 2e  _OPTIMIZATIONS,.
ebd0: 2e 2e 29 20 69 6e 74 65 72 66 61 63 65 20 74 6f  ..) interface to
ebe0: 0a 2a 2a 20 73 65 6c 65 63 74 69 76 65 6c 79 20  .** selectively 
ebf0: 64 69 73 61 62 6c 65 20 76 61 72 69 6f 75 73 20  disable various 
ec00: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a  optimizations..*
ec10: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
ec20: 5f 51 75 65 72 79 46 6c 61 74 74 65 6e 65 72 20  _QueryFlattener 
ec30: 30 78 30 30 30 31 20 20 20 2f 2a 20 51 75 65 72  0x0001   /* Quer
ec40: 79 20 66 6c 61 74 74 65 6e 69 6e 67 20 2a 2f 0a  y flattening */.
ec50: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57  #define SQLITE_W
ec60: 69 6e 64 6f 77 46 75 6e 63 20 20 20 20 20 30 78  indowFunc     0x
ec70: 30 30 30 32 20 20 20 2f 2a 20 55 73 65 20 78 49  0002   /* Use xI
ec80: 6e 76 65 72 73 65 20 66 6f 72 20 77 69 6e 64 6f  nverse for windo
ec90: 77 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23  w functions */.#
eca0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 47 72  define SQLITE_Gr
ecb0: 6f 75 70 42 79 4f 72 64 65 72 20 20 20 30 78 30  oupByOrder   0x0
ecc0: 30 30 34 20 20 20 2f 2a 20 47 52 4f 55 50 42 59  004   /* GROUPBY
ecd0: 20 63 6f 76 65 72 20 6f 66 20 4f 52 44 45 52 42   cover of ORDERB
ece0: 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  Y */.#define SQL
ecf0: 49 54 45 5f 46 61 63 74 6f 72 4f 75 74 43 6f 6e  ITE_FactorOutCon
ed00: 73 74 20 30 78 30 30 30 38 20 20 20 2f 2a 20 43  st 0x0008   /* C
ed10: 6f 6e 73 74 61 6e 74 20 66 61 63 74 6f 72 69 6e  onstant factorin
ed20: 67 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  g */.#define SQL
ed30: 49 54 45 5f 44 69 73 74 69 6e 63 74 4f 70 74 20  ITE_DistinctOpt 
ed40: 20 20 20 30 78 30 30 31 30 20 20 20 2f 2a 20 44     0x0010   /* D
ed50: 49 53 54 49 4e 43 54 20 75 73 69 6e 67 20 69 6e  ISTINCT using in
ed60: 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  dexes */.#define
ed70: 20 53 51 4c 49 54 45 5f 43 6f 76 65 72 49 64 78   SQLITE_CoverIdx
ed80: 53 63 61 6e 20 20 20 30 78 30 30 32 30 20 20 20  Scan   0x0020   
ed90: 2f 2a 20 43 6f 76 65 72 69 6e 67 20 69 6e 64 65  /* Covering inde
eda0: 78 20 73 63 61 6e 73 20 2a 2f 0a 23 64 65 66 69  x scans */.#defi
edb0: 6e 65 20 53 51 4c 49 54 45 5f 4f 72 64 65 72 42  ne SQLITE_OrderB
edc0: 79 49 64 78 4a 6f 69 6e 20 30 78 30 30 34 30 20  yIdxJoin 0x0040 
edd0: 20 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 6f 66    /* ORDER BY of
ede0: 20 6a 6f 69 6e 73 20 76 69 61 20 69 6e 64 65 78   joins via index
edf0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
ee00: 54 45 5f 54 72 61 6e 73 69 74 69 76 65 20 20 20  TE_Transitive   
ee10: 20 20 30 78 30 30 38 30 20 20 20 2f 2a 20 54 72    0x0080   /* Tr
ee20: 61 6e 73 69 74 69 76 65 20 63 6f 6e 73 74 72 61  ansitive constra
ee30: 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ints */.#define 
ee40: 53 51 4c 49 54 45 5f 4f 6d 69 74 4e 6f 6f 70 4a  SQLITE_OmitNoopJ
ee50: 6f 69 6e 20 20 20 30 78 30 31 30 30 20 20 20 2f  oin   0x0100   /
ee60: 2a 20 4f 6d 69 74 20 75 6e 75 73 65 64 20 74 61  * Omit unused ta
ee70: 62 6c 65 73 20 69 6e 20 6a 6f 69 6e 73 20 2a 2f  bles in joins */
ee80: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
ee90: 43 6f 75 6e 74 4f 66 56 69 65 77 20 20 20 20 30  CountOfView    0
eea0: 78 30 32 30 30 20 20 20 2f 2a 20 54 68 65 20 63  x0200   /* The c
eeb0: 6f 75 6e 74 2d 6f 66 2d 76 69 65 77 20 6f 70 74  ount-of-view opt
eec0: 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64 65  imization */.#de
eed0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 75 72 73  fine SQLITE_Curs
eee0: 6f 72 48 69 6e 74 73 20 20 20 20 30 78 30 34 30  orHints    0x040
eef0: 30 20 20 20 2f 2a 20 41 64 64 20 4f 50 5f 43 75  0   /* Add OP_Cu
ef00: 72 73 6f 72 48 69 6e 74 20 6f 70 63 6f 64 65 73  rsorHint opcodes
ef10: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
ef20: 54 45 5f 53 74 61 74 33 34 20 20 20 20 20 20 20  TE_Stat34       
ef30: 20 20 30 78 30 38 30 30 20 20 20 2f 2a 20 55 73    0x0800   /* Us
ef40: 65 20 53 54 41 54 33 20 6f 72 20 53 54 41 54 34  e STAT3 or STAT4
ef50: 20 64 61 74 61 20 2a 2f 0a 20 20 20 2f 2a 20 54   data */.   /* T
ef60: 48 33 20 65 78 70 65 63 74 73 20 74 68 65 20 53  H3 expects the S
ef70: 74 61 74 33 34 20 20 5e 5e 5e 5e 5e 5e 20 76 61  tat34  ^^^^^^ va
ef80: 6c 75 65 20 74 6f 20 62 65 20 30 78 30 38 30 30  lue to be 0x0800
ef90: 2e 20 20 44 6f 6e 27 74 20 63 68 61 6e 67 65 20  .  Don't change 
efa0: 69 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  it */.#define SQ
efb0: 4c 49 54 45 5f 50 75 73 68 44 6f 77 6e 20 20 20  LITE_PushDown   
efc0: 20 20 20 20 30 78 31 30 30 30 20 20 20 2f 2a 20      0x1000   /* 
efd0: 54 68 65 20 70 75 73 68 2d 64 6f 77 6e 20 6f 70  The push-down op
efe0: 74 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64  timization */.#d
eff0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 69 6d  efine SQLITE_Sim
f000: 70 6c 69 66 79 4a 6f 69 6e 20 20 20 30 78 32 30  plifyJoin   0x20
f010: 30 30 20 20 20 2f 2a 20 43 6f 6e 76 65 72 74 20  00   /* Convert 
f020: 4c 45 46 54 20 4a 4f 49 4e 20 74 6f 20 4a 4f 49  LEFT JOIN to JOI
f030: 4e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  N */.#define SQL
f040: 49 54 45 5f 53 6b 69 70 53 63 61 6e 20 20 20 20  ITE_SkipScan    
f050: 20 20 20 30 78 34 30 30 30 20 20 20 2f 2a 20 53     0x4000   /* S
f060: 6b 69 70 2d 73 63 61 6e 73 20 2a 2f 0a 23 64 65  kip-scans */.#de
f070: 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 72 6f 70  fine SQLITE_Prop
f080: 61 67 61 74 65 43 6f 6e 73 74 20 30 78 38 30 30  agateConst 0x800
f090: 30 20 20 20 2f 2a 20 54 68 65 20 63 6f 6e 73 74  0   /* The const
f0a0: 61 6e 74 20 70 72 6f 70 61 67 61 74 69 6f 6e 20  ant propagation 
f0b0: 6f 70 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  opt */.#define S
f0c0: 51 4c 49 54 45 5f 41 6c 6c 4f 70 74 73 20 20 20  QLITE_AllOpts   
f0d0: 20 20 20 20 20 30 78 66 66 66 66 20 20 20 2f 2a       0xffff   /*
f0e0: 20 41 6c 6c 20 6f 70 74 69 6d 69 7a 61 74 69 6f   All optimizatio
f0f0: 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63  ns */../*.** Mac
f100: 72 6f 73 20 66 6f 72 20 74 65 73 74 69 6e 67 20  ros for testing 
f110: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 6f  whether or not o
f120: 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 61 72 65  ptimizations are
f130: 20 65 6e 61 62 6c 65 64 20 6f 72 20 64 69 73 61   enabled or disa
f140: 62 6c 65 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  bled..*/.#define
f150: 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 44 69 73   OptimizationDis
f160: 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20  abled(db, mask) 
f170: 20 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c   (((db)->dbOptFl
f180: 61 67 73 26 28 6d 61 73 6b 29 29 21 3d 30 29 0a  ags&(mask))!=0).
f190: 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61  #define Optimiza
f1a0: 74 69 6f 6e 45 6e 61 62 6c 65 64 28 64 62 2c 20  tionEnabled(db, 
f1b0: 6d 61 73 6b 29 20 20 20 28 28 28 64 62 29 2d 3e  mask)   (((db)->
f1c0: 64 62 4f 70 74 46 6c 61 67 73 26 28 6d 61 73 6b  dbOptFlags&(mask
f1d0: 29 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 52 65  ))==0)../*.** Re
f1e0: 74 75 72 6e 20 74 72 75 65 20 69 66 20 69 74 20  turn true if it 
f1f0: 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20 63 6f 6e  OK to factor con
f200: 73 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e  stant expression
f210: 73 20 69 6e 74 6f 20 74 68 65 20 69 6e 69 74 69  s into the initi
f220: 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 63 6f 64  alization.** cod
f230: 65 2e 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20  e. The argument 
f240: 69 73 20 61 20 50 61 72 73 65 20 6f 62 6a 65 63  is a Parse objec
f250: 74 20 66 6f 72 20 74 68 65 20 63 6f 64 65 20 67  t for the code g
f260: 65 6e 65 72 61 74 6f 72 2e 0a 2a 2f 0a 23 64 65  enerator..*/.#de
f270: 66 69 6e 65 20 43 6f 6e 73 74 46 61 63 74 6f 72  fine ConstFactor
f280: 4f 6b 28 50 29 20 28 28 50 29 2d 3e 6f 6b 43 6f  Ok(P) ((P)->okCo
f290: 6e 73 74 46 61 63 74 6f 72 29 0a 0a 2f 2a 0a 2a  nstFactor)../*.*
f2a0: 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65  * Possible value
f2b0: 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65  s for the sqlite
f2c0: 2e 6d 61 67 69 63 20 66 69 65 6c 64 2e 0a 2a 2a  .magic field..**
f2d0: 20 54 68 65 20 6e 75 6d 62 65 72 73 20 61 72 65   The numbers are
f2e0: 20 6f 62 74 61 69 6e 65 64 20 61 74 20 72 61 6e   obtained at ran
f2f0: 64 6f 6d 20 61 6e 64 20 68 61 76 65 20 6e 6f 20  dom and have no 
f300: 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67 2c  special meaning,
f310: 20 6f 74 68 65 72 0a 2a 2a 20 74 68 61 6e 20 62   other.** than b
f320: 65 69 6e 67 20 64 69 73 74 69 6e 63 74 20 66 72  eing distinct fr
f330: 6f 6d 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2e 0a  om one another..
f340: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
f350: 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 20 20 20  E_MAGIC_OPEN    
f360: 20 30 78 61 30 32 39 61 36 39 37 20 20 2f 2a 20   0xa029a697  /* 
f370: 44 61 74 61 62 61 73 65 20 69 73 20 6f 70 65 6e  Database is open
f380: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
f390: 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44 20  TE_MAGIC_CLOSED 
f3a0: 20 20 30 78 39 66 33 63 32 64 33 33 20 20 2f 2a    0x9f3c2d33  /*
f3b0: 20 44 61 74 61 62 61 73 65 20 69 73 20 63 6c 6f   Database is clo
f3c0: 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  sed */.#define S
f3d0: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 53 49 43 4b  QLITE_MAGIC_SICK
f3e0: 20 20 20 20 20 30 78 34 62 37 37 31 32 39 30 20       0x4b771290 
f3f0: 20 2f 2a 20 45 72 72 6f 72 20 61 6e 64 20 61 77   /* Error and aw
f400: 61 69 74 69 6e 67 20 63 6c 6f 73 65 20 2a 2f 0a  aiting close */.
f410: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
f420: 41 47 49 43 5f 42 55 53 59 20 20 20 20 20 30 78  AGIC_BUSY     0x
f430: 66 30 33 62 37 39 30 36 20 20 2f 2a 20 44 61 74  f03b7906  /* Dat
f440: 61 62 61 73 65 20 63 75 72 72 65 6e 74 6c 79 20  abase currently 
f450: 69 6e 20 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e  in use */.#defin
f460: 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 45  e SQLITE_MAGIC_E
f470: 52 52 4f 52 20 20 20 20 30 78 62 35 33 35 37 39  RROR    0xb53579
f480: 33 30 20 20 2f 2a 20 41 6e 20 53 51 4c 49 54 45  30  /* An SQLITE
f490: 5f 4d 49 53 55 53 45 20 65 72 72 6f 72 20 6f 63  _MISUSE error oc
f4a0: 63 75 72 72 65 64 20 2a 2f 0a 23 64 65 66 69 6e  curred */.#defin
f4b0: 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 5a  e SQLITE_MAGIC_Z
f4c0: 4f 4d 42 49 45 20 20 20 30 78 36 34 63 66 66 63  OMBIE   0x64cffc
f4d0: 37 66 20 20 2f 2a 20 43 6c 6f 73 65 20 77 69 74  7f  /* Close wit
f4e0: 68 20 6c 61 73 74 20 73 74 61 74 65 6d 65 6e 74  h last statement
f4f0: 20 63 6c 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a   close */../*.**
f500: 20 45 61 63 68 20 53 51 4c 20 66 75 6e 63 74 69   Each SQL functi
f510: 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 20 62 79  on is defined by
f520: 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
f530: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a  the following.**
f540: 20 73 74 72 75 63 74 75 72 65 2e 20 20 46 6f 72   structure.  For
f550: 20 67 6c 6f 62 61 6c 20 62 75 69 6c 74 2d 69 6e   global built-in
f560: 20 66 75 6e 63 74 69 6f 6e 73 20 28 65 78 3a 20   functions (ex: 
f570: 73 75 62 73 74 72 28 29 2c 20 6d 61 78 28 29 2c  substr(), max(),
f580: 20 63 6f 75 6e 74 28 29 29 0a 2a 2a 20 61 20 70   count()).** a p
f590: 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73  ointer to this s
f5a0: 74 72 75 63 74 75 72 65 20 69 73 20 68 65 6c 64  tructure is held
f5b0: 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 33 42   in the sqlite3B
f5c0: 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 20  uiltinFunctions 
f5d0: 6f 62 6a 65 63 74 2e 0a 2a 2a 20 46 6f 72 20 70  object..** For p
f5e0: 65 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 70  er-connection ap
f5f0: 70 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65  plication-define
f600: 64 20 66 75 6e 63 74 69 6f 6e 73 2c 20 61 20 70  d functions, a p
f610: 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 0a 2a  ointer to this.*
f620: 2a 20 73 74 72 75 63 74 75 72 65 20 69 73 20 68  * structure is h
f630: 65 6c 64 20 69 6e 20 74 68 65 20 64 62 2d 3e 61  eld in the db->a
f640: 48 61 73 68 20 68 61 73 68 20 74 61 62 6c 65 2e  Hash hash table.
f650: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 75 2e 70 48 61  .**.** The u.pHa
f660: 73 68 20 66 69 65 6c 64 20 69 73 20 75 73 65 64  sh field is used
f670: 20 62 79 20 74 68 65 20 67 6c 6f 62 61 6c 20 62   by the global b
f680: 75 69 6c 74 2d 69 6e 73 2e 20 20 54 68 65 20 75  uilt-ins.  The u
f690: 2e 70 44 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20  .pDestructor.** 
f6a0: 66 69 65 6c 64 20 69 73 20 75 73 65 64 20 62 79  field is used by
f6b0: 20 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20   per-connection 
f6c0: 61 70 70 2d 64 65 66 20 66 75 6e 63 74 69 6f 6e  app-def function
f6d0: 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e  s..*/.struct Fun
f6e0: 63 44 65 66 20 7b 0a 20 20 69 38 20 6e 41 72 67  cDef {.  i8 nArg
f6f0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
f700: 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
f710: 65 6e 74 73 2e 20 20 2d 31 20 6d 65 61 6e 73 20  ents.  -1 means 
f720: 75 6e 6c 69 6d 69 74 65 64 20 2a 2f 0a 20 20 75  unlimited */.  u
f730: 33 32 20 66 75 6e 63 46 6c 61 67 73 3b 20 20 20  32 funcFlags;   
f740: 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 62      /* Some comb
f750: 69 6e 61 74 69 6f 6e 20 6f 66 20 53 51 4c 49 54  ination of SQLIT
f760: 45 5f 46 55 4e 43 5f 2a 20 2a 2f 0a 20 20 76 6f  E_FUNC_* */.  vo
f770: 69 64 20 2a 70 55 73 65 72 44 61 74 61 3b 20 20  id *pUserData;  
f780: 20 20 20 2f 2a 20 55 73 65 72 20 64 61 74 61 20     /* User data 
f790: 70 61 72 61 6d 65 74 65 72 20 2a 2f 0a 20 20 46  parameter */.  F
f7a0: 75 6e 63 44 65 66 20 2a 70 4e 65 78 74 3b 20 20  uncDef *pNext;  
f7b0: 20 20 20 20 2f 2a 20 4e 65 78 74 20 66 75 6e 63      /* Next func
f7c0: 74 69 6f 6e 20 77 69 74 68 20 73 61 6d 65 20 6e  tion with same n
f7d0: 61 6d 65 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  ame */.  void (*
f7e0: 78 53 46 75 6e 63 29 28 73 71 6c 69 74 65 33 5f  xSFunc)(sqlite3_
f7f0: 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c  context*,int,sql
f800: 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f  ite3_value**); /
f810: 2a 20 66 75 6e 63 20 6f 72 20 61 67 67 2d 73 74  * func or agg-st
f820: 65 70 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  ep */.  void (*x
f830: 46 69 6e 61 6c 69 7a 65 29 28 73 71 6c 69 74 65  Finalize)(sqlite
f840: 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 20 20 20 20  3_context*);    
f850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
f860: 20 41 67 67 20 66 69 6e 61 6c 69 7a 65 72 20 2a   Agg finalizer *
f870: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 56 61 6c 75  /.  void (*xValu
f880: 65 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  e)(sqlite3_conte
f890: 78 74 2a 29 3b 20 20 20 20 20 20 20 20 20 20 20  xt*);           
f8a0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72            /* Cur
f8b0: 72 65 6e 74 20 61 67 67 20 76 61 6c 75 65 20 2a  rent agg value *
f8c0: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 49 6e 76 65  /.  void (*xInve
f8d0: 72 73 65 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e  rse)(sqlite3_con
f8e0: 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
f8f0: 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 69  3_value**); /* i
f900: 6e 76 65 72 73 65 20 61 67 67 2d 73 74 65 70 20  nverse agg-step 
f910: 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
f920: 2a 7a 4e 61 6d 65 3b 20 20 20 2f 2a 20 53 51 4c  *zName;   /* SQL
f930: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e   name of the fun
f940: 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 75 6e 69 6f  ction. */.  unio
f950: 6e 20 7b 0a 20 20 20 20 46 75 6e 63 44 65 66 20  n {.    FuncDef 
f960: 2a 70 48 61 73 68 3b 20 20 20 20 20 20 2f 2a 20  *pHash;      /* 
f970: 4e 65 78 74 20 77 69 74 68 20 61 20 64 69 66 66  Next with a diff
f980: 65 72 65 6e 74 20 6e 61 6d 65 20 62 75 74 20 74  erent name but t
f990: 68 65 20 73 61 6d 65 20 68 61 73 68 20 2a 2f 0a  he same hash */.
f9a0: 20 20 20 20 46 75 6e 63 44 65 73 74 72 75 63 74      FuncDestruct
f9b0: 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72 3b  or *pDestructor;
f9c0: 20 20 20 2f 2a 20 52 65 66 65 72 65 6e 63 65 20     /* Reference 
f9d0: 63 6f 75 6e 74 65 64 20 64 65 73 74 72 75 63 74  counted destruct
f9e0: 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  or function */. 
f9f0: 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20   } u;.};../*.** 
fa00: 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20 65  This structure e
fa10: 6e 63 61 70 73 75 6c 61 74 65 73 20 61 20 75 73  ncapsulates a us
fa20: 65 72 2d 66 75 6e 63 74 69 6f 6e 20 64 65 73 74  er-function dest
fa30: 72 75 63 74 6f 72 20 63 61 6c 6c 62 61 63 6b 20  ructor callback 
fa40: 28 61 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65  (as.** configure
fa50: 64 20 75 73 69 6e 67 20 63 72 65 61 74 65 5f 66  d using create_f
fa60: 75 6e 63 74 69 6f 6e 5f 76 32 28 29 29 20 61 6e  unction_v2()) an
fa70: 64 20 61 20 72 65 66 65 72 65 6e 63 65 20 63 6f  d a reference co
fa80: 75 6e 74 65 72 2e 20 57 68 65 6e 0a 2a 2a 20 63  unter. When.** c
fa90: 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76  reate_function_v
faa0: 32 28 29 20 69 73 20 63 61 6c 6c 65 64 20 74 6f  2() is called to
fab0: 20 63 72 65 61 74 65 20 61 20 66 75 6e 63 74 69   create a functi
fac0: 6f 6e 20 77 69 74 68 20 61 20 64 65 73 74 72 75  on with a destru
fad0: 63 74 6f 72 2c 0a 2a 2a 20 61 20 73 69 6e 67 6c  ctor,.** a singl
fae0: 65 20 6f 62 6a 65 63 74 20 6f 66 20 74 68 69 73  e object of this
faf0: 20 74 79 70 65 20 69 73 20 61 6c 6c 6f 63 61 74   type is allocat
fb00: 65 64 2e 20 46 75 6e 63 44 65 73 74 72 75 63 74  ed. FuncDestruct
fb10: 6f 72 2e 6e 52 65 66 20 69 73 20 73 65 74 20 74  or.nRef is set t
fb20: 6f 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20  o.** the number 
fb30: 6f 66 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63  of FuncDef objec
fb40: 74 73 20 63 72 65 61 74 65 64 20 28 65 69 74 68  ts created (eith
fb50: 65 72 20 31 20 6f 72 20 33 2c 20 64 65 70 65 6e  er 1 or 3, depen
fb60: 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a  ding on whether.
fb70: 2a 2a 20 6f 72 20 6e 6f 74 20 74 68 65 20 73 70  ** or not the sp
fb80: 65 63 69 66 69 65 64 20 65 6e 63 6f 64 69 6e 67  ecified encoding
fb90: 20 69 73 20 53 51 4c 49 54 45 5f 41 4e 59 29 2e   is SQLITE_ANY).
fba0: 20 54 68 65 20 46 75 6e 63 44 65 66 2e 70 44 65   The FuncDef.pDe
fbb0: 73 74 72 75 63 74 6f 72 0a 2a 2a 20 6d 65 6d 62  structor.** memb
fbc0: 65 72 20 6f 66 20 65 61 63 68 20 6f 66 20 74 68  er of each of th
fbd0: 65 20 6e 65 77 20 46 75 6e 63 44 65 66 20 6f 62  e new FuncDef ob
fbe0: 6a 65 63 74 73 20 69 73 20 73 65 74 20 74 6f 20  jects is set to 
fbf0: 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 61 6c 6c  point to the all
fc00: 6f 63 61 74 65 64 0a 2a 2a 20 46 75 6e 63 44 65  ocated.** FuncDe
fc10: 73 74 72 75 63 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20  structor..**.** 
fc20: 54 68 65 72 65 61 66 74 65 72 2c 20 77 68 65 6e  Thereafter, when
fc30: 20 6f 6e 65 20 6f 66 20 74 68 65 20 46 75 6e 63   one of the Func
fc40: 44 65 66 20 6f 62 6a 65 63 74 73 20 69 73 20 64  Def objects is d
fc50: 65 6c 65 74 65 64 2c 20 74 68 65 20 72 65 66 65  eleted, the refe
fc60: 72 65 6e 63 65 0a 2a 2a 20 63 6f 75 6e 74 20 6f  rence.** count o
fc70: 6e 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69 73  n this object is
fc80: 20 64 65 63 72 65 6d 65 6e 74 65 64 2e 20 57 68   decremented. Wh
fc90: 65 6e 20 69 74 20 72 65 61 63 68 65 73 20 30 2c  en it reaches 0,
fca0: 20 74 68 65 20 64 65 73 74 72 75 63 74 6f 72 0a   the destructor.
fcb0: 2a 2a 20 69 73 20 69 6e 76 6f 6b 65 64 20 61 6e  ** is invoked an
fcc0: 64 20 74 68 65 20 46 75 6e 63 44 65 73 74 72 75  d the FuncDestru
fcd0: 63 74 6f 72 20 73 74 72 75 63 74 75 72 65 20 66  ctor structure f
fce0: 72 65 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  reed..*/.struct 
fcf0: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 7b  FuncDestructor {
fd00: 0a 20 20 69 6e 74 20 6e 52 65 66 3b 0a 20 20 76  .  int nRef;.  v
fd10: 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79 29 28  oid (*xDestroy)(
fd20: 76 6f 69 64 20 2a 29 3b 0a 20 20 76 6f 69 64 20  void *);.  void 
fd30: 2a 70 55 73 65 72 44 61 74 61 3b 0a 7d 3b 0a 0a  *pUserData;.};..
fd40: 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76  /*.** Possible v
fd50: 61 6c 75 65 73 20 66 6f 72 20 46 75 6e 63 44 65  alues for FuncDe
fd60: 66 2e 66 6c 61 67 73 2e 20 20 4e 6f 74 65 20 74  f.flags.  Note t
fd70: 68 61 74 20 74 68 65 20 5f 4c 45 4e 47 54 48 20  hat the _LENGTH 
fd80: 61 6e 64 20 5f 54 59 50 45 4f 46 0a 2a 2a 20 76  and _TYPEOF.** v
fd90: 61 6c 75 65 73 20 6d 75 73 74 20 63 6f 72 72 65  alues must corre
fda0: 73 70 6f 6e 64 20 74 6f 20 4f 50 46 4c 41 47 5f  spond to OPFLAG_
fdb0: 4c 45 4e 47 54 48 41 52 47 20 61 6e 64 20 4f 50  LENGTHARG and OP
fdc0: 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 2e 20  FLAG_TYPEOFARG. 
fdd0: 20 41 6e 64 0a 2a 2a 20 53 51 4c 49 54 45 5f 46   And.** SQLITE_F
fde0: 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 6d 75 73  UNC_CONSTANT mus
fdf0: 74 20 62 65 20 74 68 65 20 73 61 6d 65 20 61 73  t be the same as
fe00: 20 53 51 4c 49 54 45 5f 44 45 54 45 52 4d 49 4e   SQLITE_DETERMIN
fe10: 49 53 54 49 43 2e 20 20 54 68 65 72 65 0a 2a 2a  ISTIC.  There.**
fe20: 20 61 72 65 20 61 73 73 65 72 74 28 29 20 73 74   are assert() st
fe30: 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20  atements in the 
fe40: 63 6f 64 65 20 74 6f 20 76 65 72 69 66 79 20 74  code to verify t
fe50: 68 69 73 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65  his..**.** Value
fe60: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 65 6e   constraints (en
fe70: 66 6f 72 63 65 64 20 76 69 61 20 61 73 73 65 72  forced via asser
fe80: 74 28 29 29 3a 0a 2a 2a 20 20 20 20 20 53 51 4c  t()):.**     SQL
fe90: 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 20  ITE_FUNC_MINMAX 
fea0: 20 20 20 3d 3d 20 20 4e 43 5f 4d 69 6e 4d 61 78     ==  NC_MinMax
feb0: 41 67 67 20 20 20 20 20 20 3d 3d 20 53 46 5f 4d  Agg      == SF_M
fec0: 69 6e 4d 61 78 41 67 67 0a 2a 2a 20 20 20 20 20  inMaxAgg.**     
fed0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e 47  SQLITE_FUNC_LENG
fee0: 54 48 20 20 20 20 3d 3d 20 20 4f 50 46 4c 41 47  TH    ==  OPFLAG
fef0: 5f 4c 45 4e 47 54 48 41 52 47 0a 2a 2a 20 20 20  _LENGTHARG.**   
ff00: 20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59    SQLITE_FUNC_TY
ff10: 50 45 4f 46 20 20 20 20 3d 3d 20 20 4f 50 46 4c  PEOF    ==  OPFL
ff20: 41 47 5f 54 59 50 45 4f 46 41 52 47 0a 2a 2a 20  AG_TYPEOFARG.** 
ff30: 20 20 20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f      SQLITE_FUNC_
ff40: 43 4f 4e 53 54 41 4e 54 20 20 3d 3d 20 20 53 51  CONSTANT  ==  SQ
ff50: 4c 49 54 45 5f 44 45 54 45 52 4d 49 4e 49 53 54  LITE_DETERMINIST
ff60: 49 43 20 66 72 6f 6d 20 74 68 65 20 41 50 49 0a  IC from the API.
ff70: 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 46 55  **     SQLITE_FU
ff80: 4e 43 5f 45 4e 43 4d 41 53 4b 20 20 20 64 65 70  NC_ENCMASK   dep
ff90: 65 6e 64 73 20 6f 6e 20 53 51 4c 49 54 45 5f 55  ends on SQLITE_U
ffa0: 54 46 2a 20 6d 61 63 72 6f 73 20 69 6e 20 74 68  TF* macros in th
ffb0: 65 20 41 50 49 0a 2a 2f 0a 23 64 65 66 69 6e 65  e API.*/.#define
ffc0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 4e 43   SQLITE_FUNC_ENC
ffd0: 4d 41 53 4b 20 20 30 78 30 30 30 33 20 2f 2a 20  MASK  0x0003 /* 
ffe0: 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c  SQLITE_UTF8, SQL
fff0: 49 54 45 5f 55 54 46 31 36 42 45 20 6f 72 20 55  ITE_UTF16BE or U
10000 54 46 31 36 4c 45 20 2a 2f 0a 23 64 65 66 69 6e  TF16LE */.#defin
10010 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 49  e SQLITE_FUNC_LI
10020 4b 45 20 20 20 20 20 30 78 30 30 30 34 20 2f 2a  KE     0x0004 /*
10030 20 43 61 6e 64 69 64 61 74 65 20 66 6f 72 20 74   Candidate for t
10040 68 65 20 4c 49 4b 45 20 6f 70 74 69 6d 69 7a 61  he LIKE optimiza
10050 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
10060 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 41 53 45  SQLITE_FUNC_CASE
10070 20 20 20 20 20 30 78 30 30 30 38 20 2f 2a 20 43       0x0008 /* C
10080 61 73 65 2d 73 65 6e 73 69 74 69 76 65 20 4c 49  ase-sensitive LI
10090 4b 45 2d 74 79 70 65 20 66 75 6e 63 74 69 6f 6e  KE-type function
100a0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
100b0 54 45 5f 46 55 4e 43 5f 45 50 48 45 4d 20 20 20  TE_FUNC_EPHEM   
100c0 20 30 78 30 30 31 30 20 2f 2a 20 45 70 68 65 6d   0x0010 /* Ephem
100d0 65 72 61 6c 2e 20 20 44 65 6c 65 74 65 20 77 69  eral.  Delete wi
100e0 74 68 20 56 44 42 45 20 2a 2f 0a 23 64 65 66 69  th VDBE */.#defi
100f0 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  ne SQLITE_FUNC_N
10100 45 45 44 43 4f 4c 4c 20 30 78 30 30 32 30 20 2f  EEDCOLL 0x0020 /
10110 2a 20 73 71 6c 69 74 65 33 47 65 74 46 75 6e 63  * sqlite3GetFunc
10120 43 6f 6c 6c 53 65 71 28 29 20 6d 69 67 68 74 20  CollSeq() might 
10130 62 65 20 63 61 6c 6c 65 64 2a 2f 0a 23 64 65 66  be called*/.#def
10140 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
10150 4c 45 4e 47 54 48 20 20 20 30 78 30 30 34 30 20  LENGTH   0x0040 
10160 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 6c 65 6e 67  /* Built-in leng
10170 74 68 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  th() function */
10180 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
10190 46 55 4e 43 5f 54 59 50 45 4f 46 20 20 20 30 78  FUNC_TYPEOF   0x
101a0 30 30 38 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e  0080 /* Built-in
101b0 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74 69   typeof() functi
101c0 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
101d0 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 55 4e 54 20  LITE_FUNC_COUNT 
101e0 20 20 20 30 78 30 31 30 30 20 2f 2a 20 42 75 69     0x0100 /* Bui
101f0 6c 74 2d 69 6e 20 63 6f 75 6e 74 28 2a 29 20 61  lt-in count(*) a
10200 67 67 72 65 67 61 74 65 20 2a 2f 0a 23 64 65 66  ggregate */.#def
10210 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
10220 43 4f 41 4c 45 53 43 45 20 30 78 30 32 30 30 20  COALESCE 0x0200 
10230 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f 61 6c  /* Built-in coal
10240 65 73 63 65 28 29 20 6f 72 20 69 66 6e 75 6c 6c  esce() or ifnull
10250 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  () */.#define SQ
10260 4c 49 54 45 5f 46 55 4e 43 5f 55 4e 4c 49 4b 45  LITE_FUNC_UNLIKE
10270 4c 59 20 30 78 30 34 30 30 20 2f 2a 20 42 75 69  LY 0x0400 /* Bui
10280 6c 74 2d 69 6e 20 75 6e 6c 69 6b 65 6c 79 28 29  lt-in unlikely()
10290 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
102a0 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
102b0 5f 43 4f 4e 53 54 41 4e 54 20 30 78 30 38 30 30  _CONSTANT 0x0800
102c0 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 69 6e 70   /* Constant inp
102d0 75 74 73 20 67 69 76 65 20 61 20 63 6f 6e 73 74  uts give a const
102e0 61 6e 74 20 6f 75 74 70 75 74 20 2a 2f 0a 23 64  ant output */.#d
102f0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
10300 43 5f 4d 49 4e 4d 41 58 20 20 20 30 78 31 30 30  C_MINMAX   0x100
10310 30 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 6d 69  0 /* True for mi
10320 6e 28 29 20 61 6e 64 20 6d 61 78 28 29 20 61 67  n() and max() ag
10330 67 72 65 67 61 74 65 73 20 2a 2f 0a 23 64 65 66  gregates */.#def
10340 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
10350 53 4c 4f 43 48 4e 47 20 20 30 78 32 30 30 30 20  SLOCHNG  0x2000 
10360 2f 2a 20 22 53 6c 6f 77 20 43 68 61 6e 67 65 22  /* "Slow Change"
10370 2e 20 56 61 6c 75 65 20 63 6f 6e 73 74 61 6e 74  . Value constant
10380 20 64 75 72 69 6e 67 20 61 0a 20 20 20 20 20 20   during a.      
10390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
103a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
103b0 20 73 69 6e 67 6c 65 20 71 75 65 72 79 20 2d 20   single query - 
103c0 6d 69 67 68 74 20 63 68 61 6e 67 65 20 6f 76 65  might change ove
103d0 72 20 74 69 6d 65 20 2a 2f 0a 23 64 65 66 69 6e  r time */.#defin
103e0 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 41 46  e SQLITE_FUNC_AF
103f0 46 49 4e 49 54 59 20 30 78 34 30 30 30 20 2f 2a  FINITY 0x4000 /*
10400 20 42 75 69 6c 74 2d 69 6e 20 61 66 66 69 6e 69   Built-in affini
10410 74 79 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  ty() function */
10420 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
10430 46 55 4e 43 5f 4f 46 46 53 45 54 20 20 20 30 78  FUNC_OFFSET   0x
10440 38 30 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e  8000 /* Built-in
10450 20 73 71 6c 69 74 65 5f 6f 66 66 73 65 74 28 29   sqlite_offset()
10460 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
10470 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
10480 5f 57 49 4e 44 4f 57 20 20 20 30 78 30 30 30 31  _WINDOW   0x0001
10490 30 30 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e  0000 /* Built-in
104a0 20 77 69 6e 64 6f 77 2d 6f 6e 6c 79 20 66 75 6e   window-only fun
104b0 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
104c0 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 49 4e 54   SQLITE_FUNC_INT
104d0 45 52 4e 41 4c 20 30 78 30 30 30 34 30 30 30 30  ERNAL 0x00040000
104e0 20 2f 2a 20 46 6f 72 20 75 73 65 20 62 79 20 4e   /* For use by N
104f0 65 73 74 65 64 50 61 72 73 65 28 29 20 6f 6e 6c  estedParse() onl
10500 79 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  y */../*.** The 
10510 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 72 65 65 20  following three 
10520 6d 61 63 72 6f 73 2c 20 46 55 4e 43 54 49 4f 4e  macros, FUNCTION
10530 28 29 2c 20 4c 49 4b 45 46 55 4e 43 28 29 20 61  (), LIKEFUNC() a
10540 6e 64 20 41 47 47 52 45 47 41 54 45 28 29 20 61  nd AGGREGATE() a
10550 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63 72  re.** used to cr
10560 65 61 74 65 20 74 68 65 20 69 6e 69 74 69 61 6c  eate the initial
10570 69 7a 65 72 73 20 66 6f 72 20 74 68 65 20 46 75  izers for the Fu
10580 6e 63 44 65 66 20 73 74 72 75 63 74 75 72 65 73  ncDef structures
10590 2e 0a 2a 2a 0a 2a 2a 20 20 20 46 55 4e 43 54 49  ..**.**   FUNCTI
105a0 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  ON(zName, nArg, 
105b0 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63  iArg, bNC, xFunc
105c0 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f  ).**     Used to
105d0 20 63 72 65 61 74 65 20 61 20 73 63 61 6c 61 72   create a scalar
105e0 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69   function defini
105f0 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74 69  tion of a functi
10600 6f 6e 20 7a 4e 61 6d 65 0a 2a 2a 20 20 20 20 20  on zName.**     
10610 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 43  implemented by C
10620 20 66 75 6e 63 74 69 6f 6e 20 78 46 75 6e 63 20   function xFunc 
10630 74 68 61 74 20 61 63 63 65 70 74 73 20 6e 41 72  that accepts nAr
10640 67 20 61 72 67 75 6d 65 6e 74 73 2e 20 54 68 65  g arguments. The
10650 0a 2a 2a 20 20 20 20 20 76 61 6c 75 65 20 70 61  .**     value pa
10660 73 73 65 64 20 61 73 20 69 41 72 67 20 69 73 20  ssed as iArg is 
10670 63 61 73 74 20 74 6f 20 61 20 28 76 6f 69 64 2a  cast to a (void*
10680 29 20 61 6e 64 20 6d 61 64 65 20 61 76 61 69 6c  ) and made avail
10690 61 62 6c 65 0a 2a 2a 20 20 20 20 20 61 73 20 74  able.**     as t
106a0 68 65 20 75 73 65 72 2d 64 61 74 61 20 28 73 71  he user-data (sq
106b0 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28  lite3_user_data(
106c0 29 29 20 66 6f 72 20 74 68 65 20 66 75 6e 63 74  )) for the funct
106d0 69 6f 6e 2e 20 49 66 0a 2a 2a 20 20 20 20 20 61  ion. If.**     a
106e0 72 67 75 6d 65 6e 74 20 62 4e 43 20 69 73 20 74  rgument bNC is t
106f0 72 75 65 2c 20 74 68 65 6e 20 74 68 65 20 53 51  rue, then the SQ
10700 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
10710 4c 4c 20 66 6c 61 67 20 69 73 20 73 65 74 2e 0a  LL flag is set..
10720 2a 2a 0a 2a 2a 20 20 20 56 46 55 4e 43 54 49 4f  **.**   VFUNCTIO
10730 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69  N(zName, nArg, i
10740 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29  Arg, bNC, xFunc)
10750 0a 2a 2a 20 20 20 20 20 4c 69 6b 65 20 46 55 4e  .**     Like FUN
10760 43 54 49 4f 4e 20 65 78 63 65 70 74 20 69 74 20  CTION except it 
10770 6f 6d 69 74 73 20 74 68 65 20 53 51 4c 49 54 45  omits the SQLITE
10780 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66  _FUNC_CONSTANT f
10790 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 44 46 55  lag..**.**   DFU
107a0 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
107b0 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
107c0 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 4c 69 6b  Func).**     Lik
107d0 65 20 46 55 4e 43 54 49 4f 4e 20 65 78 63 65 70  e FUNCTION excep
107e0 74 20 69 74 20 6f 6d 69 74 73 20 74 68 65 20 53  t it omits the S
107f0 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
10800 41 4e 54 20 66 6c 61 67 20 61 6e 64 0a 2a 2a 20  ANT flag and.** 
10810 20 20 20 20 61 64 64 73 20 74 68 65 20 53 51 4c      adds the SQL
10820 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47  ITE_FUNC_SLOCHNG
10830 20 66 6c 61 67 2e 20 20 55 73 65 64 20 66 6f 72   flag.  Used for
10840 20 64 61 74 65 20 26 20 74 69 6d 65 20 66 75 6e   date & time fun
10850 63 74 69 6f 6e 73 0a 2a 2a 20 20 20 20 20 61 6e  ctions.**     an
10860 64 20 66 75 6e 63 74 69 6f 6e 73 20 6c 69 6b 65  d functions like
10870 20 73 71 6c 69 74 65 5f 76 65 72 73 69 6f 6e 28   sqlite_version(
10880 29 20 74 68 61 74 20 63 61 6e 20 63 68 61 6e 67  ) that can chang
10890 65 2c 20 62 75 74 20 6e 6f 74 20 64 75 72 69 6e  e, but not durin
108a0 67 0a 2a 2a 20 20 20 20 20 61 20 73 69 6e 67 6c  g.**     a singl
108b0 65 20 71 75 65 72 79 2e 20 20 54 68 65 20 69 41  e query.  The iA
108c0 72 67 20 69 73 20 69 67 6e 6f 72 65 64 2e 20 20  rg is ignored.  
108d0 54 68 65 20 75 73 65 72 2d 64 61 74 61 20 69 73  The user-data is
108e0 20 61 6c 77 61 79 73 20 73 65 74 0a 2a 2a 20 20   always set.**  
108f0 20 20 20 74 6f 20 61 20 4e 55 4c 4c 20 70 6f 69     to a NULL poi
10900 6e 74 65 72 2e 20 20 54 68 65 20 62 4e 43 20 70  nter.  The bNC p
10910 61 72 61 6d 65 74 65 72 20 69 73 20 6e 6f 74 20  arameter is not 
10920 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 20 20 50 55  used..**.**   PU
10930 52 45 5f 44 41 54 45 28 7a 4e 61 6d 65 2c 20 6e  RE_DATE(zName, n
10940 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
10950 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 55 73  xFunc).**     Us
10960 65 64 20 66 6f 72 20 22 70 75 72 65 22 20 64 61  ed for "pure" da
10970 74 65 2f 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e  te/time function
10980 73 2c 20 74 68 69 73 20 6d 61 63 72 6f 20 69 73  s, this macro is
10990 20 6c 69 6b 65 20 44 46 55 4e 43 54 49 4f 4e 0a   like DFUNCTION.
109a0 2a 2a 20 20 20 20 20 65 78 63 65 70 74 20 74 68  **     except th
109b0 61 74 20 69 74 20 64 6f 65 73 20 73 65 74 20 74  at it does set t
109c0 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  he SQLITE_FUNC_C
109d0 4f 4e 53 54 41 4e 54 20 66 6c 61 67 73 2e 20 20  ONSTANT flags.  
109e0 69 41 72 67 20 69 73 0a 2a 2a 20 20 20 20 20 69  iArg is.**     i
109f0 67 6e 6f 72 65 64 20 61 6e 64 20 74 68 65 20 75  gnored and the u
10a00 73 65 72 2d 64 61 74 61 20 66 6f 72 20 74 68 65  ser-data for the
10a10 73 65 20 66 75 6e 63 74 69 6f 6e 73 20 69 73 20  se functions is 
10a20 73 65 74 20 74 6f 20 61 6e 20 0a 2a 2a 20 20 20  set to an .**   
10a30 20 20 61 72 62 69 74 72 61 72 79 20 6e 6f 6e 2d    arbitrary non-
10a40 4e 55 4c 4c 20 70 6f 69 6e 74 65 72 2e 20 20 54  NULL pointer.  T
10a50 68 65 20 62 4e 43 20 70 61 72 61 6d 65 74 65 72  he bNC parameter
10a60 20 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a   is not used..**
10a70 0a 2a 2a 20 20 20 41 47 47 52 45 47 41 54 45 28  .**   AGGREGATE(
10a80 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
10a90 67 2c 20 62 4e 43 2c 20 78 53 74 65 70 2c 20 78  g, bNC, xStep, x
10aa0 46 69 6e 61 6c 29 0a 2a 2a 20 20 20 20 20 55 73  Final).**     Us
10ab0 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 6e 20  ed to create an 
10ac0 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
10ad0 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 6d  on definition im
10ae0 70 6c 65 6d 65 6e 74 65 64 20 62 79 0a 2a 2a 20  plemented by.** 
10af0 20 20 20 20 74 68 65 20 43 20 66 75 6e 63 74 69      the C functi
10b00 6f 6e 73 20 78 53 74 65 70 20 61 6e 64 20 78 46  ons xStep and xF
10b10 69 6e 61 6c 2e 20 54 68 65 20 66 69 72 73 74 20  inal. The first 
10b20 66 6f 75 72 20 70 61 72 61 6d 65 74 65 72 73 0a  four parameters.
10b30 2a 2a 20 20 20 20 20 61 72 65 20 69 6e 74 65 72  **     are inter
10b40 70 72 65 74 65 64 20 69 6e 20 74 68 65 20 73 61  preted in the sa
10b50 6d 65 20 77 61 79 20 61 73 20 74 68 65 20 66 69  me way as the fi
10b60 72 73 74 20 34 20 70 61 72 61 6d 65 74 65 72 73  rst 4 parameters
10b70 20 74 6f 0a 2a 2a 20 20 20 20 20 46 55 4e 43 54   to.**     FUNCT
10b80 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 57  ION()..**.**   W
10b90 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
10ba0 6e 41 72 67 2c 20 69 41 72 67 2c 20 78 53 74 65  nArg, iArg, xSte
10bb0 70 2c 20 78 46 69 6e 61 6c 2c 20 78 56 61 6c 75  p, xFinal, xValu
10bc0 65 2c 20 78 49 6e 76 65 72 73 65 29 0a 2a 2a 20  e, xInverse).** 
10bd0 20 20 20 20 55 73 65 64 20 74 6f 20 63 72 65 61      Used to crea
10be0 74 65 20 61 6e 20 61 67 67 72 65 67 61 74 65 20  te an aggregate 
10bf0 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74  function definit
10c00 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20  ion implemented 
10c10 62 79 0a 2a 2a 20 20 20 20 20 74 68 65 20 43 20  by.**     the C 
10c20 66 75 6e 63 74 69 6f 6e 73 20 78 53 74 65 70 20  functions xStep 
10c30 61 6e 64 20 78 46 69 6e 61 6c 2e 20 54 68 65 20  and xFinal. The 
10c40 66 69 72 73 74 20 66 6f 75 72 20 70 61 72 61 6d  first four param
10c50 65 74 65 72 73 0a 2a 2a 20 20 20 20 20 61 72 65  eters.**     are
10c60 20 69 6e 74 65 72 70 72 65 74 65 64 20 69 6e 20   interpreted in 
10c70 74 68 65 20 73 61 6d 65 20 77 61 79 20 61 73 20  the same way as 
10c80 74 68 65 20 66 69 72 73 74 20 34 20 70 61 72 61  the first 4 para
10c90 6d 65 74 65 72 73 20 74 6f 0a 2a 2a 20 20 20 20  meters to.**    
10ca0 20 46 55 4e 43 54 49 4f 4e 28 29 2e 0a 2a 2a 0a   FUNCTION()..**.
10cb0 2a 2a 20 20 20 4c 49 4b 45 46 55 4e 43 28 7a 4e  **   LIKEFUNC(zN
10cc0 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c  ame, nArg, pArg,
10cd0 20 66 6c 61 67 73 29 0a 2a 2a 20 20 20 20 20 55   flags).**     U
10ce0 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20  sed to create a 
10cf0 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20  scalar function 
10d00 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20  definition of a 
10d10 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 0a 2a  function zName.*
10d20 2a 20 20 20 20 20 74 68 61 74 20 61 63 63 65 70  *     that accep
10d30 74 73 20 6e 41 72 67 20 61 72 67 75 6d 65 6e 74  ts nArg argument
10d40 73 20 61 6e 64 20 69 73 20 69 6d 70 6c 65 6d 65  s and is impleme
10d50 6e 74 65 64 20 62 79 20 61 20 63 61 6c 6c 20 74  nted by a call t
10d60 6f 20 43 0a 2a 2a 20 20 20 20 20 66 75 6e 63 74  o C.**     funct
10d70 69 6f 6e 20 6c 69 6b 65 46 75 6e 63 2e 20 41 72  ion likeFunc. Ar
10d80 67 75 6d 65 6e 74 20 70 41 72 67 20 69 73 20 63  gument pArg is c
10d90 61 73 74 20 74 6f 20 61 20 28 76 6f 69 64 20 2a  ast to a (void *
10da0 29 20 61 6e 64 20 6d 61 64 65 0a 2a 2a 20 20 20  ) and made.**   
10db0 20 20 61 76 61 69 6c 61 62 6c 65 20 61 73 20 74    available as t
10dc0 68 65 20 66 75 6e 63 74 69 6f 6e 20 75 73 65 72  he function user
10dd0 2d 64 61 74 61 20 28 73 71 6c 69 74 65 33 5f 75  -data (sqlite3_u
10de0 73 65 72 5f 64 61 74 61 28 29 29 2e 20 54 68 65  ser_data()). The
10df0 0a 2a 2a 20 20 20 20 20 46 75 6e 63 44 65 66 2e  .**     FuncDef.
10e00 66 6c 61 67 73 20 76 61 72 69 61 62 6c 65 20 69  flags variable i
10e10 73 20 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c  s set to the val
10e20 75 65 20 70 61 73 73 65 64 20 61 73 20 74 68 65  ue passed as the
10e30 20 66 6c 61 67 73 0a 2a 2a 20 20 20 20 20 70 61   flags.**     pa
10e40 72 61 6d 65 74 65 72 2e 0a 2a 2f 0a 23 64 65 66  rameter..*/.#def
10e50 69 6e 65 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61  ine FUNCTION(zNa
10e60 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
10e70 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20  bNC, xFunc) \.  
10e80 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55  {nArg, SQLITE_FU
10e90 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49  NC_CONSTANT|SQLI
10ea0 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c  TE_UTF8|(bNC*SQL
10eb0 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
10ec0 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f  L), \.   SQLITE_
10ed0 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29  INT_TO_PTR(iArg)
10ee0 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30  , 0, xFunc, 0, 0
10ef0 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d  , 0, #zName, {0}
10f00 20 7d 0a 23 64 65 66 69 6e 65 20 56 46 55 4e 43   }.#define VFUNC
10f10 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
10f20 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
10f30 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  nc) \.  {nArg, S
10f40 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a  QLITE_UTF8|(bNC*
10f50 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
10f60 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49  COLL), \.   SQLI
10f70 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41  TE_INT_TO_PTR(iA
10f80 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30  rg), 0, xFunc, 0
10f90 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20  , 0, 0, #zName, 
10fa0 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 44 46  {0} }.#define DF
10fb0 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
10fc0 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
10fd0 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67  xFunc) \.  {nArg
10fe0 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c  , SQLITE_FUNC_SL
10ff0 4f 43 48 4e 47 7c 53 51 4c 49 54 45 5f 55 54 46  OCHNG|SQLITE_UTF
11000 38 2c 20 5c 0a 20 20 20 30 2c 20 30 2c 20 78 46  8, \.   0, 0, xF
11010 75 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a  unc, 0, 0, 0, #z
11020 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66  Name, {0} }.#def
11030 69 6e 65 20 50 55 52 45 5f 44 41 54 45 28 7a 4e  ine PURE_DATE(zN
11040 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c  ame, nArg, iArg,
11050 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20   bNC, xFunc) \. 
11060 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46   {nArg, SQLITE_F
11070 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c 49  UNC_SLOCHNG|SQLI
11080 54 45 5f 55 54 46 38 7c 53 51 4c 49 54 45 5f 46  TE_UTF8|SQLITE_F
11090 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 2c 20 5c 0a  UNC_CONSTANT, \.
110a0 20 20 20 28 76 6f 69 64 2a 29 26 73 71 6c 69 74     (void*)&sqlit
110b0 65 33 43 6f 6e 66 69 67 2c 20 30 2c 20 78 46 75  e3Config, 0, xFu
110c0 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e  nc, 0, 0, 0, #zN
110d0 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69  ame, {0} }.#defi
110e0 6e 65 20 46 55 4e 43 54 49 4f 4e 32 28 7a 4e 61  ne FUNCTION2(zNa
110f0 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
11100 62 4e 43 2c 20 78 46 75 6e 63 2c 20 65 78 74 72  bNC, xFunc, extr
11110 61 46 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72  aFlags) \.  {nAr
11120 67 2c 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  g,SQLITE_FUNC_CO
11130 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54  NSTANT|SQLITE_UT
11140 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46  F8|(bNC*SQLITE_F
11150 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78  UNC_NEEDCOLL)|ex
11160 74 72 61 46 6c 61 67 73 2c 5c 0a 20 20 20 53 51  traFlags,\.   SQ
11170 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28  LITE_INT_TO_PTR(
11180 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c  iArg), 0, xFunc,
11190 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65   0, 0, 0, #zName
111a0 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20  , {0} }.#define 
111b0 53 54 52 5f 46 55 4e 43 54 49 4f 4e 28 7a 4e 61  STR_FUNCTION(zNa
111c0 6d 65 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c 20  me, nArg, pArg, 
111d0 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20  bNC, xFunc) \.  
111e0 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55  {nArg, SQLITE_FU
111f0 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c 49 54  NC_SLOCHNG|SQLIT
11200 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49  E_UTF8|(bNC*SQLI
11210 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
11220 29 2c 20 5c 0a 20 20 20 70 41 72 67 2c 20 30 2c  ), \.   pArg, 0,
11230 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 30 2c   xFunc, 0, 0, 0,
11240 20 23 7a 4e 61 6d 65 2c 20 7d 0a 23 64 65 66 69   #zName, }.#defi
11250 6e 65 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d  ne LIKEFUNC(zNam
11260 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 66 6c  e, nArg, arg, fl
11270 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  ags) \.  {nArg, 
11280 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
11290 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38  TANT|SQLITE_UTF8
112a0 7c 66 6c 61 67 73 2c 20 5c 0a 20 20 20 28 76 6f  |flags, \.   (vo
112b0 69 64 20 2a 29 61 72 67 2c 20 30 2c 20 6c 69 6b  id *)arg, 0, lik
112c0 65 46 75 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20  eFunc, 0, 0, 0, 
112d0 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64  #zName, {0} }.#d
112e0 65 66 69 6e 65 20 41 47 47 52 45 47 41 54 45 28  efine AGGREGATE(
112f0 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67  zName, nArg, arg
11300 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20 78 46 69  , nc, xStep, xFi
11310 6e 61 6c 2c 20 78 56 61 6c 75 65 29 20 5c 0a 20  nal, xValue) \. 
11320 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55   {nArg, SQLITE_U
11330 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46  TF8|(nc*SQLITE_F
11340 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c  UNC_NEEDCOLL), \
11350 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  .   SQLITE_INT_T
11360 4f 5f 50 54 52 28 61 72 67 29 2c 20 30 2c 20 78  O_PTR(arg), 0, x
11370 53 74 65 70 2c 78 46 69 6e 61 6c 2c 78 56 61 6c  Step,xFinal,xVal
11380 75 65 2c 30 2c 23 7a 4e 61 6d 65 2c 20 7b 30 7d  ue,0,#zName, {0}
11390 7d 0a 23 64 65 66 69 6e 65 20 41 47 47 52 45 47  }.#define AGGREG
113a0 41 54 45 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  ATE2(zName, nArg
113b0 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53 74 65 70  , arg, nc, xStep
113c0 2c 20 78 46 69 6e 61 6c 2c 20 65 78 74 72 61 46  , xFinal, extraF
113d0 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  lags) \.  {nArg,
113e0 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e 63   SQLITE_UTF8|(nc
113f0 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
11400 44 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67  DCOLL)|extraFlag
11410 73 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49  s, \.   SQLITE_I
11420 4e 54 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c 20  NT_TO_PTR(arg), 
11430 30 2c 20 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c  0, xStep,xFinal,
11440 78 46 69 6e 61 6c 2c 30 2c 23 7a 4e 61 6d 65 2c  xFinal,0,#zName,
11450 20 7b 30 7d 7d 0a 23 64 65 66 69 6e 65 20 57 41   {0}}.#define WA
11460 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20  GGREGATE(zName, 
11470 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78  nArg, arg, nc, x
11480 53 74 65 70 2c 20 78 46 69 6e 61 6c 2c 20 78 56  Step, xFinal, xV
11490 61 6c 75 65 2c 20 78 49 6e 76 65 72 73 65 2c 20  alue, xInverse, 
114a0 66 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51  f) \.  {nArg, SQ
114b0 4c 49 54 45 5f 55 54 46 38 7c 28 6e 63 2a 53 51  LITE_UTF8|(nc*SQ
114c0 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
114d0 4c 4c 29 7c 66 2c 20 5c 0a 20 20 20 53 51 4c 49  LL)|f, \.   SQLI
114e0 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72  TE_INT_TO_PTR(ar
114f0 67 29 2c 20 30 2c 20 78 53 74 65 70 2c 78 46 69  g), 0, xStep,xFi
11500 6e 61 6c 2c 78 56 61 6c 75 65 2c 78 49 6e 76 65  nal,xValue,xInve
11510 72 73 65 2c 23 7a 4e 61 6d 65 2c 20 7b 30 7d 7d  rse,#zName, {0}}
11520 0a 23 64 65 66 69 6e 65 20 49 4e 54 45 52 4e 41  .#define INTERNA
11530 4c 5f 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65  L_FUNCTION(zName
11540 2c 20 6e 41 72 67 2c 20 78 46 75 6e 63 29 20 5c  , nArg, xFunc) \
11550 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45  .  {nArg, SQLITE
11560 5f 46 55 4e 43 5f 49 4e 54 45 52 4e 41 4c 7c 53  _FUNC_INTERNAL|S
11570 51 4c 49 54 45 5f 55 54 46 38 7c 53 51 4c 49 54  QLITE_UTF8|SQLIT
11580 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 2c  E_FUNC_CONSTANT,
11590 20 5c 0a 20 20 20 30 2c 20 30 2c 20 78 46 75 6e   \.   0, 0, xFun
115a0 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61  c, 0, 0, 0, #zNa
115b0 6d 65 2c 20 7b 30 7d 20 7d 0a 0a 0a 2f 2a 0a 2a  me, {0} }.../*.*
115c0 2a 20 41 6c 6c 20 63 75 72 72 65 6e 74 20 73 61  * All current sa
115d0 76 65 70 6f 69 6e 74 73 20 61 72 65 20 73 74 6f  vepoints are sto
115e0 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 20  red in a linked 
115f0 6c 69 73 74 20 73 74 61 72 74 69 6e 67 20 61 74  list starting at
11600 0a 2a 2a 20 73 71 6c 69 74 65 33 2e 70 53 61 76  .** sqlite3.pSav
11610 65 70 6f 69 6e 74 2e 20 54 68 65 20 66 69 72 73  epoint. The firs
11620 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20 74 68 65  t element in the
11630 20 6c 69 73 74 20 69 73 20 74 68 65 20 6d 6f 73   list is the mos
11640 74 20 72 65 63 65 6e 74 6c 79 0a 2a 2a 20 6f 70  t recently.** op
11650 65 6e 65 64 20 73 61 76 65 70 6f 69 6e 74 2e 20  ened savepoint. 
11660 53 61 76 65 70 6f 69 6e 74 73 20 61 72 65 20 61  Savepoints are a
11670 64 64 65 64 20 74 6f 20 74 68 65 20 6c 69 73 74  dded to the list
11680 20 62 79 20 74 68 65 20 76 64 62 65 0a 2a 2a 20   by the vdbe.** 
11690 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73  OP_Savepoint ins
116a0 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72  truction..*/.str
116b0 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20 7b 0a  uct Savepoint {.
116c0 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
116d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
116e0 20 20 20 20 20 20 2f 2a 20 53 61 76 65 70 6f 69        /* Savepoi
116f0 6e 74 20 6e 61 6d 65 20 28 6e 75 6c 2d 74 65 72  nt name (nul-ter
11700 6d 69 6e 61 74 65 64 29 20 2a 2f 0a 20 20 69 36  minated) */.  i6
11710 34 20 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b  4 nDeferredCons;
11720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11730 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64    /* Number of d
11740 65 66 65 72 72 65 64 20 66 6b 20 76 69 6f 6c 61  eferred fk viola
11750 74 69 6f 6e 73 20 2a 2f 0a 20 20 69 36 34 20 6e  tions */.  i64 n
11760 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b  DeferredImmCons;
11770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
11780 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64 65 66 65  * Number of defe
11790 72 72 65 64 20 69 6d 6d 20 66 6b 2e 20 2a 2f 0a  rred imm fk. */.
117a0 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 4e 65    Savepoint *pNe
117b0 78 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  xt;             
117c0 20 20 20 20 20 20 2f 2a 20 50 61 72 65 6e 74 20        /* Parent 
117d0 73 61 76 65 70 6f 69 6e 74 20 28 69 66 20 61 6e  savepoint (if an
117e0 79 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  y) */.};../*.** 
117f0 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72  The following ar
11800 65 20 75 73 65 64 20 61 73 20 74 68 65 20 73 65  e used as the se
11810 63 6f 6e 64 20 70 61 72 61 6d 65 74 65 72 20 74  cond parameter t
11820 6f 20 73 71 6c 69 74 65 33 53 61 76 65 70 6f 69  o sqlite3Savepoi
11830 6e 74 28 29 2c 0a 2a 2a 20 61 6e 64 20 61 73 20  nt(),.** and as 
11840 74 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20  the P1 argument 
11850 74 6f 20 74 68 65 20 4f 50 5f 53 61 76 65 70 6f  to the OP_Savepo
11860 69 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  int instruction.
11870 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 41 56 45  .*/.#define SAVE
11880 50 4f 49 4e 54 5f 42 45 47 49 4e 20 20 20 20 20  POINT_BEGIN     
11890 20 30 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50   0.#define SAVEP
118a0 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 20 20 20  OINT_RELEASE    
118b0 31 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f  1.#define SAVEPO
118c0 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 20 20 32  INT_ROLLBACK   2
118d0 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51  .../*.** Each SQ
118e0 4c 69 74 65 20 6d 6f 64 75 6c 65 20 28 76 69 72  Lite module (vir
118f0 74 75 61 6c 20 74 61 62 6c 65 20 64 65 66 69 6e  tual table defin
11900 69 74 69 6f 6e 29 20 69 73 20 64 65 66 69 6e 65  ition) is define
11910 64 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61  d by an.** insta
11920 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
11930 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2c 20  wing structure, 
11940 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71  stored in the sq
11950 6c 69 74 65 33 2e 61 4d 6f 64 75 6c 65 0a 2a 2a  lite3.aModule.**
11960 20 68 61 73 68 20 74 61 62 6c 65 2e 0a 2a 2f 0a   hash table..*/.
11970 73 74 72 75 63 74 20 4d 6f 64 75 6c 65 20 7b 0a  struct Module {.
11980 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f    const sqlite3_
11990 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b  module *pModule;
119a0 20 20 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61         /* Callba
119b0 63 6b 20 70 6f 69 6e 74 65 72 73 20 2a 2f 0a 20  ck pointers */. 
119c0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61   const char *zNa
119d0 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  me;             
119e0 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 70 61        /* Name pa
119f0 73 73 65 64 20 74 6f 20 63 72 65 61 74 65 5f 6d  ssed to create_m
11a00 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69  odule() */.  voi
11a10 64 20 2a 70 41 75 78 3b 20 20 20 20 20 20 20 20  d *pAux;        
11a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a30 20 20 2f 2a 20 70 41 75 78 20 70 61 73 73 65 64    /* pAux passed
11a40 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c   to create_modul
11a50 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  e() */.  void (*
11a60 78 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a  xDestroy)(void *
11a70 29 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  );            /*
11a80 20 4d 6f 64 75 6c 65 20 64 65 73 74 72 75 63 74   Module destruct
11a90 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  or function */. 
11aa0 20 54 61 62 6c 65 20 2a 70 45 70 6f 54 61 62 3b   Table *pEpoTab;
11ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ac0 20 20 20 20 20 20 2f 2a 20 45 70 6f 6e 79 6d 6f        /* Eponymo
11ad0 75 73 20 74 61 62 6c 65 20 66 6f 72 20 74 68 69  us table for thi
11ae0 73 20 6d 6f 64 75 6c 65 20 2a 2f 0a 7d 3b 0a 0a  s module */.};..
11af0 2f 2a 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f  /*.** informatio
11b00 6e 20 61 62 6f 75 74 20 65 61 63 68 20 63 6f 6c  n about each col
11b10 75 6d 6e 20 6f 66 20 61 6e 20 53 51 4c 20 74 61  umn of an SQL ta
11b20 62 6c 65 20 69 73 20 68 65 6c 64 20 69 6e 20 61  ble is held in a
11b30 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66  n instance.** of
11b40 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e   this structure.
11b50 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c 75 6d  .*/.struct Colum
11b60 6e 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  n {.  char *zNam
11b70 65 3b 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f  e;     /* Name o
11b80 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2c 20 5c  f this column, \
11b90 30 30 30 2c 20 74 68 65 6e 20 74 68 65 20 74 79  000, then the ty
11ba0 70 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 44  pe */.  Expr *pD
11bb0 66 6c 74 3b 20 20 20 20 20 2f 2a 20 44 65 66 61  flt;     /* Defa
11bc0 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 74 68 69  ult value of thi
11bd0 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68  s column */.  ch
11be0 61 72 20 2a 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f  ar *zColl;     /
11bf0 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  * Collating sequ
11c00 65 6e 63 65 2e 20 20 49 66 20 4e 55 4c 4c 2c 20  ence.  If NULL, 
11c10 75 73 65 20 74 68 65 20 64 65 66 61 75 6c 74 20  use the default 
11c20 2a 2f 0a 20 20 75 38 20 6e 6f 74 4e 75 6c 6c 3b  */.  u8 notNull;
11c30 20 20 20 20 20 20 2f 2a 20 41 6e 20 4f 45 5f 20        /* An OE_ 
11c40 63 6f 64 65 20 66 6f 72 20 68 61 6e 64 6c 69 6e  code for handlin
11c50 67 20 61 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e  g a NOT NULL con
11c60 73 74 72 61 69 6e 74 20 2a 2f 0a 20 20 63 68 61  straint */.  cha
11c70 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a  r affinity;   /*
11c80 20 4f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c 49   One of the SQLI
11c90 54 45 5f 41 46 46 5f 2e 2e 2e 20 76 61 6c 75 65  TE_AFF_... value
11ca0 73 20 2a 2f 0a 20 20 75 38 20 73 7a 45 73 74 3b  s */.  u8 szEst;
11cb0 20 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d          /* Estim
11cc0 61 74 65 64 20 73 69 7a 65 20 6f 66 20 76 61 6c  ated size of val
11cd0 75 65 20 69 6e 20 74 68 69 73 20 63 6f 6c 75 6d  ue in this colum
11ce0 6e 2e 20 73 69 7a 65 6f 66 28 49 4e 54 29 3d 3d  n. sizeof(INT)==
11cf0 31 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 46 6c 61  1 */.  u8 colFla
11d00 67 73 3b 20 20 20 20 20 2f 2a 20 42 6f 6f 6c 65  gs;     /* Boole
11d10 61 6e 20 70 72 6f 70 65 72 74 69 65 73 2e 20 20  an properties.  
11d20 53 65 65 20 43 4f 4c 46 4c 41 47 5f 20 64 65 66  See COLFLAG_ def
11d30 69 6e 65 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b  ines below */.};
11d40 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  ../* Allowed val
11d50 75 65 73 20 66 6f 72 20 43 6f 6c 75 6d 6e 2e 63  ues for Column.c
11d60 6f 6c 46 6c 61 67 73 3a 0a 2a 2f 0a 23 64 65 66  olFlags:.*/.#def
11d70 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 50 52 49 4d  ine COLFLAG_PRIM
11d80 4b 45 59 20 20 30 78 30 30 30 31 20 20 20 20 2f  KEY  0x0001    /
11d90 2a 20 43 6f 6c 75 6d 6e 20 69 73 20 70 61 72 74  * Column is part
11da0 20 6f 66 20 74 68 65 20 70 72 69 6d 61 72 79 20   of the primary 
11db0 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43  key */.#define C
11dc0 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 20 20 20  OLFLAG_HIDDEN   
11dd0 30 78 30 30 30 32 20 20 20 20 2f 2a 20 41 20 68  0x0002    /* A h
11de0 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 69 6e 20  idden column in 
11df0 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
11e00 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c  */.#define COLFL
11e10 41 47 5f 48 41 53 54 59 50 45 20 20 30 78 30 30  AG_HASTYPE  0x00
11e20 30 34 20 20 20 20 2f 2a 20 54 79 70 65 20 6e 61  04    /* Type na
11e30 6d 65 20 66 6f 6c 6c 6f 77 73 20 63 6f 6c 75 6d  me follows colum
11e40 6e 20 6e 61 6d 65 20 2a 2f 0a 23 64 65 66 69 6e  n name */.#defin
11e50 65 20 43 4f 4c 46 4c 41 47 5f 55 4e 49 51 55 45  e COLFLAG_UNIQUE
11e60 20 20 20 30 78 30 30 30 38 20 20 20 20 2f 2a 20     0x0008    /* 
11e70 43 6f 6c 75 6d 6e 20 64 65 66 20 63 6f 6e 74 61  Column def conta
11e80 69 6e 73 20 22 55 4e 49 51 55 45 22 20 6f 72 20  ins "UNIQUE" or 
11e90 22 50 4b 22 20 2a 2f 0a 23 64 65 66 69 6e 65 20  "PK" */.#define 
11ea0 43 4f 4c 46 4c 41 47 5f 53 4f 52 54 45 52 52 45  COLFLAG_SORTERRE
11eb0 46 20 30 78 30 30 31 30 20 20 20 2f 2a 20 55 73  F 0x0010   /* Us
11ec0 65 20 73 6f 72 74 65 72 2d 72 65 66 73 20 77 69  e sorter-refs wi
11ed0 74 68 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a  th this column *
11ee0 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 22 43 6f 6c 6c  /../*.** A "Coll
11ef0 61 74 69 6e 67 20 53 65 71 75 65 6e 63 65 22 20  ating Sequence" 
11f00 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e  is defined by an
11f10 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
11f20 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74   following.** st
11f30 72 75 63 74 75 72 65 2e 20 43 6f 6e 63 65 70 74  ructure. Concept
11f40 75 61 6c 6c 79 2c 20 61 20 63 6f 6c 6c 61 74 69  ually, a collati
11f50 6e 67 20 73 65 71 75 65 6e 63 65 20 63 6f 6e 73  ng sequence cons
11f60 69 73 74 73 20 6f 66 20 61 20 6e 61 6d 65 20 61  ists of a name a
11f70 6e 64 0a 2a 2a 20 61 20 63 6f 6d 70 61 72 69 73  nd.** a comparis
11f80 6f 6e 20 72 6f 75 74 69 6e 65 20 74 68 61 74 20  on routine that 
11f90 64 65 66 69 6e 65 73 20 74 68 65 20 6f 72 64 65  defines the orde
11fa0 72 20 6f 66 20 74 68 61 74 20 73 65 71 75 65 6e  r of that sequen
11fb0 63 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 43 6f 6c  ce..**.** If Col
11fc0 6c 53 65 71 2e 78 43 6d 70 20 69 73 20 4e 55 4c  lSeq.xCmp is NUL
11fd0 4c 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74  L, it means that
11fe0 20 74 68 65 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e   the.** collatin
11ff0 67 20 73 65 71 75 65 6e 63 65 20 69 73 20 75 6e  g sequence is un
12000 64 65 66 69 6e 65 64 2e 20 20 49 6e 64 69 63 65  defined.  Indice
12010 73 20 62 75 69 6c 74 20 6f 6e 20 61 6e 20 75 6e  s built on an un
12020 64 65 66 69 6e 65 64 0a 2a 2a 20 63 6f 6c 6c 61  defined.** colla
12030 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 6d 61  ting sequence ma
12040 79 20 6e 6f 74 20 62 65 20 72 65 61 64 20 6f 72  y not be read or
12050 20 77 72 69 74 74 65 6e 2e 0a 2a 2f 0a 73 74 72   written..*/.str
12060 75 63 74 20 43 6f 6c 6c 53 65 71 20 7b 0a 20 20  uct CollSeq {.  
12070 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
12080 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
12090 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73   the collating s
120a0 65 71 75 65 6e 63 65 2c 20 55 54 46 2d 38 20 65  equence, UTF-8 e
120b0 6e 63 6f 64 65 64 20 2a 2f 0a 20 20 75 38 20 65  ncoded */.  u8 e
120c0 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nc;             
120d0 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69    /* Text encodi
120e0 6e 67 20 68 61 6e 64 6c 65 64 20 62 79 20 78 43  ng handled by xC
120f0 6d 70 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  mp() */.  void *
12100 70 55 73 65 72 3b 20 20 20 20 20 20 20 20 20 20  pUser;          
12110 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e  /* First argumen
12120 74 20 74 6f 20 78 43 6d 70 28 29 20 2a 2f 0a 20  t to xCmp() */. 
12130 20 69 6e 74 20 28 2a 78 43 6d 70 29 28 76 6f 69   int (*xCmp)(voi
12140 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f  d*,int, const vo
12150 69 64 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20  id*, int, const 
12160 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20 28  void*);.  void (
12170 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29 3b 20 20  *xDel)(void*);  
12180 2f 2a 20 44 65 73 74 72 75 63 74 6f 72 20 66 6f  /* Destructor fo
12190 72 20 70 55 73 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f  r pUser */.};../
121a0 2a 0a 2a 2a 20 41 20 73 6f 72 74 20 6f 72 64 65  *.** A sort orde
121b0 72 20 63 61 6e 20 62 65 20 65 69 74 68 65 72 20  r can be either 
121c0 41 53 43 20 6f 72 20 44 45 53 43 2e 0a 2a 2f 0a  ASC or DESC..*/.
121d0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
121e0 4f 5f 41 53 43 20 20 20 20 20 20 20 30 20 20 2f  O_ASC       0  /
121f0 2a 20 53 6f 72 74 20 69 6e 20 61 73 63 65 6e 64  * Sort in ascend
12200 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65  ing order */.#de
12210 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 44  fine SQLITE_SO_D
12220 45 53 43 20 20 20 20 20 20 31 20 20 2f 2a 20 53  ESC      1  /* S
12230 6f 72 74 20 69 6e 20 61 73 63 65 6e 64 69 6e 67  ort in ascending
12240 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66 69 6e   order */.#defin
12250 65 20 53 51 4c 49 54 45 5f 53 4f 5f 55 4e 44 45  e SQLITE_SO_UNDE
12260 46 49 4e 45 44 20 2d 31 20 2f 2a 20 4e 6f 20 73  FINED -1 /* No s
12270 6f 72 74 20 6f 72 64 65 72 20 73 70 65 63 69 66  ort order specif
12280 69 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f  ied */../*.** Co
12290 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 79  lumn affinity ty
122a0 70 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 73 65  pes..**.** These
122b0 20 75 73 65 64 20 74 6f 20 68 61 76 65 20 6d 6e   used to have mn
122c0 65 6d 6f 6e 69 63 20 6e 61 6d 65 20 6c 69 6b 65  emonic name like
122d0 20 27 69 27 20 66 6f 72 20 53 51 4c 49 54 45 5f   'i' for SQLITE_
122e0 41 46 46 5f 49 4e 54 45 47 45 52 20 61 6e 64 0a  AFF_INTEGER and.
122f0 2a 2a 20 27 74 27 20 66 6f 72 20 53 51 4c 49 54  ** 't' for SQLIT
12300 45 5f 41 46 46 5f 54 45 58 54 2e 20 20 42 75 74  E_AFF_TEXT.  But
12310 20 77 65 20 63 61 6e 20 73 61 76 65 20 61 20 6c   we can save a l
12320 69 74 74 6c 65 20 73 70 61 63 65 20 61 6e 64 20  ittle space and 
12330 69 6d 70 72 6f 76 65 0a 2a 2a 20 74 68 65 20 73  improve.** the s
12340 70 65 65 64 20 61 20 6c 69 74 74 6c 65 20 62 79  peed a little by
12350 20 6e 75 6d 62 65 72 69 6e 67 20 74 68 65 20 76   numbering the v
12360 61 6c 75 65 73 20 63 6f 6e 73 65 63 75 74 69 76  alues consecutiv
12370 65 6c 79 2e 0a 2a 2a 0a 2a 2a 20 42 75 74 20 72  ely..**.** But r
12380 61 74 68 65 72 20 74 68 61 6e 20 73 74 61 72 74  ather than start
12390 20 77 69 74 68 20 30 20 6f 72 20 31 2c 20 77 65   with 0 or 1, we
123a0 20 62 65 67 69 6e 20 77 69 74 68 20 27 41 27 2e   begin with 'A'.
123b0 20 20 54 68 61 74 20 77 61 79 2c 0a 2a 2a 20 77    That way,.** w
123c0 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20 61 66 66  hen multiple aff
123d0 69 6e 69 74 79 20 74 79 70 65 73 20 61 72 65 20  inity types are 
123e0 63 6f 6e 63 61 74 65 6e 61 74 65 64 20 69 6e 74  concatenated int
123f0 6f 20 61 20 73 74 72 69 6e 67 20 61 6e 64 0a 2a  o a string and.*
12400 2a 20 75 73 65 64 20 61 73 20 74 68 65 20 50 34  * used as the P4
12410 20 6f 70 65 72 61 6e 64 2c 20 74 68 65 79 20 77   operand, they w
12420 69 6c 6c 20 62 65 20 6d 6f 72 65 20 72 65 61 64  ill be more read
12430 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65  able..**.** Note
12440 20 61 6c 73 6f 20 74 68 61 74 20 74 68 65 20 6e   also that the n
12450 75 6d 65 72 69 63 20 74 79 70 65 73 20 61 72 65  umeric types are
12460 20 67 72 6f 75 70 65 64 20 74 6f 67 65 74 68 65   grouped togethe
12470 72 20 73 6f 20 74 68 61 74 20 74 65 73 74 69 6e  r so that testin
12480 67 0a 2a 2a 20 66 6f 72 20 61 20 6e 75 6d 65 72  g.** for a numer
12490 69 63 20 74 79 70 65 20 69 73 20 61 20 73 69 6e  ic type is a sin
124a0 67 6c 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  gle comparison. 
124b0 20 41 6e 64 20 74 68 65 20 42 4c 4f 42 20 74 79   And the BLOB ty
124c0 70 65 20 69 73 20 66 69 72 73 74 2e 0a 2a 2f 0a  pe is first..*/.
124d0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
124e0 46 46 5f 42 4c 4f 42 20 20 20 20 20 27 41 27 0a  FF_BLOB     'A'.
124f0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
12500 46 46 5f 54 45 58 54 20 20 20 20 20 27 42 27 0a  FF_TEXT     'B'.
12510 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
12520 46 46 5f 4e 55 4d 45 52 49 43 20 20 27 43 27 0a  FF_NUMERIC  'C'.
12530 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
12540 46 46 5f 49 4e 54 45 47 45 52 20 20 27 44 27 0a  FF_INTEGER  'D'.
12550 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
12560 46 46 5f 52 45 41 4c 20 20 20 20 20 27 45 27 0a  FF_REAL     'E'.
12570 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  .#define sqlite3
12580 49 73 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  IsNumericAffinit
12590 79 28 58 29 20 20 28 28 58 29 3e 3d 53 51 4c 49  y(X)  ((X)>=SQLI
125a0 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 29 0a  TE_AFF_NUMERIC).
125b0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54  ./*.** The SQLIT
125c0 45 5f 41 46 46 5f 4d 41 53 4b 20 76 61 6c 75 65  E_AFF_MASK value
125d0 73 20 6d 61 73 6b 73 20 6f 66 66 20 74 68 65 20  s masks off the 
125e0 73 69 67 6e 69 66 69 63 61 6e 74 20 62 69 74 73  significant bits
125f0 20 6f 66 20 61 6e 0a 2a 2a 20 61 66 66 69 6e 69   of an.** affini
12600 74 79 20 76 61 6c 75 65 2e 0a 2a 2f 0a 23 64 65  ty value..*/.#de
12610 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
12620 4d 41 53 4b 20 20 20 20 20 30 78 34 37 0a 0a 2f  MASK     0x47../
12630 2a 0a 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20  *.** Additional 
12640 62 69 74 20 76 61 6c 75 65 73 20 74 68 61 74 20  bit values that 
12650 63 61 6e 20 62 65 20 4f 52 65 64 20 77 69 74 68  can be ORed with
12660 20 61 6e 20 61 66 66 69 6e 69 74 79 20 77 69 74   an affinity wit
12670 68 6f 75 74 0a 2a 2a 20 63 68 61 6e 67 69 6e 67  hout.** changing
12680 20 74 68 65 20 61 66 66 69 6e 69 74 79 2e 0a 2a   the affinity..*
12690 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f  *.** The SQLITE_
126a0 4e 4f 54 4e 55 4c 4c 20 66 6c 61 67 20 69 73 20  NOTNULL flag is 
126b0 61 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66  a combination of
126c0 20 4e 55 4c 4c 45 51 20 61 6e 64 20 4a 55 4d 50   NULLEQ and JUMP
126d0 49 46 4e 55 4c 4c 2e 0a 2a 2a 20 49 74 20 63 61  IFNULL..** It ca
126e0 75 73 65 73 20 61 6e 20 61 73 73 65 72 74 28 29  uses an assert()
126f0 20 74 6f 20 66 69 72 65 20 69 66 20 65 69 74 68   to fire if eith
12700 65 72 20 6f 70 65 72 61 6e 64 20 74 6f 20 61 20  er operand to a 
12710 63 6f 6d 70 61 72 69 73 6f 6e 0a 2a 2a 20 6f 70  comparison.** op
12720 65 72 61 74 6f 72 20 69 73 20 4e 55 4c 4c 2e 20  erator is NULL. 
12730 20 49 74 20 69 73 20 61 64 64 65 64 20 74 6f 20   It is added to 
12740 63 65 72 74 61 69 6e 20 63 6f 6d 70 61 72 69 73  certain comparis
12750 6f 6e 20 6f 70 65 72 61 74 6f 72 73 20 74 6f 0a  on operators to.
12760 2a 2a 20 70 72 6f 76 65 20 74 68 61 74 20 74 68  ** prove that th
12770 65 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 61  e operands are a
12780 6c 77 61 79 73 20 4e 4f 54 20 4e 55 4c 4c 2e 0a  lways NOT NULL..
12790 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
127a0 45 5f 4b 45 45 50 4e 55 4c 4c 20 20 20 20 20 30  E_KEEPNULL     0
127b0 78 30 38 20 20 2f 2a 20 55 73 65 64 20 62 79 20  x08  /* Used by 
127c0 76 65 63 74 6f 72 20 3d 3d 20 6f 72 20 3c 3e 20  vector == or <> 
127d0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
127e0 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 20 20 30  E_JUMPIFNULL   0
127f0 78 31 30 20 20 2f 2a 20 6a 75 6d 70 73 20 69 66  x10  /* jumps if
12800 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20   either operand 
12810 69 73 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69  is NULL */.#defi
12820 6e 65 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50  ne SQLITE_STOREP
12830 32 20 20 20 20 20 20 30 78 32 30 20 20 2f 2a 20  2      0x20  /* 
12840 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20  Store result in 
12850 72 65 67 5b 50 32 5d 20 72 61 74 68 65 72 20 74  reg[P2] rather t
12860 68 61 6e 20 6a 75 6d 70 20 2a 2f 0a 23 64 65 66  han jump */.#def
12870 69 6e 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45  ine SQLITE_NULLE
12880 51 20 20 20 20 20 20 20 30 78 38 30 20 20 2f 2a  Q       0x80  /*
12890 20 4e 55 4c 4c 3d 4e 55 4c 4c 20 2a 2f 0a 23 64   NULL=NULL */.#d
128a0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 54  efine SQLITE_NOT
128b0 4e 55 4c 4c 20 20 20 20 20 20 30 78 39 30 20 20  NULL      0x90  
128c0 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 6f  /* Assert that o
128d0 70 65 72 61 6e 64 73 20 61 72 65 20 6e 65 76 65  perands are neve
128e0 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  r NULL */../*.**
128f0 20 41 6e 20 6f 62 6a 65 63 74 20 6f 66 20 74 68   An object of th
12900 69 73 20 74 79 70 65 20 69 73 20 63 72 65 61 74  is type is creat
12910 65 64 20 66 6f 72 20 65 61 63 68 20 76 69 72 74  ed for each virt
12920 75 61 6c 20 74 61 62 6c 65 20 70 72 65 73 65 6e  ual table presen
12930 74 20 69 6e 0a 2a 2a 20 74 68 65 20 64 61 74 61  t in.** the data
12940 62 61 73 65 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a  base schema..**.
12950 2a 2a 20 49 66 20 74 68 65 20 64 61 74 61 62 61  ** If the databa
12960 73 65 20 73 63 68 65 6d 61 20 69 73 20 73 68 61  se schema is sha
12970 72 65 64 2c 20 74 68 65 6e 20 74 68 65 72 65 20  red, then there 
12980 69 73 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20  is one instance 
12990 6f 66 20 74 68 69 73 0a 2a 2a 20 73 74 72 75 63  of this.** struc
129a0 74 75 72 65 20 66 6f 72 20 65 61 63 68 20 64 61  ture for each da
129b0 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
129c0 6e 20 28 73 71 6c 69 74 65 33 2a 29 20 74 68 61  n (sqlite3*) tha
129d0 74 20 75 73 65 73 20 74 68 65 20 73 68 61 72 65  t uses the share
129e0 64 0a 2a 2a 20 73 63 68 65 6d 61 2e 20 54 68 69  d.** schema. Thi
129f0 73 20 69 73 20 62 65 63 61 75 73 65 20 65 61 63  s is because eac
12a00 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  h database conne
12a10 63 74 69 6f 6e 20 72 65 71 75 69 72 65 73 20 69  ction requires i
12a20 74 73 20 6f 77 6e 20 75 6e 69 71 75 65 0a 2a 2a  ts own unique.**
12a30 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
12a40 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68   sqlite3_vtab* h
12a50 61 6e 64 6c 65 20 75 73 65 64 20 74 6f 20 61 63  andle used to ac
12a60 63 65 73 73 20 74 68 65 20 76 69 72 74 75 61 6c  cess the virtual
12a70 20 74 61 62 6c 65 0a 2a 2a 20 69 6d 70 6c 65 6d   table.** implem
12a80 65 6e 74 61 74 69 6f 6e 2e 20 73 71 6c 69 74 65  entation. sqlite
12a90 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20  3_vtab* handles 
12aa0 63 61 6e 20 6e 6f 74 20 62 65 20 73 68 61 72 65  can not be share
12ab0 64 20 62 65 74 77 65 65 6e 0a 2a 2a 20 64 61 74  d between.** dat
12ac0 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
12ad0 73 2c 20 65 76 65 6e 20 77 68 65 6e 20 74 68 65  s, even when the
12ae0 20 72 65 73 74 20 6f 66 20 74 68 65 20 69 6e 2d   rest of the in-
12af0 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65 0a  memory database.
12b00 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 73 68 61  ** schema is sha
12b10 72 65 64 2c 20 61 73 20 74 68 65 20 69 6d 70 6c  red, as the impl
12b20 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 74 65 6e  ementation often
12b30 20 73 74 6f 72 65 73 20 74 68 65 20 64 61 74 61   stores the data
12b40 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69  base.** connecti
12b50 6f 6e 20 68 61 6e 64 6c 65 20 70 61 73 73 65 64  on handle passed
12b60 20 74 6f 20 69 74 20 76 69 61 20 74 68 65 20 78   to it via the x
12b70 43 6f 6e 6e 65 63 74 28 29 20 6f 72 20 78 43 72  Connect() or xCr
12b80 65 61 74 65 28 29 20 6d 65 74 68 6f 64 0a 2a 2a  eate() method.**
12b90 20 64 75 72 69 6e 67 20 69 6e 69 74 69 61 6c 69   during initiali
12ba0 7a 61 74 69 6f 6e 20 69 6e 74 65 72 6e 61 6c 6c  zation internall
12bb0 79 2e 20 54 68 69 73 20 64 61 74 61 62 61 73 65  y. This database
12bc0 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64   connection hand
12bd0 6c 65 20 6d 61 79 0a 2a 2a 20 74 68 65 6e 20 62  le may.** then b
12be0 65 20 75 73 65 64 20 62 79 20 74 68 65 20 76 69  e used by the vi
12bf0 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c  rtual table impl
12c00 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20 61 63  ementation to ac
12c10 63 65 73 73 20 72 65 61 6c 20 74 61 62 6c 65 73  cess real tables
12c20 0a 2a 2a 20 77 69 74 68 69 6e 20 74 68 65 20 64  .** within the d
12c30 61 74 61 62 61 73 65 2e 20 53 6f 20 74 68 61 74  atabase. So that
12c40 20 74 68 65 79 20 61 70 70 65 61 72 20 61 73 20   they appear as 
12c50 70 61 72 74 20 6f 66 20 74 68 65 20 63 61 6c 6c  part of the call
12c60 65 72 73 0a 2a 2a 20 74 72 61 6e 73 61 63 74 69  ers.** transacti
12c70 6f 6e 2c 20 74 68 65 73 65 20 61 63 63 65 73 73  on, these access
12c80 65 73 20 6e 65 65 64 20 74 6f 20 62 65 20 6d 61  es need to be ma
12c90 64 65 20 76 69 61 20 74 68 65 20 73 61 6d 65 20  de via the same 
12ca0 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e  database.** conn
12cb0 65 63 74 69 6f 6e 20 61 73 20 74 68 61 74 20 75  ection as that u
12cc0 73 65 64 20 74 6f 20 65 78 65 63 75 74 65 20 53  sed to execute S
12cd0 51 4c 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f 6e  QL operations on
12ce0 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
12cf0 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 56 54  le..**.** All VT
12d00 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 74 68 61  able objects tha
12d10 74 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20  t correspond to 
12d20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 69  a single table i
12d30 6e 20 61 20 73 68 61 72 65 64 0a 2a 2a 20 64 61  n a shared.** da
12d40 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 61 72  tabase schema ar
12d50 65 20 69 6e 69 74 69 61 6c 6c 79 20 73 74 6f 72  e initially stor
12d60 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 2d 6c  ed in a linked-l
12d70 69 73 74 20 70 6f 69 6e 74 65 64 20 74 6f 20 62  ist pointed to b
12d80 79 0a 2a 2a 20 74 68 65 20 54 61 62 6c 65 2e 70  y.** the Table.p
12d90 56 54 61 62 6c 65 20 6d 65 6d 62 65 72 20 76 61  VTable member va
12da0 72 69 61 62 6c 65 20 6f 66 20 74 68 65 20 63 6f  riable of the co
12db0 72 72 65 73 70 6f 6e 64 69 6e 67 20 54 61 62 6c  rresponding Tabl
12dc0 65 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 57 68 65  e object..** Whe
12dd0 6e 20 61 6e 20 73 71 6c 69 74 65 33 5f 70 72 65  n an sqlite3_pre
12de0 70 61 72 65 28 29 20 6f 70 65 72 61 74 69 6f 6e  pare() operation
12df0 20 69 73 20 72 65 71 75 69 72 65 64 20 74 6f 20   is required to 
12e00 61 63 63 65 73 73 20 74 68 65 20 76 69 72 74 75  access the virtu
12e10 61 6c 0a 2a 2a 20 74 61 62 6c 65 2c 20 69 74 20  al.** table, it 
12e20 73 65 61 72 63 68 65 73 20 74 68 65 20 6c 69 73  searches the lis
12e30 74 20 66 6f 72 20 74 68 65 20 56 54 61 62 6c 65  t for the VTable
12e40 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64   that correspond
12e50 73 20 74 6f 20 74 68 65 0a 2a 2a 20 64 61 74 61  s to the.** data
12e60 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
12e70 64 6f 69 6e 67 20 74 68 65 20 70 72 65 70 61 72  doing the prepar
12e80 69 6e 67 20 73 6f 20 61 73 20 74 6f 20 75 73 65  ing so as to use
12e90 20 74 68 65 20 63 6f 72 72 65 63 74 0a 2a 2a 20   the correct.** 
12ea0 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61  sqlite3_vtab* ha
12eb0 6e 64 6c 65 20 69 6e 20 74 68 65 20 63 6f 6d 70  ndle in the comp
12ec0 69 6c 65 64 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a  iled query..**.*
12ed0 2a 20 57 68 65 6e 20 61 6e 20 69 6e 2d 6d 65 6d  * When an in-mem
12ee0 6f 72 79 20 54 61 62 6c 65 20 6f 62 6a 65 63 74  ory Table object
12ef0 20 69 73 20 64 65 6c 65 74 65 64 20 28 66 6f 72   is deleted (for
12f00 20 65 78 61 6d 70 6c 65 20 77 68 65 6e 20 74 68   example when th
12f10 65 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 62  e.** schema is b
12f20 65 69 6e 67 20 72 65 6c 6f 61 64 65 64 20 66 6f  eing reloaded fo
12f30 72 20 73 6f 6d 65 20 72 65 61 73 6f 6e 29 2c 20  r some reason), 
12f40 74 68 65 20 56 54 61 62 6c 65 20 6f 62 6a 65 63  the VTable objec
12f50 74 73 20 61 72 65 20 6e 6f 74 0a 2a 2a 20 64 65  ts are not.** de
12f60 6c 65 74 65 64 20 61 6e 64 20 74 68 65 20 73 71  leted and the sq
12f70 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64  lite3_vtab* hand
12f80 6c 65 73 20 61 72 65 20 6e 6f 74 20 78 44 69 73  les are not xDis
12f90 63 6f 6e 6e 65 63 74 28 29 65 64 0a 2a 2a 20 69  connect()ed.** i
12fa0 6d 6d 65 64 69 61 74 65 6c 79 2e 20 49 6e 73 74  mmediately. Inst
12fb0 65 61 64 2c 20 74 68 65 79 20 61 72 65 20 6d 6f  ead, they are mo
12fc0 76 65 64 20 66 72 6f 6d 20 74 68 65 20 54 61 62  ved from the Tab
12fd0 6c 65 2e 70 56 54 61 62 6c 65 20 6c 69 73 74 20  le.pVTable list 
12fe0 74 6f 0a 2a 2a 20 61 6e 6f 74 68 65 72 20 6c 69  to.** another li
12ff0 6e 6b 65 64 20 6c 69 73 74 20 68 65 61 64 65 64  nked list headed
13000 20 62 79 20 74 68 65 20 73 71 6c 69 74 65 33 2e   by the sqlite3.
13010 70 44 69 73 63 6f 6e 6e 65 63 74 20 6d 65 6d 62  pDisconnect memb
13020 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 63 6f 72  er of the.** cor
13030 72 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74  responding sqlit
13040 65 33 20 73 74 72 75 63 74 75 72 65 2e 20 54 68  e3 structure. Th
13050 65 79 20 61 72 65 20 74 68 65 6e 20 64 65 6c 65  ey are then dele
13060 74 65 64 2f 78 44 69 73 63 6f 6e 6e 65 63 74 65  ted/xDisconnecte
13070 64 0a 2a 2a 20 6e 65 78 74 20 74 69 6d 65 20 61  d.** next time a
13080 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 70 72   statement is pr
13090 65 70 61 72 65 64 20 75 73 69 6e 67 20 73 61 69  epared using sai
130a0 64 20 73 71 6c 69 74 65 33 2a 2e 20 54 68 69 73  d sqlite3*. This
130b0 20 69 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20 61   is done.** to a
130c0 76 6f 69 64 20 64 65 61 64 6c 6f 63 6b 20 69 73  void deadlock is
130d0 73 75 65 73 20 69 6e 76 6f 6c 76 69 6e 67 20 6d  sues involving m
130e0 75 6c 74 69 70 6c 65 20 73 71 6c 69 74 65 33 2e  ultiple sqlite3.
130f0 6d 75 74 65 78 20 6d 75 74 65 78 65 73 2e 0a 2a  mutex mutexes..*
13100 2a 20 52 65 66 65 72 20 74 6f 20 63 6f 6d 6d 65  * Refer to comme
13110 6e 74 73 20 61 62 6f 76 65 20 66 75 6e 63 74 69  nts above functi
13120 6f 6e 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e  on sqlite3VtabUn
13130 6c 6f 63 6b 4c 69 73 74 28 29 20 66 6f 72 20 61  lockList() for a
13140 6e 0a 2a 2a 20 65 78 70 6c 61 6e 61 74 69 6f 6e  n.** explanation
13150 20 61 73 20 74 6f 20 77 68 79 20 69 74 20 69 73   as to why it is
13160 20 73 61 66 65 20 74 6f 20 61 64 64 20 61 6e 20   safe to add an 
13170 65 6e 74 72 79 20 74 6f 20 61 6e 20 73 71 6c 69  entry to an sqli
13180 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74 0a  te3.pDisconnect.
13190 2a 2a 20 6c 69 73 74 20 77 69 74 68 6f 75 74 20  ** list without 
131a0 68 6f 6c 64 69 6e 67 20 74 68 65 20 63 6f 72 72  holding the corr
131b0 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65  esponding sqlite
131c0 33 2e 6d 75 74 65 78 20 6d 75 74 65 78 2e 0a 2a  3.mutex mutex..*
131d0 2a 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20  *.** The memory 
131e0 66 6f 72 20 6f 62 6a 65 63 74 73 20 6f 66 20 74  for objects of t
131f0 68 69 73 20 74 79 70 65 20 69 73 20 61 6c 77 61  his type is alwa
13200 79 73 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 0a  ys allocated by.
13210 2a 2a 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c  ** sqlite3DbMall
13220 6f 63 28 29 2c 20 75 73 69 6e 67 20 74 68 65 20  oc(), using the 
13230 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c  connection handl
13240 65 20 73 74 6f 72 65 64 20 69 6e 20 56 54 61 62  e stored in VTab
13250 6c 65 2e 64 62 20 61 73 0a 2a 2a 20 74 68 65 20  le.db as.** the 
13260 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a  first argument..
13270 2a 2f 0a 73 74 72 75 63 74 20 56 54 61 62 6c 65  */.struct VTable
13280 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62   {.  sqlite3 *db
13290 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
132a0 2a 20 44 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  * Database conne
132b0 63 74 69 6f 6e 20 61 73 73 6f 63 69 61 74 65 64  ction associated
132c0 20 77 69 74 68 20 74 68 69 73 20 74 61 62 6c 65   with this table
132d0 20 2a 2f 0a 20 20 4d 6f 64 75 6c 65 20 2a 70 4d   */.  Module *pM
132e0 6f 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  od;             
132f0 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 6d 6f  /* Pointer to mo
13300 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  dule implementat
13310 69 6f 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ion */.  sqlite3
13320 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 20 20 20  _vtab *pVtab;   
13330 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
13340 20 76 74 61 62 20 69 6e 73 74 61 6e 63 65 20 2a   vtab instance *
13350 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20  /.  int nRef;   
13360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
13370 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74   Number of point
13380 65 72 73 20 74 6f 20 74 68 69 73 20 73 74 72 75  ers to this stru
13390 63 74 75 72 65 20 2a 2f 0a 20 20 75 38 20 62 43  cture */.  u8 bC
133a0 6f 6e 73 74 72 61 69 6e 74 3b 20 20 20 20 20 20  onstraint;      
133b0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
133c0 63 6f 6e 73 74 72 61 69 6e 74 73 20 61 72 65 20  constraints are 
133d0 73 75 70 70 6f 72 74 65 64 20 2a 2f 0a 20 20 69  supported */.  i
133e0 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 3b 20 20  nt iSavepoint;  
133f0 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 70 74           /* Dept
13400 68 20 6f 66 20 74 68 65 20 53 41 56 45 50 4f 49  h of the SAVEPOI
13410 4e 54 20 73 74 61 63 6b 20 2a 2f 0a 20 20 56 54  NT stack */.  VT
13420 61 62 6c 65 20 2a 70 4e 65 78 74 3b 20 20 20 20  able *pNext;    
13430 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20          /* Next 
13440 69 6e 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28  in linked list (
13450 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 7d 3b  see above) */.};
13460 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 73 63 68 65  ../*.** The sche
13470 6d 61 20 66 6f 72 20 65 61 63 68 20 53 51 4c 20  ma for each SQL 
13480 74 61 62 6c 65 20 61 6e 64 20 76 69 65 77 20 69  table and view i
13490 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e  s represented in
134a0 20 6d 65 6d 6f 72 79 0a 2a 2a 20 62 79 20 61 6e   memory.** by an
134b0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
134c0 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
134d0 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ture..*/.struct 
134e0 54 61 62 6c 65 20 7b 0a 20 20 63 68 61 72 20 2a  Table {.  char *
134f0 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 2f  zName;         /
13500 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  * Name of the ta
13510 62 6c 65 20 6f 72 20 76 69 65 77 20 2a 2f 0a 20  ble or view */. 
13520 20 43 6f 6c 75 6d 6e 20 2a 61 43 6f 6c 3b 20 20   Column *aCol;  
13530 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61        /* Informa
13540 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20  tion about each 
13550 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65  column */.  Inde
13560 78 20 2a 70 49 6e 64 65 78 3b 20 20 20 20 20 20  x *pIndex;      
13570 20 2f 2a 20 4c 69 73 74 20 6f 66 20 53 51 4c 20   /* List of SQL 
13580 69 6e 64 65 78 65 73 20 6f 6e 20 74 68 69 73 20  indexes on this 
13590 74 61 62 6c 65 2e 20 2a 2f 0a 20 20 53 65 6c 65  table. */.  Sele
135a0 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20  ct *pSelect;    
135b0 20 2f 2a 20 4e 55 4c 4c 20 66 6f 72 20 74 61 62   /* NULL for tab
135c0 6c 65 73 2e 20 20 50 6f 69 6e 74 73 20 74 6f 20  les.  Points to 
135d0 64 65 66 69 6e 69 74 69 6f 6e 20 69 66 20 61 20  definition if a 
135e0 76 69 65 77 2e 20 2a 2f 0a 20 20 46 4b 65 79 20  view. */.  FKey 
135f0 2a 70 46 4b 65 79 3b 20 20 20 20 20 20 20 20 20  *pFKey;         
13600 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f  /* Linked list o
13610 66 20 61 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65  f all foreign ke
13620 79 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65  ys in this table
13630 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c   */.  char *zCol
13640 41 66 66 3b 20 20 20 20 20 20 20 2f 2a 20 53 74  Aff;       /* St
13650 72 69 6e 67 20 64 65 66 69 6e 69 6e 67 20 74 68  ring defining th
13660 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20 65 61  e affinity of ea
13670 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 45  ch column */.  E
13680 78 70 72 4c 69 73 74 20 2a 70 43 68 65 63 6b 3b  xprList *pCheck;
13690 20 20 20 20 2f 2a 20 41 6c 6c 20 43 48 45 43 4b      /* All CHECK
136a0 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
136b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
136c0 20 20 20 20 20 20 20 2f 2a 20 20 20 2e 2e 2e 20         /*   ... 
136d0 61 6c 73 6f 20 75 73 65 64 20 61 73 20 63 6f 6c  also used as col
136e0 75 6d 6e 20 6e 61 6d 65 20 6c 69 73 74 20 69 6e  umn name list in
136f0 20 61 20 56 49 45 57 20 2a 2f 0a 20 20 69 6e 74   a VIEW */.  int
13700 20 74 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20   tnum;          
13710 20 20 2f 2a 20 52 6f 6f 74 20 42 54 72 65 65 20    /* Root BTree 
13720 70 61 67 65 20 66 6f 72 20 74 68 69 73 20 74 61  page for this ta
13730 62 6c 65 20 2a 2f 0a 20 20 75 33 32 20 6e 54 61  ble */.  u32 nTa
13740 62 52 65 66 3b 20 20 20 20 20 20 20 20 20 2f 2a  bRef;         /*
13750 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74   Number of point
13760 65 72 73 20 74 6f 20 74 68 69 73 20 54 61 62 6c  ers to this Tabl
13770 65 20 2a 2f 0a 20 20 75 33 32 20 74 61 62 46 6c  e */.  u32 tabFl
13780 61 67 73 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d  ags;        /* M
13790 61 73 6b 20 6f 66 20 54 46 5f 2a 20 76 61 6c 75  ask of TF_* valu
137a0 65 73 20 2a 2f 0a 20 20 69 31 36 20 69 50 4b 65  es */.  i16 iPKe
137b0 79 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  y;           /* 
137c0 49 66 20 6e 6f 74 20 6e 65 67 61 74 69 76 65 2c  If not negative,
137d0 20 75 73 65 20 61 43 6f 6c 5b 69 50 4b 65 79 5d   use aCol[iPKey]
137e0 20 61 73 20 74 68 65 20 72 6f 77 69 64 20 2a 2f   as the rowid */
137f0 0a 20 20 69 31 36 20 6e 43 6f 6c 3b 20 20 20 20  .  i16 nCol;    
13800 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
13810 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
13820 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
13830 4c 6f 67 45 73 74 20 6e 52 6f 77 4c 6f 67 45 73  LogEst nRowLogEs
13840 74 3b 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65  t;   /* Estimate
13850 64 20 72 6f 77 73 20 69 6e 20 74 61 62 6c 65 20  d rows in table 
13860 2d 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74  - from sqlite_st
13870 61 74 31 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4c  at1 table */.  L
13880 6f 67 45 73 74 20 73 7a 54 61 62 52 6f 77 3b 20  ogEst szTabRow; 
13890 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64      /* Estimated
138a0 20 73 69 7a 65 20 6f 66 20 65 61 63 68 20 74 61   size of each ta
138b0 62 6c 65 20 72 6f 77 20 69 6e 20 62 79 74 65 73  ble row in bytes
138c0 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
138d0 45 5f 45 4e 41 42 4c 45 5f 43 4f 53 54 4d 55 4c  E_ENABLE_COSTMUL
138e0 54 0a 20 20 4c 6f 67 45 73 74 20 63 6f 73 74 4d  T.  LogEst costM
138f0 75 6c 74 3b 20 20 20 20 20 2f 2a 20 43 6f 73 74  ult;     /* Cost
13900 20 6d 75 6c 74 69 70 6c 69 65 72 20 66 6f 72 20   multiplier for 
13910 75 73 69 6e 67 20 74 68 69 73 20 74 61 62 6c 65  using this table
13920 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 75 38 20   */.#endif.  u8 
13930 6b 65 79 43 6f 6e 66 3b 20 20 20 20 20 20 20 20  keyConf;        
13940 20 20 2f 2a 20 57 68 61 74 20 74 6f 20 64 6f 20    /* What to do 
13950 69 6e 20 63 61 73 65 20 6f 66 20 75 6e 69 71 75  in case of uniqu
13960 65 6e 65 73 73 20 63 6f 6e 66 6c 69 63 74 20 6f  eness conflict o
13970 6e 20 69 50 4b 65 79 20 2a 2f 0a 23 69 66 6e 64  n iPKey */.#ifnd
13980 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
13990 4c 54 45 52 54 41 42 4c 45 0a 20 20 69 6e 74 20  LTERTABLE.  int 
139a0 61 64 64 43 6f 6c 4f 66 66 73 65 74 3b 20 20 20  addColOffset;   
139b0 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e 20 43 52   /* Offset in CR
139c0 45 41 54 45 20 54 41 42 4c 45 20 73 74 6d 74 20  EATE TABLE stmt 
139d0 74 6f 20 61 64 64 20 61 20 6e 65 77 20 63 6f 6c  to add a new col
139e0 75 6d 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69  umn */.#endif.#i
139f0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
13a00 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
13a10 20 69 6e 74 20 6e 4d 6f 64 75 6c 65 41 72 67 3b   int nModuleArg;
13a20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
13a30 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20  of arguments to 
13a40 74 68 65 20 6d 6f 64 75 6c 65 20 2a 2f 0a 20 20  the module */.  
13a50 63 68 61 72 20 2a 2a 61 7a 4d 6f 64 75 6c 65 41  char **azModuleA
13a60 72 67 3b 20 20 2f 2a 20 30 3a 20 6d 6f 64 75 6c  rg;  /* 0: modul
13a70 65 20 31 3a 20 73 63 68 65 6d 61 20 32 3a 20 76  e 1: schema 2: v
13a80 74 61 62 20 6e 61 6d 65 20 33 2e 2e 2e 3a 20 61  tab name 3...: a
13a90 72 67 73 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20  rgs */.  VTable 
13aa0 2a 70 56 54 61 62 6c 65 3b 20 20 20 20 20 2f 2a  *pVTable;     /*
13ab0 20 4c 69 73 74 20 6f 66 20 56 54 61 62 6c 65 20   List of VTable 
13ac0 6f 62 6a 65 63 74 73 2e 20 2a 2f 0a 23 65 6e 64  objects. */.#end
13ad0 69 66 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54  if.  Trigger *pT
13ae0 72 69 67 67 65 72 3b 20 20 20 2f 2a 20 4c 69 73  rigger;   /* Lis
13af0 74 20 6f 66 20 74 72 69 67 67 65 72 73 20 73 74  t of triggers st
13b00 6f 72 65 64 20 69 6e 20 70 53 63 68 65 6d 61 20  ored in pSchema 
13b10 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63  */.  Schema *pSc
13b20 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63 68  hema;     /* Sch
13b30 65 6d 61 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ema that contain
13b40 73 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  s this table */.
13b50 20 20 54 61 62 6c 65 20 2a 70 4e 65 78 74 5a 6f    Table *pNextZo
13b60 6d 62 69 65 3b 20 20 2f 2a 20 4e 65 78 74 20 6f  mbie;  /* Next o
13b70 6e 20 74 68 65 20 50 61 72 73 65 2e 70 5a 6f 6d  n the Parse.pZom
13b80 62 69 65 54 61 62 20 6c 69 73 74 20 2a 2f 0a 7d  bieTab list */.}
13b90 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64  ;../*.** Allowed
13ba0 20 76 61 6c 75 65 73 20 66 6f 72 20 54 61 62 6c   values for Tabl
13bb0 65 2e 74 61 62 46 6c 61 67 73 2e 0a 2a 2a 0a 2a  e.tabFlags..**.*
13bc0 2a 20 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20 61  * TF_OOOHidden a
13bd0 70 70 6c 69 65 73 20 74 6f 20 74 61 62 6c 65 73  pplies to tables
13be0 20 6f 72 20 76 69 65 77 20 74 68 61 74 20 68 61   or view that ha
13bf0 76 65 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e  ve hidden column
13c00 73 20 74 68 61 74 20 61 72 65 0a 2a 2a 20 66 6f  s that are.** fo
13c10 6c 6c 6f 77 65 64 20 62 79 20 6e 6f 6e 2d 68 69  llowed by non-hi
13c20 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 2e 20 20 45  dden columns.  E
13c30 78 61 6d 70 6c 65 3a 20 20 22 43 52 45 41 54 45  xample:  "CREATE
13c40 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 78   VIRTUAL TABLE x
13c50 20 55 53 49 4e 47 0a 2a 2a 20 76 74 61 62 31 28   USING.** vtab1(
13c60 61 20 48 49 44 44 45 4e 2c 20 62 29 3b 22 2e 20  a HIDDEN, b);". 
13c70 20 53 69 6e 63 65 20 22 62 22 20 69 73 20 61 20   Since "b" is a 
13c80 6e 6f 6e 2d 68 69 64 64 65 6e 20 63 6f 6c 75 6d  non-hidden colum
13c90 6e 20 62 75 74 20 22 61 22 20 69 73 20 68 69 64  n but "a" is hid
13ca0 64 65 6e 2c 0a 2a 2a 20 74 68 65 20 54 46 5f 4f  den,.** the TF_O
13cb0 4f 4f 48 69 64 64 65 6e 20 61 74 74 72 69 62 75  OOHidden attribu
13cc0 74 65 20 77 6f 75 6c 64 20 61 70 70 6c 79 20 69  te would apply i
13cd0 6e 20 74 68 69 73 20 63 61 73 65 2e 20 20 53 75  n this case.  Su
13ce0 63 68 20 74 61 62 6c 65 73 20 72 65 71 75 69 72  ch tables requir
13cf0 65 0a 2a 2a 20 73 70 65 63 69 61 6c 20 68 61 6e  e.** special han
13d00 64 6c 69 6e 67 20 64 75 72 69 6e 67 20 49 4e 53  dling during INS
13d10 45 52 54 20 70 72 6f 63 65 73 73 69 6e 67 2e 0a  ERT processing..
13d20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 52 65  */.#define TF_Re
13d30 61 64 6f 6e 6c 79 20 20 20 20 20 20 20 20 30 78  adonly        0x
13d40 30 30 30 31 20 20 20 20 2f 2a 20 52 65 61 64 2d  0001    /* Read-
13d50 6f 6e 6c 79 20 73 79 73 74 65 6d 20 74 61 62 6c  only system tabl
13d60 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  e */.#define TF_
13d70 45 70 68 65 6d 65 72 61 6c 20 20 20 20 20 20 20  Ephemeral       
13d80 30 78 30 30 30 32 20 20 20 20 2f 2a 20 41 6e 20  0x0002    /* An 
13d90 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20  ephemeral table 
13da0 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61  */.#define TF_Ha
13db0 73 50 72 69 6d 61 72 79 4b 65 79 20 20 20 30 78  sPrimaryKey   0x
13dc0 30 30 30 34 20 20 20 20 2f 2a 20 54 61 62 6c 65  0004    /* Table
13dd0 20 68 61 73 20 61 20 70 72 69 6d 61 72 79 20 6b   has a primary k
13de0 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  ey */.#define TF
13df0 5f 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 20  _Autoincrement  
13e00 20 30 78 30 30 30 38 20 20 20 20 2f 2a 20 49 6e   0x0008    /* In
13e10 74 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65  teger primary ke
13e20 79 20 69 73 20 61 75 74 6f 69 6e 63 72 65 6d 65  y is autoincreme
13e30 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  nt */.#define TF
13e40 5f 48 61 73 53 74 61 74 31 20 20 20 20 20 20 20  _HasStat1       
13e50 20 30 78 30 30 31 30 20 20 20 20 2f 2a 20 6e 52   0x0010    /* nR
13e60 6f 77 4c 6f 67 45 73 74 20 73 65 74 20 66 72 6f  owLogEst set fro
13e70 6d 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 2a  m sqlite_stat1 *
13e80 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 57 69 74  /.#define TF_Wit
13e90 68 6f 75 74 52 6f 77 69 64 20 20 20 20 30 78 30  houtRowid    0x0
13ea0 30 32 30 20 20 20 20 2f 2a 20 4e 6f 20 72 6f 77  020    /* No row
13eb0 69 64 2e 20 20 50 52 49 4d 41 52 59 20 4b 45 59  id.  PRIMARY KEY
13ec0 20 69 73 20 74 68 65 20 6b 65 79 20 2a 2f 0a 23   is the key */.#
13ed0 64 65 66 69 6e 65 20 54 46 5f 4e 6f 56 69 73 69  define TF_NoVisi
13ee0 62 6c 65 52 6f 77 69 64 20 20 30 78 30 30 34 30  bleRowid  0x0040
13ef0 20 20 20 20 2f 2a 20 4e 6f 20 75 73 65 72 2d 76      /* No user-v
13f00 69 73 69 62 6c 65 20 22 72 6f 77 69 64 22 20 63  isible "rowid" c
13f10 6f 6c 75 6d 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  olumn */.#define
13f20 20 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20 20 20   TF_OOOHidden   
13f30 20 20 20 20 30 78 30 30 38 30 20 20 20 20 2f 2a      0x0080    /*
13f40 20 4f 75 74 2d 6f 66 2d 4f 72 64 65 72 20 68 69   Out-of-Order hi
13f50 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a  dden columns */.
13f60 23 64 65 66 69 6e 65 20 54 46 5f 53 74 61 74 73  #define TF_Stats
13f70 55 73 65 64 20 20 20 20 20 20 20 30 78 30 31 30  Used       0x010
13f80 30 20 20 20 20 2f 2a 20 51 75 65 72 79 20 70 6c  0    /* Query pl
13f90 61 6e 6e 65 72 20 64 65 63 69 73 69 6f 6e 73 20  anner decisions 
13fa0 61 66 66 65 63 74 65 64 20 62 79 0a 20 20 20 20  affected by.    
13fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13fd0 20 2a 2a 20 49 6e 64 65 78 2e 61 69 52 6f 77 4c   ** Index.aiRowL
13fe0 6f 67 45 73 74 5b 5d 20 76 61 6c 75 65 73 20 2a  ogEst[] values *
13ff0 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73  /.#define TF_Has
14000 4e 6f 74 4e 75 6c 6c 20 20 20 20 20 20 30 78 30  NotNull      0x0
14010 32 30 30 20 20 20 20 2f 2a 20 43 6f 6e 74 61 69  200    /* Contai
14020 6e 73 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73  ns NOT NULL cons
14030 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69  traints */.#defi
14040 6e 65 20 54 46 5f 53 68 61 64 6f 77 20 20 20 20  ne TF_Shadow    
14050 20 20 20 20 20 20 30 78 30 34 30 30 20 20 20 20        0x0400    
14060 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 20 73 68  /* True for a sh
14070 61 64 6f 77 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f  adow table */../
14080 2a 0a 2a 2a 20 54 65 73 74 20 74 6f 20 73 65 65  *.** Test to see
14090 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
140a0 61 20 74 61 62 6c 65 20 69 73 20 61 20 76 69 72  a table is a vir
140b0 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 69  tual table.  Thi
140c0 73 20 69 73 0a 2a 2a 20 64 6f 6e 65 20 61 73 20  s is.** done as 
140d0 61 20 6d 61 63 72 6f 20 73 6f 20 74 68 61 74 20  a macro so that 
140e0 69 74 20 77 69 6c 6c 20 62 65 20 6f 70 74 69 6d  it will be optim
140f0 69 7a 65 64 20 6f 75 74 20 77 68 65 6e 20 76 69  ized out when vi
14100 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 73  rtual.** table s
14110 75 70 70 6f 72 74 20 69 73 20 6f 6d 69 74 74 65  upport is omitte
14120 64 20 66 72 6f 6d 20 74 68 65 20 62 75 69 6c 64  d from the build
14130 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
14140 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
14150 54 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20  TABLE.#  define 
14160 49 73 56 69 72 74 75 61 6c 28 58 29 20 20 20 20  IsVirtual(X)    
14170 20 20 28 28 58 29 2d 3e 6e 4d 6f 64 75 6c 65 41    ((X)->nModuleA
14180 72 67 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66  rg).#else.#  def
14190 69 6e 65 20 49 73 56 69 72 74 75 61 6c 28 58 29  ine IsVirtual(X)
141a0 20 20 20 20 20 20 30 0a 23 65 6e 64 69 66 0a 0a        0.#endif..
141b0 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20  /*.** Macros to 
141c0 64 65 74 65 72 6d 69 6e 65 20 69 66 20 61 20 63  determine if a c
141d0 6f 6c 75 6d 6e 20 69 73 20 68 69 64 64 65 6e 2e  olumn is hidden.
141e0 20 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64 64    IsOrdinaryHidd
141f0 65 6e 43 6f 6c 75 6d 6e 28 29 0a 2a 2a 20 6f 6e  enColumn().** on
14200 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 6e 6f 6e  ly works for non
14210 2d 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20  -virtual tables 
14220 28 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65 73  (ordinary tables
14230 20 61 6e 64 20 76 69 65 77 73 29 20 61 6e 64 20   and views) and 
14240 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20 66 61 6c  is.** always fal
14250 73 65 20 75 6e 6c 65 73 73 20 53 51 4c 49 54 45  se unless SQLITE
14260 5f 45 4e 41 42 4c 45 5f 48 49 44 44 45 4e 5f 43  _ENABLE_HIDDEN_C
14270 4f 4c 55 4d 4e 53 20 69 73 20 64 65 66 69 6e 65  OLUMNS is define
14280 64 2e 20 20 54 68 65 0a 2a 2a 20 49 73 48 69 64  d.  The.** IsHid
14290 64 65 6e 43 6f 6c 75 6d 6e 28 29 20 6d 61 63 72  denColumn() macr
142a0 6f 20 69 73 20 67 65 6e 65 72 61 6c 20 70 75 72  o is general pur
142b0 70 6f 73 65 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  pose..*/.#if def
142c0 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
142d0 4c 45 5f 48 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e  LE_HIDDEN_COLUMN
142e0 53 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48  S).#  define IsH
142f0 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 20  iddenColumn(X)  
14300 20 20 20 20 20 20 20 28 28 28 58 29 2d 3e 63 6f         (((X)->co
14310 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41 47  lFlags & COLFLAG
14320 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a 23 20 20  _HIDDEN)!=0).#  
14330 64 65 66 69 6e 65 20 49 73 4f 72 64 69 6e 61 72  define IsOrdinar
14340 79 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29  yHiddenColumn(X)
14350 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73   (((X)->colFlags
14360 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45   & COLFLAG_HIDDE
14370 4e 29 21 3d 30 29 0a 23 65 6c 69 66 20 21 64 65  N)!=0).#elif !de
14380 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
14390 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29 0a  T_VIRTUALTABLE).
143a0 23 20 20 64 65 66 69 6e 65 20 49 73 48 69 64 64  #  define IsHidd
143b0 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20  enColumn(X)     
143c0 20 20 20 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c      (((X)->colFl
143d0 61 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49  ags & COLFLAG_HI
143e0 44 44 45 4e 29 21 3d 30 29 0a 23 20 20 64 65 66  DDEN)!=0).#  def
143f0 69 6e 65 20 49 73 4f 72 64 69 6e 61 72 79 48 69  ine IsOrdinaryHi
14400 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 30 0a  ddenColumn(X) 0.
14410 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20  #else.#  define 
14420 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58  IsHiddenColumn(X
14430 29 20 20 20 20 20 20 20 20 20 30 0a 23 20 20 64  )         0.#  d
14440 65 66 69 6e 65 20 49 73 4f 72 64 69 6e 61 72 79  efine IsOrdinary
14450 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20  HiddenColumn(X) 
14460 30 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20 44 6f  0.#endif.../* Do
14470 65 73 20 74 68 65 20 74 61 62 6c 65 20 68 61 76  es the table hav
14480 65 20 61 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65  e a rowid */.#de
14490 66 69 6e 65 20 48 61 73 52 6f 77 69 64 28 58 29  fine HasRowid(X)
144a0 20 20 20 20 20 28 28 28 58 29 2d 3e 74 61 62 46       (((X)->tabF
144b0 6c 61 67 73 20 26 20 54 46 5f 57 69 74 68 6f 75  lags & TF_Withou
144c0 74 52 6f 77 69 64 29 3d 3d 30 29 0a 23 64 65 66  tRowid)==0).#def
144d0 69 6e 65 20 56 69 73 69 62 6c 65 52 6f 77 69 64  ine VisibleRowid
144e0 28 58 29 20 28 28 28 58 29 2d 3e 74 61 62 46 6c  (X) (((X)->tabFl
144f0 61 67 73 20 26 20 54 46 5f 4e 6f 56 69 73 69 62  ags & TF_NoVisib
14500 6c 65 52 6f 77 69 64 29 3d 3d 30 29 0a 0a 2f 2a  leRowid)==0)../*
14510 0a 2a 2a 20 45 61 63 68 20 66 6f 72 65 69 67 6e  .** Each foreign
14520 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20   key constraint 
14530 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  is an instance o
14540 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
14550 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a  structure..**.**
14560 20 41 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 69   A foreign key i
14570 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
14580 68 20 74 77 6f 20 74 61 62 6c 65 73 2e 20 20 54  h two tables.  T
14590 68 65 20 22 66 72 6f 6d 22 20 74 61 62 6c 65 20  he "from" table 
145a0 69 73 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20  is.** the table 
145b0 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68  that contains th
145c0 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61  e REFERENCES cla
145d0 75 73 65 20 74 68 61 74 20 63 72 65 61 74 65 73  use that creates
145e0 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20   the foreign.** 
145f0 6b 65 79 2e 20 20 54 68 65 20 22 74 6f 22 20 74  key.  The "to" t
14600 61 62 6c 65 20 69 73 20 74 68 65 20 74 61 62 6c  able is the tabl
14610 65 20 74 68 61 74 20 69 73 20 6e 61 6d 65 64 20  e that is named 
14620 69 6e 20 74 68 65 20 52 45 46 45 52 45 4e 43 45  in the REFERENCE
14630 53 20 63 6c 61 75 73 65 2e 0a 2a 2a 20 43 6f 6e  S clause..** Con
14640 73 69 64 65 72 20 74 68 69 73 20 65 78 61 6d 70  sider this examp
14650 6c 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52  le:.**.**     CR
14660 45 41 54 45 20 54 41 42 4c 45 20 65 78 31 28 0a  EATE TABLE ex1(.
14670 2a 2a 20 20 20 20 20 20 20 61 20 49 4e 54 45 47  **       a INTEG
14680 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a  ER PRIMARY KEY,.
14690 2a 2a 20 20 20 20 20 20 20 62 20 49 4e 54 45 47  **       b INTEG
146a0 45 52 20 43 4f 4e 53 54 52 41 49 4e 54 20 66 6b  ER CONSTRAINT fk
146b0 31 20 52 45 46 45 52 45 4e 43 45 53 20 65 78 32  1 REFERENCES ex2
146c0 28 78 29 0a 2a 2a 20 20 20 20 20 29 3b 0a 2a 2a  (x).**     );.**
146d0 0a 2a 2a 20 46 6f 72 20 66 6f 72 65 69 67 6e 20  .** For foreign 
146e0 6b 65 79 20 22 66 6b 31 22 2c 20 74 68 65 20 66  key "fk1", the f
146f0 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 22 65 78  rom-table is "ex
14700 31 22 20 61 6e 64 20 74 68 65 20 74 6f 2d 74 61  1" and the to-ta
14710 62 6c 65 20 69 73 20 22 65 78 32 22 2e 0a 2a 2a  ble is "ex2"..**
14720 20 45 71 75 69 76 61 6c 65 6e 74 20 6e 61 6d 65   Equivalent name
14730 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 66 72 6f  s:.**.**     fro
14740 6d 2d 74 61 62 6c 65 20 3d 3d 20 63 68 69 6c 64  m-table == child
14750 2d 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20  -table.**       
14760 74 6f 2d 74 61 62 6c 65 20 3d 3d 20 70 61 72 65  to-table == pare
14770 6e 74 2d 74 61 62 6c 65 0a 2a 2a 0a 2a 2a 20 45  nt-table.**.** E
14780 61 63 68 20 52 45 46 45 52 45 4e 43 45 53 20 63  ach REFERENCES c
14790 6c 61 75 73 65 20 67 65 6e 65 72 61 74 65 73 20  lause generates 
147a0 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
147b0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
147c0 75 63 74 75 72 65 0a 2a 2a 20 77 68 69 63 68 20  ucture.** which 
147d0 69 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74  is attached to t
147e0 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 2e 20 20  he from-table.  
147f0 54 68 65 20 74 6f 2d 74 61 62 6c 65 20 6e 65 65  The to-table nee
14800 64 20 6e 6f 74 20 65 78 69 73 74 20 77 68 65 6e  d not exist when
14810 0a 2a 2a 20 74 68 65 20 66 72 6f 6d 2d 74 61 62  .** the from-tab
14820 6c 65 20 69 73 20 63 72 65 61 74 65 64 2e 20 20  le is created.  
14830 54 68 65 20 65 78 69 73 74 65 6e 63 65 20 6f 66  The existence of
14840 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69 73   the to-table is
14850 20 6e 6f 74 20 63 68 65 63 6b 65 64 2e 0a 2a 2a   not checked..**
14860 0a 2a 2a 20 54 68 65 20 6c 69 73 74 20 6f 66 20  .** The list of 
14870 61 6c 6c 20 70 61 72 65 6e 74 73 20 66 6f 72 20  all parents for 
14880 63 68 69 6c 64 20 54 61 62 6c 65 20 58 20 69 73  child Table X is
14890 20 68 65 6c 64 20 61 74 20 58 2e 70 46 4b 65 79   held at X.pFKey
148a0 2e 0a 2a 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f  ..**.** A list o
148b0 66 20 61 6c 6c 20 63 68 69 6c 64 72 65 6e 20 66  f all children f
148c0 6f 72 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 64  or a table named
148d0 20 5a 20 28 77 68 69 63 68 20 6d 69 67 68 74 20   Z (which might 
148e0 6e 6f 74 20 65 76 65 6e 20 65 78 69 73 74 29 0a  not even exist).
148f0 2a 2a 20 69 73 20 68 65 6c 64 20 69 6e 20 53 63  ** is held in Sc
14900 68 65 6d 61 2e 66 6b 65 79 48 61 73 68 20 77 69  hema.fkeyHash wi
14910 74 68 20 61 20 68 61 73 68 20 6b 65 79 20 6f 66  th a hash key of
14920 20 5a 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 4b   Z..*/.struct FK
14930 65 79 20 7b 0a 20 20 54 61 62 6c 65 20 2a 70 46  ey {.  Table *pF
14940 72 6f 6d 3b 20 20 20 20 20 2f 2a 20 54 61 62 6c  rom;     /* Tabl
14950 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  e containing the
14960 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75   REFERENCES clau
14970 73 65 20 28 61 6b 61 3a 20 43 68 69 6c 64 29 20  se (aka: Child) 
14980 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74  */.  FKey *pNext
14990 46 72 6f 6d 3b 20 20 2f 2a 20 4e 65 78 74 20 46  From;  /* Next F
149a0 4b 65 79 20 77 69 74 68 20 74 68 65 20 73 61 6d  Key with the sam
149b0 65 20 69 6e 20 70 46 72 6f 6d 2e 20 4e 65 78 74  e in pFrom. Next
149c0 20 70 61 72 65 6e 74 20 6f 66 20 70 46 72 6f 6d   parent of pFrom
149d0 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 6f 3b   */.  char *zTo;
149e0 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
149f0 6f 66 20 74 61 62 6c 65 20 74 68 61 74 20 74 68  of table that th
14a00 65 20 6b 65 79 20 70 6f 69 6e 74 73 20 74 6f 20  e key points to 
14a10 28 61 6b 61 3a 20 50 61 72 65 6e 74 29 20 2a 2f  (aka: Parent) */
14a20 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 54 6f  .  FKey *pNextTo
14a30 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 74  ;    /* Next wit
14a40 68 20 74 68 65 20 73 61 6d 65 20 7a 54 6f 2e 20  h the same zTo. 
14a50 4e 65 78 74 20 63 68 69 6c 64 20 6f 66 20 7a 54  Next child of zT
14a60 6f 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 50  o. */.  FKey *pP
14a70 72 65 76 54 6f 3b 20 20 20 20 2f 2a 20 50 72 65  revTo;    /* Pre
14a80 76 69 6f 75 73 20 77 69 74 68 20 74 68 65 20 73  vious with the s
14a90 61 6d 65 20 7a 54 6f 20 2a 2f 0a 20 20 69 6e 74  ame zTo */.  int
14aa0 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 2f   nCol;         /
14ab0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
14ac0 6d 6e 73 20 69 6e 20 74 68 69 73 20 6b 65 79 20  mns in this key 
14ad0 2a 2f 0a 20 20 2f 2a 20 45 56 3a 20 52 2d 33 30  */.  /* EV: R-30
14ae0 33 32 33 2d 32 31 39 31 37 20 2a 2f 0a 20 20 75  323-21917 */.  u
14af0 38 20 69 73 44 65 66 65 72 72 65 64 3b 20 20 20  8 isDeferred;   
14b00 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63      /* True if c
14b10 6f 6e 73 74 72 61 69 6e 74 20 63 68 65 63 6b 69  onstraint checki
14b20 6e 67 20 69 73 20 64 65 66 65 72 72 65 64 20 74  ng is deferred t
14b30 69 6c 6c 20 43 4f 4d 4d 49 54 20 2a 2f 0a 20 20  ill COMMIT */.  
14b40 75 38 20 61 41 63 74 69 6f 6e 5b 32 5d 3b 20 20  u8 aAction[2];  
14b50 20 20 20 20 20 20 2f 2a 20 4f 4e 20 44 45 4c 45        /* ON DELE
14b60 54 45 20 61 6e 64 20 4f 4e 20 55 50 44 41 54 45  TE and ON UPDATE
14b70 20 61 63 74 69 6f 6e 73 2c 20 72 65 73 70 65 63   actions, respec
14b80 74 69 76 65 6c 79 20 2a 2f 0a 20 20 54 72 69 67  tively */.  Trig
14b90 67 65 72 20 2a 61 70 54 72 69 67 67 65 72 5b 32  ger *apTrigger[2
14ba0 5d 3b 2f 2a 20 54 72 69 67 67 65 72 73 20 66 6f  ];/* Triggers fo
14bb0 72 20 61 41 63 74 69 6f 6e 5b 5d 20 61 63 74 69  r aAction[] acti
14bc0 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  ons */.  struct 
14bd0 73 43 6f 6c 4d 61 70 20 7b 20 20 20 20 20 20 2f  sColMap {      /
14be0 2a 20 4d 61 70 70 69 6e 67 20 6f 66 20 63 6f 6c  * Mapping of col
14bf0 75 6d 6e 73 20 69 6e 20 70 46 72 6f 6d 20 74 6f  umns in pFrom to
14c00 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 7a 54 6f 20   columns in zTo 
14c10 2a 2f 0a 20 20 20 20 69 6e 74 20 69 46 72 6f 6d  */.    int iFrom
14c20 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
14c30 49 6e 64 65 78 20 6f 66 20 63 6f 6c 75 6d 6e 20  Index of column 
14c40 69 6e 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 20 20  in pFrom */.    
14c50 63 68 61 72 20 2a 7a 43 6f 6c 3b 20 20 20 20 20  char *zCol;     
14c60 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
14c70 20 63 6f 6c 75 6d 6e 20 69 6e 20 7a 54 6f 2e 20   column in zTo. 
14c80 20 49 66 20 4e 55 4c 4c 20 75 73 65 20 50 52 49   If NULL use PRI
14c90 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 7d 20  MARY KEY */.  } 
14ca0 61 43 6f 6c 5b 31 5d 3b 20 20 20 20 20 20 20 20  aCol[1];        
14cb0 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79      /* One entry
14cc0 20 66 6f 72 20 65 61 63 68 20 6f 66 20 6e 43 6f   for each of nCo
14cd0 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 7d 3b 0a  l columns */.};.
14ce0 0a 2f 2a 0a 2a 2a 20 53 51 4c 69 74 65 20 73 75  ./*.** SQLite su
14cf0 70 70 6f 72 74 73 20 6d 61 6e 79 20 64 69 66 66  pports many diff
14d00 65 72 65 6e 74 20 77 61 79 73 20 74 6f 20 72 65  erent ways to re
14d10 73 6f 6c 76 65 20 61 20 63 6f 6e 73 74 72 61 69  solve a constrai
14d20 6e 74 0a 2a 2a 20 65 72 72 6f 72 2e 20 20 52 4f  nt.** error.  RO
14d30 4c 4c 42 41 43 4b 20 70 72 6f 63 65 73 73 69 6e  LLBACK processin
14d40 67 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20 63  g means that a c
14d50 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
14d60 69 6f 6e 0a 2a 2a 20 63 61 75 73 65 73 20 74 68  ion.** causes th
14d70 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70  e operation in p
14d80 72 6f 63 65 73 73 20 74 6f 20 66 61 69 6c 20 61  rocess to fail a
14d90 6e 64 20 66 6f 72 20 74 68 65 20 63 75 72 72 65  nd for the curre
14da0 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a  nt transaction.*
14db0 2a 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62  * to be rolled b
14dc0 61 63 6b 2e 20 20 41 42 4f 52 54 20 70 72 6f 63  ack.  ABORT proc
14dd0 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 65  essing means the
14de0 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72   operation in pr
14df0 6f 63 65 73 73 0a 2a 2a 20 66 61 69 6c 73 20 61  ocess.** fails a
14e00 6e 64 20 61 6e 79 20 70 72 69 6f 72 20 63 68 61  nd any prior cha
14e10 6e 67 65 73 20 66 72 6f 6d 20 74 68 61 74 20 6f  nges from that o
14e20 6e 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65  ne operation are
14e30 20 62 61 63 6b 65 64 20 6f 75 74 2c 0a 2a 2a 20   backed out,.** 
14e40 62 75 74 20 74 68 65 20 74 72 61 6e 73 61 63 74  but the transact
14e50 69 6f 6e 20 69 73 20 6e 6f 74 20 72 6f 6c 6c 65  ion is not rolle
14e60 64 20 62 61 63 6b 2e 20 20 46 41 49 4c 20 70 72  d back.  FAIL pr
14e70 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74  ocessing means t
14e80 68 61 74 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61  hat.** the opera
14e90 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73  tion in progress
14ea0 20 73 74 6f 70 73 20 61 6e 64 20 72 65 74 75 72   stops and retur
14eb0 6e 73 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65  ns an error code
14ec0 2e 20 20 42 75 74 20 70 72 69 6f 72 0a 2a 2a 20  .  But prior.** 
14ed0 63 68 61 6e 67 65 73 20 64 75 65 20 74 6f 20 74  changes due to t
14ee0 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f  he same operatio
14ef0 6e 20 61 72 65 20 6e 6f 74 20 62 61 63 6b 65 64  n are not backed
14f00 20 6f 75 74 20 61 6e 64 20 6e 6f 20 72 6f 6c 6c   out and no roll
14f10 62 61 63 6b 0a 2a 2a 20 6f 63 63 75 72 73 2e 20  back.** occurs. 
14f20 20 49 47 4e 4f 52 45 20 6d 65 61 6e 73 20 74 68   IGNORE means th
14f30 61 74 20 74 68 65 20 70 61 72 74 69 63 75 6c 61  at the particula
14f40 72 20 72 6f 77 20 74 68 61 74 20 63 61 75 73 65  r row that cause
14f50 64 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74  d the constraint
14f60 0a 2a 2a 20 65 72 72 6f 72 20 69 73 20 6e 6f 74  .** error is not
14f70 20 69 6e 73 65 72 74 65 64 20 6f 72 20 75 70 64   inserted or upd
14f80 61 74 65 64 2e 20 20 50 72 6f 63 65 73 73 69 6e  ated.  Processin
14f90 67 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20  g continues and 
14fa0 6e 6f 20 65 72 72 6f 72 0a 2a 2a 20 69 73 20 72  no error.** is r
14fb0 65 74 75 72 6e 65 64 2e 20 20 52 45 50 4c 41 43  eturned.  REPLAC
14fc0 45 20 6d 65 61 6e 73 20 74 68 61 74 20 70 72 65  E means that pre
14fd0 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61 73  existing databas
14fe0 65 20 72 6f 77 73 20 74 68 61 74 20 63 61 75 73  e rows that caus
14ff0 65 64 0a 2a 2a 20 61 20 55 4e 49 51 55 45 20 63  ed.** a UNIQUE c
15000 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
15010 69 6f 6e 20 61 72 65 20 72 65 6d 6f 76 65 64 20  ion are removed 
15020 73 6f 20 74 68 61 74 20 74 68 65 20 6e 65 77 20  so that the new 
15030 69 6e 73 65 72 74 20 6f 72 0a 2a 2a 20 75 70 64  insert or.** upd
15040 61 74 65 20 63 61 6e 20 70 72 6f 63 65 65 64 2e  ate can proceed.
15050 20 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e    Processing con
15060 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72  tinues and no er
15070 72 6f 72 20 69 73 20 72 65 70 6f 72 74 65 64 2e  ror is reported.
15080 0a 2a 2a 0a 2a 2a 20 52 45 53 54 52 49 43 54 2c  .**.** RESTRICT,
15090 20 53 45 54 4e 55 4c 4c 2c 20 61 6e 64 20 43 41   SETNULL, and CA
150a0 53 43 41 44 45 20 61 63 74 69 6f 6e 73 20 61 70  SCADE actions ap
150b0 70 6c 79 20 6f 6e 6c 79 20 74 6f 20 66 6f 72 65  ply only to fore
150c0 69 67 6e 20 6b 65 79 73 2e 0a 2a 2a 20 52 45 53  ign keys..** RES
150d0 54 52 49 43 54 20 69 73 20 74 68 65 20 73 61 6d  TRICT is the sam
150e0 65 20 61 73 20 41 42 4f 52 54 20 66 6f 72 20 49  e as ABORT for I
150f0 4d 4d 45 44 49 41 54 45 20 66 6f 72 65 69 67 6e  MMEDIATE foreign
15100 20 6b 65 79 73 20 61 6e 64 20 74 68 65 0a 2a 2a   keys and the.**
15110 20 73 61 6d 65 20 61 73 20 52 4f 4c 4c 42 41 43   same as ROLLBAC
15120 4b 20 66 6f 72 20 44 45 46 45 52 52 45 44 20 6b  K for DEFERRED k
15130 65 79 73 2e 20 20 53 45 54 4e 55 4c 4c 20 6d 65  eys.  SETNULL me
15140 61 6e 73 20 74 68 61 74 20 74 68 65 20 66 6f 72  ans that the for
15150 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 69 73 20 73  eign.** key is s
15160 65 74 20 74 6f 20 4e 55 4c 4c 2e 20 20 43 41 53  et to NULL.  CAS
15170 43 41 44 45 20 6d 65 61 6e 73 20 74 68 61 74 20  CADE means that 
15180 61 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41  a DELETE or UPDA
15190 54 45 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65 66  TE of the.** ref
151a0 65 72 65 6e 63 65 64 20 74 61 62 6c 65 20 72 6f  erenced table ro
151b0 77 20 69 73 20 70 72 6f 70 61 67 61 74 65 64 20  w is propagated 
151c0 69 6e 74 6f 20 74 68 65 20 72 6f 77 20 74 68 61  into the row tha
151d0 74 20 68 6f 6c 64 73 20 74 68 65 0a 2a 2a 20 66  t holds the.** f
151e0 6f 72 65 69 67 6e 20 6b 65 79 2e 0a 2a 2a 0a 2a  oreign key..**.*
151f0 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
15200 73 79 6d 62 6f 6c 69 63 20 76 61 6c 75 65 73 20  symbolic values 
15210 61 72 65 20 75 73 65 64 20 74 6f 20 72 65 63 6f  are used to reco
15220 72 64 20 77 68 69 63 68 20 74 79 70 65 0a 2a 2a  rd which type.**
15230 20 6f 66 20 61 63 74 69 6f 6e 20 74 6f 20 74 61   of action to ta
15240 6b 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ke..*/.#define O
15250 45 5f 4e 6f 6e 65 20 20 20 20 20 30 20 20 20 2f  E_None     0   /
15260 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20 63 6f  * There is no co
15270 6e 73 74 72 61 69 6e 74 20 74 6f 20 63 68 65 63  nstraint to chec
15280 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  k */.#define OE_
15290 52 6f 6c 6c 62 61 63 6b 20 31 20 20 20 2f 2a 20  Rollback 1   /* 
152a0 46 61 69 6c 20 74 68 65 20 6f 70 65 72 61 74 69  Fail the operati
152b0 6f 6e 20 61 6e 64 20 72 6f 6c 6c 62 61 63 6b 20  on and rollback 
152c0 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
152d0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 41 62  */.#define OE_Ab
152e0 6f 72 74 20 20 20 20 32 20 20 20 2f 2a 20 42 61  ort    2   /* Ba
152f0 63 6b 20 6f 75 74 20 63 68 61 6e 67 65 73 20 62  ck out changes b
15300 75 74 20 64 6f 20 6e 6f 20 72 6f 6c 6c 62 61 63  ut do no rollbac
15310 6b 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f  k transaction */
15320 0a 23 64 65 66 69 6e 65 20 4f 45 5f 46 61 69 6c  .#define OE_Fail
15330 20 20 20 20 20 33 20 20 20 2f 2a 20 53 74 6f 70       3   /* Stop
15340 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 62   the operation b
15350 75 74 20 6c 65 61 76 65 20 61 6c 6c 20 70 72 69  ut leave all pri
15360 6f 72 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64  or changes */.#d
15370 65 66 69 6e 65 20 4f 45 5f 49 67 6e 6f 72 65 20  efine OE_Ignore 
15380 20 20 34 20 20 20 2f 2a 20 49 67 6e 6f 72 65 20    4   /* Ignore 
15390 74 68 65 20 65 72 72 6f 72 2e 20 44 6f 20 6e 6f  the error. Do no
153a0 74 20 64 6f 20 74 68 65 20 49 4e 53 45 52 54 20  t do the INSERT 
153b0 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65  or UPDATE */.#de
153c0 66 69 6e 65 20 4f 45 5f 52 65 70 6c 61 63 65 20  fine OE_Replace 
153d0 20 35 20 20 20 2f 2a 20 44 65 6c 65 74 65 20 65   5   /* Delete e
153e0 78 69 73 74 69 6e 67 20 72 65 63 6f 72 64 2c 20  xisting record, 
153f0 74 68 65 6e 20 64 6f 20 49 4e 53 45 52 54 20 6f  then do INSERT o
15400 72 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66  r UPDATE */.#def
15410 69 6e 65 20 4f 45 5f 55 70 64 61 74 65 20 20 20  ine OE_Update   
15420 36 20 20 20 2f 2a 20 50 72 6f 63 65 73 73 20 61  6   /* Process a
15430 73 20 61 20 44 4f 20 55 50 44 41 54 45 20 69 6e  s a DO UPDATE in
15440 20 61 6e 20 75 70 73 65 72 74 20 2a 2f 0a 23 64   an upsert */.#d
15450 65 66 69 6e 65 20 4f 45 5f 52 65 73 74 72 69 63  efine OE_Restric
15460 74 20 37 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72  t 7   /* OE_Abor
15470 74 20 66 6f 72 20 49 4d 4d 45 44 49 41 54 45 2c  t for IMMEDIATE,
15480 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 66 6f 72   OE_Rollback for
15490 20 44 45 46 45 52 52 45 44 20 2a 2f 0a 23 64 65   DEFERRED */.#de
154a0 66 69 6e 65 20 4f 45 5f 53 65 74 4e 75 6c 6c 20  fine OE_SetNull 
154b0 20 38 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20   8   /* Set the 
154c0 66 6f 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75  foreign key valu
154d0 65 20 74 6f 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65  e to NULL */.#de
154e0 66 69 6e 65 20 4f 45 5f 53 65 74 44 66 6c 74 20  fine OE_SetDflt 
154f0 20 39 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20   9   /* Set the 
15500 66 6f 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75  foreign key valu
15510 65 20 74 6f 20 69 74 73 20 64 65 66 61 75 6c 74  e to its default
15520 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 43   */.#define OE_C
15530 61 73 63 61 64 65 20 20 31 30 20 20 2f 2a 20 43  ascade  10  /* C
15540 61 73 63 61 64 65 20 74 68 65 20 63 68 61 6e 67  ascade the chang
15550 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  es */.#define OE
15560 5f 44 65 66 61 75 6c 74 20 20 31 31 20 20 2f 2a  _Default  11  /*
15570 20 44 6f 20 77 68 61 74 65 76 65 72 20 74 68 65   Do whatever the
15580 20 64 65 66 61 75 6c 74 20 61 63 74 69 6f 6e 20   default action 
15590 69 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e  is */.../*.** An
155a0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
155b0 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
155c0 74 75 72 65 20 69 73 20 70 61 73 73 65 64 20 61  ture is passed a
155d0 73 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 61  s the first.** a
155e0 72 67 75 6d 65 6e 74 20 74 6f 20 73 71 6c 69 74  rgument to sqlit
155f0 65 33 56 64 62 65 4b 65 79 43 6f 6d 70 61 72 65  e3VdbeKeyCompare
15600 20 61 6e 64 20 69 73 20 75 73 65 64 20 74 6f 20   and is used to 
15610 63 6f 6e 74 72 6f 6c 20 74 68 65 0a 2a 2a 20 63  control the.** c
15620 6f 6d 70 61 72 69 73 6f 6e 20 6f 66 20 74 68 65  omparison of the
15630 20 74 77 6f 20 69 6e 64 65 78 20 6b 65 79 73 2e   two index keys.
15640 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74  .**.** Note that
15650 20 61 53 6f 72 74 4f 72 64 65 72 5b 5d 20 61 6e   aSortOrder[] an
15660 64 20 61 43 6f 6c 6c 5b 5d 20 68 61 76 65 20 6e  d aColl[] have n
15670 46 69 65 6c 64 2b 31 20 73 6c 6f 74 73 2e 20 20  Field+1 slots.  
15680 54 68 65 72 65 0a 2a 2a 20 61 72 65 20 6e 46 69  There.** are nFi
15690 65 6c 64 20 73 6c 6f 74 73 20 66 6f 72 20 74 68  eld slots for th
156a0 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 61 6e 20  e columns of an 
156b0 69 6e 64 65 78 20 74 68 65 6e 20 6f 6e 65 20 65  index then one e
156c0 78 74 72 61 20 73 6c 6f 74 0a 2a 2a 20 66 6f 72  xtra slot.** for
156d0 20 74 68 65 20 72 6f 77 69 64 20 61 74 20 74 68   the rowid at th
156e0 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74  e end..*/.struct
156f0 20 4b 65 79 49 6e 66 6f 20 7b 0a 20 20 75 33 32   KeyInfo {.  u32
15700 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20   nRef;          
15710 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65   /* Number of re
15720 66 65 72 65 6e 63 65 73 20 74 6f 20 74 68 69 73  ferences to this
15730 20 4b 65 79 49 6e 66 6f 20 6f 62 6a 65 63 74 20   KeyInfo object 
15740 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20  */.  u8 enc;    
15750 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
15760 20 65 6e 63 6f 64 69 6e 67 20 2d 20 6f 6e 65 20   encoding - one 
15770 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f 55 54  of the SQLITE_UT
15780 46 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75  F* values */.  u
15790 31 36 20 6e 4b 65 79 46 69 65 6c 64 3b 20 20 20  16 nKeyField;   
157a0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
157b0 6b 65 79 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74  key columns in t
157c0 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 31  he index */.  u1
157d0 36 20 6e 41 6c 6c 46 69 65 6c 64 3b 20 20 20 20  6 nAllField;    
157e0 20 20 2f 2a 20 54 6f 74 61 6c 20 63 6f 6c 75 6d    /* Total colum
157f0 6e 73 2c 20 69 6e 63 6c 75 64 69 6e 67 20 6b 65  ns, including ke
15800 79 20 70 6c 75 73 20 6f 74 68 65 72 73 20 2a 2f  y plus others */
15810 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20  .  sqlite3 *db; 
15820 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61         /* The da
15830 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
15840 6e 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74  n */.  u8 *aSort
15850 4f 72 64 65 72 3b 20 20 20 20 20 2f 2a 20 53 6f  Order;     /* So
15860 72 74 20 6f 72 64 65 72 20 66 6f 72 20 65 61 63  rt order for eac
15870 68 20 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20 20 43  h column. */.  C
15880 6f 6c 6c 53 65 71 20 2a 61 43 6f 6c 6c 5b 31 5d  ollSeq *aColl[1]
15890 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20  ;  /* Collating 
158a0 73 65 71 75 65 6e 63 65 20 66 6f 72 20 65 61 63  sequence for eac
158b0 68 20 74 65 72 6d 20 6f 66 20 74 68 65 20 6b 65  h term of the ke
158c0 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  y */.};../*.** T
158d0 68 69 73 20 6f 62 6a 65 63 74 20 68 6f 6c 64 73  his object holds
158e0 20 61 20 72 65 63 6f 72 64 20 77 68 69 63 68 20   a record which 
158f0 68 61 73 20 62 65 65 6e 20 70 61 72 73 65 64 20  has been parsed 
15900 6f 75 74 20 69 6e 74 6f 20 69 6e 64 69 76 69 64  out into individ
15910 75 61 6c 0a 2a 2a 20 66 69 65 6c 64 73 2c 20 66  ual.** fields, f
15920 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73 20  or the purposes 
15930 6f 66 20 64 6f 69 6e 67 20 61 20 63 6f 6d 70 61  of doing a compa
15940 72 69 73 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 20 72  rison..**.** A r
15950 65 63 6f 72 64 20 69 73 20 61 6e 20 6f 62 6a 65  ecord is an obje
15960 63 74 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  ct that contains
15970 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 66 69 65   one or more fie
15980 6c 64 73 20 6f 66 20 64 61 74 61 2e 0a 2a 2a 20  lds of data..** 
15990 52 65 63 6f 72 64 73 20 61 72 65 20 75 73 65 64  Records are used
159a0 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 63 6f   to store the co
159b0 6e 74 65 6e 74 20 6f 66 20 61 20 74 61 62 6c 65  ntent of a table
159c0 20 72 6f 77 20 61 6e 64 20 74 6f 20 73 74 6f 72   row and to stor
159d0 65 0a 2a 2a 20 74 68 65 20 6b 65 79 20 6f 66 20  e.** the key of 
159e0 61 6e 20 69 6e 64 65 78 2e 20 20 41 20 62 6c 6f  an index.  A blo
159f0 62 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20  b encoding of a 
15a00 72 65 63 6f 72 64 20 69 73 20 63 72 65 61 74 65  record is create
15a10 64 20 62 79 0a 2a 2a 20 74 68 65 20 4f 50 5f 4d  d by.** the OP_M
15a20 61 6b 65 52 65 63 6f 72 64 20 6f 70 63 6f 64 65  akeRecord opcode
15a30 20 6f 66 20 74 68 65 20 56 44 42 45 20 61 6e 64   of the VDBE and
15a40 20 69 73 20 64 69 73 61 73 73 65 6d 62 6c 65 64   is disassembled
15a50 20 62 79 20 74 68 65 0a 2a 2a 20 4f 50 5f 43 6f   by the.** OP_Co
15a60 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a  lumn opcode..**.
15a70 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
15a80 66 20 74 68 69 73 20 6f 62 6a 65 63 74 20 73 65  f this object se
15a90 72 76 65 73 20 61 73 20 61 20 22 6b 65 79 22 20  rves as a "key" 
15aa0 66 6f 72 20 64 6f 69 6e 67 20 61 20 73 65 61 72  for doing a sear
15ab0 63 68 20 6f 6e 0a 2a 2a 20 61 6e 20 69 6e 64 65  ch on.** an inde
15ac0 78 20 62 2b 74 72 65 65 2e 20 54 68 65 20 67 6f  x b+tree. The go
15ad0 61 6c 20 6f 66 20 74 68 65 20 73 65 61 72 63 68  al of the search
15ae0 20 69 73 20 74 6f 20 66 69 6e 64 20 74 68 65 20   is to find the 
15af0 65 6e 74 72 79 20 74 68 61 74 0a 2a 2a 20 69 73  entry that.** is
15b00 20 63 6c 6f 73 65 64 20 74 6f 20 74 68 65 20 6b   closed to the k
15b10 65 79 20 64 65 73 63 72 69 62 65 64 20 62 79 20  ey described by 
15b20 74 68 69 73 20 6f 62 6a 65 63 74 2e 20 20 54 68  this object.  Th
15b30 69 73 20 6f 62 6a 65 63 74 20 6d 69 67 68 74 20  is object might 
15b40 68 6f 6c 64 0a 2a 2a 20 6a 75 73 74 20 61 20 70  hold.** just a p
15b50 72 65 66 69 78 20 6f 66 20 74 68 65 20 6b 65 79  refix of the key
15b60 2e 20 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66  .  The number of
15b70 20 66 69 65 6c 64 73 20 69 73 20 67 69 76 65 6e   fields is given
15b80 20 62 79 0a 2a 2a 20 70 4b 65 79 49 6e 66 6f 2d   by.** pKeyInfo-
15b90 3e 6e 46 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54  >nField..**.** T
15ba0 68 65 20 72 31 20 61 6e 64 20 72 32 20 66 69 65  he r1 and r2 fie
15bb0 6c 64 73 20 61 72 65 20 74 68 65 20 76 61 6c 75  lds are the valu
15bc0 65 73 20 74 6f 20 72 65 74 75 72 6e 20 69 66 20  es to return if 
15bd0 74 68 69 73 20 6b 65 79 20 69 73 20 6c 65 73 73  this key is less
15be0 20 74 68 61 6e 0a 2a 2a 20 6f 72 20 67 72 65 61   than.** or grea
15bf0 74 65 72 20 74 68 61 6e 20 61 20 6b 65 79 20 69  ter than a key i
15c00 6e 20 74 68 65 20 62 74 72 65 65 2c 20 72 65 73  n the btree, res
15c10 70 65 63 74 69 76 65 6c 79 2e 20 20 54 68 65 73  pectively.  Thes
15c20 65 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 0a 2a  e are normally.*
15c30 2a 20 2d 31 20 61 6e 64 20 2b 31 20 72 65 73 70  * -1 and +1 resp
15c40 65 63 74 69 76 65 6c 79 2c 20 62 75 74 20 6d 69  ectively, but mi
15c50 67 68 74 20 62 65 20 69 6e 76 65 72 74 65 64 20  ght be inverted 
15c60 74 6f 20 2b 31 20 61 6e 64 20 2d 31 20 69 66 20  to +1 and -1 if 
15c70 74 68 65 20 62 2d 74 72 65 65 0a 2a 2a 20 69 73  the b-tree.** is
15c80 20 69 6e 20 44 45 53 43 20 6f 72 64 65 72 2e 0a   in DESC order..
15c90 2a 2a 0a 2a 2a 20 54 68 65 20 6b 65 79 20 63 6f  **.** The key co
15ca0 6d 70 61 72 69 73 6f 6e 20 66 75 6e 63 74 69 6f  mparison functio
15cb0 6e 73 20 61 63 74 75 61 6c 6c 79 20 72 65 74 75  ns actually retu
15cc0 72 6e 20 64 65 66 61 75 6c 74 5f 72 63 20 77 68  rn default_rc wh
15cd0 65 6e 20 74 68 65 79 20 66 69 6e 64 0a 2a 2a 20  en they find.** 
15ce0 61 6e 20 65 71 75 61 6c 73 20 63 6f 6d 70 61 72  an equals compar
15cf0 69 73 6f 6e 2e 20 20 64 65 66 61 75 6c 74 5f 72  ison.  default_r
15d00 63 20 63 61 6e 20 62 65 20 2d 31 2c 20 30 2c 20  c can be -1, 0, 
15d10 6f 72 20 2b 31 2e 20 20 49 66 20 74 68 65 72 65  or +1.  If there
15d20 20 61 72 65 0a 2a 2a 20 6d 75 6c 74 69 70 6c 65   are.** multiple
15d30 20 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20   entries in the 
15d40 62 2d 74 72 65 65 20 77 69 74 68 20 74 68 65 20  b-tree with the 
15d50 73 61 6d 65 20 6b 65 79 20 28 77 68 65 6e 20 6f  same key (when o
15d60 6e 6c 79 20 6c 6f 6f 6b 69 6e 67 0a 2a 2a 20 61  nly looking.** a
15d70 74 20 74 68 65 20 66 69 72 73 74 20 70 4b 65 79  t the first pKey
15d80 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 73 2c 29 20  Info->nFields,) 
15d90 74 68 65 6e 20 64 65 66 61 75 6c 74 5f 72 63 20  then default_rc 
15da0 63 61 6e 20 62 65 20 73 65 74 20 74 6f 20 2d 31  can be set to -1
15db0 20 74 6f 0a 2a 2a 20 63 61 75 73 65 20 74 68 65   to.** cause the
15dc0 20 73 65 61 72 63 68 20 74 6f 20 66 69 6e 64 20   search to find 
15dd0 74 68 65 20 6c 61 73 74 20 6d 61 74 63 68 2c 20  the last match, 
15de0 6f 72 20 2b 31 20 74 6f 20 63 61 75 73 65 20 74  or +1 to cause t
15df0 68 65 20 73 65 61 72 63 68 20 74 6f 0a 2a 2a 20  he search to.** 
15e00 66 69 6e 64 20 74 68 65 20 66 69 72 73 74 20 6d  find the first m
15e10 61 74 63 68 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  atch..**.** The 
15e20 6b 65 79 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66  key comparison f
15e30 75 6e 63 74 69 6f 6e 73 20 77 69 6c 6c 20 73 65  unctions will se
15e40 74 20 65 71 53 65 65 6e 20 74 6f 20 74 72 75 65  t eqSeen to true
15e50 20 69 66 20 74 68 65 79 20 65 76 65 72 0a 2a 2a   if they ever.**
15e60 20 67 65 74 20 61 6e 64 20 65 71 75 61 6c 20 72   get and equal r
15e70 65 73 75 6c 74 73 20 77 68 65 6e 20 63 6f 6d 70  esults when comp
15e80 61 72 69 6e 67 20 74 68 69 73 20 73 74 72 75 63  aring this struc
15e90 74 75 72 65 20 74 6f 20 61 20 62 2d 74 72 65 65  ture to a b-tree
15ea0 20 72 65 63 6f 72 64 2e 0a 2a 2a 20 57 68 65 6e   record..** When
15eb0 20 64 65 66 61 75 6c 74 5f 72 63 21 3d 30 2c 20   default_rc!=0, 
15ec0 74 68 65 20 73 65 61 72 63 68 20 6d 69 67 68 74  the search might
15ed0 20 65 6e 64 20 75 70 20 6f 6e 20 74 68 65 20 72   end up on the r
15ee0 65 63 6f 72 64 20 69 6d 6d 65 64 69 61 74 65 6c  ecord immediatel
15ef0 79 0a 2a 2a 20 62 65 66 6f 72 65 20 74 68 65 20  y.** before the 
15f00 66 69 72 73 74 20 6d 61 74 63 68 20 6f 72 20 69  first match or i
15f10 6d 6d 65 64 69 61 74 65 6c 79 20 61 66 74 65 72  mmediately after
15f20 20 74 68 65 20 6c 61 73 74 20 6d 61 74 63 68 2e   the last match.
15f30 20 20 54 68 65 0a 2a 2a 20 65 71 53 65 65 6e 20    The.** eqSeen 
15f40 66 69 65 6c 64 20 77 69 6c 6c 20 69 6e 64 69 63  field will indic
15f50 61 74 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e  ate whether or n
15f60 6f 74 20 61 6e 20 65 78 61 63 74 20 6d 61 74 63  ot an exact matc
15f70 68 20 65 78 69 73 74 73 20 69 6e 20 74 68 65 0a  h exists in the.
15f80 2a 2a 20 62 2d 74 72 65 65 2e 0a 2a 2f 0a 73 74  ** b-tree..*/.st
15f90 72 75 63 74 20 55 6e 70 61 63 6b 65 64 52 65 63  ruct UnpackedRec
15fa0 6f 72 64 20 7b 0a 20 20 4b 65 79 49 6e 66 6f 20  ord {.  KeyInfo 
15fb0 2a 70 4b 65 79 49 6e 66 6f 3b 20 20 2f 2a 20 43  *pKeyInfo;  /* C
15fc0 6f 6c 6c 61 74 69 6f 6e 20 61 6e 64 20 73 6f 72  ollation and sor
15fd0 74 2d 6f 72 64 65 72 20 69 6e 66 6f 72 6d 61 74  t-order informat
15fe0 69 6f 6e 20 2a 2f 0a 20 20 4d 65 6d 20 2a 61 4d  ion */.  Mem *aM
15ff0 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  em;          /* 
16000 56 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31 36 20  Values */.  u16 
16010 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20  nField;         
16020 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74  /* Number of ent
16030 72 69 65 73 20 69 6e 20 61 70 4d 65 6d 5b 5d 20  ries in apMem[] 
16040 2a 2f 0a 20 20 69 38 20 64 65 66 61 75 6c 74 5f  */.  i8 default_
16050 72 63 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70  rc;      /* Comp
16060 61 72 69 73 6f 6e 20 72 65 73 75 6c 74 20 69 66  arison result if
16070 20 6b 65 79 73 20 61 72 65 20 65 71 75 61 6c 20   keys are equal 
16080 2a 2f 0a 20 20 75 38 20 65 72 72 43 6f 64 65 3b  */.  u8 errCode;
16090 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72 6f           /* Erro
160a0 72 20 64 65 74 65 63 74 65 64 20 62 79 20 78 52  r detected by xR
160b0 65 63 6f 72 64 43 6f 6d 70 61 72 65 20 28 43 4f  ecordCompare (CO
160c0 52 52 55 50 54 20 6f 72 20 4e 4f 4d 45 4d 29 20  RRUPT or NOMEM) 
160d0 2a 2f 0a 20 20 69 38 20 72 31 3b 20 20 20 20 20  */.  i8 r1;     
160e0 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
160f0 65 20 74 6f 20 72 65 74 75 72 6e 20 69 66 20 28  e to return if (
16100 6c 68 73 20 3c 20 72 68 73 29 20 2a 2f 0a 20 20  lhs < rhs) */.  
16110 69 38 20 72 32 3b 20 20 20 20 20 20 20 20 20 20  i8 r2;          
16120 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20      /* Value to 
16130 72 65 74 75 72 6e 20 69 66 20 28 6c 68 73 20 3e  return if (lhs >
16140 20 72 68 73 29 20 2a 2f 0a 20 20 75 38 20 65 71   rhs) */.  u8 eq
16150 53 65 65 6e 3b 20 20 20 20 20 20 20 20 20 20 2f  Seen;          /
16160 2a 20 54 72 75 65 20 69 66 20 61 6e 20 65 71 75  * True if an equ
16170 61 6c 69 74 79 20 63 6f 6d 70 61 72 69 73 6f 6e  ality comparison
16180 20 68 61 73 20 62 65 65 6e 20 73 65 65 6e 20 2a   has been seen *
16190 2f 0a 7d 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  /.};.../*.** Eac
161a0 68 20 53 51 4c 20 69 6e 64 65 78 20 69 73 20 72  h SQL index is r
161b0 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65  epresented in me
161c0 6d 6f 72 79 20 62 79 20 61 6e 0a 2a 2a 20 69 6e  mory by an.** in
161d0 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
161e0 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
161f0 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6c  e..**.** The col
16200 75 6d 6e 73 20 6f 66 20 74 68 65 20 74 61 62 6c  umns of the tabl
16210 65 20 74 68 61 74 20 61 72 65 20 74 6f 20 62 65  e that are to be
16220 20 69 6e 64 65 78 65 64 20 61 72 65 20 64 65 73   indexed are des
16230 63 72 69 62 65 64 0a 2a 2a 20 62 79 20 74 68 65  cribed.** by the
16240 20 61 69 43 6f 6c 75 6d 6e 5b 5d 20 66 69 65 6c   aiColumn[] fiel
16250 64 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  d of this struct
16260 75 72 65 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c  ure.  For exampl
16270 65 2c 20 73 75 70 70 6f 73 65 0a 2a 2a 20 77 65  e, suppose.** we
16280 20 68 61 76 65 20 74 68 65 20 66 6f 6c 6c 6f 77   have the follow
16290 69 6e 67 20 74 61 62 6c 65 20 61 6e 64 20 69 6e  ing table and in
162a0 64 65 78 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43  dex:.**.**     C
162b0 52 45 41 54 45 20 54 41 42 4c 45 20 45 78 31 28  REATE TABLE Ex1(
162c0 63 31 20 69 6e 74 2c 20 63 32 20 69 6e 74 2c 20  c1 int, c2 int, 
162d0 63 33 20 74 65 78 74 29 3b 0a 2a 2a 20 20 20 20  c3 text);.**    
162e0 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 45 78   CREATE INDEX Ex
162f0 32 20 4f 4e 20 45 78 31 28 63 33 2c 63 31 29 3b  2 ON Ex1(c3,c1);
16300 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 54 61  .**.** In the Ta
16310 62 6c 65 20 73 74 72 75 63 74 75 72 65 20 64 65  ble structure de
16320 73 63 72 69 62 69 6e 67 20 45 78 31 2c 20 6e 43  scribing Ex1, nC
16330 6f 6c 3d 3d 33 20 62 65 63 61 75 73 65 20 74 68  ol==3 because th
16340 65 72 65 20 61 72 65 0a 2a 2a 20 74 68 72 65 65  ere are.** three
16350 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
16360 74 61 62 6c 65 2e 20 20 49 6e 20 74 68 65 20 49  table.  In the I
16370 6e 64 65 78 20 73 74 72 75 63 74 75 72 65 20 64  ndex structure d
16380 65 73 63 72 69 62 69 6e 67 0a 2a 2a 20 45 78 32  escribing.** Ex2
16390 2c 20 6e 43 6f 6c 75 6d 6e 3d 3d 32 20 73 69 6e  , nColumn==2 sin
163a0 63 65 20 32 20 6f 66 20 74 68 65 20 33 20 63 6f  ce 2 of the 3 co
163b0 6c 75 6d 6e 73 20 6f 66 20 45 78 31 20 61 72 65  lumns of Ex1 are
163c0 20 69 6e 64 65 78 65 64 2e 0a 2a 2a 20 54 68 65   indexed..** The
163d0 20 76 61 6c 75 65 20 6f 66 20 61 69 43 6f 6c 75   value of aiColu
163e0 6d 6e 20 69 73 20 7b 32 2c 20 30 7d 2e 20 20 61  mn is {2, 0}.  a
163f0 69 43 6f 6c 75 6d 6e 5b 30 5d 3d 3d 32 20 62 65  iColumn[0]==2 be
16400 63 61 75 73 65 20 74 68 65 0a 2a 2a 20 66 69 72  cause the.** fir
16410 73 74 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20  st column to be 
16420 69 6e 64 65 78 65 64 20 28 63 33 29 20 68 61 73  indexed (c3) has
16430 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 32 20 69   an index of 2 i
16440 6e 20 45 78 31 2e 61 43 6f 6c 5b 5d 2e 0a 2a 2a  n Ex1.aCol[]..**
16450 20 54 68 65 20 73 65 63 6f 6e 64 20 63 6f 6c 75   The second colu
16460 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64  mn to be indexed
16470 20 28 63 31 29 20 68 61 73 20 61 6e 20 69 6e 64   (c1) has an ind
16480 65 78 20 6f 66 20 30 20 69 6e 0a 2a 2a 20 45 78  ex of 0 in.** Ex
16490 31 2e 61 43 6f 6c 5b 5d 2c 20 68 65 6e 63 65 20  1.aCol[], hence 
164a0 45 78 32 2e 61 69 43 6f 6c 75 6d 6e 5b 31 5d 3d  Ex2.aiColumn[1]=
164b0 3d 30 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 6e  =0..**.** The In
164c0 64 65 78 2e 6f 6e 45 72 72 6f 72 20 66 69 65 6c  dex.onError fiel
164d0 64 20 64 65 74 65 72 6d 69 6e 65 73 20 77 68 65  d determines whe
164e0 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20  ther or not the 
164f0 69 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 73 0a  indexed columns.
16500 2a 2a 20 6d 75 73 74 20 62 65 20 75 6e 69 71 75  ** must be uniqu
16510 65 20 61 6e 64 20 77 68 61 74 20 74 6f 20 64 6f  e and what to do
16520 20 69 66 20 74 68 65 79 20 61 72 65 20 6e 6f 74   if they are not
16530 2e 20 20 57 68 65 6e 20 49 6e 64 65 78 2e 6f 6e  .  When Index.on
16540 45 72 72 6f 72 3d 4f 45 5f 4e 6f 6e 65 2c 0a 2a  Error=OE_None,.*
16550 2a 20 69 74 20 6d 65 61 6e 73 20 74 68 69 73 20  * it means this 
16560 69 73 20 6e 6f 74 20 61 20 75 6e 69 71 75 65 20  is not a unique 
16570 69 6e 64 65 78 2e 20 20 4f 74 68 65 72 77 69 73  index.  Otherwis
16580 65 20 69 74 20 69 73 20 61 20 75 6e 69 71 75 65  e it is a unique
16590 20 69 6e 64 65 78 0a 2a 2a 20 61 6e 64 20 74 68   index.** and th
165a0 65 20 76 61 6c 75 65 20 6f 66 20 49 6e 64 65 78  e value of Index
165b0 2e 6f 6e 45 72 72 6f 72 20 69 6e 64 69 63 61 74  .onError indicat
165c0 65 20 74 68 65 20 77 68 69 63 68 20 63 6f 6e 66  e the which conf
165d0 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 0a  lict resolution.
165e0 2a 2a 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20  ** algorithm to 
165f0 65 6d 70 6c 6f 79 20 77 68 65 6e 65 76 65 72 20  employ whenever 
16600 61 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61  an attempt is ma
16610 64 65 20 74 6f 20 69 6e 73 65 72 74 20 61 20 6e  de to insert a n
16620 6f 6e 2d 75 6e 69 71 75 65 0a 2a 2a 20 65 6c 65  on-unique.** ele
16630 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 57 68 69 6c  ment..**.** Whil
16640 65 20 70 61 72 73 69 6e 67 20 61 20 43 52 45 41  e parsing a CREA
16650 54 45 20 54 41 42 4c 45 20 6f 72 20 43 52 45 41  TE TABLE or CREA
16660 54 45 20 49 4e 44 45 58 20 73 74 61 74 65 6d 65  TE INDEX stateme
16670 6e 74 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a  nt in order to.*
16680 2a 20 67 65 6e 65 72 61 74 65 20 56 44 42 45 20  * generate VDBE 
16690 63 6f 64 65 20 28 61 73 20 6f 70 70 6f 73 65 64  code (as opposed
166a0 20 74 6f 20 70 61 72 73 69 6e 67 20 6f 6e 65 20   to parsing one 
166b0 72 65 61 64 20 66 72 6f 6d 20 61 6e 20 73 71 6c  read from an sql
166c0 69 74 65 5f 6d 61 73 74 65 72 0a 2a 2a 20 74 61  ite_master.** ta
166d0 62 6c 65 20 61 73 20 70 61 72 74 20 6f 66 20 70  ble as part of p
166e0 61 72 73 69 6e 67 20 61 6e 20 65 78 69 73 74 69  arsing an existi
166f0 6e 67 20 64 61 74 61 62 61 73 65 20 73 63 68 65  ng database sche
16700 6d 61 29 2c 20 74 72 61 6e 73 69 65 6e 74 20 69  ma), transient i
16710 6e 73 74 61 6e 63 65 73 0a 2a 2a 20 6f 66 20 74  nstances.** of t
16720 68 69 73 20 73 74 72 75 63 74 75 72 65 20 6d 61  his structure ma
16730 79 20 62 65 20 63 72 65 61 74 65 64 2e 20 49 6e  y be created. In
16740 20 74 68 69 73 20 63 61 73 65 20 74 68 65 20 49   this case the I
16750 6e 64 65 78 2e 74 6e 75 6d 20 76 61 72 69 61 62  ndex.tnum variab
16760 6c 65 20 69 73 0a 2a 2a 20 75 73 65 64 20 74 6f  le is.** used to
16770 20 73 74 6f 72 65 20 74 68 65 20 61 64 64 72 65   store the addre
16780 73 73 20 6f 66 20 61 20 56 44 42 45 20 69 6e 73  ss of a VDBE ins
16790 74 72 75 63 74 69 6f 6e 2c 20 6e 6f 74 20 61 20  truction, not a 
167a0 64 61 74 61 62 61 73 65 20 70 61 67 65 0a 2a 2a  database page.**
167b0 20 6e 75 6d 62 65 72 20 28 69 74 20 63 61 6e 6e   number (it cann
167c0 6f 74 20 2d 20 74 68 65 20 64 61 74 61 62 61 73  ot - the databas
167d0 65 20 70 61 67 65 20 69 73 20 6e 6f 74 20 61 6c  e page is not al
167e0 6c 6f 63 61 74 65 64 20 75 6e 74 69 6c 20 74 68  located until th
167f0 65 20 56 44 42 45 0a 2a 2a 20 70 72 6f 67 72 61  e VDBE.** progra
16800 6d 20 69 73 20 65 78 65 63 75 74 65 64 29 2e 20  m is executed). 
16810 53 65 65 20 63 6f 6e 76 65 72 74 54 6f 57 69 74  See convertToWit
16820 68 6f 75 74 52 6f 77 69 64 54 61 62 6c 65 28 29  houtRowidTable()
16830 20 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a 2a 2f   for details..*/
16840 0a 73 74 72 75 63 74 20 49 6e 64 65 78 20 7b 0a  .struct Index {.
16850 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
16860 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61             /* Na
16870 6d 65 20 6f 66 20 74 68 69 73 20 69 6e 64 65 78  me of this index
16880 20 2a 2f 0a 20 20 69 31 36 20 2a 61 69 43 6f 6c   */.  i16 *aiCol
16890 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f  umn;           /
168a0 2a 20 57 68 69 63 68 20 63 6f 6c 75 6d 6e 73 20  * Which columns 
168b0 61 72 65 20 75 73 65 64 20 62 79 20 74 68 69 73  are used by this
168c0 20 69 6e 64 65 78 2e 20 20 31 73 74 20 69 73 20   index.  1st is 
168d0 30 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 2a 61  0 */.  LogEst *a
168e0 69 52 6f 77 4c 6f 67 45 73 74 3b 20 20 20 20 20  iRowLogEst;     
168f0 2f 2a 20 46 72 6f 6d 20 41 4e 41 4c 59 5a 45 3a  /* From ANALYZE:
16900 20 45 73 74 2e 20 72 6f 77 73 20 73 65 6c 65 63   Est. rows selec
16910 74 65 64 20 62 79 20 65 61 63 68 20 63 6f 6c 75  ted by each colu
16920 6d 6e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  mn */.  Table *p
16930 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20  Table;          
16940 20 2f 2a 20 54 68 65 20 53 51 4c 20 74 61 62 6c   /* The SQL tabl
16950 65 20 62 65 69 6e 67 20 69 6e 64 65 78 65 64 20  e being indexed 
16960 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41  */.  char *zColA
16970 66 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ff;           /*
16980 20 53 74 72 69 6e 67 20 64 65 66 69 6e 69 6e 67   String defining
16990 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66   the affinity of
169a0 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   each column */.
169b0 20 20 49 6e 64 65 78 20 2a 70 4e 65 78 74 3b 20    Index *pNext; 
169c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
169d0 65 20 6e 65 78 74 20 69 6e 64 65 78 20 61 73 73  e next index ass
169e0 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65  ociated with the
169f0 20 73 61 6d 65 20 74 61 62 6c 65 20 2a 2f 0a 20   same table */. 
16a00 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61   Schema *pSchema
16a10 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53 63 68  ;         /* Sch
16a20 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ema containing t
16a30 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75  his index */.  u
16a40 38 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20 20  8 *aSortOrder;  
16a50 20 20 20 20 20 20 20 20 2f 2a 20 66 6f 72 20 65          /* for e
16a60 61 63 68 20 63 6f 6c 75 6d 6e 3a 20 54 72 75 65  ach column: True
16a70 3d 3d 44 45 53 43 2c 20 46 61 6c 73 65 3d 3d 41  ==DESC, False==A
16a80 53 43 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  SC */.  const ch
16a90 61 72 20 2a 2a 61 7a 43 6f 6c 6c 3b 20 20 20 20  ar **azColl;    
16aa0 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 63 6f 6c   /* Array of col
16ab0 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20  lation sequence 
16ac0 6e 61 6d 65 73 20 66 6f 72 20 69 6e 64 65 78 20  names for index 
16ad0 2a 2f 0a 20 20 45 78 70 72 20 2a 70 50 61 72 74  */.  Expr *pPart
16ae0 49 64 78 57 68 65 72 65 3b 20 20 20 20 20 2f 2a  IdxWhere;     /*
16af0 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 66 6f   WHERE clause fo
16b00 72 20 70 61 72 74 69 61 6c 20 69 6e 64 69 63 65  r partial indice
16b10 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  s */.  ExprList 
16b20 2a 61 43 6f 6c 45 78 70 72 3b 20 20 20 20 20 20  *aColExpr;      
16b30 2f 2a 20 43 6f 6c 75 6d 6e 20 65 78 70 72 65 73  /* Column expres
16b40 73 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 74  sions */.  int t
16b50 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  num;            
16b60 20 20 20 20 2f 2a 20 44 42 20 50 61 67 65 20 63      /* DB Page c
16b70 6f 6e 74 61 69 6e 69 6e 67 20 72 6f 6f 74 20 6f  ontaining root o
16b80 66 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a  f this index */.
16b90 20 20 4c 6f 67 45 73 74 20 73 7a 49 64 78 52 6f    LogEst szIdxRo
16ba0 77 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 45 73  w;         /* Es
16bb0 74 69 6d 61 74 65 64 20 61 76 65 72 61 67 65 20  timated average 
16bc0 72 6f 77 20 73 69 7a 65 20 69 6e 20 62 79 74 65  row size in byte
16bd0 73 20 2a 2f 0a 20 20 75 31 36 20 6e 4b 65 79 43  s */.  u16 nKeyC
16be0 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ol;             
16bf0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
16c00 75 6d 6e 73 20 66 6f 72 6d 69 6e 67 20 74 68 65  umns forming the
16c10 20 6b 65 79 20 2a 2f 0a 20 20 75 31 36 20 6e 43   key */.  u16 nC
16c20 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20  olumn;          
16c30 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
16c40 63 6f 6c 75 6d 6e 73 20 73 74 6f 72 65 64 20 69  columns stored i
16c50 6e 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20  n the index */. 
16c60 20 75 38 20 6f 6e 45 72 72 6f 72 3b 20 20 20 20   u8 onError;    
16c70 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f            /* OE_
16c80 41 62 6f 72 74 2c 20 4f 45 5f 49 67 6e 6f 72 65  Abort, OE_Ignore
16c90 2c 20 4f 45 5f 52 65 70 6c 61 63 65 2c 20 6f 72  , OE_Replace, or
16ca0 20 4f 45 5f 4e 6f 6e 65 20 2a 2f 0a 20 20 75 6e   OE_None */.  un
16cb0 73 69 67 6e 65 64 20 69 64 78 54 79 70 65 3a 32  signed idxType:2
16cc0 3b 20 20 20 20 20 20 2f 2a 20 30 3a 4e 6f 72 6d  ;      /* 0:Norm
16cd0 61 6c 20 31 3a 55 4e 49 51 55 45 2c 20 32 3a 50  al 1:UNIQUE, 2:P
16ce0 52 49 4d 41 52 59 20 4b 45 59 2c 20 33 3a 49 50  RIMARY KEY, 3:IP
16cf0 4b 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  K */.  unsigned 
16d00 62 55 6e 6f 72 64 65 72 65 64 3a 31 3b 20 20 20  bUnordered:1;   
16d10 2f 2a 20 55 73 65 20 74 68 69 73 20 69 6e 64 65  /* Use this inde
16d20 78 20 66 6f 72 20 3d 3d 20 6f 72 20 49 4e 20 71  x for == or IN q
16d30 75 65 72 69 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20  ueries only */. 
16d40 20 75 6e 73 69 67 6e 65 64 20 75 6e 69 71 4e 6f   unsigned uniqNo
16d50 74 4e 75 6c 6c 3a 31 3b 20 20 2f 2a 20 54 72 75  tNull:1;  /* Tru
16d60 65 20 69 66 20 55 4e 49 51 55 45 20 61 6e 64 20  e if UNIQUE and 
16d70 4e 4f 54 20 4e 55 4c 4c 20 66 6f 72 20 61 6c 6c  NOT NULL for all
16d80 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 75 6e   columns */.  un
16d90 73 69 67 6e 65 64 20 69 73 52 65 73 69 7a 65 64  signed isResized
16da0 3a 31 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69  :1;    /* True i
16db0 66 20 72 65 73 69 7a 65 49 6e 64 65 78 4f 62 6a  f resizeIndexObj
16dc0 65 63 74 28 29 20 68 61 73 20 62 65 65 6e 20 63  ect() has been c
16dd0 61 6c 6c 65 64 20 2a 2f 0a 20 20 75 6e 73 69 67  alled */.  unsig
16de0 6e 65 64 20 69 73 43 6f 76 65 72 69 6e 67 3a 31  ned isCovering:1
16df0 3b 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74  ;   /* True if t
16e00 68 69 73 20 69 73 20 61 20 63 6f 76 65 72 69 6e  his is a coverin
16e10 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 6e 73  g index */.  uns
16e20 69 67 6e 65 64 20 6e 6f 53 6b 69 70 53 63 61 6e  igned noSkipScan
16e30 3a 31 3b 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20  :1;   /* Do not 
16e40 74 72 79 20 74 6f 20 75 73 65 20 73 6b 69 70 2d  try to use skip-
16e50 73 63 61 6e 20 69 66 20 74 72 75 65 20 2a 2f 0a  scan if true */.
16e60 20 20 75 6e 73 69 67 6e 65 64 20 68 61 73 53 74    unsigned hasSt
16e70 61 74 31 3a 31 3b 20 20 20 20 20 2f 2a 20 61 69  at1:1;     /* ai
16e80 52 6f 77 4c 6f 67 45 73 74 20 76 61 6c 75 65 73  RowLogEst values
16e90 20 63 6f 6d 65 20 66 72 6f 6d 20 73 71 6c 69 74   come from sqlit
16ea0 65 5f 73 74 61 74 31 20 2a 2f 0a 20 20 75 6e 73  e_stat1 */.  uns
16eb0 69 67 6e 65 64 20 62 4e 6f 51 75 65 72 79 3a 31  igned bNoQuery:1
16ec0 3b 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20  ;     /* Do not 
16ed0 75 73 65 20 74 68 69 73 20 69 6e 64 65 78 20 74  use this index t
16ee0 6f 20 6f 70 74 69 6d 69 7a 65 20 71 75 65 72 69  o optimize queri
16ef0 65 73 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  es */.  unsigned
16f00 20 62 41 73 63 4b 65 79 42 75 67 3a 31 3b 20 20   bAscKeyBug:1;  
16f10 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 20   /* True if the 
16f20 62 62 61 37 62 36 39 66 39 38 34 39 62 35 62 66  bba7b69f9849b5bf
16f30 20 62 75 67 20 61 70 70 6c 69 65 73 20 2a 2f 0a   bug applies */.
16f40 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
16f50 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54  ABLE_STAT3_OR_ST
16f60 41 54 34 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c  AT4.  int nSampl
16f70 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  e;             /
16f80 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d  * Number of elem
16f90 65 6e 74 73 20 69 6e 20 61 53 61 6d 70 6c 65 5b  ents in aSample[
16fa0 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61 6d 70  ] */.  int nSamp
16fb0 6c 65 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20  leCol;          
16fc0 2f 2a 20 53 69 7a 65 20 6f 66 20 49 6e 64 65 78  /* Size of Index
16fd0 53 61 6d 70 6c 65 2e 61 6e 45 71 5b 5d 20 61 6e  Sample.anEq[] an
16fe0 64 20 73 6f 20 6f 6e 20 2a 2f 0a 20 20 74 52 6f  d so on */.  tRo
16ff0 77 63 6e 74 20 2a 61 41 76 67 45 71 3b 20 20 20  wcnt *aAvgEq;   
17000 20 20 20 20 20 20 2f 2a 20 41 76 65 72 61 67 65        /* Average
17010 20 6e 45 71 20 76 61 6c 75 65 73 20 66 6f 72 20   nEq values for 
17020 6b 65 79 73 20 6e 6f 74 20 69 6e 20 61 53 61 6d  keys not in aSam
17030 70 6c 65 20 2a 2f 0a 20 20 49 6e 64 65 78 53 61  ple */.  IndexSa
17040 6d 70 6c 65 20 2a 61 53 61 6d 70 6c 65 3b 20 20  mple *aSample;  
17050 20 20 2f 2a 20 53 61 6d 70 6c 65 73 20 6f 66 20    /* Samples of 
17060 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 6b 65  the left-most ke
17070 79 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a  y */.  tRowcnt *
17080 61 69 52 6f 77 45 73 74 3b 20 20 20 20 20 20 20  aiRowEst;       
17090 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d  /* Non-logarithm
170a0 69 63 20 73 74 61 74 31 20 64 61 74 61 20 66 6f  ic stat1 data fo
170b0 72 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a  r this index */.
170c0 20 20 74 52 6f 77 63 6e 74 20 6e 52 6f 77 45 73    tRowcnt nRowEs
170d0 74 30 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f  t0;        /* No
170e0 6e 2d 6c 6f 67 61 72 69 74 68 6d 69 63 20 6e 75  n-logarithmic nu
170f0 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20  mber of rows in 
17100 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 23 65 6e  the index */.#en
17110 64 69 66 0a 20 20 42 69 74 6d 61 73 6b 20 63 6f  dif.  Bitmask co
17120 6c 4e 6f 74 49 64 78 65 64 3b 20 20 20 20 20 2f  lNotIdxed;     /
17130 2a 20 30 20 66 6f 72 20 75 6e 69 6e 64 65 78 65  * 0 for unindexe
17140 64 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 70 54 61  d columns in pTa
17150 62 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  b */.};../*.** A
17160 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f  llowed values fo
17170 72 20 49 6e 64 65 78 2e 69 64 78 54 79 70 65 0a  r Index.idxType.
17180 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
17190 45 5f 49 44 58 54 59 50 45 5f 41 50 50 44 45 46  E_IDXTYPE_APPDEF
171a0 20 20 20 20 20 20 30 20 20 20 2f 2a 20 43 72 65        0   /* Cre
171b0 61 74 65 64 20 75 73 69 6e 67 20 43 52 45 41 54  ated using CREAT
171c0 45 20 49 4e 44 45 58 20 2a 2f 0a 23 64 65 66 69  E INDEX */.#defi
171d0 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50  ne SQLITE_IDXTYP
171e0 45 5f 55 4e 49 51 55 45 20 20 20 20 20 20 31 20  E_UNIQUE      1 
171f0 20 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 73 20    /* Implements 
17200 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61  a UNIQUE constra
17210 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  int */.#define S
17220 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 50 52  QLITE_IDXTYPE_PR
17230 49 4d 41 52 59 4b 45 59 20 20 32 20 20 20 2f 2a  IMARYKEY  2   /*
17240 20 49 73 20 74 68 65 20 50 52 49 4d 41 52 59 20   Is the PRIMARY 
17250 4b 45 59 20 66 6f 72 20 74 68 65 20 74 61 62 6c  KEY for the tabl
17260 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e */.#define SQL
17270 49 54 45 5f 49 44 58 54 59 50 45 5f 49 50 4b 20  ITE_IDXTYPE_IPK 
17280 20 20 20 20 20 20 20 20 33 20 20 20 2f 2a 20 49          3   /* I
17290 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
172a0 45 59 20 69 6e 64 65 78 20 2a 2f 0a 0a 2f 2a 20  EY index */../* 
172b0 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 69  Return true if i
172c0 6e 64 65 78 20 58 20 69 73 20 61 20 50 52 49 4d  ndex X is a PRIM
172d0 41 52 59 20 4b 45 59 20 69 6e 64 65 78 20 2a 2f  ARY KEY index */
172e0 0a 23 64 65 66 69 6e 65 20 49 73 50 72 69 6d 61  .#define IsPrima
172f0 72 79 4b 65 79 49 6e 64 65 78 28 58 29 20 20 28  ryKeyIndex(X)  (
17300 28 58 29 2d 3e 69 64 78 54 79 70 65 3d 3d 53 51  (X)->idxType==SQ
17310 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 50 52 49  LITE_IDXTYPE_PRI
17320 4d 41 52 59 4b 45 59 29 0a 0a 2f 2a 20 52 65 74  MARYKEY)../* Ret
17330 75 72 6e 20 74 72 75 65 20 69 66 20 69 6e 64 65  urn true if inde
17340 78 20 58 20 69 73 20 61 20 55 4e 49 51 55 45 20  x X is a UNIQUE 
17350 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65  index */.#define
17360 20 49 73 55 6e 69 71 75 65 49 6e 64 65 78 28 58   IsUniqueIndex(X
17370 29 20 20 20 20 20 20 28 28 58 29 2d 3e 6f 6e 45  )      ((X)->onE
17380 72 72 6f 72 21 3d 4f 45 5f 4e 6f 6e 65 29 0a 0a  rror!=OE_None)..
17390 2f 2a 20 54 68 65 20 49 6e 64 65 78 2e 61 69 43  /* The Index.aiC
173a0 6f 6c 75 6d 6e 5b 5d 20 76 61 6c 75 65 73 20 61  olumn[] values a
173b0 72 65 20 6e 6f 72 6d 61 6c 6c 79 20 70 6f 73 69  re normally posi
173c0 74 69 76 65 20 69 6e 74 65 67 65 72 2e 20 20 42  tive integer.  B
173d0 75 74 0a 2a 2a 20 74 68 65 72 65 20 61 72 65 20  ut.** there are 
173e0 73 6f 6d 65 20 6e 65 67 61 74 69 76 65 20 76 61  some negative va
173f0 6c 75 65 73 20 74 68 61 74 20 68 61 76 65 20 73  lues that have s
17400 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67 3a 0a  pecial meaning:.
17410 2a 2f 0a 23 64 65 66 69 6e 65 20 58 4e 5f 52 4f  */.#define XN_RO
17420 57 49 44 20 20 20 20 20 28 2d 31 29 20 20 20 20  WID     (-1)    
17430 20 2f 2a 20 49 6e 64 65 78 65 64 20 63 6f 6c 75   /* Indexed colu
17440 6d 6e 20 69 73 20 74 68 65 20 72 6f 77 69 64 20  mn is the rowid 
17450 2a 2f 0a 23 64 65 66 69 6e 65 20 58 4e 5f 45 58  */.#define XN_EX
17460 50 52 20 20 20 20 20 20 28 2d 32 29 20 20 20 20  PR      (-2)    
17470 20 2f 2a 20 49 6e 64 65 78 65 64 20 63 6f 6c 75   /* Indexed colu
17480 6d 6e 20 69 73 20 61 6e 20 65 78 70 72 65 73 73  mn is an express
17490 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61  ion */../*.** Ea
174a0 63 68 20 73 61 6d 70 6c 65 20 73 74 6f 72 65 64  ch sample stored
174b0 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73   in the sqlite_s
174c0 74 61 74 33 20 74 61 62 6c 65 20 69 73 20 72 65  tat3 table is re
174d0 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d  presented in mem
174e0 6f 72 79 0a 2a 2a 20 75 73 69 6e 67 20 61 20 73  ory.** using a s
174f0 74 72 75 63 74 75 72 65 20 6f 66 20 74 68 69 73  tructure of this
17500 20 74 79 70 65 2e 20 20 53 65 65 20 64 6f 63 75   type.  See docu
17510 6d 65 6e 74 61 74 69 6f 6e 20 61 74 20 74 68 65  mentation at the
17520 20 74 6f 70 20 6f 66 20 74 68 65 0a 2a 2a 20 61   top of the.** a
17530 6e 61 6c 79 7a 65 2e 63 20 73 6f 75 72 63 65 20  nalyze.c source 
17540 66 69 6c 65 20 66 6f 72 20 61 64 64 69 74 69 6f  file for additio
17550 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
17560 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64 65 78  .*/.struct Index
17570 53 61 6d 70 6c 65 20 7b 0a 20 20 76 6f 69 64 20  Sample {.  void 
17580 2a 70 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  *p;          /* 
17590 50 6f 69 6e 74 65 72 20 74 6f 20 73 61 6d 70 6c  Pointer to sampl
175a0 65 64 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  ed record */.  i
175b0 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20  nt n;           
175c0 20 2f 2a 20 53 69 7a 65 20 6f 66 20 72 65 63 6f   /* Size of reco
175d0 72 64 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20  rd in bytes */. 
175e0 20 74 52 6f 77 63 6e 74 20 2a 61 6e 45 71 3b 20   tRowcnt *anEq; 
175f0 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65     /* Est. numbe
17600 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20  r of rows where 
17610 74 68 65 20 6b 65 79 20 65 71 75 61 6c 73 20 74  the key equals t
17620 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20  his sample */.  
17630 74 52 6f 77 63 6e 74 20 2a 61 6e 4c 74 3b 20 20  tRowcnt *anLt;  
17640 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72    /* Est. number
17650 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20 6b   of rows where k
17660 65 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  ey is less than 
17670 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20  this sample */. 
17680 20 74 52 6f 77 63 6e 74 20 2a 61 6e 44 4c 74 3b   tRowcnt *anDLt;
17690 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65     /* Est. numbe
176a0 72 20 6f 66 20 64 69 73 74 69 6e 63 74 20 6b 65  r of distinct ke
176b0 79 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69  ys less than thi
176c0 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a  s sample */.};..
176d0 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76  /*.** Possible v
176e0 61 6c 75 65 73 20 74 6f 20 75 73 65 20 77 69 74  alues to use wit
176f0 68 69 6e 20 74 68 65 20 66 6c 61 67 73 20 61 72  hin the flags ar
17700 67 75 6d 65 6e 74 20 74 6f 20 73 71 6c 69 74 65  gument to sqlite
17710 33 47 65 74 54 6f 6b 65 6e 28 29 2e 0a 2a 2f 0a  3GetToken()..*/.
17720 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54  #define SQLITE_T
17730 4f 4b 45 4e 5f 51 55 4f 54 45 44 20 20 20 20 30  OKEN_QUOTED    0
17740 78 31 20 2f 2a 20 54 6f 6b 65 6e 20 69 73 20 61  x1 /* Token is a
17750 20 71 75 6f 74 65 64 20 69 64 65 6e 74 69 66 69   quoted identifi
17760 65 72 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  er. */.#define S
17770 51 4c 49 54 45 5f 54 4f 4b 45 4e 5f 4b 45 59 57  QLITE_TOKEN_KEYW
17780 4f 52 44 20 20 20 30 78 32 20 2f 2a 20 54 6f 6b  ORD   0x2 /* Tok
17790 65 6e 20 69 73 20 61 20 6b 65 79 77 6f 72 64 2e  en is a keyword.
177a0 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20   */../*.** Each 
177b0 74 6f 6b 65 6e 20 63 6f 6d 69 6e 67 20 6f 75 74  token coming out
177c0 20 6f 66 20 74 68 65 20 6c 65 78 65 72 20 69 73   of the lexer is
177d0 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a   an instance of.
177e0 2a 2a 20 74 68 69 73 20 73 74 72 75 63 74 75 72  ** this structur
177f0 65 2e 20 20 54 6f 6b 65 6e 73 20 61 72 65 20 61  e.  Tokens are a
17800 6c 73 6f 20 75 73 65 64 20 61 73 20 70 61 72 74  lso used as part
17810 20 6f 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f   of an expressio
17820 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 65 6d  n..**.** The mem
17830 6f 72 79 20 74 68 61 74 20 22 7a 22 20 70 6f 69  ory that "z" poi
17840 6e 74 73 20 74 6f 20 69 73 20 6f 77 6e 65 64 20  nts to is owned 
17850 62 79 20 6f 74 68 65 72 20 6f 62 6a 65 63 74 73  by other objects
17860 2e 20 20 54 61 6b 65 20 63 61 72 65 0a 2a 2a 20  .  Take care.** 
17870 74 68 61 74 20 74 68 65 20 6f 77 6e 65 72 20 6f  that the owner o
17880 66 20 74 68 65 20 22 7a 22 20 73 74 72 69 6e 67  f the "z" string
17890 20 64 6f 65 73 20 6e 6f 74 20 64 65 61 6c 6c 6f   does not deallo
178a0 63 61 74 65 20 74 68 65 20 73 74 72 69 6e 67 20  cate the string 
178b0 62 65 66 6f 72 65 0a 2a 2a 20 74 68 65 20 54 6f  before.** the To
178c0 6b 65 6e 20 67 6f 65 73 20 6f 75 74 20 6f 66 20  ken goes out of 
178d0 73 63 6f 70 65 21 20 20 56 65 72 79 20 6f 66 74  scope!  Very oft
178e0 65 6e 2c 20 74 68 65 20 22 7a 22 20 70 6f 69 6e  en, the "z" poin
178f0 74 73 20 74 6f 20 73 6f 6d 65 20 70 6c 61 63 65  ts to some place
17900 0a 2a 2a 20 69 6e 20 74 68 65 20 6d 69 64 64 6c  .** in the middl
17910 65 20 6f 66 20 74 68 65 20 50 61 72 73 65 2e 7a  e of the Parse.z
17920 53 71 6c 20 74 65 78 74 2e 20 20 42 75 74 20 69  Sql text.  But i
17930 74 20 6d 69 67 68 74 20 61 6c 73 6f 20 70 6f 69  t might also poi
17940 6e 74 20 74 6f 20 61 0a 2a 2a 20 73 74 61 74 69  nt to a.** stati
17950 63 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a 73 74 72  c string..*/.str
17960 75 63 74 20 54 6f 6b 65 6e 20 7b 0a 20 20 63 6f  uct Token {.  co
17970 6e 73 74 20 63 68 61 72 20 2a 7a 3b 20 20 20 20  nst char *z;    
17980 20 2f 2a 20 54 65 78 74 20 6f 66 20 74 68 65 20   /* Text of the 
17990 74 6f 6b 65 6e 2e 20 20 4e 6f 74 20 4e 55 4c 4c  token.  Not NULL
179a0 2d 74 65 72 6d 69 6e 61 74 65 64 21 20 2a 2f 0a  -terminated! */.
179b0 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6e    unsigned int n
179c0 3b 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f  ;    /* Number o
179d0 66 20 63 68 61 72 61 63 74 65 72 73 20 69 6e 20  f characters in 
179e0 74 68 69 73 20 74 6f 6b 65 6e 20 2a 2f 0a 7d 3b  this token */.};
179f0 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
17a00 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75  nce of this stru
17a10 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 69  cture contains i
17a20 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65  nformation neede
17a30 64 20 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a  d to generate.**
17a40 20 63 6f 64 65 20 66 6f 72 20 61 20 53 45 4c 45   code for a SELE
17a50 43 54 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  CT that contains
17a60 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
17a70 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 45  ions..**.** If E
17a80 78 70 72 2e 6f 70 3d 3d 54 4b 5f 41 47 47 5f 43  xpr.op==TK_AGG_C
17a90 4f 4c 55 4d 4e 20 6f 72 20 54 4b 5f 41 47 47 5f  OLUMN or TK_AGG_
17aa0 46 55 4e 43 54 49 4f 4e 20 74 68 65 6e 20 45 78  FUNCTION then Ex
17ab0 70 72 2e 70 41 67 67 49 6e 66 6f 20 69 73 20 61  pr.pAggInfo is a
17ac0 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  .** pointer to t
17ad0 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20  his structure.  
17ae0 54 68 65 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e  The Expr.iColumn
17af0 20 66 69 65 6c 64 20 69 73 20 74 68 65 20 69 6e   field is the in
17b00 64 65 78 20 69 6e 0a 2a 2a 20 41 67 67 49 6e 66  dex in.** AggInf
17b10 6f 2e 61 43 6f 6c 5b 5d 20 6f 72 20 41 67 67 49  o.aCol[] or AggI
17b20 6e 66 6f 2e 61 46 75 6e 63 5b 5d 20 6f 66 20 69  nfo.aFunc[] of i
17b30 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65  nformation neede
17b40 64 20 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a  d to generate.**
17b50 20 63 6f 64 65 20 66 6f 72 20 74 68 61 74 20 6e   code for that n
17b60 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 67 67 49 6e  ode..**.** AggIn
17b70 66 6f 2e 70 47 72 6f 75 70 42 79 20 61 6e 64 20  fo.pGroupBy and 
17b80 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63 2e 70 45  AggInfo.aFunc.pE
17b90 78 70 72 20 70 6f 69 6e 74 20 74 6f 20 66 69 65  xpr point to fie
17ba0 6c 64 73 20 77 69 74 68 69 6e 20 74 68 65 0a 2a  lds within the.*
17bb0 2a 20 6f 72 69 67 69 6e 61 6c 20 53 65 6c 65 63  * original Selec
17bc0 74 20 73 74 72 75 63 74 75 72 65 20 74 68 61 74  t structure that
17bd0 20 64 65 73 63 72 69 62 65 73 20 74 68 65 20 53   describes the S
17be0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
17bf0 20 20 54 68 65 73 65 0a 2a 2a 20 66 69 65 6c 64    These.** field
17c00 73 20 64 6f 20 6e 6f 74 20 6e 65 65 64 20 74 6f  s do not need to
17c10 20 62 65 20 66 72 65 65 64 20 77 68 65 6e 20 64   be freed when d
17c20 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74 68 65 20  eallocating the 
17c30 41 67 67 49 6e 66 6f 20 73 74 72 75 63 74 75 72  AggInfo structur
17c40 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 67 67  e..*/.struct Agg
17c50 49 6e 66 6f 20 7b 0a 20 20 75 38 20 64 69 72 65  Info {.  u8 dire
17c60 63 74 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20  ctMode;         
17c70 20 2f 2a 20 44 69 72 65 63 74 20 72 65 6e 64 65   /* Direct rende
17c80 72 69 6e 67 20 6d 6f 64 65 20 6d 65 61 6e 73 20  ring mode means 
17c90 74 61 6b 65 20 64 61 74 61 20 64 69 72 65 63 74  take data direct
17ca0 6c 79 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ly.             
17cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
17cc0 66 72 6f 6d 20 73 6f 75 72 63 65 20 74 61 62 6c  from source tabl
17cd0 65 73 20 72 61 74 68 65 72 20 74 68 61 6e 20 66  es rather than f
17ce0 72 6f 6d 20 61 63 63 75 6d 75 6c 61 74 6f 72 73  rom accumulators
17cf0 20 2a 2f 0a 20 20 75 38 20 75 73 65 53 6f 72 74   */.  u8 useSort
17d00 69 6e 67 49 64 78 3b 20 20 20 20 20 20 20 2f 2a  ingIdx;       /*
17d10 20 49 6e 20 64 69 72 65 63 74 20 6d 6f 64 65 2c   In direct mode,
17d20 20 72 65 66 65 72 65 6e 63 65 20 74 68 65 20 73   reference the s
17d30 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 72 61 74  orting index rat
17d40 68 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 20  her.            
17d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
17d60 20 74 68 61 6e 20 74 68 65 20 73 6f 75 72 63 65   than the source
17d70 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20   table */.  int 
17d80 73 6f 72 74 69 6e 67 49 64 78 3b 20 20 20 20 20  sortingIdx;     
17d90 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75      /* Cursor nu
17da0 6d 62 65 72 20 6f 66 20 74 68 65 20 73 6f 72 74  mber of the sort
17db0 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69  ing index */.  i
17dc0 6e 74 20 73 6f 72 74 69 6e 67 49 64 78 50 54 61  nt sortingIdxPTa
17dd0 62 3b 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72  b;     /* Cursor
17de0 20 6e 75 6d 62 65 72 20 6f 66 20 70 73 65 75 64   number of pseud
17df0 6f 2d 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74  o-table */.  int
17e00 20 6e 53 6f 72 74 69 6e 67 43 6f 6c 75 6d 6e 3b   nSortingColumn;
17e10 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
17e20 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
17e30 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a   sorting index *
17e40 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 67 2c 20 6d  /.  int mnReg, m
17e50 78 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 52  xReg;       /* R
17e60 61 6e 67 65 20 6f 66 20 72 65 67 69 73 74 65 72  ange of register
17e70 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20  s allocated for 
17e80 61 43 6f 6c 20 61 6e 64 20 61 46 75 6e 63 20 2a  aCol and aFunc *
17e90 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47  /.  ExprList *pG
17ea0 72 6f 75 70 42 79 3b 20 20 20 20 20 2f 2a 20 54  roupBy;     /* T
17eb0 68 65 20 67 72 6f 75 70 20 62 79 20 63 6c 61 75  he group by clau
17ec0 73 65 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 41  se */.  struct A
17ed0 67 67 49 6e 66 6f 5f 63 6f 6c 20 7b 20 20 20 20  ggInfo_col {    
17ee0 2f 2a 20 46 6f 72 20 65 61 63 68 20 63 6f 6c 75  /* For each colu
17ef0 6d 6e 20 75 73 65 64 20 69 6e 20 73 6f 75 72 63  mn used in sourc
17f00 65 20 74 61 62 6c 65 73 20 2a 2f 0a 20 20 20 20  e tables */.    
17f10 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20  Table *pTab;    
17f20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 6f 75 72           /* Sour
17f30 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  ce table */.    
17f40 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20  int iTable;     
17f50 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73           /* Curs
17f60 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65  or number of the
17f70 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f   source table */
17f80 0a 20 20 20 20 69 6e 74 20 69 43 6f 6c 75 6d 6e  .    int iColumn
17f90 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
17fa0 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 77   Column number w
17fb0 69 74 68 69 6e 20 74 68 65 20 73 6f 75 72 63 65  ithin the source
17fc0 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e   table */.    in
17fd0 74 20 69 53 6f 72 74 65 72 43 6f 6c 75 6d 6e 3b  t iSorterColumn;
17fe0 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e         /* Column
17ff0 20 6e 75 6d 62 65 72 20 69 6e 20 74 68 65 20 73   number in the s
18000 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a  orting index */.
18010 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20      int iMem;   
18020 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
18030 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20  Memory location 
18040 74 68 61 74 20 61 63 74 73 20 61 73 20 61 63 63  that acts as acc
18050 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20  umulator */.    
18060 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20  Expr *pExpr;    
18070 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
18080 6f 72 69 67 69 6e 61 6c 20 65 78 70 72 65 73 73  original express
18090 69 6f 6e 20 2a 2f 0a 20 20 7d 20 2a 61 43 6f 6c  ion */.  } *aCol
180a0 3b 0a 20 20 69 6e 74 20 6e 43 6f 6c 75 6d 6e 3b  ;.  int nColumn;
180b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
180c0 75 6d 62 65 72 20 6f 66 20 75 73 65 64 20 65 6e  umber of used en
180d0 74 72 69 65 73 20 69 6e 20 61 43 6f 6c 5b 5d 20  tries in aCol[] 
180e0 2a 2f 0a 20 20 69 6e 74 20 6e 41 63 63 75 6d 75  */.  int nAccumu
180f0 6c 61 74 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20  lator;       /* 
18100 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  Number of column
18110 73 20 74 68 61 74 20 73 68 6f 77 20 74 68 72 6f  s that show thro
18120 75 67 68 20 74 6f 20 74 68 65 20 6f 75 74 70 75  ugh to the outpu
18130 74 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t..             
18140 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
18150 41 64 64 69 74 69 6f 6e 61 6c 20 63 6f 6c 75 6d  Additional colum
18160 6e 73 20 61 72 65 20 75 73 65 64 20 6f 6e 6c 79  ns are used only
18170 20 61 73 20 70 61 72 61 6d 65 74 65 72 73 20 74   as parameters t
18180 6f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  o.              
18190 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 61              ** a
181a0 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
181b0 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 41  ns */.  struct A
181c0 67 67 49 6e 66 6f 5f 66 75 6e 63 20 7b 20 20 20  ggInfo_func {   
181d0 2f 2a 20 46 6f 72 20 65 61 63 68 20 61 67 67 72  /* For each aggr
181e0 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 2a  egate function *
181f0 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70  /.    Expr *pExp
18200 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  r;             /
18210 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 65 6e 63  * Expression enc
18220 6f 64 69 6e 67 20 74 68 65 20 66 75 6e 63 74 69  oding the functi
18230 6f 6e 20 2a 2f 0a 20 20 20 20 46 75 6e 63 44 65  on */.    FuncDe
18240 66 20 2a 70 46 75 6e 63 3b 20 20 20 20 20 20 20  f *pFunc;       
18250 20 20 20 2f 2a 20 54 68 65 20 61 67 67 72 65 67     /* The aggreg
18260 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 69 6d 70  ate function imp
18270 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20  lementation */. 
18280 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20     int iMem;    
18290 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
182a0 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74  emory location t
182b0 68 61 74 20 61 63 74 73 20 61 73 20 61 63 63 75  hat acts as accu
182c0 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 69  mulator */.    i
182d0 6e 74 20 69 44 69 73 74 69 6e 63 74 3b 20 20 20  nt iDistinct;   
182e0 20 20 20 20 20 20 20 20 2f 2a 20 45 70 68 65 6d          /* Ephem
182f0 65 72 61 6c 20 74 61 62 6c 65 20 75 73 65 64 20  eral table used 
18300 74 6f 20 65 6e 66 6f 72 63 65 20 44 49 53 54 49  to enforce DISTI
18310 4e 43 54 20 2a 2f 0a 20 20 7d 20 2a 61 46 75 6e  NCT */.  } *aFun
18320 63 3b 0a 20 20 69 6e 74 20 6e 46 75 6e 63 3b 20  c;.  int nFunc; 
18330 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
18340 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65  Number of entrie
18350 73 20 69 6e 20 61 46 75 6e 63 5b 5d 20 2a 2f 0a  s in aFunc[] */.
18360 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61  };../*.** The da
18370 74 61 74 79 70 65 20 79 6e 56 61 72 20 69 73 20  tatype ynVar is 
18380 61 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  a signed integer
18390 2c 20 65 69 74 68 65 72 20 31 36 2d 62 69 74 20  , either 16-bit 
183a0 6f 72 20 33 32 2d 62 69 74 2e 0a 2a 2a 20 55 73  or 32-bit..** Us
183b0 75 61 6c 6c 79 20 69 74 20 69 73 20 31 36 2d 62  ually it is 16-b
183c0 69 74 73 2e 20 20 42 75 74 20 69 66 20 53 51 4c  its.  But if SQL
183d0 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45  ITE_MAX_VARIABLE
183e0 5f 4e 55 4d 42 45 52 20 69 73 20 67 72 65 61 74  _NUMBER is great
183f0 65 72 0a 2a 2a 20 74 68 61 6e 20 33 32 37 36 37  er.** than 32767
18400 20 77 65 20 68 61 76 65 20 74 6f 20 6d 61 6b 65   we have to make
18410 20 69 74 20 33 32 2d 62 69 74 2e 20 20 31 36 2d   it 32-bit.  16-
18420 62 69 74 20 69 73 20 70 72 65 66 65 72 72 65 64  bit is preferred
18430 20 62 65 63 61 75 73 65 0a 2a 2a 20 69 74 20 75   because.** it u
18440 73 65 73 20 6c 65 73 73 20 6d 65 6d 6f 72 79 20  ses less memory 
18450 69 6e 20 74 68 65 20 45 78 70 72 20 6f 62 6a 65  in the Expr obje
18460 63 74 2c 20 77 68 69 63 68 20 69 73 20 61 20 62  ct, which is a b
18470 69 67 20 6d 65 6d 6f 72 79 20 75 73 65 72 0a 2a  ig memory user.*
18480 2a 20 69 6e 20 73 79 73 74 65 6d 73 20 77 69 74  * in systems wit
18490 68 20 6c 6f 74 73 20 6f 66 20 70 72 65 70 61 72  h lots of prepar
184a0 65 64 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 20  ed statements.  
184b0 41 6e 64 20 66 65 77 20 61 70 70 6c 69 63 61 74  And few applicat
184c0 69 6f 6e 73 0a 2a 2a 20 6e 65 65 64 20 6d 6f 72  ions.** need mor
184d0 65 20 74 68 61 6e 20 61 62 6f 75 74 20 31 30 20  e than about 10 
184e0 6f 72 20 32 30 20 76 61 72 69 61 62 6c 65 73 2e  or 20 variables.
184f0 20 20 42 75 74 20 73 6f 6d 65 20 65 78 74 72 65    But some extre
18500 6d 65 20 75 73 65 72 73 20 77 61 6e 74 0a 2a 2a  me users want.**
18510 20 74 6f 20 68 61 76 65 20 70 72 65 70 61 72 65   to have prepare
18520 64 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74  d statements wit
18530 68 20 6f 76 65 72 20 33 32 37 36 37 20 76 61 72  h over 32767 var
18540 69 61 62 6c 65 73 2c 20 61 6e 64 20 66 6f 72 20  iables, and for 
18550 74 68 65 6d 0a 2a 2a 20 74 68 65 20 6f 70 74 69  them.** the opti
18560 6f 6e 20 69 73 20 61 76 61 69 6c 61 62 6c 65 20  on is available 
18570 28 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  (at compile-time
18580 29 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45  )..*/.#if SQLITE
18590 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55  _MAX_VARIABLE_NU
185a0 4d 42 45 52 3c 3d 33 32 37 36 37 0a 74 79 70 65  MBER<=32767.type
185b0 64 65 66 20 69 31 36 20 79 6e 56 61 72 3b 0a 23  def i16 ynVar;.#
185c0 65 6c 73 65 0a 74 79 70 65 64 65 66 20 69 6e 74  else.typedef int
185d0 20 79 6e 56 61 72 3b 0a 23 65 6e 64 69 66 0a 0a   ynVar;.#endif..
185e0 2f 2a 0a 2a 2a 20 45 61 63 68 20 6e 6f 64 65 20  /*.** Each node 
185f0 6f 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  of an expression
18600 20 69 6e 20 74 68 65 20 70 61 72 73 65 20 74 72   in the parse tr
18610 65 65 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63  ee is an instanc
18620 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72  e.** of this str
18630 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 45 78  ucture..**.** Ex
18640 70 72 2e 6f 70 20 69 73 20 74 68 65 20 6f 70 63  pr.op is the opc
18650 6f 64 65 2e 20 54 68 65 20 69 6e 74 65 67 65 72  ode. The integer
18660 20 70 61 72 73 65 72 20 74 6f 6b 65 6e 20 63 6f   parser token co
18670 64 65 73 20 61 72 65 20 72 65 75 73 65 64 0a 2a  des are reused.*
18680 2a 20 61 73 20 6f 70 63 6f 64 65 73 20 68 65 72  * as opcodes her
18690 65 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20  e. For example, 
186a0 74 68 65 20 70 61 72 73 65 72 20 64 65 66 69 6e  the parser defin
186b0 65 73 20 54 4b 5f 47 45 20 74 6f 20 62 65 20 61  es TK_GE to be a
186c0 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63 6f 64  n integer.** cod
186d0 65 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74  e representing t
186e0 68 65 20 22 3e 3d 22 20 6f 70 65 72 61 74 6f 72  he ">=" operator
186f0 2e 20 54 68 69 73 20 73 61 6d 65 20 69 6e 74 65  . This same inte
18700 67 65 72 20 63 6f 64 65 20 69 73 20 72 65 75 73  ger code is reus
18710 65 64 0a 2a 2a 20 74 6f 20 72 65 70 72 65 73 65  ed.** to represe
18720 6e 74 20 74 68 65 20 67 72 65 61 74 65 72 2d 74  nt the greater-t
18730 68 61 6e 2d 6f 72 2d 65 71 75 61 6c 2d 74 6f 20  han-or-equal-to 
18740 6f 70 65 72 61 74 6f 72 20 69 6e 20 74 68 65 20  operator in the 
18750 65 78 70 72 65 73 73 69 6f 6e 0a 2a 2a 20 74 72  expression.** tr
18760 65 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ee..**.** If the
18770 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
18780 6e 20 53 51 4c 20 6c 69 74 65 72 61 6c 20 28 54  n SQL literal (T
18790 4b 5f 49 4e 54 45 47 45 52 2c 20 54 4b 5f 46 4c  K_INTEGER, TK_FL
187a0 4f 41 54 2c 20 54 4b 5f 42 4c 4f 42 2c 0a 2a 2a  OAT, TK_BLOB,.**
187b0 20 6f 72 20 54 4b 5f 53 54 52 49 4e 47 29 2c 20   or TK_STRING), 
187c0 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20  then Expr.token 
187d0 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 74 65 78  contains the tex
187e0 74 20 6f 66 20 74 68 65 20 53 51 4c 20 6c 69 74  t of the SQL lit
187f0 65 72 61 6c 2e 20 49 66 0a 2a 2a 20 74 68 65 20  eral. If.** the 
18800 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20  expression is a 
18810 76 61 72 69 61 62 6c 65 20 28 54 4b 5f 56 41 52  variable (TK_VAR
18820 49 41 42 4c 45 29 2c 20 74 68 65 6e 20 45 78 70  IABLE), then Exp
18830 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73  r.token contains
18840 20 74 68 65 0a 2a 2a 20 76 61 72 69 61 62 6c 65   the.** variable
18850 20 6e 61 6d 65 2e 20 46 69 6e 61 6c 6c 79 2c 20   name. Finally, 
18860 69 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  if the expressio
18870 6e 20 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63  n is an SQL func
18880 74 69 6f 6e 20 28 54 4b 5f 46 55 4e 43 54 49 4f  tion (TK_FUNCTIO
18890 4e 29 2c 0a 2a 2a 20 74 68 65 6e 20 45 78 70 72  N),.** then Expr
188a0 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20  .token contains 
188b0 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
188c0 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  function..**.** 
188d0 45 78 70 72 2e 70 52 69 67 68 74 20 61 6e 64 20  Expr.pRight and 
188e0 45 78 70 72 2e 70 4c 65 66 74 20 61 72 65 20 74  Expr.pLeft are t
188f0 68 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68  he left and righ
18900 74 20 73 75 62 65 78 70 72 65 73 73 69 6f 6e 73  t subexpressions
18910 20 6f 66 20 61 0a 2a 2a 20 62 69 6e 61 72 79 20   of a.** binary 
18920 6f 70 65 72 61 74 6f 72 2e 20 45 69 74 68 65 72  operator. Either
18930 20 6f 72 20 62 6f 74 68 20 6d 61 79 20 62 65 20   or both may be 
18940 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72  NULL..**.** Expr
18950 2e 78 2e 70 4c 69 73 74 20 69 73 20 61 20 6c 69  .x.pList is a li
18960 73 74 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  st of arguments 
18970 69 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  if the expressio
18980 6e 20 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63  n is an SQL func
18990 74 69 6f 6e 2c 0a 2a 2a 20 61 20 43 41 53 45 20  tion,.** a CASE 
189a0 65 78 70 72 65 73 73 69 6f 6e 20 6f 72 20 61 6e  expression or an
189b0 20 49 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f   IN expression o
189c0 66 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73  f the form "<lhs
189d0 3e 20 49 4e 20 28 3c 79 3e 2c 20 3c 7a 3e 2e 2e  > IN (<y>, <z>..
189e0 2e 29 22 2e 0a 2a 2a 20 45 78 70 72 2e 78 2e 70  .)"..** Expr.x.p
189f0 53 65 6c 65 63 74 20 69 73 20 75 73 65 64 20 69  Select is used i
18a00 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
18a10 20 69 73 20 61 20 73 75 62 2d 73 65 6c 65 63 74   is a sub-select
18a20 20 6f 72 20 61 6e 20 65 78 70 72 65 73 73 69 6f   or an expressio
18a30 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 66 6f 72 6d  n of.** the form
18a40 20 22 3c 6c 68 73 3e 20 49 4e 20 28 53 45 4c 45   "<lhs> IN (SELE
18a50 43 54 20 2e 2e 2e 29 22 2e 20 49 66 20 74 68 65  CT ...)". If the
18a60 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20 62 69   EP_xIsSelect bi
18a70 74 20 69 73 20 73 65 74 20 69 6e 20 74 68 65 0a  t is set in the.
18a80 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61  ** Expr.flags ma
18a90 73 6b 2c 20 74 68 65 6e 20 45 78 70 72 2e 78 2e  sk, then Expr.x.
18aa0 70 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69 64  pSelect is valid
18ab0 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 45 78 70  . Otherwise, Exp
18ac0 72 2e 78 2e 70 4c 69 73 74 20 69 73 0a 2a 2a 20  r.x.pList is.** 
18ad0 76 61 6c 69 64 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20  valid..**.** An 
18ae0 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74 68  expression of th
18af0 65 20 66 6f 72 6d 20 49 44 20 6f 72 20 49 44 2e  e form ID or ID.
18b00 49 44 20 72 65 66 65 72 73 20 74 6f 20 61 20 63  ID refers to a c
18b10 6f 6c 75 6d 6e 20 69 6e 20 61 20 74 61 62 6c 65  olumn in a table
18b20 2e 0a 2a 2a 20 46 6f 72 20 73 75 63 68 20 65 78  ..** For such ex
18b30 70 72 65 73 73 69 6f 6e 73 2c 20 45 78 70 72 2e  pressions, Expr.
18b40 6f 70 20 69 73 20 73 65 74 20 74 6f 20 54 4b 5f  op is set to TK_
18b50 43 4f 4c 55 4d 4e 20 61 6e 64 20 45 78 70 72 2e  COLUMN and Expr.
18b60 69 54 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65  iTable is.** the
18b70 20 69 6e 74 65 67 65 72 20 63 75 72 73 6f 72 20   integer cursor 
18b80 6e 75 6d 62 65 72 20 6f 66 20 61 20 56 44 42 45  number of a VDBE
18b90 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67   cursor pointing
18ba0 20 74 6f 20 74 68 61 74 20 74 61 62 6c 65 20 61   to that table a
18bb0 6e 64 0a 2a 2a 20 45 78 70 72 2e 69 43 6f 6c 75  nd.** Expr.iColu
18bc0 6d 6e 20 69 73 20 74 68 65 20 63 6f 6c 75 6d 6e  mn is the column
18bd0 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 65 20   number for the 
18be0 73 70 65 63 69 66 69 63 20 63 6f 6c 75 6d 6e 2e  specific column.
18bf0 20 20 49 66 20 74 68 65 0a 2a 2a 20 65 78 70 72    If the.** expr
18c00 65 73 73 69 6f 6e 20 69 73 20 75 73 65 64 20 61  ession is used a
18c10 73 20 61 20 72 65 73 75 6c 74 20 69 6e 20 61 6e  s a result in an
18c20 20 61 67 67 72 65 67 61 74 65 20 53 45 4c 45 43   aggregate SELEC
18c30 54 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 76  T, then the.** v
18c40 61 6c 75 65 20 69 73 20 61 6c 73 6f 20 73 74 6f  alue is also sto
18c50 72 65 64 20 69 6e 20 74 68 65 20 45 78 70 72 2e  red in the Expr.
18c60 69 41 67 67 20 63 6f 6c 75 6d 6e 20 69 6e 20 74  iAgg column in t
18c70 68 65 20 61 67 67 72 65 67 61 74 65 20 73 6f 20  he aggregate so 
18c80 74 68 61 74 0a 2a 2a 20 69 74 20 63 61 6e 20 62  that.** it can b
18c90 65 20 61 63 63 65 73 73 65 64 20 61 66 74 65 72  e accessed after
18ca0 20 61 6c 6c 20 61 67 67 72 65 67 61 74 65 73 20   all aggregates 
18cb0 61 72 65 20 63 6f 6d 70 75 74 65 64 2e 0a 2a 2a  are computed..**
18cc0 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72 65  .** If the expre
18cd0 73 73 69 6f 6e 20 69 73 20 61 6e 20 75 6e 62 6f  ssion is an unbo
18ce0 75 6e 64 20 76 61 72 69 61 62 6c 65 20 6d 61 72  und variable mar
18cf0 6b 65 72 20 28 61 20 71 75 65 73 74 69 6f 6e 20  ker (a question 
18d00 6d 61 72 6b 0a 2a 2a 20 63 68 61 72 61 63 74 65  mark.** characte
18d10 72 20 27 3f 27 20 69 6e 20 74 68 65 20 6f 72 69  r '?' in the ori
18d20 67 69 6e 61 6c 20 53 51 4c 29 20 74 68 65 6e 20  ginal SQL) then 
18d30 74 68 65 20 45 78 70 72 2e 69 54 61 62 6c 65 20  the Expr.iTable 
18d40 68 6f 6c 64 73 20 74 68 65 20 69 6e 64 65 78 0a  holds the index.
18d50 2a 2a 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68  ** number for th
18d60 61 74 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 0a  at variable..**.
18d70 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72 65 73  ** If the expres
18d80 73 69 6f 6e 20 69 73 20 61 20 73 75 62 71 75 65  sion is a subque
18d90 72 79 20 74 68 65 6e 20 45 78 70 72 2e 69 43 6f  ry then Expr.iCo
18da0 6c 75 6d 6e 20 68 6f 6c 64 73 20 61 6e 20 69 6e  lumn holds an in
18db0 74 65 67 65 72 0a 2a 2a 20 72 65 67 69 73 74 65  teger.** registe
18dc0 72 20 6e 75 6d 62 65 72 20 63 6f 6e 74 61 69 6e  r number contain
18dd0 69 6e 67 20 74 68 65 20 72 65 73 75 6c 74 20 6f  ing the result o
18de0 66 20 74 68 65 20 73 75 62 71 75 65 72 79 2e 20  f the subquery. 
18df0 20 49 66 20 74 68 65 0a 2a 2a 20 73 75 62 71 75   If the.** subqu
18e00 65 72 79 20 67 69 76 65 73 20 61 20 63 6f 6e 73  ery gives a cons
18e10 74 61 6e 74 20 72 65 73 75 6c 74 2c 20 74 68 65  tant result, the
18e20 6e 20 69 54 61 62 6c 65 20 69 73 20 2d 31 2e 20  n iTable is -1. 
18e30 20 49 66 20 74 68 65 20 73 75 62 71 75 65 72 79   If the subquery
18e40 0a 2a 2a 20 67 69 76 65 73 20 61 20 64 69 66 66  .** gives a diff
18e50 65 72 65 6e 74 20 61 6e 73 77 65 72 20 61 74 20  erent answer at 
18e60 64 69 66 66 65 72 65 6e 74 20 74 69 6d 65 73 20  different times 
18e70 64 75 72 69 6e 67 20 73 74 61 74 65 6d 65 6e 74  during statement
18e80 20 70 72 6f 63 65 73 73 69 6e 67 0a 2a 2a 20 74   processing.** t
18e90 68 65 6e 20 69 54 61 62 6c 65 20 69 73 20 74 68  hen iTable is th
18ea0 65 20 61 64 64 72 65 73 73 20 6f 66 20 61 20 73  e address of a s
18eb0 75 62 72 6f 75 74 69 6e 65 20 74 68 61 74 20 63  ubroutine that c
18ec0 6f 6d 70 75 74 65 73 20 74 68 65 20 73 75 62 71  omputes the subq
18ed0 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  uery..**.** If t
18ee0 68 65 20 45 78 70 72 20 69 73 20 6f 66 20 74 79  he Expr is of ty
18ef0 70 65 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 61 6e  pe OP_Column, an
18f00 64 20 74 68 65 20 74 61 62 6c 65 20 69 74 20 69  d the table it i
18f10 73 20 73 65 6c 65 63 74 69 6e 67 20 66 72 6f 6d  s selecting from
18f20 0a 2a 2a 20 69 73 20 61 20 64 69 73 6b 20 74 61  .** is a disk ta
18f30 62 6c 65 20 6f 72 20 74 68 65 20 22 6f 6c 64 2e  ble or the "old.
18f40 2a 22 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2c  *" pseudo-table,
18f50 20 74 68 65 6e 20 70 54 61 62 20 70 6f 69 6e 74   then pTab point
18f60 73 20 74 6f 20 74 68 65 0a 2a 2a 20 63 6f 72 72  s to the.** corr
18f70 65 73 70 6f 6e 64 69 6e 67 20 74 61 62 6c 65 20  esponding table 
18f80 64 65 66 69 6e 69 74 69 6f 6e 2e 0a 2a 2a 0a 2a  definition..**.*
18f90 2a 20 41 4c 4c 4f 43 41 54 49 4f 4e 20 4e 4f 54  * ALLOCATION NOT
18fa0 45 53 3a 0a 2a 2a 0a 2a 2a 20 45 78 70 72 20 6f  ES:.**.** Expr o
18fb0 62 6a 65 63 74 73 20 63 61 6e 20 75 73 65 20 61  bjects can use a
18fc0 20 6c 6f 74 20 6f 66 20 6d 65 6d 6f 72 79 20 73   lot of memory s
18fd0 70 61 63 65 20 69 6e 20 64 61 74 61 62 61 73 65  pace in database
18fe0 20 73 63 68 65 6d 61 2e 20 20 54 6f 0a 2a 2a 20   schema.  To.** 
18ff0 68 65 6c 70 20 72 65 64 75 63 65 20 6d 65 6d 6f  help reduce memo
19000 72 79 20 72 65 71 75 69 72 65 6d 65 6e 74 73 2c  ry requirements,
19010 20 73 6f 6d 65 74 69 6d 65 73 20 61 6e 20 45 78   sometimes an Ex
19020 70 72 20 6f 62 6a 65 63 74 20 77 69 6c 6c 20 62  pr object will b
19030 65 0a 2a 2a 20 74 72 75 6e 63 61 74 65 64 2e 20  e.** truncated. 
19040 20 41 6e 64 20 74 6f 20 72 65 64 75 63 65 20 74   And to reduce t
19050 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d  he number of mem
19060 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2c  ory allocations,
19070 20 73 6f 6d 65 74 69 6d 65 73 0a 2a 2a 20 74 77   sometimes.** tw
19080 6f 20 6f 72 20 6d 6f 72 65 20 45 78 70 72 20 6f  o or more Expr o
19090 62 6a 65 63 74 73 20 77 69 6c 6c 20 62 65 20 73  bjects will be s
190a0 74 6f 72 65 64 20 69 6e 20 61 20 73 69 6e 67 6c  tored in a singl
190b0 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  e memory allocat
190c0 69 6f 6e 2c 0a 2a 2a 20 74 6f 67 65 74 68 65 72  ion,.** together
190d0 20 77 69 74 68 20 45 78 70 72 2e 7a 54 6f 6b 65   with Expr.zToke
190e0 6e 20 73 74 72 69 6e 67 73 2e 0a 2a 2a 0a 2a 2a  n strings..**.**
190f0 20 49 66 20 74 68 65 20 45 50 5f 52 65 64 75 63   If the EP_Reduc
19100 65 64 20 61 6e 64 20 45 50 5f 54 6f 6b 65 6e 4f  ed and EP_TokenO
19110 6e 6c 79 20 66 6c 61 67 73 20 61 72 65 20 73 65  nly flags are se
19120 74 20 77 68 65 6e 0a 2a 2a 20 61 6e 20 45 78 70  t when.** an Exp
19130 72 20 6f 62 6a 65 63 74 20 69 73 20 74 72 75 6e  r object is trun
19140 63 61 74 65 64 2e 20 20 57 68 65 6e 20 45 50 5f  cated.  When EP_
19150 52 65 64 75 63 65 64 20 69 73 20 73 65 74 2c 20  Reduced is set, 
19160 74 68 65 6e 20 61 6c 6c 0a 2a 2a 20 74 68 65 20  then all.** the 
19170 63 68 69 6c 64 20 45 78 70 72 20 6f 62 6a 65 63  child Expr objec
19180 74 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e 70  ts in the Expr.p
19190 4c 65 66 74 20 61 6e 64 20 45 78 70 72 2e 70 52  Left and Expr.pR
191a0 69 67 68 74 20 73 75 62 74 72 65 65 73 0a 2a 2a  ight subtrees.**
191b0 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20 77   are contained w
191c0 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20 6d  ithin the same m
191d0 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
191e0 2e 20 20 4e 6f 74 65 2c 20 68 6f 77 65 76 65 72  .  Note, however
191f0 2c 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 73 75  , that.** the su
19200 62 74 72 65 65 73 20 69 6e 20 45 78 70 72 2e 78  btrees in Expr.x
19210 2e 70 4c 69 73 74 20 6f 72 20 45 78 70 72 2e 78  .pList or Expr.x
19220 2e 70 53 65 6c 65 63 74 20 61 72 65 20 61 6c 77  .pSelect are alw
19230 61 79 73 20 73 65 70 61 72 61 74 65 6c 79 0a 2a  ays separately.*
19240 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20 72 65 67  * allocated, reg
19250 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68  ardless of wheth
19260 65 72 20 6f 72 20 6e 6f 74 20 45 50 5f 52 65 64  er or not EP_Red
19270 75 63 65 64 20 69 73 20 73 65 74 2e 0a 2a 2f 0a  uced is set..*/.
19280 73 74 72 75 63 74 20 45 78 70 72 20 7b 0a 20 20  struct Expr {.  
19290 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20  u8 op;          
192a0 20 20 20 20 20 20 20 2f 2a 20 4f 70 65 72 61 74         /* Operat
192b0 69 6f 6e 20 70 65 72 66 6f 72 6d 65 64 20 62 79  ion performed by
192c0 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 20 20   this node */.  
192d0 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20  char affinity;  
192e0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 66         /* The af
192f0 66 69 6e 69 74 79 20 6f 66 20 74 68 65 20 63 6f  finity of the co
19300 6c 75 6d 6e 20 6f 72 20 30 20 69 66 20 6e 6f 74  lumn or 0 if not
19310 20 61 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75   a column */.  u
19320 33 32 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20  32 flags;       
19330 20 20 20 20 20 20 2f 2a 20 56 61 72 69 6f 75 73        /* Various
19340 20 66 6c 61 67 73 2e 20 20 45 50 5f 2a 20 53 65   flags.  EP_* Se
19350 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 75 6e 69  e below */.  uni
19360 6f 6e 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a  on {.    char *z
19370 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20 20 20  Token;          
19380 2f 2a 20 54 6f 6b 65 6e 20 76 61 6c 75 65 2e 20  /* Token value. 
19390 5a 65 72 6f 20 74 65 72 6d 69 6e 61 74 65 64 20  Zero terminated 
193a0 61 6e 64 20 64 65 71 75 6f 74 65 64 20 2a 2f 0a  and dequoted */.
193b0 20 20 20 20 69 6e 74 20 69 56 61 6c 75 65 3b 20      int iValue; 
193c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f             /* No
193d0 6e 2d 6e 65 67 61 74 69 76 65 20 69 6e 74 65 67  n-negative integ
193e0 65 72 20 76 61 6c 75 65 20 69 66 20 45 50 5f 49  er value if EP_I
193f0 6e 74 56 61 6c 75 65 20 2a 2f 0a 20 20 7d 20 75  ntValue */.  } u
19400 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 45  ;..  /* If the E
19410 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67  P_TokenOnly flag
19420 20 69 73 20 73 65 74 20 69 6e 20 74 68 65 20 45   is set in the E
19430 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20  xpr.flags mask, 
19440 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61  then no.  ** spa
19450 63 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20  ce is allocated 
19460 66 6f 72 20 74 68 65 20 66 69 65 6c 64 73 20 62  for the fields b
19470 65 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e 74 2e  elow this point.
19480 20 41 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a 20   An attempt to. 
19490 20 2a 2a 20 61 63 63 65 73 73 20 74 68 65 6d 20   ** access them 
194a0 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20 61  will result in a
194b0 20 73 65 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c   segfault or mal
194c0 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a  function..  ****
194d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
194e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
194f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19500 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19510 2a 2f 0a 0a 20 20 45 78 70 72 20 2a 70 4c 65 66  */..  Expr *pLef
19520 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
19530 4c 65 66 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a  Left subnode */.
19540 20 20 45 78 70 72 20 2a 70 52 69 67 68 74 3b 20    Expr *pRight; 
19550 20 20 20 20 20 20 20 20 20 2f 2a 20 52 69 67 68           /* Righ
19560 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 75  t subnode */.  u
19570 6e 69 6f 6e 20 7b 0a 20 20 20 20 45 78 70 72 4c  nion {.    ExprL
19580 69 73 74 20 2a 70 4c 69 73 74 3b 20 20 20 20 20  ist *pList;     
19590 2f 2a 20 6f 70 20 3d 20 49 4e 2c 20 45 58 49 53  /* op = IN, EXIS
195a0 54 53 2c 20 53 45 4c 45 43 54 2c 20 43 41 53 45  TS, SELECT, CASE
195b0 2c 20 46 55 4e 43 54 49 4f 4e 2c 20 42 45 54 57  , FUNCTION, BETW
195c0 45 45 4e 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63  EEN */.    Selec
195d0 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20  t *pSelect;     
195e0 2f 2a 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20  /* EP_xIsSelect 
195f0 61 6e 64 20 6f 70 20 3d 20 49 4e 2c 20 45 58 49  and op = IN, EXI
19600 53 54 53 2c 20 53 45 4c 45 43 54 20 2a 2f 0a 20  STS, SELECT */. 
19610 20 7d 20 78 3b 0a 0a 20 20 2f 2a 20 49 66 20 74   } x;..  /* If t
19620 68 65 20 45 50 5f 52 65 64 75 63 65 64 20 66 6c  he EP_Reduced fl
19630 61 67 20 69 73 20 73 65 74 20 69 6e 20 74 68 65  ag is set in the
19640 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b   Expr.flags mask
19650 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73  , then no.  ** s
19660 70 61 63 65 20 69 73 20 61 6c 6c 6f 63 61 74 65  pace is allocate
19670 64 20 66 6f 72 20 74 68 65 20 66 69 65 6c 64 73  d for the fields
19680 20 62 65 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e   below this poin
19690 74 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 74 6f  t. An attempt to
196a0 0a 20 20 2a 2a 20 61 63 63 65 73 73 20 74 68 65  .  ** access the
196b0 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e  m will result in
196c0 20 61 20 73 65 67 66 61 75 6c 74 20 6f 72 20 6d   a segfault or m
196d0 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a  alfunction..  **
196e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
196f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19700 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19710 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19720 2a 2a 2a 2f 0a 0a 23 69 66 20 53 51 4c 49 54 45  ***/..#if SQLITE
19730 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50 54 48 3e  _MAX_EXPR_DEPTH>
19740 30 0a 20 20 69 6e 74 20 6e 48 65 69 67 68 74 3b  0.  int nHeight;
19750 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 65             /* He
19760 69 67 68 74 20 6f 66 20 74 68 65 20 74 72 65 65  ight of the tree
19770 20 68 65 61 64 65 64 20 62 79 20 74 68 69 73 20   headed by this 
19780 6e 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  node */.#endif. 
19790 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20   int iTable;    
197a0 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f          /* TK_CO
197b0 4c 55 4d 4e 3a 20 63 75 72 73 6f 72 20 6e 75 6d  LUMN: cursor num
197c0 62 65 72 20 6f 66 20 74 61 62 6c 65 20 68 6f 6c  ber of table hol
197d0 64 69 6e 67 20 63 6f 6c 75 6d 6e 0a 20 20 20 20  ding column.    
197e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
197f0 20 20 20 20 20 2a 2a 20 54 4b 5f 52 45 47 49 53       ** TK_REGIS
19800 54 45 52 3a 20 72 65 67 69 73 74 65 72 20 6e 75  TER: register nu
19810 6d 62 65 72 0a 20 20 20 20 20 20 20 20 20 20 20  mber.           
19820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
19830 20 54 4b 5f 54 52 49 47 47 45 52 3a 20 31 20 2d   TK_TRIGGER: 1 -
19840 3e 20 6e 65 77 2c 20 30 20 2d 3e 20 6f 6c 64 0a  > new, 0 -> old.
19850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19860 20 20 20 20 20 20 20 20 20 2a 2a 20 45 50 5f 55           ** EP_U
19870 6e 6c 69 6b 65 6c 79 3a 20 20 31 33 34 32 31 37  nlikely:  134217
19880 37 32 38 20 74 69 6d 65 73 20 6c 69 6b 65 6c 69  728 times likeli
19890 68 6f 6f 64 0a 20 20 20 20 20 20 20 20 20 20 20  hood.           
198a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
198b0 20 54 4b 5f 53 45 4c 45 43 54 3a 20 31 73 74 20   TK_SELECT: 1st 
198c0 72 65 67 69 73 74 65 72 20 6f 66 20 72 65 73 75  register of resu
198d0 6c 74 20 76 65 63 74 6f 72 20 2a 2f 0a 20 20 79  lt vector */.  y
198e0 6e 56 61 72 20 69 43 6f 6c 75 6d 6e 3b 20 20 20  nVar iColumn;   
198f0 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55        /* TK_COLU
19900 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78  MN: column index
19910 2e 20 20 2d 31 20 66 6f 72 20 72 6f 77 69 64 2e  .  -1 for rowid.
19920 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19930 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f            ** TK_
19940 56 41 52 49 41 42 4c 45 3a 20 76 61 72 69 61 62  VARIABLE: variab
19950 6c 65 20 6e 75 6d 62 65 72 20 28 61 6c 77 61 79  le number (alway
19960 73 20 3e 3d 20 31 29 2e 0a 20 20 20 20 20 20 20  s >= 1)..       
19970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19980 20 20 2a 2a 20 54 4b 5f 53 45 4c 45 43 54 5f 43    ** TK_SELECT_C
19990 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 6f 66  OLUMN: column of
199a0 20 74 68 65 20 72 65 73 75 6c 74 20 76 65 63 74   the result vect
199b0 6f 72 20 2a 2f 0a 20 20 69 31 36 20 69 41 67 67  or */.  i16 iAgg
199c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
199d0 2a 20 57 68 69 63 68 20 65 6e 74 72 79 20 69 6e  * Which entry in
199e0 20 70 41 67 67 49 6e 66 6f 2d 3e 61 43 6f 6c 5b   pAggInfo->aCol[
199f0 5d 20 6f 72 20 2d 3e 61 46 75 6e 63 5b 5d 20 2a  ] or ->aFunc[] *
19a00 2f 0a 20 20 69 31 36 20 69 52 69 67 68 74 4a 6f  /.  i16 iRightJo
19a10 69 6e 54 61 62 6c 65 3b 20 20 20 2f 2a 20 49 66  inTable;   /* If
19a20 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 2c 20 74 68   EP_FromJoin, th
19a30 65 20 72 69 67 68 74 20 74 61 62 6c 65 20 6f 66  e right table of
19a40 20 74 68 65 20 6a 6f 69 6e 20 2a 2f 0a 20 20 75   the join */.  u
19a50 38 20 6f 70 32 3b 20 20 20 20 20 20 20 20 20 20  8 op2;          
19a60 20 20 20 20 20 20 2f 2a 20 54 4b 5f 52 45 47 49        /* TK_REGI
19a70 53 54 45 52 3a 20 6f 72 69 67 69 6e 61 6c 20 76  STER: original v
19a80 61 6c 75 65 20 6f 66 20 45 78 70 72 2e 6f 70 0a  alue of Expr.op.
19a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19aa0 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 43           ** TK_C
19ab0 4f 4c 55 4d 4e 3a 20 74 68 65 20 76 61 6c 75 65  OLUMN: the value
19ac0 20 6f 66 20 70 35 20 66 6f 72 20 4f 50 5f 43 6f   of p5 for OP_Co
19ad0 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20 20 20 20  lumn.           
19ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
19af0 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e   TK_AGG_FUNCTION
19b00 3a 20 6e 65 73 74 69 6e 67 20 64 65 70 74 68 20  : nesting depth 
19b10 2a 2f 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70 41  */.  AggInfo *pA
19b20 67 67 49 6e 66 6f 3b 20 20 20 20 20 2f 2a 20 55  ggInfo;     /* U
19b30 73 65 64 20 62 79 20 54 4b 5f 41 47 47 5f 43 4f  sed by TK_AGG_CO
19b40 4c 55 4d 4e 20 61 6e 64 20 54 4b 5f 41 47 47 5f  LUMN and TK_AGG_
19b50 46 55 4e 43 54 49 4f 4e 20 2a 2f 0a 20 20 75 6e  FUNCTION */.  un
19b60 69 6f 6e 20 7b 0a 20 20 20 20 54 61 62 6c 65 20  ion {.    Table 
19b70 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20  *pTab;          
19b80 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 54   /* TK_COLUMN: T
19b90 61 62 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20  able containing 
19ba0 63 6f 6c 75 6d 6e 2e 20 43 61 6e 20 62 65 20 4e  column. Can be N
19bb0 55 4c 4c 0a 20 20 20 20 20 20 20 20 20 20 20 20  ULL.            
19bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
19bd0 2a 20 66 6f 72 20 61 20 63 6f 6c 75 6d 6e 20 6f  * for a column o
19be0 66 20 61 6e 20 69 6e 64 65 78 20 6f 6e 20 61 6e  f an index on an
19bf0 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20   expression */. 
19c00 20 20 20 57 69 6e 64 6f 77 20 2a 70 57 69 6e 3b     Window *pWin;
19c10 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f            /* TK_
19c20 46 55 4e 43 54 49 4f 4e 3a 20 57 69 6e 64 6f 77  FUNCTION: Window
19c30 20 64 65 66 69 6e 69 74 69 6f 6e 20 66 6f 72 20   definition for 
19c40 74 68 65 20 66 75 6e 63 20 2a 2f 0a 20 20 20 20  the func */.    
19c50 73 74 72 75 63 74 20 7b 20 20 20 20 20 20 20 20  struct {        
19c60 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 49 4e 2c         /* TK_IN,
19c70 20 54 4b 5f 53 45 4c 45 43 54 2c 20 61 6e 64 20   TK_SELECT, and 
19c80 54 4b 5f 45 58 49 53 54 53 20 2a 2f 0a 20 20 20  TK_EXISTS */.   
19c90 20 20 20 69 6e 74 20 69 41 64 64 72 3b 20 20 20     int iAddr;   
19ca0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 75 62            /* Sub
19cb0 72 6f 75 74 69 6e 65 20 65 6e 74 72 79 20 61 64  routine entry ad
19cc0 64 72 65 73 73 20 2a 2f 0a 20 20 20 20 20 20 69  dress */.      i
19cd0 6e 74 20 72 65 67 52 65 74 75 72 6e 3b 20 20 20  nt regReturn;   
19ce0 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65        /* Registe
19cf0 72 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 72  r used to hold r
19d00 65 74 75 72 6e 20 61 64 64 72 65 73 73 20 2a 2f  eturn address */
19d10 0a 20 20 20 20 7d 20 73 75 62 3b 0a 20 20 7d 20  .    } sub;.  } 
19d20 79 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  y;.};../*.** The
19d30 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74   following are t
19d40 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 62  he meanings of b
19d50 69 74 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e  its in the Expr.
19d60 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 20  flags field..** 
19d70 56 61 6c 75 65 20 72 65 73 74 72 69 63 74 69 6f  Value restrictio
19d80 6e 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20  ns:.**.**       
19d90 20 20 20 45 50 5f 41 67 67 20 3d 3d 20 4e 43 5f     EP_Agg == NC_
19da0 48 61 73 41 67 67 20 3d 3d 20 53 46 5f 48 61 73  HasAgg == SF_Has
19db0 41 67 67 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  Agg.**          
19dc0 45 50 5f 57 69 6e 20 3d 3d 20 4e 43 5f 48 61 73  EP_Win == NC_Has
19dd0 57 69 6e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45  Win.*/.#define E
19de0 50 5f 46 72 6f 6d 4a 6f 69 6e 20 20 30 78 30 30  P_FromJoin  0x00
19df0 30 30 30 31 20 2f 2a 20 4f 72 69 67 69 6e 61 74  0001 /* Originat
19e00 65 73 20 69 6e 20 4f 4e 2f 55 53 49 4e 47 20 63  es in ON/USING c
19e10 6c 61 75 73 65 20 6f 66 20 6f 75 74 65 72 20 6a  lause of outer j
19e20 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  oin */.#define E
19e30 50 5f 44 69 73 74 69 6e 63 74 20 20 30 78 30 30  P_Distinct  0x00
19e40 30 30 30 32 20 2f 2a 20 41 67 67 72 65 67 61 74  0002 /* Aggregat
19e50 65 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20  e function with 
19e60 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64  DISTINCT keyword
19e70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 48   */.#define EP_H
19e80 61 73 46 75 6e 63 20 20 20 30 78 30 30 30 30 30  asFunc   0x00000
19e90 34 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 6f 6e  4 /* Contains on
19ea0 65 20 6f 72 20 6d 6f 72 65 20 66 75 6e 63 74 69  e or more functi
19eb0 6f 6e 73 20 6f 66 20 61 6e 79 20 6b 69 6e 64 20  ons of any kind 
19ec0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 46 69  */.#define EP_Fi
19ed0 78 65 64 43 6f 6c 20 20 30 78 30 30 30 30 30 38  xedCol  0x000008
19ee0 20 2f 2a 20 54 4b 5f 43 6f 6c 75 6d 6e 20 77 69   /* TK_Column wi
19ef0 74 68 20 61 20 6b 6e 6f 77 6e 20 66 69 78 65 64  th a known fixed
19f00 20 76 61 6c 75 65 20 2a 2f 0a 23 64 65 66 69 6e   value */.#defin
19f10 65 20 45 50 5f 41 67 67 20 20 20 20 20 20 20 30  e EP_Agg       0
19f20 78 30 30 30 30 31 30 20 2f 2a 20 43 6f 6e 74 61  x000010 /* Conta
19f30 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20  ins one or more 
19f40 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
19f50 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ons */.#define E
19f60 50 5f 56 61 72 53 65 6c 65 63 74 20 30 78 30 30  P_VarSelect 0x00
19f70 30 30 32 30 20 2f 2a 20 70 53 65 6c 65 63 74 20  0020 /* pSelect 
19f80 69 73 20 63 6f 72 72 65 6c 61 74 65 64 2c 20 6e  is correlated, n
19f90 6f 74 20 63 6f 6e 73 74 61 6e 74 20 2a 2f 0a 23  ot constant */.#
19fa0 64 65 66 69 6e 65 20 45 50 5f 44 62 6c 51 75 6f  define EP_DblQuo
19fb0 74 65 64 20 30 78 30 30 30 30 34 30 20 2f 2a 20  ted 0x000040 /* 
19fc0 74 6f 6b 65 6e 2e 7a 20 77 61 73 20 6f 72 69 67  token.z was orig
19fd0 69 6e 61 6c 6c 79 20 69 6e 20 22 2e 2e 2e 22 20  inally in "..." 
19fe0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 49 6e  */.#define EP_In
19ff0 66 69 78 46 75 6e 63 20 30 78 30 30 30 30 38 30  fixFunc 0x000080
1a000 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 6e 20   /* True for an 
1a010 69 6e 66 69 78 20 66 75 6e 63 74 69 6f 6e 3a 20  infix function: 
1a020 4c 49 4b 45 2c 20 47 4c 4f 42 2c 20 65 74 63 20  LIKE, GLOB, etc 
1a030 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 43 6f  */.#define EP_Co
1a040 6c 6c 61 74 65 20 20 20 30 78 30 30 30 31 30 30  llate   0x000100
1a050 20 2f 2a 20 54 72 65 65 20 63 6f 6e 74 61 69 6e   /* Tree contain
1a060 73 20 61 20 54 4b 5f 43 4f 4c 4c 41 54 45 20 6f  s a TK_COLLATE o
1a070 70 65 72 61 74 6f 72 20 2a 2f 0a 23 64 65 66 69  perator */.#defi
1a080 6e 65 20 45 50 5f 47 65 6e 65 72 69 63 20 20 20  ne EP_Generic   
1a090 30 78 30 30 30 32 30 30 20 2f 2a 20 49 67 6e 6f  0x000200 /* Igno
1a0a0 72 65 20 43 4f 4c 4c 41 54 45 20 6f 72 20 61 66  re COLLATE or af
1a0b0 66 69 6e 69 74 79 20 6f 6e 20 74 68 69 73 20 74  finity on this t
1a0c0 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ree */.#define E
1a0d0 50 5f 49 6e 74 56 61 6c 75 65 20 20 30 78 30 30  P_IntValue  0x00
1a0e0 30 34 30 30 20 2f 2a 20 49 6e 74 65 67 65 72 20  0400 /* Integer 
1a0f0 76 61 6c 75 65 20 63 6f 6e 74 61 69 6e 65 64 20  value contained 
1a100 69 6e 20 75 2e 69 56 61 6c 75 65 20 2a 2f 0a 23  in u.iValue */.#
1a110 64 65 66 69 6e 65 20 45 50 5f 78 49 73 53 65 6c  define EP_xIsSel
1a120 65 63 74 20 30 78 30 30 30 38 30 30 20 2f 2a 20  ect 0x000800 /* 
1a130 78 2e 70 53 65 6c 65 63 74 20 69 73 20 76 61 6c  x.pSelect is val
1a140 69 64 20 28 6f 74 68 65 72 77 69 73 65 20 78 2e  id (otherwise x.
1a150 70 4c 69 73 74 20 69 73 29 20 2a 2f 0a 23 64 65  pList is) */.#de
1a160 66 69 6e 65 20 45 50 5f 53 6b 69 70 20 20 20 20  fine EP_Skip    
1a170 20 20 30 78 30 30 31 30 30 30 20 2f 2a 20 43 4f    0x001000 /* CO
1a180 4c 4c 41 54 45 2c 20 41 53 2c 20 6f 72 20 55 4e  LLATE, AS, or UN
1a190 4c 49 4b 45 4c 59 20 2a 2f 0a 23 64 65 66 69 6e  LIKELY */.#defin
1a1a0 65 20 45 50 5f 52 65 64 75 63 65 64 20 20 20 30  e EP_Reduced   0
1a1b0 78 30 30 32 30 30 30 20 2f 2a 20 45 78 70 72 20  x002000 /* Expr 
1a1c0 73 74 72 75 63 74 20 45 58 50 52 5f 52 45 44 55  struct EXPR_REDU
1a1d0 43 45 44 53 49 5a 45 20 62 79 74 65 73 20 6f 6e  CEDSIZE bytes on
1a1e0 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  ly */.#define EP
1a1f0 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 30 78 30 30 34  _TokenOnly 0x004
1a200 30 30 30 20 2f 2a 20 45 78 70 72 20 73 74 72 75  000 /* Expr stru
1a210 63 74 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c  ct EXPR_TOKENONL
1a220 59 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79  YSIZE bytes only
1a230 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 57   */.#define EP_W
1a240 69 6e 20 20 20 20 20 20 20 30 78 30 30 38 30 30  in       0x00800
1a250 30 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 77 69  0 /* Contains wi
1a260 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 73 20 2a  ndow functions *
1a270 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 4d 65 6d  /.#define EP_Mem
1a280 54 6f 6b 65 6e 20 20 30 78 30 31 30 30 30 30 20  Token  0x010000 
1a290 2f 2a 20 4e 65 65 64 20 74 6f 20 73 71 6c 69 74  /* Need to sqlit
1a2a0 65 33 44 62 46 72 65 65 28 29 20 45 78 70 72 2e  e3DbFree() Expr.
1a2b0 7a 54 6f 6b 65 6e 20 2a 2f 0a 23 64 65 66 69 6e  zToken */.#defin
1a2c0 65 20 45 50 5f 4e 6f 52 65 64 75 63 65 20 20 30  e EP_NoReduce  0
1a2d0 78 30 32 30 30 30 30 20 2f 2a 20 43 61 6e 6e 6f  x020000 /* Canno
1a2e0 74 20 45 58 50 52 44 55 50 5f 52 45 44 55 43 45  t EXPRDUP_REDUCE
1a2f0 20 74 68 69 73 20 45 78 70 72 20 2a 2f 0a 23 64   this Expr */.#d
1a300 65 66 69 6e 65 20 45 50 5f 55 6e 6c 69 6b 65 6c  efine EP_Unlikel
1a310 79 20 20 30 78 30 34 30 30 30 30 20 2f 2a 20 75  y  0x040000 /* u
1a320 6e 6c 69 6b 65 6c 79 28 29 20 6f 72 20 6c 69 6b  nlikely() or lik
1a330 65 6c 69 68 6f 6f 64 28 29 20 66 75 6e 63 74 69  elihood() functi
1a340 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  on */.#define EP
1a350 5f 43 6f 6e 73 74 46 75 6e 63 20 30 78 30 38 30  _ConstFunc 0x080
1a360 30 30 30 20 2f 2a 20 41 20 53 51 4c 49 54 45 5f  000 /* A SQLITE_
1a370 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 6f 72  FUNC_CONSTANT or
1a380 20 5f 53 4c 4f 43 48 4e 47 20 66 75 6e 63 74 69   _SLOCHNG functi
1a390 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  on */.#define EP
1a3a0 5f 43 61 6e 42 65 4e 75 6c 6c 20 30 78 31 30 30  _CanBeNull 0x100
1a3b0 30 30 30 20 2f 2a 20 43 61 6e 20 62 65 20 6e 75  000 /* Can be nu
1a3c0 6c 6c 20 64 65 73 70 69 74 65 20 4e 4f 54 20 4e  ll despite NOT N
1a3d0 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a  ULL constraint *
1a3e0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 75 62  /.#define EP_Sub
1a3f0 71 75 65 72 79 20 20 30 78 32 30 30 30 30 30 20  query  0x200000 
1a400 2f 2a 20 54 72 65 65 20 63 6f 6e 74 61 69 6e 73  /* Tree contains
1a410 20 61 20 54 4b 5f 53 45 4c 45 43 54 20 6f 70 65   a TK_SELECT ope
1a420 72 61 74 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65  rator */.#define
1a430 20 45 50 5f 41 6c 69 61 73 20 20 20 20 20 30 78   EP_Alias     0x
1a440 34 30 30 30 30 30 20 2f 2a 20 49 73 20 61 6e 20  400000 /* Is an 
1a450 61 6c 69 61 73 20 66 6f 72 20 61 20 72 65 73 75  alias for a resu
1a460 6c 74 20 73 65 74 20 63 6f 6c 75 6d 6e 20 2a 2f  lt set column */
1a470 0a 23 64 65 66 69 6e 65 20 45 50 5f 4c 65 61 66  .#define EP_Leaf
1a480 20 20 20 20 20 20 30 78 38 30 30 30 30 30 20 2f        0x800000 /
1a490 2a 20 45 78 70 72 2e 70 4c 65 66 74 2c 20 2e 70  * Expr.pLeft, .p
1a4a0 52 69 67 68 74 2c 20 2e 75 2e 70 53 65 6c 65 63  Right, .u.pSelec
1a4b0 74 20 61 6c 6c 20 4e 55 4c 4c 20 2a 2f 0a 23 64  t all NULL */.#d
1a4c0 65 66 69 6e 65 20 45 50 5f 57 69 6e 46 75 6e 63  efine EP_WinFunc
1a4d0 20 20 30 78 31 30 30 30 30 30 30 20 2f 2a 20 54    0x1000000 /* T
1a4e0 4b 5f 46 55 4e 43 54 49 4f 4e 20 77 69 74 68 20  K_FUNCTION with 
1a4f0 45 78 70 72 2e 79 2e 70 57 69 6e 20 73 65 74 20  Expr.y.pWin set 
1a500 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 75  */.#define EP_Su
1a510 62 72 74 6e 20 20 20 30 78 32 30 30 30 30 30 30  brtn   0x2000000
1a520 20 2f 2a 20 55 73 65 73 20 45 78 70 72 2e 79 2e   /* Uses Expr.y.
1a530 73 75 62 2e 20 54 4b 5f 49 4e 2c 20 5f 53 45 4c  sub. TK_IN, _SEL
1a540 45 43 54 2c 20 6f 72 20 5f 45 58 49 53 54 53 20  ECT, or _EXISTS 
1a550 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 51 75  */.#define EP_Qu
1a560 6f 74 65 64 20 20 20 30 78 34 30 30 30 30 30 30  oted   0x4000000
1a570 20 2f 2a 20 54 4b 5f 49 44 20 77 61 73 20 6f 72   /* TK_ID was or
1a580 69 67 69 6e 61 6c 6c 79 20 71 75 6f 74 65 64 20  iginally quoted 
1a590 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 74  */.#define EP_St
1a5a0 61 74 69 63 20 20 20 30 78 38 30 30 30 30 30 30  atic   0x8000000
1a5b0 20 2f 2a 20 48 65 6c 64 20 69 6e 20 6d 65 6d 6f   /* Held in memo
1a5c0 72 79 20 6e 6f 74 20 6f 62 74 61 69 6e 65 64 20  ry not obtained 
1a5d0 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20 2a 2f  from malloc() */
1a5e0 0a 23 64 65 66 69 6e 65 20 45 50 5f 49 73 54 72  .#define EP_IsTr
1a5f0 75 65 20 20 30 78 31 30 30 30 30 30 30 30 20 2f  ue  0x10000000 /
1a600 2a 20 41 6c 77 61 79 73 20 68 61 73 20 62 6f 6f  * Always has boo
1a610 6c 65 61 6e 20 76 61 6c 75 65 20 6f 66 20 54 52  lean value of TR
1a620 55 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  UE */.#define EP
1a630 5f 49 73 46 61 6c 73 65 20 30 78 32 30 30 30 30  _IsFalse 0x20000
1a640 30 30 30 20 2f 2a 20 41 6c 77 61 79 73 20 68 61  000 /* Always ha
1a650 73 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 20  s boolean value 
1a660 6f 66 20 46 41 4c 53 45 20 2a 2f 0a 0a 2f 2a 0a  of FALSE */../*.
1a670 2a 2a 20 54 68 65 20 45 50 5f 50 72 6f 70 61 67  ** The EP_Propag
1a680 61 74 65 20 6d 61 73 6b 20 69 73 20 61 20 73 65  ate mask is a se
1a690 74 20 6f 66 20 70 72 6f 70 65 72 74 69 65 73 20  t of properties 
1a6a0 74 68 61 74 20 61 75 74 6f 6d 61 74 69 63 61 6c  that automatical
1a6b0 6c 79 20 70 72 6f 70 61 67 61 74 65 0a 2a 2a 20  ly propagate.** 
1a6c0 75 70 77 61 72 64 73 20 69 6e 74 6f 20 70 61 72  upwards into par
1a6d0 65 6e 74 20 6e 6f 64 65 73 2e 0a 2a 2f 0a 23 64  ent nodes..*/.#d
1a6e0 65 66 69 6e 65 20 45 50 5f 50 72 6f 70 61 67 61  efine EP_Propaga
1a6f0 74 65 20 28 45 50 5f 43 6f 6c 6c 61 74 65 7c 45  te (EP_Collate|E
1a700 50 5f 53 75 62 71 75 65 72 79 7c 45 50 5f 48 61  P_Subquery|EP_Ha
1a710 73 46 75 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20 54 68  sFunc)../*.** Th
1a720 65 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62  ese macros can b
1a730 65 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20  e used to test, 
1a740 73 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69  set, or clear bi
1a750 74 73 20 69 6e 20 74 68 65 0a 2a 2a 20 45 78 70  ts in the.** Exp
1a760 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a  r.flags field..*
1a770 2f 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48 61  /.#define ExprHa
1a780 73 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20  sProperty(E,P)  
1a790 20 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26     (((E)->flags&
1a7a0 28 50 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65  (P))!=0).#define
1a7b0 20 45 78 70 72 48 61 73 41 6c 6c 50 72 6f 70 65   ExprHasAllPrope
1a7c0 72 74 79 28 45 2c 50 29 20 20 28 28 28 45 29 2d  rty(E,P)  (((E)-
1a7d0 3e 66 6c 61 67 73 26 28 50 29 29 3d 3d 28 50 29  >flags&(P))==(P)
1a7e0 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 53 65  ).#define ExprSe
1a7f0 74 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20  tProperty(E,P)  
1a800 20 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28     (E)->flags|=(
1a810 50 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 43  P).#define ExprC
1a820 6c 65 61 72 50 72 6f 70 65 72 74 79 28 45 2c 50  learProperty(E,P
1a830 29 20 20 20 28 45 29 2d 3e 66 6c 61 67 73 26 3d  )   (E)->flags&=
1a840 7e 28 50 29 0a 23 64 65 66 69 6e 65 20 45 78 70  ~(P).#define Exp
1a850 72 41 6c 77 61 79 73 54 72 75 65 28 45 29 20 20  rAlwaysTrue(E)  
1a860 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 45   (((E)->flags&(E
1a870 50 5f 46 72 6f 6d 4a 6f 69 6e 7c 45 50 5f 49 73  P_FromJoin|EP_Is
1a880 54 72 75 65 29 29 3d 3d 45 50 5f 49 73 54 72 75  True))==EP_IsTru
1a890 65 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 41  e).#define ExprA
1a8a0 6c 77 61 79 73 46 61 6c 73 65 28 45 29 20 20 28  lwaysFalse(E)  (
1a8b0 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 45 50 5f  ((E)->flags&(EP_
1a8c0 46 72 6f 6d 4a 6f 69 6e 7c 45 50 5f 49 73 46 61  FromJoin|EP_IsFa
1a8d0 6c 73 65 29 29 3d 3d 45 50 5f 49 73 46 61 6c 73  lse))==EP_IsFals
1a8e0 65 29 0a 0a 2f 2a 20 54 68 65 20 45 78 70 72 53  e)../* The ExprS
1a8f0 65 74 56 56 41 50 72 6f 70 65 72 74 79 28 29 20  etVVAProperty() 
1a900 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 66 6f  macro is used fo
1a910 72 20 56 65 72 69 66 69 63 61 74 69 6f 6e 2c 20  r Verification, 
1a920 56 61 6c 69 64 61 74 69 6f 6e 2c 0a 2a 2a 20 61  Validation,.** a
1a930 6e 64 20 41 63 63 72 65 64 69 74 61 74 69 6f 6e  nd Accreditation
1a940 20 6f 6e 6c 79 2e 20 20 49 74 20 77 6f 72 6b 73   only.  It works
1a950 20 6c 69 6b 65 20 45 78 70 72 53 65 74 50 72 6f   like ExprSetPro
1a960 70 65 72 74 79 28 29 20 64 75 72 69 6e 67 20 56  perty() during V
1a970 56 41 0a 2a 2a 20 70 72 6f 63 65 73 73 65 73 20  VA.** processes 
1a980 62 75 74 20 69 73 20 61 20 6e 6f 2d 6f 70 20 66  but is a no-op f
1a990 6f 72 20 64 65 6c 69 76 65 72 79 2e 0a 2a 2f 0a  or delivery..*/.
1a9a0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
1a9b0 42 55 47 0a 23 20 64 65 66 69 6e 65 20 45 78 70  BUG.# define Exp
1a9c0 72 53 65 74 56 56 41 50 72 6f 70 65 72 74 79 28  rSetVVAProperty(
1a9d0 45 2c 50 29 20 20 28 45 29 2d 3e 66 6c 61 67 73  E,P)  (E)->flags
1a9e0 7c 3d 28 50 29 0a 23 65 6c 73 65 0a 23 20 64 65  |=(P).#else.# de
1a9f0 66 69 6e 65 20 45 78 70 72 53 65 74 56 56 41 50  fine ExprSetVVAP
1aa00 72 6f 70 65 72 74 79 28 45 2c 50 29 0a 23 65 6e  roperty(E,P).#en
1aa10 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f  dif../*.** Macro
1aa20 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74  s to determine t
1aa30 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74  he number of byt
1aa40 65 73 20 72 65 71 75 69 72 65 64 20 62 79 20 61  es required by a
1aa50 20 6e 6f 72 6d 61 6c 20 45 78 70 72 0a 2a 2a 20   normal Expr.** 
1aa60 73 74 72 75 63 74 2c 20 61 6e 20 45 78 70 72 20  struct, an Expr 
1aa70 73 74 72 75 63 74 20 77 69 74 68 20 74 68 65 20  struct with the 
1aa80 45 50 5f 52 65 64 75 63 65 64 20 66 6c 61 67 20  EP_Reduced flag 
1aa90 73 65 74 20 69 6e 20 45 78 70 72 2e 66 6c 61 67  set in Expr.flag
1aaa0 73 0a 2a 2a 20 61 6e 64 20 61 6e 20 45 78 70 72  s.** and an Expr
1aab0 20 73 74 72 75 63 74 20 77 69 74 68 20 74 68 65   struct with the
1aac0 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c   EP_TokenOnly fl
1aad0 61 67 20 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69  ag set..*/.#defi
1aae0 6e 65 20 45 58 50 52 5f 46 55 4c 4c 53 49 5a 45  ne EXPR_FULLSIZE
1aaf0 20 20 20 20 20 20 20 20 20 20 20 73 69 7a 65 6f             sizeo
1ab00 66 28 45 78 70 72 29 20 20 20 20 20 20 20 20 20  f(Expr)         
1ab10 20 20 2f 2a 20 46 75 6c 6c 20 73 69 7a 65 20 2a    /* Full size *
1ab20 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f 52  /.#define EXPR_R
1ab30 45 44 55 43 45 44 53 49 5a 45 20 20 20 20 20 20  EDUCEDSIZE      
1ab40 20 20 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c    offsetof(Expr,
1ab50 69 54 61 62 6c 65 29 20 20 2f 2a 20 43 6f 6d 6d  iTable)  /* Comm
1ab60 6f 6e 20 66 65 61 74 75 72 65 73 20 2a 2f 0a 23  on features */.#
1ab70 64 65 66 69 6e 65 20 45 58 50 52 5f 54 4f 4b 45  define EXPR_TOKE
1ab80 4e 4f 4e 4c 59 53 49 5a 45 20 20 20 20 20 20 6f  NONLYSIZE      o
1ab90 66 66 73 65 74 6f 66 28 45 78 70 72 2c 70 4c 65  ffsetof(Expr,pLe
1aba0 66 74 29 20 20 20 2f 2a 20 46 65 77 65 72 20 66  ft)   /* Fewer f
1abb0 65 61 74 75 72 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a  eatures */../*.*
1abc0 2a 20 46 6c 61 67 73 20 70 61 73 73 65 64 20 74  * Flags passed t
1abd0 6f 20 74 68 65 20 73 71 6c 69 74 65 33 45 78 70  o the sqlite3Exp
1abe0 72 44 75 70 28 29 20 66 75 6e 63 74 69 6f 6e 2e  rDup() function.
1abf0 20 53 65 65 20 74 68 65 20 68 65 61 64 65 72 20   See the header 
1ac00 63 6f 6d 6d 65 6e 74 0a 2a 2a 20 61 62 6f 76 65  comment.** above
1ac10 20 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28   sqlite3ExprDup(
1ac20 29 20 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a 2a  ) for details..*
1ac30 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 44 55  /.#define EXPRDU
1ac40 50 5f 52 45 44 55 43 45 20 20 20 20 20 20 20 20  P_REDUCE        
1ac50 20 30 78 30 30 30 31 20 20 2f 2a 20 55 73 65 64   0x0001  /* Used
1ac60 20 72 65 64 75 63 65 64 2d 73 69 7a 65 20 45 78   reduced-size Ex
1ac70 70 72 20 6e 6f 64 65 73 20 2a 2f 0a 0a 2f 2a 0a  pr nodes */../*.
1ac80 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70  ** A list of exp
1ac90 72 65 73 73 69 6f 6e 73 2e 20 20 45 61 63 68 20  ressions.  Each 
1aca0 65 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 20 6f  expression may o
1acb0 70 74 69 6f 6e 61 6c 6c 79 20 68 61 76 65 20 61  ptionally have a
1acc0 0a 2a 2a 20 6e 61 6d 65 2e 20 20 41 6e 20 65 78  .** name.  An ex
1acd0 70 72 2f 6e 61 6d 65 20 63 6f 6d 62 69 6e 61 74  pr/name combinat
1ace0 69 6f 6e 20 63 61 6e 20 62 65 20 75 73 65 64 20  ion can be used 
1acf0 69 6e 20 73 65 76 65 72 61 6c 20 77 61 79 73 2c  in several ways,
1ad00 20 73 75 63 68 0a 2a 2a 20 61 73 20 74 68 65 20   such.** as the 
1ad10 6c 69 73 74 20 6f 66 20 22 65 78 70 72 20 41 53  list of "expr AS
1ad20 20 49 44 22 20 66 69 65 6c 64 73 20 66 6f 6c 6c   ID" fields foll
1ad30 6f 77 69 6e 67 20 61 20 22 53 45 4c 45 43 54 22  owing a "SELECT"
1ad40 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 6c 69   or in the.** li
1ad50 73 74 20 6f 66 20 22 49 44 20 3d 20 65 78 70 72  st of "ID = expr
1ad60 22 20 69 74 65 6d 73 20 69 6e 20 61 6e 20 55 50  " items in an UP
1ad70 44 41 54 45 2e 20 20 41 20 6c 69 73 74 20 6f 66  DATE.  A list of
1ad80 20 65 78 70 72 65 73 73 69 6f 6e 73 20 63 61 6e   expressions can
1ad90 0a 2a 2a 20 61 6c 73 6f 20 62 65 20 75 73 65 64  .** also be used
1ada0 20 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74   as the argument
1adb0 20 74 6f 20 61 20 66 75 6e 63 74 69 6f 6e 2c 20   to a function, 
1adc0 69 6e 20 77 68 69 63 68 20 63 61 73 65 20 74 68  in which case th
1add0 65 20 61 2e 7a 4e 61 6d 65 0a 2a 2a 20 66 69 65  e a.zName.** fie
1ade0 6c 64 20 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a  ld is not used..
1adf0 2a 2a 0a 2a 2a 20 42 79 20 64 65 66 61 75 6c 74  **.** By default
1ae00 20 74 68 65 20 45 78 70 72 2e 7a 53 70 61 6e 20   the Expr.zSpan 
1ae10 66 69 65 6c 64 20 68 6f 6c 64 73 20 61 20 68 75  field holds a hu
1ae20 6d 61 6e 2d 72 65 61 64 61 62 6c 65 20 64 65 73  man-readable des
1ae30 63 72 69 70 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74  cription of.** t
1ae40 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68  he expression th
1ae50 61 74 20 69 73 20 75 73 65 64 20 69 6e 20 74 68  at is used in th
1ae60 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20  e generation of 
1ae70 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 61  error messages a
1ae80 6e 64 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6c 61 62  nd.** column lab
1ae90 65 6c 73 2e 20 20 49 6e 20 74 68 69 73 20 63 61  els.  In this ca
1aea0 73 65 2c 20 45 78 70 72 2e 7a 53 70 61 6e 20 69  se, Expr.zSpan i
1aeb0 73 20 74 79 70 69 63 61 6c 6c 79 20 74 68 65 20  s typically the 
1aec0 74 65 78 74 20 6f 66 20 61 0a 2a 2a 20 63 6f 6c  text of a.** col
1aed0 75 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 61  umn expression a
1aee0 73 20 69 74 20 65 78 69 73 74 73 20 69 6e 20 61  s it exists in a
1aef0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
1af00 74 2e 20 20 48 6f 77 65 76 65 72 2c 20 69 66 0a  t.  However, if.
1af10 2a 2a 20 74 68 65 20 62 53 70 61 6e 49 73 54 61  ** the bSpanIsTa
1af20 62 20 66 6c 61 67 20 69 73 20 73 65 74 2c 20 74  b flag is set, t
1af30 68 65 6e 20 7a 53 70 61 6e 20 69 73 20 6f 76 65  hen zSpan is ove
1af40 72 6c 6f 61 64 65 64 20 74 6f 20 6d 65 61 6e 20  rloaded to mean 
1af50 74 68 65 20 6e 61 6d 65 0a 2a 2a 20 6f 66 20 74  the name.** of t
1af60 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e  he result column
1af70 20 69 6e 20 74 68 65 20 66 6f 72 6d 3a 20 44 41   in the form: DA
1af80 54 41 42 41 53 45 2e 54 41 42 4c 45 2e 43 4f 4c  TABASE.TABLE.COL
1af90 55 4d 4e 2e 20 20 54 68 69 73 20 6c 61 74 65 72  UMN.  This later
1afa0 0a 2a 2a 20 66 6f 72 6d 20 69 73 20 75 73 65 64  .** form is used
1afb0 20 66 6f 72 20 6e 61 6d 65 20 72 65 73 6f 6c 75   for name resolu
1afc0 74 69 6f 6e 20 77 69 74 68 20 6e 65 73 74 65 64  tion with nested
1afd0 20 46 52 4f 4d 20 63 6c 61 75 73 65 73 2e 0a 2a   FROM clauses..*
1afe0 2f 0a 73 74 72 75 63 74 20 45 78 70 72 4c 69 73  /.struct ExprLis
1aff0 74 20 7b 0a 20 20 69 6e 74 20 6e 45 78 70 72 3b  t {.  int nExpr;
1b000 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1b010 4e 75 6d 62 65 72 20 6f 66 20 65 78 70 72 65 73  Number of expres
1b020 73 69 6f 6e 73 20 6f 6e 20 74 68 65 20 6c 69 73  sions on the lis
1b030 74 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 45 78  t */.  struct Ex
1b040 70 72 4c 69 73 74 5f 69 74 65 6d 20 7b 20 2f 2a  prList_item { /*
1b050 20 46 6f 72 20 65 61 63 68 20 65 78 70 72 65 73   For each expres
1b060 73 69 6f 6e 20 69 6e 20 74 68 65 20 6c 69 73 74  sion in the list
1b070 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45   */.    Expr *pE
1b080 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  xpr;            
1b090 2f 2a 20 54 68 65 20 70 61 72 73 65 20 74 72 65  /* The parse tre
1b0a0 65 20 66 6f 72 20 74 68 69 73 20 65 78 70 72 65  e for this expre
1b0b0 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 63 68 61  ssion */.    cha
1b0c0 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
1b0d0 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 61 73       /* Token as
1b0e0 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
1b0f0 69 73 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f  is expression */
1b100 0a 20 20 20 20 63 68 61 72 20 2a 7a 53 70 61 6e  .    char *zSpan
1b110 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1b120 4f 72 69 67 69 6e 61 6c 20 74 65 78 74 20 6f 66  Original text of
1b130 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
1b140 2a 2f 0a 20 20 20 20 75 38 20 73 6f 72 74 4f 72  */.    u8 sortOr
1b150 64 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f  der;           /
1b160 2a 20 31 20 66 6f 72 20 44 45 53 43 20 6f 72 20  * 1 for DESC or 
1b170 30 20 66 6f 72 20 41 53 43 20 2a 2f 0a 20 20 20  0 for ASC */.   
1b180 20 75 6e 73 69 67 6e 65 64 20 64 6f 6e 65 20 3a   unsigned done :
1b190 31 3b 20 20 20 20 20 20 20 2f 2a 20 41 20 66 6c  1;       /* A fl
1b1a0 61 67 20 74 6f 20 69 6e 64 69 63 61 74 65 20 77  ag to indicate w
1b1b0 68 65 6e 20 70 72 6f 63 65 73 73 69 6e 67 20 69  hen processing i
1b1c0 73 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20  s finished */.  
1b1d0 20 20 75 6e 73 69 67 6e 65 64 20 62 53 70 61 6e    unsigned bSpan
1b1e0 49 73 54 61 62 20 3a 31 3b 20 2f 2a 20 7a 53 70  IsTab :1; /* zSp
1b1f0 61 6e 20 68 6f 6c 64 73 20 44 42 2e 54 41 42 4c  an holds DB.TABL
1b200 45 2e 43 4f 4c 55 4d 4e 20 2a 2f 0a 20 20 20 20  E.COLUMN */.    
1b210 75 6e 73 69 67 6e 65 64 20 72 65 75 73 61 62 6c  unsigned reusabl
1b220 65 20 3a 31 3b 20 20 20 2f 2a 20 43 6f 6e 73 74  e :1;   /* Const
1b230 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 20 69  ant expression i
1b240 73 20 72 65 75 73 61 62 6c 65 20 2a 2f 0a 20 20  s reusable */.  
1b250 20 20 75 6e 73 69 67 6e 65 64 20 62 53 6f 72 74    unsigned bSort
1b260 65 72 52 65 66 20 3a 31 3b 20 2f 2a 20 44 65 66  erRef :1; /* Def
1b270 65 72 20 65 76 61 6c 75 61 74 69 6f 6e 20 75 6e  er evaluation un
1b280 74 69 6c 20 61 66 74 65 72 20 73 6f 72 74 69 6e  til after sortin
1b290 67 20 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b  g */.    union {
1b2a0 0a 20 20 20 20 20 20 73 74 72 75 63 74 20 7b 0a  .      struct {.
1b2b0 20 20 20 20 20 20 20 20 75 31 36 20 69 4f 72 64          u16 iOrd
1b2c0 65 72 42 79 43 6f 6c 3b 20 20 20 20 20 20 2f 2a  erByCol;      /*
1b2d0 20 46 6f 72 20 4f 52 44 45 52 20 42 59 2c 20 63   For ORDER BY, c
1b2e0 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20  olumn number in 
1b2f0 72 65 73 75 6c 74 20 73 65 74 20 2a 2f 0a 20 20  result set */.  
1b300 20 20 20 20 20 20 75 31 36 20 69 41 6c 69 61 73        u16 iAlias
1b310 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49  ;           /* I
1b320 6e 64 65 78 20 69 6e 74 6f 20 50 61 72 73 65 2e  ndex into Parse.
1b330 61 41 6c 69 61 73 5b 5d 20 66 6f 72 20 7a 4e 61  aAlias[] for zNa
1b340 6d 65 20 2a 2f 0a 20 20 20 20 20 20 7d 20 78 3b  me */.      } x;
1b350 0a 20 20 20 20 20 20 69 6e 74 20 69 43 6f 6e 73  .      int iCons
1b360 74 45 78 70 72 52 65 67 3b 20 20 20 20 20 20 2f  tExprReg;      /
1b370 2a 20 52 65 67 69 73 74 65 72 20 69 6e 20 77 68  * Register in wh
1b380 69 63 68 20 45 78 70 72 20 76 61 6c 75 65 20 69  ich Expr value i
1b390 73 20 63 61 63 68 65 64 20 2a 2f 0a 20 20 20 20  s cached */.    
1b3a0 7d 20 75 3b 0a 20 20 7d 20 61 5b 31 5d 3b 20 20  } u;.  } a[1];  
1b3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b3c0 2f 2a 20 4f 6e 65 20 73 6c 6f 74 20 66 6f 72 20  /* One slot for 
1b3d0 65 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20  each expression 
1b3e0 69 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d  in the list */.}
1b3f0 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  ;../*.** An inst
1b400 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72  ance of this str
1b410 75 63 74 75 72 65 20 63 61 6e 20 68 6f 6c 64 20  ucture can hold 
1b420 61 20 73 69 6d 70 6c 65 20 6c 69 73 74 20 6f 66  a simple list of
1b430 20 69 64 65 6e 74 69 66 69 65 72 73 2c 0a 2a 2a   identifiers,.**
1b440 20 73 75 63 68 20 61 73 20 74 68 65 20 6c 69 73   such as the lis
1b450 74 20 22 61 2c 62 2c 63 22 20 69 6e 20 74 68 65  t "a,b,c" in the
1b460 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74 65   following state
1b470 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  ments:.**.**    
1b480 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 28    INSERT INTO t(
1b490 61 2c 62 2c 63 29 20 56 41 4c 55 45 53 20 2e 2e  a,b,c) VALUES ..
1b4a0 2e 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45 41 54  .;.**      CREAT
1b4b0 45 20 49 4e 44 45 58 20 69 64 78 20 4f 4e 20 74  E INDEX idx ON t
1b4c0 28 61 2c 62 2c 63 29 3b 0a 2a 2a 20 20 20 20 20  (a,b,c);.**     
1b4d0 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20   CREATE TRIGGER 
1b4e0 74 72 69 67 20 42 45 46 4f 52 45 20 55 50 44 41  trig BEFORE UPDA
1b4f0 54 45 20 4f 4e 20 74 28 61 2c 62 2c 63 29 20 2e  TE ON t(a,b,c) .
1b500 2e 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 64  ..;.**.** The Id
1b510 4c 69 73 74 2e 61 2e 69 64 78 20 66 69 65 6c 64  List.a.idx field
1b520 20 69 73 20 75 73 65 64 20 77 68 65 6e 20 74 68   is used when th
1b530 65 20 49 64 4c 69 73 74 20 72 65 70 72 65 73 65  e IdList represe
1b540 6e 74 73 20 74 68 65 20 6c 69 73 74 20 6f 66 0a  nts the list of.
1b550 2a 2a 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  ** column names 
1b560 61 66 74 65 72 20 61 20 74 61 62 6c 65 20 6e 61  after a table na
1b570 6d 65 20 69 6e 20 61 6e 20 49 4e 53 45 52 54 20  me in an INSERT 
1b580 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20 74  statement.  In t
1b590 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 0a  he statement.**.
1b5a0 2a 2a 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e  **     INSERT IN
1b5b0 54 4f 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 0a  TO t(a,b,c) ....
1b5c0 2a 2a 0a 2a 2a 20 49 66 20 22 61 22 20 69 73 20  **.** If "a" is 
1b5d0 74 68 65 20 6b 2d 74 68 20 63 6f 6c 75 6d 6e 20  the k-th column 
1b5e0 6f 66 20 74 61 62 6c 65 20 22 74 22 2c 20 74 68  of table "t", th
1b5f0 65 6e 20 49 64 4c 69 73 74 2e 61 5b 30 5d 2e 69  en IdList.a[0].i
1b600 64 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74  dx==k..*/.struct
1b610 20 49 64 4c 69 73 74 20 7b 0a 20 20 73 74 72 75   IdList {.  stru
1b620 63 74 20 49 64 4c 69 73 74 5f 69 74 65 6d 20 7b  ct IdList_item {
1b630 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65  .    char *zName
1b640 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f  ;      /* Name o
1b650 66 20 74 68 65 20 69 64 65 6e 74 69 66 69 65 72  f the identifier
1b660 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 64 78 3b   */.    int idx;
1b670 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64            /* Ind
1b680 65 78 20 69 6e 20 73 6f 6d 65 20 54 61 62 6c 65  ex in some Table
1b690 2e 61 43 6f 6c 5b 5d 20 6f 66 20 61 20 63 6f 6c  .aCol[] of a col
1b6a0 75 6d 6e 20 6e 61 6d 65 64 20 7a 4e 61 6d 65 20  umn named zName 
1b6b0 2a 2f 0a 20 20 7d 20 2a 61 3b 0a 20 20 69 6e 74  */.  } *a;.  int
1b6c0 20 6e 49 64 3b 20 20 20 20 20 20 20 20 20 2f 2a   nId;         /*
1b6d0 20 4e 75 6d 62 65 72 20 6f 66 20 69 64 65 6e 74   Number of ident
1b6e0 69 66 69 65 72 73 20 6f 6e 20 74 68 65 20 6c 69  ifiers on the li
1b6f0 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  st */.};../*.** 
1b700 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  The following st
1b710 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62 65  ructure describe
1b720 73 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  s the FROM claus
1b730 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74  e of a SELECT st
1b740 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 45 61 63 68  atement..** Each
1b750 20 74 61 62 6c 65 20 6f 72 20 73 75 62 71 75 65   table or subque
1b760 72 79 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63  ry in the FROM c
1b770 6c 61 75 73 65 20 69 73 20 61 20 73 65 70 61 72  lause is a separ
1b780 61 74 65 20 65 6c 65 6d 65 6e 74 20 6f 66 0a 2a  ate element of.*
1b790 2a 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61 5b  * the SrcList.a[
1b7a0 5d 20 61 72 72 61 79 2e 0a 2a 2a 0a 2a 2a 20 57  ] array..**.** W
1b7b0 69 74 68 20 74 68 65 20 61 64 64 69 74 69 6f 6e  ith the addition
1b7c0 20 6f 66 20 6d 75 6c 74 69 70 6c 65 20 64 61 74   of multiple dat
1b7d0 61 62 61 73 65 20 73 75 70 70 6f 72 74 2c 20 74  abase support, t
1b7e0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
1b7f0 75 63 74 75 72 65 0a 2a 2a 20 63 61 6e 20 61 6c  ucture.** can al
1b800 73 6f 20 62 65 20 75 73 65 64 20 74 6f 20 64 65  so be used to de
1b810 73 63 72 69 62 65 20 61 20 70 61 72 74 69 63 75  scribe a particu
1b820 6c 61 72 20 74 61 62 6c 65 20 73 75 63 68 20 61  lar table such a
1b830 73 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  s the table that
1b840 0a 2a 2a 20 69 73 20 6d 6f 64 69 66 69 65 64 20  .** is modified 
1b850 62 79 20 61 6e 20 49 4e 53 45 52 54 2c 20 44 45  by an INSERT, DE
1b860 4c 45 54 45 2c 20 6f 72 20 55 50 44 41 54 45 20  LETE, or UPDATE 
1b870 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20 73  statement.  In s
1b880 74 61 6e 64 61 72 64 20 53 51 4c 2c 0a 2a 2a 20  tandard SQL,.** 
1b890 73 75 63 68 20 61 20 74 61 62 6c 65 20 6d 75 73  such a table mus
1b8a0 74 20 62 65 20 61 20 73 69 6d 70 6c 65 20 6e 61  t be a simple na
1b8b0 6d 65 3a 20 49 44 2e 20 20 42 75 74 20 69 6e 20  me: ID.  But in 
1b8c0 53 51 4c 69 74 65 2c 20 74 68 65 20 74 61 62 6c  SQLite, the tabl
1b8d0 65 20 63 61 6e 0a 2a 2a 20 6e 6f 77 20 62 65 20  e can.** now be 
1b8e0 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 61 20  identified by a 
1b8f0 64 61 74 61 62 61 73 65 20 6e 61 6d 65 2c 20 61  database name, a
1b900 20 64 6f 74 2c 20 74 68 65 6e 20 74 68 65 20 74   dot, then the t
1b910 61 62 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 49 44  able name: ID.ID
1b920 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6a 6f 69 6e  ..**.** The join
1b930 74 79 70 65 20 73 74 61 72 74 73 20 6f 75 74 20  type starts out 
1b940 73 68 6f 77 69 6e 67 20 74 68 65 20 6a 6f 69 6e  showing the join
1b950 20 74 79 70 65 20 62 65 74 77 65 65 6e 20 74 68   type between th
1b960 65 20 63 75 72 72 65 6e 74 20 74 61 62 6c 65 0a  e current table.
1b970 2a 2a 20 61 6e 64 20 74 68 65 20 6e 65 78 74 20  ** and the next 
1b980 74 61 62 6c 65 20 6f 6e 20 74 68 65 20 6c 69 73  table on the lis
1b990 74 2e 20 20 54 68 65 20 70 61 72 73 65 72 20 62  t.  The parser b
1b9a0 75 69 6c 64 73 20 74 68 65 20 6c 69 73 74 20 74  uilds the list t
1b9b0 68 69 73 20 77 61 79 2e 0a 2a 2a 20 42 75 74 20  his way..** But 
1b9c0 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 53 68  sqlite3SrcListSh
1b9d0 69 66 74 4a 6f 69 6e 54 79 70 65 28 29 20 6c 61  iftJoinType() la
1b9e0 74 65 72 20 73 68 69 66 74 73 20 74 68 65 20 6a  ter shifts the j
1b9f0 6f 69 6e 74 79 70 65 73 20 73 6f 20 74 68 61 74  ointypes so that
1ba00 20 65 61 63 68 0a 2a 2a 20 6a 6f 69 6e 74 79 70   each.** jointyp
1ba10 65 20 65 78 70 72 65 73 73 65 73 20 74 68 65 20  e expresses the 
1ba20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20 74 68 65  join between the
1ba30 20 74 61 62 6c 65 20 61 6e 64 20 74 68 65 20 70   table and the p
1ba40 72 65 76 69 6f 75 73 20 74 61 62 6c 65 2e 0a 2a  revious table..*
1ba50 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 63 6f 6c 55  *.** In the colU
1ba60 73 65 64 20 66 69 65 6c 64 2c 20 74 68 65 20 68  sed field, the h
1ba70 69 67 68 2d 6f 72 64 65 72 20 62 69 74 20 28 62  igh-order bit (b
1ba80 69 74 20 36 33 29 20 69 73 20 73 65 74 20 69 66  it 63) is set if
1ba90 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20 63 6f   the table.** co
1baa0 6e 74 61 69 6e 73 20 6d 6f 72 65 20 74 68 61 6e  ntains more than
1bab0 20 36 33 20 63 6f 6c 75 6d 6e 73 20 61 6e 64 20   63 columns and 
1bac0 74 68 65 20 36 34 2d 74 68 20 6f 72 20 6c 61 74  the 64-th or lat
1bad0 65 72 20 63 6f 6c 75 6d 6e 20 69 73 20 75 73 65  er column is use
1bae0 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 72 63  d..*/.struct Src
1baf0 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e 53 72  List {.  int nSr
1bb00 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  c;        /* Num
1bb10 62 65 72 20 6f 66 20 74 61 62 6c 65 73 20 6f 72  ber of tables or
1bb20 20 73 75 62 71 75 65 72 69 65 73 20 69 6e 20 74   subqueries in t
1bb30 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a  he FROM clause *
1bb40 2f 0a 20 20 75 33 32 20 6e 41 6c 6c 6f 63 3b 20  /.  u32 nAlloc; 
1bb50 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1bb60 66 20 65 6e 74 72 69 65 73 20 61 6c 6c 6f 63 61  f entries alloca
1bb70 74 65 64 20 69 6e 20 61 5b 5d 20 62 65 6c 6f 77  ted in a[] below
1bb80 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 53 72 63   */.  struct Src
1bb90 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20  List_item {.    
1bba0 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
1bbb0 20 20 2f 2a 20 53 63 68 65 6d 61 20 74 6f 20 77    /* Schema to w
1bbc0 68 69 63 68 20 74 68 69 73 20 69 74 65 6d 20 69  hich this item i
1bbd0 73 20 66 69 78 65 64 20 2a 2f 0a 20 20 20 20 63  s fixed */.    c
1bbe0 68 61 72 20 2a 7a 44 61 74 61 62 61 73 65 3b 20  har *zDatabase; 
1bbf0 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74 61   /* Name of data
1bc00 62 61 73 65 20 68 6f 6c 64 69 6e 67 20 74 68 69  base holding thi
1bc10 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63  s table */.    c
1bc20 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
1bc30 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20   /* Name of the 
1bc40 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61  table */.    cha
1bc50 72 20 2a 7a 41 6c 69 61 73 3b 20 20 20 20 20 2f  r *zAlias;     /
1bc60 2a 20 54 68 65 20 22 42 22 20 70 61 72 74 20 6f  * The "B" part o
1bc70 66 20 61 20 22 41 20 41 53 20 42 22 20 70 68 72  f a "A AS B" phr
1bc80 61 73 65 2e 20 20 7a 4e 61 6d 65 20 69 73 20 74  ase.  zName is t
1bc90 68 65 20 22 41 22 20 2a 2f 0a 20 20 20 20 54 61  he "A" */.    Ta
1bca0 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20  ble *pTab;      
1bcb0 2f 2a 20 41 6e 20 53 51 4c 20 74 61 62 6c 65 20  /* An SQL table 
1bcc0 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f  corresponding to
1bcd0 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 53 65   zName */.    Se
1bce0 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20  lect *pSelect;  
1bcf0 2f 2a 20 41 20 53 45 4c 45 43 54 20 73 74 61 74  /* A SELECT stat
1bd00 65 6d 65 6e 74 20 75 73 65 64 20 69 6e 20 70 6c  ement used in pl
1bd10 61 63 65 20 6f 66 20 61 20 74 61 62 6c 65 20 6e  ace of a table n
1bd20 61 6d 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61  ame */.    int a
1bd30 64 64 72 46 69 6c 6c 53 75 62 3b 20 20 2f 2a 20  ddrFillSub;  /* 
1bd40 41 64 64 72 65 73 73 20 6f 66 20 73 75 62 72 6f  Address of subro
1bd50 75 74 69 6e 65 20 74 6f 20 6d 61 6e 69 66 65 73  utine to manifes
1bd60 74 20 61 20 73 75 62 71 75 65 72 79 20 2a 2f 0a  t a subquery */.
1bd70 20 20 20 20 69 6e 74 20 72 65 67 52 65 74 75 72      int regRetur
1bd80 6e 3b 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65  n;    /* Registe
1bd90 72 20 68 6f 6c 64 69 6e 67 20 72 65 74 75 72 6e  r holding return
1bda0 20 61 64 64 72 65 73 73 20 6f 66 20 61 64 64 72   address of addr
1bdb0 46 69 6c 6c 53 75 62 20 2a 2f 0a 20 20 20 20 69  FillSub */.    i
1bdc0 6e 74 20 72 65 67 52 65 73 75 6c 74 3b 20 20 20  nt regResult;   
1bdd0 20 2f 2a 20 52 65 67 69 73 74 65 72 73 20 68 6f   /* Registers ho
1bde0 6c 64 69 6e 67 20 72 65 73 75 6c 74 73 20 6f 66  lding results of
1bdf0 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f   a co-routine */
1be00 0a 20 20 20 20 73 74 72 75 63 74 20 7b 0a 20 20  .    struct {.  
1be10 20 20 20 20 75 38 20 6a 6f 69 6e 74 79 70 65 3b      u8 jointype;
1be20 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20 6f 66        /* Type of
1be30 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20 74 68   join between th
1be40 69 73 20 74 61 62 6c 65 20 61 6e 64 20 74 68 65  is table and the
1be50 20 70 72 65 76 69 6f 75 73 20 2a 2f 0a 20 20 20   previous */.   
1be60 20 20 20 75 6e 73 69 67 6e 65 64 20 6e 6f 74 49     unsigned notI
1be70 6e 64 65 78 65 64 20 3a 31 3b 20 20 20 20 2f 2a  ndexed :1;    /*
1be80 20 54 72 75 65 20 69 66 20 74 68 65 72 65 20 69   True if there i
1be90 73 20 61 20 4e 4f 54 20 49 4e 44 45 58 45 44 20  s a NOT INDEXED 
1bea0 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 20 20  clause */.      
1beb0 75 6e 73 69 67 6e 65 64 20 69 73 49 6e 64 65 78  unsigned isIndex
1bec0 65 64 42 79 20 3a 31 3b 20 20 20 2f 2a 20 54 72  edBy :1;   /* Tr
1bed0 75 65 20 69 66 20 74 68 65 72 65 20 69 73 20 61  ue if there is a
1bee0 6e 20 49 4e 44 45 58 45 44 20 42 59 20 63 6c 61  n INDEXED BY cla
1bef0 75 73 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73  use */.      uns
1bf00 69 67 6e 65 64 20 69 73 54 61 62 46 75 6e 63 20  igned isTabFunc 
1bf10 3a 31 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20  :1;     /* True 
1bf20 69 66 20 74 61 62 6c 65 2d 76 61 6c 75 65 64 2d  if table-valued-
1bf30 66 75 6e 63 74 69 6f 6e 20 73 79 6e 74 61 78 20  function syntax 
1bf40 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65  */.      unsigne
1bf50 64 20 69 73 43 6f 72 72 65 6c 61 74 65 64 20 3a  d isCorrelated :
1bf60 31 3b 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73  1;  /* True if s
1bf70 75 62 2d 71 75 65 72 79 20 69 73 20 63 6f 72 72  ub-query is corr
1bf80 65 6c 61 74 65 64 20 2a 2f 0a 20 20 20 20 20 20  elated */.      
1bf90 75 6e 73 69 67 6e 65 64 20 76 69 61 43 6f 72 6f  unsigned viaCoro
1bfa0 75 74 69 6e 65 20 3a 31 3b 20 20 2f 2a 20 49 6d  utine :1;  /* Im
1bfb0 70 6c 65 6d 65 6e 74 65 64 20 61 73 20 61 20 63  plemented as a c
1bfc0 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20 20  o-routine */.   
1bfd0 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73 52 65     unsigned isRe
1bfe0 63 75 72 73 69 76 65 20 3a 31 3b 20 20 20 2f 2a  cursive :1;   /*
1bff0 20 54 72 75 65 20 66 6f 72 20 72 65 63 75 72 73   True for recurs
1c000 69 76 65 20 72 65 66 65 72 65 6e 63 65 20 69 6e  ive reference in
1c010 20 57 49 54 48 20 2a 2f 0a 20 20 20 20 7d 20 66   WITH */.    } f
1c020 67 3b 0a 20 20 20 20 69 6e 74 20 69 43 75 72 73  g;.    int iCurs
1c030 6f 72 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20  or;      /* The 
1c040 56 44 42 45 20 63 75 72 73 6f 72 20 6e 75 6d 62  VDBE cursor numb
1c050 65 72 20 75 73 65 64 20 74 6f 20 61 63 63 65 73  er used to acces
1c060 73 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  s this table */.
1c070 20 20 20 20 45 78 70 72 20 2a 70 4f 6e 3b 20 20      Expr *pOn;  
1c080 20 20 20 20 20 20 2f 2a 20 54 68 65 20 4f 4e 20        /* The ON 
1c090 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e  clause of a join
1c0a0 20 2a 2f 0a 20 20 20 20 49 64 4c 69 73 74 20 2a   */.    IdList *
1c0b0 70 55 73 69 6e 67 3b 20 20 20 2f 2a 20 54 68 65  pUsing;   /* The
1c0c0 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20 6f 66   USING clause of
1c0d0 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 42   a join */.    B
1c0e0 69 74 6d 61 73 6b 20 63 6f 6c 55 73 65 64 3b 20  itmask colUsed; 
1c0f0 20 2f 2a 20 42 69 74 20 4e 20 28 31 3c 3c 4e 29   /* Bit N (1<<N)
1c100 20 73 65 74 20 69 66 20 63 6f 6c 75 6d 6e 20 4e   set if column N
1c110 20 6f 66 20 70 54 61 62 20 69 73 20 75 73 65 64   of pTab is used
1c120 20 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b 0a   */.    union {.
1c130 20 20 20 20 20 20 63 68 61 72 20 2a 7a 49 6e 64        char *zInd
1c140 65 78 65 64 42 79 3b 20 20 20 20 2f 2a 20 49 64  exedBy;    /* Id
1c150 65 6e 74 69 66 69 65 72 20 66 72 6f 6d 20 22 49  entifier from "I
1c160 4e 44 45 58 45 44 20 42 59 20 3c 7a 49 6e 64 65  NDEXED BY <zInde
1c170 78 3e 22 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  x>" clause */.  
1c180 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 46      ExprList *pF
1c190 75 6e 63 41 72 67 3b 20 20 2f 2a 20 41 72 67 75  uncArg;  /* Argu
1c1a0 6d 65 6e 74 73 20 74 6f 20 74 61 62 6c 65 2d 76  ments to table-v
1c1b0 61 6c 75 65 64 2d 66 75 6e 63 74 69 6f 6e 20 2a  alued-function *
1c1c0 2f 0a 20 20 20 20 7d 20 75 31 3b 0a 20 20 20 20  /.    } u1;.    
1c1d0 49 6e 64 65 78 20 2a 70 49 42 49 6e 64 65 78 3b  Index *pIBIndex;
1c1e0 20 20 2f 2a 20 49 6e 64 65 78 20 73 74 72 75 63    /* Index struc
1c1f0 74 75 72 65 20 63 6f 72 72 65 73 70 6f 6e 64 69  ture correspondi
1c200 6e 67 20 74 6f 20 75 31 2e 7a 49 6e 64 65 78 65  ng to u1.zIndexe
1c210 64 42 79 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b  dBy */.  } a[1];
1c220 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1c230 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61  One entry for ea
1c240 63 68 20 69 64 65 6e 74 69 66 69 65 72 20 6f 6e  ch identifier on
1c250 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a   the list */.};.
1c260 0a 2f 2a 0a 2a 2a 20 50 65 72 6d 69 74 74 65 64  ./*.** Permitted
1c270 20 76 61 6c 75 65 73 20 6f 66 20 74 68 65 20 53   values of the S
1c280 72 63 4c 69 73 74 2e 61 2e 6a 6f 69 6e 74 79 70  rcList.a.jointyp
1c290 65 20 66 69 65 6c 64 0a 2a 2f 0a 23 64 65 66 69  e field.*/.#defi
1c2a0 6e 65 20 4a 54 5f 49 4e 4e 45 52 20 20 20 20 20  ne JT_INNER     
1c2b0 30 78 30 30 30 31 20 20 20 20 2f 2a 20 41 6e 79  0x0001    /* Any
1c2c0 20 6b 69 6e 64 20 6f 66 20 69 6e 6e 65 72 20 6f   kind of inner o
1c2d0 72 20 63 72 6f 73 73 20 6a 6f 69 6e 20 2a 2f 0a  r cross join */.
1c2e0 23 64 65 66 69 6e 65 20 4a 54 5f 43 52 4f 53 53  #define JT_CROSS
1c2f0 20 20 20 20 20 30 78 30 30 30 32 20 20 20 20 2f       0x0002    /
1c300 2a 20 45 78 70 6c 69 63 69 74 20 75 73 65 20 6f  * Explicit use o
1c310 66 20 74 68 65 20 43 52 4f 53 53 20 6b 65 79 77  f the CROSS keyw
1c320 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  ord */.#define J
1c330 54 5f 4e 41 54 55 52 41 4c 20 20 20 30 78 30 30  T_NATURAL   0x00
1c340 30 34 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f  04    /* True fo
1c350 72 20 61 20 22 6e 61 74 75 72 61 6c 22 20 6a 6f  r a "natural" jo
1c360 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  in */.#define JT
1c370 5f 4c 45 46 54 20 20 20 20 20 20 30 78 30 30 30  _LEFT      0x000
1c380 38 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 75 74  8    /* Left out
1c390 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69  er join */.#defi
1c3a0 6e 65 20 4a 54 5f 52 49 47 48 54 20 20 20 20 20  ne JT_RIGHT     
1c3b0 30 78 30 30 31 30 20 20 20 20 2f 2a 20 52 69 67  0x0010    /* Rig
1c3c0 68 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f  ht outer join */
1c3d0 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4f 55 54 45  .#define JT_OUTE
1c3e0 52 20 20 20 20 20 30 78 30 30 32 30 20 20 20 20  R     0x0020    
1c3f0 2f 2a 20 54 68 65 20 22 4f 55 54 45 52 22 20 6b  /* The "OUTER" k
1c400 65 79 77 6f 72 64 20 69 73 20 70 72 65 73 65 6e  eyword is presen
1c410 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  t */.#define JT_
1c420 45 52 52 4f 52 20 20 20 20 20 30 78 30 30 34 30  ERROR     0x0040
1c430 20 20 20 20 2f 2a 20 75 6e 6b 6e 6f 77 6e 20 6f      /* unknown o
1c440 72 20 75 6e 73 75 70 70 6f 72 74 65 64 20 6a 6f  r unsupported jo
1c450 69 6e 20 74 79 70 65 20 2a 2f 0a 0a 0a 2f 2a 0a  in type */.../*.
1c460 2a 2a 20 46 6c 61 67 73 20 61 70 70 72 6f 70 72  ** Flags appropr
1c470 69 61 74 65 20 66 6f 72 20 74 68 65 20 77 63 74  iate for the wct
1c480 72 6c 46 6c 61 67 73 20 70 61 72 61 6d 65 74 65  rlFlags paramete
1c490 72 20 6f 66 20 73 71 6c 69 74 65 33 57 68 65 72  r of sqlite3Wher
1c4a0 65 42 65 67 69 6e 28 29 0a 2a 2a 20 61 6e 64 20  eBegin().** and 
1c4b0 74 68 65 20 57 68 65 72 65 49 6e 66 6f 2e 77 63  the WhereInfo.wc
1c4c0 74 72 6c 46 6c 61 67 73 20 6d 65 6d 62 65 72 2e  trlFlags member.
1c4d0 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e  .**.** Value con
1c4e0 73 74 72 61 69 6e 74 73 20 28 65 6e 66 6f 72 63  straints (enforc
1c4f0 65 64 20 76 69 61 20 61 73 73 65 72 74 28 29 29  ed via assert())
1c500 3a 0a 2a 2a 20 20 20 20 20 57 48 45 52 45 5f 55  :.**     WHERE_U
1c510 53 45 5f 4c 49 4d 49 54 20 20 3d 3d 20 53 46 5f  SE_LIMIT  == SF_
1c520 46 69 78 65 64 4c 69 6d 69 74 0a 2a 2f 0a 23 64  FixedLimit.*/.#d
1c530 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45  efine WHERE_ORDE
1c540 52 42 59 5f 4e 4f 52 4d 41 4c 20 20 20 30 78 30  RBY_NORMAL   0x0
1c550 30 30 30 20 2f 2a 20 4e 6f 2d 6f 70 20 2a 2f 0a  000 /* No-op */.
1c560 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52  #define WHERE_OR
1c570 44 45 52 42 59 5f 4d 49 4e 20 20 20 20 20 20 30  DERBY_MIN      0
1c580 78 30 30 30 31 20 2f 2a 20 4f 52 44 45 52 20 42  x0001 /* ORDER B
1c590 59 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72  Y processing for
1c5a0 20 6d 69 6e 28 29 20 66 75 6e 63 20 2a 2f 0a 23   min() func */.#
1c5b0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44  define WHERE_ORD
1c5c0 45 52 42 59 5f 4d 41 58 20 20 20 20 20 20 30 78  ERBY_MAX      0x
1c5d0 30 30 30 32 20 2f 2a 20 4f 52 44 45 52 20 42 59  0002 /* ORDER BY
1c5e0 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20   processing for 
1c5f0 6d 61 78 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64  max() func */.#d
1c600 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50  efine WHERE_ONEP
1c610 41 53 53 5f 44 45 53 49 52 45 44 20 20 30 78 30  ASS_DESIRED  0x0
1c620 30 30 34 20 2f 2a 20 57 61 6e 74 20 74 6f 20 64  004 /* Want to d
1c630 6f 20 6f 6e 65 2d 70 61 73 73 20 55 50 44 41 54  o one-pass UPDAT
1c640 45 2f 44 45 4c 45 54 45 20 2a 2f 0a 23 64 65 66  E/DELETE */.#def
1c650 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50 41 53  ine WHERE_ONEPAS
1c660 53 5f 4d 55 4c 54 49 52 4f 57 20 30 78 30 30 30  S_MULTIROW 0x000
1c670 38 20 2f 2a 20 4f 4e 45 50 41 53 53 20 69 73 20  8 /* ONEPASS is 
1c680 6f 6b 20 77 69 74 68 20 6d 75 6c 74 69 70 6c 65  ok with multiple
1c690 20 72 6f 77 73 20 2a 2f 0a 23 64 65 66 69 6e 65   rows */.#define
1c6a0 20 57 48 45 52 45 5f 44 55 50 4c 49 43 41 54 45   WHERE_DUPLICATE
1c6b0 53 5f 4f 4b 20 20 20 20 30 78 30 30 31 30 20 2f  S_OK    0x0010 /
1c6c0 2a 20 4f 6b 20 74 6f 20 72 65 74 75 72 6e 20 61  * Ok to return a
1c6d0 20 72 6f 77 20 6d 6f 72 65 20 74 68 61 6e 20 6f   row more than o
1c6e0 6e 63 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  nce */.#define W
1c6f0 48 45 52 45 5f 4f 52 5f 53 55 42 43 4c 41 55 53  HERE_OR_SUBCLAUS
1c700 45 20 20 20 20 20 30 78 30 30 32 30 20 2f 2a 20  E     0x0020 /* 
1c710 50 72 6f 63 65 73 73 69 6e 67 20 61 20 73 75 62  Processing a sub
1c720 2d 57 48 45 52 45 20 61 73 20 70 61 72 74 20 6f  -WHERE as part o
1c730 66 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  f.              
1c740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c750 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65 20 4f          ** the O
1c760 52 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 20  R optimization  
1c770 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1c780 5f 47 52 4f 55 50 42 59 20 20 20 20 20 20 20 20  _GROUPBY        
1c790 20 20 30 78 30 30 34 30 20 2f 2a 20 70 4f 72 64    0x0040 /* pOrd
1c7a0 65 72 42 79 20 69 73 20 72 65 61 6c 6c 79 20 61  erBy is really a
1c7b0 20 47 52 4f 55 50 20 42 59 20 2a 2f 0a 23 64 65   GROUP BY */.#de
1c7c0 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49  fine WHERE_DISTI
1c7d0 4e 43 54 42 59 20 20 20 20 20 20 20 30 78 30 30  NCTBY       0x00
1c7e0 38 30 20 2f 2a 20 70 4f 72 64 65 72 62 79 20 69  80 /* pOrderby i
1c7f0 73 20 72 65 61 6c 6c 79 20 61 20 44 49 53 54 49  s really a DISTI
1c800 4e 43 54 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64  NCT clause */.#d
1c810 65 66 69 6e 65 20 57 48 45 52 45 5f 57 41 4e 54  efine WHERE_WANT
1c820 5f 44 49 53 54 49 4e 43 54 20 20 20 20 30 78 30  _DISTINCT    0x0
1c830 31 30 30 20 2f 2a 20 41 6c 6c 20 6f 75 74 70 75  100 /* All outpu
1c840 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 64 69  t needs to be di
1c850 73 74 69 6e 63 74 20 2a 2f 0a 23 64 65 66 69 6e  stinct */.#defin
1c860 65 20 57 48 45 52 45 5f 53 4f 52 54 42 59 47 52  e WHERE_SORTBYGR
1c870 4f 55 50 20 20 20 20 20 20 30 78 30 32 30 30 20  OUP      0x0200 
1c880 2f 2a 20 53 75 70 70 6f 72 74 20 73 71 6c 69 74  /* Support sqlit
1c890 65 33 57 68 65 72 65 49 73 53 6f 72 74 65 64 28  e3WhereIsSorted(
1c8a0 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  ) */.#define WHE
1c8b0 52 45 5f 53 45 45 4b 5f 54 41 42 4c 45 20 20 20  RE_SEEK_TABLE   
1c8c0 20 20 20 20 30 78 30 34 30 30 20 2f 2a 20 44 6f      0x0400 /* Do
1c8d0 20 6e 6f 74 20 64 65 66 65 72 20 73 65 65 6b 73   not defer seeks
1c8e0 20 6f 6e 20 6d 61 69 6e 20 74 61 62 6c 65 20 2a   on main table *
1c8f0 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1c900 4f 52 44 45 52 42 59 5f 4c 49 4d 49 54 20 20 20  ORDERBY_LIMIT   
1c910 20 30 78 30 38 30 30 20 2f 2a 20 4f 52 44 45 52   0x0800 /* ORDER
1c920 42 59 2b 4c 49 4d 49 54 20 6f 6e 20 74 68 65 20  BY+LIMIT on the 
1c930 69 6e 6e 65 72 20 6c 6f 6f 70 20 2a 2f 0a 23 64  inner loop */.#d
1c940 65 66 69 6e 65 20 57 48 45 52 45 5f 53 45 45 4b  efine WHERE_SEEK
1c950 5f 55 4e 49 51 5f 54 41 42 4c 45 20 20 30 78 31  _UNIQ_TABLE  0x1
1c960 30 30 30 20 2f 2a 20 44 6f 20 6e 6f 74 20 64 65  000 /* Do not de
1c970 66 65 72 20 73 65 65 6b 73 20 69 66 20 75 6e 69  fer seeks if uni
1c980 71 75 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  que */.         
1c990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1c9a0 2a 20 20 20 20 20 30 78 32 30 30 30 20 20 20 20  *     0x2000    
1c9b0 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 75 73  not currently us
1c9c0 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  ed */.#define WH
1c9d0 45 52 45 5f 55 53 45 5f 4c 49 4d 49 54 20 20 20  ERE_USE_LIMIT   
1c9e0 20 20 20 20 20 30 78 34 30 30 30 20 2f 2a 20 55       0x4000 /* U
1c9f0 73 65 20 74 68 65 20 4c 49 4d 49 54 20 69 6e 20  se the LIMIT in 
1ca00 63 6f 73 74 20 65 73 74 69 6d 61 74 65 73 20 2a  cost estimates *
1ca10 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
1ca20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 20            /*    
1ca30 20 30 78 38 30 30 30 20 20 20 20 6e 6f 74 20 63   0x8000    not c
1ca40 75 72 72 65 6e 74 6c 79 20 75 73 65 64 20 2a 2f  urrently used */
1ca50 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74  ../* Allowed ret
1ca60 75 72 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d 20  urn values from 
1ca70 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 44 69  sqlite3WhereIsDi
1ca80 73 74 69 6e 63 74 28 29 0a 2a 2f 0a 23 64 65 66  stinct().*/.#def
1ca90 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e  ine WHERE_DISTIN
1caa0 43 54 5f 4e 4f 4f 50 20 20 20 20 20 20 30 20 20  CT_NOOP      0  
1cab0 2f 2a 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77  /* DISTINCT keyw
1cac0 6f 72 64 20 6e 6f 74 20 75 73 65 64 20 2a 2f 0a  ord not used */.
1cad0 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49  #define WHERE_DI
1cae0 53 54 49 4e 43 54 5f 55 4e 49 51 55 45 20 20 20  STINCT_UNIQUE   
1caf0 20 31 20 20 2f 2a 20 4e 6f 20 64 75 70 6c 69 63   1  /* No duplic
1cb00 61 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ates */.#define 
1cb10 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 4f  WHERE_DISTINCT_O
1cb20 52 44 45 52 45 44 20 20 20 32 20 20 2f 2a 20 41  RDERED   2  /* A
1cb30 6c 6c 20 64 75 70 6c 69 63 61 74 65 73 20 61 72  ll duplicates ar
1cb40 65 20 61 64 6a 61 63 65 6e 74 20 2a 2f 0a 23 64  e adjacent */.#d
1cb50 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54  efine WHERE_DIST
1cb60 49 4e 43 54 5f 55 4e 4f 52 44 45 52 45 44 20 33  INCT_UNORDERED 3
1cb70 20 20 2f 2a 20 44 75 70 6c 69 63 61 74 65 73 20    /* Duplicates 
1cb80 61 72 65 20 73 63 61 74 74 65 72 65 64 20 2a 2f  are scattered */
1cb90 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e 61 6d 65 43 6f  ../*.** A NameCo
1cba0 6e 74 65 78 74 20 64 65 66 69 6e 65 73 20 61 20  ntext defines a 
1cbb0 63 6f 6e 74 65 78 74 20 69 6e 20 77 68 69 63 68  context in which
1cbc0 20 74 6f 20 72 65 73 6f 6c 76 65 20 74 61 62 6c   to resolve tabl
1cbd0 65 20 61 6e 64 20 63 6f 6c 75 6d 6e 0a 2a 2a 20  e and column.** 
1cbe0 6e 61 6d 65 73 2e 20 20 54 68 65 20 63 6f 6e 74  names.  The cont
1cbf0 65 78 74 20 63 6f 6e 73 69 73 74 73 20 6f 66 20  ext consists of 
1cc00 61 20 6c 69 73 74 20 6f 66 20 74 61 62 6c 65 73  a list of tables
1cc10 20 28 74 68 65 20 70 53 72 63 4c 69 73 74 29 20   (the pSrcList) 
1cc20 66 69 65 6c 64 20 61 6e 64 0a 2a 2a 20 61 20 6c  field and.** a l
1cc30 69 73 74 20 6f 66 20 6e 61 6d 65 64 20 65 78 70  ist of named exp
1cc40 72 65 73 73 69 6f 6e 20 28 70 45 4c 69 73 74 29  ression (pEList)
1cc50 2e 20 20 54 68 65 20 6e 61 6d 65 64 20 65 78 70  .  The named exp
1cc60 72 65 73 73 69 6f 6e 20 6c 69 73 74 20 6d 61 79  ression list may
1cc70 0a 2a 2a 20 62 65 20 4e 55 4c 4c 2e 20 20 54 68  .** be NULL.  Th
1cc80 65 20 70 53 72 63 20 63 6f 72 72 65 73 70 6f 6e  e pSrc correspon
1cc90 64 73 20 74 6f 20 74 68 65 20 46 52 4f 4d 20 63  ds to the FROM c
1cca0 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43  lause of a SELEC
1ccb0 54 20 6f 72 0a 2a 2a 20 74 6f 20 74 68 65 20 74  T or.** to the t
1ccc0 61 62 6c 65 20 62 65 69 6e 67 20 6f 70 65 72 61  able being opera
1ccd0 74 65 64 20 6f 6e 20 62 79 20 49 4e 53 45 52 54  ted on by INSERT
1cce0 2c 20 55 50 44 41 54 45 2c 20 6f 72 20 44 45 4c  , UPDATE, or DEL
1ccf0 45 54 45 2e 20 20 54 68 65 0a 2a 2a 20 70 45 4c  ETE.  The.** pEL
1cd00 69 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  ist corresponds 
1cd10 74 6f 20 74 68 65 20 72 65 73 75 6c 74 20 73 65  to the result se
1cd20 74 20 6f 66 20 61 20 53 45 4c 45 43 54 20 61 6e  t of a SELECT an
1cd30 64 20 69 73 20 4e 55 4c 4c 20 66 6f 72 0a 2a 2a  d is NULL for.**
1cd40 20 6f 74 68 65 72 20 73 74 61 74 65 6d 65 6e 74   other statement
1cd50 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65 43 6f 6e  s..**.** NameCon
1cd60 74 65 78 74 73 20 63 61 6e 20 62 65 20 6e 65 73  texts can be nes
1cd70 74 65 64 2e 20 20 57 68 65 6e 20 72 65 73 6f 6c  ted.  When resol
1cd80 76 69 6e 67 20 6e 61 6d 65 73 2c 20 74 68 65 20  ving names, the 
1cd90 69 6e 6e 65 72 2d 6d 6f 73 74 0a 2a 2a 20 63 6f  inner-most.** co
1cda0 6e 74 65 78 74 20 69 73 20 73 65 61 72 63 68 65  ntext is searche
1cdb0 64 20 66 69 72 73 74 2e 20 20 49 66 20 6e 6f 20  d first.  If no 
1cdc0 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20  match is found, 
1cdd0 74 68 65 20 6e 65 78 74 20 6f 75 74 65 72 0a 2a  the next outer.*
1cde0 2a 20 63 6f 6e 74 65 78 74 20 69 73 20 63 68 65  * context is che
1cdf0 63 6b 65 64 2e 20 20 49 66 20 74 68 65 72 65 20  cked.  If there 
1ce00 69 73 20 73 74 69 6c 6c 20 6e 6f 20 6d 61 74 63  is still no matc
1ce10 68 2c 20 74 68 65 20 6e 65 78 74 20 63 6f 6e 74  h, the next cont
1ce20 65 78 74 0a 2a 2a 20 69 73 20 63 68 65 63 6b 65  ext.** is checke
1ce30 64 2e 20 20 54 68 69 73 20 70 72 6f 63 65 73 73  d.  This process
1ce40 20 63 6f 6e 74 69 6e 75 65 73 20 75 6e 74 69 6c   continues until
1ce50 20 65 69 74 68 65 72 20 61 20 6d 61 74 63 68 20   either a match 
1ce60 69 73 20 66 6f 75 6e 64 0a 2a 2a 20 6f 72 20 61  is found.** or a
1ce70 6c 6c 20 63 6f 6e 74 65 78 74 73 20 61 72 65 20  ll contexts are 
1ce80 63 68 65 63 6b 2e 20 20 57 68 65 6e 20 61 20 6d  check.  When a m
1ce90 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74  atch is found, t
1cea0 68 65 20 6e 52 65 66 20 6d 65 6d 62 65 72 20 6f  he nRef member o
1ceb0 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 78 74  f.** the context
1cec0 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
1ced0 6d 61 74 63 68 20 69 73 20 69 6e 63 72 65 6d 65  match is increme
1cee0 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 45 61 63 68  nted..**.** Each
1cef0 20 73 75 62 71 75 65 72 79 20 67 65 74 73 20 61   subquery gets a
1cf00 20 6e 65 77 20 4e 61 6d 65 43 6f 6e 74 65 78 74   new NameContext
1cf10 2e 20 20 54 68 65 20 70 4e 65 78 74 20 66 69 65  .  The pNext fie
1cf20 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  ld points to the
1cf30 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20  .** NameContext 
1cf40 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20 71 75  in the parent qu
1cf50 65 72 79 2e 20 20 54 68 75 73 20 74 68 65 20 70  ery.  Thus the p
1cf60 72 6f 63 65 73 73 20 6f 66 20 73 63 61 6e 6e 69  rocess of scanni
1cf70 6e 67 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f  ng the.** NameCo
1cf80 6e 74 65 78 74 20 6c 69 73 74 20 63 6f 72 72 65  ntext list corre
1cf90 73 70 6f 6e 64 73 20 74 6f 20 73 65 61 72 63 68  sponds to search
1cfa0 69 6e 67 20 74 68 72 6f 75 67 68 20 73 75 63 63  ing through succ
1cfb0 65 73 73 69 76 65 6c 79 20 6f 75 74 65 72 0a 2a  essively outer.*
1cfc0 2a 20 73 75 62 71 75 65 72 69 65 73 20 6c 6f 6f  * subqueries loo
1cfd0 6b 69 6e 67 20 66 6f 72 20 61 20 6d 61 74 63 68  king for a match
1cfe0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4e 61 6d 65  ..*/.struct Name
1cff0 43 6f 6e 74 65 78 74 20 7b 0a 20 20 50 61 72 73  Context {.  Pars
1d000 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20  e *pParse;      
1d010 20 2f 2a 20 54 68 65 20 70 61 72 73 65 72 20 2a   /* The parser *
1d020 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72  /.  SrcList *pSr
1d030 63 4c 69 73 74 3b 20 20 20 2f 2a 20 4f 6e 65 20  cList;   /* One 
1d040 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65 73 20 75  or more tables u
1d050 73 65 64 20 74 6f 20 72 65 73 6f 6c 76 65 20 6e  sed to resolve n
1d060 61 6d 65 73 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20  ames */.  union 
1d070 7b 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a  {.    ExprList *
1d080 70 45 4c 69 73 74 3b 20 20 20 20 2f 2a 20 4f 70  pEList;    /* Op
1d090 74 69 6f 6e 61 6c 20 6c 69 73 74 20 6f 66 20 72  tional list of r
1d0a0 65 73 75 6c 74 2d 73 65 74 20 63 6f 6c 75 6d 6e  esult-set column
1d0b0 73 20 2a 2f 0a 20 20 20 20 41 67 67 49 6e 66 6f  s */.    AggInfo
1d0c0 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20 2f 2a   *pAggInfo;   /*
1d0d0 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   Information abo
1d0e0 75 74 20 61 67 67 72 65 67 61 74 65 73 20 61 74  ut aggregates at
1d0f0 20 74 68 69 73 20 6c 65 76 65 6c 20 2a 2f 0a 20   this level */. 
1d100 20 20 20 55 70 73 65 72 74 20 2a 70 55 70 73 65     Upsert *pUpse
1d110 72 74 3b 20 20 20 20 20 2f 2a 20 4f 4e 20 43 4f  rt;     /* ON CO
1d120 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 69 6e  NFLICT clause in
1d130 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 61  formation from a
1d140 6e 20 75 70 73 65 72 74 20 2a 2f 0a 20 20 7d 20  n upsert */.  } 
1d150 75 4e 43 3b 0a 20 20 4e 61 6d 65 43 6f 6e 74 65  uNC;.  NameConte
1d160 78 74 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e  xt *pNext;  /* N
1d170 65 78 74 20 6f 75 74 65 72 20 6e 61 6d 65 20 63  ext outer name c
1d180 6f 6e 74 65 78 74 2e 20 20 4e 55 4c 4c 20 66 6f  ontext.  NULL fo
1d190 72 20 6f 75 74 65 72 6d 6f 73 74 20 2a 2f 0a 20  r outermost */. 
1d1a0 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20   int nRef;      
1d1b0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1d1c0 6f 66 20 6e 61 6d 65 73 20 72 65 73 6f 6c 76 65  of names resolve
1d1d0 64 20 62 79 20 74 68 69 73 20 63 6f 6e 74 65 78  d by this contex
1d1e0 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b  t */.  int nErr;
1d1f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1d200 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20  umber of errors 
1d210 65 6e 63 6f 75 6e 74 65 72 65 64 20 77 68 69 6c  encountered whil
1d220 65 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65  e resolving name
1d230 73 20 2a 2f 0a 20 20 75 31 36 20 6e 63 46 6c 61  s */.  u16 ncFla
1d240 67 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 5a  gs;         /* Z
1d250 65 72 6f 20 6f 72 20 6d 6f 72 65 20 4e 43 5f 2a  ero or more NC_*
1d260 20 66 6c 61 67 73 20 64 65 66 69 6e 65 64 20 62   flags defined b
1d270 65 6c 6f 77 20 2a 2f 0a 20 20 53 65 6c 65 63 74  elow */.  Select
1d280 20 2a 70 57 69 6e 53 65 6c 65 63 74 3b 20 20 2f   *pWinSelect;  /
1d290 2a 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  * SELECT stateme
1d2a0 6e 74 20 66 6f 72 20 61 6e 79 20 77 69 6e 64 6f  nt for any windo
1d2b0 77 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 7d  w functions */.}
1d2c0 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64  ;../*.** Allowed
1d2d0 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20   values for the 
1d2e0 4e 61 6d 65 43 6f 6e 74 65 78 74 2c 20 6e 63 46  NameContext, ncF
1d2f0 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a  lags field..**.*
1d300 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69  * Value constrai
1d310 6e 74 73 20 28 61 6c 6c 20 63 68 65 63 6b 65 64  nts (all checked
1d320 20 76 69 61 20 61 73 73 65 72 74 28 29 29 3a 0a   via assert()):.
1d330 2a 2a 20 20 20 20 4e 43 5f 48 61 73 41 67 67 20  **    NC_HasAgg 
1d340 20 20 20 3d 3d 20 53 46 5f 48 61 73 41 67 67 20     == SF_HasAgg 
1d350 20 20 20 3d 3d 20 45 50 5f 41 67 67 0a 2a 2a 20     == EP_Agg.** 
1d360 20 20 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20     NC_MinMaxAgg 
1d370 3d 3d 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20  == SF_MinMaxAgg 
1d380 3d 3d 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d  == SQLITE_FUNC_M
1d390 49 4e 4d 41 58 0a 2a 2a 20 20 20 20 4e 43 5f 48  INMAX.**    NC_H
1d3a0 61 73 57 69 6e 20 20 20 20 3d 3d 20 45 50 5f 57  asWin    == EP_W
1d3b0 69 6e 0a 2a 2a 0a 2a 2f 0a 23 64 65 66 69 6e 65  in.**.*/.#define
1d3c0 20 4e 43 5f 41 6c 6c 6f 77 41 67 67 20 20 30 78   NC_AllowAgg  0x
1d3d0 30 30 30 31 20 20 2f 2a 20 41 67 67 72 65 67 61  0001  /* Aggrega
1d3e0 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65  te functions are
1d3f0 20 61 6c 6c 6f 77 65 64 20 68 65 72 65 20 2a 2f   allowed here */
1d400 0a 23 64 65 66 69 6e 65 20 4e 43 5f 50 61 72 74  .#define NC_Part
1d410 49 64 78 20 20 20 30 78 30 30 30 32 20 20 2f 2a  Idx   0x0002  /*
1d420 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76 69   True if resolvi
1d430 6e 67 20 61 20 70 61 72 74 69 61 6c 20 69 6e 64  ng a partial ind
1d440 65 78 20 57 48 45 52 45 20 2a 2f 0a 23 64 65 66  ex WHERE */.#def
1d450 69 6e 65 20 4e 43 5f 49 73 43 68 65 63 6b 20 20  ine NC_IsCheck  
1d460 20 30 78 30 30 30 34 20 20 2f 2a 20 54 72 75 65   0x0004  /* True
1d470 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61   if resolving na
1d480 6d 65 73 20 69 6e 20 61 20 43 48 45 43 4b 20 63  mes in a CHECK c
1d490 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65  onstraint */.#de
1d4a0 66 69 6e 65 20 4e 43 5f 49 6e 41 67 67 46 75 6e  fine NC_InAggFun
1d4b0 63 20 30 78 30 30 30 38 20 20 2f 2a 20 54 72 75  c 0x0008  /* Tru
1d4c0 65 20 69 66 20 61 6e 61 6c 79 7a 69 6e 67 20 61  e if analyzing a
1d4d0 72 67 75 6d 65 6e 74 73 20 74 6f 20 61 6e 20 61  rguments to an a
1d4e0 67 67 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69  gg func */.#defi
1d4f0 6e 65 20 4e 43 5f 48 61 73 41 67 67 20 20 20 20  ne NC_HasAgg    
1d500 30 78 30 30 31 30 20 20 2f 2a 20 4f 6e 65 20 6f  0x0010  /* One o
1d510 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65  r more aggregate
1d520 20 66 75 6e 63 74 69 6f 6e 73 20 73 65 65 6e 20   functions seen 
1d530 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 64  */.#define NC_Id
1d540 78 45 78 70 72 20 20 20 30 78 30 30 32 30 20 20  xExpr   0x0020  
1d550 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c  /* True if resol
1d560 76 69 6e 67 20 63 6f 6c 75 6d 6e 73 20 6f 66 20  ving columns of 
1d570 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a  CREATE INDEX */.
1d580 23 64 65 66 69 6e 65 20 4e 43 5f 56 61 72 53 65  #define NC_VarSe
1d590 6c 65 63 74 20 30 78 30 30 34 30 20 20 2f 2a 20  lect 0x0040  /* 
1d5a0 41 20 63 6f 72 72 65 6c 61 74 65 64 20 73 75 62  A correlated sub
1d5b0 71 75 65 72 79 20 68 61 73 20 62 65 65 6e 20 73  query has been s
1d5c0 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  een */.#define N
1d5d0 43 5f 55 45 4c 69 73 74 20 20 20 20 30 78 30 30  C_UEList    0x00
1d5e0 38 30 20 20 2f 2a 20 54 72 75 65 20 69 66 20 75  80  /* True if u
1d5f0 4e 43 2e 70 45 4c 69 73 74 20 69 73 20 75 73 65  NC.pEList is use
1d600 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  d */.#define NC_
1d610 55 41 67 67 49 6e 66 6f 20 20 30 78 30 31 30 30  UAggInfo  0x0100
1d620 20 20 2f 2a 20 54 72 75 65 20 69 66 20 75 4e 43    /* True if uNC
1d630 2e 70 41 67 67 49 6e 66 6f 20 69 73 20 75 73 65  .pAggInfo is use
1d640 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  d */.#define NC_
1d650 55 55 70 73 65 72 74 20 20 20 30 78 30 32 30 30  UUpsert   0x0200
1d660 20 20 2f 2a 20 54 72 75 65 20 69 66 20 75 4e 43    /* True if uNC
1d670 2e 70 55 70 73 65 72 74 20 69 73 20 75 73 65 64  .pUpsert is used
1d680 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 4d   */.#define NC_M
1d690 69 6e 4d 61 78 41 67 67 20 30 78 31 30 30 30 20  inMaxAgg 0x1000 
1d6a0 20 2f 2a 20 6d 69 6e 2f 6d 61 78 20 61 67 67 72   /* min/max aggr
1d6b0 65 67 61 74 65 73 20 73 65 65 6e 2e 20 20 53 65  egates seen.  Se
1d6c0 65 20 6e 6f 74 65 20 61 62 6f 76 65 20 2a 2f 0a  e note above */.
1d6d0 23 64 65 66 69 6e 65 20 4e 43 5f 43 6f 6d 70 6c  #define NC_Compl
1d6e0 65 78 20 20 20 30 78 32 30 30 30 20 20 2f 2a 20  ex   0x2000  /* 
1d6f0 54 72 75 65 20 69 66 20 61 20 66 75 6e 63 74 69  True if a functi
1d700 6f 6e 20 6f 72 20 73 75 62 71 75 65 72 79 20 73  on or subquery s
1d710 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  een */.#define N
1d720 43 5f 41 6c 6c 6f 77 57 69 6e 20 20 30 78 34 30  C_AllowWin  0x40
1d730 30 30 20 20 2f 2a 20 57 69 6e 64 6f 77 20 66 75  00  /* Window fu
1d740 6e 63 74 69 6f 6e 73 20 61 72 65 20 61 6c 6c 6f  nctions are allo
1d750 77 65 64 20 68 65 72 65 20 2a 2f 0a 23 64 65 66  wed here */.#def
1d760 69 6e 65 20 4e 43 5f 48 61 73 57 69 6e 20 20 20  ine NC_HasWin   
1d770 20 30 78 38 30 30 30 20 20 2f 2a 20 4f 6e 65 20   0x8000  /* One 
1d780 6f 72 20 6d 6f 72 65 20 77 69 6e 64 6f 77 20 66  or more window f
1d790 75 6e 63 74 69 6f 6e 73 20 73 65 65 6e 20 2a 2f  unctions seen */
1d7a0 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
1d7b0 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
1d7c0 77 69 6e 67 20 6f 62 6a 65 63 74 20 64 65 73 63  wing object desc
1d7d0 72 69 62 65 73 20 61 20 73 69 6e 67 6c 65 20 4f  ribes a single O
1d7e0 4e 20 43 4f 4e 46 4c 49 43 54 0a 2a 2a 20 63 6c  N CONFLICT.** cl
1d7f0 61 75 73 65 20 69 6e 20 61 6e 20 75 70 73 65 72  ause in an upser
1d800 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 55 70  t..**.** The pUp
1d810 73 65 72 74 54 61 72 67 65 74 20 66 69 65 6c 64  sertTarget field
1d820 20 69 73 20 6f 6e 6c 79 20 73 65 74 20 69 66 20   is only set if 
1d830 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  the ON CONFLICT 
1d840 63 6c 61 75 73 65 20 69 6e 63 6c 75 64 65 73 0a  clause includes.
1d850 2a 2a 20 63 6f 6e 66 6c 69 63 74 2d 74 61 72 67  ** conflict-targ
1d860 65 74 20 63 6c 61 75 73 65 2e 20 20 28 49 6e 20  et clause.  (In 
1d870 22 4f 4e 20 43 4f 4e 46 4c 49 43 54 28 61 2c 62  "ON CONFLICT(a,b
1d880 29 22 20 74 68 65 20 22 28 61 2c 62 29 22 20 69  )" the "(a,b)" i
1d890 73 20 74 68 65 0a 2a 2a 20 63 6f 6e 66 6c 69 63  s the.** conflic
1d8a0 74 2d 74 61 72 67 65 74 20 63 6c 61 75 73 65 2e  t-target clause.
1d8b0 29 20 20 54 68 65 20 70 55 70 73 65 72 74 54 61  )  The pUpsertTa
1d8c0 72 67 65 74 57 68 65 72 65 20 69 73 20 74 68 65  rgetWhere is the
1d8d0 20 6f 70 74 69 6f 6e 61 6c 0a 2a 2a 20 57 48 45   optional.** WHE
1d8e0 52 45 20 63 6c 61 75 73 65 20 75 73 65 64 20 74  RE clause used t
1d8f0 6f 20 69 64 65 6e 74 69 66 79 20 70 61 72 74 69  o identify parti
1d900 61 6c 20 75 6e 69 71 75 65 20 69 6e 64 65 78 65  al unique indexe
1d910 73 2e 0a 2a 2a 0a 2a 2a 20 70 55 70 73 65 72 74  s..**.** pUpsert
1d920 53 65 74 20 69 73 20 74 68 65 20 6c 69 73 74 20  Set is the list 
1d930 6f 66 20 63 6f 6c 75 6d 6e 3d 65 78 70 72 20 74  of column=expr t
1d940 65 72 6d 73 20 6f 66 20 74 68 65 20 55 50 44 41  erms of the UPDA
1d950 54 45 20 73 74 61 74 65 6d 65 6e 74 2e 20 0a 2a  TE statement. .*
1d960 2a 20 54 68 65 20 70 55 70 73 65 72 74 53 65 74  * The pUpsertSet
1d970 20 66 69 65 6c 64 20 69 73 20 4e 55 4c 4c 20 66   field is NULL f
1d980 6f 72 20 61 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  or a ON CONFLICT
1d990 20 44 4f 20 4e 4f 54 48 49 4e 47 2e 20 20 54 68   DO NOTHING.  Th
1d9a0 65 0a 2a 2a 20 70 55 70 73 65 72 74 57 68 65 72  e.** pUpsertWher
1d9b0 65 20 69 73 20 74 68 65 20 57 48 45 52 45 20 63  e is the WHERE c
1d9c0 6c 61 75 73 65 20 66 6f 72 20 74 68 65 20 55 50  lause for the UP
1d9d0 44 41 54 45 20 61 6e 64 20 69 73 20 4e 55 4c 4c  DATE and is NULL
1d9e0 20 69 66 20 74 68 65 0a 2a 2a 20 57 48 45 52 45   if the.** WHERE
1d9f0 20 63 6c 61 75 73 65 20 69 73 20 6f 6d 69 74 74   clause is omitt
1da00 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 55 70  ed..*/.struct Up
1da10 73 65 72 74 20 7b 0a 20 20 45 78 70 72 4c 69 73  sert {.  ExprLis
1da20 74 20 2a 70 55 70 73 65 72 74 54 61 72 67 65 74  t *pUpsertTarget
1da30 3b 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 64  ;  /* Optional d
1da40 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 20 63 6f  escription of co
1da50 6e 66 6c 69 63 74 69 6e 67 20 69 6e 64 65 78 20  nflicting index 
1da60 2a 2f 0a 20 20 45 78 70 72 20 2a 70 55 70 73 65  */.  Expr *pUpse
1da70 72 74 54 61 72 67 65 74 57 68 65 72 65 3b 20 2f  rtTargetWhere; /
1da80 2a 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 66  * WHERE clause f
1da90 6f 72 20 70 61 72 74 69 61 6c 20 69 6e 64 65 78  or partial index
1daa0 20 74 61 72 67 65 74 73 20 2a 2f 0a 20 20 45 78   targets */.  Ex
1dab0 70 72 4c 69 73 74 20 2a 70 55 70 73 65 72 74 53  prList *pUpsertS
1dac0 65 74 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 53  et;     /* The S
1dad0 45 54 20 63 6c 61 75 73 65 20 66 72 6f 6d 20 61  ET clause from a
1dae0 6e 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 55 50  n ON CONFLICT UP
1daf0 44 41 54 45 20 2a 2f 0a 20 20 45 78 70 72 20 2a  DATE */.  Expr *
1db00 70 55 70 73 65 72 74 57 68 65 72 65 3b 20 20 20  pUpsertWhere;   
1db10 20 20 20 20 2f 2a 20 57 48 45 52 45 20 63 6c 61      /* WHERE cla
1db20 75 73 65 20 66 6f 72 20 74 68 65 20 4f 4e 20 43  use for the ON C
1db30 4f 4e 46 4c 49 43 54 20 55 50 44 41 54 45 20 2a  ONFLICT UPDATE *
1db40 2f 0a 20 20 2f 2a 20 54 68 65 20 66 69 65 6c 64  /.  /* The field
1db50 73 20 61 62 6f 76 65 20 63 6f 6d 70 72 69 73 65  s above comprise
1db60 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65 20   the parse tree 
1db70 66 6f 72 20 74 68 65 20 75 70 73 65 72 74 20 63  for the upsert c
1db80 6c 61 75 73 65 2e 0a 20 20 2a 2a 20 54 68 65 20  lause..  ** The 
1db90 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 61 72 65  fields below are
1dba0 20 75 73 65 64 20 74 6f 20 74 72 61 6e 73 66 65   used to transfe
1dbb0 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72  r information fr
1dbc0 6f 6d 20 74 68 65 20 49 4e 53 45 52 54 0a 20 20  om the INSERT.  
1dbd0 2a 2a 20 70 72 6f 63 65 73 73 69 6e 67 20 64 6f  ** processing do
1dbe0 77 6e 20 69 6e 74 6f 20 74 68 65 20 55 50 44 41  wn into the UPDA
1dbf0 54 45 20 70 72 6f 63 65 73 73 69 6e 67 20 77 68  TE processing wh
1dc00 69 6c 65 20 67 65 6e 65 72 61 74 69 6e 67 20 63  ile generating c
1dc10 6f 64 65 2e 0a 20 20 2a 2a 20 55 70 73 65 72 74  ode..  ** Upsert
1dc20 20 6f 77 6e 73 20 74 68 65 20 6d 65 6d 6f 72 79   owns the memory
1dc30 20 61 6c 6c 6f 63 61 74 65 64 20 61 62 6f 76 65   allocated above
1dc40 2c 20 62 75 74 20 6e 6f 74 20 74 68 65 20 6d 65  , but not the me
1dc50 6d 6f 72 79 20 62 65 6c 6f 77 2e 20 2a 2f 0a 20  mory below. */. 
1dc60 20 49 6e 64 65 78 20 2a 70 55 70 73 65 72 74 49   Index *pUpsertI
1dc70 64 78 3b 20 20 20 20 20 20 20 20 2f 2a 20 43 6f  dx;        /* Co
1dc80 6e 73 74 72 61 69 6e 74 20 74 68 61 74 20 70 55  nstraint that pU
1dc90 70 73 65 72 74 54 61 72 67 65 74 20 69 64 65 6e  psertTarget iden
1dca0 74 69 66 69 65 73 20 2a 2f 0a 20 20 53 72 63 4c  tifies */.  SrcL
1dcb0 69 73 74 20 2a 70 55 70 73 65 72 74 53 72 63 3b  ist *pUpsertSrc;
1dcc0 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 74        /* Table t
1dcd0 6f 20 62 65 20 75 70 64 61 74 65 64 20 2a 2f 0a  o be updated */.
1dce0 20 20 69 6e 74 20 72 65 67 44 61 74 61 3b 20 20    int regData;  
1dcf0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46              /* F
1dd00 69 72 73 74 20 72 65 67 69 73 74 65 72 20 68 6f  irst register ho
1dd10 6c 64 69 6e 67 20 61 72 72 61 79 20 6f 66 20 56  lding array of V
1dd20 41 4c 55 45 53 20 2a 2f 0a 20 20 69 6e 74 20 69  ALUES */.  int i
1dd30 44 61 74 61 43 75 72 3b 20 20 20 20 20 20 20 20  DataCur;        
1dd40 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66       /* Index of
1dd50 20 74 68 65 20 64 61 74 61 20 63 75 72 73 6f 72   the data cursor
1dd60 20 2a 2f 0a 20 20 69 6e 74 20 69 49 64 78 43 75   */.  int iIdxCu
1dd70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
1dd80 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74 68 65 20  /* Index of the 
1dd90 66 69 72 73 74 20 69 6e 64 65 78 20 63 75 72 73  first index curs
1dda0 6f 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  or */.};../*.** 
1ddb0 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
1ddc0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
1ddd0 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20  ucture contains 
1dde0 61 6c 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a  all information.
1ddf0 2a 2a 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e  ** needed to gen
1de00 65 72 61 74 65 20 63 6f 64 65 20 66 6f 72 20 61  erate code for a
1de10 20 73 69 6e 67 6c 65 20 53 45 4c 45 43 54 20 73   single SELECT s
1de20 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20  tatement..**.** 
1de30 53 65 65 20 74 68 65 20 68 65 61 64 65 72 20 63  See the header c
1de40 6f 6d 6d 65 6e 74 20 6f 6e 20 74 68 65 20 63 6f  omment on the co
1de50 6d 70 75 74 65 4c 69 6d 69 74 52 65 67 69 73 74  mputeLimitRegist
1de60 65 72 73 28 29 20 72 6f 75 74 69 6e 65 20 66 6f  ers() routine fo
1de70 72 20 61 0a 2a 2a 20 64 65 74 61 69 6c 65 64 20  r a.** detailed 
1de80 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 20 74  description of t
1de90 68 65 20 6d 65 61 6e 69 6e 67 20 6f 66 20 74 68  he meaning of th
1dea0 65 20 69 4c 69 6d 69 74 20 61 6e 64 20 69 4f 66  e iLimit and iOf
1deb0 66 73 65 74 20 66 69 65 6c 64 73 2e 0a 2a 2a 0a  fset fields..**.
1dec0 2a 2a 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b  ** addrOpenEphm[
1ded0 5d 20 65 6e 74 72 69 65 73 20 63 6f 6e 74 61 69  ] entries contai
1dee0 6e 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66  n the address of
1def0 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61   OP_OpenEphemera
1df00 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 20 54 68  l opcodes..** Th
1df10 65 73 65 20 61 64 64 72 65 73 73 65 73 20 6d 75  ese addresses mu
1df20 73 74 20 62 65 20 73 74 6f 72 65 64 20 73 6f 20  st be stored so 
1df30 74 68 61 74 20 77 65 20 63 61 6e 20 67 6f 20 62  that we can go b
1df40 61 63 6b 20 61 6e 64 20 66 69 6c 6c 20 69 6e 0a  ack and fill in.
1df50 2a 2a 20 74 68 65 20 50 34 5f 4b 45 59 49 4e 46  ** the P4_KEYINF
1df60 4f 20 61 6e 64 20 50 32 20 70 61 72 61 6d 65 74  O and P2 paramet
1df70 65 72 73 20 6c 61 74 65 72 2e 20 20 4e 65 69 74  ers later.  Neit
1df80 68 65 72 20 74 68 65 20 4b 65 79 49 6e 66 6f 20  her the KeyInfo 
1df90 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65  nor.** the numbe
1dfa0 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
1dfb0 50 32 20 63 61 6e 20 62 65 20 63 6f 6d 70 75 74  P2 can be comput
1dfc0 65 64 20 61 74 20 74 68 65 20 73 61 6d 65 20 74  ed at the same t
1dfd0 69 6d 65 0a 2a 2a 20 61 73 20 74 68 65 20 4f 50  ime.** as the OP
1dfe0 5f 4f 70 65 6e 45 70 68 6d 20 69 6e 73 74 72 75  _OpenEphm instru
1dff0 63 74 69 6f 6e 20 69 73 20 63 6f 64 65 64 20 62  ction is coded b
1e000 65 63 61 75 73 65 20 6e 6f 74 0a 2a 2a 20 65 6e  ecause not.** en
1e010 6f 75 67 68 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ough information
1e020 20 61 62 6f 75 74 20 74 68 65 20 63 6f 6d 70 6f   about the compo
1e030 75 6e 64 20 71 75 65 72 79 20 69 73 20 6b 6e 6f  und query is kno
1e040 77 6e 20 61 74 20 74 68 61 74 20 70 6f 69 6e 74  wn at that point
1e050 2e 0a 2a 2a 20 54 68 65 20 4b 65 79 49 6e 66 6f  ..** The KeyInfo
1e060 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 54 72 61   for addrOpenTra
1e070 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d 20 63 6f 6e  n[0] and [1] con
1e080 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 20  tains collating 
1e090 73 65 71 75 65 6e 63 65 73 0a 2a 2a 20 66 6f 72  sequences.** for
1e0a0 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e   the result set.
1e0b0 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f    The KeyInfo fo
1e0c0 72 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32  r addrOpenEphm[2
1e0d0 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61  ] contains colla
1e0e0 74 69 6e 67 0a 2a 2a 20 73 65 71 75 65 6e 63 65  ting.** sequence
1e0f0 73 20 66 6f 72 20 74 68 65 20 4f 52 44 45 52 20  s for the ORDER 
1e100 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74  BY clause..*/.st
1e110 72 75 63 74 20 53 65 6c 65 63 74 20 7b 0a 20 20  ruct Select {.  
1e120 45 78 70 72 4c 69 73 74 20 2a 70 45 4c 69 73 74  ExprList *pEList
1e130 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 66 69  ;      /* The fi
1e140 65 6c 64 73 20 6f 66 20 74 68 65 20 72 65 73 75  elds of the resu
1e150 6c 74 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20  lt */.  u8 op;  
1e160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1e170 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b 5f 55 4e 49  * One of: TK_UNI
1e180 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b 5f 49 4e 54  ON TK_ALL TK_INT
1e190 45 52 53 45 43 54 20 54 4b 5f 45 58 43 45 50 54  ERSECT TK_EXCEPT
1e1a0 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 6e 53 65   */.  LogEst nSe
1e1b0 6c 65 63 74 52 6f 77 3b 20 20 20 20 20 2f 2a 20  lectRow;     /* 
1e1c0 45 73 74 69 6d 61 74 65 64 20 6e 75 6d 62 65 72  Estimated number
1e1d0 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20   of result rows 
1e1e0 2a 2f 0a 20 20 75 33 32 20 73 65 6c 46 6c 61 67  */.  u32 selFlag
1e1f0 73 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56  s;          /* V
1e200 61 72 69 6f 75 73 20 53 46 5f 2a 20 76 61 6c 75  arious SF_* valu
1e210 65 73 20 2a 2f 0a 20 20 69 6e 74 20 69 4c 69 6d  es */.  int iLim
1e220 69 74 2c 20 69 4f 66 66 73 65 74 3b 20 20 20 2f  it, iOffset;   /
1e230 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69 73 74 65  * Memory registe
1e240 72 73 20 68 6f 6c 64 69 6e 67 20 4c 49 4d 49 54  rs holding LIMIT
1e250 20 26 20 4f 46 46 53 45 54 20 63 6f 75 6e 74 65   & OFFSET counte
1e260 72 73 20 2a 2f 0a 20 20 75 33 32 20 73 65 6c 49  rs */.  u32 selI
1e270 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  d;             /
1e280 2a 20 55 6e 69 71 75 65 20 69 64 65 6e 74 69 66  * Unique identif
1e290 69 65 72 20 6e 75 6d 62 65 72 20 66 6f 72 20 74  ier number for t
1e2a0 68 69 73 20 53 45 4c 45 43 54 20 2a 2f 0a 20 20  his SELECT */.  
1e2b0 69 6e 74 20 61 64 64 72 4f 70 65 6e 45 70 68 6d  int addrOpenEphm
1e2c0 5b 32 5d 3b 20 20 20 2f 2a 20 4f 50 5f 4f 70 65  [2];   /* OP_Ope
1e2d0 6e 45 70 68 65 6d 20 6f 70 63 6f 64 65 73 20 72  nEphem opcodes r
1e2e0 65 6c 61 74 65 64 20 74 6f 20 74 68 69 73 20 73  elated to this s
1e2f0 65 6c 65 63 74 20 2a 2f 0a 20 20 53 72 63 4c 69  elect */.  SrcLi
1e300 73 74 20 2a 70 53 72 63 3b 20 20 20 20 20 20 20  st *pSrc;       
1e310 20 20 2f 2a 20 54 68 65 20 46 52 4f 4d 20 63 6c    /* The FROM cl
1e320 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a  ause */.  Expr *
1e330 70 57 68 65 72 65 3b 20 20 20 20 20 20 20 20 20  pWhere;         
1e340 20 2f 2a 20 54 68 65 20 57 48 45 52 45 20 63 6c   /* The WHERE cl
1e350 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69  ause */.  ExprLi
1e360 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20  st *pGroupBy;   
1e370 20 2f 2a 20 54 68 65 20 47 52 4f 55 50 20 42 59   /* The GROUP BY
1e380 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70   clause */.  Exp
1e390 72 20 2a 70 48 61 76 69 6e 67 3b 20 20 20 20 20  r *pHaving;     
1e3a0 20 20 20 20 2f 2a 20 54 68 65 20 48 41 56 49 4e      /* The HAVIN
1e3b0 47 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78  G clause */.  Ex
1e3c0 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72 42 79  prList *pOrderBy
1e3d0 3b 20 20 20 20 2f 2a 20 54 68 65 20 4f 52 44 45  ;    /* The ORDE
1e3e0 52 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20  R BY clause */. 
1e3f0 20 53 65 6c 65 63 74 20 2a 70 50 72 69 6f 72 3b   Select *pPrior;
1e400 20 20 20 20 20 20 20 20 2f 2a 20 50 72 69 6f 72          /* Prior
1e410 20 73 65 6c 65 63 74 20 69 6e 20 61 20 63 6f 6d   select in a com
1e420 70 6f 75 6e 64 20 73 65 6c 65 63 74 20 73 74 61  pound select sta
1e430 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 53 65 6c 65  tement */.  Sele
1e440 63 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  ct *pNext;      
1e450 20 20 20 2f 2a 20 4e 65 78 74 20 73 65 6c 65 63     /* Next selec
1e460 74 20 74 6f 20 74 68 65 20 6c 65 66 74 20 69 6e  t to the left in
1e470 20 61 20 63 6f 6d 70 6f 75 6e 64 20 2a 2f 0a 20   a compound */. 
1e480 20 45 78 70 72 20 2a 70 4c 69 6d 69 74 3b 20 20   Expr *pLimit;  
1e490 20 20 20 20 20 20 20 20 2f 2a 20 4c 49 4d 49 54          /* LIMIT
1e4a0 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c   expression. NUL
1e4b0 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65 64  L means not used
1e4c0 2e 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69  . */.  With *pWi
1e4d0 74 68 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  th;           /*
1e4e0 20 57 49 54 48 20 63 6c 61 75 73 65 20 61 74 74   WITH clause att
1e4f0 61 63 68 65 64 20 74 6f 20 74 68 69 73 20 73 65  ached to this se
1e500 6c 65 63 74 2e 20 4f 72 20 4e 55 4c 4c 2e 20 2a  lect. Or NULL. *
1e510 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
1e520 5f 4f 4d 49 54 5f 57 49 4e 44 4f 57 46 55 4e 43  _OMIT_WINDOWFUNC
1e530 0a 20 20 57 69 6e 64 6f 77 20 2a 70 57 69 6e 3b  .  Window *pWin;
1e540 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73            /* Lis
1e550 74 20 6f 66 20 77 69 6e 64 6f 77 20 66 75 6e 63  t of window func
1e560 74 69 6f 6e 73 20 2a 2f 0a 20 20 57 69 6e 64 6f  tions */.  Windo
1e570 77 20 2a 70 57 69 6e 44 65 66 6e 3b 20 20 20 20  w *pWinDefn;    
1e580 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 6e 61 6d    /* List of nam
1e590 65 64 20 77 69 6e 64 6f 77 20 64 65 66 69 6e 69  ed window defini
1e5a0 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e 64 69 66 0a  tions */.#endif.
1e5b0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  };../*.** Allowe
1e5c0 64 20 76 61 6c 75 65 73 20 66 6f 72 20 53 65 6c  d values for Sel
1e5d0 65 63 74 2e 73 65 6c 46 6c 61 67 73 2e 20 20 54  ect.selFlags.  T
1e5e0 68 65 20 22 53 46 22 20 70 72 65 66 69 78 20 73  he "SF" prefix s
1e5f0 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 53 65  tands for.** "Se
1e600 6c 65 63 74 20 46 6c 61 67 22 2e 0a 2a 2a 0a 2a  lect Flag"..**.*
1e610 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69  * Value constrai
1e620 6e 74 73 20 28 61 6c 6c 20 63 68 65 63 6b 65 64  nts (all checked
1e630 20 76 69 61 20 61 73 73 65 72 74 28 29 29 0a 2a   via assert()).*
1e640 2a 20 20 20 20 20 53 46 5f 48 61 73 41 67 67 20  *     SF_HasAgg 
1e650 20 20 20 20 3d 3d 20 4e 43 5f 48 61 73 41 67 67      == NC_HasAgg
1e660 0a 2a 2a 20 20 20 20 20 53 46 5f 4d 69 6e 4d 61  .**     SF_MinMa
1e670 78 41 67 67 20 20 3d 3d 20 4e 43 5f 4d 69 6e 4d  xAgg  == NC_MinM
1e680 61 78 41 67 67 20 20 20 20 20 3d 3d 20 53 51 4c  axAgg     == SQL
1e690 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 0a  ITE_FUNC_MINMAX.
1e6a0 2a 2a 20 20 20 20 20 53 46 5f 46 69 78 65 64 4c  **     SF_FixedL
1e6b0 69 6d 69 74 20 3d 3d 20 57 48 45 52 45 5f 55 53  imit == WHERE_US
1e6c0 45 5f 4c 49 4d 49 54 0a 2a 2f 0a 23 64 65 66 69  E_LIMIT.*/.#defi
1e6d0 6e 65 20 53 46 5f 44 69 73 74 69 6e 63 74 20 20  ne SF_Distinct  
1e6e0 20 20 20 20 20 30 78 30 30 30 30 31 20 20 2f 2a       0x00001  /*
1e6f0 20 4f 75 74 70 75 74 20 73 68 6f 75 6c 64 20 62   Output should b
1e700 65 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a 23 64  e DISTINCT */.#d
1e710 65 66 69 6e 65 20 53 46 5f 41 6c 6c 20 20 20 20  efine SF_All    
1e720 20 20 20 20 20 20 20 20 30 78 30 30 30 30 32 20          0x00002 
1e730 20 2f 2a 20 49 6e 63 6c 75 64 65 73 20 74 68 65   /* Includes the
1e740 20 41 4c 4c 20 6b 65 79 77 6f 72 64 20 2a 2f 0a   ALL keyword */.
1e750 23 64 65 66 69 6e 65 20 53 46 5f 52 65 73 6f 6c  #define SF_Resol
1e760 76 65 64 20 20 20 20 20 20 20 30 78 30 30 30 30  ved       0x0000
1e770 34 20 20 2f 2a 20 49 64 65 6e 74 69 66 69 65 72  4  /* Identifier
1e780 73 20 68 61 76 65 20 62 65 65 6e 20 72 65 73 6f  s have been reso
1e790 6c 76 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  lved */.#define 
1e7a0 53 46 5f 41 67 67 72 65 67 61 74 65 20 20 20 20  SF_Aggregate    
1e7b0 20 20 30 78 30 30 30 30 38 20 20 2f 2a 20 43 6f    0x00008  /* Co
1e7c0 6e 74 61 69 6e 73 20 61 67 67 20 66 75 6e 63 74  ntains agg funct
1e7d0 69 6f 6e 73 20 6f 72 20 61 20 47 52 4f 55 50 20  ions or a GROUP 
1e7e0 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  BY */.#define SF
1e7f0 5f 48 61 73 41 67 67 20 20 20 20 20 20 20 20 20  _HasAgg         
1e800 30 78 30 30 30 31 30 20 20 2f 2a 20 43 6f 6e 74  0x00010  /* Cont
1e810 61 69 6e 73 20 61 67 67 72 65 67 61 74 65 20 66  ains aggregate f
1e820 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66  unctions */.#def
1e830 69 6e 65 20 53 46 5f 55 73 65 73 45 70 68 65 6d  ine SF_UsesEphem
1e840 65 72 61 6c 20 20 30 78 30 30 30 32 30 20 20 2f  eral  0x00020  /
1e850 2a 20 55 73 65 73 20 74 68 65 20 4f 70 65 6e 45  * Uses the OpenE
1e860 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65 20  phemeral opcode 
1e870 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 45 78  */.#define SF_Ex
1e880 70 61 6e 64 65 64 20 20 20 20 20 20 20 30 78 30  panded       0x0
1e890 30 30 34 30 20 20 2f 2a 20 73 71 6c 69 74 65 33  0040  /* sqlite3
1e8a0 53 65 6c 65 63 74 45 78 70 61 6e 64 28 29 20 63  SelectExpand() c
1e8b0 61 6c 6c 65 64 20 6f 6e 20 74 68 69 73 20 2a 2f  alled on this */
1e8c0 0a 23 64 65 66 69 6e 65 20 53 46 5f 48 61 73 54  .#define SF_HasT
1e8d0 79 70 65 49 6e 66 6f 20 20 20 20 30 78 30 30 30  ypeInfo    0x000
1e8e0 38 30 20 20 2f 2a 20 46 52 4f 4d 20 73 75 62 71  80  /* FROM subq
1e8f0 75 65 72 69 65 73 20 68 61 76 65 20 54 61 62 6c  ueries have Tabl
1e900 65 20 6d 65 74 61 64 61 74 61 20 2a 2f 0a 23 64  e metadata */.#d
1e910 65 66 69 6e 65 20 53 46 5f 43 6f 6d 70 6f 75 6e  efine SF_Compoun
1e920 64 20 20 20 20 20 20 20 30 78 30 30 31 30 30 20  d       0x00100 
1e930 20 2f 2a 20 50 61 72 74 20 6f 66 20 61 20 63 6f   /* Part of a co
1e940 6d 70 6f 75 6e 64 20 71 75 65 72 79 20 2a 2f 0a  mpound query */.
1e950 23 64 65 66 69 6e 65 20 53 46 5f 56 61 6c 75 65  #define SF_Value
1e960 73 20 20 20 20 20 20 20 20 20 30 78 30 30 32 30  s         0x0020
1e970 30 20 20 2f 2a 20 53 79 6e 74 68 65 73 69 7a 65  0  /* Synthesize
1e980 64 20 66 72 6f 6d 20 56 41 4c 55 45 53 20 63 6c  d from VALUES cl
1e990 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ause */.#define 
1e9a0 53 46 5f 4d 75 6c 74 69 56 61 6c 75 65 20 20 20  SF_MultiValue   
1e9b0 20 20 30 78 30 30 34 30 30 20 20 2f 2a 20 53 69    0x00400  /* Si
1e9c0 6e 67 6c 65 20 56 41 4c 55 45 53 20 74 65 72 6d  ngle VALUES term
1e9d0 20 77 69 74 68 20 6d 75 6c 74 69 70 6c 65 20 72   with multiple r
1e9e0 6f 77 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ows */.#define S
1e9f0 46 5f 4e 65 73 74 65 64 46 72 6f 6d 20 20 20 20  F_NestedFrom    
1ea00 20 30 78 30 30 38 30 30 20 20 2f 2a 20 50 61 72   0x00800  /* Par
1ea10 74 20 6f 66 20 61 20 70 61 72 65 6e 74 68 65 73  t of a parenthes
1ea20 69 7a 65 64 20 46 52 4f 4d 20 63 6c 61 75 73 65  ized FROM clause
1ea30 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d   */.#define SF_M
1ea40 69 6e 4d 61 78 41 67 67 20 20 20 20 20 20 30 78  inMaxAgg      0x
1ea50 30 31 30 30 30 20 20 2f 2a 20 41 67 67 72 65 67  01000  /* Aggreg
1ea60 61 74 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 6d  ate containing m
1ea70 69 6e 28 29 20 6f 72 20 6d 61 78 28 29 20 2a 2f  in() or max() */
1ea80 0a 23 64 65 66 69 6e 65 20 53 46 5f 52 65 63 75  .#define SF_Recu
1ea90 72 73 69 76 65 20 20 20 20 20 20 30 78 30 32 30  rsive      0x020
1eaa0 30 30 20 20 2f 2a 20 54 68 65 20 72 65 63 75 72  00  /* The recur
1eab0 73 69 76 65 20 70 61 72 74 20 6f 66 20 61 20 72  sive part of a r
1eac0 65 63 75 72 73 69 76 65 20 43 54 45 20 2a 2f 0a  ecursive CTE */.
1ead0 23 64 65 66 69 6e 65 20 53 46 5f 46 69 78 65 64  #define SF_Fixed
1eae0 4c 69 6d 69 74 20 20 20 20 20 30 78 30 34 30 30  Limit     0x0400
1eaf0 30 20 20 2f 2a 20 6e 53 65 6c 65 63 74 52 6f 77  0  /* nSelectRow
1eb00 20 73 65 74 20 62 79 20 61 20 63 6f 6e 73 74 61   set by a consta
1eb10 6e 74 20 4c 49 4d 49 54 20 2a 2f 0a 23 64 65 66  nt LIMIT */.#def
1eb20 69 6e 65 20 53 46 5f 4d 61 79 62 65 43 6f 6e 76  ine SF_MaybeConv
1eb30 65 72 74 20 20 20 30 78 30 38 30 30 30 20 20 2f  ert   0x08000  /
1eb40 2a 20 4e 65 65 64 20 63 6f 6e 76 65 72 74 43 6f  * Need convertCo
1eb50 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75  mpoundSelectToSu
1eb60 62 71 75 65 72 79 28 29 20 2a 2f 0a 23 64 65 66  bquery() */.#def
1eb70 69 6e 65 20 53 46 5f 43 6f 6e 76 65 72 74 65 64  ine SF_Converted
1eb80 20 20 20 20 20 20 30 78 31 30 30 30 30 20 20 2f        0x10000  /
1eb90 2a 20 42 79 20 63 6f 6e 76 65 72 74 43 6f 6d 70  * By convertComp
1eba0 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71  oundSelectToSubq
1ebb0 75 65 72 79 28 29 20 2a 2f 0a 23 64 65 66 69 6e  uery() */.#defin
1ebc0 65 20 53 46 5f 49 6e 63 6c 75 64 65 48 69 64 64  e SF_IncludeHidd
1ebd0 65 6e 20 20 30 78 32 30 30 30 30 20 20 2f 2a 20  en  0x20000  /* 
1ebe0 49 6e 63 6c 75 64 65 20 68 69 64 64 65 6e 20 63  Include hidden c
1ebf0 6f 6c 75 6d 6e 73 20 69 6e 20 6f 75 74 70 75 74  olumns in output
1ec00 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 43   */.#define SF_C
1ec10 6f 6d 70 6c 65 78 52 65 73 75 6c 74 20 20 30 78  omplexResult  0x
1ec20 34 30 30 30 30 20 20 2f 2a 20 52 65 73 75 6c 74  40000  /* Result
1ec30 20 63 6f 6e 74 61 69 6e 73 20 73 75 62 71 75 65   contains subque
1ec40 72 79 20 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a  ry or function *
1ec50 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 65 73  /../*.** The res
1ec60 75 6c 74 73 20 6f 66 20 61 20 53 45 4c 45 43 54  ults of a SELECT
1ec70 20 63 61 6e 20 62 65 20 64 69 73 74 72 69 62 75   can be distribu
1ec80 74 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20 77  ted in several w
1ec90 61 79 73 2c 20 61 73 20 64 65 66 69 6e 65 64 0a  ays, as defined.
1eca0 2a 2a 20 62 79 20 6f 6e 65 20 6f 66 20 74 68 65  ** by one of the
1ecb0 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f   following macro
1ecc0 73 2e 20 20 54 68 65 20 22 53 52 54 22 20 70 72  s.  The "SRT" pr
1ecd0 65 66 69 78 20 6d 65 61 6e 73 20 22 53 45 4c 45  efix means "SELE
1ece0 43 54 20 52 65 73 75 6c 74 0a 2a 2a 20 54 79 70  CT Result.** Typ
1ecf0 65 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  e"..**.**     SR
1ed00 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20 53 74  T_Union       St
1ed10 6f 72 65 20 72 65 73 75 6c 74 73 20 61 73 20 61  ore results as a
1ed20 20 6b 65 79 20 69 6e 20 61 20 74 65 6d 70 6f 72   key in a tempor
1ed30 61 72 79 20 69 6e 64 65 78 0a 2a 2a 20 20 20 20  ary index.**    
1ed40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed50 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 70   identified by p
1ed60 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a  Dest->iSDParm..*
1ed70 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 78 63  *.**     SRT_Exc
1ed80 65 70 74 20 20 20 20 20 20 52 65 6d 6f 76 65 20  ept      Remove 
1ed90 72 65 73 75 6c 74 73 20 66 72 6f 6d 20 74 68 65  results from the
1eda0 20 74 65 6d 70 6f 72 61 72 79 20 69 6e 64 65 78   temporary index
1edb0 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e   pDest->iSDParm.
1edc0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45  .**.**     SRT_E
1edd0 78 69 73 74 73 20 20 20 20 20 20 53 74 6f 72 65  xists      Store
1ede0 20 61 20 31 20 69 6e 20 6d 65 6d 6f 72 79 20 63   a 1 in memory c
1edf0 65 6c 6c 20 70 44 65 73 74 2d 3e 69 53 44 50 61  ell pDest->iSDPa
1ee00 72 6d 20 69 66 20 74 68 65 20 72 65 73 75 6c 74  rm if the result
1ee10 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1ee20 20 20 20 20 20 20 20 20 73 65 74 20 69 73 20 6e          set is n
1ee30 6f 74 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20  ot empty..**.** 
1ee40 20 20 20 20 53 52 54 5f 44 69 73 63 61 72 64 20      SRT_Discard 
1ee50 20 20 20 20 54 68 72 6f 77 20 74 68 65 20 72 65      Throw the re
1ee60 73 75 6c 74 73 20 61 77 61 79 2e 20 20 54 68 69  sults away.  Thi
1ee70 73 20 69 73 20 75 73 65 64 20 62 79 20 53 45 4c  s is used by SEL
1ee80 45 43 54 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ECT.**          
1ee90 20 20 20 20 20 20 20 20 20 20 20 73 74 61 74 65             state
1eea0 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74 72 69  ments within tri
1eeb0 67 67 65 72 73 20 77 68 6f 73 65 20 6f 6e 6c 79  ggers whose only
1eec0 20 70 75 72 70 6f 73 65 20 69 73 0a 2a 2a 20 20   purpose is.**  
1eed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eee0 20 20 20 74 68 65 20 73 69 64 65 2d 65 66 66 65     the side-effe
1eef0 63 74 73 20 6f 66 20 66 75 6e 63 74 69 6f 6e 73  cts of functions
1ef00 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74  ..**.** All of t
1ef10 68 65 20 61 62 6f 76 65 20 61 72 65 20 66 72 65  he above are fre
1ef20 65 20 74 6f 20 69 67 6e 6f 72 65 20 74 68 65 69  e to ignore thei
1ef30 72 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  r ORDER BY claus
1ef40 65 2e 20 54 68 6f 73 65 20 74 68 61 74 0a 2a 2a  e. Those that.**
1ef50 20 66 6f 6c 6c 6f 77 20 6d 75 73 74 20 68 6f 6e   follow must hon
1ef60 6f 72 20 74 68 65 20 4f 52 44 45 52 20 42 59 20  or the ORDER BY 
1ef70 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20  clause..**.**   
1ef80 20 20 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20    SRT_Output    
1ef90 20 20 47 65 6e 65 72 61 74 65 20 61 20 72 6f 77    Generate a row
1efa0 20 6f 66 20 6f 75 74 70 75 74 20 28 75 73 69 6e   of output (usin
1efb0 67 20 74 68 65 20 4f 50 5f 52 65 73 75 6c 74 52  g the OP_ResultR
1efc0 6f 77 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  ow.**           
1efd0 20 20 20 20 20 20 20 20 20 20 6f 70 63 6f 64 65            opcode
1efe0 29 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20 69  ) for each row i
1eff0 6e 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74  n the result set
1f000 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
1f010 4d 65 6d 20 20 20 20 20 20 20 20 20 4f 6e 6c 79  Mem         Only
1f020 20 76 61 6c 69 64 20 69 66 20 74 68 65 20 72 65   valid if the re
1f030 73 75 6c 74 20 69 73 20 61 20 73 69 6e 67 6c 65  sult is a single
1f040 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 20 20 20 20   column..**     
1f050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f060 53 74 6f 72 65 20 74 68 65 20 66 69 72 73 74 20  Store the first 
1f070 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 66 69  column of the fi
1f080 72 73 74 20 72 65 73 75 6c 74 20 72 6f 77 0a 2a  rst result row.*
1f090 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1f0a0 20 20 20 20 20 20 69 6e 20 72 65 67 69 73 74 65        in registe
1f0b0 72 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  r pDest->iSDParm
1f0c0 20 74 68 65 6e 20 61 62 61 6e 64 6f 6e 20 74 68   then abandon th
1f0d0 65 20 72 65 73 74 0a 2a 2a 20 20 20 20 20 20 20  e rest.**       
1f0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 66                of
1f0f0 20 74 68 65 20 71 75 65 72 79 2e 20 20 54 68 69   the query.  Thi
1f100 73 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 69 6d  s destination im
1f110 70 6c 69 65 73 20 22 4c 49 4d 49 54 20 31 22 2e  plies "LIMIT 1".
1f120 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 53  .**.**     SRT_S
1f130 65 74 20 20 20 20 20 20 20 20 20 54 68 65 20 72  et         The r
1f140 65 73 75 6c 74 20 6d 75 73 74 20 62 65 20 61 20  esult must be a 
1f150 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 20 20  single column.  
1f160 53 74 6f 72 65 20 65 61 63 68 0a 2a 2a 20 20 20  Store each.**   
1f170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f180 20 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20    row of result 
1f190 61 73 20 74 68 65 20 6b 65 79 20 69 6e 20 74 61  as the key in ta
1f1a0 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61  ble pDest->iSDPa
1f1b0 72 6d 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  rm..**          
1f1c0 20 20 20 20 20 20 20 20 20 20 20 41 70 70 6c 79             Apply
1f1d0 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 70 44   the affinity pD
1f1e0 65 73 74 2d 3e 61 66 66 53 64 73 74 20 62 65 66  est->affSdst bef
1f1f0 6f 72 65 20 73 74 6f 72 69 6e 67 0a 2a 2a 20 20  ore storing.**  
1f200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f210 20 20 20 72 65 73 75 6c 74 73 2e 20 20 55 73 65     results.  Use
1f220 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 22  d to implement "
1f230 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22  IN (SELECT ...)"
1f240 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
1f250 45 70 68 65 6d 54 61 62 20 20 20 20 43 72 65 61  EphemTab    Crea
1f260 74 65 20 61 6e 20 74 65 6d 70 6f 72 61 72 79 20  te an temporary 
1f270 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44  table pDest->iSD
1f280 50 61 72 6d 20 61 6e 64 20 73 74 6f 72 65 0a 2a  Parm and store.*
1f290 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1f2a0 20 20 20 20 20 20 74 68 65 20 72 65 73 75 6c 74        the result
1f2b0 20 74 68 65 72 65 2e 20 54 68 65 20 63 75 72 73   there. The curs
1f2c0 6f 72 20 69 73 20 6c 65 66 74 20 6f 70 65 6e 20  or is left open 
1f2d0 61 66 74 65 72 0a 2a 2a 20 20 20 20 20 20 20 20  after.**        
1f2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1f2f0 75 72 6e 69 6e 67 2e 20 20 54 68 69 73 20 69 73  urning.  This is
1f300 20 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c 65 20   like SRT_Table 
1f310 65 78 63 65 70 74 20 74 68 61 74 0a 2a 2a 20 20  except that.**  
1f320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f330 20 20 20 74 68 69 73 20 64 65 73 74 69 6e 61 74     this destinat
1f340 69 6f 6e 20 75 73 65 73 20 4f 50 5f 4f 70 65 6e  ion uses OP_Open
1f350 45 70 68 65 6d 65 72 61 6c 20 74 6f 20 63 72 65  Ephemeral to cre
1f360 61 74 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ate.**          
1f370 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20 74             the t
1f380 61 62 6c 65 20 66 69 72 73 74 2e 0a 2a 2a 0a 2a  able first..**.*
1f390 2a 20 20 20 20 20 53 52 54 5f 43 6f 72 6f 75 74  *     SRT_Corout
1f3a0 69 6e 65 20 20 20 47 65 6e 65 72 61 74 65 20 61  ine   Generate a
1f3b0 20 63 6f 2d 72 6f 75 74 69 6e 65 20 74 68 61 74   co-routine that
1f3c0 20 72 65 74 75 72 6e 73 20 61 20 6e 65 77 20 72   returns a new r
1f3d0 6f 77 20 6f 66 0a 2a 2a 20 20 20 20 20 20 20 20  ow of.**        
1f3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73               res
1f3f0 75 6c 74 73 20 65 61 63 68 20 74 69 6d 65 20 69  ults each time i
1f400 74 20 69 73 20 69 6e 76 6f 6b 65 64 2e 20 20 54  t is invoked.  T
1f410 68 65 20 65 6e 74 72 79 20 70 6f 69 6e 74 0a 2a  he entry point.*
1f420 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1f430 20 20 20 20 20 20 6f 66 20 74 68 65 20 63 6f 2d        of the co-
1f440 72 6f 75 74 69 6e 65 20 69 73 20 73 74 6f 72 65  routine is store
1f450 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 70 44  d in register pD
1f460 65 73 74 2d 3e 69 53 44 50 61 72 6d 0a 2a 2a 20  est->iSDParm.** 
1f470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f480 20 20 20 20 61 6e 64 20 74 68 65 20 72 65 73 75      and the resu
1f490 6c 74 20 72 6f 77 20 69 73 20 73 74 6f 72 65 64  lt row is stored
1f4a0 20 69 6e 20 70 44 65 73 74 2d 3e 6e 44 65 73 74   in pDest->nDest
1f4b0 20 72 65 67 69 73 74 65 72 73 0a 2a 2a 20 20 20   registers.**   
1f4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f4d0 20 20 73 74 61 72 74 69 6e 67 20 77 69 74 68 20    starting with 
1f4e0 70 44 65 73 74 2d 3e 69 53 64 73 74 2e 0a 2a 2a  pDest->iSdst..**
1f4f0 0a 2a 2a 20 20 20 20 20 53 52 54 5f 54 61 62 6c  .**     SRT_Tabl
1f500 65 20 20 20 20 20 20 20 53 74 6f 72 65 20 72 65  e       Store re
1f510 73 75 6c 74 73 20 69 6e 20 74 65 6d 70 6f 72 61  sults in tempora
1f520 72 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e  ry table pDest->
1f530 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20  iSDParm..**     
1f540 53 52 54 5f 46 69 66 6f 20 20 20 20 20 20 20 20  SRT_Fifo        
1f550 54 68 69 73 20 69 73 20 6c 69 6b 65 20 53 52 54  This is like SRT
1f560 5f 45 70 68 65 6d 54 61 62 20 65 78 63 65 70 74  _EphemTab except
1f570 20 74 68 61 74 20 74 68 65 20 74 61 62 6c 65 0a   that the table.
1f580 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1f590 20 20 20 20 20 20 20 69 73 20 61 73 73 75 6d 65         is assume
1f5a0 64 20 74 6f 20 61 6c 72 65 61 64 79 20 62 65 20  d to already be 
1f5b0 6f 70 65 6e 2e 20 20 53 52 54 5f 46 69 66 6f 20  open.  SRT_Fifo 
1f5c0 68 61 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  has.**          
1f5d0 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20 61             the a
1f5e0 64 64 69 74 69 6f 6e 61 6c 20 70 72 6f 70 65 72  dditional proper
1f5f0 74 79 20 6f 66 20 62 65 69 6e 67 20 61 62 6c 65  ty of being able
1f600 20 74 6f 20 69 67 6e 6f 72 65 0a 2a 2a 20 20 20   to ignore.**   
1f610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f620 20 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63    the ORDER BY c
1f630 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  lause..**.**    
1f640 20 53 52 54 5f 44 69 73 74 46 69 66 6f 20 20 20   SRT_DistFifo   
1f650 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69   Store results i
1f660 6e 20 61 20 74 65 6d 70 6f 72 61 72 79 20 74 61  n a temporary ta
1f670 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61  ble pDest->iSDPa
1f680 72 6d 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  rm..**          
1f690 20 20 20 20 20 20 20 20 20 20 20 42 75 74 20 61             But a
1f6a0 6c 73 6f 20 75 73 65 20 74 65 6d 70 6f 72 61 72  lso use temporar
1f6b0 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69  y table pDest->i
1f6c0 53 44 50 61 72 6d 2b 31 20 61 73 0a 2a 2a 20 20  SDParm+1 as.**  
1f6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f6e0 20 20 20 61 20 72 65 63 6f 72 64 20 6f 66 20 61     a record of a
1f6f0 6c 6c 20 70 72 69 6f 72 20 72 65 73 75 6c 74 73  ll prior results
1f700 20 61 6e 64 20 69 67 6e 6f 72 65 20 61 6e 79 20   and ignore any 
1f710 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20 20 20 20  duplicate.**    
1f720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f730 20 72 6f 77 73 2e 20 20 4e 61 6d 65 20 6d 65 61   rows.  Name mea
1f740 6e 73 3a 20 20 22 44 69 73 74 69 6e 63 74 20 46  ns:  "Distinct F
1f750 69 66 6f 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ifo"..**.**     
1f760 53 52 54 5f 51 75 65 75 65 20 20 20 20 20 20 20  SRT_Queue       
1f770 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e  Store results in
1f780 20 70 72 69 6f 72 69 74 79 20 71 75 65 75 65 20   priority queue 
1f790 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 28  pDest->iSDParm (
1f7a0 72 65 61 6c 6c 79 0a 2a 2a 20 20 20 20 20 20 20  really.**       
1f7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 6e                an
1f7c0 20 69 6e 64 65 78 29 2e 20 20 41 70 70 65 6e 64   index).  Append
1f7d0 20 61 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62   a sequence numb
1f7e0 65 72 20 73 6f 20 74 68 61 74 20 61 6c 6c 20 65  er so that all e
1f7f0 6e 74 72 69 65 73 0a 2a 2a 20 20 20 20 20 20 20  ntries.**       
1f800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72                ar
1f810 65 20 64 69 73 74 69 6e 63 74 2e 0a 2a 2a 0a 2a  e distinct..**.*
1f820 2a 20 20 20 20 20 53 52 54 5f 44 69 73 74 51 75  *     SRT_DistQu
1f830 65 75 65 20 20 20 53 74 6f 72 65 20 72 65 73 75  eue   Store resu
1f840 6c 74 73 20 69 6e 20 70 72 69 6f 72 69 74 79 20  lts in priority 
1f850 71 75 65 75 65 20 70 44 65 73 74 2d 3e 69 53 44  queue pDest->iSD
1f860 50 61 72 6d 20 6f 6e 6c 79 20 69 66 0a 2a 2a 20  Parm only if.** 
1f870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f880 20 20 20 20 74 68 65 20 73 61 6d 65 20 72 65 63      the same rec
1f890 6f 72 64 20 68 61 73 20 6e 65 76 65 72 20 62 65  ord has never be
1f8a0 65 6e 20 73 74 6f 72 65 64 20 62 65 66 6f 72 65  en stored before
1f8b0 2e 20 20 54 68 65 0a 2a 2a 20 20 20 20 20 20 20  .  The.**       
1f8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
1f8d0 64 65 78 20 61 74 20 70 44 65 73 74 2d 3e 69 53  dex at pDest->iS
1f8e0 44 50 61 72 6d 2b 31 20 68 6f 6c 64 20 61 6c 6c  DParm+1 hold all
1f8f0 20 70 72 69 6f 72 20 73 74 6f 72 65 73 2e 0a 2a   prior stores..*
1f900 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 55 6e  /.#define SRT_Un
1f910 69 6f 6e 20 20 20 20 20 20 20 20 31 20 20 2f 2a  ion        1  /*
1f920 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73   Store result as
1f930 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65   keys in an inde
1f940 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  x */.#define SRT
1f950 5f 45 78 63 65 70 74 20 20 20 20 20 20 20 32 20  _Except       2 
1f960 20 2f 2a 20 52 65 6d 6f 76 65 20 72 65 73 75 6c   /* Remove resul
1f970 74 20 66 72 6f 6d 20 61 20 55 4e 49 4f 4e 20 69  t from a UNION i
1f980 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ndex */.#define 
1f990 53 52 54 5f 45 78 69 73 74 73 20 20 20 20 20 20  SRT_Exists      
1f9a0 20 33 20 20 2f 2a 20 53 74 6f 72 65 20 31 20 69   3  /* Store 1 i
1f9b0 66 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  f the result is 
1f9c0 6e 6f 74 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65  not empty */.#de
1f9d0 66 69 6e 65 20 53 52 54 5f 44 69 73 63 61 72 64  fine SRT_Discard
1f9e0 20 20 20 20 20 20 34 20 20 2f 2a 20 44 6f 20 6e        4  /* Do n
1f9f0 6f 74 20 73 61 76 65 20 74 68 65 20 72 65 73 75  ot save the resu
1fa00 6c 74 73 20 61 6e 79 77 68 65 72 65 20 2a 2f 0a  lts anywhere */.
1fa10 23 64 65 66 69 6e 65 20 53 52 54 5f 46 69 66 6f  #define SRT_Fifo
1fa20 20 20 20 20 20 20 20 20 20 35 20 20 2f 2a 20 53           5  /* S
1fa30 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20 64  tore result as d
1fa40 61 74 61 20 77 69 74 68 20 61 6e 20 61 75 74 6f  ata with an auto
1fa50 6d 61 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a 23  matic rowid */.#
1fa60 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73 74 46  define SRT_DistF
1fa70 69 66 6f 20 20 20 20 20 36 20 20 2f 2a 20 4c 69  ifo     6  /* Li
1fa80 6b 65 20 53 52 54 5f 46 69 66 6f 2c 20 62 75 74  ke SRT_Fifo, but
1fa90 20 75 6e 69 71 75 65 20 72 65 73 75 6c 74 73 20   unique results 
1faa0 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  only */.#define 
1fab0 53 52 54 5f 51 75 65 75 65 20 20 20 20 20 20 20  SRT_Queue       
1fac0 20 37 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73   7  /* Store res
1fad0 75 6c 74 20 69 6e 20 61 6e 20 71 75 65 75 65 20  ult in an queue 
1fae0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44  */.#define SRT_D
1faf0 69 73 74 51 75 65 75 65 20 20 20 20 38 20 20 2f  istQueue    8  /
1fb00 2a 20 4c 69 6b 65 20 53 52 54 5f 51 75 65 75 65  * Like SRT_Queue
1fb10 2c 20 62 75 74 20 75 6e 69 71 75 65 20 72 65 73  , but unique res
1fb20 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a 0a 2f 2a  ults only */../*
1fb30 20 54 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   The ORDER BY cl
1fb40 61 75 73 65 20 69 73 20 69 67 6e 6f 72 65 64 20  ause is ignored 
1fb50 66 6f 72 20 61 6c 6c 20 6f 66 20 74 68 65 20 61  for all of the a
1fb60 62 6f 76 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  bove */.#define 
1fb70 49 67 6e 6f 72 61 62 6c 65 4f 72 64 65 72 62 79  IgnorableOrderby
1fb80 28 58 29 20 28 28 58 2d 3e 65 44 65 73 74 29 3c  (X) ((X->eDest)<
1fb90 3d 53 52 54 5f 44 69 73 74 51 75 65 75 65 29 0a  =SRT_DistQueue).
1fba0 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 4f 75 74  .#define SRT_Out
1fbb0 70 75 74 20 20 20 20 20 20 20 39 20 20 2f 2a 20  put       9  /* 
1fbc0 4f 75 74 70 75 74 20 65 61 63 68 20 72 6f 77 20  Output each row 
1fbd0 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65  of result */.#de
1fbe0 66 69 6e 65 20 53 52 54 5f 4d 65 6d 20 20 20 20  fine SRT_Mem    
1fbf0 20 20 20 20 20 31 30 20 20 2f 2a 20 53 74 6f 72       10  /* Stor
1fc00 65 20 72 65 73 75 6c 74 20 69 6e 20 61 20 6d 65  e result in a me
1fc10 6d 6f 72 79 20 63 65 6c 6c 20 2a 2f 0a 23 64 65  mory cell */.#de
1fc20 66 69 6e 65 20 53 52 54 5f 53 65 74 20 20 20 20  fine SRT_Set    
1fc30 20 20 20 20 20 31 31 20 20 2f 2a 20 53 74 6f 72       11  /* Stor
1fc40 65 20 72 65 73 75 6c 74 73 20 61 73 20 6b 65 79  e results as key
1fc50 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f  s in an index */
1fc60 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45 70 68  .#define SRT_Eph
1fc70 65 6d 54 61 62 20 20 20 20 31 32 20 20 2f 2a 20  emTab    12  /* 
1fc80 43 72 65 61 74 65 20 74 72 61 6e 73 69 65 6e 74  Create transient
1fc90 20 74 61 62 20 61 6e 64 20 73 74 6f 72 65 20 6c   tab and store l
1fca0 69 6b 65 20 53 52 54 5f 54 61 62 6c 65 20 2a 2f  ike SRT_Table */
1fcb0 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 43 6f 72  .#define SRT_Cor
1fcc0 6f 75 74 69 6e 65 20 20 20 31 33 20 20 2f 2a 20  outine   13  /* 
1fcd0 47 65 6e 65 72 61 74 65 20 61 20 73 69 6e 67 6c  Generate a singl
1fce0 65 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20  e row of result 
1fcf0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 54  */.#define SRT_T
1fd00 61 62 6c 65 20 20 20 20 20 20 20 31 34 20 20 2f  able       14  /
1fd10 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61  * Store result a
1fd20 73 20 64 61 74 61 20 77 69 74 68 20 61 6e 20 61  s data with an a
1fd30 75 74 6f 6d 61 74 69 63 20 72 6f 77 69 64 20 2a  utomatic rowid *
1fd40 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  /../*.** An inst
1fd50 61 6e 63 65 20 6f 66 20 74 68 69 73 20 6f 62 6a  ance of this obj
1fd60 65 63 74 20 64 65 73 63 72 69 62 65 73 20 77 68  ect describes wh
1fd70 65 72 65 20 74 6f 20 70 75 74 20 6f 66 20 74 68  ere to put of th
1fd80 65 20 72 65 73 75 6c 74 73 20 6f 66 0a 2a 2a 20  e results of.** 
1fd90 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  a SELECT stateme
1fda0 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65  nt..*/.struct Se
1fdb0 6c 65 63 74 44 65 73 74 20 7b 0a 20 20 75 38 20  lectDest {.  u8 
1fdc0 65 44 65 73 74 3b 20 20 20 20 20 20 20 20 20 20  eDest;          
1fdd0 20 20 2f 2a 20 48 6f 77 20 74 6f 20 64 69 73 70    /* How to disp
1fde0 6f 73 65 20 6f 66 20 74 68 65 20 72 65 73 75 6c  ose of the resul
1fdf0 74 73 2e 20 20 4f 6e 20 6f 66 20 53 52 54 5f 2a  ts.  On of SRT_*
1fe00 20 61 62 6f 76 65 2e 20 2a 2f 0a 20 20 69 6e 74   above. */.  int
1fe10 20 69 53 44 50 61 72 6d 3b 20 20 20 20 20 20 20   iSDParm;       
1fe20 20 20 2f 2a 20 41 20 70 61 72 61 6d 65 74 65 72    /* A parameter
1fe30 20 75 73 65 64 20 62 79 20 74 68 65 20 65 44 65   used by the eDe
1fe40 73 74 20 64 69 73 70 6f 73 61 6c 20 6d 65 74 68  st disposal meth
1fe50 6f 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53 64 73  od */.  int iSds
1fe60 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
1fe70 42 61 73 65 20 72 65 67 69 73 74 65 72 20 77 68  Base register wh
1fe80 65 72 65 20 72 65 73 75 6c 74 73 20 61 72 65 20  ere results are 
1fe90 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74  written */.  int
1fea0 20 6e 53 64 73 74 3b 20 20 20 20 20 20 20 20 20   nSdst;         
1feb0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72    /* Number of r
1fec0 65 67 69 73 74 65 72 73 20 61 6c 6c 6f 63 61 74  egisters allocat
1fed0 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41  ed */.  char *zA
1fee0 66 66 53 64 73 74 3b 20 20 20 20 20 20 2f 2a 20  ffSdst;      /* 
1fef0 41 66 66 69 6e 69 74 79 20 75 73 65 64 20 77 68  Affinity used wh
1ff00 65 6e 20 65 44 65 73 74 3d 3d 53 52 54 5f 53 65  en eDest==SRT_Se
1ff10 74 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  t */.  ExprList 
1ff20 2a 70 4f 72 64 65 72 42 79 3b 20 20 2f 2a 20 4b  *pOrderBy;  /* K
1ff30 65 79 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 53  ey columns for S
1ff40 52 54 5f 51 75 65 75 65 20 61 6e 64 20 53 52 54  RT_Queue and SRT
1ff50 5f 44 69 73 74 51 75 65 75 65 20 2a 2f 0a 7d 3b  _DistQueue */.};
1ff60 0a 0a 2f 2a 0a 2a 2a 20 44 75 72 69 6e 67 20 63  ../*.** During c
1ff70 6f 64 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f  ode generation o
1ff80 66 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68 61  f statements tha
1ff90 74 20 64 6f 20 69 6e 73 65 72 74 73 20 69 6e 74  t do inserts int
1ffa0 6f 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a  o AUTOINCREMENT.
1ffb0 2a 2a 20 74 61 62 6c 65 73 2c 20 74 68 65 20 66  ** tables, the f
1ffc0 6f 6c 6c 6f 77 69 6e 67 20 69 6e 66 6f 72 6d 61  ollowing informa
1ffd0 74 69 6f 6e 20 69 73 20 61 74 74 61 63 68 65 64  tion is attached
1ffe0 20 74 6f 20 74 68 65 20 54 61 62 6c 65 2e 75 2e   to the Table.u.
1fff0 61 75 74 6f 49 6e 63 2e 70 0a 2a 2a 20 70 6f 69  autoInc.p.** poi
20000 6e 74 65 72 20 6f 66 20 65 61 63 68 20 61 75 74  nter of each aut
20010 6f 69 6e 63 72 65 6d 65 6e 74 20 74 61 62 6c 65  oincrement table
20020 20 74 6f 20 72 65 63 6f 72 64 20 73 6f 6d 65 20   to record some 
20030 73 69 64 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  side information
20040 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 63 6f 64   that.** the cod
20050 65 20 67 65 6e 65 72 61 74 6f 72 20 6e 65 65 64  e generator need
20060 73 2e 20 20 57 65 20 68 61 76 65 20 74 6f 20 6b  s.  We have to k
20070 65 65 70 20 70 65 72 2d 74 61 62 6c 65 20 61 75  eep per-table au
20080 74 6f 69 6e 63 72 65 6d 65 6e 74 0a 2a 2a 20 69  toincrement.** i
20090 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 63 61  nformation in ca
200a0 73 65 20 69 6e 73 65 72 74 73 20 61 72 65 20 64  se inserts are d
200b0 6f 6e 65 20 77 69 74 68 69 6e 20 74 72 69 67 67  one within trigg
200c0 65 72 73 2e 20 20 54 72 69 67 67 65 72 73 20 64  ers.  Triggers d
200d0 6f 20 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d 61 6c 6c  o not.** normall
200e0 79 20 63 6f 6f 72 64 69 6e 61 74 65 20 74 68 65  y coordinate the
200f0 69 72 20 61 63 74 69 76 69 74 69 65 73 2c 20 62  ir activities, b
20100 75 74 20 77 65 20 64 6f 20 6e 65 65 64 20 74 6f  ut we do need to
20110 20 63 6f 6f 72 64 69 6e 61 74 65 20 74 68 65 0a   coordinate the.
20120 2a 2a 20 6c 6f 61 64 69 6e 67 20 61 6e 64 20 73  ** loading and s
20130 61 76 69 6e 67 20 6f 66 20 61 75 74 6f 69 6e 63  aving of autoinc
20140 72 65 6d 65 6e 74 20 69 6e 66 6f 72 6d 61 74 69  rement informati
20150 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75  on..*/.struct Au
20160 74 6f 69 6e 63 49 6e 66 6f 20 7b 0a 20 20 41 75  toincInfo {.  Au
20170 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 4e 65 78 74  toincInfo *pNext
20180 3b 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 66 6f  ;   /* Next info
20190 20 62 6c 6f 63 6b 20 69 6e 20 61 20 6c 69 73 74   block in a list
201a0 20 6f 66 20 74 68 65 6d 20 61 6c 6c 20 2a 2f 0a   of them all */.
201b0 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20    Table *pTab;  
201c0 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65          /* Table
201d0 20 74 68 69 73 20 69 6e 66 6f 20 62 6c 6f 63 6b   this info block
201e0 20 72 65 66 65 72 73 20 74 6f 20 2a 2f 0a 20 20   refers to */.  
201f0 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20 20  int iDb;        
20200 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69        /* Index i
20210 6e 20 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20  n sqlite3.aDb[] 
20220 6f 66 20 64 61 74 61 62 61 73 65 20 68 6f 6c 64  of database hold
20230 69 6e 67 20 70 54 61 62 20 2a 2f 0a 20 20 69 6e  ing pTab */.  in
20240 74 20 72 65 67 43 74 72 3b 20 20 20 20 20 20 20  t regCtr;       
20250 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65      /* Memory re
20260 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 74  gister holding t
20270 68 65 20 72 6f 77 69 64 20 63 6f 75 6e 74 65 72  he rowid counter
20280 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 74   */.};../*.** At
20290 20 6c 65 61 73 74 20 6f 6e 65 20 69 6e 73 74 61   least one insta
202a0 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
202b0 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 69  wing structure i
202c0 73 20 63 72 65 61 74 65 64 20 66 6f 72 20 65 61  s created for ea
202d0 63 68 0a 2a 2a 20 74 72 69 67 67 65 72 20 74 68  ch.** trigger th
202e0 61 74 20 6d 61 79 20 62 65 20 66 69 72 65 64 20  at may be fired 
202f0 77 68 69 6c 65 20 70 61 72 73 69 6e 67 20 61 6e  while parsing an
20300 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45 20   INSERT, UPDATE 
20310 6f 72 20 44 45 4c 45 54 45 0a 2a 2a 20 73 74 61  or DELETE.** sta
20320 74 65 6d 65 6e 74 2e 20 41 6c 6c 20 73 75 63 68  tement. All such
20330 20 6f 62 6a 65 63 74 73 20 61 72 65 20 73 74 6f   objects are sto
20340 72 65 64 20 69 6e 20 74 68 65 20 6c 69 6e 6b 65  red in the linke
20350 64 20 6c 69 73 74 20 68 65 61 64 65 64 20 61 74  d list headed at
20360 0a 2a 2a 20 50 61 72 73 65 2e 70 54 72 69 67 67  .** Parse.pTrigg
20370 65 72 50 72 67 20 61 6e 64 20 64 65 6c 65 74 65  erPrg and delete
20380 64 20 6f 6e 63 65 20 73 74 61 74 65 6d 65 6e 74  d once statement
20390 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 68 61 73   compilation has
203a0 20 62 65 65 6e 0a 2a 2a 20 63 6f 6d 70 6c 65 74   been.** complet
203b0 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 56 64 62 65  ed..**.** A Vdbe
203c0 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74 68 61   sub-program tha
203d0 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65  t implements the
203e0 20 62 6f 64 79 20 61 6e 64 20 57 48 45 4e 20 63   body and WHEN c
203f0 6c 61 75 73 65 20 6f 66 20 74 72 69 67 67 65 72  lause of trigger
20400 0a 2a 2a 20 54 72 69 67 67 65 72 50 72 67 2e 70  .** TriggerPrg.p
20410 54 72 69 67 67 65 72 2c 20 61 73 73 75 6d 69 6e  Trigger, assumin
20420 67 20 61 20 64 65 66 61 75 6c 74 20 4f 4e 20 43  g a default ON C
20430 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 6f  ONFLICT clause o
20440 66 0a 2a 2a 20 54 72 69 67 67 65 72 50 72 67 2e  f.** TriggerPrg.
20450 6f 72 63 6f 6e 66 2c 20 69 73 20 73 74 6f 72 65  orconf, is store
20460 64 20 69 6e 20 74 68 65 20 54 72 69 67 67 65 72  d in the Trigger
20470 50 72 67 2e 70 50 72 6f 67 72 61 6d 20 76 61 72  Prg.pProgram var
20480 69 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 50 61  iable..** The Pa
20490 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67 20  rse.pTriggerPrg 
204a0 6c 69 73 74 20 6e 65 76 65 72 20 63 6f 6e 74 61  list never conta
204b0 69 6e 73 20 74 77 6f 20 65 6e 74 72 69 65 73 20  ins two entries 
204c0 77 69 74 68 20 74 68 65 20 73 61 6d 65 0a 2a 2a  with the same.**
204d0 20 76 61 6c 75 65 73 20 66 6f 72 20 62 6f 74 68   values for both
204e0 20 70 54 72 69 67 67 65 72 20 61 6e 64 20 6f 72   pTrigger and or
204f0 63 6f 6e 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  conf..**.** The 
20500 54 72 69 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d  TriggerPrg.aColm
20510 61 73 6b 5b 30 5d 20 76 61 72 69 61 62 6c 65 20  ask[0] variable 
20520 69 73 20 73 65 74 20 74 6f 20 61 20 6d 61 73 6b  is set to a mask
20530 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e   of old.* column
20540 73 0a 2a 2a 20 61 63 63 65 73 73 65 64 20 28 6f  s.** accessed (o
20550 72 20 73 65 74 20 74 6f 20 30 20 66 6f 72 20 74  r set to 0 for t
20560 72 69 67 67 65 72 73 20 66 69 72 65 64 20 61 73  riggers fired as
20570 20 61 20 72 65 73 75 6c 74 20 6f 66 20 49 4e 53   a result of INS
20580 45 52 54 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74  ERT.** statement
20590 73 29 2e 20 53 69 6d 69 6c 61 72 6c 79 2c 20 74  s). Similarly, t
205a0 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 61 43  he TriggerPrg.aC
205b0 6f 6c 6d 61 73 6b 5b 31 5d 20 76 61 72 69 61 62  olmask[1] variab
205c0 6c 65 20 69 73 20 73 65 74 20 74 6f 0a 2a 2a 20  le is set to.** 
205d0 61 20 6d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20  a mask of new.* 
205e0 63 6f 6c 75 6d 6e 73 20 75 73 65 64 20 62 79 20  columns used by 
205f0 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a  the program..*/.
20600 73 74 72 75 63 74 20 54 72 69 67 67 65 72 50 72  struct TriggerPr
20610 67 20 7b 0a 20 20 54 72 69 67 67 65 72 20 2a 70  g {.  Trigger *p
20620 54 72 69 67 67 65 72 3b 20 20 20 20 20 20 2f 2a  Trigger;      /*
20630 20 54 72 69 67 67 65 72 20 74 68 69 73 20 70 72   Trigger this pr
20640 6f 67 72 61 6d 20 77 61 73 20 63 6f 64 65 64 20  ogram was coded 
20650 66 72 6f 6d 20 2a 2f 0a 20 20 54 72 69 67 67 65  from */.  Trigge
20660 72 50 72 67 20 2a 70 4e 65 78 74 3b 20 20 20 20  rPrg *pNext;    
20670 20 20 2f 2a 20 4e 65 78 74 20 65 6e 74 72 79 20    /* Next entry 
20680 69 6e 20 50 61 72 73 65 2e 70 54 72 69 67 67 65  in Parse.pTrigge
20690 72 50 72 67 20 6c 69 73 74 20 2a 2f 0a 20 20 53  rPrg list */.  S
206a0 75 62 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67  ubProgram *pProg
206b0 72 61 6d 3b 20 20 20 2f 2a 20 50 72 6f 67 72 61  ram;   /* Progra
206c0 6d 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 70  m implementing p
206d0 54 72 69 67 67 65 72 2f 6f 72 63 6f 6e 66 20 2a  Trigger/orconf *
206e0 2f 0a 20 20 69 6e 74 20 6f 72 63 6f 6e 66 3b 20  /.  int orconf; 
206f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
20700 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49  efault ON CONFLI
20710 43 54 20 70 6f 6c 69 63 79 20 2a 2f 0a 20 20 75  CT policy */.  u
20720 33 32 20 61 43 6f 6c 6d 61 73 6b 5b 32 5d 3b 20  32 aColmask[2]; 
20730 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 73 20         /* Masks 
20740 6f 66 20 6f 6c 64 2e 2a 2c 20 6e 65 77 2e 2a 20  of old.*, new.* 
20750 63 6f 6c 75 6d 6e 73 20 61 63 63 65 73 73 65 64  columns accessed
20760 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
20770 65 20 79 44 62 4d 61 73 6b 20 64 61 74 61 74 79  e yDbMask dataty
20780 70 65 20 66 6f 72 20 74 68 65 20 62 69 74 6d 61  pe for the bitma
20790 73 6b 20 6f 66 20 61 6c 6c 20 61 74 74 61 63 68  sk of all attach
207a0 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f  ed databases..*/
207b0 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  .#if SQLITE_MAX_
207c0 41 54 54 41 43 48 45 44 3e 33 30 0a 20 20 74 79  ATTACHED>30.  ty
207d0 70 65 64 65 66 20 75 6e 73 69 67 6e 65 64 20 63  pedef unsigned c
207e0 68 61 72 20 79 44 62 4d 61 73 6b 5b 28 53 51 4c  har yDbMask[(SQL
207f0 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44  ITE_MAX_ATTACHED
20800 2b 39 29 2f 38 5d 3b 0a 23 20 64 65 66 69 6e 65  +9)/8];.# define
20810 20 44 62 4d 61 73 6b 54 65 73 74 28 4d 2c 49 29   DbMaskTest(M,I)
20820 20 20 20 20 28 28 28 4d 29 5b 28 49 29 2f 38 5d      (((M)[(I)/8]
20830 26 28 31 3c 3c 28 28 49 29 26 37 29 29 29 21 3d  &(1<<((I)&7)))!=
20840 30 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  0).# define DbMa
20850 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20 20 20 6d  skZero(M)      m
20860 65 6d 73 65 74 28 28 4d 29 2c 30 2c 73 69 7a 65  emset((M),0,size
20870 6f 66 28 4d 29 29 0a 23 20 64 65 66 69 6e 65 20  of(M)).# define 
20880 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20 20  DbMaskSet(M,I)  
20890 20 20 20 28 4d 29 5b 28 49 29 2f 38 5d 7c 3d 28     (M)[(I)/8]|=(
208a0 31 3c 3c 28 28 49 29 26 37 29 29 0a 23 20 64 65  1<<((I)&7)).# de
208b0 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a 65  fine DbMaskAllZe
208c0 72 6f 28 4d 29 20 20 20 73 71 6c 69 74 65 33 44  ro(M)   sqlite3D
208d0 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 0a  bMaskAllZero(M).
208e0 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e  # define DbMaskN
208f0 6f 6e 5a 65 72 6f 28 4d 29 20 20 20 28 73 71 6c  onZero(M)   (sql
20900 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72  ite3DbMaskAllZer
20910 6f 28 4d 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 20  o(M)==0).#else. 
20920 20 74 79 70 65 64 65 66 20 75 6e 73 69 67 6e 65   typedef unsigne
20930 64 20 69 6e 74 20 79 44 62 4d 61 73 6b 3b 0a 23  d int yDbMask;.#
20940 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 54 65   define DbMaskTe
20950 73 74 28 4d 2c 49 29 20 20 20 20 28 28 28 4d 29  st(M,I)    (((M)
20960 26 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c  &(((yDbMask)1)<<
20970 28 49 29 29 29 21 3d 30 29 0a 23 20 64 65 66 69  (I)))!=0).# defi
20980 6e 65 20 44 62 4d 61 73 6b 5a 65 72 6f 28 4d 29  ne DbMaskZero(M)
20990 20 20 20 20 20 20 28 4d 29 3d 30 0a 23 20 64 65        (M)=0.# de
209a0 66 69 6e 65 20 44 62 4d 61 73 6b 53 65 74 28 4d  fine DbMaskSet(M
209b0 2c 49 29 20 20 20 20 20 28 4d 29 7c 3d 28 28 28  ,I)     (M)|=(((
209c0 79 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29  yDbMask)1)<<(I))
209d0 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
209e0 41 6c 6c 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29  AllZero(M)   (M)
209f0 3d 3d 30 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  ==0.# define DbM
20a00 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20 20  askNonZero(M)   
20a10 28 4d 29 21 3d 30 0a 23 65 6e 64 69 66 0a 0a 2f  (M)!=0.#endif../
20a20 2a 0a 2a 2a 20 41 6e 20 53 51 4c 20 70 61 72 73  *.** An SQL pars
20a30 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 41 20 63  er context.  A c
20a40 6f 70 79 20 6f 66 20 74 68 69 73 20 73 74 72 75  opy of this stru
20a50 63 74 75 72 65 20 69 73 20 70 61 73 73 65 64 20  cture is passed 
20a60 74 68 72 6f 75 67 68 0a 2a 2a 20 74 68 65 20 70  through.** the p
20a70 61 72 73 65 72 20 61 6e 64 20 64 6f 77 6e 20 69  arser and down i
20a80 6e 74 6f 20 61 6c 6c 20 74 68 65 20 70 61 72 73  nto all the pars
20a90 65 72 20 61 63 74 69 6f 6e 20 72 6f 75 74 69 6e  er action routin
20aa0 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a  e in order to.**
20ab0 20 63 61 72 72 79 20 61 72 6f 75 6e 64 20 69 6e   carry around in
20ac0 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 69  formation that i
20ad0 73 20 67 6c 6f 62 61 6c 20 74 6f 20 74 68 65 20  s global to the 
20ae0 65 6e 74 69 72 65 20 70 61 72 73 65 2e 0a 2a 2a  entire parse..**
20af0 0a 2a 2a 20 54 68 65 20 73 74 72 75 63 74 75 72  .** The structur
20b00 65 20 69 73 20 64 69 76 69 64 65 64 20 69 6e 74  e is divided int
20b10 6f 20 74 77 6f 20 70 61 72 74 73 2e 20 20 57 68  o two parts.  Wh
20b20 65 6e 20 74 68 65 20 70 61 72 73 65 72 20 61 6e  en the parser an
20b30 64 20 63 6f 64 65 0a 2a 2a 20 67 65 6e 65 72 61  d code.** genera
20b40 74 65 20 63 61 6c 6c 20 74 68 65 6d 73 65 6c 76  te call themselv
20b50 65 73 20 72 65 63 75 72 73 69 76 65 6c 79 2c 20  es recursively, 
20b60 74 68 65 20 66 69 72 73 74 20 70 61 72 74 20 6f  the first part o
20b70 66 20 74 68 65 20 73 74 72 75 63 74 75 72 65 0a  f the structure.
20b80 2a 2a 20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62  ** is constant b
20b90 75 74 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61  ut the second pa
20ba0 72 74 20 69 73 20 72 65 73 65 74 20 61 74 20 74  rt is reset at t
20bb0 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 61 6e 64  he beginning and
20bc0 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 61 63 68 20   end of.** each 
20bd0 72 65 63 75 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  recursion..**.**
20be0 20 54 68 65 20 6e 54 61 62 6c 65 4c 6f 63 6b 20   The nTableLock 
20bf0 61 6e 64 20 61 54 61 62 6c 65 4c 6f 63 6b 20 76  and aTableLock v
20c00 61 72 69 61 62 6c 65 73 20 61 72 65 20 6f 6e 6c  ariables are onl
20c10 79 20 75 73 65 64 20 69 66 20 74 68 65 20 73 68  y used if the sh
20c20 61 72 65 64 2d 63 61 63 68 65 0a 2a 2a 20 66 65  ared-cache.** fe
20c30 61 74 75 72 65 20 69 73 20 65 6e 61 62 6c 65 64  ature is enabled
20c40 20 28 69 66 20 73 71 6c 69 74 65 33 54 73 64 28   (if sqlite3Tsd(
20c50 29 2d 3e 75 73 65 53 68 61 72 65 64 44 61 74 61  )->useSharedData
20c60 20 69 73 20 74 72 75 65 29 2e 20 54 68 65 79 20   is true). They 
20c70 61 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73  are.** used to s
20c80 74 6f 72 65 20 74 68 65 20 73 65 74 20 6f 66 20  tore the set of 
20c90 74 61 62 6c 65 2d 6c 6f 63 6b 73 20 72 65 71 75  table-locks requ
20ca0 69 72 65 64 20 62 79 20 74 68 65 20 73 74 61 74  ired by the stat
20cb0 65 6d 65 6e 74 20 62 65 69 6e 67 0a 2a 2a 20 63  ement being.** c
20cc0 6f 6d 70 69 6c 65 64 2e 20 46 75 6e 63 74 69 6f  ompiled. Functio
20cd0 6e 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f  n sqlite3TableLo
20ce0 63 6b 28 29 20 69 73 20 75 73 65 64 20 74 6f 20  ck() is used to 
20cf0 61 64 64 20 65 6e 74 72 69 65 73 20 74 6f 20 74  add entries to t
20d00 68 65 0a 2a 2a 20 6c 69 73 74 2e 0a 2a 2f 0a 73  he.** list..*/.s
20d10 74 72 75 63 74 20 50 61 72 73 65 20 7b 0a 20 20  truct Parse {.  
20d20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20  sqlite3 *db;    
20d30 20 20 20 20 20 2f 2a 20 54 68 65 20 6d 61 69 6e       /* The main
20d40 20 64 61 74 61 62 61 73 65 20 73 74 72 75 63 74   database struct
20d50 75 72 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ure */.  char *z
20d60 45 72 72 4d 73 67 3b 20 20 20 20 20 20 20 2f 2a  ErrMsg;       /*
20d70 20 41 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67   An error messag
20d80 65 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 56 64  e */.  Vdbe *pVd
20d90 62 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41  be;         /* A
20da0 6e 20 65 6e 67 69 6e 65 20 66 6f 72 20 65 78 65  n engine for exe
20db0 63 75 74 69 6e 67 20 64 61 74 61 62 61 73 65 20  cuting database 
20dc0 62 79 74 65 63 6f 64 65 20 2a 2f 0a 20 20 69 6e  bytecode */.  in
20dd0 74 20 72 63 3b 20 20 20 20 20 20 20 20 20 20 20  t rc;           
20de0 20 20 20 2f 2a 20 52 65 74 75 72 6e 20 63 6f 64     /* Return cod
20df0 65 20 66 72 6f 6d 20 65 78 65 63 75 74 69 6f 6e  e from execution
20e00 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 4e 61 6d 65   */.  u8 colName
20e10 73 53 65 74 3b 20 20 20 20 20 20 2f 2a 20 54 52  sSet;      /* TR
20e20 55 45 20 61 66 74 65 72 20 4f 50 5f 43 6f 6c 75  UE after OP_Colu
20e30 6d 6e 4e 61 6d 65 20 68 61 73 20 62 65 65 6e 20  mnName has been 
20e40 69 73 73 75 65 64 20 74 6f 20 70 56 64 62 65 20  issued to pVdbe 
20e50 2a 2f 0a 20 20 75 38 20 63 68 65 63 6b 53 63 68  */.  u8 checkSch
20e60 65 6d 61 3b 20 20 20 20 20 20 2f 2a 20 43 61 75  ema;      /* Cau
20e70 73 65 73 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69  ses schema cooki
20e80 65 20 63 68 65 63 6b 20 61 66 74 65 72 20 61 6e  e check after an
20e90 20 65 72 72 6f 72 20 2a 2f 0a 20 20 75 38 20 6e   error */.  u8 n
20ea0 65 73 74 65 64 3b 20 20 20 20 20 20 20 20 20 20  ested;          
20eb0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65   /* Number of ne
20ec0 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20 74 68  sted calls to th
20ed0 65 20 70 61 72 73 65 72 2f 63 6f 64 65 20 67 65  e parser/code ge
20ee0 6e 65 72 61 74 6f 72 20 2a 2f 0a 20 20 75 38 20  nerator */.  u8 
20ef0 6e 54 65 6d 70 52 65 67 3b 20 20 20 20 20 20 20  nTempReg;       
20f00 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74    /* Number of t
20f10 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65  emporary registe
20f20 72 73 20 69 6e 20 61 54 65 6d 70 52 65 67 5b 5d  rs in aTempReg[]
20f30 20 2a 2f 0a 20 20 75 38 20 69 73 4d 75 6c 74 69   */.  u8 isMulti
20f40 57 72 69 74 65 3b 20 20 20 20 20 2f 2a 20 54 72  Write;     /* Tr
20f50 75 65 20 69 66 20 73 74 61 74 65 6d 65 6e 74 20  ue if statement 
20f60 6d 61 79 20 6d 6f 64 69 66 79 2f 69 6e 73 65 72  may modify/inser
20f70 74 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20  t multiple rows 
20f80 2a 2f 0a 20 20 75 38 20 6d 61 79 41 62 6f 72 74  */.  u8 mayAbort
20f90 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75  ;         /* Tru
20fa0 65 20 69 66 20 73 74 61 74 65 6d 65 6e 74 20 6d  e if statement m
20fb0 61 79 20 74 68 72 6f 77 20 61 6e 20 41 42 4f 52  ay throw an ABOR
20fc0 54 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20  T exception */. 
20fd0 20 75 38 20 68 61 73 43 6f 6d 70 6f 75 6e 64 3b   u8 hasCompound;
20fe0 20 20 20 20 20 20 2f 2a 20 4e 65 65 64 20 74 6f        /* Need to
20ff0 20 69 6e 76 6f 6b 65 20 63 6f 6e 76 65 72 74 43   invoke convertC
21000 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53  ompoundSelectToS
21010 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 20 20 75  ubquery() */.  u
21020 38 20 6f 6b 43 6f 6e 73 74 46 61 63 74 6f 72 3b  8 okConstFactor;
21030 20 20 20 20 2f 2a 20 4f 4b 20 74 6f 20 66 61 63      /* OK to fac
21040 74 6f 72 20 6f 75 74 20 63 6f 6e 73 74 61 6e 74  tor out constant
21050 73 20 2a 2f 0a 20 20 75 38 20 64 69 73 61 62 6c  s */.  u8 disabl
21060 65 4c 6f 6f 6b 61 73 69 64 65 3b 20 2f 2a 20 4e  eLookaside; /* N
21070 75 6d 62 65 72 20 6f 66 20 74 69 6d 65 73 20 6c  umber of times l
21080 6f 6f 6b 61 73 69 64 65 20 68 61 73 20 62 65 65  ookaside has bee
21090 6e 20 64 69 73 61 62 6c 65 64 20 2a 2f 0a 20 20  n disabled */.  
210a0 75 38 20 64 69 73 61 62 6c 65 56 74 61 62 3b 20  u8 disableVtab; 
210b0 20 20 20 20 20 2f 2a 20 44 69 73 61 62 6c 65 20       /* Disable 
210c0 61 6c 6c 20 76 69 72 74 75 61 6c 20 74 61 62 6c  all virtual tabl
210d0 65 73 20 66 6f 72 20 74 68 69 73 20 70 61 72 73  es for this pars
210e0 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 61 6e 67  e */.  int nRang
210f0 65 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 53  eReg;       /* S
21100 69 7a 65 20 6f 66 20 74 68 65 20 74 65 6d 70 6f  ize of the tempo
21110 72 61 72 79 20 72 65 67 69 73 74 65 72 20 62 6c  rary register bl
21120 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 69 52 61  ock */.  int iRa
21130 6e 67 65 52 65 67 3b 20 20 20 20 20 20 20 2f 2a  ngeReg;       /*
21140 20 46 69 72 73 74 20 72 65 67 69 73 74 65 72 20   First register 
21150 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67  in temporary reg
21160 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20  ister block */. 
21170 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20   int nErr;      
21180 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
21190 6f 66 20 65 72 72 6f 72 73 20 73 65 65 6e 20 2a  of errors seen *
211a0 2f 0a 20 20 69 6e 74 20 6e 54 61 62 3b 20 20 20  /.  int nTab;   
211b0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
211c0 65 72 20 6f 66 20 70 72 65 76 69 6f 75 73 6c 79  er of previously
211d0 20 61 6c 6c 6f 63 61 74 65 64 20 56 44 42 45 20   allocated VDBE 
211e0 63 75 72 73 6f 72 73 20 2a 2f 0a 20 20 69 6e 74  cursors */.  int
211f0 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20   nMem;          
21200 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d    /* Number of m
21210 65 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73 65 64  emory cells used
21220 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74   so far */.  int
21230 20 73 7a 4f 70 41 6c 6c 6f 63 3b 20 20 20 20 20   szOpAlloc;     
21240 20 20 2f 2a 20 42 79 74 65 73 20 6f 66 20 6d 65    /* Bytes of me
21250 6d 6f 72 79 20 73 70 61 63 65 20 61 6c 6c 6f 63  mory space alloc
21260 61 74 65 64 20 66 6f 72 20 56 64 62 65 2e 61 4f  ated for Vdbe.aO
21270 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 69 53 65  p[] */.  int iSe
21280 6c 66 54 61 62 3b 20 20 20 20 20 20 20 20 2f 2a  lfTab;        /*
21290 20 54 61 62 6c 65 20 61 73 73 6f 63 69 61 74 65   Table associate
212a0 64 20 77 69 74 68 20 61 6e 20 69 6e 64 65 78 20  d with an index 
212b0 6f 6e 20 65 78 70 72 2c 20 6f 72 20 6e 65 67 61  on expr, or nega
212c0 74 69 76 65 0a 20 20 20 20 20 20 20 20 20 20 20  tive.           
212d0 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 6f              ** o
212e0 66 20 74 68 65 20 62 61 73 65 20 72 65 67 69 73  f the base regis
212f0 74 65 72 20 64 75 72 69 6e 67 20 63 68 65 63 6b  ter during check
21300 2d 63 6f 6e 73 74 72 61 69 6e 74 20 65 76 61 6c  -constraint eval
21310 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 61 62 65 6c   */.  int nLabel
21320 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ;          /* Th
21330 65 20 2a 6e 65 67 61 74 69 76 65 2a 20 6f 66 20  e *negative* of 
21340 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6c 61  the number of la
21350 62 65 6c 73 20 75 73 65 64 20 2a 2f 0a 20 20 69  bels used */.  i
21360 6e 74 20 6e 4c 61 62 65 6c 41 6c 6c 6f 63 3b 20  nt nLabelAlloc; 
21370 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
21380 20 73 6c 6f 74 73 20 69 6e 20 61 4c 61 62 65 6c   slots in aLabel
21390 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 4c 61 62 65   */.  int *aLabe
213a0 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70  l;         /* Sp
213b0 61 63 65 20 74 6f 20 68 6f 6c 64 20 74 68 65 20  ace to hold the 
213c0 6c 61 62 65 6c 73 20 2a 2f 0a 20 20 45 78 70 72  labels */.  Expr
213d0 4c 69 73 74 20 2a 70 43 6f 6e 73 74 45 78 70 72  List *pConstExpr
213e0 3b 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 65 78 70  ;/* Constant exp
213f0 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 54 6f  ressions */.  To
21400 6b 65 6e 20 63 6f 6e 73 74 72 61 69 6e 74 4e 61  ken constraintNa
21410 6d 65 3b 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68  me;/* Name of th
21420 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 75 72  e constraint cur
21430 72 65 6e 74 6c 79 20 62 65 69 6e 67 20 70 61 72  rently being par
21440 73 65 64 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b  sed */.  yDbMask
21450 20 77 72 69 74 65 4d 61 73 6b 3b 20 20 20 2f 2a   writeMask;   /*
21460 20 53 74 61 72 74 20 61 20 77 72 69 74 65 20 74   Start a write t
21470 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68  ransaction on th
21480 65 73 65 20 64 61 74 61 62 61 73 65 73 20 2a 2f  ese databases */
21490 0a 20 20 79 44 62 4d 61 73 6b 20 63 6f 6f 6b 69  .  yDbMask cooki
214a0 65 4d 61 73 6b 3b 20 20 2f 2a 20 42 69 74 6d 61  eMask;  /* Bitma
214b0 73 6b 20 6f 66 20 73 63 68 65 6d 61 20 76 65 72  sk of schema ver
214c0 69 66 69 65 64 20 64 61 74 61 62 61 73 65 73 20  ified databases 
214d0 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f 77 69  */.  int regRowi
214e0 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67  d;        /* Reg
214f0 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f  ister holding ro
21500 77 69 64 20 6f 66 20 43 52 45 41 54 45 20 54 41  wid of CREATE TA
21510 42 4c 45 20 65 6e 74 72 79 20 2a 2f 0a 20 20 69  BLE entry */.  i
21520 6e 74 20 72 65 67 52 6f 6f 74 3b 20 20 20 20 20  nt regRoot;     
21530 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
21540 68 6f 6c 64 69 6e 67 20 72 6f 6f 74 20 70 61 67  holding root pag
21550 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 6e 65 77  e number for new
21560 20 6f 62 6a 65 63 74 73 20 2a 2f 0a 20 20 69 6e   objects */.  in
21570 74 20 6e 4d 61 78 41 72 67 3b 20 20 20 20 20 20  t nMaxArg;      
21580 20 20 20 2f 2a 20 4d 61 78 20 61 72 67 73 20 70     /* Max args p
21590 61 73 73 65 64 20 74 6f 20 75 73 65 72 20 66 75  assed to user fu
215a0 6e 63 74 69 6f 6e 20 62 79 20 73 75 62 2d 70 72  nction by sub-pr
215b0 6f 67 72 61 6d 20 2a 2f 0a 20 20 69 6e 74 20 6e  ogram */.  int n
215c0 53 65 6c 65 63 74 3b 20 20 20 20 20 20 20 20 20  Select;         
215d0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 53 45 4c  /* Number of SEL
215e0 45 43 54 20 73 74 6d 74 73 2e 20 43 6f 75 6e 74  ECT stmts. Count
215f0 65 72 20 66 6f 72 20 53 65 6c 65 63 74 2e 73 65  er for Select.se
21600 6c 49 64 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  lId */.#ifndef S
21610 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45  QLITE_OMIT_SHARE
21620 44 5f 43 41 43 48 45 0a 20 20 69 6e 74 20 6e 54  D_CACHE.  int nT
21630 61 62 6c 65 4c 6f 63 6b 3b 20 20 20 20 20 20 20  ableLock;       
21640 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f   /* Number of lo
21650 63 6b 73 20 69 6e 20 61 54 61 62 6c 65 4c 6f 63  cks in aTableLoc
21660 6b 20 2a 2f 0a 20 20 54 61 62 6c 65 4c 6f 63 6b  k */.  TableLock
21670 20 2a 61 54 61 62 6c 65 4c 6f 63 6b 3b 20 2f 2a   *aTableLock; /*
21680 20 52 65 71 75 69 72 65 64 20 74 61 62 6c 65 20   Required table 
21690 6c 6f 63 6b 73 20 66 6f 72 20 73 68 61 72 65 64  locks for shared
216a0 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a 23  -cache mode */.#
216b0 65 6e 64 69 66 0a 20 20 41 75 74 6f 69 6e 63 49  endif.  AutoincI
216c0 6e 66 6f 20 2a 70 41 69 6e 63 3b 20 20 2f 2a 20  nfo *pAinc;  /* 
216d0 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  Information abou
216e0 74 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20  t AUTOINCREMENT 
216f0 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 20 20 50 61  counters */.  Pa
21700 72 73 65 20 2a 70 54 6f 70 6c 65 76 65 6c 3b 20  rse *pToplevel; 
21710 20 20 20 2f 2a 20 50 61 72 73 65 20 73 74 72 75     /* Parse stru
21720 63 74 75 72 65 20 66 6f 72 20 6d 61 69 6e 20 70  cture for main p
21730 72 6f 67 72 61 6d 20 28 6f 72 20 4e 55 4c 4c 29  rogram (or NULL)
21740 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 72   */.  Table *pTr
21750 69 67 67 65 72 54 61 62 3b 20 20 2f 2a 20 54 61  iggerTab;  /* Ta
21760 62 6c 65 20 74 72 69 67 67 65 72 73 20 61 72 65  ble triggers are
21770 20 62 65 69 6e 67 20 63 6f 64 65 64 20 66 6f 72   being coded for
21780 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 50 61   */.  Parse *pPa
21790 72 65 6e 74 50 61 72 73 65 3b 20 2f 2a 20 50 61  rentParse; /* Pa
217a0 72 65 6e 74 20 70 61 72 73 65 72 20 69 66 20 74  rent parser if t
217b0 68 69 73 20 70 61 72 73 65 72 20 69 73 20 6e 65  his parser is ne
217c0 73 74 65 64 20 2a 2f 0a 20 20 69 6e 74 20 61 64  sted */.  int ad
217d0 64 72 43 72 54 61 62 3b 20 20 20 20 20 20 20 2f  drCrTab;       /
217e0 2a 20 41 64 64 72 65 73 73 20 6f 66 20 4f 50 5f  * Address of OP_
217f0 43 72 65 61 74 65 42 74 72 65 65 20 6f 70 63 6f  CreateBtree opco
21800 64 65 20 6f 6e 20 43 52 45 41 54 45 20 54 41 42  de on CREATE TAB
21810 4c 45 20 2a 2f 0a 20 20 75 33 32 20 6e 51 75 65  LE */.  u32 nQue
21820 72 79 4c 6f 6f 70 3b 20 20 20 20 20 20 2f 2a 20  ryLoop;      /* 
21830 45 73 74 20 6e 75 6d 62 65 72 20 6f 66 20 69 74  Est number of it
21840 65 72 61 74 69 6f 6e 73 20 6f 66 20 61 20 71 75  erations of a qu
21850 65 72 79 20 28 31 30 2a 6c 6f 67 32 28 4e 29 29  ery (10*log2(N))
21860 20 2a 2f 0a 20 20 75 33 32 20 6f 6c 64 6d 61 73   */.  u32 oldmas
21870 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  k;         /* Ma
21880 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75  sk of old.* colu
21890 6d 6e 73 20 72 65 66 65 72 65 6e 63 65 64 20 2a  mns referenced *
218a0 2f 0a 20 20 75 33 32 20 6e 65 77 6d 61 73 6b 3b  /.  u32 newmask;
218b0 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b           /* Mask
218c0 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e   of new.* column
218d0 73 20 72 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a  s referenced */.
218e0 20 20 75 38 20 65 54 72 69 67 67 65 72 4f 70 3b    u8 eTriggerOp;
218f0 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 55 50 44         /* TK_UPD
21900 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20 6f  ATE, TK_INSERT o
21910 72 20 54 4b 5f 44 45 4c 45 54 45 20 2a 2f 0a 20  r TK_DELETE */. 
21920 20 75 38 20 65 4f 72 63 6f 6e 66 3b 20 20 20 20   u8 eOrconf;    
21930 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74        /* Default
21940 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c   ON CONFLICT pol
21950 69 63 79 20 66 6f 72 20 74 72 69 67 67 65 72 20  icy for trigger 
21960 73 74 65 70 73 20 2a 2f 0a 20 20 75 38 20 64 69  steps */.  u8 di
21970 73 61 62 6c 65 54 72 69 67 67 65 72 73 3b 20 20  sableTriggers;  
21980 2f 2a 20 54 72 75 65 20 74 6f 20 64 69 73 61 62  /* True to disab
21990 6c 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 0a  le triggers */..
219a0 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a    /*************
219b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
219c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
219d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
219e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 20  *************.  
219f0 2a 2a 20 46 69 65 6c 64 73 20 61 62 6f 76 65 20  ** Fields above 
21a00 6d 75 73 74 20 62 65 20 69 6e 69 74 69 61 6c 69  must be initiali
21a10 7a 65 64 20 74 6f 20 7a 65 72 6f 2e 20 20 54 68  zed to zero.  Th
21a20 65 20 66 69 65 6c 64 73 20 74 68 61 74 20 66 6f  e fields that fo
21a30 6c 6c 6f 77 2c 0a 20 20 2a 2a 20 64 6f 77 6e 20  llow,.  ** down 
21a40 74 6f 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  to the beginning
21a50 20 6f 66 20 74 68 65 20 72 65 63 75 72 73 69 76   of the recursiv
21a60 65 20 73 65 63 74 69 6f 6e 2c 20 64 6f 20 6e 6f  e section, do no
21a70 74 20 6e 65 65 64 20 74 6f 20 62 65 0a 20 20 2a  t need to be.  *
21a80 2a 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 61 73  * initialized as
21a90 20 74 68 65 79 20 77 69 6c 6c 20 62 65 20 73 65   they will be se
21aa0 74 20 62 65 66 6f 72 65 20 62 65 69 6e 67 20 75  t before being u
21ab0 73 65 64 2e 20 20 54 68 65 20 62 6f 75 6e 64 61  sed.  The bounda
21ac0 72 79 20 69 73 0a 20 20 2a 2a 20 64 65 74 65 72  ry is.  ** deter
21ad0 6d 69 6e 65 64 20 62 79 20 6f 66 66 73 65 74 6f  mined by offseto
21ae0 66 28 50 61 72 73 65 2c 61 54 65 6d 70 52 65 67  f(Parse,aTempReg
21af0 29 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  )..  ***********
21b00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21b10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21b20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21b30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f  ***************/
21b40 0a 0a 20 20 69 6e 74 20 61 54 65 6d 70 52 65 67  ..  int aTempReg
21b50 5b 38 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 48  [8];        /* H
21b60 6f 6c 64 69 6e 67 20 61 72 65 61 20 66 6f 72 20  olding area for 
21b70 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74  temporary regist
21b80 65 72 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73  ers */.  Token s
21b90 4e 61 6d 65 54 6f 6b 65 6e 3b 20 20 20 20 20 20  NameToken;      
21ba0 20 2f 2a 20 54 6f 6b 65 6e 20 77 69 74 68 20 75   /* Token with u
21bb0 6e 71 75 61 6c 69 66 69 65 64 20 73 63 68 65 6d  nqualified schem
21bc0 61 20 6f 62 6a 65 63 74 20 6e 61 6d 65 20 2a 2f  a object name */
21bd0 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ..  /***********
21be0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21bf0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21c00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21c10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 20  *************.  
21c20 2a 2a 20 41 62 6f 76 65 20 69 73 20 63 6f 6e 73  ** Above is cons
21c30 74 61 6e 74 20 62 65 74 77 65 65 6e 20 72 65 63  tant between rec
21c40 75 72 73 69 6f 6e 73 2e 20 20 42 65 6c 6f 77 20  ursions.  Below 
21c50 69 73 20 72 65 73 65 74 20 62 65 66 6f 72 65 20  is reset before 
21c60 61 6e 64 20 61 66 74 65 72 0a 20 20 2a 2a 20 65  and after.  ** e
21c70 61 63 68 20 72 65 63 75 72 73 69 6f 6e 2e 20 20  ach recursion.  
21c80 54 68 65 20 62 6f 75 6e 64 61 72 79 20 62 65 74  The boundary bet
21c90 77 65 65 6e 20 74 68 65 73 65 20 74 77 6f 20 72  ween these two r
21ca0 65 67 69 6f 6e 73 20 69 73 20 64 65 74 65 72 6d  egions is determ
21cb0 69 6e 65 64 0a 20 20 2a 2a 20 75 73 69 6e 67 20  ined.  ** using 
21cc0 6f 66 66 73 65 74 6f 66 28 50 61 72 73 65 2c 73  offsetof(Parse,s
21cd0 4c 61 73 74 54 6f 6b 65 6e 29 20 73 6f 20 74 68  LastToken) so th
21ce0 65 20 73 4c 61 73 74 54 6f 6b 65 6e 20 66 69 65  e sLastToken fie
21cf0 6c 64 20 6d 75 73 74 20 62 65 20 74 68 65 0a 20  ld must be the. 
21d00 20 2a 2a 20 66 69 72 73 74 20 66 69 65 6c 64 20   ** first field 
21d10 69 6e 20 74 68 65 20 72 65 63 75 72 73 69 76 65  in the recursive
21d20 20 72 65 67 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a   region..  *****
21d30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21d40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21d50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21d60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21d70 2a 2a 2a 2f 0a 0a 20 20 54 6f 6b 65 6e 20 73 4c  ***/..  Token sL
21d80 61 73 74 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20  astToken;       
21d90 2f 2a 20 54 68 65 20 6c 61 73 74 20 74 6f 6b 65  /* The last toke
21da0 6e 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 79 6e  n parsed */.  yn
21db0 56 61 72 20 6e 56 61 72 3b 20 20 20 20 20 20 20  Var nVar;       
21dc0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
21dd0 72 20 6f 66 20 27 3f 27 20 76 61 72 69 61 62 6c  r of '?' variabl
21de0 65 73 20 73 65 65 6e 20 69 6e 20 74 68 65 20 53  es seen in the S
21df0 51 4c 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 75  QL so far */.  u
21e00 38 20 69 50 6b 53 6f 72 74 4f 72 64 65 72 3b 20  8 iPkSortOrder; 
21e10 20 20 20 20 20 20 20 20 20 2f 2a 20 41 53 43 20           /* ASC 
21e20 6f 72 20 44 45 53 43 20 66 6f 72 20 49 4e 54 45  or DESC for INTE
21e30 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20  GER PRIMARY KEY 
21e40 2a 2f 0a 20 20 75 38 20 65 78 70 6c 61 69 6e 3b  */.  u8 explain;
21e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
21e60 2a 20 54 72 75 65 20 69 66 20 74 68 65 20 45 58  * True if the EX
21e70 50 4c 41 49 4e 20 66 6c 61 67 20 69 73 20 66 6f  PLAIN flag is fo
21e80 75 6e 64 20 6f 6e 20 74 68 65 20 71 75 65 72 79  und on the query
21e90 20 2a 2f 0a 23 69 66 20 21 28 64 65 66 69 6e 65   */.#if !(define
21ea0 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  d(SQLITE_OMIT_VI
21eb0 52 54 55 41 4c 54 41 42 4c 45 29 20 26 26 20 64  RTUALTABLE) && d
21ec0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
21ed0 49 54 5f 41 4c 54 45 52 54 41 42 4c 45 29 29 0a  IT_ALTERTABLE)).
21ee0 20 20 75 38 20 65 50 61 72 73 65 4d 6f 64 65 3b    u8 eParseMode;
21ef0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
21f00 41 52 53 45 5f 4d 4f 44 45 5f 58 58 58 20 63 6f  ARSE_MODE_XXX co
21f10 6e 73 74 61 6e 74 20 2a 2f 0a 23 65 6e 64 69 66  nstant */.#endif
21f20 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
21f30 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
21f40 45 0a 20 20 69 6e 74 20 6e 56 74 61 62 4c 6f 63  E.  int nVtabLoc
21f50 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  k;            /*
21f60 20 4e 75 6d 62 65 72 20 6f 66 20 76 69 72 74 75   Number of virtu
21f70 61 6c 20 74 61 62 6c 65 73 20 74 6f 20 6c 6f 63  al tables to loc
21f80 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e  k */.#endif.  in
21f90 74 20 6e 48 65 69 67 68 74 3b 20 20 20 20 20 20  t nHeight;      
21fa0 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70 72 65          /* Expre
21fb0 73 73 69 6f 6e 20 74 72 65 65 20 68 65 69 67 68  ssion tree heigh
21fc0 74 20 6f 66 20 63 75 72 72 65 6e 74 20 73 75 62  t of current sub
21fd0 2d 73 65 6c 65 63 74 20 2a 2f 0a 23 69 66 6e 64  -select */.#ifnd
21fe0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45  ef SQLITE_OMIT_E
21ff0 58 50 4c 41 49 4e 0a 20 20 69 6e 74 20 61 64 64  XPLAIN.  int add
22000 72 45 78 70 6c 61 69 6e 3b 20 20 20 20 20 20 20  rExplain;       
22010 20 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66     /* Address of
22020 20 63 75 72 72 65 6e 74 20 4f 50 5f 45 78 70 6c   current OP_Expl
22030 61 69 6e 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 65  ain opcode */.#e
22040 6e 64 69 66 0a 20 20 56 4c 69 73 74 20 2a 70 56  ndif.  VList *pV
22050 4c 69 73 74 3b 20 20 20 20 20 20 20 20 20 20 20  List;           
22060 20 2f 2a 20 4d 61 70 70 69 6e 67 20 62 65 74 77   /* Mapping betw
22070 65 65 6e 20 76 61 72 69 61 62 6c 65 20 6e 61 6d  een variable nam
22080 65 73 20 61 6e 64 20 6e 75 6d 62 65 72 73 20 2a  es and numbers *
22090 2f 0a 20 20 56 64 62 65 20 2a 70 52 65 70 72 65  /.  Vdbe *pRepre
220a0 70 61 72 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  pare;         /*
220b0 20 56 4d 20 62 65 69 6e 67 20 72 65 70 72 65 70   VM being reprep
220c0 61 72 65 64 20 28 73 71 6c 69 74 65 33 52 65 70  ared (sqlite3Rep
220d0 72 65 70 61 72 65 28 29 29 20 2a 2f 0a 20 20 63  repare()) */.  c
220e0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 69 6c  onst char *zTail
220f0 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  ;        /* All 
22100 53 51 4c 20 74 65 78 74 20 70 61 73 74 20 74 68  SQL text past th
22110 65 20 6c 61 73 74 20 73 65 6d 69 63 6f 6c 6f 6e  e last semicolon
22120 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 54 61 62   parsed */.  Tab
22130 6c 65 20 2a 70 4e 65 77 54 61 62 6c 65 3b 20 20  le *pNewTable;  
22140 20 20 20 20 20 20 20 2f 2a 20 41 20 74 61 62 6c         /* A tabl
22150 65 20 62 65 69 6e 67 20 63 6f 6e 73 74 72 75 63  e being construc
22160 74 65 64 20 62 79 20 43 52 45 41 54 45 20 54 41  ted by CREATE TA
22170 42 4c 45 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a  BLE */.  Index *
22180 70 4e 65 77 49 6e 64 65 78 3b 20 20 20 20 20 20  pNewIndex;      
22190 20 20 20 2f 2a 20 41 6e 20 69 6e 64 65 78 20 62     /* An index b
221a0 65 69 6e 67 20 63 6f 6e 73 74 72 75 63 74 65 64  eing constructed
221b0 20 62 79 20 43 52 45 41 54 45 20 49 4e 44 45 58   by CREATE INDEX
221c0 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
221d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
221e0 20 41 6c 73 6f 20 75 73 65 64 20 74 6f 20 68 6f   Also used to ho
221f0 6c 64 20 72 65 64 75 6e 64 61 6e 74 20 55 4e 49  ld redundant UNI
22200 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 73 0a  QUE constraints.
22210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22220 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 64              ** d
22230 75 72 69 6e 67 20 61 20 52 45 4e 41 4d 45 20 43  uring a RENAME C
22240 4f 4c 55 4d 4e 20 2a 2f 0a 20 20 54 72 69 67 67  OLUMN */.  Trigg
22250 65 72 20 2a 70 4e 65 77 54 72 69 67 67 65 72 3b  er *pNewTrigger;
22260 20 20 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20       /* Trigger 
22270 75 6e 64 65 72 20 63 6f 6e 73 74 72 75 63 74 20  under construct 
22280 62 79 20 61 20 43 52 45 41 54 45 20 54 52 49 47  by a CREATE TRIG
22290 47 45 52 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  GER */.  const c
222a0 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78  har *zAuthContex
222b0 74 3b 20 2f 2a 20 54 68 65 20 36 74 68 20 70 61  t; /* The 6th pa
222c0 72 61 6d 65 74 65 72 20 74 6f 20 64 62 2d 3e 78  rameter to db->x
222d0 41 75 74 68 20 63 61 6c 6c 62 61 63 6b 73 20 2a  Auth callbacks *
222e0 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
222f0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
22300 4c 45 0a 20 20 54 6f 6b 65 6e 20 73 41 72 67 3b  LE.  Token sArg;
22310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
22320 2a 20 43 6f 6d 70 6c 65 74 65 20 74 65 78 74 20  * Complete text 
22330 6f 66 20 61 20 6d 6f 64 75 6c 65 20 61 72 67 75  of a module argu
22340 6d 65 6e 74 20 2a 2f 0a 20 20 54 61 62 6c 65 20  ment */.  Table 
22350 2a 2a 61 70 56 74 61 62 4c 6f 63 6b 3b 20 20 20  **apVtabLock;   
22360 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
22370 6f 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73  o virtual tables
22380 20 6e 65 65 64 69 6e 67 20 6c 6f 63 6b 69 6e 67   needing locking
22390 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54 61 62   */.#endif.  Tab
223a0 6c 65 20 2a 70 5a 6f 6d 62 69 65 54 61 62 3b 20  le *pZombieTab; 
223b0 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f         /* List o
223c0 66 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20  f Table objects 
223d0 74 6f 20 64 65 6c 65 74 65 20 61 66 74 65 72 20  to delete after 
223e0 63 6f 64 65 20 67 65 6e 20 2a 2f 0a 20 20 54 72  code gen */.  Tr
223f0 69 67 67 65 72 50 72 67 20 2a 70 54 72 69 67 67  iggerPrg *pTrigg
22400 65 72 50 72 67 3b 20 20 2f 2a 20 4c 69 6e 6b 65  erPrg;  /* Linke
22410 64 20 6c 69 73 74 20 6f 66 20 63 6f 64 65 64 20  d list of coded 
22420 74 72 69 67 67 65 72 73 20 2a 2f 0a 20 20 57 69  triggers */.  Wi
22430 74 68 20 2a 70 57 69 74 68 3b 20 20 20 20 20 20  th *pWith;      
22440 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65          /* Curre
22450 6e 74 20 57 49 54 48 20 63 6c 61 75 73 65 2c 20  nt WITH clause, 
22460 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 57 69 74  or NULL */.  Wit
22470 68 20 2a 70 57 69 74 68 54 6f 46 72 65 65 3b 20  h *pWithToFree; 
22480 20 20 20 20 20 20 20 2f 2a 20 46 72 65 65 20 74         /* Free t
22490 68 69 73 20 57 49 54 48 20 6f 62 6a 65 63 74 20  his WITH object 
224a0 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  at the end of th
224b0 65 20 70 61 72 73 65 20 2a 2f 0a 23 69 66 6e 64  e parse */.#ifnd
224c0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
224d0 4c 54 45 52 54 41 42 4c 45 0a 20 20 52 65 6e 61  LTERTABLE.  Rena
224e0 6d 65 54 6f 6b 65 6e 20 2a 70 52 65 6e 61 6d 65  meToken *pRename
224f0 3b 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 73 20  ;     /* Tokens 
22500 73 75 62 6a 65 63 74 20 74 6f 20 72 65 6e 61 6d  subject to renam
22510 69 6e 67 20 62 79 20 41 4c 54 45 52 20 54 41 42  ing by ALTER TAB
22520 4c 45 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a  LE */.#endif.};.
22530 0a 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f 4d  .#define PARSE_M
22540 4f 44 45 5f 4e 4f 52 4d 41 4c 20 20 20 20 20 20  ODE_NORMAL      
22550 20 20 30 0a 23 64 65 66 69 6e 65 20 50 41 52 53    0.#define PARS
22560 45 5f 4d 4f 44 45 5f 44 45 43 4c 41 52 45 5f 56  E_MODE_DECLARE_V
22570 54 41 42 20 20 31 0a 23 64 65 66 69 6e 65 20 50  TAB  1.#define P
22580 41 52 53 45 5f 4d 4f 44 45 5f 52 45 4e 41 4d 45  ARSE_MODE_RENAME
22590 5f 43 4f 4c 55 4d 4e 20 32 0a 23 64 65 66 69 6e  _COLUMN 2.#defin
225a0 65 20 50 41 52 53 45 5f 4d 4f 44 45 5f 52 45 4e  e PARSE_MODE_REN
225b0 41 4d 45 5f 54 41 42 4c 45 20 20 33 0a 0a 2f 2a  AME_TABLE  3../*
225c0 0a 2a 2a 20 53 69 7a 65 73 20 61 6e 64 20 70 6f  .** Sizes and po
225d0 69 6e 74 65 72 73 20 6f 66 20 76 61 72 69 6f 75  inters of variou
225e0 73 20 70 61 72 74 73 20 6f 66 20 74 68 65 20 50  s parts of the P
225f0 61 72 73 65 20 6f 62 6a 65 63 74 2e 0a 2a 2f 0a  arse object..*/.
22600 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f 48 44  #define PARSE_HD
22610 52 5f 53 5a 20 6f 66 66 73 65 74 6f 66 28 50 61  R_SZ offsetof(Pa
22620 72 73 65 2c 61 54 65 6d 70 52 65 67 29 20 2f 2a  rse,aTempReg) /*
22630 20 52 65 63 75 72 73 69 76 65 20 70 61 72 74 20   Recursive part 
22640 77 2f 6f 20 61 43 6f 6c 43 61 63 68 65 2a 2f 0a  w/o aColCache*/.
22650 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f 52 45  #define PARSE_RE
22660 43 55 52 53 45 5f 53 5a 20 6f 66 66 73 65 74 6f  CURSE_SZ offseto
22670 66 28 50 61 72 73 65 2c 73 4c 61 73 74 54 6f 6b  f(Parse,sLastTok
22680 65 6e 29 20 20 20 20 2f 2a 20 52 65 63 75 72 73  en)    /* Recurs
22690 69 76 65 20 70 61 72 74 20 2a 2f 0a 23 64 65 66  ive part */.#def
226a0 69 6e 65 20 50 41 52 53 45 5f 54 41 49 4c 5f 53  ine PARSE_TAIL_S
226b0 5a 20 28 73 69 7a 65 6f 66 28 50 61 72 73 65 29  Z (sizeof(Parse)
226c0 2d 50 41 52 53 45 5f 52 45 43 55 52 53 45 5f 53  -PARSE_RECURSE_S
226d0 5a 29 20 2f 2a 20 4e 6f 6e 2d 72 65 63 75 72 73  Z) /* Non-recurs
226e0 69 76 65 20 70 61 72 74 20 2a 2f 0a 23 64 65 66  ive part */.#def
226f0 69 6e 65 20 50 41 52 53 45 5f 54 41 49 4c 28 58  ine PARSE_TAIL(X
22700 29 20 28 28 28 63 68 61 72 2a 29 28 58 29 29 2b  ) (((char*)(X))+
22710 50 41 52 53 45 5f 52 45 43 55 52 53 45 5f 53 5a  PARSE_RECURSE_SZ
22720 29 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f  )  /* Pointer to
22730 20 74 61 69 6c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20   tail */../*.** 
22740 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 63  Return true if c
22750 75 72 72 65 6e 74 6c 79 20 69 6e 73 69 64 65 20  urrently inside 
22760 61 6e 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61  an sqlite3_decla
22770 72 65 5f 76 74 61 62 28 29 20 63 61 6c 6c 2e 0a  re_vtab() call..
22780 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
22790 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
227a0 4c 45 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f  LE.  #define IN_
227b0 44 45 43 4c 41 52 45 5f 56 54 41 42 20 30 0a 23  DECLARE_VTAB 0.#
227c0 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 49  else.  #define I
227d0 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41 42 20 28  N_DECLARE_VTAB (
227e0 70 50 61 72 73 65 2d 3e 65 50 61 72 73 65 4d 6f  pParse->eParseMo
227f0 64 65 3d 3d 50 41 52 53 45 5f 4d 4f 44 45 5f 44  de==PARSE_MODE_D
22800 45 43 4c 41 52 45 5f 56 54 41 42 29 0a 23 65 6e  ECLARE_VTAB).#en
22810 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64  dif..#if defined
22820 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54  (SQLITE_OMIT_ALT
22830 45 52 54 41 42 4c 45 29 0a 20 20 23 64 65 66 69  ERTABLE).  #defi
22840 6e 65 20 49 4e 5f 52 45 4e 41 4d 45 5f 4f 42 4a  ne IN_RENAME_OBJ
22850 45 43 54 20 30 0a 23 65 6c 73 65 0a 20 20 23 64  ECT 0.#else.  #d
22860 65 66 69 6e 65 20 49 4e 5f 52 45 4e 41 4d 45 5f  efine IN_RENAME_
22870 4f 42 4a 45 43 54 20 28 70 50 61 72 73 65 2d 3e  OBJECT (pParse->
22880 65 50 61 72 73 65 4d 6f 64 65 3e 3d 50 41 52 53  eParseMode>=PARS
22890 45 5f 4d 4f 44 45 5f 52 45 4e 41 4d 45 5f 43 4f  E_MODE_RENAME_CO
228a0 4c 55 4d 4e 29 0a 23 65 6e 64 69 66 0a 0a 23 69  LUMN).#endif..#i
228b0 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
228c0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
228d0 4c 45 29 20 26 26 20 64 65 66 69 6e 65 64 28 53  LE) && defined(S
228e0 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52  QLITE_OMIT_ALTER
228f0 54 41 42 4c 45 29 0a 20 20 23 64 65 66 69 6e 65  TABLE).  #define
22900 20 49 4e 5f 53 50 45 43 49 41 4c 5f 50 41 52 53   IN_SPECIAL_PARS
22910 45 20 30 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  E 0.#else.  #def
22920 69 6e 65 20 49 4e 5f 53 50 45 43 49 41 4c 5f 50  ine IN_SPECIAL_P
22930 41 52 53 45 20 28 70 50 61 72 73 65 2d 3e 65 50  ARSE (pParse->eP
22940 61 72 73 65 4d 6f 64 65 21 3d 50 41 52 53 45 5f  arseMode!=PARSE_
22950 4d 4f 44 45 5f 4e 4f 52 4d 41 4c 29 0a 23 65 6e  MODE_NORMAL).#en
22960 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  dif../*.** An in
22970 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
22980 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
22990 65 20 63 61 6e 20 62 65 20 64 65 63 6c 61 72 65  e can be declare
229a0 64 20 6f 6e 20 61 20 73 74 61 63 6b 20 61 6e 64  d on a stack and
229b0 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61 76 65   used.** to save
229c0 20 74 68 65 20 50 61 72 73 65 2e 7a 41 75 74 68   the Parse.zAuth
229d0 43 6f 6e 74 65 78 74 20 76 61 6c 75 65 20 73 6f  Context value so
229e0 20 74 68 61 74 20 69 74 20 63 61 6e 20 62 65 20   that it can be 
229f0 72 65 73 74 6f 72 65 64 20 6c 61 74 65 72 2e 0a  restored later..
22a00 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 68 43 6f  */.struct AuthCo
22a10 6e 74 65 78 74 20 7b 0a 20 20 63 6f 6e 73 74 20  ntext {.  const 
22a20 63 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65  char *zAuthConte
22a30 78 74 3b 20 20 20 2f 2a 20 50 75 74 20 73 61 76  xt;   /* Put sav
22a40 65 64 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f  ed Parse.zAuthCo
22a50 6e 74 65 78 74 20 68 65 72 65 20 2a 2f 0a 20 20  ntext here */.  
22a60 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20  Parse *pParse;  
22a70 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
22a80 68 65 20 50 61 72 73 65 20 73 74 72 75 63 74 75  he Parse structu
22a90 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  re */.};../*.** 
22aa0 42 69 74 66 69 65 6c 64 20 66 6c 61 67 73 20 66  Bitfield flags f
22ab0 6f 72 20 50 35 20 76 61 6c 75 65 20 69 6e 20 76  or P5 value in v
22ac0 61 72 69 6f 75 73 20 6f 70 63 6f 64 65 73 2e 0a  arious opcodes..
22ad0 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73  **.** Value cons
22ae0 74 72 61 69 6e 74 73 20 28 65 6e 66 6f 72 63 65  traints (enforce
22af0 64 20 76 69 61 20 61 73 73 65 72 74 28 29 29 3a  d via assert()):
22b00 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 4c 45  .**    OPFLAG_LE
22b10 4e 47 54 48 41 52 47 20 20 20 20 3d 3d 20 53 51  NGTHARG    == SQ
22b20 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48  LITE_FUNC_LENGTH
22b30 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 54 59  .**    OPFLAG_TY
22b40 50 45 4f 46 41 52 47 20 20 20 20 3d 3d 20 53 51  PEOFARG    == SQ
22b50 4c 49 54 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46  LITE_FUNC_TYPEOF
22b60 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 42 55  .**    OPFLAG_BU
22b70 4c 4b 43 53 52 20 20 20 20 20 20 3d 3d 20 42 54  LKCSR      == BT
22b80 52 45 45 5f 42 55 4c 4b 4c 4f 41 44 0a 2a 2a 20  REE_BULKLOAD.** 
22b90 20 20 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51     OPFLAG_SEEKEQ
22ba0 20 20 20 20 20 20 20 3d 3d 20 42 54 52 45 45 5f         == BTREE_
22bb0 53 45 45 4b 5f 45 51 0a 2a 2a 20 20 20 20 4f 50  SEEK_EQ.**    OP
22bc0 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 20 20  FLAG_FORDELETE  
22bd0 20 20 3d 3d 20 42 54 52 45 45 5f 46 4f 52 44 45    == BTREE_FORDE
22be0 4c 45 54 45 0a 2a 2a 20 20 20 20 4f 50 46 4c 41  LETE.**    OPFLA
22bf0 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 20 3d  G_SAVEPOSITION =
22c00 3d 20 42 54 52 45 45 5f 53 41 56 45 50 4f 53 49  = BTREE_SAVEPOSI
22c10 54 49 4f 4e 0a 2a 2a 20 20 20 20 4f 50 46 4c 41  TION.**    OPFLA
22c20 47 5f 41 55 58 44 45 4c 45 54 45 20 20 20 20 3d  G_AUXDELETE    =
22c30 3d 20 42 54 52 45 45 5f 41 55 58 44 45 4c 45 54  = BTREE_AUXDELET
22c40 45 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  E.*/.#define OPF
22c50 4c 41 47 5f 4e 43 48 41 4e 47 45 20 20 20 20 20  LAG_NCHANGE     
22c60 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f    0x01    /* OP_
22c70 49 6e 73 65 72 74 3a 20 53 65 74 20 74 6f 20 75  Insert: Set to u
22c80 70 64 61 74 65 20 64 62 2d 3e 6e 43 68 61 6e 67  pdate db->nChang
22c90 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  e */.           
22ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22cb0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 73            /* Als
22cc0 6f 20 75 73 65 64 20 69 6e 20 50 32 20 28 6e 6f  o used in P2 (no
22cd0 74 20 50 35 29 20 6f 66 20 4f 50 5f 44 65 6c 65  t P5) of OP_Dele
22ce0 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  te */.#define OP
22cf0 46 4c 41 47 5f 4e 4f 43 48 4e 47 20 20 20 20 20  FLAG_NOCHNG     
22d00 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50     0x01    /* OP
22d10 5f 56 43 6f 6c 75 6d 6e 20 6e 6f 63 68 61 6e 67  _VColumn nochang
22d20 65 20 66 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a  e for UPDATE */.
22d30 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 45  #define OPFLAG_E
22d40 50 48 45 4d 20 20 20 20 20 20 20 20 20 30 78 30  PHEM         0x0
22d50 31 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d  1    /* OP_Colum
22d60 6e 3a 20 45 70 68 65 6d 65 72 61 6c 20 6f 75 74  n: Ephemeral out
22d70 70 75 74 20 69 73 20 6f 6b 20 2a 2f 0a 23 64 65  put is ok */.#de
22d80 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54  fine OPFLAG_LAST
22d90 52 4f 57 49 44 20 20 20 20 20 30 78 32 30 20 20  ROWID     0x20  
22da0 20 20 2f 2a 20 53 65 74 20 74 6f 20 75 70 64 61    /* Set to upda
22db0 74 65 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64  te db->lastRowid
22dc0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
22dd0 41 47 5f 49 53 55 50 44 41 54 45 20 20 20 20 20  AG_ISUPDATE     
22de0 20 30 78 30 34 20 20 20 20 2f 2a 20 54 68 69 73   0x04    /* This
22df0 20 4f 50 5f 49 6e 73 65 72 74 20 69 73 20 61 6e   OP_Insert is an
22e00 20 73 71 6c 20 55 50 44 41 54 45 20 2a 2f 0a 23   sql UPDATE */.#
22e10 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 41 50  define OPFLAG_AP
22e20 50 45 4e 44 20 20 20 20 20 20 20 20 30 78 30 38  PEND        0x08
22e30 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20 6c      /* This is l
22e40 69 6b 65 6c 79 20 74 6f 20 62 65 20 61 6e 20 61  ikely to be an a
22e50 70 70 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65  ppend */.#define
22e60 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52   OPFLAG_USESEEKR
22e70 45 53 55 4c 54 20 30 78 31 30 20 20 20 20 2f 2a  ESULT 0x10    /*
22e80 20 54 72 79 20 74 6f 20 61 76 6f 69 64 20 61 20   Try to avoid a 
22e90 73 65 65 6b 20 69 6e 20 42 74 72 65 65 49 6e 73  seek in BtreeIns
22ea0 65 72 74 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65  ert() */.#define
22eb0 20 4f 50 46 4c 41 47 5f 49 53 4e 4f 4f 50 20 20   OPFLAG_ISNOOP  
22ec0 20 20 20 20 20 20 30 78 34 30 20 20 20 20 2f 2a        0x40    /*
22ed0 20 4f 50 5f 44 65 6c 65 74 65 20 64 6f 65 73 20   OP_Delete does 
22ee0 70 72 65 2d 75 70 64 61 74 65 2d 68 6f 6f 6b 20  pre-update-hook 
22ef0 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  only */.#define 
22f00 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47  OPFLAG_LENGTHARG
22f10 20 20 20 20 20 30 78 34 30 20 20 20 20 2f 2a 20       0x40    /* 
22f20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75  OP_Column only u
22f30 73 65 64 20 66 6f 72 20 6c 65 6e 67 74 68 28 29  sed for length()
22f40 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
22f50 41 47 5f 54 59 50 45 4f 46 41 52 47 20 20 20 20  AG_TYPEOFARG    
22f60 20 30 78 38 30 20 20 20 20 2f 2a 20 4f 50 5f 43   0x80    /* OP_C
22f70 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20  olumn only used 
22f80 66 6f 72 20 74 79 70 65 6f 66 28 29 20 2a 2f 0a  for typeof() */.
22f90 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 42  #define OPFLAG_B
22fa0 55 4c 4b 43 53 52 20 20 20 20 20 20 20 30 78 30  ULKCSR       0x0
22fb0 31 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a  1    /* OP_Open*
22fc0 2a 20 75 73 65 64 20 74 6f 20 6f 70 65 6e 20 62  * used to open b
22fd0 75 6c 6b 20 63 75 72 73 6f 72 20 2a 2f 0a 23 64  ulk cursor */.#d
22fe0 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 53 45 45  efine OPFLAG_SEE
22ff0 4b 45 51 20 20 20 20 20 20 20 20 30 78 30 32 20  KEQ        0x02 
23000 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20     /* OP_Open** 
23010 63 75 72 73 6f 72 20 75 73 65 73 20 45 51 20 73  cursor uses EQ s
23020 65 65 6b 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66  eek only */.#def
23030 69 6e 65 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45  ine OPFLAG_FORDE
23040 4c 45 54 45 20 20 20 20 20 30 78 30 38 20 20 20  LETE     0x08   
23050 20 2f 2a 20 4f 50 5f 4f 70 65 6e 20 73 68 6f 75   /* OP_Open shou
23060 6c 64 20 75 73 65 20 42 54 52 45 45 5f 46 4f 52  ld use BTREE_FOR
23070 44 45 4c 45 54 45 20 2a 2f 0a 23 64 65 66 69 6e  DELETE */.#defin
23080 65 20 4f 50 46 4c 41 47 5f 50 32 49 53 52 45 47  e OPFLAG_P2ISREG
23090 20 20 20 20 20 20 20 30 78 31 30 20 20 20 20 2f         0x10    /
230a0 2a 20 50 32 20 74 6f 20 4f 50 5f 4f 70 65 6e 2a  * P2 to OP_Open*
230b0 2a 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20  * is a register 
230c0 6e 75 6d 62 65 72 20 2a 2f 0a 23 64 65 66 69 6e  number */.#defin
230d0 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45  e OPFLAG_PERMUTE
230e0 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f         0x01    /
230f0 2a 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 75 73  * OP_Compare: us
23100 65 20 74 68 65 20 70 65 72 6d 75 74 61 74 69 6f  e the permutatio
23110 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  n */.#define OPF
23120 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e  LAG_SAVEPOSITION
23130 20 20 30 78 30 32 20 20 20 20 2f 2a 20 4f 50 5f    0x02    /* OP_
23140 44 65 6c 65 74 65 2f 49 6e 73 65 72 74 3a 20 73  Delete/Insert: s
23150 61 76 65 20 63 75 72 73 6f 72 20 70 6f 73 20 2a  ave cursor pos *
23160 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
23170 5f 41 55 58 44 45 4c 45 54 45 20 20 20 20 20 30  _AUXDELETE     0
23180 78 30 34 20 20 20 20 2f 2a 20 4f 50 5f 44 65 6c  x04    /* OP_Del
23190 65 74 65 3a 20 69 6e 64 65 78 20 69 6e 20 61 20  ete: index in a 
231a0 44 45 4c 45 54 45 20 6f 70 20 2a 2f 0a 23 64 65  DELETE op */.#de
231b0 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4e 4f 43 48  fine OPFLAG_NOCH
231c0 4e 47 5f 4d 41 47 49 43 20 20 30 78 36 64 20 20  NG_MAGIC  0x6d  
231d0 20 20 2f 2a 20 4f 50 5f 4d 61 6b 65 52 65 63 6f    /* OP_MakeReco
231e0 72 64 3a 20 73 65 72 69 61 6c 74 79 70 65 20 31  rd: serialtype 1
231f0 30 20 69 73 20 6f 6b 20 2a 2f 0a 0a 2f 2a 0a 20  0 is ok */../*. 
23200 2a 20 45 61 63 68 20 74 72 69 67 67 65 72 20 70  * Each trigger p
23210 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20 64 61  resent in the da
23220 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 69 73  tabase schema is
23230 20 73 74 6f 72 65 64 20 61 73 20 61 6e 20 69 6e   stored as an in
23240 73 74 61 6e 63 65 20 6f 66 0a 20 2a 20 73 74 72  stance of. * str
23250 75 63 74 20 54 72 69 67 67 65 72 2e 0a 20 2a 0a  uct Trigger.. *.
23260 20 2a 20 50 6f 69 6e 74 65 72 73 20 74 6f 20 69   * Pointers to i
23270 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 74 72 75  nstances of stru
23280 63 74 20 54 72 69 67 67 65 72 20 61 72 65 20 73  ct Trigger are s
23290 74 6f 72 65 64 20 69 6e 20 74 77 6f 20 77 61 79  tored in two way
232a0 73 2e 0a 20 2a 20 31 2e 20 49 6e 20 74 68 65 20  s.. * 1. In the 
232b0 22 74 72 69 67 48 61 73 68 22 20 68 61 73 68 20  "trigHash" hash 
232c0 74 61 62 6c 65 20 28 70 61 72 74 20 6f 66 20 74  table (part of t
232d0 68 65 20 73 71 6c 69 74 65 33 2a 20 74 68 61 74  he sqlite3* that
232e0 20 72 65 70 72 65 73 65 6e 74 73 20 74 68 65 0a   represents the.
232f0 20 2a 20 20 20 20 64 61 74 61 62 61 73 65 29 2e   *    database).
23300 20 54 68 69 73 20 61 6c 6c 6f 77 73 20 54 72 69   This allows Tri
23310 67 67 65 72 20 73 74 72 75 63 74 75 72 65 73 20  gger structures 
23320 74 6f 20 62 65 20 72 65 74 72 69 65 76 65 64 20  to be retrieved 
23330 62 79 20 6e 61 6d 65 2e 0a 20 2a 20 32 2e 20 41  by name.. * 2. A
23340 6c 6c 20 74 72 69 67 67 65 72 73 20 61 73 73 6f  ll triggers asso
23350 63 69 61 74 65 64 20 77 69 74 68 20 61 20 73 69  ciated with a si
23360 6e 67 6c 65 20 74 61 62 6c 65 20 66 6f 72 6d 20  ngle table form 
23370 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 2c 20 75  a linked list, u
23380 73 69 6e 67 20 74 68 65 0a 20 2a 20 20 20 20 70  sing the. *    p
23390 4e 65 78 74 20 6d 65 6d 62 65 72 20 6f 66 20 73  Next member of s
233a0 74 72 75 63 74 20 54 72 69 67 67 65 72 2e 20 41  truct Trigger. A
233b0 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
233c0 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66  first element of
233d0 20 74 68 65 0a 20 2a 20 20 20 20 6c 69 6e 6b 65   the. *    linke
233e0 64 20 6c 69 73 74 20 69 73 20 73 74 6f 72 65 64  d list is stored
233f0 20 61 73 20 74 68 65 20 22 70 54 72 69 67 67 65   as the "pTrigge
23400 72 22 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65  r" member of the
23410 20 61 73 73 6f 63 69 61 74 65 64 0a 20 2a 20 20   associated. *  
23420 20 20 73 74 72 75 63 74 20 54 61 62 6c 65 2e 0a    struct Table..
23430 20 2a 0a 20 2a 20 54 68 65 20 22 73 74 65 70 5f   *. * The "step_
23440 6c 69 73 74 22 20 6d 65 6d 62 65 72 20 70 6f 69  list" member poi
23450 6e 74 73 20 74 6f 20 74 68 65 20 66 69 72 73 74  nts to the first
23460 20 65 6c 65 6d 65 6e 74 20 6f 66 20 61 20 6c 69   element of a li
23470 6e 6b 65 64 20 6c 69 73 74 0a 20 2a 20 63 6f 6e  nked list. * con
23480 74 61 69 6e 69 6e 67 20 74 68 65 20 53 51 4c 20  taining the SQL 
23490 73 74 61 74 65 6d 65 6e 74 73 20 73 70 65 63 69  statements speci
234a0 66 69 65 64 20 61 73 20 74 68 65 20 74 72 69 67  fied as the trig
234b0 67 65 72 20 70 72 6f 67 72 61 6d 2e 0a 20 2a 2f  ger program.. */
234c0 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20  .struct Trigger 
234d0 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  {.  char *zName;
234e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
234f0 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  he name of the t
23500 72 69 67 67 65 72 20 20 20 20 20 20 20 20 20 20  rigger          
23510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f                */
23520 0a 20 20 63 68 61 72 20 2a 74 61 62 6c 65 3b 20  .  char *table; 
23530 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
23540 65 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20  e table or view 
23550 74 6f 20 77 68 69 63 68 20 74 68 65 20 74 72 69  to which the tri
23560 67 67 65 72 20 61 70 70 6c 69 65 73 20 2a 2f 0a  gger applies */.
23570 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20    u8 op;        
23580 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65            /* One
23590 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54   of TK_DELETE, T
235a0 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53  K_UPDATE, TK_INS
235b0 45 52 54 20 20 20 20 20 20 20 20 20 2a 2f 0a 20  ERT         */. 
235c0 20 75 38 20 74 72 5f 74 6d 3b 20 20 20 20 20 20   u8 tr_tm;      
235d0 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20           /* One 
235e0 6f 66 20 54 52 49 47 47 45 52 5f 42 45 46 4f 52  of TRIGGER_BEFOR
235f0 45 2c 20 54 52 49 47 47 45 52 5f 41 46 54 45 52  E, TRIGGER_AFTER
23600 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65   */.  Expr *pWhe
23610 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  n;            /*
23620 20 54 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65   The WHEN clause
23630 20 6f 66 20 74 68 65 20 65 78 70 72 65 73 73 69   of the expressi
23640 6f 6e 20 28 6d 61 79 20 62 65 20 4e 55 4c 4c 29  on (may be NULL)
23650 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70 43   */.  IdList *pC
23660 6f 6c 75 6d 6e 73 3b 20 20 20 20 20 20 20 2f 2a  olumns;       /*
23670 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 55   If this is an U
23680 50 44 41 54 45 20 4f 46 20 3c 63 6f 6c 75 6d 6e  PDATE OF <column
23690 2d 6c 69 73 74 3e 20 74 72 69 67 67 65 72 2c 0a  -list> trigger,.
236a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
236b0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
236c0 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 69   <column-list> i
236d0 73 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f  s stored here */
236e0 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65  .  Schema *pSche
236f0 6d 61 3b 20 20 20 20 20 20 20 20 2f 2a 20 53 63  ma;        /* Sc
23700 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20  hema containing 
23710 74 68 65 20 74 72 69 67 67 65 72 20 2a 2f 0a 20  the trigger */. 
23720 20 53 63 68 65 6d 61 20 2a 70 54 61 62 53 63 68   Schema *pTabSch
23730 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63 68 65  ema;     /* Sche
23740 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  ma containing th
23750 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54 72 69  e table */.  Tri
23760 67 67 65 72 53 74 65 70 20 2a 73 74 65 70 5f 6c  ggerStep *step_l
23770 69 73 74 3b 20 2f 2a 20 4c 69 6e 6b 20 6c 69 73  ist; /* Link lis
23780 74 20 6f 66 20 74 72 69 67 67 65 72 20 70 72 6f  t of trigger pro
23790 67 72 61 6d 20 73 74 65 70 73 20 20 20 20 20 20  gram steps      
237a0 20 20 20 20 20 20 20 2a 2f 0a 20 20 54 72 69 67         */.  Trig
237b0 67 65 72 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  ger *pNext;     
237c0 20 20 20 20 2f 2a 20 4e 65 78 74 20 74 72 69 67      /* Next trig
237d0 67 65 72 20 61 73 73 6f 63 69 61 74 65 64 20 77  ger associated w
237e0 69 74 68 20 74 68 65 20 74 61 62 6c 65 20 2a 2f  ith the table */
237f0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 74 72 69  .};../*.** A tri
23800 67 67 65 72 20 69 73 20 65 69 74 68 65 72 20 61  gger is either a
23810 20 42 45 46 4f 52 45 20 6f 72 20 61 6e 20 41 46   BEFORE or an AF
23820 54 45 52 20 74 72 69 67 67 65 72 2e 20 20 54 68  TER trigger.  Th
23830 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6e 73  e following cons
23840 74 61 6e 74 73 0a 2a 2a 20 64 65 74 65 72 6d 69  tants.** determi
23850 6e 65 20 77 68 69 63 68 2e 0a 2a 2a 0a 2a 2a 20  ne which..**.** 
23860 49 66 20 74 68 65 72 65 20 61 72 65 20 6d 75 6c  If there are mul
23870 74 69 70 6c 65 20 74 72 69 67 67 65 72 73 2c 20  tiple triggers, 
23880 79 6f 75 20 6d 69 67 68 74 20 6f 66 20 73 6f 6d  you might of som
23890 65 20 42 45 46 4f 52 45 20 61 6e 64 20 73 6f 6d  e BEFORE and som
238a0 65 20 41 46 54 45 52 2e 0a 2a 2a 20 49 6e 20 74  e AFTER..** In t
238b0 68 61 74 20 63 61 73 65 73 2c 20 74 68 65 20 63  hat cases, the c
238c0 6f 6e 73 74 61 6e 74 73 20 62 65 6c 6f 77 20 63  onstants below c
238d0 61 6e 20 62 65 20 4f 52 65 64 20 74 6f 67 65 74  an be ORed toget
238e0 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  her..*/.#define 
238f0 54 52 49 47 47 45 52 5f 42 45 46 4f 52 45 20 20  TRIGGER_BEFORE  
23900 31 0a 23 64 65 66 69 6e 65 20 54 52 49 47 47 45  1.#define TRIGGE
23910 52 5f 41 46 54 45 52 20 20 20 32 0a 0a 2f 2a 0a  R_AFTER   2../*.
23920 20 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f   * An instance o
23930 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  f struct Trigger
23940 53 74 65 70 20 69 73 20 75 73 65 64 20 74 6f 20  Step is used to 
23950 73 74 6f 72 65 20 61 20 73 69 6e 67 6c 65 20 53  store a single S
23960 51 4c 20 73 74 61 74 65 6d 65 6e 74 0a 20 2a 20  QL statement. * 
23970 74 68 61 74 20 69 73 20 61 20 70 61 72 74 20 6f  that is a part o
23980 66 20 61 20 74 72 69 67 67 65 72 2d 70 72 6f 67  f a trigger-prog
23990 72 61 6d 2e 0a 20 2a 0a 20 2a 20 49 6e 73 74 61  ram.. *. * Insta
239a0 6e 63 65 73 20 6f 66 20 73 74 72 75 63 74 20 54  nces of struct T
239b0 72 69 67 67 65 72 53 74 65 70 20 61 72 65 20 73  riggerStep are s
239c0 74 6f 72 65 64 20 69 6e 20 61 20 73 69 6e 67 6c  tored in a singl
239d0 79 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28 6c  y linked list (l
239e0 69 6e 6b 65 64 0a 20 2a 20 75 73 69 6e 67 20 74  inked. * using t
239f0 68 65 20 22 70 4e 65 78 74 22 20 6d 65 6d 62 65  he "pNext" membe
23a00 72 29 20 72 65 66 65 72 65 6e 63 65 64 20 62 79  r) referenced by
23a10 20 74 68 65 20 22 73 74 65 70 5f 6c 69 73 74 22   the "step_list"
23a20 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 0a 20   member of the. 
23a30 2a 20 61 73 73 6f 63 69 61 74 65 64 20 73 74 72  * associated str
23a40 75 63 74 20 54 72 69 67 67 65 72 20 69 6e 73 74  uct Trigger inst
23a50 61 6e 63 65 2e 20 54 68 65 20 66 69 72 73 74 20  ance. The first 
23a60 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 6c  element of the l
23a70 69 6e 6b 65 64 20 6c 69 73 74 20 69 73 0a 20 2a  inked list is. *
23a80 20 74 68 65 20 66 69 72 73 74 20 73 74 65 70 20   the first step 
23a90 6f 66 20 74 68 65 20 74 72 69 67 67 65 72 2d 70  of the trigger-p
23aa0 72 6f 67 72 61 6d 2e 0a 20 2a 0a 20 2a 20 54 68  rogram.. *. * Th
23ab0 65 20 22 6f 70 22 20 6d 65 6d 62 65 72 20 69 6e  e "op" member in
23ac0 64 69 63 61 74 65 73 20 77 68 65 74 68 65 72 20  dicates whether 
23ad0 74 68 69 73 20 69 73 20 61 20 22 44 45 4c 45 54  this is a "DELET
23ae0 45 22 2c 20 22 49 4e 53 45 52 54 22 2c 20 22 55  E", "INSERT", "U
23af0 50 44 41 54 45 22 20 6f 72 0a 20 2a 20 22 53 45  PDATE" or. * "SE
23b00 4c 45 43 54 22 20 73 74 61 74 65 6d 65 6e 74 2e  LECT" statement.
23b10 20 54 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66   The meanings of
23b20 20 74 68 65 20 6f 74 68 65 72 20 6d 65 6d 62 65   the other membe
23b30 72 73 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  rs is determined
23b40 20 62 79 20 74 68 65 0a 20 2a 20 76 61 6c 75 65   by the. * value
23b50 20 6f 66 20 22 6f 70 22 20 61 73 20 66 6f 6c 6c   of "op" as foll
23b60 6f 77 73 3a 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d  ows:. *. * (op =
23b70 3d 20 54 4b 5f 49 4e 53 45 52 54 29 0a 20 2a 20  = TK_INSERT). * 
23b80 6f 72 63 6f 6e 66 20 20 20 20 2d 3e 20 73 74 6f  orconf    -> sto
23b90 72 65 73 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c  res the ON CONFL
23ba0 49 43 54 20 61 6c 67 6f 72 69 74 68 6d 0a 20 2a  ICT algorithm. *
23bb0 20 70 53 65 6c 65 63 74 20 20 20 2d 3e 20 49 66   pSelect   -> If
23bc0 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45   this is an INSE
23bd0 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 53 45 4c 45  RT INTO ... SELE
23be0 43 54 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74  CT ... statement
23bf0 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20 20 20 20  , then. *       
23c00 20 20 20 20 20 20 20 74 68 69 73 20 73 74 6f 72         this stor
23c10 65 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  es a pointer to 
23c20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
23c30 6d 65 6e 74 2e 20 4f 74 68 65 72 77 69 73 65 20  ment. Otherwise 
23c40 4e 55 4c 4c 2e 0a 20 2a 20 7a 54 61 72 67 65 74  NULL.. * zTarget
23c50 20 20 20 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e     -> Dequoted n
23c60 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
23c70 20 74 6f 20 69 6e 73 65 72 74 20 69 6e 74 6f 2e   to insert into.
23c80 0a 20 2a 20 70 45 78 70 72 4c 69 73 74 20 2d 3e  . * pExprList ->
23c90 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 49   If this is an I
23ca0 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 56  NSERT INTO ... V
23cb0 41 4c 55 45 53 20 2e 2e 2e 20 73 74 61 74 65 6d  ALUES ... statem
23cc0 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20  ent, then. *    
23cd0 20 20 20 20 20 20 20 20 20 20 74 68 69 73 20 73            this s
23ce0 74 6f 72 65 73 20 76 61 6c 75 65 73 20 74 6f 20  tores values to 
23cf0 62 65 20 69 6e 73 65 72 74 65 64 2e 20 4f 74 68  be inserted. Oth
23d00 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20  erwise NULL.. * 
23d10 70 49 64 4c 69 73 74 20 20 20 2d 3e 20 49 66 20  pIdList   -> If 
23d20 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52  this is an INSER
23d30 54 20 49 4e 54 4f 20 2e 2e 2e 20 28 3c 63 6f 6c  T INTO ... (<col
23d40 75 6d 6e 2d 6e 61 6d 65 73 3e 29 20 56 41 4c 55  umn-names>) VALU
23d50 45 53 20 2e 2e 2e 0a 20 2a 20 20 20 20 20 20 20  ES .... *       
23d60 20 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74         statement
23d70 2c 20 74 68 65 6e 20 74 68 69 73 20 73 74 6f 72  , then this stor
23d80 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 2d 6e 61  es the column-na
23d90 6d 65 73 20 74 6f 20 62 65 0a 20 2a 20 20 20 20  mes to be. *    
23da0 20 20 20 20 20 20 20 20 20 20 69 6e 73 65 72 74            insert
23db0 65 64 20 69 6e 74 6f 2e 0a 20 2a 0a 20 2a 20 28  ed into.. *. * (
23dc0 6f 70 20 3d 3d 20 54 4b 5f 44 45 4c 45 54 45 29  op == TK_DELETE)
23dd0 0a 20 2a 20 7a 54 61 72 67 65 74 20 20 20 2d 3e  . * zTarget   ->
23de0 20 44 65 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f   Dequoted name o
23df0 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 64  f the table to d
23e00 65 6c 65 74 65 20 66 72 6f 6d 2e 0a 20 2a 20 70  elete from.. * p
23e10 57 68 65 72 65 20 20 20 20 2d 3e 20 54 68 65 20  Where    -> The 
23e20 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20  WHERE clause of 
23e30 74 68 65 20 44 45 4c 45 54 45 20 73 74 61 74 65  the DELETE state
23e40 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69 73 20 73  ment if one is s
23e50 70 65 63 69 66 69 65 64 2e 0a 20 2a 20 20 20 20  pecified.. *    
23e60 20 20 20 20 20 20 20 20 20 20 4f 74 68 65 72 77            Otherw
23e70 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 0a 20 2a 20  ise NULL.. *. * 
23e80 28 6f 70 20 3d 3d 20 54 4b 5f 55 50 44 41 54 45  (op == TK_UPDATE
23e90 29 0a 20 2a 20 7a 54 61 72 67 65 74 20 20 20 2d  ). * zTarget   -
23ea0 3e 20 44 65 71 75 6f 74 65 64 20 6e 61 6d 65 20  > Dequoted name 
23eb0 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20  of the table to 
23ec0 75 70 64 61 74 65 2e 0a 20 2a 20 70 57 68 65 72  update.. * pWher
23ed0 65 20 20 20 20 2d 3e 20 54 68 65 20 57 48 45 52  e    -> The WHER
23ee0 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20  E clause of the 
23ef0 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
23f00 20 69 66 20 6f 6e 65 20 69 73 20 73 70 65 63 69   if one is speci
23f10 66 69 65 64 2e 0a 20 2a 20 20 20 20 20 20 20 20  fied.. *        
23f20 20 20 20 20 20 20 4f 74 68 65 72 77 69 73 65 20        Otherwise 
23f30 4e 55 4c 4c 2e 0a 20 2a 20 70 45 78 70 72 4c 69  NULL.. * pExprLi
23f40 73 74 20 2d 3e 20 41 20 6c 69 73 74 20 6f 66 20  st -> A list of 
23f50 74 68 65 20 63 6f 6c 75 6d 6e 73 20 74 6f 20 75  the columns to u
23f60 70 64 61 74 65 20 61 6e 64 20 74 68 65 20 65 78  pdate and the ex
23f70 70 72 65 73 73 69 6f 6e 73 20 74 6f 20 75 70 64  pressions to upd
23f80 61 74 65 0a 20 2a 20 20 20 20 20 20 20 20 20 20  ate. *          
23f90 20 20 20 20 74 68 65 6d 20 74 6f 2e 20 53 65 65      them to. See
23fa0 20 73 71 6c 69 74 65 33 55 70 64 61 74 65 28 29   sqlite3Update()
23fb0 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f   documentation o
23fc0 66 20 22 70 43 68 61 6e 67 65 73 22 0a 20 2a 20  f "pChanges". * 
23fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72 67               arg
23fe0 75 6d 65 6e 74 2e 0a 20 2a 0a 20 2a 2f 0a 73 74  ument.. *. */.st
23ff0 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70  ruct TriggerStep
24000 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20   {.  u8 op;     
24010 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65            /* One
24020 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54   of TK_DELETE, T
24030 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53  K_UPDATE, TK_INS
24040 45 52 54 2c 20 54 4b 5f 53 45 4c 45 43 54 20 2a  ERT, TK_SELECT *
24050 2f 0a 20 20 75 38 20 6f 72 63 6f 6e 66 3b 20 20  /.  u8 orconf;  
24060 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f 52           /* OE_R
24070 6f 6c 6c 62 61 63 6b 20 65 74 63 2e 20 2a 2f 0a  ollback etc. */.
24080 20 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67    Trigger *pTrig
24090 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74 72  ;      /* The tr
240a0 69 67 67 65 72 20 74 68 61 74 20 74 68 69 73 20  igger that this 
240b0 73 74 65 70 20 69 73 20 61 20 70 61 72 74 20 6f  step is a part o
240c0 66 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70  f */.  Select *p
240d0 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 53  Select;     /* S
240e0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
240f0 6f 72 20 52 48 53 20 6f 66 20 49 4e 53 45 52 54  or RHS of INSERT
24100 20 49 4e 54 4f 20 53 45 4c 45 43 54 20 2e 2e 2e   INTO SELECT ...
24110 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 61 72   */.  char *zTar
24120 67 65 74 3b 20 20 20 20 20 20 20 2f 2a 20 54 61  get;       /* Ta
24130 72 67 65 74 20 74 61 62 6c 65 20 66 6f 72 20 44  rget table for D
24140 45 4c 45 54 45 2c 20 55 50 44 41 54 45 2c 20 49  ELETE, UPDATE, I
24150 4e 53 45 52 54 20 2a 2f 0a 20 20 45 78 70 72 20  NSERT */.  Expr 
24160 2a 70 57 68 65 72 65 3b 20 20 20 20 20 20 20 20  *pWhere;        
24170 2f 2a 20 54 68 65 20 57 48 45 52 45 20 63 6c 61  /* The WHERE cla
24180 75 73 65 20 66 6f 72 20 44 45 4c 45 54 45 20 6f  use for DELETE o
24190 72 20 55 50 44 41 54 45 20 73 74 65 70 73 20 2a  r UPDATE steps *
241a0 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45  /.  ExprList *pE
241b0 78 70 72 4c 69 73 74 3b 20 2f 2a 20 53 45 54 20  xprList; /* SET 
241c0 63 6c 61 75 73 65 20 66 6f 72 20 55 50 44 41 54  clause for UPDAT
241d0 45 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70  E */.  IdList *p
241e0 49 64 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 43  IdList;     /* C
241f0 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 66 6f 72 20  olumn names for 
24200 49 4e 53 45 52 54 20 2a 2f 0a 20 20 55 70 73 65  INSERT */.  Upse
24210 72 74 20 2a 70 55 70 73 65 72 74 3b 20 20 20 20  rt *pUpsert;    
24220 20 2f 2a 20 55 70 73 65 72 74 20 63 6c 61 75 73   /* Upsert claus
24230 65 73 20 6f 6e 20 61 6e 20 49 4e 53 45 52 54 20  es on an INSERT 
24240 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 53 70 61 6e  */.  char *zSpan
24250 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 72 69  ;         /* Ori
24260 67 69 6e 61 6c 20 53 51 4c 20 74 65 78 74 20 6f  ginal SQL text o
24270 66 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a  f this command *
24280 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  /.  TriggerStep 
24290 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74  *pNext;  /* Next
242a0 20 69 6e 20 74 68 65 20 6c 69 6e 6b 2d 6c 69 73   in the link-lis
242b0 74 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74  t */.  TriggerSt
242c0 65 70 20 2a 70 4c 61 73 74 3b 20 20 2f 2a 20 4c  ep *pLast;  /* L
242d0 61 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20 6c  ast element in l
242e0 69 6e 6b 2d 6c 69 73 74 2e 20 56 61 6c 69 64 20  ink-list. Valid 
242f0 66 6f 72 20 31 73 74 20 65 6c 65 6d 20 6f 6e 6c  for 1st elem onl
24300 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  y */.};../*.** T
24310 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
24320 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20  ucture contains 
24330 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64  information used
24340 20 62 79 20 74 68 65 20 73 71 6c 69 74 65 46 69   by the sqliteFi
24350 78 2e 2e 2e 0a 2a 2a 20 72 6f 75 74 69 6e 65 73  x....** routines
24360 20 61 73 20 74 68 65 79 20 77 61 6c 6b 20 74 68   as they walk th
24370 65 20 70 61 72 73 65 20 74 72 65 65 20 74 6f 20  e parse tree to 
24380 6d 61 6b 65 20 64 61 74 61 62 61 73 65 20 72 65  make database re
24390 66 65 72 65 6e 63 65 73 0a 2a 2a 20 65 78 70 6c  ferences.** expl
243a0 69 63 69 74 2e 0a 2a 2f 0a 74 79 70 65 64 65 66  icit..*/.typedef
243b0 20 73 74 72 75 63 74 20 44 62 46 69 78 65 72 20   struct DbFixer 
243c0 44 62 46 69 78 65 72 3b 0a 73 74 72 75 63 74 20  DbFixer;.struct 
243d0 44 62 46 69 78 65 72 20 7b 0a 20 20 50 61 72 73  DbFixer {.  Pars
243e0 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20  e *pParse;      
243f0 2f 2a 20 54 68 65 20 70 61 72 73 69 6e 67 20 63  /* The parsing c
24400 6f 6e 74 65 78 74 2e 20 20 45 72 72 6f 72 20 6d  ontext.  Error m
24410 65 73 73 61 67 65 73 20 77 72 69 74 74 65 6e 20  essages written 
24420 68 65 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61  here */.  Schema
24430 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 2f 2a   *pSchema;    /*
24440 20 46 69 78 20 69 74 65 6d 73 20 74 6f 20 74 68   Fix items to th
24450 69 73 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20 69  is schema */.  i
24460 6e 74 20 62 56 61 72 4f 6e 6c 79 3b 20 20 20 20  nt bVarOnly;    
24470 20 20 20 2f 2a 20 43 68 65 63 6b 20 66 6f 72 20     /* Check for 
24480 76 61 72 69 61 62 6c 65 20 72 65 66 65 72 65 6e  variable referen
24490 63 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 63 6f  ces only */.  co
244a0 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 3b 20 20  nst char *zDb;  
244b0 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61    /* Make sure a
244c0 6c 6c 20 6f 62 6a 65 63 74 73 20 61 72 65 20 63  ll objects are c
244d0 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 69 73  ontained in this
244e0 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 63   database */.  c
244f0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 79 70 65  onst char *zType
24500 3b 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 74 68  ;  /* Type of th
24510 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73  e container - us
24520 65 64 20 66 6f 72 20 65 72 72 6f 72 20 6d 65 73  ed for error mes
24530 73 61 67 65 73 20 2a 2f 0a 20 20 63 6f 6e 73 74  sages */.  const
24540 20 54 6f 6b 65 6e 20 2a 70 4e 61 6d 65 3b 20 2f   Token *pName; /
24550 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f  * Name of the co
24560 6e 74 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66  ntainer - used f
24570 6f 72 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  or error message
24580 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  s */.};../*.** A
24590 6e 20 6f 62 6a 65 63 74 65 64 20 75 73 65 64 20  n objected used 
245a0 74 6f 20 61 63 63 75 6d 75 6c 61 74 65 20 74 68  to accumulate th
245b0 65 20 74 65 78 74 20 6f 66 20 61 20 73 74 72 69  e text of a stri
245c0 6e 67 20 77 68 65 72 65 20 77 65 0a 2a 2a 20 64  ng where we.** d
245d0 6f 20 6e 6f 74 20 6e 65 63 65 73 73 61 72 69 6c  o not necessaril
245e0 79 20 6b 6e 6f 77 20 68 6f 77 20 62 69 67 20 74  y know how big t
245f0 68 65 20 73 74 72 69 6e 67 20 77 69 6c 6c 20 62  he string will b
24600 65 20 69 6e 20 74 68 65 20 65 6e 64 2e 0a 2a 2f  e in the end..*/
24610 0a 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f  .struct sqlite3_
24620 73 74 72 20 7b 0a 20 20 73 71 6c 69 74 65 33 20  str {.  sqlite3 
24630 2a 64 62 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  *db;         /* 
24640 4f 70 74 69 6f 6e 61 6c 20 64 61 74 61 62 61 73  Optional databas
24650 65 20 66 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 2e  e for lookaside.
24660 20 20 43 61 6e 20 62 65 20 4e 55 4c 4c 20 2a 2f    Can be NULL */
24670 0a 20 20 63 68 61 72 20 2a 7a 54 65 78 74 3b 20  .  char *zText; 
24680 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 73          /* The s
24690 74 72 69 6e 67 20 63 6f 6c 6c 65 63 74 65 64 20  tring collected 
246a0 73 6f 20 66 61 72 20 2a 2f 0a 20 20 75 33 32 20  so far */.  u32 
246b0 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20   nAlloc;        
246c0 20 2f 2a 20 41 6d 6f 75 6e 74 20 6f 66 20 73 70   /* Amount of sp
246d0 61 63 65 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e  ace allocated in
246e0 20 7a 54 65 78 74 20 2a 2f 0a 20 20 75 33 32 20   zText */.  u32 
246f0 20 6d 78 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20   mxAlloc;       
24700 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 61 6c 6c 6f   /* Maximum allo
24710 77 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20  wed allocation. 
24720 20 30 20 66 6f 72 20 6e 6f 20 6d 61 6c 6c 6f 63   0 for no malloc
24730 20 75 73 61 67 65 20 2a 2f 0a 20 20 75 33 32 20   usage */.  u32 
24740 20 6e 43 68 61 72 3b 20 20 20 20 20 20 20 20 20   nChar;         
24750 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20 74 68   /* Length of th
24760 65 20 73 74 72 69 6e 67 20 73 6f 20 66 61 72 20  e string so far 
24770 2a 2f 0a 20 20 75 38 20 20 20 61 63 63 45 72 72  */.  u8   accErr
24780 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20 53 51 4c  or;       /* SQL
24790 49 54 45 5f 4e 4f 4d 45 4d 20 6f 72 20 53 51 4c  ITE_NOMEM or SQL
247a0 49 54 45 5f 54 4f 4f 42 49 47 20 2a 2f 0a 20 20  ITE_TOOBIG */.  
247b0 75 38 20 20 20 70 72 69 6e 74 66 46 6c 61 67 73  u8   printfFlags
247c0 3b 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 50  ;    /* SQLITE_P
247d0 52 49 4e 54 46 20 66 6c 61 67 73 20 62 65 6c 6f  RINTF flags belo
247e0 77 20 2a 2f 0a 7d 3b 0a 23 64 65 66 69 6e 65 20  w */.};.#define 
247f0 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 49 4e  SQLITE_PRINTF_IN
24800 54 45 52 4e 41 4c 20 30 78 30 31 20 20 2f 2a 20  TERNAL 0x01  /* 
24810 49 6e 74 65 72 6e 61 6c 2d 75 73 65 2d 6f 6e 6c  Internal-use-onl
24820 79 20 63 6f 6e 76 65 72 74 65 72 73 20 61 6c 6c  y converters all
24830 6f 77 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  owed */.#define 
24840 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 53 51  SQLITE_PRINTF_SQ
24850 4c 46 55 4e 43 20 20 30 78 30 32 20 20 2f 2a 20  LFUNC  0x02  /* 
24860 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 61 72 67  SQL function arg
24870 75 6d 65 6e 74 73 20 74 6f 20 56 58 50 72 69 6e  uments to VXPrin
24880 74 66 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  tf */.#define SQ
24890 4c 49 54 45 5f 50 52 49 4e 54 46 5f 4d 41 4c 4c  LITE_PRINTF_MALL
248a0 4f 43 45 44 20 30 78 30 34 20 20 2f 2a 20 54 72  OCED 0x04  /* Tr
248b0 75 65 20 69 66 20 78 54 65 78 74 20 69 73 20 61  ue if xText is a
248c0 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65 20 2a  llocated space *
248d0 2f 0a 0a 23 64 65 66 69 6e 65 20 69 73 4d 61 6c  /..#define isMal
248e0 6c 6f 63 65 64 28 58 29 20 20 28 28 28 58 29 2d  loced(X)  (((X)-
248f0 3e 70 72 69 6e 74 66 46 6c 61 67 73 20 26 20 53  >printfFlags & S
24900 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 4d 41 4c  QLITE_PRINTF_MAL
24910 4c 4f 43 45 44 29 21 3d 30 29 0a 0a 0a 2f 2a 0a  LOCED)!=0).../*.
24920 2a 2a 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20  ** A pointer to 
24930 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69  this structure i
24940 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 6d 75 6e  s used to commun
24950 69 63 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f  icate informatio
24960 6e 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65  n.** from sqlite
24970 33 49 6e 69 74 20 61 6e 64 20 4f 50 5f 50 61 72  3Init and OP_Par
24980 73 65 53 63 68 65 6d 61 20 69 6e 74 6f 20 74 68  seSchema into th
24990 65 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c  e sqlite3InitCal
249a0 6c 62 61 63 6b 2e 0a 2a 2f 0a 74 79 70 65 64 65  lback..*/.typede
249b0 66 20 73 74 72 75 63 74 20 7b 0a 20 20 73 71 6c  f struct {.  sql
249c0 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20  ite3 *db;       
249d0 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65   /* The database
249e0 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a   being initializ
249f0 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 70  ed */.  char **p
24a00 7a 45 72 72 4d 73 67 3b 20 20 20 20 2f 2a 20 45  zErrMsg;    /* E
24a10 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73 74 6f  rror message sto
24a20 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 69 6e  red here */.  in
24a30 74 20 69 44 62 3b 20 20 20 20 20 20 20 20 20 20  t iDb;          
24a40 20 20 2f 2a 20 30 20 66 6f 72 20 6d 61 69 6e 20    /* 0 for main 
24a50 64 61 74 61 62 61 73 65 2e 20 20 31 20 66 6f 72  database.  1 for
24a60 20 54 45 4d 50 2c 20 32 2e 2e 20 66 6f 72 20 41   TEMP, 2.. for A
24a70 54 54 41 43 48 65 64 20 2a 2f 0a 20 20 69 6e 74  TTACHed */.  int
24a80 20 72 63 3b 20 20 20 20 20 20 20 20 20 20 20 20   rc;            
24a90 20 2f 2a 20 52 65 73 75 6c 74 20 63 6f 64 65 20   /* Result code 
24aa0 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20  stored here */. 
24ab0 20 75 33 32 20 6d 49 6e 69 74 46 6c 61 67 73 3b   u32 mInitFlags;
24ac0 20 20 20 20 20 2f 2a 20 46 6c 61 67 73 20 63 6f       /* Flags co
24ad0 6e 74 72 6f 6c 6c 69 6e 67 20 65 72 72 6f 72 20  ntrolling error 
24ae0 6d 65 73 73 61 67 65 73 20 2a 2f 0a 20 20 75 33  messages */.  u3
24af0 32 20 6e 49 6e 69 74 52 6f 77 3b 20 20 20 20 20  2 nInitRow;     
24b00 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72    /* Number of r
24b10 6f 77 73 20 70 72 6f 63 65 73 73 65 64 20 2a 2f  ows processed */
24b20 0a 7d 20 49 6e 69 74 44 61 74 61 3b 0a 0a 2f 2a  .} InitData;../*
24b30 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
24b40 65 73 20 66 6f 72 20 6d 49 6e 69 74 46 6c 61 67  es for mInitFlag
24b50 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 49  s.*/.#define INI
24b60 54 46 4c 41 47 5f 41 6c 74 65 72 54 61 62 6c 65  TFLAG_AlterTable
24b70 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 54 68     0x0001  /* Th
24b80 69 73 20 69 73 20 61 20 72 65 70 61 72 73 65 20  is is a reparse 
24b90 61 66 74 65 72 20 41 4c 54 45 52 20 54 41 42 4c  after ALTER TABL
24ba0 45 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53 74 72 75  E */../*.** Stru
24bb0 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 69 6e 67  cture containing
24bc0 20 67 6c 6f 62 61 6c 20 63 6f 6e 66 69 67 75 72   global configur
24bd0 61 74 69 6f 6e 20 64 61 74 61 20 66 6f 72 20 74  ation data for t
24be0 68 65 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72  he SQLite librar
24bf0 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 73 74  y..**.** This st
24c00 72 75 63 74 75 72 65 20 61 6c 73 6f 20 63 6f 6e  ructure also con
24c10 74 61 69 6e 73 20 73 6f 6d 65 20 73 74 61 74 65  tains some state
24c20 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f   information..*/
24c30 0a 73 74 72 75 63 74 20 53 71 6c 69 74 65 33 43  .struct Sqlite3C
24c40 6f 6e 66 69 67 20 7b 0a 20 20 69 6e 74 20 62 4d  onfig {.  int bM
24c50 65 6d 73 74 61 74 3b 20 20 20 20 20 20 20 20 20  emstat;         
24c60 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
24c70 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 6d 65  rue to enable me
24c80 6d 6f 72 79 20 73 74 61 74 75 73 20 2a 2f 0a 20  mory status */. 
24c90 20 69 6e 74 20 62 43 6f 72 65 4d 75 74 65 78 3b   int bCoreMutex;
24ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24cb0 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e     /* True to en
24cc0 61 62 6c 65 20 63 6f 72 65 20 6d 75 74 65 78 69  able core mutexi
24cd0 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62 46 75 6c  ng */.  int bFul
24ce0 6c 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20  lMutex;         
24cf0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
24d00 65 20 74 6f 20 65 6e 61 62 6c 65 20 66 75 6c 6c  e to enable full
24d10 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69   mutexing */.  i
24d20 6e 74 20 62 4f 70 65 6e 55 72 69 3b 20 20 20 20  nt bOpenUri;    
24d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24d40 20 2f 2a 20 54 72 75 65 20 74 6f 20 69 6e 74 65   /* True to inte
24d50 72 70 72 65 74 20 66 69 6c 65 6e 61 6d 65 73 20  rpret filenames 
24d60 61 73 20 55 52 49 73 20 2a 2f 0a 20 20 69 6e 74  as URIs */.  int
24d70 20 62 55 73 65 43 69 73 3b 20 20 20 20 20 20 20   bUseCis;       
24d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
24d90 2a 20 55 73 65 20 63 6f 76 65 72 69 6e 67 20 69  * Use covering i
24da0 6e 64 69 63 65 73 20 66 6f 72 20 66 75 6c 6c 2d  ndices for full-
24db0 73 63 61 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 62  scans */.  int b
24dc0 53 6d 61 6c 6c 4d 61 6c 6c 6f 63 3b 20 20 20 20  SmallMalloc;    
24dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
24de0 41 76 6f 69 64 20 6c 61 72 67 65 20 6d 65 6d 6f  Avoid large memo
24df0 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 69  ry allocations i
24e00 66 20 74 72 75 65 20 2a 2f 0a 20 20 69 6e 74 20  f true */.  int 
24e10 6d 78 53 74 72 6c 65 6e 3b 20 20 20 20 20 20 20  mxStrlen;       
24e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
24e30 20 4d 61 78 69 6d 75 6d 20 73 74 72 69 6e 67 20   Maximum string 
24e40 6c 65 6e 67 74 68 20 2a 2f 0a 20 20 69 6e 74 20  length */.  int 
24e50 6e 65 76 65 72 43 6f 72 72 75 70 74 3b 20 20 20  neverCorrupt;   
24e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
24e70 20 44 61 74 61 62 61 73 65 20 69 73 20 61 6c 77   Database is alw
24e80 61 79 73 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20  ays well-formed 
24e90 2a 2f 0a 20 20 69 6e 74 20 73 7a 4c 6f 6f 6b 61  */.  int szLooka
24ea0 73 69 64 65 3b 20 20 20 20 20 20 20 20 20 20 20  side;           
24eb0 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c         /* Defaul
24ec0 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66 66  t lookaside buff
24ed0 65 72 20 73 69 7a 65 20 2a 2f 0a 20 20 69 6e 74  er size */.  int
24ee0 20 6e 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20   nLookaside;    
24ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
24f00 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73  * Default lookas
24f10 69 64 65 20 62 75 66 66 65 72 20 63 6f 75 6e 74  ide buffer count
24f20 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 74 6d 74 53   */.  int nStmtS
24f30 70 69 6c 6c 3b 20 20 20 20 20 20 20 20 20 20 20  pill;           
24f40 20 20 20 20 20 20 20 20 2f 2a 20 53 74 6d 74 2d          /* Stmt-
24f50 6a 6f 75 72 6e 61 6c 20 73 70 69 6c 6c 2d 74 6f  journal spill-to
24f60 2d 64 69 73 6b 20 74 68 72 65 73 68 6f 6c 64 20  -disk threshold 
24f70 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 65 6d  */.  sqlite3_mem
24f80 5f 6d 65 74 68 6f 64 73 20 6d 3b 20 20 20 20 20  _methods m;     
24f90 20 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65         /* Low-le
24fa0 76 65 6c 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  vel memory alloc
24fb0 61 74 69 6f 6e 20 69 6e 74 65 72 66 61 63 65 20  ation interface 
24fc0 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  */.  sqlite3_mut
24fd0 65 78 5f 6d 65 74 68 6f 64 73 20 6d 75 74 65 78  ex_methods mutex
24fe0 3b 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65  ;      /* Low-le
24ff0 76 65 6c 20 6d 75 74 65 78 20 69 6e 74 65 72 66  vel mutex interf
25000 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ace */.  sqlite3
25010 5f 70 63 61 63 68 65 5f 6d 65 74 68 6f 64 73 32  _pcache_methods2
25020 20 70 63 61 63 68 65 32 3b 20 20 2f 2a 20 4c 6f   pcache2;  /* Lo
25030 77 2d 6c 65 76 65 6c 20 70 61 67 65 2d 63 61 63  w-level page-cac
25040 68 65 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a  he interface */.
25050 20 20 76 6f 69 64 20 2a 70 48 65 61 70 3b 20 20    void *pHeap;  
25060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25070 20 20 20 20 2f 2a 20 48 65 61 70 20 73 74 6f 72      /* Heap stor
25080 61 67 65 20 73 70 61 63 65 20 2a 2f 0a 20 20 69  age space */.  i
25090 6e 74 20 6e 48 65 61 70 3b 20 20 20 20 20 20 20  nt nHeap;       
250a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
250b0 20 2f 2a 20 53 69 7a 65 20 6f 66 20 70 48 65 61   /* Size of pHea
250c0 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52  p[] */.  int mnR
250d0 65 71 2c 20 6d 78 52 65 71 3b 20 20 20 20 20 20  eq, mxReq;      
250e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 69             /* Mi
250f0 6e 20 61 6e 64 20 6d 61 78 20 68 65 61 70 20 72  n and max heap r
25100 65 71 75 65 73 74 73 20 73 69 7a 65 73 20 2a 2f  equests sizes */
25110 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  .  sqlite3_int64
25120 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20 20   szMmap;        
25130 20 20 20 20 20 2f 2a 20 6d 6d 61 70 28 29 20 73       /* mmap() s
25140 70 61 63 65 20 70 65 72 20 6f 70 65 6e 20 66 69  pace per open fi
25150 6c 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  le */.  sqlite3_
25160 69 6e 74 36 34 20 6d 78 4d 6d 61 70 3b 20 20 20  int64 mxMmap;   
25170 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78            /* Max
25180 69 6d 75 6d 20 76 61 6c 75 65 20 66 6f 72 20 73  imum value for s
25190 7a 4d 6d 61 70 20 2a 2f 0a 20 20 76 6f 69 64 20  zMmap */.  void 
251a0 2a 70 50 61 67 65 3b 20 20 20 20 20 20 20 20 20  *pPage;         
251b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
251c0 50 61 67 65 20 63 61 63 68 65 20 6d 65 6d 6f 72  Page cache memor
251d0 79 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 50 61 67  y */.  int szPag
251e0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
251f0 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
25200 20 6f 66 20 65 61 63 68 20 70 61 67 65 20 69 6e   of each page in
25210 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e   pPage[] */.  in
25220 74 20 6e 50 61 67 65 3b 20 20 20 20 20 20 20 20  t nPage;        
25230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25240 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 61 67  /* Number of pag
25250 65 73 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f  es in pPage[] */
25260 0a 20 20 69 6e 74 20 6d 78 50 61 72 73 65 72 53  .  int mxParserS
25270 74 61 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20  tack;           
25280 20 20 20 20 20 2f 2a 20 6d 61 78 69 6d 75 6d 20       /* maximum 
25290 64 65 70 74 68 20 6f 66 20 74 68 65 20 70 61 72  depth of the par
252a0 73 65 72 20 73 74 61 63 6b 20 2a 2f 0a 20 20 69  ser stack */.  i
252b0 6e 74 20 73 68 61 72 65 64 43 61 63 68 65 45 6e  nt sharedCacheEn
252c0 61 62 6c 65 64 3b 20 20 20 20 20 20 20 20 20 20  abled;          
252d0 20 2f 2a 20 74 72 75 65 20 69 66 20 73 68 61 72   /* true if shar
252e0 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 65 6e  ed-cache mode en
252f0 61 62 6c 65 64 20 2a 2f 0a 20 20 75 33 32 20 73  abled */.  u32 s
25300 7a 50 6d 61 3b 20 20 20 20 20 20 20 20 20 20 20  zPma;           
25310 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
25320 4d 61 78 69 6d 75 6d 20 53 6f 72 74 65 72 20 50  Maximum Sorter P
25330 4d 41 20 73 69 7a 65 20 2a 2f 0a 20 20 2f 2a 20  MA size */.  /* 
25340 54 68 65 20 61 62 6f 76 65 20 6d 69 67 68 74 20  The above might 
25350 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74  be initialized t
25360 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 54 68 65  o non-zero.  The
25370 20 66 6f 6c 6c 6f 77 69 6e 67 20 6e 65 65 64 20   following need 
25380 74 6f 20 61 6c 77 61 79 73 0a 20 20 2a 2a 20 69  to always.  ** i
25390 6e 69 74 69 61 6c 6c 79 20 62 65 20 7a 65 72 6f  nitially be zero
253a0 2c 20 68 6f 77 65 76 65 72 2e 20 2a 2f 0a 20 20  , however. */.  
253b0 69 6e 74 20 69 73 49 6e 69 74 3b 20 20 20 20 20  int isInit;     
253c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
253d0 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20    /* True after 
253e0 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 68  initialization h
253f0 61 73 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20  as finished */. 
25400 20 69 6e 74 20 69 6e 50 72 6f 67 72 65 73 73 3b   int inProgress;
25410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25420 20 20 20 2f 2a 20 54 72 75 65 20 77 68 69 6c 65     /* True while
25430 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20   initialization 
25440 69 6e 20 70 72 6f 67 72 65 73 73 20 2a 2f 0a 20  in progress */. 
25450 20 69 6e 74 20 69 73 4d 75 74 65 78 49 6e 69 74   int isMutexInit
25460 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
25470 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72     /* True after
25480 20 6d 75 74 65 78 65 73 20 61 72 65 20 69 6e 69   mutexes are ini
25490 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e  tialized */.  in
254a0 74 20 69 73 4d 61 6c 6c 6f 63 49 6e 69 74 3b 20  t isMallocInit; 
254b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
254c0 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 61  /* True after ma
254d0 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c 69  lloc is initiali
254e0 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73 50  zed */.  int isP
254f0 43 61 63 68 65 49 6e 69 74 3b 20 20 20 20 20 20  CacheInit;      
25500 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
25510 75 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20  ue after malloc 
25520 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a  is initialized *
25530 2f 0a 20 20 69 6e 74 20 6e 52 65 66 49 6e 69 74  /.  int nRefInit
25540 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 20  Mutex;          
25550 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
25560 6f 66 20 75 73 65 72 73 20 6f 66 20 70 49 6e 69  of users of pIni
25570 74 4d 75 74 65 78 20 2a 2f 0a 20 20 73 71 6c 69  tMutex */.  sqli
25580 74 65 33 5f 6d 75 74 65 78 20 2a 70 49 6e 69 74  te3_mutex *pInit
25590 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 2f 2a  Mutex;        /*
255a0 20 4d 75 74 65 78 20 75 73 65 64 20 62 79 20 73   Mutex used by s
255b0 71 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a  qlite3_initializ
255c0 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  e() */.  void (*
255d0 78 4c 6f 67 29 28 76 6f 69 64 2a 2c 69 6e 74 2c  xLog)(void*,int,
255e0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 20 2f 2a  const char*); /*
255f0 20 46 75 6e 63 74 69 6f 6e 20 66 6f 72 20 6c 6f   Function for lo
25600 67 67 69 6e 67 20 2a 2f 0a 20 20 76 6f 69 64 20  gging */.  void 
25610 2a 70 4c 6f 67 41 72 67 3b 20 20 20 20 20 20 20  *pLogArg;       
25620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25630 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e  /* First argumen
25640 74 20 74 6f 20 78 4c 6f 67 28 29 20 2a 2f 0a 23  t to xLog() */.#
25650 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
25660 42 4c 45 5f 53 51 4c 4c 4f 47 0a 20 20 76 6f 69  BLE_SQLLOG.  voi
25670 64 28 2a 78 53 71 6c 6c 6f 67 29 28 76 6f 69 64  d(*xSqllog)(void
25680 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  *,sqlite3*,const
25690 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 20 20   char*, int);.  
256a0 76 6f 69 64 20 2a 70 53 71 6c 6c 6f 67 41 72 67  void *pSqllogArg
256b0 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20  ;.#endif.#ifdef 
256c0 53 51 4c 49 54 45 5f 56 44 42 45 5f 43 4f 56 45  SQLITE_VDBE_COVE
256d0 52 41 47 45 0a 20 20 2f 2a 20 54 68 65 20 66 6f  RAGE.  /* The fo
256e0 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 62 61 63 6b  llowing callback
256f0 20 28 69 66 20 6e 6f 74 20 4e 55 4c 4c 29 20 69   (if not NULL) i
25700 73 20 69 6e 76 6f 6b 65 64 20 6f 6e 20 65 76 65  s invoked on eve
25710 72 79 20 56 44 42 45 20 62 72 61 6e 63 68 0a 20  ry VDBE branch. 
25720 20 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20   ** operation.  
25730 53 65 74 20 74 68 65 20 63 61 6c 6c 62 61 63 6b  Set the callback
25740 20 75 73 69 6e 67 20 53 51 4c 49 54 45 5f 54 45   using SQLITE_TE
25750 53 54 43 54 52 4c 5f 56 44 42 45 5f 43 4f 56 45  STCTRL_VDBE_COVE
25760 52 41 47 45 2e 0a 20 20 2a 2f 0a 20 20 76 6f 69  RAGE..  */.  voi
25770 64 20 28 2a 78 56 64 62 65 42 72 61 6e 63 68 29  d (*xVdbeBranch)
25780 28 76 6f 69 64 2a 2c 75 6e 73 69 67 6e 65 64 20  (void*,unsigned 
25790 69 53 72 63 4c 69 6e 65 2c 75 38 20 65 54 68 69  iSrcLine,u8 eThi
257a0 73 2c 75 38 20 65 4d 78 29 3b 20 20 2f 2a 20 43  s,u8 eMx);  /* C
257b0 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69  allback */.  voi
257c0 64 20 2a 70 56 64 62 65 42 72 61 6e 63 68 41 72  d *pVdbeBranchAr
257d0 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
257e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
257f0 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20 61 72         /* 1st ar
25800 67 75 6d 65 6e 74 20 2a 2f 0a 23 65 6e 64 69 66  gument */.#endif
25810 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
25820 4e 41 42 4c 45 5f 44 45 53 45 52 49 41 4c 49 5a  NABLE_DESERIALIZ
25830 45 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36  E.  sqlite3_int6
25840 34 20 6d 78 4d 65 6d 64 62 53 69 7a 65 3b 20 20  4 mxMemdbSize;  
25850 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74        /* Default
25860 20 6d 61 78 20 6d 65 6d 64 62 20 73 69 7a 65 20   max memdb size 
25870 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  */.#endif.#ifnde
25880 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41  f SQLITE_UNTESTA
25890 42 4c 45 0a 20 20 69 6e 74 20 28 2a 78 54 65 73  BLE.  int (*xTes
258a0 74 43 61 6c 6c 62 61 63 6b 29 28 69 6e 74 29 3b  tCallback)(int);
258b0 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 76 6f 6b          /* Invok
258c0 65 64 20 62 79 20 73 71 6c 69 74 65 33 46 61 75  ed by sqlite3Fau
258d0 6c 74 53 69 6d 28 29 20 2a 2f 0a 23 65 6e 64 69  ltSim() */.#endi
258e0 66 0a 20 20 69 6e 74 20 62 4c 6f 63 61 6c 74 69  f.  int bLocalti
258f0 6d 65 46 61 75 6c 74 3b 20 20 20 20 20 20 20 20  meFault;        
25900 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f        /* True to
25910 20 66 61 69 6c 20 6c 6f 63 61 6c 74 69 6d 65 28   fail localtime(
25920 29 20 63 61 6c 6c 73 20 2a 2f 0a 20 20 69 6e 74  ) calls */.  int
25930 20 62 49 6e 74 65 72 6e 61 6c 46 75 6e 63 74 69   bInternalFuncti
25940 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ons;           /
25950 2a 20 49 6e 74 65 72 6e 61 6c 20 53 51 4c 20 66  * Internal SQL f
25960 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 76 69 73  unctions are vis
25970 69 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 69 4f  ible */.  int iO
25980 6e 63 65 52 65 73 65 74 54 68 72 65 73 68 6f 6c  nceResetThreshol
25990 64 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57  d;          /* W
259a0 68 65 6e 20 74 6f 20 72 65 73 65 74 20 4f 50 5f  hen to reset OP_
259b0 4f 6e 63 65 20 63 6f 75 6e 74 65 72 73 20 2a 2f  Once counters */
259c0 0a 20 20 75 33 32 20 73 7a 53 6f 72 74 65 72 52  .  u32 szSorterR
259d0 65 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ef;             
259e0 20 20 20 20 20 2f 2a 20 4d 69 6e 20 73 69 7a 65       /* Min size
259f0 20 69 6e 20 62 79 74 65 73 20 74 6f 20 75 73 65   in bytes to use
25a00 20 73 6f 72 74 65 72 2d 72 65 66 73 20 2a 2f 0a   sorter-refs */.
25a10 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6d  };../*.** This m
25a20 61 63 72 6f 20 69 73 20 75 73 65 64 20 69 6e 73  acro is used ins
25a30 69 64 65 20 6f 66 20 61 73 73 65 72 74 28 29 20  ide of assert() 
25a40 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 69 6e  statements to in
25a50 64 69 63 61 74 65 20 74 68 61 74 0a 2a 2a 20 74  dicate that.** t
25a60 68 65 20 61 73 73 65 72 74 20 69 73 20 6f 6e 6c  he assert is onl
25a70 79 20 76 61 6c 69 64 20 6f 6e 20 61 20 77 65 6c  y valid on a wel
25a80 6c 2d 66 6f 72 6d 65 64 20 64 61 74 61 62 61 73  l-formed databas
25a90 65 2e 20 20 49 6e 73 74 65 61 64 20 6f 66 3a 0a  e.  Instead of:.
25aa0 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74  **.**     assert
25ab0 28 20 58 20 29 3b 0a 2a 2a 0a 2a 2a 20 4f 6e 65  ( X );.**.** One
25ac0 20 77 72 69 74 65 73 3a 0a 2a 2a 0a 2a 2a 20 20   writes:.**.**  
25ad0 20 20 20 61 73 73 65 72 74 28 20 58 20 7c 7c 20     assert( X || 
25ae0 43 4f 52 52 55 50 54 5f 44 42 20 29 3b 0a 2a 2a  CORRUPT_DB );.**
25af0 0a 2a 2a 20 43 4f 52 52 55 50 54 5f 44 42 20 69  .** CORRUPT_DB i
25b00 73 20 74 72 75 65 20 64 75 72 69 6e 67 20 6e 6f  s true during no
25b10 72 6d 61 6c 20 6f 70 65 72 61 74 69 6f 6e 2e 20  rmal operation. 
25b20 20 43 4f 52 52 55 50 54 5f 44 42 20 64 6f 65 73   CORRUPT_DB does
25b30 20 6e 6f 74 20 69 6e 64 69 63 61 74 65 0a 2a 2a   not indicate.**
25b40 20 74 68 61 74 20 74 68 65 20 64 61 74 61 62 61   that the databa
25b50 73 65 20 69 73 20 64 65 66 69 6e 69 74 65 6c 79  se is definitely
25b60 20 63 6f 72 72 75 70 74 2c 20 6f 6e 6c 79 20 74   corrupt, only t
25b70 68 61 74 20 69 74 20 6d 69 67 68 74 20 62 65 20  hat it might be 
25b80 63 6f 72 72 75 70 74 2e 0a 2a 2a 20 46 6f 72 20  corrupt..** For 
25b90 6d 6f 73 74 20 74 65 73 74 20 63 61 73 65 73 2c  most test cases,
25ba0 20 43 4f 52 52 55 50 54 5f 44 42 20 69 73 20 73   CORRUPT_DB is s
25bb0 65 74 20 74 6f 20 66 61 6c 73 65 20 75 73 69 6e  et to false usin
25bc0 67 20 61 20 73 70 65 63 69 61 6c 0a 2a 2a 20 73  g a special.** s
25bd0 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74  qlite3_test_cont
25be0 72 6f 6c 28 29 2e 20 20 54 68 69 73 20 65 6e 61  rol().  This ena
25bf0 62 6c 65 73 20 61 73 73 65 72 74 28 29 20 73 74  bles assert() st
25c00 61 74 65 6d 65 6e 74 73 20 74 6f 20 70 72 6f 76  atements to prov
25c10 65 0a 2a 2a 20 74 68 69 6e 67 73 20 74 68 61 74  e.** things that
25c20 20 61 72 65 20 61 6c 77 61 79 73 20 74 72 75 65   are always true
25c30 20 66 6f 72 20 77 65 6c 6c 2d 66 6f 72 6d 65 64   for well-formed
25c40 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23   databases..*/.#
25c50 64 65 66 69 6e 65 20 43 4f 52 52 55 50 54 5f 44  define CORRUPT_D
25c60 42 20 20 28 73 71 6c 69 74 65 33 43 6f 6e 66 69  B  (sqlite3Confi
25c70 67 2e 6e 65 76 65 72 43 6f 72 72 75 70 74 3d 3d  g.neverCorrupt==
25c80 30 29 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74 65 78  0)../*.** Contex
25c90 74 20 70 6f 69 6e 74 65 72 20 70 61 73 73 65 64  t pointer passed
25ca0 20 64 6f 77 6e 20 74 68 72 6f 75 67 68 20 74 68   down through th
25cb0 65 20 74 72 65 65 2d 77 61 6c 6b 2e 0a 2a 2f 0a  e tree-walk..*/.
25cc0 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20 7b 0a  struct Walker {.
25cd0 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b    Parse *pParse;
25ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25cf0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
25d00 61 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20  arser context.  
25d10 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 45 78 70 72  */.  int (*xExpr
25d20 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72  Callback)(Walker
25d30 2a 2c 20 45 78 70 72 2a 29 3b 20 20 20 20 20 2f  *, Expr*);     /
25d40 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20 65  * Callback for e
25d50 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20  xpressions */.  
25d60 69 6e 74 20 28 2a 78 53 65 6c 65 63 74 43 61 6c  int (*xSelectCal
25d70 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 53  lback)(Walker*,S
25d80 65 6c 65 63 74 2a 29 3b 20 20 2f 2a 20 43 61 6c  elect*);  /* Cal
25d90 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c 45 43 54  lback for SELECT
25da0 73 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53  s */.  void (*xS
25db0 65 6c 65 63 74 43 61 6c 6c 62 61 63 6b 32 29 28  electCallback2)(
25dc0 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29  Walker*,Select*)
25dd0 3b 2f 2a 20 53 65 63 6f 6e 64 20 63 61 6c 6c 62  ;/* Second callb
25de0 61 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20  ack for SELECTs 
25df0 2a 2f 0a 20 20 69 6e 74 20 77 61 6c 6b 65 72 44  */.  int walkerD
25e00 65 70 74 68 3b 20 20 20 20 20 20 20 20 20 20 20  epth;           
25e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
25e20 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 75 62 71  * Number of subq
25e30 75 65 72 69 65 73 20 2a 2f 0a 20 20 75 38 20 65  ueries */.  u8 e
25e40 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20  Code;           
25e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25e60 20 20 20 20 20 20 2f 2a 20 41 20 73 6d 61 6c 6c        /* A small
25e70 20 70 72 6f 63 65 73 73 69 6e 67 20 63 6f 64 65   processing code
25e80 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 20 20 20   */.  union {   
25e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25eb0 2f 2a 20 45 78 74 72 61 20 64 61 74 61 20 66 6f  /* Extra data fo
25ec0 72 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  r callback */.  
25ed0 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70    NameContext *p
25ee0 4e 43 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  NC;             
25ef0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
25f00 61 6d 69 6e 67 20 63 6f 6e 74 65 78 74 20 2a 2f  aming context */
25f10 0a 20 20 20 20 69 6e 74 20 6e 3b 20 20 20 20 20  .    int n;     
25f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
25f40 2a 20 41 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20  * A counter */. 
25f50 20 20 20 69 6e 74 20 69 43 75 72 3b 20 20 20 20     int iCur;    
25f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25f70 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
25f80 41 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  A cursor number 
25f90 2a 2f 0a 20 20 20 20 53 72 63 4c 69 73 74 20 2a  */.    SrcList *
25fa0 70 53 72 63 4c 69 73 74 3b 20 20 20 20 20 20 20  pSrcList;       
25fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25fc0 20 2f 2a 20 46 52 4f 4d 20 63 6c 61 75 73 65 20   /* FROM clause 
25fd0 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 53 72  */.    struct Sr
25fe0 63 43 6f 75 6e 74 20 2a 70 53 72 63 43 6f 75 6e  cCount *pSrcCoun
25ff0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
26000 20 2f 2a 20 43 6f 75 6e 74 69 6e 67 20 63 6f 6c   /* Counting col
26010 75 6d 6e 20 72 65 66 65 72 65 6e 63 65 73 20 2a  umn references *
26020 2f 0a 20 20 20 20 73 74 72 75 63 74 20 43 43 75  /.    struct CCu
26030 72 48 69 6e 74 20 2a 70 43 43 75 72 48 69 6e 74  rHint *pCCurHint
26040 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
26050 2f 2a 20 55 73 65 64 20 62 79 20 63 6f 64 65 43  /* Used by codeC
26060 75 72 73 6f 72 48 69 6e 74 28 29 20 2a 2f 0a 20  ursorHint() */. 
26070 20 20 20 69 6e 74 20 2a 61 69 43 6f 6c 3b 20 20     int *aiCol;  
26080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26090 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
260a0 61 72 72 61 79 20 6f 66 20 63 6f 6c 75 6d 6e 20  array of column 
260b0 69 6e 64 65 78 65 73 20 2a 2f 0a 20 20 20 20 73  indexes */.    s
260c0 74 72 75 63 74 20 49 64 78 43 6f 76 65 72 20 2a  truct IdxCover *
260d0 70 49 64 78 43 6f 76 65 72 3b 20 20 20 20 20 20  pIdxCover;      
260e0 20 20 20 20 20 20 20 20 20 2f 2a 20 43 68 65 63           /* Chec
260f0 6b 20 66 6f 72 20 69 6e 64 65 78 20 63 6f 76 65  k for index cove
26100 72 61 67 65 20 2a 2f 0a 20 20 20 20 73 74 72 75  rage */.    stru
26110 63 74 20 49 64 78 45 78 70 72 54 72 61 6e 73 20  ct IdxExprTrans 
26120 2a 70 49 64 78 54 72 61 6e 73 3b 20 20 20 20 20  *pIdxTrans;     
26130 20 20 20 20 20 20 2f 2a 20 43 6f 6e 76 65 72 74        /* Convert
26140 20 69 64 78 65 64 20 65 78 70 72 20 74 6f 20 63   idxed expr to c
26150 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 20 20 45 78 70  olumn */.    Exp
26160 72 4c 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b  rList *pGroupBy;
26170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26180 20 20 20 20 20 20 20 2f 2a 20 47 52 4f 55 50 20         /* GROUP 
26190 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20  BY clause */.   
261a0 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74   Select *pSelect
261b0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
261c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 41             /* HA
261d0 56 49 4e 47 20 74 6f 20 57 48 45 52 45 20 63 6c  VING to WHERE cl
261e0 61 75 73 65 20 63 74 78 20 2a 2f 0a 20 20 20 20  ause ctx */.    
261f0 73 74 72 75 63 74 20 57 69 6e 64 6f 77 52 65 77  struct WindowRew
26200 72 69 74 65 20 2a 70 52 65 77 72 69 74 65 3b 20  rite *pRewrite; 
26210 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 69 6e            /* Win
26220 64 6f 77 20 72 65 77 72 69 74 65 20 63 6f 6e 74  dow rewrite cont
26230 65 78 74 20 2a 2f 0a 20 20 20 20 73 74 72 75 63  ext */.    struc
26240 74 20 57 68 65 72 65 43 6f 6e 73 74 20 2a 70 43  t WhereConst *pC
26250 6f 6e 73 74 3b 20 20 20 20 20 20 20 20 20 20 20  onst;           
26260 20 20 20 20 20 2f 2a 20 57 48 45 52 45 20 63 6c       /* WHERE cl
26270 61 75 73 65 20 63 6f 6e 73 74 61 6e 74 73 20 2a  ause constants *
26280 2f 0a 20 20 20 20 73 74 72 75 63 74 20 52 65 6e  /.    struct Ren
26290 61 6d 65 43 74 78 20 2a 70 52 65 6e 61 6d 65 3b  ameCtx *pRename;
262a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
262b0 2f 2a 20 52 45 4e 41 4d 45 20 43 4f 4c 55 4d 4e  /* RENAME COLUMN
262c0 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 7d 20   context */.  } 
262d0 75 3b 0a 7d 3b 0a 0a 2f 2a 20 46 6f 72 77 61 72  u;.};../* Forwar
262e0 64 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 2a  d declarations *
262f0 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c  /.int sqlite3Wal
26300 6b 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 45  kExpr(Walker*, E
26310 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
26320 65 33 57 61 6c 6b 45 78 70 72 4c 69 73 74 28 57  e3WalkExprList(W
26330 61 6c 6b 65 72 2a 2c 20 45 78 70 72 4c 69 73 74  alker*, ExprList
26340 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
26350 61 6c 6b 53 65 6c 65 63 74 28 57 61 6c 6b 65 72  alkSelect(Walker
26360 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74  *, Select*);.int
26370 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65   sqlite3WalkSele
26380 63 74 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20  ctExpr(Walker*, 
26390 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71  Select*);.int sq
263a0 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 46  lite3WalkSelectF
263b0 72 6f 6d 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c  rom(Walker*, Sel
263c0 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ect*);.int sqlit
263d0 65 33 45 78 70 72 57 61 6c 6b 4e 6f 6f 70 28 57  e3ExprWalkNoop(W
263e0 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a  alker*, Expr*);.
263f0 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63  int sqlite3Selec
26400 74 57 61 6c 6b 4e 6f 6f 70 28 57 61 6c 6b 65 72  tWalkNoop(Walker
26410 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74  *, Select*);.int
26420 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 57 61   sqlite3SelectWa
26430 6c 6b 46 61 69 6c 28 57 61 6c 6b 65 72 2a 2c 20  lkFail(Walker*, 
26440 53 65 6c 65 63 74 2a 29 3b 0a 23 69 66 64 65 66  Select*);.#ifdef
26450 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 76 6f   SQLITE_DEBUG.vo
26460 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  id sqlite3Select
26470 57 61 6c 6b 41 73 73 65 72 74 32 28 57 61 6c 6b  WalkAssert2(Walk
26480 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 23  er*, Select*);.#
26490 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  endif../*.** Ret
264a0 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20 74 68  urn code from th
264b0 65 20 70 61 72 73 65 2d 74 72 65 65 20 77 61 6c  e parse-tree wal
264c0 6b 69 6e 67 20 70 72 69 6d 69 74 69 76 65 73 20  king primitives 
264d0 61 6e 64 20 74 68 65 69 72 0a 2a 2a 20 63 61 6c  and their.** cal
264e0 6c 62 61 63 6b 73 2e 0a 2a 2f 0a 23 64 65 66 69  lbacks..*/.#defi
264f0 6e 65 20 57 52 43 5f 43 6f 6e 74 69 6e 75 65 20  ne WRC_Continue 
26500 20 20 20 30 20 20 20 2f 2a 20 43 6f 6e 74 69 6e     0   /* Contin
26510 75 65 20 64 6f 77 6e 20 69 6e 74 6f 20 63 68 69  ue down into chi
26520 6c 64 72 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ldren */.#define
26530 20 57 52 43 5f 50 72 75 6e 65 20 20 20 20 20 20   WRC_Prune      
26540 20 31 20 20 20 2f 2a 20 4f 6d 69 74 20 63 68 69   1   /* Omit chi
26550 6c 64 72 65 6e 20 62 75 74 20 63 6f 6e 74 69 6e  ldren but contin
26560 75 65 20 77 61 6c 6b 69 6e 67 20 73 69 62 6c 69  ue walking sibli
26570 6e 67 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  ngs */.#define W
26580 52 43 5f 41 62 6f 72 74 20 20 20 20 20 20 20 32  RC_Abort       2
26590 20 20 20 2f 2a 20 41 62 61 6e 64 6f 6e 20 74 68     /* Abandon th
265a0 65 20 74 72 65 65 20 77 61 6c 6b 20 2a 2f 0a 0a  e tree walk */..
265b0 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
265c0 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  e of this struct
265d0 75 72 65 20 72 65 70 72 65 73 65 6e 74 73 20 61  ure represents a
265e0 20 73 65 74 20 6f 66 20 6f 6e 65 20 6f 72 20 6d   set of one or m
265f0 6f 72 65 20 43 54 45 73 0a 2a 2a 20 28 63 6f 6d  ore CTEs.** (com
26600 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73  mon table expres
26610 73 69 6f 6e 73 29 20 63 72 65 61 74 65 64 20 62  sions) created b
26620 79 20 61 20 73 69 6e 67 6c 65 20 57 49 54 48 20  y a single WITH 
26630 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63  clause..*/.struc
26640 74 20 57 69 74 68 20 7b 0a 20 20 69 6e 74 20 6e  t With {.  int n
26650 43 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  Cte;            
26660 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
26670 6d 62 65 72 20 6f 66 20 43 54 45 73 20 69 6e 20  mber of CTEs in 
26680 74 68 65 20 57 49 54 48 20 63 6c 61 75 73 65 20  the WITH clause 
26690 2a 2f 0a 20 20 57 69 74 68 20 2a 70 4f 75 74 65  */.  With *pOute
266a0 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
266b0 20 20 20 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 69       /* Containi
266c0 6e 67 20 57 49 54 48 20 63 6c 61 75 73 65 2c 20  ng WITH clause, 
266d0 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 73 74 72  or NULL */.  str
266e0 75 63 74 20 43 74 65 20 7b 20 20 20 20 20 20 20  uct Cte {       
266f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
26700 46 6f 72 20 65 61 63 68 20 43 54 45 20 69 6e 20  For each CTE in 
26710 74 68 65 20 57 49 54 48 20 63 6c 61 75 73 65 2e  the WITH clause.
26720 2e 2e 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  ... */.    char 
26730 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
26740 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61             /* Na
26750 6d 65 20 6f 66 20 74 68 69 73 20 43 54 45 20 2a  me of this CTE *
26760 2f 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a  /.    ExprList *
26770 70 43 6f 6c 73 3b 20 20 20 20 20 20 20 20 20 20  pCols;          
26780 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66        /* List of
26790 20 65 78 70 6c 69 63 69 74 20 63 6f 6c 75 6d 6e   explicit column
267a0 20 6e 61 6d 65 73 2c 20 6f 72 20 4e 55 4c 4c 20   names, or NULL 
267b0 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70  */.    Select *p
267c0 53 65 6c 65 63 74 3b 20 20 20 20 20 20 20 20 20  Select;         
267d0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65         /* The de
267e0 66 69 6e 69 74 69 6f 6e 20 6f 66 20 74 68 69 73  finition of this
267f0 20 43 54 45 20 2a 2f 0a 20 20 20 20 63 6f 6e 73   CTE */.    cons
26800 74 20 63 68 61 72 20 2a 7a 43 74 65 45 72 72 3b  t char *zCteErr;
26810 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45              /* E
26820 72 72 6f 72 20 6d 65 73 73 61 67 65 20 66 6f 72  rror message for
26830 20 63 69 72 63 75 6c 61 72 20 72 65 66 65 72 65   circular refere
26840 6e 63 65 73 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d  nces */.  } a[1]
26850 3b 0a 7d 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c  ;.};..#ifdef SQL
26860 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20  ITE_DEBUG./*.** 
26870 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
26880 68 65 20 54 72 65 65 56 69 65 77 20 6f 62 6a 65  he TreeView obje
26890 63 74 20 69 73 20 75 73 65 64 20 66 6f 72 20 70  ct is used for p
268a0 72 69 6e 74 69 6e 67 20 74 68 65 20 63 6f 6e 74  rinting the cont
268b0 65 6e 74 20 6f 66 0a 2a 2a 20 64 61 74 61 20 73  ent of.** data s
268c0 74 72 75 63 74 75 72 65 73 20 6f 6e 20 73 71 6c  tructures on sql
268d0 69 74 65 33 44 65 62 75 67 50 72 69 6e 74 66 28  ite3DebugPrintf(
268e0 29 20 75 73 69 6e 67 20 61 20 74 72 65 65 2d 6c  ) using a tree-l
268f0 69 6b 65 20 76 69 65 77 2e 0a 2a 2f 0a 73 74 72  ike view..*/.str
26900 75 63 74 20 54 72 65 65 56 69 65 77 20 7b 0a 20  uct TreeView {. 
26910 20 69 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20 20   int iLevel;    
26920 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63           /* Whic
26930 68 20 6c 65 76 65 6c 20 6f 66 20 74 68 65 20 74  h level of the t
26940 72 65 65 20 77 65 20 61 72 65 20 6f 6e 20 2a 2f  ree we are on */
26950 0a 20 20 75 38 20 20 62 4c 69 6e 65 5b 31 30 30  .  u8  bLine[100
26960 5d 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 44 72  ];         /* Dr
26970 61 77 20 76 65 72 74 69 63 61 6c 20 69 6e 20 63  aw vertical in c
26980 6f 6c 75 6d 6e 20 69 20 69 66 20 62 4c 69 6e 65  olumn i if bLine
26990 5b 69 5d 20 69 73 20 74 72 75 65 20 2a 2f 0a 7d  [i] is true */.}
269a0 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  ;.#endif /* SQLI
269b0 54 45 5f 44 45 42 55 47 20 2a 2f 0a 0a 2f 2a 0a  TE_DEBUG */../*.
269c0 2a 2a 20 54 68 69 73 20 6f 62 6a 65 63 74 20 69  ** This object i
269d0 73 20 75 73 65 64 20 69 6e 20 76 61 72 69 6f 75  s used in variou
269e0 73 20 77 61 79 73 2c 20 61 6c 6c 20 72 65 6c 61  s ways, all rela
269f0 74 65 64 20 74 6f 20 77 69 6e 64 6f 77 20 66 75  ted to window fu
26a00 6e 63 74 69 6f 6e 73 0a 2a 2a 0a 2a 2a 20 20 20  nctions.**.**   
26a10 28 31 29 20 41 20 73 69 6e 67 6c 65 20 69 6e 73  (1) A single ins
26a20 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74  tance of this st
26a30 72 75 63 74 75 72 65 20 69 73 20 61 74 74 61 63  ructure is attac
26a40 68 65 64 20 74 6f 20 74 68 65 0a 2a 2a 20 20 20  hed to the.**   
26a50 20 20 20 20 74 68 65 20 45 78 70 72 2e 70 57 69      the Expr.pWi
26a60 6e 20 66 69 65 6c 64 20 66 6f 72 20 65 61 63 68  n field for each
26a70 20 77 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e   window function
26a80 20 69 6e 20 61 6e 20 65 78 70 72 65 73 73 69 6f   in an expressio
26a90 6e 20 74 72 65 65 2e 0a 2a 2a 20 20 20 20 20 20  n tree..**      
26aa0 20 54 68 69 73 20 6f 62 6a 65 63 74 20 68 6f 6c   This object hol
26ab0 64 73 20 74 68 65 20 69 6e 66 6f 72 6d 61 74 69  ds the informati
26ac0 6f 6e 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20  on contained in 
26ad0 74 68 65 20 4f 56 45 52 20 63 6c 61 75 73 65 2c  the OVER clause,
26ae0 0a 2a 2a 20 20 20 20 20 20 20 70 6c 75 73 20 61  .**       plus a
26af0 64 64 69 74 69 6f 6e 61 6c 20 66 69 65 6c 64 73  dditional fields
26b00 20 75 73 65 64 20 64 75 72 69 6e 67 20 63 6f 64   used during cod
26b10 65 20 67 65 6e 65 72 61 74 69 6f 6e 2e 0a 2a 2a  e generation..**
26b20 0a 2a 2a 20 20 20 28 32 29 20 41 6c 6c 20 77 69  .**   (2) All wi
26b30 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 73 20 69  ndow functions i
26b40 6e 20 61 20 73 69 6e 67 6c 65 20 53 45 4c 45 43  n a single SELEC
26b50 54 20 66 6f 72 6d 20 61 20 6c 69 6e 6b 65 64 2d  T form a linked-
26b60 6c 69 73 74 0a 2a 2a 20 20 20 20 20 20 20 61 74  list.**       at
26b70 74 61 63 68 65 64 20 74 6f 20 53 65 6c 65 63 74  tached to Select
26b80 2e 70 57 69 6e 2e 20 20 54 68 65 20 57 69 6e 64  .pWin.  The Wind
26b90 6f 77 2e 70 46 75 6e 63 20 61 6e 64 20 57 69 6e  ow.pFunc and Win
26ba0 64 6f 77 2e 70 45 78 70 72 0a 2a 2a 20 20 20 20  dow.pExpr.**    
26bb0 20 20 20 66 69 65 6c 64 73 20 70 6f 69 6e 74 20     fields point 
26bc0 62 61 63 6b 20 74 6f 20 74 68 65 20 65 78 70 72  back to the expr
26bd0 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20 74  ession that is t
26be0 68 65 20 77 69 6e 64 6f 77 20 66 75 6e 63 74 69  he window functi
26bf0 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 20 20 28 33 29 20  on..**.**   (3) 
26c00 54 68 65 20 74 65 72 6d 73 20 6f 66 20 74 68 65  The terms of the
26c10 20 57 49 4e 44 4f 57 20 63 6c 61 75 73 65 20 6f   WINDOW clause o
26c20 66 20 61 20 53 45 4c 45 43 54 20 61 72 65 20 69  f a SELECT are i
26c30 6e 73 74 61 6e 63 65 73 20 6f 66 20 74 68 69 73  nstances of this
26c40 0a 2a 2a 20 20 20 20 20 20 20 6f 62 6a 65 63 74  .**       object
26c50 20 6f 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73   on a linked lis
26c60 74 20 61 74 74 61 63 68 65 64 20 74 6f 20 53 65  t attached to Se
26c70 6c 65 63 74 2e 70 57 69 6e 44 65 66 6e 2e 0a 2a  lect.pWinDefn..*
26c80 2a 0a 2a 2a 20 54 68 65 20 75 73 65 73 20 28 31  *.** The uses (1
26c90 29 20 61 6e 64 20 28 32 29 20 61 72 65 20 72 65  ) and (2) are re
26ca0 61 6c 6c 79 20 74 68 65 20 73 61 6d 65 20 57 69  ally the same Wi
26cb0 6e 64 6f 77 20 6f 62 6a 65 63 74 20 74 68 61 74  ndow object that
26cc0 20 6a 75 73 74 20 68 61 70 70 65 6e 73 0a 2a 2a   just happens.**
26cd0 20 74 6f 20 62 65 20 61 63 63 65 73 73 69 62 6c   to be accessibl
26ce0 65 20 69 6e 20 74 77 6f 20 64 69 66 66 65 72 65  e in two differe
26cf0 6e 74 20 77 61 79 73 2e 20 20 55 73 65 20 63 61  nt ways.  Use ca
26d00 73 65 20 28 33 29 20 61 72 65 20 73 65 70 61 72  se (3) are separ
26d10 61 74 65 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a  ate objects..*/.
26d20 73 74 72 75 63 74 20 57 69 6e 64 6f 77 20 7b 0a  struct Window {.
26d30 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
26d40 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
26d50 65 20 6f 66 20 77 69 6e 64 6f 77 20 28 6d 61 79  e of window (may
26d60 20 62 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 63   be NULL) */.  c
26d70 68 61 72 20 2a 7a 42 61 73 65 3b 20 20 20 20 20  har *zBase;     
26d80 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
26d90 66 20 62 61 73 65 20 77 69 6e 64 6f 77 20 66 6f  f base window fo
26da0 72 20 63 68 61 69 6e 69 6e 67 20 28 6d 61 79 20  r chaining (may 
26db0 62 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 45 78  be NULL) */.  Ex
26dc0 70 72 4c 69 73 74 20 2a 70 50 61 72 74 69 74 69  prList *pPartiti
26dd0 6f 6e 3b 20 20 20 2f 2a 20 50 41 52 54 49 54 49  on;   /* PARTITI
26de0 4f 4e 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a  ON BY clause */.
26df0 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4f 72 64    ExprList *pOrd
26e00 65 72 42 79 3b 20 20 20 20 20 2f 2a 20 4f 52 44  erBy;     /* ORD
26e10 45 52 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a  ER BY clause */.
26e20 20 20 75 38 20 65 46 72 6d 54 79 70 65 3b 20 20    u8 eFrmType;  
26e30 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f            /* TK_
26e40 52 41 4e 47 45 2c 20 54 4b 5f 47 52 4f 55 50 53  RANGE, TK_GROUPS
26e50 2c 20 54 4b 5f 52 4f 57 53 2c 20 6f 72 20 30 20  , TK_ROWS, or 0 
26e60 2a 2f 0a 20 20 75 38 20 65 53 74 61 72 74 3b 20  */.  u8 eStart; 
26e70 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
26e80 55 4e 42 4f 55 4e 44 45 44 2c 20 43 55 52 52 45  UNBOUNDED, CURRE
26e90 4e 54 2c 20 50 52 45 43 45 44 49 4e 47 20 6f 72  NT, PRECEDING or
26ea0 20 46 4f 4c 4c 4f 57 49 4e 47 20 2a 2f 0a 20 20   FOLLOWING */.  
26eb0 75 38 20 65 45 6e 64 3b 20 20 20 20 20 20 20 20  u8 eEnd;        
26ec0 20 20 20 20 20 20 20 20 2f 2a 20 55 4e 42 4f 55          /* UNBOU
26ed0 4e 44 45 44 2c 20 43 55 52 52 45 4e 54 2c 20 50  NDED, CURRENT, P
26ee0 52 45 43 45 44 49 4e 47 20 6f 72 20 46 4f 4c 4c  RECEDING or FOLL
26ef0 4f 57 49 4e 47 20 2a 2f 0a 20 20 75 38 20 62 49  OWING */.  u8 bI
26f00 6d 70 6c 69 63 69 74 46 72 61 6d 65 3b 20 20 20  mplicitFrame;   
26f10 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 66 72     /* True if fr
26f20 61 6d 65 20 77 61 73 20 69 6d 70 6c 69 63 69 74  ame was implicit
26f30 6c 79 20 73 70 65 63 69 66 69 65 64 20 2a 2f 0a  ly specified */.
26f40 20 20 75 38 20 65 45 78 63 6c 75 64 65 3b 20 20    u8 eExclude;  
26f50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f            /* TK_
26f60 4e 4f 2c 20 54 4b 5f 43 55 52 52 45 4e 54 2c 20  NO, TK_CURRENT, 
26f70 54 4b 5f 54 49 45 53 2c 20 54 4b 5f 47 52 4f 55  TK_TIES, TK_GROU
26f80 50 2c 20 6f 72 20 30 20 2a 2f 0a 20 20 45 78 70  P, or 0 */.  Exp
26f90 72 20 2a 70 53 74 61 72 74 3b 20 20 20 20 20 20  r *pStart;      
26fa0 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69       /* Expressi
26fb0 6f 6e 20 66 6f 72 20 22 3c 65 78 70 72 3e 20 50  on for "<expr> P
26fc0 52 45 43 45 44 49 4e 47 22 20 2a 2f 0a 20 20 45  RECEDING" */.  E
26fd0 78 70 72 20 2a 70 45 6e 64 3b 20 20 20 20 20 20  xpr *pEnd;      
26fe0 20 20 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73         /* Expres
26ff0 73 69 6f 6e 20 66 6f 72 20 22 3c 65 78 70 72 3e  sion for "<expr>
27000 20 46 4f 4c 4c 4f 57 49 4e 47 22 20 2a 2f 0a 20   FOLLOWING" */. 
27010 20 57 69 6e 64 6f 77 20 2a 70 4e 65 78 74 57 69   Window *pNextWi
27020 6e 3b 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74  n;       /* Next
27030 20 77 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e   window function
27040 20 62 65 6c 6f 6e 67 69 6e 67 20 74 6f 20 74 68   belonging to th
27050 69 73 20 53 45 4c 45 43 54 20 2a 2f 0a 20 20 45  is SELECT */.  E
27060 78 70 72 20 2a 70 46 69 6c 74 65 72 3b 20 20 20  xpr *pFilter;   
27070 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 46 49         /* The FI
27080 4c 54 45 52 20 65 78 70 72 65 73 73 69 6f 6e 20  LTER expression 
27090 2a 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a 70 46  */.  FuncDef *pF
270a0 75 6e 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  unc;         /* 
270b0 54 68 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  The function */.
270c0 20 20 69 6e 74 20 69 45 70 68 43 73 72 3b 20 20    int iEphCsr;  
270d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72            /* Par
270e0 74 69 74 69 6f 6e 20 62 75 66 66 65 72 20 6f 72  tition buffer or
270f0 20 50 65 65 72 20 62 75 66 66 65 72 20 2a 2f 0a   Peer buffer */.
27100 20 20 69 6e 74 20 72 65 67 41 63 63 75 6d 3b 0a    int regAccum;.
27110 20 20 69 6e 74 20 72 65 67 52 65 73 75 6c 74 3b    int regResult;
27120 0a 20 20 69 6e 74 20 63 73 72 41 70 70 3b 20 20  .  int csrApp;  
27130 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 75             /* Fu
27140 6e 63 74 69 6f 6e 20 63 75 72 73 6f 72 20 28 75  nction cursor (u
27150 73 65 64 20 62 79 20 6d 69 6e 2f 6d 61 78 29 20  sed by min/max) 
27160 2a 2f 0a 20 20 69 6e 74 20 72 65 67 41 70 70 3b  */.  int regApp;
27170 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
27180 46 75 6e 63 74 69 6f 6e 20 72 65 67 69 73 74 65  Function registe
27190 72 20 28 61 6c 73 6f 20 75 73 65 64 20 62 79 20  r (also used by 
271a0 6d 69 6e 2f 6d 61 78 29 20 2a 2f 0a 20 20 69 6e  min/max) */.  in
271b0 74 20 72 65 67 50 61 72 74 3b 20 20 20 20 20 20  t regPart;      
271c0 20 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f        /* Array o
271d0 66 20 72 65 67 69 73 74 65 72 73 20 66 6f 72 20  f registers for 
271e0 50 41 52 54 49 54 49 4f 4e 20 42 59 20 76 61 6c  PARTITION BY val
271f0 75 65 73 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  ues */.  Expr *p
27200 4f 77 6e 65 72 3b 20 20 20 20 20 20 20 20 20 20  Owner;          
27210 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 6f   /* Expression o
27220 62 6a 65 63 74 20 74 68 69 73 20 77 69 6e 64 6f  bject this windo
27230 77 20 69 73 20 61 74 74 61 63 68 65 64 20 74 6f  w is attached to
27240 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 75 66 66 65   */.  int nBuffe
27250 72 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a  rCol;         /*
27260 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
27270 6e 73 20 69 6e 20 62 75 66 66 65 72 20 74 61 62  ns in buffer tab
27280 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 69 41 72 67  le */.  int iArg
27290 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20  Col;            
272a0 2f 2a 20 4f 66 66 73 65 74 20 6f 66 20 66 69 72  /* Offset of fir
272b0 73 74 20 61 72 67 75 6d 65 6e 74 20 66 6f 72 20  st argument for 
272c0 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  this function */
272d0 0a 20 20 69 6e 74 20 72 65 67 4f 6e 65 3b 20 20  .  int regOne;  
272e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
272f0 67 69 73 74 65 72 20 63 6f 6e 74 61 69 6e 69 6e  gister containin
27300 67 20 63 6f 6e 73 74 61 6e 74 20 76 61 6c 75 65  g constant value
27310 20 31 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 53   1 */.  int regS
27320 74 61 72 74 52 6f 77 69 64 3b 0a 20 20 69 6e 74  tartRowid;.  int
27330 20 72 65 67 45 6e 64 52 6f 77 69 64 3b 0a 7d 3b   regEndRowid;.};
27340 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
27350 5f 4f 4d 49 54 5f 57 49 4e 44 4f 57 46 55 4e 43  _OMIT_WINDOWFUNC
27360 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 6e  .void sqlite3Win
27370 64 6f 77 44 65 6c 65 74 65 28 73 71 6c 69 74 65  dowDelete(sqlite
27380 33 2a 2c 20 57 69 6e 64 6f 77 2a 29 3b 0a 76 6f  3*, Window*);.vo
27390 69 64 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77  id sqlite3Window
273a0 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74  ListDelete(sqlit
273b0 65 33 20 2a 64 62 2c 20 57 69 6e 64 6f 77 20 2a  e3 *db, Window *
273c0 70 29 3b 0a 57 69 6e 64 6f 77 20 2a 73 71 6c 69  p);.Window *sqli
273d0 74 65 33 57 69 6e 64 6f 77 41 6c 6c 6f 63 28 50  te3WindowAlloc(P
273e0 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  arse*, int, int,
273f0 20 45 78 70 72 2a 2c 20 69 6e 74 20 2c 20 45 78   Expr*, int , Ex
27400 70 72 2a 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73  pr*, u8);.void s
27410 71 6c 69 74 65 33 57 69 6e 64 6f 77 41 74 74 61  qlite3WindowAtta
27420 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  ch(Parse*, Expr*
27430 2c 20 57 69 6e 64 6f 77 2a 29 3b 0a 69 6e 74 20  , Window*);.int 
27440 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 43 6f 6d  sqlite3WindowCom
27450 70 61 72 65 28 50 61 72 73 65 2a 2c 20 57 69 6e  pare(Parse*, Win
27460 64 6f 77 2a 2c 20 57 69 6e 64 6f 77 2a 29 3b 0a  dow*, Window*);.
27470 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 6e 64  void sqlite3Wind
27480 6f 77 43 6f 64 65 49 6e 69 74 28 50 61 72 73 65  owCodeInit(Parse
27490 2a 2c 20 57 69 6e 64 6f 77 2a 29 3b 0a 76 6f 69  *, Window*);.voi
274a0 64 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 43  d sqlite3WindowC
274b0 6f 64 65 53 74 65 70 28 50 61 72 73 65 2a 2c 20  odeStep(Parse*, 
274c0 53 65 6c 65 63 74 2a 2c 20 57 68 65 72 65 49 6e  Select*, WhereIn
274d0 66 6f 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  fo*, int, int);.
274e0 69 6e 74 20 73 71 6c 69 74 65 33 57 69 6e 64 6f  int sqlite3Windo
274f0 77 52 65 77 72 69 74 65 28 50 61 72 73 65 2a 2c  wRewrite(Parse*,
27500 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73   Select*);.int s
27510 71 6c 69 74 65 33 45 78 70 61 6e 64 53 75 62 71  qlite3ExpandSubq
27520 75 65 72 79 28 50 61 72 73 65 2a 2c 20 73 74 72  uery(Parse*, str
27530 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d  uct SrcList_item
27540 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
27550 57 69 6e 64 6f 77 55 70 64 61 74 65 28 50 61 72  WindowUpdate(Par
27560 73 65 2a 2c 20 57 69 6e 64 6f 77 2a 2c 20 57 69  se*, Window*, Wi
27570 6e 64 6f 77 2a 2c 20 46 75 6e 63 44 65 66 2a 29  ndow*, FuncDef*)
27580 3b 0a 57 69 6e 64 6f 77 20 2a 73 71 6c 69 74 65  ;.Window *sqlite
27590 33 57 69 6e 64 6f 77 44 75 70 28 73 71 6c 69 74  3WindowDup(sqlit
275a0 65 33 20 2a 64 62 2c 20 45 78 70 72 20 2a 70 4f  e3 *db, Expr *pO
275b0 77 6e 65 72 2c 20 57 69 6e 64 6f 77 20 2a 70 29  wner, Window *p)
275c0 3b 0a 57 69 6e 64 6f 77 20 2a 73 71 6c 69 74 65  ;.Window *sqlite
275d0 33 57 69 6e 64 6f 77 4c 69 73 74 44 75 70 28 73  3WindowListDup(s
275e0 71 6c 69 74 65 33 20 2a 64 62 2c 20 57 69 6e 64  qlite3 *db, Wind
275f0 6f 77 20 2a 70 29 3b 0a 76 6f 69 64 20 73 71 6c  ow *p);.void sql
27600 69 74 65 33 57 69 6e 64 6f 77 46 75 6e 63 74 69  ite3WindowFuncti
27610 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20  ons(void);.void 
27620 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 43 68 61  sqlite3WindowCha
27630 69 6e 28 50 61 72 73 65 2a 2c 20 57 69 6e 64 6f  in(Parse*, Windo
27640 77 2a 2c 20 57 69 6e 64 6f 77 2a 29 3b 0a 57 69  w*, Window*);.Wi
27650 6e 64 6f 77 20 2a 73 71 6c 69 74 65 33 57 69 6e  ndow *sqlite3Win
27660 64 6f 77 41 73 73 65 6d 62 6c 65 28 50 61 72 73  dowAssemble(Pars
27670 65 2a 2c 20 57 69 6e 64 6f 77 2a 2c 20 45 78 70  e*, Window*, Exp
27680 72 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74  rList*, ExprList
27690 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 23 65 6c 73  *, Token*);.#els
276a0 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
276b0 65 33 57 69 6e 64 6f 77 44 65 6c 65 74 65 28 61  e3WindowDelete(a
276c0 2c 62 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,b).# define sql
276d0 69 74 65 33 57 69 6e 64 6f 77 46 75 6e 63 74 69  ite3WindowFuncti
276e0 6f 6e 73 28 29 0a 23 20 64 65 66 69 6e 65 20 73  ons().# define s
276f0 71 6c 69 74 65 33 57 69 6e 64 6f 77 41 74 74 61  qlite3WindowAtta
27700 63 68 28 61 2c 62 2c 63 29 0a 23 65 6e 64 69 66  ch(a,b,c).#endif
27710 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 75 6d 69 6e 67  ../*.** Assuming
27720 20 7a 49 6e 20 70 6f 69 6e 74 73 20 74 6f 20 74   zIn points to t
27730 68 65 20 66 69 72 73 74 20 62 79 74 65 20 6f 66  he first byte of
27740 20 61 20 55 54 46 2d 38 20 63 68 61 72 61 63 74   a UTF-8 charact
27750 65 72 2c 0a 2a 2a 20 61 64 76 61 6e 63 65 20 7a  er,.** advance z
27760 49 6e 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74  In to point to t
27770 68 65 20 66 69 72 73 74 20 62 79 74 65 20 6f 66  he first byte of
27780 20 74 68 65 20 6e 65 78 74 20 55 54 46 2d 38 20   the next UTF-8 
27790 63 68 61 72 61 63 74 65 72 2e 0a 2a 2f 0a 23 64  character..*/.#d
277a0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4b 49  efine SQLITE_SKI
277b0 50 5f 55 54 46 38 28 7a 49 6e 29 20 7b 20 20 20  P_UTF8(zIn) {   
277c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
277d0 20 20 20 20 20 5c 0a 20 20 69 66 28 20 28 2a 28       \.  if( (*(
277e0 7a 49 6e 2b 2b 29 29 3e 3d 30 78 63 30 20 29 7b  zIn++))>=0xc0 ){
277f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a                \.
27810 20 20 20 20 77 68 69 6c 65 28 20 28 2a 7a 49 6e      while( (*zIn
27820 20 26 20 30 78 63 30 29 3d 3d 30 78 38 30 20 29   & 0xc0)==0x80 )
27830 7b 20 7a 49 6e 2b 2b 3b 20 7d 20 20 20 20 20 20  { zIn++; }      
27840 20 20 20 20 20 20 20 5c 0a 20 20 7d 20 20 20 20         \.  }    
27850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27880 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53  \.}../*.** The S
27890 51 4c 49 54 45 5f 2a 5f 42 4b 50 54 20 6d 61 63  QLITE_*_BKPT mac
278a0 72 6f 73 20 61 72 65 20 73 75 62 73 74 69 74 75  ros are substitu
278b0 74 65 73 20 66 6f 72 20 74 68 65 20 65 72 72 6f  tes for the erro
278c0 72 20 63 6f 64 65 73 20 77 69 74 68 0a 2a 2a 20  r codes with.** 
278d0 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 62 75  the same name bu
278e0 74 20 77 69 74 68 6f 75 74 20 74 68 65 20 5f 42  t without the _B
278f0 4b 50 54 20 73 75 66 66 69 78 2e 20 20 54 68 65  KPT suffix.  The
27900 73 65 20 6d 61 63 72 6f 73 20 69 6e 76 6f 6b 65  se macros invoke
27910 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20 74 68 61  .** routines tha
27920 74 20 72 65 70 6f 72 74 20 74 68 65 20 6c 69 6e  t report the lin
27930 65 2d 6e 75 6d 62 65 72 20 6f 6e 20 77 68 69 63  e-number on whic
27940 68 20 74 68 65 20 65 72 72 6f 72 20 6f 72 69 67  h the error orig
27950 69 6e 61 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20  inated.** using 
27960 73 71 6c 69 74 65 33 5f 6c 6f 67 28 29 2e 20 20  sqlite3_log().  
27970 54 68 65 20 72 6f 75 74 69 6e 65 73 20 61 6c 73  The routines als
27980 6f 20 70 72 6f 76 69 64 65 20 61 20 63 6f 6e 76  o provide a conv
27990 65 6e 69 65 6e 74 20 70 6c 61 63 65 0a 2a 2a 20  enient place.** 
279a0 74 6f 20 73 65 74 20 61 20 64 65 62 75 67 67 65  to set a debugge
279b0 72 20 62 72 65 61 6b 70 6f 69 6e 74 2e 0a 2a 2f  r breakpoint..*/
279c0 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 70 6f  .int sqlite3Repo
279d0 72 74 45 72 72 6f 72 28 69 6e 74 20 69 45 72 72  rtError(int iErr
279e0 2c 20 69 6e 74 20 6c 69 6e 65 6e 6f 2c 20 63 6f  , int lineno, co
279f0 6e 73 74 20 63 68 61 72 20 2a 7a 54 79 70 65 29  nst char *zType)
27a00 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 72  ;.int sqlite3Cor
27a10 72 75 70 74 45 72 72 6f 72 28 69 6e 74 29 3b 0a  ruptError(int);.
27a20 69 6e 74 20 73 71 6c 69 74 65 33 4d 69 73 75 73  int sqlite3Misus
27a30 65 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74  eError(int);.int
27a40 20 73 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e   sqlite3Cantopen
27a50 45 72 72 6f 72 28 69 6e 74 29 3b 0a 23 64 65 66  Error(int);.#def
27a60 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55  ine SQLITE_CORRU
27a70 50 54 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 43  PT_BKPT sqlite3C
27a80 6f 72 72 75 70 74 45 72 72 6f 72 28 5f 5f 4c 49  orruptError(__LI
27a90 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51  NE__).#define SQ
27aa0 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54  LITE_MISUSE_BKPT
27ab0 20 73 71 6c 69 74 65 33 4d 69 73 75 73 65 45 72   sqlite3MisuseEr
27ac0 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64  ror(__LINE__).#d
27ad0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 41 4e  efine SQLITE_CAN
27ae0 54 4f 50 45 4e 5f 42 4b 50 54 20 73 71 6c 69 74  TOPEN_BKPT sqlit
27af0 65 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28  e3CantopenError(
27b00 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 69 66 64 65 66  __LINE__).#ifdef
27b10 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
27b20 69 6e 74 20 73 71 6c 69 74 65 33 4e 6f 6d 65 6d  int sqlite3Nomem
27b30 45 72 72 6f 72 28 69 6e 74 29 3b 0a 20 20 69 6e  Error(int);.  in
27b40 74 20 73 71 6c 69 74 65 33 49 6f 65 72 72 6e 6f  t sqlite3Ioerrno
27b50 6d 65 6d 45 72 72 6f 72 28 69 6e 74 29 3b 0a 20  memError(int);. 
27b60 20 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 72 72   int sqlite3Corr
27b70 75 70 74 50 67 6e 6f 45 72 72 6f 72 28 69 6e 74  uptPgnoError(int
27b80 2c 50 67 6e 6f 29 3b 0a 23 20 64 65 66 69 6e 65  ,Pgno);.# define
27b90 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b   SQLITE_NOMEM_BK
27ba0 50 54 20 73 71 6c 69 74 65 33 4e 6f 6d 65 6d 45  PT sqlite3NomemE
27bb0 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23  rror(__LINE__).#
27bc0 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49   define SQLITE_I
27bd0 4f 45 52 52 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20  OERR_NOMEM_BKPT 
27be0 73 71 6c 69 74 65 33 49 6f 65 72 72 6e 6f 6d 65  sqlite3Ioerrnome
27bf0 6d 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29  mError(__LINE__)
27c00 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
27c10 5f 43 4f 52 52 55 50 54 5f 50 47 4e 4f 28 50 29  _CORRUPT_PGNO(P)
27c20 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74 50   sqlite3CorruptP
27c30 67 6e 6f 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f  gnoError(__LINE_
27c40 5f 2c 28 50 29 29 0a 23 65 6c 73 65 0a 23 20 64  _,(P)).#else.# d
27c50 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 4d  efine SQLITE_NOM
27c60 45 4d 5f 42 4b 50 54 20 53 51 4c 49 54 45 5f 4e  EM_BKPT SQLITE_N
27c70 4f 4d 45 4d 0a 23 20 64 65 66 69 6e 65 20 53 51  OMEM.# define SQ
27c80 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d  LITE_IOERR_NOMEM
27c90 5f 42 4b 50 54 20 53 51 4c 49 54 45 5f 49 4f 45  _BKPT SQLITE_IOE
27ca0 52 52 5f 4e 4f 4d 45 4d 0a 23 20 64 65 66 69 6e  RR_NOMEM.# defin
27cb0 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  e SQLITE_CORRUPT
27cc0 5f 50 47 4e 4f 28 50 29 20 73 71 6c 69 74 65 33  _PGNO(P) sqlite3
27cd0 43 6f 72 72 75 70 74 45 72 72 6f 72 28 5f 5f 4c  CorruptError(__L
27ce0 49 4e 45 5f 5f 29 0a 23 65 6e 64 69 66 0a 0a 2f  INE__).#endif../
27cf0 2a 0a 2a 2a 20 46 54 53 33 20 61 6e 64 20 46 54  *.** FTS3 and FT
27d00 53 34 20 62 6f 74 68 20 72 65 71 75 69 72 65 20  S4 both require 
27d10 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73 75  virtual table su
27d20 70 70 6f 72 74 0a 2a 2f 0a 23 69 66 20 64 65 66  pport.*/.#if def
27d30 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
27d40 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 23  _VIRTUALTABLE).#
27d50 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e   undef SQLITE_EN
27d60 41 42 4c 45 5f 46 54 53 33 0a 23 20 75 6e 64 65  ABLE_FTS3.# unde
27d70 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
27d80 46 54 53 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  FTS4.#endif../*.
27d90 2a 2a 20 46 54 53 34 20 69 73 20 72 65 61 6c 6c  ** FTS4 is reall
27da0 79 20 61 6e 20 65 78 74 65 6e 73 69 6f 6e 20 66  y an extension f
27db0 6f 72 20 46 54 53 33 2e 20 20 49 74 20 69 73 20  or FTS3.  It is 
27dc0 65 6e 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68  enabled using th
27dd0 65 0a 2a 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42  e.** SQLITE_ENAB
27de0 4c 45 5f 46 54 53 33 20 6d 61 63 72 6f 2e 20 20  LE_FTS3 macro.  
27df0 42 75 74 20 74 6f 20 61 76 6f 69 64 20 63 6f 6e  But to avoid con
27e00 66 75 73 69 6f 6e 20 77 65 20 61 6c 73 6f 20 63  fusion we also c
27e10 61 6c 6c 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54  all.** the SQLIT
27e20 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 20 6d 61  E_ENABLE_FTS4 ma
27e30 63 72 6f 20 74 6f 20 73 65 72 76 65 20 61 73 20  cro to serve as 
27e40 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 53 51 4c  an alias for SQL
27e50 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 2e  ITE_ENABLE_FTS3.
27e60 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
27e70 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
27e80 53 34 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  S4) && !defined(
27e90 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
27ea0 53 33 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  S3).# define SQL
27eb0 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20  ITE_ENABLE_FTS3 
27ec0 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  1.#endif../*.** 
27ed0 54 68 65 20 63 74 79 70 65 2e 68 20 68 65 61 64  The ctype.h head
27ee0 65 72 20 69 73 20 6e 65 65 64 65 64 20 66 6f 72  er is needed for
27ef0 20 6e 6f 6e 2d 41 53 43 49 49 20 73 79 73 74 65   non-ASCII syste
27f00 6d 73 2e 20 20 49 74 20 69 73 20 61 6c 73 6f 0a  ms.  It is also.
27f10 2a 2a 20 6e 65 65 64 65 64 20 62 79 20 46 54 53  ** needed by FTS
27f20 33 20 77 68 65 6e 20 46 54 53 33 20 69 73 20 69  3 when FTS3 is i
27f30 6e 63 6c 75 64 65 64 20 69 6e 20 74 68 65 20 61  ncluded in the a
27f40 6d 61 6c 67 61 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  malgamation..*/.
27f50 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
27f60 49 54 45 5f 41 53 43 49 49 29 20 7c 7c 20 5c 0a  ITE_ASCII) || \.
27f70 20 20 20 20 28 64 65 66 69 6e 65 64 28 53 51 4c      (defined(SQL
27f80 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29  ITE_ENABLE_FTS3)
27f90 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49   && defined(SQLI
27fa0 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 29  TE_AMALGAMATION)
27fb0 29 0a 23 20 69 6e 63 6c 75 64 65 20 3c 63 74 79  ).# include <cty
27fc0 70 65 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a  pe.h>.#endif../*
27fd0 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
27fe0 67 20 6d 61 63 72 6f 73 20 6d 69 6d 69 63 20 74  g macros mimic t
27ff0 68 65 20 73 74 61 6e 64 61 72 64 20 6c 69 62 72  he standard libr
28000 61 72 79 20 66 75 6e 63 74 69 6f 6e 73 20 74 6f  ary functions to
28010 75 70 70 65 72 28 29 2c 0a 2a 2a 20 69 73 73 70  upper(),.** issp
28020 61 63 65 28 29 2c 20 69 73 61 6c 6e 75 6d 28 29  ace(), isalnum()
28030 2c 20 69 73 64 69 67 69 74 28 29 20 61 6e 64 20  , isdigit() and 
28040 69 73 78 64 69 67 69 74 28 29 2c 20 72 65 73 70  isxdigit(), resp
28050 65 63 74 69 76 65 6c 79 2e 20 54 68 65 0a 2a 2a  ectively. The.**
28060 20 73 71 6c 69 74 65 20 76 65 72 73 69 6f 6e 73   sqlite versions
28070 20 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f 72 20 41   only work for A
28080 53 43 49 49 20 63 68 61 72 61 63 74 65 72 73 2c  SCII characters,
28090 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 6c   regardless of l
280a0 6f 63 61 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66  ocale..*/.#ifdef
280b0 20 53 51 4c 49 54 45 5f 41 53 43 49 49 0a 23 20   SQLITE_ASCII.# 
280c0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f  define sqlite3To
280d0 75 70 70 65 72 28 78 29 20 20 28 28 78 29 26 7e  upper(x)  ((x)&~
280e0 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70  (sqlite3CtypeMap
280f0 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
28100 28 78 29 5d 26 30 78 32 30 29 29 0a 23 20 64 65  (x)]&0x20)).# de
28110 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70  fine sqlite3Issp
28120 61 63 65 28 78 29 20 20 20 28 73 71 6c 69 74 65  ace(x)   (sqlite
28130 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67  3CtypeMap[(unsig
28140 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78  ned char)(x)]&0x
28150 30 31 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  01).# define sql
28160 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20 20  ite3Isalnum(x)  
28170 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61   (sqlite3CtypeMa
28180 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  p[(unsigned char
28190 29 28 78 29 5d 26 30 78 30 36 29 0a 23 20 64 65  )(x)]&0x06).# de
281a0 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c  fine sqlite3Isal
281b0 70 68 61 28 78 29 20 20 20 28 73 71 6c 69 74 65  pha(x)   (sqlite
281c0 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67  3CtypeMap[(unsig
281d0 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78  ned char)(x)]&0x
281e0 30 32 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  02).# define sql
281f0 69 74 65 33 49 73 64 69 67 69 74 28 78 29 20 20  ite3Isdigit(x)  
28200 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61   (sqlite3CtypeMa
28210 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  p[(unsigned char
28220 29 28 78 29 5d 26 30 78 30 34 29 0a 23 20 64 65  )(x)]&0x04).# de
28230 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 78 64  fine sqlite3Isxd
28240 69 67 69 74 28 78 29 20 20 28 73 71 6c 69 74 65  igit(x)  (sqlite
28250 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67  3CtypeMap[(unsig
28260 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78  ned char)(x)]&0x
28270 30 38 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  08).# define sql
28280 69 74 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20  ite3Tolower(x)  
28290 20 28 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f   (sqlite3UpperTo
282a0 4c 6f 77 65 72 5b 28 75 6e 73 69 67 6e 65 64 20  Lower[(unsigned 
282b0 63 68 61 72 29 28 78 29 5d 29 0a 23 20 64 65 66  char)(x)]).# def
282c0 69 6e 65 20 73 71 6c 69 74 65 33 49 73 71 75 6f  ine sqlite3Isquo
282d0 74 65 28 78 29 20 20 20 28 73 71 6c 69 74 65 33  te(x)   (sqlite3
282e0 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e  CtypeMap[(unsign
282f0 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 38  ed char)(x)]&0x8
28300 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  0).#else.# defin
28310 65 20 73 71 6c 69 74 65 33 54 6f 75 70 70 65 72  e sqlite3Toupper
28320 28 78 29 20 20 20 74 6f 75 70 70 65 72 28 28 75  (x)   toupper((u
28330 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
28340 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
28350 65 33 49 73 73 70 61 63 65 28 78 29 20 20 20 69  e3Isspace(x)   i
28360 73 73 70 61 63 65 28 28 75 6e 73 69 67 6e 65 64  sspace((unsigned
28370 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
28380 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 6e  ine sqlite3Isaln
28390 75 6d 28 78 29 20 20 20 69 73 61 6c 6e 75 6d 28  um(x)   isalnum(
283a0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
283b0 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  x)).# define sql
283c0 69 74 65 33 49 73 61 6c 70 68 61 28 78 29 20 20  ite3Isalpha(x)  
283d0 20 69 73 61 6c 70 68 61 28 28 75 6e 73 69 67 6e   isalpha((unsign
283e0 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64  ed char)(x)).# d
283f0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 64  efine sqlite3Isd
28400 69 67 69 74 28 78 29 20 20 20 69 73 64 69 67 69  igit(x)   isdigi
28410 74 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  t((unsigned char
28420 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
28430 71 6c 69 74 65 33 49 73 78 64 69 67 69 74 28 78  qlite3Isxdigit(x
28440 29 20 20 69 73 78 64 69 67 69 74 28 28 75 6e 73  )  isxdigit((uns
28450 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
28460 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
28470 54 6f 6c 6f 77 65 72 28 78 29 20 20 20 74 6f 6c  Tolower(x)   tol
28480 6f 77 65 72 28 28 75 6e 73 69 67 6e 65 64 20 63  ower((unsigned c
28490 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
284a0 65 20 73 71 6c 69 74 65 33 49 73 71 75 6f 74 65  e sqlite3Isquote
284b0 28 78 29 20 20 20 28 28 78 29 3d 3d 27 22 27 7c  (x)   ((x)=='"'|
284c0 7c 28 78 29 3d 3d 27 5c 27 27 7c 7c 28 78 29 3d  |(x)=='\''||(x)=
284d0 3d 27 5b 27 7c 7c 28 78 29 3d 3d 27 60 27 29 0a  ='['||(x)=='`').
284e0 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74  #endif.int sqlit
284f0 65 33 49 73 49 64 43 68 61 72 28 75 38 29 3b 0a  e3IsIdChar(u8);.
28500 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 6e 61 6c 20  ./*.** Internal 
28510 66 75 6e 63 74 69 6f 6e 20 70 72 6f 74 6f 74 79  function prototy
28520 70 65 73 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  pes.*/.int sqlit
28530 65 33 53 74 72 49 43 6d 70 28 63 6f 6e 73 74 20  e3StrICmp(const 
28540 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
28550 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  *);.int sqlite3S
28560 74 72 6c 65 6e 33 30 28 63 6f 6e 73 74 20 63 68  trlen30(const ch
28570 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65 20 73 71  ar*);.#define sq
28580 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 4e 4e 28  lite3Strlen30NN(
28590 43 29 20 28 73 74 72 6c 65 6e 28 43 29 26 30 78  C) (strlen(C)&0x
285a0 33 66 66 66 66 66 66 66 29 0a 63 68 61 72 20 2a  3fffffff).char *
285b0 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 54 79 70  sqlite3ColumnTyp
285c0 65 28 43 6f 6c 75 6d 6e 2a 2c 63 68 61 72 2a 29  e(Column*,char*)
285d0 3b 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65  ;.#define sqlite
285e0 33 53 74 72 4e 49 43 6d 70 20 73 71 6c 69 74 65  3StrNICmp sqlite
285f0 33 5f 73 74 72 6e 69 63 6d 70 0a 0a 69 6e 74 20  3_strnicmp..int 
28600 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 49 6e 69  sqlite3MallocIni
28610 74 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71  t(void);.void sq
28620 6c 69 74 65 33 4d 61 6c 6c 6f 63 45 6e 64 28 76  lite3MallocEnd(v
28630 6f 69 64 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  oid);.void *sqli
28640 74 65 33 4d 61 6c 6c 6f 63 28 75 36 34 29 3b 0a  te3Malloc(u64);.
28650 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c  void *sqlite3Mal
28660 6c 6f 63 5a 65 72 6f 28 75 36 34 29 3b 0a 76 6f  locZero(u64);.vo
28670 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c  id *sqlite3DbMal
28680 6c 6f 63 5a 65 72 6f 28 73 71 6c 69 74 65 33 2a  locZero(sqlite3*
28690 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71  , u64);.void *sq
286a0 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77  lite3DbMallocRaw
286b0 28 73 71 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b  (sqlite3*, u64);
286c0 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62  .void *sqlite3Db
286d0 4d 61 6c 6c 6f 63 52 61 77 4e 4e 28 73 71 6c 69  MallocRawNN(sqli
286e0 74 65 33 2a 2c 20 75 36 34 29 3b 0a 63 68 61 72  te3*, u64);.char
286f0 20 2a 73 71 6c 69 74 65 33 44 62 53 74 72 44 75   *sqlite3DbStrDu
28700 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  p(sqlite3*,const
28710 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 2a 73   char*);.char *s
28720 71 6c 69 74 65 33 44 62 53 74 72 4e 44 75 70 28  qlite3DbStrNDup(
28730 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
28740 68 61 72 2a 2c 20 75 36 34 29 3b 0a 63 68 61 72  har*, u64);.char
28750 20 2a 73 71 6c 69 74 65 33 44 62 53 70 61 6e 44   *sqlite3DbSpanD
28760 75 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  up(sqlite3*,cons
28770 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
28780 61 72 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  ar*);.void *sqli
28790 74 65 33 52 65 61 6c 6c 6f 63 28 76 6f 69 64 2a  te3Realloc(void*
287a0 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71  , u64);.void *sq
287b0 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 4f 72  lite3DbReallocOr
287c0 46 72 65 65 28 73 71 6c 69 74 65 33 20 2a 2c 20  Free(sqlite3 *, 
287d0 76 6f 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f  void *, u64);.vo
287e0 69 64 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61  id *sqlite3DbRea
287f0 6c 6c 6f 63 28 73 71 6c 69 74 65 33 20 2a 2c 20  lloc(sqlite3 *, 
28800 76 6f 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f  void *, u64);.vo
28810 69 64 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  id sqlite3DbFree
28820 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a  (sqlite3*, void*
28830 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
28840 62 46 72 65 65 4e 4e 28 73 71 6c 69 74 65 33 2a  bFreeNN(sqlite3*
28850 2c 20 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71  , void*);.int sq
28860 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 28  lite3MallocSize(
28870 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  void*);.int sqli
28880 74 65 33 44 62 4d 61 6c 6c 6f 63 53 69 7a 65 28  te3DbMallocSize(
28890 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29  sqlite3*, void*)
288a0 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50  ;.void *sqlite3P
288b0 61 67 65 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a  ageMalloc(int);.
288c0 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 67 65  void sqlite3Page
288d0 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69  Free(void*);.voi
288e0 64 20 73 71 6c 69 74 65 33 4d 65 6d 53 65 74 44  d sqlite3MemSetD
288f0 65 66 61 75 6c 74 28 76 6f 69 64 29 3b 0a 23 69  efault(void);.#i
28900 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54  fndef SQLITE_UNT
28910 45 53 54 41 42 4c 45 0a 76 6f 69 64 20 73 71 6c  ESTABLE.void sql
28920 69 74 65 33 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  ite3BenignMalloc
28930 48 6f 6f 6b 73 28 76 6f 69 64 20 28 2a 29 28 76  Hooks(void (*)(v
28940 6f 69 64 29 2c 20 76 6f 69 64 20 28 2a 29 28 76  oid), void (*)(v
28950 6f 69 64 29 29 3b 0a 23 65 6e 64 69 66 0a 69 6e  oid));.#endif.in
28960 74 20 73 71 6c 69 74 65 33 48 65 61 70 4e 65 61  t sqlite3HeapNea
28970 72 6c 79 46 75 6c 6c 28 76 6f 69 64 29 3b 0a 0a  rlyFull(void);..
28980 2f 2a 0a 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73  /*.** On systems
28990 20 77 69 74 68 20 61 6d 70 6c 65 20 73 74 61 63   with ample stac
289a0 6b 20 73 70 61 63 65 20 61 6e 64 20 74 68 61 74  k space and that
289b0 20 73 75 70 70 6f 72 74 20 61 6c 6c 6f 63 61 28   support alloca(
289c0 29 2c 20 6d 61 6b 65 0a 2a 2a 20 75 73 65 20 6f  ), make.** use o
289d0 66 20 61 6c 6c 6f 63 61 28 29 20 74 6f 20 6f 62  f alloca() to ob
289e0 74 61 69 6e 20 73 70 61 63 65 20 66 6f 72 20 6c  tain space for l
289f0 61 72 67 65 20 61 75 74 6f 6d 61 74 69 63 20 6f  arge automatic o
28a00 62 6a 65 63 74 73 2e 20 20 42 79 20 64 65 66 61  bjects.  By defa
28a10 75 6c 74 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20 73  ult,.** obtain s
28a20 70 61 63 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63  pace from malloc
28a30 28 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 6c  ()..**.** The al
28a40 6c 6f 63 61 28 29 20 72 6f 75 74 69 6e 65 20 6e  loca() routine n
28a50 65 76 65 72 20 72 65 74 75 72 6e 73 20 4e 55 4c  ever returns NUL
28a60 4c 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61  L.  This will ca
28a70 75 73 65 20 63 6f 64 65 20 70 61 74 68 73 0a 2a  use code paths.*
28a80 2a 20 74 68 61 74 20 64 65 61 6c 20 77 69 74 68  * that deal with
28a90 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c   sqlite3StackAll
28aa0 6f 63 28 29 20 66 61 69 6c 75 72 65 73 20 74 6f  oc() failures to
28ab0 20 62 65 20 75 6e 72 65 61 63 68 61 62 6c 65 2e   be unreachable.
28ac0 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
28ad0 45 5f 55 53 45 5f 41 4c 4c 4f 43 41 0a 23 20 64  E_USE_ALLOCA.# d
28ae0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
28af0 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20  ckAllocRaw(D,N) 
28b00 20 20 61 6c 6c 6f 63 61 28 4e 29 0a 23 20 64 65    alloca(N).# de
28b10 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
28b20 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20  kAllocZero(D,N) 
28b30 20 6d 65 6d 73 65 74 28 61 6c 6c 6f 63 61 28 4e   memset(alloca(N
28b40 29 2c 20 30 2c 20 4e 29 0a 23 20 64 65 66 69 6e  ), 0, N).# defin
28b50 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72  e sqlite3StackFr
28b60 65 65 28 44 2c 50 29 0a 23 65 6c 73 65 0a 23 20  ee(D,P).#else.# 
28b70 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
28b80 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29  ackAllocRaw(D,N)
28b90 20 20 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c     sqlite3DbMall
28ba0 6f 63 52 61 77 28 44 2c 4e 29 0a 23 20 64 65 66  ocRaw(D,N).# def
28bb0 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
28bc0 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20  AllocZero(D,N)  
28bd0 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a  sqlite3DbMallocZ
28be0 65 72 6f 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e  ero(D,N).# defin
28bf0 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72  e sqlite3StackFr
28c00 65 65 28 44 2c 50 29 20 20 20 20 20 20 20 73 71  ee(D,P)       sq
28c10 6c 69 74 65 33 44 62 46 72 65 65 28 44 2c 50 29  lite3DbFree(D,P)
28c20 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 44 6f 20 6e  .#endif../* Do n
28c30 6f 74 20 61 6c 6c 6f 77 20 62 6f 74 68 20 4d 45  ot allow both ME
28c40 4d 53 59 53 35 20 61 6e 64 20 4d 45 4d 53 59 53  MSYS5 and MEMSYS
28c50 33 20 74 6f 20 62 65 20 64 65 66 69 6e 65 64 20  3 to be defined 
28c60 74 6f 67 65 74 68 65 72 2e 20 20 49 66 20 74 68  together.  If th
28c70 65 79 0a 2a 2a 20 61 72 65 2c 20 64 69 73 61 62  ey.** are, disab
28c80 6c 65 20 4d 45 4d 53 59 53 33 0a 2a 2f 0a 23 69  le MEMSYS3.*/.#i
28c90 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
28ca0 4c 45 5f 4d 45 4d 53 59 53 35 0a 63 6f 6e 73 74  LE_MEMSYS5.const
28cb0 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74   sqlite3_mem_met
28cc0 68 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d  hods *sqlite3Mem
28cd0 47 65 74 4d 65 6d 73 79 73 35 28 76 6f 69 64 29  GetMemsys5(void)
28ce0 3b 0a 23 75 6e 64 65 66 20 53 51 4c 49 54 45 5f  ;.#undef SQLITE_
28cf0 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a 23  ENABLE_MEMSYS3.#
28d00 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c  endif.#ifdef SQL
28d10 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59  ITE_ENABLE_MEMSY
28d20 53 33 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  S3.const sqlite3
28d30 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71  _mem_methods *sq
28d40 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79  lite3MemGetMemsy
28d50 73 33 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66  s3(void);.#endif
28d60 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ...#ifndef SQLIT
28d70 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 0a 20 20 73  E_MUTEX_OMIT.  s
28d80 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74  qlite3_mutex_met
28d90 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69  hods const *sqli
28da0 74 65 33 44 65 66 61 75 6c 74 4d 75 74 65 78 28  te3DefaultMutex(
28db0 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74 65 33  void);.  sqlite3
28dc0 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 63  _mutex_methods c
28dd0 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33 4e 6f 6f  onst *sqlite3Noo
28de0 70 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 20 20  pMutex(void);.  
28df0 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73  sqlite3_mutex *s
28e00 71 6c 69 74 65 33 4d 75 74 65 78 41 6c 6c 6f 63  qlite3MutexAlloc
28e10 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c  (int);.  int sql
28e20 69 74 65 33 4d 75 74 65 78 49 6e 69 74 28 76 6f  ite3MutexInit(vo
28e30 69 64 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  id);.  int sqlit
28e40 65 33 4d 75 74 65 78 45 6e 64 28 76 6f 69 64 29  e3MutexEnd(void)
28e50 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65  ;.#endif.#if !de
28e60 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55 54  fined(SQLITE_MUT
28e70 45 58 5f 4f 4d 49 54 29 20 26 26 20 21 64 65 66  EX_OMIT) && !def
28e80 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55 54 45  ined(SQLITE_MUTE
28e90 58 5f 4e 4f 4f 50 29 0a 20 20 76 6f 69 64 20 73  X_NOOP).  void s
28ea0 71 6c 69 74 65 33 4d 65 6d 6f 72 79 42 61 72 72  qlite3MemoryBarr
28eb0 69 65 72 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65  ier(void);.#else
28ec0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
28ed0 33 4d 65 6d 6f 72 79 42 61 72 72 69 65 72 28 29  3MemoryBarrier()
28ee0 0a 23 65 6e 64 69 66 0a 0a 73 71 6c 69 74 65 33  .#endif..sqlite3
28ef0 5f 69 6e 74 36 34 20 73 71 6c 69 74 65 33 53 74  _int64 sqlite3St
28f00 61 74 75 73 56 61 6c 75 65 28 69 6e 74 29 3b 0a  atusValue(int);.
28f10 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74  void sqlite3Stat
28f20 75 73 55 70 28 69 6e 74 2c 20 69 6e 74 29 3b 0a  usUp(int, int);.
28f30 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74  void sqlite3Stat
28f40 75 73 44 6f 77 6e 28 69 6e 74 2c 20 69 6e 74 29  usDown(int, int)
28f50 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ;.void sqlite3St
28f60 61 74 75 73 48 69 67 68 77 61 74 65 72 28 69 6e  atusHighwater(in
28f70 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  t, int);.int sql
28f80 69 74 65 33 4c 6f 6f 6b 61 73 69 64 65 55 73 65  ite3LookasideUse
28f90 64 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2a 29  d(sqlite3*,int*)
28fa0 3b 0a 0a 2f 2a 20 41 63 63 65 73 73 20 74 6f 20  ;../* Access to 
28fb0 6d 75 74 65 78 65 73 20 75 73 65 64 20 62 79 20  mutexes used by 
28fc0 73 71 6c 69 74 65 33 5f 73 74 61 74 75 73 28 29  sqlite3_status()
28fd0 20 2a 2f 0a 73 71 6c 69 74 65 33 5f 6d 75 74 65   */.sqlite3_mute
28fe0 78 20 2a 73 71 6c 69 74 65 33 50 63 61 63 68 65  x *sqlite3Pcache
28ff0 31 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 73 71  1Mutex(void);.sq
29000 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c  lite3_mutex *sql
29010 69 74 65 33 4d 61 6c 6c 6f 63 4d 75 74 65 78 28  ite3MallocMutex(
29020 76 6f 69 64 29 3b 0a 0a 23 69 66 20 64 65 66 69  void);..#if defi
29030 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
29040 45 5f 4d 55 4c 54 49 54 48 52 45 41 44 45 44 5f  E_MULTITHREADED_
29050 43 48 45 43 4b 53 29 20 26 26 20 21 64 65 66 69  CHECKS) && !defi
29060 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55 54 45 58  ned(SQLITE_MUTEX
29070 5f 4f 4d 49 54 29 0a 76 6f 69 64 20 73 71 6c 69  _OMIT).void sqli
29080 74 65 33 4d 75 74 65 78 57 61 72 6e 4f 6e 43 6f  te3MutexWarnOnCo
29090 6e 74 65 6e 74 69 6f 6e 28 73 71 6c 69 74 65 33  ntention(sqlite3
290a0 5f 6d 75 74 65 78 2a 29 3b 0a 23 65 6c 73 65 0a  _mutex*);.#else.
290b0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
290c0 4d 75 74 65 78 57 61 72 6e 4f 6e 43 6f 6e 74 65  MutexWarnOnConte
290d0 6e 74 69 6f 6e 28 78 29 0a 23 65 6e 64 69 66 0a  ntion(x).#endif.
290e0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
290f0 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
29100 49 4e 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  INT.  int sqlite
29110 33 49 73 4e 61 4e 28 64 6f 75 62 6c 65 29 3b 0a  3IsNaN(double);.
29120 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
29130 71 6c 69 74 65 33 49 73 4e 61 4e 28 58 29 20 20  qlite3IsNaN(X)  
29140 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
29150 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
29160 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
29170 75 63 74 75 72 65 20 68 6f 6c 64 73 20 69 6e 66  ucture holds inf
29180 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 53  ormation about S
29190 51 4c 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20  QL.** functions 
291a0 61 72 67 75 6d 65 6e 74 73 20 74 68 61 74 20 61  arguments that a
291b0 72 65 20 74 68 65 20 70 61 72 61 6d 65 74 65 72  re the parameter
291c0 73 20 74 6f 20 74 68 65 20 70 72 69 6e 74 66 28  s to the printf(
291d0 29 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 73  ) function..*/.s
291e0 74 72 75 63 74 20 50 72 69 6e 74 66 41 72 67 75  truct PrintfArgu
291f0 6d 65 6e 74 73 20 7b 0a 20 20 69 6e 74 20 6e 41  ments {.  int nA
29200 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
29210 20 20 20 2f 2a 20 54 6f 74 61 6c 20 6e 75 6d 62     /* Total numb
29220 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
29230 2a 2f 0a 20 20 69 6e 74 20 6e 55 73 65 64 3b 20  */.  int nUsed; 
29240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
29250 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
29260 65 6e 74 73 20 75 73 65 64 20 73 6f 20 66 61 72  ents used so far
29270 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 61   */.  sqlite3_va
29280 6c 75 65 20 2a 2a 61 70 41 72 67 3b 20 20 20 2f  lue **apArg;   /
29290 2a 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20 76  * The argument v
292a0 61 6c 75 65 73 20 2a 2f 0a 7d 3b 0a 0a 63 68 61  alues */.};..cha
292b0 72 20 2a 73 71 6c 69 74 65 33 4d 50 72 69 6e 74  r *sqlite3MPrint
292c0 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  f(sqlite3*,const
292d0 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68   char*, ...);.ch
292e0 61 72 20 2a 73 71 6c 69 74 65 33 56 4d 50 72 69  ar *sqlite3VMPri
292f0 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  ntf(sqlite3*,con
29300 73 74 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73  st char*, va_lis
29310 74 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28  t);.#if defined(
29320 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 7c 7c  SQLITE_DEBUG) ||
29330 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
29340 48 41 56 45 5f 4f 53 5f 54 52 41 43 45 29 0a 20  HAVE_OS_TRACE). 
29350 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 62   void sqlite3Deb
29360 75 67 50 72 69 6e 74 66 28 63 6f 6e 73 74 20 63  ugPrintf(const c
29370 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 23 65 6e 64  har*, ...);.#end
29380 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  if.#if defined(S
29390 51 4c 49 54 45 5f 54 45 53 54 29 0a 20 20 76 6f  QLITE_TEST).  vo
293a0 69 64 20 2a 73 71 6c 69 74 65 33 54 65 73 74 54  id *sqlite3TestT
293b0 65 78 74 54 6f 50 74 72 28 63 6f 6e 73 74 20 63  extToPtr(const c
293c0 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  har*);.#endif..#
293d0 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
293e0 45 5f 44 45 42 55 47 29 0a 20 20 76 6f 69 64 20  E_DEBUG).  void 
293f0 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 45  sqlite3TreeViewE
29400 78 70 72 28 54 72 65 65 56 69 65 77 2a 2c 20 63  xpr(TreeView*, c
29410 6f 6e 73 74 20 45 78 70 72 2a 2c 20 75 38 29 3b  onst Expr*, u8);
29420 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54  .  void sqlite3T
29430 72 65 65 56 69 65 77 42 61 72 65 45 78 70 72 4c  reeViewBareExprL
29440 69 73 74 28 54 72 65 65 56 69 65 77 2a 2c 20 63  ist(TreeView*, c
29450 6f 6e 73 74 20 45 78 70 72 4c 69 73 74 2a 2c 20  onst ExprList*, 
29460 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
29470 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65  void sqlite3Tree
29480 56 69 65 77 45 78 70 72 4c 69 73 74 28 54 72 65  ViewExprList(Tre
29490 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78  eView*, const Ex
294a0 70 72 4c 69 73 74 2a 2c 20 75 38 2c 20 63 6f 6e  prList*, u8, con
294b0 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69  st char*);.  voi
294c0 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65  d sqlite3TreeVie
294d0 77 53 72 63 4c 69 73 74 28 54 72 65 65 56 69 65  wSrcList(TreeVie
294e0 77 2a 2c 20 63 6f 6e 73 74 20 53 72 63 4c 69 73  w*, const SrcLis
294f0 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  t*);.  void sqli
29500 74 65 33 54 72 65 65 56 69 65 77 53 65 6c 65 63  te3TreeViewSelec
29510 74 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e  t(TreeView*, con
29520 73 74 20 53 65 6c 65 63 74 2a 2c 20 75 38 29 3b  st Select*, u8);
29530 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54  .  void sqlite3T
29540 72 65 65 56 69 65 77 57 69 74 68 28 54 72 65 65  reeViewWith(Tree
29550 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 57 69 74  View*, const Wit
29560 68 2a 2c 20 75 38 29 3b 0a 23 69 66 6e 64 65 66  h*, u8);.#ifndef
29570 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 49 4e   SQLITE_OMIT_WIN
29580 44 4f 57 46 55 4e 43 0a 20 20 76 6f 69 64 20 73  DOWFUNC.  void s
29590 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 57 69  qlite3TreeViewWi
295a0 6e 64 6f 77 28 54 72 65 65 56 69 65 77 2a 2c 20  ndow(TreeView*, 
295b0 63 6f 6e 73 74 20 57 69 6e 64 6f 77 2a 2c 20 75  const Window*, u
295c0 38 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  8);.  void sqlit
295d0 65 33 54 72 65 65 56 69 65 77 57 69 6e 46 75 6e  e3TreeViewWinFun
295e0 63 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e  c(TreeView*, con
295f0 73 74 20 57 69 6e 64 6f 77 2a 2c 20 75 38 29 3b  st Window*, u8);
29600 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a  .#endif.#endif..
29610 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 74  .void sqlite3Set
29620 53 74 72 69 6e 67 28 63 68 61 72 20 2a 2a 2c 20  String(char **, 
29630 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20  sqlite3*, const 
29640 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
29650 69 74 65 33 45 72 72 6f 72 4d 73 67 28 50 61 72  ite3ErrorMsg(Par
29660 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  se*, const char*
29670 2c 20 2e 2e 2e 29 3b 0a 69 6e 74 20 73 71 6c 69  , ...);.int sqli
29680 74 65 33 45 72 72 6f 72 54 6f 50 61 72 73 65 72  te3ErrorToParser
29690 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a  (sqlite3*,int);.
296a0 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 71 75  void sqlite3Dequ
296b0 6f 74 65 28 63 68 61 72 2a 29 3b 0a 76 6f 69 64  ote(char*);.void
296c0 20 73 71 6c 69 74 65 33 44 65 71 75 6f 74 65 45   sqlite3DequoteE
296d0 78 70 72 28 45 78 70 72 2a 29 3b 0a 76 6f 69 64  xpr(Expr*);.void
296e0 20 73 71 6c 69 74 65 33 54 6f 6b 65 6e 49 6e 69   sqlite3TokenIni
296f0 74 28 54 6f 6b 65 6e 2a 2c 63 68 61 72 2a 29 3b  t(Token*,char*);
29700 0a 69 6e 74 20 73 71 6c 69 74 65 33 4b 65 79 77  .int sqlite3Keyw
29710 6f 72 64 43 6f 64 65 28 63 6f 6e 73 74 20 75 6e  ordCode(const un
29720 73 69 67 6e 65 64 20 63 68 61 72 2a 2c 20 69 6e  signed char*, in
29730 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  t);.int sqlite3R
29740 75 6e 50 61 72 73 65 72 28 50 61 72 73 65 2a 2c  unParser(Parse*,
29750 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 68   const char*, ch
29760 61 72 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ar **);.void sql
29770 69 74 65 33 46 69 6e 69 73 68 43 6f 64 69 6e 67  ite3FinishCoding
29780 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71  (Parse*);.int sq
29790 6c 69 74 65 33 47 65 74 54 65 6d 70 52 65 67 28  lite3GetTempReg(
297a0 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
297b0 6c 69 74 65 33 52 65 6c 65 61 73 65 54 65 6d 70  lite3ReleaseTemp
297c0 52 65 67 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b  Reg(Parse*,int);
297d0 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54  .int sqlite3GetT
297e0 65 6d 70 52 61 6e 67 65 28 50 61 72 73 65 2a 2c  empRange(Parse*,
297f0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
29800 65 33 52 65 6c 65 61 73 65 54 65 6d 70 52 61 6e  e3ReleaseTempRan
29810 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 2c 69 6e  ge(Parse*,int,in
29820 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
29830 43 6c 65 61 72 54 65 6d 70 52 65 67 43 61 63 68  ClearTempRegCach
29840 65 28 50 61 72 73 65 2a 29 3b 0a 23 69 66 64 65  e(Parse*);.#ifde
29850 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 69  f SQLITE_DEBUG.i
29860 6e 74 20 73 71 6c 69 74 65 33 4e 6f 54 65 6d 70  nt sqlite3NoTemp
29870 73 49 6e 52 61 6e 67 65 28 50 61 72 73 65 2a 2c  sInRange(Parse*,
29880 69 6e 74 2c 69 6e 74 29 3b 0a 23 65 6e 64 69 66  int,int);.#endif
29890 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
298a0 70 72 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a  prAlloc(sqlite3*
298b0 2c 69 6e 74 2c 63 6f 6e 73 74 20 54 6f 6b 65 6e  ,int,const Token
298c0 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71  *,int);.Expr *sq
298d0 6c 69 74 65 33 45 78 70 72 28 73 71 6c 69 74 65  lite3Expr(sqlite
298e0 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61  3*,int,const cha
298f0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
29900 33 45 78 70 72 41 74 74 61 63 68 53 75 62 74 72  3ExprAttachSubtr
29910 65 65 73 28 73 71 6c 69 74 65 33 2a 2c 45 78 70  ees(sqlite3*,Exp
29920 72 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b  r*,Expr*,Expr*);
29930 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 50 45  .Expr *sqlite3PE
29940 78 70 72 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  xpr(Parse*, int,
29950 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a   Expr*, Expr*);.
29960 76 6f 69 64 20 73 71 6c 69 74 65 33 50 45 78 70  void sqlite3PExp
29970 72 41 64 64 53 65 6c 65 63 74 28 50 61 72 73 65  rAddSelect(Parse
29980 2a 2c 20 45 78 70 72 2a 2c 20 53 65 6c 65 63 74  *, Expr*, Select
29990 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  *);.Expr *sqlite
299a0 33 45 78 70 72 41 6e 64 28 50 61 72 73 65 2a 2c  3ExprAnd(Parse*,
299b0 45 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 45  Expr*, Expr*);.E
299c0 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
299d0 53 69 6d 70 6c 69 66 69 65 64 41 6e 64 4f 72 28  SimplifiedAndOr(
299e0 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71  Expr*);.Expr *sq
299f0 6c 69 74 65 33 45 78 70 72 46 75 6e 63 74 69 6f  lite3ExprFunctio
29a00 6e 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73  n(Parse*,ExprLis
29a10 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29  t*, Token*, int)
29a20 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
29a30 70 72 41 73 73 69 67 6e 56 61 72 4e 75 6d 62 65  prAssignVarNumbe
29a40 72 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  r(Parse*, Expr*,
29a50 20 75 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69   u32);.void sqli
29a60 74 65 33 45 78 70 72 44 65 6c 65 74 65 28 73 71  te3ExprDelete(sq
29a70 6c 69 74 65 33 2a 2c 20 45 78 70 72 2a 29 3b 0a  lite3*, Expr*);.
29a80 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65  ExprList *sqlite
29a90 33 45 78 70 72 4c 69 73 74 41 70 70 65 6e 64 28  3ExprListAppend(
29aa0 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a  Parse*,ExprList*
29ab0 2c 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c 69 73  ,Expr*);.ExprLis
29ac0 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69  t *sqlite3ExprLi
29ad0 73 74 41 70 70 65 6e 64 56 65 63 74 6f 72 28 50  stAppendVector(P
29ae0 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  arse*,ExprList*,
29af0 49 64 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b 0a  IdList*,Expr*);.
29b00 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
29b10 4c 69 73 74 53 65 74 53 6f 72 74 4f 72 64 65 72  ListSetSortOrder
29b20 28 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 29 3b  (ExprList*,int);
29b30 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
29b40 72 4c 69 73 74 53 65 74 4e 61 6d 65 28 50 61 72  rListSetName(Par
29b50 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 54 6f  se*,ExprList*,To
29b60 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  ken*,int);.void 
29b70 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53  sqlite3ExprListS
29b80 65 74 53 70 61 6e 28 50 61 72 73 65 2a 2c 45 78  etSpan(Parse*,Ex
29b90 70 72 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68  prList*,const ch
29ba0 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  ar*,const char*)
29bb0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
29bc0 70 72 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c  prListDelete(sql
29bd0 69 74 65 33 2a 2c 20 45 78 70 72 4c 69 73 74 2a  ite3*, ExprList*
29be0 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 45 78  );.u32 sqlite3Ex
29bf0 70 72 4c 69 73 74 46 6c 61 67 73 28 63 6f 6e 73  prListFlags(cons
29c00 74 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e  t ExprList*);.in
29c10 74 20 73 71 6c 69 74 65 33 49 6e 64 65 78 48 61  t sqlite3IndexHa
29c20 73 44 75 70 6c 69 63 61 74 65 52 6f 6f 74 50 61  sDuplicateRootPa
29c30 67 65 28 49 6e 64 65 78 2a 29 3b 0a 69 6e 74 20  ge(Index*);.int 
29c40 73 71 6c 69 74 65 33 49 6e 69 74 28 73 71 6c 69  sqlite3Init(sqli
29c50 74 65 33 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 69  te3*, char**);.i
29c60 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61  nt sqlite3InitCa
29c70 6c 6c 62 61 63 6b 28 76 6f 69 64 2a 2c 20 69 6e  llback(void*, in
29c80 74 2c 20 63 68 61 72 2a 2a 2c 20 63 68 61 72 2a  t, char**, char*
29c90 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  *);.int sqlite3I
29ca0 6e 69 74 4f 6e 65 28 73 71 6c 69 74 65 33 2a 2c  nitOne(sqlite3*,
29cb0 20 69 6e 74 2c 20 63 68 61 72 2a 2a 2c 20 75 33   int, char**, u3
29cc0 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  2);.void sqlite3
29cd0 50 72 61 67 6d 61 28 50 61 72 73 65 2a 2c 54 6f  Pragma(Parse*,To
29ce0 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  ken*,Token*,Toke
29cf0 6e 2a 2c 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66  n*,int);.#ifndef
29d00 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
29d10 54 55 41 4c 54 41 42 4c 45 0a 4d 6f 64 75 6c 65  TUALTABLE.Module
29d20 20 2a 73 71 6c 69 74 65 33 50 72 61 67 6d 61 56   *sqlite3PragmaV
29d30 74 61 62 52 65 67 69 73 74 65 72 28 73 71 6c 69  tabRegister(sqli
29d40 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 20  te3*,const char 
29d50 2a 7a 4e 61 6d 65 29 3b 0a 23 65 6e 64 69 66 0a  *zName);.#endif.
29d60 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 65  void sqlite3Rese
29d70 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e  tAllSchemasOfCon
29d80 6e 65 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a  nection(sqlite3*
29d90 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
29da0 65 73 65 74 4f 6e 65 53 63 68 65 6d 61 28 73 71  esetOneSchema(sq
29db0 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69  lite3*,int);.voi
29dc0 64 20 73 71 6c 69 74 65 33 43 6f 6c 6c 61 70 73  d sqlite3Collaps
29dd0 65 44 61 74 61 62 61 73 65 41 72 72 61 79 28 73  eDatabaseArray(s
29de0 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73  qlite3*);.void s
29df0 71 6c 69 74 65 33 43 6f 6d 6d 69 74 49 6e 74 65  qlite3CommitInte
29e00 72 6e 61 6c 43 68 61 6e 67 65 73 28 73 71 6c 69  rnalChanges(sqli
29e10 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  te3*);.void sqli
29e20 74 65 33 44 65 6c 65 74 65 43 6f 6c 75 6d 6e 4e  te3DeleteColumnN
29e30 61 6d 65 73 28 73 71 6c 69 74 65 33 2a 2c 54 61  ames(sqlite3*,Ta
29e40 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ble*);.int sqlit
29e50 65 33 43 6f 6c 75 6d 6e 73 46 72 6f 6d 45 78 70  e3ColumnsFromExp
29e60 72 4c 69 73 74 28 50 61 72 73 65 2a 2c 45 78 70  rList(Parse*,Exp
29e70 72 4c 69 73 74 2a 2c 69 31 36 2a 2c 43 6f 6c 75  rList*,i16*,Colu
29e80 6d 6e 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  mn**);.void sqli
29e90 74 65 33 53 65 6c 65 63 74 41 64 64 43 6f 6c 75  te3SelectAddColu
29ea0 6d 6e 54 79 70 65 41 6e 64 43 6f 6c 6c 61 74 69  mnTypeAndCollati
29eb0 6f 6e 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a  on(Parse*,Table*
29ec0 2c 53 65 6c 65 63 74 2a 29 3b 0a 54 61 62 6c 65  ,Select*);.Table
29ed0 20 2a 73 71 6c 69 74 65 33 52 65 73 75 6c 74 53   *sqlite3ResultS
29ee0 65 74 4f 66 53 65 6c 65 63 74 28 50 61 72 73 65  etOfSelect(Parse
29ef0 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 76 6f 69 64  *,Select*);.void
29f00 20 73 71 6c 69 74 65 33 4f 70 65 6e 4d 61 73 74   sqlite3OpenMast
29f10 65 72 54 61 62 6c 65 28 50 61 72 73 65 20 2a 2c  erTable(Parse *,
29f20 20 69 6e 74 29 3b 0a 49 6e 64 65 78 20 2a 73 71   int);.Index *sq
29f30 6c 69 74 65 33 50 72 69 6d 61 72 79 4b 65 79 49  lite3PrimaryKeyI
29f40 6e 64 65 78 28 54 61 62 6c 65 2a 29 3b 0a 69 31  ndex(Table*);.i1
29f50 36 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 4f  6 sqlite3ColumnO
29f60 66 49 6e 64 65 78 28 49 6e 64 65 78 2a 2c 20 69  fIndex(Index*, i
29f70 31 36 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  16);.void sqlite
29f80 33 53 74 61 72 74 54 61 62 6c 65 28 50 61 72 73  3StartTable(Pars
29f90 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  e*,Token*,Token*
29fa0 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  ,int,int,int,int
29fb0 29 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 45 4e  );.#if SQLITE_EN
29fc0 41 42 4c 45 5f 48 49 44 44 45 4e 5f 43 4f 4c 55  ABLE_HIDDEN_COLU
29fd0 4d 4e 53 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  MNS.  void sqlit
29fe0 65 33 43 6f 6c 75 6d 6e 50 72 6f 70 65 72 74 69  e3ColumnProperti
29ff0 65 73 46 72 6f 6d 4e 61 6d 65 28 54 61 62 6c 65  esFromName(Table
2a000 2a 2c 20 43 6f 6c 75 6d 6e 2a 29 3b 0a 23 65 6c  *, Column*);.#el
2a010 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
2a020 74 65 33 43 6f 6c 75 6d 6e 50 72 6f 70 65 72 74  te3ColumnPropert
2a030 69 65 73 46 72 6f 6d 4e 61 6d 65 28 54 2c 43 29  iesFromName(T,C)
2a040 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 65 6e   /* no-op */.#en
2a050 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
2a060 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a  AddColumn(Parse*
2a070 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 29 3b  ,Token*,Token*);
2a080 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64  .void sqlite3Add
2a090 4e 6f 74 4e 75 6c 6c 28 50 61 72 73 65 2a 2c 20  NotNull(Parse*, 
2a0a0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2a0b0 65 33 41 64 64 50 72 69 6d 61 72 79 4b 65 79 28  e3AddPrimaryKey(
2a0c0 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74  Parse*, ExprList
2a0d0 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
2a0e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
2a0f0 64 64 43 68 65 63 6b 43 6f 6e 73 74 72 61 69 6e  ddCheckConstrain
2a100 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29  t(Parse*, Expr*)
2a110 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  ;.void sqlite3Ad
2a120 64 44 65 66 61 75 6c 74 56 61 6c 75 65 28 50 61  dDefaultValue(Pa
2a130 72 73 65 2a 2c 45 78 70 72 2a 2c 63 6f 6e 73 74  rse*,Expr*,const
2a140 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
2a150 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
2a160 33 41 64 64 43 6f 6c 6c 61 74 65 54 79 70 65 28  3AddCollateType(
2a170 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Parse*, Token*);
2a180 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e 64  .void sqlite3End
2a190 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b  Table(Parse*,Tok
2a1a0 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 75 38 2c 53 65  en*,Token*,u8,Se
2a1b0 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  lect*);.int sqli
2a1c0 74 65 33 50 61 72 73 65 55 72 69 28 63 6f 6e 73  te3ParseUri(cons
2a1d0 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
2a1e0 61 72 2a 2c 75 6e 73 69 67 6e 65 64 20 69 6e 74  ar*,unsigned int
2a1f0 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
2a200 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 76         sqlite3_v
2a210 66 73 2a 2a 2c 63 68 61 72 2a 2a 2c 63 68 61 72  fs**,char**,char
2a220 20 2a 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c   **);.#ifdef SQL
2a230 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 0a 20 20  ITE_HAS_CODEC.  
2a240 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 64 65 63  int sqlite3Codec
2a250 51 75 65 72 79 50 61 72 61 6d 65 74 65 72 73 28  QueryParameters(
2a260 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
2a270 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
2a280 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
2a290 65 20 73 71 6c 69 74 65 33 43 6f 64 65 63 51 75  e sqlite3CodecQu
2a2a0 65 72 79 50 61 72 61 6d 65 74 65 72 73 28 41 2c  eryParameters(A,
2a2b0 42 2c 43 29 20 30 0a 23 65 6e 64 69 66 0a 42 74  B,C) 0.#endif.Bt
2a2c0 72 65 65 20 2a 73 71 6c 69 74 65 33 44 62 4e 61  ree *sqlite3DbNa
2a2d0 6d 65 54 6f 42 74 72 65 65 28 73 71 6c 69 74 65  meToBtree(sqlite
2a2e0 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  3*,const char*);
2a2f0 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
2a300 55 4e 54 45 53 54 41 42 4c 45 0a 23 20 64 65 66  UNTESTABLE.# def
2a310 69 6e 65 20 73 71 6c 69 74 65 33 46 61 75 6c 74  ine sqlite3Fault
2a320 53 69 6d 28 58 29 20 53 51 4c 49 54 45 5f 4f 4b  Sim(X) SQLITE_OK
2a330 0a 23 65 6c 73 65 0a 20 20 69 6e 74 20 73 71 6c  .#else.  int sql
2a340 69 74 65 33 46 61 75 6c 74 53 69 6d 28 69 6e 74  ite3FaultSim(int
2a350 29 3b 0a 23 65 6e 64 69 66 0a 0a 42 69 74 76 65  );.#endif..Bitve
2a360 63 20 2a 73 71 6c 69 74 65 33 42 69 74 76 65 63  c *sqlite3Bitvec
2a370 43 72 65 61 74 65 28 75 33 32 29 3b 0a 69 6e 74  Create(u32);.int
2a380 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 54 65   sqlite3BitvecTe
2a390 73 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29  st(Bitvec*, u32)
2a3a0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74  ;.int sqlite3Bit
2a3b0 76 65 63 54 65 73 74 4e 6f 74 4e 75 6c 6c 28 42  vecTestNotNull(B
2a3c0 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69 6e  itvec*, u32);.in
2a3d0 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 53  t sqlite3BitvecS
2a3e0 65 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29  et(Bitvec*, u32)
2a3f0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69  ;.void sqlite3Bi
2a400 74 76 65 63 43 6c 65 61 72 28 42 69 74 76 65 63  tvecClear(Bitvec
2a410 2a 2c 20 75 33 32 2c 20 76 6f 69 64 2a 29 3b 0a  *, u32, void*);.
2a420 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69 74 76  void sqlite3Bitv
2a430 65 63 44 65 73 74 72 6f 79 28 42 69 74 76 65 63  ecDestroy(Bitvec
2a440 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 42  *);.u32 sqlite3B
2a450 69 74 76 65 63 53 69 7a 65 28 42 69 74 76 65 63  itvecSize(Bitvec
2a460 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  *);.#ifndef SQLI
2a470 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 69 6e  TE_UNTESTABLE.in
2a480 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 42  t sqlite3BitvecB
2a490 75 69 6c 74 69 6e 54 65 73 74 28 69 6e 74 2c 69  uiltinTest(int,i
2a4a0 6e 74 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 52 6f  nt*);.#endif..Ro
2a4b0 77 53 65 74 20 2a 73 71 6c 69 74 65 33 52 6f 77  wSet *sqlite3Row
2a4c0 53 65 74 49 6e 69 74 28 73 71 6c 69 74 65 33 2a  SetInit(sqlite3*
2a4d0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
2a4e0 6f 77 53 65 74 44 65 6c 65 74 65 28 76 6f 69 64  owSetDelete(void
2a4f0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2a500 52 6f 77 53 65 74 43 6c 65 61 72 28 76 6f 69 64  RowSetClear(void
2a510 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2a520 52 6f 77 53 65 74 49 6e 73 65 72 74 28 52 6f 77  RowSetInsert(Row
2a530 53 65 74 2a 2c 20 69 36 34 29 3b 0a 69 6e 74 20  Set*, i64);.int 
2a540 73 71 6c 69 74 65 33 52 6f 77 53 65 74 54 65 73  sqlite3RowSetTes
2a550 74 28 52 6f 77 53 65 74 2a 2c 20 69 6e 74 20 69  t(RowSet*, int i
2a560 42 61 74 63 68 2c 20 69 36 34 29 3b 0a 69 6e 74  Batch, i64);.int
2a570 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65   sqlite3RowSetNe
2a580 78 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 2a  xt(RowSet*, i64*
2a590 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  );..void sqlite3
2a5a0 43 72 65 61 74 65 56 69 65 77 28 50 61 72 73 65  CreateView(Parse
2a5b0 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
2a5c0 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a  Token*,ExprList*
2a5d0 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 2c 69 6e 74  ,Select*,int,int
2a5e0 29 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64  );..#if !defined
2a5f0 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45  (SQLITE_OMIT_VIE
2a600 57 29 20 7c 7c 20 21 64 65 66 69 6e 65 64 28 53  W) || !defined(S
2a610 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2a620 41 4c 54 41 42 4c 45 29 0a 20 20 69 6e 74 20 73  ALTABLE).  int s
2a630 71 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c  qlite3ViewGetCol
2a640 75 6d 6e 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c  umnNames(Parse*,
2a650 54 61 62 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23  Table*);.#else.#
2a660 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
2a670 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65  iewGetColumnName
2a680 73 28 41 2c 42 29 20 30 0a 23 65 6e 64 69 66 0a  s(A,B) 0.#endif.
2a690 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  .#if SQLITE_MAX_
2a6a0 41 54 54 41 43 48 45 44 3e 33 30 0a 20 20 69 6e  ATTACHED>30.  in
2a6b0 74 20 73 71 6c 69 74 65 33 44 62 4d 61 73 6b 41  t sqlite3DbMaskA
2a6c0 6c 6c 5a 65 72 6f 28 79 44 62 4d 61 73 6b 29 3b  llZero(yDbMask);
2a6d0 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
2a6e0 69 74 65 33 44 72 6f 70 54 61 62 6c 65 28 50 61  ite3DropTable(Pa
2a6f0 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
2a700 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
2a710 73 71 6c 69 74 65 33 43 6f 64 65 44 72 6f 70 54  sqlite3CodeDropT
2a720 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 54 61 62  able(Parse*, Tab
2a730 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  le*, int, int);.
2a740 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65  void sqlite3Dele
2a750 74 65 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a  teTable(sqlite3*
2a760 2c 20 54 61 62 6c 65 2a 29 3b 0a 76 6f 69 64 20  , Table*);.void 
2a770 73 71 6c 69 74 65 33 46 72 65 65 49 6e 64 65 78  sqlite3FreeIndex
2a780 28 73 71 6c 69 74 65 33 2a 2c 20 49 6e 64 65 78  (sqlite3*, Index
2a790 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  *);.#ifndef SQLI
2a7a0 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52  TE_OMIT_AUTOINCR
2a7b0 45 4d 45 4e 54 0a 20 20 76 6f 69 64 20 73 71 6c  EMENT.  void sql
2a7c0 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e  ite3Autoincremen
2a7d0 74 42 65 67 69 6e 28 50 61 72 73 65 20 2a 70 50  tBegin(Parse *pP
2a7e0 61 72 73 65 29 3b 0a 20 20 76 6f 69 64 20 73 71  arse);.  void sq
2a7f0 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65  lite3Autoincreme
2a800 6e 74 45 6e 64 28 50 61 72 73 65 20 2a 70 50 61  ntEnd(Parse *pPa
2a810 72 73 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  rse);.#else.# de
2a820 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 6f  fine sqlite3Auto
2a830 69 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e 28 58  incrementBegin(X
2a840 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
2a850 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45  e3AutoincrementE
2a860 6e 64 28 58 29 0a 23 65 6e 64 69 66 0a 76 6f 69  nd(X).#endif.voi
2a870 64 20 73 71 6c 69 74 65 33 49 6e 73 65 72 74 28  d sqlite3Insert(
2a880 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
2a890 2c 20 53 65 6c 65 63 74 2a 2c 20 49 64 4c 69 73  , Select*, IdLis
2a8a0 74 2a 2c 20 69 6e 74 2c 20 55 70 73 65 72 74 2a  t*, int, Upsert*
2a8b0 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
2a8c0 41 72 72 61 79 41 6c 6c 6f 63 61 74 65 28 73 71  ArrayAllocate(sq
2a8d0 6c 69 74 65 33 2a 2c 76 6f 69 64 2a 2c 69 6e 74  lite3*,void*,int
2a8e0 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 49 64 4c  ,int*,int*);.IdL
2a8f0 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69  ist *sqlite3IdLi
2a900 73 74 41 70 70 65 6e 64 28 50 61 72 73 65 2a 2c  stAppend(Parse*,
2a910 20 49 64 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a   IdList*, Token*
2a920 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 64  );.int sqlite3Id
2a930 4c 69 73 74 49 6e 64 65 78 28 49 64 4c 69 73 74  ListIndex(IdList
2a940 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
2a950 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  SrcList *sqlite3
2a960 53 72 63 4c 69 73 74 45 6e 6c 61 72 67 65 28 50  SrcListEnlarge(P
2a970 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
2a980 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 53 72 63 4c   int, int);.SrcL
2a990 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c  ist *sqlite3SrcL
2a9a0 69 73 74 41 70 70 65 6e 64 28 50 61 72 73 65 2a  istAppend(Parse*
2a9b0 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65  , SrcList*, Toke
2a9c0 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 53 72 63  n*, Token*);.Src
2a9d0 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63  List *sqlite3Src
2a9e0 4c 69 73 74 41 70 70 65 6e 64 46 72 6f 6d 54 65  ListAppendFromTe
2a9f0 72 6d 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  rm(Parse*, SrcLi
2aa00 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  st*, Token*, Tok
2aa10 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  en*,.           
2aa20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aa30 20 20 20 20 20 20 20 20 20 20 20 54 6f 6b 65 6e             Token
2aa40 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78 70 72  *, Select*, Expr
2aa50 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69  *, IdList*);.voi
2aa60 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74  d sqlite3SrcList
2aa70 49 6e 64 65 78 65 64 42 79 28 50 61 72 73 65 20  IndexedBy(Parse 
2aa80 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 54 6f  *, SrcList *, To
2aa90 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ken *);.void sql
2aaa0 69 74 65 33 53 72 63 4c 69 73 74 46 75 6e 63 41  ite3SrcListFuncA
2aab0 72 67 73 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  rgs(Parse*, SrcL
2aac0 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29  ist*, ExprList*)
2aad0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 64  ;.int sqlite3Ind
2aae0 65 78 65 64 42 79 4c 6f 6f 6b 75 70 28 50 61 72  exedByLookup(Par
2aaf0 73 65 20 2a 2c 20 73 74 72 75 63 74 20 53 72 63  se *, struct Src
2ab00 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 76 6f  List_item *);.vo
2ab10 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  id sqlite3SrcLis
2ab20 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 53  tShiftJoinType(S
2ab30 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73  rcList*);.void s
2ab40 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41 73 73  qlite3SrcListAss
2ab50 69 67 6e 43 75 72 73 6f 72 73 28 50 61 72 73 65  ignCursors(Parse
2ab60 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f  *, SrcList*);.vo
2ab70 69 64 20 73 71 6c 69 74 65 33 49 64 4c 69 73 74  id sqlite3IdList
2ab80 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c  Delete(sqlite3*,
2ab90 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20   IdList*);.void 
2aba0 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 44 65  sqlite3SrcListDe
2abb0 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53  lete(sqlite3*, S
2abc0 72 63 4c 69 73 74 2a 29 3b 0a 49 6e 64 65 78 20  rcList*);.Index 
2abd0 2a 73 71 6c 69 74 65 33 41 6c 6c 6f 63 61 74 65  *sqlite3Allocate
2abe0 49 6e 64 65 78 4f 62 6a 65 63 74 28 73 71 6c 69  IndexObject(sqli
2abf0 74 65 33 2a 2c 69 31 36 2c 69 6e 74 2c 63 68 61  te3*,i16,int,cha
2ac00 72 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  r**);.void sqlit
2ac10 65 33 43 72 65 61 74 65 49 6e 64 65 78 28 50 61  e3CreateIndex(Pa
2ac20 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  rse*,Token*,Toke
2ac30 6e 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72  n*,SrcList*,Expr
2ac40 4c 69 73 74 2a 2c 69 6e 74 2c 54 6f 6b 65 6e 2a  List*,int,Token*
2ac50 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
2ac60 20 20 20 20 20 20 20 20 20 20 20 20 45 78 70 72              Expr
2ac70 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29  *, int, int, u8)
2ac80 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72  ;.void sqlite3Dr
2ac90 6f 70 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 20  opIndex(Parse*, 
2aca0 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a  SrcList*, int);.
2acb0 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63  int sqlite3Selec
2acc0 74 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74  t(Parse*, Select
2acd0 2a 2c 20 53 65 6c 65 63 74 44 65 73 74 2a 29 3b  *, SelectDest*);
2ace0 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69 74 65 33  .Select *sqlite3
2acf0 53 65 6c 65 63 74 4e 65 77 28 50 61 72 73 65 2a  SelectNew(Parse*
2ad00 2c 45 78 70 72 4c 69 73 74 2a 2c 53 72 63 4c 69  ,ExprList*,SrcLi
2ad10 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69  st*,Expr*,ExprLi
2ad20 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  st*,.           
2ad30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45 78                Ex
2ad40 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75 33  pr*,ExprList*,u3
2ad50 32 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  2,Expr*);.void s
2ad60 71 6c 69 74 65 33 53 65 6c 65 63 74 44 65 6c 65  qlite3SelectDele
2ad70 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 65 6c  te(sqlite3*, Sel
2ad80 65 63 74 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71  ect*);.Table *sq
2ad90 6c 69 74 65 33 53 72 63 4c 69 73 74 4c 6f 6f 6b  lite3SrcListLook
2ada0 75 70 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  up(Parse*, SrcLi
2adb0 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
2adc0 33 49 73 52 65 61 64 4f 6e 6c 79 28 50 61 72 73  3IsReadOnly(Pars
2add0 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29  e*, Table*, int)
2ade0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70  ;.void sqlite3Op
2adf0 65 6e 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20  enTable(Parse*, 
2ae00 69 6e 74 20 69 43 75 72 2c 20 69 6e 74 20 69 44  int iCur, int iD
2ae10 62 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b  b, Table*, int);
2ae20 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
2ae30 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54  ITE_ENABLE_UPDAT
2ae40 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54 29 20  E_DELETE_LIMIT) 
2ae50 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
2ae60 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52 59  TE_OMIT_SUBQUERY
2ae70 29 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 4c  ).Expr *sqlite3L
2ae80 69 6d 69 74 57 68 65 72 65 28 50 61 72 73 65 2a  imitWhere(Parse*
2ae90 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c  ,SrcList*,Expr*,
2aea0 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c  ExprList*,Expr*,
2aeb0 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 76  char*);.#endif.v
2aec0 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
2aed0 65 46 72 6f 6d 28 50 61 72 73 65 2a 2c 20 53 72  eFrom(Parse*, Sr
2aee0 63 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20 45  cList*, Expr*, E
2aef0 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a 29  xprList*, Expr*)
2af00 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 70  ;.void sqlite3Up
2af10 64 61 74 65 28 50 61 72 73 65 2a 2c 20 53 72 63  date(Parse*, Src
2af20 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a  List*, ExprList*
2af30 2c 45 78 70 72 2a 2c 69 6e 74 2c 45 78 70 72 4c  ,Expr*,int,ExprL
2af40 69 73 74 2a 2c 45 78 70 72 2a 2c 0a 20 20 20 20  ist*,Expr*,.    
2af50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 55                 U
2af60 70 73 65 72 74 2a 29 3b 0a 57 68 65 72 65 49 6e  psert*);.WhereIn
2af70 66 6f 20 2a 73 71 6c 69 74 65 33 57 68 65 72 65  fo *sqlite3Where
2af80 42 65 67 69 6e 28 50 61 72 73 65 2a 2c 53 72 63  Begin(Parse*,Src
2af90 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72  List*,Expr*,Expr
2afa0 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  List*,ExprList*,
2afb0 75 31 36 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  u16,int);.void s
2afc0 71 6c 69 74 65 33 57 68 65 72 65 45 6e 64 28 57  qlite3WhereEnd(W
2afd0 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 4c 6f 67 45  hereInfo*);.LogE
2afe0 73 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 4f  st sqlite3WhereO
2aff0 75 74 70 75 74 52 6f 77 43 6f 75 6e 74 28 57 68  utputRowCount(Wh
2b000 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73  ereInfo*);.int s
2b010 71 6c 69 74 65 33 57 68 65 72 65 49 73 44 69 73  qlite3WhereIsDis
2b020 74 69 6e 63 74 28 57 68 65 72 65 49 6e 66 6f 2a  tinct(WhereInfo*
2b030 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68  );.int sqlite3Wh
2b040 65 72 65 49 73 4f 72 64 65 72 65 64 28 57 68 65  ereIsOrdered(Whe
2b050 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
2b060 6c 69 74 65 33 57 68 65 72 65 4f 72 64 65 72 42  lite3WhereOrderB
2b070 79 4c 69 6d 69 74 4f 70 74 4c 61 62 65 6c 28 57  yLimitOptLabel(W
2b080 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
2b090 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 53 6f  sqlite3WhereIsSo
2b0a0 72 74 65 64 28 57 68 65 72 65 49 6e 66 6f 2a 29  rted(WhereInfo*)
2b0b0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65  ;.int sqlite3Whe
2b0c0 72 65 43 6f 6e 74 69 6e 75 65 4c 61 62 65 6c 28  reContinueLabel(
2b0d0 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74  WhereInfo*);.int
2b0e0 20 73 71 6c 69 74 65 33 57 68 65 72 65 42 72 65   sqlite3WhereBre
2b0f0 61 6b 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66  akLabel(WhereInf
2b100 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  o*);.int sqlite3
2b110 57 68 65 72 65 4f 6b 4f 6e 65 50 61 73 73 28 57  WhereOkOnePass(W
2b120 68 65 72 65 49 6e 66 6f 2a 2c 20 69 6e 74 2a 29  hereInfo*, int*)
2b130 3b 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50 41 53  ;.#define ONEPAS
2b140 53 5f 4f 46 46 20 20 20 20 20 20 30 20 20 20 20  S_OFF      0    
2b150 20 20 20 20 2f 2a 20 55 73 65 20 6f 66 20 4f 4e      /* Use of ON
2b160 45 50 41 53 53 20 6e 6f 74 20 61 6c 6c 6f 77 65  EPASS not allowe
2b170 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 4e 45  d */.#define ONE
2b180 50 41 53 53 5f 53 49 4e 47 4c 45 20 20 20 31 20  PASS_SINGLE   1 
2b190 20 20 20 20 20 20 20 2f 2a 20 4f 4e 45 50 41 53         /* ONEPAS
2b1a0 53 20 76 61 6c 69 64 20 66 6f 72 20 61 20 73 69  S valid for a si
2b1b0 6e 67 6c 65 20 72 6f 77 20 75 70 64 61 74 65 20  ngle row update 
2b1c0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50 41  */.#define ONEPA
2b1d0 53 53 5f 4d 55 4c 54 49 20 20 20 20 32 20 20 20  SS_MULTI    2   
2b1e0 20 20 20 20 20 2f 2a 20 4f 4e 45 50 41 53 53 20       /* ONEPASS 
2b1f0 69 73 20 76 61 6c 69 64 20 66 6f 72 20 6d 75 6c  is valid for mul
2b200 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 76 6f  tiple rows */.vo
2b210 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
2b220 64 65 4c 6f 61 64 49 6e 64 65 78 43 6f 6c 75 6d  deLoadIndexColum
2b230 6e 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a  n(Parse*, Index*
2b240 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
2b250 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
2b260 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 28 50  rCodeGetColumn(P
2b270 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
2b280 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38  nt, int, int, u8
2b290 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
2b2a0 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e  xprCodeGetColumn
2b2b0 4f 66 54 61 62 6c 65 28 56 64 62 65 2a 2c 20 54  OfTable(Vdbe*, T
2b2c0 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  able*, int, int,
2b2d0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
2b2e0 74 65 33 45 78 70 72 43 6f 64 65 4d 6f 76 65 28  te3ExprCodeMove(
2b2f0 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Parse*, int, int
2b300 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
2b310 69 74 65 33 45 78 70 72 43 6f 64 65 28 50 61 72  ite3ExprCode(Par
2b320 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  se*, Expr*, int)
2b330 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
2b340 70 72 43 6f 64 65 43 6f 70 79 28 50 61 72 73 65  prCodeCopy(Parse
2b350 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
2b360 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
2b370 43 6f 64 65 46 61 63 74 6f 72 61 62 6c 65 28 50  CodeFactorable(P
2b380 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
2b390 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  t);.int sqlite3E
2b3a0 78 70 72 43 6f 64 65 41 74 49 6e 69 74 28 50 61  xprCodeAtInit(Pa
2b3b0 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
2b3c0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
2b3d0 70 72 43 6f 64 65 54 65 6d 70 28 50 61 72 73 65  prCodeTemp(Parse
2b3e0 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b  *, Expr*, int*);
2b3f0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
2b400 43 6f 64 65 54 61 72 67 65 74 28 50 61 72 73 65  CodeTarget(Parse
2b410 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
2b420 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
2b430 43 6f 64 65 41 6e 64 43 61 63 68 65 28 50 61 72  CodeAndCache(Par
2b440 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  se*, Expr*, int)
2b450 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
2b460 72 43 6f 64 65 45 78 70 72 4c 69 73 74 28 50 61  rCodeExprList(Pa
2b470 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  rse*, ExprList*,
2b480 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a   int, int, u8);.
2b490 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45  #define SQLITE_E
2b4a0 43 45 4c 5f 44 55 50 20 20 20 20 20 20 30 78 30  CEL_DUP      0x0
2b4b0 31 20 20 2f 2a 20 44 65 65 70 2c 20 6e 6f 74 20  1  /* Deep, not 
2b4c0 73 68 61 6c 6c 6f 77 20 63 6f 70 69 65 73 20 2a  shallow copies *
2b4d0 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
2b4e0 5f 45 43 45 4c 5f 46 41 43 54 4f 52 20 20 20 30  _ECEL_FACTOR   0
2b4f0 78 30 32 20 20 2f 2a 20 46 61 63 74 6f 72 20 6f  x02  /* Factor o
2b500 75 74 20 63 6f 6e 73 74 61 6e 74 20 74 65 72 6d  ut constant term
2b510 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
2b520 49 54 45 5f 45 43 45 4c 5f 52 45 46 20 20 20 20  ITE_ECEL_REF    
2b530 20 20 30 78 30 34 20 20 2f 2a 20 55 73 65 20 45    0x04  /* Use E
2b540 78 70 72 4c 69 73 74 2e 75 2e 78 2e 69 4f 72 64  xprList.u.x.iOrd
2b550 65 72 42 79 43 6f 6c 20 2a 2f 0a 23 64 65 66 69  erByCol */.#defi
2b560 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 4f  ne SQLITE_ECEL_O
2b570 4d 49 54 52 45 46 20 20 30 78 30 38 20 20 2f 2a  MITREF  0x08  /*
2b580 20 4f 6d 69 74 20 69 66 20 45 78 70 72 4c 69 73   Omit if ExprLis
2b590 74 2e 75 2e 78 2e 69 4f 72 64 65 72 42 79 43 6f  t.u.x.iOrderByCo
2b5a0 6c 20 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  l */.void sqlite
2b5b0 33 45 78 70 72 49 66 54 72 75 65 28 50 61 72 73  3ExprIfTrue(Pars
2b5c0 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20  e*, Expr*, int, 
2b5d0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2b5e0 65 33 45 78 70 72 49 66 46 61 6c 73 65 28 50 61  e3ExprIfFalse(Pa
2b5f0 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
2b600 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
2b610 69 74 65 33 45 78 70 72 49 66 46 61 6c 73 65 44  ite3ExprIfFalseD
2b620 75 70 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  up(Parse*, Expr*
2b630 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 54 61 62  , int, int);.Tab
2b640 6c 65 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 54  le *sqlite3FindT
2b650 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f  able(sqlite3*,co
2b660 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
2b670 20 63 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65   char*);.#define
2b680 20 4c 4f 43 41 54 45 5f 56 49 45 57 20 20 20 20   LOCATE_VIEW    
2b690 30 78 30 31 0a 23 64 65 66 69 6e 65 20 4c 4f 43  0x01.#define LOC
2b6a0 41 54 45 5f 4e 4f 45 52 52 20 20 20 30 78 30 32  ATE_NOERR   0x02
2b6b0 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c  .Table *sqlite3L
2b6c0 6f 63 61 74 65 54 61 62 6c 65 28 50 61 72 73 65  ocateTable(Parse
2b6d0 2a 2c 75 33 32 20 66 6c 61 67 73 2c 63 6f 6e 73  *,u32 flags,cons
2b6e0 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
2b6f0 68 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71  har*);.Table *sq
2b700 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65  lite3LocateTable
2b710 49 74 65 6d 28 50 61 72 73 65 2a 2c 75 33 32 20  Item(Parse*,u32 
2b720 66 6c 61 67 73 2c 73 74 72 75 63 74 20 53 72 63  flags,struct Src
2b730 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 49 6e  List_item *);.In
2b740 64 65 78 20 2a 73 71 6c 69 74 65 33 46 69 6e 64  dex *sqlite3Find
2b750 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 63  Index(sqlite3*,c
2b760 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
2b770 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
2b780 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
2b790 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69 74  eleteTable(sqlit
2b7a0 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  e3*,int,const ch
2b7b0 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
2b7c0 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
2b7d0 65 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c  eIndex(sqlite3*,
2b7e0 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  int,const char*)
2b7f0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61  ;.void sqlite3Va
2b800 63 75 75 6d 28 50 61 72 73 65 2a 2c 54 6f 6b 65  cuum(Parse*,Toke
2b810 6e 2a 2c 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  n*,Expr*);.int s
2b820 71 6c 69 74 65 33 52 75 6e 56 61 63 75 75 6d 28  qlite3RunVacuum(
2b830 63 68 61 72 2a 2a 2c 20 73 71 6c 69 74 65 33 2a  char**, sqlite3*
2b840 2c 20 69 6e 74 2c 20 73 71 6c 69 74 65 33 5f 76  , int, sqlite3_v
2b850 61 6c 75 65 2a 29 3b 0a 63 68 61 72 20 2a 73 71  alue*);.char *sq
2b860 6c 69 74 65 33 4e 61 6d 65 46 72 6f 6d 54 6f 6b  lite3NameFromTok
2b870 65 6e 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b  en(sqlite3*, Tok
2b880 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
2b890 33 45 78 70 72 43 6f 6d 70 61 72 65 28 50 61 72  3ExprCompare(Par
2b8a0 73 65 2a 2c 45 78 70 72 2a 2c 20 45 78 70 72 2a  se*,Expr*, Expr*
2b8b0 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
2b8c0 74 65 33 45 78 70 72 43 6f 6d 70 61 72 65 53 6b  te3ExprCompareSk
2b8d0 69 70 28 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c  ip(Expr*, Expr*,
2b8e0 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
2b8f0 65 33 45 78 70 72 4c 69 73 74 43 6f 6d 70 61 72  e3ExprListCompar
2b900 65 28 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70  e(ExprList*, Exp
2b910 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e  rList*, int);.in
2b920 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 6d 70  t sqlite3ExprImp
2b930 6c 69 65 73 45 78 70 72 28 50 61 72 73 65 2a 2c  liesExpr(Parse*,
2b940 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  Expr*, Expr*, in
2b950 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  t);.int sqlite3E
2b960 78 70 72 49 6d 70 6c 69 65 73 4e 6f 6e 4e 75 6c  xprImpliesNonNul
2b970 6c 52 6f 77 28 45 78 70 72 2a 2c 69 6e 74 29 3b  lRow(Expr*,int);
2b980 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
2b990 72 41 6e 61 6c 79 7a 65 41 67 67 72 65 67 61 74  rAnalyzeAggregat
2b9a0 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c  es(NameContext*,
2b9b0 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
2b9c0 6c 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a 65  lite3ExprAnalyze
2b9d0 41 67 67 4c 69 73 74 28 4e 61 6d 65 43 6f 6e 74  AggList(NameCont
2b9e0 65 78 74 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b  ext*,ExprList*);
2b9f0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
2ba00 43 6f 76 65 72 65 64 42 79 49 6e 64 65 78 28 45  CoveredByIndex(E
2ba10 78 70 72 2a 2c 20 69 6e 74 20 69 43 75 72 2c 20  xpr*, int iCur, 
2ba20 49 6e 64 65 78 20 2a 70 49 64 78 29 3b 0a 69 6e  Index *pIdx);.in
2ba30 74 20 73 71 6c 69 74 65 33 46 75 6e 63 74 69 6f  t sqlite3Functio
2ba40 6e 55 73 65 73 54 68 69 73 53 72 63 28 45 78 70  nUsesThisSrc(Exp
2ba50 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 56  r*, SrcList*);.V
2ba60 64 62 65 20 2a 73 71 6c 69 74 65 33 47 65 74 56  dbe *sqlite3GetV
2ba70 64 62 65 28 50 61 72 73 65 2a 29 3b 0a 23 69 66  dbe(Parse*);.#if
2ba80 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45  ndef SQLITE_UNTE
2ba90 53 54 41 42 4c 45 0a 76 6f 69 64 20 73 71 6c 69  STABLE.void sqli
2baa0 74 65 33 50 72 6e 67 53 61 76 65 53 74 61 74 65  te3PrngSaveState
2bab0 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c  (void);.void sql
2bac0 69 74 65 33 50 72 6e 67 52 65 73 74 6f 72 65 53  ite3PrngRestoreS
2bad0 74 61 74 65 28 76 6f 69 64 29 3b 0a 23 65 6e 64  tate(void);.#end
2bae0 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  if.void sqlite3R
2baf0 6f 6c 6c 62 61 63 6b 41 6c 6c 28 73 71 6c 69 74  ollbackAll(sqlit
2bb00 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e3*,int);.void s
2bb10 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79  qlite3CodeVerify
2bb20 53 63 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 69  Schema(Parse*, i
2bb30 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2bb40 33 43 6f 64 65 56 65 72 69 66 79 4e 61 6d 65 64  3CodeVerifyNamed
2bb50 53 63 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 63  Schema(Parse*, c
2bb60 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 29 3b  onst char *zDb);
2bb70 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67  .void sqlite3Beg
2bb80 69 6e 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61  inTransaction(Pa
2bb90 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  rse*, int);.void
2bba0 20 73 71 6c 69 74 65 33 45 6e 64 54 72 61 6e 73   sqlite3EndTrans
2bbb0 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 69 6e  action(Parse*,in
2bbc0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2bbd0 53 61 76 65 70 6f 69 6e 74 28 50 61 72 73 65 2a  Savepoint(Parse*
2bbe0 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  , int, Token*);.
2bbf0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73  void sqlite3Clos
2bc00 65 53 61 76 65 70 6f 69 6e 74 73 28 73 71 6c 69  eSavepoints(sqli
2bc10 74 65 33 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  te3 *);.void sql
2bc20 69 74 65 33 4c 65 61 76 65 4d 75 74 65 78 41 6e  ite3LeaveMutexAn
2bc30 64 43 6c 6f 73 65 5a 6f 6d 62 69 65 28 73 71 6c  dCloseZombie(sql
2bc40 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ite3*);.int sqli
2bc50 74 65 33 45 78 70 72 49 64 54 6f 54 72 75 65 46  te3ExprIdToTrueF
2bc60 61 6c 73 65 28 45 78 70 72 2a 29 3b 0a 69 6e 74  alse(Expr*);.int
2bc70 20 73 71 6c 69 74 65 33 45 78 70 72 54 72 75 74   sqlite3ExprTrut
2bc80 68 56 61 6c 75 65 28 63 6f 6e 73 74 20 45 78 70  hValue(const Exp
2bc90 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
2bca0 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 28 45  ExprIsConstant(E
2bcb0 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
2bcc0 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74  e3ExprIsConstant
2bcd0 4e 6f 74 4a 6f 69 6e 28 45 78 70 72 2a 29 3b 0a  NotJoin(Expr*);.
2bce0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49  int sqlite3ExprI
2bcf0 73 43 6f 6e 73 74 61 6e 74 4f 72 46 75 6e 63 74  sConstantOrFunct
2bd00 69 6f 6e 28 45 78 70 72 2a 2c 20 75 38 29 3b 0a  ion(Expr*, u8);.
2bd10 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49  int sqlite3ExprI
2bd20 73 43 6f 6e 73 74 61 6e 74 4f 72 47 72 6f 75 70  sConstantOrGroup
2bd30 42 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  By(Parse*, Expr*
2bd40 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e  , ExprList*);.in
2bd50 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 54  t sqlite3ExprIsT
2bd60 61 62 6c 65 43 6f 6e 73 74 61 6e 74 28 45 78 70  ableConstant(Exp
2bd70 72 2a 2c 69 6e 74 29 3b 0a 23 69 66 64 65 66 20  r*,int);.#ifdef 
2bd80 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 55  SQLITE_ENABLE_CU
2bd90 52 53 4f 52 5f 48 49 4e 54 53 0a 69 6e 74 20 73  RSOR_HINTS.int s
2bda0 71 6c 69 74 65 33 45 78 70 72 43 6f 6e 74 61 69  qlite3ExprContai
2bdb0 6e 73 53 75 62 71 75 65 72 79 28 45 78 70 72 2a  nsSubquery(Expr*
2bdc0 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71  );.#endif.int sq
2bdd0 6c 69 74 65 33 45 78 70 72 49 73 49 6e 74 65 67  lite3ExprIsInteg
2bde0 65 72 28 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b  er(Expr*, int*);
2bdf0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
2be00 43 61 6e 42 65 4e 75 6c 6c 28 63 6f 6e 73 74 20  CanBeNull(const 
2be10 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
2be20 74 65 33 45 78 70 72 4e 65 65 64 73 4e 6f 41 66  te3ExprNeedsNoAf
2be30 66 69 6e 69 74 79 43 68 61 6e 67 65 28 63 6f 6e  finityChange(con
2be40 73 74 20 45 78 70 72 2a 2c 20 63 68 61 72 29 3b  st Expr*, char);
2be50 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52 6f  .int sqlite3IsRo
2be60 77 69 64 28 63 6f 6e 73 74 20 63 68 61 72 2a 29  wid(const char*)
2be70 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65  ;.void sqlite3Ge
2be80 6e 65 72 61 74 65 52 6f 77 44 65 6c 65 74 65 28  nerateRowDelete(
2be90 0a 20 20 20 20 50 61 72 73 65 2a 2c 54 61 62 6c  .    Parse*,Tabl
2bea0 65 2a 2c 54 72 69 67 67 65 72 2a 2c 69 6e 74 2c  e*,Trigger*,int,
2beb0 69 6e 74 2c 69 6e 74 2c 69 31 36 2c 75 38 2c 75  int,int,i16,u8,u
2bec0 38 2c 75 38 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  8,u8,int);.void 
2bed0 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 52  sqlite3GenerateR
2bee0 6f 77 49 6e 64 65 78 44 65 6c 65 74 65 28 50 61  owIndexDelete(Pa
2bef0 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
2bf00 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e  t, int, int*, in
2bf10 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47  t);.int sqlite3G
2bf20 65 6e 65 72 61 74 65 49 6e 64 65 78 4b 65 79 28  enerateIndexKey(
2bf30 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20  Parse*, Index*, 
2bf40 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  int, int, int, i
2bf50 6e 74 2a 2c 49 6e 64 65 78 2a 2c 69 6e 74 29 3b  nt*,Index*,int);
2bf60 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73  .void sqlite3Res
2bf70 6f 6c 76 65 50 61 72 74 49 64 78 4c 61 62 65 6c  olvePartIdxLabel
2bf80 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 69 6e  (Parse*,int);.in
2bf90 74 20 73 71 6c 69 74 65 33 45 78 70 72 52 65 66  t sqlite3ExprRef
2bfa0 65 72 65 6e 63 65 73 55 70 64 61 74 65 64 43 6f  erencesUpdatedCo
2bfb0 6c 75 6d 6e 28 45 78 70 72 2a 2c 69 6e 74 2a 2c  lumn(Expr*,int*,
2bfc0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2bfd0 65 33 47 65 6e 65 72 61 74 65 43 6f 6e 73 74 72  e3GenerateConstr
2bfe0 61 69 6e 74 43 68 65 63 6b 73 28 50 61 72 73 65  aintChecks(Parse
2bff0 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2a 2c 69 6e  *,Table*,int*,in
2c000 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 0a 20  t,int,int,int,. 
2c010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c030 20 20 20 20 75 38 2c 75 38 2c 69 6e 74 2c 69 6e      u8,u8,int,in
2c040 74 2a 2c 69 6e 74 2a 2c 55 70 73 65 72 74 2a 29  t*,int*,Upsert*)
2c050 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
2c060 45 4e 41 42 4c 45 5f 4e 55 4c 4c 5f 54 52 49 4d  ENABLE_NULL_TRIM
2c070 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 53  .  void sqlite3S
2c080 65 74 4d 61 6b 65 52 65 63 6f 72 64 50 35 28 56  etMakeRecordP5(V
2c090 64 62 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23 65  dbe*,Table*);.#e
2c0a0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
2c0b0 69 74 65 33 53 65 74 4d 61 6b 65 52 65 63 6f 72  ite3SetMakeRecor
2c0c0 64 50 35 28 41 2c 42 29 0a 23 65 6e 64 69 66 0a  dP5(A,B).#endif.
2c0d0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 70  void sqlite3Comp
2c0e0 6c 65 74 65 49 6e 73 65 72 74 69 6f 6e 28 50 61  leteInsertion(Pa
2c0f0 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c  rse*,Table*,int,
2c100 69 6e 74 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74  int,int,int*,int
2c110 2c 69 6e 74 2c 69 6e 74 29 3b 0a 69 6e 74 20 73  ,int,int);.int s
2c120 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 41  qlite3OpenTableA
2c130 6e 64 49 6e 64 69 63 65 73 28 50 61 72 73 65 2a  ndIndices(Parse*
2c140 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 75  , Table*, int, u
2c150 38 2c 20 69 6e 74 2c 20 75 38 2a 2c 20 69 6e 74  8, int, u8*, int
2c160 2a 2c 20 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73  *, int*);.void s
2c170 71 6c 69 74 65 33 42 65 67 69 6e 57 72 69 74 65  qlite3BeginWrite
2c180 4f 70 65 72 61 74 69 6f 6e 28 50 61 72 73 65 2a  Operation(Parse*
2c190 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
2c1a0 64 20 73 71 6c 69 74 65 33 4d 75 6c 74 69 57 72  d sqlite3MultiWr
2c1b0 69 74 65 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  ite(Parse*);.voi
2c1c0 64 20 73 71 6c 69 74 65 33 4d 61 79 41 62 6f 72  d sqlite3MayAbor
2c1d0 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  t(Parse*);.void 
2c1e0 73 71 6c 69 74 65 33 48 61 6c 74 43 6f 6e 73 74  sqlite3HaltConst
2c1f0 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e  raint(Parse*, in
2c200 74 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2c 20 69  t, int, char*, i
2c210 38 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c  8, u8);.void sql
2c220 69 74 65 33 55 6e 69 71 75 65 43 6f 6e 73 74 72  ite3UniqueConstr
2c230 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74  aint(Parse*, int
2c240 2c 20 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20  , Index*);.void 
2c250 73 71 6c 69 74 65 33 52 6f 77 69 64 43 6f 6e 73  sqlite3RowidCons
2c260 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69  traint(Parse*, i
2c270 6e 74 2c 20 54 61 62 6c 65 2a 29 3b 0a 45 78 70  nt, Table*);.Exp
2c280 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 44 75  r *sqlite3ExprDu
2c290 70 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a  p(sqlite3*,Expr*
2c2a0 2c 69 6e 74 29 3b 0a 45 78 70 72 4c 69 73 74 20  ,int);.ExprList 
2c2b0 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74  *sqlite3ExprList
2c2c0 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 45 78 70  Dup(sqlite3*,Exp
2c2d0 72 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 53 72 63  rList*,int);.Src
2c2e0 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63  List *sqlite3Src
2c2f0 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a  ListDup(sqlite3*
2c300 2c 53 72 63 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a  ,SrcList*,int);.
2c310 49 64 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 49  IdList *sqlite3I
2c320 64 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65 33  dListDup(sqlite3
2c330 2a 2c 49 64 4c 69 73 74 2a 29 3b 0a 53 65 6c 65  *,IdList*);.Sele
2c340 63 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65 63  ct *sqlite3Selec
2c350 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 53 65  tDup(sqlite3*,Se
2c360 6c 65 63 74 2a 2c 69 6e 74 29 3b 0a 46 75 6e 63  lect*,int);.Func
2c370 44 65 66 20 2a 73 71 6c 69 74 65 33 46 75 6e 63  Def *sqlite3Func
2c380 74 69 6f 6e 53 65 61 72 63 68 28 69 6e 74 2c 63  tionSearch(int,c
2c390 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
2c3a0 64 20 73 71 6c 69 74 65 33 49 6e 73 65 72 74 42  d sqlite3InsertB
2c3b0 75 69 6c 74 69 6e 46 75 6e 63 73 28 46 75 6e 63  uiltinFuncs(Func
2c3c0 44 65 66 2a 2c 69 6e 74 29 3b 0a 46 75 6e 63 44  Def*,int);.FuncD
2c3d0 65 66 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 46  ef *sqlite3FindF
2c3e0 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a  unction(sqlite3*
2c3f0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74  ,const char*,int
2c400 2c 75 38 2c 75 38 29 3b 0a 76 6f 69 64 20 73 71  ,u8,u8);.void sq
2c410 6c 69 74 65 33 52 65 67 69 73 74 65 72 42 75 69  lite3RegisterBui
2c420 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 28 76 6f  ltinFunctions(vo
2c430 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  id);.void sqlite
2c440 33 52 65 67 69 73 74 65 72 44 61 74 65 54 69 6d  3RegisterDateTim
2c450 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29  eFunctions(void)
2c460 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
2c470 67 69 73 74 65 72 50 65 72 43 6f 6e 6e 65 63 74  gisterPerConnect
2c480 69 6f 6e 42 75 69 6c 74 69 6e 46 75 6e 63 74 69  ionBuiltinFuncti
2c490 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69  ons(sqlite3*);.i
2c4a0 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  nt sqlite3Safety
2c4b0 43 68 65 63 6b 4f 6b 28 73 71 6c 69 74 65 33 2a  CheckOk(sqlite3*
2c4c0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61  );.int sqlite3Sa
2c4d0 66 65 74 79 43 68 65 63 6b 53 69 63 6b 4f 72 4f  fetyCheckSickOrO
2c4e0 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69  k(sqlite3*);.voi
2c4f0 64 20 73 71 6c 69 74 65 33 43 68 61 6e 67 65 43  d sqlite3ChangeC
2c500 6f 6f 6b 69 65 28 50 61 72 73 65 2a 2c 20 69 6e  ookie(Parse*, in
2c510 74 29 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65  t);..#if !define
2c520 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  d(SQLITE_OMIT_VI
2c530 45 57 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  EW) && !defined(
2c540 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47  SQLITE_OMIT_TRIG
2c550 47 45 52 29 0a 76 6f 69 64 20 73 71 6c 69 74 65  GER).void sqlite
2c560 33 4d 61 74 65 72 69 61 6c 69 7a 65 56 69 65 77  3MaterializeView
2c570 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
2c580 20 45 78 70 72 2a 2c 20 45 78 70 72 4c 69 73 74   Expr*, ExprList
2c590 2a 2c 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 23 65  *,Expr*,int);.#e
2c5a0 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51  ndif..#ifndef SQ
2c5b0 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45  LITE_OMIT_TRIGGE
2c5c0 52 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  R.  void sqlite3
2c5d0 42 65 67 69 6e 54 72 69 67 67 65 72 28 50 61 72  BeginTrigger(Par
2c5e0 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  se*, Token*,Toke
2c5f0 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 49 64 4c 69 73  n*,int,int,IdLis
2c600 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 0a 20 20 20  t*,SrcList*,.   
2c610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c620 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 69 6e          Expr*,in
2c630 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  t, int);.  void 
2c640 73 71 6c 69 74 65 33 46 69 6e 69 73 68 54 72 69  sqlite3FinishTri
2c650 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54 72 69  gger(Parse*, Tri
2c660 67 67 65 72 53 74 65 70 2a 2c 20 54 6f 6b 65 6e  ggerStep*, Token
2c670 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
2c680 65 33 44 72 6f 70 54 72 69 67 67 65 72 28 50 61  e3DropTrigger(Pa
2c690 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
2c6a0 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  int);.  void sql
2c6b0 69 74 65 33 44 72 6f 70 54 72 69 67 67 65 72 50  ite3DropTriggerP
2c6c0 74 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67  tr(Parse*, Trigg
2c6d0 65 72 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 20  er*);.  Trigger 
2c6e0 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 73  *sqlite3Triggers
2c6f0 45 78 69 73 74 28 50 61 72 73 65 20 2a 2c 20 54  Exist(Parse *, T
2c700 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72  able*, int, Expr
2c710 4c 69 73 74 2a 2c 20 69 6e 74 20 2a 70 4d 61 73  List*, int *pMas
2c720 6b 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73  k);.  Trigger *s
2c730 71 6c 69 74 65 33 54 72 69 67 67 65 72 4c 69 73  qlite3TriggerLis
2c740 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65  t(Parse *, Table
2c750 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69   *);.  void sqli
2c760 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65  te3CodeRowTrigge
2c770 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65  r(Parse*, Trigge
2c780 72 20 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69  r *, int, ExprLi
2c790 73 74 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65 20  st*, int, Table 
2c7a0 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
2c7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2c7c0 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20  nt, int, int);. 
2c7d0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64   void sqlite3Cod
2c7e0 65 52 6f 77 54 72 69 67 67 65 72 44 69 72 65 63  eRowTriggerDirec
2c7f0 74 28 50 61 72 73 65 20 2a 2c 20 54 72 69 67 67  t(Parse *, Trigg
2c800 65 72 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69  er *, Table *, i
2c810 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20  nt, int, int);. 
2c820 20 76 6f 69 64 20 73 71 6c 69 74 65 56 69 65 77   void sqliteView
2c830 54 72 69 67 67 65 72 73 28 50 61 72 73 65 2a 2c  Triggers(Parse*,
2c840 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20   Table*, Expr*, 
2c850 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b  int, ExprList*);
2c860 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44  .  void sqlite3D
2c870 65 6c 65 74 65 54 72 69 67 67 65 72 53 74 65 70  eleteTriggerStep
2c880 28 73 71 6c 69 74 65 33 2a 2c 20 54 72 69 67 67  (sqlite3*, Trigg
2c890 65 72 53 74 65 70 2a 29 3b 0a 20 20 54 72 69 67  erStep*);.  Trig
2c8a0 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33  gerStep *sqlite3
2c8b0 54 72 69 67 67 65 72 53 65 6c 65 63 74 53 74 65  TriggerSelectSte
2c8c0 70 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63  p(sqlite3*,Selec
2c8d0 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  t*,.            
2c8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c8f0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73              cons
2c900 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
2c910 61 72 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53  ar*);.  TriggerS
2c920 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67  tep *sqlite3Trig
2c930 67 65 72 49 6e 73 65 72 74 53 74 65 70 28 50 61  gerInsertStep(Pa
2c940 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 20 49 64 4c  rse*,Token*, IdL
2c950 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  ist*,.          
2c960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 65                Se
2c980 6c 65 63 74 2a 2c 75 38 2c 55 70 73 65 72 74 2a  lect*,u8,Upsert*
2c990 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
2c9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c9b0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20            const 
2c9c0 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
2c9d0 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65  *);.  TriggerSte
2c9e0 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65  p *sqlite3Trigge
2c9f0 72 55 70 64 61 74 65 53 74 65 70 28 50 61 72 73  rUpdateStep(Pars
2ca00 65 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69  e*,Token*,ExprLi
2ca10 73 74 2a 2c 20 45 78 70 72 2a 2c 20 75 38 2c 0a  st*, Expr*, u8,.
2ca20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ca30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ca40 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68          const ch
2ca50 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  ar*,const char*)
2ca60 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  ;.  TriggerStep 
2ca70 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 44  *sqlite3TriggerD
2ca80 65 6c 65 74 65 53 74 65 70 28 50 61 72 73 65 2a  eleteStep(Parse*
2ca90 2c 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 2a 2c 0a  ,Token*, Expr*,.
2caa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cac0 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68          const ch
2cad0 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  ar*,const char*)
2cae0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2caf0 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 73 71  DeleteTrigger(sq
2cb00 6c 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72 2a  lite3*, Trigger*
2cb10 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
2cb20 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
2cb30 54 72 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a  Trigger(sqlite3*
2cb40 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
2cb50 29 3b 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33  );.  u32 sqlite3
2cb60 54 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28 50  TriggerColmask(P
2cb70 61 72 73 65 2a 2c 54 72 69 67 67 65 72 2a 2c 45  arse*,Trigger*,E
2cb80 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 69 6e 74  xprList*,int,int
2cb90 2c 54 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 23 20  ,Table*,int);.# 
2cba0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 50 61  define sqlite3Pa
2cbb0 72 73 65 54 6f 70 6c 65 76 65 6c 28 70 29 20 28  rseToplevel(p) (
2cbc0 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3f  (p)->pToplevel ?
2cbd0 20 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20   (p)->pToplevel 
2cbe0 3a 20 28 70 29 29 0a 23 20 64 65 66 69 6e 65 20  : (p)).# define 
2cbf0 73 71 6c 69 74 65 33 49 73 54 6f 70 6c 65 76 65  sqlite3IsTopleve
2cc00 6c 28 70 29 20 28 28 70 29 2d 3e 70 54 6f 70 6c  l(p) ((p)->pTopl
2cc10 65 76 65 6c 3d 3d 30 29 0a 23 65 6c 73 65 0a 23  evel==0).#else.#
2cc20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
2cc30 72 69 67 67 65 72 73 45 78 69 73 74 28 42 2c 43  riggersExist(B,C
2cc40 2c 44 2c 45 2c 46 29 20 30 0a 23 20 64 65 66 69  ,D,E,F) 0.# defi
2cc50 6e 65 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  ne sqlite3Delete
2cc60 54 72 69 67 67 65 72 28 41 2c 42 29 0a 23 20 64  Trigger(A,B).# d
2cc70 65 66 69 6e 65 20 73 71 6c 69 74 65 33 44 72 6f  efine sqlite3Dro
2cc80 70 54 72 69 67 67 65 72 50 74 72 28 41 2c 42 29  pTriggerPtr(A,B)
2cc90 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2cca0 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
2ccb0 54 72 69 67 67 65 72 28 41 2c 42 2c 43 29 0a 23  Trigger(A,B,C).#
2ccc0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43   define sqlite3C
2ccd0 6f 64 65 52 6f 77 54 72 69 67 67 65 72 28 41 2c  odeRowTrigger(A,
2cce0 42 2c 43 2c 44 2c 45 2c 46 2c 47 2c 48 2c 49 29  B,C,D,E,F,G,H,I)
2ccf0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2cd00 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 44  3CodeRowTriggerD
2cd10 69 72 65 63 74 28 41 2c 42 2c 43 2c 44 2c 45 2c  irect(A,B,C,D,E,
2cd20 46 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  F).# define sqli
2cd30 74 65 33 54 72 69 67 67 65 72 4c 69 73 74 28 58  te3TriggerList(X
2cd40 2c 20 59 29 20 30 0a 23 20 64 65 66 69 6e 65 20  , Y) 0.# define 
2cd50 73 71 6c 69 74 65 33 50 61 72 73 65 54 6f 70 6c  sqlite3ParseTopl
2cd60 65 76 65 6c 28 70 29 20 70 0a 23 20 64 65 66 69  evel(p) p.# defi
2cd70 6e 65 20 73 71 6c 69 74 65 33 49 73 54 6f 70 6c  ne sqlite3IsTopl
2cd80 65 76 65 6c 28 70 29 20 31 0a 23 20 64 65 66 69  evel(p) 1.# defi
2cd90 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67 67 65  ne sqlite3Trigge
2cda0 72 43 6f 6c 6d 61 73 6b 28 41 2c 42 2c 43 2c 44  rColmask(A,B,C,D
2cdb0 2c 45 2c 46 2c 47 29 20 30 0a 23 65 6e 64 69 66  ,E,F,G) 0.#endif
2cdc0 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 69  ..int sqlite3Joi
2cdd0 6e 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f  nType(Parse*, To
2cde0 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  ken*, Token*, To
2cdf0 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
2ce00 74 65 33 43 72 65 61 74 65 46 6f 72 65 69 67 6e  te3CreateForeign
2ce10 4b 65 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72  Key(Parse*, Expr
2ce20 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 45  List*, Token*, E
2ce30 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a  xprList*, int);.
2ce40 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 66 65  void sqlite3Defe
2ce50 72 46 6f 72 65 69 67 6e 4b 65 79 28 50 61 72 73  rForeignKey(Pars
2ce60 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 6e 64 65  e*, int);.#ifnde
2ce70 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
2ce80 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 76 6f  THORIZATION.  vo
2ce90 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 52 65  id sqlite3AuthRe
2cea0 61 64 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c  ad(Parse*,Expr*,
2ceb0 53 63 68 65 6d 61 2a 2c 53 72 63 4c 69 73 74 2a  Schema*,SrcList*
2cec0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
2ced0 41 75 74 68 43 68 65 63 6b 28 50 61 72 73 65 2a  AuthCheck(Parse*
2cee0 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72  ,int, const char
2cef0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
2cf00 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
2cf10 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68  void sqlite3Auth
2cf20 43 6f 6e 74 65 78 74 50 75 73 68 28 50 61 72 73  ContextPush(Pars
2cf30 65 2a 2c 20 41 75 74 68 43 6f 6e 74 65 78 74 2a  e*, AuthContext*
2cf40 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
2cf50 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75    void sqlite3Au
2cf60 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 41 75 74  thContextPop(Aut
2cf70 68 43 6f 6e 74 65 78 74 2a 29 3b 0a 20 20 69 6e  hContext*);.  in
2cf80 74 20 73 71 6c 69 74 65 33 41 75 74 68 52 65 61  t sqlite3AuthRea
2cf90 64 43 6f 6c 28 50 61 72 73 65 2a 2c 20 63 6f 6e  dCol(Parse*, con
2cfa0 73 74 20 63 68 61 72 20 2a 2c 20 63 6f 6e 73 74  st char *, const
2cfb0 20 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 23   char *, int);.#
2cfc0 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
2cfd0 6c 69 74 65 33 41 75 74 68 52 65 61 64 28 61 2c  lite3AuthRead(a,
2cfe0 62 2c 63 2c 64 29 0a 23 20 64 65 66 69 6e 65 20  b,c,d).# define 
2cff0 73 71 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b  sqlite3AuthCheck
2d000 28 61 2c 62 2c 63 2c 64 2c 65 29 20 20 20 20 53  (a,b,c,d,e)    S
2d010 51 4c 49 54 45 5f 4f 4b 0a 23 20 64 65 66 69 6e  QLITE_OK.# defin
2d020 65 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e  e sqlite3AuthCon
2d030 74 65 78 74 50 75 73 68 28 61 2c 62 2c 63 29 0a  textPush(a,b,c).
2d040 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2d050 41 75 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 61  AuthContextPop(a
2d060 29 20 20 28 28 76 6f 69 64 29 28 61 29 29 0a 23  )  ((void)(a)).#
2d070 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
2d080 65 33 41 74 74 61 63 68 28 50 61 72 73 65 2a 2c  e3Attach(Parse*,
2d090 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 45   Expr*, Expr*, E
2d0a0 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
2d0b0 74 65 33 44 65 74 61 63 68 28 50 61 72 73 65 2a  te3Detach(Parse*
2d0c0 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
2d0d0 71 6c 69 74 65 33 46 69 78 49 6e 69 74 28 44 62  qlite3FixInit(Db
2d0e0 46 69 78 65 72 2a 2c 20 50 61 72 73 65 2a 2c 20  Fixer*, Parse*, 
2d0f0 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  int, const char*
2d100 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b  , const Token*);
2d110 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 53  .int sqlite3FixS
2d120 72 63 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c  rcList(DbFixer*,
2d130 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20   SrcList*);.int 
2d140 73 71 6c 69 74 65 33 46 69 78 53 65 6c 65 63 74  sqlite3FixSelect
2d150 28 44 62 46 69 78 65 72 2a 2c 20 53 65 6c 65 63  (DbFixer*, Selec
2d160 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
2d170 46 69 78 45 78 70 72 28 44 62 46 69 78 65 72 2a  FixExpr(DbFixer*
2d180 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  , Expr*);.int sq
2d190 6c 69 74 65 33 46 69 78 45 78 70 72 4c 69 73 74  lite3FixExprList
2d1a0 28 44 62 46 69 78 65 72 2a 2c 20 45 78 70 72 4c  (DbFixer*, ExprL
2d1b0 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
2d1c0 65 33 46 69 78 54 72 69 67 67 65 72 53 74 65 70  e3FixTriggerStep
2d1d0 28 44 62 46 69 78 65 72 2a 2c 20 54 72 69 67 67  (DbFixer*, Trigg
2d1e0 65 72 53 74 65 70 2a 29 3b 0a 69 6e 74 20 73 71  erStep*);.int sq
2d1f0 6c 69 74 65 33 41 74 6f 46 28 63 6f 6e 73 74 20  lite3AtoF(const 
2d200 63 68 61 72 20 2a 7a 2c 20 64 6f 75 62 6c 65 2a  char *z, double*
2d210 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20  , int, u8);.int 
2d220 73 71 6c 69 74 65 33 47 65 74 49 6e 74 33 32 28  sqlite3GetInt32(
2d230 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e  const char *, in
2d240 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
2d250 41 74 6f 69 28 63 6f 6e 73 74 20 63 68 61 72 2a  Atoi(const char*
2d260 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
2d270 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 69 6e 74  E_OMIT_UTF16.int
2d280 20 73 71 6c 69 74 65 33 55 74 66 31 36 42 79 74   sqlite3Utf16Byt
2d290 65 4c 65 6e 28 63 6f 6e 73 74 20 76 6f 69 64 20  eLen(const void 
2d2a0 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e 43 68 61  *pData, int nCha
2d2b0 72 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73  r);.#endif.int s
2d2c0 71 6c 69 74 65 33 55 74 66 38 43 68 61 72 4c 65  qlite3Utf8CharLe
2d2d0 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 70 44  n(const char *pD
2d2e0 61 74 61 2c 20 69 6e 74 20 6e 42 79 74 65 29 3b  ata, int nByte);
2d2f0 0a 75 33 32 20 73 71 6c 69 74 65 33 55 74 66 38  .u32 sqlite3Utf8
2d300 52 65 61 64 28 63 6f 6e 73 74 20 75 38 2a 2a 29  Read(const u8**)
2d310 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33  ;.LogEst sqlite3
2d320 4c 6f 67 45 73 74 28 75 36 34 29 3b 0a 4c 6f 67  LogEst(u64);.Log
2d330 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73  Est sqlite3LogEs
2d340 74 41 64 64 28 4c 6f 67 45 73 74 2c 4c 6f 67 45  tAdd(LogEst,LogE
2d350 73 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  st);.#ifndef SQL
2d360 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
2d370 54 41 42 4c 45 0a 4c 6f 67 45 73 74 20 73 71 6c  TABLE.LogEst sql
2d380 69 74 65 33 4c 6f 67 45 73 74 46 72 6f 6d 44 6f  ite3LogEstFromDo
2d390 75 62 6c 65 28 64 6f 75 62 6c 65 29 3b 0a 23 65  uble(double);.#e
2d3a0 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64  ndif.#if defined
2d3b0 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53  (SQLITE_ENABLE_S
2d3c0 54 4d 54 5f 53 43 41 4e 53 54 41 54 55 53 29 20  TMT_SCANSTATUS) 
2d3d0 7c 7c 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64  || \.    defined
2d3e0 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53  (SQLITE_ENABLE_S
2d3f0 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 29 20 7c  TAT3_OR_STAT4) |
2d400 7c 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28  | \.    defined(
2d410 53 51 4c 49 54 45 5f 45 58 50 4c 41 49 4e 5f 45  SQLITE_EXPLAIN_E
2d420 53 54 49 4d 41 54 45 44 5f 52 4f 57 53 29 0a 75  STIMATED_ROWS).u
2d430 36 34 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74  64 sqlite3LogEst
2d440 54 6f 49 6e 74 28 4c 6f 67 45 73 74 29 3b 0a 23  ToInt(LogEst);.#
2d450 65 6e 64 69 66 0a 56 4c 69 73 74 20 2a 73 71 6c  endif.VList *sql
2d460 69 74 65 33 56 4c 69 73 74 41 64 64 28 73 71 6c  ite3VListAdd(sql
2d470 69 74 65 33 2a 2c 56 4c 69 73 74 2a 2c 63 6f 6e  ite3*,VList*,con
2d480 73 74 20 63 68 61 72 2a 2c 69 6e 74 2c 69 6e 74  st char*,int,int
2d490 29 3b 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73  );.const char *s
2d4a0 71 6c 69 74 65 33 56 4c 69 73 74 4e 75 6d 54 6f  qlite3VListNumTo
2d4b0 4e 61 6d 65 28 56 4c 69 73 74 2a 2c 69 6e 74 29  Name(VList*,int)
2d4c0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 4c 69  ;.int sqlite3VLi
2d4d0 73 74 4e 61 6d 65 54 6f 4e 75 6d 28 56 4c 69 73  stNameToNum(VLis
2d4e0 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69  t*,const char*,i
2d4f0 6e 74 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 74  nt);../*.** Rout
2d500 69 6e 65 73 20 74 6f 20 72 65 61 64 20 61 6e 64  ines to read and
2d510 20 77 72 69 74 65 20 76 61 72 69 61 62 6c 65 2d   write variable-
2d520 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72 73 2e  length integers.
2d530 20 20 54 68 65 73 65 20 75 73 65 64 20 74 6f 0a    These used to.
2d540 2a 2a 20 62 65 20 64 65 66 69 6e 65 64 20 6c 6f  ** be defined lo
2d550 63 61 6c 6c 79 2c 20 62 75 74 20 6e 6f 77 20 77  cally, but now w
2d560 65 20 75 73 65 20 74 68 65 20 76 61 72 69 6e 74  e use the varint
2d570 20 72 6f 75 74 69 6e 65 73 20 69 6e 20 74 68 65   routines in the
2d580 20 75 74 69 6c 2e 63 0a 2a 2a 20 66 69 6c 65 2e   util.c.** file.
2d590 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 50  .*/.int sqlite3P
2d5a0 75 74 56 61 72 69 6e 74 28 75 6e 73 69 67 6e 65  utVarint(unsigne
2d5b0 64 20 63 68 61 72 2a 2c 20 75 36 34 29 3b 0a 75  d char*, u64);.u
2d5c0 38 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69  8 sqlite3GetVari
2d5d0 6e 74 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  nt(const unsigne
2d5e0 64 20 63 68 61 72 20 2a 2c 20 75 36 34 20 2a 29  d char *, u64 *)
2d5f0 3b 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74 56  ;.u8 sqlite3GetV
2d600 61 72 69 6e 74 33 32 28 63 6f 6e 73 74 20 75 6e  arint32(const un
2d610 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 75  signed char *, u
2d620 33 32 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  32 *);.int sqlit
2d630 65 33 56 61 72 69 6e 74 4c 65 6e 28 75 36 34 20  e3VarintLen(u64 
2d640 76 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63  v);../*.** The c
2d650 6f 6d 6d 6f 6e 20 63 61 73 65 20 69 73 20 66 6f  ommon case is fo
2d660 72 20 61 20 76 61 72 69 6e 74 20 74 6f 20 62 65  r a varint to be
2d670 20 61 20 73 69 6e 67 6c 65 20 62 79 74 65 2e 20   a single byte. 
2d680 20 54 68 65 79 20 66 6f 6c 6c 6f 77 69 6e 67 0a   They following.
2d690 2a 2a 20 6d 61 63 72 6f 73 20 68 61 6e 64 6c 65  ** macros handle
2d6a0 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65   the common case
2d6b0 20 77 69 74 68 6f 75 74 20 61 20 70 72 6f 63 65   without a proce
2d6c0 64 75 72 65 20 63 61 6c 6c 2c 20 62 75 74 20 74  dure call, but t
2d6d0 68 65 6e 20 63 61 6c 6c 0a 2a 2a 20 74 68 65 20  hen call.** the 
2d6e0 70 72 6f 63 65 64 75 72 65 20 66 6f 72 20 6c 61  procedure for la
2d6f0 72 67 65 72 20 76 61 72 69 6e 74 73 2e 0a 2a 2f  rger varints..*/
2d700 0a 23 64 65 66 69 6e 65 20 67 65 74 56 61 72 69  .#define getVari
2d710 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a 20 20 28  nt32(A,B)  \.  (
2d720 75 38 29 28 28 2a 28 41 29 3c 28 75 38 29 30 78  u8)((*(A)<(u8)0x
2d730 38 30 29 3f 28 28 42 29 3d 28 75 33 32 29 2a 28  80)?((B)=(u32)*(
2d740 41 29 29 2c 31 3a 73 71 6c 69 74 65 33 47 65 74  A)),1:sqlite3Get
2d750 56 61 72 69 6e 74 33 32 28 28 41 29 2c 28 75 33  Varint32((A),(u3
2d760 32 20 2a 29 26 28 42 29 29 29 0a 23 64 65 66 69  2 *)&(B))).#defi
2d770 6e 65 20 70 75 74 56 61 72 69 6e 74 33 32 28 41  ne putVarint32(A
2d780 2c 42 29 20 20 5c 0a 20 20 28 75 38 29 28 28 28  ,B)  \.  (u8)(((
2d790 75 33 32 29 28 42 29 3c 28 75 33 32 29 30 78 38  u32)(B)<(u32)0x8
2d7a0 30 29 3f 28 2a 28 41 29 3d 28 75 6e 73 69 67 6e  0)?(*(A)=(unsign
2d7b0 65 64 20 63 68 61 72 29 28 42 29 29 2c 31 3a 5c  ed char)(B)),1:\
2d7c0 0a 20 20 73 71 6c 69 74 65 33 50 75 74 56 61 72  .  sqlite3PutVar
2d7d0 69 6e 74 28 28 41 29 2c 28 42 29 29 29 0a 23 64  int((A),(B))).#d
2d7e0 65 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74 20  efine getVarint 
2d7f0 20 20 20 73 71 6c 69 74 65 33 47 65 74 56 61 72     sqlite3GetVar
2d800 69 6e 74 0a 23 64 65 66 69 6e 65 20 70 75 74 56  int.#define putV
2d810 61 72 69 6e 74 20 20 20 20 73 71 6c 69 74 65 33  arint    sqlite3
2d820 50 75 74 56 61 72 69 6e 74 0a 0a 0a 63 6f 6e 73  PutVarint...cons
2d830 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 49  t char *sqlite3I
2d840 6e 64 65 78 41 66 66 69 6e 69 74 79 53 74 72 28  ndexAffinityStr(
2d850 73 71 6c 69 74 65 33 2a 2c 20 49 6e 64 65 78 2a  sqlite3*, Index*
2d860 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 54  );.void sqlite3T
2d870 61 62 6c 65 41 66 66 69 6e 69 74 79 28 56 64 62  ableAffinity(Vdb
2d880 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29  e*, Table*, int)
2d890 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33 43 6f  ;.char sqlite3Co
2d8a0 6d 70 61 72 65 41 66 66 69 6e 69 74 79 28 45 78  mpareAffinity(Ex
2d8b0 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20  pr *pExpr, char 
2d8c0 61 66 66 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74  aff2);.int sqlit
2d8d0 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79 4f  e3IndexAffinityO
2d8e0 6b 28 45 78 70 72 20 2a 70 45 78 70 72 2c 20 63  k(Expr *pExpr, c
2d8f0 68 61 72 20 69 64 78 5f 61 66 66 69 6e 69 74 79  har idx_affinity
2d900 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33 54  );.char sqlite3T
2d910 61 62 6c 65 43 6f 6c 75 6d 6e 41 66 66 69 6e 69  ableColumnAffini
2d920 74 79 28 54 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a  ty(Table*,int);.
2d930 63 68 61 72 20 73 71 6c 69 74 65 33 45 78 70 72  char sqlite3Expr
2d940 41 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70  Affinity(Expr *p
2d950 45 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74  Expr);.int sqlit
2d960 65 33 41 74 6f 69 36 34 28 63 6f 6e 73 74 20 63  e3Atoi64(const c
2d970 68 61 72 2a 2c 20 69 36 34 2a 2c 20 69 6e 74 2c  har*, i64*, int,
2d980 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65   u8);.int sqlite
2d990 33 44 65 63 4f 72 48 65 78 54 6f 49 36 34 28 63  3DecOrHexToI64(c
2d9a0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 36 34 2a  onst char*, i64*
2d9b0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
2d9c0 72 72 6f 72 57 69 74 68 4d 73 67 28 73 71 6c 69  rrorWithMsg(sqli
2d9d0 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  te3*, int, const
2d9e0 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69   char*,...);.voi
2d9f0 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 73  d sqlite3Error(s
2da00 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f  qlite3*,int);.vo
2da10 69 64 20 73 71 6c 69 74 65 33 53 79 73 74 65 6d  id sqlite3System
2da20 45 72 72 6f 72 28 73 71 6c 69 74 65 33 2a 2c 69  Error(sqlite3*,i
2da30 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  nt);.void *sqlit
2da40 65 33 48 65 78 54 6f 42 6c 6f 62 28 73 71 6c 69  e3HexToBlob(sqli
2da50 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  te3*, const char
2da60 20 2a 7a 2c 20 69 6e 74 20 6e 29 3b 0a 75 38 20   *z, int n);.u8 
2da70 73 71 6c 69 74 65 33 48 65 78 54 6f 49 6e 74 28  sqlite3HexToInt(
2da80 69 6e 74 20 68 29 3b 0a 69 6e 74 20 73 71 6c 69  int h);.int sqli
2da90 74 65 33 54 77 6f 50 61 72 74 4e 61 6d 65 28 50  te3TwoPartName(P
2daa0 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c  arse *, Token *,
2dab0 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20   Token *, Token 
2dac0 2a 2a 29 3b 0a 0a 23 69 66 20 64 65 66 69 6e 65  **);..#if define
2dad0 64 28 53 51 4c 49 54 45 5f 4e 45 45 44 5f 45 52  d(SQLITE_NEED_ER
2dae0 52 5f 4e 41 4d 45 29 0a 63 6f 6e 73 74 20 63 68  R_NAME).const ch
2daf0 61 72 20 2a 73 71 6c 69 74 65 33 45 72 72 4e 61  ar *sqlite3ErrNa
2db00 6d 65 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a  me(int);.#endif.
2db10 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
2db20 4e 41 42 4c 45 5f 44 45 53 45 52 49 41 4c 49 5a  NABLE_DESERIALIZ
2db30 45 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d  E.int sqlite3Mem
2db40 64 62 49 6e 69 74 28 76 6f 69 64 29 3b 0a 23 65  dbInit(void);.#e
2db50 6e 64 69 66 0a 0a 63 6f 6e 73 74 20 63 68 61 72  ndif..const char
2db60 20 2a 73 71 6c 69 74 65 33 45 72 72 53 74 72 28   *sqlite3ErrStr(
2db70 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
2db80 33 52 65 61 64 53 63 68 65 6d 61 28 50 61 72 73  3ReadSchema(Pars
2db90 65 20 2a 70 50 61 72 73 65 29 3b 0a 43 6f 6c 6c  e *pParse);.Coll
2dba0 53 65 71 20 2a 73 71 6c 69 74 65 33 46 69 6e 64  Seq *sqlite3Find
2dbb0 43 6f 6c 6c 53 65 71 28 73 71 6c 69 74 65 33 2a  CollSeq(sqlite3*
2dbc0 2c 75 38 20 65 6e 63 2c 20 63 6f 6e 73 74 20 63  ,u8 enc, const c
2dbd0 68 61 72 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73  har*,int);.int s
2dbe0 71 6c 69 74 65 33 49 73 42 69 6e 61 72 79 28 63  qlite3IsBinary(c
2dbf0 6f 6e 73 74 20 43 6f 6c 6c 53 65 71 2a 29 3b 0a  onst CollSeq*);.
2dc00 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33  CollSeq *sqlite3
2dc10 4c 6f 63 61 74 65 43 6f 6c 6c 53 65 71 28 50 61  LocateCollSeq(Pa
2dc20 72 73 65 20 2a 70 50 61 72 73 65 2c 20 63 6f 6e  rse *pParse, con
2dc30 73 74 20 63 68 61 72 2a 7a 4e 61 6d 65 29 3b 0a  st char*zName);.
2dc40 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33  CollSeq *sqlite3
2dc50 45 78 70 72 43 6f 6c 6c 53 65 71 28 50 61 72 73  ExprCollSeq(Pars
2dc60 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20  e *pParse, Expr 
2dc70 2a 70 45 78 70 72 29 3b 0a 43 6f 6c 6c 53 65 71  *pExpr);.CollSeq
2dc80 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4e 4e 43   *sqlite3ExprNNC
2dc90 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70 50  ollSeq(Parse *pP
2dca0 61 72 73 65 2c 20 45 78 70 72 20 2a 70 45 78 70  arse, Expr *pExp
2dcb0 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  r);.int sqlite3E
2dcc0 78 70 72 43 6f 6c 6c 53 65 71 4d 61 74 63 68 28  xprCollSeqMatch(
2dcd0 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 45 78 70  Parse*,Expr*,Exp
2dce0 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  r*);.Expr *sqlit
2dcf0 65 33 45 78 70 72 41 64 64 43 6f 6c 6c 61 74 65  e3ExprAddCollate
2dd00 54 6f 6b 65 6e 28 50 61 72 73 65 20 2a 70 50 61  Token(Parse *pPa
2dd10 72 73 65 2c 20 45 78 70 72 2a 2c 20 63 6f 6e 73  rse, Expr*, cons
2dd20 74 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a  t Token*, int);.
2dd30 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
2dd40 72 41 64 64 43 6f 6c 6c 61 74 65 53 74 72 69 6e  rAddCollateStrin
2dd50 67 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 63  g(Parse*,Expr*,c
2dd60 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 45 78 70  onst char*);.Exp
2dd70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 53 6b  r *sqlite3ExprSk
2dd80 69 70 43 6f 6c 6c 61 74 65 28 45 78 70 72 2a 29  ipCollate(Expr*)
2dd90 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65  ;.int sqlite3Che
2dda0 63 6b 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20  ckCollSeq(Parse 
2ddb0 2a 2c 20 43 6f 6c 6c 53 65 71 20 2a 29 3b 0a 69  *, CollSeq *);.i
2ddc0 6e 74 20 73 71 6c 69 74 65 33 57 72 69 74 61 62  nt sqlite3Writab
2ddd0 6c 65 53 63 68 65 6d 61 28 73 71 6c 69 74 65 33  leSchema(sqlite3
2dde0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  *);.int sqlite3C
2ddf0 68 65 63 6b 4f 62 6a 65 63 74 4e 61 6d 65 28 50  heckObjectName(P
2de00 61 72 73 65 20 2a 2c 20 63 6f 6e 73 74 20 63 68  arse *, const ch
2de10 61 72 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ar *);.void sqli
2de20 74 65 33 56 64 62 65 53 65 74 43 68 61 6e 67 65  te3VdbeSetChange
2de30 73 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74  s(sqlite3 *, int
2de40 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 64  );.int sqlite3Ad
2de50 64 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29  dInt64(i64*,i64)
2de60 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 75 62  ;.int sqlite3Sub
2de70 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b  Int64(i64*,i64);
2de80 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 6c 49  .int sqlite3MulI
2de90 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a  nt64(i64*,i64);.
2dea0 69 6e 74 20 73 71 6c 69 74 65 33 41 62 73 49 6e  int sqlite3AbsIn
2deb0 74 33 32 28 69 6e 74 29 3b 0a 23 69 66 64 65 66  t32(int);.#ifdef
2dec0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 38   SQLITE_ENABLE_8
2ded0 5f 33 5f 4e 41 4d 45 53 0a 76 6f 69 64 20 73 71  _3_NAMES.void sq
2dee0 6c 69 74 65 33 46 69 6c 65 53 75 66 66 69 78 33  lite3FileSuffix3
2def0 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 68  (const char*, ch
2df00 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  ar*);.#else.# de
2df10 66 69 6e 65 20 73 71 6c 69 74 65 33 46 69 6c 65  fine sqlite3File
2df20 53 75 66 66 69 78 33 28 58 2c 59 29 0a 23 65 6e  Suffix3(X,Y).#en
2df30 64 69 66 0a 75 38 20 73 71 6c 69 74 65 33 47 65  dif.u8 sqlite3Ge
2df40 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73 74 20 63  tBoolean(const c
2df50 68 61 72 20 2a 7a 2c 75 38 29 3b 0a 0a 63 6f 6e  har *z,u8);..con
2df60 73 74 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  st void *sqlite3
2df70 56 61 6c 75 65 54 65 78 74 28 73 71 6c 69 74 65  ValueText(sqlite
2df80 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 69  3_value*, u8);.i
2df90 6e 74 20 73 71 6c 69 74 65 33 56 61 6c 75 65 42  nt sqlite3ValueB
2dfa0 79 74 65 73 28 73 71 6c 69 74 65 33 5f 76 61 6c  ytes(sqlite3_val
2dfb0 75 65 2a 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73  ue*, u8);.void s
2dfc0 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74 53 74  qlite3ValueSetSt
2dfd0 72 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  r(sqlite3_value*
2dfe0 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69  , int, const voi
2dff0 64 20 2a 2c 75 38 2c 0a 20 20 20 20 20 20 20 20  d *,u8,.        
2e000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e010 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b  void(*)(void*));
2e020 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c  .void sqlite3Val
2e030 75 65 53 65 74 4e 75 6c 6c 28 73 71 6c 69 74 65  ueSetNull(sqlite
2e040 33 5f 76 61 6c 75 65 2a 29 3b 0a 76 6f 69 64 20  3_value*);.void 
2e050 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65  sqlite3ValueFree
2e060 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29  (sqlite3_value*)
2e070 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
2e080 5f 55 4e 54 45 53 54 41 42 4c 45 0a 76 6f 69 64  _UNTESTABLE.void
2e090 20 73 71 6c 69 74 65 33 52 65 73 75 6c 74 49 6e   sqlite3ResultIn
2e0a0 74 52 65 61 6c 28 73 71 6c 69 74 65 33 5f 63 6f  tReal(sqlite3_co
2e0b0 6e 74 65 78 74 2a 29 3b 0a 23 65 6e 64 69 66 0a  ntext*);.#endif.
2e0c0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 73  sqlite3_value *s
2e0d0 71 6c 69 74 65 33 56 61 6c 75 65 4e 65 77 28 73  qlite3ValueNew(s
2e0e0 71 6c 69 74 65 33 20 2a 29 3b 0a 23 69 66 6e 64  qlite3 *);.#ifnd
2e0f0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  ef SQLITE_OMIT_U
2e100 54 46 31 36 0a 63 68 61 72 20 2a 73 71 6c 69 74  TF16.char *sqlit
2e110 65 33 55 74 66 31 36 74 6f 38 28 73 71 6c 69 74  e3Utf16to8(sqlit
2e120 65 33 20 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64  e3 *, const void
2e130 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 23 65 6e  *, int, u8);.#en
2e140 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  dif.int sqlite3V
2e150 61 6c 75 65 46 72 6f 6d 45 78 70 72 28 73 71 6c  alueFromExpr(sql
2e160 69 74 65 33 20 2a 2c 20 45 78 70 72 20 2a 2c 20  ite3 *, Expr *, 
2e170 75 38 2c 20 75 38 2c 20 73 71 6c 69 74 65 33 5f  u8, u8, sqlite3_
2e180 76 61 6c 75 65 20 2a 2a 29 3b 0a 76 6f 69 64 20  value **);.void 
2e190 73 71 6c 69 74 65 33 56 61 6c 75 65 41 70 70 6c  sqlite3ValueAppl
2e1a0 79 41 66 66 69 6e 69 74 79 28 73 71 6c 69 74 65  yAffinity(sqlite
2e1b0 33 5f 76 61 6c 75 65 20 2a 2c 20 75 38 2c 20 75  3_value *, u8, u
2e1c0 38 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  8);.#ifndef SQLI
2e1d0 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a  TE_AMALGAMATION.
2e1e0 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73  extern const uns
2e1f0 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74  igned char sqlit
2e200 65 33 4f 70 63 6f 64 65 50 72 6f 70 65 72 74 79  e3OpcodeProperty
2e210 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74  [];.extern const
2e220 20 63 68 61 72 20 73 71 6c 69 74 65 33 53 74 72   char sqlite3Str
2e230 42 49 4e 41 52 59 5b 5d 3b 0a 65 78 74 65 72 6e  BINARY[];.extern
2e240 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
2e250 63 68 61 72 20 73 71 6c 69 74 65 33 55 70 70 65  char sqlite3Uppe
2e260 72 54 6f 4c 6f 77 65 72 5b 5d 3b 0a 65 78 74 65  rToLower[];.exte
2e270 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  rn const unsigne
2e280 64 20 63 68 61 72 20 73 71 6c 69 74 65 33 43 74  d char sqlite3Ct
2e290 79 70 65 4d 61 70 5b 5d 3b 0a 65 78 74 65 72 6e  ypeMap[];.extern
2e2a0 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 73 71 6c   const Token sql
2e2b0 69 74 65 33 49 6e 74 54 6f 6b 65 6e 73 5b 5d 3b  ite3IntTokens[];
2e2c0 0a 65 78 74 65 72 6e 20 53 51 4c 49 54 45 5f 57  .extern SQLITE_W
2e2d0 53 44 20 73 74 72 75 63 74 20 53 71 6c 69 74 65  SD struct Sqlite
2e2e0 33 43 6f 6e 66 69 67 20 73 71 6c 69 74 65 33 43  3Config sqlite3C
2e2f0 6f 6e 66 69 67 3b 0a 65 78 74 65 72 6e 20 46 75  onfig;.extern Fu
2e300 6e 63 44 65 66 48 61 73 68 20 73 71 6c 69 74 65  ncDefHash sqlite
2e310 33 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e  3BuiltinFunction
2e320 73 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  s;.#ifndef SQLIT
2e330 45 5f 4f 4d 49 54 5f 57 53 44 0a 65 78 74 65 72  E_OMIT_WSD.exter
2e340 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 50 65 6e  n int sqlite3Pen
2e350 64 69 6e 67 42 79 74 65 3b 0a 23 65 6e 64 69 66  dingByte;.#endif
2e360 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 56  .#endif.#ifdef V
2e370 44 42 45 5f 50 52 4f 46 49 4c 45 0a 65 78 74 65  DBE_PROFILE.exte
2e380 72 6e 20 73 71 6c 69 74 65 33 5f 75 69 6e 74 36  rn sqlite3_uint6
2e390 34 20 73 71 6c 69 74 65 33 4e 50 72 6f 66 69 6c  4 sqlite3NProfil
2e3a0 65 43 6e 74 3b 0a 23 65 6e 64 69 66 0a 76 6f 69  eCnt;.#endif.voi
2e3b0 64 20 73 71 6c 69 74 65 33 52 6f 6f 74 50 61 67  d sqlite3RootPag
2e3c0 65 4d 6f 76 65 64 28 73 71 6c 69 74 65 33 2a 2c  eMoved(sqlite3*,
2e3d0 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
2e3e0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 69  .void sqlite3Rei
2e3f0 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 54 6f 6b  ndex(Parse*, Tok
2e400 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  en*, Token*);.vo
2e410 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 46  id sqlite3AlterF
2e420 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a  unctions(void);.
2e430 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65  void sqlite3Alte
2e440 72 52 65 6e 61 6d 65 54 61 62 6c 65 28 50 61 72  rRenameTable(Par
2e450 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54  se*, SrcList*, T
2e460 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
2e470 69 74 65 33 41 6c 74 65 72 52 65 6e 61 6d 65 43  ite3AlterRenameC
2e480 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20 53 72  olumn(Parse*, Sr
2e490 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  cList*, Token*, 
2e4a0 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
2e4b0 69 74 65 33 47 65 74 54 6f 6b 65 6e 28 63 6f 6e  ite3GetToken(con
2e4c0 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
2e4d0 20 2a 2c 20 69 6e 74 20 2a 29 3b 0a 76 6f 69 64   *, int *);.void
2e4e0 20 73 71 6c 69 74 65 33 4e 65 73 74 65 64 50 61   sqlite3NestedPa
2e4f0 72 73 65 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73  rse(Parse*, cons
2e500 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76  t char*, ...);.v
2e510 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 69 72  oid sqlite3Expir
2e520 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65  ePreparedStateme
2e530 6e 74 73 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  nts(sqlite3*, in
2e540 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2e550 43 6f 64 65 52 68 73 4f 66 49 4e 28 50 61 72 73  CodeRhsOfIN(Pars
2e560 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  e*, Expr*, int);
2e570 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 64 65  .int sqlite3Code
2e580 53 75 62 73 65 6c 65 63 74 28 50 61 72 73 65 2a  Subselect(Parse*
2e590 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
2e5a0 71 6c 69 74 65 33 53 65 6c 65 63 74 50 72 65 70  qlite3SelectPrep
2e5b0 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a  (Parse*, Select*
2e5c0 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b  , NameContext*);
2e5d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c  .void sqlite3Sel
2e5e0 65 63 74 57 72 6f 6e 67 4e 75 6d 54 65 72 6d 73  ectWrongNumTerms
2e5f0 45 72 72 6f 72 28 50 61 72 73 65 20 2a 70 50 61  Error(Parse *pPa
2e600 72 73 65 2c 20 53 65 6c 65 63 74 20 2a 70 29 3b  rse, Select *p);
2e610 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 74 63  .int sqlite3Matc
2e620 68 53 70 61 6e 4e 61 6d 65 28 63 6f 6e 73 74 20  hSpanName(const 
2e630 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
2e640 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  r*, const char*,
2e650 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69   const char*);.i
2e660 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76  nt sqlite3Resolv
2e670 65 45 78 70 72 4e 61 6d 65 73 28 4e 61 6d 65 43  eExprNames(NameC
2e680 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b  ontext*, Expr*);
2e690 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f  .int sqlite3Reso
2e6a0 6c 76 65 45 78 70 72 4c 69 73 74 4e 61 6d 65 73  lveExprListNames
2e6b0 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45  (NameContext*, E
2e6c0 78 70 72 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20  xprList*);.void 
2e6d0 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 53 65  sqlite3ResolveSe
2e6e0 6c 65 63 74 4e 61 6d 65 73 28 50 61 72 73 65 2a  lectNames(Parse*
2e6f0 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43  , Select*, NameC
2e700 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73 71  ontext*);.int sq
2e710 6c 69 74 65 33 52 65 73 6f 6c 76 65 53 65 6c 66  lite3ResolveSelf
2e720 52 65 66 65 72 65 6e 63 65 28 50 61 72 73 65 2a  Reference(Parse*
2e730 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 45 78 70 72  ,Table*,int,Expr
2e740 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e  *,ExprList*);.in
2e750 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65  t sqlite3Resolve
2e760 4f 72 64 65 72 47 72 6f 75 70 42 79 28 50 61 72  OrderGroupBy(Par
2e770 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78  se*, Select*, Ex
2e780 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63  prList*, const c
2e790 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
2e7a0 74 65 33 43 6f 6c 75 6d 6e 44 65 66 61 75 6c 74  te3ColumnDefault
2e7b0 28 56 64 62 65 20 2a 2c 20 54 61 62 6c 65 20 2a  (Vdbe *, Table *
2e7c0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
2e7d0 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 46 69  d sqlite3AlterFi
2e7e0 6e 69 73 68 41 64 64 43 6f 6c 75 6d 6e 28 50 61  nishAddColumn(Pa
2e7f0 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b  rse *, Token *);
2e800 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74  .void sqlite3Alt
2e810 65 72 42 65 67 69 6e 41 64 64 43 6f 6c 75 6d 6e  erBeginAddColumn
2e820 28 50 61 72 73 65 20 2a 2c 20 53 72 63 4c 69 73  (Parse *, SrcLis
2e830 74 20 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  t *);.void *sqli
2e840 74 65 33 52 65 6e 61 6d 65 54 6f 6b 65 6e 4d 61  te3RenameTokenMa
2e850 70 28 50 61 72 73 65 2a 2c 20 76 6f 69 64 2a 2c  p(Parse*, void*,
2e860 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73   Token*);.void s
2e870 71 6c 69 74 65 33 52 65 6e 61 6d 65 54 6f 6b 65  qlite3RenameToke
2e880 6e 52 65 6d 61 70 28 50 61 72 73 65 2a 2c 20 76  nRemap(Parse*, v
2e890 6f 69 64 20 2a 70 54 6f 2c 20 76 6f 69 64 20 2a  oid *pTo, void *
2e8a0 70 46 72 6f 6d 29 3b 0a 76 6f 69 64 20 73 71 6c  pFrom);.void sql
2e8b0 69 74 65 33 52 65 6e 61 6d 65 45 78 70 72 55 6e  ite3RenameExprUn
2e8c0 6d 61 70 28 50 61 72 73 65 2a 2c 20 45 78 70 72  map(Parse*, Expr
2e8d0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2e8e0 52 65 6e 61 6d 65 45 78 70 72 6c 69 73 74 55 6e  RenameExprlistUn
2e8f0 6d 61 70 28 50 61 72 73 65 2a 2c 20 45 78 70 72  map(Parse*, Expr
2e900 4c 69 73 74 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20  List*);.CollSeq 
2e910 2a 73 71 6c 69 74 65 33 47 65 74 43 6f 6c 6c 53  *sqlite3GetCollS
2e920 65 71 28 50 61 72 73 65 2a 2c 20 75 38 2c 20 43  eq(Parse*, u8, C
2e930 6f 6c 6c 53 65 71 20 2a 2c 20 63 6f 6e 73 74 20  ollSeq *, const 
2e940 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 73 71 6c  char*);.char sql
2e950 69 74 65 33 41 66 66 69 6e 69 74 79 54 79 70 65  ite3AffinityType
2e960 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 43 6f  (const char*, Co
2e970 6c 75 6d 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  lumn*);.void sql
2e980 69 74 65 33 41 6e 61 6c 79 7a 65 28 50 61 72 73  ite3Analyze(Pars
2e990 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  e*, Token*, Toke
2e9a0 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
2e9b0 49 6e 76 6f 6b 65 42 75 73 79 48 61 6e 64 6c 65  InvokeBusyHandle
2e9c0 72 28 42 75 73 79 48 61 6e 64 6c 65 72 2a 2c 20  r(BusyHandler*, 
2e9d0 73 71 6c 69 74 65 33 5f 66 69 6c 65 2a 29 3b 0a  sqlite3_file*);.
2e9e0 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64 44  int sqlite3FindD
2e9f0 62 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65  b(sqlite3*, Toke
2ea00 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
2ea10 46 69 6e 64 44 62 4e 61 6d 65 28 73 71 6c 69 74  FindDbName(sqlit
2ea20 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  e3 *, const char
2ea30 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
2ea40 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28 73 71 6c  AnalysisLoad(sql
2ea50 69 74 65 33 2a 2c 69 6e 74 20 69 44 42 29 3b 0a  ite3*,int iDB);.
2ea60 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65  void sqlite3Dele
2ea70 74 65 49 6e 64 65 78 53 61 6d 70 6c 65 73 28 73  teIndexSamples(s
2ea80 71 6c 69 74 65 33 2a 2c 49 6e 64 65 78 2a 29 3b  qlite3*,Index*);
2ea90 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 66  .void sqlite3Def
2eaa0 61 75 6c 74 52 6f 77 45 73 74 28 49 6e 64 65 78  aultRowEst(Index
2eab0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2eac0 52 65 67 69 73 74 65 72 4c 69 6b 65 46 75 6e 63  RegisterLikeFunc
2ead0 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 2c 20  tions(sqlite3*, 
2eae0 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
2eaf0 33 49 73 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 28  3IsLikeFunction(
2eb00 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69  sqlite3*,Expr*,i
2eb10 6e 74 2a 2c 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nt*,char*);.void
2eb20 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 43 6c   sqlite3SchemaCl
2eb30 65 61 72 28 76 6f 69 64 20 2a 29 3b 0a 53 63 68  ear(void *);.Sch
2eb40 65 6d 61 20 2a 73 71 6c 69 74 65 33 53 63 68 65  ema *sqlite3Sche
2eb50 6d 61 47 65 74 28 73 71 6c 69 74 65 33 20 2a 2c  maGet(sqlite3 *,
2eb60 20 42 74 72 65 65 20 2a 29 3b 0a 69 6e 74 20 73   Btree *);.int s
2eb70 71 6c 69 74 65 33 53 63 68 65 6d 61 54 6f 49 6e  qlite3SchemaToIn
2eb80 64 65 78 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  dex(sqlite3 *db,
2eb90 20 53 63 68 65 6d 61 20 2a 29 3b 0a 4b 65 79 49   Schema *);.KeyI
2eba0 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49  nfo *sqlite3KeyI
2ebb0 6e 66 6f 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33  nfoAlloc(sqlite3
2ebc0 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64  *,int,int);.void
2ebd0 20 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 55   sqlite3KeyInfoU
2ebe0 6e 72 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a  nref(KeyInfo*);.
2ebf0 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33  KeyInfo *sqlite3
2ec00 4b 65 79 49 6e 66 6f 52 65 66 28 4b 65 79 49 6e  KeyInfoRef(KeyIn
2ec10 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73  fo*);.KeyInfo *s
2ec20 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 4f 66 49  qlite3KeyInfoOfI
2ec30 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 49 6e 64  ndex(Parse*, Ind
2ec40 65 78 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73  ex*);.KeyInfo *s
2ec50 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 46 72 6f  qlite3KeyInfoFro
2ec60 6d 45 78 70 72 4c 69 73 74 28 50 61 72 73 65 2a  mExprList(Parse*
2ec70 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
2ec80 2c 20 69 6e 74 29 3b 0a 0a 23 69 66 64 65 66 20  , int);..#ifdef 
2ec90 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 69 6e 74  SQLITE_DEBUG.int
2eca0 20 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 49   sqlite3KeyInfoI
2ecb0 73 57 72 69 74 65 61 62 6c 65 28 4b 65 79 49 6e  sWriteable(KeyIn
2ecc0 66 6f 2a 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74  fo*);.#endif.int
2ecd0 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 46 75   sqlite3CreateFu
2ece0 6e 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f  nc(sqlite3 *, co
2ecf0 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2c  nst char *, int,
2ed00 20 69 6e 74 2c 20 76 6f 69 64 20 2a 2c 0a 20 20   int, void *,.  
2ed10 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33  void (*)(sqlite3
2ed20 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
2ed30 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c  lite3_value **),
2ed40 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69  .  void (*)(sqli
2ed50 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74  te3_context*,int
2ed60 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  ,sqlite3_value *
2ed70 2a 29 2c 20 0a 20 20 76 6f 69 64 20 28 2a 29 28  *), .  void (*)(
2ed80 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
2ed90 29 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71  ),.  void (*)(sq
2eda0 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 2c  lite3_context*),
2edb0 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69  .  void (*)(sqli
2edc0 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74  te3_context*,int
2edd0 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  ,sqlite3_value *
2ede0 2a 29 2c 20 0a 20 20 46 75 6e 63 44 65 73 74 72  *), .  FuncDestr
2edf0 75 63 74 6f 72 20 2a 70 44 65 73 74 72 75 63 74  uctor *pDestruct
2ee00 6f 72 0a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  or.);.void sqlit
2ee10 65 33 4e 6f 6f 70 44 65 73 74 72 75 63 74 6f 72  e3NoopDestructor
2ee20 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71  (void*);.void sq
2ee30 6c 69 74 65 33 4f 6f 6d 46 61 75 6c 74 28 73 71  lite3OomFault(sq
2ee40 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71  lite3*);.void sq
2ee50 6c 69 74 65 33 4f 6f 6d 43 6c 65 61 72 28 73 71  lite3OomClear(sq
2ee60 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c  lite3*);.int sql
2ee70 69 74 65 33 41 70 69 45 78 69 74 28 73 71 6c 69  ite3ApiExit(sqli
2ee80 74 65 33 20 2a 64 62 2c 20 69 6e 74 29 3b 0a 69  te3 *db, int);.i
2ee90 6e 74 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 65  nt sqlite3OpenTe
2eea0 6d 70 44 61 74 61 62 61 73 65 28 50 61 72 73 65  mpDatabase(Parse
2eeb0 20 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74   *);..void sqlit
2eec0 65 33 53 74 72 41 63 63 75 6d 49 6e 69 74 28 53  e3StrAccumInit(S
2eed0 74 72 41 63 63 75 6d 2a 2c 20 73 71 6c 69 74 65  trAccum*, sqlite
2eee0 33 2a 2c 20 63 68 61 72 2a 2c 20 69 6e 74 2c 20  3*, char*, int, 
2eef0 69 6e 74 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  int);.char *sqli
2ef00 74 65 33 53 74 72 41 63 63 75 6d 46 69 6e 69 73  te3StrAccumFinis
2ef10 68 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f  h(StrAccum*);.vo
2ef20 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  id sqlite3Select
2ef30 44 65 73 74 49 6e 69 74 28 53 65 6c 65 63 74 44  DestInit(SelectD
2ef40 65 73 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 45  est*,int,int);.E
2ef50 78 70 72 20 2a 73 71 6c 69 74 65 33 43 72 65 61  xpr *sqlite3Crea
2ef60 74 65 43 6f 6c 75 6d 6e 45 78 70 72 28 73 71 6c  teColumnExpr(sql
2ef70 69 74 65 33 20 2a 2c 20 53 72 63 4c 69 73 74 20  ite3 *, SrcList 
2ef80 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 76  *, int, int);..v
2ef90 6f 69 64 20 73 71 6c 69 74 65 33 42 61 63 6b 75  oid sqlite3Backu
2efa0 70 52 65 73 74 61 72 74 28 73 71 6c 69 74 65 33  pRestart(sqlite3
2efb0 5f 62 61 63 6b 75 70 20 2a 29 3b 0a 76 6f 69 64  _backup *);.void
2efc0 20 73 71 6c 69 74 65 33 42 61 63 6b 75 70 55 70   sqlite3BackupUp
2efd0 64 61 74 65 28 73 71 6c 69 74 65 33 5f 62 61 63  date(sqlite3_bac
2efe0 6b 75 70 20 2a 2c 20 50 67 6e 6f 2c 20 63 6f 6e  kup *, Pgno, con
2eff0 73 74 20 75 38 20 2a 29 3b 0a 0a 23 69 66 6e 64  st u8 *);..#ifnd
2f000 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53  ef SQLITE_OMIT_S
2f010 55 42 51 55 45 52 59 0a 69 6e 74 20 73 71 6c 69  UBQUERY.int sqli
2f020 74 65 33 45 78 70 72 43 68 65 63 6b 49 4e 28 50  te3ExprCheckIN(P
2f030 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 23  arse*, Expr*);.#
2f040 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
2f050 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b 49 4e  lite3ExprCheckIN
2f060 28 78 2c 79 29 20 53 51 4c 49 54 45 5f 4f 4b 0a  (x,y) SQLITE_OK.
2f070 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
2f080 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
2f090 54 33 5f 4f 52 5f 53 54 41 54 34 0a 76 6f 69 64  T3_OR_STAT4.void
2f0a0 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65 46   sqlite3AnalyzeF
2f0b0 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a  unctions(void);.
2f0c0 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74 34  int sqlite3Stat4
2f0d0 50 72 6f 62 65 53 65 74 56 61 6c 75 65 28 0a 20  ProbeSetValue(. 
2f0e0 20 20 20 50 61 72 73 65 2a 2c 49 6e 64 65 78 2a     Parse*,Index*
2f0f0 2c 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 2a  ,UnpackedRecord*
2f100 2a 2c 45 78 70 72 2a 2c 69 6e 74 2c 69 6e 74 2c  *,Expr*,int,int,
2f110 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  int*);.int sqlit
2f120 65 33 53 74 61 74 34 56 61 6c 75 65 46 72 6f 6d  e3Stat4ValueFrom
2f130 45 78 70 72 28 50 61 72 73 65 2a 2c 20 45 78 70  Expr(Parse*, Exp
2f140 72 2a 2c 20 75 38 2c 20 73 71 6c 69 74 65 33 5f  r*, u8, sqlite3_
2f150 76 61 6c 75 65 2a 2a 29 3b 0a 76 6f 69 64 20 73  value**);.void s
2f160 71 6c 69 74 65 33 53 74 61 74 34 50 72 6f 62 65  qlite3Stat4Probe
2f170 46 72 65 65 28 55 6e 70 61 63 6b 65 64 52 65 63  Free(UnpackedRec
2f180 6f 72 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ord*);.int sqlit
2f190 65 33 53 74 61 74 34 43 6f 6c 75 6d 6e 28 73 71  e3Stat4Column(sq
2f1a0 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 76 6f  lite3*, const vo
2f1b0 69 64 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 73  id*, int, int, s
2f1c0 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b  qlite3_value**);
2f1d0 0a 63 68 61 72 20 73 71 6c 69 74 65 33 49 6e 64  .char sqlite3Ind
2f1e0 65 78 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79  exColumnAffinity
2f1f0 28 73 71 6c 69 74 65 33 2a 2c 20 49 6e 64 65 78  (sqlite3*, Index
2f200 2a 2c 20 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a  *, int);.#endif.
2f210 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72  ./*.** The inter
2f220 66 61 63 65 20 74 6f 20 74 68 65 20 4c 45 4d 4f  face to the LEMO
2f230 4e 2d 67 65 6e 65 72 61 74 65 64 20 70 61 72 73  N-generated pars
2f240 65 72 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  er.*/.#ifndef SQ
2f250 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f  LITE_AMALGAMATIO
2f260 4e 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65  N.  void *sqlite
2f270 33 50 61 72 73 65 72 41 6c 6c 6f 63 28 76 6f 69  3ParserAlloc(voi
2f280 64 2a 28 2a 29 28 75 36 34 29 2c 20 50 61 72 73  d*(*)(u64), Pars
2f290 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  e*);.  void sqli
2f2a0 74 65 33 50 61 72 73 65 72 46 72 65 65 28 76 6f  te3ParserFree(vo
2f2b0 69 64 2a 2c 20 76 6f 69 64 28 2a 29 28 76 6f 69  id*, void(*)(voi
2f2c0 64 2a 29 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69  d*));.#endif.voi
2f2d0 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 28  d sqlite3Parser(
2f2e0 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65  void*, int, Toke
2f2f0 6e 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 50  n);.int sqlite3P
2f300 61 72 73 65 72 46 61 6c 6c 62 61 63 6b 28 69 6e  arserFallback(in
2f310 74 29 3b 0a 23 69 66 64 65 66 20 59 59 54 52 41  t);.#ifdef YYTRA
2f320 43 4b 4d 41 58 53 54 41 43 4b 44 45 50 54 48 0a  CKMAXSTACKDEPTH.
2f330 20 20 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72    int sqlite3Par
2f340 73 65 72 53 74 61 63 6b 50 65 61 6b 28 76 6f 69  serStackPeak(voi
2f350 64 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 76 6f 69  d*);.#endif..voi
2f360 64 20 73 71 6c 69 74 65 33 41 75 74 6f 4c 6f 61  d sqlite3AutoLoa
2f370 64 45 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69  dExtensions(sqli
2f380 74 65 33 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53  te3*);.#ifndef S
2f390 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f  QLITE_OMIT_LOAD_
2f3a0 45 58 54 45 4e 53 49 4f 4e 0a 20 20 76 6f 69 64  EXTENSION.  void
2f3b0 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74   sqlite3CloseExt
2f3c0 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a  ensions(sqlite3*
2f3d0 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
2f3e0 65 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78  e sqlite3CloseEx
2f3f0 74 65 6e 73 69 6f 6e 73 28 58 29 0a 23 65 6e 64  tensions(X).#end
2f400 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  if..#ifndef SQLI
2f410 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43  TE_OMIT_SHARED_C
2f420 41 43 48 45 0a 20 20 76 6f 69 64 20 73 71 6c 69  ACHE.  void sqli
2f430 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 50 61 72  te3TableLock(Par
2f440 73 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  se *, int, int, 
2f450 75 38 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  u8, const char *
2f460 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
2f470 6e 65 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c  ne sqlite3TableL
2f480 6f 63 6b 28 76 2c 77 2c 78 2c 79 2c 7a 29 0a 23  ock(v,w,x,y,z).#
2f490 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
2f4a0 4c 49 54 45 5f 54 45 53 54 0a 20 20 69 6e 74 20  LITE_TEST.  int 
2f4b0 73 71 6c 69 74 65 33 55 74 66 38 54 6f 38 28 75  sqlite3Utf8To8(u
2f4c0 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 29 3b 0a  nsigned char*);.
2f4d0 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
2f4e0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2f4f0 41 4c 54 41 42 4c 45 0a 23 20 20 64 65 66 69 6e  ALTABLE.#  defin
2f500 65 20 73 71 6c 69 74 65 33 56 74 61 62 43 6c 65  e sqlite3VtabCle
2f510 61 72 28 59 29 0a 23 20 20 64 65 66 69 6e 65 20  ar(Y).#  define 
2f520 73 71 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28  sqlite3VtabSync(
2f530 58 2c 59 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23  X,Y) SQLITE_OK.#
2f540 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
2f550 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28 58 29 0a  VtabRollback(X).
2f560 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
2f570 33 56 74 61 62 43 6f 6d 6d 69 74 28 58 29 0a 23  3VtabCommit(X).#
2f580 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
2f590 56 74 61 62 49 6e 53 79 6e 63 28 64 62 29 20 30  VtabInSync(db) 0
2f5a0 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
2f5b0 65 33 56 74 61 62 4c 6f 63 6b 28 58 29 0a 23 20  e3VtabLock(X).# 
2f5c0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
2f5d0 74 61 62 55 6e 6c 6f 63 6b 28 58 29 0a 23 20 20  tabUnlock(X).#  
2f5e0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
2f5f0 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 58 29 0a  abUnlockList(X).
2f600 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
2f610 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 58  3VtabSavepoint(X
2f620 2c 20 59 2c 20 5a 29 20 53 51 4c 49 54 45 5f 4f  , Y, Z) SQLITE_O
2f630 4b 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  K.#  define sqli
2f640 74 65 33 47 65 74 56 54 61 62 6c 65 28 58 2c 59  te3GetVTable(X,Y
2f650 29 20 20 28 28 56 54 61 62 6c 65 2a 29 30 29 0a  )  ((VTable*)0).
2f660 23 65 6c 73 65 0a 20 20 20 76 6f 69 64 20 73 71  #else.   void sq
2f670 6c 69 74 65 33 56 74 61 62 43 6c 65 61 72 28 73  lite3VtabClear(s
2f680 71 6c 69 74 65 33 20 2a 64 62 2c 20 54 61 62 6c  qlite3 *db, Tabl
2f690 65 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c  e*);.   void sql
2f6a0 69 74 65 33 56 74 61 62 44 69 73 63 6f 6e 6e 65  ite3VtabDisconne
2f6b0 63 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  ct(sqlite3 *db, 
2f6c0 54 61 62 6c 65 20 2a 70 29 3b 0a 20 20 20 69 6e  Table *p);.   in
2f6d0 74 20 73 71 6c 69 74 65 33 56 74 61 62 53 79 6e  t sqlite3VtabSyn
2f6e0 63 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 56  c(sqlite3 *db, V
2f6f0 64 62 65 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71  dbe*);.   int sq
2f700 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63  lite3VtabRollbac
2f710 6b 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a  k(sqlite3 *db);.
2f720 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74     int sqlite3Vt
2f730 61 62 43 6f 6d 6d 69 74 28 73 71 6c 69 74 65 33  abCommit(sqlite3
2f740 20 2a 64 62 29 3b 0a 20 20 20 76 6f 69 64 20 73   *db);.   void s
2f750 71 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 56  qlite3VtabLock(V
2f760 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69  Table *);.   voi
2f770 64 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c  d sqlite3VtabUnl
2f780 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20  ock(VTable *);. 
2f790 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74    void sqlite3Vt
2f7a0 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 73 71 6c  abUnlockList(sql
2f7b0 69 74 65 33 2a 29 3b 0a 20 20 20 69 6e 74 20 73  ite3*);.   int s
2f7c0 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f  qlite3VtabSavepo
2f7d0 69 6e 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 69  int(sqlite3 *, i
2f7e0 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 20 76 6f 69  nt, int);.   voi
2f7f0 64 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70  d sqlite3VtabImp
2f800 6f 72 74 45 72 72 6d 73 67 28 56 64 62 65 2a 2c  ortErrmsg(Vdbe*,
2f810 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 29 3b   sqlite3_vtab*);
2f820 0a 20 20 20 56 54 61 62 6c 65 20 2a 73 71 6c 69  .   VTable *sqli
2f830 74 65 33 47 65 74 56 54 61 62 6c 65 28 73 71 6c  te3GetVTable(sql
2f840 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a  ite3*, Table*);.
2f850 20 20 20 4d 6f 64 75 6c 65 20 2a 73 71 6c 69 74     Module *sqlit
2f860 65 33 56 74 61 62 43 72 65 61 74 65 4d 6f 64 75  e3VtabCreateModu
2f870 6c 65 28 0a 20 20 20 20 20 73 71 6c 69 74 65 33  le(.     sqlite3
2f880 2a 2c 0a 20 20 20 20 20 63 6f 6e 73 74 20 63 68  *,.     const ch
2f890 61 72 2a 2c 0a 20 20 20 20 20 63 6f 6e 73 74 20  ar*,.     const 
2f8a0 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 2a 2c  sqlite3_module*,
2f8b0 0a 20 20 20 20 20 76 6f 69 64 2a 2c 0a 20 20 20  .     void*,.   
2f8c0 20 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29    void(*)(void*)
2f8d0 0a 20 20 20 29 3b 0a 23 20 20 64 65 66 69 6e 65  .   );.#  define
2f8e0 20 73 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79   sqlite3VtabInSy
2f8f0 6e 63 28 64 62 29 20 28 28 64 62 29 2d 3e 6e 56  nc(db) ((db)->nV
2f900 54 72 61 6e 73 3e 30 20 26 26 20 28 64 62 29 2d  Trans>0 && (db)-
2f910 3e 61 56 54 72 61 6e 73 3d 3d 30 29 0a 23 65 6e  >aVTrans==0).#en
2f920 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  dif.int sqlite3V
2f930 74 61 62 45 70 6f 6e 79 6d 6f 75 73 54 61 62 6c  tabEponymousTabl
2f940 65 49 6e 69 74 28 50 61 72 73 65 2a 2c 4d 6f 64  eInit(Parse*,Mod
2f950 75 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ule*);.void sqli
2f960 74 65 33 56 74 61 62 45 70 6f 6e 79 6d 6f 75 73  te3VtabEponymous
2f970 54 61 62 6c 65 43 6c 65 61 72 28 73 71 6c 69 74  TableClear(sqlit
2f980 65 33 2a 2c 4d 6f 64 75 6c 65 2a 29 3b 0a 76 6f  e3*,Module*);.vo
2f990 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 4d 61  id sqlite3VtabMa
2f9a0 6b 65 57 72 69 74 61 62 6c 65 28 50 61 72 73 65  keWritable(Parse
2f9b0 2a 2c 54 61 62 6c 65 2a 29 3b 0a 76 6f 69 64 20  *,Table*);.void 
2f9c0 73 71 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e  sqlite3VtabBegin
2f9d0 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54 6f  Parse(Parse*, To
2f9e0 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  ken*, Token*, To
2f9f0 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  ken*, int);.void
2fa00 20 73 71 6c 69 74 65 33 56 74 61 62 46 69 6e 69   sqlite3VtabFini
2fa10 73 68 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20  shParse(Parse*, 
2fa20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
2fa30 6c 69 74 65 33 56 74 61 62 41 72 67 49 6e 69 74  lite3VtabArgInit
2fa40 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
2fa50 71 6c 69 74 65 33 56 74 61 62 41 72 67 45 78 74  qlite3VtabArgExt
2fa60 65 6e 64 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  end(Parse*, Toke
2fa70 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
2fa80 56 74 61 62 43 61 6c 6c 43 72 65 61 74 65 28 73  VtabCallCreate(s
2fa90 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f  qlite3*, int, co
2faa0 6e 73 74 20 63 68 61 72 20 2a 2c 20 63 68 61 72  nst char *, char
2fab0 20 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65   **);.int sqlite
2fac0 33 56 74 61 62 43 61 6c 6c 43 6f 6e 6e 65 63 74  3VtabCallConnect
2fad0 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29  (Parse*, Table*)
2fae0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61  ;.int sqlite3Vta
2faf0 62 43 61 6c 6c 44 65 73 74 72 6f 79 28 73 71 6c  bCallDestroy(sql
2fb00 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73  ite3*, int, cons
2fb10 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73  t char *);.int s
2fb20 71 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e 28  qlite3VtabBegin(
2fb30 73 71 6c 69 74 65 33 20 2a 2c 20 56 54 61 62 6c  sqlite3 *, VTabl
2fb40 65 20 2a 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73  e *);.FuncDef *s
2fb50 71 6c 69 74 65 33 56 74 61 62 4f 76 65 72 6c 6f  qlite3VtabOverlo
2fb60 61 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74  adFunction(sqlit
2fb70 65 33 20 2a 2c 46 75 6e 63 44 65 66 2a 2c 20 69  e3 *,FuncDef*, i
2fb80 6e 74 20 6e 41 72 67 2c 20 45 78 70 72 2a 29 3b  nt nArg, Expr*);
2fb90 0a 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73  .sqlite3_int64 s
2fba0 71 6c 69 74 65 33 53 74 6d 74 43 75 72 72 65 6e  qlite3StmtCurren
2fbb0 74 54 69 6d 65 28 73 71 6c 69 74 65 33 5f 63 6f  tTime(sqlite3_co
2fbc0 6e 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  ntext*);.int sql
2fbd0 69 74 65 33 56 64 62 65 50 61 72 61 6d 65 74 65  ite3VdbeParamete
2fbe0 72 49 6e 64 65 78 28 56 64 62 65 2a 2c 20 63 6f  rIndex(Vdbe*, co
2fbf0 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b  nst char*, int);
2fc00 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 72 61 6e  .int sqlite3Tran
2fc10 73 66 65 72 42 69 6e 64 69 6e 67 73 28 73 71 6c  sferBindings(sql
2fc20 69 74 65 33 5f 73 74 6d 74 20 2a 2c 20 73 71 6c  ite3_stmt *, sql
2fc30 69 74 65 33 5f 73 74 6d 74 20 2a 29 3b 0a 76 6f  ite3_stmt *);.vo
2fc40 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72  id sqlite3Parser
2fc50 52 65 73 65 74 28 50 61 72 73 65 2a 29 3b 0a 23  Reset(Parse*);.#
2fc60 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
2fc70 42 4c 45 5f 4e 4f 52 4d 41 4c 49 5a 45 0a 63 68  BLE_NORMALIZE.ch
2fc80 61 72 20 2a 73 71 6c 69 74 65 33 4e 6f 72 6d 61  ar *sqlite3Norma
2fc90 6c 69 7a 65 28 56 64 62 65 2a 2c 20 63 6f 6e 73  lize(Vdbe*, cons
2fca0 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66  t char*);.#endif
2fcb0 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 70 72  .int sqlite3Repr
2fcc0 65 70 61 72 65 28 56 64 62 65 2a 29 3b 0a 76 6f  epare(Vdbe*);.vo
2fcd0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  id sqlite3ExprLi
2fce0 73 74 43 68 65 63 6b 4c 65 6e 67 74 68 28 50 61  stCheckLength(Pa
2fcf0 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  rse*, ExprList*,
2fd00 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 43   const char*);.C
2fd10 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 42  ollSeq *sqlite3B
2fd20 69 6e 61 72 79 43 6f 6d 70 61 72 65 43 6f 6c 6c  inaryCompareColl
2fd30 53 65 71 28 50 61 72 73 65 20 2a 2c 20 45 78 70  Seq(Parse *, Exp
2fd40 72 20 2a 2c 20 45 78 70 72 20 2a 29 3b 0a 69 6e  r *, Expr *);.in
2fd50 74 20 73 71 6c 69 74 65 33 54 65 6d 70 49 6e 4d  t sqlite3TempInM
2fd60 65 6d 6f 72 79 28 63 6f 6e 73 74 20 73 71 6c 69  emory(const sqli
2fd70 74 65 33 2a 29 3b 0a 63 6f 6e 73 74 20 63 68 61  te3*);.const cha
2fd80 72 20 2a 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  r *sqlite3Journa
2fd90 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e 74 29 3b 0a  lModename(int);.
2fda0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2fdb0 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20 73 71  MIT_WAL.  int sq
2fdc0 6c 69 74 65 33 43 68 65 63 6b 70 6f 69 6e 74 28  lite3Checkpoint(
2fdd0 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69  sqlite3*, int, i
2fde0 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b  nt, int*, int*);
2fdf0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 57 61  .  int sqlite3Wa
2fe00 6c 44 65 66 61 75 6c 74 48 6f 6f 6b 28 76 6f 69  lDefaultHook(voi
2fe10 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  d*,sqlite3*,cons
2fe20 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 23 65  t char*,int);.#e
2fe30 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
2fe40 49 54 45 5f 4f 4d 49 54 5f 43 54 45 0a 20 20 57  ITE_OMIT_CTE.  W
2fe50 69 74 68 20 2a 73 71 6c 69 74 65 33 57 69 74 68  ith *sqlite3With
2fe60 41 64 64 28 50 61 72 73 65 2a 2c 57 69 74 68 2a  Add(Parse*,With*
2fe70 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74  ,Token*,ExprList
2fe80 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 20 20 76 6f  *,Select*);.  vo
2fe90 69 64 20 73 71 6c 69 74 65 33 57 69 74 68 44 65  id sqlite3WithDe
2fea0 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 57 69  lete(sqlite3*,Wi
2feb0 74 68 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  th*);.  void sql
2fec0 69 74 65 33 57 69 74 68 50 75 73 68 28 50 61 72  ite3WithPush(Par
2fed0 73 65 2a 2c 20 57 69 74 68 2a 2c 20 75 38 29 3b  se*, With*, u8);
2fee0 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 73  .#else.#define s
2fef0 71 6c 69 74 65 33 57 69 74 68 50 75 73 68 28 78  qlite3WithPush(x
2ff00 2c 79 2c 7a 29 0a 23 64 65 66 69 6e 65 20 73 71  ,y,z).#define sq
2ff10 6c 69 74 65 33 57 69 74 68 44 65 6c 65 74 65 28  lite3WithDelete(
2ff20 78 2c 79 29 0a 23 65 6e 64 69 66 0a 23 69 66 6e  x,y).#endif.#ifn
2ff30 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2ff40 55 50 53 45 52 54 0a 20 20 55 70 73 65 72 74 20  UPSERT.  Upsert 
2ff50 2a 73 71 6c 69 74 65 33 55 70 73 65 72 74 4e 65  *sqlite3UpsertNe
2ff60 77 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 4c  w(sqlite3*,ExprL
2ff70 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c  ist*,Expr*,ExprL
2ff80 69 73 74 2a 2c 45 78 70 72 2a 29 3b 0a 20 20 76  ist*,Expr*);.  v
2ff90 6f 69 64 20 73 71 6c 69 74 65 33 55 70 73 65 72  oid sqlite3Upser
2ffa0 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a  tDelete(sqlite3*
2ffb0 2c 55 70 73 65 72 74 2a 29 3b 0a 20 20 55 70 73  ,Upsert*);.  Ups
2ffc0 65 72 74 20 2a 73 71 6c 69 74 65 33 55 70 73 65  ert *sqlite3Upse
2ffd0 72 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 55  rtDup(sqlite3*,U
2ffe0 70 73 65 72 74 2a 29 3b 0a 20 20 69 6e 74 20 73  psert*);.  int s
2fff0 71 6c 69 74 65 33 55 70 73 65 72 74 41 6e 61 6c  qlite3UpsertAnal
30000 79 7a 65 54 61 72 67 65 74 28 50 61 72 73 65 2a  yzeTarget(Parse*
30010 2c 53 72 63 4c 69 73 74 2a 2c 55 70 73 65 72 74  ,SrcList*,Upsert
30020 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
30030 65 33 55 70 73 65 72 74 44 6f 55 70 64 61 74 65  e3UpsertDoUpdate
30040 28 50 61 72 73 65 2a 2c 55 70 73 65 72 74 2a 2c  (Parse*,Upsert*,
30050 54 61 62 6c 65 2a 2c 49 6e 64 65 78 2a 2c 69 6e  Table*,Index*,in
30060 74 29 3b 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e  t);.#else.#defin
30070 65 20 73 71 6c 69 74 65 33 55 70 73 65 72 74 4e  e sqlite3UpsertN
30080 65 77 28 76 2c 77 2c 78 2c 79 2c 7a 29 20 28 28  ew(v,w,x,y,z) ((
30090 55 70 73 65 72 74 2a 29 30 29 0a 23 64 65 66 69  Upsert*)0).#defi
300a0 6e 65 20 73 71 6c 69 74 65 33 55 70 73 65 72 74  ne sqlite3Upsert
300b0 44 65 6c 65 74 65 28 78 2c 79 29 0a 23 64 65 66  Delete(x,y).#def
300c0 69 6e 65 20 73 71 6c 69 74 65 33 55 70 73 65 72  ine sqlite3Upser
300d0 74 44 75 70 28 78 2c 79 29 20 20 20 20 20 20 20  tDup(x,y)       
300e0 28 28 55 70 73 65 72 74 2a 29 30 29 0a 23 65 6e  ((Upsert*)0).#en
300f0 64 69 66 0a 0a 0a 2f 2a 20 44 65 63 6c 61 72 61  dif.../* Declara
30100 74 69 6f 6e 73 20 66 6f 72 20 66 75 6e 63 74 69  tions for functi
30110 6f 6e 73 20 69 6e 20 66 6b 65 79 2e 63 2e 20 41  ons in fkey.c. A
30120 6c 6c 20 6f 66 20 74 68 65 73 65 20 61 72 65 20  ll of these are 
30130 72 65 70 6c 61 63 65 64 20 62 79 0a 2a 2a 20 6e  replaced by.** n
30140 6f 2d 6f 70 20 6d 61 63 72 6f 73 20 69 66 20 4f  o-op macros if O
30150 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20  MIT_FOREIGN_KEY 
30160 69 73 20 64 65 66 69 6e 65 64 2e 20 49 6e 20 74  is defined. In t
30170 68 69 73 20 63 61 73 65 20 6e 6f 20 66 6f 72 65  his case no fore
30180 69 67 6e 0a 2a 2a 20 6b 65 79 20 66 75 6e 63 74  ign.** key funct
30190 69 6f 6e 61 6c 69 74 79 20 69 73 20 61 76 61 69  ionality is avai
301a0 6c 61 62 6c 65 2e 20 49 66 20 4f 4d 49 54 5f 54  lable. If OMIT_T
301b0 52 49 47 47 45 52 20 69 73 20 64 65 66 69 6e 65  RIGGER is define
301c0 64 20 62 75 74 0a 2a 2a 20 4f 4d 49 54 5f 46 4f  d but.** OMIT_FO
301d0 52 45 49 47 4e 5f 4b 45 59 20 69 73 20 6e 6f 74  REIGN_KEY is not
301e0 2c 20 6f 6e 6c 79 20 73 6f 6d 65 20 6f 66 20 74  , only some of t
301f0 68 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65  he functions are
30200 20 6e 6f 2d 6f 70 65 64 2e 20 49 6e 0a 2a 2a 20   no-oped. In.** 
30210 74 68 69 73 20 63 61 73 65 20 66 6f 72 65 69 67  this case foreig
30220 6e 20 6b 65 79 73 20 61 72 65 20 70 61 72 73 65  n keys are parse
30230 64 2c 20 62 75 74 20 6e 6f 20 6f 74 68 65 72 20  d, but no other 
30240 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73  functionality is
30250 0a 2a 2a 20 70 72 6f 76 69 64 65 64 20 28 65 6e  .** provided (en
30260 66 6f 72 63 65 6d 65 6e 74 20 6f 66 20 46 4b 20  forcement of FK 
30270 63 6f 6e 73 74 72 61 69 6e 74 73 20 72 65 71 75  constraints requ
30280 69 72 65 73 20 74 68 65 20 74 72 69 67 67 65 72  ires the trigger
30290 73 20 73 75 62 2d 73 79 73 74 65 6d 29 2e 0a 2a  s sub-system)..*
302a0 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  /.#if !defined(S
302b0 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
302c0 47 4e 5f 4b 45 59 29 20 26 26 20 21 64 65 66 69  GN_KEY) && !defi
302d0 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
302e0 54 52 49 47 47 45 52 29 0a 20 20 76 6f 69 64 20  TRIGGER).  void 
302f0 73 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 50  sqlite3FkCheck(P
30300 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
30310 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69  nt, int, int*, i
30320 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  nt);.  void sqli
30330 74 65 33 46 6b 44 72 6f 70 54 61 62 6c 65 28 50  te3FkDropTable(P
30340 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 20 2a  arse*, SrcList *
30350 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 76 6f 69  , Table*);.  voi
30360 64 20 73 71 6c 69 74 65 33 46 6b 41 63 74 69 6f  d sqlite3FkActio
30370 6e 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  ns(Parse*, Table
30380 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e  *, ExprList*, in
30390 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20  t, int*, int);. 
303a0 20 69 6e 74 20 73 71 6c 69 74 65 33 46 6b 52 65   int sqlite3FkRe
303b0 71 75 69 72 65 64 28 50 61 72 73 65 2a 2c 20 54  quired(Parse*, T
303c0 61 62 6c 65 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74  able*, int*, int
303d0 29 3b 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33  );.  u32 sqlite3
303e0 46 6b 4f 6c 64 6d 61 73 6b 28 50 61 72 73 65 2a  FkOldmask(Parse*
303f0 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 46 4b 65  , Table*);.  FKe
30400 79 20 2a 73 71 6c 69 74 65 33 46 6b 52 65 66 65  y *sqlite3FkRefe
30410 72 65 6e 63 65 73 28 54 61 62 6c 65 20 2a 29 3b  rences(Table *);
30420 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
30430 20 73 71 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e   sqlite3FkAction
30440 73 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20  s(a,b,c,d,e,f). 
30450 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
30460 46 6b 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c  FkCheck(a,b,c,d,
30470 65 2c 66 29 0a 20 20 23 64 65 66 69 6e 65 20 73  e,f).  #define s
30480 71 6c 69 74 65 33 46 6b 44 72 6f 70 54 61 62 6c  qlite3FkDropTabl
30490 65 28 61 2c 62 2c 63 29 0a 20 20 23 64 65 66 69  e(a,b,c).  #defi
304a0 6e 65 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d  ne sqlite3FkOldm
304b0 61 73 6b 28 61 2c 62 29 20 20 20 20 20 20 20 20  ask(a,b)        
304c0 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c   0.  #define sql
304d0 69 74 65 33 46 6b 52 65 71 75 69 72 65 64 28 61  ite3FkRequired(a
304e0 2c 62 2c 63 2c 64 29 20 20 20 20 30 0a 20 20 23  ,b,c,d)    0.  #
304f0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
30500 52 65 66 65 72 65 6e 63 65 73 28 61 29 20 20 20  References(a)   
30510 20 20 20 20 20 30 0a 23 65 6e 64 69 66 0a 23 69       0.#endif.#i
30520 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
30530 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 20 20  T_FOREIGN_KEY.  
30540 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 44 65  void sqlite3FkDe
30550 6c 65 74 65 28 73 71 6c 69 74 65 33 20 2a 2c 20  lete(sqlite3 *, 
30560 54 61 62 6c 65 2a 29 3b 0a 20 20 69 6e 74 20 73  Table*);.  int s
30570 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e  qlite3FkLocateIn
30580 64 65 78 28 50 61 72 73 65 2a 2c 54 61 62 6c 65  dex(Parse*,Table
30590 2a 2c 46 4b 65 79 2a 2c 49 6e 64 65 78 2a 2a 2c  *,FKey*,Index**,
305a0 69 6e 74 2a 2a 29 3b 0a 23 65 6c 73 65 0a 20 20  int**);.#else.  
305b0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
305c0 6b 44 65 6c 65 74 65 28 61 2c 62 29 0a 20 20 23  kDelete(a,b).  #
305d0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
305e0 4c 6f 63 61 74 65 49 6e 64 65 78 28 61 2c 62 2c  LocateIndex(a,b,
305f0 63 2c 64 2c 65 29 0a 23 65 6e 64 69 66 0a 0a 0a  c,d,e).#endif...
30600 2f 2a 0a 2a 2a 20 41 76 61 69 6c 61 62 6c 65 20  /*.** Available 
30610 66 61 75 6c 74 20 69 6e 6a 65 63 74 6f 72 73 2e  fault injectors.
30620 20 20 53 68 6f 75 6c 64 20 62 65 20 6e 75 6d 62    Should be numb
30630 65 72 65 64 20 62 65 67 69 6e 6e 69 6e 67 20 77  ered beginning w
30640 69 74 68 20 30 2e 0a 2a 2f 0a 23 64 65 66 69 6e  ith 0..*/.#defin
30650 65 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e  e SQLITE_FAULTIN
30660 4a 45 43 54 4f 52 5f 4d 41 4c 4c 4f 43 20 20 20  JECTOR_MALLOC   
30670 20 20 30 0a 23 64 65 66 69 6e 65 20 53 51 4c 49    0.#define SQLI
30680 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52  TE_FAULTINJECTOR
30690 5f 43 4f 55 4e 54 20 20 20 20 20 20 31 0a 0a 2f  _COUNT      1../
306a0 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61  *.** The interfa
306b0 63 65 20 74 6f 20 74 68 65 20 63 6f 64 65 20 69  ce to the code i
306c0 6e 20 66 61 75 6c 74 2e 63 20 75 73 65 64 20 66  n fault.c used f
306d0 6f 72 20 69 64 65 6e 74 69 66 79 69 6e 67 20 22  or identifying "
306e0 62 65 6e 69 67 6e 22 0a 2a 2a 20 6d 61 6c 6c 6f  benign".** mallo
306f0 63 20 66 61 69 6c 75 72 65 73 2e 20 54 68 69 73  c failures. This
30700 20 69 73 20 6f 6e 6c 79 20 70 72 65 73 65 6e 74   is only present
30710 20 69 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53   if SQLITE_UNTES
30720 54 41 42 4c 45 0a 2a 2a 20 69 73 20 6e 6f 74 20  TABLE.** is not 
30730 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 6e  defined..*/.#ifn
30740 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53  def SQLITE_UNTES
30750 54 41 42 4c 45 0a 20 20 76 6f 69 64 20 73 71 6c  TABLE.  void sql
30760 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d  ite3BeginBenignM
30770 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 20 20 76  alloc(void);.  v
30780 6f 69 64 20 73 71 6c 69 74 65 33 45 6e 64 42 65  oid sqlite3EndBe
30790 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29  nignMalloc(void)
307a0 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
307b0 65 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65  e sqlite3BeginBe
307c0 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 20 20 23  nignMalloc().  #
307d0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 6e  define sqlite3En
307e0 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a  dBenignMalloc().
307f0 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c  #endif../*.** Al
30800 6c 6f 77 65 64 20 72 65 74 75 72 6e 20 76 61 6c  lowed return val
30810 75 65 73 20 66 72 6f 6d 20 73 71 6c 69 74 65 33  ues from sqlite3
30820 46 69 6e 64 49 6e 49 6e 64 65 78 28 29 0a 2a 2f  FindInIndex().*/
30830 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
30840 58 5f 52 4f 57 49 44 20 20 20 20 20 20 20 20 31  X_ROWID        1
30850 20 20 20 2f 2a 20 53 65 61 72 63 68 20 74 68 65     /* Search the
30860 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20 74 61   rowid of the ta
30870 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  ble */.#define I
30880 4e 5f 49 4e 44 45 58 5f 45 50 48 20 20 20 20 20  N_INDEX_EPH     
30890 20 20 20 20 20 32 20 20 20 2f 2a 20 53 65 61 72       2   /* Sear
308a0 63 68 20 61 6e 20 65 70 68 65 6d 65 72 61 6c 20  ch an ephemeral 
308b0 62 2d 74 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e  b-tree */.#defin
308c0 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58  e IN_INDEX_INDEX
308d0 5f 41 53 43 20 20 20 20 33 20 20 20 2f 2a 20 45  _ASC    3   /* E
308e0 78 69 73 74 69 6e 67 20 69 6e 64 65 78 20 41 53  xisting index AS
308f0 43 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69  CENDING */.#defi
30900 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45  ne IN_INDEX_INDE
30910 58 5f 44 45 53 43 20 20 20 34 20 20 20 2f 2a 20  X_DESC   4   /* 
30920 45 78 69 73 74 69 6e 67 20 69 6e 64 65 78 20 44  Existing index D
30930 45 53 43 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65  ESCENDING */.#de
30940 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f  fine IN_INDEX_NO
30950 4f 50 20 20 20 20 20 20 20 20 20 35 20 20 20 2f  OP         5   /
30960 2a 20 4e 6f 20 74 61 62 6c 65 20 61 76 61 69 6c  * No table avail
30970 61 62 6c 65 2e 20 55 73 65 20 63 6f 6d 70 61 72  able. Use compar
30980 69 73 6f 6e 73 20 2a 2f 0a 2f 2a 0a 2a 2a 20 41  isons */./*.** A
30990 6c 6c 6f 77 65 64 20 66 6c 61 67 73 20 66 6f 72  llowed flags for
309a0 20 74 68 65 20 33 72 64 20 70 61 72 61 6d 65 74   the 3rd paramet
309b0 65 72 20 74 6f 20 73 71 6c 69 74 65 33 46 69 6e  er to sqlite3Fin
309c0 64 49 6e 49 6e 64 65 78 28 29 2e 0a 2a 2f 0a 23  dInIndex()..*/.#
309d0 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
309e0 4e 4f 4f 50 5f 4f 4b 20 20 20 20 20 30 78 30 30  NOOP_OK     0x00
309f0 30 31 20 20 2f 2a 20 4f 4b 20 74 6f 20 72 65 74  01  /* OK to ret
30a00 75 72 6e 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f  urn IN_INDEX_NOO
30a10 50 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f  P */.#define IN_
30a20 49 4e 44 45 58 5f 4d 45 4d 42 45 52 53 48 49 50  INDEX_MEMBERSHIP
30a30 20 20 30 78 30 30 30 32 20 20 2f 2a 20 49 4e 20    0x0002  /* IN 
30a40 6f 70 65 72 61 74 6f 72 20 75 73 65 64 20 66 6f  operator used fo
30a50 72 20 6d 65 6d 62 65 72 73 68 69 70 20 74 65 73  r membership tes
30a60 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f  t */.#define IN_
30a70 49 4e 44 45 58 5f 4c 4f 4f 50 20 20 20 20 20 20  INDEX_LOOP      
30a80 20 20 30 78 30 30 30 34 20 20 2f 2a 20 49 4e 20    0x0004  /* IN 
30a90 6f 70 65 72 61 74 6f 72 20 75 73 65 64 20 61 73  operator used as
30aa0 20 61 20 6c 6f 6f 70 20 2a 2f 0a 69 6e 74 20 73   a loop */.int s
30ab0 71 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65  qlite3FindInInde
30ac0 78 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20  x(Parse *, Expr 
30ad0 2a 2c 20 75 33 32 2c 20 69 6e 74 2a 2c 20 69 6e  *, u32, int*, in
30ae0 74 2a 2c 20 69 6e 74 2a 29 3b 0a 0a 69 6e 74 20  t*, int*);..int 
30af0 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4f 70  sqlite3JournalOp
30b00 65 6e 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a  en(sqlite3_vfs *
30b10 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  , const char *, 
30b20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 2c 20  sqlite3_file *, 
30b30 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  int, int);.int s
30b40 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69 7a  qlite3JournalSiz
30b50 65 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 29  e(sqlite3_vfs *)
30b60 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ;.#if defined(SQ
30b70 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 54 4f 4d  LITE_ENABLE_ATOM
30b80 49 43 5f 57 52 49 54 45 29 20 5c 0a 20 7c 7c 20  IC_WRITE) \. || 
30b90 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
30ba0 4e 41 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f 4d  NABLE_BATCH_ATOM
30bb0 49 43 5f 57 52 49 54 45 29 0a 20 20 69 6e 74 20  IC_WRITE).  int 
30bc0 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 43 72  sqlite3JournalCr
30bd0 65 61 74 65 28 73 71 6c 69 74 65 33 5f 66 69 6c  eate(sqlite3_fil
30be0 65 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e  e *);.#endif..in
30bf0 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c  t sqlite3Journal
30c00 49 73 49 6e 4d 65 6d 6f 72 79 28 73 71 6c 69 74  IsInMemory(sqlit
30c10 65 33 5f 66 69 6c 65 20 2a 70 29 3b 0a 76 6f 69  e3_file *p);.voi
30c20 64 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72  d sqlite3MemJour
30c30 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f  nalOpen(sqlite3_
30c40 66 69 6c 65 20 2a 29 3b 0a 0a 76 6f 69 64 20 73  file *);..void s
30c50 71 6c 69 74 65 33 45 78 70 72 53 65 74 48 65 69  qlite3ExprSetHei
30c60 67 68 74 41 6e 64 46 6c 61 67 73 28 50 61 72 73  ghtAndFlags(Pars
30c70 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20  e *pParse, Expr 
30c80 2a 70 29 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f  *p);.#if SQLITE_
30c90 4d 41 58 5f 45 58 50 52 5f 44 45 50 54 48 3e 30  MAX_EXPR_DEPTH>0
30ca0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 53 65  .  int sqlite3Se
30cb0 6c 65 63 74 45 78 70 72 48 65 69 67 68 74 28 53  lectExprHeight(S
30cc0 65 6c 65 63 74 20 2a 29 3b 0a 20 20 69 6e 74 20  elect *);.  int 
30cd0 73 71 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b  sqlite3ExprCheck
30ce0 48 65 69 67 68 74 28 50 61 72 73 65 2a 2c 20 69  Height(Parse*, i
30cf0 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65  nt);.#else.  #de
30d00 66 69 6e 65 20 73 71 6c 69 74 65 33 53 65 6c 65  fine sqlite3Sele
30d10 63 74 45 78 70 72 48 65 69 67 68 74 28 78 29 20  ctExprHeight(x) 
30d20 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  0.  #define sqli
30d30 74 65 33 45 78 70 72 43 68 65 63 6b 48 65 69 67  te3ExprCheckHeig
30d40 68 74 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a  ht(x,y).#endif..
30d50 75 33 32 20 73 71 6c 69 74 65 33 47 65 74 34 62  u32 sqlite3Get4b
30d60 79 74 65 28 63 6f 6e 73 74 20 75 38 2a 29 3b 0a  yte(const u8*);.
30d70 76 6f 69 64 20 73 71 6c 69 74 65 33 50 75 74 34  void sqlite3Put4
30d80 62 79 74 65 28 75 38 2a 2c 20 75 33 32 29 3b 0a  byte(u8*, u32);.
30d90 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
30da0 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54  NABLE_UNLOCK_NOT
30db0 49 46 59 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  IFY.  void sqlit
30dc0 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63  e3ConnectionBloc
30dd0 6b 65 64 28 73 71 6c 69 74 65 33 20 2a 2c 20 73  ked(sqlite3 *, s
30de0 71 6c 69 74 65 33 20 2a 29 3b 0a 20 20 76 6f 69  qlite3 *);.  voi
30df0 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74  d sqlite3Connect
30e00 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 73 71 6c 69  ionUnlocked(sqli
30e10 74 65 33 20 2a 64 62 29 3b 0a 20 20 76 6f 69 64  te3 *db);.  void
30e20 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69   sqlite3Connecti
30e30 6f 6e 43 6c 6f 73 65 64 28 73 71 6c 69 74 65 33  onClosed(sqlite3
30e40 20 2a 64 62 29 3b 0a 23 65 6c 73 65 0a 20 20 23   *db);.#else.  #
30e50 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f  define sqlite3Co
30e60 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28  nnectionBlocked(
30e70 78 2c 79 29 0a 20 20 23 64 65 66 69 6e 65 20 73  x,y).  #define s
30e80 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e  qlite3Connection
30e90 55 6e 6c 6f 63 6b 65 64 28 78 29 0a 20 20 23 64  Unlocked(x).  #d
30ea0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e  efine sqlite3Con
30eb0 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 78 29  nectionClosed(x)
30ec0 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
30ed0 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 76  SQLITE_DEBUG.  v
30ee0 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65  oid sqlite3Parse
30ef0 72 54 72 61 63 65 28 46 49 4c 45 2a 2c 20 63 68  rTrace(FILE*, ch
30f00 61 72 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 23 69  ar *);.#endif.#i
30f10 66 20 64 65 66 69 6e 65 64 28 59 59 43 4f 56 45  f defined(YYCOVE
30f20 52 41 47 45 29 0a 20 20 69 6e 74 20 73 71 6c 69  RAGE).  int sqli
30f30 74 65 33 50 61 72 73 65 72 43 6f 76 65 72 61 67  te3ParserCoverag
30f40 65 28 46 49 4c 45 2a 29 3b 0a 23 65 6e 64 69 66  e(FILE*);.#endif
30f50 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53  ../*.** If the S
30f60 51 4c 49 54 45 5f 45 4e 41 42 4c 45 20 49 4f 54  QLITE_ENABLE IOT
30f70 52 41 43 45 20 65 78 69 73 74 73 20 74 68 65 6e  RACE exists then
30f80 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69   the global vari
30f90 61 62 6c 65 0a 2a 2a 20 73 71 6c 69 74 65 33 49  able.** sqlite3I
30fa0 6f 54 72 61 63 65 20 69 73 20 61 20 70 6f 69 6e  oTrace is a poin
30fb0 74 65 72 20 74 6f 20 61 20 70 72 69 6e 74 66 2d  ter to a printf-
30fc0 6c 69 6b 65 20 72 6f 75 74 69 6e 65 20 75 73 65  like routine use
30fd0 64 20 74 6f 0a 2a 2a 20 70 72 69 6e 74 20 49 2f  d to.** print I/
30fe0 4f 20 74 72 61 63 69 6e 67 20 6d 65 73 73 61 67  O tracing messag
30ff0 65 73 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  es..*/.#ifdef SQ
31000 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 49 4f 54 52  LITE_ENABLE_IOTR
31010 41 43 45 0a 23 20 64 65 66 69 6e 65 20 49 4f 54  ACE.# define IOT
31020 52 41 43 45 28 41 29 20 20 69 66 28 20 73 71 6c  RACE(A)  if( sql
31030 69 74 65 33 49 6f 54 72 61 63 65 20 29 7b 20 73  ite3IoTrace ){ s
31040 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 41 3b  qlite3IoTrace A;
31050 20 7d 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65   }.  void sqlite
31060 33 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28  3VdbeIOTraceSql(
31070 56 64 62 65 2a 29 3b 0a 53 51 4c 49 54 45 5f 41  Vdbe*);.SQLITE_A
31080 50 49 20 53 51 4c 49 54 45 5f 45 58 54 45 52 4e  PI SQLITE_EXTERN
31090 20 76 6f 69 64 20 28 53 51 4c 49 54 45 5f 43 44   void (SQLITE_CD
310a0 45 43 4c 20 2a 73 71 6c 69 74 65 33 49 6f 54 72  ECL *sqlite3IoTr
310b0 61 63 65 29 28 63 6f 6e 73 74 20 63 68 61 72 2a  ace)(const char*
310c0 2c 2e 2e 2e 29 3b 0a 23 65 6c 73 65 0a 23 20 64  ,...);.#else.# d
310d0 65 66 69 6e 65 20 49 4f 54 52 41 43 45 28 41 29  efine IOTRACE(A)
310e0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
310f0 33 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28  3VdbeIOTraceSql(
31100 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  X).#endif../*.**
31110 20 54 68 65 73 65 20 72 6f 75 74 69 6e 65 73 20   These routines 
31120 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20 66 6f  are available fo
31130 72 20 74 68 65 20 6d 65 6d 32 2e 63 20 64 65 62  r the mem2.c deb
31140 75 67 67 69 6e 67 20 6d 65 6d 6f 72 79 20 61 6c  ugging memory al
31150 6c 6f 63 61 74 6f 72 0a 2a 2a 20 6f 6e 6c 79 2e  locator.** only.
31160 20 20 54 68 65 79 20 61 72 65 20 75 73 65 64 20    They are used 
31170 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 64  to verify that d
31180 69 66 66 65 72 65 6e 74 20 22 74 79 70 65 73 22  ifferent "types"
31190 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 61 6c   of memory.** al
311a0 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 70 72  locations are pr
311b0 6f 70 65 72 6c 79 20 74 72 61 63 6b 65 64 20 62  operly tracked b
311c0 79 20 74 68 65 20 73 79 73 74 65 6d 2e 0a 2a 2a  y the system..**
311d0 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  .** sqlite3Memde
311e0 62 75 67 53 65 74 54 79 70 65 28 29 20 73 65 74  bugSetType() set
311f0 73 20 74 68 65 20 22 74 79 70 65 22 20 6f 66 20  s the "type" of 
31200 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 74 6f  an allocation to
31210 20 6f 6e 65 20 6f 66 0a 2a 2a 20 74 68 65 20 4d   one of.** the M
31220 45 4d 54 59 50 45 5f 2a 20 6d 61 63 72 6f 73 20  EMTYPE_* macros 
31230 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 2e 20 20  defined below.  
31240 54 68 65 20 74 79 70 65 20 6d 75 73 74 20 62 65  The type must be
31250 20 61 20 62 69 74 6d 61 73 6b 20 77 69 74 68 0a   a bitmask with.
31260 2a 2a 20 61 20 73 69 6e 67 6c 65 20 62 69 74 20  ** a single bit 
31270 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74  set..**.** sqlit
31280 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70  e3MemdebugHasTyp
31290 65 28 29 20 72 65 74 75 72 6e 73 20 74 72 75 65  e() returns true
312a0 20 69 66 20 61 6e 79 20 6f 66 20 74 68 65 20 62   if any of the b
312b0 69 74 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e  its in its secon
312c0 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61  d.** argument ma
312d0 74 63 68 20 74 68 65 20 74 79 70 65 20 73 65 74  tch the type set
312e0 20 62 79 20 74 68 65 20 70 72 65 76 69 6f 75 73   by the previous
312f0 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
31300 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a 20 73 71  SetType()..** sq
31310 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73  lite3MemdebugHas
31320 54 79 70 65 28 29 20 69 73 20 69 6e 74 65 6e 64  Type() is intend
31330 65 64 20 66 6f 72 20 75 73 65 20 69 6e 73 69 64  ed for use insid
31340 65 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65  e assert() state
31350 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c  ments..**.** sql
31360 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79  ite3MemdebugNoTy
31370 70 65 28 29 20 72 65 74 75 72 6e 73 20 74 72 75  pe() returns tru
31380 65 20 69 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65  e if none of the
31390 20 62 69 74 73 20 69 6e 20 69 74 73 20 73 65 63   bits in its sec
313a0 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20  ond.** argument 
313b0 6d 61 74 63 68 20 74 68 65 20 74 79 70 65 20 73  match the type s
313c0 65 74 20 62 79 20 74 68 65 20 70 72 65 76 69 6f  et by the previo
313d0 75 73 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  us sqlite3Memdeb
313e0 75 67 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a 0a  ugSetType()..**.
313f0 2a 2a 20 50 65 72 68 61 70 73 20 74 68 65 20 6d  ** Perhaps the m
31400 6f 73 74 20 69 6d 70 6f 72 74 61 6e 74 20 70 6f  ost important po
31410 69 6e 74 20 69 73 20 74 68 65 20 64 69 66 66 65  int is the diffe
31420 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20 4d 45  rence between ME
31430 4d 54 59 50 45 5f 48 45 41 50 0a 2a 2a 20 61 6e  MTYPE_HEAP.** an
31440 64 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53  d MEMTYPE_LOOKAS
31450 49 44 45 2e 20 20 49 66 20 61 6e 20 61 6c 6c 6f  IDE.  If an allo
31460 63 61 74 69 6f 6e 20 69 73 20 4d 45 4d 54 59 50  cation is MEMTYP
31470 45 5f 4c 4f 4f 4b 41 53 49 44 45 2c 20 74 68 61  E_LOOKASIDE, tha
31480 74 20 6d 65 61 6e 73 0a 2a 2a 20 69 74 20 6d 69  t means.** it mi
31490 67 68 74 20 68 61 76 65 20 62 65 65 6e 20 61 6c  ght have been al
314a0 6c 6f 63 61 74 65 64 20 62 79 20 6c 6f 6f 6b 61  located by looka
314b0 73 69 64 65 2c 20 65 78 63 65 70 74 20 74 68 65  side, except the
314c0 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 77 61 73 0a   allocation was.
314d0 2a 2a 20 74 6f 6f 20 6c 61 72 67 65 20 6f 72 20  ** too large or 
314e0 6c 6f 6f 6b 61 73 69 64 65 20 77 61 73 20 61 6c  lookaside was al
314f0 72 65 61 64 79 20 66 75 6c 6c 2e 20 20 49 74 20  ready full.  It 
31500 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20  is important to 
31510 76 65 72 69 66 79 0a 2a 2a 20 74 68 61 74 20 61  verify.** that a
31520 6c 6c 6f 63 61 74 69 6f 6e 73 20 74 68 61 74 20  llocations that 
31530 6d 69 67 68 74 20 68 61 76 65 20 62 65 65 6e 20  might have been 
31540 73 61 74 69 73 66 69 65 64 20 62 79 20 6c 6f 6f  satisfied by loo
31550 6b 61 73 69 64 65 20 61 72 65 20 6e 6f 74 0a 2a  kaside are not.*
31560 2a 20 70 61 73 73 65 64 20 62 61 63 6b 20 74 6f  * passed back to
31570 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66   non-lookaside f
31580 72 65 65 28 29 20 72 6f 75 74 69 6e 65 73 2e 20  ree() routines. 
31590 20 41 73 73 65 72 74 73 20 73 75 63 68 20 61 73   Asserts such as
315a0 20 74 68 65 0a 2a 2a 20 65 78 61 6d 70 6c 65 20   the.** example 
315b0 61 62 6f 76 65 20 61 72 65 20 70 6c 61 63 65 64  above are placed
315c0 20 6f 6e 20 74 68 65 20 6e 6f 6e 2d 6c 6f 6f 6b   on the non-look
315d0 61 73 69 64 65 20 66 72 65 65 28 29 20 72 6f 75  aside free() rou
315e0 74 69 6e 65 73 20 74 6f 20 76 65 72 69 66 79 0a  tines to verify.
315f0 2a 2a 20 74 68 69 73 20 63 6f 6e 73 74 72 61 69  ** this constrai
31600 6e 74 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66  nt..**.** All of
31610 20 74 68 69 73 20 69 73 20 6e 6f 2d 6f 70 20 66   this is no-op f
31620 6f 72 20 61 20 70 72 6f 64 75 63 74 69 6f 6e 20  or a production 
31630 62 75 69 6c 64 2e 20 20 49 74 20 6f 6e 6c 79 20  build.  It only 
31640 63 6f 6d 65 73 20 69 6e 74 6f 0a 2a 2a 20 70 6c  comes into.** pl
31650 61 79 20 77 68 65 6e 20 74 68 65 20 53 51 4c 49  ay when the SQLI
31660 54 45 5f 4d 45 4d 44 45 42 55 47 20 63 6f 6d 70  TE_MEMDEBUG comp
31670 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20  ile-time option 
31680 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 23 69 66 64  is used..*/.#ifd
31690 65 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42  ef SQLITE_MEMDEB
316a0 55 47 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  UG.  void sqlite
316b0 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65  3MemdebugSetType
316c0 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e  (void*,u8);.  in
316d0 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  t sqlite3Memdebu
316e0 67 48 61 73 54 79 70 65 28 76 6f 69 64 2a 2c 75  gHasType(void*,u
316f0 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  8);.  int sqlite
31700 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28  3MemdebugNoType(
31710 76 6f 69 64 2a 2c 75 38 29 3b 0a 23 65 6c 73 65  void*,u8);.#else
31720 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
31730 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65  3MemdebugSetType
31740 28 58 2c 59 29 20 20 2f 2a 20 6e 6f 2d 6f 70 20  (X,Y)  /* no-op 
31750 2a 2f 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  */.# define sqli
31760 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79  te3MemdebugHasTy
31770 70 65 28 58 2c 59 29 20 20 31 0a 23 20 64 65 66  pe(X,Y)  1.# def
31780 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  ine sqlite3Memde
31790 62 75 67 4e 6f 54 79 70 65 28 58 2c 59 29 20 20  bugNoType(X,Y)  
317a0 20 31 0a 23 65 6e 64 69 66 0a 23 64 65 66 69 6e   1.#endif.#defin
317b0 65 20 4d 45 4d 54 59 50 45 5f 48 45 41 50 20 20  e MEMTYPE_HEAP  
317c0 20 20 20 20 20 30 78 30 31 20 20 2f 2a 20 47 65       0x01  /* Ge
317d0 6e 65 72 61 6c 20 68 65 61 70 20 61 6c 6c 6f 63  neral heap alloc
317e0 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e  ations */.#defin
317f0 65 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53  e MEMTYPE_LOOKAS
31800 49 44 45 20 20 30 78 30 32 20 20 2f 2a 20 48 65  IDE  0x02  /* He
31810 61 70 20 74 68 61 74 20 6d 69 67 68 74 20 68 61  ap that might ha
31820 76 65 20 62 65 65 6e 20 6c 6f 6f 6b 61 73 69 64  ve been lookasid
31830 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d  e */.#define MEM
31840 54 59 50 45 5f 50 43 41 43 48 45 20 20 20 20 20  TYPE_PCACHE     
31850 30 78 30 34 20 20 2f 2a 20 50 61 67 65 20 63 61  0x04  /* Page ca
31860 63 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  che allocations 
31870 2a 2f 0a 0a 23 69 66 20 28 53 51 4c 49 54 45 5f  */..#if (SQLITE_
31880 45 4e 41 42 4c 45 5f 41 50 50 4c 45 5f 53 50 49  ENABLE_APPLE_SPI
31890 3e 30 29 20 26 26 20 64 65 66 69 6e 65 64 28 5f  >0) && defined(_
318a0 5f 41 50 50 4c 45 5f 5f 29 0a 0a 2f 2a 0a 2a 2a  _APPLE__)../*.**
318b0 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
318c0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
318d0 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20  ructure is used 
318e0 74 6f 20 68 6f 6c 64 20 74 68 65 20 70 72 6f 63  to hold the proc
318f0 65 73 73 20 49 44 0a 2a 2a 20 61 6e 64 20 72 65  ess ID.** and re
31900 74 75 72 6e 2d 62 79 2d 72 65 66 65 72 65 6e 63  turn-by-referenc
31910 65 20 6c 6f 63 6b 73 74 61 74 65 20 76 61 6c 75  e lockstate valu
31920 65 2e 20 20 54 68 65 20 53 51 4c 49 54 45 5f 46  e.  The SQLITE_F
31930 43 4e 54 4c 5f 4c 4f 43 4b 53 54 41 54 45 5f 50  CNTL_LOCKSTATE_P
31940 49 44 0a 2a 2a 20 72 65 71 75 69 72 65 73 20 74  ID.** requires t
31950 68 65 20 34 74 68 20 61 72 67 75 6d 65 6e 74 20  he 4th argument 
31960 74 6f 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f  to sqlite3_file_
31970 63 6f 6e 74 72 6f 6c 20 74 6f 20 62 65 20 61 20  control to be a 
31980 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e 0a 2a 2a  pointer to an.**
31990 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 4c 6f 63   instance of Loc
319a0 6b 73 74 61 74 65 50 49 44 20 69 6e 69 74 69 61  kstatePID initia
319b0 6c 69 7a 65 64 20 77 69 74 68 20 61 20 4c 6f 63  lized with a Loc
319c0 6b 73 74 61 74 65 50 49 44 2e 70 69 64 20 76 61  kstatePID.pid va
319d0 6c 75 65 20 65 71 75 61 6c 0a 2a 2a 20 74 6f 20  lue equal.** to 
319e0 61 20 70 72 6f 63 65 73 73 20 49 44 20 74 6f 20  a process ID to 
319f0 62 65 20 74 65 73 74 65 64 2c 20 6f 72 20 74 68  be tested, or th
31a00 65 20 73 70 65 63 69 61 6c 20 76 61 6c 75 65 20  e special value 
31a10 53 51 4c 49 54 45 5f 4c 4f 43 4b 53 54 41 54 45  SQLITE_LOCKSTATE
31a20 5f 41 4e 59 50 49 44 0a 2a 2a 20 54 68 65 20 4c  _ANYPID.** The L
31a30 6f 63 6b 73 74 61 74 65 2e 73 74 61 74 65 20 76  ockstate.state v
31a40 61 6c 75 65 20 69 73 20 61 6c 77 61 79 73 20 73  alue is always s
31a50 65 74 20 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65  et to one of the
31a60 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 6c 75 65   following value
31a70 73 0a 2a 2a 20 77 68 65 6e 20 73 71 6c 69 74 65  s.** when sqlite
31a80 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 20 72  3_file_control r
31a90 65 74 75 72 6e 73 3a 0a 2a 2a 20 0a 2a 2a 20 20  eturns:.** .**  
31aa0 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 53 54 41 54   SQLITE_LOCKSTAT
31ab0 45 5f 4f 46 46 20 20 20 20 6e 6f 20 61 63 74 69  E_OFF    no acti
31ac0 76 65 20 73 71 6c 69 74 65 20 66 69 6c 65 20 6c  ve sqlite file l
31ad0 6f 63 6b 73 20 6d 61 74 63 68 20 74 68 65 20 73  ocks match the s
31ae0 70 65 63 69 66 69 65 64 20 70 69 64 0a 2a 2a 20  pecified pid.** 
31af0 20 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 53 54 41    SQLITE_LOCKSTA
31b00 54 45 5f 4f 4e 20 20 20 20 20 61 63 74 69 76 65  TE_ON     active
31b10 20 73 71 6c 69 74 65 20 66 69 6c 65 20 6c 6f 63   sqlite file loc
31b20 6b 73 20 6d 61 74 63 68 20 74 68 65 20 73 70 65  ks match the spe
31b30 63 69 66 69 65 64 20 70 69 64 0a 2a 2a 20 20 20  cified pid.**   
31b40 53 51 4c 49 54 45 5f 4c 4f 43 4b 53 54 41 54 45  SQLITE_LOCKSTATE
31b50 5f 4e 4f 54 41 44 42 20 70 61 74 68 20 70 6f 69  _NOTADB path poi
31b60 6e 74 73 20 74 6f 20 61 20 66 69 6c 65 20 74 68  nts to a file th
31b70 61 74 20 69 73 20 6e 6f 74 20 61 6e 20 73 71 6c  at is not an sql
31b80 69 74 65 20 64 62 20 66 69 6c 65 0a 2a 2a 20 20  ite db file.**  
31b90 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 53 54 41 54   SQLITE_LOCKSTAT
31ba0 45 5f 45 52 52 4f 52 20 20 70 61 74 68 20 77 61  E_ERROR  path wa
31bb0 73 20 6e 6f 74 20 76 61 69 6c 64 20 6f 72 20 77  s not vaild or w
31bc0 61 73 20 75 6e 72 65 61 64 61 62 6c 65 0a 2a 2f  as unreadable.*/
31bd0 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
31be0 4c 6f 63 6b 73 74 61 74 65 50 49 44 20 4c 6f 63  LockstatePID Loc
31bf0 6b 73 74 61 74 65 50 49 44 3b 0a 73 74 72 75 63  kstatePID;.struc
31c00 74 20 4c 6f 63 6b 73 74 61 74 65 50 49 44 20 7b  t LockstatePID {
31c10 0a 20 20 70 69 64 5f 74 20 70 69 64 3b 20 20 20  .  pid_t pid;   
31c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
31c30 20 50 72 6f 63 65 73 73 20 49 44 20 74 6f 20 74   Process ID to t
31c40 65 73 74 20 2a 2f 0a 20 20 69 6e 74 20 73 74 61  est */.  int sta
31c50 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  te;             
31c60 20 20 20 20 2f 2a 20 54 68 65 20 73 74 61 74 65      /* The state
31c70 20 6f 66 20 74 68 65 20 6c 6f 63 6b 20 28 72 65   of the lock (re
31c80 74 75 72 6e 20 76 61 6c 75 65 29 20 2a 2f 0a 7d  turn value) */.}
31c90 3b 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 28 53 51  ;..#endif /* (SQ
31ca0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 50 50 4c  LITE_ENABLE_APPL
31cb0 45 5f 53 50 49 3e 30 29 20 26 26 20 64 65 66 69  E_SPI>0) && defi
31cc0 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29 20 2a  ned(__APPLE__) *
31cd0 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 72 65 61 64 69  /../*.** Threadi
31ce0 6e 67 20 69 6e 74 65 72 66 61 63 65 0a 2a 2f 0a  ng interface.*/.
31cf0 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57  #if SQLITE_MAX_W
31d00 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 3e 30 0a  ORKER_THREADS>0.
31d10 69 6e 74 20 73 71 6c 69 74 65 33 54 68 72 65 61  int sqlite3Threa
31d20 64 43 72 65 61 74 65 28 53 51 4c 69 74 65 54 68  dCreate(SQLiteTh
31d30 72 65 61 64 2a 2a 2c 76 6f 69 64 2a 28 2a 29 28  read**,void*(*)(
31d40 76 6f 69 64 2a 29 2c 76 6f 69 64 2a 29 3b 0a 69  void*),void*);.i
31d50 6e 74 20 73 71 6c 69 74 65 33 54 68 72 65 61 64  nt sqlite3Thread
31d60 4a 6f 69 6e 28 53 51 4c 69 74 65 54 68 72 65 61  Join(SQLiteThrea
31d70 64 2a 2c 20 76 6f 69 64 2a 2a 29 3b 0a 23 65 6e  d*, void**);.#en
31d80 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64  dif..#if defined
31d90 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 44  (SQLITE_ENABLE_D
31da0 42 50 41 47 45 5f 56 54 41 42 29 20 7c 7c 20 64  BPAGE_VTAB) || d
31db0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45  efined(SQLITE_TE
31dc0 53 54 29 0a 69 6e 74 20 73 71 6c 69 74 65 33 44  ST).int sqlite3D
31dd0 62 70 61 67 65 52 65 67 69 73 74 65 72 28 73 71  bpageRegister(sq
31de0 6c 69 74 65 33 2a 29 3b 0a 23 65 6e 64 69 66 0a  lite3*);.#endif.
31df0 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
31e00 54 45 5f 45 4e 41 42 4c 45 5f 44 42 53 54 41 54  TE_ENABLE_DBSTAT
31e10 5f 56 54 41 42 29 20 7c 7c 20 64 65 66 69 6e 65  _VTAB) || define
31e20 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 69  d(SQLITE_TEST).i
31e30 6e 74 20 73 71 6c 69 74 65 33 44 62 73 74 61 74  nt sqlite3Dbstat
31e40 52 65 67 69 73 74 65 72 28 73 71 6c 69 74 65 33  Register(sqlite3
31e50 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20  *);.#endif..int 
31e60 73 71 6c 69 74 65 33 45 78 70 72 56 65 63 74 6f  sqlite3ExprVecto
31e70 72 53 69 7a 65 28 45 78 70 72 20 2a 70 45 78 70  rSize(Expr *pExp
31e80 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  r);.int sqlite3E
31e90 78 70 72 49 73 56 65 63 74 6f 72 28 45 78 70 72  xprIsVector(Expr
31ea0 20 2a 70 45 78 70 72 29 3b 0a 45 78 70 72 20 2a   *pExpr);.Expr *
31eb0 73 71 6c 69 74 65 33 56 65 63 74 6f 72 46 69 65  sqlite3VectorFie
31ec0 6c 64 53 75 62 65 78 70 72 28 45 78 70 72 2a 2c  ldSubexpr(Expr*,
31ed0 20 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c   int);.Expr *sql
31ee0 69 74 65 33 45 78 70 72 46 6f 72 56 65 63 74 6f  ite3ExprForVecto
31ef0 72 46 69 65 6c 64 28 50 61 72 73 65 2a 2c 45 78  rField(Parse*,Ex
31f00 70 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  pr*,int);.void s
31f10 71 6c 69 74 65 33 56 65 63 74 6f 72 45 72 72 6f  qlite3VectorErro
31f20 72 4d 73 67 28 50 61 72 73 65 2a 2c 20 45 78 70  rMsg(Parse*, Exp
31f30 72 2a 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51  r*);..#ifndef SQ
31f40 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c  LITE_OMIT_COMPIL
31f50 45 4f 50 54 49 4f 4e 5f 44 49 41 47 53 0a 63 6f  EOPTION_DIAGS.co
31f60 6e 73 74 20 63 68 61 72 20 2a 2a 73 71 6c 69 74  nst char **sqlit
31f70 65 33 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73  e3CompileOptions
31f80 28 69 6e 74 20 2a 70 6e 4f 70 74 29 3b 0a 23 65  (int *pnOpt);.#e
31f90 6e 64 69 66 0a 0a 23 65 6e 64 69 66 20 2f 2a 20  ndif..#endif /* 
31fa0 53 51 4c 49 54 45 49 4e 54 5f 48 20 2a 2f 0a     SQLITEINT_H */.