/ Hex Artifact Content
Login

Artifact dcef2c667f65742385e13847823b298fc75a8980ca572ed2bf0ff15b68a4ea32:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 53 51 4c 49 54 45 49 4e 54 5f 48 0a 23  ef SQLITEINT_H.#
01c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 49 4e 54  define SQLITEINT
01d0: 5f 48 0a 0a 2f 2a 20 53 70 65 63 69 61 6c 20 43  _H../* Special C
01e0: 6f 6d 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 53  omments:.**.** S
01f0: 6f 6d 65 20 63 6f 6d 6d 65 6e 74 73 20 68 61 76  ome comments hav
0200: 65 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e  e special meanin
0210: 67 20 74 6f 20 74 68 65 20 74 6f 6f 6c 73 20 74  g to the tools t
0220: 68 61 74 20 6d 65 61 73 75 72 65 20 74 65 73 74  hat measure test
0230: 0a 2a 2a 20 63 6f 76 65 72 61 67 65 3a 0a 2a 2a  .** coverage:.**
0240: 0a 2a 2a 20 20 20 20 4e 4f 5f 54 45 53 54 20 20  .**    NO_TEST  
0250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0260: 20 20 20 2d 20 54 68 65 20 62 72 61 6e 63 68 65     - The branche
0270: 73 20 6f 6e 20 74 68 69 73 20 6c 69 6e 65 20 61  s on this line a
0280: 72 65 20 6e 6f 74 0a 2a 2a 20 20 20 20 20 20 20  re not.**       
0290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02a0: 20 20 20 20 20 20 20 20 20 20 20 6d 65 61 73 75             measu
02b0: 72 65 64 20 62 79 20 62 72 61 6e 63 68 20 63 6f  red by branch co
02c0: 76 65 72 61 67 65 2e 20 20 54 68 69 73 20 69 73  verage.  This is
02d0: 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
02e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02f0: 20 20 20 20 20 75 73 65 64 20 6f 6e 20 6c 69 6e       used on lin
0300: 65 73 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20  es of code that 
0310: 61 63 74 75 61 6c 6c 79 0a 2a 2a 20 20 20 20 20  actually.**     
0320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0330: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6d 70               imp
0340: 6c 65 6d 65 6e 74 20 70 61 72 74 73 20 6f 66 20  lement parts of 
0350: 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e 67  coverage testing
0360: 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d  ..**.**    OPTIM
0370: 49 5a 41 54 49 4f 4e 2d 49 46 2d 54 52 55 45 20  IZATION-IF-TRUE 
0380: 20 20 20 20 20 20 20 2d 20 54 68 69 73 20 62 72         - This br
0390: 61 6e 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20  anch is allowed 
03a0: 74 6f 20 61 6c 77 61 79 20 62 65 20 66 61 6c 73  to alway be fals
03b0: 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
03c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
03d0: 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 63 6f        and the co
03e0: 72 72 65 63 74 20 61 6e 73 77 65 72 20 69 73 20  rrect answer is 
03f0: 73 74 69 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a  still obtained,.
0400: 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
0410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0420: 20 20 20 20 74 68 6f 75 67 68 20 70 65 72 68 61      though perha
0430: 70 73 20 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a  ps more slowly..
0440: 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d 49 5a  **.**    OPTIMIZ
0450: 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 20 20  ATION-IF-FALSE  
0460: 20 20 20 20 20 2d 20 54 68 69 73 20 62 72 61 6e       - This bran
0470: 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f  ch is allowed to
0480: 20 61 6c 77 61 79 20 62 65 20 74 72 75 65 0a 2a   alway be true.*
0490: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
04a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04b0: 20 20 20 61 6e 64 20 74 68 65 20 63 6f 72 72 65     and the corre
04c0: 63 74 20 61 6e 73 77 65 72 20 69 73 20 73 74 69  ct answer is sti
04d0: 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a 2a 2a 20  ll obtained,.** 
04e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0500: 20 74 68 6f 75 67 68 20 70 65 72 68 61 70 73 20   though perhaps 
0510: 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a 2a 2a 0a  more slowly..**.
0520: 2a 2a 20 20 20 20 50 52 45 56 45 4e 54 53 2d 48  **    PREVENTS-H
0530: 41 52 4d 4c 45 53 53 2d 4f 56 45 52 52 45 41 44  ARMLESS-OVERREAD
0540: 20 20 2d 20 54 68 69 73 20 62 72 61 6e 63 68 20    - This branch 
0550: 70 72 65 76 65 6e 74 73 20 61 20 62 75 66 66 65  prevents a buffe
0560: 72 20 6f 76 65 72 72 65 61 64 0a 2a 2a 20 20 20  r overread.**   
0570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
0590: 68 61 74 20 77 6f 75 6c 64 20 62 65 20 68 61 72  hat would be har
05a0: 6d 6c 65 73 73 20 61 6e 64 20 75 6e 64 65 74 65  mless and undete
05b0: 63 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20  ctable.**       
05c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
05d0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 69 74             if it
05e0: 20 64 69 64 20 6f 63 63 75 72 2e 20 20 0a 2a 2a   did occur.  .**
05f0: 0a 2a 2a 20 49 6e 20 61 6c 6c 20 63 61 73 65 73  .** In all cases
0600: 2c 20 74 68 65 20 73 70 65 63 69 61 6c 20 63 6f  , the special co
0610: 6d 6d 65 6e 74 20 6d 75 73 74 20 62 65 20 65 6e  mment must be en
0620: 63 6c 6f 73 65 64 20 69 6e 20 74 68 65 20 75 73  closed in the us
0630: 75 61 6c 0a 2a 2a 20 73 6c 61 73 68 2d 61 73 74  ual.** slash-ast
0640: 65 72 69 73 6b 2e 2e 2e 61 73 74 65 72 69 73 6b  erisk...asterisk
0650: 2d 73 6c 61 73 68 20 63 6f 6d 6d 65 6e 74 20 6d  -slash comment m
0660: 61 72 6b 73 2c 20 77 69 74 68 20 6e 6f 20 73 70  arks, with no sp
0670: 61 63 65 73 20 62 65 74 77 65 65 6e 20 74 68 65  aces between the
0680: 20 0a 2a 2a 20 61 73 74 65 72 69 73 6b 73 20 61   .** asterisks a
0690: 6e 64 20 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74  nd the comment t
06a0: 65 78 74 2e 0a 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d  ext..*/../*.** M
06b0: 61 6b 65 20 73 75 72 65 20 74 68 65 20 54 63 6c  ake sure the Tcl
06c0: 20 63 61 6c 6c 69 6e 67 20 63 6f 6e 76 65 6e 74   calling convent
06d0: 69 6f 6e 20 6d 61 63 72 6f 20 69 73 20 64 65 66  ion macro is def
06e0: 69 6e 65 64 2e 20 20 54 68 69 73 20 6d 61 63 72  ined.  This macr
06f0: 6f 20 69 73 0a 2a 2a 20 6f 6e 6c 79 20 75 73 65  o is.** only use
0700: 64 20 62 79 20 74 65 73 74 20 63 6f 64 65 20 61  d by test code a
0710: 6e 64 20 54 63 6c 20 69 6e 74 65 67 72 61 74 69  nd Tcl integrati
0720: 6f 6e 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 6e  on code..*/.#ifn
0730: 64 65 66 20 53 51 4c 49 54 45 5f 54 43 4c 41 50  def SQLITE_TCLAP
0740: 49 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49  I.#  define SQLI
0750: 54 45 5f 54 43 4c 41 50 49 0a 23 65 6e 64 69 66  TE_TCLAPI.#endif
0760: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c 75 64 65 20  ../*.** Include 
0770: 74 68 65 20 68 65 61 64 65 72 20 66 69 6c 65 20  the header file 
0780: 75 73 65 64 20 74 6f 20 63 75 73 74 6f 6d 69 7a  used to customiz
0790: 65 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 6f  e the compiler o
07a0: 70 74 69 6f 6e 73 20 66 6f 72 20 4d 53 56 43 2e  ptions for MSVC.
07b0: 0a 2a 2a 20 54 68 69 73 20 73 68 6f 75 6c 64 20  .** This should 
07c0: 62 65 20 64 6f 6e 65 20 66 69 72 73 74 20 73 6f  be done first so
07d0: 20 74 68 61 74 20 69 74 20 63 61 6e 20 73 75 63   that it can suc
07e0: 63 65 73 73 66 75 6c 6c 79 20 70 72 65 76 65 6e  cessfully preven
07f0: 74 20 73 70 75 72 69 6f 75 73 0a 2a 2a 20 63 6f  t spurious.** co
0800: 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 73 20  mpiler warnings 
0810: 64 75 65 20 74 6f 20 73 75 62 73 65 71 75 65 6e  due to subsequen
0820: 74 20 63 6f 6e 74 65 6e 74 20 69 6e 20 74 68 69  t content in thi
0830: 73 20 66 69 6c 65 20 61 6e 64 20 6f 74 68 65 72  s file and other
0840: 20 66 69 6c 65 73 0a 2a 2a 20 74 68 61 74 20 61   files.** that a
0850: 72 65 20 69 6e 63 6c 75 64 65 64 20 62 79 20 74  re included by t
0860: 68 69 73 20 66 69 6c 65 2e 0a 2a 2f 0a 23 69 6e  his file..*/.#in
0870: 63 6c 75 64 65 20 22 6d 73 76 63 2e 68 22 0a 0a  clude "msvc.h"..
0880: 2f 2a 0a 2a 2a 20 53 70 65 63 69 61 6c 20 73 65  /*.** Special se
0890: 74 75 70 20 66 6f 72 20 56 78 57 6f 72 6b 73 0a  tup for VxWorks.
08a0: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 76 78 77  */.#include "vxw
08b0: 6f 72 6b 73 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 54  orks.h"../*.** T
08c0: 68 65 73 65 20 23 64 65 66 69 6e 65 73 20 73 68  hese #defines sh
08d0: 6f 75 6c 64 20 65 6e 61 62 6c 65 20 3e 32 47 42  ould enable >2GB
08e0: 20 66 69 6c 65 20 73 75 70 70 6f 72 74 20 6f 6e   file support on
08f0: 20 50 4f 53 49 58 20 69 66 20 74 68 65 0a 2a 2a   POSIX if the.**
0900: 20 75 6e 64 65 72 6c 79 69 6e 67 20 6f 70 65 72   underlying oper
0910: 61 74 69 6e 67 20 73 79 73 74 65 6d 20 73 75 70  ating system sup
0920: 70 6f 72 74 73 20 69 74 2e 20 20 49 66 20 74 68  ports it.  If th
0930: 65 20 4f 53 20 6c 61 63 6b 73 0a 2a 2a 20 6c 61  e OS lacks.** la
0940: 72 67 65 20 66 69 6c 65 20 73 75 70 70 6f 72 74  rge file support
0950: 2c 20 6f 72 20 69 66 20 74 68 65 20 4f 53 20 69  , or if the OS i
0960: 73 20 77 69 6e 64 6f 77 73 2c 20 74 68 65 73 65  s windows, these
0970: 20 73 68 6f 75 6c 64 20 62 65 20 6e 6f 2d 6f 70   should be no-op
0980: 73 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20  s..**.** Ticket 
0990: 23 32 37 33 39 3a 20 20 54 68 65 20 5f 4c 41 52  #2739:  The _LAR
09a0: 47 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 6d 61  GEFILE_SOURCE ma
09b0: 63 72 6f 20 6d 75 73 74 20 61 70 70 65 61 72 20  cro must appear 
09c0: 62 65 66 6f 72 65 20 61 6e 79 0a 2a 2a 20 73 79  before any.** sy
09d0: 73 74 65 6d 20 23 69 6e 63 6c 75 64 65 73 2e 20  stem #includes. 
09e0: 20 48 65 6e 63 65 2c 20 74 68 69 73 20 62 6c 6f   Hence, this blo
09f0: 63 6b 20 6f 66 20 63 6f 64 65 20 6d 75 73 74 20  ck of code must 
0a00: 62 65 20 74 68 65 20 76 65 72 79 20 66 69 72 73  be the very firs
0a10: 74 0a 2a 2a 20 63 6f 64 65 20 69 6e 20 61 6c 6c  t.** code in all
0a20: 20 73 6f 75 72 63 65 20 66 69 6c 65 73 2e 0a 2a   source files..*
0a30: 2a 0a 2a 2a 20 4c 61 72 67 65 20 66 69 6c 65 20  *.** Large file 
0a40: 73 75 70 70 6f 72 74 20 63 61 6e 20 62 65 20 64  support can be d
0a50: 69 73 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68  isabled using th
0a60: 65 20 2d 44 53 51 4c 49 54 45 5f 44 49 53 41 42  e -DSQLITE_DISAB
0a70: 4c 45 5f 4c 46 53 20 73 77 69 74 63 68 0a 2a 2a  LE_LFS switch.**
0a80: 20 6f 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 72   on the compiler
0a90: 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2e 20 20   command line.  
0aa0: 54 68 69 73 20 69 73 20 6e 65 63 65 73 73 61 72  This is necessar
0ab0: 79 20 69 66 20 79 6f 75 20 61 72 65 20 63 6f 6d  y if you are com
0ac0: 70 69 6c 69 6e 67 0a 2a 2a 20 6f 6e 20 61 20 72  piling.** on a r
0ad0: 65 63 65 6e 74 20 6d 61 63 68 69 6e 65 20 28 65  ecent machine (e
0ae0: 78 3a 20 52 65 64 20 48 61 74 20 37 2e 32 29 20  x: Red Hat 7.2) 
0af0: 62 75 74 20 79 6f 75 20 77 61 6e 74 20 79 6f 75  but you want you
0b00: 72 20 63 6f 64 65 20 74 6f 20 77 6f 72 6b 0a 2a  r code to work.*
0b10: 2a 20 6f 6e 20 61 6e 20 6f 6c 64 65 72 20 6d 61  * on an older ma
0b20: 63 68 69 6e 65 20 28 65 78 3a 20 52 65 64 20 48  chine (ex: Red H
0b30: 61 74 20 36 2e 30 29 2e 20 20 49 66 20 79 6f 75  at 6.0).  If you
0b40: 20 63 6f 6d 70 69 6c 65 20 6f 6e 20 52 65 64 20   compile on Red 
0b50: 48 61 74 20 37 2e 32 0a 2a 2a 20 77 69 74 68 6f  Hat 7.2.** witho
0b60: 75 74 20 74 68 69 73 20 6f 70 74 69 6f 6e 2c 20  ut this option, 
0b70: 4c 46 53 20 69 73 20 65 6e 61 62 6c 65 2e 20 20  LFS is enable.  
0b80: 42 75 74 20 4c 46 53 20 64 6f 65 73 20 6e 6f 74  But LFS does not
0b90: 20 65 78 69 73 74 20 69 6e 20 74 68 65 20 6b 65   exist in the ke
0ba0: 72 6e 65 6c 0a 2a 2a 20 69 6e 20 52 65 64 20 48  rnel.** in Red H
0bb0: 61 74 20 36 2e 30 2c 20 73 6f 20 74 68 65 20 63  at 6.0, so the c
0bc0: 6f 64 65 20 77 6f 6e 27 74 20 77 6f 72 6b 2e 20  ode won't work. 
0bd0: 20 48 65 6e 63 65 2c 20 66 6f 72 20 6d 61 78 69   Hence, for maxi
0be0: 6d 75 6d 20 62 69 6e 61 72 79 0a 2a 2a 20 70 6f  mum binary.** po
0bf0: 72 74 61 62 69 6c 69 74 79 20 79 6f 75 20 73 68  rtability you sh
0c00: 6f 75 6c 64 20 6f 6d 69 74 20 4c 46 53 2e 0a 2a  ould omit LFS..*
0c10: 2a 0a 2a 2a 20 54 68 65 20 70 72 65 76 69 6f 75  *.** The previou
0c20: 73 20 70 61 72 61 67 72 61 70 68 20 77 61 73 20  s paragraph was 
0c30: 77 72 69 74 74 65 6e 20 69 6e 20 32 30 30 35 2e  written in 2005.
0c40: 20 20 28 54 68 69 73 20 70 61 72 61 67 72 61 70    (This paragrap
0c50: 68 20 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20  h is written.** 
0c60: 6f 6e 20 32 30 30 38 2d 31 31 2d 32 38 2e 29 20  on 2008-11-28.) 
0c70: 54 68 65 73 65 20 64 61 79 73 2c 20 61 6c 6c 20  These days, all 
0c80: 4c 69 6e 75 78 20 6b 65 72 6e 65 6c 73 20 73 75  Linux kernels su
0c90: 70 70 6f 72 74 20 6c 61 72 67 65 20 66 69 6c 65  pport large file
0ca0: 73 2c 20 73 6f 0a 2a 2a 20 79 6f 75 20 73 68 6f  s, so.** you sho
0cb0: 75 6c 64 20 70 72 6f 62 61 62 6c 79 20 6c 65 61  uld probably lea
0cc0: 76 65 20 4c 46 53 20 65 6e 61 62 6c 65 64 2e 20  ve LFS enabled. 
0cd0: 20 42 75 74 20 73 6f 6d 65 20 65 6d 62 65 64 64   But some embedd
0ce0: 65 64 20 70 6c 61 74 66 6f 72 6d 73 20 6d 69 67  ed platforms mig
0cf0: 68 74 0a 2a 2a 20 6c 61 63 6b 20 4c 46 53 20 69  ht.** lack LFS i
0d00: 6e 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65  n which case the
0d10: 20 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f   SQLITE_DISABLE_
0d20: 4c 46 53 20 6d 61 63 72 6f 20 6d 69 67 68 74 20  LFS macro might 
0d30: 73 74 69 6c 6c 20 62 65 20 75 73 65 66 75 6c 2e  still be useful.
0d40: 0a 2a 2a 0a 2a 2a 20 53 69 6d 69 6c 61 72 20 69  .**.** Similar i
0d50: 73 20 74 72 75 65 20 66 6f 72 20 4d 61 63 20 4f  s true for Mac O
0d60: 53 20 58 2e 20 20 4c 46 53 20 69 73 20 6f 6e 6c  S X.  LFS is onl
0d70: 79 20 73 75 70 70 6f 72 74 65 64 20 6f 6e 20 4d  y supported on M
0d80: 61 63 20 4f 53 20 58 20 39 20 61 6e 64 20 6c 61  ac OS X 9 and la
0d90: 74 65 72 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ter..*/.#ifndef 
0da0: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c  SQLITE_DISABLE_L
0db0: 46 53 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52  FS.# define _LAR
0dc0: 47 45 5f 46 49 4c 45 20 20 20 20 20 20 20 31 0a  GE_FILE       1.
0dd0: 23 20 69 66 6e 64 65 66 20 5f 46 49 4c 45 5f 4f  # ifndef _FILE_O
0de0: 46 46 53 45 54 5f 42 49 54 53 0a 23 20 20 20 64  FFSET_BITS.#   d
0df0: 65 66 69 6e 65 20 5f 46 49 4c 45 5f 4f 46 46 53  efine _FILE_OFFS
0e00: 45 54 5f 42 49 54 53 20 36 34 0a 23 20 65 6e 64  ET_BITS 64.# end
0e10: 69 66 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52  if.# define _LAR
0e20: 47 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 31 0a  GEFILE_SOURCE 1.
0e30: 23 65 6e 64 69 66 0a 0a 2f 2a 20 54 68 65 20 47  #endif../* The G
0e40: 43 43 5f 56 45 52 53 49 4f 4e 20 61 6e 64 20 4d  CC_VERSION and M
0e50: 53 56 43 5f 56 45 52 53 49 4f 4e 20 6d 61 63 72  SVC_VERSION macr
0e60: 6f 73 20 61 72 65 20 75 73 65 64 20 74 6f 0a 2a  os are used to.*
0e70: 2a 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 6c 79 20  * conditionally 
0e80: 69 6e 63 6c 75 64 65 20 6f 70 74 69 6d 69 7a 61  include optimiza
0e90: 74 69 6f 6e 73 20 66 6f 72 20 65 61 63 68 20 6f  tions for each o
0ea0: 66 20 74 68 65 73 65 20 63 6f 6d 70 69 6c 65 72  f these compiler
0eb0: 73 2e 20 20 41 0a 2a 2a 20 76 61 6c 75 65 20 6f  s.  A.** value o
0ec0: 66 20 30 20 6d 65 61 6e 73 20 74 68 61 74 20 63  f 0 means that c
0ed0: 6f 6d 70 69 6c 65 72 20 69 73 20 6e 6f 74 20 62  ompiler is not b
0ee0: 65 69 6e 67 20 75 73 65 64 2e 20 20 54 68 65 0a  eing used.  The.
0ef0: 2a 2a 20 53 51 4c 49 54 45 5f 44 49 53 41 42 4c  ** SQLITE_DISABL
0f00: 45 5f 49 4e 54 52 49 4e 53 49 43 20 6d 61 63 72  E_INTRINSIC macr
0f10: 6f 20 6d 65 61 6e 73 20 64 6f 20 6e 6f 74 20 75  o means do not u
0f20: 73 65 20 61 6e 79 20 63 6f 6d 70 69 6c 65 72 2d  se any compiler-
0f30: 73 70 65 63 69 66 69 63 0a 2a 2a 20 6f 70 74 69  specific.** opti
0f40: 6d 69 7a 61 74 69 6f 6e 73 2c 20 61 6e 64 20 68  mizations, and h
0f50: 65 6e 63 65 20 73 65 74 20 61 6c 6c 20 63 6f 6d  ence set all com
0f60: 70 69 6c 65 72 20 6d 61 63 72 6f 73 20 74 6f 20  piler macros to 
0f70: 30 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 77 61  0.**.** There wa
0f80: 73 20 6f 6e 63 65 20 61 6c 73 6f 20 61 20 43 4c  s once also a CL
0f90: 41 4e 47 5f 56 45 52 53 49 4f 4e 20 6d 61 63 72  ANG_VERSION macr
0fa0: 6f 2e 20 20 48 6f 77 65 76 65 72 2c 20 77 65 20  o.  However, we 
0fb0: 6c 65 61 72 6e 20 74 68 61 74 20 74 68 65 0a 2a  learn that the.*
0fc0: 2a 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72  * version number
0fd0: 73 20 69 6e 20 63 6c 61 6e 67 20 61 72 65 20 66  s in clang are f
0fe0: 6f 72 20 22 6d 61 72 6b 65 74 69 6e 67 22 20 6f  or "marketing" o
0ff0: 6e 6c 79 20 61 6e 64 20 61 72 65 20 69 6e 63 6f  nly and are inco
1000: 6e 73 69 73 74 65 6e 74 0a 2a 2a 20 61 6e 64 20  nsistent.** and 
1010: 75 6e 72 65 6c 69 61 62 6c 65 2e 20 20 46 6f 72  unreliable.  For
1020: 74 75 6e 61 74 65 6c 79 2c 20 61 6c 6c 20 76 65  tunately, all ve
1030: 72 73 69 6f 6e 73 20 6f 66 20 63 6c 61 6e 67 20  rsions of clang 
1040: 61 6c 73 6f 20 72 65 63 6f 67 6e 69 7a 65 20 74  also recognize t
1050: 68 65 0a 2a 2a 20 67 63 63 20 76 65 72 73 69 6f  he.** gcc versio
1060: 6e 20 6e 75 6d 62 65 72 73 20 61 6e 64 20 68 61  n numbers and ha
1070: 76 65 20 72 65 61 73 6f 6e 61 62 6c 65 20 73 65  ve reasonable se
1080: 74 74 69 6e 67 73 20 66 6f 72 20 67 63 63 20 76  ttings for gcc v
1090: 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 73 2c 0a  ersion numbers,.
10a0: 2a 2a 20 73 6f 20 74 68 65 20 47 43 43 5f 56 45  ** so the GCC_VE
10b0: 52 53 49 4f 4e 20 6d 61 63 72 6f 20 77 69 6c 6c  RSION macro will
10c0: 20 62 65 20 73 65 74 20 74 6f 20 61 20 63 6f 72   be set to a cor
10d0: 72 65 63 74 20 6e 6f 6e 2d 7a 65 72 6f 20 76 61  rect non-zero va
10e0: 6c 75 65 20 65 76 65 6e 0a 2a 2a 20 77 68 65 6e  lue even.** when
10f0: 20 63 6f 6d 70 69 6c 69 6e 67 20 77 69 74 68 20   compiling with 
1100: 63 6c 61 6e 67 2e 0a 2a 2f 0a 23 69 66 20 64 65  clang..*/.#if de
1110: 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20  fined(__GNUC__) 
1120: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
1130: 54 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52 49  TE_DISABLE_INTRI
1140: 4e 53 49 43 29 0a 23 20 64 65 66 69 6e 65 20 47  NSIC).# define G
1150: 43 43 5f 56 45 52 53 49 4f 4e 20 28 5f 5f 47 4e  CC_VERSION (__GN
1160: 55 43 5f 5f 2a 31 30 30 30 30 30 30 2b 5f 5f 47  UC__*1000000+__G
1170: 4e 55 43 5f 4d 49 4e 4f 52 5f 5f 2a 31 30 30 30  NUC_MINOR__*1000
1180: 2b 5f 5f 47 4e 55 43 5f 50 41 54 43 48 4c 45 56  +__GNUC_PATCHLEV
1190: 45 4c 5f 5f 29 0a 23 65 6c 73 65 0a 23 20 64 65  EL__).#else.# de
11a0: 66 69 6e 65 20 47 43 43 5f 56 45 52 53 49 4f 4e  fine GCC_VERSION
11b0: 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65   0.#endif.#if de
11c0: 66 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52 29 20  fined(_MSC_VER) 
11d0: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
11e0: 54 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52 49  TE_DISABLE_INTRI
11f0: 4e 53 49 43 29 0a 23 20 64 65 66 69 6e 65 20 4d  NSIC).# define M
1200: 53 56 43 5f 56 45 52 53 49 4f 4e 20 5f 4d 53 43  SVC_VERSION _MSC
1210: 5f 56 45 52 0a 23 65 6c 73 65 0a 23 20 64 65 66  _VER.#else.# def
1220: 69 6e 65 20 4d 53 56 43 5f 56 45 52 53 49 4f 4e  ine MSVC_VERSION
1230: 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4e 65   0.#endif../* Ne
1240: 65 64 65 64 20 66 6f 72 20 76 61 72 69 6f 75 73  eded for various
1250: 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e 2e 2e 20   definitions... 
1260: 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f  */.#if defined(_
1270: 5f 47 4e 55 43 5f 5f 29 20 26 26 20 21 64 65 66  _GNUC__) && !def
1280: 69 6e 65 64 28 5f 47 4e 55 5f 53 4f 55 52 43 45  ined(_GNU_SOURCE
1290: 29 0a 23 20 64 65 66 69 6e 65 20 5f 47 4e 55 5f  ).# define _GNU_
12a0: 53 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a 23  SOURCE.#endif..#
12b0: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 4f 70 65  if defined(__Ope
12c0: 6e 42 53 44 5f 5f 29 20 26 26 20 21 64 65 66 69  nBSD__) && !defi
12d0: 6e 65 64 28 5f 42 53 44 5f 53 4f 55 52 43 45 29  ned(_BSD_SOURCE)
12e0: 0a 23 20 64 65 66 69 6e 65 20 5f 42 53 44 5f 53  .# define _BSD_S
12f0: 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a  OURCE.#endif../*
1300: 0a 2a 2a 20 46 6f 72 20 4d 69 6e 47 57 2c 20 63  .** For MinGW, c
1310: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 77  heck to see if w
1320: 65 20 63 61 6e 20 69 6e 63 6c 75 64 65 20 74 68  e can include th
1330: 65 20 68 65 61 64 65 72 20 66 69 6c 65 20 63 6f  e header file co
1340: 6e 74 61 69 6e 69 6e 67 20 69 74 73 0a 2a 2a 20  ntaining its.** 
1350: 76 65 72 73 69 6f 6e 20 69 6e 66 6f 72 6d 61 74  version informat
1360: 69 6f 6e 2c 20 61 6d 6f 6e 67 20 6f 74 68 65 72  ion, among other
1370: 20 74 68 69 6e 67 73 2e 20 20 4e 6f 72 6d 61 6c   things.  Normal
1380: 6c 79 2c 20 74 68 69 73 20 69 6e 74 65 72 6e 61  ly, this interna
1390: 6c 20 4d 69 6e 47 57 0a 2a 2a 20 68 65 61 64 65  l MinGW.** heade
13a0: 72 20 66 69 6c 65 20 77 6f 75 6c 64 20 5b 6f 6e  r file would [on
13b0: 6c 79 5d 20 62 65 20 69 6e 63 6c 75 64 65 64 20  ly] be included 
13c0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 62 79  automatically by
13d0: 20 6f 74 68 65 72 20 4d 69 6e 47 57 20 68 65 61   other MinGW hea
13e0: 64 65 72 0a 2a 2a 20 66 69 6c 65 73 3b 20 68 6f  der.** files; ho
13f0: 77 65 76 65 72 2c 20 74 68 65 20 63 6f 6e 74 61  wever, the conta
1400: 69 6e 65 64 20 76 65 72 73 69 6f 6e 20 69 6e 66  ined version inf
1410: 6f 72 6d 61 74 69 6f 6e 20 69 73 20 6e 6f 77 20  ormation is now 
1420: 72 65 71 75 69 72 65 64 20 62 79 20 74 68 69 73  required by this
1430: 0a 2a 2a 20 68 65 61 64 65 72 20 66 69 6c 65 20  .** header file 
1440: 74 6f 20 77 6f 72 6b 20 61 72 6f 75 6e 64 20 62  to work around b
1450: 69 6e 61 72 79 20 63 6f 6d 70 61 74 69 62 69 6c  inary compatibil
1460: 69 74 79 20 69 73 73 75 65 73 20 28 73 65 65 20  ity issues (see 
1470: 62 65 6c 6f 77 29 20 61 6e 64 0a 2a 2a 20 74 68  below) and.** th
1480: 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 6b  is is the only k
1490: 6e 6f 77 6e 20 77 61 79 20 74 6f 20 72 65 6c 69  nown way to reli
14a0: 61 62 6c 79 20 6f 62 74 61 69 6e 20 69 74 2e 20  ably obtain it. 
14b0: 20 54 68 69 73 20 65 6e 74 69 72 65 20 23 69 66   This entire #if
14c0: 20 62 6c 6f 63 6b 0a 2a 2a 20 77 6f 75 6c 64 20   block.** would 
14d0: 62 65 20 63 6f 6d 70 6c 65 74 65 6c 79 20 75 6e  be completely un
14e0: 6e 65 63 65 73 73 61 72 79 20 69 66 20 74 68 65  necessary if the
14f0: 72 65 20 77 61 73 20 61 6e 79 20 6f 74 68 65 72  re was any other
1500: 20 77 61 79 20 6f 66 20 64 65 74 65 63 74 69 6e   way of detectin
1510: 67 0a 2a 2a 20 4d 69 6e 47 57 20 76 69 61 20 74  g.** MinGW via t
1520: 68 65 69 72 20 70 72 65 70 72 6f 63 65 73 73 6f  heir preprocesso
1530: 72 20 28 65 2e 67 2e 20 69 66 20 74 68 65 79 20  r (e.g. if they 
1540: 63 75 73 74 6f 6d 69 7a 65 64 20 74 68 65 69 72  customized their
1550: 20 47 43 43 20 74 6f 20 64 65 66 69 6e 65 0a 2a   GCC to define.*
1560: 2a 20 73 6f 6d 65 20 4d 69 6e 47 57 2d 73 70 65  * some MinGW-spe
1570: 63 69 66 69 63 20 6d 61 63 72 6f 73 29 2e 20 20  cific macros).  
1580: 57 68 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 66  When compiling f
1590: 6f 72 20 4d 69 6e 47 57 2c 20 65 69 74 68 65 72  or MinGW, either
15a0: 20 74 68 65 0a 2a 2a 20 5f 48 41 56 45 5f 4d 49   the.** _HAVE_MI
15b0: 4e 47 57 5f 48 20 6f 72 20 5f 48 41 56 45 5f 5f  NGW_H or _HAVE__
15c0: 4d 49 4e 47 57 5f 48 20 28 6e 6f 74 65 20 74 68  MINGW_H (note th
15d0: 65 20 65 78 74 72 61 20 75 6e 64 65 72 73 63 6f  e extra undersco
15e0: 72 65 29 20 6d 61 63 72 6f 20 6d 75 73 74 20 62  re) macro must b
15f0: 65 0a 2a 2a 20 64 65 66 69 6e 65 64 3b 20 6f 74  e.** defined; ot
1600: 68 65 72 77 69 73 65 2c 20 64 65 74 65 63 74 69  herwise, detecti
1610: 6f 6e 20 6f 66 20 63 6f 6e 64 69 74 69 6f 6e 73  on of conditions
1620: 20 73 70 65 63 69 66 69 63 20 74 6f 20 4d 69 6e   specific to Min
1630: 47 57 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 64 69  GW will be.** di
1640: 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66 20 64  sabled..*/.#if d
1650: 65 66 69 6e 65 64 28 5f 48 41 56 45 5f 4d 49 4e  efined(_HAVE_MIN
1660: 47 57 5f 48 29 0a 23 20 69 6e 63 6c 75 64 65 20  GW_H).# include 
1670: 22 6d 69 6e 67 77 2e 68 22 0a 23 65 6c 69 66 20  "mingw.h".#elif 
1680: 64 65 66 69 6e 65 64 28 5f 48 41 56 45 5f 5f 4d  defined(_HAVE__M
1690: 49 4e 47 57 5f 48 29 0a 23 20 69 6e 63 6c 75 64  INGW_H).# includ
16a0: 65 20 22 5f 6d 69 6e 67 77 2e 68 22 0a 23 65 6e  e "_mingw.h".#en
16b0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 4d  dif../*.** For M
16c0: 69 6e 47 57 20 76 65 72 73 69 6f 6e 20 34 2e 78  inGW version 4.x
16d0: 20 28 61 6e 64 20 68 69 67 68 65 72 29 2c 20 63   (and higher), c
16e0: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74  heck to see if t
16f0: 68 65 20 5f 55 53 45 5f 33 32 42 49 54 5f 54 49  he _USE_32BIT_TI
1700: 4d 45 5f 54 0a 2a 2a 20 64 65 66 69 6e 65 20 69  ME_T.** define i
1710: 73 20 72 65 71 75 69 72 65 64 20 74 6f 20 6d 61  s required to ma
1720: 69 6e 74 61 69 6e 20 62 69 6e 61 72 79 20 63 6f  intain binary co
1730: 6d 70 61 74 69 62 69 6c 69 74 79 20 77 69 74 68  mpatibility with
1740: 20 74 68 65 20 4d 53 56 43 20 72 75 6e 74 69 6d   the MSVC runtim
1750: 65 0a 2a 2a 20 6c 69 62 72 61 72 79 20 69 6e 20  e.** library in 
1760: 75 73 65 20 28 65 2e 67 2e 20 66 6f 72 20 57 69  use (e.g. for Wi
1770: 6e 64 6f 77 73 20 58 50 29 2e 0a 2a 2f 0a 23 69  ndows XP)..*/.#i
1780: 66 20 21 64 65 66 69 6e 65 64 28 5f 55 53 45 5f  f !defined(_USE_
1790: 33 32 42 49 54 5f 54 49 4d 45 5f 54 29 20 26 26  32BIT_TIME_T) &&
17a0: 20 21 64 65 66 69 6e 65 64 28 5f 55 53 45 5f 36   !defined(_USE_6
17b0: 34 42 49 54 5f 54 49 4d 45 5f 54 29 20 26 26 20  4BIT_TIME_T) && 
17c0: 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 5f 57  \.    defined(_W
17d0: 49 4e 33 32 29 20 26 26 20 21 64 65 66 69 6e 65  IN32) && !define
17e0: 64 28 5f 57 49 4e 36 34 29 20 26 26 20 5c 0a 20  d(_WIN64) && \. 
17f0: 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 4d 49 4e     defined(__MIN
1800: 47 57 5f 4d 41 4a 4f 52 5f 56 45 52 53 49 4f 4e  GW_MAJOR_VERSION
1810: 29 20 26 26 20 5f 5f 4d 49 4e 47 57 5f 4d 41 4a  ) && __MINGW_MAJ
1820: 4f 52 5f 56 45 52 53 49 4f 4e 20 3e 3d 20 34 20  OR_VERSION >= 4 
1830: 26 26 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64  && \.    defined
1840: 28 5f 5f 4d 53 56 43 52 54 5f 5f 29 0a 23 20 64  (__MSVCRT__).# d
1850: 65 66 69 6e 65 20 5f 55 53 45 5f 33 32 42 49 54  efine _USE_32BIT
1860: 5f 54 49 4d 45 5f 54 0a 23 65 6e 64 69 66 0a 0a  _TIME_T.#endif..
1870: 2f 2a 20 54 68 65 20 70 75 62 6c 69 63 20 53 51  /* The public SQ
1880: 4c 69 74 65 20 69 6e 74 65 72 66 61 63 65 2e 20  Lite interface. 
1890: 20 54 68 65 20 5f 46 49 4c 45 5f 4f 46 46 53 45   The _FILE_OFFSE
18a0: 54 5f 42 49 54 53 20 6d 61 63 72 6f 20 6d 75 73  T_BITS macro mus
18b0: 74 20 61 70 70 65 61 72 0a 2a 2a 20 66 69 72 73  t appear.** firs
18c0: 74 20 69 6e 20 51 4e 58 2e 20 20 41 6c 73 6f 2c  t in QNX.  Also,
18d0: 20 74 68 65 20 5f 55 53 45 5f 33 32 42 49 54 5f   the _USE_32BIT_
18e0: 54 49 4d 45 5f 54 20 6d 61 63 72 6f 20 6d 75 73  TIME_T macro mus
18f0: 74 20 61 70 70 65 61 72 20 66 69 72 73 74 20 66  t appear first f
1900: 6f 72 0a 2a 2a 20 4d 69 6e 47 57 2e 0a 2a 2f 0a  or.** MinGW..*/.
1910: 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65  #include "sqlite
1920: 33 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c  3.h"../*.** Incl
1930: 75 64 65 20 74 68 65 20 63 6f 6e 66 69 67 75 72  ude the configur
1940: 61 74 69 6f 6e 20 68 65 61 64 65 72 20 6f 75 74  ation header out
1950: 70 75 74 20 62 79 20 27 63 6f 6e 66 69 67 75 72  put by 'configur
1960: 65 27 20 69 66 20 77 65 27 72 65 20 75 73 69 6e  e' if we're usin
1970: 67 20 74 68 65 0a 2a 2a 20 61 75 74 6f 63 6f 6e  g the.** autocon
1980: 66 2d 62 61 73 65 64 20 62 75 69 6c 64 0a 2a 2f  f-based build.*/
1990: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 48 41  .#if defined(_HA
19a0: 56 45 5f 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47  VE_SQLITE_CONFIG
19b0: 5f 48 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  _H) && !defined(
19c0: 53 51 4c 49 54 45 43 4f 4e 46 49 47 5f 48 29 0a  SQLITECONFIG_H).
19d0: 23 69 6e 63 6c 75 64 65 20 22 63 6f 6e 66 69 67  #include "config
19e0: 2e 68 22 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .h".#define SQLI
19f0: 54 45 43 4f 4e 46 49 47 5f 48 20 31 0a 23 65 6e  TECONFIG_H 1.#en
1a00: 64 69 66 0a 0a 23 69 6e 63 6c 75 64 65 20 22 73  dif..#include "s
1a10: 71 6c 69 74 65 4c 69 6d 69 74 2e 68 22 0a 0a 2f  qliteLimit.h"../
1a20: 2a 20 44 69 73 61 62 6c 65 20 6e 75 69 73 61 6e  * Disable nuisan
1a30: 63 65 20 77 61 72 6e 69 6e 67 73 20 6f 6e 20 42  ce warnings on B
1a40: 6f 72 6c 61 6e 64 20 63 6f 6d 70 69 6c 65 72 73  orland compilers
1a50: 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28   */.#if defined(
1a60: 5f 5f 42 4f 52 4c 41 4e 44 43 5f 5f 29 0a 23 70  __BORLANDC__).#p
1a70: 72 61 67 6d 61 20 77 61 72 6e 20 2d 72 63 68 20  ragma warn -rch 
1a80: 2f 2a 20 75 6e 72 65 61 63 68 61 62 6c 65 20 63  /* unreachable c
1a90: 6f 64 65 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77  ode */.#pragma w
1aa0: 61 72 6e 20 2d 63 63 63 20 2f 2a 20 43 6f 6e 64  arn -ccc /* Cond
1ab0: 69 74 69 6f 6e 20 69 73 20 61 6c 77 61 79 73 20  ition is always 
1ac0: 74 72 75 65 20 6f 72 20 66 61 6c 73 65 20 2a 2f  true or false */
1ad0: 0a 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 61  .#pragma warn -a
1ae0: 75 73 20 2f 2a 20 41 73 73 69 67 6e 65 64 20 76  us /* Assigned v
1af0: 61 6c 75 65 20 69 73 20 6e 65 76 65 72 20 75 73  alue is never us
1b00: 65 64 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61  ed */.#pragma wa
1b10: 72 6e 20 2d 63 73 75 20 2f 2a 20 43 6f 6d 70 61  rn -csu /* Compa
1b20: 72 69 6e 67 20 73 69 67 6e 65 64 20 61 6e 64 20  ring signed and 
1b30: 75 6e 73 69 67 6e 65 64 20 2a 2f 0a 23 70 72 61  unsigned */.#pra
1b40: 67 6d 61 20 77 61 72 6e 20 2d 73 70 61 20 2f 2a  gma warn -spa /*
1b50: 20 53 75 73 70 69 63 69 6f 75 73 20 70 6f 69 6e   Suspicious poin
1b60: 74 65 72 20 61 72 69 74 68 6d 65 74 69 63 20 2a  ter arithmetic *
1b70: 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  /.#endif../*.** 
1b80: 49 6e 63 6c 75 64 65 20 73 74 61 6e 64 61 72 64  Include standard
1b90: 20 68 65 61 64 65 72 20 66 69 6c 65 73 20 61 73   header files as
1ba0: 20 6e 65 63 65 73 73 61 72 79 0a 2a 2f 0a 23 69   necessary.*/.#i
1bb0: 66 64 65 66 20 48 41 56 45 5f 53 54 44 49 4e 54  fdef HAVE_STDINT
1bc0: 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64  _H.#include <std
1bd0: 69 6e 74 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 69  int.h>.#endif.#i
1be0: 66 64 65 66 20 48 41 56 45 5f 49 4e 54 54 59 50  fdef HAVE_INTTYP
1bf0: 45 53 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c 69  ES_H.#include <i
1c00: 6e 74 74 79 70 65 73 2e 68 3e 0a 23 65 6e 64 69  nttypes.h>.#endi
1c10: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  f../*.** The fol
1c20: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 61 72  lowing macros ar
1c30: 65 20 75 73 65 64 20 74 6f 20 63 61 73 74 20 70  e used to cast p
1c40: 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e 74 65 67  ointers to integ
1c50: 65 72 73 20 61 6e 64 0a 2a 2a 20 69 6e 74 65 67  ers and.** integ
1c60: 65 72 73 20 74 6f 20 70 6f 69 6e 74 65 72 73 2e  ers to pointers.
1c70: 20 20 54 68 65 20 77 61 79 20 79 6f 75 20 64 6f    The way you do
1c80: 20 74 68 69 73 20 76 61 72 69 65 73 20 66 72 6f   this varies fro
1c90: 6d 20 6f 6e 65 20 63 6f 6d 70 69 6c 65 72 0a 2a  m one compiler.*
1ca0: 2a 20 74 6f 20 74 68 65 20 6e 65 78 74 2c 20 73  * to the next, s
1cb0: 6f 20 77 65 20 68 61 76 65 20 64 65 76 65 6c 6f  o we have develo
1cc0: 70 65 64 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  ped the followin
1cd0: 67 20 73 65 74 20 6f 66 20 23 69 66 20 73 74 61  g set of #if sta
1ce0: 74 65 6d 65 6e 74 73 0a 2a 2a 20 74 6f 20 67 65  tements.** to ge
1cf0: 6e 65 72 61 74 65 20 61 70 70 72 6f 70 72 69 61  nerate appropria
1d00: 74 65 20 6d 61 63 72 6f 73 20 66 6f 72 20 61 20  te macros for a 
1d10: 77 69 64 65 20 72 61 6e 67 65 20 6f 66 20 63 6f  wide range of co
1d20: 6d 70 69 6c 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 54  mpilers..**.** T
1d30: 68 65 20 63 6f 72 72 65 63 74 20 22 41 4e 53 49  he correct "ANSI
1d40: 22 20 77 61 79 20 74 6f 20 64 6f 20 74 68 69 73  " way to do this
1d50: 20 69 73 20 74 6f 20 75 73 65 20 74 68 65 20 69   is to use the i
1d60: 6e 74 70 74 72 5f 74 20 74 79 70 65 2e 0a 2a 2a  ntptr_t type..**
1d70: 20 55 6e 66 6f 72 74 75 6e 61 74 65 6c 79 2c 20   Unfortunately, 
1d80: 74 68 61 74 20 74 79 70 65 64 65 66 20 69 73 20  that typedef is 
1d90: 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 20 6f 6e  not available on
1da0: 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73 2c 20   all compilers, 
1db0: 6f 72 0a 2a 2a 20 69 66 20 69 74 20 69 73 20 61  or.** if it is a
1dc0: 76 61 69 6c 61 62 6c 65 2c 20 69 74 20 72 65 71  vailable, it req
1dd0: 75 69 72 65 73 20 61 6e 20 23 69 6e 63 6c 75 64  uires an #includ
1de0: 65 20 6f 66 20 73 70 65 63 69 66 69 63 20 68 65  e of specific he
1df0: 61 64 65 72 73 0a 2a 2a 20 74 68 61 74 20 76 61  aders.** that va
1e00: 72 79 20 66 72 6f 6d 20 6f 6e 65 20 6d 61 63 68  ry from one mach
1e10: 69 6e 65 20 74 6f 20 74 68 65 20 6e 65 78 74 2e  ine to the next.
1e20: 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20 23 33  .**.** Ticket #3
1e30: 38 36 30 3a 20 20 54 68 65 20 6c 6c 76 6d 2d 67  860:  The llvm-g
1e40: 63 63 2d 34 2e 32 20 63 6f 6d 70 69 6c 65 72 20  cc-4.2 compiler 
1e50: 66 72 6f 6d 20 41 70 70 6c 65 20 63 68 6f 6b 65  from Apple choke
1e60: 73 20 6f 6e 0a 2a 2a 20 74 68 65 20 28 28 76 6f  s on.** the ((vo
1e70: 69 64 2a 29 26 28 28 63 68 61 72 2a 29 30 29 5b  id*)&((char*)0)[
1e80: 58 5d 29 20 63 6f 6e 73 74 72 75 63 74 2e 20 20  X]) construct.  
1e90: 42 75 74 20 4d 53 56 43 20 63 68 6f 6b 65 73 20  But MSVC chokes 
1ea0: 6f 6e 20 28 28 76 6f 69 64 2a 29 28 58 29 29 2e  on ((void*)(X)).
1eb0: 0a 2a 2a 20 53 6f 20 77 65 20 68 61 76 65 20 74  .** So we have t
1ec0: 6f 20 64 65 66 69 6e 65 20 74 68 65 20 6d 61 63  o define the mac
1ed0: 72 6f 73 20 69 6e 20 64 69 66 66 65 72 65 6e 74  ros in different
1ee0: 20 77 61 79 73 20 64 65 70 65 6e 64 69 6e 67 20   ways depending 
1ef0: 6f 6e 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 69 6c  on the.** compil
1f00: 65 72 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  er..*/.#if defin
1f10: 65 64 28 48 41 56 45 5f 53 54 44 49 4e 54 5f 48  ed(HAVE_STDINT_H
1f20: 29 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73 20  )   /* Use this 
1f30: 63 61 73 65 20 69 66 20 77 65 20 68 61 76 65 20  case if we have 
1f40: 41 4e 53 49 20 68 65 61 64 65 72 73 20 2a 2f 0a  ANSI headers */.
1f50: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
1f60: 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20 28  INT_TO_PTR(X)  (
1f70: 28 76 6f 69 64 2a 29 28 69 6e 74 70 74 72 5f 74  (void*)(intptr_t
1f80: 29 28 58 29 29 0a 23 20 64 65 66 69 6e 65 20 53  )(X)).# define S
1f90: 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54  QLITE_PTR_TO_INT
1fa0: 28 58 29 20 20 28 28 69 6e 74 29 28 69 6e 74 70  (X)  ((int)(intp
1fb0: 74 72 5f 74 29 28 58 29 29 0a 23 65 6c 69 66 20  tr_t)(X)).#elif 
1fc0: 64 65 66 69 6e 65 64 28 5f 5f 50 54 52 44 49 46  defined(__PTRDIF
1fd0: 46 5f 54 59 50 45 5f 5f 29 20 20 2f 2a 20 54 68  F_TYPE__)  /* Th
1fe0: 69 73 20 63 61 73 65 20 73 68 6f 75 6c 64 20 77  is case should w
1ff0: 6f 72 6b 20 66 6f 72 20 47 43 43 20 2a 2f 0a 23  ork for GCC */.#
2000: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49   define SQLITE_I
2010: 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28  NT_TO_PTR(X)  ((
2020: 76 6f 69 64 2a 29 28 5f 5f 50 54 52 44 49 46 46  void*)(__PTRDIFF
2030: 5f 54 59 50 45 5f 5f 29 28 58 29 29 0a 23 20 64  _TYPE__)(X)).# d
2040: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52  efine SQLITE_PTR
2050: 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69 6e  _TO_INT(X)  ((in
2060: 74 29 28 5f 5f 50 54 52 44 49 46 46 5f 54 59 50  t)(__PTRDIFF_TYP
2070: 45 5f 5f 29 28 58 29 29 0a 23 65 6c 69 66 20 21  E__)(X)).#elif !
2080: 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f  defined(__GNUC__
2090: 29 20 20 20 20 20 20 20 2f 2a 20 57 6f 72 6b 73  )       /* Works
20a0: 20 66 6f 72 20 63 6f 6d 70 69 6c 65 72 73 20 6f   for compilers o
20b0: 74 68 65 72 20 74 68 61 6e 20 4c 4c 56 4d 20 2a  ther than LLVM *
20c0: 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  /.# define SQLIT
20d0: 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20  E_INT_TO_PTR(X) 
20e0: 20 28 28 76 6f 69 64 2a 29 26 28 28 63 68 61 72   ((void*)&((char
20f0: 2a 29 30 29 5b 58 5d 29 0a 23 20 64 65 66 69 6e  *)0)[X]).# defin
2100: 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f  e SQLITE_PTR_TO_
2110: 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28 28  INT(X)  ((int)((
2120: 28 63 68 61 72 2a 29 58 29 2d 28 63 68 61 72 2a  (char*)X)-(char*
2130: 29 30 29 29 0a 23 65 6c 73 65 20 20 20 20 20 20  )0)).#else      
2140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2150: 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 73      /* Generates
2160: 20 61 20 77 61 72 6e 69 6e 67 20 2d 20 62 75 74   a warning - but
2170: 20 69 74 20 61 6c 77 61 79 73 20 77 6f 72 6b 73   it always works
2180: 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c   */.# define SQL
2190: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58  ITE_INT_TO_PTR(X
21a0: 29 20 20 28 28 76 6f 69 64 2a 29 28 58 29 29 0a  )  ((void*)(X)).
21b0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
21c0: 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28  PTR_TO_INT(X)  (
21d0: 28 69 6e 74 29 28 58 29 29 0a 23 65 6e 64 69 66  (int)(X)).#endif
21e0: 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63 72 6f 20  ../*.** A macro 
21f0: 74 6f 20 68 69 6e 74 20 74 6f 20 74 68 65 20 63  to hint to the c
2200: 6f 6d 70 69 6c 65 72 20 74 68 61 74 20 61 20 66  ompiler that a f
2210: 75 6e 63 74 69 6f 6e 20 73 68 6f 75 6c 64 20 6e  unction should n
2220: 6f 74 20 62 65 0a 2a 2a 20 69 6e 6c 69 6e 65 64  ot be.** inlined
2230: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
2240: 28 5f 5f 47 4e 55 43 5f 5f 29 0a 23 20 20 64 65  (__GNUC__).#  de
2250: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e  fine SQLITE_NOIN
2260: 4c 49 4e 45 20 20 5f 5f 61 74 74 72 69 62 75 74  LINE  __attribut
2270: 65 5f 5f 28 28 6e 6f 69 6e 6c 69 6e 65 29 29 0a  e__((noinline)).
2280: 23 65 6c 69 66 20 64 65 66 69 6e 65 64 28 5f 4d  #elif defined(_M
2290: 53 43 5f 56 45 52 29 20 26 26 20 5f 4d 53 43 5f  SC_VER) && _MSC_
22a0: 56 45 52 3e 3d 31 33 31 30 0a 23 20 20 64 65 66  VER>=1310.#  def
22b0: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c  ine SQLITE_NOINL
22c0: 49 4e 45 20 20 5f 5f 64 65 63 6c 73 70 65 63 28  INE  __declspec(
22d0: 6e 6f 69 6e 6c 69 6e 65 29 0a 23 65 6c 73 65 0a  noinline).#else.
22e0: 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  #  define SQLITE
22f0: 5f 4e 4f 49 4e 4c 49 4e 45 0a 23 65 6e 64 69 66  _NOINLINE.#endif
2300: 0a 0a 2f 2a 0a 2a 2a 20 4d 61 6b 65 20 73 75 72  ../*.** Make sur
2310: 65 20 74 68 61 74 20 74 68 65 20 63 6f 6d 70 69  e that the compi
2320: 6c 65 72 20 69 6e 74 72 69 6e 73 69 63 73 20 77  ler intrinsics w
2330: 65 20 64 65 73 69 72 65 20 61 72 65 20 65 6e 61  e desire are ena
2340: 62 6c 65 64 20 77 68 65 6e 0a 2a 2a 20 63 6f 6d  bled when.** com
2350: 70 69 6c 69 6e 67 20 77 69 74 68 20 61 6e 20 61  piling with an a
2360: 70 70 72 6f 70 72 69 61 74 65 20 76 65 72 73 69  ppropriate versi
2370: 6f 6e 20 6f 66 20 4d 53 56 43 20 75 6e 6c 65 73  on of MSVC unles
2380: 73 20 70 72 65 76 65 6e 74 65 64 20 62 79 0a 2a  s prevented by.*
2390: 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 44 49 53  * the SQLITE_DIS
23a0: 41 42 4c 45 5f 49 4e 54 52 49 4e 53 49 43 20 64  ABLE_INTRINSIC d
23b0: 65 66 69 6e 65 2e 0a 2a 2f 0a 23 69 66 20 21 64  efine..*/.#if !d
23c0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 49  efined(SQLITE_DI
23d0: 53 41 42 4c 45 5f 49 4e 54 52 49 4e 53 49 43 29  SABLE_INTRINSIC)
23e0: 0a 23 20 20 69 66 20 64 65 66 69 6e 65 64 28 5f  .#  if defined(_
23f0: 4d 53 43 5f 56 45 52 29 20 26 26 20 5f 4d 53 43  MSC_VER) && _MSC
2400: 5f 56 45 52 3e 3d 31 34 30 30 0a 23 20 20 20 20  _VER>=1400.#    
2410: 69 66 20 21 64 65 66 69 6e 65 64 28 5f 57 49 4e  if !defined(_WIN
2420: 33 32 5f 57 43 45 29 0a 23 20 20 20 20 20 20 69  32_WCE).#      i
2430: 6e 63 6c 75 64 65 20 3c 69 6e 74 72 69 6e 2e 68  nclude <intrin.h
2440: 3e 0a 23 20 20 20 20 20 20 70 72 61 67 6d 61 20  >.#      pragma 
2450: 69 6e 74 72 69 6e 73 69 63 28 5f 62 79 74 65 73  intrinsic(_bytes
2460: 77 61 70 5f 75 73 68 6f 72 74 29 0a 23 20 20 20  wap_ushort).#   
2470: 20 20 20 70 72 61 67 6d 61 20 69 6e 74 72 69 6e     pragma intrin
2480: 73 69 63 28 5f 62 79 74 65 73 77 61 70 5f 75 6c  sic(_byteswap_ul
2490: 6f 6e 67 29 0a 23 20 20 20 20 20 20 70 72 61 67  ong).#      prag
24a0: 6d 61 20 69 6e 74 72 69 6e 73 69 63 28 5f 62 79  ma intrinsic(_by
24b0: 74 65 73 77 61 70 5f 75 69 6e 74 36 34 29 0a 23  teswap_uint64).#
24c0: 20 20 20 20 20 20 70 72 61 67 6d 61 20 69 6e 74        pragma int
24d0: 72 69 6e 73 69 63 28 5f 52 65 61 64 57 72 69 74  rinsic(_ReadWrit
24e0: 65 42 61 72 72 69 65 72 29 0a 23 20 20 20 20 65  eBarrier).#    e
24f0: 6c 73 65 0a 23 20 20 20 20 20 20 69 6e 63 6c 75  lse.#      inclu
2500: 64 65 20 3c 63 6d 6e 69 6e 74 72 69 6e 2e 68 3e  de <cmnintrin.h>
2510: 0a 23 20 20 20 20 65 6e 64 69 66 0a 23 20 20 65  .#    endif.#  e
2520: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ndif.#endif../*.
2530: 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 54 48  ** The SQLITE_TH
2540: 52 45 41 44 53 41 46 45 20 6d 61 63 72 6f 20 6d  READSAFE macro m
2550: 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20 61  ust be defined a
2560: 73 20 30 2c 20 31 2c 20 6f 72 20 32 2e 0a 2a 2a  s 0, 1, or 2..**
2570: 20 30 20 6d 65 61 6e 73 20 6d 75 74 65 78 65 73   0 means mutexes
2580: 20 61 72 65 20 70 65 72 6d 61 6e 65 6e 74 6c 79   are permanently
2590: 20 64 69 73 61 62 6c 65 20 61 6e 64 20 74 68 65   disable and the
25a0: 20 6c 69 62 72 61 72 79 20 69 73 20 6e 65 76 65   library is neve
25b0: 72 0a 2a 2a 20 74 68 72 65 61 64 73 61 66 65 2e  r.** threadsafe.
25c0: 20 20 31 20 6d 65 61 6e 73 20 74 68 65 20 6c 69    1 means the li
25d0: 62 72 61 72 79 20 69 73 20 73 65 72 69 61 6c 69  brary is seriali
25e0: 7a 65 64 20 77 68 69 63 68 20 69 73 20 74 68 65  zed which is the
25f0: 20 68 69 67 68 65 73 74 0a 2a 2a 20 6c 65 76 65   highest.** leve
2600: 6c 20 6f 66 20 74 68 72 65 61 64 73 61 66 65 74  l of threadsafet
2610: 79 2e 20 20 32 20 6d 65 61 6e 73 20 74 68 65 20  y.  2 means the 
2620: 6c 69 62 72 61 72 79 20 69 73 20 6d 75 6c 74 69  library is multi
2630: 74 68 72 65 61 64 65 64 20 2d 20 6d 75 6c 74 69  threaded - multi
2640: 70 6c 65 0a 2a 2a 20 74 68 72 65 61 64 73 20 63  ple.** threads c
2650: 61 6e 20 75 73 65 20 53 51 4c 69 74 65 20 61 73  an use SQLite as
2660: 20 6c 6f 6e 67 20 61 73 20 6e 6f 20 74 77 6f 20   long as no two 
2670: 74 68 72 65 61 64 73 20 74 72 79 20 74 6f 20 75  threads try to u
2680: 73 65 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 64  se the same.** d
2690: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
26a0: 6f 6e 20 61 74 20 74 68 65 20 73 61 6d 65 20 74  on at the same t
26b0: 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 4f 6c 64 65 72  ime..**.** Older
26c0: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
26d0: 69 74 65 20 75 73 65 64 20 61 6e 20 6f 70 74 69  ite used an opti
26e0: 6f 6e 61 6c 20 54 48 52 45 41 44 53 41 46 45 20  onal THREADSAFE 
26f0: 6d 61 63 72 6f 2e 0a 2a 2a 20 57 65 20 73 75 70  macro..** We sup
2700: 70 6f 72 74 20 74 68 61 74 20 66 6f 72 20 6c 65  port that for le
2710: 67 61 63 79 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 65  gacy..**.** To e
2720: 6e 73 75 72 65 20 74 68 61 74 20 74 68 65 20 63  nsure that the c
2730: 6f 72 72 65 63 74 20 76 61 6c 75 65 20 6f 66 20  orrect value of 
2740: 22 54 48 52 45 41 44 53 41 46 45 22 20 69 73 20  "THREADSAFE" is 
2750: 72 65 70 6f 72 74 65 64 20 77 68 65 6e 20 71 75  reported when qu
2760: 65 72 79 69 6e 67 0a 2a 2a 20 66 6f 72 20 63 6f  erying.** for co
2770: 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
2780: 6e 73 20 61 74 20 72 75 6e 74 69 6d 65 20 28 65  ns at runtime (e
2790: 2e 67 2e 20 22 50 52 41 47 4d 41 20 63 6f 6d 70  .g. "PRAGMA comp
27a0: 69 6c 65 5f 6f 70 74 69 6f 6e 73 22 29 2c 20 74  ile_options"), t
27b0: 68 69 73 0a 2a 2a 20 6c 6f 67 69 63 20 69 73 20  his.** logic is 
27c0: 70 61 72 74 69 61 6c 6c 79 20 72 65 70 6c 69 63  partially replic
27d0: 61 74 65 64 20 69 6e 20 63 74 69 6d 65 2e 63 2e  ated in ctime.c.
27e0: 20 49 66 20 69 74 20 69 73 20 75 70 64 61 74 65   If it is update
27f0: 64 20 68 65 72 65 2c 20 69 74 20 73 68 6f 75 6c  d here, it shoul
2800: 64 0a 2a 2a 20 61 6c 73 6f 20 62 65 20 75 70 64  d.** also be upd
2810: 61 74 65 64 20 74 68 65 72 65 2e 0a 2a 2f 0a 23  ated there..*/.#
2820: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
2830: 54 45 5f 54 48 52 45 41 44 53 41 46 45 29 0a 23  TE_THREADSAFE).#
2840: 20 69 66 20 64 65 66 69 6e 65 64 28 54 48 52 45   if defined(THRE
2850: 41 44 53 41 46 45 29 0a 23 20 20 20 64 65 66 69  ADSAFE).#   defi
2860: 6e 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44  ne SQLITE_THREAD
2870: 53 41 46 45 20 54 48 52 45 41 44 53 41 46 45 0a  SAFE THREADSAFE.
2880: 23 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e  # else.#   defin
2890: 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53  e SQLITE_THREADS
28a0: 41 46 45 20 31 20 2f 2a 20 49 4d 50 3a 20 52 2d  AFE 1 /* IMP: R-
28b0: 30 37 32 37 32 2d 32 32 33 30 39 20 2a 2f 0a 23  07272-22309 */.#
28c0: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f   endif.#endif../
28d0: 2a 0a 2a 2a 20 50 6f 77 65 72 73 61 66 65 20 6f  *.** Powersafe o
28e0: 76 65 72 77 72 69 74 65 20 69 73 20 6f 6e 20 62  verwrite is on b
28f0: 79 20 64 65 66 61 75 6c 74 2e 20 20 42 75 74 20  y default.  But 
2900: 63 61 6e 20 62 65 20 74 75 72 6e 65 64 20 6f 66  can be turned of
2910: 66 20 75 73 69 6e 67 0a 2a 2a 20 74 68 65 20 2d  f using.** the -
2920: 44 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41 46  DSQLITE_POWERSAF
2930: 45 5f 4f 56 45 52 57 52 49 54 45 3d 30 20 63 6f  E_OVERWRITE=0 co
2940: 6d 6d 61 6e 64 2d 6c 69 6e 65 20 6f 70 74 69 6f  mmand-line optio
2950: 6e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  n..*/.#ifndef SQ
2960: 4c 49 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f  LITE_POWERSAFE_O
2970: 56 45 52 57 52 49 54 45 0a 23 20 64 65 66 69 6e  VERWRITE.# defin
2980: 65 20 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41  e SQLITE_POWERSA
2990: 46 45 5f 4f 56 45 52 57 52 49 54 45 20 31 0a 23  FE_OVERWRITE 1.#
29a0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 56 49  endif../*.** EVI
29b0: 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 32 35 37 31  DENCE-OF: R-2571
29c0: 35 2d 33 37 30 37 32 20 4d 65 6d 6f 72 79 20 61  5-37072 Memory a
29d0: 6c 6c 6f 63 61 74 69 6f 6e 20 73 74 61 74 69 73  llocation statis
29e0: 74 69 63 73 20 61 72 65 20 65 6e 61 62 6c 65 64  tics are enabled
29f0: 20 62 79 0a 2a 2a 20 64 65 66 61 75 6c 74 20 75   by.** default u
2a00: 6e 6c 65 73 73 20 53 51 4c 69 74 65 20 69 73 20  nless SQLite is 
2a10: 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 53 51  compiled with SQ
2a20: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d  LITE_DEFAULT_MEM
2a30: 53 54 41 54 55 53 3d 30 20 69 6e 0a 2a 2a 20 77  STATUS=0 in.** w
2a40: 68 69 63 68 20 63 61 73 65 20 6d 65 6d 6f 72 79  hich case memory
2a50: 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 74 61 74   allocation stat
2a60: 69 73 74 69 63 73 20 61 72 65 20 64 69 73 61 62  istics are disab
2a70: 6c 65 64 20 62 79 20 64 65 66 61 75 6c 74 2e 0a  led by default..
2a80: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
2a90: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
2aa0: 45 4d 53 54 41 54 55 53 29 0a 23 20 64 65 66 69  EMSTATUS).# defi
2ab0: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
2ac0: 54 5f 4d 45 4d 53 54 41 54 55 53 20 31 0a 23 65  T_MEMSTATUS 1.#e
2ad0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 78 61 63  ndif../*.** Exac
2ae0: 74 6c 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 66  tly one of the f
2af0: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20  ollowing macros 
2b00: 6d 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20  must be defined 
2b10: 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 73  in order to.** s
2b20: 70 65 63 69 66 79 20 77 68 69 63 68 20 6d 65 6d  pecify which mem
2b30: 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73  ory allocation s
2b40: 75 62 73 79 73 74 65 6d 20 74 6f 20 75 73 65 2e  ubsystem to use.
2b50: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54  .**.**     SQLIT
2b60: 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20  E_SYSTEM_MALLOC 
2b70: 20 20 20 20 20 20 20 20 20 2f 2f 20 55 73 65 20           // Use 
2b80: 6e 6f 72 6d 61 6c 20 73 79 73 74 65 6d 20 6d 61  normal system ma
2b90: 6c 6c 6f 63 28 29 0a 2a 2a 20 20 20 20 20 53 51  lloc().**     SQ
2ba0: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
2bb0: 43 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55  C           // U
2bc0: 73 65 20 57 69 6e 33 32 20 6e 61 74 69 76 65 20  se Win32 native 
2bd0: 68 65 61 70 20 41 50 49 0a 2a 2a 20 20 20 20 20  heap API.**     
2be0: 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c  SQLITE_ZERO_MALL
2bf0: 4f 43 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  OC            //
2c00: 20 55 73 65 20 61 20 73 74 75 62 20 61 6c 6c 6f   Use a stub allo
2c10: 63 61 74 6f 72 20 74 68 61 74 20 61 6c 77 61 79  cator that alway
2c20: 73 20 66 61 69 6c 73 0a 2a 2a 20 20 20 20 20 53  s fails.**     S
2c30: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 20  QLITE_MEMDEBUG  
2c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2c50: 44 65 62 75 67 67 69 6e 67 20 76 65 72 73 69 6f  Debugging versio
2c60: 6e 20 6f 66 20 73 79 73 74 65 6d 20 6d 61 6c 6c  n of system mall
2c70: 6f 63 28 29 0a 2a 2a 0a 2a 2a 20 4f 6e 20 57 69  oc().**.** On Wi
2c80: 6e 64 6f 77 73 2c 20 69 66 20 74 68 65 20 53 51  ndows, if the SQ
2c90: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
2ca0: 43 5f 56 41 4c 49 44 41 54 45 20 6d 61 63 72 6f  C_VALIDATE macro
2cb0: 20 69 73 20 64 65 66 69 6e 65 64 20 61 6e 64 20   is defined and 
2cc0: 74 68 65 0a 2a 2a 20 61 73 73 65 72 74 28 29 20  the.** assert() 
2cd0: 6d 61 63 72 6f 20 69 73 20 65 6e 61 62 6c 65 64  macro is enabled
2ce0: 2c 20 65 61 63 68 20 63 61 6c 6c 20 69 6e 74 6f  , each call into
2cf0: 20 74 68 65 20 57 69 6e 33 32 20 6e 61 74 69 76   the Win32 nativ
2d00: 65 20 68 65 61 70 20 73 75 62 73 79 73 74 65 6d  e heap subsystem
2d10: 0a 2a 2a 20 77 69 6c 6c 20 63 61 75 73 65 20 48  .** will cause H
2d20: 65 61 70 56 61 6c 69 64 61 74 65 20 74 6f 20 62  eapValidate to b
2d30: 65 20 63 61 6c 6c 65 64 2e 20 20 49 66 20 68 65  e called.  If he
2d40: 61 70 20 76 61 6c 69 64 61 74 69 6f 6e 20 73 68  ap validation sh
2d50: 6f 75 6c 64 20 66 61 69 6c 2c 20 61 6e 0a 2a 2a  ould fail, an.**
2d60: 20 61 73 73 65 72 74 69 6f 6e 20 77 69 6c 6c 20   assertion will 
2d70: 62 65 20 74 72 69 67 67 65 72 65 64 2e 0a 2a 2a  be triggered..**
2d80: 0a 2a 2a 20 49 66 20 6e 6f 6e 65 20 6f 66 20 74  .** If none of t
2d90: 68 65 20 61 62 6f 76 65 20 61 72 65 20 64 65 66  he above are def
2da0: 69 6e 65 64 2c 20 74 68 65 6e 20 73 65 74 20 53  ined, then set S
2db0: 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c  QLITE_SYSTEM_MAL
2dc0: 4c 4f 43 20 61 73 0a 2a 2a 20 74 68 65 20 64 65  LOC as.** the de
2dd0: 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66 20 64 65  fault..*/.#if de
2de0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 53 59 53  fined(SQLITE_SYS
2df0: 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20  TEM_MALLOC) \.  
2e00: 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  + defined(SQLITE
2e10: 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c  _WIN32_MALLOC) \
2e20: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
2e30: 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29  ITE_ZERO_MALLOC)
2e40: 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53   \.  + defined(S
2e50: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 3e  QLITE_MEMDEBUG)>
2e60: 31 0a 23 20 65 72 72 6f 72 20 22 54 77 6f 20 6f  1.# error "Two o
2e70: 72 20 6d 6f 72 65 20 6f 66 20 74 68 65 20 66 6f  r more of the fo
2e80: 6c 6c 6f 77 69 6e 67 20 63 6f 6d 70 69 6c 65 2d  llowing compile-
2e90: 74 69 6d 65 20 63 6f 6e 66 69 67 75 72 61 74 69  time configurati
2ea0: 6f 6e 20 6f 70 74 69 6f 6e 73 5c 0a 20 61 72 65  on options\. are
2eb0: 20 64 65 66 69 6e 65 64 20 62 75 74 20 61 74 20   defined but at 
2ec0: 6d 6f 73 74 20 6f 6e 65 20 69 73 20 61 6c 6c 6f  most one is allo
2ed0: 77 65 64 3a 5c 0a 20 53 51 4c 49 54 45 5f 53 59  wed:\. SQLITE_SY
2ee0: 53 54 45 4d 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c  STEM_MALLOC, SQL
2ef0: 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43  ITE_WIN32_MALLOC
2f00: 2c 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  , SQLITE_MEMDEBU
2f10: 47 2c 5c 0a 20 53 51 4c 49 54 45 5f 5a 45 52 4f  G,\. SQLITE_ZERO
2f20: 5f 4d 41 4c 4c 4f 43 22 0a 23 65 6e 64 69 66 0a  _MALLOC".#endif.
2f30: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
2f40: 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43  TE_SYSTEM_MALLOC
2f50: 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28  ) \.  + defined(
2f60: 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c  SQLITE_WIN32_MAL
2f70: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
2f80: 65 64 28 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d  ed(SQLITE_ZERO_M
2f90: 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66  ALLOC) \.  + def
2fa0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44  ined(SQLITE_MEMD
2fb0: 45 42 55 47 29 3d 3d 30 0a 23 20 64 65 66 69 6e  EBUG)==0.# defin
2fc0: 65 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f  e SQLITE_SYSTEM_
2fd0: 4d 41 4c 4c 4f 43 20 31 0a 23 65 6e 64 69 66 0a  MALLOC 1.#endif.
2fe0: 0a 2f 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45  ./*.** If SQLITE
2ff0: 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d  _MALLOC_SOFT_LIM
3000: 49 54 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  IT is not zero, 
3010: 74 68 65 6e 20 74 72 79 20 74 6f 20 6b 65 65 70  then try to keep
3020: 20 74 68 65 0a 2a 2a 20 73 69 7a 65 73 20 6f 66   the.** sizes of
3030: 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
3040: 6f 6e 73 20 62 65 6c 6f 77 20 74 68 69 73 20 76  ons below this v
3050: 61 6c 75 65 20 77 68 65 72 65 20 70 6f 73 73 69  alue where possi
3060: 62 6c 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66  ble..*/.#if !def
3070: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 41 4c 4c  ined(SQLITE_MALL
3080: 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54 29 0a 23  OC_SOFT_LIMIT).#
3090: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
30a0: 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54  ALLOC_SOFT_LIMIT
30b0: 20 31 30 32 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a   1024.#endif../*
30c0: 0a 2a 2a 20 57 65 20 6e 65 65 64 20 74 6f 20 64  .** We need to d
30d0: 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55  efine _XOPEN_SOU
30e0: 52 43 45 20 61 73 20 66 6f 6c 6c 6f 77 73 20 69  RCE as follows i
30f0: 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e 61 62 6c  n order to enabl
3100: 65 0a 2a 2a 20 72 65 63 75 72 73 69 76 65 20 6d  e.** recursive m
3110: 75 74 65 78 65 73 20 6f 6e 20 6d 6f 73 74 20 55  utexes on most U
3120: 6e 69 78 20 73 79 73 74 65 6d 73 20 61 6e 64 20  nix systems and 
3130: 66 63 68 6d 6f 64 28 29 20 6f 6e 20 4f 70 65 6e  fchmod() on Open
3140: 42 53 44 2e 0a 2a 2a 20 42 75 74 20 5f 58 4f 50  BSD..** But _XOP
3150: 45 4e 5f 53 4f 55 52 43 45 20 64 65 66 69 6e 65  EN_SOURCE define
3160: 20 63 61 75 73 65 73 20 70 72 6f 62 6c 65 6d 73   causes problems
3170: 20 66 6f 72 20 4d 61 63 20 4f 53 20 58 2c 20 73   for Mac OS X, s
3180: 6f 20 6f 6d 69 74 0a 2a 2a 20 69 74 2e 0a 2a 2f  o omit.** it..*/
3190: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f 58  .#if !defined(_X
31a0: 4f 50 45 4e 5f 53 4f 55 52 43 45 29 20 26 26 20  OPEN_SOURCE) && 
31b0: 21 64 65 66 69 6e 65 64 28 5f 5f 44 41 52 57 49  !defined(__DARWI
31c0: 4e 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64  N__) && !defined
31d0: 28 5f 5f 41 50 50 4c 45 5f 5f 29 0a 23 20 20 64  (__APPLE__).#  d
31e0: 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55  efine _XOPEN_SOU
31f0: 52 43 45 20 36 30 30 0a 23 65 6e 64 69 66 0a 0a  RCE 600.#endif..
3200: 2f 2a 0a 2a 2a 20 4e 44 45 42 55 47 20 61 6e 64  /*.** NDEBUG and
3210: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 61 72   SQLITE_DEBUG ar
3220: 65 20 6f 70 70 6f 73 69 74 65 73 2e 20 20 49 74  e opposites.  It
3230: 20 73 68 6f 75 6c 64 20 61 6c 77 61 79 73 20 62   should always b
3240: 65 20 74 72 75 65 20 74 68 61 74 0a 2a 2a 20 64  e true that.** d
3250: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 3d 3d  efined(NDEBUG)==
3260: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
3270: 44 45 42 55 47 29 2e 20 20 49 66 20 74 68 69 73  DEBUG).  If this
3280: 20 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c   is not currentl
3290: 79 20 74 72 75 65 2c 0a 2a 2a 20 6d 61 6b 65 20  y true,.** make 
32a0: 69 74 20 74 72 75 65 20 62 79 20 64 65 66 69 6e  it true by defin
32b0: 69 6e 67 20 6f 72 20 75 6e 64 65 66 69 6e 69 6e  ing or undefinin
32c0: 67 20 4e 44 45 42 55 47 2e 0a 2a 2a 0a 2a 2a 20  g NDEBUG..**.** 
32d0: 53 65 74 74 69 6e 67 20 4e 44 45 42 55 47 20 6d  Setting NDEBUG m
32e0: 61 6b 65 73 20 74 68 65 20 63 6f 64 65 20 73 6d  akes the code sm
32f0: 61 6c 6c 65 72 20 61 6e 64 20 66 61 73 74 65 72  aller and faster
3300: 20 62 79 20 64 69 73 61 62 6c 69 6e 67 20 74 68   by disabling th
3310: 65 0a 2a 2a 20 61 73 73 65 72 74 28 29 20 73 74  e.** assert() st
3320: 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20  atements in the 
3330: 63 6f 64 65 2e 20 20 53 6f 20 77 65 20 77 61 6e  code.  So we wan
3340: 74 20 74 68 65 20 64 65 66 61 75 6c 74 20 61 63  t the default ac
3350: 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 66 6f  tion.** to be fo
3360: 72 20 4e 44 45 42 55 47 20 74 6f 20 62 65 20 73  r NDEBUG to be s
3370: 65 74 20 61 6e 64 20 4e 44 45 42 55 47 20 74 6f  et and NDEBUG to
3380: 20 62 65 20 75 6e 64 65 66 69 6e 65 64 20 6f 6e   be undefined on
3390: 6c 79 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42  ly if SQLITE_DEB
33a0: 55 47 0a 2a 2a 20 69 73 20 73 65 74 2e 20 20 54  UG.** is set.  T
33b0: 68 75 73 20 4e 44 45 42 55 47 20 62 65 63 6f 6d  hus NDEBUG becom
33c0: 65 73 20 61 6e 20 6f 70 74 2d 69 6e 20 72 61 74  es an opt-in rat
33d0: 68 65 72 20 74 68 61 6e 20 61 6e 20 6f 70 74 2d  her than an opt-
33e0: 6f 75 74 0a 2a 2a 20 66 65 61 74 75 72 65 2e 0a  out.** feature..
33f0: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
3400: 4e 44 45 42 55 47 29 20 26 26 20 21 64 65 66 69  NDEBUG) && !defi
3410: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
3420: 29 0a 23 20 64 65 66 69 6e 65 20 4e 44 45 42 55  ).# define NDEBU
3430: 47 20 31 0a 23 65 6e 64 69 66 0a 23 69 66 20 64  G 1.#endif.#if d
3440: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20 26  efined(NDEBUG) &
3450: 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  & defined(SQLITE
3460: 5f 44 45 42 55 47 29 0a 23 20 75 6e 64 65 66 20  _DEBUG).# undef 
3470: 4e 44 45 42 55 47 0a 23 65 6e 64 69 66 0a 0a 2f  NDEBUG.#endif../
3480: 2a 0a 2a 2a 20 45 6e 61 62 6c 65 20 53 51 4c 49  *.** Enable SQLI
3490: 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49  TE_ENABLE_EXPLAI
34a0: 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69 66 20 53 51  N_COMMENTS if SQ
34b0: 4c 49 54 45 5f 44 45 42 55 47 20 69 73 20 74 75  LITE_DEBUG is tu
34c0: 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66 20  rned on..*/.#if 
34d0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
34e0: 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e 5f 43  ENABLE_EXPLAIN_C
34f0: 4f 4d 4d 45 4e 54 53 29 20 26 26 20 64 65 66 69  OMMENTS) && defi
3500: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
3510: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
3520: 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e  E_ENABLE_EXPLAIN
3530: 5f 43 4f 4d 4d 45 4e 54 53 20 31 0a 23 65 6e 64  _COMMENTS 1.#end
3540: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 74 65  if../*.** The te
3550: 73 74 63 61 73 65 28 29 20 6d 61 63 72 6f 20 69  stcase() macro i
3560: 73 20 75 73 65 64 20 74 6f 20 61 69 64 20 69 6e  s used to aid in
3570: 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e   coverage testin
3580: 67 2e 20 20 57 68 65 6e 0a 2a 2a 20 64 6f 69 6e  g.  When.** doin
3590: 67 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69  g coverage testi
35a0: 6e 67 2c 20 74 68 65 20 63 6f 6e 64 69 74 69 6f  ng, the conditio
35b0: 6e 20 69 6e 73 69 64 65 20 74 68 65 20 61 72 67  n inside the arg
35c0: 75 6d 65 6e 74 20 74 6f 0a 2a 2a 20 74 65 73 74  ument to.** test
35d0: 63 61 73 65 28 29 20 6d 75 73 74 20 62 65 20 65  case() must be e
35e0: 76 61 6c 75 61 74 65 64 20 62 6f 74 68 20 74 72  valuated both tr
35f0: 75 65 20 61 6e 64 20 66 61 6c 73 65 20 69 6e 20  ue and false in 
3600: 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67 65 74 20  order to.** get 
3610: 66 75 6c 6c 20 62 72 61 6e 63 68 20 63 6f 76 65  full branch cove
3620: 72 61 67 65 2e 20 20 54 68 65 20 74 65 73 74 63  rage.  The testc
3630: 61 73 65 28 29 20 6d 61 63 72 6f 20 69 73 20 69  ase() macro is i
3640: 6e 73 65 72 74 65 64 0a 2a 2a 20 74 6f 20 68 65  nserted.** to he
3650: 6c 70 20 65 6e 73 75 72 65 20 61 64 65 71 75 61  lp ensure adequa
3660: 74 65 20 74 65 73 74 20 63 6f 76 65 72 61 67 65  te test coverage
3670: 20 69 6e 20 70 6c 61 63 65 73 20 77 68 65 72 65   in places where
3680: 20 73 69 6d 70 6c 65 0a 2a 2a 20 63 6f 6e 64 69   simple.** condi
3690: 74 69 6f 6e 2f 64 65 63 69 73 69 6f 6e 20 63 6f  tion/decision co
36a0: 76 65 72 61 67 65 20 69 73 20 69 6e 61 64 65 71  verage is inadeq
36b0: 75 61 74 65 2e 20 20 46 6f 72 20 65 78 61 6d 70  uate.  For examp
36c0: 6c 65 2c 20 74 65 73 74 63 61 73 65 28 29 0a 2a  le, testcase().*
36d0: 2a 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  * can be used to
36e0: 20 6d 61 6b 65 20 73 75 72 65 20 62 6f 75 6e 64   make sure bound
36f0: 61 72 79 20 76 61 6c 75 65 73 20 61 72 65 20 74  ary values are t
3700: 65 73 74 65 64 2e 20 20 46 6f 72 0a 2a 2a 20 62  ested.  For.** b
3710: 69 74 6d 61 73 6b 20 74 65 73 74 73 2c 20 74 65  itmask tests, te
3720: 73 74 63 61 73 65 28 29 20 63 61 6e 20 62 65 20  stcase() can be 
3730: 75 73 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 72  used to make sur
3740: 65 20 65 61 63 68 20 62 69 74 0a 2a 2a 20 69 73  e each bit.** is
3750: 20 73 69 67 6e 69 66 69 63 61 6e 74 20 61 6e 64   significant and
3760: 20 75 73 65 64 20 61 74 20 6c 65 61 73 74 20 6f   used at least o
3770: 6e 63 65 2e 20 20 4f 6e 20 73 77 69 74 63 68 20  nce.  On switch 
3780: 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a 20 77 68  statements.** wh
3790: 65 72 65 20 6d 75 6c 74 69 70 6c 65 20 63 61 73  ere multiple cas
37a0: 65 73 20 67 6f 20 74 6f 20 74 68 65 20 73 61 6d  es go to the sam
37b0: 65 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 2c  e block of code,
37c0: 20 74 65 73 74 63 61 73 65 28 29 0a 2a 2a 20 63   testcase().** c
37d0: 61 6e 20 69 6e 73 75 72 65 20 74 68 61 74 20 61  an insure that a
37e0: 6c 6c 20 63 61 73 65 73 20 61 72 65 20 65 76 61  ll cases are eva
37f0: 6c 75 61 74 65 64 2e 0a 2a 2a 0a 2a 2f 0a 23 69  luated..**.*/.#i
3800: 66 64 65 66 20 53 51 4c 49 54 45 5f 43 4f 56 45  fdef SQLITE_COVE
3810: 52 41 47 45 5f 54 45 53 54 0a 20 20 76 6f 69 64  RAGE_TEST.  void
3820: 20 73 71 6c 69 74 65 33 43 6f 76 65 72 61 67 65   sqlite3Coverage
3830: 28 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65 20  (int);.# define 
3840: 74 65 73 74 63 61 73 65 28 58 29 20 20 69 66 28  testcase(X)  if(
3850: 20 58 20 29 7b 20 73 71 6c 69 74 65 33 43 6f 76   X ){ sqlite3Cov
3860: 65 72 61 67 65 28 5f 5f 4c 49 4e 45 5f 5f 29 3b  erage(__LINE__);
3870: 20 7d 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   }.#else.# defin
3880: 65 20 74 65 73 74 63 61 73 65 28 58 29 0a 23 65  e testcase(X).#e
3890: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
38a0: 54 45 53 54 4f 4e 4c 59 20 6d 61 63 72 6f 20 69  TESTONLY macro i
38b0: 73 20 75 73 65 64 20 74 6f 20 65 6e 63 6c 6f 73  s used to enclos
38c0: 65 20 76 61 72 69 61 62 6c 65 20 64 65 63 6c 61  e variable decla
38d0: 72 61 74 69 6f 6e 73 20 6f 72 0a 2a 2a 20 6f 74  rations or.** ot
38e0: 68 65 72 20 62 69 74 73 20 6f 66 20 63 6f 64 65  her bits of code
38f0: 20 74 68 61 74 20 61 72 65 20 6e 65 65 64 65 64   that are needed
3900: 20 74 6f 20 73 75 70 70 6f 72 74 20 74 68 65 20   to support the 
3910: 61 72 67 75 6d 65 6e 74 73 0a 2a 2a 20 77 69 74  arguments.** wit
3920: 68 69 6e 20 74 65 73 74 63 61 73 65 28 29 20 61  hin testcase() a
3930: 6e 64 20 61 73 73 65 72 74 28 29 20 6d 61 63 72  nd assert() macr
3940: 6f 73 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  os..*/.#if !defi
3950: 6e 65 64 28 4e 44 45 42 55 47 29 20 7c 7c 20 64  ned(NDEBUG) || d
3960: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 43 4f  efined(SQLITE_CO
3970: 56 45 52 41 47 45 5f 54 45 53 54 29 0a 23 20 64  VERAGE_TEST).# d
3980: 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28 58  efine TESTONLY(X
3990: 29 20 20 58 0a 23 65 6c 73 65 0a 23 20 64 65 66  )  X.#else.# def
39a0: 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28 58 29 0a  ine TESTONLY(X).
39b0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f  #endif../*.** So
39c0: 6d 65 74 69 6d 65 73 20 77 65 20 6e 65 65 64 20  metimes we need 
39d0: 61 20 73 6d 61 6c 6c 20 61 6d 6f 75 6e 74 20 6f  a small amount o
39e0: 66 20 63 6f 64 65 20 73 75 63 68 20 61 73 20 61  f code such as a
39f0: 20 76 61 72 69 61 62 6c 65 20 69 6e 69 74 69 61   variable initia
3a00: 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74 6f 20 73  lization.** to s
3a10: 65 74 75 70 20 66 6f 72 20 61 20 6c 61 74 65 72  etup for a later
3a20: 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
3a30: 65 6e 74 2e 20 20 57 65 20 64 6f 20 6e 6f 74 20  ent.  We do not 
3a40: 77 61 6e 74 20 74 68 69 73 20 63 6f 64 65 20 74  want this code t
3a50: 6f 0a 2a 2a 20 61 70 70 65 61 72 20 77 68 65 6e  o.** appear when
3a60: 20 61 73 73 65 72 74 28 29 20 69 73 20 64 69 73   assert() is dis
3a70: 61 62 6c 65 64 2e 20 20 54 68 65 20 66 6f 6c 6c  abled.  The foll
3a80: 6f 77 69 6e 67 20 6d 61 63 72 6f 20 69 73 20 74  owing macro is t
3a90: 68 65 72 65 66 6f 72 65 0a 2a 2a 20 75 73 65 64  herefore.** used
3aa0: 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74 68 61 74   to contain that
3ab0: 20 73 65 74 75 70 20 63 6f 64 65 2e 20 20 54 68   setup code.  Th
3ac0: 65 20 22 56 56 41 22 20 61 63 72 6f 6e 79 6d 20  e "VVA" acronym 
3ad0: 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 56  stands for.** "V
3ae0: 65 72 69 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c  erification, Val
3af0: 69 64 61 74 69 6f 6e 2c 20 61 6e 64 20 41 63 63  idation, and Acc
3b00: 72 65 64 69 74 61 74 69 6f 6e 22 2e 20 20 49 6e  reditation".  In
3b10: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
3b20: 65 0a 2a 2a 20 63 6f 64 65 20 77 69 74 68 69 6e  e.** code within
3b30: 20 56 56 41 5f 4f 4e 4c 59 28 29 20 77 69 6c 6c   VVA_ONLY() will
3b40: 20 6f 6e 6c 79 20 72 75 6e 20 64 75 72 69 6e 67   only run during
3b50: 20 76 65 72 69 66 69 63 61 74 69 6f 6e 20 70 72   verification pr
3b60: 6f 63 65 73 73 65 73 2e 0a 2a 2f 0a 23 69 66 6e  ocesses..*/.#ifn
3b70: 64 65 66 20 4e 44 45 42 55 47 0a 23 20 64 65 66  def NDEBUG.# def
3b80: 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29 20  ine VVA_ONLY(X) 
3b90: 20 58 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   X.#else.# defin
3ba0: 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29 0a 23 65  e VVA_ONLY(X).#e
3bb0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
3bc0: 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56 45 52  ALWAYS and NEVER
3bd0: 20 6d 61 63 72 6f 73 20 73 75 72 72 6f 75 6e 64   macros surround
3be0: 20 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73   boolean express
3bf0: 69 6f 6e 73 20 77 68 69 63 68 0a 2a 2a 20 61 72  ions which.** ar
3c00: 65 20 69 6e 74 65 6e 64 65 64 20 74 6f 20 61 6c  e intended to al
3c10: 77 61 79 73 20 62 65 20 74 72 75 65 20 6f 72 20  ways be true or 
3c20: 66 61 6c 73 65 2c 20 72 65 73 70 65 63 74 69 76  false, respectiv
3c30: 65 6c 79 2e 20 20 53 75 63 68 0a 2a 2a 20 65 78  ely.  Such.** ex
3c40: 70 72 65 73 73 69 6f 6e 73 20 63 6f 75 6c 64 20  pressions could 
3c50: 62 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  be omitted from 
3c60: 74 68 65 20 63 6f 64 65 20 63 6f 6d 70 6c 65 74  the code complet
3c70: 65 6c 79 2e 20 20 42 75 74 20 74 68 65 79 0a 2a  ely.  But they.*
3c80: 2a 20 61 72 65 20 69 6e 63 6c 75 64 65 64 20 69  * are included i
3c90: 6e 20 61 20 66 65 77 20 63 61 73 65 73 20 69 6e  n a few cases in
3ca0: 20 6f 72 64 65 72 20 74 6f 20 65 6e 68 61 6e 63   order to enhanc
3cb0: 65 20 74 68 65 20 72 65 73 69 6c 69 65 6e 63 65  e the resilience
3cc0: 0a 2a 2a 20 6f 66 20 53 51 4c 69 74 65 20 74 6f  .** of SQLite to
3cd0: 20 75 6e 65 78 70 65 63 74 65 64 20 62 65 68 61   unexpected beha
3ce0: 76 69 6f 72 20 2d 20 74 6f 20 6d 61 6b 65 20 74  vior - to make t
3cf0: 68 65 20 63 6f 64 65 20 22 73 65 6c 66 2d 68 65  he code "self-he
3d00: 61 6c 69 6e 67 22 0a 2a 2a 20 6f 72 20 22 64 75  aling".** or "du
3d10: 63 74 69 6c 65 22 20 72 61 74 68 65 72 20 74 68  ctile" rather th
3d20: 61 6e 20 62 65 69 6e 67 20 22 62 72 69 74 74 6c  an being "brittl
3d30: 65 22 20 61 6e 64 20 63 72 61 73 68 69 6e 67 20  e" and crashing 
3d40: 61 74 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20  at the first.** 
3d50: 68 69 6e 74 20 6f 66 20 75 6e 70 6c 61 6e 6e 65  hint of unplanne
3d60: 64 20 62 65 68 61 76 69 6f 72 2e 0a 2a 2a 0a 2a  d behavior..**.*
3d70: 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  * In other words
3d80: 2c 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56  , ALWAYS and NEV
3d90: 45 52 20 61 72 65 20 61 64 64 65 64 20 66 6f 72  ER are added for
3da0: 20 64 65 66 65 6e 73 69 76 65 20 63 6f 64 65 2e   defensive code.
3db0: 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 64 6f 69 6e  .**.** When doin
3dc0: 67 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69  g coverage testi
3dd0: 6e 67 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45  ng ALWAYS and NE
3de0: 56 45 52 20 61 72 65 20 68 61 72 64 2d 63 6f 64  VER are hard-cod
3df0: 65 64 20 74 6f 0a 2a 2a 20 62 65 20 74 72 75 65  ed to.** be true
3e00: 20 61 6e 64 20 66 61 6c 73 65 20 73 6f 20 74 68   and false so th
3e10: 61 74 20 74 68 65 20 75 6e 72 65 61 63 68 61 62  at the unreachab
3e20: 6c 65 20 63 6f 64 65 20 74 68 65 79 20 73 70 65  le code they spe
3e30: 63 69 66 79 20 77 69 6c 6c 0a 2a 2a 20 6e 6f 74  cify will.** not
3e40: 20 62 65 20 63 6f 75 6e 74 65 64 20 61 73 20 75   be counted as u
3e50: 6e 74 65 73 74 65 64 20 63 6f 64 65 2e 0a 2a 2f  ntested code..*/
3e60: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
3e70: 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53  ITE_COVERAGE_TES
3e80: 54 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51  T) || defined(SQ
3e90: 4c 49 54 45 5f 4d 55 54 41 54 49 4f 4e 5f 54 45  LITE_MUTATION_TE
3ea0: 53 54 29 0a 23 20 64 65 66 69 6e 65 20 41 4c 57  ST).# define ALW
3eb0: 41 59 53 28 58 29 20 20 20 20 20 20 28 31 29 0a  AYS(X)      (1).
3ec0: 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28 58  # define NEVER(X
3ed0: 29 20 20 20 20 20 20 20 28 30 29 0a 23 65 6c 69  )       (0).#eli
3ee0: 66 20 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55  f !defined(NDEBU
3ef0: 47 29 0a 23 20 64 65 66 69 6e 65 20 41 4c 57 41  G).# define ALWA
3f00: 59 53 28 58 29 20 20 20 20 20 20 28 28 58 29 3f  YS(X)      ((X)?
3f10: 31 3a 28 61 73 73 65 72 74 28 30 29 2c 30 29 29  1:(assert(0),0))
3f20: 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28  .# define NEVER(
3f30: 58 29 20 20 20 20 20 20 20 28 28 58 29 3f 28 61  X)       ((X)?(a
3f40: 73 73 65 72 74 28 30 29 2c 31 29 3a 30 29 0a 23  ssert(0),1):0).#
3f50: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 41 4c  else.# define AL
3f60: 57 41 59 53 28 58 29 20 20 20 20 20 20 28 58 29  WAYS(X)      (X)
3f70: 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28  .# define NEVER(
3f80: 58 29 20 20 20 20 20 20 20 28 58 29 0a 23 65 6e  X)       (X).#en
3f90: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65 20  dif../*.** Some 
3fa0: 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 20 61 72 65  conditionals are
3fb0: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 6f   optimizations o
3fc0: 6e 6c 79 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  nly.  In other w
3fd0: 6f 72 64 73 2c 20 69 66 20 74 68 65 0a 2a 2a 20  ords, if the.** 
3fe0: 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 20 61 72 65  conditionals are
3ff0: 20 72 65 70 6c 61 63 65 64 20 77 69 74 68 20 61   replaced with a
4000: 20 63 6f 6e 73 74 61 6e 74 20 31 20 28 74 72 75   constant 1 (tru
4010: 65 29 20 6f 72 20 30 20 28 66 61 6c 73 65 29 20  e) or 0 (false) 
4020: 74 68 65 6e 0a 2a 2a 20 74 68 65 20 63 6f 72 72  then.** the corr
4030: 65 63 74 20 61 6e 73 77 65 72 20 69 73 20 73 74  ect answer is st
4040: 69 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 20 74 68  ill obtained, th
4050: 6f 75 67 68 20 70 65 72 68 61 70 73 20 6e 6f 74  ough perhaps not
4060: 20 61 73 20 71 75 69 63 6b 6c 79 2e 0a 2a 2a 0a   as quickly..**.
4070: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
4080: 20 6d 61 63 72 6f 73 20 6d 61 72 6b 20 74 68 65   macros mark the
4090: 73 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  se optimizations
40a0: 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 2e 0a 2a   conditionals..*
40b0: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
40c0: 4c 49 54 45 5f 4d 55 54 41 54 49 4f 4e 5f 54 45  LITE_MUTATION_TE
40d0: 53 54 29 0a 23 20 64 65 66 69 6e 65 20 4f 4b 5f  ST).# define OK_
40e0: 49 46 5f 41 4c 57 41 59 53 5f 54 52 55 45 28 58  IF_ALWAYS_TRUE(X
40f0: 29 20 20 28 31 29 0a 23 20 64 65 66 69 6e 65 20  )  (1).# define 
4100: 4f 4b 5f 49 46 5f 41 4c 57 41 59 53 5f 46 41 4c  OK_IF_ALWAYS_FAL
4110: 53 45 28 58 29 20 28 30 29 0a 23 65 6c 73 65 0a  SE(X) (0).#else.
4120: 23 20 64 65 66 69 6e 65 20 4f 4b 5f 49 46 5f 41  # define OK_IF_A
4130: 4c 57 41 59 53 5f 54 52 55 45 28 58 29 20 20 28  LWAYS_TRUE(X)  (
4140: 58 29 0a 23 20 64 65 66 69 6e 65 20 4f 4b 5f 49  X).# define OK_I
4150: 46 5f 41 4c 57 41 59 53 5f 46 41 4c 53 45 28 58  F_ALWAYS_FALSE(X
4160: 29 20 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ) (X).#endif../*
4170: 0a 2a 2a 20 53 6f 6d 65 20 6d 61 6c 6c 6f 63 20  .** Some malloc 
4180: 66 61 69 6c 75 72 65 73 20 61 72 65 20 6f 6e 6c  failures are onl
4190: 79 20 70 6f 73 73 69 62 6c 65 20 69 66 20 53 51  y possible if SQ
41a0: 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c 4f  LITE_TEST_REALLO
41b0: 43 5f 53 54 52 45 53 53 20 69 73 0a 2a 2a 20 64  C_STRESS is.** d
41c0: 65 66 69 6e 65 64 2e 20 20 57 65 20 6e 65 65 64  efined.  We need
41d0: 20 74 6f 20 64 65 66 65 6e 64 20 61 67 61 69 6e   to defend again
41e0: 73 74 20 74 68 6f 73 65 20 66 61 69 6c 75 72 65  st those failure
41f0: 73 20 77 68 65 6e 20 74 65 73 74 69 6e 67 20 77  s when testing w
4200: 69 74 68 0a 2a 2a 20 53 51 4c 49 54 45 5f 54 45  ith.** SQLITE_TE
4210: 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53  ST_REALLOC_STRES
4220: 53 2c 20 62 75 74 20 77 65 20 64 6f 6e 27 74 20  S, but we don't 
4230: 77 61 6e 74 20 74 68 65 20 75 6e 72 65 61 63 68  want the unreach
4240: 61 62 6c 65 20 62 72 61 6e 63 68 65 73 0a 2a 2a  able branches.**
4250: 20 64 75 72 69 6e 67 20 61 20 6e 6f 72 6d 61 6c   during a normal
4260: 20 62 75 69 6c 64 2e 20 20 54 68 65 20 66 6f 6c   build.  The fol
4270: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 63 61 6e  lowing macro can
4280: 20 62 65 20 75 73 65 64 20 74 6f 20 64 69 73 61   be used to disa
4290: 62 6c 65 20 74 65 73 74 73 0a 2a 2a 20 74 68 61  ble tests.** tha
42a0: 74 20 61 72 65 20 61 6c 77 61 79 73 20 66 61 6c  t are always fal
42b0: 73 65 20 65 78 63 65 70 74 20 77 68 65 6e 20 53  se except when S
42c0: 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c  QLITE_TEST_REALL
42d0: 4f 43 5f 53 54 52 45 53 53 20 69 73 20 73 65 74  OC_STRESS is set
42e0: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
42f0: 28 53 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41  (SQLITE_TEST_REA
4300: 4c 4c 4f 43 5f 53 54 52 45 53 53 29 0a 23 20 64  LLOC_STRESS).# d
4310: 65 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45  efine ONLY_IF_RE
4320: 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20  ALLOC_STRESS(X) 
4330: 20 28 58 29 0a 23 65 6c 69 66 20 21 64 65 66 69   (X).#elif !defi
4340: 6e 65 64 28 4e 44 45 42 55 47 29 0a 23 20 64 65  ned(NDEBUG).# de
4350: 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45 41  fine ONLY_IF_REA
4360: 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20 20  LLOC_STRESS(X)  
4370: 28 28 58 29 3f 28 61 73 73 65 72 74 28 30 29 2c  ((X)?(assert(0),
4380: 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23 20 64 65  1):0).#else.# de
4390: 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45 41  fine ONLY_IF_REA
43a0: 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20 20  LLOC_STRESS(X)  
43b0: 28 30 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  (0).#endif../*.*
43c0: 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73 20 75  * Declarations u
43d0: 73 65 64 20 66 6f 72 20 74 72 61 63 69 6e 67 20  sed for tracing 
43e0: 74 68 65 20 6f 70 65 72 61 74 69 6e 67 20 73 79  the operating sy
43f0: 73 74 65 6d 20 69 6e 74 65 72 66 61 63 65 73 2e  stem interfaces.
4400: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
4410: 53 51 4c 49 54 45 5f 46 4f 52 43 45 5f 4f 53 5f  SQLITE_FORCE_OS_
4420: 54 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e 65  TRACE) || define
4430: 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c  d(SQLITE_TEST) |
4440: 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64  | \.    (defined
4450: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26  (SQLITE_DEBUG) &
4460: 26 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29  & SQLITE_OS_WIN)
4470: 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71  .  extern int sq
4480: 6c 69 74 65 33 4f 53 54 72 61 63 65 3b 0a 23 20  lite3OSTrace;.# 
4490: 64 65 66 69 6e 65 20 4f 53 54 52 41 43 45 28 58  define OSTRACE(X
44a0: 29 20 20 20 20 20 20 20 20 20 20 69 66 28 20 73  )          if( s
44b0: 71 6c 69 74 65 33 4f 53 54 72 61 63 65 20 29 20  qlite3OSTrace ) 
44c0: 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e  sqlite3DebugPrin
44d0: 74 66 20 58 0a 23 20 64 65 66 69 6e 65 20 53 51  tf X.# define SQ
44e0: 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41  LITE_HAVE_OS_TRA
44f0: 43 45 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  CE.#else.# defin
4500: 65 20 4f 53 54 52 41 43 45 28 58 29 0a 23 20 75  e OSTRACE(X).# u
4510: 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 48 41 56  ndef  SQLITE_HAV
4520: 45 5f 4f 53 5f 54 52 41 43 45 0a 23 65 6e 64 69  E_OS_TRACE.#endi
4530: 66 0a 0a 2f 2a 0a 2a 2a 20 49 73 20 74 68 65 20  f../*.** Is the 
4540: 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28 29  sqlite3ErrName()
4550: 20 66 75 6e 63 74 69 6f 6e 20 6e 65 65 64 65 64   function needed
4560: 20 69 6e 20 74 68 65 20 62 75 69 6c 64 3f 20 20   in the build?  
4570: 43 75 72 72 65 6e 74 6c 79 2c 0a 2a 2a 20 69 74  Currently,.** it
4580: 20 69 73 20 6e 65 65 64 65 64 20 62 79 20 22 6d   is needed by "m
4590: 75 74 65 78 5f 77 33 32 2e 63 22 20 28 77 68 65  utex_w32.c" (whe
45a0: 6e 20 64 65 62 75 67 67 69 6e 67 29 2c 20 22 6f  n debugging), "o
45b0: 73 5f 77 69 6e 2e 63 22 20 28 77 68 65 6e 0a 2a  s_win.c" (when.*
45c0: 2a 20 4f 53 54 52 41 43 45 20 69 73 20 65 6e 61  * OSTRACE is ena
45d0: 62 6c 65 64 29 2c 20 61 6e 64 20 62 79 20 73 65  bled), and by se
45e0: 76 65 72 61 6c 20 22 74 65 73 74 2a 2e 63 22 20  veral "test*.c" 
45f0: 66 69 6c 65 73 20 28 77 68 69 63 68 20 61 72 65  files (which are
4600: 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 20 75 73 69  .** compiled usi
4610: 6e 67 20 53 51 4c 49 54 45 5f 54 45 53 54 29 2e  ng SQLITE_TEST).
4620: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
4630: 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54  SQLITE_HAVE_OS_T
4640: 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e 65 64  RACE) || defined
4650: 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c 7c  (SQLITE_TEST) ||
4660: 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28   \.    (defined(
4670: 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26  SQLITE_DEBUG) &&
4680: 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29 0a   SQLITE_OS_WIN).
4690: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
46a0: 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45 0a 23 65  NEED_ERR_NAME.#e
46b0: 6c 73 65 0a 23 20 75 6e 64 65 66 20 20 53 51 4c  lse.# undef  SQL
46c0: 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d  ITE_NEED_ERR_NAM
46d0: 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  E.#endif../*.** 
46e0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58  SQLITE_ENABLE_EX
46f0: 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69  PLAIN_COMMENTS i
4700: 73 20 69 6e 63 6f 6d 70 61 74 69 62 6c 65 20 77  s incompatible w
4710: 69 74 68 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ith SQLITE_OMIT_
4720: 45 58 50 4c 41 49 4e 0a 2a 2f 0a 23 69 66 64 65  EXPLAIN.*/.#ifde
4730: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58  f SQLITE_OMIT_EX
4740: 50 4c 41 49 4e 0a 23 20 75 6e 64 65 66 20 53 51  PLAIN.# undef SQ
4750: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c  LITE_ENABLE_EXPL
4760: 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 0a 23 65 6e  AIN_COMMENTS.#en
4770: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  dif../*.** Retur
4780: 6e 20 74 72 75 65 20 28 6e 6f 6e 2d 7a 65 72 6f  n true (non-zero
4790: 29 20 69 66 20 74 68 65 20 69 6e 70 75 74 20 69  ) if the input i
47a0: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61  s an integer tha
47b0: 74 20 69 73 20 74 6f 6f 20 6c 61 72 67 65 0a 2a  t is too large.*
47c0: 2a 20 74 6f 20 66 69 74 20 69 6e 20 33 32 2d 62  * to fit in 32-b
47d0: 69 74 73 2e 20 20 54 68 69 73 20 6d 61 63 72 6f  its.  This macro
47e0: 20 69 73 20 75 73 65 64 20 69 6e 73 69 64 65 20   is used inside 
47f0: 6f 66 20 76 61 72 69 6f 75 73 20 74 65 73 74 63  of various testc
4800: 61 73 65 28 29 0a 2a 2a 20 6d 61 63 72 6f 73 20  ase().** macros 
4810: 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 77  to verify that w
4820: 65 20 68 61 76 65 20 74 65 73 74 65 64 20 53 51  e have tested SQ
4830: 4c 69 74 65 20 66 6f 72 20 6c 61 72 67 65 2d 66  Lite for large-f
4840: 69 6c 65 20 73 75 70 70 6f 72 74 2e 0a 2a 2f 0a  ile support..*/.
4850: 23 64 65 66 69 6e 65 20 49 53 5f 42 49 47 5f 49  #define IS_BIG_I
4860: 4e 54 28 58 29 20 20 28 28 28 58 29 26 7e 28 69  NT(X)  (((X)&~(i
4870: 36 34 29 30 78 66 66 66 66 66 66 66 66 29 21 3d  64)0xffffffff)!=
4880: 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61  0)../*.** The ma
4890: 63 72 6f 20 75 6e 6c 69 6b 65 6c 79 28 29 20 69  cro unlikely() i
48a0: 73 20 61 20 68 69 6e 74 20 74 68 61 74 20 73 75  s a hint that su
48b0: 72 72 6f 75 6e 64 73 20 61 20 62 6f 6f 6c 65 61  rrounds a boolea
48c0: 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 20  n.** expression 
48d0: 74 68 61 74 20 69 73 20 75 73 75 61 6c 6c 79 20  that is usually 
48e0: 66 61 6c 73 65 2e 20 20 4d 61 63 72 6f 20 6c 69  false.  Macro li
48f0: 6b 65 6c 79 28 29 20 73 75 72 72 6f 75 6e 64 73  kely() surrounds
4900: 0a 2a 2a 20 61 20 62 6f 6f 6c 65 61 6e 20 65 78  .** a boolean ex
4910: 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73  pression that is
4920: 20 75 73 75 61 6c 6c 79 20 74 72 75 65 2e 20 20   usually true.  
4930: 54 68 65 73 65 20 68 69 6e 74 73 20 63 6f 75 6c  These hints coul
4940: 64 2c 0a 2a 2a 20 69 6e 20 74 68 65 6f 72 79 2c  d,.** in theory,
4950: 20 62 65 20 75 73 65 64 20 62 79 20 74 68 65 20   be used by the 
4960: 63 6f 6d 70 69 6c 65 72 20 74 6f 20 67 65 6e 65  compiler to gene
4970: 72 61 74 65 20 62 65 74 74 65 72 20 63 6f 64 65  rate better code
4980: 2c 20 62 75 74 0a 2a 2a 20 63 75 72 72 65 6e 74  , but.** current
4990: 6c 79 20 74 68 65 79 20 61 72 65 20 6a 75 73 74  ly they are just
49a0: 20 63 6f 6d 6d 65 6e 74 73 20 66 6f 72 20 68 75   comments for hu
49b0: 6d 61 6e 20 72 65 61 64 65 72 73 2e 0a 2a 2f 0a  man readers..*/.
49c0: 23 64 65 66 69 6e 65 20 6c 69 6b 65 6c 79 28 58  #define likely(X
49d0: 29 20 20 20 20 28 58 29 0a 23 64 65 66 69 6e 65  )    (X).#define
49e0: 20 75 6e 6c 69 6b 65 6c 79 28 58 29 20 20 28 58   unlikely(X)  (X
49f0: 29 0a 0a 23 69 6e 63 6c 75 64 65 20 22 68 61 73  )..#include "has
4a00: 68 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70  h.h".#include "p
4a10: 61 72 73 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65  arse.h".#include
4a20: 20 3c 73 74 64 69 6f 2e 68 3e 0a 23 69 6e 63 6c   <stdio.h>.#incl
4a30: 75 64 65 20 3c 73 74 64 6c 69 62 2e 68 3e 0a 23  ude <stdlib.h>.#
4a40: 69 6e 63 6c 75 64 65 20 3c 73 74 72 69 6e 67 2e  include <string.
4a50: 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 61 73 73  h>.#include <ass
4a60: 65 72 74 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20  ert.h>.#include 
4a70: 3c 73 74 64 64 65 66 2e 68 3e 0a 0a 2f 2a 0a 2a  <stddef.h>../*.*
4a80: 2a 20 55 73 65 20 61 20 6d 61 63 72 6f 20 74 6f  * Use a macro to
4a90: 20 72 65 70 6c 61 63 65 20 6d 65 6d 63 70 79 28   replace memcpy(
4aa0: 29 20 69 66 20 63 6f 6d 70 69 6c 65 64 20 77 69  ) if compiled wi
4ab0: 74 68 20 53 51 4c 49 54 45 5f 49 4e 4c 49 4e 45  th SQLITE_INLINE
4ac0: 5f 4d 45 4d 43 50 59 2e 0a 2a 2a 20 54 68 69 73  _MEMCPY..** This
4ad0: 20 61 6c 6c 6f 77 73 20 62 65 74 74 65 72 20 6d   allows better m
4ae0: 65 61 73 75 72 65 6d 65 6e 74 73 20 6f 66 20 77  easurements of w
4af0: 68 65 72 65 20 6d 65 6d 63 70 79 28 29 20 69 73  here memcpy() is
4b00: 20 75 73 65 64 20 77 68 65 6e 20 72 75 6e 6e 69   used when runni
4b10: 6e 67 0a 2a 2a 20 63 61 63 68 65 67 72 69 6e 64  ng.** cachegrind
4b20: 2e 20 20 42 75 74 20 74 68 69 73 20 6d 61 63 72  .  But this macr
4b30: 6f 20 76 65 72 73 69 6f 6e 20 6f 66 20 6d 65 6d  o version of mem
4b40: 63 70 79 28 29 20 69 73 20 76 65 72 79 20 73 6c  cpy() is very sl
4b50: 6f 77 20 73 6f 20 69 74 0a 2a 2a 20 73 68 6f 75  ow so it.** shou
4b60: 6c 64 20 6e 6f 74 20 62 65 20 75 73 65 64 20 69  ld not be used i
4b70: 6e 20 70 72 6f 64 75 63 74 69 6f 6e 2e 20 20 54  n production.  T
4b80: 68 69 73 20 69 73 20 61 20 70 65 72 66 6f 72 6d  his is a perform
4b90: 61 6e 63 65 20 6d 65 61 73 75 72 65 6d 65 6e 74  ance measurement
4ba0: 0a 2a 2a 20 68 61 63 6b 20 6f 6e 6c 79 2e 0a 2a  .** hack only..*
4bb0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
4bc0: 49 4e 4c 49 4e 45 5f 4d 45 4d 43 50 59 0a 23 20  INLINE_MEMCPY.# 
4bd0: 64 65 66 69 6e 65 20 6d 65 6d 63 70 79 28 44 2c  define memcpy(D,
4be0: 53 2c 4e 29 20 7b 63 68 61 72 2a 78 78 64 3d 28  S,N) {char*xxd=(
4bf0: 63 68 61 72 2a 29 28 44 29 3b 63 6f 6e 73 74 20  char*)(D);const 
4c00: 63 68 61 72 2a 78 78 73 3d 28 63 6f 6e 73 74 20  char*xxs=(const 
4c10: 63 68 61 72 2a 29 28 53 29 3b 5c 0a 20 20 20 20  char*)(S);\.    
4c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4c30: 20 20 20 20 69 6e 74 20 78 78 6e 3d 28 4e 29 3b      int xxn=(N);
4c40: 77 68 69 6c 65 28 78 78 6e 2d 2d 3e 30 29 2a 28  while(xxn-->0)*(
4c50: 78 78 64 2b 2b 29 3d 2a 28 78 78 73 2b 2b 29 3b  xxd++)=*(xxs++);
4c60: 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  }.#endif../*.** 
4c70: 49 66 20 63 6f 6d 70 69 6c 69 6e 67 20 66 6f 72  If compiling for
4c80: 20 61 20 70 72 6f 63 65 73 73 6f 72 20 74 68 61   a processor tha
4c90: 74 20 6c 61 63 6b 73 20 66 6c 6f 61 74 69 6e 67  t lacks floating
4ca0: 20 70 6f 69 6e 74 20 73 75 70 70 6f 72 74 2c 0a   point support,.
4cb0: 2a 2a 20 73 75 62 73 74 69 74 75 74 65 20 69 6e  ** substitute in
4cc0: 74 65 67 65 72 20 66 6f 72 20 66 6c 6f 61 74 69  teger for floati
4cd0: 6e 67 2d 70 6f 69 6e 74 0a 2a 2f 0a 23 69 66 64  ng-point.*/.#ifd
4ce0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
4cf0: 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 23 20  LOATING_POINT.# 
4d00: 64 65 66 69 6e 65 20 64 6f 75 62 6c 65 20 73 71  define double sq
4d10: 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 64 65 66  lite_int64.# def
4d20: 69 6e 65 20 66 6c 6f 61 74 20 73 71 6c 69 74 65  ine float sqlite
4d30: 5f 69 6e 74 36 34 0a 23 20 64 65 66 69 6e 65 20  _int64.# define 
4d40: 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 20  LONGDOUBLE_TYPE 
4d50: 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 69  sqlite_int64.# i
4d60: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47  fndef SQLITE_BIG
4d70: 5f 44 42 4c 0a 23 20 20 20 64 65 66 69 6e 65 20  _DBL.#   define 
4d80: 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 20 28  SQLITE_BIG_DBL (
4d90: 28 28 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 29  ((sqlite3_int64)
4da0: 31 29 3c 3c 35 30 29 0a 23 20 65 6e 64 69 66 0a  1)<<50).# endif.
4db0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
4dc0: 4f 4d 49 54 5f 44 41 54 45 54 49 4d 45 5f 46 55  OMIT_DATETIME_FU
4dd0: 4e 43 53 20 31 0a 23 20 64 65 66 69 6e 65 20 53  NCS 1.# define S
4de0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45  QLITE_OMIT_TRACE
4df0: 20 31 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54   1.# undef SQLIT
4e00: 45 5f 4d 49 58 45 44 5f 45 4e 44 49 41 4e 5f 36  E_MIXED_ENDIAN_6
4e10: 34 42 49 54 5f 46 4c 4f 41 54 0a 23 20 75 6e 64  4BIT_FLOAT.# und
4e20: 65 66 20 53 51 4c 49 54 45 5f 48 41 56 45 5f 49  ef SQLITE_HAVE_I
4e30: 53 4e 41 4e 0a 23 65 6e 64 69 66 0a 23 69 66 6e  SNAN.#endif.#ifn
4e40: 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47 5f 44  def SQLITE_BIG_D
4e50: 42 4c 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  BL.# define SQLI
4e60: 54 45 5f 42 49 47 5f 44 42 4c 20 28 31 65 39 39  TE_BIG_DBL (1e99
4e70: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
4e80: 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69 73 20 73  OMIT_TEMPDB is s
4e90: 65 74 20 74 6f 20 31 20 69 66 20 53 51 4c 49 54  et to 1 if SQLIT
4ea0: 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69 73  E_OMIT_TEMPDB is
4eb0: 20 64 65 66 69 6e 65 64 2c 20 6f 72 20 30 0a 2a   defined, or 0.*
4ec0: 2a 20 61 66 74 65 72 77 61 72 64 2e 20 48 61 76  * afterward. Hav
4ed0: 69 6e 67 20 74 68 69 73 20 6d 61 63 72 6f 20 61  ing this macro a
4ee0: 6c 6c 6f 77 73 20 75 73 20 74 6f 20 63 61 75 73  llows us to caus
4ef0: 65 20 74 68 65 20 43 20 63 6f 6d 70 69 6c 65 72  e the C compiler
4f00: 0a 2a 2a 20 74 6f 20 6f 6d 69 74 20 63 6f 64 65  .** to omit code
4f10: 20 75 73 65 64 20 62 79 20 54 45 4d 50 20 74 61   used by TEMP ta
4f20: 62 6c 65 73 20 77 69 74 68 6f 75 74 20 6d 65 73  bles without mes
4f30: 73 79 20 23 69 66 6e 64 65 66 20 73 74 61 74 65  sy #ifndef state
4f40: 6d 65 6e 74 73 2e 0a 2a 2f 0a 23 69 66 64 65 66  ments..*/.#ifdef
4f50: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 4d   SQLITE_OMIT_TEM
4f60: 50 44 42 0a 23 64 65 66 69 6e 65 20 4f 4d 49 54  PDB.#define OMIT
4f70: 5f 54 45 4d 50 44 42 20 31 0a 23 65 6c 73 65 0a  _TEMPDB 1.#else.
4f80: 23 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d  #define OMIT_TEM
4f90: 50 44 42 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  PDB 0.#endif../*
4fa0: 0a 2a 2a 20 54 68 65 20 22 66 69 6c 65 20 66 6f  .** The "file fo
4fb0: 72 6d 61 74 22 20 6e 75 6d 62 65 72 20 69 73 20  rmat" number is 
4fc0: 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61 74 20  an integer that 
4fd0: 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 77  is incremented w
4fe0: 68 65 6e 65 76 65 72 0a 2a 2a 20 74 68 65 20 56  henever.** the V
4ff0: 44 42 45 2d 6c 65 76 65 6c 20 66 69 6c 65 20 66  DBE-level file f
5000: 6f 72 6d 61 74 20 63 68 61 6e 67 65 73 2e 20 20  ormat changes.  
5010: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
5020: 63 72 6f 73 20 64 65 66 69 6e 65 20 74 68 65 0a  cros define the.
5030: 2a 2a 20 74 68 65 20 64 65 66 61 75 6c 74 20 66  ** the default f
5040: 69 6c 65 20 66 6f 72 6d 61 74 20 66 6f 72 20 6e  ile format for n
5050: 65 77 20 64 61 74 61 62 61 73 65 73 20 61 6e 64  ew databases and
5060: 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 66 69 6c   the maximum fil
5070: 65 20 66 6f 72 6d 61 74 0a 2a 2a 20 74 68 61 74  e format.** that
5080: 20 74 68 65 20 6c 69 62 72 61 72 79 20 63 61 6e   the library can
5090: 20 72 65 61 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e   read..*/.#defin
50a0: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 46 49 4c  e SQLITE_MAX_FIL
50b0: 45 5f 46 4f 52 4d 41 54 20 34 0a 23 69 66 6e 64  E_FORMAT 4.#ifnd
50c0: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
50d0: 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 0a 23 20  T_FILE_FORMAT.# 
50e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
50f0: 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41  FAULT_FILE_FORMA
5100: 54 20 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  T 4.#endif../*.*
5110: 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68 65 74  * Determine whet
5120: 68 65 72 20 74 72 69 67 67 65 72 73 20 61 72 65  her triggers are
5130: 20 72 65 63 75 72 73 69 76 65 20 62 79 20 64 65   recursive by de
5140: 66 61 75 6c 74 2e 20 20 54 68 69 73 20 63 61 6e  fault.  This can
5150: 20 62 65 0a 2a 2a 20 63 68 61 6e 67 65 64 20 61   be.** changed a
5160: 74 20 72 75 6e 2d 74 69 6d 65 20 75 73 69 6e 67  t run-time using
5170: 20 61 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 23 69   a pragma..*/.#i
5180: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46  fndef SQLITE_DEF
5190: 41 55 4c 54 5f 52 45 43 55 52 53 49 56 45 5f 54  AULT_RECURSIVE_T
51a0: 52 49 47 47 45 52 53 0a 23 20 64 65 66 69 6e 65  RIGGERS.# define
51b0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
51c0: 52 45 43 55 52 53 49 56 45 5f 54 52 49 47 47 45  RECURSIVE_TRIGGE
51d0: 52 53 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  RS 0.#endif../*.
51e0: 2a 2a 20 50 72 6f 76 69 64 65 20 61 20 64 65 66  ** Provide a def
51f0: 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72 20 53  ault value for S
5200: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
5210: 20 69 6e 20 63 61 73 65 20 69 74 20 69 73 20 6e   in case it is n
5220: 6f 74 20 73 70 65 63 69 66 69 65 64 0a 2a 2a 20  ot specified.** 
5230: 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c  on the command-l
5240: 69 6e 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ine.*/.#ifndef S
5250: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
5260: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
5270: 5f 54 45 4d 50 5f 53 54 4f 52 45 20 31 0a 23 65  _TEMP_STORE 1.#e
5280: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 6e  ndif../*.** If n
5290: 6f 20 76 61 6c 75 65 20 68 61 73 20 62 65 65 6e  o value has been
52a0: 20 70 72 6f 76 69 64 65 64 20 66 6f 72 20 53 51   provided for SQ
52b0: 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f  LITE_MAX_WORKER_
52c0: 54 48 52 45 41 44 53 2c 20 6f 72 20 69 66 0a 2a  THREADS, or if.*
52d0: 2a 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54  * SQLITE_TEMP_ST
52e0: 4f 52 45 20 69 73 20 73 65 74 20 74 6f 20 33 20  ORE is set to 3 
52f0: 28 6e 65 76 65 72 20 75 73 65 20 74 65 6d 70 6f  (never use tempo
5300: 72 61 72 79 20 66 69 6c 65 73 29 2c 20 73 65 74  rary files), set
5310: 20 69 74 0a 2a 2a 20 74 6f 20 7a 65 72 6f 2e 0a   it.** to zero..
5320: 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 54 45  */.#if SQLITE_TE
5330: 4d 50 5f 53 54 4f 52 45 3d 3d 33 20 7c 7c 20 53  MP_STORE==3 || S
5340: 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45  QLITE_THREADSAFE
5350: 3d 3d 30 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  ==0.# undef SQLI
5360: 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48  TE_MAX_WORKER_TH
5370: 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53  READS.# define S
5380: 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52  QLITE_MAX_WORKER
5390: 5f 54 48 52 45 41 44 53 20 30 0a 23 65 6e 64 69  _THREADS 0.#endi
53a0: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
53b0: 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
53c0: 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ADS.# define SQL
53d0: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
53e0: 48 52 45 41 44 53 20 38 0a 23 65 6e 64 69 66 0a  HREADS 8.#endif.
53f0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44  #ifndef SQLITE_D
5400: 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48  EFAULT_WORKER_TH
5410: 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53  READS.# define S
5420: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f  QLITE_DEFAULT_WO
5430: 52 4b 45 52 5f 54 48 52 45 41 44 53 20 30 0a 23  RKER_THREADS 0.#
5440: 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49 54 45  endif.#if SQLITE
5450: 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f  _DEFAULT_WORKER_
5460: 54 48 52 45 41 44 53 3e 53 51 4c 49 54 45 5f 4d  THREADS>SQLITE_M
5470: 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  AX_WORKER_THREAD
5480: 53 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  S.# undef SQLITE
5490: 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
54a0: 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ADS.# define SQL
54b0: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
54c0: 48 52 45 41 44 53 20 53 51 4c 49 54 45 5f 44 45  HREADS SQLITE_DE
54d0: 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52  FAULT_WORKER_THR
54e0: 45 41 44 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  EADS.#endif../*.
54f0: 2a 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20 69  ** The default i
5500: 6e 69 74 69 61 6c 20 61 6c 6c 6f 63 61 74 69 6f  nitial allocatio
5510: 6e 20 66 6f 72 20 74 68 65 20 70 61 67 65 63 61  n for the pageca
5520: 63 68 65 20 77 68 65 6e 20 75 73 69 6e 67 20 73  che when using s
5530: 65 70 61 72 61 74 65 0a 2a 2a 20 70 61 67 65 63  eparate.** pagec
5540: 61 63 68 65 73 20 66 6f 72 20 65 61 63 68 20 64  aches for each d
5550: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
5560: 6f 6e 2e 20 20 41 20 70 6f 73 69 74 69 76 65 20  on.  A positive 
5570: 6e 75 6d 62 65 72 20 69 73 20 74 68 65 0a 2a 2a  number is the.**
5580: 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
5590: 2e 20 20 41 20 6e 65 67 61 74 69 76 65 20 6e 75  .  A negative nu
55a0: 6d 62 65 72 20 4e 20 74 72 61 6e 73 6c 61 74 69  mber N translati
55b0: 6f 6e 73 20 6d 65 61 6e 73 20 74 68 61 74 20 61  ons means that a
55c0: 20 62 75 66 66 65 72 0a 2a 2a 20 6f 66 20 2d 31   buffer.** of -1
55d0: 30 32 34 2a 4e 20 62 79 74 65 73 20 69 73 20 61  024*N bytes is a
55e0: 6c 6c 6f 63 61 74 65 64 20 61 6e 64 20 75 73 65  llocated and use
55f0: 64 20 66 6f 72 20 61 73 20 6d 61 6e 79 20 70 61  d for as many pa
5600: 67 65 73 20 61 73 20 69 74 20 77 69 6c 6c 20 68  ges as it will h
5610: 6f 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64  old..**.** The d
5620: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20  efault value of 
5630: 22 32 30 22 20 77 61 73 20 63 68 6f 6f 73 65 6e  "20" was choosen
5640: 20 74 6f 20 6d 69 6e 69 6d 69 7a 65 20 74 68 65   to minimize the
5650: 20 72 75 6e 2d 74 69 6d 65 20 6f 66 20 74 68 65   run-time of the
5660: 0a 2a 2a 20 73 70 65 65 64 74 65 73 74 31 20 74  .** speedtest1 t
5670: 65 73 74 20 70 72 6f 67 72 61 6d 20 77 69 74 68  est program with
5680: 20 6f 70 74 69 6f 6e 73 3a 20 2d 2d 73 68 72 69   options: --shri
5690: 6e 6b 2d 6d 65 6d 6f 72 79 20 2d 2d 72 65 70 72  nk-memory --repr
56a0: 65 70 61 72 65 0a 2a 2f 0a 23 69 66 6e 64 65 66  epare.*/.#ifndef
56b0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
56c0: 50 43 41 43 48 45 5f 49 4e 49 54 53 5a 0a 23 20  PCACHE_INITSZ.# 
56d0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
56e0: 46 41 55 4c 54 5f 50 43 41 43 48 45 5f 49 4e 49  FAULT_PCACHE_INI
56f0: 54 53 5a 20 32 30 0a 23 65 6e 64 69 66 0a 0a 2f  TSZ 20.#endif../
5700: 2a 0a 2a 2a 20 44 65 66 61 75 6c 74 20 76 61 6c  *.** Default val
5710: 75 65 20 66 6f 72 20 74 68 65 20 53 51 4c 49 54  ue for the SQLIT
5720: 45 5f 43 4f 4e 46 49 47 5f 53 4f 52 54 45 52 52  E_CONFIG_SORTERR
5730: 45 46 5f 53 49 5a 45 20 6f 70 74 69 6f 6e 2e 0a  EF_SIZE option..
5740: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
5750: 45 5f 44 45 46 41 55 4c 54 5f 53 4f 52 54 45 52  E_DEFAULT_SORTER
5760: 52 45 46 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e  REF_SIZE.# defin
5770: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
5780: 5f 53 4f 52 54 45 52 52 45 46 5f 53 49 5a 45 20  _SORTERREF_SIZE 
5790: 30 78 37 66 66 66 66 66 66 66 0a 23 65 6e 64 69  0x7fffffff.#endi
57a0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d  f../*.** The com
57b0: 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
57c0: 73 20 53 51 4c 49 54 45 5f 4d 4d 41 50 5f 52 45  s SQLITE_MMAP_RE
57d0: 41 44 57 52 49 54 45 20 61 6e 64 20 0a 2a 2a 20  ADWRITE and .** 
57e0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 42 41  SQLITE_ENABLE_BA
57f0: 54 43 48 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45  TCH_ATOMIC_WRITE
5800: 20 61 72 65 20 6e 6f 74 20 63 6f 6d 70 61 74 69   are not compati
5810: 62 6c 65 20 77 69 74 68 20 6f 6e 65 20 61 6e 6f  ble with one ano
5820: 74 68 65 72 2e 0a 2a 2a 20 59 6f 75 20 6d 75 73  ther..** You mus
5830: 74 20 63 68 6f 6f 73 65 20 6f 6e 65 20 6f 72 20  t choose one or 
5840: 74 68 65 20 6f 74 68 65 72 20 28 6f 72 20 6e 65  the other (or ne
5850: 69 74 68 65 72 29 20 62 75 74 20 6e 6f 74 20 62  ither) but not b
5860: 6f 74 68 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69  oth..*/.#if defi
5870: 6e 65 64 28 53 51 4c 49 54 45 5f 4d 4d 41 50 5f  ned(SQLITE_MMAP_
5880: 52 45 41 44 57 52 49 54 45 29 20 26 26 20 64 65  READWRITE) && de
5890: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
58a0: 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f 4d 49 43  BLE_BATCH_ATOMIC
58b0: 5f 57 52 49 54 45 29 0a 23 65 72 72 6f 72 20 43  _WRITE).#error C
58c0: 61 6e 6e 6f 74 20 75 73 65 20 62 6f 74 68 20 53  annot use both S
58d0: 51 4c 49 54 45 5f 4d 4d 41 50 5f 52 45 41 44 57  QLITE_MMAP_READW
58e0: 52 49 54 45 20 61 6e 64 20 53 51 4c 49 54 45 5f  RITE and SQLITE_
58f0: 45 4e 41 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f  ENABLE_BATCH_ATO
5900: 4d 49 43 5f 57 52 49 54 45 0a 23 65 6e 64 69 66  MIC_WRITE.#endif
5910: 0a 0a 2f 2a 0a 2a 2a 20 47 43 43 20 64 6f 65 73  ../*.** GCC does
5920: 20 6e 6f 74 20 64 65 66 69 6e 65 20 74 68 65 20   not define the 
5930: 6f 66 66 73 65 74 6f 66 28 29 20 6d 61 63 72 6f  offsetof() macro
5940: 20 73 6f 20 77 65 27 6c 6c 20 68 61 76 65 20 74   so we'll have t
5950: 6f 20 64 6f 20 69 74 0a 2a 2a 20 6f 75 72 73 65  o do it.** ourse
5960: 6c 76 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  lves..*/.#ifndef
5970: 20 6f 66 66 73 65 74 6f 66 0a 23 64 65 66 69 6e   offsetof.#defin
5980: 65 20 6f 66 66 73 65 74 6f 66 28 53 54 52 55 43  e offsetof(STRUC
5990: 54 55 52 45 2c 46 49 45 4c 44 29 20 28 28 69 6e  TURE,FIELD) ((in
59a0: 74 29 28 28 63 68 61 72 2a 29 26 28 28 53 54 52  t)((char*)&((STR
59b0: 55 43 54 55 52 45 2a 29 30 29 2d 3e 46 49 45 4c  UCTURE*)0)->FIEL
59c0: 44 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  D)).#endif../*.*
59d0: 2a 20 4d 61 63 72 6f 73 20 74 6f 20 63 6f 6d 70  * Macros to comp
59e0: 75 74 65 20 6d 69 6e 69 6d 75 6d 20 61 6e 64 20  ute minimum and 
59f0: 6d 61 78 69 6d 75 6d 20 6f 66 20 74 77 6f 20 6e  maximum of two n
5a00: 75 6d 62 65 72 73 2e 0a 2a 2f 0a 23 69 66 6e 64  umbers..*/.#ifnd
5a10: 65 66 20 4d 49 4e 0a 23 20 64 65 66 69 6e 65 20  ef MIN.# define 
5a20: 4d 49 4e 28 41 2c 42 29 20 28 28 41 29 3c 28 42  MIN(A,B) ((A)<(B
5a30: 29 3f 28 41 29 3a 28 42 29 29 0a 23 65 6e 64 69  )?(A):(B)).#endi
5a40: 66 0a 23 69 66 6e 64 65 66 20 4d 41 58 0a 23 20  f.#ifndef MAX.# 
5a50: 64 65 66 69 6e 65 20 4d 41 58 28 41 2c 42 29 20  define MAX(A,B) 
5a60: 28 28 41 29 3e 28 42 29 3f 28 41 29 3a 28 42 29  ((A)>(B)?(A):(B)
5a70: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
5a80: 53 77 61 70 20 74 77 6f 20 6f 62 6a 65 63 74 73  Swap two objects
5a90: 20 6f 66 20 74 79 70 65 20 54 59 50 45 2e 0a 2a   of type TYPE..*
5aa0: 2f 0a 23 64 65 66 69 6e 65 20 53 57 41 50 28 54  /.#define SWAP(T
5ab0: 59 50 45 2c 41 2c 42 29 20 7b 54 59 50 45 20 74  YPE,A,B) {TYPE t
5ac0: 3d 41 3b 20 41 3d 42 3b 20 42 3d 74 3b 7d 0a 0a  =A; A=B; B=t;}..
5ad0: 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 6f 20 73  /*.** Check to s
5ae0: 65 65 20 69 66 20 74 68 69 73 20 6d 61 63 68 69  ee if this machi
5af0: 6e 65 20 75 73 65 73 20 45 42 43 44 49 43 2e 20  ne uses EBCDIC. 
5b00: 20 28 59 65 73 2c 20 62 65 6c 69 65 76 65 20 69   (Yes, believe i
5b10: 74 20 6f 72 0a 2a 2a 20 6e 6f 74 2c 20 74 68 65  t or.** not, the
5b20: 72 65 20 61 72 65 20 73 74 69 6c 6c 20 6d 61 63  re are still mac
5b30: 68 69 6e 65 73 20 6f 75 74 20 74 68 65 72 65 20  hines out there 
5b40: 74 68 61 74 20 75 73 65 20 45 42 43 44 49 43 2e  that use EBCDIC.
5b50: 29 0a 2a 2f 0a 23 69 66 20 27 41 27 20 3d 3d 20  ).*/.#if 'A' == 
5b60: 27 5c 33 30 31 27 0a 23 20 64 65 66 69 6e 65 20  '\301'.# define 
5b70: 53 51 4c 49 54 45 5f 45 42 43 44 49 43 20 31 0a  SQLITE_EBCDIC 1.
5b80: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53  #else.# define S
5b90: 51 4c 49 54 45 5f 41 53 43 49 49 20 31 0a 23 65  QLITE_ASCII 1.#e
5ba0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65  ndif../*.** Inte
5bb0: 67 65 72 73 20 6f 66 20 6b 6e 6f 77 6e 20 73 69  gers of known si
5bc0: 7a 65 73 2e 20 20 54 68 65 73 65 20 74 79 70 65  zes.  These type
5bd0: 64 65 66 73 20 6d 69 67 68 74 20 63 68 61 6e 67  defs might chang
5be0: 65 20 66 6f 72 20 61 72 63 68 69 74 65 63 74 75  e for architectu
5bf0: 72 65 73 0a 2a 2a 20 77 68 65 72 65 20 74 68 65  res.** where the
5c00: 20 73 69 7a 65 73 20 76 65 72 79 2e 20 20 50 72   sizes very.  Pr
5c10: 65 70 72 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f  eprocessor macro
5c20: 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20  s are available 
5c30: 73 6f 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 74  so that the.** t
5c40: 79 70 65 73 20 63 61 6e 20 62 65 20 63 6f 6e 76  ypes can be conv
5c50: 65 6e 69 65 6e 74 6c 79 20 72 65 64 65 66 69 6e  eniently redefin
5c60: 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 79  ed at compile-ty
5c70: 70 65 2e 20 20 4c 69 6b 65 20 74 68 69 73 3a 0a  pe.  Like this:.
5c80: 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20 63 63  **.**         cc
5c90: 20 27 2d 44 55 49 4e 54 50 54 52 5f 54 59 50 45   '-DUINTPTR_TYPE
5ca0: 3d 6c 6f 6e 67 20 6c 6f 6e 67 20 69 6e 74 27 20  =long long int' 
5cb0: 2e 2e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 55  ....*/.#ifndef U
5cc0: 49 4e 54 33 32 5f 54 59 50 45 0a 23 20 69 66 64  INT32_TYPE.# ifd
5cd0: 65 66 20 48 41 56 45 5f 55 49 4e 54 33 32 5f 54  ef HAVE_UINT32_T
5ce0: 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 33  .#  define UINT3
5cf0: 32 5f 54 59 50 45 20 75 69 6e 74 33 32 5f 74 0a  2_TYPE uint32_t.
5d00: 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  # else.#  define
5d10: 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75 6e 73   UINT32_TYPE uns
5d20: 69 67 6e 65 64 20 69 6e 74 0a 23 20 65 6e 64 69  igned int.# endi
5d30: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
5d40: 20 55 49 4e 54 31 36 5f 54 59 50 45 0a 23 20 69   UINT16_TYPE.# i
5d50: 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54 31 36  fdef HAVE_UINT16
5d60: 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  _T.#  define UIN
5d70: 54 31 36 5f 54 59 50 45 20 75 69 6e 74 31 36 5f  T16_TYPE uint16_
5d80: 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  t.# else.#  defi
5d90: 6e 65 20 55 49 4e 54 31 36 5f 54 59 50 45 20 75  ne UINT16_TYPE u
5da0: 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 69 6e  nsigned short in
5db0: 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  t.# endif.#endif
5dc0: 0a 23 69 66 6e 64 65 66 20 49 4e 54 31 36 5f 54  .#ifndef INT16_T
5dd0: 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45  YPE.# ifdef HAVE
5de0: 5f 49 4e 54 31 36 5f 54 0a 23 20 20 64 65 66 69  _INT16_T.#  defi
5df0: 6e 65 20 49 4e 54 31 36 5f 54 59 50 45 20 69 6e  ne INT16_TYPE in
5e00: 74 31 36 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20  t16_t.# else.#  
5e10: 64 65 66 69 6e 65 20 49 4e 54 31 36 5f 54 59 50  define INT16_TYP
5e20: 45 20 73 68 6f 72 74 20 69 6e 74 0a 23 20 65 6e  E short int.# en
5e30: 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  dif.#endif.#ifnd
5e40: 65 66 20 55 49 4e 54 38 5f 54 59 50 45 0a 23 20  ef UINT8_TYPE.# 
5e50: 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54 38  ifdef HAVE_UINT8
5e60: 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  _T.#  define UIN
5e70: 54 38 5f 54 59 50 45 20 75 69 6e 74 38 5f 74 0a  T8_TYPE uint8_t.
5e80: 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  # else.#  define
5e90: 20 55 49 4e 54 38 5f 54 59 50 45 20 75 6e 73 69   UINT8_TYPE unsi
5ea0: 67 6e 65 64 20 63 68 61 72 0a 23 20 65 6e 64 69  gned char.# endi
5eb0: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
5ec0: 20 49 4e 54 38 5f 54 59 50 45 0a 23 20 69 66 64   INT8_TYPE.# ifd
5ed0: 65 66 20 48 41 56 45 5f 49 4e 54 38 5f 54 0a 23  ef HAVE_INT8_T.#
5ee0: 20 20 64 65 66 69 6e 65 20 49 4e 54 38 5f 54 59    define INT8_TY
5ef0: 50 45 20 69 6e 74 38 5f 74 0a 23 20 65 6c 73 65  PE int8_t.# else
5f00: 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 38 5f  .#  define INT8_
5f10: 54 59 50 45 20 73 69 67 6e 65 64 20 63 68 61 72  TYPE signed char
5f20: 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  .# endif.#endif.
5f30: 23 69 66 6e 64 65 66 20 4c 4f 4e 47 44 4f 55 42  #ifndef LONGDOUB
5f40: 4c 45 5f 54 59 50 45 0a 23 20 64 65 66 69 6e 65  LE_TYPE.# define
5f50: 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45   LONGDOUBLE_TYPE
5f60: 20 6c 6f 6e 67 20 64 6f 75 62 6c 65 0a 23 65 6e   long double.#en
5f70: 64 69 66 0a 74 79 70 65 64 65 66 20 73 71 6c 69  dif.typedef sqli
5f80: 74 65 5f 69 6e 74 36 34 20 69 36 34 3b 20 20 20  te_int64 i64;   
5f90: 20 20 20 20 20 20 20 2f 2a 20 38 2d 62 79 74 65         /* 8-byte
5fa0: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20   signed integer 
5fb0: 2a 2f 0a 74 79 70 65 64 65 66 20 73 71 6c 69 74  */.typedef sqlit
5fc0: 65 5f 75 69 6e 74 36 34 20 75 36 34 3b 20 20 20  e_uint64 u64;   
5fd0: 20 20 20 20 20 20 2f 2a 20 38 2d 62 79 74 65 20        /* 8-byte 
5fe0: 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  unsigned integer
5ff0: 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e 54   */.typedef UINT
6000: 33 32 5f 54 59 50 45 20 75 33 32 3b 20 20 20 20  32_TYPE u32;    
6010: 20 20 20 20 20 20 20 2f 2a 20 34 2d 62 79 74 65         /* 4-byte
6020: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65   unsigned intege
6030: 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e  r */.typedef UIN
6040: 54 31 36 5f 54 59 50 45 20 75 31 36 3b 20 20 20  T16_TYPE u16;   
6050: 20 20 20 20 20 20 20 20 2f 2a 20 32 2d 62 79 74          /* 2-byt
6060: 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67  e unsigned integ
6070: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e  er */.typedef IN
6080: 54 31 36 5f 54 59 50 45 20 69 31 36 3b 20 20 20  T16_TYPE i16;   
6090: 20 20 20 20 20 20 20 20 20 2f 2a 20 32 2d 62 79           /* 2-by
60a0: 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  te signed intege
60b0: 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e  r */.typedef UIN
60c0: 54 38 5f 54 59 50 45 20 75 38 3b 20 20 20 20 20  T8_TYPE u8;     
60d0: 20 20 20 20 20 20 20 20 2f 2a 20 31 2d 62 79 74          /* 1-byt
60e0: 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67  e unsigned integ
60f0: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e  er */.typedef IN
6100: 54 38 5f 54 59 50 45 20 69 38 3b 20 20 20 20 20  T8_TYPE i8;     
6110: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 2d 62 79           /* 1-by
6120: 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  te signed intege
6130: 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 49  r */../*.** SQLI
6140: 54 45 5f 4d 41 58 5f 55 33 32 20 69 73 20 61 20  TE_MAX_U32 is a 
6150: 75 36 34 20 63 6f 6e 73 74 61 6e 74 20 74 68 61  u64 constant tha
6160: 74 20 69 73 20 74 68 65 20 6d 61 78 69 6d 75 6d  t is the maximum
6170: 20 75 36 34 20 76 61 6c 75 65 0a 2a 2a 20 74 68   u64 value.** th
6180: 61 74 20 63 61 6e 20 62 65 20 73 74 6f 72 65 64  at can be stored
6190: 20 69 6e 20 61 20 75 33 32 20 77 69 74 68 6f 75   in a u32 withou
61a0: 74 20 6c 6f 73 73 20 6f 66 20 64 61 74 61 2e 20  t loss of data. 
61b0: 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73   The value.** is
61c0: 20 30 78 30 30 30 30 30 30 30 30 66 66 66 66 66   0x00000000fffff
61d0: 66 66 66 2e 20 20 42 75 74 20 62 65 63 61 75 73  fff.  But becaus
61e0: 65 20 6f 66 20 71 75 69 72 6b 73 20 6f 66 20 73  e of quirks of s
61f0: 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73 2c 20 77  ome compilers, w
6200: 65 0a 2a 2a 20 68 61 76 65 20 74 6f 20 73 70 65  e.** have to spe
6210: 63 69 66 79 20 74 68 65 20 76 61 6c 75 65 20 69  cify the value i
6220: 6e 20 74 68 65 20 6c 65 73 73 20 69 6e 74 75 69  n the less intui
6230: 74 69 76 65 20 6d 61 6e 6e 65 72 20 73 68 6f 77  tive manner show
6240: 6e 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  n:.*/.#define SQ
6250: 4c 49 54 45 5f 4d 41 58 5f 55 33 32 20 20 28 28  LITE_MAX_U32  ((
6260: 28 28 75 36 34 29 31 29 3c 3c 33 32 29 2d 31 29  ((u64)1)<<32)-1)
6270: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61  ../*.** The data
6280: 74 79 70 65 20 75 73 65 64 20 74 6f 20 73 74 6f  type used to sto
6290: 72 65 20 65 73 74 69 6d 61 74 65 73 20 6f 66 20  re estimates of 
62a0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  the number of ro
62b0: 77 73 20 69 6e 20 61 0a 2a 2a 20 74 61 62 6c 65  ws in a.** table
62c0: 20 6f 72 20 69 6e 64 65 78 2e 20 20 54 68 69 73   or index.  This
62d0: 20 69 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20   is an unsigned 
62e0: 69 6e 74 65 67 65 72 20 74 79 70 65 2e 20 20 46  integer type.  F
62f0: 6f 72 20 39 39 2e 39 25 20 6f 66 0a 2a 2a 20 74  or 99.9% of.** t
6300: 68 65 20 77 6f 72 6c 64 2c 20 61 20 33 32 2d 62  he world, a 32-b
6310: 69 74 20 69 6e 74 65 67 65 72 20 69 73 20 73 75  it integer is su
6320: 66 66 69 63 69 65 6e 74 2e 20 20 42 75 74 20 61  fficient.  But a
6330: 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 0a   64-bit integer.
6340: 2a 2a 20 63 61 6e 20 62 65 20 75 73 65 64 20 61  ** can be used a
6350: 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 69  t compile-time i
6360: 66 20 64 65 73 69 72 65 64 2e 0a 2a 2f 0a 23 69  f desired..*/.#i
6370: 66 64 65 66 20 53 51 4c 49 54 45 5f 36 34 42 49  fdef SQLITE_64BI
6380: 54 5f 53 54 41 54 53 0a 20 74 79 70 65 64 65 66  T_STATS. typedef
6390: 20 75 36 34 20 74 52 6f 77 63 6e 74 3b 20 20 20   u64 tRowcnt;   
63a0: 20 2f 2a 20 36 34 2d 62 69 74 20 6f 6e 6c 79 20   /* 64-bit only 
63b0: 69 66 20 72 65 71 75 65 73 74 65 64 20 61 74 20  if requested at 
63c0: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 2a 2f 0a  compile-time */.
63d0: 23 65 6c 73 65 0a 20 74 79 70 65 64 65 66 20 75  #else. typedef u
63e0: 33 32 20 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f  32 tRowcnt;    /
63f0: 2a 20 33 32 2d 62 69 74 20 69 73 20 74 68 65 20  * 32-bit is the 
6400: 64 65 66 61 75 6c 74 20 2a 2f 0a 23 65 6e 64 69  default */.#endi
6410: 66 0a 0a 2f 2a 0a 2a 2a 20 45 73 74 69 6d 61 74  f../*.** Estimat
6420: 65 64 20 71 75 61 6e 74 69 74 69 65 73 20 75 73  ed quantities us
6430: 65 64 20 66 6f 72 20 71 75 65 72 79 20 70 6c 61  ed for query pla
6440: 6e 6e 69 6e 67 20 61 72 65 20 73 74 6f 72 65 64  nning are stored
6450: 20 61 73 20 31 36 2d 62 69 74 0a 2a 2a 20 6c 6f   as 16-bit.** lo
6460: 67 61 72 69 74 68 6d 73 2e 20 20 46 6f 72 20 71  garithms.  For q
6470: 75 61 6e 74 69 74 79 20 58 2c 20 74 68 65 20 76  uantity X, the v
6480: 61 6c 75 65 20 73 74 6f 72 65 64 20 69 73 20 31  alue stored is 1
6490: 30 2a 6c 6f 67 32 28 58 29 2e 20 20 54 68 69 73  0*log2(X).  This
64a0: 0a 2a 2a 20 67 69 76 65 73 20 61 20 70 6f 73 73  .** gives a poss
64b0: 69 62 6c 65 20 72 61 6e 67 65 20 6f 66 20 76 61  ible range of va
64c0: 6c 75 65 73 20 6f 66 20 61 70 70 72 6f 78 69 6d  lues of approxim
64d0: 61 74 65 6c 79 20 31 2e 30 65 39 38 36 20 74 6f  ately 1.0e986 to
64e0: 20 31 65 2d 39 38 36 2e 0a 2a 2a 20 42 75 74 20   1e-986..** But 
64f0: 74 68 65 20 61 6c 6c 6f 77 65 64 20 76 61 6c 75  the allowed valu
6500: 65 73 20 61 72 65 20 22 67 72 61 69 6e 79 22 2e  es are "grainy".
6510: 20 20 4e 6f 74 20 65 76 65 72 79 20 76 61 6c 75    Not every valu
6520: 65 20 69 73 20 72 65 70 72 65 73 65 6e 74 61 62  e is representab
6530: 6c 65 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70  le..** For examp
6540: 6c 65 2c 20 71 75 61 6e 74 69 74 69 65 73 20 31  le, quantities 1
6550: 36 20 61 6e 64 20 31 37 20 61 72 65 20 62 6f 74  6 and 17 are bot
6560: 68 20 72 65 70 72 65 73 65 6e 74 65 64 20 62 79  h represented by
6570: 20 61 20 4c 6f 67 45 73 74 0a 2a 2a 20 6f 66 20   a LogEst.** of 
6580: 34 30 2e 20 20 48 6f 77 65 76 65 72 2c 20 73 69  40.  However, si
6590: 6e 63 65 20 4c 6f 67 45 73 74 20 71 75 61 6e 74  nce LogEst quant
65a0: 69 74 69 65 73 20 61 72 65 20 73 75 70 70 6f 73  ities are suppos
65b0: 65 20 74 6f 20 62 65 20 65 73 74 69 6d 61 74 65  e to be estimate
65c0: 73 2c 0a 2a 2a 20 6e 6f 74 20 65 78 61 63 74 20  s,.** not exact 
65d0: 76 61 6c 75 65 73 2c 20 74 68 69 73 20 69 6d 70  values, this imp
65e0: 72 65 63 69 73 69 6f 6e 20 69 73 20 6e 6f 74 20  recision is not 
65f0: 61 20 70 72 6f 62 6c 65 6d 2e 0a 2a 2a 0a 2a 2a  a problem..**.**
6600: 20 22 4c 6f 67 45 73 74 22 20 69 73 20 73 68 6f   "LogEst" is sho
6610: 72 74 20 66 6f 72 20 22 4c 6f 67 61 72 69 74 68  rt for "Logarith
6620: 6d 69 63 20 45 73 74 69 6d 61 74 65 22 2e 0a 2a  mic Estimate"..*
6630: 2a 0a 2a 2a 20 45 78 61 6d 70 6c 65 73 3a 0a 2a  *.** Examples:.*
6640: 2a 20 20 20 20 20 20 31 20 2d 3e 20 30 20 20 20  *      1 -> 0   
6650: 20 20 20 20 20 20 20 20 20 20 20 32 30 20 2d 3e             20 ->
6660: 20 34 33 20 20 20 20 20 20 20 20 20 20 31 30 30   43          100
6670: 30 30 20 2d 3e 20 31 33 32 0a 2a 2a 20 20 20 20  00 -> 132.**    
6680: 20 20 32 20 2d 3e 20 31 30 20 20 20 20 20 20 20    2 -> 10       
6690: 20 20 20 20 20 20 32 35 20 2d 3e 20 34 36 20 20        25 -> 46  
66a0: 20 20 20 20 20 20 20 20 32 35 30 30 30 20 2d 3e          25000 ->
66b0: 20 31 34 36 0a 2a 2a 20 20 20 20 20 20 33 20 2d   146.**      3 -
66c0: 3e 20 31 36 20 20 20 20 20 20 20 20 20 20 20 20  > 16            
66d0: 31 30 30 20 2d 3e 20 36 36 20 20 20 20 20 20 20  100 -> 66       
66e0: 20 31 30 30 30 30 30 30 20 2d 3e 20 31 39 39 0a   1000000 -> 199.
66f0: 2a 2a 20 20 20 20 20 20 34 20 2d 3e 20 32 30 20  **      4 -> 20 
6700: 20 20 20 20 20 20 20 20 20 20 31 30 30 30 20 2d            1000 -
6710: 3e 20 39 39 20 20 20 20 20 20 20 20 31 30 34 38  > 99        1048
6720: 35 37 36 20 2d 3e 20 32 30 30 0a 2a 2a 20 20 20  576 -> 200.**   
6730: 20 20 31 30 20 2d 3e 20 33 33 20 20 20 20 20 20    10 -> 33      
6740: 20 20 20 20 20 31 30 32 34 20 2d 3e 20 31 30 30       1024 -> 100
6750: 20 20 20 20 34 32 39 34 39 36 37 32 39 36 20 2d      4294967296 -
6760: 3e 20 33 32 30 0a 2a 2a 0a 2a 2a 20 54 68 65 20  > 320.**.** The 
6770: 4c 6f 67 45 73 74 20 63 61 6e 20 62 65 20 6e 65  LogEst can be ne
6780: 67 61 74 69 76 65 20 74 6f 20 69 6e 64 69 63 61  gative to indica
6790: 74 65 20 66 72 61 63 74 69 6f 6e 61 6c 20 76 61  te fractional va
67a0: 6c 75 65 73 2e 0a 2a 2a 20 45 78 61 6d 70 6c 65  lues..** Example
67b0: 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 30 2e 35 20  s:.**.**    0.5 
67c0: 2d 3e 20 2d 31 30 20 20 20 20 20 20 20 20 20 20  -> -10          
67d0: 20 30 2e 31 20 2d 3e 20 2d 33 33 20 20 20 20 20   0.1 -> -33     
67e0: 20 20 20 30 2e 30 36 32 35 20 2d 3e 20 2d 34 30     0.0625 -> -40
67f0: 0a 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 31  .*/.typedef INT1
6800: 36 5f 54 59 50 45 20 4c 6f 67 45 73 74 3b 0a 0a  6_TYPE LogEst;..
6810: 2f 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 53 51  /*.** Set the SQ
6820: 4c 49 54 45 5f 50 54 52 53 49 5a 45 20 6d 61 63  LITE_PTRSIZE mac
6830: 72 6f 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72  ro to the number
6840: 20 6f 66 20 62 79 74 65 73 20 69 6e 20 61 20 70   of bytes in a p
6850: 6f 69 6e 74 65 72 0a 2a 2f 0a 23 69 66 6e 64 65  ointer.*/.#ifnde
6860: 66 20 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45  f SQLITE_PTRSIZE
6870: 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28 5f 5f  .# if defined(__
6880: 53 49 5a 45 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f  SIZEOF_POINTER__
6890: 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  ).#   define SQL
68a0: 49 54 45 5f 50 54 52 53 49 5a 45 20 5f 5f 53 49  ITE_PTRSIZE __SI
68b0: 5a 45 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f 0a 23  ZEOF_POINTER__.#
68c0: 20 65 6c 69 66 20 64 65 66 69 6e 65 64 28 69 33   elif defined(i3
68d0: 38 36 29 20 20 20 20 20 7c 7c 20 64 65 66 69 6e  86)     || defin
68e0: 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20 20 20 7c  ed(__i386__)   |
68f0: 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 49 58 38  | defined(_M_IX8
6900: 36 29 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20  6) ||    \.     
6910: 20 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41 52 4d    defined(_M_ARM
6920: 29 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  )   || defined(_
6930: 5f 61 72 6d 5f 5f 29 20 20 20 20 7c 7c 20 64 65  _arm__)    || de
6940: 66 69 6e 65 64 28 5f 5f 78 38 36 29 20 20 20 7c  fined(__x86)   |
6950: 7c 20 20 20 20 5c 0a 20 20 20 20 20 20 28 64 65  |    \.      (de
6960: 66 69 6e 65 64 28 5f 5f 54 4f 53 5f 41 49 58 5f  fined(__TOS_AIX_
6970: 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f  _) && !defined(_
6980: 5f 36 34 42 49 54 5f 5f 29 29 0a 23 20 20 20 64  _64BIT__)).#   d
6990: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52  efine SQLITE_PTR
69a0: 53 49 5a 45 20 34 0a 23 20 65 6c 73 65 0a 23 20  SIZE 4.# else.# 
69b0: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
69c0: 50 54 52 53 49 5a 45 20 38 0a 23 20 65 6e 64 69  PTRSIZE 8.# endi
69d0: 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 54 68 65  f.#endif../* The
69e0: 20 75 70 74 72 20 74 79 70 65 20 69 73 20 61 6e   uptr type is an
69f0: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65   unsigned intege
6a00: 72 20 6c 61 72 67 65 20 65 6e 6f 75 67 68 20 74  r large enough t
6a10: 6f 20 68 6f 6c 64 20 61 20 70 6f 69 6e 74 65 72  o hold a pointer
6a20: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
6a30: 48 41 56 45 5f 53 54 44 49 4e 54 5f 48 29 0a 20  HAVE_STDINT_H). 
6a40: 20 74 79 70 65 64 65 66 20 75 69 6e 74 70 74 72   typedef uintptr
6a50: 5f 74 20 75 70 74 72 3b 0a 23 65 6c 69 66 20 53  _t uptr;.#elif S
6a60: 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 3d 3d 34  QLITE_PTRSIZE==4
6a70: 0a 20 20 74 79 70 65 64 65 66 20 75 33 32 20 75  .  typedef u32 u
6a80: 70 74 72 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70  ptr;.#else.  typ
6a90: 65 64 65 66 20 75 36 34 20 75 70 74 72 3b 0a 23  edef u64 uptr;.#
6aa0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
6ab0: 20 53 51 4c 49 54 45 5f 57 49 54 48 49 4e 28 50   SQLITE_WITHIN(P
6ac0: 2c 53 2c 45 29 20 6d 61 63 72 6f 20 63 68 65 63  ,S,E) macro chec
6ad0: 6b 73 20 74 6f 20 73 65 65 20 69 66 20 70 6f 69  ks to see if poi
6ae0: 6e 74 65 72 20 50 20 70 6f 69 6e 74 73 20 74 6f  nter P points to
6af0: 0a 2a 2a 20 73 6f 6d 65 74 68 69 6e 67 20 62 65  .** something be
6b00: 74 77 65 65 6e 20 53 20 28 69 6e 63 6c 75 73 69  tween S (inclusi
6b10: 76 65 29 20 61 6e 64 20 45 20 28 65 78 63 6c 75  ve) and E (exclu
6b20: 73 69 76 65 29 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20  sive)..**.** In 
6b30: 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 53 20 69  other words, S i
6b40: 73 20 61 20 62 75 66 66 65 72 20 61 6e 64 20 45  s a buffer and E
6b50: 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
6b60: 20 74 68 65 20 66 69 72 73 74 20 62 79 74 65 20   the first byte 
6b70: 61 66 74 65 72 0a 2a 2a 20 74 68 65 20 65 6e 64  after.** the end
6b80: 20 6f 66 20 62 75 66 66 65 72 20 53 2e 20 20 54   of buffer S.  T
6b90: 68 69 73 20 6d 61 63 72 6f 20 72 65 74 75 72 6e  his macro return
6ba0: 73 20 74 72 75 65 20 69 66 20 50 20 70 6f 69 6e  s true if P poin
6bb0: 74 73 20 74 6f 20 73 6f 6d 65 74 68 69 6e 67 0a  ts to something.
6bc0: 2a 2a 20 63 6f 6e 74 61 69 6e 65 64 20 77 69 74  ** contained wit
6bd0: 68 69 6e 20 74 68 65 20 62 75 66 66 65 72 20 53  hin the buffer S
6be0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
6bf0: 49 54 45 5f 57 49 54 48 49 4e 28 50 2c 53 2c 45  ITE_WITHIN(P,S,E
6c00: 29 20 28 28 28 75 70 74 72 29 28 50 29 3e 3d 28  ) (((uptr)(P)>=(
6c10: 75 70 74 72 29 28 53 29 29 26 26 28 28 75 70 74  uptr)(S))&&((upt
6c20: 72 29 28 50 29 3c 28 75 70 74 72 29 28 45 29 29  r)(P)<(uptr)(E))
6c30: 29 0a 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73  ).../*.** Macros
6c40: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 77 68   to determine wh
6c50: 65 74 68 65 72 20 74 68 65 20 6d 61 63 68 69 6e  ether the machin
6c60: 65 20 69 73 20 62 69 67 20 6f 72 20 6c 69 74 74  e is big or litt
6c70: 6c 65 20 65 6e 64 69 61 6e 2c 0a 2a 2a 20 61 6e  le endian,.** an
6c80: 64 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  d whether or not
6c90: 20 74 68 61 74 20 64 65 74 65 72 6d 69 6e 61 74   that determinat
6ca0: 69 6f 6e 20 69 73 20 72 75 6e 2d 74 69 6d 65 20  ion is run-time 
6cb0: 6f 72 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2e  or compile-time.
6cc0: 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 62 65 73 74 20  .**.** For best 
6cd0: 70 65 72 66 6f 72 6d 61 6e 63 65 2c 20 61 6e 20  performance, an 
6ce0: 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20  attempt is made 
6cf0: 74 6f 20 67 75 65 73 73 20 61 74 20 74 68 65 20  to guess at the 
6d00: 62 79 74 65 2d 6f 72 64 65 72 0a 2a 2a 20 75 73  byte-order.** us
6d10: 69 6e 67 20 43 2d 70 72 65 70 72 6f 63 65 73 73  ing C-preprocess
6d20: 6f 72 20 6d 61 63 72 6f 73 2e 20 20 49 66 20 74  or macros.  If t
6d30: 68 61 74 20 69 73 20 75 6e 73 75 63 63 65 73 73  hat is unsuccess
6d40: 66 75 6c 2c 20 6f 72 20 69 66 0a 2a 2a 20 2d 44  ful, or if.** -D
6d50: 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52  SQLITE_BYTEORDER
6d60: 3d 30 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20  =0 is set, then 
6d70: 62 79 74 65 2d 6f 72 64 65 72 20 69 73 20 64 65  byte-order is de
6d80: 74 65 72 6d 69 6e 65 64 0a 2a 2a 20 61 74 20 72  termined.** at r
6d90: 75 6e 2d 74 69 6d 65 2e 0a 2a 2f 0a 23 69 66 6e  un-time..*/.#ifn
6da0: 64 65 66 20 53 51 4c 49 54 45 5f 42 59 54 45 4f  def SQLITE_BYTEO
6db0: 52 44 45 52 0a 23 20 69 66 20 64 65 66 69 6e 65  RDER.# if define
6dc0: 64 28 69 33 38 36 29 20 20 20 20 20 20 7c 7c 20  d(i386)      || 
6dd0: 64 65 66 69 6e 65 64 28 5f 5f 69 33 38 36 5f 5f  defined(__i386__
6de0: 29 20 20 20 20 20 20 7c 7c 20 64 65 66 69 6e 65  )      || define
6df0: 64 28 5f 4d 5f 49 58 38 36 29 20 7c 7c 20 20 20  d(_M_IX86) ||   
6e00: 20 5c 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28   \.     defined(
6e10: 5f 5f 78 38 36 5f 36 34 29 20 20 7c 7c 20 64 65  __x86_64)  || de
6e20: 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34 5f 5f  fined(__x86_64__
6e30: 29 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28  )    || defined(
6e40: 5f 4d 5f 58 36 34 29 20 20 7c 7c 20 20 20 20 5c  _M_X64)  ||    \
6e50: 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28 5f 4d  .     defined(_M
6e60: 5f 41 4d 44 36 34 29 20 20 7c 7c 20 64 65 66 69  _AMD64)  || defi
6e70: 6e 65 64 28 5f 4d 5f 41 52 4d 29 20 20 20 20 20  ned(_M_ARM)     
6e80: 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f     || defined(__
6e90: 78 38 36 29 20 20 20 7c 7c 20 20 20 20 5c 0a 20  x86)   ||    \. 
6ea0: 20 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 41 52      defined(__AR
6eb0: 4d 45 4c 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65  MEL__) || define
6ec0: 64 28 5f 5f 41 41 52 43 48 36 34 45 4c 5f 5f 29  d(__AARCH64EL__)
6ed0: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41   || defined(_M_A
6ee0: 52 4d 36 34 29 0a 23 20 20 20 64 65 66 69 6e 65  RM64).#   define
6ef0: 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45   SQLITE_BYTEORDE
6f00: 52 20 20 20 20 31 32 33 34 0a 23 20 65 6c 69 66  R    1234.# elif
6f10: 20 64 65 66 69 6e 65 64 28 73 70 61 72 63 29 20   defined(sparc) 
6f20: 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f      || defined(_
6f30: 5f 70 70 63 5f 5f 29 20 7c 7c 20 5c 0a 20 20 20  _ppc__) || \.   
6f40: 20 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 41 52      defined(__AR
6f50: 4d 45 42 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65  MEB__) || define
6f60: 64 28 5f 5f 41 41 52 43 48 36 34 45 42 5f 5f 29  d(__AARCH64EB__)
6f70: 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49  .#   define SQLI
6f80: 54 45 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20  TE_BYTEORDER    
6f90: 34 33 32 31 0a 23 20 65 6c 73 65 0a 23 20 20 20  4321.# else.#   
6fa0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 59  define SQLITE_BY
6fb0: 54 45 4f 52 44 45 52 20 30 0a 23 20 65 6e 64 69  TEORDER 0.# endi
6fc0: 66 0a 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c  f.#endif.#if SQL
6fd0: 49 54 45 5f 42 59 54 45 4f 52 44 45 52 3d 3d 34  ITE_BYTEORDER==4
6fe0: 33 32 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  321.# define SQL
6ff0: 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20  ITE_BIGENDIAN   
7000: 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49   1.# define SQLI
7010: 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20  TE_LITTLEENDIAN 
7020: 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  0.# define SQLIT
7030: 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20 53  E_UTF16NATIVE  S
7040: 51 4c 49 54 45 5f 55 54 46 31 36 42 45 0a 23 65  QLITE_UTF16BE.#e
7050: 6c 69 66 20 53 51 4c 49 54 45 5f 42 59 54 45 4f  lif SQLITE_BYTEO
7060: 52 44 45 52 3d 3d 31 32 33 34 0a 23 20 64 65 66  RDER==1234.# def
7070: 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e  ine SQLITE_BIGEN
7080: 44 49 41 4e 20 20 20 20 30 0a 23 20 64 65 66 69  DIAN    0.# defi
7090: 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45  ne SQLITE_LITTLE
70a0: 45 4e 44 49 41 4e 20 31 0a 23 20 64 65 66 69 6e  ENDIAN 1.# defin
70b0: 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41  e SQLITE_UTF16NA
70c0: 54 49 56 45 20 20 53 51 4c 49 54 45 5f 55 54 46  TIVE  SQLITE_UTF
70d0: 31 36 4c 45 0a 23 65 6c 73 65 0a 23 20 69 66 64  16LE.#else.# ifd
70e0: 65 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41  ef SQLITE_AMALGA
70f0: 4d 41 54 49 4f 4e 0a 20 20 63 6f 6e 73 74 20 69  MATION.  const i
7100: 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65 20 3d 20  nt sqlite3one = 
7110: 31 3b 0a 23 20 65 6c 73 65 0a 20 20 65 78 74 65  1;.# else.  exte
7120: 72 6e 20 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c  rn const int sql
7130: 69 74 65 33 6f 6e 65 3b 0a 23 20 65 6e 64 69 66  ite3one;.# endif
7140: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
7150: 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20 28 2a  _BIGENDIAN    (*
7160: 28 63 68 61 72 20 2a 29 28 26 73 71 6c 69 74 65  (char *)(&sqlite
7170: 33 6f 6e 65 29 3d 3d 30 29 0a 23 20 64 65 66 69  3one)==0).# defi
7180: 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45  ne SQLITE_LITTLE
7190: 45 4e 44 49 41 4e 20 28 2a 28 63 68 61 72 20 2a  ENDIAN (*(char *
71a0: 29 28 26 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d  )(&sqlite3one)==
71b0: 31 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  1).# define SQLI
71c0: 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20  TE_UTF16NATIVE  
71d0: 28 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41  (SQLITE_BIGENDIA
71e0: 4e 3f 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45  N?SQLITE_UTF16BE
71f0: 3a 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 29  :SQLITE_UTF16LE)
7200: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43  .#endif../*.** C
7210: 6f 6e 73 74 61 6e 74 73 20 66 6f 72 20 74 68 65  onstants for the
7220: 20 6c 61 72 67 65 73 74 20 61 6e 64 20 73 6d 61   largest and sma
7230: 6c 6c 65 73 74 20 70 6f 73 73 69 62 6c 65 20 36  llest possible 6
7240: 34 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74  4-bit signed int
7250: 65 67 65 72 73 2e 0a 2a 2a 20 54 68 65 73 65 20  egers..** These 
7260: 6d 61 63 72 6f 73 20 61 72 65 20 64 65 73 69 67  macros are desig
7270: 6e 65 64 20 74 6f 20 77 6f 72 6b 20 63 6f 72 72  ned to work corr
7280: 65 63 74 6c 79 20 6f 6e 20 62 6f 74 68 20 33 32  ectly on both 32
7290: 2d 62 69 74 20 61 6e 64 20 36 34 2d 62 69 74 0a  -bit and 64-bit.
72a0: 2a 2a 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2f  ** compilers..*/
72b0: 0a 23 64 65 66 69 6e 65 20 4c 41 52 47 45 53 54  .#define LARGEST
72c0: 5f 49 4e 54 36 34 20 20 28 30 78 66 66 66 66 66  _INT64  (0xfffff
72d0: 66 66 66 7c 28 28 28 69 36 34 29 30 78 37 66 66  fff|(((i64)0x7ff
72e0: 66 66 66 66 66 29 3c 3c 33 32 29 29 0a 23 64 65  fffff)<<32)).#de
72f0: 66 69 6e 65 20 53 4d 41 4c 4c 45 53 54 5f 49 4e  fine SMALLEST_IN
7300: 54 36 34 20 28 28 28 69 36 34 29 2d 31 29 20 2d  T64 (((i64)-1) -
7310: 20 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 29 0a   LARGEST_INT64).
7320: 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20 75 70 20  ./*.** Round up 
7330: 61 20 6e 75 6d 62 65 72 20 74 6f 20 74 68 65 20  a number to the 
7340: 6e 65 78 74 20 6c 61 72 67 65 72 20 6d 75 6c 74  next larger mult
7350: 69 70 6c 65 20 6f 66 20 38 2e 20 20 54 68 69 73  iple of 8.  This
7360: 20 69 73 20 75 73 65 64 0a 2a 2a 20 74 6f 20 66   is used.** to f
7370: 6f 72 63 65 20 38 2d 62 79 74 65 20 61 6c 69 67  orce 8-byte alig
7380: 6e 6d 65 6e 74 20 6f 6e 20 36 34 2d 62 69 74 20  nment on 64-bit 
7390: 61 72 63 68 69 74 65 63 74 75 72 65 73 2e 0a 2a  architectures..*
73a0: 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e 44 38  /.#define ROUND8
73b0: 28 78 29 20 20 20 20 20 28 28 28 78 29 2b 37 29  (x)     (((x)+7)
73c0: 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e  &~7)../*.** Roun
73d0: 64 20 64 6f 77 6e 20 74 6f 20 74 68 65 20 6e 65  d down to the ne
73e0: 61 72 65 73 74 20 6d 75 6c 74 69 70 6c 65 20 6f  arest multiple o
73f0: 66 20 38 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52  f 8.*/.#define R
7400: 4f 55 4e 44 44 4f 57 4e 38 28 78 29 20 28 28 78  OUNDDOWN8(x) ((x
7410: 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 41 73 73  )&~7)../*.** Ass
7420: 65 72 74 20 74 68 61 74 20 74 68 65 20 70 6f 69  ert that the poi
7430: 6e 74 65 72 20 58 20 69 73 20 61 6c 69 67 6e 65  nter X is aligne
7440: 64 20 74 6f 20 61 6e 20 38 2d 62 79 74 65 20 62  d to an 8-byte b
7450: 6f 75 6e 64 61 72 79 2e 20 20 54 68 69 73 0a 2a  oundary.  This.*
7460: 2a 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20  * macro is used 
7470: 6f 6e 6c 79 20 77 69 74 68 69 6e 20 61 73 73 65  only within asse
7480: 72 74 28 29 20 74 6f 20 76 65 72 69 66 79 20 74  rt() to verify t
7490: 68 61 74 20 74 68 65 20 63 6f 64 65 20 67 65 74  hat the code get
74a0: 73 0a 2a 2a 20 61 6c 6c 20 61 6c 69 67 6e 6d 65  s.** all alignme
74b0: 6e 74 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20  nt restrictions 
74c0: 63 6f 72 72 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 45  correct..**.** E
74d0: 78 63 65 70 74 2c 20 69 66 20 53 51 4c 49 54 45  xcept, if SQLITE
74e0: 5f 34 5f 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f  _4_BYTE_ALIGNED_
74f0: 4d 41 4c 4c 4f 43 20 69 73 20 64 65 66 69 6e 65  MALLOC is define
7500: 64 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 75  d, then the.** u
7510: 6e 64 65 72 6c 79 69 6e 67 20 6d 61 6c 6c 6f 63  nderlying malloc
7520: 28 29 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  () implementatio
7530: 6e 20 6d 69 67 68 74 20 72 65 74 75 72 6e 20 75  n might return u
7540: 73 20 34 2d 62 79 74 65 20 61 6c 69 67 6e 65 64  s 4-byte aligned
7550: 0a 2a 2a 20 70 6f 69 6e 74 65 72 73 2e 20 20 49  .** pointers.  I
7560: 6e 20 74 68 61 74 20 63 61 73 65 2c 20 6f 6e 6c  n that case, onl
7570: 79 20 76 65 72 69 66 79 20 34 2d 62 79 74 65 20  y verify 4-byte 
7580: 61 6c 69 67 6e 6d 65 6e 74 2e 0a 2a 2f 0a 23 69  alignment..*/.#i
7590: 66 64 65 66 20 53 51 4c 49 54 45 5f 34 5f 42 59  fdef SQLITE_4_BY
75a0: 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f  TE_ALIGNED_MALLO
75b0: 43 0a 23 20 64 65 66 69 6e 65 20 45 49 47 48 54  C.# define EIGHT
75c0: 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28  _BYTE_ALIGNMENT(
75d0: 58 29 20 20 20 28 28 28 28 63 68 61 72 2a 29 28  X)   ((((char*)(
75e0: 58 29 20 2d 20 28 63 68 61 72 2a 29 30 29 26 33  X) - (char*)0)&3
75f0: 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64 65  )==0).#else.# de
7600: 66 69 6e 65 20 45 49 47 48 54 5f 42 59 54 45 5f  fine EIGHT_BYTE_
7610: 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20 20 28  ALIGNMENT(X)   (
7620: 28 28 28 63 68 61 72 2a 29 28 58 29 20 2d 20 28  (((char*)(X) - (
7630: 63 68 61 72 2a 29 30 29 26 37 29 3d 3d 30 29 0a  char*)0)&7)==0).
7640: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 69  #endif../*.** Di
7650: 73 61 62 6c 65 20 4d 4d 41 50 20 6f 6e 20 70 6c  sable MMAP on pl
7660: 61 74 66 6f 72 6d 73 20 77 68 65 72 65 20 69 74  atforms where it
7670: 20 69 73 20 6b 6e 6f 77 6e 20 74 6f 20 6e 6f 74   is known to not
7680: 20 77 6f 72 6b 0a 2a 2f 0a 23 69 66 20 64 65 66   work.*/.#if def
7690: 69 6e 65 64 28 5f 5f 4f 70 65 6e 42 53 44 5f 5f  ined(__OpenBSD__
76a0: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 51  ) || defined(__Q
76b0: 4e 58 4e 54 4f 5f 5f 29 0a 23 20 75 6e 64 65 66  NXNTO__).# undef
76c0: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50   SQLITE_MAX_MMAP
76d0: 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53  _SIZE.# define S
76e0: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
76f0: 49 5a 45 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  IZE 0.#endif../*
7700: 0a 2a 2a 20 44 65 66 61 75 6c 74 20 6d 61 78 69  .** Default maxi
7710: 6d 75 6d 20 73 69 7a 65 20 6f 66 20 6d 65 6d 6f  mum size of memo
7720: 72 79 20 75 73 65 64 20 62 79 20 6d 65 6d 6f 72  ry used by memor
7730: 79 2d 6d 61 70 70 65 64 20 49 2f 4f 20 69 6e 20  y-mapped I/O in 
7740: 74 68 65 20 56 46 53 0a 2a 2f 0a 23 69 66 64 65  the VFS.*/.#ifde
7750: 66 20 5f 5f 41 50 50 4c 45 5f 5f 0a 23 20 69 6e  f __APPLE__.# in
7760: 63 6c 75 64 65 20 3c 54 61 72 67 65 74 43 6f 6e  clude <TargetCon
7770: 64 69 74 69 6f 6e 61 6c 73 2e 68 3e 0a 23 65 6e  ditionals.h>.#en
7780: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
7790: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
77a0: 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28 5f 5f  .# if defined(__
77b0: 6c 69 6e 75 78 5f 5f 29 20 5c 0a 20 20 7c 7c 20  linux__) \.  || 
77c0: 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20  defined(_WIN32) 
77d0: 5c 0a 20 20 7c 7c 20 28 64 65 66 69 6e 65 64 28  \.  || (defined(
77e0: 5f 5f 41 50 50 4c 45 5f 5f 29 20 26 26 20 64 65  __APPLE__) && de
77f0: 66 69 6e 65 64 28 5f 5f 4d 41 43 48 5f 5f 29 29  fined(__MACH__))
7800: 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28   \.  || defined(
7810: 5f 5f 73 75 6e 29 20 5c 0a 20 20 7c 7c 20 64 65  __sun) \.  || de
7820: 66 69 6e 65 64 28 5f 5f 46 72 65 65 42 53 44 5f  fined(__FreeBSD_
7830: 5f 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65  _) \.  || define
7840: 64 28 5f 5f 44 72 61 67 6f 6e 46 6c 79 5f 5f 29  d(__DragonFly__)
7850: 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49  .#   define SQLI
7860: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
7870: 20 30 78 37 66 66 66 30 30 30 30 20 20 2f 2a 20   0x7fff0000  /* 
7880: 32 31 34 37 34 31 38 31 31 32 20 2a 2f 0a 23 20  2147418112 */.# 
7890: 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20  else.#   define 
78a0: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
78b0: 53 49 5a 45 20 30 0a 23 20 65 6e 64 69 66 0a 23  SIZE 0.# endif.#
78c0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
78d0: 20 64 65 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49   default MMAP_SI
78e0: 5a 45 20 69 73 20 7a 65 72 6f 20 6f 6e 20 61 6c  ZE is zero on al
78f0: 6c 20 70 6c 61 74 66 6f 72 6d 73 2e 20 20 4f 72  l platforms.  Or
7900: 2c 20 65 76 65 6e 20 69 66 20 61 20 6c 61 72 67  , even if a larg
7910: 65 72 0a 2a 2a 20 64 65 66 61 75 6c 74 20 4d 4d  er.** default MM
7920: 41 50 5f 53 49 5a 45 20 69 73 20 73 70 65 63 69  AP_SIZE is speci
7930: 66 69 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d  fied at compile-
7940: 74 69 6d 65 2c 20 6d 61 6b 65 20 73 75 72 65 20  time, make sure 
7950: 74 68 61 74 20 69 74 20 64 6f 65 73 0a 2a 2a 20  that it does.** 
7960: 6e 6f 74 20 65 78 63 65 65 64 20 74 68 65 20 6d  not exceed the m
7970: 61 78 69 6d 75 6d 20 6d 6d 61 70 20 73 69 7a 65  aximum mmap size
7980: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
7990: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50  ITE_DEFAULT_MMAP
79a0: 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53  _SIZE.# define S
79b0: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d  QLITE_DEFAULT_MM
79c0: 41 50 5f 53 49 5a 45 20 30 0a 23 65 6e 64 69 66  AP_SIZE 0.#endif
79d0: 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45 46 41  .#if SQLITE_DEFA
79e0: 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 3e 53 51  ULT_MMAP_SIZE>SQ
79f0: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
7a00: 5a 45 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54  ZE.# undef SQLIT
7a10: 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53  E_DEFAULT_MMAP_S
7a20: 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  IZE.# define SQL
7a30: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50  ITE_DEFAULT_MMAP
7a40: 5f 53 49 5a 45 20 53 51 4c 49 54 45 5f 4d 41 58  _SIZE SQLITE_MAX
7a50: 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 65 6e 64 69  _MMAP_SIZE.#endi
7a60: 66 0a 0a 2f 2a 0a 2a 2a 20 53 45 4c 45 43 54 54  f../*.** SELECTT
7a70: 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 77 69 6c  RACE_ENABLED wil
7a80: 6c 20 62 65 20 65 69 74 68 65 72 20 31 20 6f 72  l be either 1 or
7a90: 20 30 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20   0 depending on 
7aa0: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 0a 2a  whether or not.*
7ab0: 2a 20 74 68 65 20 53 65 6c 65 63 74 20 71 75 65  * the Select que
7ac0: 72 79 20 67 65 6e 65 72 61 74 6f 72 20 74 72 61  ry generator tra
7ad0: 63 69 6e 67 20 6c 6f 67 69 63 20 69 73 20 74 75  cing logic is tu
7ae0: 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66 20  rned on..*/.#if 
7af0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
7b00: 4e 41 42 4c 45 5f 53 45 4c 45 43 54 54 52 41 43  NABLE_SELECTTRAC
7b10: 45 29 0a 23 20 64 65 66 69 6e 65 20 53 45 4c 45  E).# define SELE
7b20: 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20  CTTRACE_ENABLED 
7b30: 31 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  1.#else.# define
7b40: 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41   SELECTTRACE_ENA
7b50: 42 4c 45 44 20 30 0a 23 65 6e 64 69 66 0a 0a 2f  BLED 0.#endif../
7b60: 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
7b70: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
7b80: 67 20 73 74 72 75 63 74 75 72 65 20 69 73 20 75  g structure is u
7b90: 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65  sed to store the
7ba0: 20 62 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a   busy-handler.**
7bb0: 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 61 20   callback for a 
7bc0: 67 69 76 65 6e 20 73 71 6c 69 74 65 20 68 61 6e  given sqlite han
7bd0: 64 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73  dle..**.** The s
7be0: 71 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c 65  qlite.busyHandle
7bf0: 72 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20  r member of the 
7c00: 73 71 6c 69 74 65 20 73 74 72 75 63 74 20 63 6f  sqlite struct co
7c10: 6e 74 61 69 6e 73 20 74 68 65 20 62 75 73 79 0a  ntains the busy.
7c20: 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20  ** callback for 
7c30: 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e  the database han
7c40: 64 6c 65 2e 20 45 61 63 68 20 70 61 67 65 72 20  dle. Each pager 
7c50: 6f 70 65 6e 65 64 20 76 69 61 20 74 68 65 20 73  opened via the s
7c60: 71 6c 69 74 65 0a 2a 2a 20 68 61 6e 64 6c 65 20  qlite.** handle 
7c70: 69 73 20 70 61 73 73 65 64 20 61 20 70 6f 69 6e  is passed a poin
7c80: 74 65 72 20 74 6f 20 73 71 6c 69 74 65 2e 62 75  ter to sqlite.bu
7c90: 73 79 48 61 6e 64 6c 65 72 2e 20 54 68 65 20 62  syHandler. The b
7ca0: 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63  usy-handler.** c
7cb0: 61 6c 6c 62 61 63 6b 20 69 73 20 63 75 72 72 65  allback is curre
7cc0: 6e 74 6c 79 20 69 6e 76 6f 6b 65 64 20 6f 6e 6c  ntly invoked onl
7cd0: 79 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 70 61  y from within pa
7ce0: 67 65 72 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64 65  ger.c..*/.typede
7cf0: 66 20 73 74 72 75 63 74 20 42 75 73 79 48 61 6e  f struct BusyHan
7d00: 64 6c 65 72 20 42 75 73 79 48 61 6e 64 6c 65 72  dler BusyHandler
7d10: 3b 0a 73 74 72 75 63 74 20 42 75 73 79 48 61 6e  ;.struct BusyHan
7d20: 64 6c 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78  dler {.  int (*x
7d30: 42 75 73 79 48 61 6e 64 6c 65 72 29 28 76 6f 69  BusyHandler)(voi
7d40: 64 20 2a 2c 69 6e 74 29 3b 20 20 2f 2a 20 54 68  d *,int);  /* Th
7d50: 65 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20  e busy callback 
7d60: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 42 75 73 79  */.  void *pBusy
7d70: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
7d80: 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
7d90: 61 72 67 20 74 6f 20 62 75 73 79 20 63 61 6c 6c  arg to busy call
7da0: 62 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 42  back */.  int nB
7db0: 75 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20  usy;            
7dc0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
7dd0: 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68 20  ncremented with 
7de0: 65 61 63 68 20 62 75 73 79 20 63 61 6c 6c 20 2a  each busy call *
7df0: 2f 0a 20 20 75 38 20 62 45 78 74 72 61 46 69 6c  /.  u8 bExtraFil
7e00: 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  eArg;           
7e10: 20 20 20 20 20 20 2f 2a 20 49 6e 63 6c 75 64 65        /* Include
7e20: 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 61 73   sqlite3_file as
7e30: 20 63 61 6c 6c 62 61 63 6b 20 61 72 67 20 2a 2f   callback arg */
7e40: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 4e 61 6d 65 20  .};../*.** Name 
7e50: 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20 64 61  of the master da
7e60: 74 61 62 61 73 65 20 74 61 62 6c 65 2e 20 20 54  tabase table.  T
7e70: 68 65 20 6d 61 73 74 65 72 20 64 61 74 61 62 61  he master databa
7e80: 73 65 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20 61  se table.** is a
7e90: 20 73 70 65 63 69 61 6c 20 74 61 62 6c 65 20 74   special table t
7ea0: 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20 6e 61  hat holds the na
7eb0: 6d 65 73 20 61 6e 64 20 61 74 74 72 69 62 75 74  mes and attribut
7ec0: 65 73 20 6f 66 20 61 6c 6c 0a 2a 2a 20 75 73 65  es of all.** use
7ed0: 72 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e 64  r tables and ind
7ee0: 69 63 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ices..*/.#define
7ef0: 20 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20 20 20   MASTER_NAME    
7f00: 20 20 20 22 73 71 6c 69 74 65 5f 6d 61 73 74 65     "sqlite_maste
7f10: 72 22 0a 23 64 65 66 69 6e 65 20 54 45 4d 50 5f  r".#define TEMP_
7f20: 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20 22 73 71  MASTER_NAME  "sq
7f30: 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72  lite_temp_master
7f40: 22 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f  "../*.** The roo
7f50: 74 2d 70 61 67 65 20 6f 66 20 74 68 65 20 6d 61  t-page of the ma
7f60: 73 74 65 72 20 64 61 74 61 62 61 73 65 20 74 61  ster database ta
7f70: 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ble..*/.#define 
7f80: 4d 41 53 54 45 52 5f 52 4f 4f 54 20 20 20 20 20  MASTER_ROOT     
7f90: 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e    1../*.** The n
7fa0: 61 6d 65 20 6f 66 20 74 68 65 20 73 63 68 65 6d  ame of the schem
7fb0: 61 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66  a table..*/.#def
7fc0: 69 6e 65 20 53 43 48 45 4d 41 5f 54 41 42 4c 45  ine SCHEMA_TABLE
7fd0: 28 78 29 20 20 28 28 21 4f 4d 49 54 5f 54 45 4d  (x)  ((!OMIT_TEM
7fe0: 50 44 42 29 26 26 28 78 3d 3d 31 29 3f 54 45 4d  PDB)&&(x==1)?TEM
7ff0: 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 3a 4d 41  P_MASTER_NAME:MA
8000: 53 54 45 52 5f 4e 41 4d 45 29 0a 0a 2f 2a 0a 2a  STER_NAME)../*.*
8010: 2a 20 41 20 63 6f 6e 76 65 6e 69 65 6e 63 65 20  * A convenience 
8020: 6d 61 63 72 6f 20 74 68 61 74 20 72 65 74 75 72  macro that retur
8030: 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ns the number of
8040: 20 65 6c 65 6d 65 6e 74 73 20 69 6e 0a 2a 2a 20   elements in.** 
8050: 61 6e 20 61 72 72 61 79 2e 0a 2a 2f 0a 23 64 65  an array..*/.#de
8060: 66 69 6e 65 20 41 72 72 61 79 53 69 7a 65 28 58  fine ArraySize(X
8070: 29 20 20 20 20 28 28 69 6e 74 29 28 73 69 7a 65  )    ((int)(size
8080: 6f 66 28 58 29 2f 73 69 7a 65 6f 66 28 58 5b 30  of(X)/sizeof(X[0
8090: 5d 29 29 29 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65  ])))../*.** Dete
80a0: 72 6d 69 6e 65 20 69 66 20 74 68 65 20 61 72 67  rmine if the arg
80b0: 75 6d 65 6e 74 20 69 73 20 61 20 70 6f 77 65 72  ument is a power
80c0: 20 6f 66 20 74 77 6f 0a 2a 2f 0a 23 64 65 66 69   of two.*/.#defi
80d0: 6e 65 20 49 73 50 6f 77 65 72 4f 66 54 77 6f 28  ne IsPowerOfTwo(
80e0: 58 29 20 28 28 28 58 29 26 28 28 58 29 2d 31 29  X) (((X)&((X)-1)
80f0: 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  )==0)../*.** The
8100: 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 6c 75 65   following value
8110: 20 61 73 20 61 20 64 65 73 74 72 75 63 74 6f 72   as a destructor
8120: 20 6d 65 61 6e 73 20 74 6f 20 75 73 65 20 73 71   means to use sq
8130: 6c 69 74 65 33 44 62 46 72 65 65 28 29 2e 0a 2a  lite3DbFree()..*
8140: 2a 20 54 68 65 20 73 71 6c 69 74 65 33 44 62 46  * The sqlite3DbF
8150: 72 65 65 28 29 20 72 6f 75 74 69 6e 65 20 72 65  ree() routine re
8160: 71 75 69 72 65 73 20 74 77 6f 20 70 61 72 61 6d  quires two param
8170: 65 74 65 72 73 20 69 6e 73 74 65 61 64 20 6f 66  eters instead of
8180: 20 74 68 65 0a 2a 2a 20 6f 6e 65 20 70 61 72 61   the.** one para
8190: 6d 65 74 65 72 20 74 68 61 74 20 64 65 73 74 72  meter that destr
81a0: 75 63 74 6f 72 73 20 6e 6f 72 6d 61 6c 6c 79 20  uctors normally 
81b0: 77 61 6e 74 2e 20 20 53 6f 20 77 65 20 68 61 76  want.  So we hav
81c0: 65 20 74 6f 20 69 6e 74 72 6f 64 75 63 65 0a 2a  e to introduce.*
81d0: 2a 20 74 68 69 73 20 6d 61 67 69 63 20 76 61 6c  * this magic val
81e0: 75 65 20 74 68 61 74 20 74 68 65 20 63 6f 64 65  ue that the code
81f0: 20 6b 6e 6f 77 73 20 74 6f 20 68 61 6e 64 6c 65   knows to handle
8200: 20 64 69 66 66 65 72 65 6e 74 6c 79 2e 20 20 41   differently.  A
8210: 6e 79 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 77 69  ny.** pointer wi
8220: 6c 6c 20 77 6f 72 6b 20 68 65 72 65 20 61 73 20  ll work here as 
8230: 6c 6f 6e 67 20 61 73 20 69 74 20 69 73 20 64 69  long as it is di
8240: 73 74 69 6e 63 74 20 66 72 6f 6d 20 53 51 4c 49  stinct from SQLI
8250: 54 45 5f 53 54 41 54 49 43 0a 2a 2a 20 61 6e 64  TE_STATIC.** and
8260: 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e   SQLITE_TRANSIEN
8270: 54 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  T..*/.#define SQ
8280: 4c 49 54 45 5f 44 59 4e 41 4d 49 43 20 20 20 28  LITE_DYNAMIC   (
8290: 28 73 71 6c 69 74 65 33 5f 64 65 73 74 72 75 63  (sqlite3_destruc
82a0: 74 6f 72 5f 74 79 70 65 29 73 71 6c 69 74 65 33  tor_type)sqlite3
82b0: 4d 61 6c 6c 6f 63 53 69 7a 65 29 0a 0a 2f 2a 0a  MallocSize)../*.
82c0: 2a 2a 20 57 68 65 6e 20 53 51 4c 49 54 45 5f 4f  ** When SQLITE_O
82d0: 4d 49 54 5f 57 53 44 20 69 73 20 64 65 66 69 6e  MIT_WSD is defin
82e0: 65 64 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61  ed, it means tha
82f0: 74 20 74 68 65 20 74 61 72 67 65 74 20 70 6c 61  t the target pla
8300: 74 66 6f 72 6d 20 64 6f 65 73 0a 2a 2a 20 6e 6f  tform does.** no
8310: 74 20 73 75 70 70 6f 72 74 20 57 72 69 74 61 62  t support Writab
8320: 6c 65 20 53 74 61 74 69 63 20 44 61 74 61 20 28  le Static Data (
8330: 57 53 44 29 20 73 75 63 68 20 61 73 20 67 6c 6f  WSD) such as glo
8340: 62 61 6c 20 61 6e 64 20 73 74 61 74 69 63 20 76  bal and static v
8350: 61 72 69 61 62 6c 65 73 2e 0a 2a 2a 20 41 6c 6c  ariables..** All
8360: 20 76 61 72 69 61 62 6c 65 73 20 6d 75 73 74 20   variables must 
8370: 65 69 74 68 65 72 20 62 65 20 6f 6e 20 74 68 65  either be on the
8380: 20 73 74 61 63 6b 20 6f 72 20 64 79 6e 61 6d 69   stack or dynami
8390: 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20  cally allocated 
83a0: 66 72 6f 6d 0a 2a 2a 20 74 68 65 20 68 65 61 70  from.** the heap
83b0: 2e 20 20 57 68 65 6e 20 57 53 44 20 69 73 20 75  .  When WSD is u
83c0: 6e 73 75 70 70 6f 72 74 65 64 2c 20 74 68 65 20  nsupported, the 
83d0: 76 61 72 69 61 62 6c 65 20 64 65 63 6c 61 72 61  variable declara
83e0: 74 69 6f 6e 73 20 73 63 61 74 74 65 72 65 64 0a  tions scattered.
83f0: 2a 2a 20 74 68 72 6f 75 67 68 6f 75 74 20 74 68  ** throughout th
8400: 65 20 53 51 4c 69 74 65 20 63 6f 64 65 20 6d 75  e SQLite code mu
8410: 73 74 20 62 65 63 6f 6d 65 20 63 6f 6e 73 74 61  st become consta
8420: 6e 74 73 20 69 6e 73 74 65 61 64 2e 20 20 54 68  nts instead.  Th
8430: 65 20 53 51 4c 49 54 45 5f 57 53 44 0a 2a 2a 20  e SQLITE_WSD.** 
8440: 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 66 6f  macro is used fo
8450: 72 20 74 68 69 73 20 70 75 72 70 6f 73 65 2e 20  r this purpose. 
8460: 20 41 6e 64 20 69 6e 73 74 65 61 64 20 6f 66 20   And instead of 
8470: 72 65 66 65 72 65 6e 63 69 6e 67 20 74 68 65 20  referencing the 
8480: 76 61 72 69 61 62 6c 65 0a 2a 2a 20 64 69 72 65  variable.** dire
8490: 63 74 6c 79 2c 20 77 65 20 75 73 65 20 69 74 73  ctly, we use its
84a0: 20 63 6f 6e 73 74 61 6e 74 20 61 73 20 61 20 6b   constant as a k
84b0: 65 79 20 74 6f 20 6c 6f 6f 6b 75 70 20 74 68 65  ey to lookup the
84c0: 20 72 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61   run-time alloca
84d0: 74 65 64 0a 2a 2a 20 62 75 66 66 65 72 20 74 68  ted.** buffer th
84e0: 61 74 20 68 6f 6c 64 73 20 72 65 61 6c 20 76 61  at holds real va
84f0: 72 69 61 62 6c 65 2e 20 20 54 68 65 20 63 6f 6e  riable.  The con
8500: 73 74 61 6e 74 20 69 73 20 61 6c 73 6f 20 74 68  stant is also th
8510: 65 20 69 6e 69 74 69 61 6c 69 7a 65 72 0a 2a 2a  e initializer.**
8520: 20 66 6f 72 20 74 68 65 20 72 75 6e 2d 74 69 6d   for the run-tim
8530: 65 20 61 6c 6c 6f 63 61 74 65 64 20 62 75 66 66  e allocated buff
8540: 65 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65  er..**.** In the
8550: 20 75 73 75 61 6c 20 63 61 73 65 20 77 68 65 72   usual case wher
8560: 65 20 57 53 44 20 69 73 20 73 75 70 70 6f 72 74  e WSD is support
8570: 65 64 2c 20 74 68 65 20 53 51 4c 49 54 45 5f 57  ed, the SQLITE_W
8580: 53 44 20 61 6e 64 20 47 4c 4f 42 41 4c 0a 2a 2a  SD and GLOBAL.**
8590: 20 6d 61 63 72 6f 73 20 62 65 63 6f 6d 65 20 6e   macros become n
85a0: 6f 2d 6f 70 73 20 61 6e 64 20 68 61 76 65 20 7a  o-ops and have z
85b0: 65 72 6f 20 70 65 72 66 6f 72 6d 61 6e 63 65 20  ero performance 
85c0: 69 6d 70 61 63 74 2e 0a 2a 2f 0a 23 69 66 64 65  impact..*/.#ifde
85d0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53  f SQLITE_OMIT_WS
85e0: 44 0a 20 20 23 64 65 66 69 6e 65 20 53 51 4c 49  D.  #define SQLI
85f0: 54 45 5f 57 53 44 20 63 6f 6e 73 74 0a 20 20 23  TE_WSD const.  #
8600: 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28 74 2c  define GLOBAL(t,
8610: 76 29 20 28 2a 28 74 2a 29 73 71 6c 69 74 65 33  v) (*(t*)sqlite3
8620: 5f 77 73 64 5f 66 69 6e 64 28 28 76 6f 69 64 2a  _wsd_find((void*
8630: 29 26 28 76 29 2c 20 73 69 7a 65 6f 66 28 76 29  )&(v), sizeof(v)
8640: 29 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  )).  #define sql
8650: 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67  ite3GlobalConfig
8660: 20 47 4c 4f 42 41 4c 28 73 74 72 75 63 74 20 53   GLOBAL(struct S
8670: 71 6c 69 74 65 33 43 6f 6e 66 69 67 2c 20 73 71  qlite3Config, sq
8680: 6c 69 74 65 33 43 6f 6e 66 69 67 29 0a 20 20 69  lite3Config).  i
8690: 6e 74 20 73 71 6c 69 74 65 33 5f 77 73 64 5f 69  nt sqlite3_wsd_i
86a0: 6e 69 74 28 69 6e 74 20 4e 2c 20 69 6e 74 20 4a  nit(int N, int J
86b0: 29 3b 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74  );.  void *sqlit
86c0: 65 33 5f 77 73 64 5f 66 69 6e 64 28 76 6f 69 64  e3_wsd_find(void
86d0: 20 2a 4b 2c 20 69 6e 74 20 4c 29 3b 0a 23 65 6c   *K, int L);.#el
86e0: 73 65 0a 20 20 23 64 65 66 69 6e 65 20 53 51 4c  se.  #define SQL
86f0: 49 54 45 5f 57 53 44 0a 20 20 23 64 65 66 69 6e  ITE_WSD.  #defin
8700: 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20 76 0a  e GLOBAL(t,v) v.
8710: 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
8720: 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 73 71  3GlobalConfig sq
8730: 6c 69 74 65 33 43 6f 6e 66 69 67 0a 23 65 6e 64  lite3Config.#end
8740: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  if../*.** The fo
8750: 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 61  llowing macros a
8760: 72 65 20 75 73 65 64 20 74 6f 20 73 75 70 70 72  re used to suppr
8770: 65 73 73 20 63 6f 6d 70 69 6c 65 72 20 77 61 72  ess compiler war
8780: 6e 69 6e 67 73 20 61 6e 64 20 74 6f 0a 2a 2a 20  nings and to.** 
8790: 6d 61 6b 65 20 69 74 20 63 6c 65 61 72 20 74 6f  make it clear to
87a0: 20 68 75 6d 61 6e 20 72 65 61 64 65 72 73 20 77   human readers w
87b0: 68 65 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20 70  hen a function p
87c0: 61 72 61 6d 65 74 65 72 20 69 73 20 64 65 6c 69  arameter is deli
87d0: 62 65 72 61 74 65 6c 79 0a 2a 2a 20 6c 65 66 74  berately.** left
87e0: 20 75 6e 75 73 65 64 20 77 69 74 68 69 6e 20 74   unused within t
87f0: 68 65 20 62 6f 64 79 20 6f 66 20 61 20 66 75 6e  he body of a fun
8800: 63 74 69 6f 6e 2e 20 54 68 69 73 20 75 73 75 61  ction. This usua
8810: 6c 6c 79 20 68 61 70 70 65 6e 73 20 77 68 65 6e  lly happens when
8820: 0a 2a 2a 20 61 20 66 75 6e 63 74 69 6f 6e 20 69  .** a function i
8830: 73 20 63 61 6c 6c 65 64 20 76 69 61 20 61 20 66  s called via a f
8840: 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 2e  unction pointer.
8850: 20 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 65   For example the
8860: 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  .** implementati
8870: 6f 6e 20 6f 66 20 61 6e 20 53 51 4c 20 61 67 67  on of an SQL agg
8880: 72 65 67 61 74 65 20 73 74 65 70 20 63 61 6c 6c  regate step call
8890: 62 61 63 6b 20 6d 61 79 20 6e 6f 74 20 75 73 65  back may not use
88a0: 20 74 68 65 0a 2a 2a 20 70 61 72 61 6d 65 74 65   the.** paramete
88b0: 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 65  r indicating the
88c0: 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   number of argum
88d0: 65 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20 74  ents passed to t
88e0: 68 65 20 61 67 67 72 65 67 61 74 65 2c 0a 2a 2a  he aggregate,.**
88f0: 20 69 66 20 69 74 20 6b 6e 6f 77 73 20 74 68 61   if it knows tha
8900: 74 20 74 68 69 73 20 69 73 20 65 6e 66 6f 72 63  t this is enforc
8910: 65 64 20 65 6c 73 65 77 68 65 72 65 2e 0a 2a 2a  ed elsewhere..**
8920: 0a 2a 2a 20 57 68 65 6e 20 61 20 66 75 6e 63 74  .** When a funct
8930: 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69 73  ion parameter is
8940: 20 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c 6c   not used at all
8950: 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79   within the body
8960: 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2c 0a   of a function,.
8970: 2a 2a 20 69 74 20 69 73 20 67 65 6e 65 72 61 6c  ** it is general
8980: 6c 79 20 6e 61 6d 65 64 20 22 4e 6f 74 55 73 65  ly named "NotUse
8990: 64 22 20 6f 72 20 22 4e 6f 74 55 73 65 64 32 22  d" or "NotUsed2"
89a0: 20 74 6f 20 6d 61 6b 65 20 74 68 69 6e 67 73 20   to make things 
89b0: 65 76 65 6e 20 63 6c 65 61 72 65 72 2e 0a 2a 2a  even clearer..**
89c0: 20 48 6f 77 65 76 65 72 2c 20 74 68 65 73 65 20   However, these 
89d0: 6d 61 63 72 6f 73 20 6d 61 79 20 61 6c 73 6f 20  macros may also 
89e0: 62 65 20 75 73 65 64 20 74 6f 20 73 75 70 70 72  be used to suppr
89f0: 65 73 73 20 77 61 72 6e 69 6e 67 73 20 72 65 6c  ess warnings rel
8a00: 61 74 65 64 20 74 6f 0a 2a 2a 20 70 61 72 61 6d  ated to.** param
8a10: 65 74 65 72 73 20 74 68 61 74 20 6d 61 79 20 6f  eters that may o
8a20: 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 75 73 65  r may not be use
8a30: 64 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 63  d depending on c
8a40: 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69 6f  ompilation optio
8a50: 6e 73 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70  ns..** For examp
8a60: 6c 65 20 74 68 6f 73 65 20 70 61 72 61 6d 65 74  le those paramet
8a70: 65 72 73 20 6f 6e 6c 79 20 75 73 65 64 20 69 6e  ers only used in
8a80: 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
8a90: 65 6e 74 73 2e 20 49 6e 20 74 68 65 73 65 0a 2a  ents. In these.*
8aa0: 2a 20 63 61 73 65 73 20 74 68 65 20 70 61 72 61  * cases the para
8ab0: 6d 65 74 65 72 73 20 61 72 65 20 6e 61 6d 65 64  meters are named
8ac0: 20 61 73 20 70 65 72 20 74 68 65 20 75 73 75 61   as per the usua
8ad0: 6c 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a 2a  l conventions..*
8ae0: 2f 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44  /.#define UNUSED
8af0: 5f 50 41 52 41 4d 45 54 45 52 28 78 29 20 28 76  _PARAMETER(x) (v
8b00: 6f 69 64 29 28 78 29 0a 23 64 65 66 69 6e 65 20  oid)(x).#define 
8b10: 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
8b20: 32 28 78 2c 79 29 20 55 4e 55 53 45 44 5f 50 41  2(x,y) UNUSED_PA
8b30: 52 41 4d 45 54 45 52 28 78 29 2c 55 4e 55 53 45  RAMETER(x),UNUSE
8b40: 44 5f 50 41 52 41 4d 45 54 45 52 28 79 29 0a 0a  D_PARAMETER(y)..
8b50: 2f 2a 0a 2a 2a 20 46 6f 72 77 61 72 64 20 72 65  /*.** Forward re
8b60: 66 65 72 65 6e 63 65 73 20 74 6f 20 73 74 72 75  ferences to stru
8b70: 63 74 75 72 65 73 0a 2a 2f 0a 74 79 70 65 64 65  ctures.*/.typede
8b80: 66 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f  f struct AggInfo
8b90: 20 41 67 67 49 6e 66 6f 3b 0a 74 79 70 65 64 65   AggInfo;.typede
8ba0: 66 20 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e  f struct AuthCon
8bb0: 74 65 78 74 20 41 75 74 68 43 6f 6e 74 65 78 74  text AuthContext
8bc0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
8bd0: 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 41 75 74   AutoincInfo Aut
8be0: 6f 69 6e 63 49 6e 66 6f 3b 0a 74 79 70 65 64 65  oincInfo;.typede
8bf0: 66 20 73 74 72 75 63 74 20 42 69 74 76 65 63 20  f struct Bitvec 
8c00: 42 69 74 76 65 63 3b 0a 74 79 70 65 64 65 66 20  Bitvec;.typedef 
8c10: 73 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 43  struct CollSeq C
8c20: 6f 6c 6c 53 65 71 3b 0a 74 79 70 65 64 65 66 20  ollSeq;.typedef 
8c30: 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 43 6f  struct Column Co
8c40: 6c 75 6d 6e 3b 0a 74 79 70 65 64 65 66 20 73 74  lumn;.typedef st
8c50: 72 75 63 74 20 44 62 20 44 62 3b 0a 74 79 70 65  ruct Db Db;.type
8c60: 64 65 66 20 73 74 72 75 63 74 20 53 63 68 65 6d  def struct Schem
8c70: 61 20 53 63 68 65 6d 61 3b 0a 74 79 70 65 64 65  a Schema;.typede
8c80: 66 20 73 74 72 75 63 74 20 45 78 70 72 20 45 78  f struct Expr Ex
8c90: 70 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  pr;.typedef stru
8ca0: 63 74 20 45 78 70 72 4c 69 73 74 20 45 78 70 72  ct ExprList Expr
8cb0: 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74  List;.typedef st
8cc0: 72 75 63 74 20 46 4b 65 79 20 46 4b 65 79 3b 0a  ruct FKey FKey;.
8cd0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46  typedef struct F
8ce0: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 46 75  uncDestructor Fu
8cf0: 6e 63 44 65 73 74 72 75 63 74 6f 72 3b 0a 74 79  ncDestructor;.ty
8d00: 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75 6e  pedef struct Fun
8d10: 63 44 65 66 20 46 75 6e 63 44 65 66 3b 0a 74 79  cDef FuncDef;.ty
8d20: 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75 6e  pedef struct Fun
8d30: 63 44 65 66 48 61 73 68 20 46 75 6e 63 44 65 66  cDefHash FuncDef
8d40: 48 61 73 68 3b 0a 74 79 70 65 64 65 66 20 73 74  Hash;.typedef st
8d50: 72 75 63 74 20 49 64 4c 69 73 74 20 49 64 4c 69  ruct IdList IdLi
8d60: 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  st;.typedef stru
8d70: 63 74 20 49 6e 64 65 78 20 49 6e 64 65 78 3b 0a  ct Index Index;.
8d80: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 49  typedef struct I
8d90: 6e 64 65 78 53 61 6d 70 6c 65 20 49 6e 64 65 78  ndexSample Index
8da0: 53 61 6d 70 6c 65 3b 0a 74 79 70 65 64 65 66 20  Sample;.typedef 
8db0: 73 74 72 75 63 74 20 4b 65 79 43 6c 61 73 73 20  struct KeyClass 
8dc0: 4b 65 79 43 6c 61 73 73 3b 0a 74 79 70 65 64 65  KeyClass;.typede
8dd0: 66 20 73 74 72 75 63 74 20 4b 65 79 49 6e 66 6f  f struct KeyInfo
8de0: 20 4b 65 79 49 6e 66 6f 3b 0a 74 79 70 65 64 65   KeyInfo;.typede
8df0: 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69  f struct Lookasi
8e00: 64 65 20 4c 6f 6f 6b 61 73 69 64 65 3b 0a 74 79  de Lookaside;.ty
8e10: 70 65 64 65 66 20 73 74 72 75 63 74 20 4c 6f 6f  pedef struct Loo
8e20: 6b 61 73 69 64 65 53 6c 6f 74 20 4c 6f 6f 6b 61  kasideSlot Looka
8e30: 73 69 64 65 53 6c 6f 74 3b 0a 74 79 70 65 64 65  sideSlot;.typede
8e40: 66 20 73 74 72 75 63 74 20 4d 6f 64 75 6c 65 20  f struct Module 
8e50: 4d 6f 64 75 6c 65 3b 0a 74 79 70 65 64 65 66 20  Module;.typedef 
8e60: 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74 65  struct NameConte
8e70: 78 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 3b 0a  xt NameContext;.
8e80: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 50  typedef struct P
8e90: 61 72 73 65 20 50 61 72 73 65 3b 0a 74 79 70 65  arse Parse;.type
8ea0: 64 65 66 20 73 74 72 75 63 74 20 50 72 65 55 70  def struct PreUp
8eb0: 64 61 74 65 20 50 72 65 55 70 64 61 74 65 3b 0a  date PreUpdate;.
8ec0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 50  typedef struct P
8ed0: 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 20 50  rintfArguments P
8ee0: 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 3b 0a  rintfArguments;.
8ef0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 52  typedef struct R
8f00: 65 6e 61 6d 65 54 6f 6b 65 6e 20 52 65 6e 61 6d  enameToken Renam
8f10: 65 54 6f 6b 65 6e 3b 0a 74 79 70 65 64 65 66 20  eToken;.typedef 
8f20: 73 74 72 75 63 74 20 52 6f 77 53 65 74 20 52 6f  struct RowSet Ro
8f30: 77 53 65 74 3b 0a 74 79 70 65 64 65 66 20 73 74  wSet;.typedef st
8f40: 72 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20 53  ruct Savepoint S
8f50: 61 76 65 70 6f 69 6e 74 3b 0a 74 79 70 65 64 65  avepoint;.typede
8f60: 66 20 73 74 72 75 63 74 20 53 65 6c 65 63 74 20  f struct Select 
8f70: 53 65 6c 65 63 74 3b 0a 74 79 70 65 64 65 66 20  Select;.typedef 
8f80: 73 74 72 75 63 74 20 53 51 4c 69 74 65 54 68 72  struct SQLiteThr
8f90: 65 61 64 20 53 51 4c 69 74 65 54 68 72 65 61 64  ead SQLiteThread
8fa0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
8fb0: 20 53 65 6c 65 63 74 44 65 73 74 20 53 65 6c 65   SelectDest Sele
8fc0: 63 74 44 65 73 74 3b 0a 74 79 70 65 64 65 66 20  ctDest;.typedef 
8fd0: 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 20 53  struct SrcList S
8fe0: 72 63 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20  rcList;.typedef 
8ff0: 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f 73  struct sqlite3_s
9000: 74 72 20 53 74 72 41 63 63 75 6d 3b 20 2f 2a 20  tr StrAccum; /* 
9010: 49 6e 74 65 72 6e 61 6c 20 61 6c 69 61 73 20 66  Internal alias f
9020: 6f 72 20 73 71 6c 69 74 65 33 5f 73 74 72 20 2a  or sqlite3_str *
9030: 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  /.typedef struct
9040: 20 54 61 62 6c 65 20 54 61 62 6c 65 3b 0a 74 79   Table Table;.ty
9050: 70 65 64 65 66 20 73 74 72 75 63 74 20 54 61 62  pedef struct Tab
9060: 6c 65 4c 6f 63 6b 20 54 61 62 6c 65 4c 6f 63 6b  leLock TableLock
9070: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
9080: 20 54 6f 6b 65 6e 20 54 6f 6b 65 6e 3b 0a 74 79   Token Token;.ty
9090: 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72 65  pedef struct Tre
90a0: 65 56 69 65 77 20 54 72 65 65 56 69 65 77 3b 0a  eView TreeView;.
90b0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54  typedef struct T
90c0: 72 69 67 67 65 72 20 54 72 69 67 67 65 72 3b 0a  rigger Trigger;.
90d0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54  typedef struct T
90e0: 72 69 67 67 65 72 50 72 67 20 54 72 69 67 67 65  riggerPrg Trigge
90f0: 72 50 72 67 3b 0a 74 79 70 65 64 65 66 20 73 74  rPrg;.typedef st
9100: 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70  ruct TriggerStep
9110: 20 54 72 69 67 67 65 72 53 74 65 70 3b 0a 74 79   TriggerStep;.ty
9120: 70 65 64 65 66 20 73 74 72 75 63 74 20 55 6e 70  pedef struct Unp
9130: 61 63 6b 65 64 52 65 63 6f 72 64 20 55 6e 70 61  ackedRecord Unpa
9140: 63 6b 65 64 52 65 63 6f 72 64 3b 0a 74 79 70 65  ckedRecord;.type
9150: 64 65 66 20 73 74 72 75 63 74 20 55 70 73 65 72  def struct Upser
9160: 74 20 55 70 73 65 72 74 3b 0a 74 79 70 65 64 65  t Upsert;.typede
9170: 66 20 73 74 72 75 63 74 20 56 54 61 62 6c 65 20  f struct VTable 
9180: 56 54 61 62 6c 65 3b 0a 74 79 70 65 64 65 66 20  VTable;.typedef 
9190: 73 74 72 75 63 74 20 56 74 61 62 43 74 78 20 56  struct VtabCtx V
91a0: 74 61 62 43 74 78 3b 0a 74 79 70 65 64 65 66 20  tabCtx;.typedef 
91b0: 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20 57 61  struct Walker Wa
91c0: 6c 6b 65 72 3b 0a 74 79 70 65 64 65 66 20 73 74  lker;.typedef st
91d0: 72 75 63 74 20 57 68 65 72 65 49 6e 66 6f 20 57  ruct WhereInfo W
91e0: 68 65 72 65 49 6e 66 6f 3b 0a 74 79 70 65 64 65  hereInfo;.typede
91f0: 66 20 73 74 72 75 63 74 20 57 69 6e 64 6f 77 20  f struct Window 
9200: 57 69 6e 64 6f 77 3b 0a 74 79 70 65 64 65 66 20  Window;.typedef 
9210: 73 74 72 75 63 74 20 57 69 74 68 20 57 69 74 68  struct With With
9220: 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 62 69  ;.../*.** The bi
9230: 74 6d 61 73 6b 20 64 61 74 61 74 79 70 65 20 64  tmask datatype d
9240: 65 66 69 6e 65 64 20 62 65 6c 6f 77 20 69 73 20  efined below is 
9250: 75 73 65 64 20 66 6f 72 20 76 61 72 69 6f 75 73  used for various
9260: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a   optimizations..
9270: 2a 2a 0a 2a 2a 20 43 68 61 6e 67 69 6e 67 20 74  **.** Changing t
9280: 68 69 73 20 66 72 6f 6d 20 61 20 36 34 2d 62 69  his from a 64-bi
9290: 74 20 74 6f 20 61 20 33 32 2d 62 69 74 20 74 79  t to a 32-bit ty
92a0: 70 65 20 6c 69 6d 69 74 73 20 74 68 65 20 6e 75  pe limits the nu
92b0: 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 61 62 6c 65  mber of.** table
92c0: 73 20 69 6e 20 61 20 6a 6f 69 6e 20 74 6f 20 33  s in a join to 3
92d0: 32 20 69 6e 73 74 65 61 64 20 6f 66 20 36 34 2e  2 instead of 64.
92e0: 20 20 42 75 74 20 69 74 20 61 6c 73 6f 20 72 65    But it also re
92f0: 64 75 63 65 73 20 74 68 65 20 73 69 7a 65 0a 2a  duces the size.*
9300: 2a 20 6f 66 20 74 68 65 20 6c 69 62 72 61 72 79  * of the library
9310: 20 62 79 20 37 33 38 20 62 79 74 65 73 20 6f 6e   by 738 bytes on
9320: 20 69 78 38 36 2e 0a 2a 2f 0a 23 69 66 64 65 66   ix86..*/.#ifdef
9330: 20 53 51 4c 49 54 45 5f 42 49 54 4d 41 53 4b 5f   SQLITE_BITMASK_
9340: 54 59 50 45 0a 20 20 74 79 70 65 64 65 66 20 53  TYPE.  typedef S
9350: 51 4c 49 54 45 5f 42 49 54 4d 41 53 4b 5f 54 59  QLITE_BITMASK_TY
9360: 50 45 20 42 69 74 6d 61 73 6b 3b 0a 23 65 6c 73  PE Bitmask;.#els
9370: 65 0a 20 20 74 79 70 65 64 65 66 20 75 36 34 20  e.  typedef u64 
9380: 42 69 74 6d 61 73 6b 3b 0a 23 65 6e 64 69 66 0a  Bitmask;.#endif.
9390: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65  ./*.** The numbe
93a0: 72 20 6f 66 20 62 69 74 73 20 69 6e 20 61 20 42  r of bits in a B
93b0: 69 74 6d 61 73 6b 2e 20 20 22 42 4d 53 22 20 6d  itmask.  "BMS" m
93c0: 65 61 6e 73 20 22 42 69 74 4d 61 73 6b 20 53 69  eans "BitMask Si
93d0: 7a 65 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ze"..*/.#define 
93e0: 42 4d 53 20 20 28 28 69 6e 74 29 28 73 69 7a 65  BMS  ((int)(size
93f0: 6f 66 28 42 69 74 6d 61 73 6b 29 2a 38 29 29 0a  of(Bitmask)*8)).
9400: 0a 2f 2a 0a 2a 2a 20 41 20 62 69 74 20 69 6e 20  ./*.** A bit in 
9410: 61 20 42 69 74 6d 61 73 6b 0a 2a 2f 0a 23 64 65  a Bitmask.*/.#de
9420: 66 69 6e 65 20 4d 41 53 4b 42 49 54 28 6e 29 20  fine MASKBIT(n) 
9430: 20 20 28 28 28 42 69 74 6d 61 73 6b 29 31 29 3c    (((Bitmask)1)<
9440: 3c 28 6e 29 29 0a 23 64 65 66 69 6e 65 20 4d 41  <(n)).#define MA
9450: 53 4b 42 49 54 33 32 28 6e 29 20 28 28 28 75 6e  SKBIT32(n) (((un
9460: 73 69 67 6e 65 64 20 69 6e 74 29 31 29 3c 3c 28  signed int)1)<<(
9470: 6e 29 29 0a 23 64 65 66 69 6e 65 20 41 4c 4c 42  n)).#define ALLB
9480: 49 54 53 20 20 20 20 20 20 28 28 42 69 74 6d 61  ITS      ((Bitma
9490: 73 6b 29 2d 31 29 0a 0a 2f 2a 20 41 20 56 4c 69  sk)-1)../* A VLi
94a0: 73 74 20 6f 62 6a 65 63 74 20 72 65 63 6f 72 64  st object record
94b0: 73 20 61 20 6d 61 70 70 69 6e 67 20 62 65 74 77  s a mapping betw
94c0: 65 65 6e 20 70 61 72 61 6d 65 74 65 72 73 2f 76  een parameters/v
94d0: 61 72 69 61 62 6c 65 73 2f 77 69 6c 64 63 61 72  ariables/wildcar
94e0: 64 73 0a 2a 2a 20 69 6e 20 74 68 65 20 53 51 4c  ds.** in the SQL
94f0: 20 73 74 61 74 65 6d 65 6e 74 20 28 73 75 63 68   statement (such
9500: 20 61 73 20 24 61 62 63 2c 20 40 70 71 72 2c 20   as $abc, @pqr, 
9510: 6f 72 20 3a 78 79 7a 29 20 61 6e 64 20 74 68 65  or :xyz) and the
9520: 20 69 6e 74 65 67 65 72 0a 2a 2a 20 76 61 72 69   integer.** vari
9530: 61 62 6c 65 20 6e 75 6d 62 65 72 20 61 73 73 6f  able number asso
9540: 63 69 61 74 65 64 20 77 69 74 68 20 74 68 61 74  ciated with that
9550: 20 70 61 72 61 6d 65 74 65 72 2e 20 20 53 65 65   parameter.  See
9560: 20 74 68 65 20 66 6f 72 6d 61 74 20 64 65 73 63   the format desc
9570: 72 69 70 74 69 6f 6e 0a 2a 2a 20 6f 6e 20 74 68  ription.** on th
9580: 65 20 73 71 6c 69 74 65 33 56 4c 69 73 74 41 64  e sqlite3VListAd
9590: 64 28 29 20 72 6f 75 74 69 6e 65 20 66 6f 72 20  d() routine for 
95a0: 6d 6f 72 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  more information
95b0: 2e 20 20 41 20 56 4c 69 73 74 20 69 73 20 72 65  .  A VList is re
95c0: 61 6c 6c 79 0a 2a 2a 20 6a 75 73 74 20 61 6e 20  ally.** just an 
95d0: 61 72 72 61 79 20 6f 66 20 69 6e 74 65 67 65 72  array of integer
95e0: 73 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 69 6e  s..*/.typedef in
95f0: 74 20 56 4c 69 73 74 3b 0a 0a 2f 2a 0a 2a 2a 20  t VList;../*.** 
9600: 44 65 66 65 72 20 73 6f 75 72 63 69 6e 67 20 76  Defer sourcing v
9610: 64 62 65 2e 68 20 61 6e 64 20 62 74 72 65 65 2e  dbe.h and btree.
9620: 68 20 75 6e 74 69 6c 20 61 66 74 65 72 20 74 68  h until after th
9630: 65 20 22 75 38 22 20 61 6e 64 0a 2a 2a 20 22 42  e "u8" and.** "B
9640: 75 73 79 48 61 6e 64 6c 65 72 22 20 74 79 70 65  usyHandler" type
9650: 64 65 66 73 2e 20 76 64 62 65 2e 68 20 61 6c 73  defs. vdbe.h als
9660: 6f 20 72 65 71 75 69 72 65 73 20 61 20 66 65 77  o requires a few
9670: 20 6f 66 20 74 68 65 20 6f 70 61 71 75 65 0a 2a   of the opaque.*
9680: 2a 20 70 6f 69 6e 74 65 72 20 74 79 70 65 73 20  * pointer types 
9690: 28 69 2e 65 2e 20 46 75 6e 63 44 65 66 29 20 64  (i.e. FuncDef) d
96a0: 65 66 69 6e 65 64 20 61 62 6f 76 65 2e 0a 2a 2f  efined above..*/
96b0: 0a 23 69 6e 63 6c 75 64 65 20 22 62 74 72 65 65  .#include "btree
96c0: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 76 64  .h".#include "vd
96d0: 62 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22  be.h".#include "
96e0: 70 61 67 65 72 2e 68 22 0a 23 69 6e 63 6c 75 64  pager.h".#includ
96f0: 65 20 22 70 63 61 63 68 65 2e 68 22 0a 23 69 6e  e "pcache.h".#in
9700: 63 6c 75 64 65 20 22 6f 73 2e 68 22 0a 23 69 6e  clude "os.h".#in
9710: 63 6c 75 64 65 20 22 6d 75 74 65 78 2e 68 22 0a  clude "mutex.h".
9720: 0a 2f 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 45  ./* The SQLITE_E
9730: 58 54 52 41 5f 44 55 52 41 42 4c 45 20 63 6f 6d  XTRA_DURABLE com
9740: 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
9750: 20 75 73 65 64 20 74 6f 20 73 65 74 20 74 68 65   used to set the
9760: 20 64 65 66 61 75 6c 74 0a 2a 2a 20 73 79 6e 63   default.** sync
9770: 68 72 6f 6e 6f 75 73 20 73 65 74 74 69 6e 67 20  hronous setting 
9780: 74 6f 20 45 58 54 52 41 2e 20 20 49 74 20 69 73  to EXTRA.  It is
9790: 20 6e 6f 20 6c 6f 6e 67 65 72 20 73 75 70 70 6f   no longer suppo
97a0: 72 74 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  rted..*/.#ifdef 
97b0: 53 51 4c 49 54 45 5f 45 58 54 52 41 5f 44 55 52  SQLITE_EXTRA_DUR
97c0: 41 42 4c 45 0a 23 20 77 61 72 6e 69 6e 67 20 55  ABLE.# warning U
97d0: 73 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  se SQLITE_DEFAUL
97e0: 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 3d 33 20  T_SYNCHRONOUS=3 
97f0: 69 6e 73 74 65 61 64 20 6f 66 20 53 51 4c 49 54  instead of SQLIT
9800: 45 5f 45 58 54 52 41 5f 44 55 52 41 42 4c 45 0a  E_EXTRA_DURABLE.
9810: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
9820: 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e  DEFAULT_SYNCHRON
9830: 4f 55 53 20 33 0a 23 65 6e 64 69 66 0a 0a 2f 2a  OUS 3.#endif../*
9840: 0a 2a 2a 20 44 65 66 61 75 6c 74 20 73 79 6e 63  .** Default sync
9850: 68 72 6f 6e 6f 75 73 20 6c 65 76 65 6c 73 2e 0a  hronous levels..
9860: 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20  **.** Note that 
9870: 28 66 6f 72 20 68 69 73 74 6f 72 63 61 6c 20 72  (for historcal r
9880: 65 61 73 6f 6e 73 29 20 74 68 65 20 50 41 47 45  easons) the PAGE
9890: 52 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 5f 2a 20  R_SYNCHRONOUS_* 
98a0: 6d 61 63 72 6f 73 20 64 69 66 66 65 72 0a 2a 2a  macros differ.**
98b0: 20 66 72 6f 6d 20 74 68 65 20 53 51 4c 49 54 45   from the SQLITE
98c0: 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f  _DEFAULT_SYNCHRO
98d0: 4e 4f 55 53 20 76 61 6c 75 65 20 62 79 20 31 2e  NOUS value by 1.
98e0: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  .**.**          
98f0: 20 50 41 47 45 52 5f 53 59 4e 43 48 52 4f 4e 4f   PAGER_SYNCHRONO
9900: 55 53 20 20 20 20 20 20 20 44 45 46 41 55 4c 54  US       DEFAULT
9910: 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 2a 2a 20  _SYNCHRONOUS.** 
9920: 20 20 4f 46 46 20 20 20 20 20 20 20 20 20 20 20    OFF           
9930: 31 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  1               
9940: 20 20 20 20 20 20 20 20 20 20 30 0a 2a 2a 20 20            0.**  
9950: 20 4e 4f 52 4d 41 4c 20 20 20 20 20 20 20 20 32   NORMAL        2
9960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9970: 20 20 20 20 20 20 20 20 20 31 0a 2a 2a 20 20 20           1.**   
9980: 46 55 4c 4c 20 20 20 20 20 20 20 20 20 20 33 20  FULL          3 
9990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
99a0: 20 20 20 20 20 20 20 20 32 0a 2a 2a 20 20 20 45          2.**   E
99b0: 58 54 52 41 20 20 20 20 20 20 20 20 20 34 20 20  XTRA         4  
99c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
99d0: 20 20 20 20 20 20 20 33 0a 2a 2a 0a 2a 2a 20 54         3.**.** T
99e0: 68 65 20 22 50 52 41 47 4d 41 20 73 79 6e 63 68  he "PRAGMA synch
99f0: 72 6f 6e 6f 75 73 22 20 73 74 61 74 65 6d 65 6e  ronous" statemen
9a00: 74 20 61 6c 73 6f 20 75 73 65 73 20 74 68 65 20  t also uses the 
9a10: 7a 65 72 6f 2d 62 61 73 65 64 20 6e 75 6d 62 65  zero-based numbe
9a20: 72 73 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20  rs..** In other 
9a30: 77 6f 72 64 73 2c 20 74 68 65 20 7a 65 72 6f 2d  words, the zero-
9a40: 62 61 73 65 64 20 6e 75 6d 62 65 72 73 20 61 72  based numbers ar
9a50: 65 20 75 73 65 64 20 66 6f 72 20 61 6c 6c 20 65  e used for all e
9a60: 78 74 65 72 6e 61 6c 20 69 6e 74 65 72 66 61 63  xternal interfac
9a70: 65 73 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6f 6e  es.** and the on
9a80: 65 2d 62 61 73 65 64 20 76 61 6c 75 65 73 20 61  e-based values a
9a90: 72 65 20 75 73 65 64 20 69 6e 74 65 72 6e 61 6c  re used internal
9aa0: 6c 79 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ly..*/.#ifndef S
9ab0: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59  QLITE_DEFAULT_SY
9ac0: 4e 43 48 52 4f 4e 4f 55 53 0a 23 20 64 65 66 69  NCHRONOUS.# defi
9ad0: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
9ae0: 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 32 0a  T_SYNCHRONOUS 2.
9af0: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
9b00: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 41  QLITE_DEFAULT_WA
9b10: 4c 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 23 20  L_SYNCHRONOUS.# 
9b20: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
9b30: 46 41 55 4c 54 5f 57 41 4c 5f 53 59 4e 43 48 52  FAULT_WAL_SYNCHR
9b40: 4f 4e 4f 55 53 20 53 51 4c 49 54 45 5f 44 45 46  ONOUS SQLITE_DEF
9b50: 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53  AULT_SYNCHRONOUS
9b60: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45  .#endif../*.** E
9b70: 61 63 68 20 64 61 74 61 62 61 73 65 20 66 69 6c  ach database fil
9b80: 65 20 74 6f 20 62 65 20 61 63 63 65 73 73 65 64  e to be accessed
9b90: 20 62 79 20 74 68 65 20 73 79 73 74 65 6d 20 69   by the system i
9ba0: 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a  s an instance.**
9bb0: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
9bc0: 67 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 68  g structure.  Th
9bd0: 65 72 65 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79  ere are normally
9be0: 20 74 77 6f 20 6f 66 20 74 68 65 73 65 20 73 74   two of these st
9bf0: 72 75 63 74 75 72 65 73 0a 2a 2a 20 69 6e 20 74  ructures.** in t
9c00: 68 65 20 73 71 6c 69 74 65 2e 61 44 62 5b 5d 20  he sqlite.aDb[] 
9c10: 61 72 72 61 79 2e 20 20 61 44 62 5b 30 5d 20 69  array.  aDb[0] i
9c20: 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  s the main datab
9c30: 61 73 65 20 66 69 6c 65 20 61 6e 64 0a 2a 2a 20  ase file and.** 
9c40: 61 44 62 5b 31 5d 20 69 73 20 74 68 65 20 64 61  aDb[1] is the da
9c50: 74 61 62 61 73 65 20 66 69 6c 65 20 75 73 65 64  tabase file used
9c60: 20 74 6f 20 68 6f 6c 64 20 74 65 6d 70 6f 72 61   to hold tempora
9c70: 72 79 20 74 61 62 6c 65 73 2e 20 20 41 64 64 69  ry tables.  Addi
9c80: 74 69 6f 6e 61 6c 0a 2a 2a 20 64 61 74 61 62 61  tional.** databa
9c90: 73 65 73 20 6d 61 79 20 62 65 20 61 74 74 61 63  ses may be attac
9ca0: 68 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 44  hed..*/.struct D
9cb0: 62 20 7b 0a 20 20 63 68 61 72 20 2a 7a 44 62 53  b {.  char *zDbS
9cc0: 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61  Name;      /* Na
9cd0: 6d 65 20 6f 66 20 74 68 69 73 20 64 61 74 61 62  me of this datab
9ce0: 61 73 65 2e 20 28 73 63 68 65 6d 61 20 6e 61 6d  ase. (schema nam
9cf0: 65 2c 20 6e 6f 74 20 66 69 6c 65 6e 61 6d 65 29  e, not filename)
9d00: 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74   */.  Btree *pBt
9d10: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ;          /* Th
9d20: 65 20 42 2a 54 72 65 65 20 73 74 72 75 63 74 75  e B*Tree structu
9d30: 72 65 20 66 6f 72 20 74 68 69 73 20 64 61 74 61  re for this data
9d40: 62 61 73 65 20 66 69 6c 65 20 2a 2f 0a 20 20 75  base file */.  u
9d50: 38 20 73 61 66 65 74 79 5f 6c 65 76 65 6c 3b 20  8 safety_level; 
9d60: 20 20 20 20 2f 2a 20 48 6f 77 20 61 67 67 72 65      /* How aggre
9d70: 73 73 69 76 65 20 61 74 20 73 79 6e 63 69 6e 67  ssive at syncing
9d80: 20 64 61 74 61 20 74 6f 20 64 69 73 6b 20 2a 2f   data to disk */
9d90: 0a 20 20 75 38 20 62 53 79 6e 63 53 65 74 3b 20  .  u8 bSyncSet; 
9da0: 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
9db0: 69 66 20 22 50 52 41 47 4d 41 20 73 79 6e 63 68  if "PRAGMA synch
9dc0: 72 6f 6e 6f 75 73 3d 4e 22 20 68 61 73 20 62 65  ronous=N" has be
9dd0: 65 6e 20 72 75 6e 20 2a 2f 0a 20 20 53 63 68 65  en run */.  Sche
9de0: 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20  ma *pSchema;    
9df0: 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 64   /* Pointer to d
9e00: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 28  atabase schema (
9e10: 70 6f 73 73 69 62 6c 79 20 73 68 61 72 65 64 29  possibly shared)
9e20: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e   */.};../*.** An
9e30: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
9e40: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
9e50: 74 75 72 65 20 73 74 6f 72 65 73 20 61 20 64 61  ture stores a da
9e60: 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 0a 2a  tabase schema..*
9e70: 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63 68 65 6d 61  *.** Most Schema
9e80: 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61 73 73   objects are ass
9e90: 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20 42  ociated with a B
9ea0: 74 72 65 65 2e 20 20 54 68 65 20 65 78 63 65 70  tree.  The excep
9eb0: 74 69 6f 6e 20 69 73 0a 2a 2a 20 74 68 65 20 53  tion is.** the S
9ec0: 63 68 65 6d 61 20 66 6f 72 20 74 68 65 20 54 45  chema for the TE
9ed0: 4d 50 20 64 61 74 61 62 61 65 73 20 28 73 71 6c  MP databaes (sql
9ee0: 69 74 65 33 2e 61 44 62 5b 31 5d 29 20 77 68 69  ite3.aDb[1]) whi
9ef0: 63 68 20 69 73 20 66 72 65 65 2d 73 74 61 6e 64  ch is free-stand
9f00: 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73 68 61 72 65  ing..** In share
9f10: 64 20 63 61 63 68 65 20 6d 6f 64 65 2c 20 61 20  d cache mode, a 
9f20: 73 69 6e 67 6c 65 20 53 63 68 65 6d 61 20 6f 62  single Schema ob
9f30: 6a 65 63 74 20 63 61 6e 20 62 65 20 73 68 61 72  ject can be shar
9f40: 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65 0a 2a  ed by multiple.*
9f50: 2a 20 42 74 72 65 65 73 20 74 68 61 74 20 72 65  * Btrees that re
9f60: 66 65 72 20 74 6f 20 74 68 65 20 73 61 6d 65 20  fer to the same 
9f70: 75 6e 64 65 72 6c 79 69 6e 67 20 42 74 53 68 61  underlying BtSha
9f80: 72 65 64 20 6f 62 6a 65 63 74 2e 0a 2a 2a 0a 2a  red object..**.*
9f90: 2a 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 73  * Schema objects
9fa0: 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61 6c   are automatical
9fb0: 6c 79 20 64 65 61 6c 6c 6f 63 61 74 65 64 20 77  ly deallocated w
9fc0: 68 65 6e 20 74 68 65 20 6c 61 73 74 20 42 74 72  hen the last Btr
9fd0: 65 65 20 74 68 61 74 0a 2a 2a 20 72 65 66 65 72  ee that.** refer
9fe0: 65 6e 63 65 73 20 74 68 65 6d 20 69 73 20 64 65  ences them is de
9ff0: 73 74 72 6f 79 65 64 2e 20 20 20 54 68 65 20 54  stroyed.   The T
a000: 45 4d 50 20 53 63 68 65 6d 61 20 69 73 20 6d 61  EMP Schema is ma
a010: 6e 75 61 6c 6c 79 20 66 72 65 65 64 20 62 79 0a  nually freed by.
a020: 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65  ** sqlite3_close
a030: 28 29 2e 0a 2a 0a 2a 2a 20 41 20 74 68 72 65 61  ()..*.** A threa
a040: 64 20 6d 75 73 74 20 62 65 20 68 6f 6c 64 69 6e  d must be holdin
a050: 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68 65  g a mutex on the
a060: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 42   corresponding B
a070: 74 72 65 65 20 69 6e 20 6f 72 64 65 72 0a 2a 2a  tree in order.**
a080: 20 74 6f 20 61 63 63 65 73 73 20 53 63 68 65 6d   to access Schem
a090: 61 20 63 6f 6e 74 65 6e 74 2e 20 20 54 68 69 73  a content.  This
a0a0: 20 69 6d 70 6c 69 65 73 20 74 68 61 74 20 74 68   implies that th
a0b0: 65 20 74 68 72 65 61 64 20 6d 75 73 74 20 61 6c  e thread must al
a0c0: 73 6f 20 62 65 0a 2a 2a 20 68 6f 6c 64 69 6e 67  so be.** holding
a0d0: 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68 65 20   a mutex on the 
a0e0: 73 71 6c 69 74 65 33 20 63 6f 6e 6e 65 63 74 69  sqlite3 connecti
a0f0: 6f 6e 20 70 6f 69 6e 74 65 72 20 74 68 61 74 20  on pointer that 
a100: 6f 77 6e 73 20 74 68 65 20 42 74 72 65 65 2e 0a  owns the Btree..
a110: 2a 2a 20 46 6f 72 20 61 20 54 45 4d 50 20 53 63  ** For a TEMP Sc
a120: 68 65 6d 61 2c 20 6f 6e 6c 79 20 74 68 65 20 63  hema, only the c
a130: 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74 65 78 20  onnection mutex 
a140: 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2f 0a  is required..*/.
a150: 73 74 72 75 63 74 20 53 63 68 65 6d 61 20 7b 0a  struct Schema {.
a160: 20 20 69 6e 74 20 73 63 68 65 6d 61 5f 63 6f 6f    int schema_coo
a170: 6b 69 65 3b 20 20 20 2f 2a 20 44 61 74 61 62 61  kie;   /* Databa
a180: 73 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f  se schema versio
a190: 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 69  n number for thi
a1a0: 73 20 66 69 6c 65 20 2a 2f 0a 20 20 69 6e 74 20  s file */.  int 
a1b0: 69 47 65 6e 65 72 61 74 69 6f 6e 3b 20 20 20 20  iGeneration;    
a1c0: 20 2f 2a 20 47 65 6e 65 72 61 74 69 6f 6e 20 63   /* Generation c
a1d0: 6f 75 6e 74 65 72 2e 20 20 49 6e 63 72 65 6d 65  ounter.  Increme
a1e0: 6e 74 65 64 20 77 69 74 68 20 65 61 63 68 20 63  nted with each c
a1f0: 68 61 6e 67 65 20 2a 2f 0a 20 20 48 61 73 68 20  hange */.  Hash 
a200: 74 62 6c 48 61 73 68 3b 20 20 20 20 20 20 20 20  tblHash;        
a210: 2f 2a 20 41 6c 6c 20 74 61 62 6c 65 73 20 69 6e  /* All tables in
a220: 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f  dexed by name */
a230: 0a 20 20 48 61 73 68 20 69 64 78 48 61 73 68 3b  .  Hash idxHash;
a240: 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 28          /* All (
a250: 6e 61 6d 65 64 29 20 69 6e 64 69 63 65 73 20 69  named) indices i
a260: 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a  ndexed by name *
a270: 2f 0a 20 20 48 61 73 68 20 74 72 69 67 48 61 73  /.  Hash trigHas
a280: 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  h;       /* All 
a290: 74 72 69 67 67 65 72 73 20 69 6e 64 65 78 65 64  triggers indexed
a2a0: 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61   by name */.  Ha
a2b0: 73 68 20 66 6b 65 79 48 61 73 68 3b 20 20 20 20  sh fkeyHash;    
a2c0: 20 20 20 2f 2a 20 41 6c 6c 20 66 6f 72 65 69 67     /* All foreig
a2d0: 6e 20 6b 65 79 73 20 62 79 20 72 65 66 65 72 65  n keys by refere
a2e0: 6e 63 65 64 20 74 61 62 6c 65 20 6e 61 6d 65 20  nced table name 
a2f0: 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 53 65 71  */.  Table *pSeq
a300: 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  Tab;      /* The
a310: 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65   sqlite_sequence
a320: 20 74 61 62 6c 65 20 75 73 65 64 20 62 79 20 41   table used by A
a330: 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a  UTOINCREMENT */.
a340: 20 20 75 38 20 66 69 6c 65 5f 66 6f 72 6d 61 74    u8 file_format
a350: 3b 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61  ;      /* Schema
a360: 20 66 6f 72 6d 61 74 20 76 65 72 73 69 6f 6e 20   format version 
a370: 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20 2a 2f  for this file */
a380: 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20  .  u8 enc;      
a390: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
a3a0: 65 6e 63 6f 64 69 6e 67 20 75 73 65 64 20 62 79  encoding used by
a3b0: 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20 2a   this database *
a3c0: 2f 0a 20 20 75 31 36 20 73 63 68 65 6d 61 46 6c  /.  u16 schemaFl
a3d0: 61 67 73 3b 20 20 20 20 20 2f 2a 20 46 6c 61 67  ags;     /* Flag
a3e0: 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
a3f0: 68 20 74 68 69 73 20 73 63 68 65 6d 61 20 2a 2f  h this schema */
a400: 0a 20 20 69 6e 74 20 63 61 63 68 65 5f 73 69 7a  .  int cache_siz
a410: 65 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  e;      /* Numbe
a420: 72 20 6f 66 20 70 61 67 65 73 20 74 6f 20 75 73  r of pages to us
a430: 65 20 69 6e 20 74 68 65 20 63 61 63 68 65 20 2a  e in the cache *
a440: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73  /.};../*.** Thes
a450: 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62 65 20  e macros can be 
a460: 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20 73 65  used to test, se
a470: 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69 74 73  t, or clear bits
a480: 20 69 6e 20 74 68 65 0a 2a 2a 20 44 62 2e 70 53   in the.** Db.pS
a490: 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69 65  chema->flags fie
a4a0: 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44  ld..*/.#define D
a4b0: 62 48 61 73 50 72 6f 70 65 72 74 79 28 44 2c 49  bHasProperty(D,I
a4c0: 2c 50 29 20 20 20 20 20 28 28 28 44 29 2d 3e 61  ,P)     (((D)->a
a4d0: 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73  Db[I].pSchema->s
a4e0: 63 68 65 6d 61 46 6c 61 67 73 26 28 50 29 29 3d  chemaFlags&(P))=
a4f0: 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20 44 62  =(P)).#define Db
a500: 48 61 73 41 6e 79 50 72 6f 70 65 72 74 79 28 44  HasAnyProperty(D
a510: 2c 49 2c 50 29 20 20 28 28 28 44 29 2d 3e 61 44  ,I,P)  (((D)->aD
a520: 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63  b[I].pSchema->sc
a530: 68 65 6d 61 46 6c 61 67 73 26 28 50 29 29 21 3d  hemaFlags&(P))!=
a540: 30 29 0a 23 64 65 66 69 6e 65 20 44 62 53 65 74  0).#define DbSet
a550: 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20  Property(D,I,P) 
a560: 20 20 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e      (D)->aDb[I].
a570: 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46  pSchema->schemaF
a580: 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e  lags|=(P).#defin
a590: 65 20 44 62 43 6c 65 61 72 50 72 6f 70 65 72 74  e DbClearPropert
a5a0: 79 28 44 2c 49 2c 50 29 20 20 20 28 44 29 2d 3e  y(D,I,P)   (D)->
a5b0: 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e  aDb[I].pSchema->
a5c0: 73 63 68 65 6d 61 46 6c 61 67 73 26 3d 7e 28 50  schemaFlags&=~(P
a5d0: 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64  )../*.** Allowed
a5e0: 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20   values for the 
a5f0: 44 42 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67  DB.pSchema->flag
a600: 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54  s field..**.** T
a610: 68 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64  he DB_SchemaLoad
a620: 65 64 20 66 6c 61 67 20 69 73 20 73 65 74 20 61  ed flag is set a
a630: 66 74 65 72 20 74 68 65 20 64 61 74 61 62 61 73  fter the databas
a640: 65 20 73 63 68 65 6d 61 20 68 61 73 20 62 65 65  e schema has bee
a650: 6e 0a 2a 2a 20 72 65 61 64 20 69 6e 74 6f 20 69  n.** read into i
a660: 6e 74 65 72 6e 61 6c 20 68 61 73 68 20 74 61 62  nternal hash tab
a670: 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 44 42 5f 55 6e  les..**.** DB_Un
a680: 72 65 73 65 74 56 69 65 77 73 20 6d 65 61 6e 73  resetViews means
a690: 20 74 68 61 74 20 6f 6e 65 20 6f 72 20 6d 6f 72   that one or mor
a6a0: 65 20 76 69 65 77 73 20 68 61 76 65 20 63 6f 6c  e views have col
a6b0: 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74 0a 2a  umn names that.*
a6c0: 2a 20 68 61 76 65 20 62 65 65 6e 20 66 69 6c 6c  * have been fill
a6d0: 65 64 20 6f 75 74 2e 20 20 49 66 20 74 68 65 20  ed out.  If the 
a6e0: 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2c 20  schema changes, 
a6f0: 74 68 65 73 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d  these column nam
a700: 65 73 20 6d 69 67 68 74 0a 2a 2a 20 63 68 61 6e  es might.** chan
a710: 67 65 73 20 61 6e 64 20 73 6f 20 74 68 65 20 76  ges and so the v
a720: 69 65 77 20 77 69 6c 6c 20 6e 65 65 64 20 74 6f  iew will need to
a730: 20 62 65 20 72 65 73 65 74 2e 0a 2a 2f 0a 23 64   be reset..*/.#d
a740: 65 66 69 6e 65 20 44 42 5f 53 63 68 65 6d 61 4c  efine DB_SchemaL
a750: 6f 61 64 65 64 20 20 20 20 30 78 30 30 30 31 20  oaded    0x0001 
a760: 20 2f 2a 20 54 68 65 20 73 63 68 65 6d 61 20 68   /* The schema h
a770: 61 73 20 62 65 65 6e 20 6c 6f 61 64 65 64 20 2a  as been loaded *
a780: 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 55 6e 72  /.#define DB_Unr
a790: 65 73 65 74 56 69 65 77 73 20 20 20 20 30 78 30  esetViews    0x0
a7a0: 30 30 32 20 20 2f 2a 20 53 6f 6d 65 20 76 69 65  002  /* Some vie
a7b0: 77 73 20 68 61 76 65 20 64 65 66 69 6e 65 64 20  ws have defined 
a7c0: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 2a 2f 0a  column names */.
a7d0: 23 64 65 66 69 6e 65 20 44 42 5f 45 6d 70 74 79  #define DB_Empty
a7e0: 20 20 20 20 20 20 20 20 20 20 20 30 78 30 30 30             0x000
a7f0: 34 20 20 2f 2a 20 54 68 65 20 66 69 6c 65 20 69  4  /* The file i
a800: 73 20 65 6d 70 74 79 20 28 6c 65 6e 67 74 68 20  s empty (length 
a810: 30 20 62 79 74 65 73 29 20 2a 2f 0a 23 64 65 66  0 bytes) */.#def
a820: 69 6e 65 20 44 42 5f 52 65 73 65 74 57 61 6e 74  ine DB_ResetWant
a830: 65 64 20 20 20 20 20 30 78 30 30 30 38 20 20 2f  ed     0x0008  /
a840: 2a 20 52 65 73 65 74 20 74 68 65 20 73 63 68 65  * Reset the sche
a850: 6d 61 20 77 68 65 6e 20 6e 53 63 68 65 6d 61 4c  ma when nSchemaL
a860: 6f 63 6b 3d 3d 30 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  ock==0 */../*.**
a870: 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64   The number of d
a880: 69 66 66 65 72 65 6e 74 20 6b 69 6e 64 73 20 6f  ifferent kinds o
a890: 66 20 74 68 69 6e 67 73 20 74 68 61 74 20 63 61  f things that ca
a8a0: 6e 20 62 65 20 6c 69 6d 69 74 65 64 0a 2a 2a 20  n be limited.** 
a8b0: 75 73 69 6e 67 20 74 68 65 20 73 71 6c 69 74 65  using the sqlite
a8c0: 33 5f 6c 69 6d 69 74 28 29 20 69 6e 74 65 72 66  3_limit() interf
a8d0: 61 63 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ace..*/.#define 
a8e0: 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 20 28  SQLITE_N_LIMIT (
a8f0: 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 57 4f 52  SQLITE_LIMIT_WOR
a900: 4b 45 52 5f 54 48 52 45 41 44 53 2b 31 29 0a 0a  KER_THREADS+1)..
a910: 2f 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20  /*.** Lookaside 
a920: 6d 61 6c 6c 6f 63 20 69 73 20 61 20 73 65 74 20  malloc is a set 
a930: 6f 66 20 66 69 78 65 64 2d 73 69 7a 65 20 62 75  of fixed-size bu
a940: 66 66 65 72 73 20 74 68 61 74 20 63 61 6e 20 62  ffers that can b
a950: 65 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61 74  e used.** to sat
a960: 69 73 66 79 20 73 6d 61 6c 6c 20 74 72 61 6e 73  isfy small trans
a970: 69 65 6e 74 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  ient memory allo
a980: 63 61 74 69 6f 6e 20 72 65 71 75 65 73 74 73 20  cation requests 
a990: 66 6f 72 20 6f 62 6a 65 63 74 73 0a 2a 2a 20 61  for objects.** a
a9a0: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
a9b0: 20 70 61 72 74 69 63 75 6c 61 72 20 64 61 74 61   particular data
a9c0: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  base connection.
a9d0: 20 20 54 68 65 20 75 73 65 20 6f 66 0a 2a 2a 20    The use of.** 
a9e0: 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63  lookaside malloc
a9f0: 20 70 72 6f 76 69 64 65 73 20 61 20 73 69 67 6e   provides a sign
aa00: 69 66 69 63 61 6e 74 20 70 65 72 66 6f 72 6d 61  ificant performa
aa10: 6e 63 65 20 65 6e 68 61 6e 63 65 6d 65 6e 74 0a  nce enhancement.
aa20: 2a 2a 20 28 61 70 70 72 6f 78 20 31 30 25 29 20  ** (approx 10%) 
aa30: 62 79 20 61 76 6f 69 64 69 6e 67 20 6e 75 6d 65  by avoiding nume
aa40: 72 6f 75 73 20 6d 61 6c 6c 6f 63 2f 66 72 65 65  rous malloc/free
aa50: 20 72 65 71 75 65 73 74 73 20 77 68 69 6c 65 20   requests while 
aa60: 70 61 72 73 69 6e 67 0a 2a 2a 20 53 51 4c 20 73  parsing.** SQL s
aa70: 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a  tatements..**.**
aa80: 20 54 68 65 20 4c 6f 6f 6b 61 73 69 64 65 20 73   The Lookaside s
aa90: 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20 63  tructure holds c
aaa0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 69 6e 66  onfiguration inf
aab0: 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74  ormation about t
aac0: 68 65 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20  he.** lookaside 
aad0: 6d 61 6c 6c 6f 63 20 73 75 62 73 79 73 74 65 6d  malloc subsystem
aae0: 2e 20 20 45 61 63 68 20 61 76 61 69 6c 61 62 6c  .  Each availabl
aaf0: 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  e memory allocat
ab00: 69 6f 6e 20 69 6e 0a 2a 2a 20 74 68 65 20 6c 6f  ion in.** the lo
ab10: 6f 6b 61 73 69 64 65 20 73 75 62 73 79 73 74 65  okaside subsyste
ab20: 6d 20 69 73 20 73 74 6f 72 65 64 20 6f 6e 20 61  m is stored on a
ab30: 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20   linked list of 
ab40: 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 0a 2a 2a  LookasideSlot.**
ab50: 20 6f 62 6a 65 63 74 73 2e 0a 2a 2a 0a 2a 2a 20   objects..**.** 
ab60: 4c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61  Lookaside alloca
ab70: 74 69 6f 6e 73 20 61 72 65 20 6f 6e 6c 79 20 61  tions are only a
ab80: 6c 6c 6f 77 65 64 20 66 6f 72 20 6f 62 6a 65 63  llowed for objec
ab90: 74 73 20 74 68 61 74 20 61 72 65 20 61 73 73 6f  ts that are asso
aba0: 63 69 61 74 65 64 0a 2a 2a 20 77 69 74 68 20 61  ciated.** with a
abb0: 20 70 61 72 74 69 63 75 6c 61 72 20 64 61 74 61   particular data
abc0: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  base connection.
abd0: 20 20 48 65 6e 63 65 2c 20 73 63 68 65 6d 61 20    Hence, schema 
abe0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 63 61 6e 6e  information cann
abf0: 6f 74 0a 2a 2a 20 62 65 20 73 74 6f 72 65 64 20  ot.** be stored 
ac00: 69 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 62 65 63  in lookaside bec
ac10: 61 75 73 65 20 69 6e 20 73 68 61 72 65 64 20 63  ause in shared c
ac20: 61 63 68 65 20 6d 6f 64 65 20 74 68 65 20 73 63  ache mode the sc
ac30: 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  hema information
ac40: 0a 2a 2a 20 69 73 20 73 68 61 72 65 64 20 62 79  .** is shared by
ac50: 20 6d 75 6c 74 69 70 6c 65 20 64 61 74 61 62 61   multiple databa
ac60: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2e 20  se connections. 
ac70: 20 54 68 65 72 65 66 6f 72 65 2c 20 77 68 69 6c   Therefore, whil
ac80: 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20 73 63 68  e parsing.** sch
ac90: 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c  ema information,
aca0: 20 74 68 65 20 4c 6f 6f 6b 61 73 69 64 65 2e 62   the Lookaside.b
acb0: 45 6e 61 62 6c 65 64 20 66 6c 61 67 20 69 73 20  Enabled flag is 
acc0: 63 6c 65 61 72 65 64 20 73 6f 20 74 68 61 74 0a  cleared so that.
acd0: 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c  ** lookaside all
ace0: 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 6e 6f 74  ocations are not
acf0: 20 75 73 65 64 20 74 6f 20 63 6f 6e 73 74 72 75   used to constru
ad00: 63 74 20 74 68 65 20 73 63 68 65 6d 61 20 6f 62  ct the schema ob
ad10: 6a 65 63 74 73 2e 0a 2a 2a 0a 2a 2a 20 4e 65 77  jects..**.** New
ad20: 20 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63   lookaside alloc
ad30: 61 74 69 6f 6e 73 20 61 72 65 20 6f 6e 6c 79 20  ations are only 
ad40: 61 6c 6c 6f 77 65 64 20 69 66 20 62 44 69 73 61  allowed if bDisa
ad50: 62 6c 65 3d 3d 30 2e 20 20 57 68 65 6e 0a 2a 2a  ble==0.  When.**
ad60: 20 62 44 69 73 61 62 6c 65 20 69 73 20 67 72 65   bDisable is gre
ad70: 61 74 65 72 20 74 68 61 6e 20 7a 65 72 6f 2c 20  ater than zero, 
ad80: 73 7a 20 69 73 20 73 65 74 20 74 6f 20 7a 65 72  sz is set to zer
ad90: 6f 20 77 68 69 63 68 20 65 66 66 65 63 74 69 76  o which effectiv
ada0: 65 6c 79 0a 2a 2a 20 64 69 73 61 62 6c 65 73 20  ely.** disables 
adb0: 6c 6f 6f 6b 61 73 69 64 65 20 77 69 74 68 6f 75  lookaside withou
adc0: 74 20 61 64 64 69 6e 67 20 61 20 6e 65 77 20 74  t adding a new t
add0: 65 73 74 20 66 6f 72 20 74 68 65 20 62 44 69 73  est for the bDis
ade0: 61 62 6c 65 20 66 6c 61 67 0a 2a 2a 20 69 6e 20  able flag.** in 
adf0: 61 20 70 65 72 66 6f 72 6d 61 6e 63 65 2d 63 72  a performance-cr
ae00: 69 74 69 63 61 6c 20 70 61 74 68 2e 20 20 73 7a  itical path.  sz
ae10: 20 73 68 6f 75 6c 64 20 62 65 20 73 65 74 20 62   should be set b
ae20: 79 20 74 6f 20 73 7a 54 72 75 65 20 77 68 65 6e  y to szTrue when
ae30: 65 76 65 72 0a 2a 2a 20 62 44 69 73 61 62 6c 65  ever.** bDisable
ae40: 20 63 68 61 6e 67 65 73 20 62 61 63 6b 20 74 6f   changes back to
ae50: 20 7a 65 72 6f 2e 0a 2a 2f 0a 73 74 72 75 63 74   zero..*/.struct
ae60: 20 4c 6f 6f 6b 61 73 69 64 65 20 7b 0a 20 20 75   Lookaside {.  u
ae70: 33 32 20 62 44 69 73 61 62 6c 65 3b 20 20 20 20  32 bDisable;    
ae80: 20 20 20 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 6f         /* Only o
ae90: 70 65 72 61 74 65 20 74 68 65 20 6c 6f 6f 6b 61  perate the looka
aea0: 73 69 64 65 20 77 68 65 6e 20 7a 65 72 6f 20 2a  side when zero *
aeb0: 2f 0a 20 20 75 31 36 20 73 7a 3b 20 20 20 20 20  /.  u16 sz;     
aec0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
aed0: 69 7a 65 20 6f 66 20 65 61 63 68 20 62 75 66 66  ize of each buff
aee0: 65 72 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20  er in bytes */. 
aef0: 20 75 31 36 20 73 7a 54 72 75 65 3b 20 20 20 20   u16 szTrue;    
af00: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
af10: 20 76 61 6c 75 65 20 6f 66 20 73 7a 2c 20 65 76   value of sz, ev
af20: 65 6e 20 69 66 20 64 69 73 61 62 6c 65 64 20 2a  en if disabled *
af30: 2f 0a 20 20 75 38 20 62 4d 61 6c 6c 6f 63 65 64  /.  u8 bMalloced
af40: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
af50: 72 75 65 20 69 66 20 70 53 74 61 72 74 20 6f 62  rue if pStart ob
af60: 74 61 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69  tained from sqli
af70: 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a  te3_malloc() */.
af80: 20 20 75 33 32 20 6e 53 6c 6f 74 3b 20 20 20 20    u32 nSlot;    
af90: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
afa0: 62 65 72 20 6f 66 20 6c 6f 6f 6b 61 73 69 64 65  ber of lookaside
afb0: 20 73 6c 6f 74 73 20 61 6c 6c 6f 63 61 74 65 64   slots allocated
afc0: 20 2a 2f 0a 20 20 75 33 32 20 61 6e 53 74 61 74   */.  u32 anStat
afd0: 5b 33 5d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  [3];          /*
afe0: 20 30 3a 20 68 69 74 73 2e 20 20 31 3a 20 73 69   0: hits.  1: si
aff0: 7a 65 20 6d 69 73 73 65 73 2e 20 20 32 3a 20 66  ze misses.  2: f
b000: 75 6c 6c 20 6d 69 73 73 65 73 20 2a 2f 0a 20 20  ull misses */.  
b010: 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70  LookasideSlot *p
b020: 49 6e 69 74 3b 20 20 20 2f 2a 20 4c 69 73 74 20  Init;   /* List 
b030: 6f 66 20 62 75 66 66 65 72 73 20 6e 6f 74 20 70  of buffers not p
b040: 72 65 76 69 6f 75 73 6c 79 20 75 73 65 64 20 2a  reviously used *
b050: 2f 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f  /.  LookasideSlo
b060: 74 20 2a 70 46 72 65 65 3b 20 20 20 2f 2a 20 4c  t *pFree;   /* L
b070: 69 73 74 20 6f 66 20 61 76 61 69 6c 61 62 6c 65  ist of available
b080: 20 62 75 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f   buffers */.  vo
b090: 69 64 20 2a 70 53 74 61 72 74 3b 20 20 20 20 20  id *pStart;     
b0a0: 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62        /* First b
b0b0: 79 74 65 20 6f 66 20 61 76 61 69 6c 61 62 6c 65  yte of available
b0c0: 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 2a 2f   memory space */
b0d0: 0a 20 20 76 6f 69 64 20 2a 70 45 6e 64 3b 20 20  .  void *pEnd;  
b0e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69             /* Fi
b0f0: 72 73 74 20 62 79 74 65 20 70 61 73 74 20 65 6e  rst byte past en
b100: 64 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 73  d of available s
b110: 70 61 63 65 20 2a 2f 0a 7d 3b 0a 73 74 72 75 63  pace */.};.struc
b120: 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20  t LookasideSlot 
b130: 7b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f  {.  LookasideSlo
b140: 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 2f 2a 20  t *pNext;    /* 
b150: 4e 65 78 74 20 62 75 66 66 65 72 20 69 6e 20 74  Next buffer in t
b160: 68 65 20 6c 69 73 74 20 6f 66 20 66 72 65 65 20  he list of free 
b170: 62 75 66 66 65 72 73 20 2a 2f 0a 7d 3b 0a 0a 23  buffers */.};..#
b180: 64 65 66 69 6e 65 20 44 69 73 61 62 6c 65 4c 6f  define DisableLo
b190: 6f 6b 61 73 69 64 65 20 20 64 62 2d 3e 6c 6f 6f  okaside  db->loo
b1a0: 6b 61 73 69 64 65 2e 62 44 69 73 61 62 6c 65 2b  kaside.bDisable+
b1b0: 2b 3b 64 62 2d 3e 6c 6f 6f 6b 61 73 69 64 65 2e  +;db->lookaside.
b1c0: 73 7a 3d 30 0a 23 64 65 66 69 6e 65 20 45 6e 61  sz=0.#define Ena
b1d0: 62 6c 65 4c 6f 6f 6b 61 73 69 64 65 20 20 20 64  bleLookaside   d
b1e0: 62 2d 3e 6c 6f 6f 6b 61 73 69 64 65 2e 62 44 69  b->lookaside.bDi
b1f0: 73 61 62 6c 65 2d 2d 3b 5c 0a 20 20 20 64 62 2d  sable--;\.   db-
b200: 3e 6c 6f 6f 6b 61 73 69 64 65 2e 73 7a 3d 64 62  >lookaside.sz=db
b210: 2d 3e 6c 6f 6f 6b 61 73 69 64 65 2e 62 44 69 73  ->lookaside.bDis
b220: 61 62 6c 65 3f 30 3a 64 62 2d 3e 6c 6f 6f 6b 61  able?0:db->looka
b230: 73 69 64 65 2e 73 7a 54 72 75 65 0a 0a 2f 2a 0a  side.szTrue../*.
b240: 2a 2a 20 41 20 68 61 73 68 20 74 61 62 6c 65 20  ** A hash table 
b250: 66 6f 72 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e  for built-in fun
b260: 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e  ction definition
b270: 73 2e 20 20 28 41 70 70 6c 69 63 61 74 69 6f 6e  s.  (Application
b280: 2d 64 65 66 69 6e 65 64 0a 2a 2a 20 66 75 6e 63  -defined.** func
b290: 74 69 6f 6e 73 20 75 73 65 20 61 20 72 65 67 75  tions use a regu
b2a0: 6c 61 72 20 74 61 62 6c 65 20 74 61 62 6c 65 20  lar table table 
b2b0: 66 72 6f 6d 20 68 61 73 68 2e 68 2e 29 0a 2a 2a  from hash.h.).**
b2c0: 0a 2a 2a 20 48 61 73 68 20 65 61 63 68 20 46 75  .** Hash each Fu
b2d0: 6e 63 44 65 66 20 73 74 72 75 63 74 75 72 65 20  ncDef structure 
b2e0: 69 6e 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20  into one of the 
b2f0: 46 75 6e 63 44 65 66 48 61 73 68 2e 61 5b 5d 20  FuncDefHash.a[] 
b300: 73 6c 6f 74 73 2e 0a 2a 2a 20 43 6f 6c 6c 69 73  slots..** Collis
b310: 69 6f 6e 73 20 61 72 65 20 6f 6e 20 74 68 65 20  ions are on the 
b320: 46 75 6e 63 44 65 66 2e 75 2e 70 48 61 73 68 20  FuncDef.u.pHash 
b330: 63 68 61 69 6e 2e 20 20 55 73 65 20 74 68 65 20  chain.  Use the 
b340: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48  SQLITE_FUNC_HASH
b350: 28 29 0a 2a 2a 20 6d 61 63 72 6f 20 74 6f 20 63  ().** macro to c
b360: 6f 6d 70 75 74 65 20 61 20 68 61 73 68 20 6f 6e  ompute a hash on
b370: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 6e 61   the function na
b380: 6d 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  me..*/.#define S
b390: 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48 5f  QLITE_FUNC_HASH_
b3a0: 53 5a 20 32 33 0a 73 74 72 75 63 74 20 46 75 6e  SZ 23.struct Fun
b3b0: 63 44 65 66 48 61 73 68 20 7b 0a 20 20 46 75 6e  cDefHash {.  Fun
b3c0: 63 44 65 66 20 2a 61 5b 53 51 4c 49 54 45 5f 46  cDef *a[SQLITE_F
b3d0: 55 4e 43 5f 48 41 53 48 5f 53 5a 5d 3b 20 20 20  UNC_HASH_SZ];   
b3e0: 20 20 20 20 2f 2a 20 48 61 73 68 20 74 61 62 6c      /* Hash tabl
b3f0: 65 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20  e for functions 
b400: 2a 2f 0a 7d 3b 0a 23 64 65 66 69 6e 65 20 53 51  */.};.#define SQ
b410: 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48 28 43  LITE_FUNC_HASH(C
b420: 2c 4c 29 20 28 28 28 43 29 2b 28 4c 29 29 25 53  ,L) (((C)+(L))%S
b430: 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48 5f  QLITE_FUNC_HASH_
b440: 53 5a 29 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  SZ)..#ifdef SQLI
b450: 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49  TE_USER_AUTHENTI
b460: 43 41 54 49 4f 4e 0a 2f 2a 0a 2a 2a 20 49 6e 66  CATION./*.** Inf
b470: 6f 72 6d 61 74 69 6f 6e 20 68 65 6c 64 20 69 6e  ormation held in
b480: 20 74 68 65 20 22 73 71 6c 69 74 65 33 22 20 64   the "sqlite3" d
b490: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
b4a0: 6f 6e 20 6f 62 6a 65 63 74 20 61 6e 64 20 75 73  on object and us
b4b0: 65 64 0a 2a 2a 20 74 6f 20 6d 61 6e 61 67 65 20  ed.** to manage 
b4c0: 75 73 65 72 20 61 75 74 68 65 6e 74 69 63 61 74  user authenticat
b4d0: 69 6f 6e 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20  ion..*/.typedef 
b4e0: 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f 75  struct sqlite3_u
b4f0: 73 65 72 61 75 74 68 20 73 71 6c 69 74 65 33 5f  serauth sqlite3_
b500: 75 73 65 72 61 75 74 68 3b 0a 73 74 72 75 63 74  userauth;.struct
b510: 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74   sqlite3_useraut
b520: 68 20 7b 0a 20 20 75 38 20 61 75 74 68 4c 65 76  h {.  u8 authLev
b530: 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  el;             
b540: 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 61      /* Current a
b550: 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 6c 65  uthentication le
b560: 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 75  vel */.  int nAu
b570: 74 68 50 57 3b 20 20 20 20 20 20 20 20 20 20 20  thPW;           
b580: 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
b590: 66 20 74 68 65 20 7a 41 75 74 68 50 57 20 69 6e  f the zAuthPW in
b5a0: 20 62 79 74 65 73 20 2a 2f 0a 20 20 63 68 61 72   bytes */.  char
b5b0: 20 2a 7a 41 75 74 68 50 57 3b 20 20 20 20 20 20   *zAuthPW;      
b5c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 73            /* Pas
b5d0: 73 77 6f 72 64 20 75 73 65 64 20 74 6f 20 61 75  sword used to au
b5e0: 74 68 65 6e 74 69 63 61 74 65 20 2a 2f 0a 20 20  thenticate */.  
b5f0: 63 68 61 72 20 2a 7a 41 75 74 68 55 73 65 72 3b  char *zAuthUser;
b600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b610: 20 55 73 65 72 20 6e 61 6d 65 20 75 73 65 64 20   User name used 
b620: 74 6f 20 61 75 74 68 65 6e 74 69 63 61 74 65 20  to authenticate 
b630: 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65  */.};../* Allowe
b640: 64 20 76 61 6c 75 65 73 20 66 6f 72 20 73 71 6c  d values for sql
b650: 69 74 65 33 5f 75 73 65 72 61 75 74 68 2e 61 75  ite3_userauth.au
b660: 74 68 4c 65 76 65 6c 20 2a 2f 0a 23 64 65 66 69  thLevel */.#defi
b670: 6e 65 20 55 41 55 54 48 5f 55 6e 6b 6e 6f 77 6e  ne UAUTH_Unknown
b680: 20 20 20 20 20 30 20 20 20 20 20 2f 2a 20 41 75       0     /* Au
b690: 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 6e 6f 74  thentication not
b6a0: 20 79 65 74 20 63 68 65 63 6b 65 64 20 2a 2f 0a   yet checked */.
b6b0: 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 46 61  #define UAUTH_Fa
b6c0: 69 6c 20 20 20 20 20 20 20 20 31 20 20 20 20 20  il        1     
b6d0: 2f 2a 20 55 73 65 72 20 61 75 74 68 65 6e 74 69  /* User authenti
b6e0: 63 61 74 69 6f 6e 20 66 61 69 6c 65 64 20 2a 2f  cation failed */
b6f0: 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 55  .#define UAUTH_U
b700: 73 65 72 20 20 20 20 20 20 20 20 32 20 20 20 20  ser        2    
b710: 20 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74 65   /* Authenticate
b720: 64 20 61 73 20 61 20 6e 6f 72 6d 61 6c 20 75 73  d as a normal us
b730: 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41  er */.#define UA
b740: 55 54 48 5f 41 64 6d 69 6e 20 20 20 20 20 20 20  UTH_Admin       
b750: 33 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74  3     /* Authent
b760: 69 63 61 74 65 64 20 61 73 20 61 6e 20 61 64 6d  icated as an adm
b770: 69 6e 69 73 74 72 61 74 6f 72 20 2a 2f 0a 0a 2f  inistrator */../
b780: 2a 20 46 75 6e 63 74 69 6f 6e 73 20 75 73 65 64  * Functions used
b790: 20 6f 6e 6c 79 20 62 79 20 75 73 65 72 20 61 75   only by user au
b7a0: 74 68 6f 72 69 7a 61 74 69 6f 6e 20 6c 6f 67 69  thorization logi
b7b0: 63 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  c */.int sqlite3
b7c0: 55 73 65 72 41 75 74 68 54 61 62 6c 65 28 63 6f  UserAuthTable(co
b7d0: 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20  nst char*);.int 
b7e0: 73 71 6c 69 74 65 33 55 73 65 72 41 75 74 68 43  sqlite3UserAuthC
b7f0: 68 65 63 6b 4c 6f 67 69 6e 28 73 71 6c 69 74 65  heckLogin(sqlite
b800: 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75  3*,const char*,u
b810: 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  8*);.void sqlite
b820: 33 55 73 65 72 41 75 74 68 49 6e 69 74 28 73 71  3UserAuthInit(sq
b830: 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71  lite3*);.void sq
b840: 6c 69 74 65 33 43 72 79 70 74 46 75 6e 63 28 73  lite3CryptFunc(s
b850: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
b860: 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
b870: 65 2a 2a 29 3b 0a 0a 23 65 6e 64 69 66 20 2f 2a  e**);..#endif /*
b880: 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54   SQLITE_USER_AUT
b890: 48 45 4e 54 49 43 41 54 49 4f 4e 20 2a 2f 0a 0a  HENTICATION */..
b8a0: 2f 2a 0a 2a 2a 20 74 79 70 65 64 65 66 20 66 6f  /*.** typedef fo
b8b0: 72 20 74 68 65 20 61 75 74 68 6f 72 69 7a 61 74  r the authorizat
b8c0: 69 6f 6e 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e  ion callback fun
b8d0: 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 64 65 66  ction..*/.#ifdef
b8e0: 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54   SQLITE_USER_AUT
b8f0: 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20 74 79  HENTICATION.  ty
b900: 70 65 64 65 66 20 69 6e 74 20 28 2a 73 71 6c 69  pedef int (*sqli
b910: 74 65 33 5f 78 61 75 74 68 29 28 76 6f 69 64 2a  te3_xauth)(void*
b920: 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
b930: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e  ,const char*,con
b940: 73 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 20  st char*,.      
b950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b960: 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63           const c
b970: 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
b980: 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70 65  *);.#else.  type
b990: 64 65 66 20 69 6e 74 20 28 2a 73 71 6c 69 74 65  def int (*sqlite
b9a0: 33 5f 78 61 75 74 68 29 28 76 6f 69 64 2a 2c 69  3_xauth)(void*,i
b9b0: 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  nt,const char*,c
b9c0: 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
b9d0: 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 20 20 20   char*,.        
b9e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b9f0: 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61         const cha
ba00: 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  r*);.#endif..#if
ba10: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
ba20: 5f 44 45 50 52 45 43 41 54 45 44 0a 2f 2a 20 54  _DEPRECATED./* T
ba30: 68 69 73 20 69 73 20 61 6e 20 65 78 74 72 61 20  his is an extra 
ba40: 53 51 4c 49 54 45 5f 54 52 41 43 45 20 6d 61 63  SQLITE_TRACE mac
ba50: 72 6f 20 74 68 61 74 20 69 6e 64 69 63 61 74 65  ro that indicate
ba60: 73 20 22 6c 65 67 61 63 79 22 20 74 72 61 63 69  s "legacy" traci
ba70: 6e 67 0a 2a 2a 20 69 6e 20 74 68 65 20 73 74 79  ng.** in the sty
ba80: 6c 65 20 6f 66 20 73 71 6c 69 74 65 33 5f 74 72  le of sqlite3_tr
ba90: 61 63 65 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65  ace().*/.#define
baa0: 20 53 51 4c 49 54 45 5f 54 52 41 43 45 5f 4c 45   SQLITE_TRACE_LE
bab0: 47 41 43 59 20 20 20 20 20 20 20 20 20 20 30 78  GACY          0x
bac0: 34 30 20 20 20 20 20 2f 2a 20 55 73 65 20 74 68  40     /* Use th
bad0: 65 20 6c 65 67 61 63 79 20 78 54 72 61 63 65 20  e legacy xTrace 
bae0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
baf0: 45 5f 54 52 41 43 45 5f 58 50 52 4f 46 49 4c 45  E_TRACE_XPROFILE
bb00: 20 20 20 20 20 20 20 20 30 78 38 30 20 20 20 20          0x80    
bb10: 20 2f 2a 20 55 73 65 20 74 68 65 20 6c 65 67 61   /* Use the lega
bb20: 63 79 20 78 50 72 6f 66 69 6c 65 20 2a 2f 0a 23  cy xProfile */.#
bb30: 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 53 51 4c  else.#define SQL
bb40: 49 54 45 5f 54 52 41 43 45 5f 4c 45 47 41 43 59  ITE_TRACE_LEGACY
bb50: 20 20 20 20 20 20 20 20 20 20 30 0a 23 64 65 66            0.#def
bb60: 69 6e 65 20 53 51 4c 49 54 45 5f 54 52 41 43 45  ine SQLITE_TRACE
bb70: 5f 58 50 52 4f 46 49 4c 45 20 20 20 20 20 20 20  _XPROFILE       
bb80: 20 30 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c   0.#endif /* SQL
bb90: 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41  ITE_OMIT_DEPRECA
bba0: 54 45 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  TED */.#define S
bbb0: 51 4c 49 54 45 5f 54 52 41 43 45 5f 4e 4f 4e 4c  QLITE_TRACE_NONL
bbc0: 45 47 41 43 59 5f 4d 41 53 4b 20 20 30 78 30 66  EGACY_MASK  0x0f
bbd0: 20 20 20 20 20 2f 2a 20 4e 6f 72 6d 61 6c 20 66       /* Normal f
bbe0: 6c 61 67 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20  lags */.../*.** 
bbf0: 45 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f  Each database co
bc00: 6e 6e 65 63 74 69 6f 6e 20 69 73 20 61 6e 20 69  nnection is an i
bc10: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
bc20: 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
bc30: 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 73 71  re..*/.struct sq
bc40: 6c 69 74 65 33 20 7b 0a 20 20 73 71 6c 69 74 65  lite3 {.  sqlite
bc50: 33 5f 76 66 73 20 2a 70 56 66 73 3b 20 20 20 20  3_vfs *pVfs;    
bc60: 20 20 20 20 20 20 20 20 2f 2a 20 4f 53 20 49 6e          /* OS In
bc70: 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 74 72  terface */.  str
bc80: 75 63 74 20 56 64 62 65 20 2a 70 56 64 62 65 3b  uct Vdbe *pVdbe;
bc90: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69             /* Li
bca0: 73 74 20 6f 66 20 61 63 74 69 76 65 20 76 69 72  st of active vir
bcb0: 74 75 61 6c 20 6d 61 63 68 69 6e 65 73 20 2a 2f  tual machines */
bcc0: 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70 44 66 6c  .  CollSeq *pDfl
bcd0: 74 43 6f 6c 6c 3b 20 20 20 20 20 20 20 20 20 20  tColl;          
bce0: 20 2f 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20   /* The default 
bcf0: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
bd00: 63 65 20 28 42 49 4e 41 52 59 29 20 2a 2f 0a 20  ce (BINARY) */. 
bd10: 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a   sqlite3_mutex *
bd20: 6d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 2f  mutex;         /
bd30: 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74  * Connection mut
bd40: 65 78 20 2a 2f 0a 20 20 44 62 20 2a 61 44 62 3b  ex */.  Db *aDb;
bd50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bd60: 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 62 61 63        /* All bac
bd70: 6b 65 6e 64 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  kends */.  int n
bd80: 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Db;             
bd90: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
bda0: 65 72 20 6f 66 20 62 61 63 6b 65 6e 64 73 20 63  er of backends c
bdb0: 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 20  urrently in use 
bdc0: 2a 2f 0a 20 20 75 33 32 20 6d 44 62 46 6c 61 67  */.  u32 mDbFlag
bdd0: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
bde0: 20 20 20 2f 2a 20 66 6c 61 67 73 20 72 65 63 6f     /* flags reco
bdf0: 72 64 69 6e 67 20 69 6e 74 65 72 6e 61 6c 20 73  rding internal s
be00: 74 61 74 65 20 2a 2f 0a 20 20 75 36 34 20 66 6c  tate */.  u64 fl
be10: 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ags;            
be20: 20 20 20 20 20 20 20 20 2f 2a 20 66 6c 61 67 73          /* flags
be30: 20 73 65 74 74 61 62 6c 65 20 62 79 20 70 72 61   settable by pra
be40: 67 6d 61 73 2e 20 53 65 65 20 62 65 6c 6f 77 20  gmas. See below 
be50: 2a 2f 0a 20 20 69 36 34 20 6c 61 73 74 52 6f 77  */.  i64 lastRow
be60: 69 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  id;             
be70: 20 20 20 2f 2a 20 52 4f 57 49 44 20 6f 66 20 6d     /* ROWID of m
be80: 6f 73 74 20 72 65 63 65 6e 74 20 69 6e 73 65 72  ost recent inser
be90: 74 20 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f  t (see above) */
bea0: 0a 20 20 69 36 34 20 73 7a 4d 6d 61 70 3b 20 20  .  i64 szMmap;  
beb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bec0: 20 2f 2a 20 44 65 66 61 75 6c 74 20 6d 6d 61 70   /* Default mmap
bed0: 5f 73 69 7a 65 20 73 65 74 74 69 6e 67 20 2a 2f  _size setting */
bee0: 0a 20 20 75 33 32 20 6e 53 63 68 65 6d 61 4c 6f  .  u32 nSchemaLo
bef0: 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ck;             
bf00: 20 2f 2a 20 44 6f 20 6e 6f 74 20 72 65 73 65 74   /* Do not reset
bf10: 20 74 68 65 20 73 63 68 65 6d 61 20 77 68 65 6e   the schema when
bf20: 20 6e 6f 6e 2d 7a 65 72 6f 20 2a 2f 0a 20 20 75   non-zero */.  u
bf30: 6e 73 69 67 6e 65 64 20 69 6e 74 20 6f 70 65 6e  nsigned int open
bf40: 46 6c 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20  Flags;       /* 
bf50: 46 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f 20  Flags passed to 
bf60: 73 71 6c 69 74 65 33 5f 76 66 73 2e 78 4f 70 65  sqlite3_vfs.xOpe
bf70: 6e 28 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72  n() */.  int err
bf80: 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20  Code;           
bf90: 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72         /* Most r
bfa0: 65 63 65 6e 74 20 65 72 72 6f 72 20 63 6f 64 65  ecent error code
bfb0: 20 28 53 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20   (SQLITE_*) */. 
bfc0: 20 69 6e 74 20 65 72 72 4d 61 73 6b 3b 20 20 20   int errMask;   
bfd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
bfe0: 2a 20 26 20 72 65 73 75 6c 74 20 63 6f 64 65 73  * & result codes
bff0: 20 77 69 74 68 20 74 68 69 73 20 62 65 66 6f 72   with this befor
c000: 65 20 72 65 74 75 72 6e 69 6e 67 20 2a 2f 0a 20  e returning */. 
c010: 20 69 6e 74 20 69 53 79 73 45 72 72 6e 6f 3b 20   int iSysErrno; 
c020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c030: 2a 20 45 72 72 6e 6f 20 76 61 6c 75 65 20 66 72  * Errno value fr
c040: 6f 6d 20 6c 61 73 74 20 73 79 73 74 65 6d 20 65  om last system e
c050: 72 72 6f 72 20 2a 2f 0a 20 20 75 31 36 20 64 62  rror */.  u16 db
c060: 4f 70 74 46 6c 61 67 73 3b 20 20 20 20 20 20 20  OptFlags;       
c070: 20 20 20 20 20 20 20 20 2f 2a 20 46 6c 61 67 73          /* Flags
c080: 20 74 6f 20 65 6e 61 62 6c 65 2f 64 69 73 61 62   to enable/disab
c090: 6c 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  le optimizations
c0a0: 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20   */.  u8 enc;   
c0b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c0c0: 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f      /* Text enco
c0d0: 64 69 6e 67 20 2a 2f 0a 20 20 75 38 20 61 75 74  ding */.  u8 aut
c0e0: 6f 43 6f 6d 6d 69 74 3b 20 20 20 20 20 20 20 20  oCommit;        
c0f0: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61          /* The a
c100: 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 2e  uto-commit flag.
c110: 20 2a 2f 0a 20 20 75 38 20 74 65 6d 70 5f 73 74   */.  u8 temp_st
c120: 6f 72 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ore;            
c130: 20 20 20 20 2f 2a 20 31 3a 20 66 69 6c 65 20 32      /* 1: file 2
c140: 3a 20 6d 65 6d 6f 72 79 20 30 3a 20 64 65 66 61  : memory 0: defa
c150: 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6d 61 6c 6c  ult */.  u8 mall
c160: 6f 63 46 61 69 6c 65 64 3b 20 20 20 20 20 20 20  ocFailed;       
c170: 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
c180: 66 20 77 65 20 68 61 76 65 20 73 65 65 6e 20 61  f we have seen a
c190: 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 20   malloc failure 
c1a0: 2a 2f 0a 20 20 75 38 20 62 42 65 6e 69 67 6e 4d  */.  u8 bBenignM
c1b0: 61 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 20  alloc;          
c1c0: 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 72 65 71     /* Do not req
c1d0: 75 69 72 65 20 4f 4f 4d 73 20 69 66 20 74 72 75  uire OOMs if tru
c1e0: 65 20 2a 2f 0a 20 20 75 38 20 64 66 6c 74 4c 6f  e */.  u8 dfltLo
c1f0: 63 6b 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20  ckMode;         
c200: 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
c210: 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 66 6f 72  locking-mode for
c220: 20 61 74 74 61 63 68 65 64 20 64 62 73 20 2a 2f   attached dbs */
c230: 0a 20 20 73 69 67 6e 65 64 20 63 68 61 72 20 6e  .  signed char n
c240: 65 78 74 41 75 74 6f 76 61 63 3b 20 20 20 20 20  extAutovac;     
c250: 20 2f 2a 20 41 75 74 6f 76 61 63 20 73 65 74 74   /* Autovac sett
c260: 69 6e 67 20 61 66 74 65 72 20 56 41 43 55 55 4d  ing after VACUUM
c270: 20 69 66 20 3e 3d 30 20 2a 2f 0a 20 20 75 38 20   if >=0 */.  u8 
c280: 73 75 70 70 72 65 73 73 45 72 72 3b 20 20 20 20  suppressErr;    
c290: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f             /* Do
c2a0: 20 6e 6f 74 20 69 73 73 75 65 20 65 72 72 6f 72   not issue error
c2b0: 20 6d 65 73 73 61 67 65 73 20 69 66 20 74 72 75   messages if tru
c2c0: 65 20 2a 2f 0a 20 20 75 38 20 76 74 61 62 4f 6e  e */.  u8 vtabOn
c2d0: 43 6f 6e 66 6c 69 63 74 3b 20 20 20 20 20 20 20  Conflict;       
c2e0: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f       /* Value to
c2f0: 20 72 65 74 75 72 6e 20 66 6f 72 20 73 33 5f 76   return for s3_v
c300: 74 61 62 5f 6f 6e 5f 63 6f 6e 66 6c 69 63 74 28  tab_on_conflict(
c310: 29 20 2a 2f 0a 20 20 75 38 20 69 73 54 72 61 6e  ) */.  u8 isTran
c320: 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74  sactionSavepoint
c330: 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20  ;    /* True if 
c340: 74 68 65 20 6f 75 74 65 72 6d 6f 73 74 20 73 61  the outermost sa
c350: 76 65 70 6f 69 6e 74 20 69 73 20 61 20 54 53 20  vepoint is a TS 
c360: 2a 2f 0a 20 20 75 38 20 6d 54 72 61 63 65 3b 20  */.  u8 mTrace; 
c370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c380: 20 20 20 2f 2a 20 7a 65 72 6f 20 6f 72 20 6d 6f     /* zero or mo
c390: 72 65 20 53 51 4c 49 54 45 5f 54 52 41 43 45 20  re SQLITE_TRACE 
c3a0: 66 6c 61 67 73 20 2a 2f 0a 20 20 75 38 20 6e 6f  flags */.  u8 no
c3b0: 53 68 61 72 65 64 43 61 63 68 65 3b 20 20 20 20  SharedCache;    
c3c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
c3d0: 20 69 66 20 6e 6f 20 73 68 61 72 65 64 2d 63 61   if no shared-ca
c3e0: 63 68 65 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a  che backends */.
c3f0: 20 20 75 38 20 6e 53 71 6c 45 78 65 63 3b 20 20    u8 nSqlExec;  
c400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c410: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 65 6e  /* Number of pen
c420: 64 69 6e 67 20 4f 50 5f 53 71 6c 45 78 65 63 20  ding OP_SqlExec 
c430: 6f 70 63 6f 64 65 73 20 2a 2f 0a 20 20 69 6e 74  opcodes */.  int
c440: 20 6e 65 78 74 50 61 67 65 73 69 7a 65 3b 20 20   nextPagesize;  
c450: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61             /* Pa
c460: 67 65 73 69 7a 65 20 61 66 74 65 72 20 56 41 43  gesize after VAC
c470: 55 55 4d 20 69 66 20 3e 30 20 2a 2f 0a 20 20 75  UUM if >0 */.  u
c480: 33 32 20 6d 61 67 69 63 3b 20 20 20 20 20 20 20  32 magic;       
c490: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c4a0: 4d 61 67 69 63 20 6e 75 6d 62 65 72 20 66 6f 72  Magic number for
c4b0: 20 64 65 74 65 63 74 20 6c 69 62 72 61 72 79 20   detect library 
c4c0: 6d 69 73 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20  misuse */.  int 
c4d0: 6e 43 68 61 6e 67 65 3b 20 20 20 20 20 20 20 20  nChange;        
c4e0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
c4f0: 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73  ue returned by s
c500: 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29  qlite3_changes()
c510: 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 6f 74 61 6c   */.  int nTotal
c520: 43 68 61 6e 67 65 3b 20 20 20 20 20 20 20 20 20  Change;         
c530: 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 72 65 74      /* Value ret
c540: 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33  urned by sqlite3
c550: 5f 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28 29  _total_changes()
c560: 20 2a 2f 0a 20 20 69 6e 74 20 61 4c 69 6d 69 74   */.  int aLimit
c570: 5b 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 5d  [SQLITE_N_LIMIT]
c580: 3b 20 20 20 2f 2a 20 4c 69 6d 69 74 73 20 2a 2f  ;   /* Limits */
c590: 0a 20 20 69 6e 74 20 6e 4d 61 78 53 6f 72 74 65  .  int nMaxSorte
c5a0: 72 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20  rMmap;          
c5b0: 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 69 7a 65   /* Maximum size
c5c0: 20 6f 66 20 72 65 67 69 6f 6e 73 20 6d 61 70 70   of regions mapp
c5d0: 65 64 20 62 79 20 73 6f 72 74 65 72 20 2a 2f 0a  ed by sorter */.
c5e0: 20 20 73 74 72 75 63 74 20 73 71 6c 69 74 65 33    struct sqlite3
c5f0: 49 6e 69 74 49 6e 66 6f 20 7b 20 20 20 20 20 20  InitInfo {      
c600: 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75  /* Information u
c610: 73 65 64 20 64 75 72 69 6e 67 20 69 6e 69 74 69  sed during initi
c620: 61 6c 69 7a 61 74 69 6f 6e 20 2a 2f 0a 20 20 20  alization */.   
c630: 20 69 6e 74 20 6e 65 77 54 6e 75 6d 3b 20 20 20   int newTnum;   
c640: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c650: 52 6f 6f 74 70 61 67 65 20 6f 66 20 74 61 62 6c  Rootpage of tabl
c660: 65 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69  e being initiali
c670: 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38 20 69 44  zed */.    u8 iD
c680: 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b;              
c690: 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20         /* Which 
c6a0: 64 62 20 66 69 6c 65 20 69 73 20 62 65 69 6e 67  db file is being
c6b0: 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a   initialized */.
c6c0: 20 20 20 20 75 38 20 62 75 73 79 3b 20 20 20 20      u8 busy;    
c6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c6e0: 2f 2a 20 54 52 55 45 20 69 66 20 63 75 72 72 65  /* TRUE if curre
c6f0: 6e 74 6c 79 20 69 6e 69 74 69 61 6c 69 7a 69 6e  ntly initializin
c700: 67 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65  g */.    unsigne
c710: 64 20 6f 72 70 68 61 6e 54 72 69 67 67 65 72 20  d orphanTrigger 
c720: 3a 20 31 3b 20 2f 2a 20 4c 61 73 74 20 73 74 61  : 1; /* Last sta
c730: 74 65 6d 65 6e 74 20 69 73 20 6f 72 70 68 61 6e  tement is orphan
c740: 65 64 20 54 45 4d 50 20 74 72 69 67 67 65 72 20  ed TEMP trigger 
c750: 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20  */.    unsigned 
c760: 69 6d 70 6f 73 74 65 72 54 61 62 6c 65 20 3a 20  imposterTable : 
c770: 31 3b 20 2f 2a 20 42 75 69 6c 64 69 6e 67 20 61  1; /* Building a
c780: 6e 20 69 6d 70 6f 73 74 65 72 20 74 61 62 6c 65  n imposter table
c790: 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64   */.    unsigned
c7a0: 20 72 65 6f 70 65 6e 4d 65 6d 64 62 20 3a 20 31   reopenMemdb : 1
c7b0: 3b 20 20 20 2f 2a 20 41 54 54 41 43 48 20 69 73  ;   /* ATTACH is
c7c0: 20 72 65 61 6c 6c 79 20 61 20 72 65 6f 70 65 6e   really a reopen
c7d0: 20 75 73 69 6e 67 20 4d 65 6d 44 42 20 2a 2f 0a   using MemDB */.
c7e0: 20 20 20 20 63 68 61 72 20 2a 2a 61 7a 49 6e 69      char **azIni
c7f0: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
c800: 2f 2a 20 22 74 79 70 65 22 2c 20 22 6e 61 6d 65  /* "type", "name
c810: 22 2c 20 61 6e 64 20 22 74 62 6c 5f 6e 61 6d 65  ", and "tbl_name
c820: 22 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 7d  " columns */.  }
c830: 20 69 6e 69 74 3b 0a 20 20 69 6e 74 20 6e 56 64   init;.  int nVd
c840: 62 65 41 63 74 69 76 65 3b 20 20 20 20 20 20 20  beActive;       
c850: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
c860: 20 6f 66 20 56 44 42 45 73 20 63 75 72 72 65 6e   of VDBEs curren
c870: 74 6c 79 20 72 75 6e 6e 69 6e 67 20 2a 2f 0a 20  tly running */. 
c880: 20 69 6e 74 20 6e 56 64 62 65 52 65 61 64 3b 20   int nVdbeRead; 
c890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c8a0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69  * Number of acti
c8b0: 76 65 20 56 44 42 45 73 20 74 68 61 74 20 72 65  ve VDBEs that re
c8c0: 61 64 20 6f 72 20 77 72 69 74 65 20 2a 2f 0a 20  ad or write */. 
c8d0: 20 69 6e 74 20 6e 56 64 62 65 57 72 69 74 65 3b   int nVdbeWrite;
c8e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c8f0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69  * Number of acti
c900: 76 65 20 56 44 42 45 73 20 74 68 61 74 20 72 65  ve VDBEs that re
c910: 61 64 20 61 6e 64 20 77 72 69 74 65 20 2a 2f 0a  ad and write */.
c920: 20 20 69 6e 74 20 6e 56 64 62 65 45 78 65 63 3b    int nVdbeExec;
c930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c940: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73  /* Number of nes
c950: 74 65 64 20 63 61 6c 6c 73 20 74 6f 20 56 64 62  ted calls to Vdb
c960: 65 45 78 65 63 28 29 20 2a 2f 0a 20 20 69 6e 74  eExec() */.  int
c970: 20 6e 56 44 65 73 74 72 6f 79 3b 20 20 20 20 20   nVDestroy;     
c980: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
c990: 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65 20 4f  mber of active O
c9a0: 50 5f 56 44 65 73 74 72 6f 79 20 6f 70 65 72 61  P_VDestroy opera
c9b0: 74 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  tions */.  int n
c9c0: 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20  Extension;      
c9d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
c9e0: 65 72 20 6f 66 20 6c 6f 61 64 65 64 20 65 78 74  er of loaded ext
c9f0: 65 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20 76 6f 69  ensions */.  voi
ca00: 64 20 2a 2a 61 45 78 74 65 6e 73 69 6f 6e 3b 20  d **aExtension; 
ca10: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
ca20: 72 61 79 20 6f 66 20 73 68 61 72 65 64 20 6c 69  ray of shared li
ca30: 62 72 61 72 79 20 68 61 6e 64 6c 65 73 20 2a 2f  brary handles */
ca40: 0a 20 20 69 6e 74 20 28 2a 78 54 72 61 63 65 29  .  int (*xTrace)
ca50: 28 75 33 32 2c 76 6f 69 64 2a 2c 76 6f 69 64 2a  (u32,void*,void*
ca60: 2c 76 6f 69 64 2a 29 3b 20 20 20 20 20 2f 2a 20  ,void*);     /* 
ca70: 54 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a  Trace function *
ca80: 2f 0a 20 20 76 6f 69 64 20 2a 70 54 72 61 63 65  /.  void *pTrace
ca90: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
caa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
cab0: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   Argument to the
cac0: 20 74 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20   trace function 
cad0: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
cae0: 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54 45  E_OMIT_DEPRECATE
caf0: 44 0a 20 20 76 6f 69 64 20 28 2a 78 50 72 6f 66  D.  void (*xProf
cb00: 69 6c 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74  ile)(void*,const
cb10: 20 63 68 61 72 2a 2c 75 36 34 29 3b 20 20 2f 2a   char*,u64);  /*
cb20: 20 50 72 6f 66 69 6c 69 6e 67 20 66 75 6e 63 74   Profiling funct
cb30: 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ion */.  void *p
cb40: 50 72 6f 66 69 6c 65 41 72 67 3b 20 20 20 20 20  ProfileArg;     
cb50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cb60: 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74     /* Argument t
cb70: 6f 20 70 72 6f 66 69 6c 65 20 66 75 6e 63 74 69  o profile functi
cb80: 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 76  on */.#endif.  v
cb90: 6f 69 64 20 2a 70 43 6f 6d 6d 69 74 41 72 67 3b  oid *pCommitArg;
cba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cbb0: 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20   /* Argument to 
cbc0: 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 28  xCommitCallback(
cbd0: 29 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 43 6f  ) */.  int (*xCo
cbe0: 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 29 28 76 6f  mmitCallback)(vo
cbf0: 69 64 2a 29 3b 20 20 20 20 2f 2a 20 49 6e 76 6f  id*);    /* Invo
cc00: 6b 65 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d  ked at every com
cc10: 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  mit. */.  void *
cc20: 70 52 6f 6c 6c 62 61 63 6b 41 72 67 3b 20 20 20  pRollbackArg;   
cc30: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
cc40: 72 67 75 6d 65 6e 74 20 74 6f 20 78 52 6f 6c 6c  rgument to xRoll
cc50: 62 61 63 6b 43 61 6c 6c 62 61 63 6b 28 29 20 2a  backCallback() *
cc60: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 52 6f 6c 6c  /.  void (*xRoll
cc70: 62 61 63 6b 43 61 6c 6c 62 61 63 6b 29 28 76 6f  backCallback)(vo
cc80: 69 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f 6b 65 64  id*); /* Invoked
cc90: 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74   at every commit
cca0: 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 70  . */.  void *pUp
ccb0: 64 61 74 65 41 72 67 3b 0a 20 20 76 6f 69 64 20  dateArg;.  void 
ccc0: 28 2a 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  (*xUpdateCallbac
ccd0: 6b 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f  k)(void*,int, co
cce0: 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
ccf0: 63 68 61 72 2a 2c 73 71 6c 69 74 65 5f 69 6e 74  char*,sqlite_int
cd00: 36 34 29 3b 0a 20 20 50 61 72 73 65 20 2a 70 50  64);.  Parse *pP
cd10: 61 72 73 65 3b 20 20 20 20 20 20 20 20 20 20 20  arse;           
cd20: 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20       /* Current 
cd30: 70 61 72 73 65 20 2a 2f 0a 23 69 66 64 65 66 20  parse */.#ifdef 
cd40: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52  SQLITE_ENABLE_PR
cd50: 45 55 50 44 41 54 45 5f 48 4f 4f 4b 0a 20 20 76  EUPDATE_HOOK.  v
cd60: 6f 69 64 20 2a 70 50 72 65 55 70 64 61 74 65 41  oid *pPreUpdateA
cd70: 72 67 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  rg;          /* 
cd80: 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74  First argument t
cd90: 6f 20 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c  o xPreUpdateCall
cda0: 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 28  back */.  void (
cdb0: 2a 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62  *xPreUpdateCallb
cdc0: 61 63 6b 29 28 20 20 20 2f 2a 20 52 65 67 69 73  ack)(   /* Regis
cdd0: 74 65 72 65 64 20 75 73 69 6e 67 20 73 71 6c 69  tered using sqli
cde0: 74 65 33 5f 70 72 65 75 70 64 61 74 65 5f 68 6f  te3_preupdate_ho
cdf0: 6f 6b 28 29 20 2a 2f 0a 20 20 20 20 76 6f 69 64  ok() */.    void
ce00: 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63  *,sqlite3*,int,c
ce10: 68 61 72 20 63 6f 6e 73 74 2a 2c 63 68 61 72 20  har const*,char 
ce20: 63 6f 6e 73 74 2a 2c 73 71 6c 69 74 65 33 5f 69  const*,sqlite3_i
ce30: 6e 74 36 34 2c 73 71 6c 69 74 65 33 5f 69 6e 74  nt64,sqlite3_int
ce40: 36 34 0a 20 20 29 3b 0a 20 20 50 72 65 55 70 64  64.  );.  PreUpd
ce50: 61 74 65 20 2a 70 50 72 65 55 70 64 61 74 65 3b  ate *pPreUpdate;
ce60: 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65          /* Conte
ce70: 78 74 20 66 6f 72 20 61 63 74 69 76 65 20 70 72  xt for active pr
ce80: 65 2d 75 70 64 61 74 65 20 63 61 6c 6c 62 61 63  e-update callbac
ce90: 6b 20 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k */.#endif /* S
cea0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45  QLITE_ENABLE_PRE
ceb0: 55 50 44 41 54 45 5f 48 4f 4f 4b 20 2a 2f 0a 23  UPDATE_HOOK */.#
cec0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
ced0: 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20 28 2a 78  IT_WAL.  int (*x
cee0: 57 61 6c 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69  WalCallback)(voi
cef0: 64 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a 2c 20  d *, sqlite3 *, 
cf00: 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e  const char *, in
cf10: 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70 57 61 6c  t);.  void *pWal
cf20: 41 72 67 3b 0a 23 65 6e 64 69 66 0a 20 20 76 6f  Arg;.#endif.  vo
cf30: 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 29  id(*xCollNeeded)
cf40: 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c  (void*,sqlite3*,
cf50: 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f 6e  int eTextRep,con
cf60: 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69  st char*);.  voi
cf70: 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 31 36  d(*xCollNeeded16
cf80: 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a  )(void*,sqlite3*
cf90: 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f  ,int eTextRep,co
cfa0: 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f  nst void*);.  vo
cfb0: 69 64 20 2a 70 43 6f 6c 6c 4e 65 65 64 65 64 41  id *pCollNeededA
cfc0: 72 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61  rg;.  sqlite3_va
cfd0: 6c 75 65 20 2a 70 45 72 72 3b 20 20 20 20 20 20  lue *pErr;      
cfe0: 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65      /* Most rece
cff0: 6e 74 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  nt error message
d000: 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20   */.  union {.  
d010: 20 20 76 6f 6c 61 74 69 6c 65 20 69 6e 74 20 69    volatile int i
d020: 73 49 6e 74 65 72 72 75 70 74 65 64 3b 20 2f 2a  sInterrupted; /*
d030: 20 54 72 75 65 20 69 66 20 73 71 6c 69 74 65 33   True if sqlite3
d040: 5f 69 6e 74 65 72 72 75 70 74 20 68 61 73 20 62  _interrupt has b
d050: 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20  een called */.  
d060: 20 20 64 6f 75 62 6c 65 20 6e 6f 74 55 73 65 64    double notUsed
d070: 31 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  1;            /*
d080: 20 53 70 61 63 65 72 20 2a 2f 0a 20 20 7d 20 75   Spacer */.  } u
d090: 31 3b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 20 6c  1;.  Lookaside l
d0a0: 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20  ookaside;       
d0b0: 20 20 20 2f 2a 20 4c 6f 6f 6b 61 73 69 64 65 20     /* Lookaside 
d0c0: 6d 61 6c 6c 6f 63 20 63 6f 6e 66 69 67 75 72 61  malloc configura
d0d0: 74 69 6f 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20  tion */.#ifndef 
d0e0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48  SQLITE_OMIT_AUTH
d0f0: 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 73 71 6c 69  ORIZATION.  sqli
d100: 74 65 33 5f 78 61 75 74 68 20 78 41 75 74 68 3b  te3_xauth xAuth;
d110: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 63 63            /* Acc
d120: 65 73 73 20 61 75 74 68 6f 72 69 7a 61 74 69 6f  ess authorizatio
d130: 6e 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  n function */.  
d140: 76 6f 69 64 20 2a 70 41 75 74 68 41 72 67 3b 20  void *pAuthArg; 
d150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
d160: 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f   1st argument to
d170: 20 74 68 65 20 61 63 63 65 73 73 20 61 75 74 68   the access auth
d180: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 65 6e   function */.#en
d190: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
d1a0: 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53  TE_OMIT_PROGRESS
d1b0: 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e 74 20  _CALLBACK.  int 
d1c0: 28 2a 78 50 72 6f 67 72 65 73 73 29 28 76 6f 69  (*xProgress)(voi
d1d0: 64 20 2a 29 3b 20 20 20 20 20 2f 2a 20 54 68 65  d *);     /* The
d1e0: 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61   progress callba
d1f0: 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50  ck */.  void *pP
d200: 72 6f 67 72 65 73 73 41 72 67 3b 20 20 20 20 20  rogressArg;     
d210: 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e        /* Argumen
d220: 74 20 74 6f 20 74 68 65 20 70 72 6f 67 72 65 73  t to the progres
d230: 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  s callback */.  
d240: 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67 72 65  unsigned nProgre
d250: 73 73 4f 70 73 3b 20 20 20 20 20 20 20 20 2f 2a  ssOps;        /*
d260: 20 4e 75 6d 62 65 72 20 6f 66 20 6f 70 63 6f 64   Number of opcod
d270: 65 73 20 66 6f 72 20 70 72 6f 67 72 65 73 73 20  es for progress 
d280: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e 64  callback */.#end
d290: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
d2a0: 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
d2b0: 42 4c 45 0a 20 20 69 6e 74 20 6e 56 54 72 61 6e  BLE.  int nVTran
d2c0: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
d2d0: 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65 64      /* Allocated
d2e0: 20 73 69 7a 65 20 6f 66 20 61 56 54 72 61 6e 73   size of aVTrans
d2f0: 20 2a 2f 0a 20 20 48 61 73 68 20 61 4d 6f 64 75   */.  Hash aModu
d300: 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  le;             
d310: 20 20 20 20 2f 2a 20 70 6f 70 75 6c 61 74 65 64      /* populated
d320: 20 62 79 20 73 71 6c 69 74 65 33 5f 63 72 65 61   by sqlite3_crea
d330: 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20  te_module() */. 
d340: 20 56 74 61 62 43 74 78 20 2a 70 56 74 61 62 43   VtabCtx *pVtabC
d350: 74 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  tx;            /
d360: 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72 20 61 63  * Context for ac
d370: 74 69 76 65 20 76 74 61 62 20 63 6f 6e 6e 65 63  tive vtab connec
d380: 74 2f 63 72 65 61 74 65 20 2a 2f 0a 20 20 56 54  t/create */.  VT
d390: 61 62 6c 65 20 2a 2a 61 56 54 72 61 6e 73 3b 20  able **aVTrans; 
d3a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
d3b0: 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 77 69  irtual tables wi
d3c0: 74 68 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74  th open transact
d3d0: 69 6f 6e 73 20 2a 2f 0a 20 20 56 54 61 62 6c 65  ions */.  VTable
d3e0: 20 2a 70 44 69 73 63 6f 6e 6e 65 63 74 3b 20 20   *pDisconnect;  
d3f0: 20 20 20 20 20 20 20 20 2f 2a 20 44 69 73 63 6f          /* Disco
d400: 6e 6e 65 63 74 20 74 68 65 73 65 20 69 6e 20 6e  nnect these in n
d410: 65 78 74 20 73 71 6c 69 74 65 33 5f 70 72 65 70  ext sqlite3_prep
d420: 61 72 65 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a  are() */.#endif.
d430: 20 20 48 61 73 68 20 61 46 75 6e 63 3b 20 20 20    Hash aFunc;   
d440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d450: 2f 2a 20 48 61 73 68 20 74 61 62 6c 65 20 6f 66  /* Hash table of
d460: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 75 6e 63   connection func
d470: 74 69 6f 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20  tions */.  Hash 
d480: 61 43 6f 6c 6c 53 65 71 3b 20 20 20 20 20 20 20  aCollSeq;       
d490: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20           /* All 
d4a0: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
d4b0: 63 65 73 20 2a 2f 0a 20 20 42 75 73 79 48 61 6e  ces */.  BusyHan
d4c0: 64 6c 65 72 20 62 75 73 79 48 61 6e 64 6c 65 72  dler busyHandler
d4d0: 3b 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20 63  ;      /* Busy c
d4e0: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 44 62 20  allback */.  Db 
d4f0: 61 44 62 53 74 61 74 69 63 5b 32 5d 3b 20 20 20  aDbStatic[2];   
d500: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74             /* St
d510: 61 74 69 63 20 73 70 61 63 65 20 66 6f 72 20 74  atic space for t
d520: 68 65 20 32 20 64 65 66 61 75 6c 74 20 62 61 63  he 2 default bac
d530: 6b 65 6e 64 73 20 2a 2f 0a 20 20 53 61 76 65 70  kends */.  Savep
d540: 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e 74  oint *pSavepoint
d550: 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74  ;        /* List
d560: 20 6f 66 20 61 63 74 69 76 65 20 73 61 76 65 70   of active savep
d570: 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 62  oints */.  int b
d580: 75 73 79 54 69 6d 65 6f 75 74 3b 20 20 20 20 20  usyTimeout;     
d590: 20 20 20 20 20 20 20 20 20 2f 2a 20 42 75 73 79           /* Busy
d5a0: 20 68 61 6e 64 6c 65 72 20 74 69 6d 65 6f 75 74   handler timeout
d5b0: 2c 20 69 6e 20 6d 73 65 63 20 2a 2f 0a 20 20 69  , in msec */.  i
d5c0: 6e 74 20 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20  nt nSavepoint;  
d5d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
d5e0: 4e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72  Number of non-tr
d5f0: 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f  ansaction savepo
d600: 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  ints */.  int nS
d610: 74 61 74 65 6d 65 6e 74 3b 20 20 20 20 20 20 20  tatement;       
d620: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
d630: 72 20 6f 66 20 6e 65 73 74 65 64 20 73 74 61 74  r of nested stat
d640: 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f  ement-transactio
d650: 6e 73 20 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65  ns  */.  i64 nDe
d660: 66 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20 20  ferredCons;     
d670: 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64 65         /* Net de
d680: 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e  ferred constrain
d690: 74 73 20 74 68 69 73 20 74 72 61 6e 73 61 63 74  ts this transact
d6a0: 69 6f 6e 2e 20 2a 2f 0a 20 20 69 36 34 20 6e 44  ion. */.  i64 nD
d6b0: 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20  eferredImmCons; 
d6c0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64          /* Net d
d6d0: 65 66 65 72 72 65 64 20 69 6d 6d 65 64 69 61 74  eferred immediat
d6e0: 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f  e constraints */
d6f0: 0a 20 20 69 6e 74 20 2a 70 6e 42 79 74 65 73 46  .  int *pnBytesF
d700: 72 65 65 64 3b 20 20 20 20 20 20 20 20 20 20 20  reed;           
d710: 20 2f 2a 20 49 66 20 6e 6f 74 20 4e 55 4c 4c 2c   /* If not NULL,
d720: 20 69 6e 63 72 65 6d 65 6e 74 20 74 68 69 73 20   increment this 
d730: 69 6e 20 44 62 46 72 65 65 28 29 20 2a 2f 0a 23  in DbFree() */.#
d740: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
d750: 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46  BLE_UNLOCK_NOTIF
d760: 59 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f  Y.  /* The follo
d770: 77 69 6e 67 20 76 61 72 69 61 62 6c 65 73 20 61  wing variables a
d780: 72 65 20 61 6c 6c 20 70 72 6f 74 65 63 74 65 64  re all protected
d790: 20 62 79 20 74 68 65 20 53 54 41 54 49 43 5f 4d   by the STATIC_M
d7a0: 41 53 54 45 52 0a 20 20 2a 2a 20 6d 75 74 65 78  ASTER.  ** mutex
d7b0: 2c 20 6e 6f 74 20 62 79 20 73 71 6c 69 74 65 33  , not by sqlite3
d7c0: 2e 6d 75 74 65 78 2e 20 54 68 65 79 20 61 72 65  .mutex. They are
d7d0: 20 75 73 65 64 20 62 79 20 63 6f 64 65 20 69 6e   used by code in
d7e0: 20 6e 6f 74 69 66 79 2e 63 2e 0a 20 20 2a 2a 0a   notify.c..  **.
d7f0: 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70 55 6e 6c    ** When X.pUnl
d800: 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59  ockConnection==Y
d810: 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61  , that means tha
d820: 74 20 58 20 69 73 20 77 61 69 74 69 6e 67 20 66  t X is waiting f
d830: 6f 72 20 59 20 74 6f 0a 20 20 2a 2a 20 75 6e 6c  or Y to.  ** unl
d840: 6f 63 6b 20 73 6f 20 74 68 61 74 20 69 74 20 63  ock so that it c
d850: 61 6e 20 70 72 6f 63 65 65 64 2e 0a 20 20 2a 2a  an proceed..  **
d860: 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70 42 6c  .  ** When X.pBl
d870: 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e  ockingConnection
d880: 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20  ==Y, that means 
d890: 74 68 61 74 20 73 6f 6d 65 74 68 69 6e 67 20 74  that something t
d8a0: 68 61 74 20 58 20 74 72 69 65 64 0a 20 20 2a 2a  hat X tried.  **
d8b0: 20 74 72 69 65 64 20 74 6f 20 64 6f 20 72 65 63   tried to do rec
d8c0: 65 6e 74 6c 79 20 66 61 69 6c 65 64 20 77 69 74  ently failed wit
d8d0: 68 20 61 6e 20 53 51 4c 49 54 45 5f 4c 4f 43 4b  h an SQLITE_LOCK
d8e0: 45 44 20 65 72 72 6f 72 20 64 75 65 20 74 6f 20  ED error due to 
d8f0: 6c 6f 63 6b 73 0a 20 20 2a 2a 20 68 65 6c 64 20  locks.  ** held 
d900: 62 79 20 59 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c  by Y..  */.  sql
d910: 69 74 65 33 20 2a 70 42 6c 6f 63 6b 69 6e 67 43  ite3 *pBlockingC
d920: 6f 6e 6e 65 63 74 69 6f 6e 3b 20 2f 2a 20 43 6f  onnection; /* Co
d930: 6e 6e 65 63 74 69 6f 6e 20 74 68 61 74 20 63 61  nnection that ca
d940: 75 73 65 64 20 53 51 4c 49 54 45 5f 4c 4f 43 4b  used SQLITE_LOCK
d950: 45 44 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20  ED */.  sqlite3 
d960: 2a 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69  *pUnlockConnecti
d970: 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  on;           /*
d980: 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 77   Connection to w
d990: 61 74 63 68 20 66 6f 72 20 75 6e 6c 6f 63 6b 20  atch for unlock 
d9a0: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 6e 6c 6f  */.  void *pUnlo
d9b0: 63 6b 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  ckArg;          
d9c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
d9d0: 67 75 6d 65 6e 74 20 74 6f 20 78 55 6e 6c 6f 63  gument to xUnloc
d9e0: 6b 4e 6f 74 69 66 79 20 2a 2f 0a 20 20 76 6f 69  kNotify */.  voi
d9f0: 64 20 28 2a 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66  d (*xUnlockNotif
da00: 79 29 28 76 6f 69 64 20 2a 2a 2c 20 69 6e 74 29  y)(void **, int)
da10: 3b 20 20 2f 2a 20 55 6e 6c 6f 63 6b 20 6e 6f 74  ;  /* Unlock not
da20: 69 66 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  ify callback */.
da30: 20 20 73 71 6c 69 74 65 33 20 2a 70 4e 65 78 74    sqlite3 *pNext
da40: 42 6c 6f 63 6b 65 64 3b 20 20 20 20 20 20 20 20  Blocked;        
da50: 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69 73 74 20  /* Next in list 
da60: 6f 66 20 61 6c 6c 20 62 6c 6f 63 6b 65 64 20 63  of all blocked c
da70: 6f 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f 0a 23 65  onnections */.#e
da80: 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49  ndif.#ifdef SQLI
da90: 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49  TE_USER_AUTHENTI
daa0: 43 41 54 49 4f 4e 0a 20 20 73 71 6c 69 74 65 33  CATION.  sqlite3
dab0: 5f 75 73 65 72 61 75 74 68 20 61 75 74 68 3b 20  _userauth auth; 
dac0: 20 20 20 20 20 20 20 2f 2a 20 55 73 65 72 20 61         /* User a
dad0: 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 69 6e  uthentication in
dae0: 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 23 65 6e  formation */.#en
daf0: 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20  dif.};../*.** A 
db00: 6d 61 63 72 6f 20 74 6f 20 64 69 73 63 6f 76 65  macro to discove
db10: 72 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f  r the encoding o
db20: 66 20 61 20 64 61 74 61 62 61 73 65 2e 0a 2a 2f  f a database..*/
db30: 0a 23 64 65 66 69 6e 65 20 53 43 48 45 4d 41 5f  .#define SCHEMA_
db40: 45 4e 43 28 64 62 29 20 28 28 64 62 29 2d 3e 61  ENC(db) ((db)->a
db50: 44 62 5b 30 5d 2e 70 53 63 68 65 6d 61 2d 3e 65  Db[0].pSchema->e
db60: 6e 63 29 0a 23 64 65 66 69 6e 65 20 45 4e 43 28  nc).#define ENC(
db70: 64 62 29 20 20 20 20 20 20 20 20 28 28 64 62 29  db)        ((db)
db80: 2d 3e 65 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f  ->enc)../*.** Po
db90: 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f  ssible values fo
dba0: 72 20 74 68 65 20 73 71 6c 69 74 65 33 2e 66 6c  r the sqlite3.fl
dbb0: 61 67 73 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65  ags..**.** Value
dbc0: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 65 6e   constraints (en
dbd0: 66 6f 72 63 65 64 20 76 69 61 20 61 73 73 65 72  forced via asser
dbe0: 74 28 29 29 3a 0a 2a 2a 20 20 20 20 20 20 53 51  t()):.**      SQ
dbf0: 4c 49 54 45 5f 46 75 6c 6c 46 53 79 6e 63 20 20  LITE_FullFSync  
dc00: 20 20 20 3d 3d 20 50 41 47 45 52 5f 46 55 4c 4c     == PAGER_FULL
dc10: 46 53 59 4e 43 0a 2a 2a 20 20 20 20 20 20 53 51  FSYNC.**      SQ
dc20: 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53 79  LITE_CkptFullFSy
dc30: 6e 63 20 3d 3d 20 50 41 47 45 52 5f 43 4b 50 54  nc == PAGER_CKPT
dc40: 5f 46 55 4c 4c 46 53 59 4e 43 0a 2a 2a 20 20 20  _FULLFSYNC.**   
dc50: 20 20 20 53 51 4c 49 54 45 5f 43 61 63 68 65 53     SQLITE_CacheS
dc60: 70 69 6c 6c 20 20 20 20 3d 3d 20 50 41 47 45 52  pill    == PAGER
dc70: 5f 43 41 43 48 45 5f 53 50 49 4c 4c 0a 2a 2f 0a  _CACHE_SPILL.*/.
dc80: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57  #define SQLITE_W
dc90: 72 69 74 65 53 63 68 65 6d 61 20 20 20 20 30 78  riteSchema    0x
dca0: 30 30 30 30 30 30 30 31 20 20 2f 2a 20 4f 4b 20  00000001  /* OK 
dcb0: 74 6f 20 75 70 64 61 74 65 20 53 51 4c 49 54 45  to update SQLITE
dcc0: 5f 4d 41 53 54 45 52 20 2a 2f 0a 23 64 65 66 69  _MASTER */.#defi
dcd0: 6e 65 20 53 51 4c 49 54 45 5f 4c 65 67 61 63 79  ne SQLITE_Legacy
dce0: 46 69 6c 65 46 6d 74 20 20 30 78 30 30 30 30 30  FileFmt  0x00000
dcf0: 30 30 32 20 20 2f 2a 20 43 72 65 61 74 65 20 6e  002  /* Create n
dd00: 65 77 20 64 61 74 61 62 61 73 65 73 20 69 6e 20  ew databases in 
dd10: 66 6f 72 6d 61 74 20 31 20 2a 2f 0a 23 64 65 66  format 1 */.#def
dd20: 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c 43  ine SQLITE_FullC
dd30: 6f 6c 4e 61 6d 65 73 20 20 20 30 78 30 30 30 30  olNames   0x0000
dd40: 30 30 30 34 20 20 2f 2a 20 53 68 6f 77 20 66 75  0004  /* Show fu
dd50: 6c 6c 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  ll column names 
dd60: 6f 6e 20 53 45 4c 45 43 54 20 2a 2f 0a 23 64 65  on SELECT */.#de
dd70: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c  fine SQLITE_Full
dd80: 46 53 79 6e 63 20 20 20 20 20 20 30 78 30 30 30  FSync      0x000
dd90: 30 30 30 30 38 20 20 2f 2a 20 55 73 65 20 66 75  00008  /* Use fu
dda0: 6c 6c 20 66 73 79 6e 63 20 6f 6e 20 74 68 65 20  ll fsync on the 
ddb0: 62 61 63 6b 65 6e 64 20 2a 2f 0a 23 64 65 66 69  backend */.#defi
ddc0: 6e 65 20 53 51 4c 49 54 45 5f 43 6b 70 74 46 75  ne SQLITE_CkptFu
ddd0: 6c 6c 46 53 79 6e 63 20 20 30 78 30 30 30 30 30  llFSync  0x00000
dde0: 30 31 30 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c  010  /* Use full
ddf0: 20 66 73 79 6e 63 20 66 6f 72 20 63 68 65 63 6b   fsync for check
de00: 70 6f 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  point */.#define
de10: 20 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70 69   SQLITE_CacheSpi
de20: 6c 6c 20 20 20 20 20 30 78 30 30 30 30 30 30 32  ll     0x0000002
de30: 30 20 20 2f 2a 20 4f 4b 20 74 6f 20 73 70 69 6c  0  /* OK to spil
de40: 6c 20 70 61 67 65 72 20 63 61 63 68 65 20 2a 2f  l pager cache */
de50: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
de60: 53 68 6f 72 74 43 6f 6c 4e 61 6d 65 73 20 20 30  ShortColNames  0
de70: 78 30 30 30 30 30 30 34 30 20 20 2f 2a 20 53 68  x00000040  /* Sh
de80: 6f 77 20 73 68 6f 72 74 20 63 6f 6c 75 6d 6e 73  ow short columns
de90: 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e   names */.#defin
dea0: 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f  e SQLITE_CountRo
deb0: 77 73 20 20 20 20 20 20 30 78 30 30 30 30 30 30  ws      0x000000
dec0: 38 30 20 20 2f 2a 20 43 6f 75 6e 74 20 72 6f 77  80  /* Count row
ded0: 73 20 63 68 61 6e 67 65 64 20 62 79 20 49 4e 53  s changed by INS
dee0: 45 52 54 2c 20 2a 2f 0a 20 20 20 20 20 20 20 20  ERT, */.        
def0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df10: 20 20 2f 2a 20 20 20 44 45 4c 45 54 45 2c 20 6f    /*   DELETE, o
df20: 72 20 55 50 44 41 54 45 20 61 6e 64 20 72 65 74  r UPDATE and ret
df30: 75 72 6e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  urn */.         
df40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df60: 20 2f 2a 20 20 20 74 68 65 20 63 6f 75 6e 74 20   /*   the count 
df70: 75 73 69 6e 67 20 61 20 63 61 6c 6c 62 61 63 6b  using a callback
df80: 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  . */.#define SQL
df90: 49 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62 61 63 6b  ITE_NullCallback
dfa0: 20 20 20 30 78 30 30 30 30 30 31 30 30 20 20 2f     0x00000100  /
dfb0: 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 63 61 6c  * Invoke the cal
dfc0: 6c 62 61 63 6b 20 6f 6e 63 65 20 69 66 20 74 68  lback once if th
dfd0: 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  e */.           
dfe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
e000: 2a 20 20 20 72 65 73 75 6c 74 20 73 65 74 20 69  *   result set i
e010: 73 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69  s empty */.#defi
e020: 6e 65 20 53 51 4c 49 54 45 5f 49 67 6e 6f 72 65  ne SQLITE_Ignore
e030: 43 68 65 63 6b 73 20 20 20 30 78 30 30 30 30 30  Checks   0x00000
e040: 32 30 30 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 65  200  /* Do not e
e050: 6e 66 6f 72 63 65 20 63 68 65 63 6b 20 63 6f 6e  nforce check con
e060: 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66  straints */.#def
e070: 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 61 64 55  ine SQLITE_ReadU
e080: 6e 63 6f 6d 6d 69 74 20 20 20 30 78 30 30 30 30  ncommit   0x0000
e090: 30 34 30 30 20 20 2f 2a 20 52 45 41 44 20 55 4e  0400  /* READ UN
e0a0: 43 4f 4d 4d 49 54 54 45 44 20 69 6e 20 73 68 61  COMMITTED in sha
e0b0: 72 65 64 2d 63 61 63 68 65 20 2a 2f 0a 23 64 65  red-cache */.#de
e0c0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 6f 43 6b  fine SQLITE_NoCk
e0d0: 70 74 4f 6e 43 6c 6f 73 65 20 20 30 78 30 30 30  ptOnClose  0x000
e0e0: 30 30 38 30 30 20 20 2f 2a 20 4e 6f 20 63 68 65  00800  /* No che
e0f0: 63 6b 70 6f 69 6e 74 20 6f 6e 20 63 6c 6f 73 65  ckpoint on close
e100: 28 29 2f 44 45 54 41 43 48 20 2a 2f 0a 23 64 65  ()/DETACH */.#de
e110: 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 76 65  fine SQLITE_Reve
e120: 72 73 65 4f 72 64 65 72 20 20 20 30 78 30 30 30  rseOrder   0x000
e130: 30 31 30 30 30 20 20 2f 2a 20 52 65 76 65 72 73  01000  /* Revers
e140: 65 20 75 6e 6f 72 64 65 72 65 64 20 53 45 4c 45  e unordered SELE
e150: 43 54 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  CTs */.#define S
e160: 51 4c 49 54 45 5f 52 65 63 54 72 69 67 67 65 72  QLITE_RecTrigger
e170: 73 20 20 20 20 30 78 30 30 30 30 32 30 30 30 20  s    0x00002000 
e180: 20 2f 2a 20 45 6e 61 62 6c 65 20 72 65 63 75 72   /* Enable recur
e190: 73 69 76 65 20 74 72 69 67 67 65 72 73 20 2a 2f  sive triggers */
e1a0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e1b0: 46 6f 72 65 69 67 6e 4b 65 79 73 20 20 20 20 30  ForeignKeys    0
e1c0: 78 30 30 30 30 34 30 30 30 20 20 2f 2a 20 45 6e  x00004000  /* En
e1d0: 66 6f 72 63 65 20 66 6f 72 65 69 67 6e 20 6b 65  force foreign ke
e1e0: 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 20 2a  y constraints  *
e1f0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e200: 5f 41 75 74 6f 49 6e 64 65 78 20 20 20 20 20 20  _AutoIndex      
e210: 30 78 30 30 30 30 38 30 30 30 20 20 2f 2a 20 45  0x00008000  /* E
e220: 6e 61 62 6c 65 20 61 75 74 6f 6d 61 74 69 63 20  nable automatic 
e230: 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69  indexes */.#defi
e240: 6e 65 20 53 51 4c 49 54 45 5f 4c 6f 61 64 45 78  ne SQLITE_LoadEx
e250: 74 65 6e 73 69 6f 6e 20 20 30 78 30 30 30 31 30  tension  0x00010
e260: 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 6c  000  /* Enable l
e270: 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 20 2a 2f  oad_extension */
e280: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e290: 4c 6f 61 64 45 78 74 46 75 6e 63 20 20 20 20 30  LoadExtFunc    0
e2a0: 78 30 30 30 32 30 30 30 30 20 20 2f 2a 20 45 6e  x00020000  /* En
e2b0: 61 62 6c 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73  able load_extens
e2c0: 69 6f 6e 28 29 20 53 51 4c 20 66 75 6e 63 20 2a  ion() SQL func *
e2d0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e2e0: 5f 45 6e 61 62 6c 65 54 72 69 67 67 65 72 20 20  _EnableTrigger  
e2f0: 30 78 30 30 30 34 30 30 30 30 20 20 2f 2a 20 54  0x00040000  /* T
e300: 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 74 72  rue to enable tr
e310: 69 67 67 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e  iggers */.#defin
e320: 65 20 53 51 4c 49 54 45 5f 44 65 66 65 72 46 4b  e SQLITE_DeferFK
e330: 73 20 20 20 20 20 20 20 30 78 30 30 30 38 30 30  s       0x000800
e340: 30 30 20 20 2f 2a 20 44 65 66 65 72 20 61 6c 6c  00  /* Defer all
e350: 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20   FK constraints 
e360: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e370: 45 5f 51 75 65 72 79 4f 6e 6c 79 20 20 20 20 20  E_QueryOnly     
e380: 20 30 78 30 30 31 30 30 30 30 30 20 20 2f 2a 20   0x00100000  /* 
e390: 44 69 73 61 62 6c 65 20 64 61 74 61 62 61 73 65  Disable database
e3a0: 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66   changes */.#def
e3b0: 69 6e 65 20 53 51 4c 49 54 45 5f 43 65 6c 6c 53  ine SQLITE_CellS
e3c0: 69 7a 65 43 6b 20 20 20 20 20 30 78 30 30 32 30  izeCk     0x0020
e3d0: 30 30 30 30 20 20 2f 2a 20 43 68 65 63 6b 20 62  0000  /* Check b
e3e0: 74 72 65 65 20 63 65 6c 6c 20 73 69 7a 65 73 20  tree cell sizes 
e3f0: 6f 6e 20 6c 6f 61 64 20 2a 2f 0a 23 64 65 66 69  on load */.#defi
e400: 6e 65 20 53 51 4c 49 54 45 5f 46 74 73 33 54 6f  ne SQLITE_Fts3To
e410: 6b 65 6e 69 7a 65 72 20 20 30 78 30 30 34 30 30  kenizer  0x00400
e420: 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 66  000  /* Enable f
e430: 74 73 33 5f 74 6f 6b 65 6e 69 7a 65 72 28 32 29  ts3_tokenizer(2)
e440: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e450: 54 45 5f 45 6e 61 62 6c 65 51 50 53 47 20 20 20  TE_EnableQPSG   
e460: 20 20 30 78 30 30 38 30 30 30 30 30 20 20 2f 2a    0x00800000  /*
e470: 20 51 75 65 72 79 20 50 6c 61 6e 6e 65 72 20 53   Query Planner S
e480: 74 61 62 69 6c 69 74 79 20 47 75 61 72 61 6e 74  tability Guarant
e490: 65 65 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ee*/.#define SQL
e4a0: 49 54 45 5f 54 72 69 67 67 65 72 45 51 50 20 20  ITE_TriggerEQP  
e4b0: 20 20 20 30 78 30 31 30 30 30 30 30 30 20 20 2f     0x01000000  /
e4c0: 2a 20 53 68 6f 77 20 74 72 69 67 67 65 72 20 45  * Show trigger E
e4d0: 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41  XPLAIN QUERY PLA
e4e0: 4e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  N */.#define SQL
e4f0: 49 54 45 5f 52 65 73 65 74 44 61 74 61 62 61 73  ITE_ResetDatabas
e500: 65 20 20 30 78 30 32 30 30 30 30 30 30 20 20 2f  e  0x02000000  /
e510: 2a 20 52 65 73 65 74 20 74 68 65 20 64 61 74 61  * Reset the data
e520: 62 61 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  base */.#define 
e530: 53 51 4c 49 54 45 5f 4c 65 67 61 63 79 41 6c 74  SQLITE_LegacyAlt
e540: 65 72 20 20 20 20 30 78 30 34 30 30 30 30 30 30  er    0x04000000
e550: 20 20 2f 2a 20 4c 65 67 61 63 79 20 41 4c 54 45    /* Legacy ALTE
e560: 52 20 54 41 42 4c 45 20 62 65 68 61 76 69 6f 75  R TABLE behaviou
e570: 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  r */.#define SQL
e580: 49 54 45 5f 4e 6f 53 63 68 65 6d 61 45 72 72 6f  ITE_NoSchemaErro
e590: 72 20 20 30 78 30 38 30 30 30 30 30 30 20 20 2f  r  0x08000000  /
e5a0: 2a 20 44 6f 20 6e 6f 74 20 72 65 70 6f 72 74 20  * Do not report 
e5b0: 73 63 68 65 6d 61 20 70 61 72 73 65 20 65 72 72  schema parse err
e5c0: 6f 72 73 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ors*/.#define SQ
e5d0: 4c 49 54 45 5f 44 65 66 65 6e 73 69 76 65 20 20  LITE_Defensive  
e5e0: 20 20 20 20 30 78 31 30 30 30 30 30 30 30 20 20      0x10000000  
e5f0: 2f 2a 20 49 6e 70 75 74 20 53 51 4c 20 69 73 20  /* Input SQL is 
e600: 6c 69 6b 65 6c 79 20 68 6f 73 74 69 6c 65 20 2a  likely hostile *
e610: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e620: 5f 44 71 73 44 44 4c 20 20 20 20 20 20 20 20 20  _DqsDDL         
e630: 30 78 32 30 30 30 30 30 30 30 20 20 2f 2a 20 64  0x20000000  /* d
e640: 62 6c 2d 71 75 6f 74 65 64 20 73 74 72 69 6e 67  bl-quoted string
e650: 73 20 61 6c 6c 6f 77 65 64 20 69 6e 20 44 44 4c  s allowed in DDL
e660: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e670: 45 5f 44 71 73 44 4d 4c 20 20 20 20 20 20 20 20  E_DqsDML        
e680: 20 30 78 34 30 30 30 30 30 30 30 20 20 2f 2a 20   0x40000000  /* 
e690: 64 62 6c 2d 71 75 6f 74 65 64 20 73 74 72 69 6e  dbl-quoted strin
e6a0: 67 73 20 61 6c 6c 6f 77 65 64 20 69 6e 20 44 4d  gs allowed in DM
e6b0: 4c 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  L*/.#define SQLI
e6c0: 54 45 5f 45 6e 61 62 6c 65 56 69 65 77 20 20 20  TE_EnableView   
e6d0: 20 20 30 78 38 30 30 30 30 30 30 30 20 20 2f 2a    0x80000000  /*
e6e0: 20 45 6e 61 62 6c 65 20 74 68 65 20 75 73 65 20   Enable the use 
e6f0: 6f 66 20 76 69 65 77 73 20 2a 2f 0a 0a 2f 2a 20  of views */../* 
e700: 46 6c 61 67 73 20 75 73 65 64 20 6f 6e 6c 79 20  Flags used only 
e710: 69 66 20 64 65 62 75 67 67 69 6e 67 20 2a 2f 0a  if debugging */.
e720: 23 64 65 66 69 6e 65 20 48 49 28 58 29 20 20 28  #define HI(X)  (
e730: 28 75 36 34 29 28 58 29 3c 3c 33 32 29 0a 23 69  (u64)(X)<<32).#i
e740: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
e750: 47 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  G.#define SQLITE
e760: 5f 53 71 6c 54 72 61 63 65 20 20 20 20 20 20 20  _SqlTrace       
e770: 48 49 28 30 78 30 31 30 30 30 30 30 29 20 2f 2a  HI(0x0100000) /*
e780: 20 44 65 62 75 67 20 70 72 69 6e 74 20 53 51 4c   Debug print SQL
e790: 20 61 73 20 69 74 20 65 78 65 63 75 74 65 73 20   as it executes 
e7a0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e7b0: 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 20 20 20  E_VdbeListing   
e7c0: 20 48 49 28 30 78 30 32 30 30 30 30 30 29 20 2f   HI(0x0200000) /
e7d0: 2a 20 44 65 62 75 67 20 6c 69 73 74 69 6e 67 73  * Debug listings
e7e0: 20 6f 66 20 56 44 42 45 20 70 72 6f 67 73 20 2a   of VDBE progs *
e7f0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e800: 5f 56 64 62 65 54 72 61 63 65 20 20 20 20 20 20  _VdbeTrace      
e810: 48 49 28 30 78 30 34 30 30 30 30 30 29 20 2f 2a  HI(0x0400000) /*
e820: 20 54 72 75 65 20 74 6f 20 74 72 61 63 65 20 56   True to trace V
e830: 44 42 45 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f  DBE execution */
e840: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e850: 56 64 62 65 41 64 64 6f 70 54 72 61 63 65 20 48  VdbeAddopTrace H
e860: 49 28 30 78 30 38 30 30 30 30 30 29 20 2f 2a 20  I(0x0800000) /* 
e870: 54 72 61 63 65 20 73 71 6c 69 74 65 33 56 64 62  Trace sqlite3Vdb
e880: 65 41 64 64 4f 70 28 29 20 63 61 6c 6c 73 20 2a  eAddOp() calls *
e890: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e8a0: 5f 56 64 62 65 45 51 50 20 20 20 20 20 20 20 20  _VdbeEQP        
e8b0: 48 49 28 30 78 31 30 30 30 30 30 30 29 20 2f 2a  HI(0x1000000) /*
e8c0: 20 44 65 62 75 67 20 45 58 50 4c 41 49 4e 20 51   Debug EXPLAIN Q
e8d0: 55 45 52 59 20 50 4c 41 4e 20 2a 2f 0a 23 64 65  UERY PLAN */.#de
e8e0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 61 72 73  fine SQLITE_Pars
e8f0: 65 72 54 72 61 63 65 20 20 20 20 48 49 28 30 78  erTrace    HI(0x
e900: 32 30 30 30 30 30 30 29 20 2f 2a 20 50 52 41 47  2000000) /* PRAG
e910: 4d 41 20 70 61 72 73 65 72 5f 74 72 61 63 65 3d  MA parser_trace=
e920: 4f 4e 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ON */.#endif../*
e930: 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
e940: 65 73 20 66 6f 72 20 73 71 6c 69 74 65 33 2e 6d  es for sqlite3.m
e950: 44 62 46 6c 61 67 73 0a 2a 2f 0a 23 64 65 66 69  DbFlags.*/.#defi
e960: 6e 65 20 44 42 46 4c 41 47 5f 53 63 68 65 6d 61  ne DBFLAG_Schema
e970: 43 68 61 6e 67 65 20 20 20 30 78 30 30 30 31 20  Change   0x0001 
e980: 20 2f 2a 20 55 6e 63 6f 6d 6d 69 74 74 65 64 20   /* Uncommitted 
e990: 48 61 73 68 20 74 61 62 6c 65 20 63 68 61 6e 67  Hash table chang
e9a0: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42  es */.#define DB
e9b0: 46 4c 41 47 5f 50 72 65 66 65 72 42 75 69 6c 74  FLAG_PreferBuilt
e9c0: 69 6e 20 20 30 78 30 30 30 32 20 20 2f 2a 20 50  in  0x0002  /* P
e9d0: 72 65 66 65 72 65 6e 63 65 20 74 6f 20 62 75 69  reference to bui
e9e0: 6c 74 2d 69 6e 20 66 75 6e 63 73 20 2a 2f 0a 23  lt-in funcs */.#
e9f0: 64 65 66 69 6e 65 20 44 42 46 4c 41 47 5f 56 61  define DBFLAG_Va
ea00: 63 75 75 6d 20 20 20 20 20 20 20 20 20 30 78 30  cuum         0x0
ea10: 30 30 34 20 20 2f 2a 20 43 75 72 72 65 6e 74 6c  004  /* Currentl
ea20: 79 20 69 6e 20 61 20 56 41 43 55 55 4d 20 2a 2f  y in a VACUUM */
ea30: 0a 23 64 65 66 69 6e 65 20 44 42 46 4c 41 47 5f  .#define DBFLAG_
ea40: 56 61 63 75 75 6d 49 6e 74 6f 20 20 20 20 20 30  VacuumInto     0
ea50: 78 30 30 30 38 20 20 2f 2a 20 43 75 72 72 65 6e  x0008  /* Curren
ea60: 74 6c 79 20 72 75 6e 6e 69 6e 67 20 56 41 43 55  tly running VACU
ea70: 55 4d 20 49 4e 54 4f 20 2a 2f 0a 23 64 65 66 69  UM INTO */.#defi
ea80: 6e 65 20 44 42 46 4c 41 47 5f 53 63 68 65 6d 61  ne DBFLAG_Schema
ea90: 4b 6e 6f 77 6e 4f 6b 20 20 30 78 30 30 31 30 20  KnownOk  0x0010 
eaa0: 20 2f 2a 20 53 63 68 65 6d 61 20 69 73 20 6b 6e   /* Schema is kn
eab0: 6f 77 6e 20 74 6f 20 62 65 20 76 61 6c 69 64 20  own to be valid 
eac0: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 73 20 6f  */../*.** Bits o
ead0: 66 20 74 68 65 20 73 71 6c 69 74 65 33 2e 64 62  f the sqlite3.db
eae0: 4f 70 74 46 6c 61 67 73 20 66 69 65 6c 64 20 74  OptFlags field t
eaf0: 68 61 74 20 61 72 65 20 75 73 65 64 20 62 79 20  hat are used by 
eb00: 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74  the.** sqlite3_t
eb10: 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49  est_control(SQLI
eb20: 54 45 5f 54 45 53 54 43 54 52 4c 5f 4f 50 54 49  TE_TESTCTRL_OPTI
eb30: 4d 49 5a 41 54 49 4f 4e 53 2c 2e 2e 2e 29 20 69  MIZATIONS,...) i
eb40: 6e 74 65 72 66 61 63 65 20 74 6f 0a 2a 2a 20 73  nterface to.** s
eb50: 65 6c 65 63 74 69 76 65 6c 79 20 64 69 73 61 62  electively disab
eb60: 6c 65 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d  le various optim
eb70: 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65  izations..*/.#de
eb80: 66 69 6e 65 20 53 51 4c 49 54 45 5f 51 75 65 72  fine SQLITE_Quer
eb90: 79 46 6c 61 74 74 65 6e 65 72 20 30 78 30 30 30  yFlattener 0x000
eba0: 31 20 20 20 2f 2a 20 51 75 65 72 79 20 66 6c 61  1   /* Query fla
ebb0: 74 74 65 6e 69 6e 67 20 2a 2f 0a 23 64 65 66 69  ttening */.#defi
ebc0: 6e 65 20 53 51 4c 49 54 45 5f 57 69 6e 64 6f 77  ne SQLITE_Window
ebd0: 46 75 6e 63 20 20 20 20 20 30 78 30 30 30 32 20  Func     0x0002 
ebe0: 20 20 2f 2a 20 55 73 65 20 78 49 6e 76 65 72 73    /* Use xInvers
ebf0: 65 20 66 6f 72 20 77 69 6e 64 6f 77 20 66 75 6e  e for window fun
ec00: 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e  ctions */.#defin
ec10: 65 20 53 51 4c 49 54 45 5f 47 72 6f 75 70 42 79  e SQLITE_GroupBy
ec20: 4f 72 64 65 72 20 20 20 30 78 30 30 30 34 20 20  Order   0x0004  
ec30: 20 2f 2a 20 47 52 4f 55 50 42 59 20 63 6f 76 65   /* GROUPBY cove
ec40: 72 20 6f 66 20 4f 52 44 45 52 42 59 20 2a 2f 0a  r of ORDERBY */.
ec50: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
ec60: 61 63 74 6f 72 4f 75 74 43 6f 6e 73 74 20 30 78  actorOutConst 0x
ec70: 30 30 30 38 20 20 20 2f 2a 20 43 6f 6e 73 74 61  0008   /* Consta
ec80: 6e 74 20 66 61 63 74 6f 72 69 6e 67 20 2a 2f 0a  nt factoring */.
ec90: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44  #define SQLITE_D
eca0: 69 73 74 69 6e 63 74 4f 70 74 20 20 20 20 30 78  istinctOpt    0x
ecb0: 30 30 31 30 20 20 20 2f 2a 20 44 49 53 54 49 4e  0010   /* DISTIN
ecc0: 43 54 20 75 73 69 6e 67 20 69 6e 64 65 78 65 73  CT using indexes
ecd0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
ece0: 54 45 5f 43 6f 76 65 72 49 64 78 53 63 61 6e 20  TE_CoverIdxScan 
ecf0: 20 20 30 78 30 30 32 30 20 20 20 2f 2a 20 43 6f    0x0020   /* Co
ed00: 76 65 72 69 6e 67 20 69 6e 64 65 78 20 73 63 61  vering index sca
ed10: 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ns */.#define SQ
ed20: 4c 49 54 45 5f 4f 72 64 65 72 42 79 49 64 78 4a  LITE_OrderByIdxJ
ed30: 6f 69 6e 20 30 78 30 30 34 30 20 20 20 2f 2a 20  oin 0x0040   /* 
ed40: 4f 52 44 45 52 20 42 59 20 6f 66 20 6a 6f 69 6e  ORDER BY of join
ed50: 73 20 76 69 61 20 69 6e 64 65 78 20 2a 2f 0a 23  s via index */.#
ed60: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 72  define SQLITE_Tr
ed70: 61 6e 73 69 74 69 76 65 20 20 20 20 20 30 78 30  ansitive     0x0
ed80: 30 38 30 20 20 20 2f 2a 20 54 72 61 6e 73 69 74  080   /* Transit
ed90: 69 76 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  ive constraints 
eda0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
edb0: 45 5f 4f 6d 69 74 4e 6f 6f 70 4a 6f 69 6e 20 20  E_OmitNoopJoin  
edc0: 20 30 78 30 31 30 30 20 20 20 2f 2a 20 4f 6d 69   0x0100   /* Omi
edd0: 74 20 75 6e 75 73 65 64 20 74 61 62 6c 65 73 20  t unused tables 
ede0: 69 6e 20 6a 6f 69 6e 73 20 2a 2f 0a 23 64 65 66  in joins */.#def
edf0: 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74  ine SQLITE_Count
ee00: 4f 66 56 69 65 77 20 20 20 20 30 78 30 32 30 30  OfView    0x0200
ee10: 20 20 20 2f 2a 20 54 68 65 20 63 6f 75 6e 74 2d     /* The count-
ee20: 6f 66 2d 76 69 65 77 20 6f 70 74 69 6d 69 7a 61  of-view optimiza
ee30: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
ee40: 53 51 4c 49 54 45 5f 43 75 72 73 6f 72 48 69 6e  SQLITE_CursorHin
ee50: 74 73 20 20 20 20 30 78 30 34 30 30 20 20 20 2f  ts    0x0400   /
ee60: 2a 20 41 64 64 20 4f 50 5f 43 75 72 73 6f 72 48  * Add OP_CursorH
ee70: 69 6e 74 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 23  int opcodes */.#
ee80: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 74  define SQLITE_St
ee90: 61 74 34 20 20 20 20 20 20 20 20 20 20 30 78 30  at4          0x0
eea0: 38 30 30 20 20 20 2f 2a 20 55 73 65 20 53 54 41  800   /* Use STA
eeb0: 54 34 20 64 61 74 61 20 2a 2f 0a 20 20 20 2f 2a  T4 data */.   /*
eec0: 20 54 48 33 20 65 78 70 65 63 74 73 20 74 68 65   TH3 expects the
eed0: 20 53 74 61 74 34 20 20 20 5e 5e 5e 5e 5e 5e 20   Stat4   ^^^^^^ 
eee0: 76 61 6c 75 65 20 74 6f 20 62 65 20 30 78 30 38  value to be 0x08
eef0: 30 30 2e 20 20 44 6f 6e 27 74 20 63 68 61 6e 67  00.  Don't chang
ef00: 65 20 69 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  e it */.#define 
ef10: 53 51 4c 49 54 45 5f 50 75 73 68 44 6f 77 6e 20  SQLITE_PushDown 
ef20: 20 20 20 20 20 20 30 78 31 30 30 30 20 20 20 2f        0x1000   /
ef30: 2a 20 54 68 65 20 70 75 73 68 2d 64 6f 77 6e 20  * The push-down 
ef40: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a  optimization */.
ef50: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
ef60: 69 6d 70 6c 69 66 79 4a 6f 69 6e 20 20 20 30 78  implifyJoin   0x
ef70: 32 30 30 30 20 20 20 2f 2a 20 43 6f 6e 76 65 72  2000   /* Conver
ef80: 74 20 4c 45 46 54 20 4a 4f 49 4e 20 74 6f 20 4a  t LEFT JOIN to J
ef90: 4f 49 4e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  OIN */.#define S
efa0: 51 4c 49 54 45 5f 53 6b 69 70 53 63 61 6e 20 20  QLITE_SkipScan  
efb0: 20 20 20 20 20 30 78 34 30 30 30 20 20 20 2f 2a       0x4000   /*
efc0: 20 53 6b 69 70 2d 73 63 61 6e 73 20 2a 2f 0a 23   Skip-scans */.#
efd0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 72  define SQLITE_Pr
efe0: 6f 70 61 67 61 74 65 43 6f 6e 73 74 20 30 78 38  opagateConst 0x8
eff0: 30 30 30 20 20 20 2f 2a 20 54 68 65 20 63 6f 6e  000   /* The con
f000: 73 74 61 6e 74 20 70 72 6f 70 61 67 61 74 69 6f  stant propagatio
f010: 6e 20 6f 70 74 20 2a 2f 0a 23 64 65 66 69 6e 65  n opt */.#define
f020: 20 53 51 4c 49 54 45 5f 41 6c 6c 4f 70 74 73 20   SQLITE_AllOpts 
f030: 20 20 20 20 20 20 20 30 78 66 66 66 66 20 20 20         0xffff   
f040: 2f 2a 20 41 6c 6c 20 6f 70 74 69 6d 69 7a 61 74  /* All optimizat
f050: 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d  ions */../*.** M
f060: 61 63 72 6f 73 20 66 6f 72 20 74 65 73 74 69 6e  acros for testin
f070: 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  g whether or not
f080: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 61   optimizations a
f090: 72 65 20 65 6e 61 62 6c 65 64 20 6f 72 20 64 69  re enabled or di
f0a0: 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 64 65 66 69  sabled..*/.#defi
f0b0: 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 44  ne OptimizationD
f0c0: 69 73 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b  isabled(db, mask
f0d0: 29 20 20 28 28 28 64 62 29 2d 3e 64 62 4f 70 74  )  (((db)->dbOpt
f0e0: 46 6c 61 67 73 26 28 6d 61 73 6b 29 29 21 3d 30  Flags&(mask))!=0
f0f0: 29 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69  ).#define Optimi
f100: 7a 61 74 69 6f 6e 45 6e 61 62 6c 65 64 28 64 62  zationEnabled(db
f110: 2c 20 6d 61 73 6b 29 20 20 20 28 28 28 64 62 29  , mask)   (((db)
f120: 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26 28 6d 61  ->dbOptFlags&(ma
f130: 73 6b 29 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20  sk))==0)../*.** 
f140: 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 69  Return true if i
f150: 74 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20 63  t OK to factor c
f160: 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73 69  onstant expressi
f170: 6f 6e 73 20 69 6e 74 6f 20 74 68 65 20 69 6e 69  ons into the ini
f180: 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 63  tialization.** c
f190: 6f 64 65 2e 20 54 68 65 20 61 72 67 75 6d 65 6e  ode. The argumen
f1a0: 74 20 69 73 20 61 20 50 61 72 73 65 20 6f 62 6a  t is a Parse obj
f1b0: 65 63 74 20 66 6f 72 20 74 68 65 20 63 6f 64 65  ect for the code
f1c0: 20 67 65 6e 65 72 61 74 6f 72 2e 0a 2a 2f 0a 23   generator..*/.#
f1d0: 64 65 66 69 6e 65 20 43 6f 6e 73 74 46 61 63 74  define ConstFact
f1e0: 6f 72 4f 6b 28 50 29 20 28 28 50 29 2d 3e 6f 6b  orOk(P) ((P)->ok
f1f0: 43 6f 6e 73 74 46 61 63 74 6f 72 29 0a 0a 2f 2a  ConstFactor)../*
f200: 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c  .** Possible val
f210: 75 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69  ues for the sqli
f220: 74 65 2e 6d 61 67 69 63 20 66 69 65 6c 64 2e 0a  te.magic field..
f230: 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 73 20 61  ** The numbers a
f240: 72 65 20 6f 62 74 61 69 6e 65 64 20 61 74 20 72  re obtained at r
f250: 61 6e 64 6f 6d 20 61 6e 64 20 68 61 76 65 20 6e  andom and have n
f260: 6f 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e  o special meanin
f270: 67 2c 20 6f 74 68 65 72 0a 2a 2a 20 74 68 61 6e  g, other.** than
f280: 20 62 65 69 6e 67 20 64 69 73 74 69 6e 63 74 20   being distinct 
f290: 66 72 6f 6d 20 6f 6e 65 20 61 6e 6f 74 68 65 72  from one another
f2a0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
f2b0: 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 20  ITE_MAGIC_OPEN  
f2c0: 20 20 20 30 78 61 30 32 39 61 36 39 37 20 20 2f     0xa029a697  /
f2d0: 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 6f 70  * Database is op
f2e0: 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  en */.#define SQ
f2f0: 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45  LITE_MAGIC_CLOSE
f300: 44 20 20 20 30 78 39 66 33 63 32 64 33 33 20 20  D   0x9f3c2d33  
f310: 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 63  /* Database is c
f320: 6c 6f 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  losed */.#define
f330: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 53 49   SQLITE_MAGIC_SI
f340: 43 4b 20 20 20 20 20 30 78 34 62 37 37 31 32 39  CK     0x4b77129
f350: 30 20 20 2f 2a 20 45 72 72 6f 72 20 61 6e 64 20  0  /* Error and 
f360: 61 77 61 69 74 69 6e 67 20 63 6c 6f 73 65 20 2a  awaiting close *
f370: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
f380: 5f 4d 41 47 49 43 5f 42 55 53 59 20 20 20 20 20  _MAGIC_BUSY     
f390: 30 78 66 30 33 62 37 39 30 36 20 20 2f 2a 20 44  0xf03b7906  /* D
f3a0: 61 74 61 62 61 73 65 20 63 75 72 72 65 6e 74 6c  atabase currentl
f3b0: 79 20 69 6e 20 75 73 65 20 2a 2f 0a 23 64 65 66  y in use */.#def
f3c0: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
f3d0: 5f 45 52 52 4f 52 20 20 20 20 30 78 62 35 33 35  _ERROR    0xb535
f3e0: 37 39 33 30 20 20 2f 2a 20 41 6e 20 53 51 4c 49  7930  /* An SQLI
f3f0: 54 45 5f 4d 49 53 55 53 45 20 65 72 72 6f 72 20  TE_MISUSE error 
f400: 6f 63 63 75 72 72 65 64 20 2a 2f 0a 23 64 65 66  occurred */.#def
f410: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
f420: 5f 5a 4f 4d 42 49 45 20 20 20 30 78 36 34 63 66  _ZOMBIE   0x64cf
f430: 66 63 37 66 20 20 2f 2a 20 43 6c 6f 73 65 20 77  fc7f  /* Close w
f440: 69 74 68 20 6c 61 73 74 20 73 74 61 74 65 6d 65  ith last stateme
f450: 6e 74 20 63 6c 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a  nt close */../*.
f460: 2a 2a 20 45 61 63 68 20 53 51 4c 20 66 75 6e 63  ** Each SQL func
f470: 74 69 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 20  tion is defined 
f480: 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  by an instance o
f490: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a  f the following.
f4a0: 2a 2a 20 73 74 72 75 63 74 75 72 65 2e 20 20 46  ** structure.  F
f4b0: 6f 72 20 67 6c 6f 62 61 6c 20 62 75 69 6c 74 2d  or global built-
f4c0: 69 6e 20 66 75 6e 63 74 69 6f 6e 73 20 28 65 78  in functions (ex
f4d0: 3a 20 73 75 62 73 74 72 28 29 2c 20 6d 61 78 28  : substr(), max(
f4e0: 29 2c 20 63 6f 75 6e 74 28 29 29 0a 2a 2a 20 61  ), count()).** a
f4f0: 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73   pointer to this
f500: 20 73 74 72 75 63 74 75 72 65 20 69 73 20 68 65   structure is he
f510: 6c 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65  ld in the sqlite
f520: 33 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e  3BuiltinFunction
f530: 73 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 46 6f 72  s object..** For
f540: 20 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20   per-connection 
f550: 61 70 70 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69  application-defi
f560: 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73 2c 20 61  ned functions, a
f570: 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73   pointer to this
f580: 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20 69 73  .** structure is
f590: 20 68 65 6c 64 20 69 6e 20 74 68 65 20 64 62 2d   held in the db-
f5a0: 3e 61 48 61 73 68 20 68 61 73 68 20 74 61 62 6c  >aHash hash tabl
f5b0: 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 75 2e 70  e..**.** The u.p
f5c0: 48 61 73 68 20 66 69 65 6c 64 20 69 73 20 75 73  Hash field is us
f5d0: 65 64 20 62 79 20 74 68 65 20 67 6c 6f 62 61 6c  ed by the global
f5e0: 20 62 75 69 6c 74 2d 69 6e 73 2e 20 20 54 68 65   built-ins.  The
f5f0: 20 75 2e 70 44 65 73 74 72 75 63 74 6f 72 0a 2a   u.pDestructor.*
f600: 2a 20 66 69 65 6c 64 20 69 73 20 75 73 65 64 20  * field is used 
f610: 62 79 20 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f  by per-connectio
f620: 6e 20 61 70 70 2d 64 65 66 20 66 75 6e 63 74 69  n app-def functi
f630: 6f 6e 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46  ons..*/.struct F
f640: 75 6e 63 44 65 66 20 7b 0a 20 20 69 38 20 6e 41  uncDef {.  i8 nA
f650: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
f660: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
f670: 75 6d 65 6e 74 73 2e 20 20 2d 31 20 6d 65 61 6e  uments.  -1 mean
f680: 73 20 75 6e 6c 69 6d 69 74 65 64 20 2a 2f 0a 20  s unlimited */. 
f690: 20 75 33 32 20 66 75 6e 63 46 6c 61 67 73 3b 20   u32 funcFlags; 
f6a0: 20 20 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f        /* Some co
f6b0: 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 53 51 4c  mbination of SQL
f6c0: 49 54 45 5f 46 55 4e 43 5f 2a 20 2a 2f 0a 20 20  ITE_FUNC_* */.  
f6d0: 76 6f 69 64 20 2a 70 55 73 65 72 44 61 74 61 3b  void *pUserData;
f6e0: 20 20 20 20 20 2f 2a 20 55 73 65 72 20 64 61 74       /* User dat
f6f0: 61 20 70 61 72 61 6d 65 74 65 72 20 2a 2f 0a 20  a parameter */. 
f700: 20 46 75 6e 63 44 65 66 20 2a 70 4e 65 78 74 3b   FuncDef *pNext;
f710: 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 66 75        /* Next fu
f720: 6e 63 74 69 6f 6e 20 77 69 74 68 20 73 61 6d 65  nction with same
f730: 20 6e 61 6d 65 20 2a 2f 0a 20 20 76 6f 69 64 20   name */.  void 
f740: 28 2a 78 53 46 75 6e 63 29 28 73 71 6c 69 74 65  (*xSFunc)(sqlite
f750: 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
f760: 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b  qlite3_value**);
f770: 20 2f 2a 20 66 75 6e 63 20 6f 72 20 61 67 67 2d   /* func or agg-
f780: 73 74 65 70 20 2a 2f 0a 20 20 76 6f 69 64 20 28  step */.  void (
f790: 2a 78 46 69 6e 61 6c 69 7a 65 29 28 73 71 6c 69  *xFinalize)(sqli
f7a0: 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 20 20  te3_context*);  
f7b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f7c0: 2f 2a 20 41 67 67 20 66 69 6e 61 6c 69 7a 65 72  /* Agg finalizer
f7d0: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 56 61   */.  void (*xVa
f7e0: 6c 75 65 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e  lue)(sqlite3_con
f7f0: 74 65 78 74 2a 29 3b 20 20 20 20 20 20 20 20 20  text*);         
f800: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
f810: 75 72 72 65 6e 74 20 61 67 67 20 76 61 6c 75 65  urrent agg value
f820: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 49 6e   */.  void (*xIn
f830: 76 65 72 73 65 29 28 73 71 6c 69 74 65 33 5f 63  verse)(sqlite3_c
f840: 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69  ontext*,int,sqli
f850: 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a  te3_value**); /*
f860: 20 69 6e 76 65 72 73 65 20 61 67 67 2d 73 74 65   inverse agg-ste
f870: 70 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  p */.  const cha
f880: 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 2f 2a 20 53  r *zName;   /* S
f890: 51 4c 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66  QL name of the f
f8a0: 75 6e 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 75 6e  unction. */.  un
f8b0: 69 6f 6e 20 7b 0a 20 20 20 20 46 75 6e 63 44 65  ion {.    FuncDe
f8c0: 66 20 2a 70 48 61 73 68 3b 20 20 20 20 20 20 2f  f *pHash;      /
f8d0: 2a 20 4e 65 78 74 20 77 69 74 68 20 61 20 64 69  * Next with a di
f8e0: 66 66 65 72 65 6e 74 20 6e 61 6d 65 20 62 75 74  fferent name but
f8f0: 20 74 68 65 20 73 61 6d 65 20 68 61 73 68 20 2a   the same hash *
f900: 2f 0a 20 20 20 20 46 75 6e 63 44 65 73 74 72 75  /.    FuncDestru
f910: 63 74 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f  ctor *pDestructo
f920: 72 3b 20 20 20 2f 2a 20 52 65 66 65 72 65 6e 63  r;   /* Referenc
f930: 65 20 63 6f 75 6e 74 65 64 20 64 65 73 74 72 75  e counted destru
f940: 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  ctor function */
f950: 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a  .  } u;.};../*.*
f960: 2a 20 54 68 69 73 20 73 74 72 75 63 74 75 72 65  * This structure
f970: 20 65 6e 63 61 70 73 75 6c 61 74 65 73 20 61 20   encapsulates a 
f980: 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20 64 65  user-function de
f990: 73 74 72 75 63 74 6f 72 20 63 61 6c 6c 62 61 63  structor callbac
f9a0: 6b 20 28 61 73 0a 2a 2a 20 63 6f 6e 66 69 67 75  k (as.** configu
f9b0: 72 65 64 20 75 73 69 6e 67 20 63 72 65 61 74 65  red using create
f9c0: 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29 29 20  _function_v2()) 
f9d0: 61 6e 64 20 61 20 72 65 66 65 72 65 6e 63 65 20  and a reference 
f9e0: 63 6f 75 6e 74 65 72 2e 20 57 68 65 6e 0a 2a 2a  counter. When.**
f9f0: 20 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e   create_function
fa00: 5f 76 32 28 29 20 69 73 20 63 61 6c 6c 65 64 20  _v2() is called 
fa10: 74 6f 20 63 72 65 61 74 65 20 61 20 66 75 6e 63  to create a func
fa20: 74 69 6f 6e 20 77 69 74 68 20 61 20 64 65 73 74  tion with a dest
fa30: 72 75 63 74 6f 72 2c 0a 2a 2a 20 61 20 73 69 6e  ructor,.** a sin
fa40: 67 6c 65 20 6f 62 6a 65 63 74 20 6f 66 20 74 68  gle object of th
fa50: 69 73 20 74 79 70 65 20 69 73 20 61 6c 6c 6f 63  is type is alloc
fa60: 61 74 65 64 2e 20 46 75 6e 63 44 65 73 74 72 75  ated. FuncDestru
fa70: 63 74 6f 72 2e 6e 52 65 66 20 69 73 20 73 65 74  ctor.nRef is set
fa80: 20 74 6f 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65   to.** the numbe
fa90: 72 20 6f 66 20 46 75 6e 63 44 65 66 20 6f 62 6a  r of FuncDef obj
faa0: 65 63 74 73 20 63 72 65 61 74 65 64 20 28 65 69  ects created (ei
fab0: 74 68 65 72 20 31 20 6f 72 20 33 2c 20 64 65 70  ther 1 or 3, dep
fac0: 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65  ending on whethe
fad0: 72 0a 2a 2a 20 6f 72 20 6e 6f 74 20 74 68 65 20  r.** or not the 
fae0: 73 70 65 63 69 66 69 65 64 20 65 6e 63 6f 64 69  specified encodi
faf0: 6e 67 20 69 73 20 53 51 4c 49 54 45 5f 41 4e 59  ng is SQLITE_ANY
fb00: 29 2e 20 54 68 65 20 46 75 6e 63 44 65 66 2e 70  ). The FuncDef.p
fb10: 44 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 6d 65  Destructor.** me
fb20: 6d 62 65 72 20 6f 66 20 65 61 63 68 20 6f 66 20  mber of each of 
fb30: 74 68 65 20 6e 65 77 20 46 75 6e 63 44 65 66 20  the new FuncDef 
fb40: 6f 62 6a 65 63 74 73 20 69 73 20 73 65 74 20 74  objects is set t
fb50: 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 61  o point to the a
fb60: 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 46 75 6e 63  llocated.** Func
fb70: 44 65 73 74 72 75 63 74 6f 72 2e 0a 2a 2a 0a 2a  Destructor..**.*
fb80: 2a 20 54 68 65 72 65 61 66 74 65 72 2c 20 77 68  * Thereafter, wh
fb90: 65 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20 46 75  en one of the Fu
fba0: 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20 69 73  ncDef objects is
fbb0: 20 64 65 6c 65 74 65 64 2c 20 74 68 65 20 72 65   deleted, the re
fbc0: 66 65 72 65 6e 63 65 0a 2a 2a 20 63 6f 75 6e 74  ference.** count
fbd0: 20 6f 6e 20 74 68 69 73 20 6f 62 6a 65 63 74 20   on this object 
fbe0: 69 73 20 64 65 63 72 65 6d 65 6e 74 65 64 2e 20  is decremented. 
fbf0: 57 68 65 6e 20 69 74 20 72 65 61 63 68 65 73 20  When it reaches 
fc00: 30 2c 20 74 68 65 20 64 65 73 74 72 75 63 74 6f  0, the destructo
fc10: 72 0a 2a 2a 20 69 73 20 69 6e 76 6f 6b 65 64 20  r.** is invoked 
fc20: 61 6e 64 20 74 68 65 20 46 75 6e 63 44 65 73 74  and the FuncDest
fc30: 72 75 63 74 6f 72 20 73 74 72 75 63 74 75 72 65  ructor structure
fc40: 20 66 72 65 65 64 2e 0a 2a 2f 0a 73 74 72 75 63   freed..*/.struc
fc50: 74 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72  t FuncDestructor
fc60: 20 7b 0a 20 20 69 6e 74 20 6e 52 65 66 3b 0a 20   {.  int nRef;. 
fc70: 20 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79   void (*xDestroy
fc80: 29 28 76 6f 69 64 20 2a 29 3b 0a 20 20 76 6f 69  )(void *);.  voi
fc90: 64 20 2a 70 55 73 65 72 44 61 74 61 3b 0a 7d 3b  d *pUserData;.};
fca0: 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65  ../*.** Possible
fcb0: 20 76 61 6c 75 65 73 20 66 6f 72 20 46 75 6e 63   values for Func
fcc0: 44 65 66 2e 66 6c 61 67 73 2e 20 20 4e 6f 74 65  Def.flags.  Note
fcd0: 20 74 68 61 74 20 74 68 65 20 5f 4c 45 4e 47 54   that the _LENGT
fce0: 48 20 61 6e 64 20 5f 54 59 50 45 4f 46 0a 2a 2a  H and _TYPEOF.**
fcf0: 20 76 61 6c 75 65 73 20 6d 75 73 74 20 63 6f 72   values must cor
fd00: 72 65 73 70 6f 6e 64 20 74 6f 20 4f 50 46 4c 41  respond to OPFLA
fd10: 47 5f 4c 45 4e 47 54 48 41 52 47 20 61 6e 64 20  G_LENGTHARG and 
fd20: 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47  OPFLAG_TYPEOFARG
fd30: 2e 20 20 41 6e 64 0a 2a 2a 20 53 51 4c 49 54 45  .  And.** SQLITE
fd40: 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 6d  _FUNC_CONSTANT m
fd50: 75 73 74 20 62 65 20 74 68 65 20 73 61 6d 65 20  ust be the same 
fd60: 61 73 20 53 51 4c 49 54 45 5f 44 45 54 45 52 4d  as SQLITE_DETERM
fd70: 49 4e 49 53 54 49 43 2e 20 20 54 68 65 72 65 0a  INISTIC.  There.
fd80: 2a 2a 20 61 72 65 20 61 73 73 65 72 74 28 29 20  ** are assert() 
fd90: 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68  statements in th
fda0: 65 20 63 6f 64 65 20 74 6f 20 76 65 72 69 66 79  e code to verify
fdb0: 20 74 68 69 73 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c   this..**.** Val
fdc0: 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28  ue constraints (
fdd0: 65 6e 66 6f 72 63 65 64 20 76 69 61 20 61 73 73  enforced via ass
fde0: 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20 20 53  ert()):.**     S
fdf0: 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41  QLITE_FUNC_MINMA
fe00: 58 20 20 20 20 3d 3d 20 20 4e 43 5f 4d 69 6e 4d  X    ==  NC_MinM
fe10: 61 78 41 67 67 20 20 20 20 20 20 3d 3d 20 53 46  axAgg      == SF
fe20: 5f 4d 69 6e 4d 61 78 41 67 67 0a 2a 2a 20 20 20  _MinMaxAgg.**   
fe30: 20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45    SQLITE_FUNC_LE
fe40: 4e 47 54 48 20 20 20 20 3d 3d 20 20 4f 50 46 4c  NGTH    ==  OPFL
fe50: 41 47 5f 4c 45 4e 47 54 48 41 52 47 0a 2a 2a 20  AG_LENGTHARG.** 
fe60: 20 20 20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f      SQLITE_FUNC_
fe70: 54 59 50 45 4f 46 20 20 20 20 3d 3d 20 20 4f 50  TYPEOF    ==  OP
fe80: 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 0a 2a  FLAG_TYPEOFARG.*
fe90: 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 46 55 4e  *     SQLITE_FUN
fea0: 43 5f 43 4f 4e 53 54 41 4e 54 20 20 3d 3d 20 20  C_CONSTANT  ==  
feb0: 53 51 4c 49 54 45 5f 44 45 54 45 52 4d 49 4e 49  SQLITE_DETERMINI
fec0: 53 54 49 43 20 66 72 6f 6d 20 74 68 65 20 41 50  STIC from the AP
fed0: 49 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f  I.**     SQLITE_
fee0: 46 55 4e 43 5f 44 49 52 45 43 54 20 20 20 20 3d  FUNC_DIRECT    =
fef0: 3d 20 20 53 51 4c 49 54 45 5f 44 49 52 45 43 54  =  SQLITE_DIRECT
ff00: 4f 4e 4c 59 20 66 72 6f 6d 20 74 68 65 20 41 50  ONLY from the AP
ff10: 49 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f  I.**     SQLITE_
ff20: 46 55 4e 43 5f 45 4e 43 4d 41 53 4b 20 20 20 64  FUNC_ENCMASK   d
ff30: 65 70 65 6e 64 73 20 6f 6e 20 53 51 4c 49 54 45  epends on SQLITE
ff40: 5f 55 54 46 2a 20 6d 61 63 72 6f 73 20 69 6e 20  _UTF* macros in 
ff50: 74 68 65 20 41 50 49 0a 2a 2f 0a 23 64 65 66 69  the API.*/.#defi
ff60: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45  ne SQLITE_FUNC_E
ff70: 4e 43 4d 41 53 4b 20 20 30 78 30 30 30 33 20 2f  NCMASK  0x0003 /
ff80: 2a 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53  * SQLITE_UTF8, S
ff90: 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20 6f 72  QLITE_UTF16BE or
ffa0: 20 55 54 46 31 36 4c 45 20 2a 2f 0a 23 64 65 66   UTF16LE */.#def
ffb0: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
ffc0: 4c 49 4b 45 20 20 20 20 20 30 78 30 30 30 34 20  LIKE     0x0004 
ffd0: 2f 2a 20 43 61 6e 64 69 64 61 74 65 20 66 6f 72  /* Candidate for
ffe0: 20 74 68 65 20 4c 49 4b 45 20 6f 70 74 69 6d 69   the LIKE optimi
fff0: 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  zation */.#defin
10000 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 41  e SQLITE_FUNC_CA
10010 53 45 20 20 20 20 20 30 78 30 30 30 38 20 2f 2a  SE     0x0008 /*
10020 20 43 61 73 65 2d 73 65 6e 73 69 74 69 76 65 20   Case-sensitive 
10030 4c 49 4b 45 2d 74 79 70 65 20 66 75 6e 63 74 69  LIKE-type functi
10040 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
10050 4c 49 54 45 5f 46 55 4e 43 5f 45 50 48 45 4d 20  LITE_FUNC_EPHEM 
10060 20 20 20 30 78 30 30 31 30 20 2f 2a 20 45 70 68     0x0010 /* Eph
10070 65 6d 65 72 61 6c 2e 20 20 44 65 6c 65 74 65 20  emeral.  Delete 
10080 77 69 74 68 20 56 44 42 45 20 2a 2f 0a 23 64 65  with VDBE */.#de
10090 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
100a0 5f 4e 45 45 44 43 4f 4c 4c 20 30 78 30 30 32 30  _NEEDCOLL 0x0020
100b0 20 2f 2a 20 73 71 6c 69 74 65 33 47 65 74 46 75   /* sqlite3GetFu
100c0 6e 63 43 6f 6c 6c 53 65 71 28 29 20 6d 69 67 68  ncCollSeq() migh
100d0 74 20 62 65 20 63 61 6c 6c 65 64 2a 2f 0a 23 64  t be called*/.#d
100e0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
100f0 43 5f 4c 45 4e 47 54 48 20 20 20 30 78 30 30 34  C_LENGTH   0x004
10100 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 6c 65  0 /* Built-in le
10110 6e 67 74 68 28 29 20 66 75 6e 63 74 69 6f 6e 20  ngth() function 
10120 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
10130 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46 20 20 20  E_FUNC_TYPEOF   
10140 30 78 30 30 38 30 20 2f 2a 20 42 75 69 6c 74 2d  0x0080 /* Built-
10150 69 6e 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63  in typeof() func
10160 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
10170 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 55 4e  SQLITE_FUNC_COUN
10180 54 20 20 20 20 30 78 30 31 30 30 20 2f 2a 20 42  T    0x0100 /* B
10190 75 69 6c 74 2d 69 6e 20 63 6f 75 6e 74 28 2a 29  uilt-in count(*)
101a0 20 61 67 67 72 65 67 61 74 65 20 2a 2f 0a 23 64   aggregate */.#d
101b0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
101c0 43 5f 43 4f 41 4c 45 53 43 45 20 30 78 30 32 30  C_COALESCE 0x020
101d0 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f  0 /* Built-in co
101e0 61 6c 65 73 63 65 28 29 20 6f 72 20 69 66 6e 75  alesce() or ifnu
101f0 6c 6c 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ll() */.#define 
10200 53 51 4c 49 54 45 5f 46 55 4e 43 5f 55 4e 4c 49  SQLITE_FUNC_UNLI
10210 4b 45 4c 59 20 30 78 30 34 30 30 20 2f 2a 20 42  KELY 0x0400 /* B
10220 75 69 6c 74 2d 69 6e 20 75 6e 6c 69 6b 65 6c 79  uilt-in unlikely
10230 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  () function */.#
10240 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
10250 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 30 78 30 38  NC_CONSTANT 0x08
10260 30 30 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 69  00 /* Constant i
10270 6e 70 75 74 73 20 67 69 76 65 20 61 20 63 6f 6e  nputs give a con
10280 73 74 61 6e 74 20 6f 75 74 70 75 74 20 2a 2f 0a  stant output */.
10290 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
102a0 55 4e 43 5f 4d 49 4e 4d 41 58 20 20 20 30 78 31  UNC_MINMAX   0x1
102b0 30 30 30 20 2f 2a 20 54 72 75 65 20 66 6f 72 20  000 /* True for 
102c0 6d 69 6e 28 29 20 61 6e 64 20 6d 61 78 28 29 20  min() and max() 
102d0 61 67 67 72 65 67 61 74 65 73 20 2a 2f 0a 23 64  aggregates */.#d
102e0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
102f0 43 5f 53 4c 4f 43 48 4e 47 20 20 30 78 32 30 30  C_SLOCHNG  0x200
10300 30 20 2f 2a 20 22 53 6c 6f 77 20 43 68 61 6e 67  0 /* "Slow Chang
10310 65 22 2e 20 56 61 6c 75 65 20 63 6f 6e 73 74 61  e". Value consta
10320 6e 74 20 64 75 72 69 6e 67 20 61 0a 20 20 20 20  nt during a.    
10330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10350 2a 2a 20 73 69 6e 67 6c 65 20 71 75 65 72 79 20  ** single query 
10360 2d 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20 6f  - might change o
10370 76 65 72 20 74 69 6d 65 20 2a 2f 0a 23 64 65 66  ver time */.#def
10380 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
10390 41 46 46 49 4e 49 54 59 20 30 78 34 30 30 30 20  AFFINITY 0x4000 
103a0 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 61 66 66 69  /* Built-in affi
103b0 6e 69 74 79 28 29 20 66 75 6e 63 74 69 6f 6e 20  nity() function 
103c0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
103d0 45 5f 46 55 4e 43 5f 4f 46 46 53 45 54 20 20 20  E_FUNC_OFFSET   
103e0 30 78 38 30 30 30 20 2f 2a 20 42 75 69 6c 74 2d  0x8000 /* Built-
103f0 69 6e 20 73 71 6c 69 74 65 5f 6f 66 66 73 65 74  in sqlite_offset
10400 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  () function */.#
10410 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
10420 4e 43 5f 57 49 4e 44 4f 57 20 20 20 30 78 30 30  NC_WINDOW   0x00
10430 30 31 30 30 30 30 20 2f 2a 20 42 75 69 6c 74 2d  010000 /* Built-
10440 69 6e 20 77 69 6e 64 6f 77 2d 6f 6e 6c 79 20 66  in window-only f
10450 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  unction */.#defi
10460 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 49  ne SQLITE_FUNC_I
10470 4e 54 45 52 4e 41 4c 20 30 78 30 30 30 34 30 30  NTERNAL 0x000400
10480 30 30 20 2f 2a 20 46 6f 72 20 75 73 65 20 62 79  00 /* For use by
10490 20 4e 65 73 74 65 64 50 61 72 73 65 28 29 20 6f   NestedParse() o
104a0 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  nly */.#define S
104b0 51 4c 49 54 45 5f 46 55 4e 43 5f 44 49 52 45 43  QLITE_FUNC_DIREC
104c0 54 20 20 20 30 78 30 30 30 38 30 30 30 30 20 2f  T   0x00080000 /
104d0 2a 20 4e 6f 74 20 66 6f 72 20 75 73 65 20 69 6e  * Not for use in
104e0 20 54 52 49 47 47 45 52 73 20 6f 72 20 56 49 45   TRIGGERs or VIE
104f0 57 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  Ws */.#define SQ
10500 4c 49 54 45 5f 46 55 4e 43 5f 53 55 42 54 59 50  LITE_FUNC_SUBTYP
10510 45 20 20 30 78 30 30 31 30 30 30 30 30 20 2f 2a  E  0x00100000 /*
10520 20 52 65 73 75 6c 74 20 6c 69 6b 65 6c 79 20 74   Result likely t
10530 6f 20 68 61 76 65 20 73 75 62 2d 74 79 70 65 20  o have sub-type 
10540 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  */../*.** The fo
10550 6c 6c 6f 77 69 6e 67 20 74 68 72 65 65 20 6d 61  llowing three ma
10560 63 72 6f 73 2c 20 46 55 4e 43 54 49 4f 4e 28 29  cros, FUNCTION()
10570 2c 20 4c 49 4b 45 46 55 4e 43 28 29 20 61 6e 64  , LIKEFUNC() and
10580 20 41 47 47 52 45 47 41 54 45 28 29 20 61 72 65   AGGREGATE() are
10590 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63 72 65 61  .** used to crea
105a0 74 65 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a  te the initializ
105b0 65 72 73 20 66 6f 72 20 74 68 65 20 46 75 6e 63  ers for the Func
105c0 44 65 66 20 73 74 72 75 63 74 75 72 65 73 2e 0a  Def structures..
105d0 2a 2a 0a 2a 2a 20 20 20 46 55 4e 43 54 49 4f 4e  **.**   FUNCTION
105e0 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
105f0 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a  rg, bNC, xFunc).
10600 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63  **     Used to c
10610 72 65 61 74 65 20 61 20 73 63 61 6c 61 72 20 66  reate a scalar f
10620 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69  unction definiti
10630 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e  on of a function
10640 20 7a 4e 61 6d 65 0a 2a 2a 20 20 20 20 20 69 6d   zName.**     im
10650 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 43 20 66  plemented by C f
10660 75 6e 63 74 69 6f 6e 20 78 46 75 6e 63 20 74 68  unction xFunc th
10670 61 74 20 61 63 63 65 70 74 73 20 6e 41 72 67 20  at accepts nArg 
10680 61 72 67 75 6d 65 6e 74 73 2e 20 54 68 65 0a 2a  arguments. The.*
10690 2a 20 20 20 20 20 76 61 6c 75 65 20 70 61 73 73  *     value pass
106a0 65 64 20 61 73 20 69 41 72 67 20 69 73 20 63 61  ed as iArg is ca
106b0 73 74 20 74 6f 20 61 20 28 76 6f 69 64 2a 29 20  st to a (void*) 
106c0 61 6e 64 20 6d 61 64 65 20 61 76 61 69 6c 61 62  and made availab
106d0 6c 65 0a 2a 2a 20 20 20 20 20 61 73 20 74 68 65  le.**     as the
106e0 20 75 73 65 72 2d 64 61 74 61 20 28 73 71 6c 69   user-data (sqli
106f0 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28 29 29  te3_user_data())
10700 20 66 6f 72 20 74 68 65 20 66 75 6e 63 74 69 6f   for the functio
10710 6e 2e 20 49 66 0a 2a 2a 20 20 20 20 20 61 72 67  n. If.**     arg
10720 75 6d 65 6e 74 20 62 4e 43 20 69 73 20 74 72 75  ument bNC is tru
10730 65 2c 20 74 68 65 6e 20 74 68 65 20 53 51 4c 49  e, then the SQLI
10740 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
10750 20 66 6c 61 67 20 69 73 20 73 65 74 2e 0a 2a 2a   flag is set..**
10760 0a 2a 2a 20 20 20 56 46 55 4e 43 54 49 4f 4e 28  .**   VFUNCTION(
10770 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
10780 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a  g, bNC, xFunc).*
10790 2a 20 20 20 20 20 4c 69 6b 65 20 46 55 4e 43 54  *     Like FUNCT
107a0 49 4f 4e 20 65 78 63 65 70 74 20 69 74 20 6f 6d  ION except it om
107b0 69 74 73 20 74 68 65 20 53 51 4c 49 54 45 5f 46  its the SQLITE_F
107c0 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66 6c 61  UNC_CONSTANT fla
107d0 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 44 46 55 4e 43  g..**.**   DFUNC
107e0 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
107f0 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
10800 6e 63 29 0a 2a 2a 20 20 20 20 20 4c 69 6b 65 20  nc).**     Like 
10810 46 55 4e 43 54 49 4f 4e 20 65 78 63 65 70 74 20  FUNCTION except 
10820 69 74 20 6f 6d 69 74 73 20 74 68 65 20 53 51 4c  it omits the SQL
10830 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
10840 54 20 66 6c 61 67 20 61 6e 64 0a 2a 2a 20 20 20  T flag and.**   
10850 20 20 61 64 64 73 20 74 68 65 20 53 51 4c 49 54    adds the SQLIT
10860 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 20 66  E_FUNC_SLOCHNG f
10870 6c 61 67 2e 20 20 55 73 65 64 20 66 6f 72 20 64  lag.  Used for d
10880 61 74 65 20 26 20 74 69 6d 65 20 66 75 6e 63 74  ate & time funct
10890 69 6f 6e 73 0a 2a 2a 20 20 20 20 20 61 6e 64 20  ions.**     and 
108a0 66 75 6e 63 74 69 6f 6e 73 20 6c 69 6b 65 20 73  functions like s
108b0 71 6c 69 74 65 5f 76 65 72 73 69 6f 6e 28 29 20  qlite_version() 
108c0 74 68 61 74 20 63 61 6e 20 63 68 61 6e 67 65 2c  that can change,
108d0 20 62 75 74 20 6e 6f 74 20 64 75 72 69 6e 67 0a   but not during.
108e0 2a 2a 20 20 20 20 20 61 20 73 69 6e 67 6c 65 20  **     a single 
108f0 71 75 65 72 79 2e 20 20 54 68 65 20 69 41 72 67  query.  The iArg
10900 20 69 73 20 69 67 6e 6f 72 65 64 2e 20 20 54 68   is ignored.  Th
10910 65 20 75 73 65 72 2d 64 61 74 61 20 69 73 20 61  e user-data is a
10920 6c 77 61 79 73 20 73 65 74 0a 2a 2a 20 20 20 20  lways set.**    
10930 20 74 6f 20 61 20 4e 55 4c 4c 20 70 6f 69 6e 74   to a NULL point
10940 65 72 2e 20 20 54 68 65 20 62 4e 43 20 70 61 72  er.  The bNC par
10950 61 6d 65 74 65 72 20 69 73 20 6e 6f 74 20 75 73  ameter is not us
10960 65 64 2e 0a 2a 2a 0a 2a 2a 20 20 20 50 55 52 45  ed..**.**   PURE
10970 5f 44 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72  _DATE(zName, nAr
10980 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
10990 75 6e 63 29 0a 2a 2a 20 20 20 20 20 55 73 65 64  unc).**     Used
109a0 20 66 6f 72 20 22 70 75 72 65 22 20 64 61 74 65   for "pure" date
109b0 2f 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 2c  /time functions,
109c0 20 74 68 69 73 20 6d 61 63 72 6f 20 69 73 20 6c   this macro is l
109d0 69 6b 65 20 44 46 55 4e 43 54 49 4f 4e 0a 2a 2a  ike DFUNCTION.**
109e0 20 20 20 20 20 65 78 63 65 70 74 20 74 68 61 74       except that
109f0 20 69 74 20 64 6f 65 73 20 73 65 74 20 74 68 65   it does set the
10a00 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
10a10 53 54 41 4e 54 20 66 6c 61 67 73 2e 20 20 69 41  STANT flags.  iA
10a20 72 67 20 69 73 0a 2a 2a 20 20 20 20 20 69 67 6e  rg is.**     ign
10a30 6f 72 65 64 20 61 6e 64 20 74 68 65 20 75 73 65  ored and the use
10a40 72 2d 64 61 74 61 20 66 6f 72 20 74 68 65 73 65  r-data for these
10a50 20 66 75 6e 63 74 69 6f 6e 73 20 69 73 20 73 65   functions is se
10a60 74 20 74 6f 20 61 6e 20 0a 2a 2a 20 20 20 20 20  t to an .**     
10a70 61 72 62 69 74 72 61 72 79 20 6e 6f 6e 2d 4e 55  arbitrary non-NU
10a80 4c 4c 20 70 6f 69 6e 74 65 72 2e 20 20 54 68 65  LL pointer.  The
10a90 20 62 4e 43 20 70 61 72 61 6d 65 74 65 72 20 69   bNC parameter i
10aa0 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a  s not used..**.*
10ab0 2a 20 20 20 41 47 47 52 45 47 41 54 45 28 7a 4e  *   AGGREGATE(zN
10ac0 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c  ame, nArg, iArg,
10ad0 20 62 4e 43 2c 20 78 53 74 65 70 2c 20 78 46 69   bNC, xStep, xFi
10ae0 6e 61 6c 29 0a 2a 2a 20 20 20 20 20 55 73 65 64  nal).**     Used
10af0 20 74 6f 20 63 72 65 61 74 65 20 61 6e 20 61 67   to create an ag
10b00 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
10b10 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 6d 70 6c   definition impl
10b20 65 6d 65 6e 74 65 64 20 62 79 0a 2a 2a 20 20 20  emented by.**   
10b30 20 20 74 68 65 20 43 20 66 75 6e 63 74 69 6f 6e    the C function
10b40 73 20 78 53 74 65 70 20 61 6e 64 20 78 46 69 6e  s xStep and xFin
10b50 61 6c 2e 20 54 68 65 20 66 69 72 73 74 20 66 6f  al. The first fo
10b60 75 72 20 70 61 72 61 6d 65 74 65 72 73 0a 2a 2a  ur parameters.**
10b70 20 20 20 20 20 61 72 65 20 69 6e 74 65 72 70 72       are interpr
10b80 65 74 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65  eted in the same
10b90 20 77 61 79 20 61 73 20 74 68 65 20 66 69 72 73   way as the firs
10ba0 74 20 34 20 70 61 72 61 6d 65 74 65 72 73 20 74  t 4 parameters t
10bb0 6f 0a 2a 2a 20 20 20 20 20 46 55 4e 43 54 49 4f  o.**     FUNCTIO
10bc0 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 57 46 55  N()..**.**   WFU
10bd0 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
10be0 72 67 2c 20 69 41 72 67 2c 20 78 53 74 65 70 2c  rg, iArg, xStep,
10bf0 20 78 46 69 6e 61 6c 2c 20 78 56 61 6c 75 65 2c   xFinal, xValue,
10c00 20 78 49 6e 76 65 72 73 65 29 0a 2a 2a 20 20 20   xInverse).**   
10c10 20 20 55 73 65 64 20 74 6f 20 63 72 65 61 74 65    Used to create
10c20 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 66 75   an aggregate fu
10c30 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f  nction definitio
10c40 6e 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79  n implemented by
10c50 0a 2a 2a 20 20 20 20 20 74 68 65 20 43 20 66 75  .**     the C fu
10c60 6e 63 74 69 6f 6e 73 20 78 53 74 65 70 20 61 6e  nctions xStep an
10c70 64 20 78 46 69 6e 61 6c 2e 20 54 68 65 20 66 69  d xFinal. The fi
10c80 72 73 74 20 66 6f 75 72 20 70 61 72 61 6d 65 74  rst four paramet
10c90 65 72 73 0a 2a 2a 20 20 20 20 20 61 72 65 20 69  ers.**     are i
10ca0 6e 74 65 72 70 72 65 74 65 64 20 69 6e 20 74 68  nterpreted in th
10cb0 65 20 73 61 6d 65 20 77 61 79 20 61 73 20 74 68  e same way as th
10cc0 65 20 66 69 72 73 74 20 34 20 70 61 72 61 6d 65  e first 4 parame
10cd0 74 65 72 73 20 74 6f 0a 2a 2a 20 20 20 20 20 46  ters to.**     F
10ce0 55 4e 43 54 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a  UNCTION()..**.**
10cf0 20 20 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d     LIKEFUNC(zNam
10d00 65 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c 20 66  e, nArg, pArg, f
10d10 6c 61 67 73 29 0a 2a 2a 20 20 20 20 20 55 73 65  lags).**     Use
10d20 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 73 63  d to create a sc
10d30 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 64 65  alar function de
10d40 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66 75  finition of a fu
10d50 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 0a 2a 2a 20  nction zName.** 
10d60 20 20 20 20 74 68 61 74 20 61 63 63 65 70 74 73      that accepts
10d70 20 6e 41 72 67 20 61 72 67 75 6d 65 6e 74 73 20   nArg arguments 
10d80 61 6e 64 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74  and is implement
10d90 65 64 20 62 79 20 61 20 63 61 6c 6c 20 74 6f 20  ed by a call to 
10da0 43 0a 2a 2a 20 20 20 20 20 66 75 6e 63 74 69 6f  C.**     functio
10db0 6e 20 6c 69 6b 65 46 75 6e 63 2e 20 41 72 67 75  n likeFunc. Argu
10dc0 6d 65 6e 74 20 70 41 72 67 20 69 73 20 63 61 73  ment pArg is cas
10dd0 74 20 74 6f 20 61 20 28 76 6f 69 64 20 2a 29 20  t to a (void *) 
10de0 61 6e 64 20 6d 61 64 65 0a 2a 2a 20 20 20 20 20  and made.**     
10df0 61 76 61 69 6c 61 62 6c 65 20 61 73 20 74 68 65  available as the
10e00 20 66 75 6e 63 74 69 6f 6e 20 75 73 65 72 2d 64   function user-d
10e10 61 74 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65  ata (sqlite3_use
10e20 72 5f 64 61 74 61 28 29 29 2e 20 54 68 65 0a 2a  r_data()). The.*
10e30 2a 20 20 20 20 20 46 75 6e 63 44 65 66 2e 66 6c  *     FuncDef.fl
10e40 61 67 73 20 76 61 72 69 61 62 6c 65 20 69 73 20  ags variable is 
10e50 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65  set to the value
10e60 20 70 61 73 73 65 64 20 61 73 20 74 68 65 20 66   passed as the f
10e70 6c 61 67 73 0a 2a 2a 20 20 20 20 20 70 61 72 61  lags.**     para
10e80 6d 65 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e  meter..*/.#defin
10e90 65 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65  e FUNCTION(zName
10ea0 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
10eb0 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e  C, xFunc) \.  {n
10ec0 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43  Arg, SQLITE_FUNC
10ed0 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45  _CONSTANT|SQLITE
10ee0 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54  _UTF8|(bNC*SQLIT
10ef0 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29  E_FUNC_NEEDCOLL)
10f00 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e  , \.   SQLITE_IN
10f10 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20  T_TO_PTR(iArg), 
10f20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20  0, xFunc, 0, 0, 
10f30 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d  0, #zName, {0} }
10f40 0a 23 64 65 66 69 6e 65 20 56 46 55 4e 43 54 49  .#define VFUNCTI
10f50 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  ON(zName, nArg, 
10f60 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63  iArg, bNC, xFunc
10f70 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c  ) \.  {nArg, SQL
10f80 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51  ITE_UTF8|(bNC*SQ
10f90 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
10fa0 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45  LL), \.   SQLITE
10fb0 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67  _INT_TO_PTR(iArg
10fc0 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20  ), 0, xFunc, 0, 
10fd0 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30  0, 0, #zName, {0
10fe0 7d 20 7d 0a 23 64 65 66 69 6e 65 20 44 46 55 4e  } }.#define DFUN
10ff0 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72  CTION(zName, nAr
11000 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
11010 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  unc) \.  {nArg, 
11020 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43  SQLITE_FUNC_SLOC
11030 48 4e 47 7c 53 51 4c 49 54 45 5f 55 54 46 38 2c  HNG|SQLITE_UTF8,
11040 20 5c 0a 20 20 20 30 2c 20 30 2c 20 78 46 75 6e   \.   0, 0, xFun
11050 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61  c, 0, 0, 0, #zNa
11060 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e  me, {0} }.#defin
11070 65 20 50 55 52 45 5f 44 41 54 45 28 7a 4e 61 6d  e PURE_DATE(zNam
11080 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
11090 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b  NC, xFunc) \.  {
110a0 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e  nArg, SQLITE_FUN
110b0 43 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c 49 54 45  C_SLOCHNG|SQLITE
110c0 5f 55 54 46 38 7c 53 51 4c 49 54 45 5f 46 55 4e  _UTF8|SQLITE_FUN
110d0 43 5f 43 4f 4e 53 54 41 4e 54 2c 20 5c 0a 20 20  C_CONSTANT, \.  
110e0 20 28 76 6f 69 64 2a 29 26 73 71 6c 69 74 65 33   (void*)&sqlite3
110f0 43 6f 6e 66 69 67 2c 20 30 2c 20 78 46 75 6e 63  Config, 0, xFunc
11100 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d  , 0, 0, 0, #zNam
11110 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65  e, {0} }.#define
11120 20 46 55 4e 43 54 49 4f 4e 32 28 7a 4e 61 6d 65   FUNCTION2(zName
11130 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
11140 43 2c 20 78 46 75 6e 63 2c 20 65 78 74 72 61 46  C, xFunc, extraF
11150 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  lags) \.  {nArg,
11160 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
11170 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38  TANT|SQLITE_UTF8
11180 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e  |(bNC*SQLITE_FUN
11190 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78 74 72  C_NEEDCOLL)|extr
111a0 61 46 6c 61 67 73 2c 5c 0a 20 20 20 53 51 4c 49  aFlags,\.   SQLI
111b0 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41  TE_INT_TO_PTR(iA
111c0 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30  rg), 0, xFunc, 0
111d0 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20  , 0, 0, #zName, 
111e0 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 53 54  {0} }.#define ST
111f0 52 5f 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65  R_FUNCTION(zName
11200 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c 20 62 4e  , nArg, pArg, bN
11210 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e  C, xFunc) \.  {n
11220 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43  Arg, SQLITE_FUNC
11230 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c 49 54 45 5f  _SLOCHNG|SQLITE_
11240 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45  UTF8|(bNC*SQLITE
11250 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c  _FUNC_NEEDCOLL),
11260 20 5c 0a 20 20 20 70 41 72 67 2c 20 30 2c 20 78   \.   pArg, 0, x
11270 46 75 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23  Func, 0, 0, 0, #
11280 7a 4e 61 6d 65 2c 20 7d 0a 23 64 65 66 69 6e 65  zName, }.#define
11290 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c   LIKEFUNC(zName,
112a0 20 6e 41 72 67 2c 20 61 72 67 2c 20 66 6c 61 67   nArg, arg, flag
112b0 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51  s) \.  {nArg, SQ
112c0 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41  LITE_FUNC_CONSTA
112d0 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 66  NT|SQLITE_UTF8|f
112e0 6c 61 67 73 2c 20 5c 0a 20 20 20 28 76 6f 69 64  lags, \.   (void
112f0 20 2a 29 61 72 67 2c 20 30 2c 20 6c 69 6b 65 46   *)arg, 0, likeF
11300 75 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a  unc, 0, 0, 0, #z
11310 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66  Name, {0} }.#def
11320 69 6e 65 20 41 47 47 52 45 47 41 54 45 28 7a 4e  ine AGGREGATE(zN
11330 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20  ame, nArg, arg, 
11340 6e 63 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61  nc, xStep, xFina
11350 6c 2c 20 78 56 61 6c 75 65 29 20 5c 0a 20 20 7b  l, xValue) \.  {
11360 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46  nArg, SQLITE_UTF
11370 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e  8|(nc*SQLITE_FUN
11380 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20  C_NEEDCOLL), \. 
11390 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f    SQLITE_INT_TO_
113a0 50 54 52 28 61 72 67 29 2c 20 30 2c 20 78 53 74  PTR(arg), 0, xSt
113b0 65 70 2c 78 46 69 6e 61 6c 2c 78 56 61 6c 75 65  ep,xFinal,xValue
113c0 2c 30 2c 23 7a 4e 61 6d 65 2c 20 7b 30 7d 7d 0a  ,0,#zName, {0}}.
113d0 23 64 65 66 69 6e 65 20 41 47 47 52 45 47 41 54  #define AGGREGAT
113e0 45 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  E2(zName, nArg, 
113f0 61 72 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20  arg, nc, xStep, 
11400 78 46 69 6e 61 6c 2c 20 65 78 74 72 61 46 6c 61  xFinal, extraFla
11410 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  gs) \.  {nArg, S
11420 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e 63 2a 53  QLITE_UTF8|(nc*S
11430 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
11440 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67 73 2c  OLL)|extraFlags,
11450 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54   \.   SQLITE_INT
11460 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c 20 30 2c  _TO_PTR(arg), 0,
11470 20 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c 78 46   xStep,xFinal,xF
11480 69 6e 61 6c 2c 30 2c 23 7a 4e 61 6d 65 2c 20 7b  inal,0,#zName, {
11490 30 7d 7d 0a 23 64 65 66 69 6e 65 20 57 41 47 47  0}}.#define WAGG
114a0 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41  REGATE(zName, nA
114b0 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53 74  rg, arg, nc, xSt
114c0 65 70 2c 20 78 46 69 6e 61 6c 2c 20 78 56 61 6c  ep, xFinal, xVal
114d0 75 65 2c 20 78 49 6e 76 65 72 73 65 2c 20 66 29  ue, xInverse, f)
114e0 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
114f0 54 45 5f 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49  TE_UTF8|(nc*SQLI
11500 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
11510 29 7c 66 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45  )|f, \.   SQLITE
11520 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72 67 29  _INT_TO_PTR(arg)
11530 2c 20 30 2c 20 78 53 74 65 70 2c 78 46 69 6e 61  , 0, xStep,xFina
11540 6c 2c 78 56 61 6c 75 65 2c 78 49 6e 76 65 72 73  l,xValue,xInvers
11550 65 2c 23 7a 4e 61 6d 65 2c 20 7b 30 7d 7d 0a 23  e,#zName, {0}}.#
11560 64 65 66 69 6e 65 20 49 4e 54 45 52 4e 41 4c 5f  define INTERNAL_
11570 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
11580 6e 41 72 67 2c 20 78 46 75 6e 63 29 20 5c 0a 20  nArg, xFunc) \. 
11590 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46   {nArg, SQLITE_F
115a0 55 4e 43 5f 49 4e 54 45 52 4e 41 4c 7c 53 51 4c  UNC_INTERNAL|SQL
115b0 49 54 45 5f 55 54 46 38 7c 53 51 4c 49 54 45 5f  ITE_UTF8|SQLITE_
115c0 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 2c 20 5c  FUNC_CONSTANT, \
115d0 0a 20 20 20 30 2c 20 30 2c 20 78 46 75 6e 63 2c  .   0, 0, xFunc,
115e0 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65   0, 0, 0, #zName
115f0 2c 20 7b 30 7d 20 7d 0a 0a 0a 2f 2a 0a 2a 2a 20  , {0} }.../*.** 
11600 41 6c 6c 20 63 75 72 72 65 6e 74 20 73 61 76 65  All current save
11610 70 6f 69 6e 74 73 20 61 72 65 20 73 74 6f 72 65  points are store
11620 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69  d in a linked li
11630 73 74 20 73 74 61 72 74 69 6e 67 20 61 74 0a 2a  st starting at.*
11640 2a 20 73 71 6c 69 74 65 33 2e 70 53 61 76 65 70  * sqlite3.pSavep
11650 6f 69 6e 74 2e 20 54 68 65 20 66 69 72 73 74 20  oint. The first 
11660 65 6c 65 6d 65 6e 74 20 69 6e 20 74 68 65 20 6c  element in the l
11670 69 73 74 20 69 73 20 74 68 65 20 6d 6f 73 74 20  ist is the most 
11680 72 65 63 65 6e 74 6c 79 0a 2a 2a 20 6f 70 65 6e  recently.** open
11690 65 64 20 73 61 76 65 70 6f 69 6e 74 2e 20 53 61  ed savepoint. Sa
116a0 76 65 70 6f 69 6e 74 73 20 61 72 65 20 61 64 64  vepoints are add
116b0 65 64 20 74 6f 20 74 68 65 20 6c 69 73 74 20 62  ed to the list b
116c0 79 20 74 68 65 20 76 64 62 65 0a 2a 2a 20 4f 50  y the vdbe.** OP
116d0 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74 72  _Savepoint instr
116e0 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63  uction..*/.struc
116f0 74 20 53 61 76 65 70 6f 69 6e 74 20 7b 0a 20 20  t Savepoint {.  
11700 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
11710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11720 20 20 20 20 2f 2a 20 53 61 76 65 70 6f 69 6e 74      /* Savepoint
11730 20 6e 61 6d 65 20 28 6e 75 6c 2d 74 65 72 6d 69   name (nul-termi
11740 6e 61 74 65 64 29 20 2a 2f 0a 20 20 69 36 34 20  nated) */.  i64 
11750 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 20 20  nDeferredCons;  
11760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11770 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64 65 66  /* Number of def
11780 65 72 72 65 64 20 66 6b 20 76 69 6f 6c 61 74 69  erred fk violati
11790 6f 6e 73 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65  ons */.  i64 nDe
117a0 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20 20  ferredImmCons;  
117b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
117c0 4e 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72  Number of deferr
117d0 65 64 20 69 6d 6d 20 66 6b 2e 20 2a 2f 0a 20 20  ed imm fk. */.  
117e0 53 61 76 65 70 6f 69 6e 74 20 2a 70 4e 65 78 74  Savepoint *pNext
117f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
11800 20 20 20 20 2f 2a 20 50 61 72 65 6e 74 20 73 61      /* Parent sa
11810 76 65 70 6f 69 6e 74 20 28 69 66 20 61 6e 79 29  vepoint (if any)
11820 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
11830 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20  e following are 
11840 75 73 65 64 20 61 73 20 74 68 65 20 73 65 63 6f  used as the seco
11850 6e 64 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20  nd parameter to 
11860 73 71 6c 69 74 65 33 53 61 76 65 70 6f 69 6e 74  sqlite3Savepoint
11870 28 29 2c 0a 2a 2a 20 61 6e 64 20 61 73 20 74 68  (),.** and as th
11880 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74 6f  e P1 argument to
11890 20 74 68 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e   the OP_Savepoin
118a0 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
118b0 2f 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f  /.#define SAVEPO
118c0 49 4e 54 5f 42 45 47 49 4e 20 20 20 20 20 20 30  INT_BEGIN      0
118d0 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49  .#define SAVEPOI
118e0 4e 54 5f 52 45 4c 45 41 53 45 20 20 20 20 31 0a  NT_RELEASE    1.
118f0 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e  #define SAVEPOIN
11900 54 5f 52 4f 4c 4c 42 41 43 4b 20 20 20 32 0a 0a  T_ROLLBACK   2..
11910 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 69  ./*.** Each SQLi
11920 74 65 20 6d 6f 64 75 6c 65 20 28 76 69 72 74 75  te module (virtu
11930 61 6c 20 74 61 62 6c 65 20 64 65 66 69 6e 69 74  al table definit
11940 69 6f 6e 29 20 69 73 20 64 65 66 69 6e 65 64 20  ion) is defined 
11950 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63  by an.** instanc
11960 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
11970 6e 67 20 73 74 72 75 63 74 75 72 65 2c 20 73 74  ng structure, st
11980 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69  ored in the sqli
11990 74 65 33 2e 61 4d 6f 64 75 6c 65 0a 2a 2a 20 68  te3.aModule.** h
119a0 61 73 68 20 74 61 62 6c 65 2e 0a 2a 2f 0a 73 74  ash table..*/.st
119b0 72 75 63 74 20 4d 6f 64 75 6c 65 20 7b 0a 20 20  ruct Module {.  
119c0 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f  const sqlite3_mo
119d0 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 20 20  dule *pModule;  
119e0 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b       /* Callback
119f0 20 70 6f 69 6e 74 65 72 73 20 2a 2f 0a 20 20 63   pointers */.  c
11a00 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65  onst char *zName
11a10 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
11a20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 70 61 73 73      /* Name pass
11a30 65 64 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64  ed to create_mod
11a40 75 6c 65 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e  ule() */.  int n
11a50 52 65 66 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20  RefModule;      
11a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a70 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69  /* Number of poi
11a80 6e 74 65 72 73 20 74 6f 20 74 68 69 73 20 6f 62  nters to this ob
11a90 6a 65 63 74 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  ject */.  void *
11aa0 70 41 75 78 3b 20 20 20 20 20 20 20 20 20 20 20  pAux;           
11ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
11ac0 2a 20 70 41 75 78 20 70 61 73 73 65 64 20 74 6f  * pAux passed to
11ad0 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29   create_module()
11ae0 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 44 65   */.  void (*xDe
11af0 73 74 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b 20  stroy)(void *); 
11b00 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f             /* Mo
11b10 64 75 6c 65 20 64 65 73 74 72 75 63 74 6f 72 20  dule destructor 
11b20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 54 61  function */.  Ta
11b30 62 6c 65 20 2a 70 45 70 6f 54 61 62 3b 20 20 20  ble *pEpoTab;   
11b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b50 20 20 20 2f 2a 20 45 70 6f 6e 79 6d 6f 75 73 20     /* Eponymous 
11b60 74 61 62 6c 65 20 66 6f 72 20 74 68 69 73 20 6d  table for this m
11b70 6f 64 75 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  odule */.};../*.
11b80 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  ** information a
11b90 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e  bout each column
11ba0 20 6f 66 20 61 6e 20 53 51 4c 20 74 61 62 6c 65   of an SQL table
11bb0 20 69 73 20 68 65 6c 64 20 69 6e 20 61 6e 20 69   is held in an i
11bc0 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68  nstance.** of th
11bd0 69 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f  is structure..*/
11be0 0a 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 7b  .struct Column {
11bf0 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
11c00 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
11c10 68 69 73 20 63 6f 6c 75 6d 6e 2c 20 5c 30 30 30  his column, \000
11c20 2c 20 74 68 65 6e 20 74 68 65 20 74 79 70 65 20  , then the type 
11c30 2a 2f 0a 20 20 45 78 70 72 20 2a 70 44 66 6c 74  */.  Expr *pDflt
11c40 3b 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74  ;     /* Default
11c50 20 76 61 6c 75 65 20 6f 72 20 47 45 4e 45 52 41   value or GENERA
11c60 54 45 44 20 41 4c 57 41 59 53 20 41 53 20 76 61  TED ALWAYS AS va
11c70 6c 75 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  lue */.  char *z
11c80 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c  Coll;     /* Col
11c90 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2e  lating sequence.
11ca0 20 20 49 66 20 4e 55 4c 4c 2c 20 75 73 65 20 74    If NULL, use t
11cb0 68 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20  he default */.  
11cc0 75 38 20 6e 6f 74 4e 75 6c 6c 3b 20 20 20 20 20  u8 notNull;     
11cd0 20 2f 2a 20 41 6e 20 4f 45 5f 20 63 6f 64 65 20   /* An OE_ code 
11ce0 66 6f 72 20 68 61 6e 64 6c 69 6e 67 20 61 20 4e  for handling a N
11cf0 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69  OT NULL constrai
11d00 6e 74 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66  nt */.  char aff
11d10 69 6e 69 74 79 3b 20 20 20 2f 2a 20 4f 6e 65 20  inity;   /* One 
11d20 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46  of the SQLITE_AF
11d30 46 5f 2e 2e 2e 20 76 61 6c 75 65 73 20 2a 2f 0a  F_... values */.
11d40 20 20 75 38 20 73 7a 45 73 74 3b 20 20 20 20 20    u8 szEst;     
11d50 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20     /* Estimated 
11d60 73 69 7a 65 20 6f 66 20 76 61 6c 75 65 20 69 6e  size of value in
11d70 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e 20 73 69   this column. si
11d80 7a 65 6f 66 28 49 4e 54 29 3d 3d 31 20 2a 2f 0a  zeof(INT)==1 */.
11d90 20 20 75 38 20 63 6f 6c 46 6c 61 67 73 3b 20 20    u8 colFlags;  
11da0 20 20 20 2f 2a 20 42 6f 6f 6c 65 61 6e 20 70 72     /* Boolean pr
11db0 6f 70 65 72 74 69 65 73 2e 20 20 53 65 65 20 43  operties.  See C
11dc0 4f 4c 46 4c 41 47 5f 20 64 65 66 69 6e 65 73 20  OLFLAG_ defines 
11dd0 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20  below */.};../* 
11de0 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
11df0 6f 72 20 43 6f 6c 75 6d 6e 2e 63 6f 6c 46 6c 61  or Column.colFla
11e00 67 73 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43  gs:.*/.#define C
11e10 4f 4c 46 4c 41 47 5f 50 52 49 4d 4b 45 59 20 20  OLFLAG_PRIMKEY  
11e20 20 30 78 30 30 30 31 20 20 20 2f 2a 20 43 6f 6c   0x0001   /* Col
11e30 75 6d 6e 20 69 73 20 70 61 72 74 20 6f 66 20 74  umn is part of t
11e40 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a  he primary key *
11e50 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41  /.#define COLFLA
11e60 47 5f 48 49 44 44 45 4e 20 20 20 20 30 78 30 30  G_HIDDEN    0x00
11e70 30 32 20 20 20 2f 2a 20 41 20 68 69 64 64 65 6e  02   /* A hidden
11e80 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 76 69 72   column in a vir
11e90 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64  tual table */.#d
11ea0 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 48 41  efine COLFLAG_HA
11eb0 53 54 59 50 45 20 20 20 30 78 30 30 30 34 20 20  STYPE   0x0004  
11ec0 20 2f 2a 20 54 79 70 65 20 6e 61 6d 65 20 66 6f   /* Type name fo
11ed0 6c 6c 6f 77 73 20 63 6f 6c 75 6d 6e 20 6e 61 6d  llows column nam
11ee0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c  e */.#define COL
11ef0 46 4c 41 47 5f 55 4e 49 51 55 45 20 20 20 20 30  FLAG_UNIQUE    0
11f00 78 30 30 30 38 20 20 20 2f 2a 20 43 6f 6c 75 6d  x0008   /* Colum
11f10 6e 20 64 65 66 20 63 6f 6e 74 61 69 6e 73 20 22  n def contains "
11f20 55 4e 49 51 55 45 22 20 6f 72 20 22 50 4b 22 20  UNIQUE" or "PK" 
11f30 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c  */.#define COLFL
11f40 41 47 5f 53 4f 52 54 45 52 52 45 46 20 30 78 30  AG_SORTERREF 0x0
11f50 30 31 30 20 20 20 2f 2a 20 55 73 65 20 73 6f 72  010   /* Use sor
11f60 74 65 72 2d 72 65 66 73 20 77 69 74 68 20 74 68  ter-refs with th
11f70 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 64 65  is column */.#de
11f80 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 56 49 52  fine COLFLAG_VIR
11f90 54 55 41 4c 20 20 20 30 78 30 30 32 30 20 20 20  TUAL   0x0020   
11fa0 2f 2a 20 47 45 4e 45 52 41 54 45 44 20 41 4c 57  /* GENERATED ALW
11fb0 41 59 53 20 41 53 20 2e 2e 2e 20 56 49 52 54 55  AYS AS ... VIRTU
11fc0 41 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f  AL */.#define CO
11fd0 4c 46 4c 41 47 5f 53 54 4f 52 45 44 20 20 20 20  LFLAG_STORED    
11fe0 30 78 30 30 34 30 20 20 20 2f 2a 20 47 45 4e 45  0x0040   /* GENE
11ff0 52 41 54 45 44 20 41 4c 57 41 59 53 20 41 53 20  RATED ALWAYS AS 
12000 2e 2e 2e 20 53 54 4f 52 45 44 20 2a 2f 0a 0a 2f  ... STORED */../
12010 2a 0a 2a 2a 20 41 20 22 43 6f 6c 6c 61 74 69 6e  *.** A "Collatin
12020 67 20 53 65 71 75 65 6e 63 65 22 20 69 73 20 64  g Sequence" is d
12030 65 66 69 6e 65 64 20 62 79 20 61 6e 20 69 6e 73  efined by an ins
12040 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
12050 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74  lowing.** struct
12060 75 72 65 2e 20 43 6f 6e 63 65 70 74 75 61 6c 6c  ure. Conceptuall
12070 79 2c 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 73  y, a collating s
12080 65 71 75 65 6e 63 65 20 63 6f 6e 73 69 73 74 73  equence consists
12090 20 6f 66 20 61 20 6e 61 6d 65 20 61 6e 64 0a 2a   of a name and.*
120a0 2a 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 20 72  * a comparison r
120b0 6f 75 74 69 6e 65 20 74 68 61 74 20 64 65 66 69  outine that defi
120c0 6e 65 73 20 74 68 65 20 6f 72 64 65 72 20 6f 66  nes the order of
120d0 20 74 68 61 74 20 73 65 71 75 65 6e 63 65 2e 0a   that sequence..
120e0 2a 2a 0a 2a 2a 20 49 66 20 43 6f 6c 6c 53 65 71  **.** If CollSeq
120f0 2e 78 43 6d 70 20 69 73 20 4e 55 4c 4c 2c 20 69  .xCmp is NULL, i
12100 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65  t means that the
12110 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  .** collating se
12120 71 75 65 6e 63 65 20 69 73 20 75 6e 64 65 66 69  quence is undefi
12130 6e 65 64 2e 20 20 49 6e 64 69 63 65 73 20 62 75  ned.  Indices bu
12140 69 6c 74 20 6f 6e 20 61 6e 20 75 6e 64 65 66 69  ilt on an undefi
12150 6e 65 64 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67  ned.** collating
12160 20 73 65 71 75 65 6e 63 65 20 6d 61 79 20 6e 6f   sequence may no
12170 74 20 62 65 20 72 65 61 64 20 6f 72 20 77 72 69  t be read or wri
12180 74 74 65 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tten..*/.struct 
12190 43 6f 6c 6c 53 65 71 20 7b 0a 20 20 63 68 61 72  CollSeq {.  char
121a0 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
121b0 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65    /* Name of the
121c0 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
121d0 6e 63 65 2c 20 55 54 46 2d 38 20 65 6e 63 6f 64  nce, UTF-8 encod
121e0 65 64 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20  ed */.  u8 enc; 
121f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
12200 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 68   Text encoding h
12210 61 6e 64 6c 65 64 20 62 79 20 78 43 6d 70 28 29  andled by xCmp()
12220 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73 65   */.  void *pUse
12230 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  r;          /* F
12240 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f  irst argument to
12250 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20 69 6e 74   xCmp() */.  int
12260 20 28 2a 78 43 6d 70 29 28 76 6f 69 64 2a 2c 69   (*xCmp)(void*,i
12270 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c  nt, const void*,
12280 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64   int, const void
12290 2a 29 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44 65  *);.  void (*xDe
122a0 6c 29 28 76 6f 69 64 2a 29 3b 20 20 2f 2a 20 44  l)(void*);  /* D
122b0 65 73 74 72 75 63 74 6f 72 20 66 6f 72 20 70 55  estructor for pU
122c0 73 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ser */.};../*.**
122d0 20 41 20 73 6f 72 74 20 6f 72 64 65 72 20 63 61   A sort order ca
122e0 6e 20 62 65 20 65 69 74 68 65 72 20 41 53 43 20  n be either ASC 
122f0 6f 72 20 44 45 53 43 2e 0a 2a 2f 0a 23 64 65 66  or DESC..*/.#def
12300 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 41 53  ine SQLITE_SO_AS
12310 43 20 20 20 20 20 20 20 30 20 20 2f 2a 20 53 6f  C       0  /* So
12320 72 74 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20  rt in ascending 
12330 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65  order */.#define
12340 20 53 51 4c 49 54 45 5f 53 4f 5f 44 45 53 43 20   SQLITE_SO_DESC 
12350 20 20 20 20 20 31 20 20 2f 2a 20 53 6f 72 74 20       1  /* Sort 
12360 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64  in ascending ord
12370 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  er */.#define SQ
12380 4c 49 54 45 5f 53 4f 5f 55 4e 44 45 46 49 4e 45  LITE_SO_UNDEFINE
12390 44 20 2d 31 20 2f 2a 20 4e 6f 20 73 6f 72 74 20  D -1 /* No sort 
123a0 6f 72 64 65 72 20 73 70 65 63 69 66 69 65 64 20  order specified 
123b0 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e  */../*.** Column
123c0 20 61 66 66 69 6e 69 74 79 20 74 79 70 65 73 2e   affinity types.
123d0 0a 2a 2a 0a 2a 2a 20 54 68 65 73 65 20 75 73 65  .**.** These use
123e0 64 20 74 6f 20 68 61 76 65 20 6d 6e 65 6d 6f 6e  d to have mnemon
123f0 69 63 20 6e 61 6d 65 20 6c 69 6b 65 20 27 69 27  ic name like 'i'
12400 20 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f   for SQLITE_AFF_
12410 49 4e 54 45 47 45 52 20 61 6e 64 0a 2a 2a 20 27  INTEGER and.** '
12420 74 27 20 66 6f 72 20 53 51 4c 49 54 45 5f 41 46  t' for SQLITE_AF
12430 46 5f 54 45 58 54 2e 20 20 42 75 74 20 77 65 20  F_TEXT.  But we 
12440 63 61 6e 20 73 61 76 65 20 61 20 6c 69 74 74 6c  can save a littl
12450 65 20 73 70 61 63 65 20 61 6e 64 20 69 6d 70 72  e space and impr
12460 6f 76 65 0a 2a 2a 20 74 68 65 20 73 70 65 65 64  ove.** the speed
12470 20 61 20 6c 69 74 74 6c 65 20 62 79 20 6e 75 6d   a little by num
12480 62 65 72 69 6e 67 20 74 68 65 20 76 61 6c 75 65  bering the value
12490 73 20 63 6f 6e 73 65 63 75 74 69 76 65 6c 79 2e  s consecutively.
124a0 0a 2a 2a 0a 2a 2a 20 42 75 74 20 72 61 74 68 65  .**.** But rathe
124b0 72 20 74 68 61 6e 20 73 74 61 72 74 20 77 69 74  r than start wit
124c0 68 20 30 20 6f 72 20 31 2c 20 77 65 20 62 65 67  h 0 or 1, we beg
124d0 69 6e 20 77 69 74 68 20 27 41 27 2e 20 20 54 68  in with 'A'.  Th
124e0 61 74 20 77 61 79 2c 0a 2a 2a 20 77 68 65 6e 20  at way,.** when 
124f0 6d 75 6c 74 69 70 6c 65 20 61 66 66 69 6e 69 74  multiple affinit
12500 79 20 74 79 70 65 73 20 61 72 65 20 63 6f 6e 63  y types are conc
12510 61 74 65 6e 61 74 65 64 20 69 6e 74 6f 20 61 20  atenated into a 
12520 73 74 72 69 6e 67 20 61 6e 64 0a 2a 2a 20 75 73  string and.** us
12530 65 64 20 61 73 20 74 68 65 20 50 34 20 6f 70 65  ed as the P4 ope
12540 72 61 6e 64 2c 20 74 68 65 79 20 77 69 6c 6c 20  rand, they will 
12550 62 65 20 6d 6f 72 65 20 72 65 61 64 61 62 6c 65  be more readable
12560 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 61 6c 73  ..**.** Note als
12570 6f 20 74 68 61 74 20 74 68 65 20 6e 75 6d 65 72  o that the numer
12580 69 63 20 74 79 70 65 73 20 61 72 65 20 67 72 6f  ic types are gro
12590 75 70 65 64 20 74 6f 67 65 74 68 65 72 20 73 6f  uped together so
125a0 20 74 68 61 74 20 74 65 73 74 69 6e 67 0a 2a 2a   that testing.**
125b0 20 66 6f 72 20 61 20 6e 75 6d 65 72 69 63 20 74   for a numeric t
125c0 79 70 65 20 69 73 20 61 20 73 69 6e 67 6c 65 20  ype is a single 
125d0 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 41 6e 64  comparison.  And
125e0 20 74 68 65 20 42 4c 4f 42 20 74 79 70 65 20 69   the BLOB type i
125f0 73 20 66 69 72 73 74 2e 0a 2a 2f 0a 23 64 65 66  s first..*/.#def
12600 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e  ine SQLITE_AFF_N
12610 4f 4e 45 20 20 20 20 20 30 78 34 30 20 20 2f 2a  ONE     0x40  /*
12620 20 27 40 27 20 2a 2f 0a 23 64 65 66 69 6e 65 20   '@' */.#define 
12630 53 51 4c 49 54 45 5f 41 46 46 5f 42 4c 4f 42 20  SQLITE_AFF_BLOB 
12640 20 20 20 20 30 78 34 31 20 20 2f 2a 20 27 41 27      0x41  /* 'A'
12650 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
12660 54 45 5f 41 46 46 5f 54 45 58 54 20 20 20 20 20  TE_AFF_TEXT     
12670 30 78 34 32 20 20 2f 2a 20 27 42 27 20 2a 2f 0a  0x42  /* 'B' */.
12680 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
12690 46 46 5f 4e 55 4d 45 52 49 43 20 20 30 78 34 33  FF_NUMERIC  0x43
126a0 20 20 2f 2a 20 27 43 27 20 2a 2f 0a 23 64 65 66    /* 'C' */.#def
126b0 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 49  ine SQLITE_AFF_I
126c0 4e 54 45 47 45 52 20 20 30 78 34 34 20 20 2f 2a  NTEGER  0x44  /*
126d0 20 27 44 27 20 2a 2f 0a 23 64 65 66 69 6e 65 20   'D' */.#define 
126e0 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 20  SQLITE_AFF_REAL 
126f0 20 20 20 20 30 78 34 35 20 20 2f 2a 20 27 45 27      0x45  /* 'E'
12700 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 73 71 6c   */..#define sql
12710 69 74 65 33 49 73 4e 75 6d 65 72 69 63 41 66 66  ite3IsNumericAff
12720 69 6e 69 74 79 28 58 29 20 20 28 28 58 29 3e 3d  inity(X)  ((X)>=
12730 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52  SQLITE_AFF_NUMER
12740 49 43 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53  IC)../*.** The S
12750 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 76  QLITE_AFF_MASK v
12760 61 6c 75 65 73 20 6d 61 73 6b 73 20 6f 66 66 20  alues masks off 
12770 74 68 65 20 73 69 67 6e 69 66 69 63 61 6e 74 20  the significant 
12780 62 69 74 73 20 6f 66 20 61 6e 0a 2a 2a 20 61 66  bits of an.** af
12790 66 69 6e 69 74 79 20 76 61 6c 75 65 2e 0a 2a 2f  finity value..*/
127a0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
127b0 41 46 46 5f 4d 41 53 4b 20 20 20 20 20 30 78 34  AFF_MASK     0x4
127c0 37 0a 0a 2f 2a 0a 2a 2a 20 41 64 64 69 74 69 6f  7../*.** Additio
127d0 6e 61 6c 20 62 69 74 20 76 61 6c 75 65 73 20 74  nal bit values t
127e0 68 61 74 20 63 61 6e 20 62 65 20 4f 52 65 64 20  hat can be ORed 
127f0 77 69 74 68 20 61 6e 20 61 66 66 69 6e 69 74 79  with an affinity
12800 20 77 69 74 68 6f 75 74 0a 2a 2a 20 63 68 61 6e   without.** chan
12810 67 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74  ging the affinit
12820 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c  y..**.** The SQL
12830 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 66 6c 61 67  ITE_NOTNULL flag
12840 20 69 73 20 61 20 63 6f 6d 62 69 6e 61 74 69 6f   is a combinatio
12850 6e 20 6f 66 20 4e 55 4c 4c 45 51 20 61 6e 64 20  n of NULLEQ and 
12860 4a 55 4d 50 49 46 4e 55 4c 4c 2e 0a 2a 2a 20 49  JUMPIFNULL..** I
12870 74 20 63 61 75 73 65 73 20 61 6e 20 61 73 73 65  t causes an asse
12880 72 74 28 29 20 74 6f 20 66 69 72 65 20 69 66 20  rt() to fire if 
12890 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 74  either operand t
128a0 6f 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 0a 2a  o a comparison.*
128b0 2a 20 6f 70 65 72 61 74 6f 72 20 69 73 20 4e 55  * operator is NU
128c0 4c 4c 2e 20 20 49 74 20 69 73 20 61 64 64 65 64  LL.  It is added
128d0 20 74 6f 20 63 65 72 74 61 69 6e 20 63 6f 6d 70   to certain comp
128e0 61 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72 73  arison operators
128f0 20 74 6f 0a 2a 2a 20 70 72 6f 76 65 20 74 68 61   to.** prove tha
12900 74 20 74 68 65 20 6f 70 65 72 61 6e 64 73 20 61  t the operands a
12910 72 65 20 61 6c 77 61 79 73 20 4e 4f 54 20 4e 55  re always NOT NU
12920 4c 4c 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  LL..*/.#define S
12930 51 4c 49 54 45 5f 4b 45 45 50 4e 55 4c 4c 20 20  QLITE_KEEPNULL  
12940 20 20 20 30 78 30 38 20 20 2f 2a 20 55 73 65 64     0x08  /* Used
12950 20 62 79 20 76 65 63 74 6f 72 20 3d 3d 20 6f 72   by vector == or
12960 20 3c 3e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53   <> */.#define S
12970 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c  QLITE_JUMPIFNULL
12980 20 20 20 30 78 31 30 20 20 2f 2a 20 6a 75 6d 70     0x10  /* jump
12990 73 20 69 66 20 65 69 74 68 65 72 20 6f 70 65 72  s if either oper
129a0 61 6e 64 20 69 73 20 4e 55 4c 4c 20 2a 2f 0a 23  and is NULL */.#
129b0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 54  define SQLITE_ST
129c0 4f 52 45 50 32 20 20 20 20 20 20 30 78 32 30 20  OREP2      0x20 
129d0 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
129e0 20 69 6e 20 72 65 67 5b 50 32 5d 20 72 61 74 68   in reg[P2] rath
129f0 65 72 20 74 68 61 6e 20 6a 75 6d 70 20 2a 2f 0a  er than jump */.
12a00 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e  #define SQLITE_N
12a10 55 4c 4c 45 51 20 20 20 20 20 20 20 30 78 38 30  ULLEQ       0x80
12a20 20 20 2f 2a 20 4e 55 4c 4c 3d 4e 55 4c 4c 20 2a    /* NULL=NULL *
12a30 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
12a40 5f 4e 4f 54 4e 55 4c 4c 20 20 20 20 20 20 30 78  _NOTNULL      0x
12a50 39 30 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68  90  /* Assert th
12a60 61 74 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20  at operands are 
12a70 6e 65 76 65 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 2f  never NULL */../
12a80 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 20 6f  *.** An object o
12a90 66 20 74 68 69 73 20 74 79 70 65 20 69 73 20 63  f this type is c
12aa0 72 65 61 74 65 64 20 66 6f 72 20 65 61 63 68 20  reated for each 
12ab0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 70 72  virtual table pr
12ac0 65 73 65 6e 74 20 69 6e 0a 2a 2a 20 74 68 65 20  esent in.** the 
12ad0 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e  database schema.
12ae0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 64 61  .**.** If the da
12af0 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 69 73  tabase schema is
12b00 20 73 68 61 72 65 64 2c 20 74 68 65 6e 20 74 68   shared, then th
12b10 65 72 65 20 69 73 20 6f 6e 65 20 69 6e 73 74 61  ere is one insta
12b20 6e 63 65 20 6f 66 20 74 68 69 73 0a 2a 2a 20 73  nce of this.** s
12b30 74 72 75 63 74 75 72 65 20 66 6f 72 20 65 61 63  tructure for eac
12b40 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  h database conne
12b50 63 74 69 6f 6e 20 28 73 71 6c 69 74 65 33 2a 29  ction (sqlite3*)
12b60 20 74 68 61 74 20 75 73 65 73 20 74 68 65 20 73   that uses the s
12b70 68 61 72 65 64 0a 2a 2a 20 73 63 68 65 6d 61 2e  hared.** schema.
12b80 20 54 68 69 73 20 69 73 20 62 65 63 61 75 73 65   This is because
12b90 20 65 61 63 68 20 64 61 74 61 62 61 73 65 20 63   each database c
12ba0 6f 6e 6e 65 63 74 69 6f 6e 20 72 65 71 75 69 72  onnection requir
12bb0 65 73 20 69 74 73 20 6f 77 6e 20 75 6e 69 71 75  es its own uniqu
12bc0 65 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66  e.** instance of
12bd0 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61   the sqlite3_vta
12be0 62 2a 20 68 61 6e 64 6c 65 20 75 73 65 64 20 74  b* handle used t
12bf0 6f 20 61 63 63 65 73 73 20 74 68 65 20 76 69 72  o access the vir
12c00 74 75 61 6c 20 74 61 62 6c 65 0a 2a 2a 20 69 6d  tual table.** im
12c10 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 73 71  plementation. sq
12c20 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64  lite3_vtab* hand
12c30 6c 65 73 20 63 61 6e 20 6e 6f 74 20 62 65 20 73  les can not be s
12c40 68 61 72 65 64 20 62 65 74 77 65 65 6e 0a 2a 2a  hared between.**
12c50 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
12c60 74 69 6f 6e 73 2c 20 65 76 65 6e 20 77 68 65 6e  tions, even when
12c70 20 74 68 65 20 72 65 73 74 20 6f 66 20 74 68 65   the rest of the
12c80 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62   in-memory datab
12c90 61 73 65 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73  ase.** schema is
12ca0 20 73 68 61 72 65 64 2c 20 61 73 20 74 68 65 20   shared, as the 
12cb0 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f  implementation o
12cc0 66 74 65 6e 20 73 74 6f 72 65 73 20 74 68 65 20  ften stores the 
12cd0 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e  database.** conn
12ce0 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 70 61  ection handle pa
12cf0 73 73 65 64 20 74 6f 20 69 74 20 76 69 61 20 74  ssed to it via t
12d00 68 65 20 78 43 6f 6e 6e 65 63 74 28 29 20 6f 72  he xConnect() or
12d10 20 78 43 72 65 61 74 65 28 29 20 6d 65 74 68 6f   xCreate() metho
12d20 64 0a 2a 2a 20 64 75 72 69 6e 67 20 69 6e 69 74  d.** during init
12d30 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 74 65 72  ialization inter
12d40 6e 61 6c 6c 79 2e 20 54 68 69 73 20 64 61 74 61  nally. This data
12d50 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
12d60 68 61 6e 64 6c 65 20 6d 61 79 0a 2a 2a 20 74 68  handle may.** th
12d70 65 6e 20 62 65 20 75 73 65 64 20 62 79 20 74 68  en be used by th
12d80 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
12d90 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74  implementation t
12da0 6f 20 61 63 63 65 73 73 20 72 65 61 6c 20 74 61  o access real ta
12db0 62 6c 65 73 0a 2a 2a 20 77 69 74 68 69 6e 20 74  bles.** within t
12dc0 68 65 20 64 61 74 61 62 61 73 65 2e 20 53 6f 20  he database. So 
12dd0 74 68 61 74 20 74 68 65 79 20 61 70 70 65 61 72  that they appear
12de0 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 20   as part of the 
12df0 63 61 6c 6c 65 72 73 0a 2a 2a 20 74 72 61 6e 73  callers.** trans
12e00 61 63 74 69 6f 6e 2c 20 74 68 65 73 65 20 61 63  action, these ac
12e10 63 65 73 73 65 73 20 6e 65 65 64 20 74 6f 20 62  cesses need to b
12e20 65 20 6d 61 64 65 20 76 69 61 20 74 68 65 20 73  e made via the s
12e30 61 6d 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  ame database.** 
12e40 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 20 74 68  connection as th
12e50 61 74 20 75 73 65 64 20 74 6f 20 65 78 65 63 75  at used to execu
12e60 74 65 20 53 51 4c 20 6f 70 65 72 61 74 69 6f 6e  te SQL operation
12e70 73 20 6f 6e 20 74 68 65 20 76 69 72 74 75 61 6c  s on the virtual
12e80 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c   table..**.** Al
12e90 6c 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73  l VTable objects
12ea0 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64   that correspond
12eb0 20 74 6f 20 61 20 73 69 6e 67 6c 65 20 74 61 62   to a single tab
12ec0 6c 65 20 69 6e 20 61 20 73 68 61 72 65 64 0a 2a  le in a shared.*
12ed0 2a 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  * database schem
12ee0 61 20 61 72 65 20 69 6e 69 74 69 61 6c 6c 79 20  a are initially 
12ef0 73 74 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b  stored in a link
12f00 65 64 2d 6c 69 73 74 20 70 6f 69 6e 74 65 64 20  ed-list pointed 
12f10 74 6f 20 62 79 0a 2a 2a 20 74 68 65 20 54 61 62  to by.** the Tab
12f20 6c 65 2e 70 56 54 61 62 6c 65 20 6d 65 6d 62 65  le.pVTable membe
12f30 72 20 76 61 72 69 61 62 6c 65 20 6f 66 20 74 68  r variable of th
12f40 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
12f50 54 61 62 6c 65 20 6f 62 6a 65 63 74 2e 0a 2a 2a  Table object..**
12f60 20 57 68 65 6e 20 61 6e 20 73 71 6c 69 74 65 33   When an sqlite3
12f70 5f 70 72 65 70 61 72 65 28 29 20 6f 70 65 72 61  _prepare() opera
12f80 74 69 6f 6e 20 69 73 20 72 65 71 75 69 72 65 64  tion is required
12f90 20 74 6f 20 61 63 63 65 73 73 20 74 68 65 20 76   to access the v
12fa0 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 2c  irtual.** table,
12fb0 20 69 74 20 73 65 61 72 63 68 65 73 20 74 68 65   it searches the
12fc0 20 6c 69 73 74 20 66 6f 72 20 74 68 65 20 56 54   list for the VT
12fd0 61 62 6c 65 20 74 68 61 74 20 63 6f 72 72 65 73  able that corres
12fe0 70 6f 6e 64 73 20 74 6f 20 74 68 65 0a 2a 2a 20  ponds to the.** 
12ff0 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
13000 69 6f 6e 20 64 6f 69 6e 67 20 74 68 65 20 70 72  ion doing the pr
13010 65 70 61 72 69 6e 67 20 73 6f 20 61 73 20 74 6f  eparing so as to
13020 20 75 73 65 20 74 68 65 20 63 6f 72 72 65 63 74   use the correct
13030 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 76 74 61 62  .** sqlite3_vtab
13040 2a 20 68 61 6e 64 6c 65 20 69 6e 20 74 68 65 20  * handle in the 
13050 63 6f 6d 70 69 6c 65 64 20 71 75 65 72 79 2e 0a  compiled query..
13060 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 69 6e  **.** When an in
13070 2d 6d 65 6d 6f 72 79 20 54 61 62 6c 65 20 6f 62  -memory Table ob
13080 6a 65 63 74 20 69 73 20 64 65 6c 65 74 65 64 20  ject is deleted 
13090 28 66 6f 72 20 65 78 61 6d 70 6c 65 20 77 68 65  (for example whe
130a0 6e 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20  n the.** schema 
130b0 69 73 20 62 65 69 6e 67 20 72 65 6c 6f 61 64 65  is being reloade
130c0 64 20 66 6f 72 20 73 6f 6d 65 20 72 65 61 73 6f  d for some reaso
130d0 6e 29 2c 20 74 68 65 20 56 54 61 62 6c 65 20 6f  n), the VTable o
130e0 62 6a 65 63 74 73 20 61 72 65 20 6e 6f 74 0a 2a  bjects are not.*
130f0 2a 20 64 65 6c 65 74 65 64 20 61 6e 64 20 74 68  * deleted and th
13100 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20  e sqlite3_vtab* 
13110 68 61 6e 64 6c 65 73 20 61 72 65 20 6e 6f 74 20  handles are not 
13120 78 44 69 73 63 6f 6e 6e 65 63 74 28 29 65 64 0a  xDisconnect()ed.
13130 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20  ** immediately. 
13140 49 6e 73 74 65 61 64 2c 20 74 68 65 79 20 61 72  Instead, they ar
13150 65 20 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68 65  e moved from the
13160 20 54 61 62 6c 65 2e 70 56 54 61 62 6c 65 20 6c   Table.pVTable l
13170 69 73 74 20 74 6f 0a 2a 2a 20 61 6e 6f 74 68 65  ist to.** anothe
13180 72 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68 65  r linked list he
13190 61 64 65 64 20 62 79 20 74 68 65 20 73 71 6c 69  aded by the sqli
131a0 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74 20  te3.pDisconnect 
131b0 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 0a 2a 2a  member of the.**
131c0 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 73   corresponding s
131d0 71 6c 69 74 65 33 20 73 74 72 75 63 74 75 72 65  qlite3 structure
131e0 2e 20 54 68 65 79 20 61 72 65 20 74 68 65 6e 20  . They are then 
131f0 64 65 6c 65 74 65 64 2f 78 44 69 73 63 6f 6e 6e  deleted/xDisconn
13200 65 63 74 65 64 0a 2a 2a 20 6e 65 78 74 20 74 69  ected.** next ti
13210 6d 65 20 61 20 73 74 61 74 65 6d 65 6e 74 20 69  me a statement i
13220 73 20 70 72 65 70 61 72 65 64 20 75 73 69 6e 67  s prepared using
13230 20 73 61 69 64 20 73 71 6c 69 74 65 33 2a 2e 20   said sqlite3*. 
13240 54 68 69 73 20 69 73 20 64 6f 6e 65 0a 2a 2a 20  This is done.** 
13250 74 6f 20 61 76 6f 69 64 20 64 65 61 64 6c 6f 63  to avoid deadloc
13260 6b 20 69 73 73 75 65 73 20 69 6e 76 6f 6c 76 69  k issues involvi
13270 6e 67 20 6d 75 6c 74 69 70 6c 65 20 73 71 6c 69  ng multiple sqli
13280 74 65 33 2e 6d 75 74 65 78 20 6d 75 74 65 78 65  te3.mutex mutexe
13290 73 2e 0a 2a 2a 20 52 65 66 65 72 20 74 6f 20 63  s..** Refer to c
132a0 6f 6d 6d 65 6e 74 73 20 61 62 6f 76 65 20 66 75  omments above fu
132b0 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 56 74  nction sqlite3Vt
132c0 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 29 20 66  abUnlockList() f
132d0 6f 72 20 61 6e 0a 2a 2a 20 65 78 70 6c 61 6e 61  or an.** explana
132e0 74 69 6f 6e 20 61 73 20 74 6f 20 77 68 79 20 69  tion as to why i
132f0 74 20 69 73 20 73 61 66 65 20 74 6f 20 61 64 64  t is safe to add
13300 20 61 6e 20 65 6e 74 72 79 20 74 6f 20 61 6e 20   an entry to an 
13310 73 71 6c 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e  sqlite3.pDisconn
13320 65 63 74 0a 2a 2a 20 6c 69 73 74 20 77 69 74 68  ect.** list with
13330 6f 75 74 20 68 6f 6c 64 69 6e 67 20 74 68 65 20  out holding the 
13340 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 73 71  corresponding sq
13350 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d 75 74 65  lite3.mutex mute
13360 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 65 6d  x..**.** The mem
13370 6f 72 79 20 66 6f 72 20 6f 62 6a 65 63 74 73 20  ory for objects 
13380 6f 66 20 74 68 69 73 20 74 79 70 65 20 69 73 20  of this type is 
13390 61 6c 77 61 79 73 20 61 6c 6c 6f 63 61 74 65 64  always allocated
133a0 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33 44 62   by.** sqlite3Db
133b0 4d 61 6c 6c 6f 63 28 29 2c 20 75 73 69 6e 67 20  Malloc(), using 
133c0 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68  the connection h
133d0 61 6e 64 6c 65 20 73 74 6f 72 65 64 20 69 6e 20  andle stored in 
133e0 56 54 61 62 6c 65 2e 64 62 20 61 73 0a 2a 2a 20  VTable.db as.** 
133f0 74 68 65 20 66 69 72 73 74 20 61 72 67 75 6d 65  the first argume
13400 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 56 54  nt..*/.struct VT
13410 61 62 6c 65 20 7b 0a 20 20 73 71 6c 69 74 65 33  able {.  sqlite3
13420 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20 20 20   *db;           
13430 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 63     /* Database c
13440 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 73 6f 63 69  onnection associ
13450 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20 74  ated with this t
13460 61 62 6c 65 20 2a 2f 0a 20 20 4d 6f 64 75 6c 65  able */.  Module
13470 20 2a 70 4d 6f 64 3b 20 20 20 20 20 20 20 20 20   *pMod;         
13480 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
13490 6f 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65  o module impleme
134a0 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 73 71 6c  ntation */.  sql
134b0 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
134c0 3b 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65  ;      /* Pointe
134d0 72 20 74 6f 20 76 74 61 62 20 69 6e 73 74 61 6e  r to vtab instan
134e0 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66  ce */.  int nRef
134f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
13500 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70    /* Number of p
13510 6f 69 6e 74 65 72 73 20 74 6f 20 74 68 69 73 20  ointers to this 
13520 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 75  structure */.  u
13530 38 20 62 43 6f 6e 73 74 72 61 69 6e 74 3b 20 20  8 bConstraint;  
13540 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
13550 20 69 66 20 63 6f 6e 73 74 72 61 69 6e 74 73 20   if constraints 
13560 61 72 65 20 73 75 70 70 6f 72 74 65 64 20 2a 2f  are supported */
13570 0a 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e  .  int iSavepoin
13580 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
13590 44 65 70 74 68 20 6f 66 20 74 68 65 20 53 41 56  Depth of the SAV
135a0 45 50 4f 49 4e 54 20 73 74 61 63 6b 20 2a 2f 0a  EPOINT stack */.
135b0 20 20 56 54 61 62 6c 65 20 2a 70 4e 65 78 74 3b    VTable *pNext;
135c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
135d0 65 78 74 20 69 6e 20 6c 69 6e 6b 65 64 20 6c 69  ext in linked li
135e0 73 74 20 28 73 65 65 20 61 62 6f 76 65 29 20 2a  st (see above) *
135f0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  /.};../*.** The 
13600 73 63 68 65 6d 61 20 66 6f 72 20 65 61 63 68 20  schema for each 
13610 53 51 4c 20 74 61 62 6c 65 20 61 6e 64 20 76 69  SQL table and vi
13620 65 77 20 69 73 20 72 65 70 72 65 73 65 6e 74 65  ew is represente
13630 64 20 69 6e 20 6d 65 6d 6f 72 79 0a 2a 2a 20 62  d in memory.** b
13640 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  y an instance of
13650 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
13660 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72  tructure..*/.str
13670 75 63 74 20 54 61 62 6c 65 20 7b 0a 20 20 63 68  uct Table {.  ch
13680 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
13690 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
136a0 65 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20  e table or view 
136b0 2a 2f 0a 20 20 43 6f 6c 75 6d 6e 20 2a 61 43 6f  */.  Column *aCo
136c0 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 66  l;        /* Inf
136d0 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65  ormation about e
136e0 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  ach column */.  
136f0 49 6e 64 65 78 20 2a 70 49 6e 64 65 78 3b 20 20  Index *pIndex;  
13700 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
13710 53 51 4c 20 69 6e 64 65 78 65 73 20 6f 6e 20 74  SQL indexes on t
13720 68 69 73 20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20  his table. */.  
13730 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b  Select *pSelect;
13740 20 20 20 20 20 2f 2a 20 4e 55 4c 4c 20 66 6f 72       /* NULL for
13750 20 74 61 62 6c 65 73 2e 20 20 50 6f 69 6e 74 73   tables.  Points
13760 20 74 6f 20 64 65 66 69 6e 69 74 69 6f 6e 20 69   to definition i
13770 66 20 61 20 76 69 65 77 2e 20 2a 2f 0a 20 20 46  f a view. */.  F
13780 4b 65 79 20 2a 70 46 4b 65 79 3b 20 20 20 20 20  Key *pFKey;     
13790 20 20 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69      /* Linked li
137a0 73 74 20 6f 66 20 61 6c 6c 20 66 6f 72 65 69 67  st of all foreig
137b0 6e 20 6b 65 79 73 20 69 6e 20 74 68 69 73 20 74  n keys in this t
137c0 61 62 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a  able */.  char *
137d0 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20 20 20 2f  zColAff;       /
137e0 2a 20 53 74 72 69 6e 67 20 64 65 66 69 6e 69 6e  * String definin
137f0 67 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f  g the affinity o
13800 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f  f each column */
13810 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43 68  .  ExprList *pCh
13820 65 63 6b 3b 20 20 20 20 2f 2a 20 41 6c 6c 20 43  eck;    /* All C
13830 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73  HECK constraints
13840 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
13850 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20             /*   
13860 2e 2e 2e 20 61 6c 73 6f 20 75 73 65 64 20 61 73  ... also used as
13870 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 6c 69 73   column name lis
13880 74 20 69 6e 20 61 20 56 49 45 57 20 2a 2f 0a 20  t in a VIEW */. 
13890 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20 20   int tnum;      
138a0 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20 42 54        /* Root BT
138b0 72 65 65 20 70 61 67 65 20 66 6f 72 20 74 68 69  ree page for thi
138c0 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 75 33 32  s table */.  u32
138d0 20 6e 54 61 62 52 65 66 3b 20 20 20 20 20 20 20   nTabRef;       
138e0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70    /* Number of p
138f0 6f 69 6e 74 65 72 73 20 74 6f 20 74 68 69 73 20  ointers to this 
13900 54 61 62 6c 65 20 2a 2f 0a 20 20 75 33 32 20 74  Table */.  u32 t
13910 61 62 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20  abFlags;        
13920 2f 2a 20 4d 61 73 6b 20 6f 66 20 54 46 5f 2a 20  /* Mask of TF_* 
13930 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69 31 36 20  values */.  i16 
13940 69 50 4b 65 79 3b 20 20 20 20 20 20 20 20 20 20  iPKey;          
13950 20 2f 2a 20 49 66 20 6e 6f 74 20 6e 65 67 61 74   /* If not negat
13960 69 76 65 2c 20 75 73 65 20 61 43 6f 6c 5b 69 50  ive, use aCol[iP
13970 4b 65 79 5d 20 61 73 20 74 68 65 20 72 6f 77 69  Key] as the rowi
13980 64 20 2a 2f 0a 20 20 69 31 36 20 6e 43 6f 6c 3b  d */.  i16 nCol;
13990 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
139a0 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
139b0 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65 20 2a   in this table *
139c0 2f 0a 20 20 69 31 36 20 6e 56 43 6f 6c 3b 20 20  /.  i16 nVCol;  
139d0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
139e0 65 72 20 6f 66 20 76 69 72 74 75 61 6c 20 63 6f  er of virtual co
139f0 6c 75 6d 6e 73 20 2a 2f 0a 20 20 4c 6f 67 45 73  lumns */.  LogEs
13a00 74 20 6e 52 6f 77 4c 6f 67 45 73 74 3b 20 20 20  t nRowLogEst;   
13a10 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 72 6f 77  /* Estimated row
13a20 73 20 69 6e 20 74 61 62 6c 65 20 2d 20 66 72 6f  s in table - fro
13a30 6d 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74  m sqlite_stat1 t
13a40 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45 73 74  able */.  LogEst
13a50 20 73 7a 54 61 62 52 6f 77 3b 20 20 20 20 20 2f   szTabRow;     /
13a60 2a 20 45 73 74 69 6d 61 74 65 64 20 73 69 7a 65  * Estimated size
13a70 20 6f 66 20 65 61 63 68 20 74 61 62 6c 65 20 72   of each table r
13a80 6f 77 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 23  ow in bytes */.#
13a90 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
13aa0 42 4c 45 5f 43 4f 53 54 4d 55 4c 54 0a 20 20 4c  BLE_COSTMULT.  L
13ab0 6f 67 45 73 74 20 63 6f 73 74 4d 75 6c 74 3b 20  ogEst costMult; 
13ac0 20 20 20 20 2f 2a 20 43 6f 73 74 20 6d 75 6c 74      /* Cost mult
13ad0 69 70 6c 69 65 72 20 66 6f 72 20 75 73 69 6e 67  iplier for using
13ae0 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 23   this table */.#
13af0 65 6e 64 69 66 0a 20 20 75 38 20 6b 65 79 43 6f  endif.  u8 keyCo
13b00 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  nf;          /* 
13b10 57 68 61 74 20 74 6f 20 64 6f 20 69 6e 20 63 61  What to do in ca
13b20 73 65 20 6f 66 20 75 6e 69 71 75 65 6e 65 73 73  se of uniqueness
13b30 20 63 6f 6e 66 6c 69 63 74 20 6f 6e 20 69 50 4b   conflict on iPK
13b40 65 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  ey */.#ifndef SQ
13b50 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54  LITE_OMIT_ALTERT
13b60 41 42 4c 45 0a 20 20 69 6e 74 20 61 64 64 43 6f  ABLE.  int addCo
13b70 6c 4f 66 66 73 65 74 3b 20 20 20 20 2f 2a 20 4f  lOffset;    /* O
13b80 66 66 73 65 74 20 69 6e 20 43 52 45 41 54 45 20  ffset in CREATE 
13b90 54 41 42 4c 45 20 73 74 6d 74 20 74 6f 20 61 64  TABLE stmt to ad
13ba0 64 20 61 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 2a  d a new column *
13bb0 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  /.#endif.#ifndef
13bc0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
13bd0 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20  TUALTABLE.  int 
13be0 6e 4d 6f 64 75 6c 65 41 72 67 3b 20 20 20 20 20  nModuleArg;     
13bf0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72   /* Number of ar
13c00 67 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 6d  guments to the m
13c10 6f 64 75 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20  odule */.  char 
13c20 2a 2a 61 7a 4d 6f 64 75 6c 65 41 72 67 3b 20 20  **azModuleArg;  
13c30 2f 2a 20 30 3a 20 6d 6f 64 75 6c 65 20 31 3a 20  /* 0: module 1: 
13c40 73 63 68 65 6d 61 20 32 3a 20 76 74 61 62 20 6e  schema 2: vtab n
13c50 61 6d 65 20 33 2e 2e 2e 3a 20 61 72 67 73 20 2a  ame 3...: args *
13c60 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 56 54 61  /.  VTable *pVTa
13c70 62 6c 65 3b 20 20 20 20 20 2f 2a 20 4c 69 73 74  ble;     /* List
13c80 20 6f 66 20 56 54 61 62 6c 65 20 6f 62 6a 65 63   of VTable objec
13c90 74 73 2e 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ts. */.#endif.  
13ca0 54 72 69 67 67 65 72 20 2a 70 54 72 69 67 67 65  Trigger *pTrigge
13cb0 72 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20  r;   /* List of 
13cc0 74 72 69 67 67 65 72 73 20 73 74 6f 72 65 64 20  triggers stored 
13cd0 69 6e 20 70 53 63 68 65 6d 61 20 2a 2f 0a 20 20  in pSchema */.  
13ce0 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
13cf0 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 74       /* Schema t
13d00 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 69  hat contains thi
13d10 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54 61 62  s table */.  Tab
13d20 6c 65 20 2a 70 4e 65 78 74 5a 6f 6d 62 69 65 3b  le *pNextZombie;
13d30 20 20 2f 2a 20 4e 65 78 74 20 6f 6e 20 74 68 65    /* Next on the
13d40 20 50 61 72 73 65 2e 70 5a 6f 6d 62 69 65 54 61   Parse.pZombieTa
13d50 62 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  b list */.};../*
13d60 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
13d70 65 73 20 66 6f 72 20 54 61 62 6c 65 2e 74 61 62  es for Table.tab
13d80 46 6c 61 67 73 2e 0a 2a 2a 0a 2a 2a 20 54 46 5f  Flags..**.** TF_
13d90 4f 4f 4f 48 69 64 64 65 6e 20 61 70 70 6c 69 65  OOOHidden applie
13da0 73 20 74 6f 20 74 61 62 6c 65 73 20 6f 72 20 76  s to tables or v
13db0 69 65 77 20 74 68 61 74 20 68 61 76 65 20 68 69  iew that have hi
13dc0 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 74 68 61  dden columns tha
13dd0 74 20 61 72 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 65  t are.** followe
13de0 64 20 62 79 20 6e 6f 6e 2d 68 69 64 64 65 6e 20  d by non-hidden 
13df0 63 6f 6c 75 6d 6e 73 2e 20 20 45 78 61 6d 70 6c  columns.  Exampl
13e00 65 3a 20 20 22 43 52 45 41 54 45 20 56 49 52 54  e:  "CREATE VIRT
13e10 55 41 4c 20 54 41 42 4c 45 20 78 20 55 53 49 4e  UAL TABLE x USIN
13e20 47 0a 2a 2a 20 76 74 61 62 31 28 61 20 48 49 44  G.** vtab1(a HID
13e30 44 45 4e 2c 20 62 29 3b 22 2e 20 20 53 69 6e 63  DEN, b);".  Sinc
13e40 65 20 22 62 22 20 69 73 20 61 20 6e 6f 6e 2d 68  e "b" is a non-h
13e50 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 62 75 74  idden column but
13e60 20 22 61 22 20 69 73 20 68 69 64 64 65 6e 2c 0a   "a" is hidden,.
13e70 2a 2a 20 74 68 65 20 54 46 5f 4f 4f 4f 48 69 64  ** the TF_OOOHid
13e80 64 65 6e 20 61 74 74 72 69 62 75 74 65 20 77 6f  den attribute wo
13e90 75 6c 64 20 61 70 70 6c 79 20 69 6e 20 74 68 69  uld apply in thi
13ea0 73 20 63 61 73 65 2e 20 20 53 75 63 68 20 74 61  s case.  Such ta
13eb0 62 6c 65 73 20 72 65 71 75 69 72 65 0a 2a 2a 20  bles require.** 
13ec0 73 70 65 63 69 61 6c 20 68 61 6e 64 6c 69 6e 67  special handling
13ed0 20 64 75 72 69 6e 67 20 49 4e 53 45 52 54 20 70   during INSERT p
13ee0 72 6f 63 65 73 73 69 6e 67 2e 0a 2a 2f 0a 23 64  rocessing..*/.#d
13ef0 65 66 69 6e 65 20 54 46 5f 52 65 61 64 6f 6e 6c  efine TF_Readonl
13f00 79 20 20 20 20 20 20 20 20 30 78 30 30 30 31 20  y        0x0001 
13f10 20 20 20 2f 2a 20 52 65 61 64 2d 6f 6e 6c 79 20     /* Read-only 
13f20 73 79 73 74 65 6d 20 74 61 62 6c 65 20 2a 2f 0a  system table */.
13f30 23 64 65 66 69 6e 65 20 54 46 5f 45 70 68 65 6d  #define TF_Ephem
13f40 65 72 61 6c 20 20 20 20 20 20 20 30 78 30 30 30  eral       0x000
13f50 32 20 20 20 20 2f 2a 20 41 6e 20 65 70 68 65 6d  2    /* An ephem
13f60 65 72 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64  eral table */.#d
13f70 65 66 69 6e 65 20 54 46 5f 48 61 73 50 72 69 6d  efine TF_HasPrim
13f80 61 72 79 4b 65 79 20 20 20 30 78 30 30 30 34 20  aryKey   0x0004 
13f90 20 20 20 2f 2a 20 54 61 62 6c 65 20 68 61 73 20     /* Table has 
13fa0 61 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f  a primary key */
13fb0 0a 23 64 65 66 69 6e 65 20 54 46 5f 41 75 74 6f  .#define TF_Auto
13fc0 69 6e 63 72 65 6d 65 6e 74 20 20 20 30 78 30 30  increment   0x00
13fd0 30 38 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72  08    /* Integer
13fe0 20 70 72 69 6d 61 72 79 20 6b 65 79 20 69 73 20   primary key is 
13ff0 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 2a 2f  autoincrement */
14000 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73 53  .#define TF_HasS
14010 74 61 74 31 20 20 20 20 20 20 20 20 30 78 30 30  tat1        0x00
14020 31 30 20 20 20 20 2f 2a 20 6e 52 6f 77 4c 6f 67  10    /* nRowLog
14030 45 73 74 20 73 65 74 20 66 72 6f 6d 20 73 71 6c  Est set from sql
14040 69 74 65 5f 73 74 61 74 31 20 2a 2f 0a 23 64 65  ite_stat1 */.#de
14050 66 69 6e 65 20 54 46 5f 57 69 74 68 6f 75 74 52  fine TF_WithoutR
14060 6f 77 69 64 20 20 20 20 30 78 30 30 32 30 20 20  owid    0x0020  
14070 20 20 2f 2a 20 4e 6f 20 72 6f 77 69 64 2e 20 20    /* No rowid.  
14080 50 52 49 4d 41 52 59 20 4b 45 59 20 69 73 20 74  PRIMARY KEY is t
14090 68 65 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e  he key */.#defin
140a0 65 20 54 46 5f 4e 6f 56 69 73 69 62 6c 65 52 6f  e TF_NoVisibleRo
140b0 77 69 64 20 20 30 78 30 30 34 30 20 20 20 20 2f  wid  0x0040    /
140c0 2a 20 4e 6f 20 75 73 65 72 2d 76 69 73 69 62 6c  * No user-visibl
140d0 65 20 22 72 6f 77 69 64 22 20 63 6f 6c 75 6d 6e  e "rowid" column
140e0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 4f   */.#define TF_O
140f0 4f 4f 48 69 64 64 65 6e 20 20 20 20 20 20 20 30  OOHidden       0
14100 78 30 30 38 30 20 20 20 20 2f 2a 20 4f 75 74 2d  x0080    /* Out-
14110 6f 66 2d 4f 72 64 65 72 20 68 69 64 64 65 6e 20  of-Order hidden 
14120 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 23 64 65 66 69  columns */.#defi
14130 6e 65 20 54 46 5f 53 74 61 74 73 55 73 65 64 20  ne TF_StatsUsed 
14140 20 20 20 20 20 20 30 78 30 31 30 30 20 20 20 20        0x0100    
14150 2f 2a 20 51 75 65 72 79 20 70 6c 61 6e 6e 65 72  /* Query planner
14160 20 64 65 63 69 73 69 6f 6e 73 20 61 66 66 65 63   decisions affec
14170 74 65 64 20 62 79 0a 20 20 20 20 20 20 20 20 20  ted by.         
14180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14190 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 49              ** I
141a0 6e 64 65 78 2e 61 69 52 6f 77 4c 6f 67 45 73 74  ndex.aiRowLogEst
141b0 5b 5d 20 76 61 6c 75 65 73 20 2a 2f 0a 23 64 65  [] values */.#de
141c0 66 69 6e 65 20 54 46 5f 48 61 73 4e 6f 74 4e 75  fine TF_HasNotNu
141d0 6c 6c 20 20 20 20 20 20 30 78 30 32 30 30 20 20  ll      0x0200  
141e0 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 4e 4f    /* Contains NO
141f0 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e  T NULL constrain
14200 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  ts */.#define TF
14210 5f 53 68 61 64 6f 77 20 20 20 20 20 20 20 20 20  _Shadow         
14220 20 30 78 30 34 30 30 20 20 20 20 2f 2a 20 54 72   0x0400    /* Tr
14230 75 65 20 66 6f 72 20 61 20 73 68 61 64 6f 77 20  ue for a shadow 
14240 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  table */../*.** 
14250 54 65 73 74 20 74 6f 20 73 65 65 20 77 68 65 74  Test to see whet
14260 68 65 72 20 6f 72 20 6e 6f 74 20 61 20 74 61 62  her or not a tab
14270 6c 65 20 69 73 20 61 20 76 69 72 74 75 61 6c 20  le is a virtual 
14280 74 61 62 6c 65 2e 20 20 54 68 69 73 20 69 73 0a  table.  This is.
14290 2a 2a 20 64 6f 6e 65 20 61 73 20 61 20 6d 61 63  ** done as a mac
142a0 72 6f 20 73 6f 20 74 68 61 74 20 69 74 20 77 69  ro so that it wi
142b0 6c 6c 20 62 65 20 6f 70 74 69 6d 69 7a 65 64 20  ll be optimized 
142c0 6f 75 74 20 77 68 65 6e 20 76 69 72 74 75 61 6c  out when virtual
142d0 0a 2a 2a 20 74 61 62 6c 65 20 73 75 70 70 6f 72  .** table suppor
142e0 74 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f  t is omitted fro
142f0 6d 20 74 68 65 20 62 75 69 6c 64 2e 0a 2a 2f 0a  m the build..*/.
14300 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
14310 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
14320 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56 69 72  .#  define IsVir
14330 74 75 61 6c 28 58 29 20 20 20 20 20 20 28 28 58  tual(X)      ((X
14340 29 2d 3e 6e 4d 6f 64 75 6c 65 41 72 67 29 0a 23  )->nModuleArg).#
14350 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49  else.#  define I
14360 73 56 69 72 74 75 61 6c 28 58 29 20 20 20 20 20  sVirtual(X)     
14370 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   0.#endif../*.**
14380 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74 65 72   Macros to deter
14390 6d 69 6e 65 20 69 66 20 61 20 63 6f 6c 75 6d 6e  mine if a column
143a0 20 69 73 20 68 69 64 64 65 6e 2e 20 20 49 73 4f   is hidden.  IsO
143b0 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c  rdinaryHiddenCol
143c0 75 6d 6e 28 29 0a 2a 2a 20 6f 6e 6c 79 20 77 6f  umn().** only wo
143d0 72 6b 73 20 66 6f 72 20 6e 6f 6e 2d 76 69 72 74  rks for non-virt
143e0 75 61 6c 20 74 61 62 6c 65 73 20 28 6f 72 64 69  ual tables (ordi
143f0 6e 61 72 79 20 74 61 62 6c 65 73 20 61 6e 64 20  nary tables and 
14400 76 69 65 77 73 29 20 61 6e 64 20 69 73 0a 2a 2a  views) and is.**
14410 20 61 6c 77 61 79 73 20 66 61 6c 73 65 20 75 6e   always false un
14420 6c 65 73 73 20 53 51 4c 49 54 45 5f 45 4e 41 42  less SQLITE_ENAB
14430 4c 45 5f 48 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e  LE_HIDDEN_COLUMN
14440 53 20 69 73 20 64 65 66 69 6e 65 64 2e 20 20 54  S is defined.  T
14450 68 65 0a 2a 2a 20 49 73 48 69 64 64 65 6e 43 6f  he.** IsHiddenCo
14460 6c 75 6d 6e 28 29 20 6d 61 63 72 6f 20 69 73 20  lumn() macro is 
14470 67 65 6e 65 72 61 6c 20 70 75 72 70 6f 73 65 2e  general purpose.
14480 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
14490 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49  SQLITE_ENABLE_HI
144a0 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53 29 0a 23 20  DDEN_COLUMNS).# 
144b0 20 64 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e   define IsHidden
144c0 43 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20 20 20  Column(X)       
144d0 20 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67    (((X)->colFlag
144e0 73 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44  s & COLFLAG_HIDD
144f0 45 4e 29 21 3d 30 29 0a 23 20 20 64 65 66 69 6e  EN)!=0).#  defin
14500 65 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64 64  e IsOrdinaryHidd
14510 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 28 28 28 58  enColumn(X) (((X
14520 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f  )->colFlags & CO
14530 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d 30  LFLAG_HIDDEN)!=0
14540 29 0a 23 65 6c 69 66 20 21 64 65 66 69 6e 65 64  ).#elif !defined
14550 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52  (SQLITE_OMIT_VIR
14560 54 55 41 4c 54 41 42 4c 45 29 0a 23 20 20 64 65  TUALTABLE).#  de
14570 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c  fine IsHiddenCol
14580 75 6d 6e 28 58 29 20 20 20 20 20 20 20 20 20 28  umn(X)         (
14590 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26  ((X)->colFlags &
145a0 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29   COLFLAG_HIDDEN)
145b0 21 3d 30 29 0a 23 20 20 64 65 66 69 6e 65 20 49  !=0).#  define I
145c0 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43  sOrdinaryHiddenC
145d0 6f 6c 75 6d 6e 28 58 29 20 30 0a 23 65 6c 73 65  olumn(X) 0.#else
145e0 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48 69 64  .#  define IsHid
145f0 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 20 20 20  denColumn(X)    
14600 20 20 20 20 20 30 0a 23 20 20 64 65 66 69 6e 65       0.#  define
14610 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65   IsOrdinaryHidde
14620 6e 43 6f 6c 75 6d 6e 28 58 29 20 30 0a 23 65 6e  nColumn(X) 0.#en
14630 64 69 66 0a 0a 0a 2f 2a 20 44 6f 65 73 20 74 68  dif.../* Does th
14640 65 20 74 61 62 6c 65 20 68 61 76 65 20 61 20 72  e table have a r
14650 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  owid */.#define 
14660 48 61 73 52 6f 77 69 64 28 58 29 20 20 20 20 20  HasRowid(X)     
14670 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20  (((X)->tabFlags 
14680 26 20 54 46 5f 57 69 74 68 6f 75 74 52 6f 77 69  & TF_WithoutRowi
14690 64 29 3d 3d 30 29 0a 23 64 65 66 69 6e 65 20 56  d)==0).#define V
146a0 69 73 69 62 6c 65 52 6f 77 69 64 28 58 29 20 28  isibleRowid(X) (
146b0 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26  ((X)->tabFlags &
146c0 20 54 46 5f 4e 6f 56 69 73 69 62 6c 65 52 6f 77   TF_NoVisibleRow
146d0 69 64 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 45  id)==0)../*.** E
146e0 61 63 68 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  ach foreign key 
146f0 63 6f 6e 73 74 72 61 69 6e 74 20 69 73 20 61 6e  constraint is an
14700 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
14710 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
14720 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 66 6f  ture..**.** A fo
14730 72 65 69 67 6e 20 6b 65 79 20 69 73 20 61 73 73  reign key is ass
14740 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 77 6f  ociated with two
14750 20 74 61 62 6c 65 73 2e 20 20 54 68 65 20 22 66   tables.  The "f
14760 72 6f 6d 22 20 74 61 62 6c 65 20 69 73 0a 2a 2a  rom" table is.**
14770 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20   the table that 
14780 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 52 45 46  contains the REF
14790 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 74  ERENCES clause t
147a0 68 61 74 20 63 72 65 61 74 65 73 20 74 68 65 20  hat creates the 
147b0 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 2e 20  foreign.** key. 
147c0 20 54 68 65 20 22 74 6f 22 20 74 61 62 6c 65 20   The "to" table 
147d0 69 73 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  is the table tha
147e0 74 20 69 73 20 6e 61 6d 65 64 20 69 6e 20 74 68  t is named in th
147f0 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61  e REFERENCES cla
14800 75 73 65 2e 0a 2a 2a 20 43 6f 6e 73 69 64 65 72  use..** Consider
14810 20 74 68 69 73 20 65 78 61 6d 70 6c 65 3a 0a 2a   this example:.*
14820 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20  *.**     CREATE 
14830 54 41 42 4c 45 20 65 78 31 28 0a 2a 2a 20 20 20  TABLE ex1(.**   
14840 20 20 20 20 61 20 49 4e 54 45 47 45 52 20 50 52      a INTEGER PR
14850 49 4d 41 52 59 20 4b 45 59 2c 0a 2a 2a 20 20 20  IMARY KEY,.**   
14860 20 20 20 20 62 20 49 4e 54 45 47 45 52 20 43 4f      b INTEGER CO
14870 4e 53 54 52 41 49 4e 54 20 66 6b 31 20 52 45 46  NSTRAINT fk1 REF
14880 45 52 45 4e 43 45 53 20 65 78 32 28 78 29 0a 2a  ERENCES ex2(x).*
14890 2a 20 20 20 20 20 29 3b 0a 2a 2a 0a 2a 2a 20 46  *     );.**.** F
148a0 6f 72 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 22  or foreign key "
148b0 66 6b 31 22 2c 20 74 68 65 20 66 72 6f 6d 2d 74  fk1", the from-t
148c0 61 62 6c 65 20 69 73 20 22 65 78 31 22 20 61 6e  able is "ex1" an
148d0 64 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69  d the to-table i
148e0 73 20 22 65 78 32 22 2e 0a 2a 2a 20 45 71 75 69  s "ex2"..** Equi
148f0 76 61 6c 65 6e 74 20 6e 61 6d 65 73 3a 0a 2a 2a  valent names:.**
14900 0a 2a 2a 20 20 20 20 20 66 72 6f 6d 2d 74 61 62  .**     from-tab
14910 6c 65 20 3d 3d 20 63 68 69 6c 64 2d 74 61 62 6c  le == child-tabl
14920 65 0a 2a 2a 20 20 20 20 20 20 20 74 6f 2d 74 61  e.**       to-ta
14930 62 6c 65 20 3d 3d 20 70 61 72 65 6e 74 2d 74 61  ble == parent-ta
14940 62 6c 65 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 52  ble.**.** Each R
14950 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65  EFERENCES clause
14960 20 67 65 6e 65 72 61 74 65 73 20 61 6e 20 69 6e   generates an in
14970 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
14980 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
14990 65 0a 2a 2a 20 77 68 69 63 68 20 69 73 20 61 74  e.** which is at
149a0 74 61 63 68 65 64 20 74 6f 20 74 68 65 20 66 72  tached to the fr
149b0 6f 6d 2d 74 61 62 6c 65 2e 20 20 54 68 65 20 74  om-table.  The t
149c0 6f 2d 74 61 62 6c 65 20 6e 65 65 64 20 6e 6f 74  o-table need not
149d0 20 65 78 69 73 74 20 77 68 65 6e 0a 2a 2a 20 74   exist when.** t
149e0 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73  he from-table is
149f0 20 63 72 65 61 74 65 64 2e 20 20 54 68 65 20 65   created.  The e
14a00 78 69 73 74 65 6e 63 65 20 6f 66 20 74 68 65 20  xistence of the 
14a10 74 6f 2d 74 61 62 6c 65 20 69 73 20 6e 6f 74 20  to-table is not 
14a20 63 68 65 63 6b 65 64 2e 0a 2a 2a 0a 2a 2a 20 54  checked..**.** T
14a30 68 65 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 70  he list of all p
14a40 61 72 65 6e 74 73 20 66 6f 72 20 63 68 69 6c 64  arents for child
14a50 20 54 61 62 6c 65 20 58 20 69 73 20 68 65 6c 64   Table X is held
14a60 20 61 74 20 58 2e 70 46 4b 65 79 2e 0a 2a 2a 0a   at X.pFKey..**.
14a70 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20 61 6c 6c  ** A list of all
14a80 20 63 68 69 6c 64 72 65 6e 20 66 6f 72 20 61 20   children for a 
14a90 74 61 62 6c 65 20 6e 61 6d 65 64 20 5a 20 28 77  table named Z (w
14aa0 68 69 63 68 20 6d 69 67 68 74 20 6e 6f 74 20 65  hich might not e
14ab0 76 65 6e 20 65 78 69 73 74 29 0a 2a 2a 20 69 73  ven exist).** is
14ac0 20 68 65 6c 64 20 69 6e 20 53 63 68 65 6d 61 2e   held in Schema.
14ad0 66 6b 65 79 48 61 73 68 20 77 69 74 68 20 61 20  fkeyHash with a 
14ae0 68 61 73 68 20 6b 65 79 20 6f 66 20 5a 2e 0a 2a  hash key of Z..*
14af0 2f 0a 73 74 72 75 63 74 20 46 4b 65 79 20 7b 0a  /.struct FKey {.
14b00 20 20 54 61 62 6c 65 20 2a 70 46 72 6f 6d 3b 20    Table *pFrom; 
14b10 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6e      /* Table con
14b20 74 61 69 6e 69 6e 67 20 74 68 65 20 52 45 46 45  taining the REFE
14b30 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 28 61  RENCES clause (a
14b40 6b 61 3a 20 43 68 69 6c 64 29 20 2a 2f 0a 20 20  ka: Child) */.  
14b50 46 4b 65 79 20 2a 70 4e 65 78 74 46 72 6f 6d 3b  FKey *pNextFrom;
14b60 20 20 2f 2a 20 4e 65 78 74 20 46 4b 65 79 20 77    /* Next FKey w
14b70 69 74 68 20 74 68 65 20 73 61 6d 65 20 69 6e 20  ith the same in 
14b80 70 46 72 6f 6d 2e 20 4e 65 78 74 20 70 61 72 65  pFrom. Next pare
14b90 6e 74 20 6f 66 20 70 46 72 6f 6d 20 2a 2f 0a 20  nt of pFrom */. 
14ba0 20 63 68 61 72 20 2a 7a 54 6f 3b 20 20 20 20 20   char *zTo;     
14bb0 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 61     /* Name of ta
14bc0 62 6c 65 20 74 68 61 74 20 74 68 65 20 6b 65 79  ble that the key
14bd0 20 70 6f 69 6e 74 73 20 74 6f 20 28 61 6b 61 3a   points to (aka:
14be0 20 50 61 72 65 6e 74 29 20 2a 2f 0a 20 20 46 4b   Parent) */.  FK
14bf0 65 79 20 2a 70 4e 65 78 74 54 6f 3b 20 20 20 20  ey *pNextTo;    
14c00 2f 2a 20 4e 65 78 74 20 77 69 74 68 20 74 68 65  /* Next with the
14c10 20 73 61 6d 65 20 7a 54 6f 2e 20 4e 65 78 74 20   same zTo. Next 
14c20 63 68 69 6c 64 20 6f 66 20 7a 54 6f 2e 20 2a 2f  child of zTo. */
14c30 0a 20 20 46 4b 65 79 20 2a 70 50 72 65 76 54 6f  .  FKey *pPrevTo
14c40 3b 20 20 20 20 2f 2a 20 50 72 65 76 69 6f 75 73  ;    /* Previous
14c50 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 7a   with the same z
14c60 54 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c  To */.  int nCol
14c70 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
14c80 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
14c90 6e 20 74 68 69 73 20 6b 65 79 20 2a 2f 0a 20 20  n this key */.  
14ca0 2f 2a 20 45 56 3a 20 52 2d 33 30 33 32 33 2d 32  /* EV: R-30323-2
14cb0 31 39 31 37 20 2a 2f 0a 20 20 75 38 20 69 73 44  1917 */.  u8 isD
14cc0 65 66 65 72 72 65 64 3b 20 20 20 20 20 20 20 2f  eferred;       /
14cd0 2a 20 54 72 75 65 20 69 66 20 63 6f 6e 73 74 72  * True if constr
14ce0 61 69 6e 74 20 63 68 65 63 6b 69 6e 67 20 69 73  aint checking is
14cf0 20 64 65 66 65 72 72 65 64 20 74 69 6c 6c 20 43   deferred till C
14d00 4f 4d 4d 49 54 20 2a 2f 0a 20 20 75 38 20 61 41  OMMIT */.  u8 aA
14d10 63 74 69 6f 6e 5b 32 5d 3b 20 20 20 20 20 20 20  ction[2];       
14d20 20 2f 2a 20 4f 4e 20 44 45 4c 45 54 45 20 61 6e   /* ON DELETE an
14d30 64 20 4f 4e 20 55 50 44 41 54 45 20 61 63 74 69  d ON UPDATE acti
14d40 6f 6e 73 2c 20 72 65 73 70 65 63 74 69 76 65 6c  ons, respectivel
14d50 79 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a  y */.  Trigger *
14d60 61 70 54 72 69 67 67 65 72 5b 32 5d 3b 2f 2a 20  apTrigger[2];/* 
14d70 54 72 69 67 67 65 72 73 20 66 6f 72 20 61 41 63  Triggers for aAc
14d80 74 69 6f 6e 5b 5d 20 61 63 74 69 6f 6e 73 20 2a  tion[] actions *
14d90 2f 0a 20 20 73 74 72 75 63 74 20 73 43 6f 6c 4d  /.  struct sColM
14da0 61 70 20 7b 20 20 20 20 20 20 2f 2a 20 4d 61 70  ap {      /* Map
14db0 70 69 6e 67 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  ping of columns 
14dc0 69 6e 20 70 46 72 6f 6d 20 74 6f 20 63 6f 6c 75  in pFrom to colu
14dd0 6d 6e 73 20 69 6e 20 7a 54 6f 20 2a 2f 0a 20 20  mns in zTo */.  
14de0 20 20 69 6e 74 20 69 46 72 6f 6d 3b 20 20 20 20    int iFrom;    
14df0 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78          /* Index
14e00 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 70 46   of column in pF
14e10 72 6f 6d 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  rom */.    char 
14e20 2a 7a 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20  *zCol;          
14e30 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 63 6f 6c 75   /* Name of colu
14e40 6d 6e 20 69 6e 20 7a 54 6f 2e 20 20 49 66 20 4e  mn in zTo.  If N
14e50 55 4c 4c 20 75 73 65 20 50 52 49 4d 41 52 59 20  ULL use PRIMARY 
14e60 4b 45 59 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 5b  KEY */.  } aCol[
14e70 31 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  1];            /
14e80 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20  * One entry for 
14e90 65 61 63 68 20 6f 66 20 6e 43 6f 6c 20 63 6f 6c  each of nCol col
14ea0 75 6d 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  umns */.};../*.*
14eb0 2a 20 53 51 4c 69 74 65 20 73 75 70 70 6f 72 74  * SQLite support
14ec0 73 20 6d 61 6e 79 20 64 69 66 66 65 72 65 6e 74  s many different
14ed0 20 77 61 79 73 20 74 6f 20 72 65 73 6f 6c 76 65   ways to resolve
14ee0 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a   a constraint.**
14ef0 20 65 72 72 6f 72 2e 20 20 52 4f 4c 4c 42 41 43   error.  ROLLBAC
14f00 4b 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61  K processing mea
14f10 6e 73 20 74 68 61 74 20 61 20 63 6f 6e 73 74 72  ns that a constr
14f20 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 2a  aint violation.*
14f30 2a 20 63 61 75 73 65 73 20 74 68 65 20 6f 70 65  * causes the ope
14f40 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73  ration in proces
14f50 73 20 74 6f 20 66 61 69 6c 20 61 6e 64 20 66 6f  s to fail and fo
14f60 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72  r the current tr
14f70 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20  ansaction.** to 
14f80 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20  be rolled back. 
14f90 20 41 42 4f 52 54 20 70 72 6f 63 65 73 73 69 6e   ABORT processin
14fa0 67 20 6d 65 61 6e 73 20 74 68 65 20 6f 70 65 72  g means the oper
14fb0 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73  ation in process
14fc0 0a 2a 2a 20 66 61 69 6c 73 20 61 6e 64 20 61 6e  .** fails and an
14fd0 79 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20  y prior changes 
14fe0 66 72 6f 6d 20 74 68 61 74 20 6f 6e 65 20 6f 70  from that one op
14ff0 65 72 61 74 69 6f 6e 20 61 72 65 20 62 61 63 6b  eration are back
15000 65 64 20 6f 75 74 2c 0a 2a 2a 20 62 75 74 20 74  ed out,.** but t
15010 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  he transaction i
15020 73 20 6e 6f 74 20 72 6f 6c 6c 65 64 20 62 61 63  s not rolled bac
15030 6b 2e 20 20 46 41 49 4c 20 70 72 6f 63 65 73 73  k.  FAIL process
15040 69 6e 67 20 6d 65 61 6e 73 20 74 68 61 74 0a 2a  ing means that.*
15050 2a 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  * the operation 
15060 69 6e 20 70 72 6f 67 72 65 73 73 20 73 74 6f 70  in progress stop
15070 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20 61 6e  s and returns an
15080 20 65 72 72 6f 72 20 63 6f 64 65 2e 20 20 42 75   error code.  Bu
15090 74 20 70 72 69 6f 72 0a 2a 2a 20 63 68 61 6e 67  t prior.** chang
150a0 65 73 20 64 75 65 20 74 6f 20 74 68 65 20 73 61  es due to the sa
150b0 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65  me operation are
150c0 20 6e 6f 74 20 62 61 63 6b 65 64 20 6f 75 74 20   not backed out 
150d0 61 6e 64 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 0a  and no rollback.
150e0 2a 2a 20 6f 63 63 75 72 73 2e 20 20 49 47 4e 4f  ** occurs.  IGNO
150f0 52 45 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  RE means that th
15100 65 20 70 61 72 74 69 63 75 6c 61 72 20 72 6f 77  e particular row
15110 20 74 68 61 74 20 63 61 75 73 65 64 20 74 68 65   that caused the
15120 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65   constraint.** e
15130 72 72 6f 72 20 69 73 20 6e 6f 74 20 69 6e 73 65  rror is not inse
15140 72 74 65 64 20 6f 72 20 75 70 64 61 74 65 64 2e  rted or updated.
15150 20 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e    Processing con
15160 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72  tinues and no er
15170 72 6f 72 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e  ror.** is return
15180 65 64 2e 20 20 52 45 50 4c 41 43 45 20 6d 65 61  ed.  REPLACE mea
15190 6e 73 20 74 68 61 74 20 70 72 65 65 78 69 73 74  ns that preexist
151a0 69 6e 67 20 64 61 74 61 62 61 73 65 20 72 6f 77  ing database row
151b0 73 20 74 68 61 74 20 63 61 75 73 65 64 0a 2a 2a  s that caused.**
151c0 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72   a UNIQUE constr
151d0 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61  aint violation a
151e0 72 65 20 72 65 6d 6f 76 65 64 20 73 6f 20 74 68  re removed so th
151f0 61 74 20 74 68 65 20 6e 65 77 20 69 6e 73 65 72  at the new inser
15200 74 20 6f 72 0a 2a 2a 20 75 70 64 61 74 65 20 63  t or.** update c
15210 61 6e 20 70 72 6f 63 65 65 64 2e 20 20 50 72 6f  an proceed.  Pro
15220 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65  cessing continue
15230 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72 20 69  s and no error i
15240 73 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 0a 2a  s reported..**.*
15250 2a 20 52 45 53 54 52 49 43 54 2c 20 53 45 54 4e  * RESTRICT, SETN
15260 55 4c 4c 2c 20 61 6e 64 20 43 41 53 43 41 44 45  ULL, and CASCADE
15270 20 61 63 74 69 6f 6e 73 20 61 70 70 6c 79 20 6f   actions apply o
15280 6e 6c 79 20 74 6f 20 66 6f 72 65 69 67 6e 20 6b  nly to foreign k
15290 65 79 73 2e 0a 2a 2a 20 52 45 53 54 52 49 43 54  eys..** RESTRICT
152a0 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20   is the same as 
152b0 41 42 4f 52 54 20 66 6f 72 20 49 4d 4d 45 44 49  ABORT for IMMEDI
152c0 41 54 45 20 66 6f 72 65 69 67 6e 20 6b 65 79 73  ATE foreign keys
152d0 20 61 6e 64 20 74 68 65 0a 2a 2a 20 73 61 6d 65   and the.** same
152e0 20 61 73 20 52 4f 4c 4c 42 41 43 4b 20 66 6f 72   as ROLLBACK for
152f0 20 44 45 46 45 52 52 45 44 20 6b 65 79 73 2e 20   DEFERRED keys. 
15300 20 53 45 54 4e 55 4c 4c 20 6d 65 61 6e 73 20 74   SETNULL means t
15310 68 61 74 20 74 68 65 20 66 6f 72 65 69 67 6e 0a  hat the foreign.
15320 2a 2a 20 6b 65 79 20 69 73 20 73 65 74 20 74 6f  ** key is set to
15330 20 4e 55 4c 4c 2e 20 20 43 41 53 43 41 44 45 20   NULL.  CASCADE 
15340 6d 65 61 6e 73 20 74 68 61 74 20 61 20 44 45 4c  means that a DEL
15350 45 54 45 20 6f 72 20 55 50 44 41 54 45 20 6f 66  ETE or UPDATE of
15360 20 74 68 65 0a 2a 2a 20 72 65 66 65 72 65 6e 63   the.** referenc
15370 65 64 20 74 61 62 6c 65 20 72 6f 77 20 69 73 20  ed table row is 
15380 70 72 6f 70 61 67 61 74 65 64 20 69 6e 74 6f 20  propagated into 
15390 74 68 65 20 72 6f 77 20 74 68 61 74 20 68 6f 6c  the row that hol
153a0 64 73 20 74 68 65 0a 2a 2a 20 66 6f 72 65 69 67  ds the.** foreig
153b0 6e 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  n key..**.** The
153c0 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79 6d 62 6f   following symbo
153d0 6c 69 63 20 76 61 6c 75 65 73 20 61 72 65 20 75  lic values are u
153e0 73 65 64 20 74 6f 20 72 65 63 6f 72 64 20 77 68  sed to record wh
153f0 69 63 68 20 74 79 70 65 0a 2a 2a 20 6f 66 20 61  ich type.** of a
15400 63 74 69 6f 6e 20 74 6f 20 74 61 6b 65 2e 0a 2a  ction to take..*
15410 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 4e 6f 6e  /.#define OE_Non
15420 65 20 20 20 20 20 30 20 20 20 2f 2a 20 54 68 65  e     0   /* The
15430 72 65 20 69 73 20 6e 6f 20 63 6f 6e 73 74 72 61  re is no constra
15440 69 6e 74 20 74 6f 20 63 68 65 63 6b 20 2a 2f 0a  int to check */.
15450 23 64 65 66 69 6e 65 20 4f 45 5f 52 6f 6c 6c 62  #define OE_Rollb
15460 61 63 6b 20 31 20 20 20 2f 2a 20 46 61 69 6c 20  ack 1   /* Fail 
15470 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 6e  the operation an
15480 64 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74  d rollback the t
15490 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64  ransaction */.#d
154a0 65 66 69 6e 65 20 4f 45 5f 41 62 6f 72 74 20 20  efine OE_Abort  
154b0 20 20 32 20 20 20 2f 2a 20 42 61 63 6b 20 6f 75    2   /* Back ou
154c0 74 20 63 68 61 6e 67 65 73 20 62 75 74 20 64 6f  t changes but do
154d0 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61   no rollback tra
154e0 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  nsaction */.#def
154f0 69 6e 65 20 4f 45 5f 46 61 69 6c 20 20 20 20 20  ine OE_Fail     
15500 33 20 20 20 2f 2a 20 53 74 6f 70 20 74 68 65 20  3   /* Stop the 
15510 6f 70 65 72 61 74 69 6f 6e 20 62 75 74 20 6c 65  operation but le
15520 61 76 65 20 61 6c 6c 20 70 72 69 6f 72 20 63 68  ave all prior ch
15530 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  anges */.#define
15540 20 4f 45 5f 49 67 6e 6f 72 65 20 20 20 34 20 20   OE_Ignore   4  
15550 20 2f 2a 20 49 67 6e 6f 72 65 20 74 68 65 20 65   /* Ignore the e
15560 72 72 6f 72 2e 20 44 6f 20 6e 6f 74 20 64 6f 20  rror. Do not do 
15570 74 68 65 20 49 4e 53 45 52 54 20 6f 72 20 55 50  the INSERT or UP
15580 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  DATE */.#define 
15590 4f 45 5f 52 65 70 6c 61 63 65 20 20 35 20 20 20  OE_Replace  5   
155a0 2f 2a 20 44 65 6c 65 74 65 20 65 78 69 73 74 69  /* Delete existi
155b0 6e 67 20 72 65 63 6f 72 64 2c 20 74 68 65 6e 20  ng record, then 
155c0 64 6f 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44  do INSERT or UPD
155d0 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ATE */.#define O
155e0 45 5f 55 70 64 61 74 65 20 20 20 36 20 20 20 2f  E_Update   6   /
155f0 2a 20 50 72 6f 63 65 73 73 20 61 73 20 61 20 44  * Process as a D
15600 4f 20 55 50 44 41 54 45 20 69 6e 20 61 6e 20 75  O UPDATE in an u
15610 70 73 65 72 74 20 2a 2f 0a 23 64 65 66 69 6e 65  psert */.#define
15620 20 4f 45 5f 52 65 73 74 72 69 63 74 20 37 20 20   OE_Restrict 7  
15630 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 20 66 6f 72   /* OE_Abort for
15640 20 49 4d 4d 45 44 49 41 54 45 2c 20 4f 45 5f 52   IMMEDIATE, OE_R
15650 6f 6c 6c 62 61 63 6b 20 66 6f 72 20 44 45 46 45  ollback for DEFE
15660 52 52 45 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20  RRED */.#define 
15670 4f 45 5f 53 65 74 4e 75 6c 6c 20 20 38 20 20 20  OE_SetNull  8   
15680 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65 69  /* Set the forei
15690 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20  gn key value to 
156a0 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20  NULL */.#define 
156b0 4f 45 5f 53 65 74 44 66 6c 74 20 20 39 20 20 20  OE_SetDflt  9   
156c0 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65 69  /* Set the forei
156d0 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20  gn key value to 
156e0 69 74 73 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23  its default */.#
156f0 64 65 66 69 6e 65 20 4f 45 5f 43 61 73 63 61 64  define OE_Cascad
15700 65 20 20 31 30 20 20 2f 2a 20 43 61 73 63 61 64  e  10  /* Cascad
15710 65 20 74 68 65 20 63 68 61 6e 67 65 73 20 2a 2f  e the changes */
15720 0a 23 64 65 66 69 6e 65 20 4f 45 5f 44 65 66 61  .#define OE_Defa
15730 75 6c 74 20 20 31 31 20 20 2f 2a 20 44 6f 20 77  ult  11  /* Do w
15740 68 61 74 65 76 65 72 20 74 68 65 20 64 65 66 61  hatever the defa
15750 75 6c 74 20 61 63 74 69 6f 6e 20 69 73 20 2a 2f  ult action is */
15760 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  .../*.** An inst
15770 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
15780 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
15790 69 73 20 70 61 73 73 65 64 20 61 73 20 74 68 65  is passed as the
157a0 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65   first.** argume
157b0 6e 74 20 74 6f 20 73 71 6c 69 74 65 33 56 64 62  nt to sqlite3Vdb
157c0 65 4b 65 79 43 6f 6d 70 61 72 65 20 61 6e 64 20  eKeyCompare and 
157d0 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6e 74 72  is used to contr
157e0 6f 6c 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72  ol the.** compar
157f0 69 73 6f 6e 20 6f 66 20 74 68 65 20 74 77 6f 20  ison of the two 
15800 69 6e 64 65 78 20 6b 65 79 73 2e 0a 2a 2a 0a 2a  index keys..**.*
15810 2a 20 4e 6f 74 65 20 74 68 61 74 20 61 53 6f 72  * Note that aSor
15820 74 4f 72 64 65 72 5b 5d 20 61 6e 64 20 61 43 6f  tOrder[] and aCo
15830 6c 6c 5b 5d 20 68 61 76 65 20 6e 46 69 65 6c 64  ll[] have nField
15840 2b 31 20 73 6c 6f 74 73 2e 20 20 54 68 65 72 65  +1 slots.  There
15850 0a 2a 2a 20 61 72 65 20 6e 46 69 65 6c 64 20 73  .** are nField s
15860 6c 6f 74 73 20 66 6f 72 20 74 68 65 20 63 6f 6c  lots for the col
15870 75 6d 6e 73 20 6f 66 20 61 6e 20 69 6e 64 65 78  umns of an index
15880 20 74 68 65 6e 20 6f 6e 65 20 65 78 74 72 61 20   then one extra 
15890 73 6c 6f 74 0a 2a 2a 20 66 6f 72 20 74 68 65 20  slot.** for the 
158a0 72 6f 77 69 64 20 61 74 20 74 68 65 20 65 6e 64  rowid at the end
158b0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4b 65 79 49  ..*/.struct KeyI
158c0 6e 66 6f 20 7b 0a 20 20 75 33 32 20 6e 52 65 66  nfo {.  u32 nRef
158d0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ;           /* N
158e0 75 6d 62 65 72 20 6f 66 20 72 65 66 65 72 65 6e  umber of referen
158f0 63 65 73 20 74 6f 20 74 68 69 73 20 4b 65 79 49  ces to this KeyI
15900 6e 66 6f 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20  nfo object */.  
15910 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20  u8 enc;         
15920 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f      /* Text enco
15930 64 69 6e 67 20 2d 20 6f 6e 65 20 6f 66 20 74 68  ding - one of th
15940 65 20 53 51 4c 49 54 45 5f 55 54 46 2a 20 76 61  e SQLITE_UTF* va
15950 6c 75 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 4b  lues */.  u16 nK
15960 65 79 46 69 65 6c 64 3b 20 20 20 20 20 20 2f 2a  eyField;      /*
15970 20 4e 75 6d 62 65 72 20 6f 66 20 6b 65 79 20 63   Number of key c
15980 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 69 6e  olumns in the in
15990 64 65 78 20 2a 2f 0a 20 20 75 31 36 20 6e 41 6c  dex */.  u16 nAl
159a0 6c 46 69 65 6c 64 3b 20 20 20 20 20 20 2f 2a 20  lField;      /* 
159b0 54 6f 74 61 6c 20 63 6f 6c 75 6d 6e 73 2c 20 69  Total columns, i
159c0 6e 63 6c 75 64 69 6e 67 20 6b 65 79 20 70 6c 75  ncluding key plu
159d0 73 20 6f 74 68 65 72 73 20 2a 2f 0a 20 20 73 71  s others */.  sq
159e0 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20  lite3 *db;      
159f0 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73    /* The databas
15a00 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a  e connection */.
15a10 20 20 75 38 20 2a 61 53 6f 72 74 46 6c 61 67 73    u8 *aSortFlags
15a20 3b 20 20 20 20 20 2f 2a 20 53 6f 72 74 20 6f 72  ;     /* Sort or
15a30 64 65 72 20 66 6f 72 20 65 61 63 68 20 63 6f 6c  der for each col
15a40 75 6d 6e 2e 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65  umn. */.  CollSe
15a50 71 20 2a 61 43 6f 6c 6c 5b 31 5d 3b 20 20 2f 2a  q *aColl[1];  /*
15a60 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   Collating seque
15a70 6e 63 65 20 66 6f 72 20 65 61 63 68 20 74 65 72  nce for each ter
15a80 6d 20 6f 66 20 74 68 65 20 6b 65 79 20 2a 2f 0a  m of the key */.
15a90 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  };../*.** Allowe
15aa0 64 20 62 69 74 20 76 61 6c 75 65 73 20 66 6f 72  d bit values for
15ab0 20 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20   entries in the 
15ac0 4b 65 79 49 6e 66 6f 2e 61 53 6f 72 74 46 6c 61  KeyInfo.aSortFla
15ad0 67 73 5b 5d 20 61 72 72 61 79 2e 0a 2a 2f 0a 23  gs[] array..*/.#
15ae0 64 65 66 69 6e 65 20 4b 45 59 49 4e 46 4f 5f 4f  define KEYINFO_O
15af0 52 44 45 52 5f 44 45 53 43 20 20 20 20 30 78 30  RDER_DESC    0x0
15b00 31 20 20 20 20 2f 2a 20 44 45 53 43 20 73 6f 72  1    /* DESC sor
15b10 74 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66 69  t order */.#defi
15b20 6e 65 20 4b 45 59 49 4e 46 4f 5f 4f 52 44 45 52  ne KEYINFO_ORDER
15b30 5f 42 49 47 4e 55 4c 4c 20 30 78 30 32 20 20 20  _BIGNULL 0x02   
15b40 20 2f 2a 20 4e 55 4c 4c 20 69 73 20 6c 61 72 67   /* NULL is larg
15b50 65 72 20 74 68 61 6e 20 61 6e 79 20 6f 74 68 65  er than any othe
15b60 72 20 76 61 6c 75 65 20 2a 2f 0a 0a 2f 2a 0a 2a  r value */../*.*
15b70 2a 20 54 68 69 73 20 6f 62 6a 65 63 74 20 68 6f  * This object ho
15b80 6c 64 73 20 61 20 72 65 63 6f 72 64 20 77 68 69  lds a record whi
15b90 63 68 20 68 61 73 20 62 65 65 6e 20 70 61 72 73  ch has been pars
15ba0 65 64 20 6f 75 74 20 69 6e 74 6f 20 69 6e 64 69  ed out into indi
15bb0 76 69 64 75 61 6c 0a 2a 2a 20 66 69 65 6c 64 73  vidual.** fields
15bc0 2c 20 66 6f 72 20 74 68 65 20 70 75 72 70 6f 73  , for the purpos
15bd0 65 73 20 6f 66 20 64 6f 69 6e 67 20 61 20 63 6f  es of doing a co
15be0 6d 70 61 72 69 73 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  mparison..**.** 
15bf0 41 20 72 65 63 6f 72 64 20 69 73 20 61 6e 20 6f  A record is an o
15c00 62 6a 65 63 74 20 74 68 61 74 20 63 6f 6e 74 61  bject that conta
15c10 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20  ins one or more 
15c20 66 69 65 6c 64 73 20 6f 66 20 64 61 74 61 2e 0a  fields of data..
15c30 2a 2a 20 52 65 63 6f 72 64 73 20 61 72 65 20 75  ** Records are u
15c40 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65  sed to store the
15c50 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61 20 74 61   content of a ta
15c60 62 6c 65 20 72 6f 77 20 61 6e 64 20 74 6f 20 73  ble row and to s
15c70 74 6f 72 65 0a 2a 2a 20 74 68 65 20 6b 65 79 20  tore.** the key 
15c80 6f 66 20 61 6e 20 69 6e 64 65 78 2e 20 20 41 20  of an index.  A 
15c90 62 6c 6f 62 20 65 6e 63 6f 64 69 6e 67 20 6f 66  blob encoding of
15ca0 20 61 20 72 65 63 6f 72 64 20 69 73 20 63 72 65   a record is cre
15cb0 61 74 65 64 20 62 79 0a 2a 2a 20 74 68 65 20 4f  ated by.** the O
15cc0 50 5f 4d 61 6b 65 52 65 63 6f 72 64 20 6f 70 63  P_MakeRecord opc
15cd0 6f 64 65 20 6f 66 20 74 68 65 20 56 44 42 45 20  ode of the VDBE 
15ce0 61 6e 64 20 69 73 20 64 69 73 61 73 73 65 6d 62  and is disassemb
15cf0 6c 65 64 20 62 79 20 74 68 65 0a 2a 2a 20 4f 50  led by the.** OP
15d00 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e 0a  _Column opcode..
15d10 2a 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  **.** An instanc
15d20 65 20 6f 66 20 74 68 69 73 20 6f 62 6a 65 63 74  e of this object
15d30 20 73 65 72 76 65 73 20 61 73 20 61 20 22 6b 65   serves as a "ke
15d40 79 22 20 66 6f 72 20 64 6f 69 6e 67 20 61 20 73  y" for doing a s
15d50 65 61 72 63 68 20 6f 6e 0a 2a 2a 20 61 6e 20 69  earch on.** an i
15d60 6e 64 65 78 20 62 2b 74 72 65 65 2e 20 54 68 65  ndex b+tree. The
15d70 20 67 6f 61 6c 20 6f 66 20 74 68 65 20 73 65 61   goal of the sea
15d80 72 63 68 20 69 73 20 74 6f 20 66 69 6e 64 20 74  rch is to find t
15d90 68 65 20 65 6e 74 72 79 20 74 68 61 74 0a 2a 2a  he entry that.**
15da0 20 69 73 20 63 6c 6f 73 65 64 20 74 6f 20 74 68   is closed to th
15db0 65 20 6b 65 79 20 64 65 73 63 72 69 62 65 64 20  e key described 
15dc0 62 79 20 74 68 69 73 20 6f 62 6a 65 63 74 2e 20  by this object. 
15dd0 20 54 68 69 73 20 6f 62 6a 65 63 74 20 6d 69 67   This object mig
15de0 68 74 20 68 6f 6c 64 0a 2a 2a 20 6a 75 73 74 20  ht hold.** just 
15df0 61 20 70 72 65 66 69 78 20 6f 66 20 74 68 65 20  a prefix of the 
15e00 6b 65 79 2e 20 20 54 68 65 20 6e 75 6d 62 65 72  key.  The number
15e10 20 6f 66 20 66 69 65 6c 64 73 20 69 73 20 67 69   of fields is gi
15e20 76 65 6e 20 62 79 0a 2a 2a 20 70 4b 65 79 49 6e  ven by.** pKeyIn
15e30 66 6f 2d 3e 6e 46 69 65 6c 64 2e 0a 2a 2a 0a 2a  fo->nField..**.*
15e40 2a 20 54 68 65 20 72 31 20 61 6e 64 20 72 32 20  * The r1 and r2 
15e50 66 69 65 6c 64 73 20 61 72 65 20 74 68 65 20 76  fields are the v
15e60 61 6c 75 65 73 20 74 6f 20 72 65 74 75 72 6e 20  alues to return 
15e70 69 66 20 74 68 69 73 20 6b 65 79 20 69 73 20 6c  if this key is l
15e80 65 73 73 20 74 68 61 6e 0a 2a 2a 20 6f 72 20 67  ess than.** or g
15e90 72 65 61 74 65 72 20 74 68 61 6e 20 61 20 6b 65  reater than a ke
15ea0 79 20 69 6e 20 74 68 65 20 62 74 72 65 65 2c 20  y in the btree, 
15eb0 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20 54  respectively.  T
15ec0 68 65 73 65 20 61 72 65 20 6e 6f 72 6d 61 6c 6c  hese are normall
15ed0 79 0a 2a 2a 20 2d 31 20 61 6e 64 20 2b 31 20 72  y.** -1 and +1 r
15ee0 65 73 70 65 63 74 69 76 65 6c 79 2c 20 62 75 74  espectively, but
15ef0 20 6d 69 67 68 74 20 62 65 20 69 6e 76 65 72 74   might be invert
15f00 65 64 20 74 6f 20 2b 31 20 61 6e 64 20 2d 31 20  ed to +1 and -1 
15f10 69 66 20 74 68 65 20 62 2d 74 72 65 65 0a 2a 2a  if the b-tree.**
15f20 20 69 73 20 69 6e 20 44 45 53 43 20 6f 72 64 65   is in DESC orde
15f30 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6b 65 79  r..**.** The key
15f40 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66 75 6e 63   comparison func
15f50 74 69 6f 6e 73 20 61 63 74 75 61 6c 6c 79 20 72  tions actually r
15f60 65 74 75 72 6e 20 64 65 66 61 75 6c 74 5f 72 63  eturn default_rc
15f70 20 77 68 65 6e 20 74 68 65 79 20 66 69 6e 64 0a   when they find.
15f80 2a 2a 20 61 6e 20 65 71 75 61 6c 73 20 63 6f 6d  ** an equals com
15f90 70 61 72 69 73 6f 6e 2e 20 20 64 65 66 61 75 6c  parison.  defaul
15fa0 74 5f 72 63 20 63 61 6e 20 62 65 20 2d 31 2c 20  t_rc can be -1, 
15fb0 30 2c 20 6f 72 20 2b 31 2e 20 20 49 66 20 74 68  0, or +1.  If th
15fc0 65 72 65 20 61 72 65 0a 2a 2a 20 6d 75 6c 74 69  ere are.** multi
15fd0 70 6c 65 20 65 6e 74 72 69 65 73 20 69 6e 20 74  ple entries in t
15fe0 68 65 20 62 2d 74 72 65 65 20 77 69 74 68 20 74  he b-tree with t
15ff0 68 65 20 73 61 6d 65 20 6b 65 79 20 28 77 68 65  he same key (whe
16000 6e 20 6f 6e 6c 79 20 6c 6f 6f 6b 69 6e 67 0a 2a  n only looking.*
16010 2a 20 61 74 20 74 68 65 20 66 69 72 73 74 20 70  * at the first p
16020 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 73  KeyInfo->nFields
16030 2c 29 20 74 68 65 6e 20 64 65 66 61 75 6c 74 5f  ,) then default_
16040 72 63 20 63 61 6e 20 62 65 20 73 65 74 20 74 6f  rc can be set to
16050 20 2d 31 20 74 6f 0a 2a 2a 20 63 61 75 73 65 20   -1 to.** cause 
16060 74 68 65 20 73 65 61 72 63 68 20 74 6f 20 66 69  the search to fi
16070 6e 64 20 74 68 65 20 6c 61 73 74 20 6d 61 74 63  nd the last matc
16080 68 2c 20 6f 72 20 2b 31 20 74 6f 20 63 61 75 73  h, or +1 to caus
16090 65 20 74 68 65 20 73 65 61 72 63 68 20 74 6f 0a  e the search to.
160a0 2a 2a 20 66 69 6e 64 20 74 68 65 20 66 69 72 73  ** find the firs
160b0 74 20 6d 61 74 63 68 2e 0a 2a 2a 0a 2a 2a 20 54  t match..**.** T
160c0 68 65 20 6b 65 79 20 63 6f 6d 70 61 72 69 73 6f  he key compariso
160d0 6e 20 66 75 6e 63 74 69 6f 6e 73 20 77 69 6c 6c  n functions will
160e0 20 73 65 74 20 65 71 53 65 65 6e 20 74 6f 20 74   set eqSeen to t
160f0 72 75 65 20 69 66 20 74 68 65 79 20 65 76 65 72  rue if they ever
16100 0a 2a 2a 20 67 65 74 20 61 6e 64 20 65 71 75 61  .** get and equa
16110 6c 20 72 65 73 75 6c 74 73 20 77 68 65 6e 20 63  l results when c
16120 6f 6d 70 61 72 69 6e 67 20 74 68 69 73 20 73 74  omparing this st
16130 72 75 63 74 75 72 65 20 74 6f 20 61 20 62 2d 74  ructure to a b-t
16140 72 65 65 20 72 65 63 6f 72 64 2e 0a 2a 2a 20 57  ree record..** W
16150 68 65 6e 20 64 65 66 61 75 6c 74 5f 72 63 21 3d  hen default_rc!=
16160 30 2c 20 74 68 65 20 73 65 61 72 63 68 20 6d 69  0, the search mi
16170 67 68 74 20 65 6e 64 20 75 70 20 6f 6e 20 74 68  ght end up on th
16180 65 20 72 65 63 6f 72 64 20 69 6d 6d 65 64 69 61  e record immedia
16190 74 65 6c 79 0a 2a 2a 20 62 65 66 6f 72 65 20 74  tely.** before t
161a0 68 65 20 66 69 72 73 74 20 6d 61 74 63 68 20 6f  he first match o
161b0 72 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 61 66  r immediately af
161c0 74 65 72 20 74 68 65 20 6c 61 73 74 20 6d 61 74  ter the last mat
161d0 63 68 2e 20 20 54 68 65 0a 2a 2a 20 65 71 53 65  ch.  The.** eqSe
161e0 65 6e 20 66 69 65 6c 64 20 77 69 6c 6c 20 69 6e  en field will in
161f0 64 69 63 61 74 65 20 77 68 65 74 68 65 72 20 6f  dicate whether o
16200 72 20 6e 6f 74 20 61 6e 20 65 78 61 63 74 20 6d  r not an exact m
16210 61 74 63 68 20 65 78 69 73 74 73 20 69 6e 20 74  atch exists in t
16220 68 65 0a 2a 2a 20 62 2d 74 72 65 65 2e 0a 2a 2f  he.** b-tree..*/
16230 0a 73 74 72 75 63 74 20 55 6e 70 61 63 6b 65 64  .struct Unpacked
16240 52 65 63 6f 72 64 20 7b 0a 20 20 4b 65 79 49 6e  Record {.  KeyIn
16250 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 20 20 2f  fo *pKeyInfo;  /
16260 2a 20 43 6f 6c 6c 61 74 69 6f 6e 20 61 6e 64 20  * Collation and 
16270 73 6f 72 74 2d 6f 72 64 65 72 20 69 6e 66 6f 72  sort-order infor
16280 6d 61 74 69 6f 6e 20 2a 2f 0a 20 20 4d 65 6d 20  mation */.  Mem 
16290 2a 61 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20  *aMem;          
162a0 2f 2a 20 56 61 6c 75 65 73 20 2a 2f 0a 20 20 75  /* Values */.  u
162b0 31 36 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20  16 nField;      
162c0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
162d0 65 6e 74 72 69 65 73 20 69 6e 20 61 70 4d 65 6d  entries in apMem
162e0 5b 5d 20 2a 2f 0a 20 20 69 38 20 64 65 66 61 75  [] */.  i8 defau
162f0 6c 74 5f 72 63 3b 20 20 20 20 20 20 2f 2a 20 43  lt_rc;      /* C
16300 6f 6d 70 61 72 69 73 6f 6e 20 72 65 73 75 6c 74  omparison result
16310 20 69 66 20 6b 65 79 73 20 61 72 65 20 65 71 75   if keys are equ
16320 61 6c 20 2a 2f 0a 20 20 75 38 20 65 72 72 43 6f  al */.  u8 errCo
16330 64 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 45  de;         /* E
16340 72 72 6f 72 20 64 65 74 65 63 74 65 64 20 62 79  rror detected by
16350 20 78 52 65 63 6f 72 64 43 6f 6d 70 61 72 65 20   xRecordCompare 
16360 28 43 4f 52 52 55 50 54 20 6f 72 20 4e 4f 4d 45  (CORRUPT or NOME
16370 4d 29 20 2a 2f 0a 20 20 69 38 20 72 31 3b 20 20  M) */.  i8 r1;  
16380 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
16390 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20 69  alue to return i
163a0 66 20 28 6c 68 73 20 3c 20 72 68 73 29 20 2a 2f  f (lhs < rhs) */
163b0 0a 20 20 69 38 20 72 32 3b 20 20 20 20 20 20 20  .  i8 r2;       
163c0 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
163d0 74 6f 20 72 65 74 75 72 6e 20 69 66 20 28 6c 68  to return if (lh
163e0 73 20 3e 20 72 68 73 29 20 2a 2f 0a 20 20 75 38  s > rhs) */.  u8
163f0 20 65 71 53 65 65 6e 3b 20 20 20 20 20 20 20 20   eqSeen;        
16400 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61 6e 20    /* True if an 
16410 65 71 75 61 6c 69 74 79 20 63 6f 6d 70 61 72 69  equality compari
16420 73 6f 6e 20 68 61 73 20 62 65 65 6e 20 73 65 65  son has been see
16430 6e 20 2a 2f 0a 7d 3b 0a 0a 0a 2f 2a 0a 2a 2a 20  n */.};.../*.** 
16440 45 61 63 68 20 53 51 4c 20 69 6e 64 65 78 20 69  Each SQL index i
16450 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e  s represented in
16460 20 6d 65 6d 6f 72 79 20 62 79 20 61 6e 0a 2a 2a   memory by an.**
16470 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
16480 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
16490 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ture..**.** The 
164a0 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 74  columns of the t
164b0 61 62 6c 65 20 74 68 61 74 20 61 72 65 20 74 6f  able that are to
164c0 20 62 65 20 69 6e 64 65 78 65 64 20 61 72 65 20   be indexed are 
164d0 64 65 73 63 72 69 62 65 64 0a 2a 2a 20 62 79 20  described.** by 
164e0 74 68 65 20 61 69 43 6f 6c 75 6d 6e 5b 5d 20 66  the aiColumn[] f
164f0 69 65 6c 64 20 6f 66 20 74 68 69 73 20 73 74 72  ield of this str
16500 75 63 74 75 72 65 2e 20 20 46 6f 72 20 65 78 61  ucture.  For exa
16510 6d 70 6c 65 2c 20 73 75 70 70 6f 73 65 0a 2a 2a  mple, suppose.**
16520 20 77 65 20 68 61 76 65 20 74 68 65 20 66 6f 6c   we have the fol
16530 6c 6f 77 69 6e 67 20 74 61 62 6c 65 20 61 6e 64  lowing table and
16540 20 69 6e 64 65 78 3a 0a 2a 2a 0a 2a 2a 20 20 20   index:.**.**   
16550 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 45    CREATE TABLE E
16560 78 31 28 63 31 20 69 6e 74 2c 20 63 32 20 69 6e  x1(c1 int, c2 in
16570 74 2c 20 63 33 20 74 65 78 74 29 3b 0a 2a 2a 20  t, c3 text);.** 
16580 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58      CREATE INDEX
16590 20 45 78 32 20 4f 4e 20 45 78 31 28 63 33 2c 63   Ex2 ON Ex1(c3,c
165a0 31 29 3b 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65  1);.**.** In the
165b0 20 54 61 62 6c 65 20 73 74 72 75 63 74 75 72 65   Table structure
165c0 20 64 65 73 63 72 69 62 69 6e 67 20 45 78 31 2c   describing Ex1,
165d0 20 6e 43 6f 6c 3d 3d 33 20 62 65 63 61 75 73 65   nCol==3 because
165e0 20 74 68 65 72 65 20 61 72 65 0a 2a 2a 20 74 68   there are.** th
165f0 72 65 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74  ree columns in t
16600 68 65 20 74 61 62 6c 65 2e 20 20 49 6e 20 74 68  he table.  In th
16610 65 20 49 6e 64 65 78 20 73 74 72 75 63 74 75 72  e Index structur
16620 65 20 64 65 73 63 72 69 62 69 6e 67 0a 2a 2a 20  e describing.** 
16630 45 78 32 2c 20 6e 43 6f 6c 75 6d 6e 3d 3d 32 20  Ex2, nColumn==2 
16640 73 69 6e 63 65 20 32 20 6f 66 20 74 68 65 20 33  since 2 of the 3
16650 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 45 78 31 20   columns of Ex1 
16660 61 72 65 20 69 6e 64 65 78 65 64 2e 0a 2a 2a 20  are indexed..** 
16670 54 68 65 20 76 61 6c 75 65 20 6f 66 20 61 69 43  The value of aiC
16680 6f 6c 75 6d 6e 20 69 73 20 7b 32 2c 20 30 7d 2e  olumn is {2, 0}.
16690 20 20 61 69 43 6f 6c 75 6d 6e 5b 30 5d 3d 3d 32    aiColumn[0]==2
166a0 20 62 65 63 61 75 73 65 20 74 68 65 0a 2a 2a 20   because the.** 
166b0 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20 74 6f 20  first column to 
166c0 62 65 20 69 6e 64 65 78 65 64 20 28 63 33 29 20  be indexed (c3) 
166d0 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20  has an index of 
166e0 32 20 69 6e 20 45 78 31 2e 61 43 6f 6c 5b 5d 2e  2 in Ex1.aCol[].
166f0 0a 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64 20 63  .** The second c
16700 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65  olumn to be inde
16710 78 65 64 20 28 63 31 29 20 68 61 73 20 61 6e 20  xed (c1) has an 
16720 69 6e 64 65 78 20 6f 66 20 30 20 69 6e 0a 2a 2a  index of 0 in.**
16730 20 45 78 31 2e 61 43 6f 6c 5b 5d 2c 20 68 65 6e   Ex1.aCol[], hen
16740 63 65 20 45 78 32 2e 61 69 43 6f 6c 75 6d 6e 5b  ce Ex2.aiColumn[
16750 31 5d 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  1]==0..**.** The
16760 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20 66   Index.onError f
16770 69 65 6c 64 20 64 65 74 65 72 6d 69 6e 65 73 20  ield determines 
16780 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
16790 68 65 20 69 6e 64 65 78 65 64 20 63 6f 6c 75 6d  he indexed colum
167a0 6e 73 0a 2a 2a 20 6d 75 73 74 20 62 65 20 75 6e  ns.** must be un
167b0 69 71 75 65 20 61 6e 64 20 77 68 61 74 20 74 6f  ique and what to
167c0 20 64 6f 20 69 66 20 74 68 65 79 20 61 72 65 20   do if they are 
167d0 6e 6f 74 2e 20 20 57 68 65 6e 20 49 6e 64 65 78  not.  When Index
167e0 2e 6f 6e 45 72 72 6f 72 3d 4f 45 5f 4e 6f 6e 65  .onError=OE_None
167f0 2c 0a 2a 2a 20 69 74 20 6d 65 61 6e 73 20 74 68  ,.** it means th
16800 69 73 20 69 73 20 6e 6f 74 20 61 20 75 6e 69 71  is is not a uniq
16810 75 65 20 69 6e 64 65 78 2e 20 20 4f 74 68 65 72  ue index.  Other
16820 77 69 73 65 20 69 74 20 69 73 20 61 20 75 6e 69  wise it is a uni
16830 71 75 65 20 69 6e 64 65 78 0a 2a 2a 20 61 6e 64  que index.** and
16840 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 49 6e   the value of In
16850 64 65 78 2e 6f 6e 45 72 72 6f 72 20 69 6e 64 69  dex.onError indi
16860 63 61 74 65 20 74 68 65 20 77 68 69 63 68 20 63  cate the which c
16870 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69  onflict resoluti
16880 6f 6e 0a 2a 2a 20 61 6c 67 6f 72 69 74 68 6d 20  on.** algorithm 
16890 74 6f 20 65 6d 70 6c 6f 79 20 77 68 65 6e 65 76  to employ whenev
168a0 65 72 20 61 6e 20 61 74 74 65 6d 70 74 20 69 73  er an attempt is
168b0 20 6d 61 64 65 20 74 6f 20 69 6e 73 65 72 74 20   made to insert 
168c0 61 20 6e 6f 6e 2d 75 6e 69 71 75 65 0a 2a 2a 20  a non-unique.** 
168d0 65 6c 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 57  element..**.** W
168e0 68 69 6c 65 20 70 61 72 73 69 6e 67 20 61 20 43  hile parsing a C
168f0 52 45 41 54 45 20 54 41 42 4c 45 20 6f 72 20 43  REATE TABLE or C
16900 52 45 41 54 45 20 49 4e 44 45 58 20 73 74 61 74  REATE INDEX stat
16910 65 6d 65 6e 74 20 69 6e 20 6f 72 64 65 72 20 74  ement in order t
16920 6f 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20 56 44  o.** generate VD
16930 42 45 20 63 6f 64 65 20 28 61 73 20 6f 70 70 6f  BE code (as oppo
16940 73 65 64 20 74 6f 20 70 61 72 73 69 6e 67 20 6f  sed to parsing o
16950 6e 65 20 72 65 61 64 20 66 72 6f 6d 20 61 6e 20  ne read from an 
16960 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 0a 2a 2a  sqlite_master.**
16970 20 74 61 62 6c 65 20 61 73 20 70 61 72 74 20 6f   table as part o
16980 66 20 70 61 72 73 69 6e 67 20 61 6e 20 65 78 69  f parsing an exi
16990 73 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 73  sting database s
169a0 63 68 65 6d 61 29 2c 20 74 72 61 6e 73 69 65 6e  chema), transien
169b0 74 20 69 6e 73 74 61 6e 63 65 73 0a 2a 2a 20 6f  t instances.** o
169c0 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
169d0 20 6d 61 79 20 62 65 20 63 72 65 61 74 65 64 2e   may be created.
169e0 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 74 68   In this case th
169f0 65 20 49 6e 64 65 78 2e 74 6e 75 6d 20 76 61 72  e Index.tnum var
16a00 69 61 62 6c 65 20 69 73 0a 2a 2a 20 75 73 65 64  iable is.** used
16a10 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 61 64   to store the ad
16a20 64 72 65 73 73 20 6f 66 20 61 20 56 44 42 45 20  dress of a VDBE 
16a30 69 6e 73 74 72 75 63 74 69 6f 6e 2c 20 6e 6f 74  instruction, not
16a40 20 61 20 64 61 74 61 62 61 73 65 20 70 61 67 65   a database page
16a50 0a 2a 2a 20 6e 75 6d 62 65 72 20 28 69 74 20 63  .** number (it c
16a60 61 6e 6e 6f 74 20 2d 20 74 68 65 20 64 61 74 61  annot - the data
16a70 62 61 73 65 20 70 61 67 65 20 69 73 20 6e 6f 74  base page is not
16a80 20 61 6c 6c 6f 63 61 74 65 64 20 75 6e 74 69 6c   allocated until
16a90 20 74 68 65 20 56 44 42 45 0a 2a 2a 20 70 72 6f   the VDBE.** pro
16aa0 67 72 61 6d 20 69 73 20 65 78 65 63 75 74 65 64  gram is executed
16ab0 29 2e 20 53 65 65 20 63 6f 6e 76 65 72 74 54 6f  ). See convertTo
16ac0 57 69 74 68 6f 75 74 52 6f 77 69 64 54 61 62 6c  WithoutRowidTabl
16ad0 65 28 29 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  e() for details.
16ae0 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64 65 78  .*/.struct Index
16af0 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65   {.  char *zName
16b00 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
16b10 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 69 6e   Name of this in
16b20 64 65 78 20 2a 2f 0a 20 20 69 31 36 20 2a 61 69  dex */.  i16 *ai
16b30 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20  Column;         
16b40 20 20 2f 2a 20 57 68 69 63 68 20 63 6f 6c 75 6d    /* Which colum
16b50 6e 73 20 61 72 65 20 75 73 65 64 20 62 79 20 74  ns are used by t
16b60 68 69 73 20 69 6e 64 65 78 2e 20 20 31 73 74 20  his index.  1st 
16b70 69 73 20 30 20 2a 2f 0a 20 20 4c 6f 67 45 73 74  is 0 */.  LogEst
16b80 20 2a 61 69 52 6f 77 4c 6f 67 45 73 74 3b 20 20   *aiRowLogEst;  
16b90 20 20 20 2f 2a 20 46 72 6f 6d 20 41 4e 41 4c 59     /* From ANALY
16ba0 5a 45 3a 20 45 73 74 2e 20 72 6f 77 73 20 73 65  ZE: Est. rows se
16bb0 6c 65 63 74 65 64 20 62 79 20 65 61 63 68 20 63  lected by each c
16bc0 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 54 61 62 6c 65  olumn */.  Table
16bd0 20 2a 70 54 61 62 6c 65 3b 20 20 20 20 20 20 20   *pTable;       
16be0 20 20 20 20 2f 2a 20 54 68 65 20 53 51 4c 20 74      /* The SQL t
16bf0 61 62 6c 65 20 62 65 69 6e 67 20 69 6e 64 65 78  able being index
16c00 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43  ed */.  char *zC
16c10 6f 6c 41 66 66 3b 20 20 20 20 20 20 20 20 20 20  olAff;          
16c20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65 66 69 6e   /* String defin
16c30 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74 79  ing the affinity
16c40 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20   of each column 
16c50 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 4e 65 78  */.  Index *pNex
16c60 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  t;            /*
16c70 20 54 68 65 20 6e 65 78 74 20 69 6e 64 65 78 20   The next index 
16c80 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
16c90 74 68 65 20 73 61 6d 65 20 74 61 62 6c 65 20 2a  the same table *
16ca0 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68  /.  Schema *pSch
16cb0 65 6d 61 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ema;         /* 
16cc0 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e  Schema containin
16cd0 67 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a  g this index */.
16ce0 20 20 75 38 20 2a 61 53 6f 72 74 4f 72 64 65 72    u8 *aSortOrder
16cf0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 66 6f  ;          /* fo
16d00 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 3a 20 54  r each column: T
16d10 72 75 65 3d 3d 44 45 53 43 2c 20 46 61 6c 73 65  rue==DESC, False
16d20 3d 3d 41 53 43 20 2a 2f 0a 20 20 63 6f 6e 73 74  ==ASC */.  const
16d30 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c 6c 3b 20   char **azColl; 
16d40 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20      /* Array of 
16d50 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
16d60 63 65 20 6e 61 6d 65 73 20 66 6f 72 20 69 6e 64  ce names for ind
16d70 65 78 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 50  ex */.  Expr *pP
16d80 61 72 74 49 64 78 57 68 65 72 65 3b 20 20 20 20  artIdxWhere;    
16d90 20 2f 2a 20 57 48 45 52 45 20 63 6c 61 75 73 65   /* WHERE clause
16da0 20 66 6f 72 20 70 61 72 74 69 61 6c 20 69 6e 64   for partial ind
16db0 69 63 65 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69  ices */.  ExprLi
16dc0 73 74 20 2a 61 43 6f 6c 45 78 70 72 3b 20 20 20  st *aColExpr;   
16dd0 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 65 78 70     /* Column exp
16de0 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e  ressions */.  in
16df0 74 20 74 6e 75 6d 3b 20 20 20 20 20 20 20 20 20  t tnum;         
16e00 20 20 20 20 20 20 20 2f 2a 20 44 42 20 50 61 67         /* DB Pag
16e10 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 72 6f 6f  e containing roo
16e20 74 20 6f 66 20 74 68 69 73 20 69 6e 64 65 78 20  t of this index 
16e30 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 73 7a 49 64  */.  LogEst szId
16e40 78 52 6f 77 3b 20 20 20 20 20 20 20 20 20 2f 2a  xRow;         /*
16e50 20 45 73 74 69 6d 61 74 65 64 20 61 76 65 72 61   Estimated avera
16e60 67 65 20 72 6f 77 20 73 69 7a 65 20 69 6e 20 62  ge row size in b
16e70 79 74 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 4b  ytes */.  u16 nK
16e80 65 79 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20  eyCol;          
16e90 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
16ea0 63 6f 6c 75 6d 6e 73 20 66 6f 72 6d 69 6e 67 20  columns forming 
16eb0 74 68 65 20 6b 65 79 20 2a 2f 0a 20 20 75 31 36  the key */.  u16
16ec0 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20   nColumn;       
16ed0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
16ee0 6f 66 20 63 6f 6c 75 6d 6e 73 20 73 74 6f 72 65  of columns store
16ef0 64 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20 2a  d in the index *
16f00 2f 0a 20 20 75 38 20 6f 6e 45 72 72 6f 72 3b 20  /.  u8 onError; 
16f10 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
16f20 4f 45 5f 41 62 6f 72 74 2c 20 4f 45 5f 49 67 6e  OE_Abort, OE_Ign
16f30 6f 72 65 2c 20 4f 45 5f 52 65 70 6c 61 63 65 2c  ore, OE_Replace,
16f40 20 6f 72 20 4f 45 5f 4e 6f 6e 65 20 2a 2f 0a 20   or OE_None */. 
16f50 20 75 6e 73 69 67 6e 65 64 20 69 64 78 54 79 70   unsigned idxTyp
16f60 65 3a 32 3b 20 20 20 20 20 20 2f 2a 20 30 3a 4e  e:2;      /* 0:N
16f70 6f 72 6d 61 6c 20 31 3a 55 4e 49 51 55 45 2c 20  ormal 1:UNIQUE, 
16f80 32 3a 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 33  2:PRIMARY KEY, 3
16f90 3a 49 50 4b 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  :IPK */.  unsign
16fa0 65 64 20 62 55 6e 6f 72 64 65 72 65 64 3a 31 3b  ed bUnordered:1;
16fb0 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73 20 69     /* Use this i
16fc0 6e 64 65 78 20 66 6f 72 20 3d 3d 20 6f 72 20 49  ndex for == or I
16fd0 4e 20 71 75 65 72 69 65 73 20 6f 6e 6c 79 20 2a  N queries only *
16fe0 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 75 6e 69  /.  unsigned uni
16ff0 71 4e 6f 74 4e 75 6c 6c 3a 31 3b 20 20 2f 2a 20  qNotNull:1;  /* 
17000 54 72 75 65 20 69 66 20 55 4e 49 51 55 45 20 61  True if UNIQUE a
17010 6e 64 20 4e 4f 54 20 4e 55 4c 4c 20 66 6f 72 20  nd NOT NULL for 
17020 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20  all columns */. 
17030 20 75 6e 73 69 67 6e 65 64 20 69 73 52 65 73 69   unsigned isResi
17040 7a 65 64 3a 31 3b 20 20 20 20 2f 2a 20 54 72 75  zed:1;    /* Tru
17050 65 20 69 66 20 72 65 73 69 7a 65 49 6e 64 65 78  e if resizeIndex
17060 4f 62 6a 65 63 74 28 29 20 68 61 73 20 62 65 65  Object() has bee
17070 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20 75 6e  n called */.  un
17080 73 69 67 6e 65 64 20 69 73 43 6f 76 65 72 69 6e  signed isCoverin
17090 67 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20 69  g:1;   /* True i
170a0 66 20 74 68 69 73 20 69 73 20 61 20 63 6f 76 65  f this is a cove
170b0 72 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20  ring index */.  
170c0 75 6e 73 69 67 6e 65 64 20 6e 6f 53 6b 69 70 53  unsigned noSkipS
170d0 63 61 6e 3a 31 3b 20 20 20 2f 2a 20 44 6f 20 6e  can:1;   /* Do n
170e0 6f 74 20 74 72 79 20 74 6f 20 75 73 65 20 73 6b  ot try to use sk
170f0 69 70 2d 73 63 61 6e 20 69 66 20 74 72 75 65 20  ip-scan if true 
17100 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 68 61  */.  unsigned ha
17110 73 53 74 61 74 31 3a 31 3b 20 20 20 20 20 2f 2a  sStat1:1;     /*
17120 20 61 69 52 6f 77 4c 6f 67 45 73 74 20 76 61 6c   aiRowLogEst val
17130 75 65 73 20 63 6f 6d 65 20 66 72 6f 6d 20 73 71  ues come from sq
17140 6c 69 74 65 5f 73 74 61 74 31 20 2a 2f 0a 20 20  lite_stat1 */.  
17150 75 6e 73 69 67 6e 65 64 20 62 4e 6f 51 75 65 72  unsigned bNoQuer
17160 79 3a 31 3b 20 20 20 20 20 2f 2a 20 44 6f 20 6e  y:1;     /* Do n
17170 6f 74 20 75 73 65 20 74 68 69 73 20 69 6e 64 65  ot use this inde
17180 78 20 74 6f 20 6f 70 74 69 6d 69 7a 65 20 71 75  x to optimize qu
17190 65 72 69 65 73 20 2a 2f 0a 20 20 75 6e 73 69 67  eries */.  unsig
171a0 6e 65 64 20 62 41 73 63 4b 65 79 42 75 67 3a 31  ned bAscKeyBug:1
171b0 3b 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74  ;   /* True if t
171c0 68 65 20 62 62 61 37 62 36 39 66 39 38 34 39 62  he bba7b69f9849b
171d0 35 62 66 20 62 75 67 20 61 70 70 6c 69 65 73 20  5bf bug applies 
171e0 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
171f0 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 0a 20 20  _ENABLE_STAT4.  
17200 69 6e 74 20 6e 53 61 6d 70 6c 65 3b 20 20 20 20  int nSample;    
17210 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
17220 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69  er of elements i
17230 6e 20 61 53 61 6d 70 6c 65 5b 5d 20 2a 2f 0a 20  n aSample[] */. 
17240 20 69 6e 74 20 6e 53 61 6d 70 6c 65 43 6f 6c 3b   int nSampleCol;
17250 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a            /* Siz
17260 65 20 6f 66 20 49 6e 64 65 78 53 61 6d 70 6c 65  e of IndexSample
17270 2e 61 6e 45 71 5b 5d 20 61 6e 64 20 73 6f 20 6f  .anEq[] and so o
17280 6e 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a  n */.  tRowcnt *
17290 61 41 76 67 45 71 3b 20 20 20 20 20 20 20 20 20  aAvgEq;         
172a0 2f 2a 20 41 76 65 72 61 67 65 20 6e 45 71 20 76  /* Average nEq v
172b0 61 6c 75 65 73 20 66 6f 72 20 6b 65 79 73 20 6e  alues for keys n
172c0 6f 74 20 69 6e 20 61 53 61 6d 70 6c 65 20 2a 2f  ot in aSample */
172d0 0a 20 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 2a  .  IndexSample *
172e0 61 53 61 6d 70 6c 65 3b 20 20 20 20 2f 2a 20 53  aSample;    /* S
172f0 61 6d 70 6c 65 73 20 6f 66 20 74 68 65 20 6c 65  amples of the le
17300 66 74 2d 6d 6f 73 74 20 6b 65 79 20 2a 2f 0a 20  ft-most key */. 
17310 20 74 52 6f 77 63 6e 74 20 2a 61 69 52 6f 77 45   tRowcnt *aiRowE
17320 73 74 3b 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e  st;       /* Non
17330 2d 6c 6f 67 61 72 69 74 68 6d 69 63 20 73 74 61  -logarithmic sta
17340 74 31 20 64 61 74 61 20 66 6f 72 20 74 68 69 73  t1 data for this
17350 20 69 6e 64 65 78 20 2a 2f 0a 20 20 74 52 6f 77   index */.  tRow
17360 63 6e 74 20 6e 52 6f 77 45 73 74 30 3b 20 20 20  cnt nRowEst0;   
17370 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61       /* Non-loga
17380 72 69 74 68 6d 69 63 20 6e 75 6d 62 65 72 20 6f  rithmic number o
17390 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 69 6e  f rows in the in
173a0 64 65 78 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  dex */.#endif.  
173b0 42 69 74 6d 61 73 6b 20 63 6f 6c 4e 6f 74 49 64  Bitmask colNotId
173c0 78 65 64 3b 20 20 20 20 20 2f 2a 20 30 20 66 6f  xed;     /* 0 fo
173d0 72 20 75 6e 69 6e 64 65 78 65 64 20 63 6f 6c 75  r unindexed colu
173e0 6d 6e 73 20 69 6e 20 70 54 61 62 20 2a 2f 0a 7d  mns in pTab */.}
173f0 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64  ;../*.** Allowed
17400 20 76 61 6c 75 65 73 20 66 6f 72 20 49 6e 64 65   values for Inde
17410 78 2e 69 64 78 54 79 70 65 0a 2a 2f 0a 23 64 65  x.idxType.*/.#de
17420 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54  fine SQLITE_IDXT
17430 59 50 45 5f 41 50 50 44 45 46 20 20 20 20 20 20  YPE_APPDEF      
17440 30 20 20 20 2f 2a 20 43 72 65 61 74 65 64 20 75  0   /* Created u
17450 73 69 6e 67 20 43 52 45 41 54 45 20 49 4e 44 45  sing CREATE INDE
17460 58 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  X */.#define SQL
17470 49 54 45 5f 49 44 58 54 59 50 45 5f 55 4e 49 51  ITE_IDXTYPE_UNIQ
17480 55 45 20 20 20 20 20 20 31 20 20 20 2f 2a 20 49  UE      1   /* I
17490 6d 70 6c 65 6d 65 6e 74 73 20 61 20 55 4e 49 51  mplements a UNIQ
174a0 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f  UE constraint */
174b0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
174c0 49 44 58 54 59 50 45 5f 50 52 49 4d 41 52 59 4b  IDXTYPE_PRIMARYK
174d0 45 59 20 20 32 20 20 20 2f 2a 20 49 73 20 74 68  EY  2   /* Is th
174e0 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 66 6f  e PRIMARY KEY fo
174f0 72 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 23  r the table */.#
17500 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44  define SQLITE_ID
17510 58 54 59 50 45 5f 49 50 4b 20 20 20 20 20 20 20  XTYPE_IPK       
17520 20 20 33 20 20 20 2f 2a 20 49 4e 54 45 47 45 52    3   /* INTEGER
17530 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69 6e 64   PRIMARY KEY ind
17540 65 78 20 2a 2f 0a 0a 2f 2a 20 52 65 74 75 72 6e  ex */../* Return
17550 20 74 72 75 65 20 69 66 20 69 6e 64 65 78 20 58   true if index X
17560 20 69 73 20 61 20 50 52 49 4d 41 52 59 20 4b 45   is a PRIMARY KE
17570 59 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69  Y index */.#defi
17580 6e 65 20 49 73 50 72 69 6d 61 72 79 4b 65 79 49  ne IsPrimaryKeyI
17590 6e 64 65 78 28 58 29 20 20 28 28 58 29 2d 3e 69  ndex(X)  ((X)->i
175a0 64 78 54 79 70 65 3d 3d 53 51 4c 49 54 45 5f 49  dxType==SQLITE_I
175b0 44 58 54 59 50 45 5f 50 52 49 4d 41 52 59 4b 45  DXTYPE_PRIMARYKE
175c0 59 29 0a 0a 2f 2a 20 52 65 74 75 72 6e 20 74 72  Y)../* Return tr
175d0 75 65 20 69 66 20 69 6e 64 65 78 20 58 20 69 73  ue if index X is
175e0 20 61 20 55 4e 49 51 55 45 20 69 6e 64 65 78 20   a UNIQUE index 
175f0 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 55 6e 69  */.#define IsUni
17600 71 75 65 49 6e 64 65 78 28 58 29 20 20 20 20 20  queIndex(X)     
17610 20 28 28 58 29 2d 3e 6f 6e 45 72 72 6f 72 21 3d   ((X)->onError!=
17620 4f 45 5f 4e 6f 6e 65 29 0a 0a 2f 2a 20 54 68 65  OE_None)../* The
17630 20 49 6e 64 65 78 2e 61 69 43 6f 6c 75 6d 6e 5b   Index.aiColumn[
17640 5d 20 76 61 6c 75 65 73 20 61 72 65 20 6e 6f 72  ] values are nor
17650 6d 61 6c 6c 79 20 70 6f 73 69 74 69 76 65 20 69  mally positive i
17660 6e 74 65 67 65 72 2e 20 20 42 75 74 0a 2a 2a 20  nteger.  But.** 
17670 74 68 65 72 65 20 61 72 65 20 73 6f 6d 65 20 6e  there are some n
17680 65 67 61 74 69 76 65 20 76 61 6c 75 65 73 20 74  egative values t
17690 68 61 74 20 68 61 76 65 20 73 70 65 63 69 61 6c  hat have special
176a0 20 6d 65 61 6e 69 6e 67 3a 0a 2a 2f 0a 23 64 65   meaning:.*/.#de
176b0 66 69 6e 65 20 58 4e 5f 52 4f 57 49 44 20 20 20  fine XN_ROWID   
176c0 20 20 28 2d 31 29 20 20 20 20 20 2f 2a 20 49 6e    (-1)     /* In
176d0 64 65 78 65 64 20 63 6f 6c 75 6d 6e 20 69 73 20  dexed column is 
176e0 74 68 65 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65  the rowid */.#de
176f0 66 69 6e 65 20 58 4e 5f 45 58 50 52 20 20 20 20  fine XN_EXPR    
17700 20 20 28 2d 32 29 20 20 20 20 20 2f 2a 20 49 6e    (-2)     /* In
17710 64 65 78 65 64 20 63 6f 6c 75 6d 6e 20 69 73 20  dexed column is 
17720 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f  an expression */
17730 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 73 61 6d  ../*.** Each sam
17740 70 6c 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68  ple stored in th
17750 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34 20 74  e sqlite_stat4 t
17760 61 62 6c 65 20 69 73 20 72 65 70 72 65 73 65 6e  able is represen
17770 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 0a 2a 2a  ted in memory.**
17780 20 75 73 69 6e 67 20 61 20 73 74 72 75 63 74 75   using a structu
17790 72 65 20 6f 66 20 74 68 69 73 20 74 79 70 65 2e  re of this type.
177a0 20 20 53 65 65 20 64 6f 63 75 6d 65 6e 74 61 74    See documentat
177b0 69 6f 6e 20 61 74 20 74 68 65 20 74 6f 70 20 6f  ion at the top o
177c0 66 20 74 68 65 0a 2a 2a 20 61 6e 61 6c 79 7a 65  f the.** analyze
177d0 2e 63 20 73 6f 75 72 63 65 20 66 69 6c 65 20 66  .c source file f
177e0 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
177f0 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74  formation..*/.st
17800 72 75 63 74 20 49 6e 64 65 78 53 61 6d 70 6c 65  ruct IndexSample
17810 20 7b 0a 20 20 76 6f 69 64 20 2a 70 3b 20 20 20   {.  void *p;   
17820 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
17830 72 20 74 6f 20 73 61 6d 70 6c 65 64 20 72 65 63  r to sampled rec
17840 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20  ord */.  int n; 
17850 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69             /* Si
17860 7a 65 20 6f 66 20 72 65 63 6f 72 64 20 69 6e 20  ze of record in 
17870 62 79 74 65 73 20 2a 2f 0a 20 20 74 52 6f 77 63  bytes */.  tRowc
17880 6e 74 20 2a 61 6e 45 71 3b 20 20 20 20 2f 2a 20  nt *anEq;    /* 
17890 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72  Est. number of r
178a0 6f 77 73 20 77 68 65 72 65 20 74 68 65 20 6b 65  ows where the ke
178b0 79 20 65 71 75 61 6c 73 20 74 68 69 73 20 73 61  y equals this sa
178c0 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e  mple */.  tRowcn
178d0 74 20 2a 61 6e 4c 74 3b 20 20 20 20 2f 2a 20 45  t *anLt;    /* E
178e0 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  st. number of ro
178f0 77 73 20 77 68 65 72 65 20 6b 65 79 20 69 73 20  ws where key is 
17900 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73 20 73  less than this s
17910 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63  ample */.  tRowc
17920 6e 74 20 2a 61 6e 44 4c 74 3b 20 20 20 2f 2a 20  nt *anDLt;   /* 
17930 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 64  Est. number of d
17940 69 73 74 69 6e 63 74 20 6b 65 79 73 20 6c 65 73  istinct keys les
17950 73 20 74 68 61 6e 20 74 68 69 73 20 73 61 6d 70  s than this samp
17960 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  le */.};../*.** 
17970 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20  Possible values 
17980 74 6f 20 75 73 65 20 77 69 74 68 69 6e 20 74 68  to use within th
17990 65 20 66 6c 61 67 73 20 61 72 67 75 6d 65 6e 74  e flags argument
179a0 20 74 6f 20 73 71 6c 69 74 65 33 47 65 74 54 6f   to sqlite3GetTo
179b0 6b 65 6e 28 29 2e 0a 2a 2f 0a 23 64 65 66 69 6e  ken()..*/.#defin
179c0 65 20 53 51 4c 49 54 45 5f 54 4f 4b 45 4e 5f 51  e SQLITE_TOKEN_Q
179d0 55 4f 54 45 44 20 20 20 20 30 78 31 20 2f 2a 20  UOTED    0x1 /* 
179e0 54 6f 6b 65 6e 20 69 73 20 61 20 71 75 6f 74 65  Token is a quote
179f0 64 20 69 64 65 6e 74 69 66 69 65 72 2e 20 2a 2f  d identifier. */
17a00 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
17a10 54 4f 4b 45 4e 5f 4b 45 59 57 4f 52 44 20 20 20  TOKEN_KEYWORD   
17a20 30 78 32 20 2f 2a 20 54 6f 6b 65 6e 20 69 73 20  0x2 /* Token is 
17a30 61 20 6b 65 79 77 6f 72 64 2e 20 2a 2f 0a 0a 2f  a keyword. */../
17a40 2a 0a 2a 2a 20 45 61 63 68 20 74 6f 6b 65 6e 20  *.** Each token 
17a50 63 6f 6d 69 6e 67 20 6f 75 74 20 6f 66 20 74 68  coming out of th
17a60 65 20 6c 65 78 65 72 20 69 73 20 61 6e 20 69 6e  e lexer is an in
17a70 73 74 61 6e 63 65 20 6f 66 0a 2a 2a 20 74 68 69  stance of.** thi
17a80 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 6f  s structure.  To
17a90 6b 65 6e 73 20 61 72 65 20 61 6c 73 6f 20 75 73  kens are also us
17aa0 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 61 6e  ed as part of an
17ab0 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2a 0a   expression..**.
17ac0 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 74 68  ** The memory th
17ad0 61 74 20 22 7a 22 20 70 6f 69 6e 74 73 20 74 6f  at "z" points to
17ae0 20 69 73 20 6f 77 6e 65 64 20 62 79 20 6f 74 68   is owned by oth
17af0 65 72 20 6f 62 6a 65 63 74 73 2e 20 20 54 61 6b  er objects.  Tak
17b00 65 20 63 61 72 65 0a 2a 2a 20 74 68 61 74 20 74  e care.** that t
17b10 68 65 20 6f 77 6e 65 72 20 6f 66 20 74 68 65 20  he owner of the 
17b20 22 7a 22 20 73 74 72 69 6e 67 20 64 6f 65 73 20  "z" string does 
17b30 6e 6f 74 20 64 65 61 6c 6c 6f 63 61 74 65 20 74  not deallocate t
17b40 68 65 20 73 74 72 69 6e 67 20 62 65 66 6f 72 65  he string before
17b50 0a 2a 2a 20 74 68 65 20 54 6f 6b 65 6e 20 67 6f  .** the Token go
17b60 65 73 20 6f 75 74 20 6f 66 20 73 63 6f 70 65 21  es out of scope!
17b70 20 20 56 65 72 79 20 6f 66 74 65 6e 2c 20 74 68    Very often, th
17b80 65 20 22 7a 22 20 70 6f 69 6e 74 73 20 74 6f 20  e "z" points to 
17b90 73 6f 6d 65 20 70 6c 61 63 65 0a 2a 2a 20 69 6e  some place.** in
17ba0 20 74 68 65 20 6d 69 64 64 6c 65 20 6f 66 20 74   the middle of t
17bb0 68 65 20 50 61 72 73 65 2e 7a 53 71 6c 20 74 65  he Parse.zSql te
17bc0 78 74 2e 20 20 42 75 74 20 69 74 20 6d 69 67 68  xt.  But it migh
17bd0 74 20 61 6c 73 6f 20 70 6f 69 6e 74 20 74 6f 20  t also point to 
17be0 61 0a 2a 2a 20 73 74 61 74 69 63 20 73 74 72 69  a.** static stri
17bf0 6e 67 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 6f  ng..*/.struct To
17c00 6b 65 6e 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68  ken {.  const ch
17c10 61 72 20 2a 7a 3b 20 20 20 20 20 2f 2a 20 54 65  ar *z;     /* Te
17c20 78 74 20 6f 66 20 74 68 65 20 74 6f 6b 65 6e 2e  xt of the token.
17c30 20 20 4e 6f 74 20 4e 55 4c 4c 2d 74 65 72 6d 69    Not NULL-termi
17c40 6e 61 74 65 64 21 20 2a 2f 0a 20 20 75 6e 73 69  nated! */.  unsi
17c50 67 6e 65 64 20 69 6e 74 20 6e 3b 20 20 20 20 2f  gned int n;    /
17c60 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 68 61 72  * Number of char
17c70 61 63 74 65 72 73 20 69 6e 20 74 68 69 73 20 74  acters in this t
17c80 6f 6b 65 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  oken */.};../*.*
17c90 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
17ca0 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
17cb0 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61  contains informa
17cc0 74 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20 67  tion needed to g
17cd0 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65 20  enerate.** code 
17ce0 66 6f 72 20 61 20 53 45 4c 45 43 54 20 74 68 61  for a SELECT tha
17cf0 74 20 63 6f 6e 74 61 69 6e 73 20 61 67 67 72 65  t contains aggre
17d00 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 2e 0a  gate functions..
17d10 2a 2a 0a 2a 2a 20 49 66 20 45 78 70 72 2e 6f 70  **.** If Expr.op
17d20 3d 3d 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20  ==TK_AGG_COLUMN 
17d30 6f 72 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49  or TK_AGG_FUNCTI
17d40 4f 4e 20 74 68 65 6e 20 45 78 70 72 2e 70 41 67  ON then Expr.pAg
17d50 67 49 6e 66 6f 20 69 73 20 61 0a 2a 2a 20 70 6f  gInfo is a.** po
17d60 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73 74  inter to this st
17d70 72 75 63 74 75 72 65 2e 20 20 54 68 65 20 45 78  ructure.  The Ex
17d80 70 72 2e 69 43 6f 6c 75 6d 6e 20 66 69 65 6c 64  pr.iColumn field
17d90 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 69 6e   is the index in
17da0 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 61 43 6f 6c  .** AggInfo.aCol
17db0 5b 5d 20 6f 72 20 41 67 67 49 6e 66 6f 2e 61 46  [] or AggInfo.aF
17dc0 75 6e 63 5b 5d 20 6f 66 20 69 6e 66 6f 72 6d 61  unc[] of informa
17dd0 74 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20 67  tion needed to g
17de0 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65 20  enerate.** code 
17df0 66 6f 72 20 74 68 61 74 20 6e 6f 64 65 2e 0a 2a  for that node..*
17e00 2a 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 70 47 72  *.** AggInfo.pGr
17e10 6f 75 70 42 79 20 61 6e 64 20 41 67 67 49 6e 66  oupBy and AggInf
17e20 6f 2e 61 46 75 6e 63 2e 70 45 78 70 72 20 70 6f  o.aFunc.pExpr po
17e30 69 6e 74 20 74 6f 20 66 69 65 6c 64 73 20 77 69  int to fields wi
17e40 74 68 69 6e 20 74 68 65 0a 2a 2a 20 6f 72 69 67  thin the.** orig
17e50 69 6e 61 6c 20 53 65 6c 65 63 74 20 73 74 72 75  inal Select stru
17e60 63 74 75 72 65 20 74 68 61 74 20 64 65 73 63 72  cture that descr
17e70 69 62 65 73 20 74 68 65 20 53 45 4c 45 43 54 20  ibes the SELECT 
17e80 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 73  statement.  Thes
17e90 65 0a 2a 2a 20 66 69 65 6c 64 73 20 64 6f 20 6e  e.** fields do n
17ea0 6f 74 20 6e 65 65 64 20 74 6f 20 62 65 20 66 72  ot need to be fr
17eb0 65 65 64 20 77 68 65 6e 20 64 65 61 6c 6c 6f 63  eed when dealloc
17ec0 61 74 69 6e 67 20 74 68 65 20 41 67 67 49 6e 66  ating the AggInf
17ed0 6f 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a  o structure..*/.
17ee0 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 20 7b  struct AggInfo {
17ef0 0a 20 20 75 38 20 64 69 72 65 63 74 4d 6f 64 65  .  u8 directMode
17f00 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 69  ;          /* Di
17f10 72 65 63 74 20 72 65 6e 64 65 72 69 6e 67 20 6d  rect rendering m
17f20 6f 64 65 20 6d 65 61 6e 73 20 74 61 6b 65 20 64  ode means take d
17f30 61 74 61 20 64 69 72 65 63 74 6c 79 0a 20 20 20  ata directly.   
17f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f50 20 20 20 20 20 20 20 2a 2a 20 66 72 6f 6d 20 73         ** from s
17f60 6f 75 72 63 65 20 74 61 62 6c 65 73 20 72 61 74  ource tables rat
17f70 68 65 72 20 74 68 61 6e 20 66 72 6f 6d 20 61 63  her than from ac
17f80 63 75 6d 75 6c 61 74 6f 72 73 20 2a 2f 0a 20 20  cumulators */.  
17f90 75 38 20 75 73 65 53 6f 72 74 69 6e 67 49 64 78  u8 useSortingIdx
17fa0 3b 20 20 20 20 20 20 20 2f 2a 20 49 6e 20 64 69  ;       /* In di
17fb0 72 65 63 74 20 6d 6f 64 65 2c 20 72 65 66 65 72  rect mode, refer
17fc0 65 6e 63 65 20 74 68 65 20 73 6f 72 74 69 6e 67  ence the sorting
17fd0 20 69 6e 64 65 78 20 72 61 74 68 65 72 0a 20 20   index rather.  
17fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ff0 20 20 20 20 20 20 20 20 2a 2a 20 74 68 61 6e 20          ** than 
18000 74 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65  the source table
18010 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e   */.  int sortin
18020 67 49 64 78 3b 20 20 20 20 20 20 20 20 20 2f 2a  gIdx;         /*
18030 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f   Cursor number o
18040 66 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e  f the sorting in
18050 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72  dex */.  int sor
18060 74 69 6e 67 49 64 78 50 54 61 62 3b 20 20 20 20  tingIdxPTab;    
18070 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65   /* Cursor numbe
18080 72 20 6f 66 20 70 73 65 75 64 6f 2d 74 61 62 6c  r of pseudo-tabl
18090 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 6f 72 74  e */.  int nSort
180a0 69 6e 67 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 2f  ingColumn;     /
180b0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
180c0 6d 6e 73 20 69 6e 20 74 68 65 20 73 6f 72 74 69  mns in the sorti
180d0 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e  ng index */.  in
180e0 74 20 6d 6e 52 65 67 2c 20 6d 78 52 65 67 3b 20  t mnReg, mxReg; 
180f0 20 20 20 20 20 20 2f 2a 20 52 61 6e 67 65 20 6f        /* Range o
18100 66 20 72 65 67 69 73 74 65 72 73 20 61 6c 6c 6f  f registers allo
18110 63 61 74 65 64 20 66 6f 72 20 61 43 6f 6c 20 61  cated for aCol a
18120 6e 64 20 61 46 75 6e 63 20 2a 2f 0a 20 20 45 78  nd aFunc */.  Ex
18130 70 72 4c 69 73 74 20 2a 70 47 72 6f 75 70 42 79  prList *pGroupBy
18140 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 67 72 6f  ;     /* The gro
18150 75 70 20 62 79 20 63 6c 61 75 73 65 20 2a 2f 0a  up by clause */.
18160 20 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f    struct AggInfo
18170 5f 63 6f 6c 20 7b 20 20 20 20 2f 2a 20 46 6f 72  _col {    /* For
18180 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 75 73 65   each column use
18190 64 20 69 6e 20 73 6f 75 72 63 65 20 74 61 62 6c  d in source tabl
181a0 65 73 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20  es */.    Table 
181b0 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20  *pTab;          
181c0 20 20 20 2f 2a 20 53 6f 75 72 63 65 20 74 61 62     /* Source tab
181d0 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 54  le */.    int iT
181e0 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  able;           
181f0 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d     /* Cursor num
18200 62 65 72 20 6f 66 20 74 68 65 20 73 6f 75 72 63  ber of the sourc
18210 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69  e table */.    i
18220 6e 74 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  nt iColumn;     
18230 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d          /* Colum
18240 6e 20 6e 75 6d 62 65 72 20 77 69 74 68 69 6e 20  n number within 
18250 74 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65  the source table
18260 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 53 6f 72   */.    int iSor
18270 74 65 72 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20  terColumn;      
18280 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65   /* Column numbe
18290 72 20 69 6e 20 74 68 65 20 73 6f 72 74 69 6e 67  r in the sorting
182a0 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20 69 6e   index */.    in
182b0 74 20 69 4d 65 6d 3b 20 20 20 20 20 20 20 20 20  t iMem;         
182c0 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79         /* Memory
182d0 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 61   location that a
182e0 63 74 73 20 61 73 20 61 63 63 75 6d 75 6c 61 74  cts as accumulat
182f0 6f 72 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a  or */.    Expr *
18300 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20  pExpr;          
18310 20 20 20 2f 2a 20 54 68 65 20 6f 72 69 67 69 6e     /* The origin
18320 61 6c 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f  al expression */
18330 0a 20 20 7d 20 2a 61 43 6f 6c 3b 0a 20 20 69 6e  .  } *aCol;.  in
18340 74 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20  t nColumn;      
18350 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
18360 6f 66 20 75 73 65 64 20 65 6e 74 72 69 65 73 20  of used entries 
18370 69 6e 20 61 43 6f 6c 5b 5d 20 2a 2f 0a 20 20 69  in aCol[] */.  i
18380 6e 74 20 6e 41 63 63 75 6d 75 6c 61 74 6f 72 3b  nt nAccumulator;
18390 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
183a0 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74   of columns that
183b0 20 73 68 6f 77 20 74 68 72 6f 75 67 68 20 74 6f   show through to
183c0 20 74 68 65 20 6f 75 74 70 75 74 2e 0a 20 20 20   the output..   
183d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
183e0 20 20 20 20 20 20 20 2a 2a 20 41 64 64 69 74 69         ** Additi
183f0 6f 6e 61 6c 20 63 6f 6c 75 6d 6e 73 20 61 72 65  onal columns are
18400 20 75 73 65 64 20 6f 6e 6c 79 20 61 73 20 70 61   used only as pa
18410 72 61 6d 65 74 65 72 73 20 74 6f 0a 20 20 20 20  rameters to.    
18420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18430 20 20 20 20 20 20 2a 2a 20 61 67 67 72 65 67 61        ** aggrega
18440 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a  te functions */.
18450 20 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f    struct AggInfo
18460 5f 66 75 6e 63 20 7b 20 20 20 2f 2a 20 46 6f 72  _func {   /* For
18470 20 65 61 63 68 20 61 67 67 72 65 67 61 74 65 20   each aggregate 
18480 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20  function */.    
18490 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20  Expr *pExpr;    
184a0 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70 72           /* Expr
184b0 65 73 73 69 6f 6e 20 65 6e 63 6f 64 69 6e 67 20  ession encoding 
184c0 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  the function */.
184d0 20 20 20 20 46 75 6e 63 44 65 66 20 2a 70 46 75      FuncDef *pFu
184e0 6e 63 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  nc;          /* 
184f0 54 68 65 20 61 67 67 72 65 67 61 74 65 20 66 75  The aggregate fu
18500 6e 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74  nction implement
18510 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74  ation */.    int
18520 20 69 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20   iMem;          
18530 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20        /* Memory 
18540 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 61 63  location that ac
18550 74 73 20 61 73 20 61 63 63 75 6d 75 6c 61 74 6f  ts as accumulato
18560 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 44 69  r */.    int iDi
18570 73 74 69 6e 63 74 3b 20 20 20 20 20 20 20 20 20  stinct;         
18580 20 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c 20 74    /* Ephemeral t
18590 61 62 6c 65 20 75 73 65 64 20 74 6f 20 65 6e 66  able used to enf
185a0 6f 72 63 65 20 44 49 53 54 49 4e 43 54 20 2a 2f  orce DISTINCT */
185b0 0a 20 20 7d 20 2a 61 46 75 6e 63 3b 0a 20 20 69  .  } *aFunc;.  i
185c0 6e 74 20 6e 46 75 6e 63 3b 20 20 20 20 20 20 20  nt nFunc;       
185d0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
185e0 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61   of entries in a
185f0 46 75 6e 63 5b 5d 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  Func[] */.};../*
18600 0a 2a 2a 20 54 68 65 20 64 61 74 61 74 79 70 65  .** The datatype
18610 20 79 6e 56 61 72 20 69 73 20 61 20 73 69 67 6e   ynVar is a sign
18620 65 64 20 69 6e 74 65 67 65 72 2c 20 65 69 74 68  ed integer, eith
18630 65 72 20 31 36 2d 62 69 74 20 6f 72 20 33 32 2d  er 16-bit or 32-
18640 62 69 74 2e 0a 2a 2a 20 55 73 75 61 6c 6c 79 20  bit..** Usually 
18650 69 74 20 69 73 20 31 36 2d 62 69 74 73 2e 20 20  it is 16-bits.  
18660 42 75 74 20 69 66 20 53 51 4c 49 54 45 5f 4d 41  But if SQLITE_MA
18670 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45  X_VARIABLE_NUMBE
18680 52 20 69 73 20 67 72 65 61 74 65 72 0a 2a 2a 20  R is greater.** 
18690 74 68 61 6e 20 33 32 37 36 37 20 77 65 20 68 61  than 32767 we ha
186a0 76 65 20 74 6f 20 6d 61 6b 65 20 69 74 20 33 32  ve to make it 32
186b0 2d 62 69 74 2e 20 20 31 36 2d 62 69 74 20 69 73  -bit.  16-bit is
186c0 20 70 72 65 66 65 72 72 65 64 20 62 65 63 61 75   preferred becau
186d0 73 65 0a 2a 2a 20 69 74 20 75 73 65 73 20 6c 65  se.** it uses le
186e0 73 73 20 6d 65 6d 6f 72 79 20 69 6e 20 74 68 65  ss memory in the
186f0 20 45 78 70 72 20 6f 62 6a 65 63 74 2c 20 77 68   Expr object, wh
18700 69 63 68 20 69 73 20 61 20 62 69 67 20 6d 65 6d  ich is a big mem
18710 6f 72 79 20 75 73 65 72 0a 2a 2a 20 69 6e 20 73  ory user.** in s
18720 79 73 74 65 6d 73 20 77 69 74 68 20 6c 6f 74 73  ystems with lots
18730 20 6f 66 20 70 72 65 70 61 72 65 64 20 73 74 61   of prepared sta
18740 74 65 6d 65 6e 74 73 2e 20 20 41 6e 64 20 66 65  tements.  And fe
18750 77 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 0a 2a  w applications.*
18760 2a 20 6e 65 65 64 20 6d 6f 72 65 20 74 68 61 6e  * need more than
18770 20 61 62 6f 75 74 20 31 30 20 6f 72 20 32 30 20   about 10 or 20 
18780 76 61 72 69 61 62 6c 65 73 2e 20 20 42 75 74 20  variables.  But 
18790 73 6f 6d 65 20 65 78 74 72 65 6d 65 20 75 73 65  some extreme use
187a0 72 73 20 77 61 6e 74 0a 2a 2a 20 74 6f 20 68 61  rs want.** to ha
187b0 76 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74  ve prepared stat
187c0 65 6d 65 6e 74 73 20 77 69 74 68 20 6f 76 65 72  ements with over
187d0 20 33 32 37 36 37 20 76 61 72 69 61 62 6c 65 73   32767 variables
187e0 2c 20 61 6e 64 20 66 6f 72 20 74 68 65 6d 0a 2a  , and for them.*
187f0 2a 20 74 68 65 20 6f 70 74 69 6f 6e 20 69 73 20  * the option is 
18800 61 76 61 69 6c 61 62 6c 65 20 28 61 74 20 63 6f  available (at co
18810 6d 70 69 6c 65 2d 74 69 6d 65 29 2e 0a 2a 2f 0a  mpile-time)..*/.
18820 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56  #if SQLITE_MAX_V
18830 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 3c 3d  ARIABLE_NUMBER<=
18840 33 32 37 36 37 0a 74 79 70 65 64 65 66 20 69 31  32767.typedef i1
18850 36 20 79 6e 56 61 72 3b 0a 23 65 6c 73 65 0a 74  6 ynVar;.#else.t
18860 79 70 65 64 65 66 20 69 6e 74 20 79 6e 56 61 72  ypedef int ynVar
18870 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ;.#endif../*.** 
18880 45 61 63 68 20 6e 6f 64 65 20 6f 66 20 61 6e 20  Each node of an 
18890 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68  expression in th
188a0 65 20 70 61 72 73 65 20 74 72 65 65 20 69 73 20  e parse tree is 
188b0 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f  an instance.** o
188c0 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
188d0 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 6f 70 20  ..**.** Expr.op 
188e0 69 73 20 74 68 65 20 6f 70 63 6f 64 65 2e 20 54  is the opcode. T
188f0 68 65 20 69 6e 74 65 67 65 72 20 70 61 72 73 65  he integer parse
18900 72 20 74 6f 6b 65 6e 20 63 6f 64 65 73 20 61 72  r token codes ar
18910 65 20 72 65 75 73 65 64 0a 2a 2a 20 61 73 20 6f  e reused.** as o
18920 70 63 6f 64 65 73 20 68 65 72 65 2e 20 46 6f 72  pcodes here. For
18930 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 70 61   example, the pa
18940 72 73 65 72 20 64 65 66 69 6e 65 73 20 54 4b 5f  rser defines TK_
18950 47 45 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65  GE to be an inte
18960 67 65 72 0a 2a 2a 20 63 6f 64 65 20 72 65 70 72  ger.** code repr
18970 65 73 65 6e 74 69 6e 67 20 74 68 65 20 22 3e 3d  esenting the ">=
18980 22 20 6f 70 65 72 61 74 6f 72 2e 20 54 68 69 73  " operator. This
18990 20 73 61 6d 65 20 69 6e 74 65 67 65 72 20 63 6f   same integer co
189a0 64 65 20 69 73 20 72 65 75 73 65 64 0a 2a 2a 20  de is reused.** 
189b0 74 6f 20 72 65 70 72 65 73 65 6e 74 20 74 68 65  to represent the
189c0 20 67 72 65 61 74 65 72 2d 74 68 61 6e 2d 6f 72   greater-than-or
189d0 2d 65 71 75 61 6c 2d 74 6f 20 6f 70 65 72 61 74  -equal-to operat
189e0 6f 72 20 69 6e 20 74 68 65 20 65 78 70 72 65 73  or in the expres
189f0 73 69 6f 6e 0a 2a 2a 20 74 72 65 65 2e 0a 2a 2a  sion.** tree..**
18a00 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72 65  .** If the expre
18a10 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20  ssion is an SQL 
18a20 6c 69 74 65 72 61 6c 20 28 54 4b 5f 49 4e 54 45  literal (TK_INTE
18a30 47 45 52 2c 20 54 4b 5f 46 4c 4f 41 54 2c 20 54  GER, TK_FLOAT, T
18a40 4b 5f 42 4c 4f 42 2c 0a 2a 2a 20 6f 72 20 54 4b  K_BLOB,.** or TK
18a50 5f 53 54 52 49 4e 47 29 2c 20 74 68 65 6e 20 45  _STRING), then E
18a60 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69  xpr.token contai
18a70 6e 73 20 74 68 65 20 74 65 78 74 20 6f 66 20 74  ns the text of t
18a80 68 65 20 53 51 4c 20 6c 69 74 65 72 61 6c 2e 20  he SQL literal. 
18a90 49 66 0a 2a 2a 20 74 68 65 20 65 78 70 72 65 73  If.** the expres
18aa0 73 69 6f 6e 20 69 73 20 61 20 76 61 72 69 61 62  sion is a variab
18ab0 6c 65 20 28 54 4b 5f 56 41 52 49 41 42 4c 45 29  le (TK_VARIABLE)
18ac0 2c 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65  , then Expr.toke
18ad0 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 0a 2a  n contains the.*
18ae0 2a 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 2e  * variable name.
18af0 20 46 69 6e 61 6c 6c 79 2c 20 69 66 20 74 68 65   Finally, if the
18b00 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
18b10 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 28  n SQL function (
18b20 54 4b 5f 46 55 4e 43 54 49 4f 4e 29 2c 0a 2a 2a  TK_FUNCTION),.**
18b30 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e   then Expr.token
18b40 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 6e 61   contains the na
18b50 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  me of the functi
18b60 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 70  on..**.** Expr.p
18b70 52 69 67 68 74 20 61 6e 64 20 45 78 70 72 2e 70  Right and Expr.p
18b80 4c 65 66 74 20 61 72 65 20 74 68 65 20 6c 65 66  Left are the lef
18b90 74 20 61 6e 64 20 72 69 67 68 74 20 73 75 62 65  t and right sube
18ba0 78 70 72 65 73 73 69 6f 6e 73 20 6f 66 20 61 0a  xpressions of a.
18bb0 2a 2a 20 62 69 6e 61 72 79 20 6f 70 65 72 61 74  ** binary operat
18bc0 6f 72 2e 20 45 69 74 68 65 72 20 6f 72 20 62 6f  or. Either or bo
18bd0 74 68 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 0a  th may be NULL..
18be0 2a 2a 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 4c 69  **.** Expr.x.pLi
18bf0 73 74 20 69 73 20 61 20 6c 69 73 74 20 6f 66 20  st is a list of 
18c00 61 72 67 75 6d 65 6e 74 73 20 69 66 20 74 68 65  arguments if the
18c10 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
18c20 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 2c 0a  n SQL function,.
18c30 2a 2a 20 61 20 43 41 53 45 20 65 78 70 72 65 73  ** a CASE expres
18c40 73 69 6f 6e 20 6f 72 20 61 6e 20 49 4e 20 65 78  sion or an IN ex
18c50 70 72 65 73 73 69 6f 6e 20 6f 66 20 74 68 65 20  pression of the 
18c60 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28  form "<lhs> IN (
18c70 3c 79 3e 2c 20 3c 7a 3e 2e 2e 2e 29 22 2e 0a 2a  <y>, <z>...)"..*
18c80 2a 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74  * Expr.x.pSelect
18c90 20 69 73 20 75 73 65 64 20 69 66 20 74 68 65 20   is used if the 
18ca0 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20  expression is a 
18cb0 73 75 62 2d 73 65 6c 65 63 74 20 6f 72 20 61 6e  sub-select or an
18cc0 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 0a 2a   expression of.*
18cd0 2a 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73  * the form "<lhs
18ce0 3e 20 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e  > IN (SELECT ...
18cf0 29 22 2e 20 49 66 20 74 68 65 20 45 50 5f 78 49  )". If the EP_xI
18d00 73 53 65 6c 65 63 74 20 62 69 74 20 69 73 20 73  sSelect bit is s
18d10 65 74 20 69 6e 20 74 68 65 0a 2a 2a 20 45 78 70  et in the.** Exp
18d20 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68  r.flags mask, th
18d30 65 6e 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63  en Expr.x.pSelec
18d40 74 20 69 73 20 76 61 6c 69 64 2e 20 4f 74 68 65  t is valid. Othe
18d50 72 77 69 73 65 2c 20 45 78 70 72 2e 78 2e 70 4c  rwise, Expr.x.pL
18d60 69 73 74 20 69 73 0a 2a 2a 20 76 61 6c 69 64 2e  ist is.** valid.
18d70 0a 2a 2a 0a 2a 2a 20 41 6e 20 65 78 70 72 65 73  .**.** An expres
18d80 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d  sion of the form
18d90 20 49 44 20 6f 72 20 49 44 2e 49 44 20 72 65 66   ID or ID.ID ref
18da0 65 72 73 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20  ers to a column 
18db0 69 6e 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 46  in a table..** F
18dc0 6f 72 20 73 75 63 68 20 65 78 70 72 65 73 73 69  or such expressi
18dd0 6f 6e 73 2c 20 45 78 70 72 2e 6f 70 20 69 73 20  ons, Expr.op is 
18de0 73 65 74 20 74 6f 20 54 4b 5f 43 4f 4c 55 4d 4e  set to TK_COLUMN
18df0 20 61 6e 64 20 45 78 70 72 2e 69 54 61 62 6c 65   and Expr.iTable
18e00 20 69 73 0a 2a 2a 20 74 68 65 20 69 6e 74 65 67   is.** the integ
18e10 65 72 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72  er cursor number
18e20 20 6f 66 20 61 20 56 44 42 45 20 63 75 72 73 6f   of a VDBE curso
18e30 72 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68  r pointing to th
18e40 61 74 20 74 61 62 6c 65 20 61 6e 64 0a 2a 2a 20  at table and.** 
18e50 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 69 73 20  Expr.iColumn is 
18e60 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65  the column numbe
18e70 72 20 66 6f 72 20 74 68 65 20 73 70 65 63 69 66  r for the specif
18e80 69 63 20 63 6f 6c 75 6d 6e 2e 20 20 49 66 20 74  ic column.  If t
18e90 68 65 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e  he.** expression
18ea0 20 69 73 20 75 73 65 64 20 61 73 20 61 20 72 65   is used as a re
18eb0 73 75 6c 74 20 69 6e 20 61 6e 20 61 67 67 72 65  sult in an aggre
18ec0 67 61 74 65 20 53 45 4c 45 43 54 2c 20 74 68 65  gate SELECT, the
18ed0 6e 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69  n the.** value i
18ee0 73 20 61 6c 73 6f 20 73 74 6f 72 65 64 20 69 6e  s also stored in
18ef0 20 74 68 65 20 45 78 70 72 2e 69 41 67 67 20 63   the Expr.iAgg c
18f00 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 61 67 67  olumn in the agg
18f10 72 65 67 61 74 65 20 73 6f 20 74 68 61 74 0a 2a  regate so that.*
18f20 2a 20 69 74 20 63 61 6e 20 62 65 20 61 63 63 65  * it can be acce
18f30 73 73 65 64 20 61 66 74 65 72 20 61 6c 6c 20 61  ssed after all a
18f40 67 67 72 65 67 61 74 65 73 20 61 72 65 20 63 6f  ggregates are co
18f50 6d 70 75 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66  mputed..**.** If
18f60 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
18f70 69 73 20 61 6e 20 75 6e 62 6f 75 6e 64 20 76 61  is an unbound va
18f80 72 69 61 62 6c 65 20 6d 61 72 6b 65 72 20 28 61  riable marker (a
18f90 20 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b 0a 2a   question mark.*
18fa0 2a 20 63 68 61 72 61 63 74 65 72 20 27 3f 27 20  * character '?' 
18fb0 69 6e 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  in the original 
18fc0 53 51 4c 29 20 74 68 65 6e 20 74 68 65 20 45 78  SQL) then the Ex
18fd0 70 72 2e 69 54 61 62 6c 65 20 68 6f 6c 64 73 20  pr.iTable holds 
18fe0 74 68 65 20 69 6e 64 65 78 0a 2a 2a 20 6e 75 6d  the index.** num
18ff0 62 65 72 20 66 6f 72 20 74 68 61 74 20 76 61 72  ber for that var
19000 69 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  iable..**.** If 
19010 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
19020 73 20 61 20 73 75 62 71 75 65 72 79 20 74 68 65  s a subquery the
19030 6e 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 68  n Expr.iColumn h
19040 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72 0a  olds an integer.
19050 2a 2a 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62  ** register numb
19060 65 72 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  er containing th
19070 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20  e result of the 
19080 73 75 62 71 75 65 72 79 2e 20 20 49 66 20 74 68  subquery.  If th
19090 65 0a 2a 2a 20 73 75 62 71 75 65 72 79 20 67 69  e.** subquery gi
190a0 76 65 73 20 61 20 63 6f 6e 73 74 61 6e 74 20 72  ves a constant r
190b0 65 73 75 6c 74 2c 20 74 68 65 6e 20 69 54 61 62  esult, then iTab
190c0 6c 65 20 69 73 20 2d 31 2e 20 20 49 66 20 74 68  le is -1.  If th
190d0 65 20 73 75 62 71 75 65 72 79 0a 2a 2a 20 67 69  e subquery.** gi
190e0 76 65 73 20 61 20 64 69 66 66 65 72 65 6e 74 20  ves a different 
190f0 61 6e 73 77 65 72 20 61 74 20 64 69 66 66 65 72  answer at differ
19100 65 6e 74 20 74 69 6d 65 73 20 64 75 72 69 6e 67  ent times during
19110 20 73 74 61 74 65 6d 65 6e 74 20 70 72 6f 63 65   statement proce
19120 73 73 69 6e 67 0a 2a 2a 20 74 68 65 6e 20 69 54  ssing.** then iT
19130 61 62 6c 65 20 69 73 20 74 68 65 20 61 64 64 72  able is the addr
19140 65 73 73 20 6f 66 20 61 20 73 75 62 72 6f 75 74  ess of a subrout
19150 69 6e 65 20 74 68 61 74 20 63 6f 6d 70 75 74 65  ine that compute
19160 73 20 74 68 65 20 73 75 62 71 75 65 72 79 2e 0a  s the subquery..
19170 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 78 70  **.** If the Exp
19180 72 20 69 73 20 6f 66 20 74 79 70 65 20 4f 50 5f  r is of type OP_
19190 43 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74 68 65 20  Column, and the 
191a0 74 61 62 6c 65 20 69 74 20 69 73 20 73 65 6c 65  table it is sele
191b0 63 74 69 6e 67 20 66 72 6f 6d 0a 2a 2a 20 69 73  cting from.** is
191c0 20 61 20 64 69 73 6b 20 74 61 62 6c 65 20 6f 72   a disk table or
191d0 20 74 68 65 20 22 6f 6c 64 2e 2a 22 20 70 73 65   the "old.*" pse
191e0 75 64 6f 2d 74 61 62 6c 65 2c 20 74 68 65 6e 20  udo-table, then 
191f0 70 54 61 62 20 70 6f 69 6e 74 73 20 74 6f 20 74  pTab points to t
19200 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64  he.** correspond
19210 69 6e 67 20 74 61 62 6c 65 20 64 65 66 69 6e 69  ing table defini
19220 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c 4f  tion..**.** ALLO
19230 43 41 54 49 4f 4e 20 4e 4f 54 45 53 3a 0a 2a 2a  CATION NOTES:.**
19240 0a 2a 2a 20 45 78 70 72 20 6f 62 6a 65 63 74 73  .** Expr objects
19250 20 63 61 6e 20 75 73 65 20 61 20 6c 6f 74 20 6f   can use a lot o
19260 66 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 69  f memory space i
19270 6e 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  n database schem
19280 61 2e 20 20 54 6f 0a 2a 2a 20 68 65 6c 70 20 72  a.  To.** help r
19290 65 64 75 63 65 20 6d 65 6d 6f 72 79 20 72 65 71  educe memory req
192a0 75 69 72 65 6d 65 6e 74 73 2c 20 73 6f 6d 65 74  uirements, somet
192b0 69 6d 65 73 20 61 6e 20 45 78 70 72 20 6f 62 6a  imes an Expr obj
192c0 65 63 74 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 74  ect will be.** t
192d0 72 75 6e 63 61 74 65 64 2e 20 20 41 6e 64 20 74  runcated.  And t
192e0 6f 20 72 65 64 75 63 65 20 74 68 65 20 6e 75 6d  o reduce the num
192f0 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c  ber of memory al
19300 6c 6f 63 61 74 69 6f 6e 73 2c 20 73 6f 6d 65 74  locations, somet
19310 69 6d 65 73 0a 2a 2a 20 74 77 6f 20 6f 72 20 6d  imes.** two or m
19320 6f 72 65 20 45 78 70 72 20 6f 62 6a 65 63 74 73  ore Expr objects
19330 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20   will be stored 
19340 69 6e 20 61 20 73 69 6e 67 6c 65 20 6d 65 6d 6f  in a single memo
19350 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c 0a 2a  ry allocation,.*
19360 2a 20 74 6f 67 65 74 68 65 72 20 77 69 74 68 20  * together with 
19370 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 73 74 72 69  Expr.zToken stri
19380 6e 67 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ngs..**.** If th
19390 65 20 45 50 5f 52 65 64 75 63 65 64 20 61 6e 64  e EP_Reduced and
193a0 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c   EP_TokenOnly fl
193b0 61 67 73 20 61 72 65 20 73 65 74 20 77 68 65 6e  ags are set when
193c0 0a 2a 2a 20 61 6e 20 45 78 70 72 20 6f 62 6a 65  .** an Expr obje
193d0 63 74 20 69 73 20 74 72 75 6e 63 61 74 65 64 2e  ct is truncated.
193e0 20 20 57 68 65 6e 20 45 50 5f 52 65 64 75 63 65    When EP_Reduce
193f0 64 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 61  d is set, then a
19400 6c 6c 0a 2a 2a 20 74 68 65 20 63 68 69 6c 64 20  ll.** the child 
19410 45 78 70 72 20 6f 62 6a 65 63 74 73 20 69 6e 20  Expr objects in 
19420 74 68 65 20 45 78 70 72 2e 70 4c 65 66 74 20 61  the Expr.pLeft a
19430 6e 64 20 45 78 70 72 2e 70 52 69 67 68 74 20 73  nd Expr.pRight s
19440 75 62 74 72 65 65 73 0a 2a 2a 20 61 72 65 20 63  ubtrees.** are c
19450 6f 6e 74 61 69 6e 65 64 20 77 69 74 68 69 6e 20  ontained within 
19460 74 68 65 20 73 61 6d 65 20 6d 65 6d 6f 72 79 20  the same memory 
19470 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f 74  allocation.  Not
19480 65 2c 20 68 6f 77 65 76 65 72 2c 20 74 68 61 74  e, however, that
19490 0a 2a 2a 20 74 68 65 20 73 75 62 74 72 65 65 73  .** the subtrees
194a0 20 69 6e 20 45 78 70 72 2e 78 2e 70 4c 69 73 74   in Expr.x.pList
194b0 20 6f 72 20 45 78 70 72 2e 78 2e 70 53 65 6c 65   or Expr.x.pSele
194c0 63 74 20 61 72 65 20 61 6c 77 61 79 73 20 73 65  ct are always se
194d0 70 61 72 61 74 65 6c 79 0a 2a 2a 20 61 6c 6c 6f  parately.** allo
194e0 63 61 74 65 64 2c 20 72 65 67 61 72 64 6c 65 73  cated, regardles
194f0 73 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72 20  s of whether or 
19500 6e 6f 74 20 45 50 5f 52 65 64 75 63 65 64 20 69  not EP_Reduced i
19510 73 20 73 65 74 2e 0a 2a 2f 0a 73 74 72 75 63 74  s set..*/.struct
19520 20 45 78 70 72 20 7b 0a 20 20 75 38 20 6f 70 3b   Expr {.  u8 op;
19530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19540 20 2f 2a 20 4f 70 65 72 61 74 69 6f 6e 20 70 65   /* Operation pe
19550 72 66 6f 72 6d 65 64 20 62 79 20 74 68 69 73 20  rformed by this 
19560 6e 6f 64 65 20 2a 2f 0a 20 20 63 68 61 72 20 61  node */.  char a
19570 66 66 45 78 70 72 3b 20 20 20 20 20 20 20 20 20  ffExpr;         
19580 20 2f 2a 20 61 66 66 69 6e 69 74 79 2c 20 6f 72   /* affinity, or
19590 20 52 41 49 53 45 20 74 79 70 65 20 2a 2f 0a 20   RAISE type */. 
195a0 20 75 33 32 20 66 6c 61 67 73 3b 20 20 20 20 20   u32 flags;     
195b0 20 20 20 20 20 20 20 20 2f 2a 20 56 61 72 69 6f          /* Vario
195c0 75 73 20 66 6c 61 67 73 2e 20 20 45 50 5f 2a 20  us flags.  EP_* 
195d0 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 75  See below */.  u
195e0 6e 69 6f 6e 20 7b 0a 20 20 20 20 63 68 61 72 20  nion {.    char 
195f0 2a 7a 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20  *zToken;        
19600 20 20 2f 2a 20 54 6f 6b 65 6e 20 76 61 6c 75 65    /* Token value
19610 2e 20 5a 65 72 6f 20 74 65 72 6d 69 6e 61 74 65  . Zero terminate
19620 64 20 61 6e 64 20 64 65 71 75 6f 74 65 64 20 2a  d and dequoted *
19630 2f 0a 20 20 20 20 69 6e 74 20 69 56 61 6c 75 65  /.    int iValue
19640 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
19650 4e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 69 6e 74  Non-negative int
19660 65 67 65 72 20 76 61 6c 75 65 20 69 66 20 45 50  eger value if EP
19670 5f 49 6e 74 56 61 6c 75 65 20 2a 2f 0a 20 20 7d  _IntValue */.  }
19680 20 75 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65   u;..  /* If the
19690 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c   EP_TokenOnly fl
196a0 61 67 20 69 73 20 73 65 74 20 69 6e 20 74 68 65  ag is set in the
196b0 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b   Expr.flags mask
196c0 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73  , then no.  ** s
196d0 70 61 63 65 20 69 73 20 61 6c 6c 6f 63 61 74 65  pace is allocate
196e0 64 20 66 6f 72 20 74 68 65 20 66 69 65 6c 64 73  d for the fields
196f0 20 62 65 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e   below this poin
19700 74 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 74 6f  t. An attempt to
19710 0a 20 20 2a 2a 20 61 63 63 65 73 73 20 74 68 65  .  ** access the
19720 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e  m will result in
19730 20 61 20 73 65 67 66 61 75 6c 74 20 6f 72 20 6d   a segfault or m
19740 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a  alfunction..  **
19750 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19760 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19770 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19780 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19790 2a 2a 2a 2f 0a 0a 20 20 45 78 70 72 20 2a 70 4c  ***/..  Expr *pL
197a0 65 66 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  eft;           /
197b0 2a 20 4c 65 66 74 20 73 75 62 6e 6f 64 65 20 2a  * Left subnode *
197c0 2f 0a 20 20 45 78 70 72 20 2a 70 52 69 67 68 74  /.  Expr *pRight
197d0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 69  ;          /* Ri
197e0 67 68 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a 20  ght subnode */. 
197f0 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 45 78 70   union {.    Exp
19800 72 4c 69 73 74 20 2a 70 4c 69 73 74 3b 20 20 20  rList *pList;   
19810 20 20 2f 2a 20 6f 70 20 3d 20 49 4e 2c 20 45 58    /* op = IN, EX
19820 49 53 54 53 2c 20 53 45 4c 45 43 54 2c 20 43 41  ISTS, SELECT, CA
19830 53 45 2c 20 46 55 4e 43 54 49 4f 4e 2c 20 42 45  SE, FUNCTION, BE
19840 54 57 45 45 4e 20 2a 2f 0a 20 20 20 20 53 65 6c  TWEEN */.    Sel
19850 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20  ect *pSelect;   
19860 20 20 2f 2a 20 45 50 5f 78 49 73 53 65 6c 65 63    /* EP_xIsSelec
19870 74 20 61 6e 64 20 6f 70 20 3d 20 49 4e 2c 20 45  t and op = IN, E
19880 58 49 53 54 53 2c 20 53 45 4c 45 43 54 20 2a 2f  XISTS, SELECT */
19890 0a 20 20 7d 20 78 3b 0a 0a 20 20 2f 2a 20 49 66  .  } x;..  /* If
198a0 20 74 68 65 20 45 50 5f 52 65 64 75 63 65 64 20   the EP_Reduced 
198b0 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 74  flag is set in t
198c0 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61  he Expr.flags ma
198d0 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a  sk, then no.  **
198e0 20 73 70 61 63 65 20 69 73 20 61 6c 6c 6f 63 61   space is alloca
198f0 74 65 64 20 66 6f 72 20 74 68 65 20 66 69 65 6c  ted for the fiel
19900 64 73 20 62 65 6c 6f 77 20 74 68 69 73 20 70 6f  ds below this po
19910 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70 74 20  int. An attempt 
19920 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73 20 74  to.  ** access t
19930 68 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74 20  hem will result 
19940 69 6e 20 61 20 73 65 67 66 61 75 6c 74 20 6f 72  in a segfault or
19950 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20 20   malfunction..  
19960 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19970 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19980 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19990 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
199a0 2a 2a 2a 2a 2a 2f 0a 0a 23 69 66 20 53 51 4c 49  *****/..#if SQLI
199b0 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50 54  TE_MAX_EXPR_DEPT
199c0 48 3e 30 0a 20 20 69 6e 74 20 6e 48 65 69 67 68  H>0.  int nHeigh
199d0 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
199e0 48 65 69 67 68 74 20 6f 66 20 74 68 65 20 74 72  Height of the tr
199f0 65 65 20 68 65 61 64 65 64 20 62 79 20 74 68 69  ee headed by thi
19a00 73 20 6e 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66  s node */.#endif
19a10 0a 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20  .  int iTable;  
19a20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f            /* TK_
19a30 43 4f 4c 55 4d 4e 3a 20 63 75 72 73 6f 72 20 6e  COLUMN: cursor n
19a40 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 20 68  umber of table h
19a50 6f 6c 64 69 6e 67 20 63 6f 6c 75 6d 6e 0a 20 20  olding column.  
19a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a70 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 52 45 47         ** TK_REG
19a80 49 53 54 45 52 3a 20 72 65 67 69 73 74 65 72 20  ISTER: register 
19a90 6e 75 6d 62 65 72 0a 20 20 20 20 20 20 20 20 20  number.         
19aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ab0 2a 2a 20 54 4b 5f 54 52 49 47 47 45 52 3a 20 31  ** TK_TRIGGER: 1
19ac0 20 2d 3e 20 6e 65 77 2c 20 30 20 2d 3e 20 6f 6c   -> new, 0 -> ol
19ad0 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d.              
19ae0 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 45 50             ** EP
19af0 5f 55 6e 6c 69 6b 65 6c 79 3a 20 20 31 33 34 32  _Unlikely:  1342
19b00 31 37 37 32 38 20 74 69 6d 65 73 20 6c 69 6b 65  17728 times like
19b10 6c 69 68 6f 6f 64 0a 20 20 20 20 20 20 20 20 20  lihood.         
19b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b30 2a 2a 20 54 4b 5f 49 4e 3a 20 65 70 68 65 6d 65  ** TK_IN: epheme
19b40 72 69 61 6c 20 74 61 62 6c 65 20 68 6f 6c 64 69  rial table holdi
19b50 6e 67 20 52 48 53 0a 20 20 20 20 20 20 20 20 20  ng RHS.         
19b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b70 2a 2a 20 54 4b 5f 53 45 4c 45 43 54 5f 43 4f 4c  ** TK_SELECT_COL
19b80 55 4d 4e 3a 20 4e 75 6d 62 65 72 20 6f 66 20 63  UMN: Number of c
19b90 6f 6c 75 6d 6e 73 20 6f 6e 20 74 68 65 20 4c 48  olumns on the LH
19ba0 53 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  S.              
19bb0 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b             ** TK
19bc0 5f 53 45 4c 45 43 54 3a 20 31 73 74 20 72 65 67  _SELECT: 1st reg
19bd0 69 73 74 65 72 20 6f 66 20 72 65 73 75 6c 74 20  ister of result 
19be0 76 65 63 74 6f 72 20 2a 2f 0a 20 20 79 6e 56 61  vector */.  ynVa
19bf0 72 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20  r iColumn;      
19c00 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a     /* TK_COLUMN:
19c10 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 2e 20 20   column index.  
19c20 2d 31 20 66 6f 72 20 72 6f 77 69 64 2e 0a 20 20  -1 for rowid..  
19c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c40 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 56 41 52         ** TK_VAR
19c50 49 41 42 4c 45 3a 20 76 61 72 69 61 62 6c 65 20  IABLE: variable 
19c60 6e 75 6d 62 65 72 20 28 61 6c 77 61 79 73 20 3e  number (always >
19c70 3d 20 31 29 2e 0a 20 20 20 20 20 20 20 20 20 20  = 1)..          
19c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
19c90 2a 20 54 4b 5f 53 45 4c 45 43 54 5f 43 4f 4c 55  * TK_SELECT_COLU
19ca0 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68  MN: column of th
19cb0 65 20 72 65 73 75 6c 74 20 76 65 63 74 6f 72 20  e result vector 
19cc0 2a 2f 0a 20 20 69 31 36 20 69 41 67 67 3b 20 20  */.  i16 iAgg;  
19cd0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57              /* W
19ce0 68 69 63 68 20 65 6e 74 72 79 20 69 6e 20 70 41  hich entry in pA
19cf0 67 67 49 6e 66 6f 2d 3e 61 43 6f 6c 5b 5d 20 6f  ggInfo->aCol[] o
19d00 72 20 2d 3e 61 46 75 6e 63 5b 5d 20 2a 2f 0a 20  r ->aFunc[] */. 
19d10 20 69 31 36 20 69 52 69 67 68 74 4a 6f 69 6e 54   i16 iRightJoinT
19d20 61 62 6c 65 3b 20 20 20 2f 2a 20 49 66 20 45 50  able;   /* If EP
19d30 5f 46 72 6f 6d 4a 6f 69 6e 2c 20 74 68 65 20 72  _FromJoin, the r
19d40 69 67 68 74 20 74 61 62 6c 65 20 6f 66 20 74 68  ight table of th
19d50 65 20 6a 6f 69 6e 20 2a 2f 0a 20 20 75 38 20 6f  e join */.  u8 o
19d60 70 32 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  p2;             
19d70 20 20 20 2f 2a 20 54 4b 5f 52 45 47 49 53 54 45     /* TK_REGISTE
19d80 52 2f 54 4b 5f 54 52 55 54 48 3a 20 6f 72 69 67  R/TK_TRUTH: orig
19d90 69 6e 61 6c 20 76 61 6c 75 65 20 6f 66 20 45 78  inal value of Ex
19da0 70 72 2e 6f 70 0a 20 20 20 20 20 20 20 20 20 20  pr.op.          
19db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
19dc0 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 74 68 65  * TK_COLUMN: the
19dd0 20 76 61 6c 75 65 20 6f 66 20 70 35 20 66 6f 72   value of p5 for
19de0 20 4f 50 5f 43 6f 6c 75 6d 6e 0a 20 20 20 20 20   OP_Column.     
19df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e00 20 20 20 20 2a 2a 20 54 4b 5f 41 47 47 5f 46 55      ** TK_AGG_FU
19e10 4e 43 54 49 4f 4e 3a 20 6e 65 73 74 69 6e 67 20  NCTION: nesting 
19e20 64 65 70 74 68 20 2a 2f 0a 20 20 41 67 67 49 6e  depth */.  AggIn
19e30 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20  fo *pAggInfo;   
19e40 20 20 2f 2a 20 55 73 65 64 20 62 79 20 54 4b 5f    /* Used by TK_
19e50 41 47 47 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 54  AGG_COLUMN and T
19e60 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 2a  K_AGG_FUNCTION *
19e70 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20  /.  union {.    
19e80 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20  Table *pTab;    
19e90 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c         /* TK_COL
19ea0 55 4d 4e 3a 20 54 61 62 6c 65 20 63 6f 6e 74 61  UMN: Table conta
19eb0 69 6e 69 6e 67 20 63 6f 6c 75 6d 6e 2e 20 43 61  ining column. Ca
19ec0 6e 20 62 65 20 4e 55 4c 4c 0a 20 20 20 20 20 20  n be NULL.      
19ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ee0 20 20 20 20 20 2a 2a 20 66 6f 72 20 61 20 63 6f       ** for a co
19ef0 6c 75 6d 6e 20 6f 66 20 61 6e 20 69 6e 64 65 78  lumn of an index
19f00 20 6f 6e 20 61 6e 20 65 78 70 72 65 73 73 69 6f   on an expressio
19f10 6e 20 2a 2f 0a 20 20 20 20 57 69 6e 64 6f 77 20  n */.    Window 
19f20 2a 70 57 69 6e 3b 20 20 20 20 20 20 20 20 20 20  *pWin;          
19f30 2f 2a 20 45 50 5f 57 69 6e 46 75 6e 63 3a 20 57  /* EP_WinFunc: W
19f40 69 6e 64 6f 77 2f 46 69 6c 74 65 72 20 64 65 66  indow/Filter def
19f50 6e 20 66 6f 72 20 61 20 66 75 6e 63 74 69 6f 6e  n for a function
19f60 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 7b   */.    struct {
19f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
19f80 2a 20 54 4b 5f 49 4e 2c 20 54 4b 5f 53 45 4c 45  * TK_IN, TK_SELE
19f90 43 54 2c 20 61 6e 64 20 54 4b 5f 45 58 49 53 54  CT, and TK_EXIST
19fa0 53 20 2a 2f 0a 20 20 20 20 20 20 69 6e 74 20 69  S */.      int i
19fb0 41 64 64 72 3b 20 20 20 20 20 20 20 20 20 20 20  Addr;           
19fc0 20 20 2f 2a 20 53 75 62 72 6f 75 74 69 6e 65 20    /* Subroutine 
19fd0 65 6e 74 72 79 20 61 64 64 72 65 73 73 20 2a 2f  entry address */
19fe0 0a 20 20 20 20 20 20 69 6e 74 20 72 65 67 52 65  .      int regRe
19ff0 74 75 72 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a  turn;         /*
1a000 20 52 65 67 69 73 74 65 72 20 75 73 65 64 20 74   Register used t
1a010 6f 20 68 6f 6c 64 20 72 65 74 75 72 6e 20 61 64  o hold return ad
1a020 64 72 65 73 73 20 2a 2f 0a 20 20 20 20 7d 20 73  dress */.    } s
1a030 75 62 3b 0a 20 20 7d 20 79 3b 0a 7d 3b 0a 0a 2f  ub;.  } y;.};../
1a040 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
1a050 6e 67 20 61 72 65 20 74 68 65 20 6d 65 61 6e 69  ng are the meani
1a060 6e 67 73 20 6f 66 20 62 69 74 73 20 69 6e 20 74  ngs of bits in t
1a070 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20 66 69  he Expr.flags fi
1a080 65 6c 64 2e 0a 2a 2a 20 56 61 6c 75 65 20 72 65  eld..** Value re
1a090 73 74 72 69 63 74 69 6f 6e 73 3a 0a 2a 2a 0a 2a  strictions:.**.*
1a0a0 2a 20 20 20 20 20 20 20 20 20 20 45 50 5f 41 67  *          EP_Ag
1a0b0 67 20 3d 3d 20 4e 43 5f 48 61 73 41 67 67 20 3d  g == NC_HasAgg =
1a0c0 3d 20 53 46 5f 48 61 73 41 67 67 0a 2a 2a 20 20  = SF_HasAgg.**  
1a0d0 20 20 20 20 20 20 20 20 45 50 5f 57 69 6e 20 3d          EP_Win =
1a0e0 3d 20 4e 43 5f 48 61 73 57 69 6e 0a 2a 2f 0a 23  = NC_HasWin.*/.#
1a0f0 64 65 66 69 6e 65 20 45 50 5f 46 72 6f 6d 4a 6f  define EP_FromJo
1a100 69 6e 20 20 20 30 78 30 30 30 30 30 31 20 2f 2a  in   0x000001 /*
1a110 20 4f 72 69 67 69 6e 61 74 65 73 20 69 6e 20 4f   Originates in O
1a120 4e 2f 55 53 49 4e 47 20 63 6c 61 75 73 65 20 6f  N/USING clause o
1a130 66 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a  f outer join */.
1a140 23 64 65 66 69 6e 65 20 45 50 5f 44 69 73 74 69  #define EP_Disti
1a150 6e 63 74 20 20 20 30 78 30 30 30 30 30 32 20 2f  nct   0x000002 /
1a160 2a 20 41 67 67 72 65 67 61 74 65 20 66 75 6e 63  * Aggregate func
1a170 74 69 6f 6e 20 77 69 74 68 20 44 49 53 54 49 4e  tion with DISTIN
1a180 43 54 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64  CT keyword */.#d
1a190 65 66 69 6e 65 20 45 50 5f 48 61 73 46 75 6e 63  efine EP_HasFunc
1a1a0 20 20 20 20 30 78 30 30 30 30 30 34 20 2f 2a 20      0x000004 /* 
1a1b0 43 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20  Contains one or 
1a1c0 6d 6f 72 65 20 66 75 6e 63 74 69 6f 6e 73 20 6f  more functions o
1a1d0 66 20 61 6e 79 20 6b 69 6e 64 20 2a 2f 0a 23 64  f any kind */.#d
1a1e0 65 66 69 6e 65 20 45 50 5f 46 69 78 65 64 43 6f  efine EP_FixedCo
1a1f0 6c 20 20 20 30 78 30 30 30 30 30 38 20 2f 2a 20  l   0x000008 /* 
1a200 54 4b 5f 43 6f 6c 75 6d 6e 20 77 69 74 68 20 61  TK_Column with a
1a210 20 6b 6e 6f 77 6e 20 66 69 78 65 64 20 76 61 6c   known fixed val
1a220 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  ue */.#define EP
1a230 5f 41 67 67 20 20 20 20 20 20 20 20 30 78 30 30  _Agg        0x00
1a240 30 30 31 30 20 2f 2a 20 43 6f 6e 74 61 69 6e 73  0010 /* Contains
1a250 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67   one or more agg
1a260 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
1a270 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 56   */.#define EP_V
1a280 61 72 53 65 6c 65 63 74 20 20 30 78 30 30 30 30  arSelect  0x0000
1a290 32 30 20 2f 2a 20 70 53 65 6c 65 63 74 20 69 73  20 /* pSelect is
1a2a0 20 63 6f 72 72 65 6c 61 74 65 64 2c 20 6e 6f 74   correlated, not
1a2b0 20 63 6f 6e 73 74 61 6e 74 20 2a 2f 0a 23 64 65   constant */.#de
1a2c0 66 69 6e 65 20 45 50 5f 44 62 6c 51 75 6f 74 65  fine EP_DblQuote
1a2d0 64 20 20 30 78 30 30 30 30 34 30 20 2f 2a 20 74  d  0x000040 /* t
1a2e0 6f 6b 65 6e 2e 7a 20 77 61 73 20 6f 72 69 67 69  oken.z was origi
1a2f0 6e 61 6c 6c 79 20 69 6e 20 22 2e 2e 2e 22 20 2a  nally in "..." *
1a300 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 49 6e 66  /.#define EP_Inf
1a310 69 78 46 75 6e 63 20 20 30 78 30 30 30 30 38 30  ixFunc  0x000080
1a320 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 6e 20   /* True for an 
1a330 69 6e 66 69 78 20 66 75 6e 63 74 69 6f 6e 3a 20  infix function: 
1a340 4c 49 4b 45 2c 20 47 4c 4f 42 2c 20 65 74 63 20  LIKE, GLOB, etc 
1a350 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 43 6f  */.#define EP_Co
1a360 6c 6c 61 74 65 20 20 20 20 30 78 30 30 30 31 30  llate    0x00010
1a370 30 20 2f 2a 20 54 72 65 65 20 63 6f 6e 74 61 69  0 /* Tree contai
1a380 6e 73 20 61 20 54 4b 5f 43 4f 4c 4c 41 54 45 20  ns a TK_COLLATE 
1a390 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 20 20 2f 2a  operator */.  /*
1a3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a3b0 20 20 30 78 30 30 30 32 30 30 20 41 76 61 69 6c    0x000200 Avail
1a3c0 61 62 6c 65 20 66 6f 72 20 72 65 75 73 65 20 2a  able for reuse *
1a3d0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 49 6e 74  /.#define EP_Int
1a3e0 56 61 6c 75 65 20 20 20 30 78 30 30 30 34 30 30  Value   0x000400
1a3f0 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75   /* Integer valu
1a400 65 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 75  e contained in u
1a410 2e 69 56 61 6c 75 65 20 2a 2f 0a 23 64 65 66 69  .iValue */.#defi
1a420 6e 65 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20  ne EP_xIsSelect 
1a430 20 30 78 30 30 30 38 30 30 20 2f 2a 20 78 2e 70   0x000800 /* x.p
1a440 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69 64 20  Select is valid 
1a450 28 6f 74 68 65 72 77 69 73 65 20 78 2e 70 4c 69  (otherwise x.pLi
1a460 73 74 20 69 73 29 20 2a 2f 0a 23 64 65 66 69 6e  st is) */.#defin
1a470 65 20 45 50 5f 53 6b 69 70 20 20 20 20 20 20 20  e EP_Skip       
1a480 30 78 30 30 31 30 30 30 20 2f 2a 20 4f 70 65 72  0x001000 /* Oper
1a490 61 74 6f 72 20 64 6f 65 73 20 6e 6f 74 20 63 6f  ator does not co
1a4a0 6e 74 72 69 62 75 74 65 20 74 6f 20 61 66 66 69  ntribute to affi
1a4b0 6e 69 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  nity */.#define 
1a4c0 45 50 5f 52 65 64 75 63 65 64 20 20 20 20 30 78  EP_Reduced    0x
1a4d0 30 30 32 30 30 30 20 2f 2a 20 45 78 70 72 20 73  002000 /* Expr s
1a4e0 74 72 75 63 74 20 45 58 50 52 5f 52 45 44 55 43  truct EXPR_REDUC
1a4f0 45 44 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c  EDSIZE bytes onl
1a500 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  y */.#define EP_
1a510 54 6f 6b 65 6e 4f 6e 6c 79 20 20 30 78 30 30 34  TokenOnly  0x004
1a520 30 30 30 20 2f 2a 20 45 78 70 72 20 73 74 72 75  000 /* Expr stru
1a530 63 74 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c  ct EXPR_TOKENONL
1a540 59 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79  YSIZE bytes only
1a550 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 57   */.#define EP_W
1a560 69 6e 20 20 20 20 20 20 20 20 30 78 30 30 38 30  in        0x0080
1a570 30 30 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 77  00 /* Contains w
1a580 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 73 20  indow functions 
1a590 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 4d 65  */.#define EP_Me
1a5a0 6d 54 6f 6b 65 6e 20 20 20 30 78 30 31 30 30 30  mToken   0x01000
1a5b0 30 20 2f 2a 20 4e 65 65 64 20 74 6f 20 73 71 6c  0 /* Need to sql
1a5c0 69 74 65 33 44 62 46 72 65 65 28 29 20 45 78 70  ite3DbFree() Exp
1a5d0 72 2e 7a 54 6f 6b 65 6e 20 2a 2f 0a 23 64 65 66  r.zToken */.#def
1a5e0 69 6e 65 20 45 50 5f 4e 6f 52 65 64 75 63 65 20  ine EP_NoReduce 
1a5f0 20 20 30 78 30 32 30 30 30 30 20 2f 2a 20 43 61    0x020000 /* Ca
1a600 6e 6e 6f 74 20 45 58 50 52 44 55 50 5f 52 45 44  nnot EXPRDUP_RED
1a610 55 43 45 20 74 68 69 73 20 45 78 70 72 20 2a 2f  UCE this Expr */
1a620 0a 23 64 65 66 69 6e 65 20 45 50 5f 55 6e 6c 69  .#define EP_Unli
1a630 6b 65 6c 79 20 20 20 30 78 30 34 30 30 30 30 20  kely   0x040000 
1a640 2f 2a 20 75 6e 6c 69 6b 65 6c 79 28 29 20 6f 72  /* unlikely() or
1a650 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 29 20 66 75   likelihood() fu
1a660 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
1a670 65 20 45 50 5f 43 6f 6e 73 74 46 75 6e 63 20 20  e EP_ConstFunc  
1a680 30 78 30 38 30 30 30 30 20 2f 2a 20 41 20 53 51  0x080000 /* A SQ
1a690 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41  LITE_FUNC_CONSTA
1a6a0 4e 54 20 6f 72 20 5f 53 4c 4f 43 48 4e 47 20 66  NT or _SLOCHNG f
1a6b0 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  unction */.#defi
1a6c0 6e 65 20 45 50 5f 43 61 6e 42 65 4e 75 6c 6c 20  ne EP_CanBeNull 
1a6d0 20 30 78 31 30 30 30 30 30 20 2f 2a 20 43 61 6e   0x100000 /* Can
1a6e0 20 62 65 20 6e 75 6c 6c 20 64 65 73 70 69 74 65   be null despite
1a6f0 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72   NOT NULL constr
1a700 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  aint */.#define 
1a710 45 50 5f 53 75 62 71 75 65 72 79 20 20 20 30 78  EP_Subquery   0x
1a720 32 30 30 30 30 30 20 2f 2a 20 54 72 65 65 20 63  200000 /* Tree c
1a730 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f 53 45 4c  ontains a TK_SEL
1a740 45 43 54 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a  ECT operator */.
1a750 23 64 65 66 69 6e 65 20 45 50 5f 41 6c 69 61 73  #define EP_Alias
1a760 20 20 20 20 20 20 30 78 34 30 30 30 30 30 20 2f        0x400000 /
1a770 2a 20 49 73 20 61 6e 20 61 6c 69 61 73 20 66 6f  * Is an alias fo
1a780 72 20 61 20 72 65 73 75 6c 74 20 73 65 74 20 63  r a result set c
1a790 6f 6c 75 6d 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  olumn */.#define
1a7a0 20 45 50 5f 4c 65 61 66 20 20 20 20 20 20 20 30   EP_Leaf       0
1a7b0 78 38 30 30 30 30 30 20 2f 2a 20 45 78 70 72 2e  x800000 /* Expr.
1a7c0 70 4c 65 66 74 2c 20 2e 70 52 69 67 68 74 2c 20  pLeft, .pRight, 
1a7d0 2e 75 2e 70 53 65 6c 65 63 74 20 61 6c 6c 20 4e  .u.pSelect all N
1a7e0 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ULL */.#define E
1a7f0 50 5f 57 69 6e 46 75 6e 63 20 20 20 30 78 31 30  P_WinFunc   0x10
1a800 30 30 30 30 30 20 2f 2a 20 54 4b 5f 46 55 4e 43  00000 /* TK_FUNC
1a810 54 49 4f 4e 20 77 69 74 68 20 45 78 70 72 2e 79  TION with Expr.y
1a820 2e 70 57 69 6e 20 73 65 74 20 2a 2f 0a 23 64 65  .pWin set */.#de
1a830 66 69 6e 65 20 45 50 5f 53 75 62 72 74 6e 20 20  fine EP_Subrtn  
1a840 20 20 30 78 32 30 30 30 30 30 30 20 2f 2a 20 55    0x2000000 /* U
1a850 73 65 73 20 45 78 70 72 2e 79 2e 73 75 62 2e 20  ses Expr.y.sub. 
1a860 54 4b 5f 49 4e 2c 20 5f 53 45 4c 45 43 54 2c 20  TK_IN, _SELECT, 
1a870 6f 72 20 5f 45 58 49 53 54 53 20 2a 2f 0a 23 64  or _EXISTS */.#d
1a880 65 66 69 6e 65 20 45 50 5f 51 75 6f 74 65 64 20  efine EP_Quoted 
1a890 20 20 20 30 78 34 30 30 30 30 30 30 20 2f 2a 20     0x4000000 /* 
1a8a0 54 4b 5f 49 44 20 77 61 73 20 6f 72 69 67 69 6e  TK_ID was origin
1a8b0 61 6c 6c 79 20 71 75 6f 74 65 64 20 2a 2f 0a 23  ally quoted */.#
1a8c0 64 65 66 69 6e 65 20 45 50 5f 53 74 61 74 69 63  define EP_Static
1a8d0 20 20 20 20 30 78 38 30 30 30 30 30 30 20 2f 2a      0x8000000 /*
1a8e0 20 48 65 6c 64 20 69 6e 20 6d 65 6d 6f 72 79 20   Held in memory 
1a8f0 6e 6f 74 20 6f 62 74 61 69 6e 65 64 20 66 72 6f  not obtained fro
1a900 6d 20 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 23 64  m malloc() */.#d
1a910 65 66 69 6e 65 20 45 50 5f 49 73 54 72 75 65 20  efine EP_IsTrue 
1a920 20 20 30 78 31 30 30 30 30 30 30 30 20 2f 2a 20    0x10000000 /* 
1a930 41 6c 77 61 79 73 20 68 61 73 20 62 6f 6f 6c 65  Always has boole
1a940 61 6e 20 76 61 6c 75 65 20 6f 66 20 54 52 55 45  an value of TRUE
1a950 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 49   */.#define EP_I
1a960 73 46 61 6c 73 65 20 20 30 78 32 30 30 30 30 30  sFalse  0x200000
1a970 30 30 20 2f 2a 20 41 6c 77 61 79 73 20 68 61 73  00 /* Always has
1a980 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 20 6f   boolean value o
1a990 66 20 46 41 4c 53 45 20 2a 2f 0a 23 64 65 66 69  f FALSE */.#defi
1a9a0 6e 65 20 45 50 5f 49 6e 64 69 72 65 63 74 20 30  ne EP_Indirect 0
1a9b0 78 34 30 30 30 30 30 30 30 20 2f 2a 20 43 6f 6e  x40000000 /* Con
1a9c0 74 61 69 6e 65 64 20 77 69 74 68 69 6e 20 61 20  tained within a 
1a9d0 54 52 49 47 47 45 52 20 6f 72 20 61 20 56 49 45  TRIGGER or a VIE
1a9e0 57 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  W */../*.** The 
1a9f0 45 50 5f 50 72 6f 70 61 67 61 74 65 20 6d 61 73  EP_Propagate mas
1aa00 6b 20 69 73 20 61 20 73 65 74 20 6f 66 20 70 72  k is a set of pr
1aa10 6f 70 65 72 74 69 65 73 20 74 68 61 74 20 61 75  operties that au
1aa20 74 6f 6d 61 74 69 63 61 6c 6c 79 20 70 72 6f 70  tomatically prop
1aa30 61 67 61 74 65 0a 2a 2a 20 75 70 77 61 72 64 73  agate.** upwards
1aa40 20 69 6e 74 6f 20 70 61 72 65 6e 74 20 6e 6f 64   into parent nod
1aa50 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45  es..*/.#define E
1aa60 50 5f 50 72 6f 70 61 67 61 74 65 20 28 45 50 5f  P_Propagate (EP_
1aa70 43 6f 6c 6c 61 74 65 7c 45 50 5f 53 75 62 71 75  Collate|EP_Subqu
1aa80 65 72 79 7c 45 50 5f 48 61 73 46 75 6e 63 29 0a  ery|EP_HasFunc).
1aa90 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63  ./*.** These mac
1aaa0 72 6f 73 20 63 61 6e 20 62 65 20 75 73 65 64 20  ros can be used 
1aab0 74 6f 20 74 65 73 74 2c 20 73 65 74 2c 20 6f 72  to test, set, or
1aac0 20 63 6c 65 61 72 20 62 69 74 73 20 69 6e 20 74   clear bits in t
1aad0 68 65 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73  he.** Expr.flags
1aae0 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69   field..*/.#defi
1aaf0 6e 65 20 45 78 70 72 48 61 73 50 72 6f 70 65 72  ne ExprHasProper
1ab00 74 79 28 45 2c 50 29 20 20 20 20 20 28 28 28 45  ty(E,P)     (((E
1ab10 29 2d 3e 66 6c 61 67 73 26 28 50 29 29 21 3d 30  )->flags&(P))!=0
1ab20 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48 61  ).#define ExprHa
1ab30 73 41 6c 6c 50 72 6f 70 65 72 74 79 28 45 2c 50  sAllProperty(E,P
1ab40 29 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26  )  (((E)->flags&
1ab50 28 50 29 29 3d 3d 28 50 29 29 0a 23 64 65 66 69  (P))==(P)).#defi
1ab60 6e 65 20 45 78 70 72 53 65 74 50 72 6f 70 65 72  ne ExprSetProper
1ab70 74 79 28 45 2c 50 29 20 20 20 20 20 28 45 29 2d  ty(E,P)     (E)-
1ab80 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66  >flags|=(P).#def
1ab90 69 6e 65 20 45 78 70 72 43 6c 65 61 72 50 72 6f  ine ExprClearPro
1aba0 70 65 72 74 79 28 45 2c 50 29 20 20 20 28 45 29  perty(E,P)   (E)
1abb0 2d 3e 66 6c 61 67 73 26 3d 7e 28 50 29 0a 23 64  ->flags&=~(P).#d
1abc0 65 66 69 6e 65 20 45 78 70 72 41 6c 77 61 79 73  efine ExprAlways
1abd0 54 72 75 65 28 45 29 20 20 20 28 28 28 45 29 2d  True(E)   (((E)-
1abe0 3e 66 6c 61 67 73 26 28 45 50 5f 46 72 6f 6d 4a  >flags&(EP_FromJ
1abf0 6f 69 6e 7c 45 50 5f 49 73 54 72 75 65 29 29 3d  oin|EP_IsTrue))=
1ac00 3d 45 50 5f 49 73 54 72 75 65 29 0a 23 64 65 66  =EP_IsTrue).#def
1ac10 69 6e 65 20 45 78 70 72 41 6c 77 61 79 73 46 61  ine ExprAlwaysFa
1ac20 6c 73 65 28 45 29 20 20 28 28 28 45 29 2d 3e 66  lse(E)  (((E)->f
1ac30 6c 61 67 73 26 28 45 50 5f 46 72 6f 6d 4a 6f 69  lags&(EP_FromJoi
1ac40 6e 7c 45 50 5f 49 73 46 61 6c 73 65 29 29 3d 3d  n|EP_IsFalse))==
1ac50 45 50 5f 49 73 46 61 6c 73 65 29 0a 0a 2f 2a 20  EP_IsFalse)../* 
1ac60 54 68 65 20 45 78 70 72 53 65 74 56 56 41 50 72  The ExprSetVVAPr
1ac70 6f 70 65 72 74 79 28 29 20 6d 61 63 72 6f 20 69  operty() macro i
1ac80 73 20 75 73 65 64 20 66 6f 72 20 56 65 72 69 66  s used for Verif
1ac90 69 63 61 74 69 6f 6e 2c 20 56 61 6c 69 64 61 74  ication, Validat
1aca0 69 6f 6e 2c 0a 2a 2a 20 61 6e 64 20 41 63 63 72  ion,.** and Accr
1acb0 65 64 69 74 61 74 69 6f 6e 20 6f 6e 6c 79 2e 20  editation only. 
1acc0 20 49 74 20 77 6f 72 6b 73 20 6c 69 6b 65 20 45   It works like E
1acd0 78 70 72 53 65 74 50 72 6f 70 65 72 74 79 28 29  xprSetProperty()
1ace0 20 64 75 72 69 6e 67 20 56 56 41 0a 2a 2a 20 70   during VVA.** p
1acf0 72 6f 63 65 73 73 65 73 20 62 75 74 20 69 73 20  rocesses but is 
1ad00 61 20 6e 6f 2d 6f 70 20 66 6f 72 20 64 65 6c 69  a no-op for deli
1ad10 76 65 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  very..*/.#ifdef 
1ad20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 20 64  SQLITE_DEBUG.# d
1ad30 65 66 69 6e 65 20 45 78 70 72 53 65 74 56 56 41  efine ExprSetVVA
1ad40 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 28  Property(E,P)  (
1ad50 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23  E)->flags|=(P).#
1ad60 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 45 78  else.# define Ex
1ad70 70 72 53 65 74 56 56 41 50 72 6f 70 65 72 74 79  prSetVVAProperty
1ad80 28 45 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  (E,P).#endif../*
1ad90 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65  .** Macros to de
1ada0 74 65 72 6d 69 6e 65 20 74 68 65 20 6e 75 6d 62  termine the numb
1adb0 65 72 20 6f 66 20 62 79 74 65 73 20 72 65 71 75  er of bytes requ
1adc0 69 72 65 64 20 62 79 20 61 20 6e 6f 72 6d 61 6c  ired by a normal
1add0 20 45 78 70 72 0a 2a 2a 20 73 74 72 75 63 74 2c   Expr.** struct,
1ade0 20 61 6e 20 45 78 70 72 20 73 74 72 75 63 74 20   an Expr struct 
1adf0 77 69 74 68 20 74 68 65 20 45 50 5f 52 65 64 75  with the EP_Redu
1ae00 63 65 64 20 66 6c 61 67 20 73 65 74 20 69 6e 20  ced flag set in 
1ae10 45 78 70 72 2e 66 6c 61 67 73 0a 2a 2a 20 61 6e  Expr.flags.** an
1ae20 64 20 61 6e 20 45 78 70 72 20 73 74 72 75 63 74  d an Expr struct
1ae30 20 77 69 74 68 20 74 68 65 20 45 50 5f 54 6f 6b   with the EP_Tok
1ae40 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 73 65 74 2e  enOnly flag set.
1ae50 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52  .*/.#define EXPR
1ae60 5f 46 55 4c 4c 53 49 5a 45 20 20 20 20 20 20 20  _FULLSIZE       
1ae70 20 20 20 20 73 69 7a 65 6f 66 28 45 78 70 72 29      sizeof(Expr)
1ae80 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 75             /* Fu
1ae90 6c 6c 20 73 69 7a 65 20 2a 2f 0a 23 64 65 66 69  ll size */.#defi
1aea0 6e 65 20 45 58 50 52 5f 52 45 44 55 43 45 44 53  ne EXPR_REDUCEDS
1aeb0 49 5a 45 20 20 20 20 20 20 20 20 6f 66 66 73 65  IZE        offse
1aec0 74 6f 66 28 45 78 70 72 2c 69 54 61 62 6c 65 29  tof(Expr,iTable)
1aed0 20 20 2f 2a 20 43 6f 6d 6d 6f 6e 20 66 65 61 74    /* Common feat
1aee0 75 72 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ures */.#define 
1aef0 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49  EXPR_TOKENONLYSI
1af00 5a 45 20 20 20 20 20 20 6f 66 66 73 65 74 6f 66  ZE      offsetof
1af10 28 45 78 70 72 2c 70 4c 65 66 74 29 20 20 20 2f  (Expr,pLeft)   /
1af20 2a 20 46 65 77 65 72 20 66 65 61 74 75 72 65 73  * Fewer features
1af30 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73   */../*.** Flags
1af40 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 20 73   passed to the s
1af50 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 29 20  qlite3ExprDup() 
1af60 66 75 6e 63 74 69 6f 6e 2e 20 53 65 65 20 74 68  function. See th
1af70 65 20 68 65 61 64 65 72 20 63 6f 6d 6d 65 6e 74  e header comment
1af80 0a 2a 2a 20 61 62 6f 76 65 20 73 71 6c 69 74 65  .** above sqlite
1af90 33 45 78 70 72 44 75 70 28 29 20 66 6f 72 20 64  3ExprDup() for d
1afa0 65 74 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69  etails..*/.#defi
1afb0 6e 65 20 45 58 50 52 44 55 50 5f 52 45 44 55 43  ne EXPRDUP_REDUC
1afc0 45 20 20 20 20 20 20 20 20 20 30 78 30 30 30 31  E         0x0001
1afd0 20 20 2f 2a 20 55 73 65 64 20 72 65 64 75 63 65    /* Used reduce
1afe0 64 2d 73 69 7a 65 20 45 78 70 72 20 6e 6f 64 65  d-size Expr node
1aff0 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 72 75 65  s */../*.** True
1b000 20 69 66 20 74 68 65 20 65 78 70 72 65 73 73 69   if the expressi
1b010 6f 6e 20 70 61 73 73 65 64 20 61 73 20 61 6e 20  on passed as an 
1b020 61 72 67 75 6d 65 6e 74 20 77 61 73 20 61 20 66  argument was a f
1b030 75 6e 63 74 69 6f 6e 20 77 69 74 68 0a 2a 2a 20  unction with.** 
1b040 61 6e 20 4f 56 45 52 28 29 20 63 6c 61 75 73 65  an OVER() clause
1b050 20 28 61 20 77 69 6e 64 6f 77 20 66 75 6e 63 74   (a window funct
1b060 69 6f 6e 29 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  ion)..*/.#ifdef 
1b070 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 49 4e 44  SQLITE_OMIT_WIND
1b080 4f 57 46 55 4e 43 0a 23 20 64 65 66 69 6e 65 20  OWFUNC.# define 
1b090 49 73 57 69 6e 64 6f 77 46 75 6e 63 28 70 29 20  IsWindowFunc(p) 
1b0a0 30 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  0.#else.# define
1b0b0 20 49 73 57 69 6e 64 6f 77 46 75 6e 63 28 70 29   IsWindowFunc(p)
1b0c0 20 28 20 5c 0a 20 20 20 20 45 78 70 72 48 61 73   ( \.    ExprHas
1b0d0 50 72 6f 70 65 72 74 79 28 28 70 29 2c 20 45 50  Property((p), EP
1b0e0 5f 57 69 6e 46 75 6e 63 29 20 26 26 20 70 2d 3e  _WinFunc) && p->
1b0f0 79 2e 70 57 69 6e 2d 3e 65 46 72 6d 54 79 70 65  y.pWin->eFrmType
1b100 21 3d 54 4b 5f 46 49 4c 54 45 52 20 5c 0a 20 29  !=TK_FILTER \. )
1b110 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
1b120 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73 73   list of express
1b130 69 6f 6e 73 2e 20 20 45 61 63 68 20 65 78 70 72  ions.  Each expr
1b140 65 73 73 69 6f 6e 20 6d 61 79 20 6f 70 74 69 6f  ession may optio
1b150 6e 61 6c 6c 79 20 68 61 76 65 20 61 0a 2a 2a 20  nally have a.** 
1b160 6e 61 6d 65 2e 20 20 41 6e 20 65 78 70 72 2f 6e  name.  An expr/n
1b170 61 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20  ame combination 
1b180 63 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20 73  can be used in s
1b190 65 76 65 72 61 6c 20 77 61 79 73 2c 20 73 75 63  everal ways, suc
1b1a0 68 0a 2a 2a 20 61 73 20 74 68 65 20 6c 69 73 74  h.** as the list
1b1b0 20 6f 66 20 22 65 78 70 72 20 41 53 20 49 44 22   of "expr AS ID"
1b1c0 20 66 69 65 6c 64 73 20 66 6f 6c 6c 6f 77 69 6e   fields followin
1b1d0 67 20 61 20 22 53 45 4c 45 43 54 22 20 6f 72 20  g a "SELECT" or 
1b1e0 69 6e 20 74 68 65 0a 2a 2a 20 6c 69 73 74 20 6f  in the.** list o
1b1f0 66 20 22 49 44 20 3d 20 65 78 70 72 22 20 69 74  f "ID = expr" it
1b200 65 6d 73 20 69 6e 20 61 6e 20 55 50 44 41 54 45  ems in an UPDATE
1b210 2e 20 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70  .  A list of exp
1b220 72 65 73 73 69 6f 6e 73 20 63 61 6e 0a 2a 2a 20  ressions can.** 
1b230 61 6c 73 6f 20 62 65 20 75 73 65 64 20 61 73 20  also be used as 
1b240 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  the argument to 
1b250 61 20 66 75 6e 63 74 69 6f 6e 2c 20 69 6e 20 77  a function, in w
1b260 68 69 63 68 20 63 61 73 65 20 74 68 65 20 61 2e  hich case the a.
1b270 7a 4e 61 6d 65 0a 2a 2a 20 66 69 65 6c 64 20 69  zName.** field i
1b280 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a  s not used..**.*
1b290 2a 20 42 79 20 64 65 66 61 75 6c 74 20 74 68 65  * By default the
1b2a0 20 45 78 70 72 2e 7a 53 70 61 6e 20 66 69 65 6c   Expr.zSpan fiel
1b2b0 64 20 68 6f 6c 64 73 20 61 20 68 75 6d 61 6e 2d  d holds a human-
1b2c0 72 65 61 64 61 62 6c 65 20 64 65 73 63 72 69 70  readable descrip
1b2d0 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 65  tion of.** the e
1b2e0 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69  xpression that i
1b2f0 73 20 75 73 65 64 20 69 6e 20 74 68 65 20 67 65  s used in the ge
1b300 6e 65 72 61 74 69 6f 6e 20 6f 66 20 65 72 72 6f  neration of erro
1b310 72 20 6d 65 73 73 61 67 65 73 20 61 6e 64 0a 2a  r messages and.*
1b320 2a 20 63 6f 6c 75 6d 6e 20 6c 61 62 65 6c 73 2e  * column labels.
1b330 20 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20    In this case, 
1b340 45 78 70 72 2e 7a 53 70 61 6e 20 69 73 20 74 79  Expr.zSpan is ty
1b350 70 69 63 61 6c 6c 79 20 74 68 65 20 74 65 78 74  pically the text
1b360 20 6f 66 20 61 0a 2a 2a 20 63 6f 6c 75 6d 6e 20   of a.** column 
1b370 65 78 70 72 65 73 73 69 6f 6e 20 61 73 20 69 74  expression as it
1b380 20 65 78 69 73 74 73 20 69 6e 20 61 20 53 45 4c   exists in a SEL
1b390 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  ECT statement.  
1b3a0 48 6f 77 65 76 65 72 2c 20 69 66 0a 2a 2a 20 74  However, if.** t
1b3b0 68 65 20 62 53 70 61 6e 49 73 54 61 62 20 66 6c  he bSpanIsTab fl
1b3c0 61 67 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20  ag is set, then 
1b3d0 7a 53 70 61 6e 20 69 73 20 6f 76 65 72 6c 6f 61  zSpan is overloa
1b3e0 64 65 64 20 74 6f 20 6d 65 61 6e 20 74 68 65 20  ded to mean the 
1b3f0 6e 61 6d 65 0a 2a 2a 20 6f 66 20 74 68 65 20 72  name.** of the r
1b400 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 69 6e 20  esult column in 
1b410 74 68 65 20 66 6f 72 6d 3a 20 44 41 54 41 42 41  the form: DATABA
1b420 53 45 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 2e  SE.TABLE.COLUMN.
1b430 20 20 54 68 69 73 20 6c 61 74 65 72 0a 2a 2a 20    This later.** 
1b440 66 6f 72 6d 20 69 73 20 75 73 65 64 20 66 6f 72  form is used for
1b450 20 6e 61 6d 65 20 72 65 73 6f 6c 75 74 69 6f 6e   name resolution
1b460 20 77 69 74 68 20 6e 65 73 74 65 64 20 46 52 4f   with nested FRO
1b470 4d 20 63 6c 61 75 73 65 73 2e 0a 2a 2f 0a 73 74  M clauses..*/.st
1b480 72 75 63 74 20 45 78 70 72 4c 69 73 74 20 7b 0a  ruct ExprList {.
1b490 20 20 69 6e 74 20 6e 45 78 70 72 3b 20 20 20 20    int nExpr;    
1b4a0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1b4b0 65 72 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e  er of expression
1b4c0 73 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f  s on the list */
1b4d0 0a 20 20 73 74 72 75 63 74 20 45 78 70 72 4c 69  .  struct ExprLi
1b4e0 73 74 5f 69 74 65 6d 20 7b 20 2f 2a 20 46 6f 72  st_item { /* For
1b4f0 20 65 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e   each expression
1b500 20 69 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a   in the list */.
1b510 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b      Expr *pExpr;
1b520 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1b530 68 65 20 70 61 72 73 65 20 74 72 65 65 20 66 6f  he parse tree fo
1b540 72 20 74 68 69 73 20 65 78 70 72 65 73 73 69 6f  r this expressio
1b550 6e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  n */.    char *z
1b560 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20  Name;           
1b570 20 2f 2a 20 54 6f 6b 65 6e 20 61 73 73 6f 63 69   /* Token associ
1b580 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20 65  ated with this e
1b590 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20  xpression */.   
1b5a0 20 63 68 61 72 20 2a 7a 53 70 61 6e 3b 20 20 20   char *zSpan;   
1b5b0 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 72 69 67           /* Orig
1b5c0 69 6e 61 6c 20 74 65 78 74 20 6f 66 20 74 68 65  inal text of the
1b5d0 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20   expression */. 
1b5e0 20 20 20 75 38 20 73 6f 72 74 46 6c 61 67 73 3b     u8 sortFlags;
1b5f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61             /* Ma
1b600 73 6b 20 6f 66 20 4b 45 59 49 4e 46 4f 5f 4f 52  sk of KEYINFO_OR
1b610 44 45 52 5f 2a 20 66 6c 61 67 73 20 2a 2f 0a 20  DER_* flags */. 
1b620 20 20 20 75 6e 73 69 67 6e 65 64 20 64 6f 6e 65     unsigned done
1b630 20 3a 31 3b 20 20 20 20 20 20 20 2f 2a 20 41 20   :1;       /* A 
1b640 66 6c 61 67 20 74 6f 20 69 6e 64 69 63 61 74 65  flag to indicate
1b650 20 77 68 65 6e 20 70 72 6f 63 65 73 73 69 6e 67   when processing
1b660 20 69 73 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a   is finished */.
1b670 20 20 20 20 75 6e 73 69 67 6e 65 64 20 62 53 70      unsigned bSp
1b680 61 6e 49 73 54 61 62 20 3a 31 3b 20 2f 2a 20 7a  anIsTab :1; /* z
1b690 53 70 61 6e 20 68 6f 6c 64 73 20 44 42 2e 54 41  Span holds DB.TA
1b6a0 42 4c 45 2e 43 4f 4c 55 4d 4e 20 2a 2f 0a 20 20  BLE.COLUMN */.  
1b6b0 20 20 75 6e 73 69 67 6e 65 64 20 72 65 75 73 61    unsigned reusa
1b6c0 62 6c 65 20 3a 31 3b 20 20 20 2f 2a 20 43 6f 6e  ble :1;   /* Con
1b6d0 73 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e  stant expression
1b6e0 20 69 73 20 72 65 75 73 61 62 6c 65 20 2a 2f 0a   is reusable */.
1b6f0 20 20 20 20 75 6e 73 69 67 6e 65 64 20 62 53 6f      unsigned bSo
1b700 72 74 65 72 52 65 66 20 3a 31 3b 20 2f 2a 20 44  rterRef :1; /* D
1b710 65 66 65 72 20 65 76 61 6c 75 61 74 69 6f 6e 20  efer evaluation 
1b720 75 6e 74 69 6c 20 61 66 74 65 72 20 73 6f 72 74  until after sort
1b730 69 6e 67 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67  ing */.    unsig
1b740 6e 65 64 20 62 4e 75 6c 6c 73 3a 20 31 3b 20 20  ned bNulls: 1;  
1b750 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 65 78     /* True if ex
1b760 70 6c 69 63 69 74 20 22 4e 55 4c 4c 53 20 46 49  plicit "NULLS FI
1b770 52 53 54 2f 4c 41 53 54 22 20 2a 2f 0a 20 20 20  RST/LAST" */.   
1b780 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 20 20 73   union {.      s
1b790 74 72 75 63 74 20 7b 0a 20 20 20 20 20 20 20 20  truct {.        
1b7a0 75 31 36 20 69 4f 72 64 65 72 42 79 43 6f 6c 3b  u16 iOrderByCol;
1b7b0 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 4f 52 44        /* For ORD
1b7c0 45 52 20 42 59 2c 20 63 6f 6c 75 6d 6e 20 6e 75  ER BY, column nu
1b7d0 6d 62 65 72 20 69 6e 20 72 65 73 75 6c 74 20 73  mber in result s
1b7e0 65 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 75 31  et */.        u1
1b7f0 36 20 69 41 6c 69 61 73 3b 20 20 20 20 20 20 20  6 iAlias;       
1b800 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 74      /* Index int
1b810 6f 20 50 61 72 73 65 2e 61 41 6c 69 61 73 5b 5d  o Parse.aAlias[]
1b820 20 66 6f 72 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20   for zName */.  
1b830 20 20 20 20 7d 20 78 3b 0a 20 20 20 20 20 20 69      } x;.      i
1b840 6e 74 20 69 43 6f 6e 73 74 45 78 70 72 52 65 67  nt iConstExprReg
1b850 3b 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74  ;      /* Regist
1b860 65 72 20 69 6e 20 77 68 69 63 68 20 45 78 70 72  er in which Expr
1b870 20 76 61 6c 75 65 20 69 73 20 63 61 63 68 65 64   value is cached
1b880 20 2a 2f 0a 20 20 20 20 7d 20 75 3b 0a 20 20 7d   */.    } u;.  }
1b890 20 61 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20   a[1];          
1b8a0 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 73          /* One s
1b8b0 6c 6f 74 20 66 6f 72 20 65 61 63 68 20 65 78 70  lot for each exp
1b8c0 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 6c  ression in the l
1b8d0 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ist */.};../*.**
1b8e0 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
1b8f0 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 63  this structure c
1b900 61 6e 20 68 6f 6c 64 20 61 20 73 69 6d 70 6c 65  an hold a simple
1b910 20 6c 69 73 74 20 6f 66 20 69 64 65 6e 74 69 66   list of identif
1b920 69 65 72 73 2c 0a 2a 2a 20 73 75 63 68 20 61 73  iers,.** such as
1b930 20 74 68 65 20 6c 69 73 74 20 22 61 2c 62 2c 63   the list "a,b,c
1b940 22 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69  " in the followi
1b950 6e 67 20 73 74 61 74 65 6d 65 6e 74 73 3a 0a 2a  ng statements:.*
1b960 2a 0a 2a 2a 20 20 20 20 20 20 49 4e 53 45 52 54  *.**      INSERT
1b970 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 56   INTO t(a,b,c) V
1b980 41 4c 55 45 53 20 2e 2e 2e 3b 0a 2a 2a 20 20 20  ALUES ...;.**   
1b990 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20     CREATE INDEX 
1b9a0 69 64 78 20 4f 4e 20 74 28 61 2c 62 2c 63 29 3b  idx ON t(a,b,c);
1b9b0 0a 2a 2a 20 20 20 20 20 20 43 52 45 41 54 45 20  .**      CREATE 
1b9c0 54 52 49 47 47 45 52 20 74 72 69 67 20 42 45 46  TRIGGER trig BEF
1b9d0 4f 52 45 20 55 50 44 41 54 45 20 4f 4e 20 74 28  ORE UPDATE ON t(
1b9e0 61 2c 62 2c 63 29 20 2e 2e 2e 3b 0a 2a 2a 0a 2a  a,b,c) ...;.**.*
1b9f0 2a 20 54 68 65 20 49 64 4c 69 73 74 2e 61 2e 69  * The IdList.a.i
1ba00 64 78 20 66 69 65 6c 64 20 69 73 20 75 73 65 64  dx field is used
1ba10 20 77 68 65 6e 20 74 68 65 20 49 64 4c 69 73 74   when the IdList
1ba20 20 72 65 70 72 65 73 65 6e 74 73 20 74 68 65 20   represents the 
1ba30 6c 69 73 74 20 6f 66 0a 2a 2a 20 63 6f 6c 75 6d  list of.** colum
1ba40 6e 20 6e 61 6d 65 73 20 61 66 74 65 72 20 61 20  n names after a 
1ba50 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20 61 6e  table name in an
1ba60 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e   INSERT statemen
1ba70 74 2e 20 20 49 6e 20 74 68 65 20 73 74 61 74 65  t.  In the state
1ba80 6d 65 6e 74 0a 2a 2a 0a 2a 2a 20 20 20 20 20 49  ment.**.**     I
1ba90 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61 2c 62  NSERT INTO t(a,b
1baa0 2c 63 29 20 2e 2e 2e 0a 2a 2a 0a 2a 2a 20 49 66  ,c) ....**.** If
1bab0 20 22 61 22 20 69 73 20 74 68 65 20 6b 2d 74 68   "a" is the k-th
1bac0 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 61 62 6c 65   column of table
1bad0 20 22 74 22 2c 20 74 68 65 6e 20 49 64 4c 69 73   "t", then IdLis
1bae0 74 2e 61 5b 30 5d 2e 69 64 78 3d 3d 6b 2e 0a 2a  t.a[0].idx==k..*
1baf0 2f 0a 73 74 72 75 63 74 20 49 64 4c 69 73 74 20  /.struct IdList 
1bb00 7b 0a 20 20 73 74 72 75 63 74 20 49 64 4c 69 73  {.  struct IdLis
1bb10 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 63 68 61  t_item {.    cha
1bb20 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f  r *zName;      /
1bb30 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 69 64  * Name of the id
1bb40 65 6e 74 69 66 69 65 72 20 2a 2f 0a 20 20 20 20  entifier */.    
1bb50 69 6e 74 20 69 64 78 3b 20 20 20 20 20 20 20 20  int idx;        
1bb60 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73 6f    /* Index in so
1bb70 6d 65 20 54 61 62 6c 65 2e 61 43 6f 6c 5b 5d 20  me Table.aCol[] 
1bb80 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  of a column name
1bb90 64 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 7d 20 2a  d zName */.  } *
1bba0 61 3b 0a 20 20 69 6e 74 20 6e 49 64 3b 20 20 20  a;.  int nId;   
1bbb0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1bbc0 6f 66 20 69 64 65 6e 74 69 66 69 65 72 73 20 6f  of identifiers o
1bbd0 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b  n the list */.};
1bbe0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
1bbf0 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
1bc00 64 65 73 63 72 69 62 65 73 20 74 68 65 20 46 52  describes the FR
1bc10 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53  OM clause of a S
1bc20 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
1bc30 0a 2a 2a 20 45 61 63 68 20 74 61 62 6c 65 20 6f  .** Each table o
1bc40 72 20 73 75 62 71 75 65 72 79 20 69 6e 20 74 68  r subquery in th
1bc50 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 69 73  e FROM clause is
1bc60 20 61 20 73 65 70 61 72 61 74 65 20 65 6c 65 6d   a separate elem
1bc70 65 6e 74 20 6f 66 0a 2a 2a 20 74 68 65 20 53 72  ent of.** the Sr
1bc80 63 4c 69 73 74 2e 61 5b 5d 20 61 72 72 61 79 2e  cList.a[] array.
1bc90 0a 2a 2a 0a 2a 2a 20 57 69 74 68 20 74 68 65 20  .**.** With the 
1bca0 61 64 64 69 74 69 6f 6e 20 6f 66 20 6d 75 6c 74  addition of mult
1bcb0 69 70 6c 65 20 64 61 74 61 62 61 73 65 20 73 75  iple database su
1bcc0 70 70 6f 72 74 2c 20 74 68 65 20 66 6f 6c 6c 6f  pport, the follo
1bcd0 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 0a 2a  wing structure.*
1bce0 2a 20 63 61 6e 20 61 6c 73 6f 20 62 65 20 75 73  * can also be us
1bcf0 65 64 20 74 6f 20 64 65 73 63 72 69 62 65 20 61  ed to describe a
1bd00 20 70 61 72 74 69 63 75 6c 61 72 20 74 61 62 6c   particular tabl
1bd10 65 20 73 75 63 68 20 61 73 20 74 68 65 20 74 61  e such as the ta
1bd20 62 6c 65 20 74 68 61 74 0a 2a 2a 20 69 73 20 6d  ble that.** is m
1bd30 6f 64 69 66 69 65 64 20 62 79 20 61 6e 20 49 4e  odified by an IN
1bd40 53 45 52 54 2c 20 44 45 4c 45 54 45 2c 20 6f 72  SERT, DELETE, or
1bd50 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
1bd60 74 2e 20 20 49 6e 20 73 74 61 6e 64 61 72 64 20  t.  In standard 
1bd70 53 51 4c 2c 0a 2a 2a 20 73 75 63 68 20 61 20 74  SQL,.** such a t
1bd80 61 62 6c 65 20 6d 75 73 74 20 62 65 20 61 20 73  able must be a s
1bd90 69 6d 70 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 20  imple name: ID. 
1bda0 20 42 75 74 20 69 6e 20 53 51 4c 69 74 65 2c 20   But in SQLite, 
1bdb0 74 68 65 20 74 61 62 6c 65 20 63 61 6e 0a 2a 2a  the table can.**
1bdc0 20 6e 6f 77 20 62 65 20 69 64 65 6e 74 69 66 69   now be identifi
1bdd0 65 64 20 62 79 20 61 20 64 61 74 61 62 61 73 65  ed by a database
1bde0 20 6e 61 6d 65 2c 20 61 20 64 6f 74 2c 20 74 68   name, a dot, th
1bdf0 65 6e 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d  en the table nam
1be00 65 3a 20 49 44 2e 49 44 2e 0a 2a 2a 0a 2a 2a 20  e: ID.ID..**.** 
1be10 54 68 65 20 6a 6f 69 6e 74 79 70 65 20 73 74 61  The jointype sta
1be20 72 74 73 20 6f 75 74 20 73 68 6f 77 69 6e 67 20  rts out showing 
1be30 74 68 65 20 6a 6f 69 6e 20 74 79 70 65 20 62 65  the join type be
1be40 74 77 65 65 6e 20 74 68 65 20 63 75 72 72 65 6e  tween the curren
1be50 74 20 74 61 62 6c 65 0a 2a 2a 20 61 6e 64 20 74  t table.** and t
1be60 68 65 20 6e 65 78 74 20 74 61 62 6c 65 20 6f 6e  he next table on
1be70 20 74 68 65 20 6c 69 73 74 2e 20 20 54 68 65 20   the list.  The 
1be80 70 61 72 73 65 72 20 62 75 69 6c 64 73 20 74 68  parser builds th
1be90 65 20 6c 69 73 74 20 74 68 69 73 20 77 61 79 2e  e list this way.
1bea0 0a 2a 2a 20 42 75 74 20 73 71 6c 69 74 65 33 53  .** But sqlite3S
1beb0 72 63 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e 54  rcListShiftJoinT
1bec0 79 70 65 28 29 20 6c 61 74 65 72 20 73 68 69 66  ype() later shif
1bed0 74 73 20 74 68 65 20 6a 6f 69 6e 74 79 70 65 73  ts the jointypes
1bee0 20 73 6f 20 74 68 61 74 20 65 61 63 68 0a 2a 2a   so that each.**
1bef0 20 6a 6f 69 6e 74 79 70 65 20 65 78 70 72 65 73   jointype expres
1bf00 73 65 73 20 74 68 65 20 6a 6f 69 6e 20 62 65 74  ses the join bet
1bf10 77 65 65 6e 20 74 68 65 20 74 61 62 6c 65 20 61  ween the table a
1bf20 6e 64 20 74 68 65 20 70 72 65 76 69 6f 75 73 20  nd the previous 
1bf30 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20  table..**.** In 
1bf40 74 68 65 20 63 6f 6c 55 73 65 64 20 66 69 65 6c  the colUsed fiel
1bf50 64 2c 20 74 68 65 20 68 69 67 68 2d 6f 72 64 65  d, the high-orde
1bf60 72 20 62 69 74 20 28 62 69 74 20 36 33 29 20 69  r bit (bit 63) i
1bf70 73 20 73 65 74 20 69 66 20 74 68 65 20 74 61 62  s set if the tab
1bf80 6c 65 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 6d  le.** contains m
1bf90 6f 72 65 20 74 68 61 6e 20 36 33 20 63 6f 6c 75  ore than 63 colu
1bfa0 6d 6e 73 20 61 6e 64 20 74 68 65 20 36 34 2d 74  mns and the 64-t
1bfb0 68 20 6f 72 20 6c 61 74 65 72 20 63 6f 6c 75 6d  h or later colum
1bfc0 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 73 74  n is used..*/.st
1bfd0 72 75 63 74 20 53 72 63 4c 69 73 74 20 7b 0a 20  ruct SrcList {. 
1bfe0 20 69 6e 74 20 6e 53 72 63 3b 20 20 20 20 20 20   int nSrc;      
1bff0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74    /* Number of t
1c000 61 62 6c 65 73 20 6f 72 20 73 75 62 71 75 65 72  ables or subquer
1c010 69 65 73 20 69 6e 20 74 68 65 20 46 52 4f 4d 20  ies in the FROM 
1c020 63 6c 61 75 73 65 20 2a 2f 0a 20 20 75 33 32 20  clause */.  u32 
1c030 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 2f 2a 20  nAlloc;      /* 
1c040 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65  Number of entrie
1c050 73 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20 61  s allocated in a
1c060 5b 5d 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 73 74  [] below */.  st
1c070 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65  ruct SrcList_ite
1c080 6d 20 7b 0a 20 20 20 20 53 63 68 65 6d 61 20 2a  m {.    Schema *
1c090 70 53 63 68 65 6d 61 3b 20 20 2f 2a 20 53 63 68  pSchema;  /* Sch
1c0a0 65 6d 61 20 74 6f 20 77 68 69 63 68 20 74 68 69  ema to which thi
1c0b0 73 20 69 74 65 6d 20 69 73 20 66 69 78 65 64 20  s item is fixed 
1c0c0 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 44 61  */.    char *zDa
1c0d0 74 61 62 61 73 65 3b 20 20 2f 2a 20 4e 61 6d 65  tabase;  /* Name
1c0e0 20 6f 66 20 64 61 74 61 62 61 73 65 20 68 6f 6c   of database hol
1c0f0 64 69 6e 67 20 74 68 69 73 20 74 61 62 6c 65 20  ding this table 
1c100 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61  */.    char *zNa
1c110 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65  me;      /* Name
1c120 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 2a 2f   of the table */
1c130 0a 20 20 20 20 63 68 61 72 20 2a 7a 41 6c 69 61  .    char *zAlia
1c140 73 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 22 42  s;     /* The "B
1c150 22 20 70 61 72 74 20 6f 66 20 61 20 22 41 20 41  " part of a "A A
1c160 53 20 42 22 20 70 68 72 61 73 65 2e 20 20 7a 4e  S B" phrase.  zN
1c170 61 6d 65 20 69 73 20 74 68 65 20 22 41 22 20 2a  ame is the "A" *
1c180 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61  /.    Table *pTa
1c190 62 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20 53 51  b;      /* An SQ
1c1a0 4c 20 74 61 62 6c 65 20 63 6f 72 72 65 73 70 6f  L table correspo
1c1b0 6e 64 69 6e 67 20 74 6f 20 7a 4e 61 6d 65 20 2a  nding to zName *
1c1c0 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53  /.    Select *pS
1c1d0 65 6c 65 63 74 3b 20 20 2f 2a 20 41 20 53 45 4c  elect;  /* A SEL
1c1e0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 75 73  ECT statement us
1c1f0 65 64 20 69 6e 20 70 6c 61 63 65 20 6f 66 20 61  ed in place of a
1c200 20 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20   table name */. 
1c210 20 20 20 69 6e 74 20 61 64 64 72 46 69 6c 6c 53     int addrFillS
1c220 75 62 3b 20 20 2f 2a 20 41 64 64 72 65 73 73 20  ub;  /* Address 
1c230 6f 66 20 73 75 62 72 6f 75 74 69 6e 65 20 74 6f  of subroutine to
1c240 20 6d 61 6e 69 66 65 73 74 20 61 20 73 75 62 71   manifest a subq
1c250 75 65 72 79 20 2a 2f 0a 20 20 20 20 69 6e 74 20  uery */.    int 
1c260 72 65 67 52 65 74 75 72 6e 3b 20 20 20 20 2f 2a  regReturn;    /*
1c270 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e   Register holdin
1c280 67 20 72 65 74 75 72 6e 20 61 64 64 72 65 73 73  g return address
1c290 20 6f 66 20 61 64 64 72 46 69 6c 6c 53 75 62 20   of addrFillSub 
1c2a0 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65  */.    int regRe
1c2b0 73 75 6c 74 3b 20 20 20 20 2f 2a 20 52 65 67 69  sult;    /* Regi
1c2c0 73 74 65 72 73 20 68 6f 6c 64 69 6e 67 20 72 65  sters holding re
1c2d0 73 75 6c 74 73 20 6f 66 20 61 20 63 6f 2d 72 6f  sults of a co-ro
1c2e0 75 74 69 6e 65 20 2a 2f 0a 20 20 20 20 73 74 72  utine */.    str
1c2f0 75 63 74 20 7b 0a 20 20 20 20 20 20 75 38 20 6a  uct {.      u8 j
1c300 6f 69 6e 74 79 70 65 3b 20 20 20 20 20 20 2f 2a  ointype;      /*
1c310 20 54 79 70 65 20 6f 66 20 6a 6f 69 6e 20 62 65   Type of join be
1c320 74 77 65 65 6e 20 74 68 69 73 20 74 61 62 6c 65  tween this table
1c330 20 61 6e 64 20 74 68 65 20 70 72 65 76 69 6f 75   and the previou
1c340 73 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67  s */.      unsig
1c350 6e 65 64 20 6e 6f 74 49 6e 64 65 78 65 64 20 3a  ned notIndexed :
1c360 31 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  1;    /* True if
1c370 20 74 68 65 72 65 20 69 73 20 61 20 4e 4f 54 20   there is a NOT 
1c380 49 4e 44 45 58 45 44 20 63 6c 61 75 73 65 20 2a  INDEXED clause *
1c390 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64  /.      unsigned
1c3a0 20 69 73 49 6e 64 65 78 65 64 42 79 20 3a 31 3b   isIndexedBy :1;
1c3b0 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68     /* True if th
1c3c0 65 72 65 20 69 73 20 61 6e 20 49 4e 44 45 58 45  ere is an INDEXE
1c3d0 44 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20  D BY clause */. 
1c3e0 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73       unsigned is
1c3f0 54 61 62 46 75 6e 63 20 3a 31 3b 20 20 20 20 20  TabFunc :1;     
1c400 2f 2a 20 54 72 75 65 20 69 66 20 74 61 62 6c 65  /* True if table
1c410 2d 76 61 6c 75 65 64 2d 66 75 6e 63 74 69 6f 6e  -valued-function
1c420 20 73 79 6e 74 61 78 20 2a 2f 0a 20 20 20 20 20   syntax */.     
1c430 20 75 6e 73 69 67 6e 65 64 20 69 73 43 6f 72 72   unsigned isCorr
1c440 65 6c 61 74 65 64 20 3a 31 3b 20 20 2f 2a 20 54  elated :1;  /* T
1c450 72 75 65 20 69 66 20 73 75 62 2d 71 75 65 72 79  rue if sub-query
1c460 20 69 73 20 63 6f 72 72 65 6c 61 74 65 64 20 2a   is correlated *
1c470 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64  /.      unsigned
1c480 20 76 69 61 43 6f 72 6f 75 74 69 6e 65 20 3a 31   viaCoroutine :1
1c490 3b 20 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 65  ;  /* Implemente
1c4a0 64 20 61 73 20 61 20 63 6f 2d 72 6f 75 74 69 6e  d as a co-routin
1c4b0 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67  e */.      unsig
1c4c0 6e 65 64 20 69 73 52 65 63 75 72 73 69 76 65 20  ned isRecursive 
1c4d0 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20 66 6f  :1;   /* True fo
1c4e0 72 20 72 65 63 75 72 73 69 76 65 20 72 65 66 65  r recursive refe
1c4f0 72 65 6e 63 65 20 69 6e 20 57 49 54 48 20 2a 2f  rence in WITH */
1c500 0a 20 20 20 20 7d 20 66 67 3b 0a 20 20 20 20 69  .    } fg;.    i
1c510 6e 74 20 69 43 75 72 73 6f 72 3b 20 20 20 20 20  nt iCursor;     
1c520 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75 72   /* The VDBE cur
1c530 73 6f 72 20 6e 75 6d 62 65 72 20 75 73 65 64 20  sor number used 
1c540 74 6f 20 61 63 63 65 73 73 20 74 68 69 73 20 74  to access this t
1c550 61 62 6c 65 20 2a 2f 0a 20 20 20 20 45 78 70 72  able */.    Expr
1c560 20 2a 70 4f 6e 3b 20 20 20 20 20 20 20 20 2f 2a   *pOn;        /*
1c570 20 54 68 65 20 4f 4e 20 63 6c 61 75 73 65 20 6f   The ON clause o
1c580 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20  f a join */.    
1c590 49 64 4c 69 73 74 20 2a 70 55 73 69 6e 67 3b 20  IdList *pUsing; 
1c5a0 20 20 2f 2a 20 54 68 65 20 55 53 49 4e 47 20 63    /* The USING c
1c5b0 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20  lause of a join 
1c5c0 2a 2f 0a 20 20 20 20 42 69 74 6d 61 73 6b 20 63  */.    Bitmask c
1c5d0 6f 6c 55 73 65 64 3b 20 20 2f 2a 20 42 69 74 20  olUsed;  /* Bit 
1c5e0 4e 20 28 31 3c 3c 4e 29 20 73 65 74 20 69 66 20  N (1<<N) set if 
1c5f0 63 6f 6c 75 6d 6e 20 4e 20 6f 66 20 70 54 61 62  column N of pTab
1c600 20 69 73 20 75 73 65 64 20 2a 2f 0a 20 20 20 20   is used */.    
1c610 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 20 20 63 68  union {.      ch
1c620 61 72 20 2a 7a 49 6e 64 65 78 65 64 42 79 3b 20  ar *zIndexedBy; 
1c630 20 20 20 2f 2a 20 49 64 65 6e 74 69 66 69 65 72     /* Identifier
1c640 20 66 72 6f 6d 20 22 49 4e 44 45 58 45 44 20 42   from "INDEXED B
1c650 59 20 3c 7a 49 6e 64 65 78 3e 22 20 63 6c 61 75  Y <zIndex>" clau
1c660 73 65 20 2a 2f 0a 20 20 20 20 20 20 45 78 70 72  se */.      Expr
1c670 4c 69 73 74 20 2a 70 46 75 6e 63 41 72 67 3b 20  List *pFuncArg; 
1c680 20 2f 2a 20 41 72 67 75 6d 65 6e 74 73 20 74 6f   /* Arguments to
1c690 20 74 61 62 6c 65 2d 76 61 6c 75 65 64 2d 66 75   table-valued-fu
1c6a0 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 7d 20  nction */.    } 
1c6b0 75 31 3b 0a 20 20 20 20 49 6e 64 65 78 20 2a 70  u1;.    Index *p
1c6c0 49 42 49 6e 64 65 78 3b 20 20 2f 2a 20 49 6e 64  IBIndex;  /* Ind
1c6d0 65 78 20 73 74 72 75 63 74 75 72 65 20 63 6f 72  ex structure cor
1c6e0 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 75 31  responding to u1
1c6f0 2e 7a 49 6e 64 65 78 65 64 42 79 20 2a 2f 0a 20  .zIndexedBy */. 
1c700 20 7d 20 61 5b 31 5d 3b 20 20 20 20 20 20 20 20   } a[1];        
1c710 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72       /* One entr
1c720 79 20 66 6f 72 20 65 61 63 68 20 69 64 65 6e 74  y for each ident
1c730 69 66 69 65 72 20 6f 6e 20 74 68 65 20 6c 69 73  ifier on the lis
1c740 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50  t */.};../*.** P
1c750 65 72 6d 69 74 74 65 64 20 76 61 6c 75 65 73 20  ermitted values 
1c760 6f 66 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61  of the SrcList.a
1c770 2e 6a 6f 69 6e 74 79 70 65 20 66 69 65 6c 64 0a  .jointype field.
1c780 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 49 4e  */.#define JT_IN
1c790 4e 45 52 20 20 20 20 20 30 78 30 30 30 31 20 20  NER     0x0001  
1c7a0 20 20 2f 2a 20 41 6e 79 20 6b 69 6e 64 20 6f 66    /* Any kind of
1c7b0 20 69 6e 6e 65 72 20 6f 72 20 63 72 6f 73 73 20   inner or cross 
1c7c0 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  join */.#define 
1c7d0 4a 54 5f 43 52 4f 53 53 20 20 20 20 20 30 78 30  JT_CROSS     0x0
1c7e0 30 30 32 20 20 20 20 2f 2a 20 45 78 70 6c 69 63  002    /* Explic
1c7f0 69 74 20 75 73 65 20 6f 66 20 74 68 65 20 43 52  it use of the CR
1c800 4f 53 53 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23  OSS keyword */.#
1c810 64 65 66 69 6e 65 20 4a 54 5f 4e 41 54 55 52 41  define JT_NATURA
1c820 4c 20 20 20 30 78 30 30 30 34 20 20 20 20 2f 2a  L   0x0004    /*
1c830 20 54 72 75 65 20 66 6f 72 20 61 20 22 6e 61 74   True for a "nat
1c840 75 72 61 6c 22 20 6a 6f 69 6e 20 2a 2f 0a 23 64  ural" join */.#d
1c850 65 66 69 6e 65 20 4a 54 5f 4c 45 46 54 20 20 20  efine JT_LEFT   
1c860 20 20 20 30 78 30 30 30 38 20 20 20 20 2f 2a 20     0x0008    /* 
1c870 4c 65 66 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20  Left outer join 
1c880 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 52 49  */.#define JT_RI
1c890 47 48 54 20 20 20 20 20 30 78 30 30 31 30 20 20  GHT     0x0010  
1c8a0 20 20 2f 2a 20 52 69 67 68 74 20 6f 75 74 65 72    /* Right outer
1c8b0 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   join */.#define
1c8c0 20 4a 54 5f 4f 55 54 45 52 20 20 20 20 20 30 78   JT_OUTER     0x
1c8d0 30 30 32 30 20 20 20 20 2f 2a 20 54 68 65 20 22  0020    /* The "
1c8e0 4f 55 54 45 52 22 20 6b 65 79 77 6f 72 64 20 69  OUTER" keyword i
1c8f0 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a 23 64 65  s present */.#de
1c900 66 69 6e 65 20 4a 54 5f 45 52 52 4f 52 20 20 20  fine JT_ERROR   
1c910 20 20 30 78 30 30 34 30 20 20 20 20 2f 2a 20 75    0x0040    /* u
1c920 6e 6b 6e 6f 77 6e 20 6f 72 20 75 6e 73 75 70 70  nknown or unsupp
1c930 6f 72 74 65 64 20 6a 6f 69 6e 20 74 79 70 65 20  orted join type 
1c940 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73  */.../*.** Flags
1c950 20 61 70 70 72 6f 70 72 69 61 74 65 20 66 6f 72   appropriate for
1c960 20 74 68 65 20 77 63 74 72 6c 46 6c 61 67 73 20   the wctrlFlags 
1c970 70 61 72 61 6d 65 74 65 72 20 6f 66 20 73 71 6c  parameter of sql
1c980 69 74 65 33 57 68 65 72 65 42 65 67 69 6e 28 29  ite3WhereBegin()
1c990 0a 2a 2a 20 61 6e 64 20 74 68 65 20 57 68 65 72  .** and the Wher
1c9a0 65 49 6e 66 6f 2e 77 63 74 72 6c 46 6c 61 67 73  eInfo.wctrlFlags
1c9b0 20 6d 65 6d 62 65 72 2e 0a 2a 2a 0a 2a 2a 20 56   member..**.** V
1c9c0 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73  alue constraints
1c9d0 20 28 65 6e 66 6f 72 63 65 64 20 76 69 61 20 61   (enforced via a
1c9e0 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20  ssert()):.**    
1c9f0 20 57 48 45 52 45 5f 55 53 45 5f 4c 49 4d 49 54   WHERE_USE_LIMIT
1ca00 20 20 3d 3d 20 53 46 5f 46 69 78 65 64 4c 69 6d    == SF_FixedLim
1ca10 69 74 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  it.*/.#define WH
1ca20 45 52 45 5f 4f 52 44 45 52 42 59 5f 4e 4f 52 4d  ERE_ORDERBY_NORM
1ca30 41 4c 20 20 20 30 78 30 30 30 30 20 2f 2a 20 4e  AL   0x0000 /* N
1ca40 6f 2d 6f 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20  o-op */.#define 
1ca50 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d 49  WHERE_ORDERBY_MI
1ca60 4e 20 20 20 20 20 20 30 78 30 30 30 31 20 2f 2a  N      0x0001 /*
1ca70 20 4f 52 44 45 52 20 42 59 20 70 72 6f 63 65 73   ORDER BY proces
1ca80 73 69 6e 67 20 66 6f 72 20 6d 69 6e 28 29 20 66  sing for min() f
1ca90 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  unc */.#define W
1caa0 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d 41 58  HERE_ORDERBY_MAX
1cab0 20 20 20 20 20 20 30 78 30 30 30 32 20 2f 2a 20        0x0002 /* 
1cac0 4f 52 44 45 52 20 42 59 20 70 72 6f 63 65 73 73  ORDER BY process
1cad0 69 6e 67 20 66 6f 72 20 6d 61 78 28 29 20 66 75  ing for max() fu
1cae0 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  nc */.#define WH
1caf0 45 52 45 5f 4f 4e 45 50 41 53 53 5f 44 45 53 49  ERE_ONEPASS_DESI
1cb00 52 45 44 20 20 30 78 30 30 30 34 20 2f 2a 20 57  RED  0x0004 /* W
1cb10 61 6e 74 20 74 6f 20 64 6f 20 6f 6e 65 2d 70 61  ant to do one-pa
1cb20 73 73 20 55 50 44 41 54 45 2f 44 45 4c 45 54 45  ss UPDATE/DELETE
1cb30 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
1cb40 45 5f 4f 4e 45 50 41 53 53 5f 4d 55 4c 54 49 52  E_ONEPASS_MULTIR
1cb50 4f 57 20 30 78 30 30 30 38 20 2f 2a 20 4f 4e 45  OW 0x0008 /* ONE
1cb60 50 41 53 53 20 69 73 20 6f 6b 20 77 69 74 68 20  PASS is ok with 
1cb70 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f  multiple rows */
1cb80 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44  .#define WHERE_D
1cb90 55 50 4c 49 43 41 54 45 53 5f 4f 4b 20 20 20 20  UPLICATES_OK    
1cba0 30 78 30 30 31 30 20 2f 2a 20 4f 6b 20 74 6f 20  0x0010 /* Ok to 
1cbb0 72 65 74 75 72 6e 20 61 20 72 6f 77 20 6d 6f 72  return a row mor
1cbc0 65 20 74 68 61 6e 20 6f 6e 63 65 20 2a 2f 0a 23  e than once */.#
1cbd0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 5f  define WHERE_OR_
1cbe0 53 55 42 43 4c 41 55 53 45 20 20 20 20 20 30 78  SUBCLAUSE     0x
1cbf0 30 30 32 30 20 2f 2a 20 50 72 6f 63 65 73 73 69  0020 /* Processi
1cc00 6e 67 20 61 20 73 75 62 2d 57 48 45 52 45 20 61  ng a sub-WHERE a
1cc10 73 20 70 61 72 74 20 6f 66 0a 20 20 20 20 20 20  s part of.      
1cc20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc40 2a 2a 20 74 68 65 20 4f 52 20 6f 70 74 69 6d 69  ** the OR optimi
1cc50 7a 61 74 69 6f 6e 20 20 2a 2f 0a 23 64 65 66 69  zation  */.#defi
1cc60 6e 65 20 57 48 45 52 45 5f 47 52 4f 55 50 42 59  ne WHERE_GROUPBY
1cc70 20 20 20 20 20 20 20 20 20 20 30 78 30 30 34 30            0x0040
1cc80 20 2f 2a 20 70 4f 72 64 65 72 42 79 20 69 73 20   /* pOrderBy is 
1cc90 72 65 61 6c 6c 79 20 61 20 47 52 4f 55 50 20 42  really a GROUP B
1cca0 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  Y */.#define WHE
1ccb0 52 45 5f 44 49 53 54 49 4e 43 54 42 59 20 20 20  RE_DISTINCTBY   
1ccc0 20 20 20 20 30 78 30 30 38 30 20 2f 2a 20 70 4f      0x0080 /* pO
1ccd0 72 64 65 72 62 79 20 69 73 20 72 65 61 6c 6c 79  rderby is really
1cce0 20 61 20 44 49 53 54 49 4e 43 54 20 63 6c 61 75   a DISTINCT clau
1ccf0 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  se */.#define WH
1cd00 45 52 45 5f 57 41 4e 54 5f 44 49 53 54 49 4e 43  ERE_WANT_DISTINC
1cd10 54 20 20 20 20 30 78 30 31 30 30 20 2f 2a 20 41  T    0x0100 /* A
1cd20 6c 6c 20 6f 75 74 70 75 74 20 6e 65 65 64 73 20  ll output needs 
1cd30 74 6f 20 62 65 20 64 69 73 74 69 6e 63 74 20 2a  to be distinct *
1cd40 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1cd50 53 4f 52 54 42 59 47 52 4f 55 50 20 20 20 20 20  SORTBYGROUP     
1cd60 20 30 78 30 32 30 30 20 2f 2a 20 53 75 70 70 6f   0x0200 /* Suppo
1cd70 72 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49  rt sqlite3WhereI
1cd80 73 53 6f 72 74 65 64 28 29 20 2a 2f 0a 23 64 65  sSorted() */.#de
1cd90 66 69 6e 65 20 57 48 45 52 45 5f 53 45 45 4b 5f  fine WHERE_SEEK_
1cda0 54 41 42 4c 45 20 20 20 20 20 20 20 30 78 30 34  TABLE       0x04
1cdb0 30 30 20 2f 2a 20 44 6f 20 6e 6f 74 20 64 65 66  00 /* Do not def
1cdc0 65 72 20 73 65 65 6b 73 20 6f 6e 20 6d 61 69 6e  er seeks on main
1cdd0 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e   table */.#defin
1cde0 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f  e WHERE_ORDERBY_
1cdf0 4c 49 4d 49 54 20 20 20 20 30 78 30 38 30 30 20  LIMIT    0x0800 
1ce00 2f 2a 20 4f 52 44 45 52 42 59 2b 4c 49 4d 49 54  /* ORDERBY+LIMIT
1ce10 20 6f 6e 20 74 68 65 20 69 6e 6e 65 72 20 6c 6f   on the inner lo
1ce20 6f 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  op */.#define WH
1ce30 45 52 45 5f 53 45 45 4b 5f 55 4e 49 51 5f 54 41  ERE_SEEK_UNIQ_TA
1ce40 42 4c 45 20 20 30 78 31 30 30 30 20 2f 2a 20 44  BLE  0x1000 /* D
1ce50 6f 20 6e 6f 74 20 64 65 66 65 72 20 73 65 65 6b  o not defer seek
1ce60 73 20 69 66 20 75 6e 69 71 75 65 20 2a 2f 0a 20  s if unique */. 
1ce70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce80 20 20 20 20 20 20 20 2f 2a 20 20 20 20 20 30 78         /*     0x
1ce90 32 30 30 30 20 20 20 20 6e 6f 74 20 63 75 72 72  2000    not curr
1cea0 65 6e 74 6c 79 20 75 73 65 64 20 2a 2f 0a 23 64  ently used */.#d
1ceb0 65 66 69 6e 65 20 57 48 45 52 45 5f 55 53 45 5f  efine WHERE_USE_
1cec0 4c 49 4d 49 54 20 20 20 20 20 20 20 20 30 78 34  LIMIT        0x4
1ced0 30 30 30 20 2f 2a 20 55 73 65 20 74 68 65 20 4c  000 /* Use the L
1cee0 49 4d 49 54 20 69 6e 20 63 6f 73 74 20 65 73 74  IMIT in cost est
1cef0 69 6d 61 74 65 73 20 2a 2f 0a 20 20 20 20 20 20  imates */.      
1cf00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cf10 20 20 2f 2a 20 20 20 20 20 30 78 38 30 30 30 20    /*     0x8000 
1cf20 20 20 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79     not currently
1cf30 20 75 73 65 64 20 2a 2f 0a 0a 2f 2a 20 41 6c 6c   used */../* All
1cf40 6f 77 65 64 20 72 65 74 75 72 6e 20 76 61 6c 75  owed return valu
1cf50 65 73 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 57  es from sqlite3W
1cf60 68 65 72 65 49 73 44 69 73 74 69 6e 63 74 28 29  hereIsDistinct()
1cf70 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52  .*/.#define WHER
1cf80 45 5f 44 49 53 54 49 4e 43 54 5f 4e 4f 4f 50 20  E_DISTINCT_NOOP 
1cf90 20 20 20 20 20 30 20 20 2f 2a 20 44 49 53 54 49       0  /* DISTI
1cfa0 4e 43 54 20 6b 65 79 77 6f 72 64 20 6e 6f 74 20  NCT keyword not 
1cfb0 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  used */.#define 
1cfc0 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 55  WHERE_DISTINCT_U
1cfd0 4e 49 51 55 45 20 20 20 20 31 20 20 2f 2a 20 4e  NIQUE    1  /* N
1cfe0 6f 20 64 75 70 6c 69 63 61 74 65 73 20 2a 2f 0a  o duplicates */.
1cff0 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49  #define WHERE_DI
1d000 53 54 49 4e 43 54 5f 4f 52 44 45 52 45 44 20 20  STINCT_ORDERED  
1d010 20 32 20 20 2f 2a 20 41 6c 6c 20 64 75 70 6c 69   2  /* All dupli
1d020 63 61 74 65 73 20 61 72 65 20 61 64 6a 61 63 65  cates are adjace
1d030 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  nt */.#define WH
1d040 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e 4f  ERE_DISTINCT_UNO
1d050 52 44 45 52 45 44 20 33 20 20 2f 2a 20 44 75 70  RDERED 3  /* Dup
1d060 6c 69 63 61 74 65 73 20 61 72 65 20 73 63 61 74  licates are scat
1d070 74 65 72 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  tered */../*.** 
1d080 41 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 64 65  A NameContext de
1d090 66 69 6e 65 73 20 61 20 63 6f 6e 74 65 78 74 20  fines a context 
1d0a0 69 6e 20 77 68 69 63 68 20 74 6f 20 72 65 73 6f  in which to reso
1d0b0 6c 76 65 20 74 61 62 6c 65 20 61 6e 64 20 63 6f  lve table and co
1d0c0 6c 75 6d 6e 0a 2a 2a 20 6e 61 6d 65 73 2e 20 20  lumn.** names.  
1d0d0 54 68 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e 73  The context cons
1d0e0 69 73 74 73 20 6f 66 20 61 20 6c 69 73 74 20 6f  ists of a list o
1d0f0 66 20 74 61 62 6c 65 73 20 28 74 68 65 20 70 53  f tables (the pS
1d100 72 63 4c 69 73 74 29 20 66 69 65 6c 64 20 61 6e  rcList) field an
1d110 64 0a 2a 2a 20 61 20 6c 69 73 74 20 6f 66 20 6e  d.** a list of n
1d120 61 6d 65 64 20 65 78 70 72 65 73 73 69 6f 6e 20  amed expression 
1d130 28 70 45 4c 69 73 74 29 2e 20 20 54 68 65 20 6e  (pEList).  The n
1d140 61 6d 65 64 20 65 78 70 72 65 73 73 69 6f 6e 20  amed expression 
1d150 6c 69 73 74 20 6d 61 79 0a 2a 2a 20 62 65 20 4e  list may.** be N
1d160 55 4c 4c 2e 20 20 54 68 65 20 70 53 72 63 20 63  ULL.  The pSrc c
1d170 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68  orresponds to th
1d180 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66  e FROM clause of
1d190 20 61 20 53 45 4c 45 43 54 20 6f 72 0a 2a 2a 20   a SELECT or.** 
1d1a0 74 6f 20 74 68 65 20 74 61 62 6c 65 20 62 65 69  to the table bei
1d1b0 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 20 62  ng operated on b
1d1c0 79 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45  y INSERT, UPDATE
1d1d0 2c 20 6f 72 20 44 45 4c 45 54 45 2e 20 20 54 68  , or DELETE.  Th
1d1e0 65 0a 2a 2a 20 70 45 4c 69 73 74 20 63 6f 72 72  e.** pEList corr
1d1f0 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 72  esponds to the r
1d200 65 73 75 6c 74 20 73 65 74 20 6f 66 20 61 20 53  esult set of a S
1d210 45 4c 45 43 54 20 61 6e 64 20 69 73 20 4e 55 4c  ELECT and is NUL
1d220 4c 20 66 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 73  L for.** other s
1d230 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a  tatements..**.**
1d240 20 4e 61 6d 65 43 6f 6e 74 65 78 74 73 20 63 61   NameContexts ca
1d250 6e 20 62 65 20 6e 65 73 74 65 64 2e 20 20 57 68  n be nested.  Wh
1d260 65 6e 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d  en resolving nam
1d270 65 73 2c 20 74 68 65 20 69 6e 6e 65 72 2d 6d 6f  es, the inner-mo
1d280 73 74 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73  st.** context is
1d290 20 73 65 61 72 63 68 65 64 20 66 69 72 73 74 2e   searched first.
1d2a0 20 20 49 66 20 6e 6f 20 6d 61 74 63 68 20 69 73    If no match is
1d2b0 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e 65 78 74   found, the next
1d2c0 20 6f 75 74 65 72 0a 2a 2a 20 63 6f 6e 74 65 78   outer.** contex
1d2d0 74 20 69 73 20 63 68 65 63 6b 65 64 2e 20 20 49  t is checked.  I
1d2e0 66 20 74 68 65 72 65 20 69 73 20 73 74 69 6c 6c  f there is still
1d2f0 20 6e 6f 20 6d 61 74 63 68 2c 20 74 68 65 20 6e   no match, the n
1d300 65 78 74 20 63 6f 6e 74 65 78 74 0a 2a 2a 20 69  ext context.** i
1d310 73 20 63 68 65 63 6b 65 64 2e 20 20 54 68 69 73  s checked.  This
1d320 20 70 72 6f 63 65 73 73 20 63 6f 6e 74 69 6e 75   process continu
1d330 65 73 20 75 6e 74 69 6c 20 65 69 74 68 65 72 20  es until either 
1d340 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64  a match is found
1d350 0a 2a 2a 20 6f 72 20 61 6c 6c 20 63 6f 6e 74 65  .** or all conte
1d360 78 74 73 20 61 72 65 20 63 68 65 63 6b 2e 20 20  xts are check.  
1d370 57 68 65 6e 20 61 20 6d 61 74 63 68 20 69 73 20  When a match is 
1d380 66 6f 75 6e 64 2c 20 74 68 65 20 6e 52 65 66 20  found, the nRef 
1d390 6d 65 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 68 65  member of.** the
1d3a0 20 63 6f 6e 74 65 78 74 20 63 6f 6e 74 61 69 6e   context contain
1d3b0 69 6e 67 20 74 68 65 20 6d 61 74 63 68 20 69 73  ing the match is
1d3c0 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2a   incremented..**
1d3d0 0a 2a 2a 20 45 61 63 68 20 73 75 62 71 75 65 72  .** Each subquer
1d3e0 79 20 67 65 74 73 20 61 20 6e 65 77 20 4e 61 6d  y gets a new Nam
1d3f0 65 43 6f 6e 74 65 78 74 2e 20 20 54 68 65 20 70  eContext.  The p
1d400 4e 65 78 74 20 66 69 65 6c 64 20 70 6f 69 6e 74  Next field point
1d410 73 20 74 6f 20 74 68 65 0a 2a 2a 20 4e 61 6d 65  s to the.** Name
1d420 43 6f 6e 74 65 78 74 20 69 6e 20 74 68 65 20 70  Context in the p
1d430 61 72 65 6e 74 20 71 75 65 72 79 2e 20 20 54 68  arent query.  Th
1d440 75 73 20 74 68 65 20 70 72 6f 63 65 73 73 20 6f  us the process o
1d450 66 20 73 63 61 6e 6e 69 6e 67 20 74 68 65 0a 2a  f scanning the.*
1d460 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 6c 69  * NameContext li
1d470 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  st corresponds t
1d480 6f 20 73 65 61 72 63 68 69 6e 67 20 74 68 72 6f  o searching thro
1d490 75 67 68 20 73 75 63 63 65 73 73 69 76 65 6c 79  ugh successively
1d4a0 20 6f 75 74 65 72 0a 2a 2a 20 73 75 62 71 75 65   outer.** subque
1d4b0 72 69 65 73 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72  ries looking for
1d4c0 20 61 20 6d 61 74 63 68 2e 0a 2a 2f 0a 73 74 72   a match..*/.str
1d4d0 75 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20  uct NameContext 
1d4e0 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73  {.  Parse *pPars
1d4f0 65 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  e;       /* The 
1d500 70 61 72 73 65 72 20 2a 2f 0a 20 20 53 72 63 4c  parser */.  SrcL
1d510 69 73 74 20 2a 70 53 72 63 4c 69 73 74 3b 20 20  ist *pSrcList;  
1d520 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20   /* One or more 
1d530 74 61 62 6c 65 73 20 75 73 65 64 20 74 6f 20 72  tables used to r
1d540 65 73 6f 6c 76 65 20 6e 61 6d 65 73 20 2a 2f 0a  esolve names */.
1d550 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 45 78    union {.    Ex
1d560 70 72 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b 20  prList *pEList; 
1d570 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 6c     /* Optional l
1d580 69 73 74 20 6f 66 20 72 65 73 75 6c 74 2d 73 65  ist of result-se
1d590 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 20  t columns */.   
1d5a0 20 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e   AggInfo *pAggIn
1d5b0 66 6f 3b 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61  fo;   /* Informa
1d5c0 74 69 6f 6e 20 61 62 6f 75 74 20 61 67 67 72 65  tion about aggre
1d5d0 67 61 74 65 73 20 61 74 20 74 68 69 73 20 6c 65  gates at this le
1d5e0 76 65 6c 20 2a 2f 0a 20 20 20 20 55 70 73 65 72  vel */.    Upser
1d5f0 74 20 2a 70 55 70 73 65 72 74 3b 20 20 20 20 20  t *pUpsert;     
1d600 2f 2a 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63  /* ON CONFLICT c
1d610 6c 61 75 73 65 20 69 6e 66 6f 72 6d 61 74 69 6f  lause informatio
1d620 6e 20 66 72 6f 6d 20 61 6e 20 75 70 73 65 72 74  n from an upsert
1d630 20 2a 2f 0a 20 20 7d 20 75 4e 43 3b 0a 20 20 4e   */.  } uNC;.  N
1d640 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e 65 78  ameContext *pNex
1d650 74 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 75 74 65  t;  /* Next oute
1d660 72 20 6e 61 6d 65 20 63 6f 6e 74 65 78 74 2e 20  r name context. 
1d670 20 4e 55 4c 4c 20 66 6f 72 20 6f 75 74 65 72 6d   NULL for outerm
1d680 6f 73 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65  ost */.  int nRe
1d690 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  f;            /*
1d6a0 20 4e 75 6d 62 65 72 20 6f 66 20 6e 61 6d 65 73   Number of names
1d6b0 20 72 65 73 6f 6c 76 65 64 20 62 79 20 74 68 69   resolved by thi
1d6c0 73 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 69  s context */.  i
1d6d0 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20 20  nt nErr;        
1d6e0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1d6f0 20 65 72 72 6f 72 73 20 65 6e 63 6f 75 6e 74 65   errors encounte
1d700 72 65 64 20 77 68 69 6c 65 20 72 65 73 6f 6c 76  red while resolv
1d710 69 6e 67 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 69  ing names */.  i
1d720 6e 74 20 6e 63 46 6c 61 67 73 3b 20 20 20 20 20  nt ncFlags;     
1d730 20 20 20 20 2f 2a 20 5a 65 72 6f 20 6f 72 20 6d      /* Zero or m
1d740 6f 72 65 20 4e 43 5f 2a 20 66 6c 61 67 73 20 64  ore NC_* flags d
1d750 65 66 69 6e 65 64 20 62 65 6c 6f 77 20 2a 2f 0a  efined below */.
1d760 20 20 53 65 6c 65 63 74 20 2a 70 57 69 6e 53 65    Select *pWinSe
1d770 6c 65 63 74 3b 20 20 2f 2a 20 53 45 4c 45 43 54  lect;  /* SELECT
1d780 20 73 74 61 74 65 6d 65 6e 74 20 66 6f 72 20 61   statement for a
1d790 6e 79 20 77 69 6e 64 6f 77 20 66 75 6e 63 74 69  ny window functi
1d7a0 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ons */.};../*.**
1d7b0 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
1d7c0 66 6f 72 20 74 68 65 20 4e 61 6d 65 43 6f 6e 74  for the NameCont
1d7d0 65 78 74 2c 20 6e 63 46 6c 61 67 73 20 66 69 65  ext, ncFlags fie
1d7e0 6c 64 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20  ld..**.** Value 
1d7f0 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 61 6c 6c  constraints (all
1d800 20 63 68 65 63 6b 65 64 20 76 69 61 20 61 73 73   checked via ass
1d810 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20 4e 43  ert()):.**    NC
1d820 5f 48 61 73 41 67 67 20 20 20 20 3d 3d 20 53 46  _HasAgg    == SF
1d830 5f 48 61 73 41 67 67 20 20 20 20 3d 3d 20 45 50  _HasAgg    == EP
1d840 5f 41 67 67 0a 2a 2a 20 20 20 20 4e 43 5f 4d 69  _Agg.**    NC_Mi
1d850 6e 4d 61 78 41 67 67 20 3d 3d 20 53 46 5f 4d 69  nMaxAgg == SF_Mi
1d860 6e 4d 61 78 41 67 67 20 3d 3d 20 53 51 4c 49 54  nMaxAgg == SQLIT
1d870 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 0a 2a 2a  E_FUNC_MINMAX.**
1d880 20 20 20 20 4e 43 5f 48 61 73 57 69 6e 20 20 20      NC_HasWin   
1d890 20 3d 3d 20 45 50 5f 57 69 6e 0a 2a 2a 0a 2a 2f   == EP_Win.**.*/
1d8a0 0a 23 64 65 66 69 6e 65 20 4e 43 5f 41 6c 6c 6f  .#define NC_Allo
1d8b0 77 41 67 67 20 20 30 78 30 30 30 30 31 20 20 2f  wAgg  0x00001  /
1d8c0 2a 20 41 67 67 72 65 67 61 74 65 20 66 75 6e 63  * Aggregate func
1d8d0 74 69 6f 6e 73 20 61 72 65 20 61 6c 6c 6f 77 65  tions are allowe
1d8e0 64 20 68 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e  d here */.#defin
1d8f0 65 20 4e 43 5f 50 61 72 74 49 64 78 20 20 20 30  e NC_PartIdx   0
1d900 78 30 30 30 30 32 20 20 2f 2a 20 54 72 75 65 20  x00002  /* True 
1d910 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 61 20 70  if resolving a p
1d920 61 72 74 69 61 6c 20 69 6e 64 65 78 20 57 48 45  artial index WHE
1d930 52 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  RE */.#define NC
1d940 5f 49 73 43 68 65 63 6b 20 20 20 30 78 30 30 30  _IsCheck   0x000
1d950 30 34 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72  04  /* True if r
1d960 65 73 6f 6c 76 69 6e 67 20 61 20 43 48 45 43 4b  esolving a CHECK
1d970 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23   constraint */.#
1d980 64 65 66 69 6e 65 20 4e 43 5f 49 6e 41 67 67 46  define NC_InAggF
1d990 75 6e 63 20 30 78 30 30 30 30 38 20 20 2f 2a 20  unc 0x00008  /* 
1d9a0 54 72 75 65 20 69 66 20 61 6e 61 6c 79 7a 69 6e  True if analyzin
1d9b0 67 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 61  g arguments to a
1d9c0 6e 20 61 67 67 20 66 75 6e 63 20 2a 2f 0a 23 64  n agg func */.#d
1d9d0 65 66 69 6e 65 20 4e 43 5f 48 61 73 41 67 67 20  efine NC_HasAgg 
1d9e0 20 20 20 30 78 30 30 30 31 30 20 20 2f 2a 20 4f     0x00010  /* O
1d9f0 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67 72 65  ne or more aggre
1da00 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 73  gate functions s
1da10 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  een */.#define N
1da20 43 5f 49 64 78 45 78 70 72 20 20 20 30 78 30 30  C_IdxExpr   0x00
1da30 30 32 30 20 20 2f 2a 20 54 72 75 65 20 69 66 20  020  /* True if 
1da40 72 65 73 6f 6c 76 69 6e 67 20 63 6f 6c 75 6d 6e  resolving column
1da50 73 20 6f 66 20 43 52 45 41 54 45 20 49 4e 44 45  s of CREATE INDE
1da60 58 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  X */.#define NC_
1da70 56 61 72 53 65 6c 65 63 74 20 30 78 30 30 30 34  VarSelect 0x0004
1da80 30 20 20 2f 2a 20 41 20 63 6f 72 72 65 6c 61 74  0  /* A correlat
1da90 65 64 20 73 75 62 71 75 65 72 79 20 68 61 73 20  ed subquery has 
1daa0 62 65 65 6e 20 73 65 65 6e 20 2a 2f 0a 23 64 65  been seen */.#de
1dab0 66 69 6e 65 20 4e 43 5f 55 45 4c 69 73 74 20 20  fine NC_UEList  
1dac0 20 20 30 78 30 30 30 38 30 20 20 2f 2a 20 54 72    0x00080  /* Tr
1dad0 75 65 20 69 66 20 75 4e 43 2e 70 45 4c 69 73 74  ue if uNC.pEList
1dae0 20 69 73 20 75 73 65 64 20 2a 2f 0a 23 64 65 66   is used */.#def
1daf0 69 6e 65 20 4e 43 5f 55 41 67 67 49 6e 66 6f 20  ine NC_UAggInfo 
1db00 20 30 78 30 30 31 30 30 20 20 2f 2a 20 54 72 75   0x00100  /* Tru
1db10 65 20 69 66 20 75 4e 43 2e 70 41 67 67 49 6e 66  e if uNC.pAggInf
1db20 6f 20 69 73 20 75 73 65 64 20 2a 2f 0a 23 64 65  o is used */.#de
1db30 66 69 6e 65 20 4e 43 5f 55 55 70 73 65 72 74 20  fine NC_UUpsert 
1db40 20 20 30 78 30 30 32 30 30 20 20 2f 2a 20 54 72    0x00200  /* Tr
1db50 75 65 20 69 66 20 75 4e 43 2e 70 55 70 73 65 72  ue if uNC.pUpser
1db60 74 20 69 73 20 75 73 65 64 20 2a 2f 0a 23 64 65  t is used */.#de
1db70 66 69 6e 65 20 4e 43 5f 4d 69 6e 4d 61 78 41 67  fine NC_MinMaxAg
1db80 67 20 30 78 30 31 30 30 30 20 20 2f 2a 20 6d 69  g 0x01000  /* mi
1db90 6e 2f 6d 61 78 20 61 67 67 72 65 67 61 74 65 73  n/max aggregates
1dba0 20 73 65 65 6e 2e 20 20 53 65 65 20 6e 6f 74 65   seen.  See note
1dbb0 20 61 62 6f 76 65 20 2a 2f 0a 23 64 65 66 69 6e   above */.#defin
1dbc0 65 20 4e 43 5f 43 6f 6d 70 6c 65 78 20 20 20 30  e NC_Complex   0
1dbd0 78 30 32 30 30 30 20 20 2f 2a 20 54 72 75 65 20  x02000  /* True 
1dbe0 69 66 20 61 20 66 75 6e 63 74 69 6f 6e 20 6f 72  if a function or
1dbf0 20 73 75 62 71 75 65 72 79 20 73 65 65 6e 20 2a   subquery seen *
1dc00 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 41 6c 6c  /.#define NC_All
1dc10 6f 77 57 69 6e 20 20 30 78 30 34 30 30 30 20 20  owWin  0x04000  
1dc20 2f 2a 20 57 69 6e 64 6f 77 20 66 75 6e 63 74 69  /* Window functi
1dc30 6f 6e 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 20  ons are allowed 
1dc40 68 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  here */.#define 
1dc50 4e 43 5f 48 61 73 57 69 6e 20 20 20 20 30 78 30  NC_HasWin    0x0
1dc60 38 30 30 30 20 20 2f 2a 20 4f 6e 65 20 6f 72 20  8000  /* One or 
1dc70 6d 6f 72 65 20 77 69 6e 64 6f 77 20 66 75 6e 63  more window func
1dc80 74 69 6f 6e 73 20 73 65 65 6e 20 2a 2f 0a 23 64  tions seen */.#d
1dc90 65 66 69 6e 65 20 4e 43 5f 49 73 44 44 4c 20 20  efine NC_IsDDL  
1dca0 20 20 20 30 78 31 30 30 30 30 20 20 2f 2a 20 52     0x10000  /* R
1dcb0 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20 69  esolving names i
1dcc0 6e 20 61 20 43 52 45 41 54 45 20 73 74 61 74 65  n a CREATE state
1dcd0 6d 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ment */.#define 
1dce0 4e 43 5f 47 65 6e 43 6f 6c 20 20 20 20 30 78 32  NC_GenCol    0x2
1dcf0 30 30 30 30 20 20 2f 2a 20 54 72 75 65 20 66 6f  0000  /* True fo
1dd00 72 20 61 20 47 45 4e 45 52 41 54 45 44 20 41 4c  r a GENERATED AL
1dd10 57 41 59 53 20 41 53 20 63 6c 61 75 73 65 20 2a  WAYS AS clause *
1dd20 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  /../*.** An inst
1dd30 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
1dd40 6f 77 69 6e 67 20 6f 62 6a 65 63 74 20 64 65 73  owing object des
1dd50 63 72 69 62 65 73 20 61 20 73 69 6e 67 6c 65 20  cribes a single 
1dd60 4f 4e 20 43 4f 4e 46 4c 49 43 54 0a 2a 2a 20 63  ON CONFLICT.** c
1dd70 6c 61 75 73 65 20 69 6e 20 61 6e 20 75 70 73 65  lause in an upse
1dd80 72 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 55  rt..**.** The pU
1dd90 70 73 65 72 74 54 61 72 67 65 74 20 66 69 65 6c  psertTarget fiel
1dda0 64 20 69 73 20 6f 6e 6c 79 20 73 65 74 20 69 66  d is only set if
1ddb0 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54   the ON CONFLICT
1ddc0 20 63 6c 61 75 73 65 20 69 6e 63 6c 75 64 65 73   clause includes
1ddd0 0a 2a 2a 20 63 6f 6e 66 6c 69 63 74 2d 74 61 72  .** conflict-tar
1dde0 67 65 74 20 63 6c 61 75 73 65 2e 20 20 28 49 6e  get clause.  (In
1ddf0 20 22 4f 4e 20 43 4f 4e 46 4c 49 43 54 28 61 2c   "ON CONFLICT(a,
1de00 62 29 22 20 74 68 65 20 22 28 61 2c 62 29 22 20  b)" the "(a,b)" 
1de10 69 73 20 74 68 65 0a 2a 2a 20 63 6f 6e 66 6c 69  is the.** confli
1de20 63 74 2d 74 61 72 67 65 74 20 63 6c 61 75 73 65  ct-target clause
1de30 2e 29 20 20 54 68 65 20 70 55 70 73 65 72 74 54  .)  The pUpsertT
1de40 61 72 67 65 74 57 68 65 72 65 20 69 73 20 74 68  argetWhere is th
1de50 65 20 6f 70 74 69 6f 6e 61 6c 0a 2a 2a 20 57 48  e optional.** WH
1de60 45 52 45 20 63 6c 61 75 73 65 20 75 73 65 64 20  ERE clause used 
1de70 74 6f 20 69 64 65 6e 74 69 66 79 20 70 61 72 74  to identify part
1de80 69 61 6c 20 75 6e 69 71 75 65 20 69 6e 64 65 78  ial unique index
1de90 65 73 2e 0a 2a 2a 0a 2a 2a 20 70 55 70 73 65 72  es..**.** pUpser
1dea0 74 53 65 74 20 69 73 20 74 68 65 20 6c 69 73 74  tSet is the list
1deb0 20 6f 66 20 63 6f 6c 75 6d 6e 3d 65 78 70 72 20   of column=expr 
1dec0 74 65 72 6d 73 20 6f 66 20 74 68 65 20 55 50 44  terms of the UPD
1ded0 41 54 45 20 73 74 61 74 65 6d 65 6e 74 2e 20 0a  ATE statement. .
1dee0 2a 2a 20 54 68 65 20 70 55 70 73 65 72 74 53 65  ** The pUpsertSe
1def0 74 20 66 69 65 6c 64 20 69 73 20 4e 55 4c 4c 20  t field is NULL 
1df00 66 6f 72 20 61 20 4f 4e 20 43 4f 4e 46 4c 49 43  for a ON CONFLIC
1df10 54 20 44 4f 20 4e 4f 54 48 49 4e 47 2e 20 20 54  T DO NOTHING.  T
1df20 68 65 0a 2a 2a 20 70 55 70 73 65 72 74 57 68 65  he.** pUpsertWhe
1df30 72 65 20 69 73 20 74 68 65 20 57 48 45 52 45 20  re is the WHERE 
1df40 63 6c 61 75 73 65 20 66 6f 72 20 74 68 65 20 55  clause for the U
1df50 50 44 41 54 45 20 61 6e 64 20 69 73 20 4e 55 4c  PDATE and is NUL
1df60 4c 20 69 66 20 74 68 65 0a 2a 2a 20 57 48 45 52  L if the.** WHER
1df70 45 20 63 6c 61 75 73 65 20 69 73 20 6f 6d 69 74  E clause is omit
1df80 74 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 55  ted..*/.struct U
1df90 70 73 65 72 74 20 7b 0a 20 20 45 78 70 72 4c 69  psert {.  ExprLi
1dfa0 73 74 20 2a 70 55 70 73 65 72 74 54 61 72 67 65  st *pUpsertTarge
1dfb0 74 3b 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20  t;  /* Optional 
1dfc0 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 20 63  description of c
1dfd0 6f 6e 66 6c 69 63 74 69 6e 67 20 69 6e 64 65 78  onflicting index
1dfe0 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 55 70 73   */.  Expr *pUps
1dff0 65 72 74 54 61 72 67 65 74 57 68 65 72 65 3b 20  ertTargetWhere; 
1e000 2f 2a 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  /* WHERE clause 
1e010 66 6f 72 20 70 61 72 74 69 61 6c 20 69 6e 64 65  for partial inde
1e020 78 20 74 61 72 67 65 74 73 20 2a 2f 0a 20 20 45  x targets */.  E
1e030 78 70 72 4c 69 73 74 20 2a 70 55 70 73 65 72 74  xprList *pUpsert
1e040 53 65 74 3b 20 20 20 20 20 2f 2a 20 54 68 65 20  Set;     /* The 
1e050 53 45 54 20 63 6c 61 75 73 65 20 66 72 6f 6d 20  SET clause from 
1e060 61 6e 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 55  an ON CONFLICT U
1e070 50 44 41 54 45 20 2a 2f 0a 20 20 45 78 70 72 20  PDATE */.  Expr 
1e080 2a 70 55 70 73 65 72 74 57 68 65 72 65 3b 20 20  *pUpsertWhere;  
1e090 20 20 20 20 20 2f 2a 20 57 48 45 52 45 20 63 6c       /* WHERE cl
1e0a0 61 75 73 65 20 66 6f 72 20 74 68 65 20 4f 4e 20  ause for the ON 
1e0b0 43 4f 4e 46 4c 49 43 54 20 55 50 44 41 54 45 20  CONFLICT UPDATE 
1e0c0 2a 2f 0a 20 20 2f 2a 20 54 68 65 20 66 69 65 6c  */.  /* The fiel
1e0d0 64 73 20 61 62 6f 76 65 20 63 6f 6d 70 72 69 73  ds above compris
1e0e0 65 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65  e the parse tree
1e0f0 20 66 6f 72 20 74 68 65 20 75 70 73 65 72 74 20   for the upsert 
1e100 63 6c 61 75 73 65 2e 0a 20 20 2a 2a 20 54 68 65  clause..  ** The
1e110 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 61 72   fields below ar
1e120 65 20 75 73 65 64 20 74 6f 20 74 72 61 6e 73 66  e used to transf
1e130 65 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66  er information f
1e140 72 6f 6d 20 74 68 65 20 49 4e 53 45 52 54 0a 20  rom the INSERT. 
1e150 20 2a 2a 20 70 72 6f 63 65 73 73 69 6e 67 20 64   ** processing d
1e160 6f 77 6e 20 69 6e 74 6f 20 74 68 65 20 55 50 44  own into the UPD
1e170 41 54 45 20 70 72 6f 63 65 73 73 69 6e 67 20 77  ATE processing w
1e180 68 69 6c 65 20 67 65 6e 65 72 61 74 69 6e 67 20  hile generating 
1e190 63 6f 64 65 2e 0a 20 20 2a 2a 20 55 70 73 65 72  code..  ** Upser
1e1a0 74 20 6f 77 6e 73 20 74 68 65 20 6d 65 6d 6f 72  t owns the memor
1e1b0 79 20 61 6c 6c 6f 63 61 74 65 64 20 61 62 6f 76  y allocated abov
1e1c0 65 2c 20 62 75 74 20 6e 6f 74 20 74 68 65 20 6d  e, but not the m
1e1d0 65 6d 6f 72 79 20 62 65 6c 6f 77 2e 20 2a 2f 0a  emory below. */.
1e1e0 20 20 49 6e 64 65 78 20 2a 70 55 70 73 65 72 74    Index *pUpsert
1e1f0 49 64 78 3b 20 20 20 20 20 20 20 20 2f 2a 20 43  Idx;        /* C
1e200 6f 6e 73 74 72 61 69 6e 74 20 74 68 61 74 20 70  onstraint that p
1e210 55 70 73 65 72 74 54 61 72 67 65 74 20 69 64 65  UpsertTarget ide
1e220 6e 74 69 66 69 65 73 20 2a 2f 0a 20 20 53 72 63  ntifies */.  Src
1e230 4c 69 73 74 20 2a 70 55 70 73 65 72 74 53 72 63  List *pUpsertSrc
1e240 3b 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20  ;      /* Table 
1e250 74 6f 20 62 65 20 75 70 64 61 74 65 64 20 2a 2f  to be updated */
1e260 0a 20 20 69 6e 74 20 72 65 67 44 61 74 61 3b 20  .  int regData; 
1e270 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1e280 46 69 72 73 74 20 72 65 67 69 73 74 65 72 20 68  First register h
1e290 6f 6c 64 69 6e 67 20 61 72 72 61 79 20 6f 66 20  olding array of 
1e2a0 56 41 4c 55 45 53 20 2a 2f 0a 20 20 69 6e 74 20  VALUES */.  int 
1e2b0 69 44 61 74 61 43 75 72 3b 20 20 20 20 20 20 20  iDataCur;       
1e2c0 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f        /* Index o
1e2d0 66 20 74 68 65 20 64 61 74 61 20 63 75 72 73 6f  f the data curso
1e2e0 72 20 2a 2f 0a 20 20 69 6e 74 20 69 49 64 78 43  r */.  int iIdxC
1e2f0 75 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ur;             
1e300 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74 68 65   /* Index of the
1e310 20 66 69 72 73 74 20 69 6e 64 65 78 20 63 75 72   first index cur
1e320 73 6f 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  sor */.};../*.**
1e330 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
1e340 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
1e350 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73  ructure contains
1e360 20 61 6c 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e   all information
1e370 0a 2a 2a 20 6e 65 65 64 65 64 20 74 6f 20 67 65  .** needed to ge
1e380 6e 65 72 61 74 65 20 63 6f 64 65 20 66 6f 72 20  nerate code for 
1e390 61 20 73 69 6e 67 6c 65 20 53 45 4c 45 43 54 20  a single SELECT 
1e3a0 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a  statement..**.**
1e3b0 20 53 65 65 20 74 68 65 20 68 65 61 64 65 72 20   See the header 
1e3c0 63 6f 6d 6d 65 6e 74 20 6f 6e 20 74 68 65 20 63  comment on the c
1e3d0 6f 6d 70 75 74 65 4c 69 6d 69 74 52 65 67 69 73  omputeLimitRegis
1e3e0 74 65 72 73 28 29 20 72 6f 75 74 69 6e 65 20 66  ters() routine f
1e3f0 6f 72 20 61 0a 2a 2a 20 64 65 74 61 69 6c 65 64  or a.** detailed
1e400 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 20   description of 
1e410 74 68 65 20 6d 65 61 6e 69 6e 67 20 6f 66 20 74  the meaning of t
1e420 68 65 20 69 4c 69 6d 69 74 20 61 6e 64 20 69 4f  he iLimit and iO
1e430 66 66 73 65 74 20 66 69 65 6c 64 73 2e 0a 2a 2a  ffset fields..**
1e440 0a 2a 2a 20 61 64 64 72 4f 70 65 6e 45 70 68 6d  .** addrOpenEphm
1e450 5b 5d 20 65 6e 74 72 69 65 73 20 63 6f 6e 74 61  [] entries conta
1e460 69 6e 20 74 68 65 20 61 64 64 72 65 73 73 20 6f  in the address o
1e470 66 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72  f OP_OpenEphemer
1e480 61 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 20 54  al opcodes..** T
1e490 68 65 73 65 20 61 64 64 72 65 73 73 65 73 20 6d  hese addresses m
1e4a0 75 73 74 20 62 65 20 73 74 6f 72 65 64 20 73 6f  ust be stored so
1e4b0 20 74 68 61 74 20 77 65 20 63 61 6e 20 67 6f 20   that we can go 
1e4c0 62 61 63 6b 20 61 6e 64 20 66 69 6c 6c 20 69 6e  back and fill in
1e4d0 0a 2a 2a 20 74 68 65 20 50 34 5f 4b 45 59 49 4e  .** the P4_KEYIN
1e4e0 46 4f 20 61 6e 64 20 50 32 20 70 61 72 61 6d 65  FO and P2 parame
1e4f0 74 65 72 73 20 6c 61 74 65 72 2e 20 20 4e 65 69  ters later.  Nei
1e500 74 68 65 72 20 74 68 65 20 4b 65 79 49 6e 66 6f  ther the KeyInfo
1e510 20 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e 75 6d 62   nor.** the numb
1e520 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
1e530 20 50 32 20 63 61 6e 20 62 65 20 63 6f 6d 70 75   P2 can be compu
1e540 74 65 64 20 61 74 20 74 68 65 20 73 61 6d 65 20  ted at the same 
1e550 74 69 6d 65 0a 2a 2a 20 61 73 20 74 68 65 20 4f  time.** as the O
1e560 50 5f 4f 70 65 6e 45 70 68 6d 20 69 6e 73 74 72  P_OpenEphm instr
1e570 75 63 74 69 6f 6e 20 69 73 20 63 6f 64 65 64 20  uction is coded 
1e580 62 65 63 61 75 73 65 20 6e 6f 74 0a 2a 2a 20 65  because not.** e
1e590 6e 6f 75 67 68 20 69 6e 66 6f 72 6d 61 74 69 6f  nough informatio
1e5a0 6e 20 61 62 6f 75 74 20 74 68 65 20 63 6f 6d 70  n about the comp
1e5b0 6f 75 6e 64 20 71 75 65 72 79 20 69 73 20 6b 6e  ound query is kn
1e5c0 6f 77 6e 20 61 74 20 74 68 61 74 20 70 6f 69 6e  own at that poin
1e5d0 74 2e 0a 2a 2a 20 54 68 65 20 4b 65 79 49 6e 66  t..** The KeyInf
1e5e0 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 54 72  o for addrOpenTr
1e5f0 61 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d 20 63 6f  an[0] and [1] co
1e600 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67  ntains collating
1e610 20 73 65 71 75 65 6e 63 65 73 0a 2a 2a 20 66 6f   sequences.** fo
1e620 72 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74  r the result set
1e630 2e 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 66  .  The KeyInfo f
1e640 6f 72 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b  or addrOpenEphm[
1e650 32 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c  2] contains coll
1e660 61 74 69 6e 67 0a 2a 2a 20 73 65 71 75 65 6e 63  ating.** sequenc
1e670 65 73 20 66 6f 72 20 74 68 65 20 4f 52 44 45 52  es for the ORDER
1e680 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73   BY clause..*/.s
1e690 74 72 75 63 74 20 53 65 6c 65 63 74 20 7b 0a 20  truct Select {. 
1e6a0 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c 69 73   ExprList *pELis
1e6b0 74 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 66  t;      /* The f
1e6c0 69 65 6c 64 73 20 6f 66 20 74 68 65 20 72 65 73  ields of the res
1e6d0 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20  ult */.  u8 op; 
1e6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e6f0 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b 5f 55 4e  /* One of: TK_UN
1e700 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b 5f 49 4e  ION TK_ALL TK_IN
1e710 54 45 52 53 45 43 54 20 54 4b 5f 45 58 43 45 50  TERSECT TK_EXCEP
1e720 54 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 6e 53  T */.  LogEst nS
1e730 65 6c 65 63 74 52 6f 77 3b 20 20 20 20 20 2f 2a  electRow;     /*
1e740 20 45 73 74 69 6d 61 74 65 64 20 6e 75 6d 62 65   Estimated numbe
1e750 72 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73  r of result rows
1e760 20 2a 2f 0a 20 20 75 33 32 20 73 65 6c 46 6c 61   */.  u32 selFla
1e770 67 73 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  gs;          /* 
1e780 56 61 72 69 6f 75 73 20 53 46 5f 2a 20 76 61 6c  Various SF_* val
1e790 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20 69 4c 69  ues */.  int iLi
1e7a0 6d 69 74 2c 20 69 4f 66 66 73 65 74 3b 20 20 20  mit, iOffset;   
1e7b0 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69 73 74  /* Memory regist
1e7c0 65 72 73 20 68 6f 6c 64 69 6e 67 20 4c 49 4d 49  ers holding LIMI
1e7d0 54 20 26 20 4f 46 46 53 45 54 20 63 6f 75 6e 74  T & OFFSET count
1e7e0 65 72 73 20 2a 2f 0a 20 20 75 33 32 20 73 65 6c  ers */.  u32 sel
1e7f0 49 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Id;             
1e800 2f 2a 20 55 6e 69 71 75 65 20 69 64 65 6e 74 69  /* Unique identi
1e810 66 69 65 72 20 6e 75 6d 62 65 72 20 66 6f 72 20  fier number for 
1e820 74 68 69 73 20 53 45 4c 45 43 54 20 2a 2f 0a 20  this SELECT */. 
1e830 20 69 6e 74 20 61 64 64 72 4f 70 65 6e 45 70 68   int addrOpenEph
1e840 6d 5b 32 5d 3b 20 20 20 2f 2a 20 4f 50 5f 4f 70  m[2];   /* OP_Op
1e850 65 6e 45 70 68 65 6d 20 6f 70 63 6f 64 65 73 20  enEphem opcodes 
1e860 72 65 6c 61 74 65 64 20 74 6f 20 74 68 69 73 20  related to this 
1e870 73 65 6c 65 63 74 20 2a 2f 0a 20 20 53 72 63 4c  select */.  SrcL
1e880 69 73 74 20 2a 70 53 72 63 3b 20 20 20 20 20 20  ist *pSrc;      
1e890 20 20 20 2f 2a 20 54 68 65 20 46 52 4f 4d 20 63     /* The FROM c
1e8a0 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 20  lause */.  Expr 
1e8b0 2a 70 57 68 65 72 65 3b 20 20 20 20 20 20 20 20  *pWhere;        
1e8c0 20 20 2f 2a 20 54 68 65 20 57 48 45 52 45 20 63    /* The WHERE c
1e8d0 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c  lause */.  ExprL
1e8e0 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20  ist *pGroupBy;  
1e8f0 20 20 2f 2a 20 54 68 65 20 47 52 4f 55 50 20 42    /* The GROUP B
1e900 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78  Y clause */.  Ex
1e910 70 72 20 2a 70 48 61 76 69 6e 67 3b 20 20 20 20  pr *pHaving;    
1e920 20 20 20 20 20 2f 2a 20 54 68 65 20 48 41 56 49       /* The HAVI
1e930 4e 47 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45  NG clause */.  E
1e940 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72 42  xprList *pOrderB
1e950 79 3b 20 20 20 20 2f 2a 20 54 68 65 20 4f 52 44  y;    /* The ORD
1e960 45 52 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a  ER BY clause */.
1e970 20 20 53 65 6c 65 63 74 20 2a 70 50 72 69 6f 72    Select *pPrior
1e980 3b 20 20 20 20 20 20 20 20 2f 2a 20 50 72 69 6f  ;        /* Prio
1e990 72 20 73 65 6c 65 63 74 20 69 6e 20 61 20 63 6f  r select in a co
1e9a0 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74 20 73 74  mpound select st
1e9b0 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 53 65 6c  atement */.  Sel
1e9c0 65 63 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  ect *pNext;     
1e9d0 20 20 20 20 2f 2a 20 4e 65 78 74 20 73 65 6c 65      /* Next sele
1e9e0 63 74 20 74 6f 20 74 68 65 20 6c 65 66 74 20 69  ct to the left i
1e9f0 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 2a 2f 0a  n a compound */.
1ea00 20 20 45 78 70 72 20 2a 70 4c 69 6d 69 74 3b 20    Expr *pLimit; 
1ea10 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 49 4d 49           /* LIMI
1ea20 54 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55  T expression. NU
1ea30 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65  LL means not use
1ea40 64 2e 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57  d. */.  With *pW
1ea50 69 74 68 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ith;           /
1ea60 2a 20 57 49 54 48 20 63 6c 61 75 73 65 20 61 74  * WITH clause at
1ea70 74 61 63 68 65 64 20 74 6f 20 74 68 69 73 20 73  tached to this s
1ea80 65 6c 65 63 74 2e 20 4f 72 20 4e 55 4c 4c 2e 20  elect. Or NULL. 
1ea90 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
1eaa0 45 5f 4f 4d 49 54 5f 57 49 4e 44 4f 57 46 55 4e  E_OMIT_WINDOWFUN
1eab0 43 0a 20 20 57 69 6e 64 6f 77 20 2a 70 57 69 6e  C.  Window *pWin
1eac0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69  ;          /* Li
1ead0 73 74 20 6f 66 20 77 69 6e 64 6f 77 20 66 75 6e  st of window fun
1eae0 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 57 69 6e 64  ctions */.  Wind
1eaf0 6f 77 20 2a 70 57 69 6e 44 65 66 6e 3b 20 20 20  ow *pWinDefn;   
1eb00 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 6e 61     /* List of na
1eb10 6d 65 64 20 77 69 6e 64 6f 77 20 64 65 66 69 6e  med window defin
1eb20 69 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e 64 69 66  itions */.#endif
1eb30 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  .};../*.** Allow
1eb40 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 53 65  ed values for Se
1eb50 6c 65 63 74 2e 73 65 6c 46 6c 61 67 73 2e 20 20  lect.selFlags.  
1eb60 54 68 65 20 22 53 46 22 20 70 72 65 66 69 78 20  The "SF" prefix 
1eb70 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 53  stands for.** "S
1eb80 65 6c 65 63 74 20 46 6c 61 67 22 2e 0a 2a 2a 0a  elect Flag"..**.
1eb90 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61  ** Value constra
1eba0 69 6e 74 73 20 28 61 6c 6c 20 63 68 65 63 6b 65  ints (all checke
1ebb0 64 20 76 69 61 20 61 73 73 65 72 74 28 29 29 0a  d via assert()).
1ebc0 2a 2a 20 20 20 20 20 53 46 5f 48 61 73 41 67 67  **     SF_HasAgg
1ebd0 20 20 20 20 20 3d 3d 20 4e 43 5f 48 61 73 41 67       == NC_HasAg
1ebe0 67 0a 2a 2a 20 20 20 20 20 53 46 5f 4d 69 6e 4d  g.**     SF_MinM
1ebf0 61 78 41 67 67 20 20 3d 3d 20 4e 43 5f 4d 69 6e  axAgg  == NC_Min
1ec00 4d 61 78 41 67 67 20 20 20 20 20 3d 3d 20 53 51  MaxAgg     == SQ
1ec10 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58  LITE_FUNC_MINMAX
1ec20 0a 2a 2a 20 20 20 20 20 53 46 5f 46 69 78 65 64  .**     SF_Fixed
1ec30 4c 69 6d 69 74 20 3d 3d 20 57 48 45 52 45 5f 55  Limit == WHERE_U
1ec40 53 45 5f 4c 49 4d 49 54 0a 2a 2f 0a 23 64 65 66  SE_LIMIT.*/.#def
1ec50 69 6e 65 20 53 46 5f 44 69 73 74 69 6e 63 74 20  ine SF_Distinct 
1ec60 20 20 20 20 20 20 30 78 30 30 30 30 31 20 20 2f        0x00001  /
1ec70 2a 20 4f 75 74 70 75 74 20 73 68 6f 75 6c 64 20  * Output should 
1ec80 62 65 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a 23  be DISTINCT */.#
1ec90 64 65 66 69 6e 65 20 53 46 5f 41 6c 6c 20 20 20  define SF_All   
1eca0 20 20 20 20 20 20 20 20 20 30 78 30 30 30 30 32           0x00002
1ecb0 20 20 2f 2a 20 49 6e 63 6c 75 64 65 73 20 74 68    /* Includes th
1ecc0 65 20 41 4c 4c 20 6b 65 79 77 6f 72 64 20 2a 2f  e ALL keyword */
1ecd0 0a 23 64 65 66 69 6e 65 20 53 46 5f 52 65 73 6f  .#define SF_Reso
1ece0 6c 76 65 64 20 20 20 20 20 20 20 30 78 30 30 30  lved       0x000
1ecf0 30 34 20 20 2f 2a 20 49 64 65 6e 74 69 66 69 65  04  /* Identifie
1ed00 72 73 20 68 61 76 65 20 62 65 65 6e 20 72 65 73  rs have been res
1ed10 6f 6c 76 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  olved */.#define
1ed20 20 53 46 5f 41 67 67 72 65 67 61 74 65 20 20 20   SF_Aggregate   
1ed30 20 20 20 30 78 30 30 30 30 38 20 20 2f 2a 20 43     0x00008  /* C
1ed40 6f 6e 74 61 69 6e 73 20 61 67 67 20 66 75 6e 63  ontains agg func
1ed50 74 69 6f 6e 73 20 6f 72 20 61 20 47 52 4f 55 50  tions or a GROUP
1ed60 20 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53   BY */.#define S
1ed70 46 5f 48 61 73 41 67 67 20 20 20 20 20 20 20 20  F_HasAgg        
1ed80 20 30 78 30 30 30 31 30 20 20 2f 2a 20 43 6f 6e   0x00010  /* Con
1ed90 74 61 69 6e 73 20 61 67 67 72 65 67 61 74 65 20  tains aggregate 
1eda0 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65  functions */.#de
1edb0 66 69 6e 65 20 53 46 5f 55 73 65 73 45 70 68 65  fine SF_UsesEphe
1edc0 6d 65 72 61 6c 20 20 30 78 30 30 30 32 30 20 20  meral  0x00020  
1edd0 2f 2a 20 55 73 65 73 20 74 68 65 20 4f 70 65 6e  /* Uses the Open
1ede0 45 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65  Ephemeral opcode
1edf0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 45   */.#define SF_E
1ee00 78 70 61 6e 64 65 64 20 20 20 20 20 20 20 30 78  xpanded       0x
1ee10 30 30 30 34 30 20 20 2f 2a 20 73 71 6c 69 74 65  00040  /* sqlite
1ee20 33 53 65 6c 65 63 74 45 78 70 61 6e 64 28 29 20  3SelectExpand() 
1ee30 63 61 6c 6c 65 64 20 6f 6e 20 74 68 69 73 20 2a  called on this *
1ee40 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 48 61 73  /.#define SF_Has
1ee50 54 79 70 65 49 6e 66 6f 20 20 20 20 30 78 30 30  TypeInfo    0x00
1ee60 30 38 30 20 20 2f 2a 20 46 52 4f 4d 20 73 75 62  080  /* FROM sub
1ee70 71 75 65 72 69 65 73 20 68 61 76 65 20 54 61 62  queries have Tab
1ee80 6c 65 20 6d 65 74 61 64 61 74 61 20 2a 2f 0a 23  le metadata */.#
1ee90 64 65 66 69 6e 65 20 53 46 5f 43 6f 6d 70 6f 75  define SF_Compou
1eea0 6e 64 20 20 20 20 20 20 20 30 78 30 30 31 30 30  nd       0x00100
1eeb0 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 61 20 63    /* Part of a c
1eec0 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79 20 2a 2f  ompound query */
1eed0 0a 23 64 65 66 69 6e 65 20 53 46 5f 56 61 6c 75  .#define SF_Valu
1eee0 65 73 20 20 20 20 20 20 20 20 20 30 78 30 30 32  es         0x002
1eef0 30 30 20 20 2f 2a 20 53 79 6e 74 68 65 73 69 7a  00  /* Synthesiz
1ef00 65 64 20 66 72 6f 6d 20 56 41 4c 55 45 53 20 63  ed from VALUES c
1ef10 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65  lause */.#define
1ef20 20 53 46 5f 4d 75 6c 74 69 56 61 6c 75 65 20 20   SF_MultiValue  
1ef30 20 20 20 30 78 30 30 34 30 30 20 20 2f 2a 20 53     0x00400  /* S
1ef40 69 6e 67 6c 65 20 56 41 4c 55 45 53 20 74 65 72  ingle VALUES ter
1ef50 6d 20 77 69 74 68 20 6d 75 6c 74 69 70 6c 65 20  m with multiple 
1ef60 72 6f 77 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rows */.#define 
1ef70 53 46 5f 4e 65 73 74 65 64 46 72 6f 6d 20 20 20  SF_NestedFrom   
1ef80 20 20 30 78 30 30 38 30 30 20 20 2f 2a 20 50 61    0x00800  /* Pa
1ef90 72 74 20 6f 66 20 61 20 70 61 72 65 6e 74 68 65  rt of a parenthe
1efa0 73 69 7a 65 64 20 46 52 4f 4d 20 63 6c 61 75 73  sized FROM claus
1efb0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  e */.#define SF_
1efc0 4d 69 6e 4d 61 78 41 67 67 20 20 20 20 20 20 30  MinMaxAgg      0
1efd0 78 30 31 30 30 30 20 20 2f 2a 20 41 67 67 72 65  x01000  /* Aggre
1efe0 67 61 74 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20  gate containing 
1eff0 6d 69 6e 28 29 20 6f 72 20 6d 61 78 28 29 20 2a  min() or max() *
1f000 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 52 65 63  /.#define SF_Rec
1f010 75 72 73 69 76 65 20 20 20 20 20 20 30 78 30 32  ursive      0x02
1f020 30 30 30 20 20 2f 2a 20 54 68 65 20 72 65 63 75  000  /* The recu
1f030 72 73 69 76 65 20 70 61 72 74 20 6f 66 20 61 20  rsive part of a 
1f040 72 65 63 75 72 73 69 76 65 20 43 54 45 20 2a 2f  recursive CTE */
1f050 0a 23 64 65 66 69 6e 65 20 53 46 5f 46 69 78 65  .#define SF_Fixe
1f060 64 4c 69 6d 69 74 20 20 20 20 20 30 78 30 34 30  dLimit     0x040
1f070 30 30 20 20 2f 2a 20 6e 53 65 6c 65 63 74 52 6f  00  /* nSelectRo
1f080 77 20 73 65 74 20 62 79 20 61 20 63 6f 6e 73 74  w set by a const
1f090 61 6e 74 20 4c 49 4d 49 54 20 2a 2f 0a 23 64 65  ant LIMIT */.#de
1f0a0 66 69 6e 65 20 53 46 5f 4d 61 79 62 65 43 6f 6e  fine SF_MaybeCon
1f0b0 76 65 72 74 20 20 20 30 78 30 38 30 30 30 20 20  vert   0x08000  
1f0c0 2f 2a 20 4e 65 65 64 20 63 6f 6e 76 65 72 74 43  /* Need convertC
1f0d0 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53  ompoundSelectToS
1f0e0 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 23 64 65  ubquery() */.#de
1f0f0 66 69 6e 65 20 53 46 5f 43 6f 6e 76 65 72 74 65  fine SF_Converte
1f100 64 20 20 20 20 20 20 30 78 31 30 30 30 30 20 20  d      0x10000  
1f110 2f 2a 20 42 79 20 63 6f 6e 76 65 72 74 43 6f 6d  /* By convertCom
1f120 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62  poundSelectToSub
1f130 71 75 65 72 79 28 29 20 2a 2f 0a 23 64 65 66 69  query() */.#defi
1f140 6e 65 20 53 46 5f 49 6e 63 6c 75 64 65 48 69 64  ne SF_IncludeHid
1f150 64 65 6e 20 20 30 78 32 30 30 30 30 20 20 2f 2a  den  0x20000  /*
1f160 20 49 6e 63 6c 75 64 65 20 68 69 64 64 65 6e 20   Include hidden 
1f170 63 6f 6c 75 6d 6e 73 20 69 6e 20 6f 75 74 70 75  columns in outpu
1f180 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  t */.#define SF_
1f190 43 6f 6d 70 6c 65 78 52 65 73 75 6c 74 20 20 30  ComplexResult  0
1f1a0 78 34 30 30 30 30 20 20 2f 2a 20 52 65 73 75 6c  x40000  /* Resul
1f1b0 74 20 63 6f 6e 74 61 69 6e 73 20 73 75 62 71 75  t contains subqu
1f1c0 65 72 79 20 6f 72 20 66 75 6e 63 74 69 6f 6e 20  ery or function 
1f1d0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 57 68  */.#define SF_Wh
1f1e0 65 72 65 42 65 67 69 6e 20 20 20 20 20 30 78 38  ereBegin     0x8
1f1f0 30 30 30 30 20 20 2f 2a 20 52 65 61 6c 6c 79 20  0000  /* Really 
1f200 61 20 57 68 65 72 65 42 65 67 69 6e 28 29 20 63  a WhereBegin() c
1f210 61 6c 6c 2e 20 20 44 65 62 75 67 20 4f 6e 6c 79  all.  Debug Only
1f220 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72   */../*.** The r
1f230 65 73 75 6c 74 73 20 6f 66 20 61 20 53 45 4c 45  esults of a SELE
1f240 43 54 20 63 61 6e 20 62 65 20 64 69 73 74 72 69  CT can be distri
1f250 62 75 74 65 64 20 69 6e 20 73 65 76 65 72 61 6c  buted in several
1f260 20 77 61 79 73 2c 20 61 73 20 64 65 66 69 6e 65   ways, as define
1f270 64 0a 2a 2a 20 62 79 20 6f 6e 65 20 6f 66 20 74  d.** by one of t
1f280 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63  he following mac
1f290 72 6f 73 2e 20 20 54 68 65 20 22 53 52 54 22 20  ros.  The "SRT" 
1f2a0 70 72 65 66 69 78 20 6d 65 61 6e 73 20 22 53 45  prefix means "SE
1f2b0 4c 45 43 54 20 52 65 73 75 6c 74 0a 2a 2a 20 54  LECT Result.** T
1f2c0 79 70 65 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ype"..**.**     
1f2d0 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20  SRT_Union       
1f2e0 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 61 73  Store results as
1f2f0 20 61 20 6b 65 79 20 69 6e 20 61 20 74 65 6d 70   a key in a temp
1f300 6f 72 61 72 79 20 69 6e 64 65 78 0a 2a 2a 20 20  orary index.**  
1f310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f320 20 20 20 69 64 65 6e 74 69 66 69 65 64 20 62 79     identified by
1f330 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e   pDest->iSDParm.
1f340 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45  .**.**     SRT_E
1f350 78 63 65 70 74 20 20 20 20 20 20 52 65 6d 6f 76  xcept      Remov
1f360 65 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20 74  e results from t
1f370 68 65 20 74 65 6d 70 6f 72 61 72 79 20 69 6e 64  he temporary ind
1f380 65 78 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  ex pDest->iSDPar
1f390 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  m..**.**     SRT
1f3a0 5f 45 78 69 73 74 73 20 20 20 20 20 20 53 74 6f  _Exists      Sto
1f3b0 72 65 20 61 20 31 20 69 6e 20 6d 65 6d 6f 72 79  re a 1 in memory
1f3c0 20 63 65 6c 6c 20 70 44 65 73 74 2d 3e 69 53 44   cell pDest->iSD
1f3d0 50 61 72 6d 20 69 66 20 74 68 65 20 72 65 73 75  Parm if the resu
1f3e0 6c 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  lt.**           
1f3f0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 69 73            set is
1f400 20 6e 6f 74 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a   not empty..**.*
1f410 2a 20 20 20 20 20 53 52 54 5f 44 69 73 63 61 72  *     SRT_Discar
1f420 64 20 20 20 20 20 54 68 72 6f 77 20 74 68 65 20  d     Throw the 
1f430 72 65 73 75 6c 74 73 20 61 77 61 79 2e 20 20 54  results away.  T
1f440 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20 53  his is used by S
1f450 45 4c 45 43 54 0a 2a 2a 20 20 20 20 20 20 20 20  ELECT.**        
1f460 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61               sta
1f470 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74  tements within t
1f480 72 69 67 67 65 72 73 20 77 68 6f 73 65 20 6f 6e  riggers whose on
1f490 6c 79 20 70 75 72 70 6f 73 65 20 69 73 0a 2a 2a  ly purpose is.**
1f4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f4b0 20 20 20 20 20 74 68 65 20 73 69 64 65 2d 65 66       the side-ef
1f4c0 66 65 63 74 73 20 6f 66 20 66 75 6e 63 74 69 6f  fects of functio
1f4d0 6e 73 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66  ns..**.** All of
1f4e0 20 74 68 65 20 61 62 6f 76 65 20 61 72 65 20 66   the above are f
1f4f0 72 65 65 20 74 6f 20 69 67 6e 6f 72 65 20 74 68  ree to ignore th
1f500 65 69 72 20 4f 52 44 45 52 20 42 59 20 63 6c 61  eir ORDER BY cla
1f510 75 73 65 2e 20 54 68 6f 73 65 20 74 68 61 74 0a  use. Those that.
1f520 2a 2a 20 66 6f 6c 6c 6f 77 20 6d 75 73 74 20 68  ** follow must h
1f530 6f 6e 6f 72 20 74 68 65 20 4f 52 44 45 52 20 42  onor the ORDER B
1f540 59 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20  Y clause..**.** 
1f550 20 20 20 20 53 52 54 5f 4f 75 74 70 75 74 20 20      SRT_Output  
1f560 20 20 20 20 47 65 6e 65 72 61 74 65 20 61 20 72      Generate a r
1f570 6f 77 20 6f 66 20 6f 75 74 70 75 74 20 28 75 73  ow of output (us
1f580 69 6e 67 20 74 68 65 20 4f 50 5f 52 65 73 75 6c  ing the OP_Resul
1f590 74 52 6f 77 0a 2a 2a 20 20 20 20 20 20 20 20 20  tRow.**         
1f5a0 20 20 20 20 20 20 20 20 20 20 20 20 6f 70 63 6f              opco
1f5b0 64 65 29 20 66 6f 72 20 65 61 63 68 20 72 6f 77  de) for each row
1f5c0 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 73   in the result s
1f5d0 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  et..**.**     SR
1f5e0 54 5f 4d 65 6d 20 20 20 20 20 20 20 20 20 4f 6e  T_Mem         On
1f5f0 6c 79 20 76 61 6c 69 64 20 69 66 20 74 68 65 20  ly valid if the 
1f600 72 65 73 75 6c 74 20 69 73 20 61 20 73 69 6e 67  result is a sing
1f610 6c 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 20 20  le column..**   
1f620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f630 20 20 53 74 6f 72 65 20 74 68 65 20 66 69 72 73    Store the firs
1f640 74 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20  t column of the 
1f650 66 69 72 73 74 20 72 65 73 75 6c 74 20 72 6f 77  first result row
1f660 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1f670 20 20 20 20 20 20 20 20 69 6e 20 72 65 67 69 73          in regis
1f680 74 65 72 20 70 44 65 73 74 2d 3e 69 53 44 50 61  ter pDest->iSDPa
1f690 72 6d 20 74 68 65 6e 20 61 62 61 6e 64 6f 6e 20  rm then abandon 
1f6a0 74 68 65 20 72 65 73 74 0a 2a 2a 20 20 20 20 20  the rest.**     
1f6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f6c0 6f 66 20 74 68 65 20 71 75 65 72 79 2e 20 20 54  of the query.  T
1f6d0 68 69 73 20 64 65 73 74 69 6e 61 74 69 6f 6e 20  his destination 
1f6e0 69 6d 70 6c 69 65 73 20 22 4c 49 4d 49 54 20 31  implies "LIMIT 1
1f6f0 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  "..**.**     SRT
1f700 5f 53 65 74 20 20 20 20 20 20 20 20 20 54 68 65  _Set         The
1f710 20 72 65 73 75 6c 74 20 6d 75 73 74 20 62 65 20   result must be 
1f720 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e  a single column.
1f730 20 20 53 74 6f 72 65 20 65 61 63 68 0a 2a 2a 20    Store each.** 
1f740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f750 20 20 20 20 72 6f 77 20 6f 66 20 72 65 73 75 6c      row of resul
1f760 74 20 61 73 20 74 68 65 20 6b 65 79 20 69 6e 20  t as the key in 
1f770 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44  table pDest->iSD
1f780 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 20 20 20  Parm..**        
1f790 20 20 20 20 20 20 20 20 20 20 20 20 20 41 70 70               App
1f7a0 6c 79 20 74 68 65 20 61 66 66 69 6e 69 74 79 20  ly the affinity 
1f7b0 70 44 65 73 74 2d 3e 61 66 66 53 64 73 74 20 62  pDest->affSdst b
1f7c0 65 66 6f 72 65 20 73 74 6f 72 69 6e 67 0a 2a 2a  efore storing.**
1f7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f7e0 20 20 20 20 20 72 65 73 75 6c 74 73 2e 20 20 55       results.  U
1f7f0 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74  sed to implement
1f800 20 22 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e   "IN (SELECT ...
1f810 29 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  )"..**.**     SR
1f820 54 5f 45 70 68 65 6d 54 61 62 20 20 20 20 43 72  T_EphemTab    Cr
1f830 65 61 74 65 20 61 6e 20 74 65 6d 70 6f 72 61 72  eate an temporar
1f840 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69  y table pDest->i
1f850 53 44 50 61 72 6d 20 61 6e 64 20 73 74 6f 72 65  SDParm and store
1f860 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1f870 20 20 20 20 20 20 20 20 74 68 65 20 72 65 73 75          the resu
1f880 6c 74 20 74 68 65 72 65 2e 20 54 68 65 20 63 75  lt there. The cu
1f890 72 73 6f 72 20 69 73 20 6c 65 66 74 20 6f 70 65  rsor is left ope
1f8a0 6e 20 61 66 74 65 72 0a 2a 2a 20 20 20 20 20 20  n after.**      
1f8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1f8c0 65 74 75 72 6e 69 6e 67 2e 20 20 54 68 69 73 20  eturning.  This 
1f8d0 69 73 20 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c  is like SRT_Tabl
1f8e0 65 20 65 78 63 65 70 74 20 74 68 61 74 0a 2a 2a  e except that.**
1f8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f900 20 20 20 20 20 74 68 69 73 20 64 65 73 74 69 6e       this destin
1f910 61 74 69 6f 6e 20 75 73 65 73 20 4f 50 5f 4f 70  ation uses OP_Op
1f920 65 6e 45 70 68 65 6d 65 72 61 6c 20 74 6f 20 63  enEphemeral to c
1f930 72 65 61 74 65 0a 2a 2a 20 20 20 20 20 20 20 20  reate.**        
1f940 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
1f950 20 74 61 62 6c 65 20 66 69 72 73 74 2e 0a 2a 2a   table first..**
1f960 0a 2a 2a 20 20 20 20 20 53 52 54 5f 43 6f 72 6f  .**     SRT_Coro
1f970 75 74 69 6e 65 20 20 20 47 65 6e 65 72 61 74 65  utine   Generate
1f980 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 74 68   a co-routine th
1f990 61 74 20 72 65 74 75 72 6e 73 20 61 20 6e 65 77  at returns a new
1f9a0 20 72 6f 77 20 6f 66 0a 2a 2a 20 20 20 20 20 20   row of.**      
1f9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1f9c0 65 73 75 6c 74 73 20 65 61 63 68 20 74 69 6d 65  esults each time
1f9d0 20 69 74 20 69 73 20 69 6e 76 6f 6b 65 64 2e 20   it is invoked. 
1f9e0 20 54 68 65 20 65 6e 74 72 79 20 70 6f 69 6e 74   The entry point
1f9f0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1fa00 20 20 20 20 20 20 20 20 6f 66 20 74 68 65 20 63          of the c
1fa10 6f 2d 72 6f 75 74 69 6e 65 20 69 73 20 73 74 6f  o-routine is sto
1fa20 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
1fa30 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 0a 2a  pDest->iSDParm.*
1fa40 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1fa50 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 72 65        and the re
1fa60 73 75 6c 74 20 72 6f 77 20 69 73 20 73 74 6f 72  sult row is stor
1fa70 65 64 20 69 6e 20 70 44 65 73 74 2d 3e 6e 44 65  ed in pDest->nDe
1fa80 73 74 20 72 65 67 69 73 74 65 72 73 0a 2a 2a 20  st registers.** 
1fa90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1faa0 20 20 20 20 73 74 61 72 74 69 6e 67 20 77 69 74      starting wit
1fab0 68 20 70 44 65 73 74 2d 3e 69 53 64 73 74 2e 0a  h pDest->iSdst..
1fac0 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 54 61  **.**     SRT_Ta
1fad0 62 6c 65 20 20 20 20 20 20 20 53 74 6f 72 65 20  ble       Store 
1fae0 72 65 73 75 6c 74 73 20 69 6e 20 74 65 6d 70 6f  results in tempo
1faf0 72 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74  rary table pDest
1fb00 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20  ->iSDParm..**   
1fb10 20 20 53 52 54 5f 46 69 66 6f 20 20 20 20 20 20    SRT_Fifo      
1fb20 20 20 54 68 69 73 20 69 73 20 6c 69 6b 65 20 53    This is like S
1fb30 52 54 5f 45 70 68 65 6d 54 61 62 20 65 78 63 65  RT_EphemTab exce
1fb40 70 74 20 74 68 61 74 20 74 68 65 20 74 61 62 6c  pt that the tabl
1fb50 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
1fb60 20 20 20 20 20 20 20 20 20 69 73 20 61 73 73 75           is assu
1fb70 6d 65 64 20 74 6f 20 61 6c 72 65 61 64 79 20 62  med to already b
1fb80 65 20 6f 70 65 6e 2e 20 20 53 52 54 5f 46 69 66  e open.  SRT_Fif
1fb90 6f 20 68 61 73 0a 2a 2a 20 20 20 20 20 20 20 20  o has.**        
1fba0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
1fbb0 20 61 64 64 69 74 69 6f 6e 61 6c 20 70 72 6f 70   additional prop
1fbc0 65 72 74 79 20 6f 66 20 62 65 69 6e 67 20 61 62  erty of being ab
1fbd0 6c 65 20 74 6f 20 69 67 6e 6f 72 65 0a 2a 2a 20  le to ignore.** 
1fbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fbf0 20 20 20 20 74 68 65 20 4f 52 44 45 52 20 42 59      the ORDER BY
1fc00 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20   clause..**.**  
1fc10 20 20 20 53 52 54 5f 44 69 73 74 46 69 66 6f 20     SRT_DistFifo 
1fc20 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73     Store results
1fc30 20 69 6e 20 61 20 74 65 6d 70 6f 72 61 72 79 20   in a temporary 
1fc40 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44  table pDest->iSD
1fc50 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 20 20 20  Parm..**        
1fc60 20 20 20 20 20 20 20 20 20 20 20 20 20 42 75 74               But
1fc70 20 61 6c 73 6f 20 75 73 65 20 74 65 6d 70 6f 72   also use tempor
1fc80 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d  ary table pDest-
1fc90 3e 69 53 44 50 61 72 6d 2b 31 20 61 73 0a 2a 2a  >iSDParm+1 as.**
1fca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fcb0 20 20 20 20 20 61 20 72 65 63 6f 72 64 20 6f 66       a record of
1fcc0 20 61 6c 6c 20 70 72 69 6f 72 20 72 65 73 75 6c   all prior resul
1fcd0 74 73 20 61 6e 64 20 69 67 6e 6f 72 65 20 61 6e  ts and ignore an
1fce0 79 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20 20  y duplicate.**  
1fcf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fd00 20 20 20 72 6f 77 73 2e 20 20 4e 61 6d 65 20 6d     rows.  Name m
1fd10 65 61 6e 73 3a 20 20 22 44 69 73 74 69 6e 63 74  eans:  "Distinct
1fd20 20 46 69 66 6f 22 2e 0a 2a 2a 0a 2a 2a 20 20 20   Fifo"..**.**   
1fd30 20 20 53 52 54 5f 51 75 65 75 65 20 20 20 20 20    SRT_Queue     
1fd40 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20    Store results 
1fd50 69 6e 20 70 72 69 6f 72 69 74 79 20 71 75 65 75  in priority queu
1fd60 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  e pDest->iSDParm
1fd70 20 28 72 65 61 6c 6c 79 0a 2a 2a 20 20 20 20 20   (really.**     
1fd80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fd90 61 6e 20 69 6e 64 65 78 29 2e 20 20 41 70 70 65  an index).  Appe
1fda0 6e 64 20 61 20 73 65 71 75 65 6e 63 65 20 6e 75  nd a sequence nu
1fdb0 6d 62 65 72 20 73 6f 20 74 68 61 74 20 61 6c 6c  mber so that all
1fdc0 20 65 6e 74 72 69 65 73 0a 2a 2a 20 20 20 20 20   entries.**     
1fdd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fde0 61 72 65 20 64 69 73 74 69 6e 63 74 2e 0a 2a 2a  are distinct..**
1fdf0 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73 74  .**     SRT_Dist
1fe00 51 75 65 75 65 20 20 20 53 74 6f 72 65 20 72 65  Queue   Store re
1fe10 73 75 6c 74 73 20 69 6e 20 70 72 69 6f 72 69 74  sults in priorit
1fe20 79 20 71 75 65 75 65 20 70 44 65 73 74 2d 3e 69  y queue pDest->i
1fe30 53 44 50 61 72 6d 20 6f 6e 6c 79 20 69 66 0a 2a  SDParm only if.*
1fe40 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1fe50 20 20 20 20 20 20 74 68 65 20 73 61 6d 65 20 72        the same r
1fe60 65 63 6f 72 64 20 68 61 73 20 6e 65 76 65 72 20  ecord has never 
1fe70 62 65 65 6e 20 73 74 6f 72 65 64 20 62 65 66 6f  been stored befo
1fe80 72 65 2e 20 20 54 68 65 0a 2a 2a 20 20 20 20 20  re.  The.**     
1fe90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fea0 69 6e 64 65 78 20 61 74 20 70 44 65 73 74 2d 3e  index at pDest->
1feb0 69 53 44 50 61 72 6d 2b 31 20 68 6f 6c 64 20 61  iSDParm+1 hold a
1fec0 6c 6c 20 70 72 69 6f 72 20 73 74 6f 72 65 73 2e  ll prior stores.
1fed0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f  .*/.#define SRT_
1fee0 55 6e 69 6f 6e 20 20 20 20 20 20 20 20 31 20 20  Union        1  
1fef0 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20  /* Store result 
1ff00 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e  as keys in an in
1ff10 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  dex */.#define S
1ff20 52 54 5f 45 78 63 65 70 74 20 20 20 20 20 20 20  RT_Except       
1ff30 32 20 20 2f 2a 20 52 65 6d 6f 76 65 20 72 65 73  2  /* Remove res
1ff40 75 6c 74 20 66 72 6f 6d 20 61 20 55 4e 49 4f 4e  ult from a UNION
1ff50 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e   index */.#defin
1ff60 65 20 53 52 54 5f 45 78 69 73 74 73 20 20 20 20  e SRT_Exists    
1ff70 20 20 20 33 20 20 2f 2a 20 53 74 6f 72 65 20 31     3  /* Store 1
1ff80 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 69   if the result i
1ff90 73 20 6e 6f 74 20 65 6d 70 74 79 20 2a 2f 0a 23  s not empty */.#
1ffa0 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73 63 61  define SRT_Disca
1ffb0 72 64 20 20 20 20 20 20 34 20 20 2f 2a 20 44 6f  rd      4  /* Do
1ffc0 20 6e 6f 74 20 73 61 76 65 20 74 68 65 20 72 65   not save the re
1ffd0 73 75 6c 74 73 20 61 6e 79 77 68 65 72 65 20 2a  sults anywhere *
1ffe0 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 46 69  /.#define SRT_Fi
1fff0 66 6f 20 20 20 20 20 20 20 20 20 35 20 20 2f 2a  fo         5  /*
20000 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73   Store result as
20010 20 64 61 74 61 20 77 69 74 68 20 61 6e 20 61 75   data with an au
20020 74 6f 6d 61 74 69 63 20 72 6f 77 69 64 20 2a 2f  tomatic rowid */
20030 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73  .#define SRT_Dis
20040 74 46 69 66 6f 20 20 20 20 20 36 20 20 2f 2a 20  tFifo     6  /* 
20050 4c 69 6b 65 20 53 52 54 5f 46 69 66 6f 2c 20 62  Like SRT_Fifo, b
20060 75 74 20 75 6e 69 71 75 65 20 72 65 73 75 6c 74  ut unique result
20070 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e  s only */.#defin
20080 65 20 53 52 54 5f 51 75 65 75 65 20 20 20 20 20  e SRT_Queue     
20090 20 20 20 37 20 20 2f 2a 20 53 74 6f 72 65 20 72     7  /* Store r
200a0 65 73 75 6c 74 20 69 6e 20 61 6e 20 71 75 65 75  esult in an queu
200b0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  e */.#define SRT
200c0 5f 44 69 73 74 51 75 65 75 65 20 20 20 20 38 20  _DistQueue    8 
200d0 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 51 75 65   /* Like SRT_Que
200e0 75 65 2c 20 62 75 74 20 75 6e 69 71 75 65 20 72  ue, but unique r
200f0 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a 0a  esults only */..
20100 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59 20  /* The ORDER BY 
20110 63 6c 61 75 73 65 20 69 73 20 69 67 6e 6f 72 65  clause is ignore
20120 64 20 66 6f 72 20 61 6c 6c 20 6f 66 20 74 68 65  d for all of the
20130 20 61 62 6f 76 65 20 2a 2f 0a 23 64 65 66 69 6e   above */.#defin
20140 65 20 49 67 6e 6f 72 61 62 6c 65 4f 72 64 65 72  e IgnorableOrder
20150 62 79 28 58 29 20 28 28 58 2d 3e 65 44 65 73 74  by(X) ((X->eDest
20160 29 3c 3d 53 52 54 5f 44 69 73 74 51 75 65 75 65  )<=SRT_DistQueue
20170 29 0a 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 4f  )..#define SRT_O
20180 75 74 70 75 74 20 20 20 20 20 20 20 39 20 20 2f  utput       9  /
20190 2a 20 4f 75 74 70 75 74 20 65 61 63 68 20 72 6f  * Output each ro
201a0 77 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23  w of result */.#
201b0 64 65 66 69 6e 65 20 53 52 54 5f 4d 65 6d 20 20  define SRT_Mem  
201c0 20 20 20 20 20 20 20 31 30 20 20 2f 2a 20 53 74         10  /* St
201d0 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20 61 20  ore result in a 
201e0 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 2a 2f 0a 23  memory cell */.#
201f0 64 65 66 69 6e 65 20 53 52 54 5f 53 65 74 20 20  define SRT_Set  
20200 20 20 20 20 20 20 20 31 31 20 20 2f 2a 20 53 74         11  /* St
20210 6f 72 65 20 72 65 73 75 6c 74 73 20 61 73 20 6b  ore results as k
20220 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20  eys in an index 
20230 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45  */.#define SRT_E
20240 70 68 65 6d 54 61 62 20 20 20 20 31 32 20 20 2f  phemTab    12  /
20250 2a 20 43 72 65 61 74 65 20 74 72 61 6e 73 69 65  * Create transie
20260 6e 74 20 74 61 62 20 61 6e 64 20 73 74 6f 72 65  nt tab and store
20270 20 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c 65 20   like SRT_Table 
20280 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 43  */.#define SRT_C
20290 6f 72 6f 75 74 69 6e 65 20 20 20 31 33 20 20 2f  oroutine   13  /
202a0 2a 20 47 65 6e 65 72 61 74 65 20 61 20 73 69 6e  * Generate a sin
202b0 67 6c 65 20 72 6f 77 20 6f 66 20 72 65 73 75 6c  gle row of resul
202c0 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  t */.#define SRT
202d0 5f 54 61 62 6c 65 20 20 20 20 20 20 20 31 34 20  _Table       14 
202e0 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
202f0 20 61 73 20 64 61 74 61 20 77 69 74 68 20 61 6e   as data with an
20300 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 77 69 64   automatic rowid
20310 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e   */../*.** An in
20320 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 6f  stance of this o
20330 62 6a 65 63 74 20 64 65 73 63 72 69 62 65 73 20  bject describes 
20340 77 68 65 72 65 20 74 6f 20 70 75 74 20 6f 66 20  where to put of 
20350 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 0a 2a  the results of.*
20360 2a 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65  * a SELECT state
20370 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ment..*/.struct 
20380 53 65 6c 65 63 74 44 65 73 74 20 7b 0a 20 20 75  SelectDest {.  u
20390 38 20 65 44 65 73 74 3b 20 20 20 20 20 20 20 20  8 eDest;        
203a0 20 20 20 20 2f 2a 20 48 6f 77 20 74 6f 20 64 69      /* How to di
203b0 73 70 6f 73 65 20 6f 66 20 74 68 65 20 72 65 73  spose of the res
203c0 75 6c 74 73 2e 20 20 4f 6e 20 6f 66 20 53 52 54  ults.  On of SRT
203d0 5f 2a 20 61 62 6f 76 65 2e 20 2a 2f 0a 20 20 69  _* above. */.  i
203e0 6e 74 20 69 53 44 50 61 72 6d 3b 20 20 20 20 20  nt iSDParm;     
203f0 20 20 20 20 2f 2a 20 41 20 70 61 72 61 6d 65 74      /* A paramet
20400 65 72 20 75 73 65 64 20 62 79 20 74 68 65 20 65  er used by the e
20410 44 65 73 74 20 64 69 73 70 6f 73 61 6c 20 6d 65  Dest disposal me
20420 74 68 6f 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53  thod */.  int iS
20430 64 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  dst;           /
20440 2a 20 42 61 73 65 20 72 65 67 69 73 74 65 72 20  * Base register 
20450 77 68 65 72 65 20 72 65 73 75 6c 74 73 20 61 72  where results ar
20460 65 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20 69  e written */.  i
20470 6e 74 20 6e 53 64 73 74 3b 20 20 20 20 20 20 20  nt nSdst;       
20480 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
20490 20 72 65 67 69 73 74 65 72 73 20 61 6c 6c 6f 63   registers alloc
204a0 61 74 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a  ated */.  char *
204b0 7a 41 66 66 53 64 73 74 3b 20 20 20 20 20 20 2f  zAffSdst;      /
204c0 2a 20 41 66 66 69 6e 69 74 79 20 75 73 65 64 20  * Affinity used 
204d0 77 68 65 6e 20 65 44 65 73 74 3d 3d 53 52 54 5f  when eDest==SRT_
204e0 53 65 74 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  Set */.  ExprLis
204f0 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 2f 2a  t *pOrderBy;  /*
20500 20 4b 65 79 20 63 6f 6c 75 6d 6e 73 20 66 6f 72   Key columns for
20510 20 53 52 54 5f 51 75 65 75 65 20 61 6e 64 20 53   SRT_Queue and S
20520 52 54 5f 44 69 73 74 51 75 65 75 65 20 2a 2f 0a  RT_DistQueue */.
20530 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 44 75 72 69 6e 67  };../*.** During
20540 20 63 6f 64 65 20 67 65 6e 65 72 61 74 69 6f 6e   code generation
20550 20 6f 66 20 73 74 61 74 65 6d 65 6e 74 73 20 74   of statements t
20560 68 61 74 20 64 6f 20 69 6e 73 65 72 74 73 20 69  hat do inserts i
20570 6e 74 6f 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e  nto AUTOINCREMEN
20580 54 0a 2a 2a 20 74 61 62 6c 65 73 2c 20 74 68 65  T.** tables, the
20590 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 66 6f 72   following infor
205a0 6d 61 74 69 6f 6e 20 69 73 20 61 74 74 61 63 68  mation is attach
205b0 65 64 20 74 6f 20 74 68 65 20 54 61 62 6c 65 2e  ed to the Table.
205c0 75 2e 61 75 74 6f 49 6e 63 2e 70 0a 2a 2a 20 70  u.autoInc.p.** p
205d0 6f 69 6e 74 65 72 20 6f 66 20 65 61 63 68 20 61  ointer of each a
205e0 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 74 61 62  utoincrement tab
205f0 6c 65 20 74 6f 20 72 65 63 6f 72 64 20 73 6f 6d  le to record som
20600 65 20 73 69 64 65 20 69 6e 66 6f 72 6d 61 74 69  e side informati
20610 6f 6e 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 63  on that.** the c
20620 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20 6e 65  ode generator ne
20630 65 64 73 2e 20 20 57 65 20 68 61 76 65 20 74 6f  eds.  We have to
20640 20 6b 65 65 70 20 70 65 72 2d 74 61 62 6c 65 20   keep per-table 
20650 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 0a 2a 2a  autoincrement.**
20660 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20   information in 
20670 63 61 73 65 20 69 6e 73 65 72 74 73 20 61 72 65  case inserts are
20680 20 64 6f 6e 65 20 77 69 74 68 69 6e 20 74 72 69   done within tri
20690 67 67 65 72 73 2e 20 20 54 72 69 67 67 65 72 73  ggers.  Triggers
206a0 20 64 6f 20 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d 61   do not.** norma
206b0 6c 6c 79 20 63 6f 6f 72 64 69 6e 61 74 65 20 74  lly coordinate t
206c0 68 65 69 72 20 61 63 74 69 76 69 74 69 65 73 2c  heir activities,
206d0 20 62 75 74 20 77 65 20 64 6f 20 6e 65 65 64 20   but we do need 
206e0 74 6f 20 63 6f 6f 72 64 69 6e 61 74 65 20 74 68  to coordinate th
206f0 65 0a 2a 2a 20 6c 6f 61 64 69 6e 67 20 61 6e 64  e.** loading and
20700 20 73 61 76 69 6e 67 20 6f 66 20 61 75 74 6f 69   saving of autoi
20710 6e 63 72 65 6d 65 6e 74 20 69 6e 66 6f 72 6d 61  ncrement informa
20720 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tion..*/.struct 
20730 41 75 74 6f 69 6e 63 49 6e 66 6f 20 7b 0a 20 20  AutoincInfo {.  
20740 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 4e 65  AutoincInfo *pNe
20750 78 74 3b 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e  xt;   /* Next in
20760 66 6f 20 62 6c 6f 63 6b 20 69 6e 20 61 20 6c 69  fo block in a li
20770 73 74 20 6f 66 20 74 68 65 6d 20 61 6c 6c 20 2a  st of them all *
20780 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b  /.  Table *pTab;
20790 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62            /* Tab
207a0 6c 65 20 74 68 69 73 20 69 6e 66 6f 20 62 6c 6f  le this info blo
207b0 63 6b 20 72 65 66 65 72 73 20 74 6f 20 2a 2f 0a  ck refers to */.
207c0 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20    int iDb;      
207d0 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78          /* Index
207e0 20 69 6e 20 73 71 6c 69 74 65 33 2e 61 44 62 5b   in sqlite3.aDb[
207f0 5d 20 6f 66 20 64 61 74 61 62 61 73 65 20 68 6f  ] of database ho
20800 6c 64 69 6e 67 20 70 54 61 62 20 2a 2f 0a 20 20  lding pTab */.  
20810 69 6e 74 20 72 65 67 43 74 72 3b 20 20 20 20 20  int regCtr;     
20820 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20        /* Memory 
20830 72 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67  register holding
20840 20 74 68 65 20 72 6f 77 69 64 20 63 6f 75 6e 74   the rowid count
20850 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  er */.};../*.** 
20860 41 74 20 6c 65 61 73 74 20 6f 6e 65 20 69 6e 73  At least one ins
20870 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
20880 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
20890 20 69 73 20 63 72 65 61 74 65 64 20 66 6f 72 20   is created for 
208a0 65 61 63 68 0a 2a 2a 20 74 72 69 67 67 65 72 20  each.** trigger 
208b0 74 68 61 74 20 6d 61 79 20 62 65 20 66 69 72 65  that may be fire
208c0 64 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67 20  d while parsing 
208d0 61 6e 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54  an INSERT, UPDAT
208e0 45 20 6f 72 20 44 45 4c 45 54 45 0a 2a 2a 20 73  E or DELETE.** s
208f0 74 61 74 65 6d 65 6e 74 2e 20 41 6c 6c 20 73 75  tatement. All su
20900 63 68 20 6f 62 6a 65 63 74 73 20 61 72 65 20 73  ch objects are s
20910 74 6f 72 65 64 20 69 6e 20 74 68 65 20 6c 69 6e  tored in the lin
20920 6b 65 64 20 6c 69 73 74 20 68 65 61 64 65 64 20  ked list headed 
20930 61 74 0a 2a 2a 20 50 61 72 73 65 2e 70 54 72 69  at.** Parse.pTri
20940 67 67 65 72 50 72 67 20 61 6e 64 20 64 65 6c 65  ggerPrg and dele
20950 74 65 64 20 6f 6e 63 65 20 73 74 61 74 65 6d 65  ted once stateme
20960 6e 74 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 68  nt compilation h
20970 61 73 20 62 65 65 6e 0a 2a 2a 20 63 6f 6d 70 6c  as been.** compl
20980 65 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 56 64  eted..**.** A Vd
20990 62 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74  be sub-program t
209a0 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74  hat implements t
209b0 68 65 20 62 6f 64 79 20 61 6e 64 20 57 48 45 4e  he body and WHEN
209c0 20 63 6c 61 75 73 65 20 6f 66 20 74 72 69 67 67   clause of trigg
209d0 65 72 0a 2a 2a 20 54 72 69 67 67 65 72 50 72 67  er.** TriggerPrg
209e0 2e 70 54 72 69 67 67 65 72 2c 20 61 73 73 75 6d  .pTrigger, assum
209f0 69 6e 67 20 61 20 64 65 66 61 75 6c 74 20 4f 4e  ing a default ON
20a00 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65   CONFLICT clause
20a10 20 6f 66 0a 2a 2a 20 54 72 69 67 67 65 72 50 72   of.** TriggerPr
20a20 67 2e 6f 72 63 6f 6e 66 2c 20 69 73 20 73 74 6f  g.orconf, is sto
20a30 72 65 64 20 69 6e 20 74 68 65 20 54 72 69 67 67  red in the Trigg
20a40 65 72 50 72 67 2e 70 50 72 6f 67 72 61 6d 20 76  erPrg.pProgram v
20a50 61 72 69 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20  ariable..** The 
20a60 50 61 72 73 65 2e 70 54 72 69 67 67 65 72 50 72  Parse.pTriggerPr
20a70 67 20 6c 69 73 74 20 6e 65 76 65 72 20 63 6f 6e  g list never con
20a80 74 61 69 6e 73 20 74 77 6f 20 65 6e 74 72 69 65  tains two entrie
20a90 73 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 0a  s with the same.
20aa0 2a 2a 20 76 61 6c 75 65 73 20 66 6f 72 20 62 6f  ** values for bo
20ab0 74 68 20 70 54 72 69 67 67 65 72 20 61 6e 64 20  th pTrigger and 
20ac0 6f 72 63 6f 6e 66 2e 0a 2a 2a 0a 2a 2a 20 54 68  orconf..**.** Th
20ad0 65 20 54 72 69 67 67 65 72 50 72 67 2e 61 43 6f  e TriggerPrg.aCo
20ae0 6c 6d 61 73 6b 5b 30 5d 20 76 61 72 69 61 62 6c  lmask[0] variabl
20af0 65 20 69 73 20 73 65 74 20 74 6f 20 61 20 6d 61  e is set to a ma
20b00 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75  sk of old.* colu
20b10 6d 6e 73 0a 2a 2a 20 61 63 63 65 73 73 65 64 20  mns.** accessed 
20b20 28 6f 72 20 73 65 74 20 74 6f 20 30 20 66 6f 72  (or set to 0 for
20b30 20 74 72 69 67 67 65 72 73 20 66 69 72 65 64 20   triggers fired 
20b40 61 73 20 61 20 72 65 73 75 6c 74 20 6f 66 20 49  as a result of I
20b50 4e 53 45 52 54 0a 2a 2a 20 73 74 61 74 65 6d 65  NSERT.** stateme
20b60 6e 74 73 29 2e 20 53 69 6d 69 6c 61 72 6c 79 2c  nts). Similarly,
20b70 20 74 68 65 20 54 72 69 67 67 65 72 50 72 67 2e   the TriggerPrg.
20b80 61 43 6f 6c 6d 61 73 6b 5b 31 5d 20 76 61 72 69  aColmask[1] vari
20b90 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f 0a 2a  able is set to.*
20ba0 2a 20 61 20 6d 61 73 6b 20 6f 66 20 6e 65 77 2e  * a mask of new.
20bb0 2a 20 63 6f 6c 75 6d 6e 73 20 75 73 65 64 20 62  * columns used b
20bc0 79 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a  y the program..*
20bd0 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72  /.struct Trigger
20be0 50 72 67 20 7b 0a 20 20 54 72 69 67 67 65 72 20  Prg {.  Trigger 
20bf0 2a 70 54 72 69 67 67 65 72 3b 20 20 20 20 20 20  *pTrigger;      
20c00 2f 2a 20 54 72 69 67 67 65 72 20 74 68 69 73 20  /* Trigger this 
20c10 70 72 6f 67 72 61 6d 20 77 61 73 20 63 6f 64 65  program was code
20c20 64 20 66 72 6f 6d 20 2a 2f 0a 20 20 54 72 69 67  d from */.  Trig
20c30 67 65 72 50 72 67 20 2a 70 4e 65 78 74 3b 20 20  gerPrg *pNext;  
20c40 20 20 20 20 2f 2a 20 4e 65 78 74 20 65 6e 74 72      /* Next entr
20c50 79 20 69 6e 20 50 61 72 73 65 2e 70 54 72 69 67  y in Parse.pTrig
20c60 67 65 72 50 72 67 20 6c 69 73 74 20 2a 2f 0a 20  gerPrg list */. 
20c70 20 53 75 62 50 72 6f 67 72 61 6d 20 2a 70 50 72   SubProgram *pPr
20c80 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 50 72 6f 67  ogram;   /* Prog
20c90 72 61 6d 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67  ram implementing
20ca0 20 70 54 72 69 67 67 65 72 2f 6f 72 63 6f 6e 66   pTrigger/orconf
20cb0 20 2a 2f 0a 20 20 69 6e 74 20 6f 72 63 6f 6e 66   */.  int orconf
20cc0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
20cd0 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46   Default ON CONF
20ce0 4c 49 43 54 20 70 6f 6c 69 63 79 20 2a 2f 0a 20  LICT policy */. 
20cf0 20 75 33 32 20 61 43 6f 6c 6d 61 73 6b 5b 32 5d   u32 aColmask[2]
20d00 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b  ;        /* Mask
20d10 73 20 6f 66 20 6f 6c 64 2e 2a 2c 20 6e 65 77 2e  s of old.*, new.
20d20 2a 20 63 6f 6c 75 6d 6e 73 20 61 63 63 65 73 73  * columns access
20d30 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ed */.};../*.** 
20d40 54 68 65 20 79 44 62 4d 61 73 6b 20 64 61 74 61  The yDbMask data
20d50 74 79 70 65 20 66 6f 72 20 74 68 65 20 62 69 74  type for the bit
20d60 6d 61 73 6b 20 6f 66 20 61 6c 6c 20 61 74 74 61  mask of all atta
20d70 63 68 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a  ched databases..
20d80 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41  */.#if SQLITE_MA
20d90 58 5f 41 54 54 41 43 48 45 44 3e 33 30 0a 20 20  X_ATTACHED>30.  
20da0 74 79 70 65 64 65 66 20 75 6e 73 69 67 6e 65 64  typedef unsigned
20db0 20 63 68 61 72 20 79 44 62 4d 61 73 6b 5b 28 53   char yDbMask[(S
20dc0 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48  QLITE_MAX_ATTACH
20dd0 45 44 2b 39 29 2f 38 5d 3b 0a 23 20 64 65 66 69  ED+9)/8];.# defi
20de0 6e 65 20 44 62 4d 61 73 6b 54 65 73 74 28 4d 2c  ne DbMaskTest(M,
20df0 49 29 20 20 20 20 28 28 28 4d 29 5b 28 49 29 2f  I)    (((M)[(I)/
20e00 38 5d 26 28 31 3c 3c 28 28 49 29 26 37 29 29 29  8]&(1<<((I)&7)))
20e10 21 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 44 62  !=0).# define Db
20e20 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20 20  MaskZero(M)     
20e30 20 6d 65 6d 73 65 74 28 28 4d 29 2c 30 2c 73 69   memset((M),0,si
20e40 7a 65 6f 66 28 4d 29 29 0a 23 20 64 65 66 69 6e  zeof(M)).# defin
20e50 65 20 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29  e DbMaskSet(M,I)
20e60 20 20 20 20 20 28 4d 29 5b 28 49 29 2f 38 5d 7c       (M)[(I)/8]|
20e70 3d 28 31 3c 3c 28 28 49 29 26 37 29 29 0a 23 20  =(1<<((I)&7)).# 
20e80 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c  define DbMaskAll
20e90 5a 65 72 6f 28 4d 29 20 20 20 73 71 6c 69 74 65  Zero(M)   sqlite
20ea0 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d  3DbMaskAllZero(M
20eb0 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  ).# define DbMas
20ec0 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20 20 28 73  kNonZero(M)   (s
20ed0 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a  qlite3DbMaskAllZ
20ee0 65 72 6f 28 4d 29 3d 3d 30 29 0a 23 65 6c 73 65  ero(M)==0).#else
20ef0 0a 20 20 74 79 70 65 64 65 66 20 75 6e 73 69 67  .  typedef unsig
20f00 6e 65 64 20 69 6e 74 20 79 44 62 4d 61 73 6b 3b  ned int yDbMask;
20f10 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
20f20 54 65 73 74 28 4d 2c 49 29 20 20 20 20 28 28 28  Test(M,I)    (((
20f30 4d 29 26 28 28 28 79 44 62 4d 61 73 6b 29 31 29  M)&(((yDbMask)1)
20f40 3c 3c 28 49 29 29 29 21 3d 30 29 0a 23 20 64 65  <<(I)))!=0).# de
20f50 66 69 6e 65 20 44 62 4d 61 73 6b 5a 65 72 6f 28  fine DbMaskZero(
20f60 4d 29 20 20 20 20 20 20 28 4d 29 3d 30 0a 23 20  M)      (M)=0.# 
20f70 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 53 65 74  define DbMaskSet
20f80 28 4d 2c 49 29 20 20 20 20 20 28 4d 29 7c 3d 28  (M,I)     (M)|=(
20f90 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49  ((yDbMask)1)<<(I
20fa0 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  )).# define DbMa
20fb0 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20 20 20 28  skAllZero(M)   (
20fc0 4d 29 3d 3d 30 0a 23 20 64 65 66 69 6e 65 20 44  M)==0.# define D
20fd0 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20  bMaskNonZero(M) 
20fe0 20 20 28 4d 29 21 3d 30 0a 23 65 6e 64 69 66 0a    (M)!=0.#endif.
20ff0 0a 2f 2a 0a 2a 2a 20 41 6e 20 53 51 4c 20 70 61  ./*.** An SQL pa
21000 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 41  rser context.  A
21010 20 63 6f 70 79 20 6f 66 20 74 68 69 73 20 73 74   copy of this st
21020 72 75 63 74 75 72 65 20 69 73 20 70 61 73 73 65  ructure is passe
21030 64 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 68 65  d through.** the
21040 20 70 61 72 73 65 72 20 61 6e 64 20 64 6f 77 6e   parser and down
21050 20 69 6e 74 6f 20 61 6c 6c 20 74 68 65 20 70 61   into all the pa
21060 72 73 65 72 20 61 63 74 69 6f 6e 20 72 6f 75 74  rser action rout
21070 69 6e 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a  ine in order to.
21080 2a 2a 20 63 61 72 72 79 20 61 72 6f 75 6e 64 20  ** carry around 
21090 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74  information that
210a0 20 69 73 20 67 6c 6f 62 61 6c 20 74 6f 20 74 68   is global to th
210b0 65 20 65 6e 74 69 72 65 20 70 61 72 73 65 2e 0a  e entire parse..
210c0 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72 75 63 74  **.** The struct
210d0 75 72 65 20 69 73 20 64 69 76 69 64 65 64 20 69  ure is divided i
210e0 6e 74 6f 20 74 77 6f 20 70 61 72 74 73 2e 20 20  nto two parts.  
210f0 57 68 65 6e 20 74 68 65 20 70 61 72 73 65 72 20  When the parser 
21100 61 6e 64 20 63 6f 64 65 0a 2a 2a 20 67 65 6e 65  and code.** gene
21110 72 61 74 65 20 63 61 6c 6c 20 74 68 65 6d 73 65  rate call themse
21120 6c 76 65 73 20 72 65 63 75 72 73 69 76 65 6c 79  lves recursively
21130 2c 20 74 68 65 20 66 69 72 73 74 20 70 61 72 74  , the first part
21140 20 6f 66 20 74 68 65 20 73 74 72 75 63 74 75 72   of the structur
21150 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 74 61 6e 74  e.** is constant
21160 20 62 75 74 20 74 68 65 20 73 65 63 6f 6e 64 20   but the second 
21170 70 61 72 74 20 69 73 20 72 65 73 65 74 20 61 74  part is reset at
21180 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 61   the beginning a
21190 6e 64 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 61 63  nd end of.** eac
211a0 68 20 72 65 63 75 72 73 69 6f 6e 2e 0a 2a 2a 0a  h recursion..**.
211b0 2a 2a 20 54 68 65 20 6e 54 61 62 6c 65 4c 6f 63  ** The nTableLoc
211c0 6b 20 61 6e 64 20 61 54 61 62 6c 65 4c 6f 63 6b  k and aTableLock
211d0 20 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 6f   variables are o
211e0 6e 6c 79 20 75 73 65 64 20 69 66 20 74 68 65 20  nly used if the 
211f0 73 68 61 72 65 64 2d 63 61 63 68 65 0a 2a 2a 20  shared-cache.** 
21200 66 65 61 74 75 72 65 20 69 73 20 65 6e 61 62 6c  feature is enabl
21210 65 64 20 28 69 66 20 73 71 6c 69 74 65 33 54 73  ed (if sqlite3Ts
21220 64 28 29 2d 3e 75 73 65 53 68 61 72 65 64 44 61  d()->useSharedDa
21230 74 61 20 69 73 20 74 72 75 65 29 2e 20 54 68 65  ta is true). The
21240 79 20 61 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f  y are.** used to
21250 20 73 74 6f 72 65 20 74 68 65 20 73 65 74 20 6f   store the set o
21260 66 20 74 61 62 6c 65 2d 6c 6f 63 6b 73 20 72 65  f table-locks re
21270 71 75 69 72 65 64 20 62 79 20 74 68 65 20 73 74  quired by the st
21280 61 74 65 6d 65 6e 74 20 62 65 69 6e 67 0a 2a 2a  atement being.**
21290 20 63 6f 6d 70 69 6c 65 64 2e 20 46 75 6e 63 74   compiled. Funct
212a0 69 6f 6e 20 73 71 6c 69 74 65 33 54 61 62 6c 65  ion sqlite3Table
212b0 4c 6f 63 6b 28 29 20 69 73 20 75 73 65 64 20 74  Lock() is used t
212c0 6f 20 61 64 64 20 65 6e 74 72 69 65 73 20 74 6f  o add entries to
212d0 20 74 68 65 0a 2a 2a 20 6c 69 73 74 2e 0a 2a 2f   the.** list..*/
212e0 0a 73 74 72 75 63 74 20 50 61 72 73 65 20 7b 0a  .struct Parse {.
212f0 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20    sqlite3 *db;  
21300 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6d 61         /* The ma
21310 69 6e 20 64 61 74 61 62 61 73 65 20 73 74 72 75  in database stru
21320 63 74 75 72 65 20 2a 2f 0a 20 20 63 68 61 72 20  cture */.  char 
21330 2a 7a 45 72 72 4d 73 67 3b 20 20 20 20 20 20 20  *zErrMsg;       
21340 2f 2a 20 41 6e 20 65 72 72 6f 72 20 6d 65 73 73  /* An error mess
21350 61 67 65 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70  age */.  Vdbe *p
21360 56 64 62 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  Vdbe;         /*
21370 20 41 6e 20 65 6e 67 69 6e 65 20 66 6f 72 20 65   An engine for e
21380 78 65 63 75 74 69 6e 67 20 64 61 74 61 62 61 73  xecuting databas
21390 65 20 62 79 74 65 63 6f 64 65 20 2a 2f 0a 20 20  e bytecode */.  
213a0 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20 20  int rc;         
213b0 20 20 20 20 20 2f 2a 20 52 65 74 75 72 6e 20 63       /* Return c
213c0 6f 64 65 20 66 72 6f 6d 20 65 78 65 63 75 74 69  ode from executi
213d0 6f 6e 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 4e 61  on */.  u8 colNa
213e0 6d 65 73 53 65 74 3b 20 20 20 20 20 20 2f 2a 20  mesSet;      /* 
213f0 54 52 55 45 20 61 66 74 65 72 20 4f 50 5f 43 6f  TRUE after OP_Co
21400 6c 75 6d 6e 4e 61 6d 65 20 68 61 73 20 62 65 65  lumnName has bee
21410 6e 20 69 73 73 75 65 64 20 74 6f 20 70 56 64 62  n issued to pVdb
21420 65 20 2a 2f 0a 20 20 75 38 20 63 68 65 63 6b 53  e */.  u8 checkS
21430 63 68 65 6d 61 3b 20 20 20 20 20 20 2f 2a 20 43  chema;      /* C
21440 61 75 73 65 73 20 73 63 68 65 6d 61 20 63 6f 6f  auses schema coo
21450 6b 69 65 20 63 68 65 63 6b 20 61 66 74 65 72 20  kie check after 
21460 61 6e 20 65 72 72 6f 72 20 2a 2f 0a 20 20 75 38  an error */.  u8
21470 20 6e 65 73 74 65 64 3b 20 20 20 20 20 20 20 20   nested;        
21480 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
21490 6e 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20  nested calls to 
214a0 74 68 65 20 70 61 72 73 65 72 2f 63 6f 64 65 20  the parser/code 
214b0 67 65 6e 65 72 61 74 6f 72 20 2a 2f 0a 20 20 75  generator */.  u
214c0 38 20 6e 54 65 6d 70 52 65 67 3b 20 20 20 20 20  8 nTempReg;     
214d0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
214e0 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73   temporary regis
214f0 74 65 72 73 20 69 6e 20 61 54 65 6d 70 52 65 67  ters in aTempReg
21500 5b 5d 20 2a 2f 0a 20 20 75 38 20 69 73 4d 75 6c  [] */.  u8 isMul
21510 74 69 57 72 69 74 65 3b 20 20 20 20 20 2f 2a 20  tiWrite;     /* 
21520 54 72 75 65 20 69 66 20 73 74 61 74 65 6d 65 6e  True if statemen
21530 74 20 6d 61 79 20 6d 6f 64 69 66 79 2f 69 6e 73  t may modify/ins
21540 65 72 74 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77  ert multiple row
21550 73 20 2a 2f 0a 20 20 75 38 20 6d 61 79 41 62 6f  s */.  u8 mayAbo
21560 72 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  rt;         /* T
21570 72 75 65 20 69 66 20 73 74 61 74 65 6d 65 6e 74  rue if statement
21580 20 6d 61 79 20 74 68 72 6f 77 20 61 6e 20 41 42   may throw an AB
21590 4f 52 54 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f  ORT exception */
215a0 0a 20 20 75 38 20 68 61 73 43 6f 6d 70 6f 75 6e  .  u8 hasCompoun
215b0 64 3b 20 20 20 20 20 20 2f 2a 20 4e 65 65 64 20  d;      /* Need 
215c0 74 6f 20 69 6e 76 6f 6b 65 20 63 6f 6e 76 65 72  to invoke conver
215d0 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54  tCompoundSelectT
215e0 6f 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 20  oSubquery() */. 
215f0 20 75 38 20 6f 6b 43 6f 6e 73 74 46 61 63 74 6f   u8 okConstFacto
21600 72 3b 20 20 20 20 2f 2a 20 4f 4b 20 74 6f 20 66  r;    /* OK to f
21610 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e 73 74 61  actor out consta
21620 6e 74 73 20 2a 2f 0a 20 20 75 38 20 64 69 73 61  nts */.  u8 disa
21630 62 6c 65 4c 6f 6f 6b 61 73 69 64 65 3b 20 2f 2a  bleLookaside; /*
21640 20 4e 75 6d 62 65 72 20 6f 66 20 74 69 6d 65 73   Number of times
21650 20 6c 6f 6f 6b 61 73 69 64 65 20 68 61 73 20 62   lookaside has b
21660 65 65 6e 20 64 69 73 61 62 6c 65 64 20 2a 2f 0a  een disabled */.
21670 20 20 75 38 20 64 69 73 61 62 6c 65 56 74 61 62    u8 disableVtab
21680 3b 20 20 20 20 20 20 2f 2a 20 44 69 73 61 62 6c  ;      /* Disabl
21690 65 20 61 6c 6c 20 76 69 72 74 75 61 6c 20 74 61  e all virtual ta
216a0 62 6c 65 73 20 66 6f 72 20 74 68 69 73 20 70 61  bles for this pa
216b0 72 73 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 61  rse */.  int nRa
216c0 6e 67 65 52 65 67 3b 20 20 20 20 20 20 20 2f 2a  ngeReg;       /*
216d0 20 53 69 7a 65 20 6f 66 20 74 68 65 20 74 65 6d   Size of the tem
216e0 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 20  porary register 
216f0 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 69  block */.  int i
21700 52 61 6e 67 65 52 65 67 3b 20 20 20 20 20 20 20  RangeReg;       
21710 2f 2a 20 46 69 72 73 74 20 72 65 67 69 73 74 65  /* First registe
21720 72 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 72  r in temporary r
21730 65 67 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f  egister block */
21740 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20  .  int nErr;    
21750 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
21760 72 20 6f 66 20 65 72 72 6f 72 73 20 73 65 65 6e  r of errors seen
21770 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 61 62 3b 20   */.  int nTab; 
21780 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
21790 6d 62 65 72 20 6f 66 20 70 72 65 76 69 6f 75 73  mber of previous
217a0 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 56 44 42  ly allocated VDB
217b0 45 20 63 75 72 73 6f 72 73 20 2a 2f 0a 20 20 69  E cursors */.  i
217c0 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20  nt nMem;        
217d0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
217e0 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73   memory cells us
217f0 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69  ed so far */.  i
21800 6e 74 20 73 7a 4f 70 41 6c 6c 6f 63 3b 20 20 20  nt szOpAlloc;   
21810 20 20 20 20 2f 2a 20 42 79 74 65 73 20 6f 66 20      /* Bytes of 
21820 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 61 6c 6c  memory space all
21830 6f 63 61 74 65 64 20 66 6f 72 20 56 64 62 65 2e  ocated for Vdbe.
21840 61 4f 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 69  aOp[] */.  int i
21850 53 65 6c 66 54 61 62 3b 20 20 20 20 20 20 20 20  SelfTab;        
21860 2f 2a 20 54 61 62 6c 65 20 61 73 73 6f 63 69 61  /* Table associa
21870 74 65 64 20 77 69 74 68 20 61 6e 20 69 6e 64 65  ted with an inde
21880 78 20 6f 6e 20 65 78 70 72 2c 20 6f 72 20 6e 65  x on expr, or ne
21890 67 61 74 69 76 65 0a 20 20 20 20 20 20 20 20 20  gative.         
218a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
218b0 20 6f 66 20 74 68 65 20 62 61 73 65 20 72 65 67   of the base reg
218c0 69 73 74 65 72 20 64 75 72 69 6e 67 20 63 68 65  ister during che
218d0 63 6b 2d 63 6f 6e 73 74 72 61 69 6e 74 20 65 76  ck-constraint ev
218e0 61 6c 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 61 62  al */.  int nLab
218f0 65 6c 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  el;          /* 
21900 54 68 65 20 2a 6e 65 67 61 74 69 76 65 2a 20 6f  The *negative* o
21910 66 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  f the number of 
21920 6c 61 62 65 6c 73 20 75 73 65 64 20 2a 2f 0a 20  labels used */. 
21930 20 69 6e 74 20 6e 4c 61 62 65 6c 41 6c 6c 6f 63   int nLabelAlloc
21940 3b 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20  ;     /* Number 
21950 6f 66 20 73 6c 6f 74 73 20 69 6e 20 61 4c 61 62  of slots in aLab
21960 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 4c 61  el */.  int *aLa
21970 62 65 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  bel;         /* 
21980 53 70 61 63 65 20 74 6f 20 68 6f 6c 64 20 74 68  Space to hold th
21990 65 20 6c 61 62 65 6c 73 20 2a 2f 0a 20 20 45 78  e labels */.  Ex
219a0 70 72 4c 69 73 74 20 2a 70 43 6f 6e 73 74 45 78  prList *pConstEx
219b0 70 72 3b 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 65  pr;/* Constant e
219c0 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20  xpressions */.  
219d0 54 6f 6b 65 6e 20 63 6f 6e 73 74 72 61 69 6e 74  Token constraint
219e0 4e 61 6d 65 3b 2f 2a 20 4e 61 6d 65 20 6f 66 20  Name;/* Name of 
219f0 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 63  the constraint c
21a00 75 72 72 65 6e 74 6c 79 20 62 65 69 6e 67 20 70  urrently being p
21a10 61 72 73 65 64 20 2a 2f 0a 20 20 79 44 62 4d 61  arsed */.  yDbMa
21a20 73 6b 20 77 72 69 74 65 4d 61 73 6b 3b 20 20 20  sk writeMask;   
21a30 2f 2a 20 53 74 61 72 74 20 61 20 77 72 69 74 65  /* Start a write
21a40 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20   transaction on 
21a50 74 68 65 73 65 20 64 61 74 61 62 61 73 65 73 20  these databases 
21a60 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 63 6f 6f  */.  yDbMask coo
21a70 6b 69 65 4d 61 73 6b 3b 20 20 2f 2a 20 42 69 74  kieMask;  /* Bit
21a80 6d 61 73 6b 20 6f 66 20 73 63 68 65 6d 61 20 76  mask of schema v
21a90 65 72 69 66 69 65 64 20 64 61 74 61 62 61 73 65  erified database
21aa0 73 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f  s */.  int regRo
21ab0 77 69 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 52  wid;        /* R
21ac0 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20  egister holding 
21ad0 72 6f 77 69 64 20 6f 66 20 43 52 45 41 54 45 20  rowid of CREATE 
21ae0 54 41 42 4c 45 20 65 6e 74 72 79 20 2a 2f 0a 20  TABLE entry */. 
21af0 20 69 6e 74 20 72 65 67 52 6f 6f 74 3b 20 20 20   int regRoot;   
21b00 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65        /* Registe
21b10 72 20 68 6f 6c 64 69 6e 67 20 72 6f 6f 74 20 70  r holding root p
21b20 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 6e  age number for n
21b30 65 77 20 6f 62 6a 65 63 74 73 20 2a 2f 0a 20 20  ew objects */.  
21b40 69 6e 74 20 6e 4d 61 78 41 72 67 3b 20 20 20 20  int nMaxArg;    
21b50 20 20 20 20 20 2f 2a 20 4d 61 78 20 61 72 67 73       /* Max args
21b60 20 70 61 73 73 65 64 20 74 6f 20 75 73 65 72 20   passed to user 
21b70 66 75 6e 63 74 69 6f 6e 20 62 79 20 73 75 62 2d  function by sub-
21b80 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 69 6e 74  program */.  int
21b90 20 6e 53 65 6c 65 63 74 3b 20 20 20 20 20 20 20   nSelect;       
21ba0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 53    /* Number of S
21bb0 45 4c 45 43 54 20 73 74 6d 74 73 2e 20 43 6f 75  ELECT stmts. Cou
21bc0 6e 74 65 72 20 66 6f 72 20 53 65 6c 65 63 74 2e  nter for Select.
21bd0 73 65 6c 49 64 20 2a 2f 0a 23 69 66 6e 64 65 66  selId */.#ifndef
21be0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41   SQLITE_OMIT_SHA
21bf0 52 45 44 5f 43 41 43 48 45 0a 20 20 69 6e 74 20  RED_CACHE.  int 
21c00 6e 54 61 62 6c 65 4c 6f 63 6b 3b 20 20 20 20 20  nTableLock;     
21c10 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
21c20 6c 6f 63 6b 73 20 69 6e 20 61 54 61 62 6c 65 4c  locks in aTableL
21c30 6f 63 6b 20 2a 2f 0a 20 20 54 61 62 6c 65 4c 6f  ock */.  TableLo
21c40 63 6b 20 2a 61 54 61 62 6c 65 4c 6f 63 6b 3b 20  ck *aTableLock; 
21c50 2f 2a 20 52 65 71 75 69 72 65 64 20 74 61 62 6c  /* Required tabl
21c60 65 20 6c 6f 63 6b 73 20 66 6f 72 20 73 68 61 72  e locks for shar
21c70 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f  ed-cache mode */
21c80 0a 23 65 6e 64 69 66 0a 20 20 41 75 74 6f 69 6e  .#endif.  Autoin
21c90 63 49 6e 66 6f 20 2a 70 41 69 6e 63 3b 20 20 2f  cInfo *pAinc;  /
21ca0 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  * Information ab
21cb0 6f 75 74 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e  out AUTOINCREMEN
21cc0 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 20 20  T counters */.  
21cd0 50 61 72 73 65 20 2a 70 54 6f 70 6c 65 76 65 6c  Parse *pToplevel
21ce0 3b 20 20 20 20 2f 2a 20 50 61 72 73 65 20 73 74  ;    /* Parse st
21cf0 72 75 63 74 75 72 65 20 66 6f 72 20 6d 61 69 6e  ructure for main
21d00 20 70 72 6f 67 72 61 6d 20 28 6f 72 20 4e 55 4c   program (or NUL
21d10 4c 29 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  L) */.  Table *p
21d20 54 72 69 67 67 65 72 54 61 62 3b 20 20 2f 2a 20  TriggerTab;  /* 
21d30 54 61 62 6c 65 20 74 72 69 67 67 65 72 73 20 61  Table triggers a
21d40 72 65 20 62 65 69 6e 67 20 63 6f 64 65 64 20 66  re being coded f
21d50 6f 72 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70  or */.  Parse *p
21d60 50 61 72 65 6e 74 50 61 72 73 65 3b 20 2f 2a 20  ParentParse; /* 
21d70 50 61 72 65 6e 74 20 70 61 72 73 65 72 20 69 66  Parent parser if
21d80 20 74 68 69 73 20 70 61 72 73 65 72 20 69 73 20   this parser is 
21d90 6e 65 73 74 65 64 20 2a 2f 0a 20 20 69 6e 74 20  nested */.  int 
21da0 61 64 64 72 43 72 54 61 62 3b 20 20 20 20 20 20  addrCrTab;      
21db0 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20 4f   /* Address of O
21dc0 50 5f 43 72 65 61 74 65 42 74 72 65 65 20 6f 70  P_CreateBtree op
21dd0 63 6f 64 65 20 6f 6e 20 43 52 45 41 54 45 20 54  code on CREATE T
21de0 41 42 4c 45 20 2a 2f 0a 20 20 75 33 32 20 6e 51  ABLE */.  u32 nQ
21df0 75 65 72 79 4c 6f 6f 70 3b 20 20 20 20 20 20 2f  ueryLoop;      /
21e00 2a 20 45 73 74 20 6e 75 6d 62 65 72 20 6f 66 20  * Est number of 
21e10 69 74 65 72 61 74 69 6f 6e 73 20 6f 66 20 61 20  iterations of a 
21e20 71 75 65 72 79 20 28 31 30 2a 6c 6f 67 32 28 4e  query (10*log2(N
21e30 29 29 20 2a 2f 0a 20 20 75 33 32 20 6f 6c 64 6d  )) */.  u32 oldm
21e40 61 73 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ask;         /* 
21e50 4d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f  Mask of old.* co
21e60 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e 63 65 64  lumns referenced
21e70 20 2a 2f 0a 20 20 75 33 32 20 6e 65 77 6d 61 73   */.  u32 newmas
21e80 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  k;         /* Ma
21e90 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75  sk of new.* colu
21ea0 6d 6e 73 20 72 65 66 65 72 65 6e 63 65 64 20 2a  mns referenced *
21eb0 2f 0a 20 20 75 38 20 65 54 72 69 67 67 65 72 4f  /.  u8 eTriggerO
21ec0 70 3b 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 55  p;       /* TK_U
21ed0 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54  PDATE, TK_INSERT
21ee0 20 6f 72 20 54 4b 5f 44 45 4c 45 54 45 20 2a 2f   or TK_DELETE */
21ef0 0a 20 20 75 38 20 65 4f 72 63 6f 6e 66 3b 20 20  .  u8 eOrconf;  
21f00 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
21f10 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70  lt ON CONFLICT p
21f20 6f 6c 69 63 79 20 66 6f 72 20 74 72 69 67 67 65  olicy for trigge
21f30 72 20 73 74 65 70 73 20 2a 2f 0a 20 20 75 38 20  r steps */.  u8 
21f40 64 69 73 61 62 6c 65 54 72 69 67 67 65 72 73 3b  disableTriggers;
21f50 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 64 69 73    /* True to dis
21f60 61 62 6c 65 20 74 72 69 67 67 65 72 73 20 2a 2f  able triggers */
21f70 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ..  /***********
21f80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21f90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21fa0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21fb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a  ***************.
21fc0 20 20 2a 2a 20 46 69 65 6c 64 73 20 61 62 6f 76    ** Fields abov
21fd0 65 20 6d 75 73 74 20 62 65 20 69 6e 69 74 69 61  e must be initia
21fe0 6c 69 7a 65 64 20 74 6f 20 7a 65 72 6f 2e 20 20  lized to zero.  
21ff0 54 68 65 20 66 69 65 6c 64 73 20 74 68 61 74 20  The fields that 
22000 66 6f 6c 6c 6f 77 2c 0a 20 20 2a 2a 20 64 6f 77  follow,.  ** dow
22010 6e 20 74 6f 20 74 68 65 20 62 65 67 69 6e 6e 69  n to the beginni
22020 6e 67 20 6f 66 20 74 68 65 20 72 65 63 75 72 73  ng of the recurs
22030 69 76 65 20 73 65 63 74 69 6f 6e 2c 20 64 6f 20  ive section, do 
22040 6e 6f 74 20 6e 65 65 64 20 74 6f 20 62 65 0a 20  not need to be. 
22050 20 2a 2a 20 69 6e 69 74 69 61 6c 69 7a 65 64 20   ** initialized 
22060 61 73 20 74 68 65 79 20 77 69 6c 6c 20 62 65 20  as they will be 
22070 73 65 74 20 62 65 66 6f 72 65 20 62 65 69 6e 67  set before being
22080 20 75 73 65 64 2e 20 20 54 68 65 20 62 6f 75 6e   used.  The boun
22090 64 61 72 79 20 69 73 0a 20 20 2a 2a 20 64 65 74  dary is.  ** det
220a0 65 72 6d 69 6e 65 64 20 62 79 20 6f 66 66 73 65  ermined by offse
220b0 74 6f 66 28 50 61 72 73 65 2c 61 54 65 6d 70 52  tof(Parse,aTempR
220c0 65 67 29 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a  eg)..  *********
220d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
220e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
220f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
22100 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
22110 2a 2f 0a 0a 20 20 69 6e 74 20 61 54 65 6d 70 52  */..  int aTempR
22120 65 67 5b 38 5d 3b 20 20 20 20 20 20 20 20 2f 2a  eg[8];        /*
22130 20 48 6f 6c 64 69 6e 67 20 61 72 65 61 20 66 6f   Holding area fo
22140 72 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69  r temporary regi
22150 73 74 65 72 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e  sters */.  Token
22160 20 73 4e 61 6d 65 54 6f 6b 65 6e 3b 20 20 20 20   sNameToken;    
22170 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 77 69 74 68     /* Token with
22180 20 75 6e 71 75 61 6c 69 66 69 65 64 20 73 63 68   unqualified sch
22190 65 6d 61 20 6f 62 6a 65 63 74 20 6e 61 6d 65 20  ema object name 
221a0 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a  */..  /*********
221b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
221c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
221d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
221e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a  ***************.
221f0 20 20 2a 2a 20 41 62 6f 76 65 20 69 73 20 63 6f    ** Above is co
22200 6e 73 74 61 6e 74 20 62 65 74 77 65 65 6e 20 72  nstant between r
22210 65 63 75 72 73 69 6f 6e 73 2e 20 20 42 65 6c 6f  ecursions.  Belo
22220 77 20 69 73 20 72 65 73 65 74 20 62 65 66 6f 72  w is reset befor
22230 65 20 61 6e 64 20 61 66 74 65 72 0a 20 20 2a 2a  e and after.  **
22240 20 65 61 63 68 20 72 65 63 75 72 73 69 6f 6e 2e   each recursion.
22250 20 20 54 68 65 20 62 6f 75 6e 64 61 72 79 20 62    The boundary b
22260 65 74 77 65 65 6e 20 74 68 65 73 65 20 74 77 6f  etween these two
22270 20 72 65 67 69 6f 6e 73 20 69 73 20 64 65 74 65   regions is dete
22280 72 6d 69 6e 65 64 0a 20 20 2a 2a 20 75 73 69 6e  rmined.  ** usin
22290 67 20 6f 66 66 73 65 74 6f 66 28 50 61 72 73 65  g offsetof(Parse
222a0 2c 73 4c 61 73 74 54 6f 6b 65 6e 29 20 73 6f 20  ,sLastToken) so 
222b0 74 68 65 20 73 4c 61 73 74 54 6f 6b 65 6e 20 66  the sLastToken f
222c0 69 65 6c 64 20 6d 75 73 74 20 62 65 20 74 68 65  ield must be the
222d0 0a 20 20 2a 2a 20 66 69 72 73 74 20 66 69 65 6c  .  ** first fiel
222e0 64 20 69 6e 20 74 68 65 20 72 65 63 75 72 73 69  d in the recursi
222f0 76 65 20 72 65 67 69 6f 6e 2e 0a 20 20 2a 2a 2a  ve region..  ***
22300 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
22310 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
22320 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
22330 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
22340 2a 2a 2a 2a 2a 2f 0a 0a 20 20 54 6f 6b 65 6e 20  *****/..  Token 
22350 73 4c 61 73 74 54 6f 6b 65 6e 3b 20 20 20 20 20  sLastToken;     
22360 20 20 2f 2a 20 54 68 65 20 6c 61 73 74 20 74 6f    /* The last to
22370 6b 65 6e 20 70 61 72 73 65 64 20 2a 2f 0a 20 20  ken parsed */.  
22380 79 6e 56 61 72 20 6e 56 61 72 3b 20 20 20 20 20  ynVar nVar;     
22390 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
223a0 62 65 72 20 6f 66 20 27 3f 27 20 76 61 72 69 61  ber of '?' varia
223b0 62 6c 65 73 20 73 65 65 6e 20 69 6e 20 74 68 65  bles seen in the
223c0 20 53 51 4c 20 73 6f 20 66 61 72 20 2a 2f 0a 20   SQL so far */. 
223d0 20 75 38 20 69 50 6b 53 6f 72 74 4f 72 64 65 72   u8 iPkSortOrder
223e0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 53  ;          /* AS
223f0 43 20 6f 72 20 44 45 53 43 20 66 6f 72 20 49 4e  C or DESC for IN
22400 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
22410 59 20 2a 2f 0a 20 20 75 38 20 65 78 70 6c 61 69  Y */.  u8 explai
22420 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n;              
22430 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 20   /* True if the 
22440 45 58 50 4c 41 49 4e 20 66 6c 61 67 20 69 73 20  EXPLAIN flag is 
22450 66 6f 75 6e 64 20 6f 6e 20 74 68 65 20 71 75 65  found on the que
22460 72 79 20 2a 2f 0a 23 69 66 20 21 28 64 65 66 69  ry */.#if !(defi
22470 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
22480 56 49 52 54 55 41 4c 54 41 42 4c 45 29 20 26 26  VIRTUALTABLE) &&
22490 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
224a0 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c 45 29  OMIT_ALTERTABLE)
224b0 29 0a 20 20 75 38 20 65 50 61 72 73 65 4d 6f 64  ).  u8 eParseMod
224c0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
224d0 20 50 41 52 53 45 5f 4d 4f 44 45 5f 58 58 58 20   PARSE_MODE_XXX 
224e0 63 6f 6e 73 74 61 6e 74 20 2a 2f 0a 23 65 6e 64  constant */.#end
224f0 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
22500 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
22510 42 4c 45 0a 20 20 69 6e 74 20 6e 56 74 61 62 4c  BLE.  int nVtabL
22520 6f 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20  ock;            
22530 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 76 69 72  /* Number of vir
22540 74 75 61 6c 20 74 61 62 6c 65 73 20 74 6f 20 6c  tual tables to l
22550 6f 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ock */.#endif.  
22560 69 6e 74 20 6e 48 65 69 67 68 74 3b 20 20 20 20  int nHeight;    
22570 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70            /* Exp
22580 72 65 73 73 69 6f 6e 20 74 72 65 65 20 68 65 69  ression tree hei
22590 67 68 74 20 6f 66 20 63 75 72 72 65 6e 74 20 73  ght of current s
225a0 75 62 2d 73 65 6c 65 63 74 20 2a 2f 0a 23 69 66  ub-select */.#if
225b0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
225c0 5f 45 58 50 4c 41 49 4e 0a 20 20 69 6e 74 20 61  _EXPLAIN.  int a
225d0 64 64 72 45 78 70 6c 61 69 6e 3b 20 20 20 20 20  ddrExplain;     
225e0 20 20 20 20 20 2f 2a 20 41 64 64 72 65 73 73 20       /* Address 
225f0 6f 66 20 63 75 72 72 65 6e 74 20 4f 50 5f 45 78  of current OP_Ex
22600 70 6c 61 69 6e 20 6f 70 63 6f 64 65 20 2a 2f 0a  plain opcode */.
22610 23 65 6e 64 69 66 0a 20 20 56 4c 69 73 74 20 2a  #endif.  VList *
22620 70 56 4c 69 73 74 3b 20 20 20 20 20 20 20 20 20  pVList;         
22630 20 20 20 2f 2a 20 4d 61 70 70 69 6e 67 20 62 65     /* Mapping be
22640 74 77 65 65 6e 20 76 61 72 69 61 62 6c 65 20 6e  tween variable n
22650 61 6d 65 73 20 61 6e 64 20 6e 75 6d 62 65 72 73  ames and numbers
22660 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 52 65 70   */.  Vdbe *pRep
22670 72 65 70 61 72 65 3b 20 20 20 20 20 20 20 20 20  repare;         
22680 2f 2a 20 56 4d 20 62 65 69 6e 67 20 72 65 70 72  /* VM being repr
22690 65 70 61 72 65 64 20 28 73 71 6c 69 74 65 33 52  epared (sqlite3R
226a0 65 70 72 65 70 61 72 65 28 29 29 20 2a 2f 0a 20  eprepare()) */. 
226b0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61   const char *zTa
226c0 69 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c  il;        /* Al
226d0 6c 20 53 51 4c 20 74 65 78 74 20 70 61 73 74 20  l SQL text past 
226e0 74 68 65 20 6c 61 73 74 20 73 65 6d 69 63 6f 6c  the last semicol
226f0 6f 6e 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 54  on parsed */.  T
22700 61 62 6c 65 20 2a 70 4e 65 77 54 61 62 6c 65 3b  able *pNewTable;
22710 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 74 61           /* A ta
22720 62 6c 65 20 62 65 69 6e 67 20 63 6f 6e 73 74 72  ble being constr
22730 75 63 74 65 64 20 62 79 20 43 52 45 41 54 45 20  ucted by CREATE 
22740 54 41 42 4c 45 20 2a 2f 0a 20 20 49 6e 64 65 78  TABLE */.  Index
22750 20 2a 70 4e 65 77 49 6e 64 65 78 3b 20 20 20 20   *pNewIndex;    
22760 20 20 20 20 20 2f 2a 20 41 6e 20 69 6e 64 65 78       /* An index
22770 20 62 65 69 6e 67 20 63 6f 6e 73 74 72 75 63 74   being construct
22780 65 64 20 62 79 20 43 52 45 41 54 45 20 49 4e 44  ed by CREATE IND
22790 45 58 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20  EX..            
227a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
227b0 2a 2a 20 41 6c 73 6f 20 75 73 65 64 20 74 6f 20  ** Also used to 
227c0 68 6f 6c 64 20 72 65 64 75 6e 64 61 6e 74 20 55  hold redundant U
227d0 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74  NIQUE constraint
227e0 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s.              
227f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
22800 20 64 75 72 69 6e 67 20 61 20 52 45 4e 41 4d 45   during a RENAME
22810 20 43 4f 4c 55 4d 4e 20 2a 2f 0a 20 20 54 72 69   COLUMN */.  Tri
22820 67 67 65 72 20 2a 70 4e 65 77 54 72 69 67 67 65  gger *pNewTrigge
22830 72 3b 20 20 20 20 20 2f 2a 20 54 72 69 67 67 65  r;     /* Trigge
22840 72 20 75 6e 64 65 72 20 63 6f 6e 73 74 72 75 63  r under construc
22850 74 20 62 79 20 61 20 43 52 45 41 54 45 20 54 52  t by a CREATE TR
22860 49 47 47 45 52 20 2a 2f 0a 20 20 63 6f 6e 73 74  IGGER */.  const
22870 20 63 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74   char *zAuthCont
22880 65 78 74 3b 20 2f 2a 20 54 68 65 20 36 74 68 20  ext; /* The 6th 
22890 70 61 72 61 6d 65 74 65 72 20 74 6f 20 64 62 2d  parameter to db-
228a0 3e 78 41 75 74 68 20 63 61 6c 6c 62 61 63 6b 73  >xAuth callbacks
228b0 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
228c0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
228d0 41 42 4c 45 0a 20 20 54 6f 6b 65 6e 20 73 41 72  ABLE.  Token sAr
228e0 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
228f0 20 2f 2a 20 43 6f 6d 70 6c 65 74 65 20 74 65 78   /* Complete tex
22900 74 20 6f 66 20 61 20 6d 6f 64 75 6c 65 20 61 72  t of a module ar
22910 67 75 6d 65 6e 74 20 2a 2f 0a 20 20 54 61 62 6c  gument */.  Tabl
22920 65 20 2a 2a 61 70 56 74 61 62 4c 6f 63 6b 3b 20  e **apVtabLock; 
22930 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72        /* Pointer
22940 20 74 6f 20 76 69 72 74 75 61 6c 20 74 61 62 6c   to virtual tabl
22950 65 73 20 6e 65 65 64 69 6e 67 20 6c 6f 63 6b 69  es needing locki
22960 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54  ng */.#endif.  T
22970 61 62 6c 65 20 2a 70 5a 6f 6d 62 69 65 54 61 62  able *pZombieTab
22980 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74  ;        /* List
22990 20 6f 66 20 54 61 62 6c 65 20 6f 62 6a 65 63 74   of Table object
229a0 73 20 74 6f 20 64 65 6c 65 74 65 20 61 66 74 65  s to delete afte
229b0 72 20 63 6f 64 65 20 67 65 6e 20 2a 2f 0a 20 20  r code gen */.  
229c0 54 72 69 67 67 65 72 50 72 67 20 2a 70 54 72 69  TriggerPrg *pTri
229d0 67 67 65 72 50 72 67 3b 20 20 2f 2a 20 4c 69 6e  ggerPrg;  /* Lin
229e0 6b 65 64 20 6c 69 73 74 20 6f 66 20 63 6f 64 65  ked list of code
229f0 64 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 20 20  d triggers */.  
22a00 57 69 74 68 20 2a 70 57 69 74 68 3b 20 20 20 20  With *pWith;    
22a10 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72            /* Cur
22a20 72 65 6e 74 20 57 49 54 48 20 63 6c 61 75 73 65  rent WITH clause
22a30 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 57  , or NULL */.  W
22a40 69 74 68 20 2a 70 57 69 74 68 54 6f 46 72 65 65  ith *pWithToFree
22a50 3b 20 20 20 20 20 20 20 20 2f 2a 20 46 72 65 65  ;        /* Free
22a60 20 74 68 69 73 20 57 49 54 48 20 6f 62 6a 65 63   this WITH objec
22a70 74 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20  t at the end of 
22a80 74 68 65 20 70 61 72 73 65 20 2a 2f 0a 23 69 66  the parse */.#if
22a90 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
22aa0 5f 41 4c 54 45 52 54 41 42 4c 45 0a 20 20 52 65  _ALTERTABLE.  Re
22ab0 6e 61 6d 65 54 6f 6b 65 6e 20 2a 70 52 65 6e 61  nameToken *pRena
22ac0 6d 65 3b 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e  me;     /* Token
22ad0 73 20 73 75 62 6a 65 63 74 20 74 6f 20 72 65 6e  s subject to ren
22ae0 61 6d 69 6e 67 20 62 79 20 41 4c 54 45 52 20 54  aming by ALTER T
22af0 41 42 4c 45 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d  ABLE */.#endif.}
22b00 3b 0a 0a 23 64 65 66 69 6e 65 20 50 41 52 53 45  ;..#define PARSE
22b10 5f 4d 4f 44 45 5f 4e 4f 52 4d 41 4c 20 20 20 20  _MODE_NORMAL    
22b20 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20 50 41      0.#define PA
22b30 52 53 45 5f 4d 4f 44 45 5f 44 45 43 4c 41 52 45  RSE_MODE_DECLARE
22b40 5f 56 54 41 42 20 20 31 0a 23 64 65 66 69 6e 65  _VTAB  1.#define
22b50 20 50 41 52 53 45 5f 4d 4f 44 45 5f 52 45 4e 41   PARSE_MODE_RENA
22b60 4d 45 5f 43 4f 4c 55 4d 4e 20 32 0a 23 64 65 66  ME_COLUMN 2.#def
22b70 69 6e 65 20 50 41 52 53 45 5f 4d 4f 44 45 5f 52  ine PARSE_MODE_R
22b80 45 4e 41 4d 45 5f 54 41 42 4c 45 20 20 33 0a 0a  ENAME_TABLE  3..
22b90 2f 2a 0a 2a 2a 20 53 69 7a 65 73 20 61 6e 64 20  /*.** Sizes and 
22ba0 70 6f 69 6e 74 65 72 73 20 6f 66 20 76 61 72 69  pointers of vari
22bb0 6f 75 73 20 70 61 72 74 73 20 6f 66 20 74 68 65  ous parts of the
22bc0 20 50 61 72 73 65 20 6f 62 6a 65 63 74 2e 0a 2a   Parse object..*
22bd0 2f 0a 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f  /.#define PARSE_
22be0 48 44 52 5f 53 5a 20 6f 66 66 73 65 74 6f 66 28  HDR_SZ offsetof(
22bf0 50 61 72 73 65 2c 61 54 65 6d 70 52 65 67 29 20  Parse,aTempReg) 
22c00 2f 2a 20 52 65 63 75 72 73 69 76 65 20 70 61 72  /* Recursive par
22c10 74 20 77 2f 6f 20 61 43 6f 6c 43 61 63 68 65 2a  t w/o aColCache*
22c20 2f 0a 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f  /.#define PARSE_
22c30 52 45 43 55 52 53 45 5f 53 5a 20 6f 66 66 73 65  RECURSE_SZ offse
22c40 74 6f 66 28 50 61 72 73 65 2c 73 4c 61 73 74 54  tof(Parse,sLastT
22c50 6f 6b 65 6e 29 20 20 20 20 2f 2a 20 52 65 63 75  oken)    /* Recu
22c60 72 73 69 76 65 20 70 61 72 74 20 2a 2f 0a 23 64  rsive part */.#d
22c70 65 66 69 6e 65 20 50 41 52 53 45 5f 54 41 49 4c  efine PARSE_TAIL
22c80 5f 53 5a 20 28 73 69 7a 65 6f 66 28 50 61 72 73  _SZ (sizeof(Pars
22c90 65 29 2d 50 41 52 53 45 5f 52 45 43 55 52 53 45  e)-PARSE_RECURSE
22ca0 5f 53 5a 29 20 2f 2a 20 4e 6f 6e 2d 72 65 63 75  _SZ) /* Non-recu
22cb0 72 73 69 76 65 20 70 61 72 74 20 2a 2f 0a 23 64  rsive part */.#d
22cc0 65 66 69 6e 65 20 50 41 52 53 45 5f 54 41 49 4c  efine PARSE_TAIL
22cd0 28 58 29 20 28 28 28 63 68 61 72 2a 29 28 58 29  (X) (((char*)(X)
22ce0 29 2b 50 41 52 53 45 5f 52 45 43 55 52 53 45 5f  )+PARSE_RECURSE_
22cf0 53 5a 29 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20  SZ)  /* Pointer 
22d00 74 6f 20 74 61 69 6c 20 2a 2f 0a 0a 2f 2a 0a 2a  to tail */../*.*
22d10 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66  * Return true if
22d20 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 73 69 64   currently insid
22d30 65 20 61 6e 20 73 71 6c 69 74 65 33 5f 64 65 63  e an sqlite3_dec
22d40 6c 61 72 65 5f 76 74 61 62 28 29 20 63 61 6c 6c  lare_vtab() call
22d50 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
22d60 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
22d70 41 42 4c 45 0a 20 20 23 64 65 66 69 6e 65 20 49  ABLE.  #define I
22d80 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41 42 20 30  N_DECLARE_VTAB 0
22d90 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
22da0 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41 42   IN_DECLARE_VTAB
22db0 20 28 70 50 61 72 73 65 2d 3e 65 50 61 72 73 65   (pParse->eParse
22dc0 4d 6f 64 65 3d 3d 50 41 52 53 45 5f 4d 4f 44 45  Mode==PARSE_MODE
22dd0 5f 44 45 43 4c 41 52 45 5f 56 54 41 42 29 0a 23  _DECLARE_VTAB).#
22de0 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e  endif..#if defin
22df0 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ed(SQLITE_OMIT_A
22e00 4c 54 45 52 54 41 42 4c 45 29 0a 20 20 23 64 65  LTERTABLE).  #de
22e10 66 69 6e 65 20 49 4e 5f 52 45 4e 41 4d 45 5f 4f  fine IN_RENAME_O
22e20 42 4a 45 43 54 20 30 0a 23 65 6c 73 65 0a 20 20  BJECT 0.#else.  
22e30 23 64 65 66 69 6e 65 20 49 4e 5f 52 45 4e 41 4d  #define IN_RENAM
22e40 45 5f 4f 42 4a 45 43 54 20 28 70 50 61 72 73 65  E_OBJECT (pParse
22e50 2d 3e 65 50 61 72 73 65 4d 6f 64 65 3e 3d 50 41  ->eParseMode>=PA
22e60 52 53 45 5f 4d 4f 44 45 5f 52 45 4e 41 4d 45 5f  RSE_MODE_RENAME_
22e70 43 4f 4c 55 4d 4e 29 0a 23 65 6e 64 69 66 0a 0a  COLUMN).#endif..
22e80 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
22e90 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
22ea0 41 42 4c 45 29 20 26 26 20 64 65 66 69 6e 65 64  ABLE) && defined
22eb0 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54  (SQLITE_OMIT_ALT
22ec0 45 52 54 41 42 4c 45 29 0a 20 20 23 64 65 66 69  ERTABLE).  #defi
22ed0 6e 65 20 49 4e 5f 53 50 45 43 49 41 4c 5f 50 41  ne IN_SPECIAL_PA
22ee0 52 53 45 20 30 0a 23 65 6c 73 65 0a 20 20 23 64  RSE 0.#else.  #d
22ef0 65 66 69 6e 65 20 49 4e 5f 53 50 45 43 49 41 4c  efine IN_SPECIAL
22f00 5f 50 41 52 53 45 20 28 70 50 61 72 73 65 2d 3e  _PARSE (pParse->
22f10 65 50 61 72 73 65 4d 6f 64 65 21 3d 50 41 52 53  eParseMode!=PARS
22f20 45 5f 4d 4f 44 45 5f 4e 4f 52 4d 41 4c 29 0a 23  E_MODE_NORMAL).#
22f30 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  endif../*.** An 
22f40 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
22f50 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
22f60 75 72 65 20 63 61 6e 20 62 65 20 64 65 63 6c 61  ure can be decla
22f70 72 65 64 20 6f 6e 20 61 20 73 74 61 63 6b 20 61  red on a stack a
22f80 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61  nd used.** to sa
22f90 76 65 20 74 68 65 20 50 61 72 73 65 2e 7a 41 75  ve the Parse.zAu
22fa0 74 68 43 6f 6e 74 65 78 74 20 76 61 6c 75 65 20  thContext value 
22fb0 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20 62  so that it can b
22fc0 65 20 72 65 73 74 6f 72 65 64 20 6c 61 74 65 72  e restored later
22fd0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 68  ..*/.struct Auth
22fe0 43 6f 6e 74 65 78 74 20 7b 0a 20 20 63 6f 6e 73  Context {.  cons
22ff0 74 20 63 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e  t char *zAuthCon
23000 74 65 78 74 3b 20 20 20 2f 2a 20 50 75 74 20 73  text;   /* Put s
23010 61 76 65 64 20 50 61 72 73 65 2e 7a 41 75 74 68  aved Parse.zAuth
23020 43 6f 6e 74 65 78 74 20 68 65 72 65 20 2a 2f 0a  Context here */.
23030 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b    Parse *pParse;
23040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
23050 20 54 68 65 20 50 61 72 73 65 20 73 74 72 75 63   The Parse struc
23060 74 75 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ture */.};../*.*
23070 2a 20 42 69 74 66 69 65 6c 64 20 66 6c 61 67 73  * Bitfield flags
23080 20 66 6f 72 20 50 35 20 76 61 6c 75 65 20 69 6e   for P5 value in
23090 20 76 61 72 69 6f 75 73 20 6f 70 63 6f 64 65 73   various opcodes
230a0 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f  ..**.** Value co
230b0 6e 73 74 72 61 69 6e 74 73 20 28 65 6e 66 6f 72  nstraints (enfor
230c0 63 65 64 20 76 69 61 20 61 73 73 65 72 74 28 29  ced via assert()
230d0 29 3a 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f  ):.**    OPFLAG_
230e0 4c 45 4e 47 54 48 41 52 47 20 20 20 20 3d 3d 20  LENGTHARG    == 
230f0 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e 47  SQLITE_FUNC_LENG
23100 54 48 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f  TH.**    OPFLAG_
23110 54 59 50 45 4f 46 41 52 47 20 20 20 20 3d 3d 20  TYPEOFARG    == 
23120 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59 50 45  SQLITE_FUNC_TYPE
23130 4f 46 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f  OF.**    OPFLAG_
23140 42 55 4c 4b 43 53 52 20 20 20 20 20 20 3d 3d 20  BULKCSR      == 
23150 42 54 52 45 45 5f 42 55 4c 4b 4c 4f 41 44 0a 2a  BTREE_BULKLOAD.*
23160 2a 20 20 20 20 4f 50 46 4c 41 47 5f 53 45 45 4b  *    OPFLAG_SEEK
23170 45 51 20 20 20 20 20 20 20 3d 3d 20 42 54 52 45  EQ       == BTRE
23180 45 5f 53 45 45 4b 5f 45 51 0a 2a 2a 20 20 20 20  E_SEEK_EQ.**    
23190 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45  OPFLAG_FORDELETE
231a0 20 20 20 20 3d 3d 20 42 54 52 45 45 5f 46 4f 52      == BTREE_FOR
231b0 44 45 4c 45 54 45 0a 2a 2a 20 20 20 20 4f 50 46  DELETE.**    OPF
231c0 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e  LAG_SAVEPOSITION
231d0 20 3d 3d 20 42 54 52 45 45 5f 53 41 56 45 50 4f   == BTREE_SAVEPO
231e0 53 49 54 49 4f 4e 0a 2a 2a 20 20 20 20 4f 50 46  SITION.**    OPF
231f0 4c 41 47 5f 41 55 58 44 45 4c 45 54 45 20 20 20  LAG_AUXDELETE   
23200 20 3d 3d 20 42 54 52 45 45 5f 41 55 58 44 45 4c   == BTREE_AUXDEL
23210 45 54 45 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ETE.*/.#define O
23220 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 20 20  PFLAG_NCHANGE   
23230 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f      0x01    /* O
23240 50 5f 49 6e 73 65 72 74 3a 20 53 65 74 20 74 6f  P_Insert: Set to
23250 20 75 70 64 61 74 65 20 64 62 2d 3e 6e 43 68 61   update db->nCha
23260 6e 67 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  nge */.         
23270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23280 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
23290 6c 73 6f 20 75 73 65 64 20 69 6e 20 50 32 20 28  lso used in P2 (
232a0 6e 6f 74 20 50 35 29 20 6f 66 20 4f 50 5f 44 65  not P5) of OP_De
232b0 6c 65 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  lete */.#define 
232c0 4f 50 46 4c 41 47 5f 4e 4f 43 48 4e 47 20 20 20  OPFLAG_NOCHNG   
232d0 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20       0x01    /* 
232e0 4f 50 5f 56 43 6f 6c 75 6d 6e 20 6e 6f 63 68 61  OP_VColumn nocha
232f0 6e 67 65 20 66 6f 72 20 55 50 44 41 54 45 20 2a  nge for UPDATE *
23300 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
23310 5f 45 50 48 45 4d 20 20 20 20 20 20 20 20 20 30  _EPHEM         0
23320 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c  x01    /* OP_Col
23330 75 6d 6e 3a 20 45 70 68 65 6d 65 72 61 6c 20 6f  umn: Ephemeral o
23340 75 74 70 75 74 20 69 73 20 6f 6b 20 2a 2f 0a 23  utput is ok */.#
23350 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 41  define OPFLAG_LA
23360 53 54 52 4f 57 49 44 20 20 20 20 20 30 78 32 30  STROWID     0x20
23370 20 20 20 20 2f 2a 20 53 65 74 20 74 6f 20 75 70      /* Set to up
23380 64 61 74 65 20 64 62 2d 3e 6c 61 73 74 52 6f 77  date db->lastRow
23390 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  id */.#define OP
233a0 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20 20 20  FLAG_ISUPDATE   
233b0 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20 54 68     0x04    /* Th
233c0 69 73 20 4f 50 5f 49 6e 73 65 72 74 20 69 73 20  is OP_Insert is 
233d0 61 6e 20 73 71 6c 20 55 50 44 41 54 45 20 2a 2f  an sql UPDATE */
233e0 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
233f0 41 50 50 45 4e 44 20 20 20 20 20 20 20 20 30 78  APPEND        0x
23400 30 38 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73  08    /* This is
23410 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20 61 6e   likely to be an
23420 20 61 70 70 65 6e 64 20 2a 2f 0a 23 64 65 66 69   append */.#defi
23430 6e 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45  ne OPFLAG_USESEE
23440 4b 52 45 53 55 4c 54 20 30 78 31 30 20 20 20 20  KRESULT 0x10    
23450 2f 2a 20 54 72 79 20 74 6f 20 61 76 6f 69 64 20  /* Try to avoid 
23460 61 20 73 65 65 6b 20 69 6e 20 42 74 72 65 65 49  a seek in BtreeI
23470 6e 73 65 72 74 28 29 20 2a 2f 0a 23 64 65 66 69  nsert() */.#defi
23480 6e 65 20 4f 50 46 4c 41 47 5f 49 53 4e 4f 4f 50  ne OPFLAG_ISNOOP
23490 20 20 20 20 20 20 20 20 30 78 34 30 20 20 20 20          0x40    
234a0 2f 2a 20 4f 50 5f 44 65 6c 65 74 65 20 64 6f 65  /* OP_Delete doe
234b0 73 20 70 72 65 2d 75 70 64 61 74 65 2d 68 6f 6f  s pre-update-hoo
234c0 6b 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e  k only */.#defin
234d0 65 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41  e OPFLAG_LENGTHA
234e0 52 47 20 20 20 20 20 30 78 34 30 20 20 20 20 2f  RG     0x40    /
234f0 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79  * OP_Column only
23500 20 75 73 65 64 20 66 6f 72 20 6c 65 6e 67 74 68   used for length
23510 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  () */.#define OP
23520 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 20 20  FLAG_TYPEOFARG  
23530 20 20 20 30 78 38 30 20 20 20 20 2f 2a 20 4f 50     0x80    /* OP
23540 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65  _Column only use
23550 64 20 66 6f 72 20 74 79 70 65 6f 66 28 29 20 2a  d for typeof() *
23560 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
23570 5f 42 55 4c 4b 43 53 52 20 20 20 20 20 20 20 30  _BULKCSR       0
23580 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65  x01    /* OP_Ope
23590 6e 2a 2a 20 75 73 65 64 20 74 6f 20 6f 70 65 6e  n** used to open
235a0 20 62 75 6c 6b 20 63 75 72 73 6f 72 20 2a 2f 0a   bulk cursor */.
235b0 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 53  #define OPFLAG_S
235c0 45 45 4b 45 51 20 20 20 20 20 20 20 20 30 78 30  EEKEQ        0x0
235d0 32 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a  2    /* OP_Open*
235e0 2a 20 63 75 72 73 6f 72 20 75 73 65 73 20 45 51  * cursor uses EQ
235f0 20 73 65 65 6b 20 6f 6e 6c 79 20 2a 2f 0a 23 64   seek only */.#d
23600 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 46 4f 52  efine OPFLAG_FOR
23610 44 45 4c 45 54 45 20 20 20 20 20 30 78 30 38 20  DELETE     0x08 
23620 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 20 73 68     /* OP_Open sh
23630 6f 75 6c 64 20 75 73 65 20 42 54 52 45 45 5f 46  ould use BTREE_F
23640 4f 52 44 45 4c 45 54 45 20 2a 2f 0a 23 64 65 66  ORDELETE */.#def
23650 69 6e 65 20 4f 50 46 4c 41 47 5f 50 32 49 53 52  ine OPFLAG_P2ISR
23660 45 47 20 20 20 20 20 20 20 30 78 31 30 20 20 20  EG       0x10   
23670 20 2f 2a 20 50 32 20 74 6f 20 4f 50 5f 4f 70 65   /* P2 to OP_Ope
23680 6e 2a 2a 20 69 73 20 61 20 72 65 67 69 73 74 65  n** is a registe
23690 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 23 64 65 66  r number */.#def
236a0 69 6e 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55  ine OPFLAG_PERMU
236b0 54 45 20 20 20 20 20 20 20 30 78 30 31 20 20 20  TE       0x01   
236c0 20 2f 2a 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20   /* OP_Compare: 
236d0 75 73 65 20 74 68 65 20 70 65 72 6d 75 74 61 74  use the permutat
236e0 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ion */.#define O
236f0 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49  PFLAG_SAVEPOSITI
23700 4f 4e 20 20 30 78 30 32 20 20 20 20 2f 2a 20 4f  ON  0x02    /* O
23710 50 5f 44 65 6c 65 74 65 2f 49 6e 73 65 72 74 3a  P_Delete/Insert:
23720 20 73 61 76 65 20 63 75 72 73 6f 72 20 70 6f 73   save cursor pos
23730 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
23740 41 47 5f 41 55 58 44 45 4c 45 54 45 20 20 20 20  AG_AUXDELETE    
23750 20 30 78 30 34 20 20 20 20 2f 2a 20 4f 50 5f 44   0x04    /* OP_D
23760 65 6c 65 74 65 3a 20 69 6e 64 65 78 20 69 6e 20  elete: index in 
23770 61 20 44 45 4c 45 54 45 20 6f 70 20 2a 2f 0a 23  a DELETE op */.#
23780 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4e 4f  define OPFLAG_NO
23790 43 48 4e 47 5f 4d 41 47 49 43 20 20 30 78 36 64  CHNG_MAGIC  0x6d
237a0 20 20 20 20 2f 2a 20 4f 50 5f 4d 61 6b 65 52 65      /* OP_MakeRe
237b0 63 6f 72 64 3a 20 73 65 72 69 61 6c 74 79 70 65  cord: serialtype
237c0 20 31 30 20 69 73 20 6f 6b 20 2a 2f 0a 0a 2f 2a   10 is ok */../*
237d0 0a 20 2a 20 45 61 63 68 20 74 72 69 67 67 65 72  . * Each trigger
237e0 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20   present in the 
237f0 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
23800 69 73 20 73 74 6f 72 65 64 20 61 73 20 61 6e 20  is stored as an 
23810 69 6e 73 74 61 6e 63 65 20 6f 66 0a 20 2a 20 73  instance of. * s
23820 74 72 75 63 74 20 54 72 69 67 67 65 72 2e 0a 20  truct Trigger.. 
23830 2a 0a 20 2a 20 50 6f 69 6e 74 65 72 73 20 74 6f  *. * Pointers to
23840 20 69 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 74   instances of st
23850 72 75 63 74 20 54 72 69 67 67 65 72 20 61 72 65  ruct Trigger are
23860 20 73 74 6f 72 65 64 20 69 6e 20 74 77 6f 20 77   stored in two w
23870 61 79 73 2e 0a 20 2a 20 31 2e 20 49 6e 20 74 68  ays.. * 1. In th
23880 65 20 22 74 72 69 67 48 61 73 68 22 20 68 61 73  e "trigHash" has
23890 68 20 74 61 62 6c 65 20 28 70 61 72 74 20 6f 66  h table (part of
238a0 20 74 68 65 20 73 71 6c 69 74 65 33 2a 20 74 68   the sqlite3* th
238b0 61 74 20 72 65 70 72 65 73 65 6e 74 73 20 74 68  at represents th
238c0 65 0a 20 2a 20 20 20 20 64 61 74 61 62 61 73 65  e. *    database
238d0 29 2e 20 54 68 69 73 20 61 6c 6c 6f 77 73 20 54  ). This allows T
238e0 72 69 67 67 65 72 20 73 74 72 75 63 74 75 72 65  rigger structure
238f0 73 20 74 6f 20 62 65 20 72 65 74 72 69 65 76 65  s to be retrieve
23900 64 20 62 79 20 6e 61 6d 65 2e 0a 20 2a 20 32 2e  d by name.. * 2.
23910 20 41 6c 6c 20 74 72 69 67 67 65 72 73 20 61 73   All triggers as
23920 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20  sociated with a 
23930 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 66 6f 72  single table for
23940 6d 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 2c  m a linked list,
23950 20 75 73 69 6e 67 20 74 68 65 0a 20 2a 20 20 20   using the. *   
23960 20 70 4e 65 78 74 20 6d 65 6d 62 65 72 20 6f 66   pNext member of
23970 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 2e   struct Trigger.
23980 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   A pointer to th
23990 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20  e first element 
239a0 6f 66 20 74 68 65 0a 20 2a 20 20 20 20 6c 69 6e  of the. *    lin
239b0 6b 65 64 20 6c 69 73 74 20 69 73 20 73 74 6f 72  ked list is stor
239c0 65 64 20 61 73 20 74 68 65 20 22 70 54 72 69 67  ed as the "pTrig
239d0 67 65 72 22 20 6d 65 6d 62 65 72 20 6f 66 20 74  ger" member of t
239e0 68 65 20 61 73 73 6f 63 69 61 74 65 64 0a 20 2a  he associated. *
239f0 20 20 20 20 73 74 72 75 63 74 20 54 61 62 6c 65      struct Table
23a00 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22 73 74 65  .. *. * The "ste
23a10 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72 20 70  p_list" member p
23a20 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66 69 72  oints to the fir
23a30 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 61 20  st element of a 
23a40 6c 69 6e 6b 65 64 20 6c 69 73 74 0a 20 2a 20 63  linked list. * c
23a50 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 53 51  ontaining the SQ
23a60 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 73 70 65  L statements spe
23a70 63 69 66 69 65 64 20 61 73 20 74 68 65 20 74 72  cified as the tr
23a80 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 0a 20  igger program.. 
23a90 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67 65  */.struct Trigge
23aa0 72 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  r {.  char *zNam
23ab0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
23ac0 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   The name of the
23ad0 20 74 72 69 67 67 65 72 20 20 20 20 20 20 20 20   trigger        
23ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23af0 2a 2f 0a 20 20 63 68 61 72 20 2a 74 61 62 6c 65  */.  char *table
23b00 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
23b10 54 68 65 20 74 61 62 6c 65 20 6f 72 20 76 69 65  The table or vie
23b20 77 20 74 6f 20 77 68 69 63 68 20 74 68 65 20 74  w to which the t
23b30 72 69 67 67 65 72 20 61 70 70 6c 69 65 73 20 2a  rigger applies *
23b40 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20  /.  u8 op;      
23b50 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
23b60 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c  ne of TK_DELETE,
23b70 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49   TK_UPDATE, TK_I
23b80 4e 53 45 52 54 20 20 20 20 20 20 20 20 20 2a 2f  NSERT         */
23b90 0a 20 20 75 38 20 74 72 5f 74 6d 3b 20 20 20 20  .  u8 tr_tm;    
23ba0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e             /* On
23bb0 65 20 6f 66 20 54 52 49 47 47 45 52 5f 42 45 46  e of TRIGGER_BEF
23bc0 4f 52 45 2c 20 54 52 49 47 47 45 52 5f 41 46 54  ORE, TRIGGER_AFT
23bd0 45 52 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57  ER */.  Expr *pW
23be0 68 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  hen;            
23bf0 2f 2a 20 54 68 65 20 57 48 45 4e 20 63 6c 61 75  /* The WHEN clau
23c00 73 65 20 6f 66 20 74 68 65 20 65 78 70 72 65 73  se of the expres
23c10 73 69 6f 6e 20 28 6d 61 79 20 62 65 20 4e 55 4c  sion (may be NUL
23c20 4c 29 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a  L) */.  IdList *
23c30 70 43 6f 6c 75 6d 6e 73 3b 20 20 20 20 20 20 20  pColumns;       
23c40 2f 2a 20 49 66 20 74 68 69 73 20 69 73 20 61 6e  /* If this is an
23c50 20 55 50 44 41 54 45 20 4f 46 20 3c 63 6f 6c 75   UPDATE OF <colu
23c60 6d 6e 2d 6c 69 73 74 3e 20 74 72 69 67 67 65 72  mn-list> trigger
23c70 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
23c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
23c90 68 65 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e  he <column-list>
23ca0 20 69 73 20 73 74 6f 72 65 64 20 68 65 72 65 20   is stored here 
23cb0 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63  */.  Schema *pSc
23cc0 68 65 6d 61 3b 20 20 20 20 20 20 20 20 2f 2a 20  hema;        /* 
23cd0 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e  Schema containin
23ce0 67 20 74 68 65 20 74 72 69 67 67 65 72 20 2a 2f  g the trigger */
23cf0 0a 20 20 53 63 68 65 6d 61 20 2a 70 54 61 62 53  .  Schema *pTabS
23d00 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63  chema;     /* Sc
23d10 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20  hema containing 
23d20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54  the table */.  T
23d30 72 69 67 67 65 72 53 74 65 70 20 2a 73 74 65 70  riggerStep *step
23d40 5f 6c 69 73 74 3b 20 2f 2a 20 4c 69 6e 6b 20 6c  _list; /* Link l
23d50 69 73 74 20 6f 66 20 74 72 69 67 67 65 72 20 70  ist of trigger p
23d60 72 6f 67 72 61 6d 20 73 74 65 70 73 20 20 20 20  rogram steps    
23d70 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 54 72           */.  Tr
23d80 69 67 67 65 72 20 2a 70 4e 65 78 74 3b 20 20 20  igger *pNext;   
23d90 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 74 72        /* Next tr
23da0 69 67 67 65 72 20 61 73 73 6f 63 69 61 74 65 64  igger associated
23db0 20 77 69 74 68 20 74 68 65 20 74 61 62 6c 65 20   with the table 
23dc0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 74  */.};../*.** A t
23dd0 72 69 67 67 65 72 20 69 73 20 65 69 74 68 65 72  rigger is either
23de0 20 61 20 42 45 46 4f 52 45 20 6f 72 20 61 6e 20   a BEFORE or an 
23df0 41 46 54 45 52 20 74 72 69 67 67 65 72 2e 20 20  AFTER trigger.  
23e00 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f  The following co
23e10 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65 74 65 72  nstants.** deter
23e20 6d 69 6e 65 20 77 68 69 63 68 2e 0a 2a 2a 0a 2a  mine which..**.*
23e30 2a 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6d  * If there are m
23e40 75 6c 74 69 70 6c 65 20 74 72 69 67 67 65 72 73  ultiple triggers
23e50 2c 20 79 6f 75 20 6d 69 67 68 74 20 6f 66 20 73  , you might of s
23e60 6f 6d 65 20 42 45 46 4f 52 45 20 61 6e 64 20 73  ome BEFORE and s
23e70 6f 6d 65 20 41 46 54 45 52 2e 0a 2a 2a 20 49 6e  ome AFTER..** In
23e80 20 74 68 61 74 20 63 61 73 65 73 2c 20 74 68 65   that cases, the
23e90 20 63 6f 6e 73 74 61 6e 74 73 20 62 65 6c 6f 77   constants below
23ea0 20 63 61 6e 20 62 65 20 4f 52 65 64 20 74 6f 67   can be ORed tog
23eb0 65 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e  ether..*/.#defin
23ec0 65 20 54 52 49 47 47 45 52 5f 42 45 46 4f 52 45  e TRIGGER_BEFORE
23ed0 20 20 31 0a 23 64 65 66 69 6e 65 20 54 52 49 47    1.#define TRIG
23ee0 47 45 52 5f 41 46 54 45 52 20 20 20 32 0a 0a 2f  GER_AFTER   2../
23ef0 2a 0a 20 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *. * An instance
23f00 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67   of struct Trigg
23f10 65 72 53 74 65 70 20 69 73 20 75 73 65 64 20 74  erStep is used t
23f20 6f 20 73 74 6f 72 65 20 61 20 73 69 6e 67 6c 65  o store a single
23f30 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 0a 20   SQL statement. 
23f40 2a 20 74 68 61 74 20 69 73 20 61 20 70 61 72 74  * that is a part
23f50 20 6f 66 20 61 20 74 72 69 67 67 65 72 2d 70 72   of a trigger-pr
23f60 6f 67 72 61 6d 2e 0a 20 2a 0a 20 2a 20 49 6e 73  ogram.. *. * Ins
23f70 74 61 6e 63 65 73 20 6f 66 20 73 74 72 75 63 74  tances of struct
23f80 20 54 72 69 67 67 65 72 53 74 65 70 20 61 72 65   TriggerStep are
23f90 20 73 74 6f 72 65 64 20 69 6e 20 61 20 73 69 6e   stored in a sin
23fa0 67 6c 79 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  gly linked list 
23fb0 28 6c 69 6e 6b 65 64 0a 20 2a 20 75 73 69 6e 67  (linked. * using
23fc0 20 74 68 65 20 22 70 4e 65 78 74 22 20 6d 65 6d   the "pNext" mem
23fd0 62 65 72 29 20 72 65 66 65 72 65 6e 63 65 64 20  ber) referenced 
23fe0 62 79 20 74 68 65 20 22 73 74 65 70 5f 6c 69 73  by the "step_lis
23ff0 74 22 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65  t" member of the
24000 0a 20 2a 20 61 73 73 6f 63 69 61 74 65 64 20 73  . * associated s
24010 74 72 75 63 74 20 54 72 69 67 67 65 72 20 69 6e  truct Trigger in
24020 73 74 61 6e 63 65 2e 20 54 68 65 20 66 69 72 73  stance. The firs
24030 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65  t element of the
24040 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69 73 0a   linked list is.
24050 20 2a 20 74 68 65 20 66 69 72 73 74 20 73 74 65   * the first ste
24060 70 20 6f 66 20 74 68 65 20 74 72 69 67 67 65 72  p of the trigger
24070 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a 0a 20 2a 20  -program.. *. * 
24080 54 68 65 20 22 6f 70 22 20 6d 65 6d 62 65 72 20  The "op" member 
24090 69 6e 64 69 63 61 74 65 73 20 77 68 65 74 68 65  indicates whethe
240a0 72 20 74 68 69 73 20 69 73 20 61 20 22 44 45 4c  r this is a "DEL
240b0 45 54 45 22 2c 20 22 49 4e 53 45 52 54 22 2c 20  ETE", "INSERT", 
240c0 22 55 50 44 41 54 45 22 20 6f 72 0a 20 2a 20 22  "UPDATE" or. * "
240d0 53 45 4c 45 43 54 22 20 73 74 61 74 65 6d 65 6e  SELECT" statemen
240e0 74 2e 20 54 68 65 20 6d 65 61 6e 69 6e 67 73 20  t. The meanings 
240f0 6f 66 20 74 68 65 20 6f 74 68 65 72 20 6d 65 6d  of the other mem
24100 62 65 72 73 20 69 73 20 64 65 74 65 72 6d 69 6e  bers is determin
24110 65 64 20 62 79 20 74 68 65 0a 20 2a 20 76 61 6c  ed by the. * val
24120 75 65 20 6f 66 20 22 6f 70 22 20 61 73 20 66 6f  ue of "op" as fo
24130 6c 6c 6f 77 73 3a 0a 20 2a 0a 20 2a 20 28 6f 70  llows:. *. * (op
24140 20 3d 3d 20 54 4b 5f 49 4e 53 45 52 54 29 0a 20   == TK_INSERT). 
24150 2a 20 6f 72 63 6f 6e 66 20 20 20 20 2d 3e 20 73  * orconf    -> s
24160 74 6f 72 65 73 20 74 68 65 20 4f 4e 20 43 4f 4e  tores the ON CON
24170 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68 6d 0a  FLICT algorithm.
24180 20 2a 20 70 53 65 6c 65 63 74 20 20 20 2d 3e 20   * pSelect   -> 
24190 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e  If this is an IN
241a0 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 53 45  SERT INTO ... SE
241b0 4c 45 43 54 20 2e 2e 2e 20 73 74 61 74 65 6d 65  LECT ... stateme
241c0 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20 20  nt, then. *     
241d0 20 20 20 20 20 20 20 20 20 74 68 69 73 20 73 74           this st
241e0 6f 72 65 73 20 61 20 70 6f 69 6e 74 65 72 20 74  ores a pointer t
241f0 6f 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61  o the SELECT sta
24200 74 65 6d 65 6e 74 2e 20 4f 74 68 65 72 77 69 73  tement. Otherwis
24210 65 20 4e 55 4c 4c 2e 0a 20 2a 20 7a 54 61 72 67  e NULL.. * zTarg
24220 65 74 20 20 20 2d 3e 20 44 65 71 75 6f 74 65 64  et   -> Dequoted
24230 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
24240 6c 65 20 74 6f 20 69 6e 73 65 72 74 20 69 6e 74  le to insert int
24250 6f 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73 74 20  o.. * pExprList 
24260 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20 61 6e  -> If this is an
24270 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e   INSERT INTO ...
24280 20 56 41 4c 55 45 53 20 2e 2e 2e 20 73 74 61 74   VALUES ... stat
24290 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20  ement, then. *  
242a0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
242b0 20 73 74 6f 72 65 73 20 76 61 6c 75 65 73 20 74   stores values t
242c0 6f 20 62 65 20 69 6e 73 65 72 74 65 64 2e 20 4f  o be inserted. O
242d0 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20  therwise NULL.. 
242e0 2a 20 70 49 64 4c 69 73 74 20 20 20 2d 3e 20 49  * pIdList   -> I
242f0 66 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53  f this is an INS
24300 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 28 3c 63  ERT INTO ... (<c
24310 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 3e 29 20 56 41  olumn-names>) VA
24320 4c 55 45 53 20 2e 2e 2e 0a 20 2a 20 20 20 20 20  LUES .... *     
24330 20 20 20 20 20 20 20 20 20 73 74 61 74 65 6d 65           stateme
24340 6e 74 2c 20 74 68 65 6e 20 74 68 69 73 20 73 74  nt, then this st
24350 6f 72 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 2d  ores the column-
24360 6e 61 6d 65 73 20 74 6f 20 62 65 0a 20 2a 20 20  names to be. *  
24370 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 73 65              inse
24380 72 74 65 64 20 69 6e 74 6f 2e 0a 20 2a 0a 20 2a  rted into.. *. *
24390 20 28 6f 70 20 3d 3d 20 54 4b 5f 44 45 4c 45 54   (op == TK_DELET
243a0 45 29 0a 20 2a 20 7a 54 61 72 67 65 74 20 20 20  E). * zTarget   
243b0 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e 61 6d 65  -> Dequoted name
243c0 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f   of the table to
243d0 20 64 65 6c 65 74 65 20 66 72 6f 6d 2e 0a 20 2a   delete from.. *
243e0 20 70 57 68 65 72 65 20 20 20 20 2d 3e 20 54 68   pWhere    -> Th
243f0 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f  e WHERE clause o
24400 66 20 74 68 65 20 44 45 4c 45 54 45 20 73 74 61  f the DELETE sta
24410 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69 73  tement if one is
24420 20 73 70 65 63 69 66 69 65 64 2e 0a 20 2a 20 20   specified.. *  
24430 20 20 20 20 20 20 20 20 20 20 20 20 4f 74 68 65              Othe
24440 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 0a 20  rwise NULL.. *. 
24450 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 55 50 44 41  * (op == TK_UPDA
24460 54 45 29 0a 20 2a 20 7a 54 61 72 67 65 74 20 20  TE). * zTarget  
24470 20 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e 61 6d   -> Dequoted nam
24480 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  e of the table t
24490 6f 20 75 70 64 61 74 65 2e 0a 20 2a 20 70 57 68  o update.. * pWh
244a0 65 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57 48  ere    -> The WH
244b0 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68  ERE clause of th
244c0 65 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65  e UPDATE stateme
244d0 6e 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70 65  nt if one is spe
244e0 63 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20 20  cified.. *      
244f0 20 20 20 20 20 20 20 20 4f 74 68 65 72 77 69 73          Otherwis
24500 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 45 78 70 72  e NULL.. * pExpr
24510 4c 69 73 74 20 2d 3e 20 41 20 6c 69 73 74 20 6f  List -> A list o
24520 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 74 6f  f the columns to
24530 20 75 70 64 61 74 65 20 61 6e 64 20 74 68 65 20   update and the 
24540 65 78 70 72 65 73 73 69 6f 6e 73 20 74 6f 20 75  expressions to u
24550 70 64 61 74 65 0a 20 2a 20 20 20 20 20 20 20 20  pdate. *        
24560 20 20 20 20 20 20 74 68 65 6d 20 74 6f 2e 20 53        them to. S
24570 65 65 20 73 71 6c 69 74 65 33 55 70 64 61 74 65  ee sqlite3Update
24580 28 29 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e  () documentation
24590 20 6f 66 20 22 70 43 68 61 6e 67 65 73 22 0a 20   of "pChanges". 
245a0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61  *              a
245b0 72 67 75 6d 65 6e 74 2e 0a 20 2a 0a 20 2a 2f 0a  rgument.. *. */.
245c0 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74  struct TriggerSt
245d0 65 70 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20  ep {.  u8 op;   
245e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
245f0 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c  ne of TK_DELETE,
24600 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49   TK_UPDATE, TK_I
24610 4e 53 45 52 54 2c 20 54 4b 5f 53 45 4c 45 43 54  NSERT, TK_SELECT
24620 20 2a 2f 0a 20 20 75 38 20 6f 72 63 6f 6e 66 3b   */.  u8 orconf;
24630 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 45             /* OE
24640 5f 52 6f 6c 6c 62 61 63 6b 20 65 74 63 2e 20 2a  _Rollback etc. *
24650 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54 72  /.  Trigger *pTr
24660 69 67 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ig;      /* The 
24670 74 72 69 67 67 65 72 20 74 68 61 74 20 74 68 69  trigger that thi
24680 73 20 73 74 65 70 20 69 73 20 61 20 70 61 72 74  s step is a part
24690 20 6f 66 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20   of */.  Select 
246a0 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a  *pSelect;     /*
246b0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
246c0 74 20 6f 72 20 52 48 53 20 6f 66 20 49 4e 53 45  t or RHS of INSE
246d0 52 54 20 49 4e 54 4f 20 53 45 4c 45 43 54 20 2e  RT INTO SELECT .
246e0 2e 2e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54  .. */.  char *zT
246f0 61 72 67 65 74 3b 20 20 20 20 20 20 20 2f 2a 20  arget;       /* 
24700 54 61 72 67 65 74 20 74 61 62 6c 65 20 66 6f 72  Target table for
24710 20 44 45 4c 45 54 45 2c 20 55 50 44 41 54 45 2c   DELETE, UPDATE,
24720 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 45 78 70   INSERT */.  Exp
24730 72 20 2a 70 57 68 65 72 65 3b 20 20 20 20 20 20  r *pWhere;      
24740 20 20 2f 2a 20 54 68 65 20 57 48 45 52 45 20 63    /* The WHERE c
24750 6c 61 75 73 65 20 66 6f 72 20 44 45 4c 45 54 45  lause for DELETE
24760 20 6f 72 20 55 50 44 41 54 45 20 73 74 65 70 73   or UPDATE steps
24770 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
24780 70 45 78 70 72 4c 69 73 74 3b 20 2f 2a 20 53 45  pExprList; /* SE
24790 54 20 63 6c 61 75 73 65 20 66 6f 72 20 55 50 44  T clause for UPD
247a0 41 54 45 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20  ATE */.  IdList 
247b0 2a 70 49 64 4c 69 73 74 3b 20 20 20 20 20 2f 2a  *pIdList;     /*
247c0 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 66 6f   Column names fo
247d0 72 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 55 70  r INSERT */.  Up
247e0 73 65 72 74 20 2a 70 55 70 73 65 72 74 3b 20 20  sert *pUpsert;  
247f0 20 20 20 2f 2a 20 55 70 73 65 72 74 20 63 6c 61     /* Upsert cla
24800 75 73 65 73 20 6f 6e 20 61 6e 20 49 4e 53 45 52  uses on an INSER
24810 54 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 53 70  T */.  char *zSp
24820 61 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4f  an;         /* O
24830 72 69 67 69 6e 61 6c 20 53 51 4c 20 74 65 78 74  riginal SQL text
24840 20 6f 66 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64   of this command
24850 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65   */.  TriggerSte
24860 70 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65  p *pNext;  /* Ne
24870 78 74 20 69 6e 20 74 68 65 20 6c 69 6e 6b 2d 6c  xt in the link-l
24880 69 73 74 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  ist */.  Trigger
24890 53 74 65 70 20 2a 70 4c 61 73 74 3b 20 20 2f 2a  Step *pLast;  /*
248a0 20 4c 61 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e   Last element in
248b0 20 6c 69 6e 6b 2d 6c 69 73 74 2e 20 56 61 6c 69   link-list. Vali
248c0 64 20 66 6f 72 20 31 73 74 20 65 6c 65 6d 20 6f  d for 1st elem o
248d0 6e 6c 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  nly */.};../*.**
248e0 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   The following s
248f0 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e  tructure contain
24900 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73  s information us
24910 65 64 20 62 79 20 74 68 65 20 73 71 6c 69 74 65  ed by the sqlite
24920 46 69 78 2e 2e 2e 0a 2a 2a 20 72 6f 75 74 69 6e  Fix....** routin
24930 65 73 20 61 73 20 74 68 65 79 20 77 61 6c 6b 20  es as they walk 
24940 74 68 65 20 70 61 72 73 65 20 74 72 65 65 20 74  the parse tree t
24950 6f 20 6d 61 6b 65 20 64 61 74 61 62 61 73 65 20  o make database 
24960 72 65 66 65 72 65 6e 63 65 73 0a 2a 2a 20 65 78  references.** ex
24970 70 6c 69 63 69 74 2e 0a 2a 2f 0a 74 79 70 65 64  plicit..*/.typed
24980 65 66 20 73 74 72 75 63 74 20 44 62 46 69 78 65  ef struct DbFixe
24990 72 20 44 62 46 69 78 65 72 3b 0a 73 74 72 75 63  r DbFixer;.struc
249a0 74 20 44 62 46 69 78 65 72 20 7b 0a 20 20 50 61  t DbFixer {.  Pa
249b0 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20  rse *pParse;    
249c0 20 20 2f 2a 20 54 68 65 20 70 61 72 73 69 6e 67    /* The parsing
249d0 20 63 6f 6e 74 65 78 74 2e 20 20 45 72 72 6f 72   context.  Error
249e0 20 6d 65 73 73 61 67 65 73 20 77 72 69 74 74 65   messages writte
249f0 6e 20 68 65 72 65 20 2a 2f 0a 20 20 53 63 68 65  n here */.  Sche
24a00 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20  ma *pSchema;    
24a10 2f 2a 20 46 69 78 20 69 74 65 6d 73 20 74 6f 20  /* Fix items to 
24a20 74 68 69 73 20 73 63 68 65 6d 61 20 2a 2f 0a 20  this schema */. 
24a30 20 69 6e 74 20 62 56 61 72 4f 6e 6c 79 3b 20 20   int bVarOnly;  
24a40 20 20 20 20 20 2f 2a 20 43 68 65 63 6b 20 66 6f       /* Check fo
24a50 72 20 76 61 72 69 61 62 6c 65 20 72 65 66 65 72  r variable refer
24a60 65 6e 63 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20  ences only */.  
24a70 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 3b  const char *zDb;
24a80 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65      /* Make sure
24a90 20 61 6c 6c 20 6f 62 6a 65 63 74 73 20 61 72 65   all objects are
24aa0 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68   contained in th
24ab0 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20  is database */. 
24ac0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 79   const char *zTy
24ad0 70 65 3b 20 20 2f 2a 20 54 79 70 65 20 6f 66 20  pe;  /* Type of 
24ae0 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20  the container - 
24af0 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72 20 6d  used for error m
24b00 65 73 73 61 67 65 73 20 2a 2f 0a 20 20 63 6f 6e  essages */.  con
24b10 73 74 20 54 6f 6b 65 6e 20 2a 70 4e 61 6d 65 3b  st Token *pName;
24b20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20   /* Name of the 
24b30 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73 65 64  container - used
24b40 20 66 6f 72 20 65 72 72 6f 72 20 6d 65 73 73 61   for error messa
24b50 67 65 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ges */.};../*.**
24b60 20 41 6e 20 6f 62 6a 65 63 74 65 64 20 75 73 65   An objected use
24b70 64 20 74 6f 20 61 63 63 75 6d 75 6c 61 74 65 20  d to accumulate 
24b80 74 68 65 20 74 65 78 74 20 6f 66 20 61 20 73 74  the text of a st
24b90 72 69 6e 67 20 77 68 65 72 65 20 77 65 0a 2a 2a  ring where we.**
24ba0 20 64 6f 20 6e 6f 74 20 6e 65 63 65 73 73 61 72   do not necessar
24bb0 69 6c 79 20 6b 6e 6f 77 20 68 6f 77 20 62 69 67  ily know how big
24bc0 20 74 68 65 20 73 74 72 69 6e 67 20 77 69 6c 6c   the string will
24bd0 20 62 65 20 69 6e 20 74 68 65 20 65 6e 64 2e 0a   be in the end..
24be0 2a 2f 0a 73 74 72 75 63 74 20 73 71 6c 69 74 65  */.struct sqlite
24bf0 33 5f 73 74 72 20 7b 0a 20 20 73 71 6c 69 74 65  3_str {.  sqlite
24c00 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20 2f  3 *db;         /
24c10 2a 20 4f 70 74 69 6f 6e 61 6c 20 64 61 74 61 62  * Optional datab
24c20 61 73 65 20 66 6f 72 20 6c 6f 6f 6b 61 73 69 64  ase for lookasid
24c30 65 2e 20 20 43 61 6e 20 62 65 20 4e 55 4c 4c 20  e.  Can be NULL 
24c40 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 65 78 74  */.  char *zText
24c50 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
24c60 20 73 74 72 69 6e 67 20 63 6f 6c 6c 65 63 74 65   string collecte
24c70 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 75 33  d so far */.  u3
24c80 32 20 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20  2  nAlloc;      
24c90 20 20 20 2f 2a 20 41 6d 6f 75 6e 74 20 6f 66 20     /* Amount of 
24ca0 73 70 61 63 65 20 61 6c 6c 6f 63 61 74 65 64 20  space allocated 
24cb0 69 6e 20 7a 54 65 78 74 20 2a 2f 0a 20 20 75 33  in zText */.  u3
24cc0 32 20 20 6d 78 41 6c 6c 6f 63 3b 20 20 20 20 20  2  mxAlloc;     
24cd0 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 61 6c     /* Maximum al
24ce0 6c 6f 77 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e  lowed allocation
24cf0 2e 20 20 30 20 66 6f 72 20 6e 6f 20 6d 61 6c 6c  .  0 for no mall
24d00 6f 63 20 75 73 61 67 65 20 2a 2f 0a 20 20 75 33  oc usage */.  u3
24d10 32 20 20 6e 43 68 61 72 3b 20 20 20 20 20 20 20  2  nChar;       
24d20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20     /* Length of 
24d30 74 68 65 20 73 74 72 69 6e 67 20 73 6f 20 66 61  the string so fa
24d40 72 20 2a 2f 0a 20 20 75 38 20 20 20 61 63 63 45  r */.  u8   accE
24d50 72 72 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20 53  rror;       /* S
24d60 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 6f 72 20 53  QLITE_NOMEM or S
24d70 51 4c 49 54 45 5f 54 4f 4f 42 49 47 20 2a 2f 0a  QLITE_TOOBIG */.
24d80 20 20 75 38 20 20 20 70 72 69 6e 74 66 46 6c 61    u8   printfFla
24d90 67 73 3b 20 20 20 20 2f 2a 20 53 51 4c 49 54 45  gs;    /* SQLITE
24da0 5f 50 52 49 4e 54 46 20 66 6c 61 67 73 20 62 65  _PRINTF flags be
24db0 6c 6f 77 20 2a 2f 0a 7d 3b 0a 23 64 65 66 69 6e  low */.};.#defin
24dc0 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f  e SQLITE_PRINTF_
24dd0 49 4e 54 45 52 4e 41 4c 20 30 78 30 31 20 20 2f  INTERNAL 0x01  /
24de0 2a 20 49 6e 74 65 72 6e 61 6c 2d 75 73 65 2d 6f  * Internal-use-o
24df0 6e 6c 79 20 63 6f 6e 76 65 72 74 65 72 73 20 61  nly converters a
24e00 6c 6c 6f 77 65 64 20 2a 2f 0a 23 64 65 66 69 6e  llowed */.#defin
24e10 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f  e SQLITE_PRINTF_
24e20 53 51 4c 46 55 4e 43 20 20 30 78 30 32 20 20 2f  SQLFUNC  0x02  /
24e30 2a 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 61  * SQL function a
24e40 72 67 75 6d 65 6e 74 73 20 74 6f 20 56 58 50 72  rguments to VXPr
24e50 69 6e 74 66 20 2a 2f 0a 23 64 65 66 69 6e 65 20  intf */.#define 
24e60 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 4d 41  SQLITE_PRINTF_MA
24e70 4c 4c 4f 43 45 44 20 30 78 30 34 20 20 2f 2a 20  LLOCED 0x04  /* 
24e80 54 72 75 65 20 69 66 20 78 54 65 78 74 20 69 73  True if xText is
24e90 20 61 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65   allocated space
24ea0 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 69 73 4d   */..#define isM
24eb0 61 6c 6c 6f 63 65 64 28 58 29 20 20 28 28 28 58  alloced(X)  (((X
24ec0 29 2d 3e 70 72 69 6e 74 66 46 6c 61 67 73 20 26  )->printfFlags &
24ed0 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 4d   SQLITE_PRINTF_M
24ee0 41 4c 4c 4f 43 45 44 29 21 3d 30 29 0a 0a 0a 2f  ALLOCED)!=0).../
24ef0 2a 0a 2a 2a 20 41 20 70 6f 69 6e 74 65 72 20 74  *.** A pointer t
24f00 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  o this structure
24f10 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 6d   is used to comm
24f20 75 6e 69 63 61 74 65 20 69 6e 66 6f 72 6d 61 74  unicate informat
24f30 69 6f 6e 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c 69  ion.** from sqli
24f40 74 65 33 49 6e 69 74 20 61 6e 64 20 4f 50 5f 50  te3Init and OP_P
24f50 61 72 73 65 53 63 68 65 6d 61 20 69 6e 74 6f 20  arseSchema into 
24f60 74 68 65 20 73 71 6c 69 74 65 33 49 6e 69 74 43  the sqlite3InitC
24f70 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 74 79 70 65  allback..*/.type
24f80 64 65 66 20 73 74 72 75 63 74 20 7b 0a 20 20 73  def struct {.  s
24f90 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
24fa0 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
24fb0 73 65 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c  se being initial
24fc0 69 7a 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a  ized */.  char *
24fd0 2a 70 7a 45 72 72 4d 73 67 3b 20 20 20 20 2f 2a  *pzErrMsg;    /*
24fe0 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73   Error message s
24ff0 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20  tored here */.  
25000 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20 20  int iDb;        
25010 20 20 20 20 2f 2a 20 30 20 66 6f 72 20 6d 61 69      /* 0 for mai
25020 6e 20 64 61 74 61 62 61 73 65 2e 20 20 31 20 66  n database.  1 f
25030 6f 72 20 54 45 4d 50 2c 20 32 2e 2e 20 66 6f 72  or TEMP, 2.. for
25040 20 41 54 54 41 43 48 65 64 20 2a 2f 0a 20 20 69   ATTACHed */.  i
25050 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20 20 20  nt rc;          
25060 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 63 6f 64     /* Result cod
25070 65 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f  e stored here */
25080 0a 20 20 75 33 32 20 6d 49 6e 69 74 46 6c 61 67  .  u32 mInitFlag
25090 73 3b 20 20 20 20 20 2f 2a 20 46 6c 61 67 73 20  s;     /* Flags 
250a0 63 6f 6e 74 72 6f 6c 6c 69 6e 67 20 65 72 72 6f  controlling erro
250b0 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 20 20  r messages */.  
250c0 75 33 32 20 6e 49 6e 69 74 52 6f 77 3b 20 20 20  u32 nInitRow;   
250d0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
250e0 20 72 6f 77 73 20 70 72 6f 63 65 73 73 65 64 20   rows processed 
250f0 2a 2f 0a 7d 20 49 6e 69 74 44 61 74 61 3b 0a 0a  */.} InitData;..
25100 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61  /*.** Allowed va
25110 6c 75 65 73 20 66 6f 72 20 6d 49 6e 69 74 46 6c  lues for mInitFl
25120 61 67 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49  ags.*/.#define I
25130 4e 49 54 46 4c 41 47 5f 41 6c 74 65 72 54 61 62  NITFLAG_AlterTab
25140 6c 65 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20  le   0x0001  /* 
25150 54 68 69 73 20 69 73 20 61 20 72 65 70 61 72 73  This is a repars
25160 65 20 61 66 74 65 72 20 41 4c 54 45 52 20 54 41  e after ALTER TA
25170 42 4c 45 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53 74  BLE */../*.** St
25180 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 69  ructure containi
25190 6e 67 20 67 6c 6f 62 61 6c 20 63 6f 6e 66 69 67  ng global config
251a0 75 72 61 74 69 6f 6e 20 64 61 74 61 20 66 6f 72  uration data for
251b0 20 74 68 65 20 53 51 4c 69 74 65 20 6c 69 62 72   the SQLite libr
251c0 61 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ary..**.** This 
251d0 73 74 72 75 63 74 75 72 65 20 61 6c 73 6f 20 63  structure also c
251e0 6f 6e 74 61 69 6e 73 20 73 6f 6d 65 20 73 74 61  ontains some sta
251f0 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  te information..
25200 2a 2f 0a 73 74 72 75 63 74 20 53 71 6c 69 74 65  */.struct Sqlite
25210 33 43 6f 6e 66 69 67 20 7b 0a 20 20 69 6e 74 20  3Config {.  int 
25220 62 4d 65 6d 73 74 61 74 3b 20 20 20 20 20 20 20  bMemstat;       
25230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
25240 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20   True to enable 
25250 6d 65 6d 6f 72 79 20 73 74 61 74 75 73 20 2a 2f  memory status */
25260 0a 20 20 75 38 20 62 43 6f 72 65 4d 75 74 65 78  .  u8 bCoreMutex
25270 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
25280 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20       /* True to 
25290 65 6e 61 62 6c 65 20 63 6f 72 65 20 6d 75 74 65  enable core mute
252a0 78 69 6e 67 20 2a 2f 0a 20 20 75 38 20 62 46 75  xing */.  u8 bFu
252b0 6c 6c 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20  llMutex;        
252c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
252d0 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 66 75  rue to enable fu
252e0 6c 6c 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20  ll mutexing */. 
252f0 20 75 38 20 62 4f 70 65 6e 55 72 69 3b 20 20 20   u8 bOpenUri;   
25300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25310 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 69 6e     /* True to in
25320 74 65 72 70 72 65 74 20 66 69 6c 65 6e 61 6d 65  terpret filename
25330 73 20 61 73 20 55 52 49 73 20 2a 2f 0a 20 20 75  s as URIs */.  u
25340 38 20 62 55 73 65 43 69 73 3b 20 20 20 20 20 20  8 bUseCis;      
25350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25360 20 2f 2a 20 55 73 65 20 63 6f 76 65 72 69 6e 67   /* Use covering
25370 20 69 6e 64 69 63 65 73 20 66 6f 72 20 66 75 6c   indices for ful
25380 6c 2d 73 63 61 6e 73 20 2a 2f 0a 20 20 75 38 20  l-scans */.  u8 
25390 62 53 6d 61 6c 6c 4d 61 6c 6c 6f 63 3b 20 20 20  bSmallMalloc;   
253a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
253b0 2a 20 41 76 6f 69 64 20 6c 61 72 67 65 20 6d 65  * Avoid large me
253c0 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  mory allocations
253d0 20 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 38   if true */.  u8
253e0 20 62 45 78 74 72 61 53 63 68 65 6d 61 43 68 65   bExtraSchemaChe
253f0 63 6b 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  cks;            
25400 2f 2a 20 56 65 72 69 66 79 20 74 79 70 65 2c 6e  /* Verify type,n
25410 61 6d 65 2c 74 62 6c 5f 6e 61 6d 65 20 69 6e 20  ame,tbl_name in 
25420 73 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20  schema */.  int 
25430 6d 78 53 74 72 6c 65 6e 3b 20 20 20 20 20 20 20  mxStrlen;       
25440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
25450 20 4d 61 78 69 6d 75 6d 20 73 74 72 69 6e 67 20   Maximum string 
25460 6c 65 6e 67 74 68 20 2a 2f 0a 20 20 69 6e 74 20  length */.  int 
25470 6e 65 76 65 72 43 6f 72 72 75 70 74 3b 20 20 20  neverCorrupt;   
25480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
25490 20 44 61 74 61 62 61 73 65 20 69 73 20 61 6c 77   Database is alw
254a0 61 79 73 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20  ays well-formed 
254b0 2a 2f 0a 20 20 69 6e 74 20 73 7a 4c 6f 6f 6b 61  */.  int szLooka
254c0 73 69 64 65 3b 20 20 20 20 20 20 20 20 20 20 20  side;           
254d0 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c         /* Defaul
254e0 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66 66  t lookaside buff
254f0 65 72 20 73 69 7a 65 20 2a 2f 0a 20 20 69 6e 74  er size */.  int
25500 20 6e 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20   nLookaside;    
25510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
25520 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73  * Default lookas
25530 69 64 65 20 62 75 66 66 65 72 20 63 6f 75 6e 74  ide buffer count
25540 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 74 6d 74 53   */.  int nStmtS
25550 70 69 6c 6c 3b 20 20 20 20 20 20 20 20 20 20 20  pill;           
25560 20 20 20 20 20 20 20 20 2f 2a 20 53 74 6d 74 2d          /* Stmt-
25570 6a 6f 75 72 6e 61 6c 20 73 70 69 6c 6c 2d 74 6f  journal spill-to
25580 2d 64 69 73 6b 20 74 68 72 65 73 68 6f 6c 64 20  -disk threshold 
25590 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 65 6d  */.  sqlite3_mem
255a0 5f 6d 65 74 68 6f 64 73 20 6d 3b 20 20 20 20 20  _methods m;     
255b0 20 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65         /* Low-le
255c0 76 65 6c 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  vel memory alloc
255d0 61 74 69 6f 6e 20 69 6e 74 65 72 66 61 63 65 20  ation interface 
255e0 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  */.  sqlite3_mut
255f0 65 78 5f 6d 65 74 68 6f 64 73 20 6d 75 74 65 78  ex_methods mutex
25600 3b 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65  ;      /* Low-le
25610 76 65 6c 20 6d 75 74 65 78 20 69 6e 74 65 72 66  vel mutex interf
25620 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ace */.  sqlite3
25630 5f 70 63 61 63 68 65 5f 6d 65 74 68 6f 64 73 32  _pcache_methods2
25640 20 70 63 61 63 68 65 32 3b 20 20 2f 2a 20 4c 6f   pcache2;  /* Lo
25650 77 2d 6c 65 76 65 6c 20 70 61 67 65 2d 63 61 63  w-level page-cac
25660 68 65 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a  he interface */.
25670 20 20 76 6f 69 64 20 2a 70 48 65 61 70 3b 20 20    void *pHeap;  
25680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25690 20 20 20 20 2f 2a 20 48 65 61 70 20 73 74 6f 72      /* Heap stor
256a0 61 67 65 20 73 70 61 63 65 20 2a 2f 0a 20 20 69  age space */.  i
256b0 6e 74 20 6e 48 65 61 70 3b 20 20 20 20 20 20 20  nt nHeap;       
256c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
256d0 20 2f 2a 20 53 69 7a 65 20 6f 66 20 70 48 65 61   /* Size of pHea
256e0 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52  p[] */.  int mnR
256f0 65 71 2c 20 6d 78 52 65 71 3b 20 20 20 20 20 20  eq, mxReq;      
25700 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 69             /* Mi
25710 6e 20 61 6e 64 20 6d 61 78 20 68 65 61 70 20 72  n and max heap r
25720 65 71 75 65 73 74 73 20 73 69 7a 65 73 20 2a 2f  equests sizes */
25730 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  .  sqlite3_int64
25740 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20 20   szMmap;        
25750 20 20 20 20 20 2f 2a 20 6d 6d 61 70 28 29 20 73       /* mmap() s
25760 70 61 63 65 20 70 65 72 20 6f 70 65 6e 20 66 69  pace per open fi
25770 6c 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  le */.  sqlite3_
25780 69 6e 74 36 34 20 6d 78 4d 6d 61 70 3b 20 20 20  int64 mxMmap;   
25790 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78            /* Max
257a0 69 6d 75 6d 20 76 61 6c 75 65 20 66 6f 72 20 73  imum value for s
257b0 7a 4d 6d 61 70 20 2a 2f 0a 20 20 76 6f 69 64 20  zMmap */.  void 
257c0 2a 70 50 61 67 65 3b 20 20 20 20 20 20 20 20 20  *pPage;         
257d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
257e0 50 61 67 65 20 63 61 63 68 65 20 6d 65 6d 6f 72  Page cache memor
257f0 79 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 50 61 67  y */.  int szPag
25800 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
25810 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
25820 20 6f 66 20 65 61 63 68 20 70 61 67 65 20 69 6e   of each page in
25830 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e   pPage[] */.  in
25840 74 20 6e 50 61 67 65 3b 20 20 20 20 20 20 20 20  t nPage;        
25850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25860 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 61 67  /* Number of pag
25870 65 73 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f  es in pPage[] */
25880 0a 20 20 69 6e 74 20 6d 78 50 61 72 73 65 72 53  .  int mxParserS
25890 74 61 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20  tack;           
258a0 20 20 20 20 20 2f 2a 20 6d 61 78 69 6d 75 6d 20       /* maximum 
258b0 64 65 70 74 68 20 6f 66 20 74 68 65 20 70 61 72  depth of the par
258c0 73 65 72 20 73 74 61 63 6b 20 2a 2f 0a 20 20 69  ser stack */.  i
258d0 6e 74 20 73 68 61 72 65 64 43 61 63 68 65 45 6e  nt sharedCacheEn
258e0 61 62 6c 65 64 3b 20 20 20 20 20 20 20 20 20 20  abled;          
258f0 20 2f 2a 20 74 72 75 65 20 69 66 20 73 68 61 72   /* true if shar
25900 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 65 6e  ed-cache mode en
25910 61 62 6c 65 64 20 2a 2f 0a 20 20 75 33 32 20 73  abled */.  u32 s
25920 7a 50 6d 61 3b 20 20 20 20 20 20 20 20 20 20 20  zPma;           
25930 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
25940 4d 61 78 69 6d 75 6d 20 53 6f 72 74 65 72 20 50  Maximum Sorter P
25950 4d 41 20 73 69 7a 65 20 2a 2f 0a 20 20 2f 2a 20  MA size */.  /* 
25960 54 68 65 20 61 62 6f 76 65 20 6d 69 67 68 74 20  The above might 
25970 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74  be initialized t
25980 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 54 68 65  o non-zero.  The
25990 20 66 6f 6c 6c 6f 77 69 6e 67 20 6e 65 65 64 20   following need 
259a0 74 6f 20 61 6c 77 61 79 73 0a 20 20 2a 2a 20 69  to always.  ** i
259b0 6e 69 74 69 61 6c 6c 79 20 62 65 20 7a 65 72 6f  nitially be zero
259c0 2c 20 68 6f 77 65 76 65 72 2e 20 2a 2f 0a 20 20  , however. */.  
259d0 69 6e 74 20 69 73 49 6e 69 74 3b 20 20 20 20 20  int isInit;     
259e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
259f0 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20    /* True after 
25a00 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 68  initialization h
25a10 61 73 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20  as finished */. 
25a20 20 69 6e 74 20 69 6e 50 72 6f 67 72 65 73 73 3b   int inProgress;
25a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25a40 20 20 20 2f 2a 20 54 72 75 65 20 77 68 69 6c 65     /* True while
25a50 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20   initialization 
25a60 69 6e 20 70 72 6f 67 72 65 73 73 20 2a 2f 0a 20  in progress */. 
25a70 20 69 6e 74 20 69 73 4d 75 74 65 78 49 6e 69 74   int isMutexInit
25a80 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
25a90 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72     /* True after
25aa0 20 6d 75 74 65 78 65 73 20 61 72 65 20 69 6e 69   mutexes are ini
25ab0 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e  tialized */.  in
25ac0 74 20 69 73 4d 61 6c 6c 6f 63 49 6e 69 74 3b 20  t isMallocInit; 
25ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ae0 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 61  /* True after ma
25af0 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c 69  lloc is initiali
25b00 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73 50  zed */.  int isP
25b10 43 61 63 68 65 49 6e 69 74 3b 20 20 20 20 20 20  CacheInit;      
25b20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
25b30 75 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20  ue after malloc 
25b40 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a  is initialized *
25b50 2f 0a 20 20 69 6e 74 20 6e 52 65 66 49 6e 69 74  /.  int nRefInit
25b60 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 20  Mutex;          
25b70 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
25b80 6f 66 20 75 73 65 72 73 20 6f 66 20 70 49 6e 69  of users of pIni
25b90 74 4d 75 74 65 78 20 2a 2f 0a 20 20 73 71 6c 69  tMutex */.  sqli
25ba0 74 65 33 5f 6d 75 74 65 78 20 2a 70 49 6e 69 74  te3_mutex *pInit
25bb0 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 2f 2a  Mutex;        /*
25bc0 20 4d 75 74 65 78 20 75 73 65 64 20 62 79 20 73   Mutex used by s
25bd0 71 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a  qlite3_initializ
25be0 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  e() */.  void (*
25bf0 78 4c 6f 67 29 28 76 6f 69 64 2a 2c 69 6e 74 2c  xLog)(void*,int,
25c00 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 20 2f 2a  const char*); /*
25c10 20 46 75 6e 63 74 69 6f 6e 20 66 6f 72 20 6c 6f   Function for lo
25c20 67 67 69 6e 67 20 2a 2f 0a 20 20 76 6f 69 64 20  gging */.  void 
25c30 2a 70 4c 6f 67 41 72 67 3b 20 20 20 20 20 20 20  *pLogArg;       
25c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25c50 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e  /* First argumen
25c60 74 20 74 6f 20 78 4c 6f 67 28 29 20 2a 2f 0a 23  t to xLog() */.#
25c70 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
25c80 42 4c 45 5f 53 51 4c 4c 4f 47 0a 20 20 76 6f 69  BLE_SQLLOG.  voi
25c90 64 28 2a 78 53 71 6c 6c 6f 67 29 28 76 6f 69 64  d(*xSqllog)(void
25ca0 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  *,sqlite3*,const
25cb0 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 20 20   char*, int);.  
25cc0 76 6f 69 64 20 2a 70 53 71 6c 6c 6f 67 41 72 67  void *pSqllogArg
25cd0 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20  ;.#endif.#ifdef 
25ce0 53 51 4c 49 54 45 5f 56 44 42 45 5f 43 4f 56 45  SQLITE_VDBE_COVE
25cf0 52 41 47 45 0a 20 20 2f 2a 20 54 68 65 20 66 6f  RAGE.  /* The fo
25d00 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 62 61 63 6b  llowing callback
25d10 20 28 69 66 20 6e 6f 74 20 4e 55 4c 4c 29 20 69   (if not NULL) i
25d20 73 20 69 6e 76 6f 6b 65 64 20 6f 6e 20 65 76 65  s invoked on eve
25d30 72 79 20 56 44 42 45 20 62 72 61 6e 63 68 0a 20  ry VDBE branch. 
25d40 20 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20   ** operation.  
25d50 53 65 74 20 74 68 65 20 63 61 6c 6c 62 61 63 6b  Set the callback
25d60 20 75 73 69 6e 67 20 53 51 4c 49 54 45 5f 54 45   using SQLITE_TE
25d70 53 54 43 54 52 4c 5f 56 44 42 45 5f 43 4f 56 45  STCTRL_VDBE_COVE
25d80 52 41 47 45 2e 0a 20 20 2a 2f 0a 20 20 76 6f 69  RAGE..  */.  voi
25d90 64 20 28 2a 78 56 64 62 65 42 72 61 6e 63 68 29  d (*xVdbeBranch)
25da0 28 76 6f 69 64 2a 2c 75 6e 73 69 67 6e 65 64 20  (void*,unsigned 
25db0 69 53 72 63 4c 69 6e 65 2c 75 38 20 65 54 68 69  iSrcLine,u8 eThi
25dc0 73 2c 75 38 20 65 4d 78 29 3b 20 20 2f 2a 20 43  s,u8 eMx);  /* C
25dd0 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69  allback */.  voi
25de0 64 20 2a 70 56 64 62 65 42 72 61 6e 63 68 41 72  d *pVdbeBranchAr
25df0 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
25e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25e10 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20 61 72         /* 1st ar
25e20 67 75 6d 65 6e 74 20 2a 2f 0a 23 65 6e 64 69 66  gument */.#endif
25e30 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
25e40 4e 41 42 4c 45 5f 44 45 53 45 52 49 41 4c 49 5a  NABLE_DESERIALIZ
25e50 45 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36  E.  sqlite3_int6
25e60 34 20 6d 78 4d 65 6d 64 62 53 69 7a 65 3b 20 20  4 mxMemdbSize;  
25e70 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74        /* Default
25e80 20 6d 61 78 20 6d 65 6d 64 62 20 73 69 7a 65 20   max memdb size 
25e90 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  */.#endif.#ifnde
25ea0 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41  f SQLITE_UNTESTA
25eb0 42 4c 45 0a 20 20 69 6e 74 20 28 2a 78 54 65 73  BLE.  int (*xTes
25ec0 74 43 61 6c 6c 62 61 63 6b 29 28 69 6e 74 29 3b  tCallback)(int);
25ed0 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 76 6f 6b          /* Invok
25ee0 65 64 20 62 79 20 73 71 6c 69 74 65 33 46 61 75  ed by sqlite3Fau
25ef0 6c 74 53 69 6d 28 29 20 2a 2f 0a 23 65 6e 64 69  ltSim() */.#endi
25f00 66 0a 20 20 69 6e 74 20 62 4c 6f 63 61 6c 74 69  f.  int bLocalti
25f10 6d 65 46 61 75 6c 74 3b 20 20 20 20 20 20 20 20  meFault;        
25f20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f        /* True to
25f30 20 66 61 69 6c 20 6c 6f 63 61 6c 74 69 6d 65 28   fail localtime(
25f40 29 20 63 61 6c 6c 73 20 2a 2f 0a 20 20 69 6e 74  ) calls */.  int
25f50 20 62 49 6e 74 65 72 6e 61 6c 46 75 6e 63 74 69   bInternalFuncti
25f60 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ons;           /
25f70 2a 20 49 6e 74 65 72 6e 61 6c 20 53 51 4c 20 66  * Internal SQL f
25f80 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 76 69 73  unctions are vis
25f90 69 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 69 4f  ible */.  int iO
25fa0 6e 63 65 52 65 73 65 74 54 68 72 65 73 68 6f 6c  nceResetThreshol
25fb0 64 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57  d;          /* W
25fc0 68 65 6e 20 74 6f 20 72 65 73 65 74 20 4f 50 5f  hen to reset OP_
25fd0 4f 6e 63 65 20 63 6f 75 6e 74 65 72 73 20 2a 2f  Once counters */
25fe0 0a 20 20 75 33 32 20 73 7a 53 6f 72 74 65 72 52  .  u32 szSorterR
25ff0 65 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ef;             
26000 20 20 20 20 20 2f 2a 20 4d 69 6e 20 73 69 7a 65       /* Min size
26010 20 69 6e 20 62 79 74 65 73 20 74 6f 20 75 73 65   in bytes to use
26020 20 73 6f 72 74 65 72 2d 72 65 66 73 20 2a 2f 0a   sorter-refs */.
26030 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 69    unsigned int i
26040 50 72 6e 67 53 65 65 64 3b 20 20 20 20 20 20 20  PrngSeed;       
26050 20 20 20 20 2f 2a 20 41 6c 74 65 72 6e 61 74 69      /* Alternati
26060 76 65 20 66 69 78 65 64 20 73 65 65 64 20 66 6f  ve fixed seed fo
26070 72 20 74 68 65 20 50 52 4e 47 20 2a 2f 0a 7d 3b  r the PRNG */.};
26080 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6d 61 63  ../*.** This mac
26090 72 6f 20 69 73 20 75 73 65 64 20 69 6e 73 69 64  ro is used insid
260a0 65 20 6f 66 20 61 73 73 65 72 74 28 29 20 73 74  e of assert() st
260b0 61 74 65 6d 65 6e 74 73 20 74 6f 20 69 6e 64 69  atements to indi
260c0 63 61 74 65 20 74 68 61 74 0a 2a 2a 20 74 68 65  cate that.** the
260d0 20 61 73 73 65 72 74 20 69 73 20 6f 6e 6c 79 20   assert is only 
260e0 76 61 6c 69 64 20 6f 6e 20 61 20 77 65 6c 6c 2d  valid on a well-
260f0 66 6f 72 6d 65 64 20 64 61 74 61 62 61 73 65 2e  formed database.
26100 20 20 49 6e 73 74 65 61 64 20 6f 66 3a 0a 2a 2a    Instead of:.**
26110 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28 20  .**     assert( 
26120 58 20 29 3b 0a 2a 2a 0a 2a 2a 20 4f 6e 65 20 77  X );.**.** One w
26130 72 69 74 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  rites:.**.**    
26140 20 61 73 73 65 72 74 28 20 58 20 7c 7c 20 43 4f   assert( X || CO
26150 52 52 55 50 54 5f 44 42 20 29 3b 0a 2a 2a 0a 2a  RRUPT_DB );.**.*
26160 2a 20 43 4f 52 52 55 50 54 5f 44 42 20 69 73 20  * CORRUPT_DB is 
26170 74 72 75 65 20 64 75 72 69 6e 67 20 6e 6f 72 6d  true during norm
26180 61 6c 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 43  al operation.  C
26190 4f 52 52 55 50 54 5f 44 42 20 64 6f 65 73 20 6e  ORRUPT_DB does n
261a0 6f 74 20 69 6e 64 69 63 61 74 65 0a 2a 2a 20 74  ot indicate.** t
261b0 68 61 74 20 74 68 65 20 64 61 74 61 62 61 73 65  hat the database
261c0 20 69 73 20 64 65 66 69 6e 69 74 65 6c 79 20 63   is definitely c
261d0 6f 72 72 75 70 74 2c 20 6f 6e 6c 79 20 74 68 61  orrupt, only tha
261e0 74 20 69 74 20 6d 69 67 68 74 20 62 65 20 63 6f  t it might be co
261f0 72 72 75 70 74 2e 0a 2a 2a 20 46 6f 72 20 6d 6f  rrupt..** For mo
26200 73 74 20 74 65 73 74 20 63 61 73 65 73 2c 20 43  st test cases, C
26210 4f 52 52 55 50 54 5f 44 42 20 69 73 20 73 65 74  ORRUPT_DB is set
26220 20 74 6f 20 66 61 6c 73 65 20 75 73 69 6e 67 20   to false using 
26230 61 20 73 70 65 63 69 61 6c 0a 2a 2a 20 73 71 6c  a special.** sql
26240 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f  ite3_test_contro
26250 6c 28 29 2e 20 20 54 68 69 73 20 65 6e 61 62 6c  l().  This enabl
26260 65 73 20 61 73 73 65 72 74 28 29 20 73 74 61 74  es assert() stat
26270 65 6d 65 6e 74 73 20 74 6f 20 70 72 6f 76 65 0a  ements to prove.
26280 2a 2a 20 74 68 69 6e 67 73 20 74 68 61 74 20 61  ** things that a
26290 72 65 20 61 6c 77 61 79 73 20 74 72 75 65 20 66  re always true f
262a0 6f 72 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 64  or well-formed d
262b0 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 64 65  atabases..*/.#de
262c0 66 69 6e 65 20 43 4f 52 52 55 50 54 5f 44 42 20  fine CORRUPT_DB 
262d0 20 28 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 2e   (sqlite3Config.
262e0 6e 65 76 65 72 43 6f 72 72 75 70 74 3d 3d 30 29  neverCorrupt==0)
262f0 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74 65 78 74 20  ../*.** Context 
26300 70 6f 69 6e 74 65 72 20 70 61 73 73 65 64 20 64  pointer passed d
26310 6f 77 6e 20 74 68 72 6f 75 67 68 20 74 68 65 20  own through the 
26320 74 72 65 65 2d 77 61 6c 6b 2e 0a 2a 2f 0a 73 74  tree-walk..*/.st
26330 72 75 63 74 20 57 61 6c 6b 65 72 20 7b 0a 20 20  ruct Walker {.  
26340 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20  Parse *pParse;  
26350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26360 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72            /* Par
26370 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 2a 2f  ser context.  */
26380 0a 20 20 69 6e 74 20 28 2a 78 45 78 70 72 43 61  .  int (*xExprCa
26390 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c  llback)(Walker*,
263a0 20 45 78 70 72 2a 29 3b 20 20 20 20 20 2f 2a 20   Expr*);     /* 
263b0 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20 65 78 70  Callback for exp
263c0 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e  ressions */.  in
263d0 74 20 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62  t (*xSelectCallb
263e0 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c  ack)(Walker*,Sel
263f0 65 63 74 2a 29 3b 20 20 2f 2a 20 43 61 6c 6c 62  ect*);  /* Callb
26400 61 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20  ack for SELECTs 
26410 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 65 6c  */.  void (*xSel
26420 65 63 74 43 61 6c 6c 62 61 63 6b 32 29 28 57 61  ectCallback2)(Wa
26430 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 2f  lker*,Select*);/
26440 2a 20 53 65 63 6f 6e 64 20 63 61 6c 6c 62 61 63  * Second callbac
26450 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f  k for SELECTs */
26460 0a 20 20 69 6e 74 20 77 61 6c 6b 65 72 44 65 70  .  int walkerDep
26470 74 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  th;             
26480 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
26490 4e 75 6d 62 65 72 20 6f 66 20 73 75 62 71 75 65  Number of subque
264a0 72 69 65 73 20 2a 2f 0a 20 20 75 38 20 65 43 6f  ries */.  u8 eCo
264b0 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  de;             
264c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
264d0 20 20 20 20 2f 2a 20 41 20 73 6d 61 6c 6c 20 70      /* A small p
264e0 72 6f 63 65 73 73 69 6e 67 20 63 6f 64 65 20 2a  rocessing code *
264f0 2f 0a 20 20 75 6e 69 6f 6e 20 7b 20 20 20 20 20  /.  union {     
26500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
26520 20 45 78 74 72 61 20 64 61 74 61 20 66 6f 72 20   Extra data for 
26530 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 20 20  callback */.    
26540 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e 43  NameContext *pNC
26550 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
26560 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
26570 69 6e 67 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20  ing context */. 
26580 20 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20     int n;       
26590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
265a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
265b0 41 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 20  A counter */.   
265c0 20 69 6e 74 20 69 43 75 72 3b 20 20 20 20 20 20   int iCur;      
265d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
265e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20             /* A 
265f0 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 2a 2f  cursor number */
26600 0a 20 20 20 20 53 72 63 4c 69 73 74 20 2a 70 53  .    SrcList *pS
26610 72 63 4c 69 73 74 3b 20 20 20 20 20 20 20 20 20  rcList;         
26620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
26630 2a 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f  * FROM clause */
26640 0a 20 20 20 20 73 74 72 75 63 74 20 53 72 63 43  .    struct SrcC
26650 6f 75 6e 74 20 2a 70 53 72 63 43 6f 75 6e 74 3b  ount *pSrcCount;
26660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
26670 2a 20 43 6f 75 6e 74 69 6e 67 20 63 6f 6c 75 6d  * Counting colum
26680 6e 20 72 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a  n references */.
26690 20 20 20 20 73 74 72 75 63 74 20 43 43 75 72 48      struct CCurH
266a0 69 6e 74 20 2a 70 43 43 75 72 48 69 6e 74 3b 20  int *pCCurHint; 
266b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
266c0 20 55 73 65 64 20 62 79 20 63 6f 64 65 43 75 72   Used by codeCur
266d0 73 6f 72 48 69 6e 74 28 29 20 2a 2f 0a 20 20 20  sorHint() */.   
266e0 20 69 6e 74 20 2a 61 69 43 6f 6c 3b 20 20 20 20   int *aiCol;    
266f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26700 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 61 72             /* ar
26710 72 61 79 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e  ray of column in
26720 64 65 78 65 73 20 2a 2f 0a 20 20 20 20 73 74 72  dexes */.    str
26730 75 63 74 20 49 64 78 43 6f 76 65 72 20 2a 70 49  uct IdxCover *pI
26740 64 78 43 6f 76 65 72 3b 20 20 20 20 20 20 20 20  dxCover;        
26750 20 20 20 20 20 20 20 2f 2a 20 43 68 65 63 6b 20         /* Check 
26760 66 6f 72 20 69 6e 64 65 78 20 63 6f 76 65 72 61  for index covera
26770 67 65 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74  ge */.    struct
26780 20 49 64 78 45 78 70 72 54 72 61 6e 73 20 2a 70   IdxExprTrans *p
26790 49 64 78 54 72 61 6e 73 3b 20 20 20 20 20 20 20  IdxTrans;       
267a0 20 20 20 20 2f 2a 20 43 6f 6e 76 65 72 74 20 69      /* Convert i
267b0 64 78 65 64 20 65 78 70 72 20 74 6f 20 63 6f 6c  dxed expr to col
267c0 75 6d 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72 4c  umn */.    ExprL
267d0 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20  ist *pGroupBy;  
267e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
267f0 20 20 20 20 20 2f 2a 20 47 52 4f 55 50 20 42 59       /* GROUP BY
26800 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 53   clause */.    S
26810 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20  elect *pSelect; 
26820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26830 20 20 20 20 20 20 20 20 20 2f 2a 20 48 41 56 49           /* HAVI
26840 4e 47 20 74 6f 20 57 48 45 52 45 20 63 6c 61 75  NG to WHERE clau
26850 73 65 20 63 74 78 20 2a 2f 0a 20 20 20 20 73 74  se ctx */.    st
26860 72 75 63 74 20 57 69 6e 64 6f 77 52 65 77 72 69  ruct WindowRewri
26870 74 65 20 2a 70 52 65 77 72 69 74 65 3b 20 20 20  te *pRewrite;   
26880 20 20 20 20 20 20 20 20 2f 2a 20 57 69 6e 64 6f          /* Windo
26890 77 20 72 65 77 72 69 74 65 20 63 6f 6e 74 65 78  w rewrite contex
268a0 74 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20  t */.    struct 
268b0 57 68 65 72 65 43 6f 6e 73 74 20 2a 70 43 6f 6e  WhereConst *pCon
268c0 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  st;             
268d0 20 20 20 2f 2a 20 57 48 45 52 45 20 63 6c 61 75     /* WHERE clau
268e0 73 65 20 63 6f 6e 73 74 61 6e 74 73 20 2a 2f 0a  se constants */.
268f0 20 20 20 20 73 74 72 75 63 74 20 52 65 6e 61 6d      struct Renam
26900 65 43 74 78 20 2a 70 52 65 6e 61 6d 65 3b 20 20  eCtx *pRename;  
26910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
26920 20 52 45 4e 41 4d 45 20 43 4f 4c 55 4d 4e 20 63   RENAME COLUMN c
26930 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 7d 20 75 3b  ontext */.  } u;
26940 0a 7d 3b 0a 0a 2f 2a 20 46 6f 72 77 61 72 64 20  .};../* Forward 
26950 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 2a 2f 0a  declarations */.
26960 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 45  int sqlite3WalkE
26970 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70  xpr(Walker*, Exp
26980 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
26990 57 61 6c 6b 45 78 70 72 4c 69 73 74 28 57 61 6c  WalkExprList(Wal
269a0 6b 65 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29  ker*, ExprList*)
269b0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c  ;.int sqlite3Wal
269c0 6b 53 65 6c 65 63 74 28 57 61 6c 6b 65 72 2a 2c  kSelect(Walker*,
269d0 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73   Select*);.int s
269e0 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74  qlite3WalkSelect
269f0 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 53 65  Expr(Walker*, Se
26a00 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  lect*);.int sqli
26a10 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 46 72 6f  te3WalkSelectFro
26a20 6d 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63  m(Walker*, Selec
26a30 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
26a40 45 78 70 72 57 61 6c 6b 4e 6f 6f 70 28 57 61 6c  ExprWalkNoop(Wal
26a50 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e  ker*, Expr*);.in
26a60 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 57  t sqlite3SelectW
26a70 61 6c 6b 4e 6f 6f 70 28 57 61 6c 6b 65 72 2a 2c  alkNoop(Walker*,
26a80 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73   Select*);.int s
26a90 71 6c 69 74 65 33 53 65 6c 65 63 74 57 61 6c 6b  qlite3SelectWalk
26aa0 46 61 69 6c 28 57 61 6c 6b 65 72 2a 2c 20 53 65  Fail(Walker*, Se
26ab0 6c 65 63 74 2a 29 3b 0a 23 69 66 64 65 66 20 53  lect*);.#ifdef S
26ac0 51 4c 49 54 45 5f 44 45 42 55 47 0a 76 6f 69 64  QLITE_DEBUG.void
26ad0 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 57 61   sqlite3SelectWa
26ae0 6c 6b 41 73 73 65 72 74 32 28 57 61 6c 6b 65 72  lkAssert2(Walker
26af0 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 23 65 6e  *, Select*);.#en
26b00 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  dif../*.** Retur
26b10 6e 20 63 6f 64 65 20 66 72 6f 6d 20 74 68 65 20  n code from the 
26b20 70 61 72 73 65 2d 74 72 65 65 20 77 61 6c 6b 69  parse-tree walki
26b30 6e 67 20 70 72 69 6d 69 74 69 76 65 73 20 61 6e  ng primitives an
26b40 64 20 74 68 65 69 72 0a 2a 2a 20 63 61 6c 6c 62  d their.** callb
26b50 61 63 6b 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  acks..*/.#define
26b60 20 57 52 43 5f 43 6f 6e 74 69 6e 75 65 20 20 20   WRC_Continue   
26b70 20 30 20 20 20 2f 2a 20 43 6f 6e 74 69 6e 75 65   0   /* Continue
26b80 20 64 6f 77 6e 20 69 6e 74 6f 20 63 68 69 6c 64   down into child
26b90 72 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  ren */.#define W
26ba0 52 43 5f 50 72 75 6e 65 20 20 20 20 20 20 20 31  RC_Prune       1
26bb0 20 20 20 2f 2a 20 4f 6d 69 74 20 63 68 69 6c 64     /* Omit child
26bc0 72 65 6e 20 62 75 74 20 63 6f 6e 74 69 6e 75 65  ren but continue
26bd0 20 77 61 6c 6b 69 6e 67 20 73 69 62 6c 69 6e 67   walking sibling
26be0 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43  s */.#define WRC
26bf0 5f 41 62 6f 72 74 20 20 20 20 20 20 20 32 20 20  _Abort       2  
26c00 20 2f 2a 20 41 62 61 6e 64 6f 6e 20 74 68 65 20   /* Abandon the 
26c10 74 72 65 65 20 77 61 6c 6b 20 2a 2f 0a 0a 2f 2a  tree walk */../*
26c20 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
26c30 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
26c40 65 20 72 65 70 72 65 73 65 6e 74 73 20 61 20 73  e represents a s
26c50 65 74 20 6f 66 20 6f 6e 65 20 6f 72 20 6d 6f 72  et of one or mor
26c60 65 20 43 54 45 73 0a 2a 2a 20 28 63 6f 6d 6d 6f  e CTEs.** (commo
26c70 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69  n table expressi
26c80 6f 6e 73 29 20 63 72 65 61 74 65 64 20 62 79 20  ons) created by 
26c90 61 20 73 69 6e 67 6c 65 20 57 49 54 48 20 63 6c  a single WITH cl
26ca0 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ause..*/.struct 
26cb0 57 69 74 68 20 7b 0a 20 20 69 6e 74 20 6e 43 74  With {.  int nCt
26cc0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
26cd0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
26ce0 65 72 20 6f 66 20 43 54 45 73 20 69 6e 20 74 68  er of CTEs in th
26cf0 65 20 57 49 54 48 20 63 6c 61 75 73 65 20 2a 2f  e WITH clause */
26d00 0a 20 20 57 69 74 68 20 2a 70 4f 75 74 65 72 3b  .  With *pOuter;
26d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26d20 20 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 69 6e 67     /* Containing
26d30 20 57 49 54 48 20 63 6c 61 75 73 65 2c 20 6f 72   WITH clause, or
26d40 20 4e 55 4c 4c 20 2a 2f 0a 20 20 73 74 72 75 63   NULL */.  struc
26d50 74 20 43 74 65 20 7b 20 20 20 20 20 20 20 20 20  t Cte {         
26d60 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f             /* Fo
26d70 72 20 65 61 63 68 20 43 54 45 20 69 6e 20 74 68  r each CTE in th
26d80 65 20 57 49 54 48 20 63 6c 61 75 73 65 2e 2e 2e  e WITH clause...
26d90 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  . */.    char *z
26da0 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20  Name;           
26db0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
26dc0 20 6f 66 20 74 68 69 73 20 43 54 45 20 2a 2f 0a   of this CTE */.
26dd0 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43      ExprList *pC
26de0 6f 6c 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ols;            
26df0 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 65      /* List of e
26e00 78 70 6c 69 63 69 74 20 63 6f 6c 75 6d 6e 20 6e  xplicit column n
26e10 61 6d 65 73 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f  ames, or NULL */
26e20 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65  .    Select *pSe
26e30 6c 65 63 74 3b 20 20 20 20 20 20 20 20 20 20 20  lect;           
26e40 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65 66 69       /* The defi
26e50 6e 69 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 43  nition of this C
26e60 54 45 20 2a 2f 0a 20 20 20 20 63 6f 6e 73 74 20  TE */.    const 
26e70 63 68 61 72 20 2a 7a 43 74 65 45 72 72 3b 20 20  char *zCteErr;  
26e80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72            /* Err
26e90 6f 72 20 6d 65 73 73 61 67 65 20 66 6f 72 20 63  or message for c
26ea0 69 72 63 75 6c 61 72 20 72 65 66 65 72 65 6e 63  ircular referenc
26eb0 65 73 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 0a  es */.  } a[1];.
26ec0 7d 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  };..#ifdef SQLIT
26ed0 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 41 6e  E_DEBUG./*.** An
26ee0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
26ef0 20 54 72 65 65 56 69 65 77 20 6f 62 6a 65 63 74   TreeView object
26f00 20 69 73 20 75 73 65 64 20 66 6f 72 20 70 72 69   is used for pri
26f10 6e 74 69 6e 67 20 74 68 65 20 63 6f 6e 74 65 6e  nting the conten
26f20 74 20 6f 66 0a 2a 2a 20 64 61 74 61 20 73 74 72  t of.** data str
26f30 75 63 74 75 72 65 73 20 6f 6e 20 73 71 6c 69 74  uctures on sqlit
26f40 65 33 44 65 62 75 67 50 72 69 6e 74 66 28 29 20  e3DebugPrintf() 
26f50 75 73 69 6e 67 20 61 20 74 72 65 65 2d 6c 69 6b  using a tree-lik
26f60 65 20 76 69 65 77 2e 0a 2a 2f 0a 73 74 72 75 63  e view..*/.struc
26f70 74 20 54 72 65 65 56 69 65 77 20 7b 0a 20 20 69  t TreeView {.  i
26f80 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20 20 20 20  nt iLevel;      
26f90 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20         /* Which 
26fa0 6c 65 76 65 6c 20 6f 66 20 74 68 65 20 74 72 65  level of the tre
26fb0 65 20 77 65 20 61 72 65 20 6f 6e 20 2a 2f 0a 20  e we are on */. 
26fc0 20 75 38 20 20 62 4c 69 6e 65 5b 31 30 30 5d 3b   u8  bLine[100];
26fd0 20 20 20 20 20 20 20 20 20 2f 2a 20 44 72 61 77           /* Draw
26fe0 20 76 65 72 74 69 63 61 6c 20 69 6e 20 63 6f 6c   vertical in col
26ff0 75 6d 6e 20 69 20 69 66 20 62 4c 69 6e 65 5b 69  umn i if bLine[i
27000 5d 20 69 73 20 74 72 75 65 20 2a 2f 0a 7d 3b 0a  ] is true */.};.
27010 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
27020 5f 44 45 42 55 47 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  _DEBUG */../*.**
27030 20 54 68 69 73 20 6f 62 6a 65 63 74 20 69 73 20   This object is 
27040 75 73 65 64 20 69 6e 20 76 61 72 69 6f 75 73 20  used in various 
27050 77 61 79 73 2c 20 6d 6f 73 74 20 28 62 75 74 20  ways, most (but 
27060 6e 6f 74 20 61 6c 6c 29 20 72 65 6c 61 74 65 64  not all) related
27070 20 74 6f 20 77 69 6e 64 6f 77 0a 2a 2a 20 66 75   to window.** fu
27080 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 20  nctions..**.**  
27090 20 28 31 29 20 41 20 73 69 6e 67 6c 65 20 69 6e   (1) A single in
270a0 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73  stance of this s
270b0 74 72 75 63 74 75 72 65 20 69 73 20 61 74 74 61  tructure is atta
270c0 63 68 65 64 20 74 6f 20 74 68 65 0a 2a 2a 20 20  ched to the.**  
270d0 20 20 20 20 20 74 68 65 20 45 78 70 72 2e 79 2e       the Expr.y.
270e0 70 57 69 6e 20 66 69 65 6c 64 20 66 6f 72 20 65  pWin field for e
270f0 61 63 68 20 77 69 6e 64 6f 77 20 66 75 6e 63 74  ach window funct
27100 69 6f 6e 20 69 6e 20 61 6e 20 65 78 70 72 65 73  ion in an expres
27110 73 69 6f 6e 20 74 72 65 65 2e 0a 2a 2a 20 20 20  sion tree..**   
27120 20 20 20 20 54 68 69 73 20 6f 62 6a 65 63 74 20      This object 
27130 68 6f 6c 64 73 20 74 68 65 20 69 6e 66 6f 72 6d  holds the inform
27140 61 74 69 6f 6e 20 63 6f 6e 74 61 69 6e 65 64 20  ation contained 
27150 69 6e 20 74 68 65 20 4f 56 45 52 20 63 6c 61 75  in the OVER clau
27160 73 65 2c 0a 2a 2a 20 20 20 20 20 20 20 70 6c 75  se,.**       plu
27170 73 20 61 64 64 69 74 69 6f 6e 61 6c 20 66 69 65  s additional fie
27180 6c 64 73 20 75 73 65 64 20 64 75 72 69 6e 67 20  lds used during 
27190 63 6f 64 65 20 67 65 6e 65 72 61 74 69 6f 6e 2e  code generation.
271a0 0a 2a 2a 0a 2a 2a 20 20 20 28 32 29 20 41 6c 6c  .**.**   (2) All
271b0 20 77 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e   window function
271c0 73 20 69 6e 20 61 20 73 69 6e 67 6c 65 20 53 45  s in a single SE
271d0 4c 45 43 54 20 66 6f 72 6d 20 61 20 6c 69 6e 6b  LECT form a link
271e0 65 64 2d 6c 69 73 74 0a 2a 2a 20 20 20 20 20 20  ed-list.**      
271f0 20 61 74 74 61 63 68 65 64 20 74 6f 20 53 65 6c   attached to Sel
27200 65 63 74 2e 70 57 69 6e 2e 20 20 54 68 65 20 57  ect.pWin.  The W
27210 69 6e 64 6f 77 2e 70 46 75 6e 63 20 61 6e 64 20  indow.pFunc and 
27220 57 69 6e 64 6f 77 2e 70 45 78 70 72 0a 2a 2a 20  Window.pExpr.** 
27230 20 20 20 20 20 20 66 69 65 6c 64 73 20 70 6f 69        fields poi
27240 6e 74 20 62 61 63 6b 20 74 6f 20 74 68 65 20 65  nt back to the e
27250 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69  xpression that i
27260 73 20 74 68 65 20 77 69 6e 64 6f 77 20 66 75 6e  s the window fun
27270 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 20 20 28  ction..**.**   (
27280 33 29 20 54 68 65 20 74 65 72 6d 73 20 6f 66 20  3) The terms of 
27290 74 68 65 20 57 49 4e 44 4f 57 20 63 6c 61 75 73  the WINDOW claus
272a0 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20 61 72  e of a SELECT ar
272b0 65 20 69 6e 73 74 61 6e 63 65 73 20 6f 66 20 74  e instances of t
272c0 68 69 73 0a 2a 2a 20 20 20 20 20 20 20 6f 62 6a  his.**       obj
272d0 65 63 74 20 6f 6e 20 61 20 6c 69 6e 6b 65 64 20  ect on a linked 
272e0 6c 69 73 74 20 61 74 74 61 63 68 65 64 20 74 6f  list attached to
272f0 20 53 65 6c 65 63 74 2e 70 57 69 6e 44 65 66 6e   Select.pWinDefn
27300 2e 0a 2a 2a 0a 2a 2a 20 20 20 28 34 29 20 46 6f  ..**.**   (4) Fo
27310 72 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 66  r an aggregate f
27320 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 61 20 46  unction with a F
27330 49 4c 54 45 52 20 63 6c 61 75 73 65 2c 20 61 6e  ILTER clause, an
27340 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 20 20 20   instance.**    
27350 20 20 20 6f 66 20 74 68 69 73 20 6f 62 6a 65 63     of this objec
27360 74 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 45  t is stored in E
27370 78 70 72 2e 79 2e 70 57 69 6e 20 77 69 74 68 20  xpr.y.pWin with 
27380 65 46 72 6d 54 79 70 65 20 73 65 74 20 74 6f 0a  eFrmType set to.
27390 2a 2a 20 20 20 20 20 20 20 54 4b 5f 46 49 4c 54  **       TK_FILT
273a0 45 52 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65  ER. In this case
273b0 20 74 68 65 20 6f 6e 6c 79 20 66 69 65 6c 64 20   the only field 
273c0 75 73 65 64 20 69 73 20 57 69 6e 64 6f 77 2e 70  used is Window.p
273d0 46 69 6c 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68  Filter..**.** Th
273e0 65 20 75 73 65 73 20 28 31 29 20 61 6e 64 20 28  e uses (1) and (
273f0 32 29 20 61 72 65 20 72 65 61 6c 6c 79 20 74 68  2) are really th
27400 65 20 73 61 6d 65 20 57 69 6e 64 6f 77 20 6f 62  e same Window ob
27410 6a 65 63 74 20 74 68 61 74 20 6a 75 73 74 20 68  ject that just h
27420 61 70 70 65 6e 73 0a 2a 2a 20 74 6f 20 62 65 20  appens.** to be 
27430 61 63 63 65 73 73 69 62 6c 65 20 69 6e 20 74 77  accessible in tw
27440 6f 20 64 69 66 66 65 72 65 6e 74 20 77 61 79 73  o different ways
27450 2e 20 20 55 73 65 20 63 61 73 65 20 28 33 29 20  .  Use case (3) 
27460 61 72 65 20 73 65 70 61 72 61 74 65 20 6f 62 6a  are separate obj
27470 65 63 74 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ects..*/.struct 
27480 57 69 6e 64 6f 77 20 7b 0a 20 20 63 68 61 72 20  Window {.  char 
27490 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
274a0 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 77 69     /* Name of wi
274b0 6e 64 6f 77 20 28 6d 61 79 20 62 65 20 4e 55 4c  ndow (may be NUL
274c0 4c 29 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 42  L) */.  char *zB
274d0 61 73 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ase;            
274e0 2f 2a 20 4e 61 6d 65 20 6f 66 20 62 61 73 65 20  /* Name of base 
274f0 77 69 6e 64 6f 77 20 66 6f 72 20 63 68 61 69 6e  window for chain
27500 69 6e 67 20 28 6d 61 79 20 62 65 20 4e 55 4c 4c  ing (may be NULL
27510 29 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  ) */.  ExprList 
27520 2a 70 50 61 72 74 69 74 69 6f 6e 3b 20 20 20 2f  *pPartition;   /
27530 2a 20 50 41 52 54 49 54 49 4f 4e 20 42 59 20 63  * PARTITION BY c
27540 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c  lause */.  ExprL
27550 69 73 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20  ist *pOrderBy;  
27560 20 20 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 63     /* ORDER BY c
27570 6c 61 75 73 65 20 2a 2f 0a 20 20 75 38 20 65 46  lause */.  u8 eF
27580 72 6d 54 79 70 65 3b 20 20 20 20 20 20 20 20 20  rmType;         
27590 20 20 20 2f 2a 20 54 4b 5f 52 41 4e 47 45 2c 20     /* TK_RANGE, 
275a0 54 4b 5f 47 52 4f 55 50 53 2c 20 54 4b 5f 52 4f  TK_GROUPS, TK_RO
275b0 57 53 2c 20 6f 72 20 30 20 2a 2f 0a 20 20 75 38  WS, or 0 */.  u8
275c0 20 65 53 74 61 72 74 3b 20 20 20 20 20 20 20 20   eStart;        
275d0 20 20 20 20 20 20 2f 2a 20 55 4e 42 4f 55 4e 44        /* UNBOUND
275e0 45 44 2c 20 43 55 52 52 45 4e 54 2c 20 50 52 45  ED, CURRENT, PRE
275f0 43 45 44 49 4e 47 20 6f 72 20 46 4f 4c 4c 4f 57  CEDING or FOLLOW
27600 49 4e 47 20 2a 2f 0a 20 20 75 38 20 65 45 6e 64  ING */.  u8 eEnd
27610 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
27620 20 2f 2a 20 55 4e 42 4f 55 4e 44 45 44 2c 20 43   /* UNBOUNDED, C
27630 55 52 52 45 4e 54 2c 20 50 52 45 43 45 44 49 4e  URRENT, PRECEDIN
27640 47 20 6f 72 20 46 4f 4c 4c 4f 57 49 4e 47 20 2a  G or FOLLOWING *
27650 2f 0a 20 20 75 38 20 62 49 6d 70 6c 69 63 69 74  /.  u8 bImplicit
27660 46 72 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 54  Frame;      /* T
27670 72 75 65 20 69 66 20 66 72 61 6d 65 20 77 61 73  rue if frame was
27680 20 69 6d 70 6c 69 63 69 74 6c 79 20 73 70 65 63   implicitly spec
27690 69 66 69 65 64 20 2a 2f 0a 20 20 75 38 20 65 45  ified */.  u8 eE
276a0 78 63 6c 75 64 65 3b 20 20 20 20 20 20 20 20 20  xclude;         
276b0 20 20 20 2f 2a 20 54 4b 5f 4e 4f 2c 20 54 4b 5f     /* TK_NO, TK_
276c0 43 55 52 52 45 4e 54 2c 20 54 4b 5f 54 49 45 53  CURRENT, TK_TIES
276d0 2c 20 54 4b 5f 47 52 4f 55 50 2c 20 6f 72 20 30  , TK_GROUP, or 0
276e0 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 53 74 61   */.  Expr *pSta
276f0 72 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  rt;           /*
27700 20 45 78 70 72 65 73 73 69 6f 6e 20 66 6f 72 20   Expression for 
27710 22 3c 65 78 70 72 3e 20 50 52 45 43 45 44 49 4e  "<expr> PRECEDIN
27720 47 22 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 45  G" */.  Expr *pE
27730 6e 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nd;             
27740 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 66 6f  /* Expression fo
27750 72 20 22 3c 65 78 70 72 3e 20 46 4f 4c 4c 4f 57  r "<expr> FOLLOW
27760 49 4e 47 22 20 2a 2f 0a 20 20 57 69 6e 64 6f 77  ING" */.  Window
27770 20 2a 2a 70 70 54 68 69 73 3b 20 20 20 20 20 20   **ppThis;      
27780 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
27790 74 68 69 73 20 6f 62 6a 65 63 74 20 69 6e 20 53  this object in S
277a0 65 6c 65 63 74 2e 70 57 69 6e 20 6c 69 73 74 20  elect.pWin list 
277b0 2a 2f 0a 20 20 57 69 6e 64 6f 77 20 2a 70 4e 65  */.  Window *pNe
277c0 78 74 57 69 6e 3b 20 20 20 20 20 20 20 2f 2a 20  xtWin;       /* 
277d0 4e 65 78 74 20 77 69 6e 64 6f 77 20 66 75 6e 63  Next window func
277e0 74 69 6f 6e 20 62 65 6c 6f 6e 67 69 6e 67 20 74  tion belonging t
277f0 6f 20 74 68 69 73 20 53 45 4c 45 43 54 20 2a 2f  o this SELECT */
27800 0a 20 20 45 78 70 72 20 2a 70 46 69 6c 74 65 72  .  Expr *pFilter
27810 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ;          /* Th
27820 65 20 46 49 4c 54 45 52 20 65 78 70 72 65 73 73  e FILTER express
27830 69 6f 6e 20 2a 2f 0a 20 20 46 75 6e 63 44 65 66  ion */.  FuncDef
27840 20 2a 70 46 75 6e 63 3b 20 20 20 20 20 20 20 20   *pFunc;        
27850 20 2f 2a 20 54 68 65 20 66 75 6e 63 74 69 6f 6e   /* The function
27860 20 2a 2f 0a 20 20 69 6e 74 20 69 45 70 68 43 73   */.  int iEphCs
27870 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  r;            /*
27880 20 50 61 72 74 69 74 69 6f 6e 20 62 75 66 66 65   Partition buffe
27890 72 20 6f 72 20 50 65 65 72 20 62 75 66 66 65 72  r or Peer buffer
278a0 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 41 63 63   */.  int regAcc
278b0 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  um;           /*
278c0 20 41 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a   Accumulator */.
278d0 20 20 69 6e 74 20 72 65 67 52 65 73 75 6c 74 3b    int regResult;
278e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 74            /* Int
278f0 65 72 69 6d 20 72 65 73 75 6c 74 20 2a 2f 0a 20  erim result */. 
27900 20 69 6e 74 20 63 73 72 41 70 70 3b 20 20 20 20   int csrApp;    
27910 20 20 20 20 20 20 20 20 20 2f 2a 20 46 75 6e 63           /* Func
27920 74 69 6f 6e 20 63 75 72 73 6f 72 20 28 75 73 65  tion cursor (use
27930 64 20 62 79 20 6d 69 6e 2f 6d 61 78 29 20 2a 2f  d by min/max) */
27940 0a 20 20 69 6e 74 20 72 65 67 41 70 70 3b 20 20  .  int regApp;  
27950 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 75             /* Fu
27960 6e 63 74 69 6f 6e 20 72 65 67 69 73 74 65 72 20  nction register 
27970 28 61 6c 73 6f 20 75 73 65 64 20 62 79 20 6d 69  (also used by mi
27980 6e 2f 6d 61 78 29 20 2a 2f 0a 20 20 69 6e 74 20  n/max) */.  int 
27990 72 65 67 50 61 72 74 3b 20 20 20 20 20 20 20 20  regPart;        
279a0 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20      /* Array of 
279b0 72 65 67 69 73 74 65 72 73 20 66 6f 72 20 50 41  registers for PA
279c0 52 54 49 54 49 4f 4e 20 42 59 20 76 61 6c 75 65  RTITION BY value
279d0 73 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 4f 77  s */.  Expr *pOw
279e0 6e 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ner;           /
279f0 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 6f 62 6a  * Expression obj
27a00 65 63 74 20 74 68 69 73 20 77 69 6e 64 6f 77 20  ect this window 
27a10 69 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 2a  is attached to *
27a20 2f 0a 20 20 69 6e 74 20 6e 42 75 66 66 65 72 43  /.  int nBufferC
27a30 6f 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ol;         /* N
27a40 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
27a50 20 69 6e 20 62 75 66 66 65 72 20 74 61 62 6c 65   in buffer table
27a60 20 2a 2f 0a 20 20 69 6e 74 20 69 41 72 67 43 6f   */.  int iArgCo
27a70 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  l;            /*
27a80 20 4f 66 66 73 65 74 20 6f 66 20 66 69 72 73 74   Offset of first
27a90 20 61 72 67 75 6d 65 6e 74 20 66 6f 72 20 74 68   argument for th
27aa0 69 73 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  is function */. 
27ab0 20 69 6e 74 20 72 65 67 4f 6e 65 3b 20 20 20 20   int regOne;    
27ac0 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69           /* Regi
27ad0 73 74 65 72 20 63 6f 6e 74 61 69 6e 69 6e 67 20  ster containing 
27ae0 63 6f 6e 73 74 61 6e 74 20 76 61 6c 75 65 20 31  constant value 1
27af0 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 53 74 61   */.  int regSta
27b00 72 74 52 6f 77 69 64 3b 0a 20 20 69 6e 74 20 72  rtRowid;.  int r
27b10 65 67 45 6e 64 52 6f 77 69 64 3b 0a 20 20 75 38  egEndRowid;.  u8
27b20 20 62 45 78 70 72 41 72 67 73 3b 20 20 20 20 20   bExprArgs;     
27b30 20 20 20 20 20 20 2f 2a 20 44 65 66 65 72 20 65        /* Defer e
27b40 76 61 6c 75 61 74 69 6f 6e 20 6f 66 20 77 69 6e  valuation of win
27b50 64 6f 77 20 66 75 6e 63 74 69 6f 6e 20 61 72 67  dow function arg
27b60 75 6d 65 6e 74 73 0a 20 20 20 20 20 20 20 20 20  uments.         
27b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27b80 20 2a 2a 20 64 75 65 20 74 6f 20 74 68 65 20 53   ** due to the S
27b90 51 4c 49 54 45 5f 53 55 42 54 59 50 45 20 66 6c  QLITE_SUBTYPE fl
27ba0 61 67 20 2a 2f 0a 7d 3b 0a 0a 23 69 66 6e 64 65  ag */.};..#ifnde
27bb0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 49  f SQLITE_OMIT_WI
27bc0 4e 44 4f 57 46 55 4e 43 0a 76 6f 69 64 20 73 71  NDOWFUNC.void sq
27bd0 6c 69 74 65 33 57 69 6e 64 6f 77 44 65 6c 65 74  lite3WindowDelet
27be0 65 28 73 71 6c 69 74 65 33 2a 2c 20 57 69 6e 64  e(sqlite3*, Wind
27bf0 6f 77 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ow*);.void sqlit
27c00 65 33 57 69 6e 64 6f 77 55 6e 6c 69 6e 6b 46 72  e3WindowUnlinkFr
27c10 6f 6d 53 65 6c 65 63 74 28 57 69 6e 64 6f 77 2a  omSelect(Window*
27c20 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57  );.void sqlite3W
27c30 69 6e 64 6f 77 4c 69 73 74 44 65 6c 65 74 65 28  indowListDelete(
27c40 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 57 69 6e  sqlite3 *db, Win
27c50 64 6f 77 20 2a 70 29 3b 0a 57 69 6e 64 6f 77 20  dow *p);.Window 
27c60 2a 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 41 6c  *sqlite3WindowAl
27c70 6c 6f 63 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  loc(Parse*, int,
27c80 20 69 6e 74 2c 20 45 78 70 72 2a 2c 20 69 6e 74   int, Expr*, int
27c90 20 2c 20 45 78 70 72 2a 2c 20 75 38 29 3b 0a 76   , Expr*, u8);.v
27ca0 6f 69 64 20 73 71 6c 69 74 65 33 57 69 6e 64 6f  oid sqlite3Windo
27cb0 77 41 74 74 61 63 68 28 50 61 72 73 65 2a 2c 20  wAttach(Parse*, 
27cc0 45 78 70 72 2a 2c 20 57 69 6e 64 6f 77 2a 29 3b  Expr*, Window*);
27cd0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 6e  .void sqlite3Win
27ce0 64 6f 77 4c 69 6e 6b 28 53 65 6c 65 63 74 20 2a  dowLink(Select *
27cf0 70 53 65 6c 2c 20 57 69 6e 64 6f 77 20 2a 70 57  pSel, Window *pW
27d00 69 6e 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  in);.int sqlite3
27d10 57 69 6e 64 6f 77 43 6f 6d 70 61 72 65 28 50 61  WindowCompare(Pa
27d20 72 73 65 2a 2c 20 57 69 6e 64 6f 77 2a 2c 20 57  rse*, Window*, W
27d30 69 6e 64 6f 77 2a 2c 20 69 6e 74 29 3b 0a 76 6f  indow*, int);.vo
27d40 69 64 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77  id sqlite3Window
27d50 43 6f 64 65 49 6e 69 74 28 50 61 72 73 65 2a 2c  CodeInit(Parse*,
27d60 20 57 69 6e 64 6f 77 2a 29 3b 0a 76 6f 69 64 20   Window*);.void 
27d70 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 43 6f 64  sqlite3WindowCod
27d80 65 53 74 65 70 28 50 61 72 73 65 2a 2c 20 53 65  eStep(Parse*, Se
27d90 6c 65 63 74 2a 2c 20 57 68 65 72 65 49 6e 66 6f  lect*, WhereInfo
27da0 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e  *, int, int);.in
27db0 74 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 52  t sqlite3WindowR
27dc0 65 77 72 69 74 65 28 50 61 72 73 65 2a 2c 20 53  ewrite(Parse*, S
27dd0 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  elect*);.int sql
27de0 69 74 65 33 45 78 70 61 6e 64 53 75 62 71 75 65  ite3ExpandSubque
27df0 72 79 28 50 61 72 73 65 2a 2c 20 73 74 72 75 63  ry(Parse*, struc
27e00 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 2a 29  t SrcList_item*)
27e10 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69  ;.void sqlite3Wi
27e20 6e 64 6f 77 55 70 64 61 74 65 28 50 61 72 73 65  ndowUpdate(Parse
27e30 2a 2c 20 57 69 6e 64 6f 77 2a 2c 20 57 69 6e 64  *, Window*, Wind
27e40 6f 77 2a 2c 20 46 75 6e 63 44 65 66 2a 29 3b 0a  ow*, FuncDef*);.
27e50 57 69 6e 64 6f 77 20 2a 73 71 6c 69 74 65 33 57  Window *sqlite3W
27e60 69 6e 64 6f 77 44 75 70 28 73 71 6c 69 74 65 33  indowDup(sqlite3
27e70 20 2a 64 62 2c 20 45 78 70 72 20 2a 70 4f 77 6e   *db, Expr *pOwn
27e80 65 72 2c 20 57 69 6e 64 6f 77 20 2a 70 29 3b 0a  er, Window *p);.
27e90 57 69 6e 64 6f 77 20 2a 73 71 6c 69 74 65 33 57  Window *sqlite3W
27ea0 69 6e 64 6f 77 4c 69 73 74 44 75 70 28 73 71 6c  indowListDup(sql
27eb0 69 74 65 33 20 2a 64 62 2c 20 57 69 6e 64 6f 77  ite3 *db, Window
27ec0 20 2a 70 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   *p);.void sqlit
27ed0 65 33 57 69 6e 64 6f 77 46 75 6e 63 74 69 6f 6e  e3WindowFunction
27ee0 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71  s(void);.void sq
27ef0 6c 69 74 65 33 57 69 6e 64 6f 77 43 68 61 69 6e  lite3WindowChain
27f00 28 50 61 72 73 65 2a 2c 20 57 69 6e 64 6f 77 2a  (Parse*, Window*
27f10 2c 20 57 69 6e 64 6f 77 2a 29 3b 0a 57 69 6e 64  , Window*);.Wind
27f20 6f 77 20 2a 73 71 6c 69 74 65 33 57 69 6e 64 6f  ow *sqlite3Windo
27f30 77 41 73 73 65 6d 62 6c 65 28 50 61 72 73 65 2a  wAssemble(Parse*
27f40 2c 20 57 69 6e 64 6f 77 2a 2c 20 45 78 70 72 4c  , Window*, ExprL
27f50 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  ist*, ExprList*,
27f60 20 54 6f 6b 65 6e 2a 29 3b 0a 23 65 6c 73 65 0a   Token*);.#else.
27f70 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
27f80 57 69 6e 64 6f 77 44 65 6c 65 74 65 28 61 2c 62  WindowDelete(a,b
27f90 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
27fa0 65 33 57 69 6e 64 6f 77 46 75 6e 63 74 69 6f 6e  e3WindowFunction
27fb0 73 28 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  s().# define sql
27fc0 69 74 65 33 57 69 6e 64 6f 77 41 74 74 61 63 68  ite3WindowAttach
27fd0 28 61 2c 62 2c 63 29 0a 23 65 6e 64 69 66 0a 0a  (a,b,c).#endif..
27fe0 2f 2a 0a 2a 2a 20 41 73 73 75 6d 69 6e 67 20 7a  /*.** Assuming z
27ff0 49 6e 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  In points to the
28000 20 66 69 72 73 74 20 62 79 74 65 20 6f 66 20 61   first byte of a
28010 20 55 54 46 2d 38 20 63 68 61 72 61 63 74 65 72   UTF-8 character
28020 2c 0a 2a 2a 20 61 64 76 61 6e 63 65 20 7a 49 6e  ,.** advance zIn
28030 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65   to point to the
28040 20 66 69 72 73 74 20 62 79 74 65 20 6f 66 20 74   first byte of t
28050 68 65 20 6e 65 78 74 20 55 54 46 2d 38 20 63 68  he next UTF-8 ch
28060 61 72 61 63 74 65 72 2e 0a 2a 2f 0a 23 64 65 66  aracter..*/.#def
28070 69 6e 65 20 53 51 4c 49 54 45 5f 53 4b 49 50 5f  ine SQLITE_SKIP_
28080 55 54 46 38 28 7a 49 6e 29 20 7b 20 20 20 20 20  UTF8(zIn) {     
28090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
280a0 20 20 20 5c 0a 20 20 69 66 28 20 28 2a 28 7a 49     \.  if( (*(zI
280b0 6e 2b 2b 29 29 3e 3d 30 78 63 30 20 29 7b 20 20  n++))>=0xc0 ){  
280c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
280d0 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20              \.  
280e0 20 20 77 68 69 6c 65 28 20 28 2a 7a 49 6e 20 26    while( (*zIn &
280f0 20 30 78 63 30 29 3d 3d 30 78 38 30 20 29 7b 20   0xc0)==0x80 ){ 
28100 7a 49 6e 2b 2b 3b 20 7d 20 20 20 20 20 20 20 20  zIn++; }        
28110 20 20 20 20 20 5c 0a 20 20 7d 20 20 20 20 20 20       \.  }      
28120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a                \.
28150 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c  }../*.** The SQL
28160 49 54 45 5f 2a 5f 42 4b 50 54 20 6d 61 63 72 6f  ITE_*_BKPT macro
28170 73 20 61 72 65 20 73 75 62 73 74 69 74 75 74 65  s are substitute
28180 73 20 66 6f 72 20 74 68 65 20 65 72 72 6f 72 20  s for the error 
28190 63 6f 64 65 73 20 77 69 74 68 0a 2a 2a 20 74 68  codes with.** th
281a0 65 20 73 61 6d 65 20 6e 61 6d 65 20 62 75 74 20  e same name but 
281b0 77 69 74 68 6f 75 74 20 74 68 65 20 5f 42 4b 50  without the _BKP
281c0 54 20 73 75 66 66 69 78 2e 20 20 54 68 65 73 65  T suffix.  These
281d0 20 6d 61 63 72 6f 73 20 69 6e 76 6f 6b 65 0a 2a   macros invoke.*
281e0 2a 20 72 6f 75 74 69 6e 65 73 20 74 68 61 74 20  * routines that 
281f0 72 65 70 6f 72 74 20 74 68 65 20 6c 69 6e 65 2d  report the line-
28200 6e 75 6d 62 65 72 20 6f 6e 20 77 68 69 63 68 20  number on which 
28210 74 68 65 20 65 72 72 6f 72 20 6f 72 69 67 69 6e  the error origin
28220 61 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20 73 71  ated.** using sq
28230 6c 69 74 65 33 5f 6c 6f 67 28 29 2e 20 20 54 68  lite3_log().  Th
28240 65 20 72 6f 75 74 69 6e 65 73 20 61 6c 73 6f 20  e routines also 
28250 70 72 6f 76 69 64 65 20 61 20 63 6f 6e 76 65 6e  provide a conven
28260 69 65 6e 74 20 70 6c 61 63 65 0a 2a 2a 20 74 6f  ient place.** to
28270 20 73 65 74 20 61 20 64 65 62 75 67 67 65 72 20   set a debugger 
28280 62 72 65 61 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a 69  breakpoint..*/.i
28290 6e 74 20 73 71 6c 69 74 65 33 52 65 70 6f 72 74  nt sqlite3Report
282a0 45 72 72 6f 72 28 69 6e 74 20 69 45 72 72 2c 20  Error(int iErr, 
282b0 69 6e 74 20 6c 69 6e 65 6e 6f 2c 20 63 6f 6e 73  int lineno, cons
282c0 74 20 63 68 61 72 20 2a 7a 54 79 70 65 29 3b 0a  t char *zType);.
282d0 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 72 72 75  int sqlite3Corru
282e0 70 74 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e  ptError(int);.in
282f0 74 20 73 71 6c 69 74 65 33 4d 69 73 75 73 65 45  t sqlite3MisuseE
28300 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73  rror(int);.int s
28310 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e 45 72  qlite3CantopenEr
28320 72 6f 72 28 69 6e 74 29 3b 0a 23 64 65 66 69 6e  ror(int);.#defin
28330 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  e SQLITE_CORRUPT
28340 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 43 6f 72  _BKPT sqlite3Cor
28350 72 75 70 74 45 72 72 6f 72 28 5f 5f 4c 49 4e 45  ruptError(__LINE
28360 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  __).#define SQLI
28370 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54 20 73  TE_MISUSE_BKPT s
28380 71 6c 69 74 65 33 4d 69 73 75 73 65 45 72 72 6f  qlite3MisuseErro
28390 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66  r(__LINE__).#def
283a0 69 6e 65 20 53 51 4c 49 54 45 5f 43 41 4e 54 4f  ine SQLITE_CANTO
283b0 50 45 4e 5f 42 4b 50 54 20 73 71 6c 69 74 65 33  PEN_BKPT sqlite3
283c0 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28 5f 5f  CantopenError(__
283d0 4c 49 4e 45 5f 5f 29 0a 23 69 66 64 65 66 20 53  LINE__).#ifdef S
283e0 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 6e  QLITE_DEBUG.  in
283f0 74 20 73 71 6c 69 74 65 33 4e 6f 6d 65 6d 45 72  t sqlite3NomemEr
28400 72 6f 72 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20  ror(int);.  int 
28410 73 71 6c 69 74 65 33 49 6f 65 72 72 6e 6f 6d 65  sqlite3Ioerrnome
28420 6d 45 72 72 6f 72 28 69 6e 74 29 3b 0a 20 20 69  mError(int);.  i
28430 6e 74 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70  nt sqlite3Corrup
28440 74 50 67 6e 6f 45 72 72 6f 72 28 69 6e 74 2c 50  tPgnoError(int,P
28450 67 6e 6f 29 3b 0a 23 20 64 65 66 69 6e 65 20 53  gno);.# define S
28460 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54  QLITE_NOMEM_BKPT
28470 20 73 71 6c 69 74 65 33 4e 6f 6d 65 6d 45 72 72   sqlite3NomemErr
28480 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 20 64  or(__LINE__).# d
28490 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4f 45  efine SQLITE_IOE
284a0 52 52 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20 73 71  RR_NOMEM_BKPT sq
284b0 6c 69 74 65 33 49 6f 65 72 72 6e 6f 6d 65 6d 45  lite3IoerrnomemE
284c0 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23  rror(__LINE__).#
284d0 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43   define SQLITE_C
284e0 4f 52 52 55 50 54 5f 50 47 4e 4f 28 50 29 20 73  ORRUPT_PGNO(P) s
284f0 71 6c 69 74 65 33 43 6f 72 72 75 70 74 50 67 6e  qlite3CorruptPgn
28500 6f 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 2c  oError(__LINE__,
28510 28 50 29 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  (P)).#else.# def
28520 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  ine SQLITE_NOMEM
28530 5f 42 4b 50 54 20 53 51 4c 49 54 45 5f 4e 4f 4d  _BKPT SQLITE_NOM
28540 45 4d 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  EM.# define SQLI
28550 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 5f 42  TE_IOERR_NOMEM_B
28560 4b 50 54 20 53 51 4c 49 54 45 5f 49 4f 45 52 52  KPT SQLITE_IOERR
28570 5f 4e 4f 4d 45 4d 0a 23 20 64 65 66 69 6e 65 20  _NOMEM.# define 
28580 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 50  SQLITE_CORRUPT_P
28590 47 4e 4f 28 50 29 20 73 71 6c 69 74 65 33 43 6f  GNO(P) sqlite3Co
285a0 72 72 75 70 74 45 72 72 6f 72 28 5f 5f 4c 49 4e  rruptError(__LIN
285b0 45 5f 5f 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  E__).#endif../*.
285c0 2a 2a 20 46 54 53 33 20 61 6e 64 20 46 54 53 34  ** FTS3 and FTS4
285d0 20 62 6f 74 68 20 72 65 71 75 69 72 65 20 76 69   both require vi
285e0 72 74 75 61 6c 20 74 61 62 6c 65 20 73 75 70 70  rtual table supp
285f0 6f 72 74 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  ort.*/.#if defin
28600 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ed(SQLITE_OMIT_V
28610 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 23 20 75  IRTUALTABLE).# u
28620 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  ndef SQLITE_ENAB
28630 4c 45 5f 46 54 53 33 0a 23 20 75 6e 64 65 66 20  LE_FTS3.# undef 
28640 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
28650 53 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  S4.#endif../*.**
28660 20 46 54 53 34 20 69 73 20 72 65 61 6c 6c 79 20   FTS4 is really 
28670 61 6e 20 65 78 74 65 6e 73 69 6f 6e 20 66 6f 72  an extension for
28680 20 46 54 53 33 2e 20 20 49 74 20 69 73 20 65 6e   FTS3.  It is en
28690 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65 0a  abled using the.
286a0 2a 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ** SQLITE_ENABLE
286b0 5f 46 54 53 33 20 6d 61 63 72 6f 2e 20 20 42 75  _FTS3 macro.  Bu
286c0 74 20 74 6f 20 61 76 6f 69 64 20 63 6f 6e 66 75  t to avoid confu
286d0 73 69 6f 6e 20 77 65 20 61 6c 73 6f 20 63 61 6c  sion we also cal
286e0 6c 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f  l.** the SQLITE_
286f0 45 4e 41 42 4c 45 5f 46 54 53 34 20 6d 61 63 72  ENABLE_FTS4 macr
28700 6f 20 74 6f 20 73 65 72 76 65 20 61 73 20 61 6e  o to serve as an
28710 20 61 6c 69 61 73 20 66 6f 72 20 53 51 4c 49 54   alias for SQLIT
28720 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 2e 0a 2a  E_ENABLE_FTS3..*
28730 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
28740 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34  LITE_ENABLE_FTS4
28750 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
28760 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33  LITE_ENABLE_FTS3
28770 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
28780 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20 31 0a  E_ENABLE_FTS3 1.
28790 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
287a0 65 20 63 74 79 70 65 2e 68 20 68 65 61 64 65 72  e ctype.h header
287b0 20 69 73 20 6e 65 65 64 65 64 20 66 6f 72 20 6e   is needed for n
287c0 6f 6e 2d 41 53 43 49 49 20 73 79 73 74 65 6d 73  on-ASCII systems
287d0 2e 20 20 49 74 20 69 73 20 61 6c 73 6f 0a 2a 2a  .  It is also.**
287e0 20 6e 65 65 64 65 64 20 62 79 20 46 54 53 33 20   needed by FTS3 
287f0 77 68 65 6e 20 46 54 53 33 20 69 73 20 69 6e 63  when FTS3 is inc
28800 6c 75 64 65 64 20 69 6e 20 74 68 65 20 61 6d 61  luded in the ama
28810 6c 67 61 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 23 69  lgamation..*/.#i
28820 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
28830 45 5f 41 53 43 49 49 29 20 7c 7c 20 5c 0a 20 20  E_ASCII) || \.  
28840 20 20 28 64 65 66 69 6e 65 64 28 53 51 4c 49 54    (defined(SQLIT
28850 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29 20 26  E_ENABLE_FTS3) &
28860 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  & defined(SQLITE
28870 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 29 29 0a  _AMALGAMATION)).
28880 23 20 69 6e 63 6c 75 64 65 20 3c 63 74 79 70 65  # include <ctype
28890 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  .h>.#endif../*.*
288a0 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
288b0 6d 61 63 72 6f 73 20 6d 69 6d 69 63 20 74 68 65  macros mimic the
288c0 20 73 74 61 6e 64 61 72 64 20 6c 69 62 72 61 72   standard librar
288d0 79 20 66 75 6e 63 74 69 6f 6e 73 20 74 6f 75 70  y functions toup
288e0 70 65 72 28 29 2c 0a 2a 2a 20 69 73 73 70 61 63  per(),.** isspac
288f0 65 28 29 2c 20 69 73 61 6c 6e 75 6d 28 29 2c 20  e(), isalnum(), 
28900 69 73 64 69 67 69 74 28 29 20 61 6e 64 20 69 73  isdigit() and is
28910 78 64 69 67 69 74 28 29 2c 20 72 65 73 70 65 63  xdigit(), respec
28920 74 69 76 65 6c 79 2e 20 54 68 65 0a 2a 2a 20 73  tively. The.** s
28930 71 6c 69 74 65 20 76 65 72 73 69 6f 6e 73 20 6f  qlite versions o
28940 6e 6c 79 20 77 6f 72 6b 20 66 6f 72 20 41 53 43  nly work for ASC
28950 49 49 20 63 68 61 72 61 63 74 65 72 73 2c 20 72  II characters, r
28960 65 67 61 72 64 6c 65 73 73 20 6f 66 20 6c 6f 63  egardless of loc
28970 61 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ale..*/.#ifdef S
28980 51 4c 49 54 45 5f 41 53 43 49 49 0a 23 20 64 65  QLITE_ASCII.# de
28990 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 75 70  fine sqlite3Toup
289a0 70 65 72 28 78 29 20 20 28 28 78 29 26 7e 28 73  per(x)  ((x)&~(s
289b0 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28  qlite3CtypeMap[(
289c0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
289d0 29 5d 26 30 78 32 30 29 29 0a 23 20 64 65 66 69  )]&0x20)).# defi
289e0 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70 61 63  ne sqlite3Isspac
289f0 65 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43  e(x)   (sqlite3C
28a00 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
28a10 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 31  d char)(x)]&0x01
28a20 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
28a30 65 33 49 73 61 6c 6e 75 6d 28 78 29 20 20 20 28  e3Isalnum(x)   (
28a40 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
28a50 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
28a60 78 29 5d 26 30 78 30 36 29 0a 23 20 64 65 66 69  x)]&0x06).# defi
28a70 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 70 68  ne sqlite3Isalph
28a80 61 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43  a(x)   (sqlite3C
28a90 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
28aa0 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 32  d char)(x)]&0x02
28ab0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
28ac0 65 33 49 73 64 69 67 69 74 28 78 29 20 20 20 28  e3Isdigit(x)   (
28ad0 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
28ae0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
28af0 78 29 5d 26 30 78 30 34 29 0a 23 20 64 65 66 69  x)]&0x04).# defi
28b00 6e 65 20 73 71 6c 69 74 65 33 49 73 78 64 69 67  ne sqlite3Isxdig
28b10 69 74 28 78 29 20 20 28 73 71 6c 69 74 65 33 43  it(x)  (sqlite3C
28b20 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
28b30 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 38  d char)(x)]&0x08
28b40 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
28b50 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20 20 28  e3Tolower(x)   (
28b60 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f  sqlite3UpperToLo
28b70 77 65 72 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  wer[(unsigned ch
28b80 61 72 29 28 78 29 5d 29 0a 23 20 64 65 66 69 6e  ar)(x)]).# defin
28b90 65 20 73 71 6c 69 74 65 33 49 73 71 75 6f 74 65  e sqlite3Isquote
28ba0 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74  (x)   (sqlite3Ct
28bb0 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
28bc0 20 63 68 61 72 29 28 78 29 5d 26 30 78 38 30 29   char)(x)]&0x80)
28bd0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
28be0 73 71 6c 69 74 65 33 54 6f 75 70 70 65 72 28 78  sqlite3Toupper(x
28bf0 29 20 20 20 74 6f 75 70 70 65 72 28 28 75 6e 73  )   toupper((uns
28c00 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
28c10 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
28c20 49 73 73 70 61 63 65 28 78 29 20 20 20 69 73 73  Isspace(x)   iss
28c30 70 61 63 65 28 28 75 6e 73 69 67 6e 65 64 20 63  pace((unsigned c
28c40 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
28c50 65 20 73 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d  e sqlite3Isalnum
28c60 28 78 29 20 20 20 69 73 61 6c 6e 75 6d 28 28 75  (x)   isalnum((u
28c70 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
28c80 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
28c90 65 33 49 73 61 6c 70 68 61 28 78 29 20 20 20 69  e3Isalpha(x)   i
28ca0 73 61 6c 70 68 61 28 28 75 6e 73 69 67 6e 65 64  salpha((unsigned
28cb0 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
28cc0 69 6e 65 20 73 71 6c 69 74 65 33 49 73 64 69 67  ine sqlite3Isdig
28cd0 69 74 28 78 29 20 20 20 69 73 64 69 67 69 74 28  it(x)   isdigit(
28ce0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
28cf0 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  x)).# define sql
28d00 69 74 65 33 49 73 78 64 69 67 69 74 28 78 29 20  ite3Isxdigit(x) 
28d10 20 69 73 78 64 69 67 69 74 28 28 75 6e 73 69 67   isxdigit((unsig
28d20 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
28d30 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f  define sqlite3To
28d40 6c 6f 77 65 72 28 78 29 20 20 20 74 6f 6c 6f 77  lower(x)   tolow
28d50 65 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  er((unsigned cha
28d60 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
28d70 73 71 6c 69 74 65 33 49 73 71 75 6f 74 65 28 78  sqlite3Isquote(x
28d80 29 20 20 20 28 28 78 29 3d 3d 27 22 27 7c 7c 28  )   ((x)=='"'||(
28d90 78 29 3d 3d 27 5c 27 27 7c 7c 28 78 29 3d 3d 27  x)=='\''||(x)=='
28da0 5b 27 7c 7c 28 78 29 3d 3d 27 60 27 29 0a 23 65  ['||(x)=='`').#e
28db0 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33  ndif.int sqlite3
28dc0 49 73 49 64 43 68 61 72 28 75 38 29 3b 0a 0a 2f  IsIdChar(u8);../
28dd0 2a 0a 2a 2a 20 49 6e 74 65 72 6e 61 6c 20 66 75  *.** Internal fu
28de0 6e 63 74 69 6f 6e 20 70 72 6f 74 6f 74 79 70 65  nction prototype
28df0 73 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  s.*/.int sqlite3
28e00 53 74 72 49 43 6d 70 28 63 6f 6e 73 74 20 63 68  StrICmp(const ch
28e10 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  ar*,const char*)
28e20 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 72  ;.int sqlite3Str
28e30 6c 65 6e 33 30 28 63 6f 6e 73 74 20 63 68 61 72  len30(const char
28e40 2a 29 3b 0a 23 64 65 66 69 6e 65 20 73 71 6c 69  *);.#define sqli
28e50 74 65 33 53 74 72 6c 65 6e 33 30 4e 4e 28 43 29  te3Strlen30NN(C)
28e60 20 28 73 74 72 6c 65 6e 28 43 29 26 30 78 33 66   (strlen(C)&0x3f
28e70 66 66 66 66 66 66 29 0a 63 68 61 72 20 2a 73 71  ffffff).char *sq
28e80 6c 69 74 65 33 43 6f 6c 75 6d 6e 54 79 70 65 28  lite3ColumnType(
28e90 43 6f 6c 75 6d 6e 2a 2c 63 68 61 72 2a 29 3b 0a  Column*,char*);.
28ea0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53  #define sqlite3S
28eb0 74 72 4e 49 43 6d 70 20 73 71 6c 69 74 65 33 5f  trNICmp sqlite3_
28ec0 73 74 72 6e 69 63 6d 70 0a 0a 69 6e 74 20 73 71  strnicmp..int sq
28ed0 6c 69 74 65 33 4d 61 6c 6c 6f 63 49 6e 69 74 28  lite3MallocInit(
28ee0 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69  void);.void sqli
28ef0 74 65 33 4d 61 6c 6c 6f 63 45 6e 64 28 76 6f 69  te3MallocEnd(voi
28f00 64 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  d);.void *sqlite
28f10 33 4d 61 6c 6c 6f 63 28 75 36 34 29 3b 0a 76 6f  3Malloc(u64);.vo
28f20 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  id *sqlite3Mallo
28f30 63 5a 65 72 6f 28 75 36 34 29 3b 0a 76 6f 69 64  cZero(u64);.void
28f40 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f   *sqlite3DbMallo
28f50 63 5a 65 72 6f 28 73 71 6c 69 74 65 33 2a 2c 20  cZero(sqlite3*, 
28f60 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  u64);.void *sqli
28f70 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 73  te3DbMallocRaw(s
28f80 71 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a 76  qlite3*, u64);.v
28f90 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61  oid *sqlite3DbMa
28fa0 6c 6c 6f 63 52 61 77 4e 4e 28 73 71 6c 69 74 65  llocRawNN(sqlite
28fb0 33 2a 2c 20 75 36 34 29 3b 0a 63 68 61 72 20 2a  3*, u64);.char *
28fc0 73 71 6c 69 74 65 33 44 62 53 74 72 44 75 70 28  sqlite3DbStrDup(
28fd0 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
28fe0 68 61 72 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c  har*);.char *sql
28ff0 69 74 65 33 44 62 53 74 72 4e 44 75 70 28 73 71  ite3DbStrNDup(sq
29000 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
29010 72 2a 2c 20 75 36 34 29 3b 0a 63 68 61 72 20 2a  r*, u64);.char *
29020 73 71 6c 69 74 65 33 44 62 53 70 61 6e 44 75 70  sqlite3DbSpanDup
29030 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
29040 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
29050 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  *);.void *sqlite
29060 33 52 65 61 6c 6c 6f 63 28 76 6f 69 64 2a 2c 20  3Realloc(void*, 
29070 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  u64);.void *sqli
29080 74 65 33 44 62 52 65 61 6c 6c 6f 63 4f 72 46 72  te3DbReallocOrFr
29090 65 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f  ee(sqlite3 *, vo
290a0 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64  id *, u64);.void
290b0 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c   *sqlite3DbReall
290c0 6f 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f  oc(sqlite3 *, vo
290d0 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64  id *, u64);.void
290e0 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 73   sqlite3DbFree(s
290f0 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b  qlite3*, void*);
29100 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 62 46  .void sqlite3DbF
29110 72 65 65 4e 4e 28 73 71 6c 69 74 65 33 2a 2c 20  reeNN(sqlite3*, 
29120 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  void*);.int sqli
29130 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 28 76 6f  te3MallocSize(vo
29140 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  id*);.int sqlite
29150 33 44 62 4d 61 6c 6c 6f 63 53 69 7a 65 28 73 71  3DbMallocSize(sq
29160 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a  lite3*, void*);.
29170 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61 67  void *sqlite3Pag
29180 65 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f  eMalloc(int);.vo
29190 69 64 20 73 71 6c 69 74 65 33 50 61 67 65 46 72  id sqlite3PageFr
291a0 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20  ee(void*);.void 
291b0 73 71 6c 69 74 65 33 4d 65 6d 53 65 74 44 65 66  sqlite3MemSetDef
291c0 61 75 6c 74 28 76 6f 69 64 29 3b 0a 23 69 66 6e  ault(void);.#ifn
291d0 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53  def SQLITE_UNTES
291e0 54 41 42 4c 45 0a 76 6f 69 64 20 73 71 6c 69 74  TABLE.void sqlit
291f0 65 33 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 48 6f  e3BenignMallocHo
29200 6f 6b 73 28 76 6f 69 64 20 28 2a 29 28 76 6f 69  oks(void (*)(voi
29210 64 29 2c 20 76 6f 69 64 20 28 2a 29 28 76 6f 69  d), void (*)(voi
29220 64 29 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20  d));.#endif.int 
29230 73 71 6c 69 74 65 33 48 65 61 70 4e 65 61 72 6c  sqlite3HeapNearl
29240 79 46 75 6c 6c 28 76 6f 69 64 29 3b 0a 0a 2f 2a  yFull(void);../*
29250 0a 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73 20 77  .** On systems w
29260 69 74 68 20 61 6d 70 6c 65 20 73 74 61 63 6b 20  ith ample stack 
29270 73 70 61 63 65 20 61 6e 64 20 74 68 61 74 20 73  space and that s
29280 75 70 70 6f 72 74 20 61 6c 6c 6f 63 61 28 29 2c  upport alloca(),
29290 20 6d 61 6b 65 0a 2a 2a 20 75 73 65 20 6f 66 20   make.** use of 
292a0 61 6c 6c 6f 63 61 28 29 20 74 6f 20 6f 62 74 61  alloca() to obta
292b0 69 6e 20 73 70 61 63 65 20 66 6f 72 20 6c 61 72  in space for lar
292c0 67 65 20 61 75 74 6f 6d 61 74 69 63 20 6f 62 6a  ge automatic obj
292d0 65 63 74 73 2e 20 20 42 79 20 64 65 66 61 75 6c  ects.  By defaul
292e0 74 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20 73 70 61  t,.** obtain spa
292f0 63 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29  ce from malloc()
29300 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c 6f  ..**.** The allo
29310 63 61 28 29 20 72 6f 75 74 69 6e 65 20 6e 65 76  ca() routine nev
29320 65 72 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 2e  er returns NULL.
29330 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73    This will caus
29340 65 20 63 6f 64 65 20 70 61 74 68 73 0a 2a 2a 20  e code paths.** 
29350 74 68 61 74 20 64 65 61 6c 20 77 69 74 68 20 73  that deal with s
29360 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63  qlite3StackAlloc
29370 28 29 20 66 61 69 6c 75 72 65 73 20 74 6f 20 62  () failures to b
29380 65 20 75 6e 72 65 61 63 68 61 62 6c 65 2e 0a 2a  e unreachable..*
29390 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
293a0 55 53 45 5f 41 4c 4c 4f 43 41 0a 23 20 64 65 66  USE_ALLOCA.# def
293b0 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
293c0 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20  AllocRaw(D,N)   
293d0 61 6c 6c 6f 63 61 28 4e 29 0a 23 20 64 65 66 69  alloca(N).# defi
293e0 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41  ne sqlite3StackA
293f0 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 6d  llocZero(D,N)  m
29400 65 6d 73 65 74 28 61 6c 6c 6f 63 61 28 4e 29 2c  emset(alloca(N),
29410 20 30 2c 20 4e 29 0a 23 20 64 65 66 69 6e 65 20   0, N).# define 
29420 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65  sqlite3StackFree
29430 28 44 2c 50 29 0a 23 65 6c 73 65 0a 23 20 64 65  (D,P).#else.# de
29440 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
29450 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20  kAllocRaw(D,N)  
29460 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
29470 52 61 77 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e  Raw(D,N).# defin
29480 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c  e sqlite3StackAl
29490 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 73 71  locZero(D,N)  sq
294a0 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72  lite3DbMallocZer
294b0 6f 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20  o(D,N).# define 
294c0 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65  sqlite3StackFree
294d0 28 44 2c 50 29 20 20 20 20 20 20 20 73 71 6c 69  (D,P)       sqli
294e0 74 65 33 44 62 46 72 65 65 28 44 2c 50 29 0a 23  te3DbFree(D,P).#
294f0 65 6e 64 69 66 0a 0a 2f 2a 20 44 6f 20 6e 6f 74  endif../* Do not
29500 20 61 6c 6c 6f 77 20 62 6f 74 68 20 4d 45 4d 53   allow both MEMS
29510 59 53 35 20 61 6e 64 20 4d 45 4d 53 59 53 33 20  YS5 and MEMSYS3 
29520 74 6f 20 62 65 20 64 65 66 69 6e 65 64 20 74 6f  to be defined to
29530 67 65 74 68 65 72 2e 20 20 49 66 20 74 68 65 79  gether.  If they
29540 0a 2a 2a 20 61 72 65 2c 20 64 69 73 61 62 6c 65  .** are, disable
29550 20 4d 45 4d 53 59 53 33 0a 2a 2f 0a 23 69 66 64   MEMSYS3.*/.#ifd
29560 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
29570 5f 4d 45 4d 53 59 53 35 0a 63 6f 6e 73 74 20 73  _MEMSYS5.const s
29580 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f  qlite3_mem_metho
29590 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65  ds *sqlite3MemGe
295a0 74 4d 65 6d 73 79 73 35 28 76 6f 69 64 29 3b 0a  tMemsys5(void);.
295b0 23 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #undef SQLITE_EN
295c0 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a 23 65 6e  ABLE_MEMSYS3.#en
295d0 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54  dif.#ifdef SQLIT
295e0 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33  E_ENABLE_MEMSYS3
295f0 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d  .const sqlite3_m
29600 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69  em_methods *sqli
29610 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73 33  te3MemGetMemsys3
29620 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a  (void);.#endif..
29630 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
29640 4d 55 54 45 58 5f 4f 4d 49 54 0a 20 20 73 71 6c  MUTEX_OMIT.  sql
29650 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f  ite3_mutex_metho
29660 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65  ds const *sqlite
29670 33 44 65 66 61 75 6c 74 4d 75 74 65 78 28 76 6f  3DefaultMutex(vo
29680 69 64 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d  id);.  sqlite3_m
29690 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e  utex_methods con
296a0 73 74 20 2a 73 71 6c 69 74 65 33 4e 6f 6f 70 4d  st *sqlite3NoopM
296b0 75 74 65 78 28 76 6f 69 64 29 3b 0a 20 20 73 71  utex(void);.  sq
296c0 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c  lite3_mutex *sql
296d0 69 74 65 33 4d 75 74 65 78 41 6c 6c 6f 63 28 69  ite3MutexAlloc(i
296e0 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  nt);.  int sqlit
296f0 65 33 4d 75 74 65 78 49 6e 69 74 28 76 6f 69 64  e3MutexInit(void
29700 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
29710 4d 75 74 65 78 45 6e 64 28 76 6f 69 64 29 3b 0a  MutexEnd(void);.
29720 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69  #endif.#if !defi
29730 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55 54 45 58  ned(SQLITE_MUTEX
29740 5f 4f 4d 49 54 29 20 26 26 20 21 64 65 66 69 6e  _OMIT) && !defin
29750 65 64 28 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f  ed(SQLITE_MUTEX_
29760 4e 4f 4f 50 29 0a 20 20 76 6f 69 64 20 73 71 6c  NOOP).  void sql
29770 69 74 65 33 4d 65 6d 6f 72 79 42 61 72 72 69 65  ite3MemoryBarrie
29780 72 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 23  r(void);.#else.#
29790 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d   define sqlite3M
297a0 65 6d 6f 72 79 42 61 72 72 69 65 72 28 29 0a 23  emoryBarrier().#
297b0 65 6e 64 69 66 0a 0a 73 71 6c 69 74 65 33 5f 69  endif..sqlite3_i
297c0 6e 74 36 34 20 73 71 6c 69 74 65 33 53 74 61 74  nt64 sqlite3Stat
297d0 75 73 56 61 6c 75 65 28 69 6e 74 29 3b 0a 76 6f  usValue(int);.vo
297e0 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 75 73  id sqlite3Status
297f0 55 70 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  Up(int, int);.vo
29800 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 75 73  id sqlite3Status
29810 44 6f 77 6e 28 69 6e 74 2c 20 69 6e 74 29 3b 0a  Down(int, int);.
29820 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74  void sqlite3Stat
29830 75 73 48 69 67 68 77 61 74 65 72 28 69 6e 74 2c  usHighwater(int,
29840 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
29850 65 33 4c 6f 6f 6b 61 73 69 64 65 55 73 65 64 28  e3LookasideUsed(
29860 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2a 29 3b 0a  sqlite3*,int*);.
29870 0a 2f 2a 20 41 63 63 65 73 73 20 74 6f 20 6d 75  ./* Access to mu
29880 74 65 78 65 73 20 75 73 65 64 20 62 79 20 73 71  texes used by sq
29890 6c 69 74 65 33 5f 73 74 61 74 75 73 28 29 20 2a  lite3_status() *
298a0 2f 0a 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20  /.sqlite3_mutex 
298b0 2a 73 71 6c 69 74 65 33 50 63 61 63 68 65 31 4d  *sqlite3Pcache1M
298c0 75 74 65 78 28 76 6f 69 64 29 3b 0a 73 71 6c 69  utex(void);.sqli
298d0 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74  te3_mutex *sqlit
298e0 65 33 4d 61 6c 6c 6f 63 4d 75 74 65 78 28 76 6f  e3MallocMutex(vo
298f0 69 64 29 3b 0a 0a 23 69 66 20 64 65 66 69 6e 65  id);..#if define
29900 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
29910 4d 55 4c 54 49 54 48 52 45 41 44 45 44 5f 43 48  MULTITHREADED_CH
29920 45 43 4b 53 29 20 26 26 20 21 64 65 66 69 6e 65  ECKS) && !define
29930 64 28 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f  d(SQLITE_MUTEX_O
29940 4d 49 54 29 0a 76 6f 69 64 20 73 71 6c 69 74 65  MIT).void sqlite
29950 33 4d 75 74 65 78 57 61 72 6e 4f 6e 43 6f 6e 74  3MutexWarnOnCont
29960 65 6e 74 69 6f 6e 28 73 71 6c 69 74 65 33 5f 6d  ention(sqlite3_m
29970 75 74 65 78 2a 29 3b 0a 23 65 6c 73 65 0a 23 20  utex*);.#else.# 
29980 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 75  define sqlite3Mu
29990 74 65 78 57 61 72 6e 4f 6e 43 6f 6e 74 65 6e 74  texWarnOnContent
299a0 69 6f 6e 28 78 29 0a 23 65 6e 64 69 66 0a 0a 23  ion(x).#endif..#
299b0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
299c0 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e  IT_FLOATING_POIN
299d0 54 0a 23 20 64 65 66 69 6e 65 20 45 58 50 37 35  T.# define EXP75
299e0 34 20 28 28 28 75 36 34 29 30 78 37 66 66 29 3c  4 (((u64)0x7ff)<
299f0 3c 35 32 29 0a 23 20 64 65 66 69 6e 65 20 4d 41  <52).# define MA
29a00 4e 37 35 34 20 28 28 28 28 75 36 34 29 31 29 3c  N754 ((((u64)1)<
29a10 3c 35 32 29 2d 31 29 0a 23 20 64 65 66 69 6e 65  <52)-1).# define
29a20 20 49 73 4e 61 4e 28 58 29 20 28 28 28 58 29 26   IsNaN(X) (((X)&
29a30 45 58 50 37 35 34 29 3d 3d 45 58 50 37 35 34 20  EXP754)==EXP754 
29a40 26 26 20 28 28 58 29 26 4d 41 4e 37 35 34 29 21  && ((X)&MAN754)!
29a50 3d 30 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  =0).  int sqlite
29a60 33 49 73 4e 61 4e 28 64 6f 75 62 6c 65 29 3b 0a  3IsNaN(double);.
29a70 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 49  #else.# define I
29a80 73 4e 61 4e 28 58 29 20 20 20 20 20 20 20 20 20  sNaN(X)         
29a90 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  0.# define sqlit
29aa0 65 33 49 73 4e 61 4e 28 58 29 20 20 30 0a 23 65  e3IsNaN(X)  0.#e
29ab0 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  ndif../*.** An i
29ac0 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
29ad0 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
29ae0 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72 6d 61  re holds informa
29af0 74 69 6f 6e 20 61 62 6f 75 74 20 53 51 4c 0a 2a  tion about SQL.*
29b00 2a 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 67 75  * functions argu
29b10 6d 65 6e 74 73 20 74 68 61 74 20 61 72 65 20 74  ments that are t
29b20 68 65 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f  he parameters to
29b30 20 74 68 65 20 70 72 69 6e 74 66 28 29 20 66 75   the printf() fu
29b40 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63  nction..*/.struc
29b50 74 20 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74  t PrintfArgument
29b60 73 20 7b 0a 20 20 69 6e 74 20 6e 41 72 67 3b 20  s {.  int nArg; 
29b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
29b80 2a 20 54 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f  * Total number o
29b90 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20  f arguments */. 
29ba0 20 69 6e 74 20 6e 55 73 65 64 3b 20 20 20 20 20   int nUsed;     
29bb0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
29bc0 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
29bd0 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a   used so far */.
29be0 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
29bf0 2a 2a 61 70 41 72 67 3b 20 20 20 2f 2a 20 54 68  **apArg;   /* Th
29c00 65 20 61 72 67 75 6d 65 6e 74 20 76 61 6c 75 65  e argument value
29c10 73 20 2a 2f 0a 7d 3b 0a 0a 63 68 61 72 20 2a 73  s */.};..char *s
29c20 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 73 71  qlite3MPrintf(sq
29c30 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
29c40 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a  r*, ...);.char *
29c50 73 71 6c 69 74 65 33 56 4d 50 72 69 6e 74 66 28  sqlite3VMPrintf(
29c60 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
29c70 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a  har*, va_list);.
29c80 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
29c90 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66  TE_DEBUG) || def
29ca0 69 6e 65 64 28 53 51 4c 49 54 45 5f 48 41 56 45  ined(SQLITE_HAVE
29cb0 5f 4f 53 5f 54 52 41 43 45 29 0a 20 20 76 6f 69  _OS_TRACE).  voi
29cc0 64 20 73 71 6c 69 74 65 33 44 65 62 75 67 50 72  d sqlite3DebugPr
29cd0 69 6e 74 66 28 63 6f 6e 73 74 20 63 68 61 72 2a  intf(const char*
29ce0 2c 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69 66 0a 23  , ...);.#endif.#
29cf0 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
29d00 45 5f 54 45 53 54 29 0a 20 20 76 6f 69 64 20 2a  E_TEST).  void *
29d10 73 71 6c 69 74 65 33 54 65 73 74 54 65 78 74 54  sqlite3TestTextT
29d20 6f 50 74 72 28 63 6f 6e 73 74 20 63 68 61 72 2a  oPtr(const char*
29d30 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64  );.#endif..#if d
29d40 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
29d50 42 55 47 29 0a 20 20 76 6f 69 64 20 73 71 6c 69  BUG).  void sqli
29d60 74 65 33 54 72 65 65 56 69 65 77 45 78 70 72 28  te3TreeViewExpr(
29d70 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74  TreeView*, const
29d80 20 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20 20 76   Expr*, u8);.  v
29d90 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56  oid sqlite3TreeV
29da0 69 65 77 42 61 72 65 45 78 70 72 4c 69 73 74 28  iewBareExprList(
29db0 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74  TreeView*, const
29dc0 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73   ExprList*, cons
29dd0 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64  t char*);.  void
29de0 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77   sqlite3TreeView
29df0 45 78 70 72 4c 69 73 74 28 54 72 65 65 56 69 65  ExprList(TreeVie
29e00 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72 4c 69  w*, const ExprLi
29e10 73 74 2a 2c 20 75 38 2c 20 63 6f 6e 73 74 20 63  st*, u8, const c
29e20 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  har*);.  void sq
29e30 6c 69 74 65 33 54 72 65 65 56 69 65 77 53 72 63  lite3TreeViewSrc
29e40 4c 69 73 74 28 54 72 65 65 56 69 65 77 2a 2c 20  List(TreeView*, 
29e50 63 6f 6e 73 74 20 53 72 63 4c 69 73 74 2a 29 3b  const SrcList*);
29e60 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54  .  void sqlite3T
29e70 72 65 65 56 69 65 77 53 65 6c 65 63 74 28 54 72  reeViewSelect(Tr
29e80 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 53  eeView*, const S
29e90 65 6c 65 63 74 2a 2c 20 75 38 29 3b 0a 20 20 76  elect*, u8);.  v
29ea0 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56  oid sqlite3TreeV
29eb0 69 65 77 57 69 74 68 28 54 72 65 65 56 69 65 77  iewWith(TreeView
29ec0 2a 2c 20 63 6f 6e 73 74 20 57 69 74 68 2a 2c 20  *, const With*, 
29ed0 75 38 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  u8);.#ifndef SQL
29ee0 49 54 45 5f 4f 4d 49 54 5f 57 49 4e 44 4f 57 46  ITE_OMIT_WINDOWF
29ef0 55 4e 43 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  UNC.  void sqlit
29f00 65 33 54 72 65 65 56 69 65 77 57 69 6e 64 6f 77  e3TreeViewWindow
29f10 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73  (TreeView*, cons
29f20 74 20 57 69 6e 64 6f 77 2a 2c 20 75 38 29 3b 0a  t Window*, u8);.
29f30 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72    void sqlite3Tr
29f40 65 65 56 69 65 77 57 69 6e 46 75 6e 63 28 54 72  eeViewWinFunc(Tr
29f50 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 57  eeView*, const W
29f60 69 6e 64 6f 77 2a 2c 20 75 38 29 3b 0a 23 65 6e  indow*, u8);.#en
29f70 64 69 66 0a 23 65 6e 64 69 66 0a 0a 0a 76 6f 69  dif.#endif...voi
29f80 64 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69  d sqlite3SetStri
29f90 6e 67 28 63 68 61 72 20 2a 2a 2c 20 73 71 6c 69  ng(char **, sqli
29fa0 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  te3*, const char
29fb0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
29fc0 45 72 72 6f 72 4d 73 67 28 50 61 72 73 65 2a 2c  ErrorMsg(Parse*,
29fd0 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e   const char*, ..
29fe0 2e 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  .);.int sqlite3E
29ff0 72 72 6f 72 54 6f 50 61 72 73 65 72 28 73 71 6c  rrorToParser(sql
2a000 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  ite3*,int);.void
2a010 20 73 71 6c 69 74 65 33 44 65 71 75 6f 74 65 28   sqlite3Dequote(
2a020 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
2a030 69 74 65 33 44 65 71 75 6f 74 65 45 78 70 72 28  ite3DequoteExpr(
2a040 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
2a050 69 74 65 33 54 6f 6b 65 6e 49 6e 69 74 28 54 6f  ite3TokenInit(To
2a060 6b 65 6e 2a 2c 63 68 61 72 2a 29 3b 0a 69 6e 74  ken*,char*);.int
2a070 20 73 71 6c 69 74 65 33 4b 65 79 77 6f 72 64 43   sqlite3KeywordC
2a080 6f 64 65 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e  ode(const unsign
2a090 65 64 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a  ed char*, int);.
2a0a0 69 6e 74 20 73 71 6c 69 74 65 33 52 75 6e 50 61  int sqlite3RunPa
2a0b0 72 73 65 72 28 50 61 72 73 65 2a 2c 20 63 6f 6e  rser(Parse*, con
2a0c0 73 74 20 63 68 61 72 2a 2c 20 63 68 61 72 20 2a  st char*, char *
2a0d0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2a0e0 46 69 6e 69 73 68 43 6f 64 69 6e 67 28 50 61 72  FinishCoding(Par
2a0f0 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  se*);.int sqlite
2a100 33 47 65 74 54 65 6d 70 52 65 67 28 50 61 72 73  3GetTempReg(Pars
2a110 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
2a120 33 52 65 6c 65 61 73 65 54 65 6d 70 52 65 67 28  3ReleaseTempReg(
2a130 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74  Parse*,int);.int
2a140 20 73 71 6c 69 74 65 33 47 65 74 54 65 6d 70 52   sqlite3GetTempR
2a150 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 29  ange(Parse*,int)
2a160 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
2a170 6c 65 61 73 65 54 65 6d 70 52 61 6e 67 65 28 50  leaseTempRange(P
2a180 61 72 73 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a  arse*,int,int);.
2a190 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 65 61  void sqlite3Clea
2a1a0 72 54 65 6d 70 52 65 67 43 61 63 68 65 28 50 61  rTempRegCache(Pa
2a1b0 72 73 65 2a 29 3b 0a 23 69 66 64 65 66 20 53 51  rse*);.#ifdef SQ
2a1c0 4c 49 54 45 5f 44 45 42 55 47 0a 69 6e 74 20 73  LITE_DEBUG.int s
2a1d0 71 6c 69 74 65 33 4e 6f 54 65 6d 70 73 49 6e 52  qlite3NoTempsInR
2a1e0 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 2c  ange(Parse*,int,
2a1f0 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 45 78 70  int);.#endif.Exp
2a200 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 6c  r *sqlite3ExprAl
2a210 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  loc(sqlite3*,int
2a220 2c 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c 69 6e  ,const Token*,in
2a230 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  t);.Expr *sqlite
2a240 33 45 78 70 72 28 73 71 6c 69 74 65 33 2a 2c 69  3Expr(sqlite3*,i
2a250 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  nt,const char*);
2a260 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
2a270 72 41 74 74 61 63 68 53 75 62 74 72 65 65 73 28  rAttachSubtrees(
2a280 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 45  sqlite3*,Expr*,E
2a290 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 45 78 70  xpr*,Expr*);.Exp
2a2a0 72 20 2a 73 71 6c 69 74 65 33 50 45 78 70 72 28  r *sqlite3PExpr(
2a2b0 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 45 78 70  Parse*, int, Exp
2a2c0 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  r*, Expr*);.void
2a2d0 20 73 71 6c 69 74 65 33 50 45 78 70 72 41 64 64   sqlite3PExprAdd
2a2e0 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 45  Select(Parse*, E
2a2f0 78 70 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  xpr*, Select*);.
2a300 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
2a310 72 41 6e 64 28 50 61 72 73 65 2a 2c 45 78 70 72  rAnd(Parse*,Expr
2a320 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 20  *, Expr*);.Expr 
2a330 2a 73 71 6c 69 74 65 33 45 78 70 72 53 69 6d 70  *sqlite3ExprSimp
2a340 6c 69 66 69 65 64 41 6e 64 4f 72 28 45 78 70 72  lifiedAndOr(Expr
2a350 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  *);.Expr *sqlite
2a360 33 45 78 70 72 46 75 6e 63 74 69 6f 6e 28 50 61  3ExprFunction(Pa
2a370 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20  rse*,ExprList*, 
2a380 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 76 6f  Token*, int);.vo
2a390 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 73  id sqlite3ExprAs
2a3a0 73 69 67 6e 56 61 72 4e 75 6d 62 65 72 28 50 61  signVarNumber(Pa
2a3b0 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 75 33 32  rse*, Expr*, u32
2a3c0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
2a3d0 78 70 72 44 65 6c 65 74 65 28 73 71 6c 69 74 65  xprDelete(sqlite
2a3e0 33 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  3*, Expr*);.void
2a3f0 20 73 71 6c 69 74 65 33 45 78 70 72 55 6e 6d 61   sqlite3ExprUnma
2a400 70 41 6e 64 44 65 6c 65 74 65 28 50 61 72 73 65  pAndDelete(Parse
2a410 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c  *, Expr*);.ExprL
2a420 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72  ist *sqlite3Expr
2a430 4c 69 73 74 41 70 70 65 6e 64 28 50 61 72 73 65  ListAppend(Parse
2a440 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72  *,ExprList*,Expr
2a450 2a 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71  *);.ExprList *sq
2a460 6c 69 74 65 33 45 78 70 72 4c 69 73 74 41 70 70  lite3ExprListApp
2a470 65 6e 64 56 65 63 74 6f 72 28 50 61 72 73 65 2a  endVector(Parse*
2a480 2c 45 78 70 72 4c 69 73 74 2a 2c 49 64 4c 69 73  ,ExprList*,IdLis
2a490 74 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  t*,Expr*);.void 
2a4a0 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53  sqlite3ExprListS
2a4b0 65 74 53 6f 72 74 4f 72 64 65 72 28 45 78 70 72  etSortOrder(Expr
2a4c0 4c 69 73 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a  List*,int,int);.
2a4d0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
2a4e0 4c 69 73 74 53 65 74 4e 61 6d 65 28 50 61 72 73  ListSetName(Pars
2a4f0 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 54 6f 6b  e*,ExprList*,Tok
2a500 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  en*,int);.void s
2a510 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53 65  qlite3ExprListSe
2a520 74 53 70 61 6e 28 50 61 72 73 65 2a 2c 45 78 70  tSpan(Parse*,Exp
2a530 72 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61  rList*,const cha
2a540 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  r*,const char*);
2a550 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
2a560 72 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69  rListDelete(sqli
2a570 74 65 33 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29  te3*, ExprList*)
2a580 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 45 78 70  ;.u32 sqlite3Exp
2a590 72 4c 69 73 74 46 6c 61 67 73 28 63 6f 6e 73 74  rListFlags(const
2a5a0 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74   ExprList*);.int
2a5b0 20 73 71 6c 69 74 65 33 49 6e 64 65 78 48 61 73   sqlite3IndexHas
2a5c0 44 75 70 6c 69 63 61 74 65 52 6f 6f 74 50 61 67  DuplicateRootPag
2a5d0 65 28 49 6e 64 65 78 2a 29 3b 0a 69 6e 74 20 73  e(Index*);.int s
2a5e0 71 6c 69 74 65 33 49 6e 69 74 28 73 71 6c 69 74  qlite3Init(sqlit
2a5f0 65 33 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 69 6e  e3*, char**);.in
2a600 74 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c  t sqlite3InitCal
2a610 6c 62 61 63 6b 28 76 6f 69 64 2a 2c 20 69 6e 74  lback(void*, int
2a620 2c 20 63 68 61 72 2a 2a 2c 20 63 68 61 72 2a 2a  , char**, char**
2a630 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e  );.int sqlite3In
2a640 69 74 4f 6e 65 28 73 71 6c 69 74 65 33 2a 2c 20  itOne(sqlite3*, 
2a650 69 6e 74 2c 20 63 68 61 72 2a 2a 2c 20 75 33 32  int, char**, u32
2a660 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
2a670 72 61 67 6d 61 28 50 61 72 73 65 2a 2c 54 6f 6b  ragma(Parse*,Tok
2a680 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  en*,Token*,Token
2a690 2a 2c 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20  *,int);.#ifndef 
2a6a0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
2a6b0 55 41 4c 54 41 42 4c 45 0a 4d 6f 64 75 6c 65 20  UALTABLE.Module 
2a6c0 2a 73 71 6c 69 74 65 33 50 72 61 67 6d 61 56 74  *sqlite3PragmaVt
2a6d0 61 62 52 65 67 69 73 74 65 72 28 73 71 6c 69 74  abRegister(sqlit
2a6e0 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 20 2a  e3*,const char *
2a6f0 7a 4e 61 6d 65 29 3b 0a 23 65 6e 64 69 66 0a 76  zName);.#endif.v
2a700 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 65 74  oid sqlite3Reset
2a710 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e  AllSchemasOfConn
2a720 65 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 29  ection(sqlite3*)
2a730 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
2a740 73 65 74 4f 6e 65 53 63 68 65 6d 61 28 73 71 6c  setOneSchema(sql
2a750 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  ite3*,int);.void
2a760 20 73 71 6c 69 74 65 33 43 6f 6c 6c 61 70 73 65   sqlite3Collapse
2a770 44 61 74 61 62 61 73 65 41 72 72 61 79 28 73 71  DatabaseArray(sq
2a780 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71  lite3*);.void sq
2a790 6c 69 74 65 33 43 6f 6d 6d 69 74 49 6e 74 65 72  lite3CommitInter
2a7a0 6e 61 6c 43 68 61 6e 67 65 73 28 73 71 6c 69 74  nalChanges(sqlit
2a7b0 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  e3*);.void sqlit
2a7c0 65 33 44 65 6c 65 74 65 43 6f 6c 75 6d 6e 4e 61  e3DeleteColumnNa
2a7d0 6d 65 73 28 73 71 6c 69 74 65 33 2a 2c 54 61 62  mes(sqlite3*,Tab
2a7e0 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  le*);.int sqlite
2a7f0 33 43 6f 6c 75 6d 6e 73 46 72 6f 6d 45 78 70 72  3ColumnsFromExpr
2a800 4c 69 73 74 28 50 61 72 73 65 2a 2c 45 78 70 72  List(Parse*,Expr
2a810 4c 69 73 74 2a 2c 69 31 36 2a 2c 43 6f 6c 75 6d  List*,i16*,Colum
2a820 6e 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  n**);.void sqlit
2a830 65 33 53 65 6c 65 63 74 41 64 64 43 6f 6c 75 6d  e3SelectAddColum
2a840 6e 54 79 70 65 41 6e 64 43 6f 6c 6c 61 74 69 6f  nTypeAndCollatio
2a850 6e 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c  n(Parse*,Table*,
2a860 53 65 6c 65 63 74 2a 2c 63 68 61 72 29 3b 0a 54  Select*,char);.T
2a870 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 52 65 73  able *sqlite3Res
2a880 75 6c 74 53 65 74 4f 66 53 65 6c 65 63 74 28 50  ultSetOfSelect(P
2a890 61 72 73 65 2a 2c 53 65 6c 65 63 74 2a 2c 63 68  arse*,Select*,ch
2a8a0 61 72 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  ar);.void sqlite
2a8b0 33 4f 70 65 6e 4d 61 73 74 65 72 54 61 62 6c 65  3OpenMasterTable
2a8c0 28 50 61 72 73 65 20 2a 2c 20 69 6e 74 29 3b 0a  (Parse *, int);.
2a8d0 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 50 72  Index *sqlite3Pr
2a8e0 69 6d 61 72 79 4b 65 79 49 6e 64 65 78 28 54 61  imaryKeyIndex(Ta
2a8f0 62 6c 65 2a 29 3b 0a 69 31 36 20 73 71 6c 69 74  ble*);.i16 sqlit
2a900 65 33 43 6f 6c 75 6d 6e 4f 66 49 6e 64 65 78 28  e3ColumnOfIndex(
2a910 49 6e 64 65 78 2a 2c 20 69 31 36 29 3b 0a 23 69  Index*, i16);.#i
2a920 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
2a930 5f 47 45 4e 45 52 41 54 45 44 5f 43 4f 4c 55 4d  _GENERATED_COLUM
2a940 4e 53 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  NS.# define sqli
2a950 74 65 33 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65  te3ColumnOfTable
2a960 28 54 2c 58 29 20 28 58 29 20 20 2f 2a 20 4e 6f  (T,X) (X)  /* No
2a970 2d 6f 70 20 70 61 73 73 2d 74 68 72 6f 75 67 68  -op pass-through
2a980 20 2a 2f 0a 23 65 6c 73 65 0a 20 20 69 31 36 20   */.#else.  i16 
2a990 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 4f 66 54  sqlite3ColumnOfT
2a9a0 61 62 6c 65 28 54 61 62 6c 65 2a 2c 20 69 31 36  able(Table*, i16
2a9b0 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  );.#endif.void s
2a9c0 71 6c 69 74 65 33 53 74 61 72 74 54 61 62 6c 65  qlite3StartTable
2a9d0 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54  (Parse*,Token*,T
2a9e0 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  oken*,int,int,in
2a9f0 74 2c 69 6e 74 29 3b 0a 23 69 66 20 53 51 4c 49  t,int);.#if SQLI
2aa00 54 45 5f 45 4e 41 42 4c 45 5f 48 49 44 44 45 4e  TE_ENABLE_HIDDEN
2aa10 5f 43 4f 4c 55 4d 4e 53 0a 20 20 76 6f 69 64 20  _COLUMNS.  void 
2aa20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 50 72 6f  sqlite3ColumnPro
2aa30 70 65 72 74 69 65 73 46 72 6f 6d 4e 61 6d 65 28  pertiesFromName(
2aa40 54 61 62 6c 65 2a 2c 20 43 6f 6c 75 6d 6e 2a 29  Table*, Column*)
2aa50 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
2aa60 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 50 72   sqlite3ColumnPr
2aa70 6f 70 65 72 74 69 65 73 46 72 6f 6d 4e 61 6d 65  opertiesFromName
2aa80 28 54 2c 43 29 20 2f 2a 20 6e 6f 2d 6f 70 20 2a  (T,C) /* no-op *
2aa90 2f 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  /.#endif.void sq
2aaa0 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e 28 50  lite3AddColumn(P
2aab0 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  arse*,Token*,Tok
2aac0 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
2aad0 65 33 41 64 64 4e 6f 74 4e 75 6c 6c 28 50 61 72  e3AddNotNull(Par
2aae0 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  se*, int);.void 
2aaf0 73 71 6c 69 74 65 33 41 64 64 50 72 69 6d 61 72  sqlite3AddPrimar
2ab00 79 4b 65 79 28 50 61 72 73 65 2a 2c 20 45 78 70  yKey(Parse*, Exp
2ab10 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74  rList*, int, int
2ab20 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
2ab30 69 74 65 33 41 64 64 43 68 65 63 6b 43 6f 6e 73  ite3AddCheckCons
2ab40 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 45  traint(Parse*, E
2ab50 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
2ab60 74 65 33 41 64 64 44 65 66 61 75 6c 74 56 61 6c  te3AddDefaultVal
2ab70 75 65 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c  ue(Parse*,Expr*,
2ab80 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
2ab90 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
2aba0 71 6c 69 74 65 33 41 64 64 43 6f 6c 6c 61 74 65  qlite3AddCollate
2abb0 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  Type(Parse*, Tok
2abc0 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
2abd0 65 33 41 64 64 47 65 6e 65 72 61 74 65 64 28 50  e3AddGenerated(P
2abe0 61 72 73 65 2a 2c 45 78 70 72 2a 2c 54 6f 6b 65  arse*,Expr*,Toke
2abf0 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
2ac00 33 45 6e 64 54 61 62 6c 65 28 50 61 72 73 65 2a  3EndTable(Parse*
2ac10 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 75  ,Token*,Token*,u
2ac20 38 2c 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20  8,Select*);.int 
2ac30 73 71 6c 69 74 65 33 50 61 72 73 65 55 72 69 28  sqlite3ParseUri(
2ac40 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
2ac50 74 20 63 68 61 72 2a 2c 75 6e 73 69 67 6e 65 64  t char*,unsigned
2ac60 20 69 6e 74 2a 2c 0a 20 20 20 20 20 20 20 20 20   int*,.         
2ac70 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
2ac80 65 33 5f 76 66 73 2a 2a 2c 63 68 61 72 2a 2a 2c  e3_vfs**,char**,
2ac90 63 68 61 72 20 2a 2a 29 3b 0a 23 69 66 64 65 66  char **);.#ifdef
2aca0 20 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45   SQLITE_HAS_CODE
2acb0 43 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 43  C.  int sqlite3C
2acc0 6f 64 65 63 51 75 65 72 79 50 61 72 61 6d 65 74  odecQueryParamet
2acd0 65 72 73 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  ers(sqlite3*,con
2ace0 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
2acf0 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64  har*);.#else.# d
2ad00 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64  efine sqlite3Cod
2ad10 65 63 51 75 65 72 79 50 61 72 61 6d 65 74 65 72  ecQueryParameter
2ad20 73 28 41 2c 42 2c 43 29 20 30 0a 23 65 6e 64 69  s(A,B,C) 0.#endi
2ad30 66 0a 42 74 72 65 65 20 2a 73 71 6c 69 74 65 33  f.Btree *sqlite3
2ad40 44 62 4e 61 6d 65 54 6f 42 74 72 65 65 28 73 71  DbNameToBtree(sq
2ad50 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
2ad60 72 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c  r*);..#ifdef SQL
2ad70 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 23  ITE_UNTESTABLE.#
2ad80 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46   define sqlite3F
2ad90 61 75 6c 74 53 69 6d 28 58 29 20 53 51 4c 49 54  aultSim(X) SQLIT
2ada0 45 5f 4f 4b 0a 23 65 6c 73 65 0a 20 20 69 6e 74  E_OK.#else.  int
2adb0 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d   sqlite3FaultSim
2adc0 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 42  (int);.#endif..B
2add0 69 74 76 65 63 20 2a 73 71 6c 69 74 65 33 42 69  itvec *sqlite3Bi
2ade0 74 76 65 63 43 72 65 61 74 65 28 75 33 32 29 3b  tvecCreate(u32);
2adf0 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76  .int sqlite3Bitv
2ae00 65 63 54 65 73 74 28 42 69 74 76 65 63 2a 2c 20  ecTest(Bitvec*, 
2ae10 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  u32);.int sqlite
2ae20 33 42 69 74 76 65 63 54 65 73 74 4e 6f 74 4e 75  3BitvecTestNotNu
2ae30 6c 6c 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29  ll(Bitvec*, u32)
2ae40 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74  ;.int sqlite3Bit
2ae50 76 65 63 53 65 74 28 42 69 74 76 65 63 2a 2c 20  vecSet(Bitvec*, 
2ae60 75 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  u32);.void sqlit
2ae70 65 33 42 69 74 76 65 63 43 6c 65 61 72 28 42 69  e3BitvecClear(Bi
2ae80 74 76 65 63 2a 2c 20 75 33 32 2c 20 76 6f 69 64  tvec*, u32, void
2ae90 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2aea0 42 69 74 76 65 63 44 65 73 74 72 6f 79 28 42 69  BitvecDestroy(Bi
2aeb0 74 76 65 63 2a 29 3b 0a 75 33 32 20 73 71 6c 69  tvec*);.u32 sqli
2aec0 74 65 33 42 69 74 76 65 63 53 69 7a 65 28 42 69  te3BitvecSize(Bi
2aed0 74 76 65 63 2a 29 3b 0a 23 69 66 6e 64 65 66 20  tvec*);.#ifndef 
2aee0 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c  SQLITE_UNTESTABL
2aef0 45 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74  E.int sqlite3Bit
2af00 76 65 63 42 75 69 6c 74 69 6e 54 65 73 74 28 69  vecBuiltinTest(i
2af10 6e 74 2c 69 6e 74 2a 29 3b 0a 23 65 6e 64 69 66  nt,int*);.#endif
2af20 0a 0a 52 6f 77 53 65 74 20 2a 73 71 6c 69 74 65  ..RowSet *sqlite
2af30 33 52 6f 77 53 65 74 49 6e 69 74 28 73 71 6c 69  3RowSetInit(sqli
2af40 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  te3*);.void sqli
2af50 74 65 33 52 6f 77 53 65 74 44 65 6c 65 74 65 28  te3RowSetDelete(
2af60 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  void*);.void sql
2af70 69 74 65 33 52 6f 77 53 65 74 43 6c 65 61 72 28  ite3RowSetClear(
2af80 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  void*);.void sql
2af90 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74  ite3RowSetInsert
2afa0 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 29 3b 0a  (RowSet*, i64);.
2afb0 69 6e 74 20 73 71 6c 69 74 65 33 52 6f 77 53 65  int sqlite3RowSe
2afc0 74 54 65 73 74 28 52 6f 77 53 65 74 2a 2c 20 69  tTest(RowSet*, i
2afd0 6e 74 20 69 42 61 74 63 68 2c 20 69 36 34 29 3b  nt iBatch, i64);
2afe0 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f 77 53  .int sqlite3RowS
2aff0 65 74 4e 65 78 74 28 52 6f 77 53 65 74 2a 2c 20  etNext(RowSet*, 
2b000 69 36 34 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c  i64*);..void sql
2b010 69 74 65 33 43 72 65 61 74 65 56 69 65 77 28 50  ite3CreateView(P
2b020 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  arse*,Token*,Tok
2b030 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c  en*,Token*,ExprL
2b040 69 73 74 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74  ist*,Select*,int
2b050 2c 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65 66  ,int);..#if !def
2b060 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
2b070 5f 56 49 45 57 29 20 7c 7c 20 21 64 65 66 69 6e  _VIEW) || !defin
2b080 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ed(SQLITE_OMIT_V
2b090 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 20 20 69  IRTUALTABLE).  i
2b0a0 6e 74 20 73 71 6c 69 74 65 33 56 69 65 77 47 65  nt sqlite3ViewGe
2b0b0 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 50 61 72  tColumnNames(Par
2b0c0 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23 65 6c  se*,Table*);.#el
2b0d0 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
2b0e0 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e  te3ViewGetColumn
2b0f0 4e 61 6d 65 73 28 41 2c 42 29 20 30 0a 23 65 6e  Names(A,B) 0.#en
2b100 64 69 66 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f  dif..#if SQLITE_
2b110 4d 41 58 5f 41 54 54 41 43 48 45 44 3e 33 30 0a  MAX_ATTACHED>30.
2b120 20 20 69 6e 74 20 73 71 6c 69 74 65 33 44 62 4d    int sqlite3DbM
2b130 61 73 6b 41 6c 6c 5a 65 72 6f 28 79 44 62 4d 61  askAllZero(yDbMa
2b140 73 6b 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64  sk);.#endif.void
2b150 20 73 71 6c 69 74 65 33 44 72 6f 70 54 61 62 6c   sqlite3DropTabl
2b160 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  e(Parse*, SrcLis
2b170 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  t*, int, int);.v
2b180 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 44  oid sqlite3CodeD
2b190 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  ropTable(Parse*,
2b1a0 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
2b1b0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2b1c0 44 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69  DeleteTable(sqli
2b1d0 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 76  te3*, Table*);.v
2b1e0 6f 69 64 20 73 71 6c 69 74 65 33 46 72 65 65 49  oid sqlite3FreeI
2b1f0 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 20 49  ndex(sqlite3*, I
2b200 6e 64 65 78 2a 29 3b 0a 23 69 66 6e 64 65 66 20  ndex*);.#ifndef 
2b210 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
2b220 49 4e 43 52 45 4d 45 4e 54 0a 20 20 76 6f 69 64  INCREMENT.  void
2b230 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72   sqlite3Autoincr
2b240 65 6d 65 6e 74 42 65 67 69 6e 28 50 61 72 73 65  ementBegin(Parse
2b250 20 2a 70 50 61 72 73 65 29 3b 0a 20 20 76 6f 69   *pParse);.  voi
2b260 64 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63  d sqlite3Autoinc
2b270 72 65 6d 65 6e 74 45 6e 64 28 50 61 72 73 65 20  rementEnd(Parse 
2b280 2a 70 50 61 72 73 65 29 3b 0a 23 65 6c 73 65 0a  *pParse);.#else.
2b290 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2b2a0 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67  AutoincrementBeg
2b2b0 69 6e 28 58 29 0a 23 20 64 65 66 69 6e 65 20 73  in(X).# define s
2b2c0 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d  qlite3Autoincrem
2b2d0 65 6e 74 45 6e 64 28 58 29 0a 23 65 6e 64 69 66  entEnd(X).#endif
2b2e0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 73  .void sqlite3Ins
2b2f0 65 72 74 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ert(Parse*, SrcL
2b300 69 73 74 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 49  ist*, Select*, I
2b310 64 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 55 70 73  dList*, int, Ups
2b320 65 72 74 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  ert*);.void *sql
2b330 69 74 65 33 41 72 72 61 79 41 6c 6c 6f 63 61 74  ite3ArrayAllocat
2b340 65 28 73 71 6c 69 74 65 33 2a 2c 76 6f 69 64 2a  e(sqlite3*,void*
2b350 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b  ,int,int*,int*);
2b360 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  .IdList *sqlite3
2b370 49 64 4c 69 73 74 41 70 70 65 6e 64 28 50 61 72  IdListAppend(Par
2b380 73 65 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 54 6f  se*, IdList*, To
2b390 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
2b3a0 65 33 49 64 4c 69 73 74 49 6e 64 65 78 28 49 64  e3IdListIndex(Id
2b3b0 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72  List*,const char
2b3c0 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c  *);.SrcList *sql
2b3d0 69 74 65 33 53 72 63 4c 69 73 74 45 6e 6c 61 72  ite3SrcListEnlar
2b3e0 67 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  ge(Parse*, SrcLi
2b3f0 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  st*, int, int);.
2b400 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  SrcList *sqlite3
2b410 53 72 63 4c 69 73 74 41 70 70 65 6e 64 28 50 61  SrcListAppend(Pa
2b420 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
2b430 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Token*, Token*);
2b440 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65  .SrcList *sqlite
2b450 33 53 72 63 4c 69 73 74 41 70 70 65 6e 64 46 72  3SrcListAppendFr
2b460 6f 6d 54 65 72 6d 28 50 61 72 73 65 2a 2c 20 53  omTerm(Parse*, S
2b470 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c  rcList*, Token*,
2b480 20 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20   Token*,.       
2b490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
2b4b0 6f 6b 65 6e 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  oken*, Select*, 
2b4c0 45 78 70 72 2a 2c 20 49 64 4c 69 73 74 2a 29 3b  Expr*, IdList*);
2b4d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63  .void sqlite3Src
2b4e0 4c 69 73 74 49 6e 64 65 78 65 64 42 79 28 50 61  ListIndexedBy(Pa
2b4f0 72 73 65 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a  rse *, SrcList *
2b500 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64  , Token *);.void
2b510 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 46   sqlite3SrcListF
2b520 75 6e 63 41 72 67 73 28 50 61 72 73 65 2a 2c 20  uncArgs(Parse*, 
2b530 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69  SrcList*, ExprLi
2b540 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
2b550 33 49 6e 64 65 78 65 64 42 79 4c 6f 6f 6b 75 70  3IndexedByLookup
2b560 28 50 61 72 73 65 20 2a 2c 20 73 74 72 75 63 74  (Parse *, struct
2b570 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29   SrcList_item *)
2b580 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72  ;.void sqlite3Sr
2b590 63 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e 54 79  cListShiftJoinTy
2b5a0 70 65 28 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f  pe(SrcList*);.vo
2b5b0 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  id sqlite3SrcLis
2b5c0 74 41 73 73 69 67 6e 43 75 72 73 6f 72 73 28 50  tAssignCursors(P
2b5d0 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29  arse*, SrcList*)
2b5e0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 64  ;.void sqlite3Id
2b5f0 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74  ListDelete(sqlit
2b600 65 33 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76  e3*, IdList*);.v
2b610 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69  oid sqlite3SrcLi
2b620 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  stDelete(sqlite3
2b630 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 49 6e  *, SrcList*);.In
2b640 64 65 78 20 2a 73 71 6c 69 74 65 33 41 6c 6c 6f  dex *sqlite3Allo
2b650 63 61 74 65 49 6e 64 65 78 4f 62 6a 65 63 74 28  cateIndexObject(
2b660 73 71 6c 69 74 65 33 2a 2c 69 31 36 2c 69 6e 74  sqlite3*,i16,int
2b670 2c 63 68 61 72 2a 2a 29 3b 0a 76 6f 69 64 20 73  ,char**);.void s
2b680 71 6c 69 74 65 33 43 72 65 61 74 65 49 6e 64 65  qlite3CreateInde
2b690 78 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c  x(Parse*,Token*,
2b6a0 54 6f 6b 65 6e 2a 2c 53 72 63 4c 69 73 74 2a 2c  Token*,SrcList*,
2b6b0 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 54 6f  ExprList*,int,To
2b6c0 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  ken*,.          
2b6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b6e0 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  Expr*, int, int,
2b6f0 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   u8);.void sqlit
2b700 65 33 44 72 6f 70 49 6e 64 65 78 28 50 61 72 73  e3DropIndex(Pars
2b710 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e  e*, SrcList*, in
2b720 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  t);.int sqlite3S
2b730 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 53 65  elect(Parse*, Se
2b740 6c 65 63 74 2a 2c 20 53 65 6c 65 63 74 44 65 73  lect*, SelectDes
2b750 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c  t*);.Select *sql
2b760 69 74 65 33 53 65 6c 65 63 74 4e 65 77 28 50 61  ite3SelectNew(Pa
2b770 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53  rse*,ExprList*,S
2b780 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78  rcList*,Expr*,Ex
2b790 70 72 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20  prList*,.       
2b7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b7b0 20 20 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74    Expr*,ExprList
2b7c0 2a 2c 75 33 32 2c 45 78 70 72 2a 29 3b 0a 76 6f  *,u32,Expr*);.vo
2b7d0 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  id sqlite3Select
2b7e0 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c  Delete(sqlite3*,
2b7f0 20 53 65 6c 65 63 74 2a 29 3b 0a 54 61 62 6c 65   Select*);.Table
2b800 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74   *sqlite3SrcList
2b810 4c 6f 6f 6b 75 70 28 50 61 72 73 65 2a 2c 20 53  Lookup(Parse*, S
2b820 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  rcList*);.int sq
2b830 6c 69 74 65 33 49 73 52 65 61 64 4f 6e 6c 79 28  lite3IsReadOnly(
2b840 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
2b850 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2b860 65 33 4f 70 65 6e 54 61 62 6c 65 28 50 61 72 73  e3OpenTable(Pars
2b870 65 2a 2c 20 69 6e 74 20 69 43 75 72 2c 20 69 6e  e*, int iCur, in
2b880 74 20 69 44 62 2c 20 54 61 62 6c 65 2a 2c 20 69  t iDb, Table*, i
2b890 6e 74 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64  nt);.#if defined
2b8a0 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55  (SQLITE_ENABLE_U
2b8b0 50 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d  PDATE_DELETE_LIM
2b8c0 49 54 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  IT) && !defined(
2b8d0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 55 42 51  SQLITE_OMIT_SUBQ
2b8e0 55 45 52 59 29 0a 45 78 70 72 20 2a 73 71 6c 69  UERY).Expr *sqli
2b8f0 74 65 33 4c 69 6d 69 74 57 68 65 72 65 28 50 61  te3LimitWhere(Pa
2b900 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78  rse*,SrcList*,Ex
2b910 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78  pr*,ExprList*,Ex
2b920 70 72 2a 2c 63 68 61 72 2a 29 3b 0a 23 65 6e 64  pr*,char*);.#end
2b930 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  if.void sqlite3D
2b940 65 6c 65 74 65 46 72 6f 6d 28 50 61 72 73 65 2a  eleteFrom(Parse*
2b950 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72  , SrcList*, Expr
2b960 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 45 78  *, ExprList*, Ex
2b970 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
2b980 65 33 55 70 64 61 74 65 28 50 61 72 73 65 2a 2c  e3Update(Parse*,
2b990 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c   SrcList*, ExprL
2b9a0 69 73 74 2a 2c 45 78 70 72 2a 2c 69 6e 74 2c 45  ist*,Expr*,int,E
2b9b0 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 0a  xprList*,Expr*,.
2b9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b9d0 20 20 20 55 70 73 65 72 74 2a 29 3b 0a 57 68 65     Upsert*);.Whe
2b9e0 72 65 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 57  reInfo *sqlite3W
2b9f0 68 65 72 65 42 65 67 69 6e 28 50 61 72 73 65 2a  hereBegin(Parse*
2ba00 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c  ,SrcList*,Expr*,
2ba10 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 4c 69  ExprList*,ExprLi
2ba20 73 74 2a 2c 75 31 36 2c 69 6e 74 29 3b 0a 76 6f  st*,u16,int);.vo
2ba30 69 64 20 73 71 6c 69 74 65 33 57 68 65 72 65 45  id sqlite3WhereE
2ba40 6e 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  nd(WhereInfo*);.
2ba50 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33 57 68  LogEst sqlite3Wh
2ba60 65 72 65 4f 75 74 70 75 74 52 6f 77 43 6f 75 6e  ereOutputRowCoun
2ba70 74 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69  t(WhereInfo*);.i
2ba80 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49  nt sqlite3WhereI
2ba90 73 44 69 73 74 69 6e 63 74 28 57 68 65 72 65 49  sDistinct(WhereI
2baa0 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  nfo*);.int sqlit
2bab0 65 33 57 68 65 72 65 49 73 4f 72 64 65 72 65 64  e3WhereIsOrdered
2bac0 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e  (WhereInfo*);.in
2bad0 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 4f 72  t sqlite3WhereOr
2bae0 64 65 72 42 79 4c 69 6d 69 74 4f 70 74 4c 61 62  derByLimitOptLab
2baf0 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  el(WhereInfo*);.
2bb00 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65  int sqlite3Where
2bb10 49 73 53 6f 72 74 65 64 28 57 68 65 72 65 49 6e  IsSorted(WhereIn
2bb20 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  fo*);.int sqlite
2bb30 33 57 68 65 72 65 43 6f 6e 74 69 6e 75 65 4c 61  3WhereContinueLa
2bb40 62 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b  bel(WhereInfo*);
2bb50 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72  .int sqlite3Wher
2bb60 65 42 72 65 61 6b 4c 61 62 65 6c 28 57 68 65 72  eBreakLabel(Wher
2bb70 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c  eInfo*);.int sql
2bb80 69 74 65 33 57 68 65 72 65 4f 6b 4f 6e 65 50 61  ite3WhereOkOnePa
2bb90 73 73 28 57 68 65 72 65 49 6e 66 6f 2a 2c 20 69  ss(WhereInfo*, i
2bba0 6e 74 2a 29 3b 0a 23 64 65 66 69 6e 65 20 4f 4e  nt*);.#define ON
2bbb0 45 50 41 53 53 5f 4f 46 46 20 20 20 20 20 20 30  EPASS_OFF      0
2bbc0 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 6f          /* Use o
2bbd0 66 20 4f 4e 45 50 41 53 53 20 6e 6f 74 20 61 6c  f ONEPASS not al
2bbe0 6c 6f 77 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  lowed */.#define
2bbf0 20 4f 4e 45 50 41 53 53 5f 53 49 4e 47 4c 45 20   ONEPASS_SINGLE 
2bc00 20 20 31 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e    1        /* ON
2bc10 45 50 41 53 53 20 76 61 6c 69 64 20 66 6f 72 20  EPASS valid for 
2bc20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 75 70 64  a single row upd
2bc30 61 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ate */.#define O
2bc40 4e 45 50 41 53 53 5f 4d 55 4c 54 49 20 20 20 20  NEPASS_MULTI    
2bc50 32 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e 45 50  2        /* ONEP
2bc60 41 53 53 20 69 73 20 76 61 6c 69 64 20 66 6f 72  ASS is valid for
2bc70 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a   multiple rows *
2bc80 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  /.void sqlite3Ex
2bc90 70 72 43 6f 64 65 4c 6f 61 64 49 6e 64 65 78 43  prCodeLoadIndexC
2bca0 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20 49 6e  olumn(Parse*, In
2bcb0 64 65 78 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  dex*, int, int, 
2bcc0 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
2bcd0 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75  3ExprCodeGetColu
2bce0 6d 6e 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  mn(Parse*, Table
2bcf0 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
2bd00 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69  , u8);.void sqli
2bd10 74 65 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f  te3ExprCodeGetCo
2bd20 6c 75 6d 6e 4f 66 54 61 62 6c 65 28 50 61 72 73  lumnOfTable(Pars
2bd30 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c  e*, Table*, int,
2bd40 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
2bd50 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
2bd60 4d 6f 76 65 28 50 61 72 73 65 2a 2c 20 69 6e 74  Move(Parse*, int
2bd70 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
2bd80 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
2bd90 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  e(Parse*, Expr*,
2bda0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
2bdb0 74 65 33 45 78 70 72 43 6f 64 65 43 6f 70 79 28  te3ExprCodeCopy(
2bdc0 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
2bdd0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2bde0 33 45 78 70 72 43 6f 64 65 46 61 63 74 6f 72 61  3ExprCodeFactora
2bdf0 62 6c 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ble(Parse*, Expr
2be00 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
2be10 69 74 65 33 45 78 70 72 43 6f 64 65 41 74 49 6e  ite3ExprCodeAtIn
2be20 69 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  it(Parse*, Expr*
2be30 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
2be40 74 65 33 45 78 70 72 43 6f 64 65 54 65 6d 70 28  te3ExprCodeTemp(
2be50 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
2be60 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  nt*);.int sqlite
2be70 33 45 78 70 72 43 6f 64 65 54 61 72 67 65 74 28  3ExprCodeTarget(
2be80 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
2be90 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2bea0 33 45 78 70 72 43 6f 64 65 41 6e 64 43 61 63 68  3ExprCodeAndCach
2beb0 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  e(Parse*, Expr*,
2bec0 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
2bed0 65 33 45 78 70 72 43 6f 64 65 45 78 70 72 4c 69  e3ExprCodeExprLi
2bee0 73 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c  st(Parse*, ExprL
2bef0 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ist*, int, int, 
2bf00 75 38 29 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c  u8);.#define SQL
2bf10 49 54 45 5f 45 43 45 4c 5f 44 55 50 20 20 20 20  ITE_ECEL_DUP    
2bf20 20 20 30 78 30 31 20 20 2f 2a 20 44 65 65 70 2c    0x01  /* Deep,
2bf30 20 6e 6f 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70   not shallow cop
2bf40 69 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ies */.#define S
2bf50 51 4c 49 54 45 5f 45 43 45 4c 5f 46 41 43 54 4f  QLITE_ECEL_FACTO
2bf60 52 20 20 20 30 78 30 32 20 20 2f 2a 20 46 61 63  R   0x02  /* Fac
2bf70 74 6f 72 20 6f 75 74 20 63 6f 6e 73 74 61 6e 74  tor out constant
2bf80 20 74 65 72 6d 73 20 2a 2f 0a 23 64 65 66 69 6e   terms */.#defin
2bf90 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 52 45  e SQLITE_ECEL_RE
2bfa0 46 20 20 20 20 20 20 30 78 30 34 20 20 2f 2a 20  F      0x04  /* 
2bfb0 55 73 65 20 45 78 70 72 4c 69 73 74 2e 75 2e 78  Use ExprList.u.x
2bfc0 2e 69 4f 72 64 65 72 42 79 43 6f 6c 20 2a 2f 0a  .iOrderByCol */.
2bfd0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45  #define SQLITE_E
2bfe0 43 45 4c 5f 4f 4d 49 54 52 45 46 20 20 30 78 30  CEL_OMITREF  0x0
2bff0 38 20 20 2f 2a 20 4f 6d 69 74 20 69 66 20 45 78  8  /* Omit if Ex
2c000 70 72 4c 69 73 74 2e 75 2e 78 2e 69 4f 72 64 65  prList.u.x.iOrde
2c010 72 42 79 43 6f 6c 20 2a 2f 0a 76 6f 69 64 20 73  rByCol */.void s
2c020 71 6c 69 74 65 33 45 78 70 72 49 66 54 72 75 65  qlite3ExprIfTrue
2c030 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
2c040 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
2c050 73 71 6c 69 74 65 33 45 78 70 72 49 66 46 61 6c  sqlite3ExprIfFal
2c060 73 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  se(Parse*, Expr*
2c070 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
2c080 64 20 73 71 6c 69 74 65 33 45 78 70 72 49 66 46  d sqlite3ExprIfF
2c090 61 6c 73 65 44 75 70 28 50 61 72 73 65 2a 2c 20  alseDup(Parse*, 
2c0a0 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  Expr*, int, int)
2c0b0 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33  ;.Table *sqlite3
2c0c0 46 69 6e 64 54 61 62 6c 65 28 73 71 6c 69 74 65  FindTable(sqlite
2c0d0 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  3*,const char*, 
2c0e0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 64  const char*);.#d
2c0f0 65 66 69 6e 65 20 4c 4f 43 41 54 45 5f 56 49 45  efine LOCATE_VIE
2c100 57 20 20 20 20 30 78 30 31 0a 23 64 65 66 69 6e  W    0x01.#defin
2c110 65 20 4c 4f 43 41 54 45 5f 4e 4f 45 52 52 20 20  e LOCATE_NOERR  
2c120 20 30 78 30 32 0a 54 61 62 6c 65 20 2a 73 71 6c   0x02.Table *sql
2c130 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 28  ite3LocateTable(
2c140 50 61 72 73 65 2a 2c 75 33 32 20 66 6c 61 67 73  Parse*,u32 flags
2c150 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f  ,const char*, co
2c160 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54 61 62 6c  nst char*);.Tabl
2c170 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65  e *sqlite3Locate
2c180 54 61 62 6c 65 49 74 65 6d 28 50 61 72 73 65 2a  TableItem(Parse*
2c190 2c 75 33 32 20 66 6c 61 67 73 2c 73 74 72 75 63  ,u32 flags,struc
2c1a0 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a  t SrcList_item *
2c1b0 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65  );.Index *sqlite
2c1c0 33 46 69 6e 64 49 6e 64 65 78 28 73 71 6c 69 74  3FindIndex(sqlit
2c1d0 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
2c1e0 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76   const char*);.v
2c1f0 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  oid sqlite3Unlin
2c200 6b 41 6e 64 44 65 6c 65 74 65 54 61 62 6c 65 28  kAndDeleteTable(
2c210 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e  sqlite3*,int,con
2c220 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
2c230 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64  sqlite3UnlinkAnd
2c240 44 65 6c 65 74 65 49 6e 64 65 78 28 73 71 6c 69  DeleteIndex(sqli
2c250 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  te3*,int,const c
2c260 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
2c270 74 65 33 56 61 63 75 75 6d 28 50 61 72 73 65 2a  te3Vacuum(Parse*
2c280 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 2a 29 3b 0a  ,Token*,Expr*);.
2c290 69 6e 74 20 73 71 6c 69 74 65 33 52 75 6e 56 61  int sqlite3RunVa
2c2a0 63 75 75 6d 28 63 68 61 72 2a 2a 2c 20 73 71 6c  cuum(char**, sql
2c2b0 69 74 65 33 2a 2c 20 69 6e 74 2c 20 73 71 6c 69  ite3*, int, sqli
2c2c0 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 63 68 61  te3_value*);.cha
2c2d0 72 20 2a 73 71 6c 69 74 65 33 4e 61 6d 65 46 72  r *sqlite3NameFr
2c2e0 6f 6d 54 6f 6b 65 6e 28 73 71 6c 69 74 65 33 2a  omToken(sqlite3*
2c2f0 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
2c300 71 6c 69 74 65 33 45 78 70 72 43 6f 6d 70 61 72  qlite3ExprCompar
2c310 65 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 20  e(Parse*,Expr*, 
2c320 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  Expr*, int);.int
2c330 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6d 70   sqlite3ExprComp
2c340 61 72 65 53 6b 69 70 28 45 78 70 72 2a 2c 20 45  areSkip(Expr*, E
2c350 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  xpr*, int);.int 
2c360 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 43  sqlite3ExprListC
2c370 6f 6d 70 61 72 65 28 45 78 70 72 4c 69 73 74 2a  ompare(ExprList*
2c380 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
2c390 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
2c3a0 70 72 49 6d 70 6c 69 65 73 45 78 70 72 28 50 61  prImpliesExpr(Pa
2c3b0 72 73 65 2a 2c 45 78 70 72 2a 2c 20 45 78 70 72  rse*,Expr*, Expr
2c3c0 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
2c3d0 69 74 65 33 45 78 70 72 49 6d 70 6c 69 65 73 4e  ite3ExprImpliesN
2c3e0 6f 6e 4e 75 6c 6c 52 6f 77 28 45 78 70 72 2a 2c  onNullRow(Expr*,
2c3f0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2c400 65 33 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67  e3ExprAnalyzeAgg
2c410 72 65 67 61 74 65 73 28 4e 61 6d 65 43 6f 6e 74  regates(NameCont
2c420 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  ext*, Expr*);.vo
2c430 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e  id sqlite3ExprAn
2c440 61 6c 79 7a 65 41 67 67 4c 69 73 74 28 4e 61 6d  alyzeAggList(Nam
2c450 65 43 6f 6e 74 65 78 74 2a 2c 45 78 70 72 4c 69  eContext*,ExprLi
2c460 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
2c470 33 45 78 70 72 43 6f 76 65 72 65 64 42 79 49 6e  3ExprCoveredByIn
2c480 64 65 78 28 45 78 70 72 2a 2c 20 69 6e 74 20 69  dex(Expr*, int i
2c490 43 75 72 2c 20 49 6e 64 65 78 20 2a 70 49 64 78  Cur, Index *pIdx
2c4a0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 75  );.int sqlite3Fu
2c4b0 6e 63 74 69 6f 6e 55 73 65 73 54 68 69 73 53 72  nctionUsesThisSr
2c4c0 63 28 45 78 70 72 2a 2c 20 53 72 63 4c 69 73 74  c(Expr*, SrcList
2c4d0 2a 29 3b 0a 56 64 62 65 20 2a 73 71 6c 69 74 65  *);.Vdbe *sqlite
2c4e0 33 47 65 74 56 64 62 65 28 50 61 72 73 65 2a 29  3GetVdbe(Parse*)
2c4f0 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
2c500 5f 55 4e 54 45 53 54 41 42 4c 45 0a 76 6f 69 64  _UNTESTABLE.void
2c510 20 73 71 6c 69 74 65 33 50 72 6e 67 53 61 76 65   sqlite3PrngSave
2c520 53 74 61 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69  State(void);.voi
2c530 64 20 73 71 6c 69 74 65 33 50 72 6e 67 52 65 73  d sqlite3PrngRes
2c540 74 6f 72 65 53 74 61 74 65 28 76 6f 69 64 29 3b  toreState(void);
2c550 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
2c560 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28  ite3RollbackAll(
2c570 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76  sqlite3*,int);.v
2c580 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 56  oid sqlite3CodeV
2c590 65 72 69 66 79 53 63 68 65 6d 61 28 50 61 72 73  erifySchema(Pars
2c5a0 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e*, int);.void s
2c5b0 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79  qlite3CodeVerify
2c5c0 4e 61 6d 65 64 53 63 68 65 6d 61 28 50 61 72 73  NamedSchema(Pars
2c5d0 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  e*, const char *
2c5e0 7a 44 62 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  zDb);.void sqlit
2c5f0 65 33 42 65 67 69 6e 54 72 61 6e 73 61 63 74 69  e3BeginTransacti
2c600 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b  on(Parse*, int);
2c610 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e 64  .void sqlite3End
2c620 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73  Transaction(Pars
2c630 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  e*,int);.void sq
2c640 6c 69 74 65 33 53 61 76 65 70 6f 69 6e 74 28 50  lite3Savepoint(P
2c650 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65  arse*, int, Toke
2c660 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
2c670 33 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74 73  3CloseSavepoints
2c680 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 76 6f 69  (sqlite3 *);.voi
2c690 64 20 73 71 6c 69 74 65 33 4c 65 61 76 65 4d 75  d sqlite3LeaveMu
2c6a0 74 65 78 41 6e 64 43 6c 6f 73 65 5a 6f 6d 62 69  texAndCloseZombi
2c6b0 65 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74  e(sqlite3*);.int
2c6c0 20 73 71 6c 69 74 65 33 45 78 70 72 49 64 54 6f   sqlite3ExprIdTo
2c6d0 54 72 75 65 46 61 6c 73 65 28 45 78 70 72 2a 29  TrueFalse(Expr*)
2c6e0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
2c6f0 72 54 72 75 74 68 56 61 6c 75 65 28 63 6f 6e 73  rTruthValue(cons
2c700 74 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  t Expr*);.int sq
2c710 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74  lite3ExprIsConst
2c720 61 6e 74 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20  ant(Expr*);.int 
2c730 73 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e  sqlite3ExprIsCon
2c740 73 74 61 6e 74 4e 6f 74 4a 6f 69 6e 28 45 78 70  stantNotJoin(Exp
2c750 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
2c760 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4f 72  ExprIsConstantOr
2c770 46 75 6e 63 74 69 6f 6e 28 45 78 70 72 2a 2c 20  Function(Expr*, 
2c780 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  u8);.int sqlite3
2c790 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4f 72  ExprIsConstantOr
2c7a0 47 72 6f 75 70 42 79 28 50 61 72 73 65 2a 2c 20  GroupBy(Parse*, 
2c7b0 45 78 70 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a  Expr*, ExprList*
2c7c0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
2c7d0 70 72 49 73 54 61 62 6c 65 43 6f 6e 73 74 61 6e  prIsTableConstan
2c7e0 74 28 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 23 69  t(Expr*,int);.#i
2c7f0 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
2c800 4c 45 5f 43 55 52 53 4f 52 5f 48 49 4e 54 53 0a  LE_CURSOR_HINTS.
2c810 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
2c820 6f 6e 74 61 69 6e 73 53 75 62 71 75 65 72 79 28  ontainsSubquery(
2c830 45 78 70 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 69  Expr*);.#endif.i
2c840 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73  nt sqlite3ExprIs
2c850 49 6e 74 65 67 65 72 28 45 78 70 72 2a 2c 20 69  Integer(Expr*, i
2c860 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  nt*);.int sqlite
2c870 33 45 78 70 72 43 61 6e 42 65 4e 75 6c 6c 28 63  3ExprCanBeNull(c
2c880 6f 6e 73 74 20 45 78 70 72 2a 29 3b 0a 69 6e 74  onst Expr*);.int
2c890 20 73 71 6c 69 74 65 33 45 78 70 72 4e 65 65 64   sqlite3ExprNeed
2c8a0 73 4e 6f 41 66 66 69 6e 69 74 79 43 68 61 6e 67  sNoAffinityChang
2c8b0 65 28 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20 63  e(const Expr*, c
2c8c0 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  har);.int sqlite
2c8d0 33 49 73 52 6f 77 69 64 28 63 6f 6e 73 74 20 63  3IsRowid(const c
2c8e0 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
2c8f0 74 65 33 47 65 6e 65 72 61 74 65 52 6f 77 44 65  te3GenerateRowDe
2c900 6c 65 74 65 28 0a 20 20 20 20 50 61 72 73 65 2a  lete(.    Parse*
2c910 2c 54 61 62 6c 65 2a 2c 54 72 69 67 67 65 72 2a  ,Table*,Trigger*
2c920 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 31 36  ,int,int,int,i16
2c930 2c 75 38 2c 75 38 2c 75 38 2c 69 6e 74 29 3b 0a  ,u8,u8,u8,int);.
2c940 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65  void sqlite3Gene
2c950 72 61 74 65 52 6f 77 49 6e 64 65 78 44 65 6c 65  rateRowIndexDele
2c960 74 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  te(Parse*, Table
2c970 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
2c980 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
2c990 69 74 65 33 47 65 6e 65 72 61 74 65 49 6e 64 65  ite3GenerateInde
2c9a0 78 4b 65 79 28 50 61 72 73 65 2a 2c 20 49 6e 64  xKey(Parse*, Ind
2c9b0 65 78 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  ex*, int, int, i
2c9c0 6e 74 2c 20 69 6e 74 2a 2c 49 6e 64 65 78 2a 2c  nt, int*,Index*,
2c9d0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2c9e0 65 33 52 65 73 6f 6c 76 65 50 61 72 74 49 64 78  e3ResolvePartIdx
2c9f0 4c 61 62 65 6c 28 50 61 72 73 65 2a 2c 69 6e 74  Label(Parse*,int
2ca00 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
2ca10 70 72 52 65 66 65 72 65 6e 63 65 73 55 70 64 61  prReferencesUpda
2ca20 74 65 64 43 6f 6c 75 6d 6e 28 45 78 70 72 2a 2c  tedColumn(Expr*,
2ca30 69 6e 74 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  int*,int);.void 
2ca40 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 43  sqlite3GenerateC
2ca50 6f 6e 73 74 72 61 69 6e 74 43 68 65 63 6b 73 28  onstraintChecks(
2ca60 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e  Parse*,Table*,in
2ca70 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69  t*,int,int,int,i
2ca80 6e 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  nt,.            
2ca90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2caa0 20 20 20 20 20 20 20 20 20 75 38 2c 75 38 2c 69           u8,u8,i
2cab0 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a 2c 55 70 73  nt,int*,int*,Ups
2cac0 65 72 74 2a 29 3b 0a 23 69 66 64 65 66 20 53 51  ert*);.#ifdef SQ
2cad0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4e 55 4c 4c  LITE_ENABLE_NULL
2cae0 5f 54 52 49 4d 0a 20 20 76 6f 69 64 20 73 71 6c  _TRIM.  void sql
2caf0 69 74 65 33 53 65 74 4d 61 6b 65 52 65 63 6f 72  ite3SetMakeRecor
2cb00 64 50 35 28 56 64 62 65 2a 2c 54 61 62 6c 65 2a  dP5(Vdbe*,Table*
2cb10 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
2cb20 65 20 73 71 6c 69 74 65 33 53 65 74 4d 61 6b 65  e sqlite3SetMake
2cb30 52 65 63 6f 72 64 50 35 28 41 2c 42 29 0a 23 65  RecordP5(A,B).#e
2cb40 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
2cb50 33 43 6f 6d 70 6c 65 74 65 49 6e 73 65 72 74 69  3CompleteInserti
2cb60 6f 6e 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a  on(Parse*,Table*
2cb70 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  ,int,int,int,int
2cb80 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a  *,int,int,int);.
2cb90 69 6e 74 20 73 71 6c 69 74 65 33 4f 70 65 6e 54  int sqlite3OpenT
2cba0 61 62 6c 65 41 6e 64 49 6e 64 69 63 65 73 28 50  ableAndIndices(P
2cbb0 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
2cbc0 6e 74 2c 20 75 38 2c 20 69 6e 74 2c 20 75 38 2a  nt, u8, int, u8*
2cbd0 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 76  , int*, int*);.v
2cbe0 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e  oid sqlite3Begin
2cbf0 57 72 69 74 65 4f 70 65 72 61 74 69 6f 6e 28 50  WriteOperation(P
2cc00 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  arse*, int, int)
2cc10 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 75  ;.void sqlite3Mu
2cc20 6c 74 69 57 72 69 74 65 28 50 61 72 73 65 2a 29  ltiWrite(Parse*)
2cc30 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61  ;.void sqlite3Ma
2cc40 79 41 62 6f 72 74 28 50 61 72 73 65 2a 29 3b 0a  yAbort(Parse*);.
2cc50 76 6f 69 64 20 73 71 6c 69 74 65 33 48 61 6c 74  void sqlite3Halt
2cc60 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65  Constraint(Parse
2cc70 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 63 68 61  *, int, int, cha
2cc80 72 2a 2c 20 69 38 2c 20 75 38 29 3b 0a 76 6f 69  r*, i8, u8);.voi
2cc90 64 20 73 71 6c 69 74 65 33 55 6e 69 71 75 65 43  d sqlite3UniqueC
2cca0 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a  onstraint(Parse*
2ccb0 2c 20 69 6e 74 2c 20 49 6e 64 65 78 2a 29 3b 0a  , int, Index*);.
2ccc0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77 69  void sqlite3Rowi
2ccd0 64 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73  dConstraint(Pars
2cce0 65 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65 2a 29  e*, int, Table*)
2ccf0 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
2cd00 78 70 72 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  xprDup(sqlite3*,
2cd10 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 45 78 70 72  Expr*,int);.Expr
2cd20 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70  List *sqlite3Exp
2cd30 72 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65 33  rListDup(sqlite3
2cd40 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 29  *,ExprList*,int)
2cd50 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74  ;.SrcList *sqlit
2cd60 65 33 53 72 63 4c 69 73 74 44 75 70 28 73 71 6c  e3SrcListDup(sql
2cd70 69 74 65 33 2a 2c 53 72 63 4c 69 73 74 2a 2c 69  ite3*,SrcList*,i
2cd80 6e 74 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c  nt);.IdList *sql
2cd90 69 74 65 33 49 64 4c 69 73 74 44 75 70 28 73 71  ite3IdListDup(sq
2cda0 6c 69 74 65 33 2a 2c 49 64 4c 69 73 74 2a 29 3b  lite3*,IdList*);
2cdb0 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69 74 65 33  .Select *sqlite3
2cdc0 53 65 6c 65 63 74 44 75 70 28 73 71 6c 69 74 65  SelectDup(sqlite
2cdd0 33 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 29 3b  3*,Select*,int);
2cde0 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c 69 74 65  .FuncDef *sqlite
2cdf0 33 46 75 6e 63 74 69 6f 6e 53 65 61 72 63 68 28  3FunctionSearch(
2ce00 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  int,const char*)
2ce10 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e  ;.void sqlite3In
2ce20 73 65 72 74 42 75 69 6c 74 69 6e 46 75 6e 63 73  sertBuiltinFuncs
2ce30 28 46 75 6e 63 44 65 66 2a 2c 69 6e 74 29 3b 0a  (FuncDef*,int);.
2ce40 46 75 6e 63 44 65 66 20 2a 73 71 6c 69 74 65 33  FuncDef *sqlite3
2ce50 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c  FindFunction(sql
2ce60 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
2ce70 2a 2c 69 6e 74 2c 75 38 2c 75 38 29 3b 0a 76 6f  *,int,u8,u8);.vo
2ce80 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74  id sqlite3Regist
2ce90 65 72 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f  erBuiltinFunctio
2cea0 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73  ns(void);.void s
2ceb0 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 44 61  qlite3RegisterDa
2cec0 74 65 54 69 6d 65 46 75 6e 63 74 69 6f 6e 73 28  teTimeFunctions(
2ced0 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69  void);.void sqli
2cee0 74 65 33 52 65 67 69 73 74 65 72 50 65 72 43 6f  te3RegisterPerCo
2cef0 6e 6e 65 63 74 69 6f 6e 42 75 69 6c 74 69 6e 46  nnectionBuiltinF
2cf00 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65 33  unctions(sqlite3
2cf10 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  *);.int sqlite3S
2cf20 61 66 65 74 79 43 68 65 63 6b 4f 6b 28 73 71 6c  afetyCheckOk(sql
2cf30 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ite3*);.int sqli
2cf40 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 53 69  te3SafetyCheckSi
2cf50 63 6b 4f 72 4f 6b 28 73 71 6c 69 74 65 33 2a 29  ckOrOk(sqlite3*)
2cf60 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 68  ;.void sqlite3Ch
2cf70 61 6e 67 65 43 6f 6f 6b 69 65 28 50 61 72 73 65  angeCookie(Parse
2cf80 2a 2c 20 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64  *, int);..#if !d
2cf90 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
2cfa0 49 54 5f 56 49 45 57 29 20 26 26 20 21 64 65 66  IT_VIEW) && !def
2cfb0 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
2cfc0 5f 54 52 49 47 47 45 52 29 0a 76 6f 69 64 20 73  _TRIGGER).void s
2cfd0 71 6c 69 74 65 33 4d 61 74 65 72 69 61 6c 69 7a  qlite3Materializ
2cfe0 65 56 69 65 77 28 50 61 72 73 65 2a 2c 20 54 61  eView(Parse*, Ta
2cff0 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70  ble*, Expr*, Exp
2d000 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 69 6e 74  rList*,Expr*,int
2d010 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64  );.#endif..#ifnd
2d020 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ef SQLITE_OMIT_T
2d030 52 49 47 47 45 52 0a 20 20 76 6f 69 64 20 73 71  RIGGER.  void sq
2d040 6c 69 74 65 33 42 65 67 69 6e 54 72 69 67 67 65  lite3BeginTrigge
2d050 72 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  r(Parse*, Token*
2d060 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c  ,Token*,int,int,
2d070 49 64 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a  IdList*,SrcList*
2d080 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
2d090 20 20 20 20 20 20 20 20 20 20 20 20 20 45 78 70               Exp
2d0a0 72 2a 2c 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20  r*,int, int);.  
2d0b0 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6e 69  void sqlite3Fini
2d0c0 73 68 54 72 69 67 67 65 72 28 50 61 72 73 65 2a  shTrigger(Parse*
2d0d0 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a 2c 20  , TriggerStep*, 
2d0e0 54 6f 6b 65 6e 2a 29 3b 0a 20 20 76 6f 69 64 20  Token*);.  void 
2d0f0 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67  sqlite3DropTrigg
2d100 65 72 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  er(Parse*, SrcLi
2d110 73 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  st*, int);.  voi
2d120 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69  d sqlite3DropTri
2d130 67 67 65 72 50 74 72 28 50 61 72 73 65 2a 2c 20  ggerPtr(Parse*, 
2d140 54 72 69 67 67 65 72 2a 29 3b 0a 20 20 54 72 69  Trigger*);.  Tri
2d150 67 67 65 72 20 2a 73 71 6c 69 74 65 33 54 72 69  gger *sqlite3Tri
2d160 67 67 65 72 73 45 78 69 73 74 28 50 61 72 73 65  ggersExist(Parse
2d170 20 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c   *, Table*, int,
2d180 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 20   ExprList*, int 
2d190 2a 70 4d 61 73 6b 29 3b 0a 20 20 54 72 69 67 67  *pMask);.  Trigg
2d1a0 65 72 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67  er *sqlite3Trigg
2d1b0 65 72 4c 69 73 74 28 50 61 72 73 65 20 2a 2c 20  erList(Parse *, 
2d1c0 54 61 62 6c 65 20 2a 29 3b 0a 20 20 76 6f 69 64  Table *);.  void
2d1d0 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54   sqlite3CodeRowT
2d1e0 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54  rigger(Parse*, T
2d1f0 72 69 67 67 65 72 20 2a 2c 20 69 6e 74 2c 20 45  rigger *, int, E
2d200 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 54  xprList*, int, T
2d210 61 62 6c 65 20 2a 2c 0a 20 20 20 20 20 20 20 20  able *,.        
2d220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d230 20 20 20 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e      int, int, in
2d240 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  t);.  void sqlit
2d250 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72  e3CodeRowTrigger
2d260 44 69 72 65 63 74 28 50 61 72 73 65 20 2a 2c 20  Direct(Parse *, 
2d270 54 72 69 67 67 65 72 20 2a 2c 20 54 61 62 6c 65  Trigger *, Table
2d280 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e   *, int, int, in
2d290 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  t);.  void sqlit
2d2a0 65 56 69 65 77 54 72 69 67 67 65 72 73 28 50 61  eViewTriggers(Pa
2d2b0 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78  rse*, Table*, Ex
2d2c0 70 72 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69  pr*, int, ExprLi
2d2d0 73 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  st*);.  void sql
2d2e0 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67 65  ite3DeleteTrigge
2d2f0 72 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 20  rStep(sqlite3*, 
2d300 54 72 69 67 67 65 72 53 74 65 70 2a 29 3b 0a 20  TriggerStep*);. 
2d310 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71   TriggerStep *sq
2d320 6c 69 74 65 33 54 72 69 67 67 65 72 53 65 6c 65  lite3TriggerSele
2d330 63 74 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c  ctStep(sqlite3*,
2d340 53 65 6c 65 63 74 2a 2c 0a 20 20 20 20 20 20 20  Select*,.       
2d350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d370 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e   const char*,con
2d380 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 54 72 69  st char*);.  Tri
2d390 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65  ggerStep *sqlite
2d3a0 33 54 72 69 67 67 65 72 49 6e 73 65 72 74 53 74  3TriggerInsertSt
2d3b0 65 70 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  ep(Parse*,Token*
2d3c0 2c 20 49 64 4c 69 73 74 2a 2c 0a 20 20 20 20 20  , IdList*,.     
2d3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d3f0 20 20 20 53 65 6c 65 63 74 2a 2c 75 38 2c 55 70     Select*,u8,Up
2d400 73 65 72 74 2a 2c 0a 20 20 20 20 20 20 20 20 20  sert*,.         
2d410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
2d430 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
2d440 20 63 68 61 72 2a 29 3b 0a 20 20 54 72 69 67 67   char*);.  Trigg
2d450 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54  erStep *sqlite3T
2d460 72 69 67 67 65 72 55 70 64 61 74 65 53 74 65 70  riggerUpdateStep
2d470 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 45  (Parse*,Token*,E
2d480 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c  xprList*, Expr*,
2d490 20 75 38 2c 0a 20 20 20 20 20 20 20 20 20 20 20   u8,.           
2d4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
2d4c0 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
2d4d0 68 61 72 2a 29 3b 0a 20 20 54 72 69 67 67 65 72  har*);.  Trigger
2d4e0 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69  Step *sqlite3Tri
2d4f0 67 67 65 72 44 65 6c 65 74 65 53 74 65 70 28 50  ggerDeleteStep(P
2d500 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 20 45 78  arse*,Token*, Ex
2d510 70 72 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  pr*,.           
2d520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d530 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
2d540 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
2d550 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  har*);.  void sq
2d560 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67  lite3DeleteTrigg
2d570 65 72 28 73 71 6c 69 74 65 33 2a 2c 20 54 72 69  er(sqlite3*, Tri
2d580 67 67 65 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73  gger*);.  void s
2d590 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
2d5a0 65 6c 65 74 65 54 72 69 67 67 65 72 28 73 71 6c  eleteTrigger(sql
2d5b0 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  ite3*,int,const 
2d5c0 63 68 61 72 2a 29 3b 0a 20 20 75 33 32 20 73 71  char*);.  u32 sq
2d5d0 6c 69 74 65 33 54 72 69 67 67 65 72 43 6f 6c 6d  lite3TriggerColm
2d5e0 61 73 6b 28 50 61 72 73 65 2a 2c 54 72 69 67 67  ask(Parse*,Trigg
2d5f0 65 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e  er*,ExprList*,in
2d600 74 2c 69 6e 74 2c 54 61 62 6c 65 2a 2c 69 6e 74  t,int,Table*,int
2d610 29 3b 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  );.# define sqli
2d620 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76 65 6c  te3ParseToplevel
2d630 28 70 29 20 28 28 70 29 2d 3e 70 54 6f 70 6c 65  (p) ((p)->pTople
2d640 76 65 6c 20 3f 20 28 70 29 2d 3e 70 54 6f 70 6c  vel ? (p)->pTopl
2d650 65 76 65 6c 20 3a 20 28 70 29 29 0a 23 20 64 65  evel : (p)).# de
2d660 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 54 6f  fine sqlite3IsTo
2d670 70 6c 65 76 65 6c 28 70 29 20 28 28 70 29 2d 3e  plevel(p) ((p)->
2d680 70 54 6f 70 6c 65 76 65 6c 3d 3d 30 29 0a 23 65  pToplevel==0).#e
2d690 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
2d6a0 69 74 65 33 54 72 69 67 67 65 72 73 45 78 69 73  ite3TriggersExis
2d6b0 74 28 42 2c 43 2c 44 2c 45 2c 46 29 20 30 0a 23  t(B,C,D,E,F) 0.#
2d6c0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 44   define sqlite3D
2d6d0 65 6c 65 74 65 54 72 69 67 67 65 72 28 41 2c 42  eleteTrigger(A,B
2d6e0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
2d6f0 65 33 44 72 6f 70 54 72 69 67 67 65 72 50 74 72  e3DropTriggerPtr
2d700 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73  (A,B).# define s
2d710 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
2d720 65 6c 65 74 65 54 72 69 67 67 65 72 28 41 2c 42  eleteTrigger(A,B
2d730 2c 43 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,C).# define sql
2d740 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67  ite3CodeRowTrigg
2d750 65 72 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47  er(A,B,C,D,E,F,G
2d760 2c 48 2c 49 29 0a 23 20 64 65 66 69 6e 65 20 73  ,H,I).# define s
2d770 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69  qlite3CodeRowTri
2d780 67 67 65 72 44 69 72 65 63 74 28 41 2c 42 2c 43  ggerDirect(A,B,C
2d790 2c 44 2c 45 2c 46 29 0a 23 20 64 65 66 69 6e 65  ,D,E,F).# define
2d7a0 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 4c   sqlite3TriggerL
2d7b0 69 73 74 28 58 2c 20 59 29 20 30 0a 23 20 64 65  ist(X, Y) 0.# de
2d7c0 66 69 6e 65 20 73 71 6c 69 74 65 33 50 61 72 73  fine sqlite3Pars
2d7d0 65 54 6f 70 6c 65 76 65 6c 28 70 29 20 70 0a 23  eToplevel(p) p.#
2d7e0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
2d7f0 73 54 6f 70 6c 65 76 65 6c 28 70 29 20 31 0a 23  sToplevel(p) 1.#
2d800 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
2d810 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28 41 2c  riggerColmask(A,
2d820 42 2c 43 2c 44 2c 45 2c 46 2c 47 29 20 30 0a 23  B,C,D,E,F,G) 0.#
2d830 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74  endif..int sqlit
2d840 65 33 4a 6f 69 6e 54 79 70 65 28 50 61 72 73 65  e3JoinType(Parse
2d850 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
2d860 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  *, Token*);.void
2d870 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 46 6f   sqlite3CreateFo
2d880 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c  reignKey(Parse*,
2d890 20 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65   ExprList*, Toke
2d8a0 6e 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  n*, ExprList*, i
2d8b0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2d8c0 33 44 65 66 65 72 46 6f 72 65 69 67 6e 4b 65 79  3DeferForeignKey
2d8d0 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23  (Parse*, int);.#
2d8e0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2d8f0 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e  IT_AUTHORIZATION
2d900 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41  .  void sqlite3A
2d910 75 74 68 52 65 61 64 28 50 61 72 73 65 2a 2c 45  uthRead(Parse*,E
2d920 78 70 72 2a 2c 53 63 68 65 6d 61 2a 2c 53 72 63  xpr*,Schema*,Src
2d930 4c 69 73 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71  List*);.  int sq
2d940 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b 28 50  lite3AuthCheck(P
2d950 61 72 73 65 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74  arse*,int, const
2d960 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
2d970 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
2d980 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
2d990 33 41 75 74 68 43 6f 6e 74 65 78 74 50 75 73 68  3AuthContextPush
2d9a0 28 50 61 72 73 65 2a 2c 20 41 75 74 68 43 6f 6e  (Parse*, AuthCon
2d9b0 74 65 78 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61  text*, const cha
2d9c0 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  r*);.  void sqli
2d9d0 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 6f  te3AuthContextPo
2d9e0 70 28 41 75 74 68 43 6f 6e 74 65 78 74 2a 29 3b  p(AuthContext*);
2d9f0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75  .  int sqlite3Au
2da00 74 68 52 65 61 64 43 6f 6c 28 50 61 72 73 65 2a  thReadCol(Parse*
2da10 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  , const char *, 
2da20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e  const char *, in
2da30 74 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  t);.#else.# defi
2da40 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 52 65  ne sqlite3AuthRe
2da50 61 64 28 61 2c 62 2c 63 2c 64 29 0a 23 20 64 65  ad(a,b,c,d).# de
2da60 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68  fine sqlite3Auth
2da70 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 29  Check(a,b,c,d,e)
2da80 20 20 20 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20      SQLITE_OK.# 
2da90 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
2daa0 74 68 43 6f 6e 74 65 78 74 50 75 73 68 28 61 2c  thContextPush(a,
2dab0 62 2c 63 29 0a 23 20 64 65 66 69 6e 65 20 73 71  b,c).# define sq
2dac0 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74  lite3AuthContext
2dad0 50 6f 70 28 61 29 20 20 28 28 76 6f 69 64 29 28  Pop(a)  ((void)(
2dae0 61 29 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  a)).#endif.void 
2daf0 73 71 6c 69 74 65 33 41 74 74 61 63 68 28 50 61  sqlite3Attach(Pa
2db00 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70  rse*, Expr*, Exp
2db10 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  r*, Expr*);.void
2db20 20 73 71 6c 69 74 65 33 44 65 74 61 63 68 28 50   sqlite3Detach(P
2db30 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  arse*, Expr*);.v
2db40 6f 69 64 20 73 71 6c 69 74 65 33 46 69 78 49 6e  oid sqlite3FixIn
2db50 69 74 28 44 62 46 69 78 65 72 2a 2c 20 50 61 72  it(DbFixer*, Par
2db60 73 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20  se*, int, const 
2db70 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b  char*, const Tok
2db80 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
2db90 33 46 69 78 53 72 63 4c 69 73 74 28 44 62 46 69  3FixSrcList(DbFi
2dba0 78 65 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b  xer*, SrcList*);
2dbb0 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 53  .int sqlite3FixS
2dbc0 65 6c 65 63 74 28 44 62 46 69 78 65 72 2a 2c 20  elect(DbFixer*, 
2dbd0 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71  Select*);.int sq
2dbe0 6c 69 74 65 33 46 69 78 45 78 70 72 28 44 62 46  lite3FixExpr(DbF
2dbf0 69 78 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69  ixer*, Expr*);.i
2dc00 6e 74 20 73 71 6c 69 74 65 33 46 69 78 45 78 70  nt sqlite3FixExp
2dc10 72 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c 20  rList(DbFixer*, 
2dc20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20  ExprList*);.int 
2dc30 73 71 6c 69 74 65 33 46 69 78 54 72 69 67 67 65  sqlite3FixTrigge
2dc40 72 53 74 65 70 28 44 62 46 69 78 65 72 2a 2c 20  rStep(DbFixer*, 
2dc50 54 72 69 67 67 65 72 53 74 65 70 2a 29 3b 0a 69  TriggerStep*);.i
2dc60 6e 74 20 73 71 6c 69 74 65 33 52 65 61 6c 53 61  nt sqlite3RealSa
2dc70 6d 65 41 73 49 6e 74 28 64 6f 75 62 6c 65 2c 73  meAsInt(double,s
2dc80 71 6c 69 74 65 33 5f 69 6e 74 36 34 29 3b 0a 69  qlite3_int64);.i
2dc90 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 46 28 63  nt sqlite3AtoF(c
2dca0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 64 6f  onst char *z, do
2dcb0 75 62 6c 65 2a 2c 20 69 6e 74 2c 20 75 38 29 3b  uble*, int, u8);
2dcc0 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 49  .int sqlite3GetI
2dcd0 6e 74 33 32 28 63 6f 6e 73 74 20 63 68 61 72 20  nt32(const char 
2dce0 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71  *, int*);.int sq
2dcf0 6c 69 74 65 33 41 74 6f 69 28 63 6f 6e 73 74 20  lite3Atoi(const 
2dd00 63 68 61 72 2a 29 3b 0a 23 69 66 6e 64 65 66 20  char*);.#ifndef 
2dd10 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
2dd20 36 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66  6.int sqlite3Utf
2dd30 31 36 42 79 74 65 4c 65 6e 28 63 6f 6e 73 74 20  16ByteLen(const 
2dd40 76 6f 69 64 20 2a 70 44 61 74 61 2c 20 69 6e 74  void *pData, int
2dd50 20 6e 43 68 61 72 29 3b 0a 23 65 6e 64 69 66 0a   nChar);.#endif.
2dd60 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66 38 43  int sqlite3Utf8C
2dd70 68 61 72 4c 65 6e 28 63 6f 6e 73 74 20 63 68 61  harLen(const cha
2dd80 72 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e 42  r *pData, int nB
2dd90 79 74 65 29 3b 0a 75 33 32 20 73 71 6c 69 74 65  yte);.u32 sqlite
2dda0 33 55 74 66 38 52 65 61 64 28 63 6f 6e 73 74 20  3Utf8Read(const 
2ddb0 75 38 2a 2a 29 3b 0a 4c 6f 67 45 73 74 20 73 71  u8**);.LogEst sq
2ddc0 6c 69 74 65 33 4c 6f 67 45 73 74 28 75 36 34 29  lite3LogEst(u64)
2ddd0 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33  ;.LogEst sqlite3
2dde0 4c 6f 67 45 73 74 41 64 64 28 4c 6f 67 45 73 74  LogEstAdd(LogEst
2ddf0 2c 4c 6f 67 45 73 74 29 3b 0a 23 69 66 6e 64 65  ,LogEst);.#ifnde
2de00 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
2de10 52 54 55 41 4c 54 41 42 4c 45 0a 4c 6f 67 45 73  RTUALTABLE.LogEs
2de20 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 46  t sqlite3LogEstF
2de30 72 6f 6d 44 6f 75 62 6c 65 28 64 6f 75 62 6c 65  romDouble(double
2de40 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65  );.#endif.#if de
2de50 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
2de60 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41  BLE_STMT_SCANSTA
2de70 54 55 53 29 20 7c 7c 20 5c 0a 20 20 20 20 64 65  TUS) || \.    de
2de80 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
2de90 42 4c 45 5f 53 54 41 54 34 29 20 7c 7c 20 5c 0a  BLE_STAT4) || \.
2dea0 20 20 20 20 64 65 66 69 6e 65 64 28 53 51 4c 49      defined(SQLI
2deb0 54 45 5f 45 58 50 4c 41 49 4e 5f 45 53 54 49 4d  TE_EXPLAIN_ESTIM
2dec0 41 54 45 44 5f 52 4f 57 53 29 0a 75 36 34 20 73  ATED_ROWS).u64 s
2ded0 71 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e  qlite3LogEstToIn
2dee0 74 28 4c 6f 67 45 73 74 29 3b 0a 23 65 6e 64 69  t(LogEst);.#endi
2def0 66 0a 56 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  f.VList *sqlite3
2df00 56 4c 69 73 74 41 64 64 28 73 71 6c 69 74 65 33  VListAdd(sqlite3
2df10 2a 2c 56 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63  *,VList*,const c
2df20 68 61 72 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 63  har*,int,int);.c
2df30 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74  onst char *sqlit
2df40 65 33 56 4c 69 73 74 4e 75 6d 54 6f 4e 61 6d 65  e3VListNumToName
2df50 28 56 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 69 6e  (VList*,int);.in
2df60 74 20 73 71 6c 69 74 65 33 56 4c 69 73 74 4e 61  t sqlite3VListNa
2df70 6d 65 54 6f 4e 75 6d 28 56 4c 69 73 74 2a 2c 63  meToNum(VList*,c
2df80 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b  onst char*,int);
2df90 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65 73  ../*.** Routines
2dfa0 20 74 6f 20 72 65 61 64 20 61 6e 64 20 77 72 69   to read and wri
2dfb0 74 65 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67  te variable-leng
2dfc0 74 68 20 69 6e 74 65 67 65 72 73 2e 20 20 54 68  th integers.  Th
2dfd0 65 73 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62  ese used to.** b
2dfe0 65 20 64 65 66 69 6e 65 64 20 6c 6f 63 61 6c 6c  e defined locall
2dff0 79 2c 20 62 75 74 20 6e 6f 77 20 77 65 20 75 73  y, but now we us
2e000 65 20 74 68 65 20 76 61 72 69 6e 74 20 72 6f 75  e the varint rou
2e010 74 69 6e 65 73 20 69 6e 20 74 68 65 20 75 74 69  tines in the uti
2e020 6c 2e 63 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2f 0a  l.c.** file..*/.
2e030 69 6e 74 20 73 71 6c 69 74 65 33 50 75 74 56 61  int sqlite3PutVa
2e040 72 69 6e 74 28 75 6e 73 69 67 6e 65 64 20 63 68  rint(unsigned ch
2e050 61 72 2a 2c 20 75 36 34 29 3b 0a 75 38 20 73 71  ar*, u64);.u8 sq
2e060 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 28 63  lite3GetVarint(c
2e070 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
2e080 61 72 20 2a 2c 20 75 36 34 20 2a 29 3b 0a 75 38  ar *, u64 *);.u8
2e090 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e   sqlite3GetVarin
2e0a0 74 33 32 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e  t32(const unsign
2e0b0 65 64 20 63 68 61 72 20 2a 2c 20 75 33 32 20 2a  ed char *, u32 *
2e0c0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61  );.int sqlite3Va
2e0d0 72 69 6e 74 4c 65 6e 28 75 36 34 20 76 29 3b 0a  rintLen(u64 v);.
2e0e0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 6d 6f  ./*.** The commo
2e0f0 6e 20 63 61 73 65 20 69 73 20 66 6f 72 20 61 20  n case is for a 
2e100 76 61 72 69 6e 74 20 74 6f 20 62 65 20 61 20 73  varint to be a s
2e110 69 6e 67 6c 65 20 62 79 74 65 2e 20 20 54 68 65  ingle byte.  The
2e120 79 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 6d  y following.** m
2e130 61 63 72 6f 73 20 68 61 6e 64 6c 65 20 74 68 65  acros handle the
2e140 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 69 74   common case wit
2e150 68 6f 75 74 20 61 20 70 72 6f 63 65 64 75 72 65  hout a procedure
2e160 20 63 61 6c 6c 2c 20 62 75 74 20 74 68 65 6e 20   call, but then 
2e170 63 61 6c 6c 0a 2a 2a 20 74 68 65 20 70 72 6f 63  call.** the proc
2e180 65 64 75 72 65 20 66 6f 72 20 6c 61 72 67 65 72  edure for larger
2e190 20 76 61 72 69 6e 74 73 2e 0a 2a 2f 0a 23 64 65   varints..*/.#de
2e1a0 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74 33 32  fine getVarint32
2e1b0 28 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29 28  (A,B)  \.  (u8)(
2e1c0 28 2a 28 41 29 3c 28 75 38 29 30 78 38 30 29 3f  (*(A)<(u8)0x80)?
2e1d0 28 28 42 29 3d 28 75 33 32 29 2a 28 41 29 29 2c  ((B)=(u32)*(A)),
2e1e0 31 3a 73 71 6c 69 74 65 33 47 65 74 56 61 72 69  1:sqlite3GetVari
2e1f0 6e 74 33 32 28 28 41 29 2c 28 75 33 32 20 2a 29  nt32((A),(u32 *)
2e200 26 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20 70  &(B))).#define p
2e210 75 74 56 61 72 69 6e 74 33 32 28 41 2c 42 29 20  utVarint32(A,B) 
2e220 20 5c 0a 20 20 28 75 38 29 28 28 28 75 33 32 29   \.  (u8)(((u32)
2e230 28 42 29 3c 28 75 33 32 29 30 78 38 30 29 3f 28  (B)<(u32)0x80)?(
2e240 2a 28 41 29 3d 28 75 6e 73 69 67 6e 65 64 20 63  *(A)=(unsigned c
2e250 68 61 72 29 28 42 29 29 2c 31 3a 5c 0a 20 20 73  har)(B)),1:\.  s
2e260 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 28  qlite3PutVarint(
2e270 28 41 29 2c 28 42 29 29 29 0a 23 64 65 66 69 6e  (A),(B))).#defin
2e280 65 20 67 65 74 56 61 72 69 6e 74 20 20 20 20 73  e getVarint    s
2e290 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 0a  qlite3GetVarint.
2e2a0 23 64 65 66 69 6e 65 20 70 75 74 56 61 72 69 6e  #define putVarin
2e2b0 74 20 20 20 20 73 71 6c 69 74 65 33 50 75 74 56  t    sqlite3PutV
2e2c0 61 72 69 6e 74 0a 0a 0a 63 6f 6e 73 74 20 63 68  arint...const ch
2e2d0 61 72 20 2a 73 71 6c 69 74 65 33 49 6e 64 65 78  ar *sqlite3Index
2e2e0 41 66 66 69 6e 69 74 79 53 74 72 28 73 71 6c 69  AffinityStr(sqli
2e2f0 74 65 33 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 76  te3*, Index*);.v
2e300 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65  oid sqlite3Table
2e310 41 66 66 69 6e 69 74 79 28 56 64 62 65 2a 2c 20  Affinity(Vdbe*, 
2e320 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 63 68  Table*, int);.ch
2e330 61 72 20 73 71 6c 69 74 65 33 43 6f 6d 70 61 72  ar sqlite3Compar
2e340 65 41 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a  eAffinity(Expr *
2e350 70 45 78 70 72 2c 20 63 68 61 72 20 61 66 66 32  pExpr, char aff2
2e360 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e  );.int sqlite3In
2e370 64 65 78 41 66 66 69 6e 69 74 79 4f 6b 28 45 78  dexAffinityOk(Ex
2e380 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20  pr *pExpr, char 
2e390 69 64 78 5f 61 66 66 69 6e 69 74 79 29 3b 0a 63  idx_affinity);.c
2e3a0 68 61 72 20 73 71 6c 69 74 65 33 54 61 62 6c 65  har sqlite3Table
2e3b0 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28 54  ColumnAffinity(T
2e3c0 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 63 68 61 72  able*,int);.char
2e3d0 20 73 71 6c 69 74 65 33 45 78 70 72 41 66 66 69   sqlite3ExprAffi
2e3e0 6e 69 74 79 28 45 78 70 72 20 2a 70 45 78 70 72  nity(Expr *pExpr
2e3f0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74  );.int sqlite3At
2e400 6f 69 36 34 28 63 6f 6e 73 74 20 63 68 61 72 2a  oi64(const char*
2e410 2c 20 69 36 34 2a 2c 20 69 6e 74 2c 20 75 38 29  , i64*, int, u8)
2e420 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 65 63  ;.int sqlite3Dec
2e430 4f 72 48 65 78 54 6f 49 36 34 28 63 6f 6e 73 74  OrHexToI64(const
2e440 20 63 68 61 72 2a 2c 20 69 36 34 2a 29 3b 0a 76   char*, i64*);.v
2e450 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72  oid sqlite3Error
2e460 57 69 74 68 4d 73 67 28 73 71 6c 69 74 65 33 2a  WithMsg(sqlite3*
2e470 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61  , int, const cha
2e480 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71  r*,...);.void sq
2e490 6c 69 74 65 33 45 72 72 6f 72 28 73 71 6c 69 74  lite3Error(sqlit
2e4a0 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e3*,int);.void s
2e4b0 71 6c 69 74 65 33 53 79 73 74 65 6d 45 72 72 6f  qlite3SystemErro
2e4c0 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b  r(sqlite3*,int);
2e4d0 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 48 65  .void *sqlite3He
2e4e0 78 54 6f 42 6c 6f 62 28 73 71 6c 69 74 65 33 2a  xToBlob(sqlite3*
2e4f0 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c  , const char *z,
2e500 20 69 6e 74 20 6e 29 3b 0a 75 38 20 73 71 6c 69   int n);.u8 sqli
2e510 74 65 33 48 65 78 54 6f 49 6e 74 28 69 6e 74 20  te3HexToInt(int 
2e520 68 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54  h);.int sqlite3T
2e530 77 6f 50 61 72 74 4e 61 6d 65 28 50 61 72 73 65  woPartName(Parse
2e540 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b   *, Token *, Tok
2e550 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2a 29 3b  en *, Token **);
2e560 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ..#if defined(SQ
2e570 4c 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41  LITE_NEED_ERR_NA
2e580 4d 45 29 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a  ME).const char *
2e590 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28 69  sqlite3ErrName(i
2e5a0 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  nt);.#endif..#if
2e5b0 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
2e5c0 45 5f 44 45 53 45 52 49 41 4c 49 5a 45 0a 69 6e  E_DESERIALIZE.in
2e5d0 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 62 49 6e  t sqlite3MemdbIn
2e5e0 69 74 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66  it(void);.#endif
2e5f0 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71  ..const char *sq
2e600 6c 69 74 65 33 45 72 72 53 74 72 28 69 6e 74 29  lite3ErrStr(int)
2e610 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 61  ;.int sqlite3Rea
2e620 64 53 63 68 65 6d 61 28 50 61 72 73 65 20 2a 70  dSchema(Parse *p
2e630 50 61 72 73 65 29 3b 0a 43 6f 6c 6c 53 65 71 20  Parse);.CollSeq 
2e640 2a 73 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c 6c  *sqlite3FindColl
2e650 53 65 71 28 73 71 6c 69 74 65 33 2a 2c 75 38 20  Seq(sqlite3*,u8 
2e660 65 6e 63 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  enc, const char*
2e670 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ,int);.int sqlit
2e680 65 33 49 73 42 69 6e 61 72 79 28 63 6f 6e 73 74  e3IsBinary(const
2e690 20 43 6f 6c 6c 53 65 71 2a 29 3b 0a 43 6f 6c 6c   CollSeq*);.Coll
2e6a0 53 65 71 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61  Seq *sqlite3Loca
2e6b0 74 65 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20  teCollSeq(Parse 
2e6c0 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73 74 20 63  *pParse, const c
2e6d0 68 61 72 2a 7a 4e 61 6d 65 29 3b 0a 43 6f 6c 6c  har*zName);.Coll
2e6e0 53 65 71 20 2a 73 71 6c 69 74 65 33 45 78 70 72  Seq *sqlite3Expr
2e6f0 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70  CollSeq(Parse *p
2e700 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70 45 78  Parse, Expr *pEx
2e710 70 72 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71  pr);.CollSeq *sq
2e720 6c 69 74 65 33 45 78 70 72 4e 4e 43 6f 6c 6c 53  lite3ExprNNCollS
2e730 65 71 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  eq(Parse *pParse
2e740 2c 20 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a  , Expr *pExpr);.
2e750 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
2e760 6f 6c 6c 53 65 71 4d 61 74 63 68 28 50 61 72 73  ollSeqMatch(Pars
2e770 65 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b  e*,Expr*,Expr*);
2e780 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
2e790 70 72 41 64 64 43 6f 6c 6c 61 74 65 54 6f 6b 65  prAddCollateToke
2e7a0 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c  n(Parse *pParse,
2e7b0 20 45 78 70 72 2a 2c 20 63 6f 6e 73 74 20 54 6f   Expr*, const To
2e7c0 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 45 78 70 72  ken*, int);.Expr
2e7d0 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 64 64   *sqlite3ExprAdd
2e7e0 43 6f 6c 6c 61 74 65 53 74 72 69 6e 67 28 50 61  CollateString(Pa
2e7f0 72 73 65 2a 2c 45 78 70 72 2a 2c 63 6f 6e 73 74  rse*,Expr*,const
2e800 20 63 68 61 72 2a 29 3b 0a 45 78 70 72 20 2a 73   char*);.Expr *s
2e810 71 6c 69 74 65 33 45 78 70 72 53 6b 69 70 43 6f  qlite3ExprSkipCo
2e820 6c 6c 61 74 65 28 45 78 70 72 2a 29 3b 0a 45 78  llate(Expr*);.Ex
2e830 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 53  pr *sqlite3ExprS
2e840 6b 69 70 43 6f 6c 6c 61 74 65 41 6e 64 4c 69 6b  kipCollateAndLik
2e850 65 6c 79 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20  ely(Expr*);.int 
2e860 73 71 6c 69 74 65 33 43 68 65 63 6b 43 6f 6c 6c  sqlite3CheckColl
2e870 53 65 71 28 50 61 72 73 65 20 2a 2c 20 43 6f 6c  Seq(Parse *, Col
2e880 6c 53 65 71 20 2a 29 3b 0a 69 6e 74 20 73 71 6c  lSeq *);.int sql
2e890 69 74 65 33 57 72 69 74 61 62 6c 65 53 63 68 65  ite3WritableSche
2e8a0 6d 61 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e  ma(sqlite3*);.in
2e8b0 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 4f 62  t sqlite3CheckOb
2e8c0 6a 65 63 74 4e 61 6d 65 28 50 61 72 73 65 2a 2c  jectName(Parse*,
2e8d0 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e   const char*,con
2e8e0 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
2e8f0 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
2e900 74 65 33 56 64 62 65 53 65 74 43 68 61 6e 67 65  te3VdbeSetChange
2e910 73 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74  s(sqlite3 *, int
2e920 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 64  );.int sqlite3Ad
2e930 64 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29  dInt64(i64*,i64)
2e940 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 75 62  ;.int sqlite3Sub
2e950 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b  Int64(i64*,i64);
2e960 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 6c 49  .int sqlite3MulI
2e970 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a  nt64(i64*,i64);.
2e980 69 6e 74 20 73 71 6c 69 74 65 33 41 62 73 49 6e  int sqlite3AbsIn
2e990 74 33 32 28 69 6e 74 29 3b 0a 23 69 66 64 65 66  t32(int);.#ifdef
2e9a0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 38   SQLITE_ENABLE_8
2e9b0 5f 33 5f 4e 41 4d 45 53 0a 76 6f 69 64 20 73 71  _3_NAMES.void sq
2e9c0 6c 69 74 65 33 46 69 6c 65 53 75 66 66 69 78 33  lite3FileSuffix3
2e9d0 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 68  (const char*, ch
2e9e0 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  ar*);.#else.# de
2e9f0 66 69 6e 65 20 73 71 6c 69 74 65 33 46 69 6c 65  fine sqlite3File
2ea00 53 75 66 66 69 78 33 28 58 2c 59 29 0a 23 65 6e  Suffix3(X,Y).#en
2ea10 64 69 66 0a 75 38 20 73 71 6c 69 74 65 33 47 65  dif.u8 sqlite3Ge
2ea20 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73 74 20 63  tBoolean(const c
2ea30 68 61 72 20 2a 7a 2c 75 38 29 3b 0a 0a 63 6f 6e  har *z,u8);..con
2ea40 73 74 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  st void *sqlite3
2ea50 56 61 6c 75 65 54 65 78 74 28 73 71 6c 69 74 65  ValueText(sqlite
2ea60 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 69  3_value*, u8);.i
2ea70 6e 74 20 73 71 6c 69 74 65 33 56 61 6c 75 65 42  nt sqlite3ValueB
2ea80 79 74 65 73 28 73 71 6c 69 74 65 33 5f 76 61 6c  ytes(sqlite3_val
2ea90 75 65 2a 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73  ue*, u8);.void s
2eaa0 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74 53 74  qlite3ValueSetSt
2eab0 72 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  r(sqlite3_value*
2eac0 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69  , int, const voi
2ead0 64 20 2a 2c 75 38 2c 0a 20 20 20 20 20 20 20 20  d *,u8,.        
2eae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eaf0 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b  void(*)(void*));
2eb00 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c  .void sqlite3Val
2eb10 75 65 53 65 74 4e 75 6c 6c 28 73 71 6c 69 74 65  ueSetNull(sqlite
2eb20 33 5f 76 61 6c 75 65 2a 29 3b 0a 76 6f 69 64 20  3_value*);.void 
2eb30 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65  sqlite3ValueFree
2eb40 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29  (sqlite3_value*)
2eb50 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
2eb60 5f 55 4e 54 45 53 54 41 42 4c 45 0a 76 6f 69 64  _UNTESTABLE.void
2eb70 20 73 71 6c 69 74 65 33 52 65 73 75 6c 74 49 6e   sqlite3ResultIn
2eb80 74 52 65 61 6c 28 73 71 6c 69 74 65 33 5f 63 6f  tReal(sqlite3_co
2eb90 6e 74 65 78 74 2a 29 3b 0a 23 65 6e 64 69 66 0a  ntext*);.#endif.
2eba0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 73  sqlite3_value *s
2ebb0 71 6c 69 74 65 33 56 61 6c 75 65 4e 65 77 28 73  qlite3ValueNew(s
2ebc0 71 6c 69 74 65 33 20 2a 29 3b 0a 23 69 66 6e 64  qlite3 *);.#ifnd
2ebd0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  ef SQLITE_OMIT_U
2ebe0 54 46 31 36 0a 63 68 61 72 20 2a 73 71 6c 69 74  TF16.char *sqlit
2ebf0 65 33 55 74 66 31 36 74 6f 38 28 73 71 6c 69 74  e3Utf16to8(sqlit
2ec00 65 33 20 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64  e3 *, const void
2ec10 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 23 65 6e  *, int, u8);.#en
2ec20 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  dif.int sqlite3V
2ec30 61 6c 75 65 46 72 6f 6d 45 78 70 72 28 73 71 6c  alueFromExpr(sql
2ec40 69 74 65 33 20 2a 2c 20 45 78 70 72 20 2a 2c 20  ite3 *, Expr *, 
2ec50 75 38 2c 20 75 38 2c 20 73 71 6c 69 74 65 33 5f  u8, u8, sqlite3_
2ec60 76 61 6c 75 65 20 2a 2a 29 3b 0a 76 6f 69 64 20  value **);.void 
2ec70 73 71 6c 69 74 65 33 56 61 6c 75 65 41 70 70 6c  sqlite3ValueAppl
2ec80 79 41 66 66 69 6e 69 74 79 28 73 71 6c 69 74 65  yAffinity(sqlite
2ec90 33 5f 76 61 6c 75 65 20 2a 2c 20 75 38 2c 20 75  3_value *, u8, u
2eca0 38 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  8);.#ifndef SQLI
2ecb0 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a  TE_AMALGAMATION.
2ecc0 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73  extern const uns
2ecd0 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74  igned char sqlit
2ece0 65 33 4f 70 63 6f 64 65 50 72 6f 70 65 72 74 79  e3OpcodeProperty
2ecf0 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74  [];.extern const
2ed00 20 63 68 61 72 20 73 71 6c 69 74 65 33 53 74 72   char sqlite3Str
2ed10 42 49 4e 41 52 59 5b 5d 3b 0a 65 78 74 65 72 6e  BINARY[];.extern
2ed20 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
2ed30 63 68 61 72 20 73 71 6c 69 74 65 33 55 70 70 65  char sqlite3Uppe
2ed40 72 54 6f 4c 6f 77 65 72 5b 5d 3b 0a 65 78 74 65  rToLower[];.exte
2ed50 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  rn const unsigne
2ed60 64 20 63 68 61 72 20 73 71 6c 69 74 65 33 43 74  d char sqlite3Ct
2ed70 79 70 65 4d 61 70 5b 5d 3b 0a 65 78 74 65 72 6e  ypeMap[];.extern
2ed80 20 53 51 4c 49 54 45 5f 57 53 44 20 73 74 72 75   SQLITE_WSD stru
2ed90 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69 67  ct Sqlite3Config
2eda0 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 3b 0a   sqlite3Config;.
2edb0 65 78 74 65 72 6e 20 46 75 6e 63 44 65 66 48 61  extern FuncDefHa
2edc0 73 68 20 73 71 6c 69 74 65 33 42 75 69 6c 74 69  sh sqlite3Builti
2edd0 6e 46 75 6e 63 74 69 6f 6e 73 3b 0a 23 69 66 6e  nFunctions;.#ifn
2ede0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2edf0 57 53 44 0a 65 78 74 65 72 6e 20 69 6e 74 20 73  WSD.extern int s
2ee00 71 6c 69 74 65 33 50 65 6e 64 69 6e 67 42 79 74  qlite3PendingByt
2ee10 65 3b 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66  e;.#endif.#endif
2ee20 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f  .#ifdef VDBE_PRO
2ee30 46 49 4c 45 0a 65 78 74 65 72 6e 20 73 71 6c 69  FILE.extern sqli
2ee40 74 65 33 5f 75 69 6e 74 36 34 20 73 71 6c 69 74  te3_uint64 sqlit
2ee50 65 33 4e 50 72 6f 66 69 6c 65 43 6e 74 3b 0a 23  e3NProfileCnt;.#
2ee60 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
2ee70 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28  e3RootPageMoved(
2ee80 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69  sqlite3*, int, i
2ee90 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
2eea0 71 6c 69 74 65 33 52 65 69 6e 64 65 78 28 50 61  qlite3Reindex(Pa
2eeb0 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  rse*, Token*, To
2eec0 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
2eed0 74 65 33 41 6c 74 65 72 46 75 6e 63 74 69 6f 6e  te3AlterFunction
2eee0 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71  s(void);.void sq
2eef0 6c 69 74 65 33 41 6c 74 65 72 52 65 6e 61 6d 65  lite3AlterRename
2ef00 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72  Table(Parse*, Sr
2ef10 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  cList*, Token*);
2ef20 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74  .void sqlite3Alt
2ef30 65 72 52 65 6e 61 6d 65 43 6f 6c 75 6d 6e 28 50  erRenameColumn(P
2ef40 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
2ef50 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29   Token*, Token*)
2ef60 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74  ;.int sqlite3Get
2ef70 54 6f 6b 65 6e 28 63 6f 6e 73 74 20 75 6e 73 69  Token(const unsi
2ef80 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 69 6e 74  gned char *, int
2ef90 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
2efa0 33 4e 65 73 74 65 64 50 61 72 73 65 28 50 61 72  3NestedParse(Par
2efb0 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  se*, const char*
2efc0 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c  , ...);.void sql
2efd0 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61 72  ite3ExpirePrepar
2efe0 65 64 53 74 61 74 65 6d 65 6e 74 73 28 73 71 6c  edStatements(sql
2eff0 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  ite3*, int);.voi
2f000 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52 68 73  d sqlite3CodeRhs
2f010 4f 66 49 4e 28 50 61 72 73 65 2a 2c 20 45 78 70  OfIN(Parse*, Exp
2f020 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  r*, int);.int sq
2f030 6c 69 74 65 33 43 6f 64 65 53 75 62 73 65 6c 65  lite3CodeSubsele
2f040 63 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  ct(Parse*, Expr*
2f050 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
2f060 65 6c 65 63 74 50 72 65 70 28 50 61 72 73 65 2a  electPrep(Parse*
2f070 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43  , Select*, NameC
2f080 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f 69 64 20 73  ontext*);.void s
2f090 71 6c 69 74 65 33 53 65 6c 65 63 74 57 72 6f 6e  qlite3SelectWron
2f0a0 67 4e 75 6d 54 65 72 6d 73 45 72 72 6f 72 28 50  gNumTermsError(P
2f0b0 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 53 65  arse *pParse, Se
2f0c0 6c 65 63 74 20 2a 70 29 3b 0a 69 6e 74 20 73 71  lect *p);.int sq
2f0d0 6c 69 74 65 33 4d 61 74 63 68 53 70 61 6e 4e 61  lite3MatchSpanNa
2f0e0 6d 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  me(const char*, 
2f0f0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
2f100 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
2f110 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  char*);.int sqli
2f120 74 65 33 52 65 73 6f 6c 76 65 45 78 70 72 4e 61  te3ResolveExprNa
2f130 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a  mes(NameContext*
2f140 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  , Expr*);.int sq
2f150 6c 69 74 65 33 52 65 73 6f 6c 76 65 45 78 70 72  lite3ResolveExpr
2f160 4c 69 73 74 4e 61 6d 65 73 28 4e 61 6d 65 43 6f  ListNames(NameCo
2f170 6e 74 65 78 74 2a 2c 20 45 78 70 72 4c 69 73 74  ntext*, ExprList
2f180 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2f190 52 65 73 6f 6c 76 65 53 65 6c 65 63 74 4e 61 6d  ResolveSelectNam
2f1a0 65 73 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63  es(Parse*, Selec
2f1b0 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a  t*, NameContext*
2f1c0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65  );.int sqlite3Re
2f1d0 73 6f 6c 76 65 53 65 6c 66 52 65 66 65 72 65 6e  solveSelfReferen
2f1e0 63 65 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a  ce(Parse*,Table*
2f1f0 2c 69 6e 74 2c 45 78 70 72 2a 2c 45 78 70 72 4c  ,int,Expr*,ExprL
2f200 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
2f210 65 33 52 65 73 6f 6c 76 65 4f 72 64 65 72 47 72  e3ResolveOrderGr
2f220 6f 75 70 42 79 28 50 61 72 73 65 2a 2c 20 53 65  oupBy(Parse*, Se
2f230 6c 65 63 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a  lect*, ExprList*
2f240 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
2f250 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 75  void sqlite3Colu
2f260 6d 6e 44 65 66 61 75 6c 74 28 56 64 62 65 20 2a  mnDefault(Vdbe *
2f270 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20  , Table *, int, 
2f280 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2f290 65 33 41 6c 74 65 72 46 69 6e 69 73 68 41 64 64  e3AlterFinishAdd
2f2a0 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20  Column(Parse *, 
2f2b0 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73  Token *);.void s
2f2c0 71 6c 69 74 65 33 41 6c 74 65 72 42 65 67 69 6e  qlite3AlterBegin
2f2d0 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20  AddColumn(Parse 
2f2e0 2a 2c 20 53 72 63 4c 69 73 74 20 2a 29 3b 0a 76  *, SrcList *);.v
2f2f0 6f 69 64 20 2a 73 71 6c 69 74 65 33 52 65 6e 61  oid *sqlite3Rena
2f300 6d 65 54 6f 6b 65 6e 4d 61 70 28 50 61 72 73 65  meTokenMap(Parse
2f310 2a 2c 20 76 6f 69 64 2a 2c 20 54 6f 6b 65 6e 2a  *, void*, Token*
2f320 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
2f330 65 6e 61 6d 65 54 6f 6b 65 6e 52 65 6d 61 70 28  enameTokenRemap(
2f340 50 61 72 73 65 2a 2c 20 76 6f 69 64 20 2a 70 54  Parse*, void *pT
2f350 6f 2c 20 76 6f 69 64 20 2a 70 46 72 6f 6d 29 3b  o, void *pFrom);
2f360 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6e  .void sqlite3Ren
2f370 61 6d 65 45 78 70 72 55 6e 6d 61 70 28 50 61 72  ameExprUnmap(Par
2f380 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  se*, Expr*);.voi
2f390 64 20 73 71 6c 69 74 65 33 52 65 6e 61 6d 65 45  d sqlite3RenameE
2f3a0 78 70 72 6c 69 73 74 55 6e 6d 61 70 28 50 61 72  xprlistUnmap(Par
2f3b0 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b  se*, ExprList*);
2f3c0 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65  .CollSeq *sqlite
2f3d0 33 47 65 74 43 6f 6c 6c 53 65 71 28 50 61 72 73  3GetCollSeq(Pars
2f3e0 65 2a 2c 20 75 38 2c 20 43 6f 6c 6c 53 65 71 20  e*, u8, CollSeq 
2f3f0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
2f400 0a 63 68 61 72 20 73 71 6c 69 74 65 33 41 66 66  .char sqlite3Aff
2f410 69 6e 69 74 79 54 79 70 65 28 63 6f 6e 73 74 20  inityType(const 
2f420 63 68 61 72 2a 2c 20 43 6f 6c 75 6d 6e 2a 29 3b  char*, Column*);
2f430 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6e 61  .void sqlite3Ana
2f440 6c 79 7a 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  lyze(Parse*, Tok
2f450 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  en*, Token*);.in
2f460 74 20 73 71 6c 69 74 65 33 49 6e 76 6f 6b 65 42  t sqlite3InvokeB
2f470 75 73 79 48 61 6e 64 6c 65 72 28 42 75 73 79 48  usyHandler(BusyH
2f480 61 6e 64 6c 65 72 2a 2c 20 73 71 6c 69 74 65 33  andler*, sqlite3
2f490 5f 66 69 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c  _file*);.int sql
2f4a0 69 74 65 33 46 69 6e 64 44 62 28 73 71 6c 69 74  ite3FindDb(sqlit
2f4b0 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  e3*, Token*);.in
2f4c0 74 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62 4e  t sqlite3FindDbN
2f4d0 61 6d 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 63  ame(sqlite3 *, c
2f4e0 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e  onst char *);.in
2f4f0 74 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 73 69  t sqlite3Analysi
2f500 73 4c 6f 61 64 28 73 71 6c 69 74 65 33 2a 2c 69  sLoad(sqlite3*,i
2f510 6e 74 20 69 44 42 29 3b 0a 76 6f 69 64 20 73 71  nt iDB);.void sq
2f520 6c 69 74 65 33 44 65 6c 65 74 65 49 6e 64 65 78  lite3DeleteIndex
2f530 53 61 6d 70 6c 65 73 28 73 71 6c 69 74 65 33 2a  Samples(sqlite3*
2f540 2c 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73  ,Index*);.void s
2f550 71 6c 69 74 65 33 44 65 66 61 75 6c 74 52 6f 77  qlite3DefaultRow
2f560 45 73 74 28 49 6e 64 65 78 2a 29 3b 0a 76 6f 69  Est(Index*);.voi
2f570 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65  d sqlite3Registe
2f580 72 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 73 28 73  rLikeFunctions(s
2f590 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 69  qlite3*, int);.i
2f5a0 6e 74 20 73 71 6c 69 74 65 33 49 73 4c 69 6b 65  nt sqlite3IsLike
2f5b0 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33  Function(sqlite3
2f5c0 2a 2c 45 78 70 72 2a 2c 69 6e 74 2a 2c 63 68 61  *,Expr*,int*,cha
2f5d0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
2f5e0 33 53 63 68 65 6d 61 43 6c 65 61 72 28 76 6f 69  3SchemaClear(voi
2f5f0 64 20 2a 29 3b 0a 53 63 68 65 6d 61 20 2a 73 71  d *);.Schema *sq
2f600 6c 69 74 65 33 53 63 68 65 6d 61 47 65 74 28 73  lite3SchemaGet(s
2f610 71 6c 69 74 65 33 20 2a 2c 20 42 74 72 65 65 20  qlite3 *, Btree 
2f620 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  *);.int sqlite3S
2f630 63 68 65 6d 61 54 6f 49 6e 64 65 78 28 73 71 6c  chemaToIndex(sql
2f640 69 74 65 33 20 2a 64 62 2c 20 53 63 68 65 6d 61  ite3 *db, Schema
2f650 20 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71   *);.KeyInfo *sq
2f660 6c 69 74 65 33 4b 65 79 49 6e 66 6f 41 6c 6c 6f  lite3KeyInfoAllo
2f670 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 69  c(sqlite3*,int,i
2f680 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2f690 33 4b 65 79 49 6e 66 6f 55 6e 72 65 66 28 4b 65  3KeyInfoUnref(Ke
2f6a0 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f  yInfo*);.KeyInfo
2f6b0 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f   *sqlite3KeyInfo
2f6c0 52 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b  Ref(KeyInfo*);.K
2f6d0 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b  eyInfo *sqlite3K
2f6e0 65 79 49 6e 66 6f 4f 66 49 6e 64 65 78 28 50 61  eyInfoOfIndex(Pa
2f6f0 72 73 65 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 4b  rse*, Index*);.K
2f700 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b  eyInfo *sqlite3K
2f710 65 79 49 6e 66 6f 46 72 6f 6d 45 78 70 72 4c 69  eyInfoFromExprLi
2f720 73 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c  st(Parse*, ExprL
2f730 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  ist*, int, int);
2f740 0a 69 6e 74 20 73 71 6c 69 74 65 33 48 61 73 45  .int sqlite3HasE
2f750 78 70 6c 69 63 69 74 4e 75 6c 6c 73 28 50 61 72  xplicitNulls(Par
2f760 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b  se*, ExprList*);
2f770 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
2f780 44 45 42 55 47 0a 69 6e 74 20 73 71 6c 69 74 65  DEBUG.int sqlite
2f790 33 4b 65 79 49 6e 66 6f 49 73 57 72 69 74 65 61  3KeyInfoIsWritea
2f7a0 62 6c 65 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 23  ble(KeyInfo*);.#
2f7b0 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65  endif.int sqlite
2f7c0 33 43 72 65 61 74 65 46 75 6e 63 28 73 71 6c 69  3CreateFunc(sqli
2f7d0 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  te3 *, const cha
2f7e0 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 76  r *, int, int, v
2f7f0 6f 69 64 20 2a 2c 0a 20 20 76 6f 69 64 20 28 2a  oid *,.  void (*
2f800 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
2f810 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
2f820 61 6c 75 65 20 2a 2a 29 2c 0a 20 20 76 6f 69 64  alue **),.  void
2f830 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e   (*)(sqlite3_con
2f840 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
2f850 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 20 0a 20 20  3_value **), .  
2f860 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33  void (*)(sqlite3
2f870 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a 20 20 76 6f  _context*),.  vo
2f880 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63  id (*)(sqlite3_c
2f890 6f 6e 74 65 78 74 2a 29 2c 0a 20 20 76 6f 69 64  ontext*),.  void
2f8a0 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e   (*)(sqlite3_con
2f8b0 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
2f8c0 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 20 0a 20 20  3_value **), .  
2f8d0 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 2a  FuncDestructor *
2f8e0 70 44 65 73 74 72 75 63 74 6f 72 0a 29 3b 0a 76  pDestructor.);.v
2f8f0 6f 69 64 20 73 71 6c 69 74 65 33 4e 6f 6f 70 44  oid sqlite3NoopD
2f900 65 73 74 72 75 63 74 6f 72 28 76 6f 69 64 2a 29  estructor(void*)
2f910 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 6f  ;.void sqlite3Oo
2f920 6d 46 61 75 6c 74 28 73 71 6c 69 74 65 33 2a 29  mFault(sqlite3*)
2f930 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 6f  ;.void sqlite3Oo
2f940 6d 43 6c 65 61 72 28 73 71 6c 69 74 65 33 2a 29  mClear(sqlite3*)
2f950 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 70 69  ;.int sqlite3Api
2f960 45 78 69 74 28 73 71 6c 69 74 65 33 20 2a 64 62  Exit(sqlite3 *db
2f970 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
2f980 74 65 33 4f 70 65 6e 54 65 6d 70 44 61 74 61 62  te3OpenTempDatab
2f990 61 73 65 28 50 61 72 73 65 20 2a 29 3b 0a 0a 76  ase(Parse *);..v
2f9a0 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41 63  oid sqlite3StrAc
2f9b0 63 75 6d 49 6e 69 74 28 53 74 72 41 63 63 75 6d  cumInit(StrAccum
2f9c0 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63 68 61  *, sqlite3*, cha
2f9d0 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 63  r*, int, int);.c
2f9e0 68 61 72 20 2a 73 71 6c 69 74 65 33 53 74 72 41  har *sqlite3StrA
2f9f0 63 63 75 6d 46 69 6e 69 73 68 28 53 74 72 41 63  ccumFinish(StrAc
2fa00 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  cum*);.void sqli
2fa10 74 65 33 53 65 6c 65 63 74 44 65 73 74 49 6e 69  te3SelectDestIni
2fa20 74 28 53 65 6c 65 63 74 44 65 73 74 2a 2c 69 6e  t(SelectDest*,in
2fa30 74 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71  t,int);.Expr *sq
2fa40 6c 69 74 65 33 43 72 65 61 74 65 43 6f 6c 75 6d  lite3CreateColum
2fa50 6e 45 78 70 72 28 73 71 6c 69 74 65 33 20 2a 2c  nExpr(sqlite3 *,
2fa60 20 53 72 63 4c 69 73 74 20 2a 2c 20 69 6e 74 2c   SrcList *, int,
2fa70 20 69 6e 74 29 3b 0a 0a 76 6f 69 64 20 73 71 6c   int);..void sql
2fa80 69 74 65 33 42 61 63 6b 75 70 52 65 73 74 61 72  ite3BackupRestar
2fa90 74 28 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70  t(sqlite3_backup
2faa0 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
2fab0 33 42 61 63 6b 75 70 55 70 64 61 74 65 28 73 71  3BackupUpdate(sq
2fac0 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 2c 20  lite3_backup *, 
2fad0 50 67 6e 6f 2c 20 63 6f 6e 73 74 20 75 38 20 2a  Pgno, const u8 *
2fae0 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  );..#ifndef SQLI
2faf0 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52 59  TE_OMIT_SUBQUERY
2fb00 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
2fb10 43 68 65 63 6b 49 4e 28 50 61 72 73 65 2a 2c 20  CheckIN(Parse*, 
2fb20 45 78 70 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20  Expr*);.#else.# 
2fb30 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78  define sqlite3Ex
2fb40 70 72 43 68 65 63 6b 49 4e 28 78 2c 79 29 20 53  prCheckIN(x,y) S
2fb50 51 4c 49 54 45 5f 4f 4b 0a 23 65 6e 64 69 66 0a  QLITE_OK.#endif.
2fb60 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
2fb70 4e 41 42 4c 45 5f 53 54 41 54 34 0a 69 6e 74 20  NABLE_STAT4.int 
2fb80 73 71 6c 69 74 65 33 53 74 61 74 34 50 72 6f 62  sqlite3Stat4Prob
2fb90 65 53 65 74 56 61 6c 75 65 28 0a 20 20 20 20 50  eSetValue(.    P
2fba0 61 72 73 65 2a 2c 49 6e 64 65 78 2a 2c 55 6e 70  arse*,Index*,Unp
2fbb0 61 63 6b 65 64 52 65 63 6f 72 64 2a 2a 2c 45 78  ackedRecord**,Ex
2fbc0 70 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2a  pr*,int,int,int*
2fbd0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74  );.int sqlite3St
2fbe0 61 74 34 56 61 6c 75 65 46 72 6f 6d 45 78 70 72  at4ValueFromExpr
2fbf0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
2fc00 75 38 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  u8, sqlite3_valu
2fc10 65 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  e**);.void sqlit
2fc20 65 33 53 74 61 74 34 50 72 6f 62 65 46 72 65 65  e3Stat4ProbeFree
2fc30 28 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 2a  (UnpackedRecord*
2fc40 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74  );.int sqlite3St
2fc50 61 74 34 43 6f 6c 75 6d 6e 28 73 71 6c 69 74 65  at4Column(sqlite
2fc60 33 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c  3*, const void*,
2fc70 20 69 6e 74 2c 20 69 6e 74 2c 20 73 71 6c 69 74   int, int, sqlit
2fc80 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 63 68 61  e3_value**);.cha
2fc90 72 20 73 71 6c 69 74 65 33 49 6e 64 65 78 43 6f  r sqlite3IndexCo
2fca0 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28 73 71 6c  lumnAffinity(sql
2fcb0 69 74 65 33 2a 2c 20 49 6e 64 65 78 2a 2c 20 69  ite3*, Index*, i
2fcc0 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  nt);.#endif../*.
2fcd0 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63 65  ** The interface
2fce0 20 74 6f 20 74 68 65 20 4c 45 4d 4f 4e 2d 67 65   to the LEMON-ge
2fcf0 6e 65 72 61 74 65 64 20 70 61 72 73 65 72 0a 2a  nerated parser.*
2fd00 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
2fd10 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 20 20  _AMALGAMATION.  
2fd20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61 72  void *sqlite3Par
2fd30 73 65 72 41 6c 6c 6f 63 28 76 6f 69 64 2a 28 2a  serAlloc(void*(*
2fd40 29 28 75 36 34 29 2c 20 50 61 72 73 65 2a 29 3b  )(u64), Parse*);
2fd50 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 50  .  void sqlite3P
2fd60 61 72 73 65 72 46 72 65 65 28 76 6f 69 64 2a 2c  arserFree(void*,
2fd70 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 29   void(*)(void*))
2fd80 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  ;.#endif.void sq
2fd90 6c 69 74 65 33 50 61 72 73 65 72 28 76 6f 69 64  lite3Parser(void
2fda0 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 29 3b 0a  *, int, Token);.
2fdb0 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73 65  int sqlite3Parse
2fdc0 72 46 61 6c 6c 62 61 63 6b 28 69 6e 74 29 3b 0a  rFallback(int);.
2fdd0 23 69 66 64 65 66 20 59 59 54 52 41 43 4b 4d 41  #ifdef YYTRACKMA
2fde0 58 53 54 41 43 4b 44 45 50 54 48 0a 20 20 69 6e  XSTACKDEPTH.  in
2fdf0 74 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 53  t sqlite3ParserS
2fe00 74 61 63 6b 50 65 61 6b 28 76 6f 69 64 2a 29 3b  tackPeak(void*);
2fe10 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71  .#endif..void sq
2fe20 6c 69 74 65 33 41 75 74 6f 4c 6f 61 64 45 78 74  lite3AutoLoadExt
2fe30 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a  ensions(sqlite3*
2fe40 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
2fe50 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58 54 45  E_OMIT_LOAD_EXTE
2fe60 4e 53 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c  NSION.  void sql
2fe70 69 74 65 33 43 6c 6f 73 65 45 78 74 65 6e 73 69  ite3CloseExtensi
2fe80 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23  ons(sqlite3*);.#
2fe90 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
2fea0 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65 6e 73  lite3CloseExtens
2feb0 69 6f 6e 73 28 58 29 0a 23 65 6e 64 69 66 0a 0a  ions(X).#endif..
2fec0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2fed0 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45  MIT_SHARED_CACHE
2fee0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54  .  void sqlite3T
2fef0 61 62 6c 65 4c 6f 63 6b 28 50 61 72 73 65 20 2a  ableLock(Parse *
2ff00 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 2c 20  , int, int, u8, 
2ff10 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 23  const char *);.#
2ff20 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
2ff30 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28  qlite3TableLock(
2ff40 76 2c 77 2c 78 2c 79 2c 7a 29 0a 23 65 6e 64 69  v,w,x,y,z).#endi
2ff50 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
2ff60 5f 54 45 53 54 0a 20 20 69 6e 74 20 73 71 6c 69  _TEST.  int sqli
2ff70 74 65 33 55 74 66 38 54 6f 38 28 75 6e 73 69 67  te3Utf8To8(unsig
2ff80 6e 65 64 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64  ned char*);.#end
2ff90 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
2ffa0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
2ffb0 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20 73 71  BLE.#  define sq
2ffc0 6c 69 74 65 33 56 74 61 62 43 6c 65 61 72 28 59  lite3VtabClear(Y
2ffd0 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  ).#  define sqli
2ffe0 74 65 33 56 74 61 62 53 79 6e 63 28 58 2c 59 29  te3VtabSync(X,Y)
2fff0 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65   SQLITE_OK.#  de
30000 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
30010 52 6f 6c 6c 62 61 63 6b 28 58 29 0a 23 20 20 64  Rollback(X).#  d
30020 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
30030 62 43 6f 6d 6d 69 74 28 58 29 0a 23 20 20 64 65  bCommit(X).#  de
30040 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
30050 49 6e 53 79 6e 63 28 64 62 29 20 30 0a 23 20 20  InSync(db) 0.#  
30060 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
30070 61 62 4c 6f 63 6b 28 58 29 0a 23 20 20 64 65 66  abLock(X).#  def
30080 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 55  ine sqlite3VtabU
30090 6e 6c 6f 63 6b 28 58 29 0a 23 20 20 64 65 66 69  nlock(X).#  defi
300a0 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 4d 6f  ne sqlite3VtabMo
300b0 64 75 6c 65 55 6e 72 65 66 28 44 2c 58 29 0a 23  duleUnref(D,X).#
300c0 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
300d0 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 58  VtabUnlockList(X
300e0 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  ).#  define sqli
300f0 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74  te3VtabSavepoint
30100 28 58 2c 20 59 2c 20 5a 29 20 53 51 4c 49 54 45  (X, Y, Z) SQLITE
30110 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20 73 71  _OK.#  define sq
30120 6c 69 74 65 33 47 65 74 56 54 61 62 6c 65 28 58  lite3GetVTable(X
30130 2c 59 29 20 20 28 28 56 54 61 62 6c 65 2a 29 30  ,Y)  ((VTable*)0
30140 29 0a 23 65 6c 73 65 0a 20 20 20 76 6f 69 64 20  ).#else.   void 
30150 73 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61 72  sqlite3VtabClear
30160 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 54 61  (sqlite3 *db, Ta
30170 62 6c 65 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73  ble*);.   void s
30180 71 6c 69 74 65 33 56 74 61 62 44 69 73 63 6f 6e  qlite3VtabDiscon
30190 6e 65 63 74 28 73 71 6c 69 74 65 33 20 2a 64 62  nect(sqlite3 *db
301a0 2c 20 54 61 62 6c 65 20 2a 70 29 3b 0a 20 20 20  , Table *p);.   
301b0 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 53  int sqlite3VtabS
301c0 79 6e 63 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  ync(sqlite3 *db,
301d0 20 56 64 62 65 2a 29 3b 0a 20 20 20 69 6e 74 20   Vdbe*);.   int 
301e0 73 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c 62  sqlite3VtabRollb
301f0 61 63 6b 28 73 71 6c 69 74 65 33 20 2a 64 62 29  ack(sqlite3 *db)
30200 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33  ;.   int sqlite3
30210 56 74 61 62 43 6f 6d 6d 69 74 28 73 71 6c 69 74  VtabCommit(sqlit
30220 65 33 20 2a 64 62 29 3b 0a 20 20 20 76 6f 69 64  e3 *db);.   void
30230 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b   sqlite3VtabLock
30240 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76  (VTable *);.   v
30250 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 55  oid sqlite3VtabU
30260 6e 6c 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b  nlock(VTable *);
30270 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  .   void sqlite3
30280 56 74 61 62 4d 6f 64 75 6c 65 55 6e 72 65 66 28  VtabModuleUnref(
30290 73 71 6c 69 74 65 33 2a 2c 4d 6f 64 75 6c 65 2a  sqlite3*,Module*
302a0 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  );.   void sqlit
302b0 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74  e3VtabUnlockList
302c0 28 73 71 6c 69 74 65 33 2a 29 3b 0a 20 20 20 69  (sqlite3*);.   i
302d0 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 53 61  nt sqlite3VtabSa
302e0 76 65 70 6f 69 6e 74 28 73 71 6c 69 74 65 33 20  vepoint(sqlite3 
302f0 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20  *, int, int);.  
30300 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61   void sqlite3Vta
30310 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 56 64  bImportErrmsg(Vd
30320 62 65 2a 2c 20 73 71 6c 69 74 65 33 5f 76 74 61  be*, sqlite3_vta
30330 62 2a 29 3b 0a 20 20 20 56 54 61 62 6c 65 20 2a  b*);.   VTable *
30340 73 71 6c 69 74 65 33 47 65 74 56 54 61 62 6c 65  sqlite3GetVTable
30350 28 73 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65  (sqlite3*, Table
30360 2a 29 3b 0a 20 20 20 4d 6f 64 75 6c 65 20 2a 73  *);.   Module *s
30370 71 6c 69 74 65 33 56 74 61 62 43 72 65 61 74 65  qlite3VtabCreate
30380 4d 6f 64 75 6c 65 28 0a 20 20 20 20 20 73 71 6c  Module(.     sql
30390 69 74 65 33 2a 2c 0a 20 20 20 20 20 63 6f 6e 73  ite3*,.     cons
303a0 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 63 6f  t char*,.     co
303b0 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  nst sqlite3_modu
303c0 6c 65 2a 2c 0a 20 20 20 20 20 76 6f 69 64 2a 2c  le*,.     void*,
303d0 0a 20 20 20 20 20 76 6f 69 64 28 2a 29 28 76 6f  .     void(*)(vo
303e0 69 64 2a 29 0a 20 20 20 29 3b 0a 23 20 20 64 65  id*).   );.#  de
303f0 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
30400 49 6e 53 79 6e 63 28 64 62 29 20 28 28 64 62 29  InSync(db) ((db)
30410 2d 3e 6e 56 54 72 61 6e 73 3e 30 20 26 26 20 28  ->nVTrans>0 && (
30420 64 62 29 2d 3e 61 56 54 72 61 6e 73 3d 3d 30 29  db)->aVTrans==0)
30430 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69  .#endif.int sqli
30440 74 65 33 56 74 61 62 45 70 6f 6e 79 6d 6f 75 73  te3VtabEponymous
30450 54 61 62 6c 65 49 6e 69 74 28 50 61 72 73 65 2a  TableInit(Parse*
30460 2c 4d 6f 64 75 6c 65 2a 29 3b 0a 76 6f 69 64 20  ,Module*);.void 
30470 73 71 6c 69 74 65 33 56 74 61 62 45 70 6f 6e 79  sqlite3VtabEpony
30480 6d 6f 75 73 54 61 62 6c 65 43 6c 65 61 72 28 73  mousTableClear(s
30490 71 6c 69 74 65 33 2a 2c 4d 6f 64 75 6c 65 2a 29  qlite3*,Module*)
304a0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74  ;.void sqlite3Vt
304b0 61 62 4d 61 6b 65 57 72 69 74 61 62 6c 65 28 50  abMakeWritable(P
304c0 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 76  arse*,Table*);.v
304d0 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 42  oid sqlite3VtabB
304e0 65 67 69 6e 50 61 72 73 65 28 50 61 72 73 65 2a  eginParse(Parse*
304f0 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
30500 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a  , Token*, int);.
30510 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
30520 46 69 6e 69 73 68 50 61 72 73 65 28 50 61 72 73  FinishParse(Pars
30530 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69  e*, Token*);.voi
30540 64 20 73 71 6c 69 74 65 33 56 74 61 62 41 72 67  d sqlite3VtabArg
30550 49 6e 69 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f  Init(Parse*);.vo
30560 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 41 72  id sqlite3VtabAr
30570 67 45 78 74 65 6e 64 28 50 61 72 73 65 2a 2c 20  gExtend(Parse*, 
30580 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
30590 69 74 65 33 56 74 61 62 43 61 6c 6c 43 72 65 61  ite3VtabCallCrea
305a0 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  te(sqlite3*, int
305b0 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  , const char *, 
305c0 63 68 61 72 20 2a 2a 29 3b 0a 69 6e 74 20 73 71  char **);.int sq
305d0 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43 6f 6e  lite3VtabCallCon
305e0 6e 65 63 74 28 50 61 72 73 65 2a 2c 20 54 61 62  nect(Parse*, Tab
305f0 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  le*);.int sqlite
30600 33 56 74 61 62 43 61 6c 6c 44 65 73 74 72 6f 79  3VtabCallDestroy
30610 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20  (sqlite3*, int, 
30620 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 69  const char *);.i
30630 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 42 65  nt sqlite3VtabBe
30640 67 69 6e 28 73 71 6c 69 74 65 33 20 2a 2c 20 56  gin(sqlite3 *, V
30650 54 61 62 6c 65 20 2a 29 3b 0a 46 75 6e 63 44 65  Table *);.FuncDe
30660 66 20 2a 73 71 6c 69 74 65 33 56 74 61 62 4f 76  f *sqlite3VtabOv
30670 65 72 6c 6f 61 64 46 75 6e 63 74 69 6f 6e 28 73  erloadFunction(s
30680 71 6c 69 74 65 33 20 2a 2c 46 75 6e 63 44 65 66  qlite3 *,FuncDef
30690 2a 2c 20 69 6e 74 20 6e 41 72 67 2c 20 45 78 70  *, int nArg, Exp
306a0 72 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 69 6e 74  r*);.sqlite3_int
306b0 36 34 20 73 71 6c 69 74 65 33 53 74 6d 74 43 75  64 sqlite3StmtCu
306c0 72 72 65 6e 74 54 69 6d 65 28 73 71 6c 69 74 65  rrentTime(sqlite
306d0 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e 74  3_context*);.int
306e0 20 73 71 6c 69 74 65 33 56 64 62 65 50 61 72 61   sqlite3VdbePara
306f0 6d 65 74 65 72 49 6e 64 65 78 28 56 64 62 65 2a  meterIndex(Vdbe*
30700 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69  , const char*, i
30710 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
30720 54 72 61 6e 73 66 65 72 42 69 6e 64 69 6e 67 73  TransferBindings
30730 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 2c  (sqlite3_stmt *,
30740 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 29   sqlite3_stmt *)
30750 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61  ;.void sqlite3Pa
30760 72 73 65 72 52 65 73 65 74 28 50 61 72 73 65 2a  rserReset(Parse*
30770 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
30780 5f 45 4e 41 42 4c 45 5f 4e 4f 52 4d 41 4c 49 5a  _ENABLE_NORMALIZ
30790 45 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4e  E.char *sqlite3N
307a0 6f 72 6d 61 6c 69 7a 65 28 56 64 62 65 2a 2c 20  ormalize(Vdbe*, 
307b0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65  const char*);.#e
307c0 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33  ndif.int sqlite3
307d0 52 65 70 72 65 70 61 72 65 28 56 64 62 65 2a 29  Reprepare(Vdbe*)
307e0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
307f0 70 72 4c 69 73 74 43 68 65 63 6b 4c 65 6e 67 74  prListCheckLengt
30800 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69  h(Parse*, ExprLi
30810 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  st*, const char*
30820 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69  );.CollSeq *sqli
30830 74 65 33 42 69 6e 61 72 79 43 6f 6d 70 61 72 65  te3BinaryCompare
30840 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c  CollSeq(Parse *,
30850 20 45 78 70 72 20 2a 2c 20 45 78 70 72 20 2a 29   Expr *, Expr *)
30860 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 65 6d  ;.int sqlite3Tem
30870 70 49 6e 4d 65 6d 6f 72 79 28 63 6f 6e 73 74 20  pInMemory(const 
30880 73 71 6c 69 74 65 33 2a 29 3b 0a 63 6f 6e 73 74  sqlite3*);.const
30890 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4a 6f   char *sqlite3Jo
308a0 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e  urnalModename(in
308b0 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  t);.#ifndef SQLI
308c0 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e  TE_OMIT_WAL.  in
308d0 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 70 6f  t sqlite3Checkpo
308e0 69 6e 74 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  int(sqlite3*, in
308f0 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e  t, int, int*, in
30900 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  t*);.  int sqlit
30910 65 33 57 61 6c 44 65 66 61 75 6c 74 48 6f 6f 6b  e3WalDefaultHook
30920 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c  (void*,sqlite3*,
30930 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29  const char*,int)
30940 3b 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  ;.#endif.#ifndef
30950 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 54 45   SQLITE_OMIT_CTE
30960 0a 20 20 57 69 74 68 20 2a 73 71 6c 69 74 65 33  .  With *sqlite3
30970 57 69 74 68 41 64 64 28 50 61 72 73 65 2a 2c 57  WithAdd(Parse*,W
30980 69 74 68 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72  ith*,Token*,Expr
30990 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a  List*,Select*);.
309a0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69    void sqlite3Wi
309b0 74 68 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  thDelete(sqlite3
309c0 2a 2c 57 69 74 68 2a 29 3b 0a 20 20 76 6f 69 64  *,With*);.  void
309d0 20 73 71 6c 69 74 65 33 57 69 74 68 50 75 73 68   sqlite3WithPush
309e0 28 50 61 72 73 65 2a 2c 20 57 69 74 68 2a 2c 20  (Parse*, With*, 
309f0 75 38 29 3b 0a 23 65 6c 73 65 0a 23 64 65 66 69  u8);.#else.#defi
30a00 6e 65 20 73 71 6c 69 74 65 33 57 69 74 68 50 75  ne sqlite3WithPu
30a10 73 68 28 78 2c 79 2c 7a 29 0a 23 64 65 66 69 6e  sh(x,y,z).#defin
30a20 65 20 73 71 6c 69 74 65 33 57 69 74 68 44 65 6c  e sqlite3WithDel
30a30 65 74 65 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a  ete(x,y).#endif.
30a40 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
30a50 4d 49 54 5f 55 50 53 45 52 54 0a 20 20 55 70 73  MIT_UPSERT.  Ups
30a60 65 72 74 20 2a 73 71 6c 69 74 65 33 55 70 73 65  ert *sqlite3Upse
30a70 72 74 4e 65 77 28 73 71 6c 69 74 65 33 2a 2c 45  rtNew(sqlite3*,E
30a80 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45  xprList*,Expr*,E
30a90 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b  xprList*,Expr*);
30aa0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 55  .  void sqlite3U
30ab0 70 73 65 72 74 44 65 6c 65 74 65 28 73 71 6c 69  psertDelete(sqli
30ac0 74 65 33 2a 2c 55 70 73 65 72 74 2a 29 3b 0a 20  te3*,Upsert*);. 
30ad0 20 55 70 73 65 72 74 20 2a 73 71 6c 69 74 65 33   Upsert *sqlite3
30ae0 55 70 73 65 72 74 44 75 70 28 73 71 6c 69 74 65  UpsertDup(sqlite
30af0 33 2a 2c 55 70 73 65 72 74 2a 29 3b 0a 20 20 69  3*,Upsert*);.  i
30b00 6e 74 20 73 71 6c 69 74 65 33 55 70 73 65 72 74  nt sqlite3Upsert
30b10 41 6e 61 6c 79 7a 65 54 61 72 67 65 74 28 50 61  AnalyzeTarget(Pa
30b20 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 55 70  rse*,SrcList*,Up
30b30 73 65 72 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73  sert*);.  void s
30b40 71 6c 69 74 65 33 55 70 73 65 72 74 44 6f 55 70  qlite3UpsertDoUp
30b50 64 61 74 65 28 50 61 72 73 65 2a 2c 55 70 73 65  date(Parse*,Upse
30b60 72 74 2a 2c 54 61 62 6c 65 2a 2c 49 6e 64 65 78  rt*,Table*,Index
30b70 2a 2c 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 23 64  *,int);.#else.#d
30b80 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55 70 73  efine sqlite3Ups
30b90 65 72 74 4e 65 77 28 76 2c 77 2c 78 2c 79 2c 7a  ertNew(v,w,x,y,z
30ba0 29 20 28 28 55 70 73 65 72 74 2a 29 30 29 0a 23  ) ((Upsert*)0).#
30bb0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55 70  define sqlite3Up
30bc0 73 65 72 74 44 65 6c 65 74 65 28 78 2c 79 29 0a  sertDelete(x,y).
30bd0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55  #define sqlite3U
30be0 70 73 65 72 74 44 75 70 28 78 2c 79 29 20 20 20  psertDup(x,y)   
30bf0 20 20 20 20 28 28 55 70 73 65 72 74 2a 29 30 29      ((Upsert*)0)
30c00 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20 44 65 63  .#endif.../* Dec
30c10 6c 61 72 61 74 69 6f 6e 73 20 66 6f 72 20 66 75  larations for fu
30c20 6e 63 74 69 6f 6e 73 20 69 6e 20 66 6b 65 79 2e  nctions in fkey.
30c30 63 2e 20 41 6c 6c 20 6f 66 20 74 68 65 73 65 20  c. All of these 
30c40 61 72 65 20 72 65 70 6c 61 63 65 64 20 62 79 0a  are replaced by.
30c50 2a 2a 20 6e 6f 2d 6f 70 20 6d 61 63 72 6f 73 20  ** no-op macros 
30c60 69 66 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  if OMIT_FOREIGN_
30c70 4b 45 59 20 69 73 20 64 65 66 69 6e 65 64 2e 20  KEY is defined. 
30c80 49 6e 20 74 68 69 73 20 63 61 73 65 20 6e 6f 20  In this case no 
30c90 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 66  foreign.** key f
30ca0 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 20  unctionality is 
30cb0 61 76 61 69 6c 61 62 6c 65 2e 20 49 66 20 4f 4d  available. If OM
30cc0 49 54 5f 54 52 49 47 47 45 52 20 69 73 20 64 65  IT_TRIGGER is de
30cd0 66 69 6e 65 64 20 62 75 74 0a 2a 2a 20 4f 4d 49  fined but.** OMI
30ce0 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73  T_FOREIGN_KEY is
30cf0 20 6e 6f 74 2c 20 6f 6e 6c 79 20 73 6f 6d 65 20   not, only some 
30d00 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 73  of the functions
30d10 20 61 72 65 20 6e 6f 2d 6f 70 65 64 2e 20 49 6e   are no-oped. In
30d20 0a 2a 2a 20 74 68 69 73 20 63 61 73 65 20 66 6f  .** this case fo
30d30 72 65 69 67 6e 20 6b 65 79 73 20 61 72 65 20 70  reign keys are p
30d40 61 72 73 65 64 2c 20 62 75 74 20 6e 6f 20 6f 74  arsed, but no ot
30d50 68 65 72 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74  her functionalit
30d60 79 20 69 73 0a 2a 2a 20 70 72 6f 76 69 64 65 64  y is.** provided
30d70 20 28 65 6e 66 6f 72 63 65 6d 65 6e 74 20 6f 66   (enforcement of
30d80 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20   FK constraints 
30d90 72 65 71 75 69 72 65 73 20 74 68 65 20 74 72 69  requires the tri
30da0 67 67 65 72 73 20 73 75 62 2d 73 79 73 74 65 6d  ggers sub-system
30db0 29 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  )..*/.#if !defin
30dc0 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ed(SQLITE_OMIT_F
30dd0 4f 52 45 49 47 4e 5f 4b 45 59 29 20 26 26 20 21  OREIGN_KEY) && !
30de0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
30df0 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 20 20 76  MIT_TRIGGER).  v
30e00 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 43 68 65  oid sqlite3FkChe
30e10 63 6b 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  ck(Parse*, Table
30e20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
30e30 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  *, int);.  void 
30e40 73 71 6c 69 74 65 33 46 6b 44 72 6f 70 54 61 62  sqlite3FkDropTab
30e50 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  le(Parse*, SrcLi
30e60 73 74 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20  st *, Table*);. 
30e70 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 41   void sqlite3FkA
30e80 63 74 69 6f 6e 73 28 50 61 72 73 65 2a 2c 20 54  ctions(Parse*, T
30e90 61 62 6c 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a  able*, ExprList*
30ea0 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74  , int, int*, int
30eb0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
30ec0 46 6b 52 65 71 75 69 72 65 64 28 50 61 72 73 65  FkRequired(Parse
30ed0 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2a 2c  *, Table*, int*,
30ee0 20 69 6e 74 29 3b 0a 20 20 75 33 32 20 73 71 6c   int);.  u32 sql
30ef0 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 50 61  ite3FkOldmask(Pa
30f00 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20  rse*, Table*);. 
30f10 20 46 4b 65 79 20 2a 73 71 6c 69 74 65 33 46 6b   FKey *sqlite3Fk
30f20 52 65 66 65 72 65 6e 63 65 73 28 54 61 62 6c 65  References(Table
30f30 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65   *);.#else.  #de
30f40 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 41 63  fine sqlite3FkAc
30f50 74 69 6f 6e 73 28 61 2c 62 2c 63 2c 64 2c 65 2c  tions(a,b,c,d,e,
30f60 66 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  f).  #define sql
30f70 69 74 65 33 46 6b 43 68 65 63 6b 28 61 2c 62 2c  ite3FkCheck(a,b,
30f80 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64 65 66 69  c,d,e,f).  #defi
30f90 6e 65 20 73 71 6c 69 74 65 33 46 6b 44 72 6f 70  ne sqlite3FkDrop
30fa0 54 61 62 6c 65 28 61 2c 62 2c 63 29 0a 20 20 23  Table(a,b,c).  #
30fb0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
30fc0 4f 6c 64 6d 61 73 6b 28 61 2c 62 29 20 20 20 20  Oldmask(a,b)    
30fd0 20 20 20 20 20 30 0a 20 20 23 64 65 66 69 6e 65       0.  #define
30fe0 20 73 71 6c 69 74 65 33 46 6b 52 65 71 75 69 72   sqlite3FkRequir
30ff0 65 64 28 61 2c 62 2c 63 2c 64 29 20 20 20 20 30  ed(a,b,c,d)    0
31000 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
31010 65 33 46 6b 52 65 66 65 72 65 6e 63 65 73 28 61  e3FkReferences(a
31020 29 20 20 20 20 20 20 20 20 30 0a 23 65 6e 64 69  )        0.#endi
31030 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
31040 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45  _OMIT_FOREIGN_KE
31050 59 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  Y.  void sqlite3
31060 46 6b 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  FkDelete(sqlite3
31070 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 69   *, Table*);.  i
31080 6e 74 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61  nt sqlite3FkLoca
31090 74 65 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 54  teIndex(Parse*,T
310a0 61 62 6c 65 2a 2c 46 4b 65 79 2a 2c 49 6e 64 65  able*,FKey*,Inde
310b0 78 2a 2a 2c 69 6e 74 2a 2a 29 3b 0a 23 65 6c 73  x**,int**);.#els
310c0 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
310d0 74 65 33 46 6b 44 65 6c 65 74 65 28 61 2c 62 29  te3FkDelete(a,b)
310e0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
310f0 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28  e3FkLocateIndex(
31100 61 2c 62 2c 63 2c 64 2c 65 29 0a 23 65 6e 64 69  a,b,c,d,e).#endi
31110 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41 76 61 69 6c 61  f.../*.** Availa
31120 62 6c 65 20 66 61 75 6c 74 20 69 6e 6a 65 63 74  ble fault inject
31130 6f 72 73 2e 20 20 53 68 6f 75 6c 64 20 62 65 20  ors.  Should be 
31140 6e 75 6d 62 65 72 65 64 20 62 65 67 69 6e 6e 69  numbered beginni
31150 6e 67 20 77 69 74 68 20 30 2e 0a 2a 2f 0a 23 64  ng with 0..*/.#d
31160 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 41 55  efine SQLITE_FAU
31170 4c 54 49 4e 4a 45 43 54 4f 52 5f 4d 41 4c 4c 4f  LTINJECTOR_MALLO
31180 43 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20  C     0.#define 
31190 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45  SQLITE_FAULTINJE
311a0 43 54 4f 52 5f 43 4f 55 4e 54 20 20 20 20 20 20  CTOR_COUNT      
311b0 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74  1../*.** The int
311c0 65 72 66 61 63 65 20 74 6f 20 74 68 65 20 63 6f  erface to the co
311d0 64 65 20 69 6e 20 66 61 75 6c 74 2e 63 20 75 73  de in fault.c us
311e0 65 64 20 66 6f 72 20 69 64 65 6e 74 69 66 79 69  ed for identifyi
311f0 6e 67 20 22 62 65 6e 69 67 6e 22 0a 2a 2a 20 6d  ng "benign".** m
31200 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 73 2e 20  alloc failures. 
31210 54 68 69 73 20 69 73 20 6f 6e 6c 79 20 70 72 65  This is only pre
31220 73 65 6e 74 20 69 66 20 53 51 4c 49 54 45 5f 55  sent if SQLITE_U
31230 4e 54 45 53 54 41 42 4c 45 0a 2a 2a 20 69 73 20  NTESTABLE.** is 
31240 6e 6f 74 20 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a  not defined..*/.
31250 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 55  #ifndef SQLITE_U
31260 4e 54 45 53 54 41 42 4c 45 0a 20 20 76 6f 69 64  NTESTABLE.  void
31270 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e   sqlite3BeginBen
31280 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b  ignMalloc(void);
31290 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45  .  void sqlite3E
312a0 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76  ndBenignMalloc(v
312b0 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  oid);.#else.  #d
312c0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 42 65 67  efine sqlite3Beg
312d0 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29  inBenignMalloc()
312e0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
312f0 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f  e3EndBenignMallo
31300 63 28 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  c().#endif../*.*
31310 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74 75 72 6e  * Allowed return
31320 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 73 71 6c   values from sql
31330 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28  ite3FindInIndex(
31340 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f  ).*/.#define IN_
31350 49 4e 44 45 58 5f 52 4f 57 49 44 20 20 20 20 20  INDEX_ROWID     
31360 20 20 20 31 20 20 20 2f 2a 20 53 65 61 72 63 68     1   /* Search
31370 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68   the rowid of th
31380 65 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69  e table */.#defi
31390 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 45 50 48 20  ne IN_INDEX_EPH 
313a0 20 20 20 20 20 20 20 20 20 32 20 20 20 2f 2a 20           2   /* 
313b0 53 65 61 72 63 68 20 61 6e 20 65 70 68 65 6d 65  Search an epheme
313c0 72 61 6c 20 62 2d 74 72 65 65 20 2a 2f 0a 23 64  ral b-tree */.#d
313d0 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49  efine IN_INDEX_I
313e0 4e 44 45 58 5f 41 53 43 20 20 20 20 33 20 20 20  NDEX_ASC    3   
313f0 2f 2a 20 45 78 69 73 74 69 6e 67 20 69 6e 64 65  /* Existing inde
31400 78 20 41 53 43 45 4e 44 49 4e 47 20 2a 2f 0a 23  x ASCENDING */.#
31410 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
31420 49 4e 44 45 58 5f 44 45 53 43 20 20 20 34 20 20  INDEX_DESC   4  
31430 20 2f 2a 20 45 78 69 73 74 69 6e 67 20 69 6e 64   /* Existing ind
31440 65 78 20 44 45 53 43 45 4e 44 49 4e 47 20 2a 2f  ex DESCENDING */
31450 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
31460 58 5f 4e 4f 4f 50 20 20 20 20 20 20 20 20 20 35  X_NOOP         5
31470 20 20 20 2f 2a 20 4e 6f 20 74 61 62 6c 65 20 61     /* No table a
31480 76 61 69 6c 61 62 6c 65 2e 20 55 73 65 20 63 6f  vailable. Use co
31490 6d 70 61 72 69 73 6f 6e 73 20 2a 2f 0a 2f 2a 0a  mparisons */./*.
314a0 2a 2a 20 41 6c 6c 6f 77 65 64 20 66 6c 61 67 73  ** Allowed flags
314b0 20 66 6f 72 20 74 68 65 20 33 72 64 20 70 61 72   for the 3rd par
314c0 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74 65  ameter to sqlite
314d0 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 29 2e 0a  3FindInIndex()..
314e0 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  */.#define IN_IN
314f0 44 45 58 5f 4e 4f 4f 50 5f 4f 4b 20 20 20 20 20  DEX_NOOP_OK     
31500 30 78 30 30 30 31 20 20 2f 2a 20 4f 4b 20 74 6f  0x0001  /* OK to
31510 20 72 65 74 75 72 6e 20 49 4e 5f 49 4e 44 45 58   return IN_INDEX
31520 5f 4e 4f 4f 50 20 2a 2f 0a 23 64 65 66 69 6e 65  _NOOP */.#define
31530 20 49 4e 5f 49 4e 44 45 58 5f 4d 45 4d 42 45 52   IN_INDEX_MEMBER
31540 53 48 49 50 20 20 30 78 30 30 30 32 20 20 2f 2a  SHIP  0x0002  /*
31550 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 75 73 65   IN operator use
31560 64 20 66 6f 72 20 6d 65 6d 62 65 72 73 68 69 70  d for membership
31570 20 74 65 73 74 20 2a 2f 0a 23 64 65 66 69 6e 65   test */.#define
31580 20 49 4e 5f 49 4e 44 45 58 5f 4c 4f 4f 50 20 20   IN_INDEX_LOOP  
31590 20 20 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a        0x0004  /*
315a0 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 75 73 65   IN operator use
315b0 64 20 61 73 20 61 20 6c 6f 6f 70 20 2a 2f 0a 69  d as a loop */.i
315c0 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e  nt sqlite3FindIn
315d0 49 6e 64 65 78 28 50 61 72 73 65 20 2a 2c 20 45  Index(Parse *, E
315e0 78 70 72 20 2a 2c 20 75 33 32 2c 20 69 6e 74 2a  xpr *, u32, int*
315f0 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 0a  , int*, int*);..
31600 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e  int sqlite3Journ
31610 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f 76  alOpen(sqlite3_v
31620 66 73 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  fs *, const char
31630 20 2a 2c 20 73 71 6c 69 74 65 33 5f 66 69 6c 65   *, sqlite3_file
31640 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69   *, int, int);.i
31650 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  nt sqlite3Journa
31660 6c 53 69 7a 65 28 73 71 6c 69 74 65 33 5f 76 66  lSize(sqlite3_vf
31670 73 20 2a 29 3b 0a 23 69 66 20 64 65 66 69 6e 65  s *);.#if define
31680 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
31690 41 54 4f 4d 49 43 5f 57 52 49 54 45 29 20 5c 0a  ATOMIC_WRITE) \.
316a0 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49   || defined(SQLI
316b0 54 45 5f 45 4e 41 42 4c 45 5f 42 41 54 43 48 5f  TE_ENABLE_BATCH_
316c0 41 54 4f 4d 49 43 5f 57 52 49 54 45 29 0a 20 20  ATOMIC_WRITE).  
316d0 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e  int sqlite3Journ
316e0 61 6c 43 72 65 61 74 65 28 73 71 6c 69 74 65 33  alCreate(sqlite3
316f0 5f 66 69 6c 65 20 2a 29 3b 0a 23 65 6e 64 69 66  _file *);.#endif
31700 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75  ..int sqlite3Jou
31710 72 6e 61 6c 49 73 49 6e 4d 65 6d 6f 72 79 28 73  rnalIsInMemory(s
31720 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 70 29 3b  qlite3_file *p);
31730 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d  .void sqlite3Mem
31740 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69  JournalOpen(sqli
31750 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 0a 76 6f  te3_file *);..vo
31760 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 53 65  id sqlite3ExprSe
31770 74 48 65 69 67 68 74 41 6e 64 46 6c 61 67 73 28  tHeightAndFlags(
31780 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45  Parse *pParse, E
31790 78 70 72 20 2a 70 29 3b 0a 23 69 66 20 53 51 4c  xpr *p);.#if SQL
317a0 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50  ITE_MAX_EXPR_DEP
317b0 54 48 3e 30 0a 20 20 69 6e 74 20 73 71 6c 69 74  TH>0.  int sqlit
317c0 65 33 53 65 6c 65 63 74 45 78 70 72 48 65 69 67  e3SelectExprHeig
317d0 68 74 28 53 65 6c 65 63 74 20 2a 29 3b 0a 20 20  ht(Select *);.  
317e0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
317f0 68 65 63 6b 48 65 69 67 68 74 28 50 61 72 73 65  heckHeight(Parse
31800 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 20  *, int);.#else. 
31810 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
31820 53 65 6c 65 63 74 45 78 70 72 48 65 69 67 68 74  SelectExprHeight
31830 28 78 29 20 30 0a 20 20 23 64 65 66 69 6e 65 20  (x) 0.  #define 
31840 73 71 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b  sqlite3ExprCheck
31850 48 65 69 67 68 74 28 78 2c 79 29 0a 23 65 6e 64  Height(x,y).#end
31860 69 66 0a 0a 75 33 32 20 73 71 6c 69 74 65 33 47  if..u32 sqlite3G
31870 65 74 34 62 79 74 65 28 63 6f 6e 73 74 20 75 38  et4byte(const u8
31880 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
31890 50 75 74 34 62 79 74 65 28 75 38 2a 2c 20 75 33  Put4byte(u8*, u3
318a0 32 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  2);..#ifdef SQLI
318b0 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b  TE_ENABLE_UNLOCK
318c0 5f 4e 4f 54 49 46 59 0a 20 20 76 6f 69 64 20 73  _NOTIFY.  void s
318d0 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e  qlite3Connection
318e0 42 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65 33 20  Blocked(sqlite3 
318f0 2a 2c 20 73 71 6c 69 74 65 33 20 2a 29 3b 0a 20  *, sqlite3 *);. 
31900 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e   void sqlite3Con
31910 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28  nectionUnlocked(
31920 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20  sqlite3 *db);.  
31930 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e  void sqlite3Conn
31940 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 73 71 6c  ectionClosed(sql
31950 69 74 65 33 20 2a 64 62 29 3b 0a 23 65 6c 73 65  ite3 *db);.#else
31960 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
31970 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63  e3ConnectionBloc
31980 6b 65 64 28 78 2c 79 29 0a 20 20 23 64 65 66 69  ked(x,y).  #defi
31990 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63  ne sqlite3Connec
319a0 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 78 29 0a  tionUnlocked(x).
319b0 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
319c0 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65  3ConnectionClose
319d0 64 28 78 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66  d(x).#endif..#if
319e0 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
319f0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 50  .  void sqlite3P
31a00 61 72 73 65 72 54 72 61 63 65 28 46 49 4c 45 2a  arserTrace(FILE*
31a10 2c 20 63 68 61 72 20 2a 29 3b 0a 23 65 6e 64 69  , char *);.#endi
31a20 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 59 59  f.#if defined(YY
31a30 43 4f 56 45 52 41 47 45 29 0a 20 20 69 6e 74 20  COVERAGE).  int 
31a40 73 71 6c 69 74 65 33 50 61 72 73 65 72 43 6f 76  sqlite3ParserCov
31a50 65 72 61 67 65 28 46 49 4c 45 2a 29 3b 0a 23 65  erage(FILE*);.#e
31a60 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 74  ndif../*.** If t
31a70 68 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  he SQLITE_ENABLE
31a80 20 49 4f 54 52 41 43 45 20 65 78 69 73 74 73 20   IOTRACE exists 
31a90 74 68 65 6e 20 74 68 65 20 67 6c 6f 62 61 6c 20  then the global 
31aa0 76 61 72 69 61 62 6c 65 0a 2a 2a 20 73 71 6c 69  variable.** sqli
31ab0 74 65 33 49 6f 54 72 61 63 65 20 69 73 20 61 20  te3IoTrace is a 
31ac0 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 70 72 69  pointer to a pri
31ad0 6e 74 66 2d 6c 69 6b 65 20 72 6f 75 74 69 6e 65  ntf-like routine
31ae0 20 75 73 65 64 20 74 6f 0a 2a 2a 20 70 72 69 6e   used to.** prin
31af0 74 20 49 2f 4f 20 74 72 61 63 69 6e 67 20 6d 65  t I/O tracing me
31b00 73 73 61 67 65 73 2e 0a 2a 2f 0a 23 69 66 64 65  ssages..*/.#ifde
31b10 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
31b20 49 4f 54 52 41 43 45 0a 23 20 64 65 66 69 6e 65  IOTRACE.# define
31b30 20 49 4f 54 52 41 43 45 28 41 29 20 20 69 66 28   IOTRACE(A)  if(
31b40 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20   sqlite3IoTrace 
31b50 29 7b 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63  ){ sqlite3IoTrac
31b60 65 20 41 3b 20 7d 0a 20 20 76 6f 69 64 20 73 71  e A; }.  void sq
31b70 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61 63 65  lite3VdbeIOTrace
31b80 53 71 6c 28 56 64 62 65 2a 29 3b 0a 53 51 4c 49  Sql(Vdbe*);.SQLI
31b90 54 45 5f 41 50 49 20 53 51 4c 49 54 45 5f 45 58  TE_API SQLITE_EX
31ba0 54 45 52 4e 20 76 6f 69 64 20 28 53 51 4c 49 54  TERN void (SQLIT
31bb0 45 5f 43 44 45 43 4c 20 2a 73 71 6c 69 74 65 33  E_CDECL *sqlite3
31bc0 49 6f 54 72 61 63 65 29 28 63 6f 6e 73 74 20 63  IoTrace)(const c
31bd0 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23 65 6c 73 65  har*,...);.#else
31be0 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41 43  .# define IOTRAC
31bf0 45 28 41 29 0a 23 20 64 65 66 69 6e 65 20 73 71  E(A).# define sq
31c00 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61 63 65  lite3VdbeIOTrace
31c10 53 71 6c 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f  Sql(X).#endif../
31c20 2a 0a 2a 2a 20 54 68 65 73 65 20 72 6f 75 74 69  *.** These routi
31c30 6e 65 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c  nes are availabl
31c40 65 20 66 6f 72 20 74 68 65 20 6d 65 6d 32 2e 63  e for the mem2.c
31c50 20 64 65 62 75 67 67 69 6e 67 20 6d 65 6d 6f 72   debugging memor
31c60 79 20 61 6c 6c 6f 63 61 74 6f 72 0a 2a 2a 20 6f  y allocator.** o
31c70 6e 6c 79 2e 20 20 54 68 65 79 20 61 72 65 20 75  nly.  They are u
31c80 73 65 64 20 74 6f 20 76 65 72 69 66 79 20 74 68  sed to verify th
31c90 61 74 20 64 69 66 66 65 72 65 6e 74 20 22 74 79  at different "ty
31ca0 70 65 73 22 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a  pes" of memory.*
31cb0 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72  * allocations ar
31cc0 65 20 70 72 6f 70 65 72 6c 79 20 74 72 61 63 6b  e properly track
31cd0 65 64 20 62 79 20 74 68 65 20 73 79 73 74 65 6d  ed by the system
31ce0 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d  ..**.** sqlite3M
31cf0 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 29  emdebugSetType()
31d00 20 73 65 74 73 20 74 68 65 20 22 74 79 70 65 22   sets the "type"
31d10 20 6f 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f   of an allocatio
31d20 6e 20 74 6f 20 6f 6e 65 20 6f 66 0a 2a 2a 20 74  n to one of.** t
31d30 68 65 20 4d 45 4d 54 59 50 45 5f 2a 20 6d 61 63  he MEMTYPE_* mac
31d40 72 6f 73 20 64 65 66 69 6e 65 64 20 62 65 6c 6f  ros defined belo
31d50 77 2e 20 20 54 68 65 20 74 79 70 65 20 6d 75 73  w.  The type mus
31d60 74 20 62 65 20 61 20 62 69 74 6d 61 73 6b 20 77  t be a bitmask w
31d70 69 74 68 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20  ith.** a single 
31d80 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 73  bit set..**.** s
31d90 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61  qlite3MemdebugHa
31da0 73 54 79 70 65 28 29 20 72 65 74 75 72 6e 73 20  sType() returns 
31db0 74 72 75 65 20 69 66 20 61 6e 79 20 6f 66 20 74  true if any of t
31dc0 68 65 20 62 69 74 73 20 69 6e 20 69 74 73 20 73  he bits in its s
31dd0 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e  econd.** argumen
31de0 74 20 6d 61 74 63 68 20 74 68 65 20 74 79 70 65  t match the type
31df0 20 73 65 74 20 62 79 20 74 68 65 20 70 72 65 76   set by the prev
31e00 69 6f 75 73 20 73 71 6c 69 74 65 33 4d 65 6d 64  ious sqlite3Memd
31e10 65 62 75 67 53 65 74 54 79 70 65 28 29 2e 0a 2a  ebugSetType()..*
31e20 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  * sqlite3Memdebu
31e30 67 48 61 73 54 79 70 65 28 29 20 69 73 20 69 6e  gHasType() is in
31e40 74 65 6e 64 65 64 20 66 6f 72 20 75 73 65 20 69  tended for use i
31e50 6e 73 69 64 65 20 61 73 73 65 72 74 28 29 20 73  nside assert() s
31e60 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a  tatements..**.**
31e70 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
31e80 4e 6f 54 79 70 65 28 29 20 72 65 74 75 72 6e 73  NoType() returns
31e90 20 74 72 75 65 20 69 66 20 6e 6f 6e 65 20 6f 66   true if none of
31ea0 20 74 68 65 20 62 69 74 73 20 69 6e 20 69 74 73   the bits in its
31eb0 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d   second.** argum
31ec0 65 6e 74 20 6d 61 74 63 68 20 74 68 65 20 74 79  ent match the ty
31ed0 70 65 20 73 65 74 20 62 79 20 74 68 65 20 70 72  pe set by the pr
31ee0 65 76 69 6f 75 73 20 73 71 6c 69 74 65 33 4d 65  evious sqlite3Me
31ef0 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 29 2e  mdebugSetType().
31f00 0a 2a 2a 0a 2a 2a 20 50 65 72 68 61 70 73 20 74  .**.** Perhaps t
31f10 68 65 20 6d 6f 73 74 20 69 6d 70 6f 72 74 61 6e  he most importan
31f20 74 20 70 6f 69 6e 74 20 69 73 20 74 68 65 20 64  t point is the d
31f30 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65 65  ifference betwee
31f40 6e 20 4d 45 4d 54 59 50 45 5f 48 45 41 50 0a 2a  n MEMTYPE_HEAP.*
31f50 2a 20 61 6e 64 20 4d 45 4d 54 59 50 45 5f 4c 4f  * and MEMTYPE_LO
31f60 4f 4b 41 53 49 44 45 2e 20 20 49 66 20 61 6e 20  OKASIDE.  If an 
31f70 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 73 20 4d 45  allocation is ME
31f80 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2c  MTYPE_LOOKASIDE,
31f90 20 74 68 61 74 20 6d 65 61 6e 73 0a 2a 2a 20 69   that means.** i
31fa0 74 20 6d 69 67 68 74 20 68 61 76 65 20 62 65 65  t might have bee
31fb0 6e 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20 6c  n allocated by l
31fc0 6f 6f 6b 61 73 69 64 65 2c 20 65 78 63 65 70 74  ookaside, except
31fd0 20 74 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 20   the allocation 
31fe0 77 61 73 0a 2a 2a 20 74 6f 6f 20 6c 61 72 67 65  was.** too large
31ff0 20 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 20 77 61   or lookaside wa
32000 73 20 61 6c 72 65 61 64 79 20 66 75 6c 6c 2e 20  s already full. 
32010 20 49 74 20 69 73 20 69 6d 70 6f 72 74 61 6e 74   It is important
32020 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74 68   to verify.** th
32030 61 74 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 74  at allocations t
32040 68 61 74 20 6d 69 67 68 74 20 68 61 76 65 20 62  hat might have b
32050 65 65 6e 20 73 61 74 69 73 66 69 65 64 20 62 79  een satisfied by
32060 20 6c 6f 6f 6b 61 73 69 64 65 20 61 72 65 20 6e   lookaside are n
32070 6f 74 0a 2a 2a 20 70 61 73 73 65 64 20 62 61 63  ot.** passed bac
32080 6b 20 74 6f 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69  k to non-lookasi
32090 64 65 20 66 72 65 65 28 29 20 72 6f 75 74 69 6e  de free() routin
320a0 65 73 2e 20 20 41 73 73 65 72 74 73 20 73 75 63  es.  Asserts suc
320b0 68 20 61 73 20 74 68 65 0a 2a 2a 20 65 78 61 6d  h as the.** exam
320c0 70 6c 65 20 61 62 6f 76 65 20 61 72 65 20 70 6c  ple above are pl
320d0 61 63 65 64 20 6f 6e 20 74 68 65 20 6e 6f 6e 2d  aced on the non-
320e0 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65 65 28 29  lookaside free()
320f0 20 72 6f 75 74 69 6e 65 73 20 74 6f 20 76 65 72   routines to ver
32100 69 66 79 0a 2a 2a 20 74 68 69 73 20 63 6f 6e 73  ify.** this cons
32110 74 72 61 69 6e 74 2e 0a 2a 2a 0a 2a 2a 20 41 6c  traint..**.** Al
32120 6c 20 6f 66 20 74 68 69 73 20 69 73 20 6e 6f 2d  l of this is no-
32130 6f 70 20 66 6f 72 20 61 20 70 72 6f 64 75 63 74  op for a product
32140 69 6f 6e 20 62 75 69 6c 64 2e 20 20 49 74 20 6f  ion build.  It o
32150 6e 6c 79 20 63 6f 6d 65 73 20 69 6e 74 6f 0a 2a  nly comes into.*
32160 2a 20 70 6c 61 79 20 77 68 65 6e 20 74 68 65 20  * play when the 
32170 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 20  SQLITE_MEMDEBUG 
32180 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74  compile-time opt
32190 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a  ion is used..*/.
321a0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4d 45  #ifdef SQLITE_ME
321b0 4d 44 45 42 55 47 0a 20 20 76 6f 69 64 20 73 71  MDEBUG.  void sq
321c0 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74  lite3MemdebugSet
321d0 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a  Type(void*,u8);.
321e0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d    int sqlite3Mem
321f0 64 65 62 75 67 48 61 73 54 79 70 65 28 76 6f 69  debugHasType(voi
32200 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73 71  d*,u8);.  int sq
32210 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54  lite3MemdebugNoT
32220 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 23  ype(void*,u8);.#
32230 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
32240 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74  lite3MemdebugSet
32250 54 79 70 65 28 58 2c 59 29 20 20 2f 2a 20 6e 6f  Type(X,Y)  /* no
32260 2d 6f 70 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20  -op */.# define 
32270 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48  sqlite3MemdebugH
32280 61 73 54 79 70 65 28 58 2c 59 29 20 20 31 0a 23  asType(X,Y)  1.#
32290 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d   define sqlite3M
322a0 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 58 2c  emdebugNoType(X,
322b0 59 29 20 20 20 31 0a 23 65 6e 64 69 66 0a 23 64  Y)   1.#endif.#d
322c0 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 48 45  efine MEMTYPE_HE
322d0 41 50 20 20 20 20 20 20 20 30 78 30 31 20 20 2f  AP       0x01  /
322e0 2a 20 47 65 6e 65 72 61 6c 20 68 65 61 70 20 61  * General heap a
322f0 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64  llocations */.#d
32300 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 4c 4f  efine MEMTYPE_LO
32310 4f 4b 41 53 49 44 45 20 20 30 78 30 32 20 20 2f  OKASIDE  0x02  /
32320 2a 20 48 65 61 70 20 74 68 61 74 20 6d 69 67 68  * Heap that migh
32330 74 20 68 61 76 65 20 62 65 65 6e 20 6c 6f 6f 6b  t have been look
32340 61 73 69 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65  aside */.#define
32350 20 4d 45 4d 54 59 50 45 5f 50 43 41 43 48 45 20   MEMTYPE_PCACHE 
32360 20 20 20 20 30 78 30 34 20 20 2f 2a 20 50 61 67      0x04  /* Pag
32370 65 20 63 61 63 68 65 20 61 6c 6c 6f 63 61 74 69  e cache allocati
32380 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68  ons */../*.** Th
32390 72 65 61 64 69 6e 67 20 69 6e 74 65 72 66 61 63  reading interfac
323a0 65 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f  e.*/.#if SQLITE_
323b0 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41  MAX_WORKER_THREA
323c0 44 53 3e 30 0a 69 6e 74 20 73 71 6c 69 74 65 33  DS>0.int sqlite3
323d0 54 68 72 65 61 64 43 72 65 61 74 65 28 53 51 4c  ThreadCreate(SQL
323e0 69 74 65 54 68 72 65 61 64 2a 2a 2c 76 6f 69 64  iteThread**,void
323f0 2a 28 2a 29 28 76 6f 69 64 2a 29 2c 76 6f 69 64  *(*)(void*),void
32400 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54  *);.int sqlite3T
32410 68 72 65 61 64 4a 6f 69 6e 28 53 51 4c 69 74 65  hreadJoin(SQLite
32420 54 68 72 65 61 64 2a 2c 20 76 6f 69 64 2a 2a 29  Thread*, void**)
32430 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 65  ;.#endif..#if de
32440 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
32450 42 4c 45 5f 44 42 50 41 47 45 5f 56 54 41 42 29  BLE_DBPAGE_VTAB)
32460 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49   || defined(SQLI
32470 54 45 5f 54 45 53 54 29 0a 69 6e 74 20 73 71 6c  TE_TEST).int sql
32480 69 74 65 33 44 62 70 61 67 65 52 65 67 69 73 74  ite3DbpageRegist
32490 65 72 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65  er(sqlite3*);.#e
324a0 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64  ndif.#if defined
324b0 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 44  (SQLITE_ENABLE_D
324c0 42 53 54 41 54 5f 56 54 41 42 29 20 7c 7c 20 64  BSTAT_VTAB) || d
324d0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45  efined(SQLITE_TE
324e0 53 54 29 0a 69 6e 74 20 73 71 6c 69 74 65 33 44  ST).int sqlite3D
324f0 62 73 74 61 74 52 65 67 69 73 74 65 72 28 73 71  bstatRegister(sq
32500 6c 69 74 65 33 2a 29 3b 0a 23 65 6e 64 69 66 0a  lite3*);.#endif.
32510 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
32520 56 65 63 74 6f 72 53 69 7a 65 28 45 78 70 72 20  VectorSize(Expr 
32530 2a 70 45 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c  *pExpr);.int sql
32540 69 74 65 33 45 78 70 72 49 73 56 65 63 74 6f 72  ite3ExprIsVector
32550 28 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 45  (Expr *pExpr);.E
32560 78 70 72 20 2a 73 71 6c 69 74 65 33 56 65 63 74  xpr *sqlite3Vect
32570 6f 72 46 69 65 6c 64 53 75 62 65 78 70 72 28 45  orFieldSubexpr(E
32580 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 45 78 70 72  xpr*, int);.Expr
32590 20 2a 73 71 6c 69 74 65 33 45 78 70 72 46 6f 72   *sqlite3ExprFor
325a0 56 65 63 74 6f 72 46 69 65 6c 64 28 50 61 72 73  VectorField(Pars
325b0 65 2a 2c 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 76  e*,Expr*,int);.v
325c0 6f 69 64 20 73 71 6c 69 74 65 33 56 65 63 74 6f  oid sqlite3Vecto
325d0 72 45 72 72 6f 72 4d 73 67 28 50 61 72 73 65 2a  rErrorMsg(Parse*
325e0 2c 20 45 78 70 72 2a 29 3b 0a 0a 23 69 66 6e 64  , Expr*);..#ifnd
325f0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  ef SQLITE_OMIT_C
32600 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f 44 49 41  OMPILEOPTION_DIA
32610 47 53 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 2a  GS.const char **
32620 73 71 6c 69 74 65 33 43 6f 6d 70 69 6c 65 4f 70  sqlite3CompileOp
32630 74 69 6f 6e 73 28 69 6e 74 20 2a 70 6e 4f 70 74  tions(int *pnOpt
32640 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 65 6e 64 69  );.#endif..#endi
32650 66 20 2f 2a 20 53 51 4c 49 54 45 49 4e 54 5f 48  f /* SQLITEINT_H
32660 20 2a 2f 0a                                       */.