/ Hex Artifact Content
Login

Artifact a67385b64a1c0fa21dfe333cf4c29d81f247df2cf09e22fcdc24db4ac486ff42:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 53 51 4c 49 54 45 49 4e 54 5f 48 0a 23  ef SQLITEINT_H.#
01c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 49 4e 54  define SQLITEINT
01d0: 5f 48 0a 0a 2f 2a 20 53 70 65 63 69 61 6c 20 43  _H../* Special C
01e0: 6f 6d 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 53  omments:.**.** S
01f0: 6f 6d 65 20 63 6f 6d 6d 65 6e 74 73 20 68 61 76  ome comments hav
0200: 65 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e  e special meanin
0210: 67 20 74 6f 20 74 68 65 20 74 6f 6f 6c 73 20 74  g to the tools t
0220: 68 61 74 20 6d 65 61 73 75 72 65 20 74 65 73 74  hat measure test
0230: 0a 2a 2a 20 63 6f 76 65 72 61 67 65 3a 0a 2a 2a  .** coverage:.**
0240: 0a 2a 2a 20 20 20 20 4e 4f 5f 54 45 53 54 20 20  .**    NO_TEST  
0250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0260: 20 20 20 2d 20 54 68 65 20 62 72 61 6e 63 68 65     - The branche
0270: 73 20 6f 6e 20 74 68 69 73 20 6c 69 6e 65 20 61  s on this line a
0280: 72 65 20 6e 6f 74 0a 2a 2a 20 20 20 20 20 20 20  re not.**       
0290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02a0: 20 20 20 20 20 20 20 20 20 20 20 6d 65 61 73 75             measu
02b0: 72 65 64 20 62 79 20 62 72 61 6e 63 68 20 63 6f  red by branch co
02c0: 76 65 72 61 67 65 2e 20 20 54 68 69 73 20 69 73  verage.  This is
02d0: 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
02e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02f0: 20 20 20 20 20 75 73 65 64 20 6f 6e 20 6c 69 6e       used on lin
0300: 65 73 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20  es of code that 
0310: 61 63 74 75 61 6c 6c 79 0a 2a 2a 20 20 20 20 20  actually.**     
0320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0330: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6d 70               imp
0340: 6c 65 6d 65 6e 74 20 70 61 72 74 73 20 6f 66 20  lement parts of 
0350: 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e 67  coverage testing
0360: 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d  ..**.**    OPTIM
0370: 49 5a 41 54 49 4f 4e 2d 49 46 2d 54 52 55 45 20  IZATION-IF-TRUE 
0380: 20 20 20 20 20 20 20 2d 20 54 68 69 73 20 62 72         - This br
0390: 61 6e 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20  anch is allowed 
03a0: 74 6f 20 61 6c 77 61 79 20 62 65 20 66 61 6c 73  to alway be fals
03b0: 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
03c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
03d0: 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 63 6f        and the co
03e0: 72 72 65 63 74 20 61 6e 73 77 65 72 20 69 73 20  rrect answer is 
03f0: 73 74 69 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a  still obtained,.
0400: 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
0410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0420: 20 20 20 20 74 68 6f 75 67 68 20 70 65 72 68 61      though perha
0430: 70 73 20 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a  ps more slowly..
0440: 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d 49 5a  **.**    OPTIMIZ
0450: 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 20 20  ATION-IF-FALSE  
0460: 20 20 20 20 20 2d 20 54 68 69 73 20 62 72 61 6e       - This bran
0470: 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f  ch is allowed to
0480: 20 61 6c 77 61 79 20 62 65 20 74 72 75 65 0a 2a   alway be true.*
0490: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
04a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04b0: 20 20 20 61 6e 64 20 74 68 65 20 63 6f 72 72 65     and the corre
04c0: 63 74 20 61 6e 73 77 65 72 20 69 73 20 73 74 69  ct answer is sti
04d0: 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a 2a 2a 20  ll obtained,.** 
04e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0500: 20 74 68 6f 75 67 68 20 70 65 72 68 61 70 73 20   though perhaps 
0510: 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a 2a 2a 0a  more slowly..**.
0520: 2a 2a 20 20 20 20 50 52 45 56 45 4e 54 53 2d 48  **    PREVENTS-H
0530: 41 52 4d 4c 45 53 53 2d 4f 56 45 52 52 45 41 44  ARMLESS-OVERREAD
0540: 20 20 2d 20 54 68 69 73 20 62 72 61 6e 63 68 20    - This branch 
0550: 70 72 65 76 65 6e 74 73 20 61 20 62 75 66 66 65  prevents a buffe
0560: 72 20 6f 76 65 72 72 65 61 64 0a 2a 2a 20 20 20  r overread.**   
0570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
0590: 68 61 74 20 77 6f 75 6c 64 20 62 65 20 68 61 72  hat would be har
05a0: 6d 6c 65 73 73 20 61 6e 64 20 75 6e 64 65 74 65  mless and undete
05b0: 63 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20  ctable.**       
05c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
05d0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 69 74             if it
05e0: 20 64 69 64 20 6f 63 63 75 72 2e 20 20 0a 2a 2a   did occur.  .**
05f0: 0a 2a 2a 20 49 6e 20 61 6c 6c 20 63 61 73 65 73  .** In all cases
0600: 2c 20 74 68 65 20 73 70 65 63 69 61 6c 20 63 6f  , the special co
0610: 6d 6d 65 6e 74 20 6d 75 73 74 20 62 65 20 65 6e  mment must be en
0620: 63 6c 6f 73 65 64 20 69 6e 20 74 68 65 20 75 73  closed in the us
0630: 75 61 6c 0a 2a 2a 20 73 6c 61 73 68 2d 61 73 74  ual.** slash-ast
0640: 65 72 69 73 6b 2e 2e 2e 61 73 74 65 72 69 73 6b  erisk...asterisk
0650: 2d 73 6c 61 73 68 20 63 6f 6d 6d 65 6e 74 20 6d  -slash comment m
0660: 61 72 6b 73 2c 20 77 69 74 68 20 6e 6f 20 73 70  arks, with no sp
0670: 61 63 65 73 20 62 65 74 77 65 65 6e 20 74 68 65  aces between the
0680: 20 0a 2a 2a 20 61 73 74 65 72 69 73 6b 73 20 61   .** asterisks a
0690: 6e 64 20 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74  nd the comment t
06a0: 65 78 74 2e 0a 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d  ext..*/../*.** M
06b0: 61 6b 65 20 73 75 72 65 20 74 68 65 20 54 63 6c  ake sure the Tcl
06c0: 20 63 61 6c 6c 69 6e 67 20 63 6f 6e 76 65 6e 74   calling convent
06d0: 69 6f 6e 20 6d 61 63 72 6f 20 69 73 20 64 65 66  ion macro is def
06e0: 69 6e 65 64 2e 20 20 54 68 69 73 20 6d 61 63 72  ined.  This macr
06f0: 6f 20 69 73 0a 2a 2a 20 6f 6e 6c 79 20 75 73 65  o is.** only use
0700: 64 20 62 79 20 74 65 73 74 20 63 6f 64 65 20 61  d by test code a
0710: 6e 64 20 54 63 6c 20 69 6e 74 65 67 72 61 74 69  nd Tcl integrati
0720: 6f 6e 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 6e  on code..*/.#ifn
0730: 64 65 66 20 53 51 4c 49 54 45 5f 54 43 4c 41 50  def SQLITE_TCLAP
0740: 49 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49  I.#  define SQLI
0750: 54 45 5f 54 43 4c 41 50 49 0a 23 65 6e 64 69 66  TE_TCLAPI.#endif
0760: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c 75 64 65 20  ../*.** Include 
0770: 74 68 65 20 68 65 61 64 65 72 20 66 69 6c 65 20  the header file 
0780: 75 73 65 64 20 74 6f 20 63 75 73 74 6f 6d 69 7a  used to customiz
0790: 65 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 6f  e the compiler o
07a0: 70 74 69 6f 6e 73 20 66 6f 72 20 4d 53 56 43 2e  ptions for MSVC.
07b0: 0a 2a 2a 20 54 68 69 73 20 73 68 6f 75 6c 64 20  .** This should 
07c0: 62 65 20 64 6f 6e 65 20 66 69 72 73 74 20 73 6f  be done first so
07d0: 20 74 68 61 74 20 69 74 20 63 61 6e 20 73 75 63   that it can suc
07e0: 63 65 73 73 66 75 6c 6c 79 20 70 72 65 76 65 6e  cessfully preven
07f0: 74 20 73 70 75 72 69 6f 75 73 0a 2a 2a 20 63 6f  t spurious.** co
0800: 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 73 20  mpiler warnings 
0810: 64 75 65 20 74 6f 20 73 75 62 73 65 71 75 65 6e  due to subsequen
0820: 74 20 63 6f 6e 74 65 6e 74 20 69 6e 20 74 68 69  t content in thi
0830: 73 20 66 69 6c 65 20 61 6e 64 20 6f 74 68 65 72  s file and other
0840: 20 66 69 6c 65 73 0a 2a 2a 20 74 68 61 74 20 61   files.** that a
0850: 72 65 20 69 6e 63 6c 75 64 65 64 20 62 79 20 74  re included by t
0860: 68 69 73 20 66 69 6c 65 2e 0a 2a 2f 0a 23 69 6e  his file..*/.#in
0870: 63 6c 75 64 65 20 22 6d 73 76 63 2e 68 22 0a 0a  clude "msvc.h"..
0880: 2f 2a 0a 2a 2a 20 53 70 65 63 69 61 6c 20 73 65  /*.** Special se
0890: 74 75 70 20 66 6f 72 20 56 78 57 6f 72 6b 73 0a  tup for VxWorks.
08a0: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 76 78 77  */.#include "vxw
08b0: 6f 72 6b 73 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 54  orks.h"../*.** T
08c0: 68 65 73 65 20 23 64 65 66 69 6e 65 73 20 73 68  hese #defines sh
08d0: 6f 75 6c 64 20 65 6e 61 62 6c 65 20 3e 32 47 42  ould enable >2GB
08e0: 20 66 69 6c 65 20 73 75 70 70 6f 72 74 20 6f 6e   file support on
08f0: 20 50 4f 53 49 58 20 69 66 20 74 68 65 0a 2a 2a   POSIX if the.**
0900: 20 75 6e 64 65 72 6c 79 69 6e 67 20 6f 70 65 72   underlying oper
0910: 61 74 69 6e 67 20 73 79 73 74 65 6d 20 73 75 70  ating system sup
0920: 70 6f 72 74 73 20 69 74 2e 20 20 49 66 20 74 68  ports it.  If th
0930: 65 20 4f 53 20 6c 61 63 6b 73 0a 2a 2a 20 6c 61  e OS lacks.** la
0940: 72 67 65 20 66 69 6c 65 20 73 75 70 70 6f 72 74  rge file support
0950: 2c 20 6f 72 20 69 66 20 74 68 65 20 4f 53 20 69  , or if the OS i
0960: 73 20 77 69 6e 64 6f 77 73 2c 20 74 68 65 73 65  s windows, these
0970: 20 73 68 6f 75 6c 64 20 62 65 20 6e 6f 2d 6f 70   should be no-op
0980: 73 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20  s..**.** Ticket 
0990: 23 32 37 33 39 3a 20 20 54 68 65 20 5f 4c 41 52  #2739:  The _LAR
09a0: 47 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 6d 61  GEFILE_SOURCE ma
09b0: 63 72 6f 20 6d 75 73 74 20 61 70 70 65 61 72 20  cro must appear 
09c0: 62 65 66 6f 72 65 20 61 6e 79 0a 2a 2a 20 73 79  before any.** sy
09d0: 73 74 65 6d 20 23 69 6e 63 6c 75 64 65 73 2e 20  stem #includes. 
09e0: 20 48 65 6e 63 65 2c 20 74 68 69 73 20 62 6c 6f   Hence, this blo
09f0: 63 6b 20 6f 66 20 63 6f 64 65 20 6d 75 73 74 20  ck of code must 
0a00: 62 65 20 74 68 65 20 76 65 72 79 20 66 69 72 73  be the very firs
0a10: 74 0a 2a 2a 20 63 6f 64 65 20 69 6e 20 61 6c 6c  t.** code in all
0a20: 20 73 6f 75 72 63 65 20 66 69 6c 65 73 2e 0a 2a   source files..*
0a30: 2a 0a 2a 2a 20 4c 61 72 67 65 20 66 69 6c 65 20  *.** Large file 
0a40: 73 75 70 70 6f 72 74 20 63 61 6e 20 62 65 20 64  support can be d
0a50: 69 73 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68  isabled using th
0a60: 65 20 2d 44 53 51 4c 49 54 45 5f 44 49 53 41 42  e -DSQLITE_DISAB
0a70: 4c 45 5f 4c 46 53 20 73 77 69 74 63 68 0a 2a 2a  LE_LFS switch.**
0a80: 20 6f 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 72   on the compiler
0a90: 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2e 20 20   command line.  
0aa0: 54 68 69 73 20 69 73 20 6e 65 63 65 73 73 61 72  This is necessar
0ab0: 79 20 69 66 20 79 6f 75 20 61 72 65 20 63 6f 6d  y if you are com
0ac0: 70 69 6c 69 6e 67 0a 2a 2a 20 6f 6e 20 61 20 72  piling.** on a r
0ad0: 65 63 65 6e 74 20 6d 61 63 68 69 6e 65 20 28 65  ecent machine (e
0ae0: 78 3a 20 52 65 64 20 48 61 74 20 37 2e 32 29 20  x: Red Hat 7.2) 
0af0: 62 75 74 20 79 6f 75 20 77 61 6e 74 20 79 6f 75  but you want you
0b00: 72 20 63 6f 64 65 20 74 6f 20 77 6f 72 6b 0a 2a  r code to work.*
0b10: 2a 20 6f 6e 20 61 6e 20 6f 6c 64 65 72 20 6d 61  * on an older ma
0b20: 63 68 69 6e 65 20 28 65 78 3a 20 52 65 64 20 48  chine (ex: Red H
0b30: 61 74 20 36 2e 30 29 2e 20 20 49 66 20 79 6f 75  at 6.0).  If you
0b40: 20 63 6f 6d 70 69 6c 65 20 6f 6e 20 52 65 64 20   compile on Red 
0b50: 48 61 74 20 37 2e 32 0a 2a 2a 20 77 69 74 68 6f  Hat 7.2.** witho
0b60: 75 74 20 74 68 69 73 20 6f 70 74 69 6f 6e 2c 20  ut this option, 
0b70: 4c 46 53 20 69 73 20 65 6e 61 62 6c 65 2e 20 20  LFS is enable.  
0b80: 42 75 74 20 4c 46 53 20 64 6f 65 73 20 6e 6f 74  But LFS does not
0b90: 20 65 78 69 73 74 20 69 6e 20 74 68 65 20 6b 65   exist in the ke
0ba0: 72 6e 65 6c 0a 2a 2a 20 69 6e 20 52 65 64 20 48  rnel.** in Red H
0bb0: 61 74 20 36 2e 30 2c 20 73 6f 20 74 68 65 20 63  at 6.0, so the c
0bc0: 6f 64 65 20 77 6f 6e 27 74 20 77 6f 72 6b 2e 20  ode won't work. 
0bd0: 20 48 65 6e 63 65 2c 20 66 6f 72 20 6d 61 78 69   Hence, for maxi
0be0: 6d 75 6d 20 62 69 6e 61 72 79 0a 2a 2a 20 70 6f  mum binary.** po
0bf0: 72 74 61 62 69 6c 69 74 79 20 79 6f 75 20 73 68  rtability you sh
0c00: 6f 75 6c 64 20 6f 6d 69 74 20 4c 46 53 2e 0a 2a  ould omit LFS..*
0c10: 2a 0a 2a 2a 20 54 68 65 20 70 72 65 76 69 6f 75  *.** The previou
0c20: 73 20 70 61 72 61 67 72 61 70 68 20 77 61 73 20  s paragraph was 
0c30: 77 72 69 74 74 65 6e 20 69 6e 20 32 30 30 35 2e  written in 2005.
0c40: 20 20 28 54 68 69 73 20 70 61 72 61 67 72 61 70    (This paragrap
0c50: 68 20 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20  h is written.** 
0c60: 6f 6e 20 32 30 30 38 2d 31 31 2d 32 38 2e 29 20  on 2008-11-28.) 
0c70: 54 68 65 73 65 20 64 61 79 73 2c 20 61 6c 6c 20  These days, all 
0c80: 4c 69 6e 75 78 20 6b 65 72 6e 65 6c 73 20 73 75  Linux kernels su
0c90: 70 70 6f 72 74 20 6c 61 72 67 65 20 66 69 6c 65  pport large file
0ca0: 73 2c 20 73 6f 0a 2a 2a 20 79 6f 75 20 73 68 6f  s, so.** you sho
0cb0: 75 6c 64 20 70 72 6f 62 61 62 6c 79 20 6c 65 61  uld probably lea
0cc0: 76 65 20 4c 46 53 20 65 6e 61 62 6c 65 64 2e 20  ve LFS enabled. 
0cd0: 20 42 75 74 20 73 6f 6d 65 20 65 6d 62 65 64 64   But some embedd
0ce0: 65 64 20 70 6c 61 74 66 6f 72 6d 73 20 6d 69 67  ed platforms mig
0cf0: 68 74 0a 2a 2a 20 6c 61 63 6b 20 4c 46 53 20 69  ht.** lack LFS i
0d00: 6e 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65  n which case the
0d10: 20 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f   SQLITE_DISABLE_
0d20: 4c 46 53 20 6d 61 63 72 6f 20 6d 69 67 68 74 20  LFS macro might 
0d30: 73 74 69 6c 6c 20 62 65 20 75 73 65 66 75 6c 2e  still be useful.
0d40: 0a 2a 2a 0a 2a 2a 20 53 69 6d 69 6c 61 72 20 69  .**.** Similar i
0d50: 73 20 74 72 75 65 20 66 6f 72 20 4d 61 63 20 4f  s true for Mac O
0d60: 53 20 58 2e 20 20 4c 46 53 20 69 73 20 6f 6e 6c  S X.  LFS is onl
0d70: 79 20 73 75 70 70 6f 72 74 65 64 20 6f 6e 20 4d  y supported on M
0d80: 61 63 20 4f 53 20 58 20 39 20 61 6e 64 20 6c 61  ac OS X 9 and la
0d90: 74 65 72 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ter..*/.#ifndef 
0da0: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c  SQLITE_DISABLE_L
0db0: 46 53 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52  FS.# define _LAR
0dc0: 47 45 5f 46 49 4c 45 20 20 20 20 20 20 20 31 0a  GE_FILE       1.
0dd0: 23 20 69 66 6e 64 65 66 20 5f 46 49 4c 45 5f 4f  # ifndef _FILE_O
0de0: 46 46 53 45 54 5f 42 49 54 53 0a 23 20 20 20 64  FFSET_BITS.#   d
0df0: 65 66 69 6e 65 20 5f 46 49 4c 45 5f 4f 46 46 53  efine _FILE_OFFS
0e00: 45 54 5f 42 49 54 53 20 36 34 0a 23 20 65 6e 64  ET_BITS 64.# end
0e10: 69 66 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52  if.# define _LAR
0e20: 47 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 31 0a  GEFILE_SOURCE 1.
0e30: 23 65 6e 64 69 66 0a 0a 2f 2a 20 54 68 65 20 47  #endif../* The G
0e40: 43 43 5f 56 45 52 53 49 4f 4e 20 61 6e 64 20 4d  CC_VERSION and M
0e50: 53 56 43 5f 56 45 52 53 49 4f 4e 20 6d 61 63 72  SVC_VERSION macr
0e60: 6f 73 20 61 72 65 20 75 73 65 64 20 74 6f 0a 2a  os are used to.*
0e70: 2a 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 6c 79 20  * conditionally 
0e80: 69 6e 63 6c 75 64 65 20 6f 70 74 69 6d 69 7a 61  include optimiza
0e90: 74 69 6f 6e 73 20 66 6f 72 20 65 61 63 68 20 6f  tions for each o
0ea0: 66 20 74 68 65 73 65 20 63 6f 6d 70 69 6c 65 72  f these compiler
0eb0: 73 2e 20 20 41 0a 2a 2a 20 76 61 6c 75 65 20 6f  s.  A.** value o
0ec0: 66 20 30 20 6d 65 61 6e 73 20 74 68 61 74 20 63  f 0 means that c
0ed0: 6f 6d 70 69 6c 65 72 20 69 73 20 6e 6f 74 20 62  ompiler is not b
0ee0: 65 69 6e 67 20 75 73 65 64 2e 20 20 54 68 65 0a  eing used.  The.
0ef0: 2a 2a 20 53 51 4c 49 54 45 5f 44 49 53 41 42 4c  ** SQLITE_DISABL
0f00: 45 5f 49 4e 54 52 49 4e 53 49 43 20 6d 61 63 72  E_INTRINSIC macr
0f10: 6f 20 6d 65 61 6e 73 20 64 6f 20 6e 6f 74 20 75  o means do not u
0f20: 73 65 20 61 6e 79 20 63 6f 6d 70 69 6c 65 72 2d  se any compiler-
0f30: 73 70 65 63 69 66 69 63 0a 2a 2a 20 6f 70 74 69  specific.** opti
0f40: 6d 69 7a 61 74 69 6f 6e 73 2c 20 61 6e 64 20 68  mizations, and h
0f50: 65 6e 63 65 20 73 65 74 20 61 6c 6c 20 63 6f 6d  ence set all com
0f60: 70 69 6c 65 72 20 6d 61 63 72 6f 73 20 74 6f 20  piler macros to 
0f70: 30 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 77 61  0.**.** There wa
0f80: 73 20 6f 6e 63 65 20 61 6c 73 6f 20 61 20 43 4c  s once also a CL
0f90: 41 4e 47 5f 56 45 52 53 49 4f 4e 20 6d 61 63 72  ANG_VERSION macr
0fa0: 6f 2e 20 20 48 6f 77 65 76 65 72 2c 20 77 65 20  o.  However, we 
0fb0: 6c 65 61 72 6e 20 74 68 61 74 20 74 68 65 0a 2a  learn that the.*
0fc0: 2a 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72  * version number
0fd0: 73 20 69 6e 20 63 6c 61 6e 67 20 61 72 65 20 66  s in clang are f
0fe0: 6f 72 20 22 6d 61 72 6b 65 74 69 6e 67 22 20 6f  or "marketing" o
0ff0: 6e 6c 79 20 61 6e 64 20 61 72 65 20 69 6e 63 6f  nly and are inco
1000: 6e 73 69 73 74 65 6e 74 0a 2a 2a 20 61 6e 64 20  nsistent.** and 
1010: 75 6e 72 65 6c 69 61 62 6c 65 2e 20 20 46 6f 72  unreliable.  For
1020: 74 75 6e 61 74 65 6c 79 2c 20 61 6c 6c 20 76 65  tunately, all ve
1030: 72 73 69 6f 6e 73 20 6f 66 20 63 6c 61 6e 67 20  rsions of clang 
1040: 61 6c 73 6f 20 72 65 63 6f 67 6e 69 7a 65 20 74  also recognize t
1050: 68 65 0a 2a 2a 20 67 63 63 20 76 65 72 73 69 6f  he.** gcc versio
1060: 6e 20 6e 75 6d 62 65 72 73 20 61 6e 64 20 68 61  n numbers and ha
1070: 76 65 20 72 65 61 73 6f 6e 61 62 6c 65 20 73 65  ve reasonable se
1080: 74 74 69 6e 67 73 20 66 6f 72 20 67 63 63 20 76  ttings for gcc v
1090: 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 73 2c 0a  ersion numbers,.
10a0: 2a 2a 20 73 6f 20 74 68 65 20 47 43 43 5f 56 45  ** so the GCC_VE
10b0: 52 53 49 4f 4e 20 6d 61 63 72 6f 20 77 69 6c 6c  RSION macro will
10c0: 20 62 65 20 73 65 74 20 74 6f 20 61 20 63 6f 72   be set to a cor
10d0: 72 65 63 74 20 6e 6f 6e 2d 7a 65 72 6f 20 76 61  rect non-zero va
10e0: 6c 75 65 20 65 76 65 6e 0a 2a 2a 20 77 68 65 6e  lue even.** when
10f0: 20 63 6f 6d 70 69 6c 69 6e 67 20 77 69 74 68 20   compiling with 
1100: 63 6c 61 6e 67 2e 0a 2a 2f 0a 23 69 66 20 64 65  clang..*/.#if de
1110: 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20  fined(__GNUC__) 
1120: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
1130: 54 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52 49  TE_DISABLE_INTRI
1140: 4e 53 49 43 29 0a 23 20 64 65 66 69 6e 65 20 47  NSIC).# define G
1150: 43 43 5f 56 45 52 53 49 4f 4e 20 28 5f 5f 47 4e  CC_VERSION (__GN
1160: 55 43 5f 5f 2a 31 30 30 30 30 30 30 2b 5f 5f 47  UC__*1000000+__G
1170: 4e 55 43 5f 4d 49 4e 4f 52 5f 5f 2a 31 30 30 30  NUC_MINOR__*1000
1180: 2b 5f 5f 47 4e 55 43 5f 50 41 54 43 48 4c 45 56  +__GNUC_PATCHLEV
1190: 45 4c 5f 5f 29 0a 23 65 6c 73 65 0a 23 20 64 65  EL__).#else.# de
11a0: 66 69 6e 65 20 47 43 43 5f 56 45 52 53 49 4f 4e  fine GCC_VERSION
11b0: 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65   0.#endif.#if de
11c0: 66 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52 29 20  fined(_MSC_VER) 
11d0: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
11e0: 54 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52 49  TE_DISABLE_INTRI
11f0: 4e 53 49 43 29 0a 23 20 64 65 66 69 6e 65 20 4d  NSIC).# define M
1200: 53 56 43 5f 56 45 52 53 49 4f 4e 20 5f 4d 53 43  SVC_VERSION _MSC
1210: 5f 56 45 52 0a 23 65 6c 73 65 0a 23 20 64 65 66  _VER.#else.# def
1220: 69 6e 65 20 4d 53 56 43 5f 56 45 52 53 49 4f 4e  ine MSVC_VERSION
1230: 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4e 65   0.#endif../* Ne
1240: 65 64 65 64 20 66 6f 72 20 76 61 72 69 6f 75 73  eded for various
1250: 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e 2e 2e 20   definitions... 
1260: 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f  */.#if defined(_
1270: 5f 47 4e 55 43 5f 5f 29 20 26 26 20 21 64 65 66  _GNUC__) && !def
1280: 69 6e 65 64 28 5f 47 4e 55 5f 53 4f 55 52 43 45  ined(_GNU_SOURCE
1290: 29 0a 23 20 64 65 66 69 6e 65 20 5f 47 4e 55 5f  ).# define _GNU_
12a0: 53 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a 23  SOURCE.#endif..#
12b0: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 4f 70 65  if defined(__Ope
12c0: 6e 42 53 44 5f 5f 29 20 26 26 20 21 64 65 66 69  nBSD__) && !defi
12d0: 6e 65 64 28 5f 42 53 44 5f 53 4f 55 52 43 45 29  ned(_BSD_SOURCE)
12e0: 0a 23 20 64 65 66 69 6e 65 20 5f 42 53 44 5f 53  .# define _BSD_S
12f0: 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a  OURCE.#endif../*
1300: 0a 2a 2a 20 46 6f 72 20 4d 69 6e 47 57 2c 20 63  .** For MinGW, c
1310: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 77  heck to see if w
1320: 65 20 63 61 6e 20 69 6e 63 6c 75 64 65 20 74 68  e can include th
1330: 65 20 68 65 61 64 65 72 20 66 69 6c 65 20 63 6f  e header file co
1340: 6e 74 61 69 6e 69 6e 67 20 69 74 73 0a 2a 2a 20  ntaining its.** 
1350: 76 65 72 73 69 6f 6e 20 69 6e 66 6f 72 6d 61 74  version informat
1360: 69 6f 6e 2c 20 61 6d 6f 6e 67 20 6f 74 68 65 72  ion, among other
1370: 20 74 68 69 6e 67 73 2e 20 20 4e 6f 72 6d 61 6c   things.  Normal
1380: 6c 79 2c 20 74 68 69 73 20 69 6e 74 65 72 6e 61  ly, this interna
1390: 6c 20 4d 69 6e 47 57 0a 2a 2a 20 68 65 61 64 65  l MinGW.** heade
13a0: 72 20 66 69 6c 65 20 77 6f 75 6c 64 20 5b 6f 6e  r file would [on
13b0: 6c 79 5d 20 62 65 20 69 6e 63 6c 75 64 65 64 20  ly] be included 
13c0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 62 79  automatically by
13d0: 20 6f 74 68 65 72 20 4d 69 6e 47 57 20 68 65 61   other MinGW hea
13e0: 64 65 72 0a 2a 2a 20 66 69 6c 65 73 3b 20 68 6f  der.** files; ho
13f0: 77 65 76 65 72 2c 20 74 68 65 20 63 6f 6e 74 61  wever, the conta
1400: 69 6e 65 64 20 76 65 72 73 69 6f 6e 20 69 6e 66  ined version inf
1410: 6f 72 6d 61 74 69 6f 6e 20 69 73 20 6e 6f 77 20  ormation is now 
1420: 72 65 71 75 69 72 65 64 20 62 79 20 74 68 69 73  required by this
1430: 0a 2a 2a 20 68 65 61 64 65 72 20 66 69 6c 65 20  .** header file 
1440: 74 6f 20 77 6f 72 6b 20 61 72 6f 75 6e 64 20 62  to work around b
1450: 69 6e 61 72 79 20 63 6f 6d 70 61 74 69 62 69 6c  inary compatibil
1460: 69 74 79 20 69 73 73 75 65 73 20 28 73 65 65 20  ity issues (see 
1470: 62 65 6c 6f 77 29 20 61 6e 64 0a 2a 2a 20 74 68  below) and.** th
1480: 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 6b  is is the only k
1490: 6e 6f 77 6e 20 77 61 79 20 74 6f 20 72 65 6c 69  nown way to reli
14a0: 61 62 6c 79 20 6f 62 74 61 69 6e 20 69 74 2e 20  ably obtain it. 
14b0: 20 54 68 69 73 20 65 6e 74 69 72 65 20 23 69 66   This entire #if
14c0: 20 62 6c 6f 63 6b 0a 2a 2a 20 77 6f 75 6c 64 20   block.** would 
14d0: 62 65 20 63 6f 6d 70 6c 65 74 65 6c 79 20 75 6e  be completely un
14e0: 6e 65 63 65 73 73 61 72 79 20 69 66 20 74 68 65  necessary if the
14f0: 72 65 20 77 61 73 20 61 6e 79 20 6f 74 68 65 72  re was any other
1500: 20 77 61 79 20 6f 66 20 64 65 74 65 63 74 69 6e   way of detectin
1510: 67 0a 2a 2a 20 4d 69 6e 47 57 20 76 69 61 20 74  g.** MinGW via t
1520: 68 65 69 72 20 70 72 65 70 72 6f 63 65 73 73 6f  heir preprocesso
1530: 72 20 28 65 2e 67 2e 20 69 66 20 74 68 65 79 20  r (e.g. if they 
1540: 63 75 73 74 6f 6d 69 7a 65 64 20 74 68 65 69 72  customized their
1550: 20 47 43 43 20 74 6f 20 64 65 66 69 6e 65 0a 2a   GCC to define.*
1560: 2a 20 73 6f 6d 65 20 4d 69 6e 47 57 2d 73 70 65  * some MinGW-spe
1570: 63 69 66 69 63 20 6d 61 63 72 6f 73 29 2e 20 20  cific macros).  
1580: 57 68 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 66  When compiling f
1590: 6f 72 20 4d 69 6e 47 57 2c 20 65 69 74 68 65 72  or MinGW, either
15a0: 20 74 68 65 0a 2a 2a 20 5f 48 41 56 45 5f 4d 49   the.** _HAVE_MI
15b0: 4e 47 57 5f 48 20 6f 72 20 5f 48 41 56 45 5f 5f  NGW_H or _HAVE__
15c0: 4d 49 4e 47 57 5f 48 20 28 6e 6f 74 65 20 74 68  MINGW_H (note th
15d0: 65 20 65 78 74 72 61 20 75 6e 64 65 72 73 63 6f  e extra undersco
15e0: 72 65 29 20 6d 61 63 72 6f 20 6d 75 73 74 20 62  re) macro must b
15f0: 65 0a 2a 2a 20 64 65 66 69 6e 65 64 3b 20 6f 74  e.** defined; ot
1600: 68 65 72 77 69 73 65 2c 20 64 65 74 65 63 74 69  herwise, detecti
1610: 6f 6e 20 6f 66 20 63 6f 6e 64 69 74 69 6f 6e 73  on of conditions
1620: 20 73 70 65 63 69 66 69 63 20 74 6f 20 4d 69 6e   specific to Min
1630: 47 57 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 64 69  GW will be.** di
1640: 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66 20 64  sabled..*/.#if d
1650: 65 66 69 6e 65 64 28 5f 48 41 56 45 5f 4d 49 4e  efined(_HAVE_MIN
1660: 47 57 5f 48 29 0a 23 20 69 6e 63 6c 75 64 65 20  GW_H).# include 
1670: 22 6d 69 6e 67 77 2e 68 22 0a 23 65 6c 69 66 20  "mingw.h".#elif 
1680: 64 65 66 69 6e 65 64 28 5f 48 41 56 45 5f 5f 4d  defined(_HAVE__M
1690: 49 4e 47 57 5f 48 29 0a 23 20 69 6e 63 6c 75 64  INGW_H).# includ
16a0: 65 20 22 5f 6d 69 6e 67 77 2e 68 22 0a 23 65 6e  e "_mingw.h".#en
16b0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 4d  dif../*.** For M
16c0: 69 6e 47 57 20 76 65 72 73 69 6f 6e 20 34 2e 78  inGW version 4.x
16d0: 20 28 61 6e 64 20 68 69 67 68 65 72 29 2c 20 63   (and higher), c
16e0: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74  heck to see if t
16f0: 68 65 20 5f 55 53 45 5f 33 32 42 49 54 5f 54 49  he _USE_32BIT_TI
1700: 4d 45 5f 54 0a 2a 2a 20 64 65 66 69 6e 65 20 69  ME_T.** define i
1710: 73 20 72 65 71 75 69 72 65 64 20 74 6f 20 6d 61  s required to ma
1720: 69 6e 74 61 69 6e 20 62 69 6e 61 72 79 20 63 6f  intain binary co
1730: 6d 70 61 74 69 62 69 6c 69 74 79 20 77 69 74 68  mpatibility with
1740: 20 74 68 65 20 4d 53 56 43 20 72 75 6e 74 69 6d   the MSVC runtim
1750: 65 0a 2a 2a 20 6c 69 62 72 61 72 79 20 69 6e 20  e.** library in 
1760: 75 73 65 20 28 65 2e 67 2e 20 66 6f 72 20 57 69  use (e.g. for Wi
1770: 6e 64 6f 77 73 20 58 50 29 2e 0a 2a 2f 0a 23 69  ndows XP)..*/.#i
1780: 66 20 21 64 65 66 69 6e 65 64 28 5f 55 53 45 5f  f !defined(_USE_
1790: 33 32 42 49 54 5f 54 49 4d 45 5f 54 29 20 26 26  32BIT_TIME_T) &&
17a0: 20 21 64 65 66 69 6e 65 64 28 5f 55 53 45 5f 36   !defined(_USE_6
17b0: 34 42 49 54 5f 54 49 4d 45 5f 54 29 20 26 26 20  4BIT_TIME_T) && 
17c0: 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 5f 57  \.    defined(_W
17d0: 49 4e 33 32 29 20 26 26 20 21 64 65 66 69 6e 65  IN32) && !define
17e0: 64 28 5f 57 49 4e 36 34 29 20 26 26 20 5c 0a 20  d(_WIN64) && \. 
17f0: 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 4d 49 4e     defined(__MIN
1800: 47 57 5f 4d 41 4a 4f 52 5f 56 45 52 53 49 4f 4e  GW_MAJOR_VERSION
1810: 29 20 26 26 20 5f 5f 4d 49 4e 47 57 5f 4d 41 4a  ) && __MINGW_MAJ
1820: 4f 52 5f 56 45 52 53 49 4f 4e 20 3e 3d 20 34 20  OR_VERSION >= 4 
1830: 26 26 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64  && \.    defined
1840: 28 5f 5f 4d 53 56 43 52 54 5f 5f 29 0a 23 20 64  (__MSVCRT__).# d
1850: 65 66 69 6e 65 20 5f 55 53 45 5f 33 32 42 49 54  efine _USE_32BIT
1860: 5f 54 49 4d 45 5f 54 0a 23 65 6e 64 69 66 0a 0a  _TIME_T.#endif..
1870: 2f 2a 20 54 68 65 20 70 75 62 6c 69 63 20 53 51  /* The public SQ
1880: 4c 69 74 65 20 69 6e 74 65 72 66 61 63 65 2e 20  Lite interface. 
1890: 20 54 68 65 20 5f 46 49 4c 45 5f 4f 46 46 53 45   The _FILE_OFFSE
18a0: 54 5f 42 49 54 53 20 6d 61 63 72 6f 20 6d 75 73  T_BITS macro mus
18b0: 74 20 61 70 70 65 61 72 0a 2a 2a 20 66 69 72 73  t appear.** firs
18c0: 74 20 69 6e 20 51 4e 58 2e 20 20 41 6c 73 6f 2c  t in QNX.  Also,
18d0: 20 74 68 65 20 5f 55 53 45 5f 33 32 42 49 54 5f   the _USE_32BIT_
18e0: 54 49 4d 45 5f 54 20 6d 61 63 72 6f 20 6d 75 73  TIME_T macro mus
18f0: 74 20 61 70 70 65 61 72 20 66 69 72 73 74 20 66  t appear first f
1900: 6f 72 0a 2a 2a 20 4d 69 6e 47 57 2e 0a 2a 2f 0a  or.** MinGW..*/.
1910: 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65  #include "sqlite
1920: 33 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c  3.h"../*.** Incl
1930: 75 64 65 20 74 68 65 20 63 6f 6e 66 69 67 75 72  ude the configur
1940: 61 74 69 6f 6e 20 68 65 61 64 65 72 20 6f 75 74  ation header out
1950: 70 75 74 20 62 79 20 27 63 6f 6e 66 69 67 75 72  put by 'configur
1960: 65 27 20 69 66 20 77 65 27 72 65 20 75 73 69 6e  e' if we're usin
1970: 67 20 74 68 65 0a 2a 2a 20 61 75 74 6f 63 6f 6e  g the.** autocon
1980: 66 2d 62 61 73 65 64 20 62 75 69 6c 64 0a 2a 2f  f-based build.*/
1990: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 48 41  .#if defined(_HA
19a0: 56 45 5f 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47  VE_SQLITE_CONFIG
19b0: 5f 48 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  _H) && !defined(
19c0: 53 51 4c 49 54 45 43 4f 4e 46 49 47 5f 48 29 0a  SQLITECONFIG_H).
19d0: 23 69 6e 63 6c 75 64 65 20 22 63 6f 6e 66 69 67  #include "config
19e0: 2e 68 22 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .h".#define SQLI
19f0: 54 45 43 4f 4e 46 49 47 5f 48 20 31 0a 23 65 6e  TECONFIG_H 1.#en
1a00: 64 69 66 0a 0a 23 69 6e 63 6c 75 64 65 20 22 73  dif..#include "s
1a10: 71 6c 69 74 65 4c 69 6d 69 74 2e 68 22 0a 0a 2f  qliteLimit.h"../
1a20: 2a 20 44 69 73 61 62 6c 65 20 6e 75 69 73 61 6e  * Disable nuisan
1a30: 63 65 20 77 61 72 6e 69 6e 67 73 20 6f 6e 20 42  ce warnings on B
1a40: 6f 72 6c 61 6e 64 20 63 6f 6d 70 69 6c 65 72 73  orland compilers
1a50: 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28   */.#if defined(
1a60: 5f 5f 42 4f 52 4c 41 4e 44 43 5f 5f 29 0a 23 70  __BORLANDC__).#p
1a70: 72 61 67 6d 61 20 77 61 72 6e 20 2d 72 63 68 20  ragma warn -rch 
1a80: 2f 2a 20 75 6e 72 65 61 63 68 61 62 6c 65 20 63  /* unreachable c
1a90: 6f 64 65 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77  ode */.#pragma w
1aa0: 61 72 6e 20 2d 63 63 63 20 2f 2a 20 43 6f 6e 64  arn -ccc /* Cond
1ab0: 69 74 69 6f 6e 20 69 73 20 61 6c 77 61 79 73 20  ition is always 
1ac0: 74 72 75 65 20 6f 72 20 66 61 6c 73 65 20 2a 2f  true or false */
1ad0: 0a 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 61  .#pragma warn -a
1ae0: 75 73 20 2f 2a 20 41 73 73 69 67 6e 65 64 20 76  us /* Assigned v
1af0: 61 6c 75 65 20 69 73 20 6e 65 76 65 72 20 75 73  alue is never us
1b00: 65 64 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61  ed */.#pragma wa
1b10: 72 6e 20 2d 63 73 75 20 2f 2a 20 43 6f 6d 70 61  rn -csu /* Compa
1b20: 72 69 6e 67 20 73 69 67 6e 65 64 20 61 6e 64 20  ring signed and 
1b30: 75 6e 73 69 67 6e 65 64 20 2a 2f 0a 23 70 72 61  unsigned */.#pra
1b40: 67 6d 61 20 77 61 72 6e 20 2d 73 70 61 20 2f 2a  gma warn -spa /*
1b50: 20 53 75 73 70 69 63 69 6f 75 73 20 70 6f 69 6e   Suspicious poin
1b60: 74 65 72 20 61 72 69 74 68 6d 65 74 69 63 20 2a  ter arithmetic *
1b70: 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  /.#endif../*.** 
1b80: 49 6e 63 6c 75 64 65 20 73 74 61 6e 64 61 72 64  Include standard
1b90: 20 68 65 61 64 65 72 20 66 69 6c 65 73 20 61 73   header files as
1ba0: 20 6e 65 63 65 73 73 61 72 79 0a 2a 2f 0a 23 69   necessary.*/.#i
1bb0: 66 64 65 66 20 48 41 56 45 5f 53 54 44 49 4e 54  fdef HAVE_STDINT
1bc0: 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64  _H.#include <std
1bd0: 69 6e 74 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 69  int.h>.#endif.#i
1be0: 66 64 65 66 20 48 41 56 45 5f 49 4e 54 54 59 50  fdef HAVE_INTTYP
1bf0: 45 53 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c 69  ES_H.#include <i
1c00: 6e 74 74 79 70 65 73 2e 68 3e 0a 23 65 6e 64 69  nttypes.h>.#endi
1c10: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  f../*.** The fol
1c20: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 61 72  lowing macros ar
1c30: 65 20 75 73 65 64 20 74 6f 20 63 61 73 74 20 70  e used to cast p
1c40: 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e 74 65 67  ointers to integ
1c50: 65 72 73 20 61 6e 64 0a 2a 2a 20 69 6e 74 65 67  ers and.** integ
1c60: 65 72 73 20 74 6f 20 70 6f 69 6e 74 65 72 73 2e  ers to pointers.
1c70: 20 20 54 68 65 20 77 61 79 20 79 6f 75 20 64 6f    The way you do
1c80: 20 74 68 69 73 20 76 61 72 69 65 73 20 66 72 6f   this varies fro
1c90: 6d 20 6f 6e 65 20 63 6f 6d 70 69 6c 65 72 0a 2a  m one compiler.*
1ca0: 2a 20 74 6f 20 74 68 65 20 6e 65 78 74 2c 20 73  * to the next, s
1cb0: 6f 20 77 65 20 68 61 76 65 20 64 65 76 65 6c 6f  o we have develo
1cc0: 70 65 64 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  ped the followin
1cd0: 67 20 73 65 74 20 6f 66 20 23 69 66 20 73 74 61  g set of #if sta
1ce0: 74 65 6d 65 6e 74 73 0a 2a 2a 20 74 6f 20 67 65  tements.** to ge
1cf0: 6e 65 72 61 74 65 20 61 70 70 72 6f 70 72 69 61  nerate appropria
1d00: 74 65 20 6d 61 63 72 6f 73 20 66 6f 72 20 61 20  te macros for a 
1d10: 77 69 64 65 20 72 61 6e 67 65 20 6f 66 20 63 6f  wide range of co
1d20: 6d 70 69 6c 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 54  mpilers..**.** T
1d30: 68 65 20 63 6f 72 72 65 63 74 20 22 41 4e 53 49  he correct "ANSI
1d40: 22 20 77 61 79 20 74 6f 20 64 6f 20 74 68 69 73  " way to do this
1d50: 20 69 73 20 74 6f 20 75 73 65 20 74 68 65 20 69   is to use the i
1d60: 6e 74 70 74 72 5f 74 20 74 79 70 65 2e 0a 2a 2a  ntptr_t type..**
1d70: 20 55 6e 66 6f 72 74 75 6e 61 74 65 6c 79 2c 20   Unfortunately, 
1d80: 74 68 61 74 20 74 79 70 65 64 65 66 20 69 73 20  that typedef is 
1d90: 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 20 6f 6e  not available on
1da0: 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73 2c 20   all compilers, 
1db0: 6f 72 0a 2a 2a 20 69 66 20 69 74 20 69 73 20 61  or.** if it is a
1dc0: 76 61 69 6c 61 62 6c 65 2c 20 69 74 20 72 65 71  vailable, it req
1dd0: 75 69 72 65 73 20 61 6e 20 23 69 6e 63 6c 75 64  uires an #includ
1de0: 65 20 6f 66 20 73 70 65 63 69 66 69 63 20 68 65  e of specific he
1df0: 61 64 65 72 73 0a 2a 2a 20 74 68 61 74 20 76 61  aders.** that va
1e00: 72 79 20 66 72 6f 6d 20 6f 6e 65 20 6d 61 63 68  ry from one mach
1e10: 69 6e 65 20 74 6f 20 74 68 65 20 6e 65 78 74 2e  ine to the next.
1e20: 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20 23 33  .**.** Ticket #3
1e30: 38 36 30 3a 20 20 54 68 65 20 6c 6c 76 6d 2d 67  860:  The llvm-g
1e40: 63 63 2d 34 2e 32 20 63 6f 6d 70 69 6c 65 72 20  cc-4.2 compiler 
1e50: 66 72 6f 6d 20 41 70 70 6c 65 20 63 68 6f 6b 65  from Apple choke
1e60: 73 20 6f 6e 0a 2a 2a 20 74 68 65 20 28 28 76 6f  s on.** the ((vo
1e70: 69 64 2a 29 26 28 28 63 68 61 72 2a 29 30 29 5b  id*)&((char*)0)[
1e80: 58 5d 29 20 63 6f 6e 73 74 72 75 63 74 2e 20 20  X]) construct.  
1e90: 42 75 74 20 4d 53 56 43 20 63 68 6f 6b 65 73 20  But MSVC chokes 
1ea0: 6f 6e 20 28 28 76 6f 69 64 2a 29 28 58 29 29 2e  on ((void*)(X)).
1eb0: 0a 2a 2a 20 53 6f 20 77 65 20 68 61 76 65 20 74  .** So we have t
1ec0: 6f 20 64 65 66 69 6e 65 20 74 68 65 20 6d 61 63  o define the mac
1ed0: 72 6f 73 20 69 6e 20 64 69 66 66 65 72 65 6e 74  ros in different
1ee0: 20 77 61 79 73 20 64 65 70 65 6e 64 69 6e 67 20   ways depending 
1ef0: 6f 6e 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 69 6c  on the.** compil
1f00: 65 72 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  er..*/.#if defin
1f10: 65 64 28 5f 5f 50 54 52 44 49 46 46 5f 54 59 50  ed(__PTRDIFF_TYP
1f20: 45 5f 5f 29 20 20 2f 2a 20 54 68 69 73 20 63 61  E__)  /* This ca
1f30: 73 65 20 73 68 6f 75 6c 64 20 77 6f 72 6b 20 66  se should work f
1f40: 6f 72 20 47 43 43 20 2a 2f 0a 23 20 64 65 66 69  or GCC */.# defi
1f50: 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f  ne SQLITE_INT_TO
1f60: 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69 64 2a  _PTR(X)  ((void*
1f70: 29 28 5f 5f 50 54 52 44 49 46 46 5f 54 59 50 45  )(__PTRDIFF_TYPE
1f80: 5f 5f 29 28 58 29 29 0a 23 20 64 65 66 69 6e 65  __)(X)).# define
1f90: 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49   SQLITE_PTR_TO_I
1fa0: 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28 5f 5f  NT(X)  ((int)(__
1fb0: 50 54 52 44 49 46 46 5f 54 59 50 45 5f 5f 29 28  PTRDIFF_TYPE__)(
1fc0: 58 29 29 0a 23 65 6c 69 66 20 21 64 65 66 69 6e  X)).#elif !defin
1fd0: 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20 20 20 20  ed(__GNUC__)    
1fe0: 20 20 20 2f 2a 20 57 6f 72 6b 73 20 66 6f 72 20     /* Works for 
1ff0: 63 6f 6d 70 69 6c 65 72 73 20 6f 74 68 65 72 20  compilers other 
2000: 74 68 61 6e 20 4c 4c 56 4d 20 2a 2f 0a 23 20 64  than LLVM */.# d
2010: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54  efine SQLITE_INT
2020: 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f  _TO_PTR(X)  ((vo
2030: 69 64 2a 29 26 28 28 63 68 61 72 2a 29 30 29 5b  id*)&((char*)0)[
2040: 58 5d 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  X]).# define SQL
2050: 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58  ITE_PTR_TO_INT(X
2060: 29 20 20 28 28 69 6e 74 29 28 28 28 63 68 61 72  )  ((int)(((char
2070: 2a 29 58 29 2d 28 63 68 61 72 2a 29 30 29 29 0a  *)X)-(char*)0)).
2080: 23 65 6c 69 66 20 64 65 66 69 6e 65 64 28 48 41  #elif defined(HA
2090: 56 45 5f 53 54 44 49 4e 54 5f 48 29 20 20 20 2f  VE_STDINT_H)   /
20a0: 2a 20 55 73 65 20 74 68 69 73 20 63 61 73 65 20  * Use this case 
20b0: 69 66 20 77 65 20 68 61 76 65 20 41 4e 53 49 20  if we have ANSI 
20c0: 68 65 61 64 65 72 73 20 2a 2f 0a 23 20 64 65 66  headers */.# def
20d0: 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  ine SQLITE_INT_T
20e0: 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69 64  O_PTR(X)  ((void
20f0: 2a 29 28 69 6e 74 70 74 72 5f 74 29 28 58 29 29  *)(intptr_t)(X))
2100: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
2110: 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20  _PTR_TO_INT(X)  
2120: 28 28 69 6e 74 29 28 69 6e 74 70 74 72 5f 74 29  ((int)(intptr_t)
2130: 28 58 29 29 0a 23 65 6c 73 65 20 20 20 20 20 20  (X)).#else      
2140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2150: 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 73      /* Generates
2160: 20 61 20 77 61 72 6e 69 6e 67 20 2d 20 62 75 74   a warning - but
2170: 20 69 74 20 61 6c 77 61 79 73 20 77 6f 72 6b 73   it always works
2180: 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c   */.# define SQL
2190: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58  ITE_INT_TO_PTR(X
21a0: 29 20 20 28 28 76 6f 69 64 2a 29 28 58 29 29 0a  )  ((void*)(X)).
21b0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
21c0: 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28  PTR_TO_INT(X)  (
21d0: 28 69 6e 74 29 28 58 29 29 0a 23 65 6e 64 69 66  (int)(X)).#endif
21e0: 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63 72 6f 20  ../*.** A macro 
21f0: 74 6f 20 68 69 6e 74 20 74 6f 20 74 68 65 20 63  to hint to the c
2200: 6f 6d 70 69 6c 65 72 20 74 68 61 74 20 61 20 66  ompiler that a f
2210: 75 6e 63 74 69 6f 6e 20 73 68 6f 75 6c 64 20 6e  unction should n
2220: 6f 74 20 62 65 0a 2a 2a 20 69 6e 6c 69 6e 65 64  ot be.** inlined
2230: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
2240: 28 5f 5f 47 4e 55 43 5f 5f 29 0a 23 20 20 64 65  (__GNUC__).#  de
2250: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e  fine SQLITE_NOIN
2260: 4c 49 4e 45 20 20 5f 5f 61 74 74 72 69 62 75 74  LINE  __attribut
2270: 65 5f 5f 28 28 6e 6f 69 6e 6c 69 6e 65 29 29 0a  e__((noinline)).
2280: 23 65 6c 69 66 20 64 65 66 69 6e 65 64 28 5f 4d  #elif defined(_M
2290: 53 43 5f 56 45 52 29 20 26 26 20 5f 4d 53 43 5f  SC_VER) && _MSC_
22a0: 56 45 52 3e 3d 31 33 31 30 0a 23 20 20 64 65 66  VER>=1310.#  def
22b0: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c  ine SQLITE_NOINL
22c0: 49 4e 45 20 20 5f 5f 64 65 63 6c 73 70 65 63 28  INE  __declspec(
22d0: 6e 6f 69 6e 6c 69 6e 65 29 0a 23 65 6c 73 65 0a  noinline).#else.
22e0: 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  #  define SQLITE
22f0: 5f 4e 4f 49 4e 4c 49 4e 45 0a 23 65 6e 64 69 66  _NOINLINE.#endif
2300: 0a 0a 2f 2a 0a 2a 2a 20 4d 61 6b 65 20 73 75 72  ../*.** Make sur
2310: 65 20 74 68 61 74 20 74 68 65 20 63 6f 6d 70 69  e that the compi
2320: 6c 65 72 20 69 6e 74 72 69 6e 73 69 63 73 20 77  ler intrinsics w
2330: 65 20 64 65 73 69 72 65 20 61 72 65 20 65 6e 61  e desire are ena
2340: 62 6c 65 64 20 77 68 65 6e 0a 2a 2a 20 63 6f 6d  bled when.** com
2350: 70 69 6c 69 6e 67 20 77 69 74 68 20 61 6e 20 61  piling with an a
2360: 70 70 72 6f 70 72 69 61 74 65 20 76 65 72 73 69  ppropriate versi
2370: 6f 6e 20 6f 66 20 4d 53 56 43 20 75 6e 6c 65 73  on of MSVC unles
2380: 73 20 70 72 65 76 65 6e 74 65 64 20 62 79 0a 2a  s prevented by.*
2390: 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 44 49 53  * the SQLITE_DIS
23a0: 41 42 4c 45 5f 49 4e 54 52 49 4e 53 49 43 20 64  ABLE_INTRINSIC d
23b0: 65 66 69 6e 65 2e 0a 2a 2f 0a 23 69 66 20 21 64  efine..*/.#if !d
23c0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 49  efined(SQLITE_DI
23d0: 53 41 42 4c 45 5f 49 4e 54 52 49 4e 53 49 43 29  SABLE_INTRINSIC)
23e0: 0a 23 20 20 69 66 20 64 65 66 69 6e 65 64 28 5f  .#  if defined(_
23f0: 4d 53 43 5f 56 45 52 29 20 26 26 20 5f 4d 53 43  MSC_VER) && _MSC
2400: 5f 56 45 52 3e 3d 31 34 30 30 0a 23 20 20 20 20  _VER>=1400.#    
2410: 69 66 20 21 64 65 66 69 6e 65 64 28 5f 57 49 4e  if !defined(_WIN
2420: 33 32 5f 57 43 45 29 0a 23 20 20 20 20 20 20 69  32_WCE).#      i
2430: 6e 63 6c 75 64 65 20 3c 69 6e 74 72 69 6e 2e 68  nclude <intrin.h
2440: 3e 0a 23 20 20 20 20 20 20 70 72 61 67 6d 61 20  >.#      pragma 
2450: 69 6e 74 72 69 6e 73 69 63 28 5f 62 79 74 65 73  intrinsic(_bytes
2460: 77 61 70 5f 75 73 68 6f 72 74 29 0a 23 20 20 20  wap_ushort).#   
2470: 20 20 20 70 72 61 67 6d 61 20 69 6e 74 72 69 6e     pragma intrin
2480: 73 69 63 28 5f 62 79 74 65 73 77 61 70 5f 75 6c  sic(_byteswap_ul
2490: 6f 6e 67 29 0a 23 20 20 20 20 20 20 70 72 61 67  ong).#      prag
24a0: 6d 61 20 69 6e 74 72 69 6e 73 69 63 28 5f 62 79  ma intrinsic(_by
24b0: 74 65 73 77 61 70 5f 75 69 6e 74 36 34 29 0a 23  teswap_uint64).#
24c0: 20 20 20 20 20 20 70 72 61 67 6d 61 20 69 6e 74        pragma int
24d0: 72 69 6e 73 69 63 28 5f 52 65 61 64 57 72 69 74  rinsic(_ReadWrit
24e0: 65 42 61 72 72 69 65 72 29 0a 23 20 20 20 20 65  eBarrier).#    e
24f0: 6c 73 65 0a 23 20 20 20 20 20 20 69 6e 63 6c 75  lse.#      inclu
2500: 64 65 20 3c 63 6d 6e 69 6e 74 72 69 6e 2e 68 3e  de <cmnintrin.h>
2510: 0a 23 20 20 20 20 65 6e 64 69 66 0a 23 20 20 65  .#    endif.#  e
2520: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ndif.#endif../*.
2530: 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 54 48  ** The SQLITE_TH
2540: 52 45 41 44 53 41 46 45 20 6d 61 63 72 6f 20 6d  READSAFE macro m
2550: 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20 61  ust be defined a
2560: 73 20 30 2c 20 31 2c 20 6f 72 20 32 2e 0a 2a 2a  s 0, 1, or 2..**
2570: 20 30 20 6d 65 61 6e 73 20 6d 75 74 65 78 65 73   0 means mutexes
2580: 20 61 72 65 20 70 65 72 6d 61 6e 65 6e 74 6c 79   are permanently
2590: 20 64 69 73 61 62 6c 65 20 61 6e 64 20 74 68 65   disable and the
25a0: 20 6c 69 62 72 61 72 79 20 69 73 20 6e 65 76 65   library is neve
25b0: 72 0a 2a 2a 20 74 68 72 65 61 64 73 61 66 65 2e  r.** threadsafe.
25c0: 20 20 31 20 6d 65 61 6e 73 20 74 68 65 20 6c 69    1 means the li
25d0: 62 72 61 72 79 20 69 73 20 73 65 72 69 61 6c 69  brary is seriali
25e0: 7a 65 64 20 77 68 69 63 68 20 69 73 20 74 68 65  zed which is the
25f0: 20 68 69 67 68 65 73 74 0a 2a 2a 20 6c 65 76 65   highest.** leve
2600: 6c 20 6f 66 20 74 68 72 65 61 64 73 61 66 65 74  l of threadsafet
2610: 79 2e 20 20 32 20 6d 65 61 6e 73 20 74 68 65 20  y.  2 means the 
2620: 6c 69 62 72 61 72 79 20 69 73 20 6d 75 6c 74 69  library is multi
2630: 74 68 72 65 61 64 65 64 20 2d 20 6d 75 6c 74 69  threaded - multi
2640: 70 6c 65 0a 2a 2a 20 74 68 72 65 61 64 73 20 63  ple.** threads c
2650: 61 6e 20 75 73 65 20 53 51 4c 69 74 65 20 61 73  an use SQLite as
2660: 20 6c 6f 6e 67 20 61 73 20 6e 6f 20 74 77 6f 20   long as no two 
2670: 74 68 72 65 61 64 73 20 74 72 79 20 74 6f 20 75  threads try to u
2680: 73 65 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 64  se the same.** d
2690: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
26a0: 6f 6e 20 61 74 20 74 68 65 20 73 61 6d 65 20 74  on at the same t
26b0: 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 4f 6c 64 65 72  ime..**.** Older
26c0: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
26d0: 69 74 65 20 75 73 65 64 20 61 6e 20 6f 70 74 69  ite used an opti
26e0: 6f 6e 61 6c 20 54 48 52 45 41 44 53 41 46 45 20  onal THREADSAFE 
26f0: 6d 61 63 72 6f 2e 0a 2a 2a 20 57 65 20 73 75 70  macro..** We sup
2700: 70 6f 72 74 20 74 68 61 74 20 66 6f 72 20 6c 65  port that for le
2710: 67 61 63 79 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 65  gacy..**.** To e
2720: 6e 73 75 72 65 20 74 68 61 74 20 74 68 65 20 63  nsure that the c
2730: 6f 72 72 65 63 74 20 76 61 6c 75 65 20 6f 66 20  orrect value of 
2740: 22 54 48 52 45 41 44 53 41 46 45 22 20 69 73 20  "THREADSAFE" is 
2750: 72 65 70 6f 72 74 65 64 20 77 68 65 6e 20 71 75  reported when qu
2760: 65 72 79 69 6e 67 0a 2a 2a 20 66 6f 72 20 63 6f  erying.** for co
2770: 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
2780: 6e 73 20 61 74 20 72 75 6e 74 69 6d 65 20 28 65  ns at runtime (e
2790: 2e 67 2e 20 22 50 52 41 47 4d 41 20 63 6f 6d 70  .g. "PRAGMA comp
27a0: 69 6c 65 5f 6f 70 74 69 6f 6e 73 22 29 2c 20 74  ile_options"), t
27b0: 68 69 73 0a 2a 2a 20 6c 6f 67 69 63 20 69 73 20  his.** logic is 
27c0: 70 61 72 74 69 61 6c 6c 79 20 72 65 70 6c 69 63  partially replic
27d0: 61 74 65 64 20 69 6e 20 63 74 69 6d 65 2e 63 2e  ated in ctime.c.
27e0: 20 49 66 20 69 74 20 69 73 20 75 70 64 61 74 65   If it is update
27f0: 64 20 68 65 72 65 2c 20 69 74 20 73 68 6f 75 6c  d here, it shoul
2800: 64 0a 2a 2a 20 61 6c 73 6f 20 62 65 20 75 70 64  d.** also be upd
2810: 61 74 65 64 20 74 68 65 72 65 2e 0a 2a 2f 0a 23  ated there..*/.#
2820: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
2830: 54 45 5f 54 48 52 45 41 44 53 41 46 45 29 0a 23  TE_THREADSAFE).#
2840: 20 69 66 20 64 65 66 69 6e 65 64 28 54 48 52 45   if defined(THRE
2850: 41 44 53 41 46 45 29 0a 23 20 20 20 64 65 66 69  ADSAFE).#   defi
2860: 6e 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44  ne SQLITE_THREAD
2870: 53 41 46 45 20 54 48 52 45 41 44 53 41 46 45 0a  SAFE THREADSAFE.
2880: 23 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e  # else.#   defin
2890: 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53  e SQLITE_THREADS
28a0: 41 46 45 20 31 20 2f 2a 20 49 4d 50 3a 20 52 2d  AFE 1 /* IMP: R-
28b0: 30 37 32 37 32 2d 32 32 33 30 39 20 2a 2f 0a 23  07272-22309 */.#
28c0: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f   endif.#endif../
28d0: 2a 0a 2a 2a 20 50 6f 77 65 72 73 61 66 65 20 6f  *.** Powersafe o
28e0: 76 65 72 77 72 69 74 65 20 69 73 20 6f 6e 20 62  verwrite is on b
28f0: 79 20 64 65 66 61 75 6c 74 2e 20 20 42 75 74 20  y default.  But 
2900: 63 61 6e 20 62 65 20 74 75 72 6e 65 64 20 6f 66  can be turned of
2910: 66 20 75 73 69 6e 67 0a 2a 2a 20 74 68 65 20 2d  f using.** the -
2920: 44 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41 46  DSQLITE_POWERSAF
2930: 45 5f 4f 56 45 52 57 52 49 54 45 3d 30 20 63 6f  E_OVERWRITE=0 co
2940: 6d 6d 61 6e 64 2d 6c 69 6e 65 20 6f 70 74 69 6f  mmand-line optio
2950: 6e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  n..*/.#ifndef SQ
2960: 4c 49 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f  LITE_POWERSAFE_O
2970: 56 45 52 57 52 49 54 45 0a 23 20 64 65 66 69 6e  VERWRITE.# defin
2980: 65 20 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41  e SQLITE_POWERSA
2990: 46 45 5f 4f 56 45 52 57 52 49 54 45 20 31 0a 23  FE_OVERWRITE 1.#
29a0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 56 49  endif../*.** EVI
29b0: 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 32 35 37 31  DENCE-OF: R-2571
29c0: 35 2d 33 37 30 37 32 20 4d 65 6d 6f 72 79 20 61  5-37072 Memory a
29d0: 6c 6c 6f 63 61 74 69 6f 6e 20 73 74 61 74 69 73  llocation statis
29e0: 74 69 63 73 20 61 72 65 20 65 6e 61 62 6c 65 64  tics are enabled
29f0: 20 62 79 0a 2a 2a 20 64 65 66 61 75 6c 74 20 75   by.** default u
2a00: 6e 6c 65 73 73 20 53 51 4c 69 74 65 20 69 73 20  nless SQLite is 
2a10: 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 53 51  compiled with SQ
2a20: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d  LITE_DEFAULT_MEM
2a30: 53 54 41 54 55 53 3d 30 20 69 6e 0a 2a 2a 20 77  STATUS=0 in.** w
2a40: 68 69 63 68 20 63 61 73 65 20 6d 65 6d 6f 72 79  hich case memory
2a50: 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 74 61 74   allocation stat
2a60: 69 73 74 69 63 73 20 61 72 65 20 64 69 73 61 62  istics are disab
2a70: 6c 65 64 20 62 79 20 64 65 66 61 75 6c 74 2e 0a  led by default..
2a80: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
2a90: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
2aa0: 45 4d 53 54 41 54 55 53 29 0a 23 20 64 65 66 69  EMSTATUS).# defi
2ab0: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
2ac0: 54 5f 4d 45 4d 53 54 41 54 55 53 20 31 0a 23 65  T_MEMSTATUS 1.#e
2ad0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 78 61 63  ndif../*.** Exac
2ae0: 74 6c 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 66  tly one of the f
2af0: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20  ollowing macros 
2b00: 6d 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20  must be defined 
2b10: 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 73  in order to.** s
2b20: 70 65 63 69 66 79 20 77 68 69 63 68 20 6d 65 6d  pecify which mem
2b30: 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73  ory allocation s
2b40: 75 62 73 79 73 74 65 6d 20 74 6f 20 75 73 65 2e  ubsystem to use.
2b50: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54  .**.**     SQLIT
2b60: 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20  E_SYSTEM_MALLOC 
2b70: 20 20 20 20 20 20 20 20 20 2f 2f 20 55 73 65 20           // Use 
2b80: 6e 6f 72 6d 61 6c 20 73 79 73 74 65 6d 20 6d 61  normal system ma
2b90: 6c 6c 6f 63 28 29 0a 2a 2a 20 20 20 20 20 53 51  lloc().**     SQ
2ba0: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
2bb0: 43 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55  C           // U
2bc0: 73 65 20 57 69 6e 33 32 20 6e 61 74 69 76 65 20  se Win32 native 
2bd0: 68 65 61 70 20 41 50 49 0a 2a 2a 20 20 20 20 20  heap API.**     
2be0: 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c  SQLITE_ZERO_MALL
2bf0: 4f 43 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  OC            //
2c00: 20 55 73 65 20 61 20 73 74 75 62 20 61 6c 6c 6f   Use a stub allo
2c10: 63 61 74 6f 72 20 74 68 61 74 20 61 6c 77 61 79  cator that alway
2c20: 73 20 66 61 69 6c 73 0a 2a 2a 20 20 20 20 20 53  s fails.**     S
2c30: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 20  QLITE_MEMDEBUG  
2c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2c50: 44 65 62 75 67 67 69 6e 67 20 76 65 72 73 69 6f  Debugging versio
2c60: 6e 20 6f 66 20 73 79 73 74 65 6d 20 6d 61 6c 6c  n of system mall
2c70: 6f 63 28 29 0a 2a 2a 0a 2a 2a 20 4f 6e 20 57 69  oc().**.** On Wi
2c80: 6e 64 6f 77 73 2c 20 69 66 20 74 68 65 20 53 51  ndows, if the SQ
2c90: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
2ca0: 43 5f 56 41 4c 49 44 41 54 45 20 6d 61 63 72 6f  C_VALIDATE macro
2cb0: 20 69 73 20 64 65 66 69 6e 65 64 20 61 6e 64 20   is defined and 
2cc0: 74 68 65 0a 2a 2a 20 61 73 73 65 72 74 28 29 20  the.** assert() 
2cd0: 6d 61 63 72 6f 20 69 73 20 65 6e 61 62 6c 65 64  macro is enabled
2ce0: 2c 20 65 61 63 68 20 63 61 6c 6c 20 69 6e 74 6f  , each call into
2cf0: 20 74 68 65 20 57 69 6e 33 32 20 6e 61 74 69 76   the Win32 nativ
2d00: 65 20 68 65 61 70 20 73 75 62 73 79 73 74 65 6d  e heap subsystem
2d10: 0a 2a 2a 20 77 69 6c 6c 20 63 61 75 73 65 20 48  .** will cause H
2d20: 65 61 70 56 61 6c 69 64 61 74 65 20 74 6f 20 62  eapValidate to b
2d30: 65 20 63 61 6c 6c 65 64 2e 20 20 49 66 20 68 65  e called.  If he
2d40: 61 70 20 76 61 6c 69 64 61 74 69 6f 6e 20 73 68  ap validation sh
2d50: 6f 75 6c 64 20 66 61 69 6c 2c 20 61 6e 0a 2a 2a  ould fail, an.**
2d60: 20 61 73 73 65 72 74 69 6f 6e 20 77 69 6c 6c 20   assertion will 
2d70: 62 65 20 74 72 69 67 67 65 72 65 64 2e 0a 2a 2a  be triggered..**
2d80: 0a 2a 2a 20 49 66 20 6e 6f 6e 65 20 6f 66 20 74  .** If none of t
2d90: 68 65 20 61 62 6f 76 65 20 61 72 65 20 64 65 66  he above are def
2da0: 69 6e 65 64 2c 20 74 68 65 6e 20 73 65 74 20 53  ined, then set S
2db0: 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c  QLITE_SYSTEM_MAL
2dc0: 4c 4f 43 20 61 73 0a 2a 2a 20 74 68 65 20 64 65  LOC as.** the de
2dd0: 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66 20 64 65  fault..*/.#if de
2de0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 53 59 53  fined(SQLITE_SYS
2df0: 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20  TEM_MALLOC) \.  
2e00: 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  + defined(SQLITE
2e10: 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c  _WIN32_MALLOC) \
2e20: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
2e30: 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29  ITE_ZERO_MALLOC)
2e40: 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53   \.  + defined(S
2e50: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 3e  QLITE_MEMDEBUG)>
2e60: 31 0a 23 20 65 72 72 6f 72 20 22 54 77 6f 20 6f  1.# error "Two o
2e70: 72 20 6d 6f 72 65 20 6f 66 20 74 68 65 20 66 6f  r more of the fo
2e80: 6c 6c 6f 77 69 6e 67 20 63 6f 6d 70 69 6c 65 2d  llowing compile-
2e90: 74 69 6d 65 20 63 6f 6e 66 69 67 75 72 61 74 69  time configurati
2ea0: 6f 6e 20 6f 70 74 69 6f 6e 73 5c 0a 20 61 72 65  on options\. are
2eb0: 20 64 65 66 69 6e 65 64 20 62 75 74 20 61 74 20   defined but at 
2ec0: 6d 6f 73 74 20 6f 6e 65 20 69 73 20 61 6c 6c 6f  most one is allo
2ed0: 77 65 64 3a 5c 0a 20 53 51 4c 49 54 45 5f 53 59  wed:\. SQLITE_SY
2ee0: 53 54 45 4d 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c  STEM_MALLOC, SQL
2ef0: 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43  ITE_WIN32_MALLOC
2f00: 2c 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  , SQLITE_MEMDEBU
2f10: 47 2c 5c 0a 20 53 51 4c 49 54 45 5f 5a 45 52 4f  G,\. SQLITE_ZERO
2f20: 5f 4d 41 4c 4c 4f 43 22 0a 23 65 6e 64 69 66 0a  _MALLOC".#endif.
2f30: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
2f40: 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43  TE_SYSTEM_MALLOC
2f50: 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28  ) \.  + defined(
2f60: 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c  SQLITE_WIN32_MAL
2f70: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
2f80: 65 64 28 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d  ed(SQLITE_ZERO_M
2f90: 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66  ALLOC) \.  + def
2fa0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44  ined(SQLITE_MEMD
2fb0: 45 42 55 47 29 3d 3d 30 0a 23 20 64 65 66 69 6e  EBUG)==0.# defin
2fc0: 65 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f  e SQLITE_SYSTEM_
2fd0: 4d 41 4c 4c 4f 43 20 31 0a 23 65 6e 64 69 66 0a  MALLOC 1.#endif.
2fe0: 0a 2f 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45  ./*.** If SQLITE
2ff0: 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d  _MALLOC_SOFT_LIM
3000: 49 54 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  IT is not zero, 
3010: 74 68 65 6e 20 74 72 79 20 74 6f 20 6b 65 65 70  then try to keep
3020: 20 74 68 65 0a 2a 2a 20 73 69 7a 65 73 20 6f 66   the.** sizes of
3030: 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
3040: 6f 6e 73 20 62 65 6c 6f 77 20 74 68 69 73 20 76  ons below this v
3050: 61 6c 75 65 20 77 68 65 72 65 20 70 6f 73 73 69  alue where possi
3060: 62 6c 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66  ble..*/.#if !def
3070: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 41 4c 4c  ined(SQLITE_MALL
3080: 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54 29 0a 23  OC_SOFT_LIMIT).#
3090: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
30a0: 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54  ALLOC_SOFT_LIMIT
30b0: 20 31 30 32 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a   1024.#endif../*
30c0: 0a 2a 2a 20 57 65 20 6e 65 65 64 20 74 6f 20 64  .** We need to d
30d0: 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55  efine _XOPEN_SOU
30e0: 52 43 45 20 61 73 20 66 6f 6c 6c 6f 77 73 20 69  RCE as follows i
30f0: 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e 61 62 6c  n order to enabl
3100: 65 0a 2a 2a 20 72 65 63 75 72 73 69 76 65 20 6d  e.** recursive m
3110: 75 74 65 78 65 73 20 6f 6e 20 6d 6f 73 74 20 55  utexes on most U
3120: 6e 69 78 20 73 79 73 74 65 6d 73 20 61 6e 64 20  nix systems and 
3130: 66 63 68 6d 6f 64 28 29 20 6f 6e 20 4f 70 65 6e  fchmod() on Open
3140: 42 53 44 2e 0a 2a 2a 20 42 75 74 20 5f 58 4f 50  BSD..** But _XOP
3150: 45 4e 5f 53 4f 55 52 43 45 20 64 65 66 69 6e 65  EN_SOURCE define
3160: 20 63 61 75 73 65 73 20 70 72 6f 62 6c 65 6d 73   causes problems
3170: 20 66 6f 72 20 4d 61 63 20 4f 53 20 58 2c 20 73   for Mac OS X, s
3180: 6f 20 6f 6d 69 74 0a 2a 2a 20 69 74 2e 0a 2a 2f  o omit.** it..*/
3190: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f 58  .#if !defined(_X
31a0: 4f 50 45 4e 5f 53 4f 55 52 43 45 29 20 26 26 20  OPEN_SOURCE) && 
31b0: 21 64 65 66 69 6e 65 64 28 5f 5f 44 41 52 57 49  !defined(__DARWI
31c0: 4e 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64  N__) && !defined
31d0: 28 5f 5f 41 50 50 4c 45 5f 5f 29 0a 23 20 20 64  (__APPLE__).#  d
31e0: 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55  efine _XOPEN_SOU
31f0: 52 43 45 20 36 30 30 0a 23 65 6e 64 69 66 0a 0a  RCE 600.#endif..
3200: 2f 2a 0a 2a 2a 20 4e 44 45 42 55 47 20 61 6e 64  /*.** NDEBUG and
3210: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 61 72   SQLITE_DEBUG ar
3220: 65 20 6f 70 70 6f 73 69 74 65 73 2e 20 20 49 74  e opposites.  It
3230: 20 73 68 6f 75 6c 64 20 61 6c 77 61 79 73 20 62   should always b
3240: 65 20 74 72 75 65 20 74 68 61 74 0a 2a 2a 20 64  e true that.** d
3250: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 3d 3d  efined(NDEBUG)==
3260: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
3270: 44 45 42 55 47 29 2e 20 20 49 66 20 74 68 69 73  DEBUG).  If this
3280: 20 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c   is not currentl
3290: 79 20 74 72 75 65 2c 0a 2a 2a 20 6d 61 6b 65 20  y true,.** make 
32a0: 69 74 20 74 72 75 65 20 62 79 20 64 65 66 69 6e  it true by defin
32b0: 69 6e 67 20 6f 72 20 75 6e 64 65 66 69 6e 69 6e  ing or undefinin
32c0: 67 20 4e 44 45 42 55 47 2e 0a 2a 2a 0a 2a 2a 20  g NDEBUG..**.** 
32d0: 53 65 74 74 69 6e 67 20 4e 44 45 42 55 47 20 6d  Setting NDEBUG m
32e0: 61 6b 65 73 20 74 68 65 20 63 6f 64 65 20 73 6d  akes the code sm
32f0: 61 6c 6c 65 72 20 61 6e 64 20 66 61 73 74 65 72  aller and faster
3300: 20 62 79 20 64 69 73 61 62 6c 69 6e 67 20 74 68   by disabling th
3310: 65 0a 2a 2a 20 61 73 73 65 72 74 28 29 20 73 74  e.** assert() st
3320: 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20  atements in the 
3330: 63 6f 64 65 2e 20 20 53 6f 20 77 65 20 77 61 6e  code.  So we wan
3340: 74 20 74 68 65 20 64 65 66 61 75 6c 74 20 61 63  t the default ac
3350: 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 66 6f  tion.** to be fo
3360: 72 20 4e 44 45 42 55 47 20 74 6f 20 62 65 20 73  r NDEBUG to be s
3370: 65 74 20 61 6e 64 20 4e 44 45 42 55 47 20 74 6f  et and NDEBUG to
3380: 20 62 65 20 75 6e 64 65 66 69 6e 65 64 20 6f 6e   be undefined on
3390: 6c 79 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42  ly if SQLITE_DEB
33a0: 55 47 0a 2a 2a 20 69 73 20 73 65 74 2e 20 20 54  UG.** is set.  T
33b0: 68 75 73 20 4e 44 45 42 55 47 20 62 65 63 6f 6d  hus NDEBUG becom
33c0: 65 73 20 61 6e 20 6f 70 74 2d 69 6e 20 72 61 74  es an opt-in rat
33d0: 68 65 72 20 74 68 61 6e 20 61 6e 20 6f 70 74 2d  her than an opt-
33e0: 6f 75 74 0a 2a 2a 20 66 65 61 74 75 72 65 2e 0a  out.** feature..
33f0: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
3400: 4e 44 45 42 55 47 29 20 26 26 20 21 64 65 66 69  NDEBUG) && !defi
3410: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
3420: 29 0a 23 20 64 65 66 69 6e 65 20 4e 44 45 42 55  ).# define NDEBU
3430: 47 20 31 0a 23 65 6e 64 69 66 0a 23 69 66 20 64  G 1.#endif.#if d
3440: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20 26  efined(NDEBUG) &
3450: 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  & defined(SQLITE
3460: 5f 44 45 42 55 47 29 0a 23 20 75 6e 64 65 66 20  _DEBUG).# undef 
3470: 4e 44 45 42 55 47 0a 23 65 6e 64 69 66 0a 0a 2f  NDEBUG.#endif../
3480: 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47 5f 43  * SQLITE_DEBUG_C
3490: 4f 4c 55 4d 4e 43 41 43 48 45 20 69 73 20 73 79  OLUMNCACHE is sy
34a0: 6e 6f 6d 6f 75 73 20 77 69 74 68 20 53 51 4c 49  nomous with SQLI
34b0: 54 45 5f 44 45 42 55 47 2e 20 20 54 68 65 20 0a  TE_DEBUG.  The .
34c0: 2a 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47 5f  ** SQLITE_DEBUG_
34d0: 43 4f 4c 55 4d 4e 43 41 43 48 45 20 73 79 6d 62  COLUMNCACHE symb
34e0: 6f 6c 20 6f 6e 6c 79 20 65 78 69 73 74 73 20 74  ol only exists t
34f0: 6f 20 70 72 6f 76 69 64 65 20 61 20 63 6f 6e 76  o provide a conv
3500: 65 6e 69 65 6e 74 0a 2a 2a 20 77 61 79 20 74 6f  enient.** way to
3510: 20 73 65 61 72 63 68 20 66 6f 72 20 61 6c 6c 20   search for all 
3520: 63 6f 64 65 20 74 68 61 74 20 64 65 61 6c 73 20  code that deals 
3530: 77 69 74 68 20 76 65 72 69 66 79 69 6e 67 20 63  with verifying c
3540: 6f 72 72 65 63 74 20 62 65 68 61 76 69 6f 72 0a  orrect behavior.
3550: 2a 2a 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ** of the column
3560: 20 63 61 63 68 65 2e 0a 2a 2f 0a 23 69 66 64 65   cache..*/.#ifde
3570: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23  f SQLITE_DEBUG.#
3580: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44   define SQLITE_D
3590: 45 42 55 47 5f 43 4f 4c 55 4d 4e 43 41 43 48 45  EBUG_COLUMNCACHE
35a0: 20 31 0a 23 65 6c 73 65 0a 23 20 75 6e 64 65 66   1.#else.# undef
35b0: 20 53 51 4c 49 54 5f 44 45 42 55 47 5f 43 4f 4c   SQLIT_DEBUG_COL
35c0: 55 4d 4e 43 41 43 48 45 0a 23 65 6e 64 69 66 0a  UMNCACHE.#endif.
35d0: 0a 2f 2a 0a 2a 2a 20 45 6e 61 62 6c 65 20 53 51  ./*.** Enable SQ
35e0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c  LITE_ENABLE_EXPL
35f0: 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69 66 20  AIN_COMMENTS if 
3600: 53 51 4c 49 54 45 5f 44 45 42 55 47 20 69 73 20  SQLITE_DEBUG is 
3610: 74 75 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69  turned on..*/.#i
3620: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
3630: 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e  E_ENABLE_EXPLAIN
3640: 5f 43 4f 4d 4d 45 4e 54 53 29 20 26 26 20 64 65  _COMMENTS) && de
3650: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
3660: 55 47 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  UG).# define SQL
3670: 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41  ITE_ENABLE_EXPLA
3680: 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 31 0a 23 65  IN_COMMENTS 1.#e
3690: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
36a0: 74 65 73 74 63 61 73 65 28 29 20 6d 61 63 72 6f  testcase() macro
36b0: 20 69 73 20 75 73 65 64 20 74 6f 20 61 69 64 20   is used to aid 
36c0: 69 6e 20 63 6f 76 65 72 61 67 65 20 74 65 73 74  in coverage test
36d0: 69 6e 67 2e 20 20 57 68 65 6e 0a 2a 2a 20 64 6f  ing.  When.** do
36e0: 69 6e 67 20 63 6f 76 65 72 61 67 65 20 74 65 73  ing coverage tes
36f0: 74 69 6e 67 2c 20 74 68 65 20 63 6f 6e 64 69 74  ting, the condit
3700: 69 6f 6e 20 69 6e 73 69 64 65 20 74 68 65 20 61  ion inside the a
3710: 72 67 75 6d 65 6e 74 20 74 6f 0a 2a 2a 20 74 65  rgument to.** te
3720: 73 74 63 61 73 65 28 29 20 6d 75 73 74 20 62 65  stcase() must be
3730: 20 65 76 61 6c 75 61 74 65 64 20 62 6f 74 68 20   evaluated both 
3740: 74 72 75 65 20 61 6e 64 20 66 61 6c 73 65 20 69  true and false i
3750: 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67 65  n order to.** ge
3760: 74 20 66 75 6c 6c 20 62 72 61 6e 63 68 20 63 6f  t full branch co
3770: 76 65 72 61 67 65 2e 20 20 54 68 65 20 74 65 73  verage.  The tes
3780: 74 63 61 73 65 28 29 20 6d 61 63 72 6f 20 69 73  tcase() macro is
3790: 20 69 6e 73 65 72 74 65 64 0a 2a 2a 20 74 6f 20   inserted.** to 
37a0: 68 65 6c 70 20 65 6e 73 75 72 65 20 61 64 65 71  help ensure adeq
37b0: 75 61 74 65 20 74 65 73 74 20 63 6f 76 65 72 61  uate test covera
37c0: 67 65 20 69 6e 20 70 6c 61 63 65 73 20 77 68 65  ge in places whe
37d0: 72 65 20 73 69 6d 70 6c 65 0a 2a 2a 20 63 6f 6e  re simple.** con
37e0: 64 69 74 69 6f 6e 2f 64 65 63 69 73 69 6f 6e 20  dition/decision 
37f0: 63 6f 76 65 72 61 67 65 20 69 73 20 69 6e 61 64  coverage is inad
3800: 65 71 75 61 74 65 2e 20 20 46 6f 72 20 65 78 61  equate.  For exa
3810: 6d 70 6c 65 2c 20 74 65 73 74 63 61 73 65 28 29  mple, testcase()
3820: 0a 2a 2a 20 63 61 6e 20 62 65 20 75 73 65 64 20  .** can be used 
3830: 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 62 6f 75  to make sure bou
3840: 6e 64 61 72 79 20 76 61 6c 75 65 73 20 61 72 65  ndary values are
3850: 20 74 65 73 74 65 64 2e 20 20 46 6f 72 0a 2a 2a   tested.  For.**
3860: 20 62 69 74 6d 61 73 6b 20 74 65 73 74 73 2c 20   bitmask tests, 
3870: 74 65 73 74 63 61 73 65 28 29 20 63 61 6e 20 62  testcase() can b
3880: 65 20 75 73 65 64 20 74 6f 20 6d 61 6b 65 20 73  e used to make s
3890: 75 72 65 20 65 61 63 68 20 62 69 74 0a 2a 2a 20  ure each bit.** 
38a0: 69 73 20 73 69 67 6e 69 66 69 63 61 6e 74 20 61  is significant a
38b0: 6e 64 20 75 73 65 64 20 61 74 20 6c 65 61 73 74  nd used at least
38c0: 20 6f 6e 63 65 2e 20 20 4f 6e 20 73 77 69 74 63   once.  On switc
38d0: 68 20 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a 20  h statements.** 
38e0: 77 68 65 72 65 20 6d 75 6c 74 69 70 6c 65 20 63  where multiple c
38f0: 61 73 65 73 20 67 6f 20 74 6f 20 74 68 65 20 73  ases go to the s
3900: 61 6d 65 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64  ame block of cod
3910: 65 2c 20 74 65 73 74 63 61 73 65 28 29 0a 2a 2a  e, testcase().**
3920: 20 63 61 6e 20 69 6e 73 75 72 65 20 74 68 61 74   can insure that
3930: 20 61 6c 6c 20 63 61 73 65 73 20 61 72 65 20 65   all cases are e
3940: 76 61 6c 75 61 74 65 64 2e 0a 2a 2a 0a 2a 2f 0a  valuated..**.*/.
3950: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 43 4f  #ifdef SQLITE_CO
3960: 56 45 52 41 47 45 5f 54 45 53 54 0a 20 20 76 6f  VERAGE_TEST.  vo
3970: 69 64 20 73 71 6c 69 74 65 33 43 6f 76 65 72 61  id sqlite3Covera
3980: 67 65 28 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e  ge(int);.# defin
3990: 65 20 74 65 73 74 63 61 73 65 28 58 29 20 20 69  e testcase(X)  i
39a0: 66 28 20 58 20 29 7b 20 73 71 6c 69 74 65 33 43  f( X ){ sqlite3C
39b0: 6f 76 65 72 61 67 65 28 5f 5f 4c 49 4e 45 5f 5f  overage(__LINE__
39c0: 29 3b 20 7d 0a 23 65 6c 73 65 0a 23 20 64 65 66  ); }.#else.# def
39d0: 69 6e 65 20 74 65 73 74 63 61 73 65 28 58 29 0a  ine testcase(X).
39e0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
39f0: 65 20 54 45 53 54 4f 4e 4c 59 20 6d 61 63 72 6f  e TESTONLY macro
3a00: 20 69 73 20 75 73 65 64 20 74 6f 20 65 6e 63 6c   is used to encl
3a10: 6f 73 65 20 76 61 72 69 61 62 6c 65 20 64 65 63  ose variable dec
3a20: 6c 61 72 61 74 69 6f 6e 73 20 6f 72 0a 2a 2a 20  larations or.** 
3a30: 6f 74 68 65 72 20 62 69 74 73 20 6f 66 20 63 6f  other bits of co
3a40: 64 65 20 74 68 61 74 20 61 72 65 20 6e 65 65 64  de that are need
3a50: 65 64 20 74 6f 20 73 75 70 70 6f 72 74 20 74 68  ed to support th
3a60: 65 20 61 72 67 75 6d 65 6e 74 73 0a 2a 2a 20 77  e arguments.** w
3a70: 69 74 68 69 6e 20 74 65 73 74 63 61 73 65 28 29  ithin testcase()
3a80: 20 61 6e 64 20 61 73 73 65 72 74 28 29 20 6d 61   and assert() ma
3a90: 63 72 6f 73 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  cros..*/.#if !de
3aa0: 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20 7c 7c  fined(NDEBUG) ||
3ab0: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
3ac0: 43 4f 56 45 52 41 47 45 5f 54 45 53 54 29 0a 23  COVERAGE_TEST).#
3ad0: 20 64 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c 59   define TESTONLY
3ae0: 28 58 29 20 20 58 0a 23 65 6c 73 65 0a 23 20 64  (X)  X.#else.# d
3af0: 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28 58  efine TESTONLY(X
3b00: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
3b10: 53 6f 6d 65 74 69 6d 65 73 20 77 65 20 6e 65 65  Sometimes we nee
3b20: 64 20 61 20 73 6d 61 6c 6c 20 61 6d 6f 75 6e 74  d a small amount
3b30: 20 6f 66 20 63 6f 64 65 20 73 75 63 68 20 61 73   of code such as
3b40: 20 61 20 76 61 72 69 61 62 6c 65 20 69 6e 69 74   a variable init
3b50: 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74 6f  ialization.** to
3b60: 20 73 65 74 75 70 20 66 6f 72 20 61 20 6c 61 74   setup for a lat
3b70: 65 72 20 61 73 73 65 72 74 28 29 20 73 74 61 74  er assert() stat
3b80: 65 6d 65 6e 74 2e 20 20 57 65 20 64 6f 20 6e 6f  ement.  We do no
3b90: 74 20 77 61 6e 74 20 74 68 69 73 20 63 6f 64 65  t want this code
3ba0: 20 74 6f 0a 2a 2a 20 61 70 70 65 61 72 20 77 68   to.** appear wh
3bb0: 65 6e 20 61 73 73 65 72 74 28 29 20 69 73 20 64  en assert() is d
3bc0: 69 73 61 62 6c 65 64 2e 20 20 54 68 65 20 66 6f  isabled.  The fo
3bd0: 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 69 73  llowing macro is
3be0: 20 74 68 65 72 65 66 6f 72 65 0a 2a 2a 20 75 73   therefore.** us
3bf0: 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74 68  ed to contain th
3c00: 61 74 20 73 65 74 75 70 20 63 6f 64 65 2e 20 20  at setup code.  
3c10: 54 68 65 20 22 56 56 41 22 20 61 63 72 6f 6e 79  The "VVA" acrony
3c20: 6d 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20  m stands for.** 
3c30: 22 56 65 72 69 66 69 63 61 74 69 6f 6e 2c 20 56  "Verification, V
3c40: 61 6c 69 64 61 74 69 6f 6e 2c 20 61 6e 64 20 41  alidation, and A
3c50: 63 63 72 65 64 69 74 61 74 69 6f 6e 22 2e 20 20  ccreditation".  
3c60: 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
3c70: 74 68 65 0a 2a 2a 20 63 6f 64 65 20 77 69 74 68  the.** code with
3c80: 69 6e 20 56 56 41 5f 4f 4e 4c 59 28 29 20 77 69  in VVA_ONLY() wi
3c90: 6c 6c 20 6f 6e 6c 79 20 72 75 6e 20 64 75 72 69  ll only run duri
3ca0: 6e 67 20 76 65 72 69 66 69 63 61 74 69 6f 6e 20  ng verification 
3cb0: 70 72 6f 63 65 73 73 65 73 2e 0a 2a 2f 0a 23 69  processes..*/.#i
3cc0: 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 23 20 64  fndef NDEBUG.# d
3cd0: 65 66 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28 58  efine VVA_ONLY(X
3ce0: 29 20 20 58 0a 23 65 6c 73 65 0a 23 20 64 65 66  )  X.#else.# def
3cf0: 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29 0a  ine VVA_ONLY(X).
3d00: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
3d10: 65 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56  e ALWAYS and NEV
3d20: 45 52 20 6d 61 63 72 6f 73 20 73 75 72 72 6f 75  ER macros surrou
3d30: 6e 64 20 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65  nd boolean expre
3d40: 73 73 69 6f 6e 73 20 77 68 69 63 68 0a 2a 2a 20  ssions which.** 
3d50: 61 72 65 20 69 6e 74 65 6e 64 65 64 20 74 6f 20  are intended to 
3d60: 61 6c 77 61 79 73 20 62 65 20 74 72 75 65 20 6f  always be true o
3d70: 72 20 66 61 6c 73 65 2c 20 72 65 73 70 65 63 74  r false, respect
3d80: 69 76 65 6c 79 2e 20 20 53 75 63 68 0a 2a 2a 20  ively.  Such.** 
3d90: 65 78 70 72 65 73 73 69 6f 6e 73 20 63 6f 75 6c  expressions coul
3da0: 64 20 62 65 20 6f 6d 69 74 74 65 64 20 66 72 6f  d be omitted fro
3db0: 6d 20 74 68 65 20 63 6f 64 65 20 63 6f 6d 70 6c  m the code compl
3dc0: 65 74 65 6c 79 2e 20 20 42 75 74 20 74 68 65 79  etely.  But they
3dd0: 0a 2a 2a 20 61 72 65 20 69 6e 63 6c 75 64 65 64  .** are included
3de0: 20 69 6e 20 61 20 66 65 77 20 63 61 73 65 73 20   in a few cases 
3df0: 69 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e 68 61  in order to enha
3e00: 6e 63 65 20 74 68 65 20 72 65 73 69 6c 69 65 6e  nce the resilien
3e10: 63 65 0a 2a 2a 20 6f 66 20 53 51 4c 69 74 65 20  ce.** of SQLite 
3e20: 74 6f 20 75 6e 65 78 70 65 63 74 65 64 20 62 65  to unexpected be
3e30: 68 61 76 69 6f 72 20 2d 20 74 6f 20 6d 61 6b 65  havior - to make
3e40: 20 74 68 65 20 63 6f 64 65 20 22 73 65 6c 66 2d   the code "self-
3e50: 68 65 61 6c 69 6e 67 22 0a 2a 2a 20 6f 72 20 22  healing".** or "
3e60: 64 75 63 74 69 6c 65 22 20 72 61 74 68 65 72 20  ductile" rather 
3e70: 74 68 61 6e 20 62 65 69 6e 67 20 22 62 72 69 74  than being "brit
3e80: 74 6c 65 22 20 61 6e 64 20 63 72 61 73 68 69 6e  tle" and crashin
3e90: 67 20 61 74 20 74 68 65 20 66 69 72 73 74 0a 2a  g at the first.*
3ea0: 2a 20 68 69 6e 74 20 6f 66 20 75 6e 70 6c 61 6e  * hint of unplan
3eb0: 6e 65 64 20 62 65 68 61 76 69 6f 72 2e 0a 2a 2a  ned behavior..**
3ec0: 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  .** In other wor
3ed0: 64 73 2c 20 41 4c 57 41 59 53 20 61 6e 64 20 4e  ds, ALWAYS and N
3ee0: 45 56 45 52 20 61 72 65 20 61 64 64 65 64 20 66  EVER are added f
3ef0: 6f 72 20 64 65 66 65 6e 73 69 76 65 20 63 6f 64  or defensive cod
3f00: 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 64 6f  e..**.** When do
3f10: 69 6e 67 20 63 6f 76 65 72 61 67 65 20 74 65 73  ing coverage tes
3f20: 74 69 6e 67 20 41 4c 57 41 59 53 20 61 6e 64 20  ting ALWAYS and 
3f30: 4e 45 56 45 52 20 61 72 65 20 68 61 72 64 2d 63  NEVER are hard-c
3f40: 6f 64 65 64 20 74 6f 0a 2a 2a 20 62 65 20 74 72  oded to.** be tr
3f50: 75 65 20 61 6e 64 20 66 61 6c 73 65 20 73 6f 20  ue and false so 
3f60: 74 68 61 74 20 74 68 65 20 75 6e 72 65 61 63 68  that the unreach
3f70: 61 62 6c 65 20 63 6f 64 65 20 74 68 65 79 20 73  able code they s
3f80: 70 65 63 69 66 79 20 77 69 6c 6c 0a 2a 2a 20 6e  pecify will.** n
3f90: 6f 74 20 62 65 20 63 6f 75 6e 74 65 64 20 61 73  ot be counted as
3fa0: 20 75 6e 74 65 73 74 65 64 20 63 6f 64 65 2e 0a   untested code..
3fb0: 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  */.#if defined(S
3fc0: 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54  QLITE_COVERAGE_T
3fd0: 45 53 54 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  EST) || defined(
3fe0: 53 51 4c 49 54 45 5f 4d 55 54 41 54 49 4f 4e 5f  SQLITE_MUTATION_
3ff0: 54 45 53 54 29 0a 23 20 64 65 66 69 6e 65 20 41  TEST).# define A
4000: 4c 57 41 59 53 28 58 29 20 20 20 20 20 20 28 31  LWAYS(X)      (1
4010: 29 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52  ).# define NEVER
4020: 28 58 29 20 20 20 20 20 20 20 28 30 29 0a 23 65  (X)       (0).#e
4030: 6c 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44 45  lif !defined(NDE
4040: 42 55 47 29 0a 23 20 64 65 66 69 6e 65 20 41 4c  BUG).# define AL
4050: 57 41 59 53 28 58 29 20 20 20 20 20 20 28 28 58  WAYS(X)      ((X
4060: 29 3f 31 3a 28 61 73 73 65 72 74 28 30 29 2c 30  )?1:(assert(0),0
4070: 29 29 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45  )).# define NEVE
4080: 52 28 58 29 20 20 20 20 20 20 20 28 28 58 29 3f  R(X)       ((X)?
4090: 28 61 73 73 65 72 74 28 30 29 2c 31 29 3a 30 29  (assert(0),1):0)
40a0: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
40b0: 41 4c 57 41 59 53 28 58 29 20 20 20 20 20 20 28  ALWAYS(X)      (
40c0: 58 29 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45  X).# define NEVE
40d0: 52 28 58 29 20 20 20 20 20 20 20 28 58 29 0a 23  R(X)       (X).#
40e0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f 6d  endif../*.** Som
40f0: 65 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 20 61  e conditionals a
4100: 72 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  re optimizations
4110: 20 6f 6e 6c 79 2e 20 20 49 6e 20 6f 74 68 65 72   only.  In other
4120: 20 77 6f 72 64 73 2c 20 69 66 20 74 68 65 0a 2a   words, if the.*
4130: 2a 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 20 61  * conditionals a
4140: 72 65 20 72 65 70 6c 61 63 65 64 20 77 69 74 68  re replaced with
4150: 20 61 20 63 6f 6e 73 74 61 6e 74 20 31 20 28 74   a constant 1 (t
4160: 72 75 65 29 20 6f 72 20 30 20 28 66 61 6c 73 65  rue) or 0 (false
4170: 29 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 63 6f  ) then.** the co
4180: 72 72 65 63 74 20 61 6e 73 77 65 72 20 69 73 20  rrect answer is 
4190: 73 74 69 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 20  still obtained, 
41a0: 74 68 6f 75 67 68 20 70 65 72 68 61 70 73 20 6e  though perhaps n
41b0: 6f 74 20 61 73 20 71 75 69 63 6b 6c 79 2e 0a 2a  ot as quickly..*
41c0: 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
41d0: 6e 67 20 6d 61 63 72 6f 73 20 6d 61 72 6b 20 74  ng macros mark t
41e0: 68 65 73 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f  hese optimizatio
41f0: 6e 73 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 2e  ns conditionals.
4200: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
4210: 53 51 4c 49 54 45 5f 4d 55 54 41 54 49 4f 4e 5f  SQLITE_MUTATION_
4220: 54 45 53 54 29 0a 23 20 64 65 66 69 6e 65 20 4f  TEST).# define O
4230: 4b 5f 49 46 5f 41 4c 57 41 59 53 5f 54 52 55 45  K_IF_ALWAYS_TRUE
4240: 28 58 29 20 20 28 31 29 0a 23 20 64 65 66 69 6e  (X)  (1).# defin
4250: 65 20 4f 4b 5f 49 46 5f 41 4c 57 41 59 53 5f 46  e OK_IF_ALWAYS_F
4260: 41 4c 53 45 28 58 29 20 28 30 29 0a 23 65 6c 73  ALSE(X) (0).#els
4270: 65 0a 23 20 64 65 66 69 6e 65 20 4f 4b 5f 49 46  e.# define OK_IF
4280: 5f 41 4c 57 41 59 53 5f 54 52 55 45 28 58 29 20  _ALWAYS_TRUE(X) 
4290: 20 28 58 29 0a 23 20 64 65 66 69 6e 65 20 4f 4b   (X).# define OK
42a0: 5f 49 46 5f 41 4c 57 41 59 53 5f 46 41 4c 53 45  _IF_ALWAYS_FALSE
42b0: 28 58 29 20 28 58 29 0a 23 65 6e 64 69 66 0a 0a  (X) (X).#endif..
42c0: 2f 2a 0a 2a 2a 20 53 6f 6d 65 20 6d 61 6c 6c 6f  /*.** Some mallo
42d0: 63 20 66 61 69 6c 75 72 65 73 20 61 72 65 20 6f  c failures are o
42e0: 6e 6c 79 20 70 6f 73 73 69 62 6c 65 20 69 66 20  nly possible if 
42f0: 53 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c  SQLITE_TEST_REAL
4300: 4c 4f 43 5f 53 54 52 45 53 53 20 69 73 0a 2a 2a  LOC_STRESS is.**
4310: 20 64 65 66 69 6e 65 64 2e 20 20 57 65 20 6e 65   defined.  We ne
4320: 65 64 20 74 6f 20 64 65 66 65 6e 64 20 61 67 61  ed to defend aga
4330: 69 6e 73 74 20 74 68 6f 73 65 20 66 61 69 6c 75  inst those failu
4340: 72 65 73 20 77 68 65 6e 20 74 65 73 74 69 6e 67  res when testing
4350: 20 77 69 74 68 0a 2a 2a 20 53 51 4c 49 54 45 5f   with.** SQLITE_
4360: 54 45 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52  TEST_REALLOC_STR
4370: 45 53 53 2c 20 62 75 74 20 77 65 20 64 6f 6e 27  ESS, but we don'
4380: 74 20 77 61 6e 74 20 74 68 65 20 75 6e 72 65 61  t want the unrea
4390: 63 68 61 62 6c 65 20 62 72 61 6e 63 68 65 73 0a  chable branches.
43a0: 2a 2a 20 64 75 72 69 6e 67 20 61 20 6e 6f 72 6d  ** during a norm
43b0: 61 6c 20 62 75 69 6c 64 2e 20 20 54 68 65 20 66  al build.  The f
43c0: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 63  ollowing macro c
43d0: 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 64 69  an be used to di
43e0: 73 61 62 6c 65 20 74 65 73 74 73 0a 2a 2a 20 74  sable tests.** t
43f0: 68 61 74 20 61 72 65 20 61 6c 77 61 79 73 20 66  hat are always f
4400: 61 6c 73 65 20 65 78 63 65 70 74 20 77 68 65 6e  alse except when
4410: 20 53 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41   SQLITE_TEST_REA
4420: 4c 4c 4f 43 5f 53 54 52 45 53 53 20 69 73 20 73  LLOC_STRESS is s
4430: 65 74 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  et..*/.#if defin
4440: 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 5f 52  ed(SQLITE_TEST_R
4450: 45 41 4c 4c 4f 43 5f 53 54 52 45 53 53 29 0a 23  EALLOC_STRESS).#
4460: 20 64 65 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f   define ONLY_IF_
4470: 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58  REALLOC_STRESS(X
4480: 29 20 20 28 58 29 0a 23 65 6c 69 66 20 21 64 65  )  (X).#elif !de
4490: 66 69 6e 65 64 28 4e 44 45 42 55 47 29 0a 23 20  fined(NDEBUG).# 
44a0: 64 65 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52  define ONLY_IF_R
44b0: 45 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29  EALLOC_STRESS(X)
44c0: 20 20 28 28 58 29 3f 28 61 73 73 65 72 74 28 30    ((X)?(assert(0
44d0: 29 2c 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23 20  ),1):0).#else.# 
44e0: 64 65 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52  define ONLY_IF_R
44f0: 45 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29  EALLOC_STRESS(X)
4500: 20 20 28 30 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a    (0).#endif../*
4510: 0a 2a 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73  .** Declarations
4520: 20 75 73 65 64 20 66 6f 72 20 74 72 61 63 69 6e   used for tracin
4530: 67 20 74 68 65 20 6f 70 65 72 61 74 69 6e 67 20  g the operating 
4540: 73 79 73 74 65 6d 20 69 6e 74 65 72 66 61 63 65  system interface
4550: 73 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  s..*/.#if define
4560: 64 28 53 51 4c 49 54 45 5f 46 4f 52 43 45 5f 4f  d(SQLITE_FORCE_O
4570: 53 5f 54 52 41 43 45 29 20 7c 7c 20 64 65 66 69  S_TRACE) || defi
4580: 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29  ned(SQLITE_TEST)
4590: 20 7c 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e   || \.    (defin
45a0: 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29  ed(SQLITE_DEBUG)
45b0: 20 26 26 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49   && SQLITE_OS_WI
45c0: 4e 29 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20  N).  extern int 
45d0: 73 71 6c 69 74 65 33 4f 53 54 72 61 63 65 3b 0a  sqlite3OSTrace;.
45e0: 23 20 64 65 66 69 6e 65 20 4f 53 54 52 41 43 45  # define OSTRACE
45f0: 28 58 29 20 20 20 20 20 20 20 20 20 20 69 66 28  (X)          if(
4600: 20 73 71 6c 69 74 65 33 4f 53 54 72 61 63 65 20   sqlite3OSTrace 
4610: 29 20 73 71 6c 69 74 65 33 44 65 62 75 67 50 72  ) sqlite3DebugPr
4620: 69 6e 74 66 20 58 0a 23 20 64 65 66 69 6e 65 20  intf X.# define 
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 0a 23 65 6c 73 65 0a 23 20 64 65 66  RACE.#else.# def
4650: 69 6e 65 20 4f 53 54 52 41 43 45 28 58 29 0a 23  ine OSTRACE(X).#
4660: 20 75 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 48   undef  SQLITE_H
4670: 41 56 45 5f 4f 53 5f 54 52 41 43 45 0a 23 65 6e  AVE_OS_TRACE.#en
4680: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 73 20 74 68  dif../*.** Is th
4690: 65 20 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65  e sqlite3ErrName
46a0: 28 29 20 66 75 6e 63 74 69 6f 6e 20 6e 65 65 64  () function need
46b0: 65 64 20 69 6e 20 74 68 65 20 62 75 69 6c 64 3f  ed in the build?
46c0: 20 20 43 75 72 72 65 6e 74 6c 79 2c 0a 2a 2a 20    Currently,.** 
46d0: 69 74 20 69 73 20 6e 65 65 64 65 64 20 62 79 20  it is needed by 
46e0: 22 6d 75 74 65 78 5f 77 33 32 2e 63 22 20 28 77  "mutex_w32.c" (w
46f0: 68 65 6e 20 64 65 62 75 67 67 69 6e 67 29 2c 20  hen debugging), 
4700: 22 6f 73 5f 77 69 6e 2e 63 22 20 28 77 68 65 6e  "os_win.c" (when
4710: 0a 2a 2a 20 4f 53 54 52 41 43 45 20 69 73 20 65  .** OSTRACE is e
4720: 6e 61 62 6c 65 64 29 2c 20 61 6e 64 20 62 79 20  nabled), and by 
4730: 73 65 76 65 72 61 6c 20 22 74 65 73 74 2a 2e 63  several "test*.c
4740: 22 20 66 69 6c 65 73 20 28 77 68 69 63 68 20 61  " files (which a
4750: 72 65 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 20 75  re.** compiled u
4760: 73 69 6e 67 20 53 51 4c 49 54 45 5f 54 45 53 54  sing SQLITE_TEST
4770: 29 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  )..*/.#if define
4780: 64 28 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53  d(SQLITE_HAVE_OS
4790: 5f 54 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e  _TRACE) || defin
47a0: 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20  ed(SQLITE_TEST) 
47b0: 7c 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65  || \.    (define
47c0: 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20  d(SQLITE_DEBUG) 
47d0: 26 26 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e  && SQLITE_OS_WIN
47e0: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
47f0: 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45 0a  E_NEED_ERR_NAME.
4800: 23 65 6c 73 65 0a 23 20 75 6e 64 65 66 20 20 53  #else.# undef  S
4810: 51 4c 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e  QLITE_NEED_ERR_N
4820: 41 4d 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  AME.#endif../*.*
4830: 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  * SQLITE_ENABLE_
4840: 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53  EXPLAIN_COMMENTS
4850: 20 69 73 20 69 6e 63 6f 6d 70 61 74 69 62 6c 65   is incompatible
4860: 20 77 69 74 68 20 53 51 4c 49 54 45 5f 4f 4d 49   with SQLITE_OMI
4870: 54 5f 45 58 50 4c 41 49 4e 0a 2a 2f 0a 23 69 66  T_EXPLAIN.*/.#if
4880: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
4890: 45 58 50 4c 41 49 4e 0a 23 20 75 6e 64 65 66 20  EXPLAIN.# undef 
48a0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58  SQLITE_ENABLE_EX
48b0: 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 0a 23  PLAIN_COMMENTS.#
48c0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  endif../*.** Ret
48d0: 75 72 6e 20 74 72 75 65 20 28 6e 6f 6e 2d 7a 65  urn true (non-ze
48e0: 72 6f 29 20 69 66 20 74 68 65 20 69 6e 70 75 74  ro) if the input
48f0: 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 74   is an integer t
4900: 68 61 74 20 69 73 20 74 6f 6f 20 6c 61 72 67 65  hat is too large
4910: 0a 2a 2a 20 74 6f 20 66 69 74 20 69 6e 20 33 32  .** to fit in 32
4920: 2d 62 69 74 73 2e 20 20 54 68 69 73 20 6d 61 63  -bits.  This mac
4930: 72 6f 20 69 73 20 75 73 65 64 20 69 6e 73 69 64  ro is used insid
4940: 65 20 6f 66 20 76 61 72 69 6f 75 73 20 74 65 73  e of various tes
4950: 74 63 61 73 65 28 29 0a 2a 2a 20 6d 61 63 72 6f  tcase().** macro
4960: 73 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74  s to verify that
4970: 20 77 65 20 68 61 76 65 20 74 65 73 74 65 64 20   we have tested 
4980: 53 51 4c 69 74 65 20 66 6f 72 20 6c 61 72 67 65  SQLite for large
4990: 2d 66 69 6c 65 20 73 75 70 70 6f 72 74 2e 0a 2a  -file support..*
49a0: 2f 0a 23 64 65 66 69 6e 65 20 49 53 5f 42 49 47  /.#define IS_BIG
49b0: 5f 49 4e 54 28 58 29 20 20 28 28 28 58 29 26 7e  _INT(X)  (((X)&~
49c0: 28 69 36 34 29 30 78 66 66 66 66 66 66 66 66 29  (i64)0xffffffff)
49d0: 21 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  !=0)../*.** The 
49e0: 6d 61 63 72 6f 20 75 6e 6c 69 6b 65 6c 79 28 29  macro unlikely()
49f0: 20 69 73 20 61 20 68 69 6e 74 20 74 68 61 74 20   is a hint that 
4a00: 73 75 72 72 6f 75 6e 64 73 20 61 20 62 6f 6f 6c  surrounds a bool
4a10: 65 61 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f  ean.** expressio
4a20: 6e 20 74 68 61 74 20 69 73 20 75 73 75 61 6c 6c  n that is usuall
4a30: 79 20 66 61 6c 73 65 2e 20 20 4d 61 63 72 6f 20  y false.  Macro 
4a40: 6c 69 6b 65 6c 79 28 29 20 73 75 72 72 6f 75 6e  likely() surroun
4a50: 64 73 0a 2a 2a 20 61 20 62 6f 6f 6c 65 61 6e 20  ds.** a boolean 
4a60: 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20  expression that 
4a70: 69 73 20 75 73 75 61 6c 6c 79 20 74 72 75 65 2e  is usually true.
4a80: 20 20 54 68 65 73 65 20 68 69 6e 74 73 20 63 6f    These hints co
4a90: 75 6c 64 2c 0a 2a 2a 20 69 6e 20 74 68 65 6f 72  uld,.** in theor
4aa0: 79 2c 20 62 65 20 75 73 65 64 20 62 79 20 74 68  y, be used by th
4ab0: 65 20 63 6f 6d 70 69 6c 65 72 20 74 6f 20 67 65  e compiler to ge
4ac0: 6e 65 72 61 74 65 20 62 65 74 74 65 72 20 63 6f  nerate better co
4ad0: 64 65 2c 20 62 75 74 0a 2a 2a 20 63 75 72 72 65  de, but.** curre
4ae0: 6e 74 6c 79 20 74 68 65 79 20 61 72 65 20 6a 75  ntly they are ju
4af0: 73 74 20 63 6f 6d 6d 65 6e 74 73 20 66 6f 72 20  st comments for 
4b00: 68 75 6d 61 6e 20 72 65 61 64 65 72 73 2e 0a 2a  human readers..*
4b10: 2f 0a 23 64 65 66 69 6e 65 20 6c 69 6b 65 6c 79  /.#define likely
4b20: 28 58 29 20 20 20 20 28 58 29 0a 23 64 65 66 69  (X)    (X).#defi
4b30: 6e 65 20 75 6e 6c 69 6b 65 6c 79 28 58 29 20 20  ne unlikely(X)  
4b40: 28 58 29 0a 0a 23 69 6e 63 6c 75 64 65 20 22 68  (X)..#include "h
4b50: 61 73 68 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  ash.h".#include 
4b60: 22 70 61 72 73 65 2e 68 22 0a 23 69 6e 63 6c 75  "parse.h".#inclu
4b70: 64 65 20 3c 73 74 64 69 6f 2e 68 3e 0a 23 69 6e  de <stdio.h>.#in
4b80: 63 6c 75 64 65 20 3c 73 74 64 6c 69 62 2e 68 3e  clude <stdlib.h>
4b90: 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 72 69 6e  .#include <strin
4ba0: 67 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 61  g.h>.#include <a
4bb0: 73 73 65 72 74 2e 68 3e 0a 23 69 6e 63 6c 75 64  ssert.h>.#includ
4bc0: 65 20 3c 73 74 64 64 65 66 2e 68 3e 0a 0a 2f 2a  e <stddef.h>../*
4bd0: 0a 2a 2a 20 55 73 65 20 61 20 6d 61 63 72 6f 20  .** Use a macro 
4be0: 74 6f 20 72 65 70 6c 61 63 65 20 6d 65 6d 63 70  to replace memcp
4bf0: 79 28 29 20 69 66 20 63 6f 6d 70 69 6c 65 64 20  y() if compiled 
4c00: 77 69 74 68 20 53 51 4c 49 54 45 5f 49 4e 4c 49  with SQLITE_INLI
4c10: 4e 45 5f 4d 45 4d 43 50 59 2e 0a 2a 2a 20 54 68  NE_MEMCPY..** Th
4c20: 69 73 20 61 6c 6c 6f 77 73 20 62 65 74 74 65 72  is allows better
4c30: 20 6d 65 61 73 75 72 65 6d 65 6e 74 73 20 6f 66   measurements of
4c40: 20 77 68 65 72 65 20 6d 65 6d 63 70 79 28 29 20   where memcpy() 
4c50: 69 73 20 75 73 65 64 20 77 68 65 6e 20 72 75 6e  is used when run
4c60: 6e 69 6e 67 0a 2a 2a 20 63 61 63 68 65 67 72 69  ning.** cachegri
4c70: 6e 64 2e 20 20 42 75 74 20 74 68 69 73 20 6d 61  nd.  But this ma
4c80: 63 72 6f 20 76 65 72 73 69 6f 6e 20 6f 66 20 6d  cro version of m
4c90: 65 6d 63 70 79 28 29 20 69 73 20 76 65 72 79 20  emcpy() is very 
4ca0: 73 6c 6f 77 20 73 6f 20 69 74 0a 2a 2a 20 73 68  slow so it.** sh
4cb0: 6f 75 6c 64 20 6e 6f 74 20 62 65 20 75 73 65 64  ould not be used
4cc0: 20 69 6e 20 70 72 6f 64 75 63 74 69 6f 6e 2e 20   in production. 
4cd0: 20 54 68 69 73 20 69 73 20 61 20 70 65 72 66 6f   This is a perfo
4ce0: 72 6d 61 6e 63 65 20 6d 65 61 73 75 72 65 6d 65  rmance measureme
4cf0: 6e 74 0a 2a 2a 20 68 61 63 6b 20 6f 6e 6c 79 2e  nt.** hack only.
4d00: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
4d10: 45 5f 49 4e 4c 49 4e 45 5f 4d 45 4d 43 50 59 0a  E_INLINE_MEMCPY.
4d20: 23 20 64 65 66 69 6e 65 20 6d 65 6d 63 70 79 28  # define memcpy(
4d30: 44 2c 53 2c 4e 29 20 7b 63 68 61 72 2a 78 78 64  D,S,N) {char*xxd
4d40: 3d 28 63 68 61 72 2a 29 28 44 29 3b 63 6f 6e 73  =(char*)(D);cons
4d50: 74 20 63 68 61 72 2a 78 78 73 3d 28 63 6f 6e 73  t char*xxs=(cons
4d60: 74 20 63 68 61 72 2a 29 28 53 29 3b 5c 0a 20 20  t char*)(S);\.  
4d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4d80: 20 20 20 20 20 20 69 6e 74 20 78 78 6e 3d 28 4e        int xxn=(N
4d90: 29 3b 77 68 69 6c 65 28 78 78 6e 2d 2d 3e 30 29  );while(xxn-->0)
4da0: 2a 28 78 78 64 2b 2b 29 3d 2a 28 78 78 73 2b 2b  *(xxd++)=*(xxs++
4db0: 29 3b 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  );}.#endif../*.*
4dc0: 2a 20 49 66 20 63 6f 6d 70 69 6c 69 6e 67 20 66  * If compiling f
4dd0: 6f 72 20 61 20 70 72 6f 63 65 73 73 6f 72 20 74  or a processor t
4de0: 68 61 74 20 6c 61 63 6b 73 20 66 6c 6f 61 74 69  hat lacks floati
4df0: 6e 67 20 70 6f 69 6e 74 20 73 75 70 70 6f 72 74  ng point support
4e00: 2c 0a 2a 2a 20 73 75 62 73 74 69 74 75 74 65 20  ,.** substitute 
4e10: 69 6e 74 65 67 65 72 20 66 6f 72 20 66 6c 6f 61  integer for floa
4e20: 74 69 6e 67 2d 70 6f 69 6e 74 0a 2a 2f 0a 23 69  ting-point.*/.#i
4e30: 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
4e40: 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a  _FLOATING_POINT.
4e50: 23 20 64 65 66 69 6e 65 20 64 6f 75 62 6c 65 20  # define double 
4e60: 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 64  sqlite_int64.# d
4e70: 65 66 69 6e 65 20 66 6c 6f 61 74 20 73 71 6c 69  efine float sqli
4e80: 74 65 5f 69 6e 74 36 34 0a 23 20 64 65 66 69 6e  te_int64.# defin
4e90: 65 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50  e LONGDOUBLE_TYP
4ea0: 45 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23  E sqlite_int64.#
4eb0: 20 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 42   ifndef SQLITE_B
4ec0: 49 47 5f 44 42 4c 0a 23 20 20 20 64 65 66 69 6e  IG_DBL.#   defin
4ed0: 65 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c  e SQLITE_BIG_DBL
4ee0: 20 28 28 28 73 71 6c 69 74 65 33 5f 69 6e 74 36   (((sqlite3_int6
4ef0: 34 29 31 29 3c 3c 35 30 29 0a 23 20 65 6e 64 69  4)1)<<50).# endi
4f00: 66 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  f.# define SQLIT
4f10: 45 5f 4f 4d 49 54 5f 44 41 54 45 54 49 4d 45 5f  E_OMIT_DATETIME_
4f20: 46 55 4e 43 53 20 31 0a 23 20 64 65 66 69 6e 65  FUNCS 1.# define
4f30: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41   SQLITE_OMIT_TRA
4f40: 43 45 20 31 0a 23 20 75 6e 64 65 66 20 53 51 4c  CE 1.# undef SQL
4f50: 49 54 45 5f 4d 49 58 45 44 5f 45 4e 44 49 41 4e  ITE_MIXED_ENDIAN
4f60: 5f 36 34 42 49 54 5f 46 4c 4f 41 54 0a 23 20 75  _64BIT_FLOAT.# u
4f70: 6e 64 65 66 20 53 51 4c 49 54 45 5f 48 41 56 45  ndef SQLITE_HAVE
4f80: 5f 49 53 4e 41 4e 0a 23 65 6e 64 69 66 0a 23 69  _ISNAN.#endif.#i
4f90: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47  fndef SQLITE_BIG
4fa0: 5f 44 42 4c 0a 23 20 64 65 66 69 6e 65 20 53 51  _DBL.# define SQ
4fb0: 4c 49 54 45 5f 42 49 47 5f 44 42 4c 20 28 31 65  LITE_BIG_DBL (1e
4fc0: 39 39 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  99).#endif../*.*
4fd0: 2a 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69 73  * OMIT_TEMPDB is
4fe0: 20 73 65 74 20 74 6f 20 31 20 69 66 20 53 51 4c   set to 1 if SQL
4ff0: 49 54 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 20  ITE_OMIT_TEMPDB 
5000: 69 73 20 64 65 66 69 6e 65 64 2c 20 6f 72 20 30  is defined, or 0
5010: 0a 2a 2a 20 61 66 74 65 72 77 61 72 64 2e 20 48  .** afterward. H
5020: 61 76 69 6e 67 20 74 68 69 73 20 6d 61 63 72 6f  aving this macro
5030: 20 61 6c 6c 6f 77 73 20 75 73 20 74 6f 20 63 61   allows us to ca
5040: 75 73 65 20 74 68 65 20 43 20 63 6f 6d 70 69 6c  use the C compil
5050: 65 72 0a 2a 2a 20 74 6f 20 6f 6d 69 74 20 63 6f  er.** to omit co
5060: 64 65 20 75 73 65 64 20 62 79 20 54 45 4d 50 20  de used by TEMP 
5070: 74 61 62 6c 65 73 20 77 69 74 68 6f 75 74 20 6d  tables without m
5080: 65 73 73 79 20 23 69 66 6e 64 65 66 20 73 74 61  essy #ifndef sta
5090: 74 65 6d 65 6e 74 73 2e 0a 2a 2f 0a 23 69 66 64  tements..*/.#ifd
50a0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ef SQLITE_OMIT_T
50b0: 45 4d 50 44 42 0a 23 64 65 66 69 6e 65 20 4f 4d  EMPDB.#define OM
50c0: 49 54 5f 54 45 4d 50 44 42 20 31 0a 23 65 6c 73  IT_TEMPDB 1.#els
50d0: 65 0a 23 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54  e.#define OMIT_T
50e0: 45 4d 50 44 42 20 30 0a 23 65 6e 64 69 66 0a 0a  EMPDB 0.#endif..
50f0: 2f 2a 0a 2a 2a 20 54 68 65 20 22 66 69 6c 65 20  /*.** The "file 
5100: 66 6f 72 6d 61 74 22 20 6e 75 6d 62 65 72 20 69  format" number i
5110: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61  s an integer tha
5120: 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  t is incremented
5130: 20 77 68 65 6e 65 76 65 72 0a 2a 2a 20 74 68 65   whenever.** the
5140: 20 56 44 42 45 2d 6c 65 76 65 6c 20 66 69 6c 65   VDBE-level file
5150: 20 66 6f 72 6d 61 74 20 63 68 61 6e 67 65 73 2e   format changes.
5160: 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
5170: 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 20 74 68  macros define th
5180: 65 0a 2a 2a 20 74 68 65 20 64 65 66 61 75 6c 74  e.** the default
5190: 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 66 6f 72   file format for
51a0: 20 6e 65 77 20 64 61 74 61 62 61 73 65 73 20 61   new databases a
51b0: 6e 64 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 66  nd the maximum f
51c0: 69 6c 65 20 66 6f 72 6d 61 74 0a 2a 2a 20 74 68  ile format.** th
51d0: 61 74 20 74 68 65 20 6c 69 62 72 61 72 79 20 63  at the library c
51e0: 61 6e 20 72 65 61 64 2e 0a 2a 2f 0a 23 64 65 66  an read..*/.#def
51f0: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 46  ine SQLITE_MAX_F
5200: 49 4c 45 5f 46 4f 52 4d 41 54 20 34 0a 23 69 66  ILE_FORMAT 4.#if
5210: 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41  ndef SQLITE_DEFA
5220: 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 0a  ULT_FILE_FORMAT.
5230: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
5240: 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52  DEFAULT_FILE_FOR
5250: 4d 41 54 20 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a  MAT 4.#endif../*
5260: 0a 2a 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68  .** Determine wh
5270: 65 74 68 65 72 20 74 72 69 67 67 65 72 73 20 61  ether triggers a
5280: 72 65 20 72 65 63 75 72 73 69 76 65 20 62 79 20  re recursive by 
5290: 64 65 66 61 75 6c 74 2e 20 20 54 68 69 73 20 63  default.  This c
52a0: 61 6e 20 62 65 0a 2a 2a 20 63 68 61 6e 67 65 64  an be.** changed
52b0: 20 61 74 20 72 75 6e 2d 74 69 6d 65 20 75 73 69   at run-time usi
52c0: 6e 67 20 61 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a  ng a pragma..*/.
52d0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44  #ifndef SQLITE_D
52e0: 45 46 41 55 4c 54 5f 52 45 43 55 52 53 49 56 45  EFAULT_RECURSIVE
52f0: 5f 54 52 49 47 47 45 52 53 0a 23 20 64 65 66 69  _TRIGGERS.# defi
5300: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
5310: 54 5f 52 45 43 55 52 53 49 56 45 5f 54 52 49 47  T_RECURSIVE_TRIG
5320: 47 45 52 53 20 30 0a 23 65 6e 64 69 66 0a 0a 2f  GERS 0.#endif../
5330: 2a 0a 2a 2a 20 50 72 6f 76 69 64 65 20 61 20 64  *.** Provide a d
5340: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72  efault value for
5350: 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f   SQLITE_TEMP_STO
5360: 52 45 20 69 6e 20 63 61 73 65 20 69 74 20 69 73  RE in case it is
5370: 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64 0a 2a   not specified.*
5380: 2a 20 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64  * on the command
5390: 2d 6c 69 6e 65 0a 2a 2f 0a 23 69 66 6e 64 65 66  -line.*/.#ifndef
53a0: 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f   SQLITE_TEMP_STO
53b0: 52 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  RE.# define SQLI
53c0: 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 20 31 0a  TE_TEMP_STORE 1.
53d0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66  #endif../*.** If
53e0: 20 6e 6f 20 76 61 6c 75 65 20 68 61 73 20 62 65   no value has be
53f0: 65 6e 20 70 72 6f 76 69 64 65 64 20 66 6f 72 20  en provided for 
5400: 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45  SQLITE_MAX_WORKE
5410: 52 5f 54 48 52 45 41 44 53 2c 20 6f 72 20 69 66  R_THREADS, or if
5420: 0a 2a 2a 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f  .** SQLITE_TEMP_
5430: 53 54 4f 52 45 20 69 73 20 73 65 74 20 74 6f 20  STORE is set to 
5440: 33 20 28 6e 65 76 65 72 20 75 73 65 20 74 65 6d  3 (never use tem
5450: 70 6f 72 61 72 79 20 66 69 6c 65 73 29 2c 20 73  porary files), s
5460: 65 74 20 69 74 0a 2a 2a 20 74 6f 20 7a 65 72 6f  et it.** to zero
5470: 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f  ..*/.#if SQLITE_
5480: 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 33 20 7c 7c  TEMP_STORE==3 ||
5490: 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41   SQLITE_THREADSA
54a0: 46 45 3d 3d 30 0a 23 20 75 6e 64 65 66 20 53 51  FE==0.# undef SQ
54b0: 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f  LITE_MAX_WORKER_
54c0: 54 48 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65  THREADS.# define
54d0: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b   SQLITE_MAX_WORK
54e0: 45 52 5f 54 48 52 45 41 44 53 20 30 0a 23 65 6e  ER_THREADS 0.#en
54f0: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
5500: 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48  TE_MAX_WORKER_TH
5510: 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53  READS.# define S
5520: 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52  QLITE_MAX_WORKER
5530: 5f 54 48 52 45 41 44 53 20 38 0a 23 65 6e 64 69  _THREADS 8.#endi
5540: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
5550: 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f  _DEFAULT_WORKER_
5560: 54 48 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65  THREADS.# define
5570: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
5580: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 20 30  WORKER_THREADS 0
5590: 0a 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49  .#endif.#if SQLI
55a0: 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45  TE_DEFAULT_WORKE
55b0: 52 5f 54 48 52 45 41 44 53 3e 53 51 4c 49 54 45  R_THREADS>SQLITE
55c0: 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
55d0: 41 44 53 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  ADS.# undef SQLI
55e0: 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48  TE_MAX_WORKER_TH
55f0: 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53  READS.# define S
5600: 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52  QLITE_MAX_WORKER
5610: 5f 54 48 52 45 41 44 53 20 53 51 4c 49 54 45 5f  _THREADS SQLITE_
5620: 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54  DEFAULT_WORKER_T
5630: 48 52 45 41 44 53 0a 23 65 6e 64 69 66 0a 0a 2f  HREADS.#endif../
5640: 2a 0a 2a 2a 20 54 68 65 20 64 65 66 61 75 6c 74  *.** The default
5650: 20 69 6e 69 74 69 61 6c 20 61 6c 6c 6f 63 61 74   initial allocat
5660: 69 6f 6e 20 66 6f 72 20 74 68 65 20 70 61 67 65  ion for the page
5670: 63 61 63 68 65 20 77 68 65 6e 20 75 73 69 6e 67  cache when using
5680: 20 73 65 70 61 72 61 74 65 0a 2a 2a 20 70 61 67   separate.** pag
5690: 65 63 61 63 68 65 73 20 66 6f 72 20 65 61 63 68  ecaches for each
56a0: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
56b0: 74 69 6f 6e 2e 20 20 41 20 70 6f 73 69 74 69 76  tion.  A positiv
56c0: 65 20 6e 75 6d 62 65 72 20 69 73 20 74 68 65 0a  e number is the.
56d0: 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  ** number of pag
56e0: 65 73 2e 20 20 41 20 6e 65 67 61 74 69 76 65 20  es.  A negative 
56f0: 6e 75 6d 62 65 72 20 4e 20 74 72 61 6e 73 6c 61  number N transla
5700: 74 69 6f 6e 73 20 6d 65 61 6e 73 20 74 68 61 74  tions means that
5710: 20 61 20 62 75 66 66 65 72 0a 2a 2a 20 6f 66 20   a buffer.** of 
5720: 2d 31 30 32 34 2a 4e 20 62 79 74 65 73 20 69 73  -1024*N bytes is
5730: 20 61 6c 6c 6f 63 61 74 65 64 20 61 6e 64 20 75   allocated and u
5740: 73 65 64 20 66 6f 72 20 61 73 20 6d 61 6e 79 20  sed for as many 
5750: 70 61 67 65 73 20 61 73 20 69 74 20 77 69 6c 6c  pages as it will
5760: 20 68 6f 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65   hold..**.** The
5770: 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f   default value o
5780: 66 20 22 32 30 22 20 77 61 73 20 63 68 6f 6f 73  f "20" was choos
5790: 65 6e 20 74 6f 20 6d 69 6e 69 6d 69 7a 65 20 74  en to minimize t
57a0: 68 65 20 72 75 6e 2d 74 69 6d 65 20 6f 66 20 74  he run-time of t
57b0: 68 65 0a 2a 2a 20 73 70 65 65 64 74 65 73 74 31  he.** speedtest1
57c0: 20 74 65 73 74 20 70 72 6f 67 72 61 6d 20 77 69   test program wi
57d0: 74 68 20 6f 70 74 69 6f 6e 73 3a 20 2d 2d 73 68  th options: --sh
57e0: 72 69 6e 6b 2d 6d 65 6d 6f 72 79 20 2d 2d 72 65  rink-memory --re
57f0: 70 72 65 70 61 72 65 0a 2a 2f 0a 23 69 66 6e 64  prepare.*/.#ifnd
5800: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
5810: 54 5f 50 43 41 43 48 45 5f 49 4e 49 54 53 5a 0a  T_PCACHE_INITSZ.
5820: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
5830: 44 45 46 41 55 4c 54 5f 50 43 41 43 48 45 5f 49  DEFAULT_PCACHE_I
5840: 4e 49 54 53 5a 20 32 30 0a 23 65 6e 64 69 66 0a  NITSZ 20.#endif.
5850: 0a 2f 2a 0a 2a 2a 20 44 65 66 61 75 6c 74 20 76  ./*.** Default v
5860: 61 6c 75 65 20 66 6f 72 20 74 68 65 20 53 51 4c  alue for the SQL
5870: 49 54 45 5f 43 4f 4e 46 49 47 5f 53 4f 52 54 45  ITE_CONFIG_SORTE
5880: 52 52 45 46 5f 53 49 5a 45 20 6f 70 74 69 6f 6e  RREF_SIZE option
5890: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
58a0: 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 4f 52 54  ITE_DEFAULT_SORT
58b0: 45 52 52 45 46 5f 53 49 5a 45 0a 23 20 64 65 66  ERREF_SIZE.# def
58c0: 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  ine SQLITE_DEFAU
58d0: 4c 54 5f 53 4f 52 54 45 52 52 45 46 5f 53 49 5a  LT_SORTERREF_SIZ
58e0: 45 20 30 78 37 66 66 66 66 66 66 66 0a 23 65 6e  E 0x7fffffff.#en
58f0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63  dif../*.** The c
5900: 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
5910: 6f 6e 73 20 53 51 4c 49 54 45 5f 4d 4d 41 50 5f  ons SQLITE_MMAP_
5920: 52 45 41 44 57 52 49 54 45 20 61 6e 64 20 0a 2a  READWRITE and .*
5930: 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  * SQLITE_ENABLE_
5940: 42 41 54 43 48 5f 41 54 4f 4d 49 43 5f 57 52 49  BATCH_ATOMIC_WRI
5950: 54 45 20 61 72 65 20 6e 6f 74 20 63 6f 6d 70 61  TE are not compa
5960: 74 69 62 6c 65 20 77 69 74 68 20 6f 6e 65 20 61  tible with one a
5970: 6e 6f 74 68 65 72 2e 0a 2a 2a 20 59 6f 75 20 6d  nother..** You m
5980: 75 73 74 20 63 68 6f 6f 73 65 20 6f 6e 65 20 6f  ust choose one o
5990: 72 20 74 68 65 20 6f 74 68 65 72 20 28 6f 72 20  r the other (or 
59a0: 6e 65 69 74 68 65 72 29 20 62 75 74 20 6e 6f 74  neither) but not
59b0: 20 62 6f 74 68 2e 0a 2a 2f 0a 23 69 66 20 64 65   both..*/.#if de
59c0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 4d 41  fined(SQLITE_MMA
59d0: 50 5f 52 45 41 44 57 52 49 54 45 29 20 26 26 20  P_READWRITE) && 
59e0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
59f0: 4e 41 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f 4d  NABLE_BATCH_ATOM
5a00: 49 43 5f 57 52 49 54 45 29 0a 23 65 72 72 6f 72  IC_WRITE).#error
5a10: 20 43 61 6e 6e 6f 74 20 75 73 65 20 62 6f 74 68   Cannot use both
5a20: 20 53 51 4c 49 54 45 5f 4d 4d 41 50 5f 52 45 41   SQLITE_MMAP_REA
5a30: 44 57 52 49 54 45 20 61 6e 64 20 53 51 4c 49 54  DWRITE and SQLIT
5a40: 45 5f 45 4e 41 42 4c 45 5f 42 41 54 43 48 5f 41  E_ENABLE_BATCH_A
5a50: 54 4f 4d 49 43 5f 57 52 49 54 45 0a 23 65 6e 64  TOMIC_WRITE.#end
5a60: 69 66 0a 0a 2f 2a 0a 2a 2a 20 47 43 43 20 64 6f  if../*.** GCC do
5a70: 65 73 20 6e 6f 74 20 64 65 66 69 6e 65 20 74 68  es not define th
5a80: 65 20 6f 66 66 73 65 74 6f 66 28 29 20 6d 61 63  e offsetof() mac
5a90: 72 6f 20 73 6f 20 77 65 27 6c 6c 20 68 61 76 65  ro so we'll have
5aa0: 20 74 6f 20 64 6f 20 69 74 0a 2a 2a 20 6f 75 72   to do it.** our
5ab0: 73 65 6c 76 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64  selves..*/.#ifnd
5ac0: 65 66 20 6f 66 66 73 65 74 6f 66 0a 23 64 65 66  ef offsetof.#def
5ad0: 69 6e 65 20 6f 66 66 73 65 74 6f 66 28 53 54 52  ine offsetof(STR
5ae0: 55 43 54 55 52 45 2c 46 49 45 4c 44 29 20 28 28  UCTURE,FIELD) ((
5af0: 69 6e 74 29 28 28 63 68 61 72 2a 29 26 28 28 53  int)((char*)&((S
5b00: 54 52 55 43 54 55 52 45 2a 29 30 29 2d 3e 46 49  TRUCTURE*)0)->FI
5b10: 45 4c 44 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ELD)).#endif../*
5b20: 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 63 6f  .** Macros to co
5b30: 6d 70 75 74 65 20 6d 69 6e 69 6d 75 6d 20 61 6e  mpute minimum an
5b40: 64 20 6d 61 78 69 6d 75 6d 20 6f 66 20 74 77 6f  d maximum of two
5b50: 20 6e 75 6d 62 65 72 73 2e 0a 2a 2f 0a 23 69 66   numbers..*/.#if
5b60: 6e 64 65 66 20 4d 49 4e 0a 23 20 64 65 66 69 6e  ndef MIN.# defin
5b70: 65 20 4d 49 4e 28 41 2c 42 29 20 28 28 41 29 3c  e MIN(A,B) ((A)<
5b80: 28 42 29 3f 28 41 29 3a 28 42 29 29 0a 23 65 6e  (B)?(A):(B)).#en
5b90: 64 69 66 0a 23 69 66 6e 64 65 66 20 4d 41 58 0a  dif.#ifndef MAX.
5ba0: 23 20 64 65 66 69 6e 65 20 4d 41 58 28 41 2c 42  # define MAX(A,B
5bb0: 29 20 28 28 41 29 3e 28 42 29 3f 28 41 29 3a 28  ) ((A)>(B)?(A):(
5bc0: 42 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  B)).#endif../*.*
5bd0: 2a 20 53 77 61 70 20 74 77 6f 20 6f 62 6a 65 63  * Swap two objec
5be0: 74 73 20 6f 66 20 74 79 70 65 20 54 59 50 45 2e  ts of type TYPE.
5bf0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 57 41 50  .*/.#define SWAP
5c00: 28 54 59 50 45 2c 41 2c 42 29 20 7b 54 59 50 45  (TYPE,A,B) {TYPE
5c10: 20 74 3d 41 3b 20 41 3d 42 3b 20 42 3d 74 3b 7d   t=A; A=B; B=t;}
5c20: 0a 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 6f  ../*.** Check to
5c30: 20 73 65 65 20 69 66 20 74 68 69 73 20 6d 61 63   see if this mac
5c40: 68 69 6e 65 20 75 73 65 73 20 45 42 43 44 49 43  hine uses EBCDIC
5c50: 2e 20 20 28 59 65 73 2c 20 62 65 6c 69 65 76 65  .  (Yes, believe
5c60: 20 69 74 20 6f 72 0a 2a 2a 20 6e 6f 74 2c 20 74   it or.** not, t
5c70: 68 65 72 65 20 61 72 65 20 73 74 69 6c 6c 20 6d  here are still m
5c80: 61 63 68 69 6e 65 73 20 6f 75 74 20 74 68 65 72  achines out ther
5c90: 65 20 74 68 61 74 20 75 73 65 20 45 42 43 44 49  e that use EBCDI
5ca0: 43 2e 29 0a 2a 2f 0a 23 69 66 20 27 41 27 20 3d  C.).*/.#if 'A' =
5cb0: 3d 20 27 5c 33 30 31 27 0a 23 20 64 65 66 69 6e  = '\301'.# defin
5cc0: 65 20 53 51 4c 49 54 45 5f 45 42 43 44 49 43 20  e SQLITE_EBCDIC 
5cd0: 31 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  1.#else.# define
5ce0: 20 53 51 4c 49 54 45 5f 41 53 43 49 49 20 31 0a   SQLITE_ASCII 1.
5cf0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e  #endif../*.** In
5d00: 74 65 67 65 72 73 20 6f 66 20 6b 6e 6f 77 6e 20  tegers of known 
5d10: 73 69 7a 65 73 2e 20 20 54 68 65 73 65 20 74 79  sizes.  These ty
5d20: 70 65 64 65 66 73 20 6d 69 67 68 74 20 63 68 61  pedefs might cha
5d30: 6e 67 65 20 66 6f 72 20 61 72 63 68 69 74 65 63  nge for architec
5d40: 74 75 72 65 73 0a 2a 2a 20 77 68 65 72 65 20 74  tures.** where t
5d50: 68 65 20 73 69 7a 65 73 20 76 65 72 79 2e 20 20  he sizes very.  
5d60: 50 72 65 70 72 6f 63 65 73 73 6f 72 20 6d 61 63  Preprocessor mac
5d70: 72 6f 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c  ros are availabl
5d80: 65 20 73 6f 20 74 68 61 74 20 74 68 65 0a 2a 2a  e so that the.**
5d90: 20 74 79 70 65 73 20 63 61 6e 20 62 65 20 63 6f   types can be co
5da0: 6e 76 65 6e 69 65 6e 74 6c 79 20 72 65 64 65 66  nveniently redef
5db0: 69 6e 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d  ined at compile-
5dc0: 74 79 70 65 2e 20 20 4c 69 6b 65 20 74 68 69 73  type.  Like this
5dd0: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20  :.**.**         
5de0: 63 63 20 27 2d 44 55 49 4e 54 50 54 52 5f 54 59  cc '-DUINTPTR_TY
5df0: 50 45 3d 6c 6f 6e 67 20 6c 6f 6e 67 20 69 6e 74  PE=long long int
5e00: 27 20 2e 2e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  ' ....*/.#ifndef
5e10: 20 55 49 4e 54 33 32 5f 54 59 50 45 0a 23 20 69   UINT32_TYPE.# i
5e20: 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54 33 32  fdef HAVE_UINT32
5e30: 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  _T.#  define UIN
5e40: 54 33 32 5f 54 59 50 45 20 75 69 6e 74 33 32 5f  T32_TYPE uint32_
5e50: 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  t.# else.#  defi
5e60: 6e 65 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75  ne UINT32_TYPE u
5e70: 6e 73 69 67 6e 65 64 20 69 6e 74 0a 23 20 65 6e  nsigned int.# en
5e80: 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  dif.#endif.#ifnd
5e90: 65 66 20 55 49 4e 54 31 36 5f 54 59 50 45 0a 23  ef UINT16_TYPE.#
5ea0: 20 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54   ifdef HAVE_UINT
5eb0: 31 36 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55  16_T.#  define U
5ec0: 49 4e 54 31 36 5f 54 59 50 45 20 75 69 6e 74 31  INT16_TYPE uint1
5ed0: 36 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65  6_t.# else.#  de
5ee0: 66 69 6e 65 20 55 49 4e 54 31 36 5f 54 59 50 45  fine UINT16_TYPE
5ef0: 20 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20   unsigned short 
5f00: 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64  int.# endif.#end
5f10: 69 66 0a 23 69 66 6e 64 65 66 20 49 4e 54 31 36  if.#ifndef INT16
5f20: 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41  _TYPE.# ifdef HA
5f30: 56 45 5f 49 4e 54 31 36 5f 54 0a 23 20 20 64 65  VE_INT16_T.#  de
5f40: 66 69 6e 65 20 49 4e 54 31 36 5f 54 59 50 45 20  fine INT16_TYPE 
5f50: 69 6e 74 31 36 5f 74 0a 23 20 65 6c 73 65 0a 23  int16_t.# else.#
5f60: 20 20 64 65 66 69 6e 65 20 49 4e 54 31 36 5f 54    define INT16_T
5f70: 59 50 45 20 73 68 6f 72 74 20 69 6e 74 0a 23 20  YPE short int.# 
5f80: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66  endif.#endif.#if
5f90: 6e 64 65 66 20 55 49 4e 54 38 5f 54 59 50 45 0a  ndef UINT8_TYPE.
5fa0: 23 20 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e  # ifdef HAVE_UIN
5fb0: 54 38 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55  T8_T.#  define U
5fc0: 49 4e 54 38 5f 54 59 50 45 20 75 69 6e 74 38 5f  INT8_TYPE uint8_
5fd0: 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  t.# else.#  defi
5fe0: 6e 65 20 55 49 4e 54 38 5f 54 59 50 45 20 75 6e  ne UINT8_TYPE un
5ff0: 73 69 67 6e 65 64 20 63 68 61 72 0a 23 20 65 6e  signed char.# en
6000: 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  dif.#endif.#ifnd
6010: 65 66 20 49 4e 54 38 5f 54 59 50 45 0a 23 20 69  ef INT8_TYPE.# i
6020: 66 64 65 66 20 48 41 56 45 5f 49 4e 54 38 5f 54  fdef HAVE_INT8_T
6030: 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 38 5f  .#  define INT8_
6040: 54 59 50 45 20 69 6e 74 38 5f 74 0a 23 20 65 6c  TYPE int8_t.# el
6050: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54  se.#  define INT
6060: 38 5f 54 59 50 45 20 73 69 67 6e 65 64 20 63 68  8_TYPE signed ch
6070: 61 72 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69  ar.# endif.#endi
6080: 66 0a 23 69 66 6e 64 65 66 20 4c 4f 4e 47 44 4f  f.#ifndef LONGDO
6090: 55 42 4c 45 5f 54 59 50 45 0a 23 20 64 65 66 69  UBLE_TYPE.# defi
60a0: 6e 65 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59  ne LONGDOUBLE_TY
60b0: 50 45 20 6c 6f 6e 67 20 64 6f 75 62 6c 65 0a 23  PE long double.#
60c0: 65 6e 64 69 66 0a 74 79 70 65 64 65 66 20 73 71  endif.typedef sq
60d0: 6c 69 74 65 5f 69 6e 74 36 34 20 69 36 34 3b 20  lite_int64 i64; 
60e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 38 2d 62 79           /* 8-by
60f0: 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  te signed intege
6100: 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 73 71 6c  r */.typedef sql
6110: 69 74 65 5f 75 69 6e 74 36 34 20 75 36 34 3b 20  ite_uint64 u64; 
6120: 20 20 20 20 20 20 20 20 2f 2a 20 38 2d 62 79 74          /* 8-byt
6130: 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67  e unsigned integ
6140: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49  er */.typedef UI
6150: 4e 54 33 32 5f 54 59 50 45 20 75 33 32 3b 20 20  NT32_TYPE u32;  
6160: 20 20 20 20 20 20 20 20 20 2f 2a 20 34 2d 62 79           /* 4-by
6170: 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65  te unsigned inte
6180: 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55  ger */.typedef U
6190: 49 4e 54 31 36 5f 54 59 50 45 20 75 31 36 3b 20  INT16_TYPE u16; 
61a0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32 2d 62            /* 2-b
61b0: 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  yte unsigned int
61c0: 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20  eger */.typedef 
61d0: 49 4e 54 31 36 5f 54 59 50 45 20 69 31 36 3b 20  INT16_TYPE i16; 
61e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32 2d             /* 2-
61f0: 62 79 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65  byte signed inte
6200: 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55  ger */.typedef U
6210: 49 4e 54 38 5f 54 59 50 45 20 75 38 3b 20 20 20  INT8_TYPE u8;   
6220: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 2d 62            /* 1-b
6230: 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  yte unsigned int
6240: 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20  eger */.typedef 
6250: 49 4e 54 38 5f 54 59 50 45 20 69 38 3b 20 20 20  INT8_TYPE i8;   
6260: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 2d             /* 1-
6270: 62 79 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65  byte signed inte
6280: 67 65 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53 51  ger */../*.** SQ
6290: 4c 49 54 45 5f 4d 41 58 5f 55 33 32 20 69 73 20  LITE_MAX_U32 is 
62a0: 61 20 75 36 34 20 63 6f 6e 73 74 61 6e 74 20 74  a u64 constant t
62b0: 68 61 74 20 69 73 20 74 68 65 20 6d 61 78 69 6d  hat is the maxim
62c0: 75 6d 20 75 36 34 20 76 61 6c 75 65 0a 2a 2a 20  um u64 value.** 
62d0: 74 68 61 74 20 63 61 6e 20 62 65 20 73 74 6f 72  that can be stor
62e0: 65 64 20 69 6e 20 61 20 75 33 32 20 77 69 74 68  ed in a u32 with
62f0: 6f 75 74 20 6c 6f 73 73 20 6f 66 20 64 61 74 61  out loss of data
6300: 2e 20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20  .  The value.** 
6310: 69 73 20 30 78 30 30 30 30 30 30 30 30 66 66 66  is 0x00000000fff
6320: 66 66 66 66 66 2e 20 20 42 75 74 20 62 65 63 61  fffff.  But beca
6330: 75 73 65 20 6f 66 20 71 75 69 72 6b 73 20 6f 66  use of quirks of
6340: 20 73 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73 2c   some compilers,
6350: 20 77 65 0a 2a 2a 20 68 61 76 65 20 74 6f 20 73   we.** have to s
6360: 70 65 63 69 66 79 20 74 68 65 20 76 61 6c 75 65  pecify the value
6370: 20 69 6e 20 74 68 65 20 6c 65 73 73 20 69 6e 74   in the less int
6380: 75 69 74 69 76 65 20 6d 61 6e 6e 65 72 20 73 68  uitive manner sh
6390: 6f 77 6e 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  own:.*/.#define 
63a0: 53 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32 20 20  SQLITE_MAX_U32  
63b0: 28 28 28 28 75 36 34 29 31 29 3c 3c 33 32 29 2d  ((((u64)1)<<32)-
63c0: 31 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61  1)../*.** The da
63d0: 74 61 74 79 70 65 20 75 73 65 64 20 74 6f 20 73  tatype used to s
63e0: 74 6f 72 65 20 65 73 74 69 6d 61 74 65 73 20 6f  tore estimates o
63f0: 66 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  f the number of 
6400: 72 6f 77 73 20 69 6e 20 61 0a 2a 2a 20 74 61 62  rows in a.** tab
6410: 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 54 68  le or index.  Th
6420: 69 73 20 69 73 20 61 6e 20 75 6e 73 69 67 6e 65  is is an unsigne
6430: 64 20 69 6e 74 65 67 65 72 20 74 79 70 65 2e 20  d integer type. 
6440: 20 46 6f 72 20 39 39 2e 39 25 20 6f 66 0a 2a 2a   For 99.9% of.**
6450: 20 74 68 65 20 77 6f 72 6c 64 2c 20 61 20 33 32   the world, a 32
6460: 2d 62 69 74 20 69 6e 74 65 67 65 72 20 69 73 20  -bit integer is 
6470: 73 75 66 66 69 63 69 65 6e 74 2e 20 20 42 75 74  sufficient.  But
6480: 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65   a 64-bit intege
6490: 72 0a 2a 2a 20 63 61 6e 20 62 65 20 75 73 65 64  r.** can be used
64a0: 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65   at compile-time
64b0: 20 69 66 20 64 65 73 69 72 65 64 2e 0a 2a 2f 0a   if desired..*/.
64c0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 36 34  #ifdef SQLITE_64
64d0: 42 49 54 5f 53 54 41 54 53 0a 20 74 79 70 65 64  BIT_STATS. typed
64e0: 65 66 20 75 36 34 20 74 52 6f 77 63 6e 74 3b 20  ef u64 tRowcnt; 
64f0: 20 20 20 2f 2a 20 36 34 2d 62 69 74 20 6f 6e 6c     /* 64-bit onl
6500: 79 20 69 66 20 72 65 71 75 65 73 74 65 64 20 61  y if requested a
6510: 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 2a  t compile-time *
6520: 2f 0a 23 65 6c 73 65 0a 20 74 79 70 65 64 65 66  /.#else. typedef
6530: 20 75 33 32 20 74 52 6f 77 63 6e 74 3b 20 20 20   u32 tRowcnt;   
6540: 20 2f 2a 20 33 32 2d 62 69 74 20 69 73 20 74 68   /* 32-bit is th
6550: 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23 65 6e  e default */.#en
6560: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 73 74 69 6d  dif../*.** Estim
6570: 61 74 65 64 20 71 75 61 6e 74 69 74 69 65 73 20  ated quantities 
6580: 75 73 65 64 20 66 6f 72 20 71 75 65 72 79 20 70  used for query p
6590: 6c 61 6e 6e 69 6e 67 20 61 72 65 20 73 74 6f 72  lanning are stor
65a0: 65 64 20 61 73 20 31 36 2d 62 69 74 0a 2a 2a 20  ed as 16-bit.** 
65b0: 6c 6f 67 61 72 69 74 68 6d 73 2e 20 20 46 6f 72  logarithms.  For
65c0: 20 71 75 61 6e 74 69 74 79 20 58 2c 20 74 68 65   quantity X, the
65d0: 20 76 61 6c 75 65 20 73 74 6f 72 65 64 20 69 73   value stored is
65e0: 20 31 30 2a 6c 6f 67 32 28 58 29 2e 20 20 54 68   10*log2(X).  Th
65f0: 69 73 0a 2a 2a 20 67 69 76 65 73 20 61 20 70 6f  is.** gives a po
6600: 73 73 69 62 6c 65 20 72 61 6e 67 65 20 6f 66 20  ssible range of 
6610: 76 61 6c 75 65 73 20 6f 66 20 61 70 70 72 6f 78  values of approx
6620: 69 6d 61 74 65 6c 79 20 31 2e 30 65 39 38 36 20  imately 1.0e986 
6630: 74 6f 20 31 65 2d 39 38 36 2e 0a 2a 2a 20 42 75  to 1e-986..** Bu
6640: 74 20 74 68 65 20 61 6c 6c 6f 77 65 64 20 76 61  t the allowed va
6650: 6c 75 65 73 20 61 72 65 20 22 67 72 61 69 6e 79  lues are "grainy
6660: 22 2e 20 20 4e 6f 74 20 65 76 65 72 79 20 76 61  ".  Not every va
6670: 6c 75 65 20 69 73 20 72 65 70 72 65 73 65 6e 74  lue is represent
6680: 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20 65 78 61  able..** For exa
6690: 6d 70 6c 65 2c 20 71 75 61 6e 74 69 74 69 65 73  mple, quantities
66a0: 20 31 36 20 61 6e 64 20 31 37 20 61 72 65 20 62   16 and 17 are b
66b0: 6f 74 68 20 72 65 70 72 65 73 65 6e 74 65 64 20  oth represented 
66c0: 62 79 20 61 20 4c 6f 67 45 73 74 0a 2a 2a 20 6f  by a LogEst.** o
66d0: 66 20 34 30 2e 20 20 48 6f 77 65 76 65 72 2c 20  f 40.  However, 
66e0: 73 69 6e 63 65 20 4c 6f 67 45 73 74 20 71 75 61  since LogEst qua
66f0: 6e 74 69 74 69 65 73 20 61 72 65 20 73 75 70 70  ntities are supp
6700: 6f 73 65 20 74 6f 20 62 65 20 65 73 74 69 6d 61  ose to be estima
6710: 74 65 73 2c 0a 2a 2a 20 6e 6f 74 20 65 78 61 63  tes,.** not exac
6720: 74 20 76 61 6c 75 65 73 2c 20 74 68 69 73 20 69  t values, this i
6730: 6d 70 72 65 63 69 73 69 6f 6e 20 69 73 20 6e 6f  mprecision is no
6740: 74 20 61 20 70 72 6f 62 6c 65 6d 2e 0a 2a 2a 0a  t a problem..**.
6750: 2a 2a 20 22 4c 6f 67 45 73 74 22 20 69 73 20 73  ** "LogEst" is s
6760: 68 6f 72 74 20 66 6f 72 20 22 4c 6f 67 61 72 69  hort for "Logari
6770: 74 68 6d 69 63 20 45 73 74 69 6d 61 74 65 22 2e  thmic Estimate".
6780: 0a 2a 2a 0a 2a 2a 20 45 78 61 6d 70 6c 65 73 3a  .**.** Examples:
6790: 0a 2a 2a 20 20 20 20 20 20 31 20 2d 3e 20 30 20  .**      1 -> 0 
67a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 32 30 20               20 
67b0: 2d 3e 20 34 33 20 20 20 20 20 20 20 20 20 20 31  -> 43          1
67c0: 30 30 30 30 20 2d 3e 20 31 33 32 0a 2a 2a 20 20  0000 -> 132.**  
67d0: 20 20 20 20 32 20 2d 3e 20 31 30 20 20 20 20 20      2 -> 10     
67e0: 20 20 20 20 20 20 20 20 32 35 20 2d 3e 20 34 36          25 -> 46
67f0: 20 20 20 20 20 20 20 20 20 20 32 35 30 30 30 20            25000 
6800: 2d 3e 20 31 34 36 0a 2a 2a 20 20 20 20 20 20 33  -> 146.**      3
6810: 20 2d 3e 20 31 36 20 20 20 20 20 20 20 20 20 20   -> 16          
6820: 20 20 31 30 30 20 2d 3e 20 36 36 20 20 20 20 20    100 -> 66     
6830: 20 20 20 31 30 30 30 30 30 30 20 2d 3e 20 31 39     1000000 -> 19
6840: 39 0a 2a 2a 20 20 20 20 20 20 34 20 2d 3e 20 32  9.**      4 -> 2
6850: 30 20 20 20 20 20 20 20 20 20 20 20 31 30 30 30  0           1000
6860: 20 2d 3e 20 39 39 20 20 20 20 20 20 20 20 31 30   -> 99        10
6870: 34 38 35 37 36 20 2d 3e 20 32 30 30 0a 2a 2a 20  48576 -> 200.** 
6880: 20 20 20 20 31 30 20 2d 3e 20 33 33 20 20 20 20      10 -> 33    
6890: 20 20 20 20 20 20 20 31 30 32 34 20 2d 3e 20 31         1024 -> 1
68a0: 30 30 20 20 20 20 34 32 39 34 39 36 37 32 39 36  00    4294967296
68b0: 20 2d 3e 20 33 32 30 0a 2a 2a 0a 2a 2a 20 54 68   -> 320.**.** Th
68c0: 65 20 4c 6f 67 45 73 74 20 63 61 6e 20 62 65 20  e LogEst can be 
68d0: 6e 65 67 61 74 69 76 65 20 74 6f 20 69 6e 64 69  negative to indi
68e0: 63 61 74 65 20 66 72 61 63 74 69 6f 6e 61 6c 20  cate fractional 
68f0: 76 61 6c 75 65 73 2e 0a 2a 2a 20 45 78 61 6d 70  values..** Examp
6900: 6c 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 30 2e  les:.**.**    0.
6910: 35 20 2d 3e 20 2d 31 30 20 20 20 20 20 20 20 20  5 -> -10        
6920: 20 20 20 30 2e 31 20 2d 3e 20 2d 33 33 20 20 20     0.1 -> -33   
6930: 20 20 20 20 20 30 2e 30 36 32 35 20 2d 3e 20 2d       0.0625 -> -
6940: 34 30 0a 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e  40.*/.typedef IN
6950: 54 31 36 5f 54 59 50 45 20 4c 6f 67 45 73 74 3b  T16_TYPE LogEst;
6960: 0a 0a 2f 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20  ../*.** Set the 
6970: 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 20 6d  SQLITE_PTRSIZE m
6980: 61 63 72 6f 20 74 6f 20 74 68 65 20 6e 75 6d 62  acro to the numb
6990: 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 61  er of bytes in a
69a0: 20 70 6f 69 6e 74 65 72 0a 2a 2f 0a 23 69 66 6e   pointer.*/.#ifn
69b0: 64 65 66 20 53 51 4c 49 54 45 5f 50 54 52 53 49  def SQLITE_PTRSI
69c0: 5a 45 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28  ZE.# if defined(
69d0: 5f 5f 53 49 5a 45 4f 46 5f 50 4f 49 4e 54 45 52  __SIZEOF_POINTER
69e0: 5f 5f 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53  __).#   define S
69f0: 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 20 5f 5f  QLITE_PTRSIZE __
6a00: 53 49 5a 45 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f  SIZEOF_POINTER__
6a10: 0a 23 20 65 6c 69 66 20 64 65 66 69 6e 65 64 28  .# elif defined(
6a20: 69 33 38 36 29 20 20 20 20 20 7c 7c 20 64 65 66  i386)     || def
6a30: 69 6e 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20 20  ined(__i386__)  
6a40: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 49   || defined(_M_I
6a50: 58 38 36 29 20 7c 7c 20 20 20 20 5c 0a 20 20 20  X86) ||    \.   
6a60: 20 20 20 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41      defined(_M_A
6a70: 52 4d 29 20 20 20 7c 7c 20 64 65 66 69 6e 65 64  RM)   || defined
6a80: 28 5f 5f 61 72 6d 5f 5f 29 20 20 20 20 7c 7c 20  (__arm__)    || 
6a90: 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 29 0a 23  defined(__x86).#
6aa0: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
6ab0: 5f 50 54 52 53 49 5a 45 20 34 0a 23 20 65 6c 73  _PTRSIZE 4.# els
6ac0: 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  e.#   define SQL
6ad0: 49 54 45 5f 50 54 52 53 49 5a 45 20 38 0a 23 20  ITE_PTRSIZE 8.# 
6ae0: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a  endif.#endif../*
6af0: 20 54 68 65 20 75 70 74 72 20 74 79 70 65 20 69   The uptr type i
6b00: 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20 69 6e  s an unsigned in
6b10: 74 65 67 65 72 20 6c 61 72 67 65 20 65 6e 6f 75  teger large enou
6b20: 67 68 20 74 6f 20 68 6f 6c 64 20 61 20 70 6f 69  gh to hold a poi
6b30: 6e 74 65 72 0a 2a 2f 0a 23 69 66 20 64 65 66 69  nter.*/.#if defi
6b40: 6e 65 64 28 48 41 56 45 5f 53 54 44 49 4e 54 5f  ned(HAVE_STDINT_
6b50: 48 29 0a 20 20 74 79 70 65 64 65 66 20 75 69 6e  H).  typedef uin
6b60: 74 70 74 72 5f 74 20 75 70 74 72 3b 0a 23 65 6c  tptr_t uptr;.#el
6b70: 69 66 20 53 51 4c 49 54 45 5f 50 54 52 53 49 5a  if SQLITE_PTRSIZ
6b80: 45 3d 3d 34 0a 20 20 74 79 70 65 64 65 66 20 75  E==4.  typedef u
6b90: 33 32 20 75 70 74 72 3b 0a 23 65 6c 73 65 0a 20  32 uptr;.#else. 
6ba0: 20 74 79 70 65 64 65 66 20 75 36 34 20 75 70 74   typedef u64 upt
6bb0: 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  r;.#endif../*.**
6bc0: 20 54 68 65 20 53 51 4c 49 54 45 5f 57 49 54 48   The SQLITE_WITH
6bd0: 49 4e 28 50 2c 53 2c 45 29 20 6d 61 63 72 6f 20  IN(P,S,E) macro 
6be0: 63 68 65 63 6b 73 20 74 6f 20 73 65 65 20 69 66  checks to see if
6bf0: 20 70 6f 69 6e 74 65 72 20 50 20 70 6f 69 6e 74   pointer P point
6c00: 73 20 74 6f 0a 2a 2a 20 73 6f 6d 65 74 68 69 6e  s to.** somethin
6c10: 67 20 62 65 74 77 65 65 6e 20 53 20 28 69 6e 63  g between S (inc
6c20: 6c 75 73 69 76 65 29 20 61 6e 64 20 45 20 28 65  lusive) and E (e
6c30: 78 63 6c 75 73 69 76 65 29 2e 0a 2a 2a 0a 2a 2a  xclusive)..**.**
6c40: 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
6c50: 20 53 20 69 73 20 61 20 62 75 66 66 65 72 20 61   S is a buffer a
6c60: 6e 64 20 45 20 69 73 20 61 20 70 6f 69 6e 74 65  nd E is a pointe
6c70: 72 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 62  r to the first b
6c80: 79 74 65 20 61 66 74 65 72 0a 2a 2a 20 74 68 65  yte after.** the
6c90: 20 65 6e 64 20 6f 66 20 62 75 66 66 65 72 20 53   end of buffer S
6ca0: 2e 20 20 54 68 69 73 20 6d 61 63 72 6f 20 72 65  .  This macro re
6cb0: 74 75 72 6e 73 20 74 72 75 65 20 69 66 20 50 20  turns true if P 
6cc0: 70 6f 69 6e 74 73 20 74 6f 20 73 6f 6d 65 74 68  points to someth
6cd0: 69 6e 67 0a 2a 2a 20 63 6f 6e 74 61 69 6e 65 64  ing.** contained
6ce0: 20 77 69 74 68 69 6e 20 74 68 65 20 62 75 66 66   within the buff
6cf0: 65 72 20 53 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  er S..*/.#define
6d00: 20 53 51 4c 49 54 45 5f 57 49 54 48 49 4e 28 50   SQLITE_WITHIN(P
6d10: 2c 53 2c 45 29 20 28 28 28 75 70 74 72 29 28 50  ,S,E) (((uptr)(P
6d20: 29 3e 3d 28 75 70 74 72 29 28 53 29 29 26 26 28  )>=(uptr)(S))&&(
6d30: 28 75 70 74 72 29 28 50 29 3c 28 75 70 74 72 29  (uptr)(P)<(uptr)
6d40: 28 45 29 29 29 0a 0a 0a 2f 2a 0a 2a 2a 20 4d 61  (E))).../*.** Ma
6d50: 63 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e  cros to determin
6d60: 65 20 77 68 65 74 68 65 72 20 74 68 65 20 6d 61  e whether the ma
6d70: 63 68 69 6e 65 20 69 73 20 62 69 67 20 6f 72 20  chine is big or 
6d80: 6c 69 74 74 6c 65 20 65 6e 64 69 61 6e 2c 0a 2a  little endian,.*
6d90: 2a 20 61 6e 64 20 77 68 65 74 68 65 72 20 6f 72  * and whether or
6da0: 20 6e 6f 74 20 74 68 61 74 20 64 65 74 65 72 6d   not that determ
6db0: 69 6e 61 74 69 6f 6e 20 69 73 20 72 75 6e 2d 74  ination is run-t
6dc0: 69 6d 65 20 6f 72 20 63 6f 6d 70 69 6c 65 2d 74  ime or compile-t
6dd0: 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 62  ime..**.** For b
6de0: 65 73 74 20 70 65 72 66 6f 72 6d 61 6e 63 65 2c  est performance,
6df0: 20 61 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d   an attempt is m
6e00: 61 64 65 20 74 6f 20 67 75 65 73 73 20 61 74 20  ade to guess at 
6e10: 74 68 65 20 62 79 74 65 2d 6f 72 64 65 72 0a 2a  the byte-order.*
6e20: 2a 20 75 73 69 6e 67 20 43 2d 70 72 65 70 72 6f  * using C-prepro
6e30: 63 65 73 73 6f 72 20 6d 61 63 72 6f 73 2e 20 20  cessor macros.  
6e40: 49 66 20 74 68 61 74 20 69 73 20 75 6e 73 75 63  If that is unsuc
6e50: 63 65 73 73 66 75 6c 2c 20 6f 72 20 69 66 0a 2a  cessful, or if.*
6e60: 2a 20 2d 44 53 51 4c 49 54 45 5f 42 59 54 45 4f  * -DSQLITE_BYTEO
6e70: 52 44 45 52 3d 30 20 69 73 20 73 65 74 2c 20 74  RDER=0 is set, t
6e80: 68 65 6e 20 62 79 74 65 2d 6f 72 64 65 72 20 69  hen byte-order i
6e90: 73 20 64 65 74 65 72 6d 69 6e 65 64 0a 2a 2a 20  s determined.** 
6ea0: 61 74 20 72 75 6e 2d 74 69 6d 65 2e 0a 2a 2f 0a  at run-time..*/.
6eb0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 42  #ifndef SQLITE_B
6ec0: 59 54 45 4f 52 44 45 52 0a 23 20 69 66 20 64 65  YTEORDER.# if de
6ed0: 66 69 6e 65 64 28 69 33 38 36 29 20 20 20 20 20  fined(i386)     
6ee0: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 69 33 38  || defined(__i38
6ef0: 36 5f 5f 29 20 20 20 7c 7c 20 64 65 66 69 6e 65  6__)   || define
6f00: 64 28 5f 4d 5f 49 58 38 36 29 20 7c 7c 20 20 20  d(_M_IX86) ||   
6f10: 20 5c 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28   \.     defined(
6f20: 5f 5f 78 38 36 5f 36 34 29 20 7c 7c 20 64 65 66  __x86_64) || def
6f30: 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34 5f 5f 29  ined(__x86_64__)
6f40: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 58   || defined(_M_X
6f50: 36 34 29 20 20 7c 7c 20 20 20 20 5c 0a 20 20 20  64)  ||    \.   
6f60: 20 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41 4d 44    defined(_M_AMD
6f70: 36 34 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  64) || defined(_
6f80: 4d 5f 41 52 4d 29 20 20 20 20 20 7c 7c 20 64 65  M_ARM)     || de
6f90: 66 69 6e 65 64 28 5f 5f 78 38 36 29 20 20 20 7c  fined(__x86)   |
6fa0: 7c 20 20 20 20 5c 0a 20 20 20 20 20 64 65 66 69  |    \.     defi
6fb0: 6e 65 64 28 5f 5f 61 72 6d 5f 5f 29 0a 23 20 20  ned(__arm__).#  
6fc0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42   define SQLITE_B
6fd0: 59 54 45 4f 52 44 45 52 20 20 20 20 31 32 33 34  YTEORDER    1234
6fe0: 0a 23 20 65 6c 69 66 20 64 65 66 69 6e 65 64 28  .# elif defined(
6ff0: 73 70 61 72 63 29 20 20 20 20 7c 7c 20 64 65 66  sparc)    || def
7000: 69 6e 65 64 28 5f 5f 70 70 63 5f 5f 29 0a 23 20  ined(__ppc__).# 
7010: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
7020: 42 59 54 45 4f 52 44 45 52 20 20 20 20 34 33 32  BYTEORDER    432
7030: 31 0a 23 20 65 6c 73 65 0a 23 20 20 20 64 65 66  1.# else.#   def
7040: 69 6e 65 20 53 51 4c 49 54 45 5f 42 59 54 45 4f  ine SQLITE_BYTEO
7050: 52 44 45 52 20 30 0a 23 20 65 6e 64 69 66 0a 23  RDER 0.# endif.#
7060: 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49 54 45  endif.#if SQLITE
7070: 5f 42 59 54 45 4f 52 44 45 52 3d 3d 34 33 32 31  _BYTEORDER==4321
7080: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
7090: 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20 31 0a  _BIGENDIAN    1.
70a0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
70b0: 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 30 0a 23  LITTLEENDIAN 0.#
70c0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 55   define SQLITE_U
70d0: 54 46 31 36 4e 41 54 49 56 45 20 20 53 51 4c 49  TF16NATIVE  SQLI
70e0: 54 45 5f 55 54 46 31 36 42 45 0a 23 65 6c 69 66  TE_UTF16BE.#elif
70f0: 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45   SQLITE_BYTEORDE
7100: 52 3d 3d 31 32 33 34 0a 23 20 64 65 66 69 6e 65  R==1234.# define
7110: 20 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41   SQLITE_BIGENDIA
7120: 4e 20 20 20 20 30 0a 23 20 64 65 66 69 6e 65 20  N    0.# define 
7130: 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44  SQLITE_LITTLEEND
7140: 49 41 4e 20 31 0a 23 20 64 65 66 69 6e 65 20 53  IAN 1.# define S
7150: 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56  QLITE_UTF16NATIV
7160: 45 20 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c  E  SQLITE_UTF16L
7170: 45 0a 23 65 6c 73 65 0a 23 20 69 66 64 65 66 20  E.#else.# ifdef 
7180: 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54  SQLITE_AMALGAMAT
7190: 49 4f 4e 0a 20 20 63 6f 6e 73 74 20 69 6e 74 20  ION.  const int 
71a0: 73 71 6c 69 74 65 33 6f 6e 65 20 3d 20 31 3b 0a  sqlite3one = 1;.
71b0: 23 20 65 6c 73 65 0a 20 20 65 78 74 65 72 6e 20  # else.  extern 
71c0: 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69 74 65  const int sqlite
71d0: 33 6f 6e 65 3b 0a 23 20 65 6e 64 69 66 0a 23 20  3one;.# endif.# 
71e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49  define SQLITE_BI
71f0: 47 45 4e 44 49 41 4e 20 20 20 20 28 2a 28 63 68  GENDIAN    (*(ch
7200: 61 72 20 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e  ar *)(&sqlite3on
7210: 65 29 3d 3d 30 29 0a 23 20 64 65 66 69 6e 65 20  e)==0).# define 
7220: 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44  SQLITE_LITTLEEND
7230: 49 41 4e 20 28 2a 28 63 68 61 72 20 2a 29 28 26  IAN (*(char *)(&
7240: 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d 31 29 0a  sqlite3one)==1).
7250: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
7260: 55 54 46 31 36 4e 41 54 49 56 45 20 20 28 53 51  UTF16NATIVE  (SQ
7270: 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 3f 53  LITE_BIGENDIAN?S
7280: 51 4c 49 54 45 5f 55 54 46 31 36 42 45 3a 53 51  QLITE_UTF16BE:SQ
7290: 4c 49 54 45 5f 55 54 46 31 36 4c 45 29 0a 23 65  LITE_UTF16LE).#e
72a0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 73  ndif../*.** Cons
72b0: 74 61 6e 74 73 20 66 6f 72 20 74 68 65 20 6c 61  tants for the la
72c0: 72 67 65 73 74 20 61 6e 64 20 73 6d 61 6c 6c 65  rgest and smalle
72d0: 73 74 20 70 6f 73 73 69 62 6c 65 20 36 34 2d 62  st possible 64-b
72e0: 69 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  it signed intege
72f0: 72 73 2e 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63  rs..** These mac
7300: 72 6f 73 20 61 72 65 20 64 65 73 69 67 6e 65 64  ros are designed
7310: 20 74 6f 20 77 6f 72 6b 20 63 6f 72 72 65 63 74   to work correct
7320: 6c 79 20 6f 6e 20 62 6f 74 68 20 33 32 2d 62 69  ly on both 32-bi
7330: 74 20 61 6e 64 20 36 34 2d 62 69 74 0a 2a 2a 20  t and 64-bit.** 
7340: 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2f 0a 23 64  compilers..*/.#d
7350: 65 66 69 6e 65 20 4c 41 52 47 45 53 54 5f 49 4e  efine LARGEST_IN
7360: 54 36 34 20 20 28 30 78 66 66 66 66 66 66 66 66  T64  (0xffffffff
7370: 7c 28 28 28 69 36 34 29 30 78 37 66 66 66 66 66  |(((i64)0x7fffff
7380: 66 66 29 3c 3c 33 32 29 29 0a 23 64 65 66 69 6e  ff)<<32)).#defin
7390: 65 20 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34  e SMALLEST_INT64
73a0: 20 28 28 28 69 36 34 29 2d 31 29 20 2d 20 4c 41   (((i64)-1) - LA
73b0: 52 47 45 53 54 5f 49 4e 54 36 34 29 0a 0a 2f 2a  RGEST_INT64)../*
73c0: 0a 2a 2a 20 52 6f 75 6e 64 20 75 70 20 61 20 6e  .** Round up a n
73d0: 75 6d 62 65 72 20 74 6f 20 74 68 65 20 6e 65 78  umber to the nex
73e0: 74 20 6c 61 72 67 65 72 20 6d 75 6c 74 69 70 6c  t larger multipl
73f0: 65 20 6f 66 20 38 2e 20 20 54 68 69 73 20 69 73  e of 8.  This is
7400: 20 75 73 65 64 0a 2a 2a 20 74 6f 20 66 6f 72 63   used.** to forc
7410: 65 20 38 2d 62 79 74 65 20 61 6c 69 67 6e 6d 65  e 8-byte alignme
7420: 6e 74 20 6f 6e 20 36 34 2d 62 69 74 20 61 72 63  nt on 64-bit arc
7430: 68 69 74 65 63 74 75 72 65 73 2e 0a 2a 2f 0a 23  hitectures..*/.#
7440: 64 65 66 69 6e 65 20 52 4f 55 4e 44 38 28 78 29  define ROUND8(x)
7450: 20 20 20 20 20 28 28 28 78 29 2b 37 29 26 7e 37       (((x)+7)&~7
7460: 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20 64  )../*.** Round d
7470: 6f 77 6e 20 74 6f 20 74 68 65 20 6e 65 61 72 65  own to the neare
7480: 73 74 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 38  st multiple of 8
7490: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e  .*/.#define ROUN
74a0: 44 44 4f 57 4e 38 28 78 29 20 28 28 78 29 26 7e  DDOWN8(x) ((x)&~
74b0: 37 29 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 65 72 74  7)../*.** Assert
74c0: 20 74 68 61 74 20 74 68 65 20 70 6f 69 6e 74 65   that the pointe
74d0: 72 20 58 20 69 73 20 61 6c 69 67 6e 65 64 20 74  r X is aligned t
74e0: 6f 20 61 6e 20 38 2d 62 79 74 65 20 62 6f 75 6e  o an 8-byte boun
74f0: 64 61 72 79 2e 20 20 54 68 69 73 0a 2a 2a 20 6d  dary.  This.** m
7500: 61 63 72 6f 20 69 73 20 75 73 65 64 20 6f 6e 6c  acro is used onl
7510: 79 20 77 69 74 68 69 6e 20 61 73 73 65 72 74 28  y within assert(
7520: 29 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74  ) to verify that
7530: 20 74 68 65 20 63 6f 64 65 20 67 65 74 73 0a 2a   the code gets.*
7540: 2a 20 61 6c 6c 20 61 6c 69 67 6e 6d 65 6e 74 20  * all alignment 
7550: 72 65 73 74 72 69 63 74 69 6f 6e 73 20 63 6f 72  restrictions cor
7560: 72 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 45 78 63 65  rect..**.** Exce
7570: 70 74 2c 20 69 66 20 53 51 4c 49 54 45 5f 34 5f  pt, if SQLITE_4_
7580: 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c  BYTE_ALIGNED_MAL
7590: 4c 4f 43 20 69 73 20 64 65 66 69 6e 65 64 2c 20  LOC is defined, 
75a0: 74 68 65 6e 20 74 68 65 0a 2a 2a 20 75 6e 64 65  then the.** unde
75b0: 72 6c 79 69 6e 67 20 6d 61 6c 6c 6f 63 28 29 20  rlying malloc() 
75c0: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6d  implementation m
75d0: 69 67 68 74 20 72 65 74 75 72 6e 20 75 73 20 34  ight return us 4
75e0: 2d 62 79 74 65 20 61 6c 69 67 6e 65 64 0a 2a 2a  -byte aligned.**
75f0: 20 70 6f 69 6e 74 65 72 73 2e 20 20 49 6e 20 74   pointers.  In t
7600: 68 61 74 20 63 61 73 65 2c 20 6f 6e 6c 79 20 76  hat case, only v
7610: 65 72 69 66 79 20 34 2d 62 79 74 65 20 61 6c 69  erify 4-byte ali
7620: 67 6e 6d 65 6e 74 2e 0a 2a 2f 0a 23 69 66 64 65  gnment..*/.#ifde
7630: 66 20 53 51 4c 49 54 45 5f 34 5f 42 59 54 45 5f  f SQLITE_4_BYTE_
7640: 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43 0a 23  ALIGNED_MALLOC.#
7650: 20 64 65 66 69 6e 65 20 45 49 47 48 54 5f 42 59   define EIGHT_BY
7660: 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20  TE_ALIGNMENT(X) 
7670: 20 20 28 28 28 28 63 68 61 72 2a 29 28 58 29 20    ((((char*)(X) 
7680: 2d 20 28 63 68 61 72 2a 29 30 29 26 33 29 3d 3d  - (char*)0)&3)==
7690: 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  0).#else.# defin
76a0: 65 20 45 49 47 48 54 5f 42 59 54 45 5f 41 4c 49  e EIGHT_BYTE_ALI
76b0: 47 4e 4d 45 4e 54 28 58 29 20 20 20 28 28 28 28  GNMENT(X)   ((((
76c0: 63 68 61 72 2a 29 28 58 29 20 2d 20 28 63 68 61  char*)(X) - (cha
76d0: 72 2a 29 30 29 26 37 29 3d 3d 30 29 0a 23 65 6e  r*)0)&7)==0).#en
76e0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 69 73 61 62  dif../*.** Disab
76f0: 6c 65 20 4d 4d 41 50 20 6f 6e 20 70 6c 61 74 66  le MMAP on platf
7700: 6f 72 6d 73 20 77 68 65 72 65 20 69 74 20 69 73  orms where it is
7710: 20 6b 6e 6f 77 6e 20 74 6f 20 6e 6f 74 20 77 6f   known to not wo
7720: 72 6b 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  rk.*/.#if define
7730: 64 28 5f 5f 4f 70 65 6e 42 53 44 5f 5f 29 20 7c  d(__OpenBSD__) |
7740: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 51 4e 58 4e  | defined(__QNXN
7750: 54 4f 5f 5f 29 0a 23 20 75 6e 64 65 66 20 53 51  TO__).# undef SQ
7760: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
7770: 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  ZE.# define SQLI
7780: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
7790: 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   0.#endif../*.**
77a0: 20 44 65 66 61 75 6c 74 20 6d 61 78 69 6d 75 6d   Default maximum
77b0: 20 73 69 7a 65 20 6f 66 20 6d 65 6d 6f 72 79 20   size of memory 
77c0: 75 73 65 64 20 62 79 20 6d 65 6d 6f 72 79 2d 6d  used by memory-m
77d0: 61 70 70 65 64 20 49 2f 4f 20 69 6e 20 74 68 65  apped I/O in the
77e0: 20 56 46 53 0a 2a 2f 0a 23 69 66 64 65 66 20 5f   VFS.*/.#ifdef _
77f0: 5f 41 50 50 4c 45 5f 5f 0a 23 20 69 6e 63 6c 75  _APPLE__.# inclu
7800: 64 65 20 3c 54 61 72 67 65 74 43 6f 6e 64 69 74  de <TargetCondit
7810: 69 6f 6e 61 6c 73 2e 68 3e 0a 23 65 6e 64 69 66  ionals.h>.#endif
7820: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
7830: 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20  MAX_MMAP_SIZE.# 
7840: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 6c 69 6e  if defined(__lin
7850: 75 78 5f 5f 29 20 5c 0a 20 20 7c 7c 20 64 65 66  ux__) \.  || def
7860: 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 5c 0a 20  ined(_WIN32) \. 
7870: 20 7c 7c 20 28 64 65 66 69 6e 65 64 28 5f 5f 41   || (defined(__A
7880: 50 50 4c 45 5f 5f 29 20 26 26 20 64 65 66 69 6e  PPLE__) && defin
7890: 65 64 28 5f 5f 4d 41 43 48 5f 5f 29 29 20 5c 0a  ed(__MACH__)) \.
78a0: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 73    || defined(__s
78b0: 75 6e 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e  un) \.  || defin
78c0: 65 64 28 5f 5f 46 72 65 65 42 53 44 5f 5f 29 20  ed(__FreeBSD__) 
78d0: 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  \.  || defined(_
78e0: 5f 44 72 61 67 6f 6e 46 6c 79 5f 5f 29 0a 23 20  _DragonFly__).# 
78f0: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
7900: 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 78  MAX_MMAP_SIZE 0x
7910: 37 66 66 66 30 30 30 30 20 20 2f 2a 20 32 31 34  7fff0000  /* 214
7920: 37 34 31 38 31 31 32 20 2a 2f 0a 23 20 65 6c 73  7418112 */.# els
7930: 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  e.#   define SQL
7940: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
7950: 45 20 30 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64  E 0.# endif.#end
7960: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 65  if../*.** The de
7970: 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45 20  fault MMAP_SIZE 
7980: 69 73 20 7a 65 72 6f 20 6f 6e 20 61 6c 6c 20 70  is zero on all p
7990: 6c 61 74 66 6f 72 6d 73 2e 20 20 4f 72 2c 20 65  latforms.  Or, e
79a0: 76 65 6e 20 69 66 20 61 20 6c 61 72 67 65 72 0a  ven if a larger.
79b0: 2a 2a 20 64 65 66 61 75 6c 74 20 4d 4d 41 50 5f  ** default MMAP_
79c0: 53 49 5a 45 20 69 73 20 73 70 65 63 69 66 69 65  SIZE is specifie
79d0: 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  d at compile-tim
79e0: 65 2c 20 6d 61 6b 65 20 73 75 72 65 20 74 68 61  e, make sure tha
79f0: 74 20 69 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74  t it does.** not
7a00: 20 65 78 63 65 65 64 20 74 68 65 20 6d 61 78 69   exceed the maxi
7a10: 6d 75 6d 20 6d 6d 61 70 20 73 69 7a 65 2e 0a 2a  mum mmap size..*
7a20: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
7a30: 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49  _DEFAULT_MMAP_SI
7a40: 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  ZE.# define SQLI
7a50: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f  TE_DEFAULT_MMAP_
7a60: 53 49 5a 45 20 30 0a 23 65 6e 64 69 66 0a 23 69  SIZE 0.#endif.#i
7a70: 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  f SQLITE_DEFAULT
7a80: 5f 4d 4d 41 50 5f 53 49 5a 45 3e 53 51 4c 49 54  _MMAP_SIZE>SQLIT
7a90: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a  E_MAX_MMAP_SIZE.
7aa0: 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 44  # undef SQLITE_D
7ab0: 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45  EFAULT_MMAP_SIZE
7ac0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
7ad0: 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49  _DEFAULT_MMAP_SI
7ae0: 5a 45 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d  ZE SQLITE_MAX_MM
7af0: 41 50 5f 53 49 5a 45 0a 23 65 6e 64 69 66 0a 0a  AP_SIZE.#endif..
7b00: 2f 2a 0a 2a 2a 20 4f 6e 6c 79 20 6f 6e 65 20 6f  /*.** Only one o
7b10: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
7b20: 53 54 41 54 33 20 6f 72 20 53 51 4c 49 54 45 5f  STAT3 or SQLITE_
7b30: 45 4e 41 42 4c 45 5f 53 54 41 54 34 20 63 61 6e  ENABLE_STAT4 can
7b40: 20 62 65 20 64 65 66 69 6e 65 64 2e 0a 2a 2a 20   be defined..** 
7b50: 50 72 69 6f 72 69 74 79 20 69 73 20 67 69 76 65  Priority is give
7b60: 6e 20 74 6f 20 53 51 4c 49 54 45 5f 45 4e 41 42  n to SQLITE_ENAB
7b70: 4c 45 5f 53 54 41 54 34 2e 20 20 49 66 20 65 69  LE_STAT4.  If ei
7b80: 74 68 65 72 20 61 72 65 20 64 65 66 69 6e 65 64  ther are defined
7b90: 2c 20 61 6c 73 6f 0a 2a 2a 20 64 65 66 69 6e 65  , also.** define
7ba0: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
7bb0: 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 2a 2f  TAT3_OR_STAT4.*/
7bc0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
7bd0: 4e 41 42 4c 45 5f 53 54 41 54 34 0a 23 20 75 6e  NABLE_STAT4.# un
7be0: 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
7bf0: 45 5f 53 54 41 54 33 0a 23 20 64 65 66 69 6e 65  E_STAT3.# define
7c00: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
7c10: 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 20 31 0a  TAT3_OR_STAT4 1.
7c20: 23 65 6c 69 66 20 53 51 4c 49 54 45 5f 45 4e 41  #elif SQLITE_ENA
7c30: 42 4c 45 5f 53 54 41 54 33 0a 23 20 64 65 66 69  BLE_STAT3.# defi
7c40: 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ne SQLITE_ENABLE
7c50: 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 20  _STAT3_OR_STAT4 
7c60: 31 0a 23 65 6c 69 66 20 53 51 4c 49 54 45 5f 45  1.#elif SQLITE_E
7c70: 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53  NABLE_STAT3_OR_S
7c80: 54 41 54 34 0a 23 20 75 6e 64 65 66 20 53 51 4c  TAT4.# undef SQL
7c90: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
7ca0: 5f 4f 52 5f 53 54 41 54 34 0a 23 65 6e 64 69 66  _OR_STAT4.#endif
7cb0: 0a 0a 2f 2a 0a 2a 2a 20 53 45 4c 45 43 54 54 52  ../*.** SELECTTR
7cc0: 41 43 45 5f 45 4e 41 42 4c 45 44 20 77 69 6c 6c  ACE_ENABLED will
7cd0: 20 62 65 20 65 69 74 68 65 72 20 31 20 6f 72 20   be either 1 or 
7ce0: 30 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77  0 depending on w
7cf0: 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 0a 2a 2a  hether or not.**
7d00: 20 74 68 65 20 53 65 6c 65 63 74 20 71 75 65 72   the Select quer
7d10: 79 20 67 65 6e 65 72 61 74 6f 72 20 74 72 61 63  y generator trac
7d20: 69 6e 67 20 6c 6f 67 69 63 20 69 73 20 74 75 72  ing logic is tur
7d30: 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 64  ned on..*/.#if d
7d40: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
7d50: 41 42 4c 45 5f 53 45 4c 45 43 54 54 52 41 43 45  ABLE_SELECTTRACE
7d60: 29 0a 23 20 64 65 66 69 6e 65 20 53 45 4c 45 43  ).# define SELEC
7d70: 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 31  TTRACE_ENABLED 1
7d80: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
7d90: 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42  SELECTTRACE_ENAB
7da0: 4c 45 44 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  LED 0.#endif../*
7db0: 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
7dc0: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
7dd0: 20 73 74 72 75 63 74 75 72 65 20 69 73 20 75 73   structure is us
7de0: 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20  ed to store the 
7df0: 62 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20  busy-handler.** 
7e00: 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 61 20 67  callback for a g
7e10: 69 76 65 6e 20 73 71 6c 69 74 65 20 68 61 6e 64  iven sqlite hand
7e20: 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 71  le..**.** The sq
7e30: 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c 65 72  lite.busyHandler
7e40: 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20 73   member of the s
7e50: 71 6c 69 74 65 20 73 74 72 75 63 74 20 63 6f 6e  qlite struct con
7e60: 74 61 69 6e 73 20 74 68 65 20 62 75 73 79 0a 2a  tains the busy.*
7e70: 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 74  * callback for t
7e80: 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64  he database hand
7e90: 6c 65 2e 20 45 61 63 68 20 70 61 67 65 72 20 6f  le. Each pager o
7ea0: 70 65 6e 65 64 20 76 69 61 20 74 68 65 20 73 71  pened via the sq
7eb0: 6c 69 74 65 0a 2a 2a 20 68 61 6e 64 6c 65 20 69  lite.** handle i
7ec0: 73 20 70 61 73 73 65 64 20 61 20 70 6f 69 6e 74  s passed a point
7ed0: 65 72 20 74 6f 20 73 71 6c 69 74 65 2e 62 75 73  er to sqlite.bus
7ee0: 79 48 61 6e 64 6c 65 72 2e 20 54 68 65 20 62 75  yHandler. The bu
7ef0: 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61  sy-handler.** ca
7f00: 6c 6c 62 61 63 6b 20 69 73 20 63 75 72 72 65 6e  llback is curren
7f10: 74 6c 79 20 69 6e 76 6f 6b 65 64 20 6f 6e 6c 79  tly invoked only
7f20: 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 70 61 67   from within pag
7f30: 65 72 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64 65 66  er.c..*/.typedef
7f40: 20 73 74 72 75 63 74 20 42 75 73 79 48 61 6e 64   struct BusyHand
7f50: 6c 65 72 20 42 75 73 79 48 61 6e 64 6c 65 72 3b  ler BusyHandler;
7f60: 0a 73 74 72 75 63 74 20 42 75 73 79 48 61 6e 64  .struct BusyHand
7f70: 6c 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78 42  ler {.  int (*xB
7f80: 75 73 79 48 61 6e 64 6c 65 72 29 28 76 6f 69 64  usyHandler)(void
7f90: 20 2a 2c 69 6e 74 29 3b 20 20 2f 2a 20 54 68 65   *,int);  /* The
7fa0: 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a   busy callback *
7fb0: 2f 0a 20 20 76 6f 69 64 20 2a 70 42 75 73 79 41  /.  void *pBusyA
7fc0: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
7fd0: 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61        /* First a
7fe0: 72 67 20 74 6f 20 62 75 73 79 20 63 61 6c 6c 62  rg to busy callb
7ff0: 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 75  ack */.  int nBu
8000: 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  sy;             
8010: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e             /* In
8020: 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68 20 65  cremented with e
8030: 61 63 68 20 62 75 73 79 20 63 61 6c 6c 20 2a 2f  ach busy call */
8040: 0a 20 20 75 38 20 62 45 78 74 72 61 46 69 6c 65  .  u8 bExtraFile
8050: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
8060: 20 20 20 20 20 2f 2a 20 49 6e 63 6c 75 64 65 20       /* Include 
8070: 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 61 73 20  sqlite3_file as 
8080: 63 61 6c 6c 62 61 63 6b 20 61 72 67 20 2a 2f 0a  callback arg */.
8090: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 4e 61 6d 65 20 6f  };../*.** Name o
80a0: 66 20 74 68 65 20 6d 61 73 74 65 72 20 64 61 74  f the master dat
80b0: 61 62 61 73 65 20 74 61 62 6c 65 2e 20 20 54 68  abase table.  Th
80c0: 65 20 6d 61 73 74 65 72 20 64 61 74 61 62 61 73  e master databas
80d0: 65 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20 61 20  e table.** is a 
80e0: 73 70 65 63 69 61 6c 20 74 61 62 6c 65 20 74 68  special table th
80f0: 61 74 20 68 6f 6c 64 73 20 74 68 65 20 6e 61 6d  at holds the nam
8100: 65 73 20 61 6e 64 20 61 74 74 72 69 62 75 74 65  es and attribute
8110: 73 20 6f 66 20 61 6c 6c 0a 2a 2a 20 75 73 65 72  s of all.** user
8120: 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e 64 69   tables and indi
8130: 63 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ces..*/.#define 
8140: 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20 20 20 20  MASTER_NAME     
8150: 20 20 22 73 71 6c 69 74 65 5f 6d 61 73 74 65 72    "sqlite_master
8160: 22 0a 23 64 65 66 69 6e 65 20 54 45 4d 50 5f 4d  ".#define TEMP_M
8170: 41 53 54 45 52 5f 4e 41 4d 45 20 20 22 73 71 6c  ASTER_NAME  "sql
8180: 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22  ite_temp_master"
8190: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f 74  ../*.** The root
81a0: 2d 70 61 67 65 20 6f 66 20 74 68 65 20 6d 61 73  -page of the mas
81b0: 74 65 72 20 64 61 74 61 62 61 73 65 20 74 61 62  ter database tab
81c0: 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d  le..*/.#define M
81d0: 41 53 54 45 52 5f 52 4f 4f 54 20 20 20 20 20 20  ASTER_ROOT      
81e0: 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 61   1../*.** The na
81f0: 6d 65 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61  me of the schema
8200: 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69   table..*/.#defi
8210: 6e 65 20 53 43 48 45 4d 41 5f 54 41 42 4c 45 28  ne SCHEMA_TABLE(
8220: 78 29 20 20 28 28 21 4f 4d 49 54 5f 54 45 4d 50  x)  ((!OMIT_TEMP
8230: 44 42 29 26 26 28 78 3d 3d 31 29 3f 54 45 4d 50  DB)&&(x==1)?TEMP
8240: 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 3a 4d 41 53  _MASTER_NAME:MAS
8250: 54 45 52 5f 4e 41 4d 45 29 0a 0a 2f 2a 0a 2a 2a  TER_NAME)../*.**
8260: 20 41 20 63 6f 6e 76 65 6e 69 65 6e 63 65 20 6d   A convenience m
8270: 61 63 72 6f 20 74 68 61 74 20 72 65 74 75 72 6e  acro that return
8280: 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
8290: 65 6c 65 6d 65 6e 74 73 20 69 6e 0a 2a 2a 20 61  elements in.** a
82a0: 6e 20 61 72 72 61 79 2e 0a 2a 2f 0a 23 64 65 66  n array..*/.#def
82b0: 69 6e 65 20 41 72 72 61 79 53 69 7a 65 28 58 29  ine ArraySize(X)
82c0: 20 20 20 20 28 28 69 6e 74 29 28 73 69 7a 65 6f      ((int)(sizeo
82d0: 66 28 58 29 2f 73 69 7a 65 6f 66 28 58 5b 30 5d  f(X)/sizeof(X[0]
82e0: 29 29 29 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65 72  )))../*.** Deter
82f0: 6d 69 6e 65 20 69 66 20 74 68 65 20 61 72 67 75  mine if the argu
8300: 6d 65 6e 74 20 69 73 20 61 20 70 6f 77 65 72 20  ment is a power 
8310: 6f 66 20 74 77 6f 0a 2a 2f 0a 23 64 65 66 69 6e  of two.*/.#defin
8320: 65 20 49 73 50 6f 77 65 72 4f 66 54 77 6f 28 58  e IsPowerOfTwo(X
8330: 29 20 28 28 28 58 29 26 28 28 58 29 2d 31 29 29  ) (((X)&((X)-1))
8340: 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ==0)../*.** The 
8350: 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 6c 75 65 20  following value 
8360: 61 73 20 61 20 64 65 73 74 72 75 63 74 6f 72 20  as a destructor 
8370: 6d 65 61 6e 73 20 74 6f 20 75 73 65 20 73 71 6c  means to use sql
8380: 69 74 65 33 44 62 46 72 65 65 28 29 2e 0a 2a 2a  ite3DbFree()..**
8390: 20 54 68 65 20 73 71 6c 69 74 65 33 44 62 46 72   The sqlite3DbFr
83a0: 65 65 28 29 20 72 6f 75 74 69 6e 65 20 72 65 71  ee() routine req
83b0: 75 69 72 65 73 20 74 77 6f 20 70 61 72 61 6d 65  uires two parame
83c0: 74 65 72 73 20 69 6e 73 74 65 61 64 20 6f 66 20  ters instead of 
83d0: 74 68 65 0a 2a 2a 20 6f 6e 65 20 70 61 72 61 6d  the.** one param
83e0: 65 74 65 72 20 74 68 61 74 20 64 65 73 74 72 75  eter that destru
83f0: 63 74 6f 72 73 20 6e 6f 72 6d 61 6c 6c 79 20 77  ctors normally w
8400: 61 6e 74 2e 20 20 53 6f 20 77 65 20 68 61 76 65  ant.  So we have
8410: 20 74 6f 20 69 6e 74 72 6f 64 75 63 65 0a 2a 2a   to introduce.**
8420: 20 74 68 69 73 20 6d 61 67 69 63 20 76 61 6c 75   this magic valu
8430: 65 20 74 68 61 74 20 74 68 65 20 63 6f 64 65 20  e that the code 
8440: 6b 6e 6f 77 73 20 74 6f 20 68 61 6e 64 6c 65 20  knows to handle 
8450: 64 69 66 66 65 72 65 6e 74 6c 79 2e 20 20 41 6e  differently.  An
8460: 79 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 77 69 6c  y.** pointer wil
8470: 6c 20 77 6f 72 6b 20 68 65 72 65 20 61 73 20 6c  l work here as l
8480: 6f 6e 67 20 61 73 20 69 74 20 69 73 20 64 69 73  ong as it is dis
8490: 74 69 6e 63 74 20 66 72 6f 6d 20 53 51 4c 49 54  tinct from SQLIT
84a0: 45 5f 53 54 41 54 49 43 0a 2a 2a 20 61 6e 64 20  E_STATIC.** and 
84b0: 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54  SQLITE_TRANSIENT
84c0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
84d0: 49 54 45 5f 44 59 4e 41 4d 49 43 20 20 20 28 28  ITE_DYNAMIC   ((
84e0: 73 71 6c 69 74 65 33 5f 64 65 73 74 72 75 63 74  sqlite3_destruct
84f0: 6f 72 5f 74 79 70 65 29 73 71 6c 69 74 65 33 4d  or_type)sqlite3M
8500: 61 6c 6c 6f 63 53 69 7a 65 29 0a 0a 2f 2a 0a 2a  allocSize)../*.*
8510: 2a 20 57 68 65 6e 20 53 51 4c 49 54 45 5f 4f 4d  * When SQLITE_OM
8520: 49 54 5f 57 53 44 20 69 73 20 64 65 66 69 6e 65  IT_WSD is define
8530: 64 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74  d, it means that
8540: 20 74 68 65 20 74 61 72 67 65 74 20 70 6c 61 74   the target plat
8550: 66 6f 72 6d 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74  form does.** not
8560: 20 73 75 70 70 6f 72 74 20 57 72 69 74 61 62 6c   support Writabl
8570: 65 20 53 74 61 74 69 63 20 44 61 74 61 20 28 57  e Static Data (W
8580: 53 44 29 20 73 75 63 68 20 61 73 20 67 6c 6f 62  SD) such as glob
8590: 61 6c 20 61 6e 64 20 73 74 61 74 69 63 20 76 61  al and static va
85a0: 72 69 61 62 6c 65 73 2e 0a 2a 2a 20 41 6c 6c 20  riables..** All 
85b0: 76 61 72 69 61 62 6c 65 73 20 6d 75 73 74 20 65  variables must e
85c0: 69 74 68 65 72 20 62 65 20 6f 6e 20 74 68 65 20  ither be on the 
85d0: 73 74 61 63 6b 20 6f 72 20 64 79 6e 61 6d 69 63  stack or dynamic
85e0: 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 66  ally allocated f
85f0: 72 6f 6d 0a 2a 2a 20 74 68 65 20 68 65 61 70 2e  rom.** the heap.
8600: 20 20 57 68 65 6e 20 57 53 44 20 69 73 20 75 6e    When WSD is un
8610: 73 75 70 70 6f 72 74 65 64 2c 20 74 68 65 20 76  supported, the v
8620: 61 72 69 61 62 6c 65 20 64 65 63 6c 61 72 61 74  ariable declarat
8630: 69 6f 6e 73 20 73 63 61 74 74 65 72 65 64 0a 2a  ions scattered.*
8640: 2a 20 74 68 72 6f 75 67 68 6f 75 74 20 74 68 65  * throughout the
8650: 20 53 51 4c 69 74 65 20 63 6f 64 65 20 6d 75 73   SQLite code mus
8660: 74 20 62 65 63 6f 6d 65 20 63 6f 6e 73 74 61 6e  t become constan
8670: 74 73 20 69 6e 73 74 65 61 64 2e 20 20 54 68 65  ts instead.  The
8680: 20 53 51 4c 49 54 45 5f 57 53 44 0a 2a 2a 20 6d   SQLITE_WSD.** m
8690: 61 63 72 6f 20 69 73 20 75 73 65 64 20 66 6f 72  acro is used for
86a0: 20 74 68 69 73 20 70 75 72 70 6f 73 65 2e 20 20   this purpose.  
86b0: 41 6e 64 20 69 6e 73 74 65 61 64 20 6f 66 20 72  And instead of r
86c0: 65 66 65 72 65 6e 63 69 6e 67 20 74 68 65 20 76  eferencing the v
86d0: 61 72 69 61 62 6c 65 0a 2a 2a 20 64 69 72 65 63  ariable.** direc
86e0: 74 6c 79 2c 20 77 65 20 75 73 65 20 69 74 73 20  tly, we use its 
86f0: 63 6f 6e 73 74 61 6e 74 20 61 73 20 61 20 6b 65  constant as a ke
8700: 79 20 74 6f 20 6c 6f 6f 6b 75 70 20 74 68 65 20  y to lookup the 
8710: 72 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74  run-time allocat
8720: 65 64 0a 2a 2a 20 62 75 66 66 65 72 20 74 68 61  ed.** buffer tha
8730: 74 20 68 6f 6c 64 73 20 72 65 61 6c 20 76 61 72  t holds real var
8740: 69 61 62 6c 65 2e 20 20 54 68 65 20 63 6f 6e 73  iable.  The cons
8750: 74 61 6e 74 20 69 73 20 61 6c 73 6f 20 74 68 65  tant is also the
8760: 20 69 6e 69 74 69 61 6c 69 7a 65 72 0a 2a 2a 20   initializer.** 
8770: 66 6f 72 20 74 68 65 20 72 75 6e 2d 74 69 6d 65  for the run-time
8780: 20 61 6c 6c 6f 63 61 74 65 64 20 62 75 66 66 65   allocated buffe
8790: 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20  r..**.** In the 
87a0: 75 73 75 61 6c 20 63 61 73 65 20 77 68 65 72 65  usual case where
87b0: 20 57 53 44 20 69 73 20 73 75 70 70 6f 72 74 65   WSD is supporte
87c0: 64 2c 20 74 68 65 20 53 51 4c 49 54 45 5f 57 53  d, the SQLITE_WS
87d0: 44 20 61 6e 64 20 47 4c 4f 42 41 4c 0a 2a 2a 20  D and GLOBAL.** 
87e0: 6d 61 63 72 6f 73 20 62 65 63 6f 6d 65 20 6e 6f  macros become no
87f0: 2d 6f 70 73 20 61 6e 64 20 68 61 76 65 20 7a 65  -ops and have ze
8800: 72 6f 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 69  ro performance i
8810: 6d 70 61 63 74 2e 0a 2a 2f 0a 23 69 66 64 65 66  mpact..*/.#ifdef
8820: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44   SQLITE_OMIT_WSD
8830: 0a 20 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54  .  #define SQLIT
8840: 45 5f 57 53 44 20 63 6f 6e 73 74 0a 20 20 23 64  E_WSD const.  #d
8850: 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76  efine GLOBAL(t,v
8860: 29 20 28 2a 28 74 2a 29 73 71 6c 69 74 65 33 5f  ) (*(t*)sqlite3_
8870: 77 73 64 5f 66 69 6e 64 28 28 76 6f 69 64 2a 29  wsd_find((void*)
8880: 26 28 76 29 2c 20 73 69 7a 65 6f 66 28 76 29 29  &(v), sizeof(v))
8890: 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
88a0: 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20  te3GlobalConfig 
88b0: 47 4c 4f 42 41 4c 28 73 74 72 75 63 74 20 53 71  GLOBAL(struct Sq
88c0: 6c 69 74 65 33 43 6f 6e 66 69 67 2c 20 73 71 6c  lite3Config, sql
88d0: 69 74 65 33 43 6f 6e 66 69 67 29 0a 20 20 69 6e  ite3Config).  in
88e0: 74 20 73 71 6c 69 74 65 33 5f 77 73 64 5f 69 6e  t sqlite3_wsd_in
88f0: 69 74 28 69 6e 74 20 4e 2c 20 69 6e 74 20 4a 29  it(int N, int J)
8900: 3b 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65  ;.  void *sqlite
8910: 33 5f 77 73 64 5f 66 69 6e 64 28 76 6f 69 64 20  3_wsd_find(void 
8920: 2a 4b 2c 20 69 6e 74 20 4c 29 3b 0a 23 65 6c 73  *K, int L);.#els
8930: 65 0a 20 20 23 64 65 66 69 6e 65 20 53 51 4c 49  e.  #define SQLI
8940: 54 45 5f 57 53 44 0a 20 20 23 64 65 66 69 6e 65  TE_WSD.  #define
8950: 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20 76 0a 20   GLOBAL(t,v) v. 
8960: 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
8970: 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 73 71 6c  GlobalConfig sql
8980: 69 74 65 33 43 6f 6e 66 69 67 0a 23 65 6e 64 69  ite3Config.#endi
8990: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  f../*.** The fol
89a0: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 61 72  lowing macros ar
89b0: 65 20 75 73 65 64 20 74 6f 20 73 75 70 70 72 65  e used to suppre
89c0: 73 73 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e  ss compiler warn
89d0: 69 6e 67 73 20 61 6e 64 20 74 6f 0a 2a 2a 20 6d  ings and to.** m
89e0: 61 6b 65 20 69 74 20 63 6c 65 61 72 20 74 6f 20  ake it clear to 
89f0: 68 75 6d 61 6e 20 72 65 61 64 65 72 73 20 77 68  human readers wh
8a00: 65 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61  en a function pa
8a10: 72 61 6d 65 74 65 72 20 69 73 20 64 65 6c 69 62  rameter is delib
8a20: 65 72 61 74 65 6c 79 0a 2a 2a 20 6c 65 66 74 20  erately.** left 
8a30: 75 6e 75 73 65 64 20 77 69 74 68 69 6e 20 74 68  unused within th
8a40: 65 20 62 6f 64 79 20 6f 66 20 61 20 66 75 6e 63  e body of a func
8a50: 74 69 6f 6e 2e 20 54 68 69 73 20 75 73 75 61 6c  tion. This usual
8a60: 6c 79 20 68 61 70 70 65 6e 73 20 77 68 65 6e 0a  ly happens when.
8a70: 2a 2a 20 61 20 66 75 6e 63 74 69 6f 6e 20 69 73  ** a function is
8a80: 20 63 61 6c 6c 65 64 20 76 69 61 20 61 20 66 75   called via a fu
8a90: 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 2e 20  nction pointer. 
8aa0: 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 65 0a  For example the.
8ab0: 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ** implementatio
8ac0: 6e 20 6f 66 20 61 6e 20 53 51 4c 20 61 67 67 72  n of an SQL aggr
8ad0: 65 67 61 74 65 20 73 74 65 70 20 63 61 6c 6c 62  egate step callb
8ae0: 61 63 6b 20 6d 61 79 20 6e 6f 74 20 75 73 65 20  ack may not use 
8af0: 74 68 65 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72  the.** parameter
8b00: 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 65 20   indicating the 
8b10: 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  number of argume
8b20: 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20 74 68  nts passed to th
8b30: 65 20 61 67 67 72 65 67 61 74 65 2c 0a 2a 2a 20  e aggregate,.** 
8b40: 69 66 20 69 74 20 6b 6e 6f 77 73 20 74 68 61 74  if it knows that
8b50: 20 74 68 69 73 20 69 73 20 65 6e 66 6f 72 63 65   this is enforce
8b60: 64 20 65 6c 73 65 77 68 65 72 65 2e 0a 2a 2a 0a  d elsewhere..**.
8b70: 2a 2a 20 57 68 65 6e 20 61 20 66 75 6e 63 74 69  ** When a functi
8b80: 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  on parameter is 
8b90: 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c 6c 20  not used at all 
8ba0: 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20  within the body 
8bb0: 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a  of a function,.*
8bc0: 2a 20 69 74 20 69 73 20 67 65 6e 65 72 61 6c 6c  * it is generall
8bd0: 79 20 6e 61 6d 65 64 20 22 4e 6f 74 55 73 65 64  y named "NotUsed
8be0: 22 20 6f 72 20 22 4e 6f 74 55 73 65 64 32 22 20  " or "NotUsed2" 
8bf0: 74 6f 20 6d 61 6b 65 20 74 68 69 6e 67 73 20 65  to make things e
8c00: 76 65 6e 20 63 6c 65 61 72 65 72 2e 0a 2a 2a 20  ven clearer..** 
8c10: 48 6f 77 65 76 65 72 2c 20 74 68 65 73 65 20 6d  However, these m
8c20: 61 63 72 6f 73 20 6d 61 79 20 61 6c 73 6f 20 62  acros may also b
8c30: 65 20 75 73 65 64 20 74 6f 20 73 75 70 70 72 65  e used to suppre
8c40: 73 73 20 77 61 72 6e 69 6e 67 73 20 72 65 6c 61  ss warnings rela
8c50: 74 65 64 20 74 6f 0a 2a 2a 20 70 61 72 61 6d 65  ted to.** parame
8c60: 74 65 72 73 20 74 68 61 74 20 6d 61 79 20 6f 72  ters that may or
8c70: 20 6d 61 79 20 6e 6f 74 20 62 65 20 75 73 65 64   may not be used
8c80: 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 63 6f   depending on co
8c90: 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69 6f 6e  mpilation option
8ca0: 73 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70 6c  s..** For exampl
8cb0: 65 20 74 68 6f 73 65 20 70 61 72 61 6d 65 74 65  e those paramete
8cc0: 72 73 20 6f 6e 6c 79 20 75 73 65 64 20 69 6e 20  rs only used in 
8cd0: 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65  assert() stateme
8ce0: 6e 74 73 2e 20 49 6e 20 74 68 65 73 65 0a 2a 2a  nts. In these.**
8cf0: 20 63 61 73 65 73 20 74 68 65 20 70 61 72 61 6d   cases the param
8d00: 65 74 65 72 73 20 61 72 65 20 6e 61 6d 65 64 20  eters are named 
8d10: 61 73 20 70 65 72 20 74 68 65 20 75 73 75 61 6c  as per the usual
8d20: 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a 2a 2f   conventions..*/
8d30: 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44 5f  .#define UNUSED_
8d40: 50 41 52 41 4d 45 54 45 52 28 78 29 20 28 76 6f  PARAMETER(x) (vo
8d50: 69 64 29 28 78 29 0a 23 64 65 66 69 6e 65 20 55  id)(x).#define U
8d60: 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52 32  NUSED_PARAMETER2
8d70: 28 78 2c 79 29 20 55 4e 55 53 45 44 5f 50 41 52  (x,y) UNUSED_PAR
8d80: 41 4d 45 54 45 52 28 78 29 2c 55 4e 55 53 45 44  AMETER(x),UNUSED
8d90: 5f 50 41 52 41 4d 45 54 45 52 28 79 29 0a 0a 2f  _PARAMETER(y)../
8da0: 2a 0a 2a 2a 20 46 6f 72 77 61 72 64 20 72 65 66  *.** Forward ref
8db0: 65 72 65 6e 63 65 73 20 74 6f 20 73 74 72 75 63  erences to struc
8dc0: 74 75 72 65 73 0a 2a 2f 0a 74 79 70 65 64 65 66  tures.*/.typedef
8dd0: 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 20   struct AggInfo 
8de0: 41 67 67 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66  AggInfo;.typedef
8df0: 20 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74   struct AuthCont
8e00: 65 78 74 20 41 75 74 68 43 6f 6e 74 65 78 74 3b  ext AuthContext;
8e10: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8e20: 41 75 74 6f 69 6e 63 49 6e 66 6f 20 41 75 74 6f  AutoincInfo Auto
8e30: 69 6e 63 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66  incInfo;.typedef
8e40: 20 73 74 72 75 63 74 20 42 69 74 76 65 63 20 42   struct Bitvec B
8e50: 69 74 76 65 63 3b 0a 74 79 70 65 64 65 66 20 73  itvec;.typedef s
8e60: 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 43 6f  truct CollSeq Co
8e70: 6c 6c 53 65 71 3b 0a 74 79 70 65 64 65 66 20 73  llSeq;.typedef s
8e80: 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 43 6f 6c  truct Column Col
8e90: 75 6d 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72  umn;.typedef str
8ea0: 75 63 74 20 44 62 20 44 62 3b 0a 74 79 70 65 64  uct Db Db;.typed
8eb0: 65 66 20 73 74 72 75 63 74 20 53 63 68 65 6d 61  ef struct Schema
8ec0: 20 53 63 68 65 6d 61 3b 0a 74 79 70 65 64 65 66   Schema;.typedef
8ed0: 20 73 74 72 75 63 74 20 45 78 70 72 20 45 78 70   struct Expr Exp
8ee0: 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  r;.typedef struc
8ef0: 74 20 45 78 70 72 4c 69 73 74 20 45 78 70 72 4c  t ExprList ExprL
8f00: 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ist;.typedef str
8f10: 75 63 74 20 46 4b 65 79 20 46 4b 65 79 3b 0a 74  uct FKey FKey;.t
8f20: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75  ypedef struct Fu
8f30: 6e 63 44 65 73 74 72 75 63 74 6f 72 20 46 75 6e  ncDestructor Fun
8f40: 63 44 65 73 74 72 75 63 74 6f 72 3b 0a 74 79 70  cDestructor;.typ
8f50: 65 64 65 66 20 73 74 72 75 63 74 20 46 75 6e 63  edef struct Func
8f60: 44 65 66 20 46 75 6e 63 44 65 66 3b 0a 74 79 70  Def FuncDef;.typ
8f70: 65 64 65 66 20 73 74 72 75 63 74 20 46 75 6e 63  edef struct Func
8f80: 44 65 66 48 61 73 68 20 46 75 6e 63 44 65 66 48  DefHash FuncDefH
8f90: 61 73 68 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ash;.typedef str
8fa0: 75 63 74 20 49 64 4c 69 73 74 20 49 64 4c 69 73  uct IdList IdLis
8fb0: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
8fc0: 74 20 49 6e 64 65 78 20 49 6e 64 65 78 3b 0a 74  t Index Index;.t
8fd0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 49 6e  ypedef struct In
8fe0: 64 65 78 53 61 6d 70 6c 65 20 49 6e 64 65 78 53  dexSample IndexS
8ff0: 61 6d 70 6c 65 3b 0a 74 79 70 65 64 65 66 20 73  ample;.typedef s
9000: 74 72 75 63 74 20 4b 65 79 43 6c 61 73 73 20 4b  truct KeyClass K
9010: 65 79 43 6c 61 73 73 3b 0a 74 79 70 65 64 65 66  eyClass;.typedef
9020: 20 73 74 72 75 63 74 20 4b 65 79 49 6e 66 6f 20   struct KeyInfo 
9030: 4b 65 79 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66  KeyInfo;.typedef
9040: 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64   struct Lookasid
9050: 65 20 4c 6f 6f 6b 61 73 69 64 65 3b 0a 74 79 70  e Lookaside;.typ
9060: 65 64 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b  edef struct Look
9070: 61 73 69 64 65 53 6c 6f 74 20 4c 6f 6f 6b 61 73  asideSlot Lookas
9080: 69 64 65 53 6c 6f 74 3b 0a 74 79 70 65 64 65 66  ideSlot;.typedef
9090: 20 73 74 72 75 63 74 20 4d 6f 64 75 6c 65 20 4d   struct Module M
90a0: 6f 64 75 6c 65 3b 0a 74 79 70 65 64 65 66 20 73  odule;.typedef s
90b0: 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78  truct NameContex
90c0: 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 3b 0a 74  t NameContext;.t
90d0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 50 61  ypedef struct Pa
90e0: 72 73 65 20 50 61 72 73 65 3b 0a 74 79 70 65 64  rse Parse;.typed
90f0: 65 66 20 73 74 72 75 63 74 20 50 72 65 55 70 64  ef struct PreUpd
9100: 61 74 65 20 50 72 65 55 70 64 61 74 65 3b 0a 74  ate PreUpdate;.t
9110: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 50 72  ypedef struct Pr
9120: 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 20 50 72  intfArguments Pr
9130: 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 3b 0a 74  intfArguments;.t
9140: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 52 6f  ypedef struct Ro
9150: 77 53 65 74 20 52 6f 77 53 65 74 3b 0a 74 79 70  wSet RowSet;.typ
9160: 65 64 65 66 20 73 74 72 75 63 74 20 53 61 76 65  edef struct Save
9170: 70 6f 69 6e 74 20 53 61 76 65 70 6f 69 6e 74 3b  point Savepoint;
9180: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9190: 53 65 6c 65 63 74 20 53 65 6c 65 63 74 3b 0a 74  Select Select;.t
91a0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 51  ypedef struct SQ
91b0: 4c 69 74 65 54 68 72 65 61 64 20 53 51 4c 69 74  LiteThread SQLit
91c0: 65 54 68 72 65 61 64 3b 0a 74 79 70 65 64 65 66  eThread;.typedef
91d0: 20 73 74 72 75 63 74 20 53 65 6c 65 63 74 44 65   struct SelectDe
91e0: 73 74 20 53 65 6c 65 63 74 44 65 73 74 3b 0a 74  st SelectDest;.t
91f0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 72  ypedef struct Sr
9200: 63 4c 69 73 74 20 53 72 63 4c 69 73 74 3b 0a 74  cList SrcList;.t
9210: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 73 71  ypedef struct sq
9220: 6c 69 74 65 33 5f 73 74 72 20 53 74 72 41 63 63  lite3_str StrAcc
9230: 75 6d 3b 20 2f 2a 20 49 6e 74 65 72 6e 61 6c 20  um; /* Internal 
9240: 61 6c 69 61 73 20 66 6f 72 20 73 71 6c 69 74 65  alias for sqlite
9250: 33 5f 73 74 72 20 2a 2f 0a 74 79 70 65 64 65 66  3_str */.typedef
9260: 20 73 74 72 75 63 74 20 54 61 62 6c 65 20 54 61   struct Table Ta
9270: 62 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ble;.typedef str
9280: 75 63 74 20 54 61 62 6c 65 4c 6f 63 6b 20 54 61  uct TableLock Ta
9290: 62 6c 65 4c 6f 63 6b 3b 0a 74 79 70 65 64 65 66  bleLock;.typedef
92a0: 20 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 54 6f   struct Token To
92b0: 6b 65 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ken;.typedef str
92c0: 75 63 74 20 54 72 65 65 56 69 65 77 20 54 72 65  uct TreeView Tre
92d0: 65 56 69 65 77 3b 0a 74 79 70 65 64 65 66 20 73  eView;.typedef s
92e0: 74 72 75 63 74 20 54 72 69 67 67 65 72 20 54 72  truct Trigger Tr
92f0: 69 67 67 65 72 3b 0a 74 79 70 65 64 65 66 20 73  igger;.typedef s
9300: 74 72 75 63 74 20 54 72 69 67 67 65 72 50 72 67  truct TriggerPrg
9310: 20 54 72 69 67 67 65 72 50 72 67 3b 0a 74 79 70   TriggerPrg;.typ
9320: 65 64 65 66 20 73 74 72 75 63 74 20 54 72 69 67  edef struct Trig
9330: 67 65 72 53 74 65 70 20 54 72 69 67 67 65 72 53  gerStep TriggerS
9340: 74 65 70 3b 0a 74 79 70 65 64 65 66 20 73 74 72  tep;.typedef str
9350: 75 63 74 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  uct UnpackedReco
9360: 72 64 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  rd UnpackedRecor
9370: 64 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  d;.typedef struc
9380: 74 20 55 70 73 65 72 74 20 55 70 73 65 72 74 3b  t Upsert Upsert;
9390: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
93a0: 56 54 61 62 6c 65 20 56 54 61 62 6c 65 3b 0a 74  VTable VTable;.t
93b0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 56 74  ypedef struct Vt
93c0: 61 62 43 74 78 20 56 74 61 62 43 74 78 3b 0a 74  abCtx VtabCtx;.t
93d0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 57 61  ypedef struct Wa
93e0: 6c 6b 65 72 20 57 61 6c 6b 65 72 3b 0a 74 79 70  lker Walker;.typ
93f0: 65 64 65 66 20 73 74 72 75 63 74 20 57 68 65 72  edef struct Wher
9400: 65 49 6e 66 6f 20 57 68 65 72 65 49 6e 66 6f 3b  eInfo WhereInfo;
9410: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9420: 57 69 6e 64 6f 77 20 57 69 6e 64 6f 77 3b 0a 74  Window Window;.t
9430: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 57 69  ypedef struct Wi
9440: 74 68 20 57 69 74 68 3b 0a 0a 0a 2f 2a 0a 2a 2a  th With;.../*.**
9450: 20 54 68 65 20 62 69 74 6d 61 73 6b 20 64 61 74   The bitmask dat
9460: 61 74 79 70 65 20 64 65 66 69 6e 65 64 20 62 65  atype defined be
9470: 6c 6f 77 20 69 73 20 75 73 65 64 20 66 6f 72 20  low is used for 
9480: 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61  various optimiza
9490: 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 43 68 61  tions..**.** Cha
94a0: 6e 67 69 6e 67 20 74 68 69 73 20 66 72 6f 6d 20  nging this from 
94b0: 61 20 36 34 2d 62 69 74 20 74 6f 20 61 20 33 32  a 64-bit to a 32
94c0: 2d 62 69 74 20 74 79 70 65 20 6c 69 6d 69 74 73  -bit type limits
94d0: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a 2a   the number of.*
94e0: 2a 20 74 61 62 6c 65 73 20 69 6e 20 61 20 6a 6f  * tables in a jo
94f0: 69 6e 20 74 6f 20 33 32 20 69 6e 73 74 65 61 64  in to 32 instead
9500: 20 6f 66 20 36 34 2e 20 20 42 75 74 20 69 74 20   of 64.  But it 
9510: 61 6c 73 6f 20 72 65 64 75 63 65 73 20 74 68 65  also reduces the
9520: 20 73 69 7a 65 0a 2a 2a 20 6f 66 20 74 68 65 20   size.** of the 
9530: 6c 69 62 72 61 72 79 20 62 79 20 37 33 38 20 62  library by 738 b
9540: 79 74 65 73 20 6f 6e 20 69 78 38 36 2e 0a 2a 2f  ytes on ix86..*/
9550: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 42  .#ifdef SQLITE_B
9560: 49 54 4d 41 53 4b 5f 54 59 50 45 0a 20 20 74 79  ITMASK_TYPE.  ty
9570: 70 65 64 65 66 20 53 51 4c 49 54 45 5f 42 49 54  pedef SQLITE_BIT
9580: 4d 41 53 4b 5f 54 59 50 45 20 42 69 74 6d 61 73  MASK_TYPE Bitmas
9590: 6b 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70 65 64  k;.#else.  typed
95a0: 65 66 20 75 36 34 20 42 69 74 6d 61 73 6b 3b 0a  ef u64 Bitmask;.
95b0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
95c0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73  e number of bits
95d0: 20 69 6e 20 61 20 42 69 74 6d 61 73 6b 2e 20 20   in a Bitmask.  
95e0: 22 42 4d 53 22 20 6d 65 61 6e 73 20 22 42 69 74  "BMS" means "Bit
95f0: 4d 61 73 6b 20 53 69 7a 65 22 2e 0a 2a 2f 0a 23  Mask Size"..*/.#
9600: 64 65 66 69 6e 65 20 42 4d 53 20 20 28 28 69 6e  define BMS  ((in
9610: 74 29 28 73 69 7a 65 6f 66 28 42 69 74 6d 61 73  t)(sizeof(Bitmas
9620: 6b 29 2a 38 29 29 0a 0a 2f 2a 0a 2a 2a 20 41 20  k)*8))../*.** A 
9630: 62 69 74 20 69 6e 20 61 20 42 69 74 6d 61 73 6b  bit in a Bitmask
9640: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 4b  .*/.#define MASK
9650: 42 49 54 28 6e 29 20 20 20 28 28 28 42 69 74 6d  BIT(n)   (((Bitm
9660: 61 73 6b 29 31 29 3c 3c 28 6e 29 29 0a 23 64 65  ask)1)<<(n)).#de
9670: 66 69 6e 65 20 4d 41 53 4b 42 49 54 33 32 28 6e  fine MASKBIT32(n
9680: 29 20 28 28 28 75 6e 73 69 67 6e 65 64 20 69 6e  ) (((unsigned in
9690: 74 29 31 29 3c 3c 28 6e 29 29 0a 23 64 65 66 69  t)1)<<(n)).#defi
96a0: 6e 65 20 41 4c 4c 42 49 54 53 20 20 20 20 20 20  ne ALLBITS      
96b0: 28 28 42 69 74 6d 61 73 6b 29 2d 31 29 0a 0a 2f  ((Bitmask)-1)../
96c0: 2a 20 41 20 56 4c 69 73 74 20 6f 62 6a 65 63 74  * A VList object
96d0: 20 72 65 63 6f 72 64 73 20 61 20 6d 61 70 70 69   records a mappi
96e0: 6e 67 20 62 65 74 77 65 65 6e 20 70 61 72 61 6d  ng between param
96f0: 65 74 65 72 73 2f 76 61 72 69 61 62 6c 65 73 2f  eters/variables/
9700: 77 69 6c 64 63 61 72 64 73 0a 2a 2a 20 69 6e 20  wildcards.** in 
9710: 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  the SQL statemen
9720: 74 20 28 73 75 63 68 20 61 73 20 24 61 62 63 2c  t (such as $abc,
9730: 20 40 70 71 72 2c 20 6f 72 20 3a 78 79 7a 29 20   @pqr, or :xyz) 
9740: 61 6e 64 20 74 68 65 20 69 6e 74 65 67 65 72 0a  and the integer.
9750: 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e 75 6d 62  ** variable numb
9760: 65 72 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  er associated wi
9770: 74 68 20 74 68 61 74 20 70 61 72 61 6d 65 74 65  th that paramete
9780: 72 2e 20 20 53 65 65 20 74 68 65 20 66 6f 72 6d  r.  See the form
9790: 61 74 20 64 65 73 63 72 69 70 74 69 6f 6e 0a 2a  at description.*
97a0: 2a 20 6f 6e 20 74 68 65 20 73 71 6c 69 74 65 33  * on the sqlite3
97b0: 56 4c 69 73 74 41 64 64 28 29 20 72 6f 75 74 69  VListAdd() routi
97c0: 6e 65 20 66 6f 72 20 6d 6f 72 65 20 69 6e 66 6f  ne for more info
97d0: 72 6d 61 74 69 6f 6e 2e 20 20 41 20 56 4c 69 73  rmation.  A VLis
97e0: 74 20 69 73 20 72 65 61 6c 6c 79 0a 2a 2a 20 6a  t is really.** j
97f0: 75 73 74 20 61 6e 20 61 72 72 61 79 20 6f 66 20  ust an array of 
9800: 69 6e 74 65 67 65 72 73 2e 0a 2a 2f 0a 74 79 70  integers..*/.typ
9810: 65 64 65 66 20 69 6e 74 20 56 4c 69 73 74 3b 0a  edef int VList;.
9820: 0a 2f 2a 0a 2a 2a 20 44 65 66 65 72 20 73 6f 75  ./*.** Defer sou
9830: 72 63 69 6e 67 20 76 64 62 65 2e 68 20 61 6e 64  rcing vdbe.h and
9840: 20 62 74 72 65 65 2e 68 20 75 6e 74 69 6c 20 61   btree.h until a
9850: 66 74 65 72 20 74 68 65 20 22 75 38 22 20 61 6e  fter the "u8" an
9860: 64 0a 2a 2a 20 22 42 75 73 79 48 61 6e 64 6c 65  d.** "BusyHandle
9870: 72 22 20 74 79 70 65 64 65 66 73 2e 20 76 64 62  r" typedefs. vdb
9880: 65 2e 68 20 61 6c 73 6f 20 72 65 71 75 69 72 65  e.h also require
9890: 73 20 61 20 66 65 77 20 6f 66 20 74 68 65 20 6f  s a few of the o
98a0: 70 61 71 75 65 0a 2a 2a 20 70 6f 69 6e 74 65 72  paque.** pointer
98b0: 20 74 79 70 65 73 20 28 69 2e 65 2e 20 46 75 6e   types (i.e. Fun
98c0: 63 44 65 66 29 20 64 65 66 69 6e 65 64 20 61 62  cDef) defined ab
98d0: 6f 76 65 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65  ove..*/.#include
98e0: 20 22 62 74 72 65 65 2e 68 22 0a 23 69 6e 63 6c   "btree.h".#incl
98f0: 75 64 65 20 22 76 64 62 65 2e 68 22 0a 23 69 6e  ude "vdbe.h".#in
9900: 63 6c 75 64 65 20 22 70 61 67 65 72 2e 68 22 0a  clude "pager.h".
9910: 23 69 6e 63 6c 75 64 65 20 22 70 63 61 63 68 65  #include "pcache
9920: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 6f 73  .h".#include "os
9930: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 6d 75  .h".#include "mu
9940: 74 65 78 2e 68 22 0a 0a 2f 2a 20 54 68 65 20 53  tex.h"../* The S
9950: 51 4c 49 54 45 5f 45 58 54 52 41 5f 44 55 52 41  QLITE_EXTRA_DURA
9960: 42 4c 45 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  BLE compile-time
9970: 20 6f 70 74 69 6f 6e 20 75 73 65 64 20 74 6f 20   option used to 
9980: 73 65 74 20 74 68 65 20 64 65 66 61 75 6c 74 0a  set the default.
9990: 2a 2a 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 73  ** synchronous s
99a0: 65 74 74 69 6e 67 20 74 6f 20 45 58 54 52 41 2e  etting to EXTRA.
99b0: 20 20 49 74 20 69 73 20 6e 6f 20 6c 6f 6e 67 65    It is no longe
99c0: 72 20 73 75 70 70 6f 72 74 65 64 2e 0a 2a 2f 0a  r supported..*/.
99d0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 58  #ifdef SQLITE_EX
99e0: 54 52 41 5f 44 55 52 41 42 4c 45 0a 23 20 77 61  TRA_DURABLE.# wa
99f0: 72 6e 69 6e 67 20 55 73 65 20 53 51 4c 49 54 45  rning Use SQLITE
9a00: 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f  _DEFAULT_SYNCHRO
9a10: 4e 4f 55 53 3d 33 20 69 6e 73 74 65 61 64 20 6f  NOUS=3 instead o
9a20: 66 20 53 51 4c 49 54 45 5f 45 58 54 52 41 5f 44  f SQLITE_EXTRA_D
9a30: 55 52 41 42 4c 45 0a 23 20 64 65 66 69 6e 65 20  URABLE.# define 
9a40: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53  SQLITE_DEFAULT_S
9a50: 59 4e 43 48 52 4f 4e 4f 55 53 20 33 0a 23 65 6e  YNCHRONOUS 3.#en
9a60: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 61 75  dif../*.** Defau
9a70: 6c 74 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 6c  lt synchronous l
9a80: 65 76 65 6c 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74  evels..**.** Not
9a90: 65 20 74 68 61 74 20 28 66 6f 72 20 68 69 73 74  e that (for hist
9aa0: 6f 72 63 61 6c 20 72 65 61 73 6f 6e 73 29 20 74  orcal reasons) t
9ab0: 68 65 20 50 41 47 45 52 5f 53 59 4e 43 48 52 4f  he PAGER_SYNCHRO
9ac0: 4e 4f 55 53 5f 2a 20 6d 61 63 72 6f 73 20 64 69  NOUS_* macros di
9ad0: 66 66 65 72 0a 2a 2a 20 66 72 6f 6d 20 74 68 65  ffer.** from the
9ae0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
9af0: 53 59 4e 43 48 52 4f 4e 4f 55 53 20 76 61 6c 75  SYNCHRONOUS valu
9b00: 65 20 62 79 20 31 2e 0a 2a 2a 0a 2a 2a 20 20 20  e by 1..**.**   
9b10: 20 20 20 20 20 20 20 20 50 41 47 45 52 5f 53 59          PAGER_SY
9b20: 4e 43 48 52 4f 4e 4f 55 53 20 20 20 20 20 20 20  NCHRONOUS       
9b30: 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e  DEFAULT_SYNCHRON
9b40: 4f 55 53 0a 2a 2a 20 20 20 4f 46 46 20 20 20 20  OUS.**   OFF    
9b50: 20 20 20 20 20 20 20 31 20 20 20 20 20 20 20 20         1        
9b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b70: 20 30 0a 2a 2a 20 20 20 4e 4f 52 4d 41 4c 20 20   0.**   NORMAL  
9b80: 20 20 20 20 20 20 32 20 20 20 20 20 20 20 20 20        2         
9b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9ba0: 31 0a 2a 2a 20 20 20 46 55 4c 4c 20 20 20 20 20  1.**   FULL     
9bb0: 20 20 20 20 20 33 20 20 20 20 20 20 20 20 20 20       3          
9bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 32                 2
9bd0: 0a 2a 2a 20 20 20 45 58 54 52 41 20 20 20 20 20  .**   EXTRA     
9be0: 20 20 20 20 34 20 20 20 20 20 20 20 20 20 20 20      4           
9bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 33 0a                3.
9c00: 2a 2a 0a 2a 2a 20 54 68 65 20 22 50 52 41 47 4d  **.** The "PRAGM
9c10: 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 22 20 73  A synchronous" s
9c20: 74 61 74 65 6d 65 6e 74 20 61 6c 73 6f 20 75 73  tatement also us
9c30: 65 73 20 74 68 65 20 7a 65 72 6f 2d 62 61 73 65  es the zero-base
9c40: 64 20 6e 75 6d 62 65 72 73 2e 0a 2a 2a 20 49 6e  d numbers..** In
9c50: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
9c60: 65 20 7a 65 72 6f 2d 62 61 73 65 64 20 6e 75 6d  e zero-based num
9c70: 62 65 72 73 20 61 72 65 20 75 73 65 64 20 66 6f  bers are used fo
9c80: 72 20 61 6c 6c 20 65 78 74 65 72 6e 61 6c 20 69  r all external i
9c90: 6e 74 65 72 66 61 63 65 73 0a 2a 2a 20 61 6e 64  nterfaces.** and
9ca0: 20 74 68 65 20 6f 6e 65 2d 62 61 73 65 64 20 76   the one-based v
9cb0: 61 6c 75 65 73 20 61 72 65 20 75 73 65 64 20 69  alues are used i
9cc0: 6e 74 65 72 6e 61 6c 6c 79 2e 0a 2a 2f 0a 23 69  nternally..*/.#i
9cd0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46  fndef SQLITE_DEF
9ce0: 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53  AULT_SYNCHRONOUS
9cf0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
9d00: 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f  _DEFAULT_SYNCHRO
9d10: 4e 4f 55 53 20 32 0a 23 65 6e 64 69 66 0a 23 69  NOUS 2.#endif.#i
9d20: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46  fndef SQLITE_DEF
9d30: 41 55 4c 54 5f 57 41 4c 5f 53 59 4e 43 48 52 4f  AULT_WAL_SYNCHRO
9d40: 4e 4f 55 53 0a 23 20 64 65 66 69 6e 65 20 53 51  NOUS.# define SQ
9d50: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 41 4c  LITE_DEFAULT_WAL
9d60: 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 53 51 4c  _SYNCHRONOUS SQL
9d70: 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43  ITE_DEFAULT_SYNC
9d80: 48 52 4f 4e 4f 55 53 0a 23 65 6e 64 69 66 0a 0a  HRONOUS.#endif..
9d90: 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62  /*.** Each datab
9da0: 61 73 65 20 66 69 6c 65 20 74 6f 20 62 65 20 61  ase file to be a
9db0: 63 63 65 73 73 65 64 20 62 79 20 74 68 65 20 73  ccessed by the s
9dc0: 79 73 74 65 6d 20 69 73 20 61 6e 20 69 6e 73 74  ystem is an inst
9dd0: 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 65 20 66  ance.** of the f
9de0: 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
9df0: 72 65 2e 20 20 54 68 65 72 65 20 61 72 65 20 6e  re.  There are n
9e00: 6f 72 6d 61 6c 6c 79 20 74 77 6f 20 6f 66 20 74  ormally two of t
9e10: 68 65 73 65 20 73 74 72 75 63 74 75 72 65 73 0a  hese structures.
9e20: 2a 2a 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65  ** in the sqlite
9e30: 2e 61 44 62 5b 5d 20 61 72 72 61 79 2e 20 20 61  .aDb[] array.  a
9e40: 44 62 5b 30 5d 20 69 73 20 74 68 65 20 6d 61 69  Db[0] is the mai
9e50: 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
9e60: 61 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d 20 69 73  and.** aDb[1] is
9e70: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
9e80: 6c 65 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20  le used to hold 
9e90: 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73  temporary tables
9ea0: 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a  .  Additional.**
9eb0: 20 64 61 74 61 62 61 73 65 73 20 6d 61 79 20 62   databases may b
9ec0: 65 20 61 74 74 61 63 68 65 64 2e 0a 2a 2f 0a 73  e attached..*/.s
9ed0: 74 72 75 63 74 20 44 62 20 7b 0a 20 20 63 68 61  truct Db {.  cha
9ee0: 72 20 2a 7a 44 62 53 4e 61 6d 65 3b 20 20 20 20  r *zDbSName;    
9ef0: 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69    /* Name of thi
9f00: 73 20 64 61 74 61 62 61 73 65 2e 20 28 73 63 68  s database. (sch
9f10: 65 6d 61 20 6e 61 6d 65 2c 20 6e 6f 74 20 66 69  ema name, not fi
9f20: 6c 65 6e 61 6d 65 29 20 2a 2f 0a 20 20 42 74 72  lename) */.  Btr
9f30: 65 65 20 2a 70 42 74 3b 20 20 20 20 20 20 20 20  ee *pBt;        
9f40: 20 20 2f 2a 20 54 68 65 20 42 2a 54 72 65 65 20    /* The B*Tree 
9f50: 73 74 72 75 63 74 75 72 65 20 66 6f 72 20 74 68  structure for th
9f60: 69 73 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  is database file
9f70: 20 2a 2f 0a 20 20 75 38 20 73 61 66 65 74 79 5f   */.  u8 safety_
9f80: 6c 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20 48 6f  level;     /* Ho
9f90: 77 20 61 67 67 72 65 73 73 69 76 65 20 61 74 20  w aggressive at 
9fa0: 73 79 6e 63 69 6e 67 20 64 61 74 61 20 74 6f 20  syncing data to 
9fb0: 64 69 73 6b 20 2a 2f 0a 20 20 75 38 20 62 53 79  disk */.  u8 bSy
9fc0: 6e 63 53 65 74 3b 20 20 20 20 20 20 20 20 20 2f  ncSet;         /
9fd0: 2a 20 54 72 75 65 20 69 66 20 22 50 52 41 47 4d  * True if "PRAGM
9fe0: 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3d 4e 22  A synchronous=N"
9ff0: 20 68 61 73 20 62 65 65 6e 20 72 75 6e 20 2a 2f   has been run */
a000: 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65  .  Schema *pSche
a010: 6d 61 3b 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74  ma;     /* Point
a020: 65 72 20 74 6f 20 64 61 74 61 62 61 73 65 20 73  er to database s
a030: 63 68 65 6d 61 20 28 70 6f 73 73 69 62 6c 79 20  chema (possibly 
a040: 73 68 61 72 65 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f  shared) */.};../
a050: 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
a060: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
a070: 67 20 73 74 72 75 63 74 75 72 65 20 73 74 6f 72  g structure stor
a080: 65 73 20 61 20 64 61 74 61 62 61 73 65 20 73 63  es a database sc
a090: 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74  hema..**.** Most
a0a0: 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 20   Schema objects 
a0b0: 61 72 65 20 61 73 73 6f 63 69 61 74 65 64 20 77  are associated w
a0c0: 69 74 68 20 61 20 42 74 72 65 65 2e 20 20 54 68  ith a Btree.  Th
a0d0: 65 20 65 78 63 65 70 74 69 6f 6e 20 69 73 0a 2a  e exception is.*
a0e0: 2a 20 74 68 65 20 53 63 68 65 6d 61 20 66 6f 72  * the Schema for
a0f0: 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61   the TEMP databa
a100: 65 73 20 28 73 71 6c 69 74 65 33 2e 61 44 62 5b  es (sqlite3.aDb[
a110: 31 5d 29 20 77 68 69 63 68 20 69 73 20 66 72 65  1]) which is fre
a120: 65 2d 73 74 61 6e 64 69 6e 67 2e 0a 2a 2a 20 49  e-standing..** I
a130: 6e 20 73 68 61 72 65 64 20 63 61 63 68 65 20 6d  n shared cache m
a140: 6f 64 65 2c 20 61 20 73 69 6e 67 6c 65 20 53 63  ode, a single Sc
a150: 68 65 6d 61 20 6f 62 6a 65 63 74 20 63 61 6e 20  hema object can 
a160: 62 65 20 73 68 61 72 65 64 20 62 79 20 6d 75 6c  be shared by mul
a170: 74 69 70 6c 65 0a 2a 2a 20 42 74 72 65 65 73 20  tiple.** Btrees 
a180: 74 68 61 74 20 72 65 66 65 72 20 74 6f 20 74 68  that refer to th
a190: 65 20 73 61 6d 65 20 75 6e 64 65 72 6c 79 69 6e  e same underlyin
a1a0: 67 20 42 74 53 68 61 72 65 64 20 6f 62 6a 65 63  g BtShared objec
a1b0: 74 2e 0a 2a 2a 0a 2a 2a 20 53 63 68 65 6d 61 20  t..**.** Schema 
a1c0: 6f 62 6a 65 63 74 73 20 61 72 65 20 61 75 74 6f  objects are auto
a1d0: 6d 61 74 69 63 61 6c 6c 79 20 64 65 61 6c 6c 6f  matically deallo
a1e0: 63 61 74 65 64 20 77 68 65 6e 20 74 68 65 20 6c  cated when the l
a1f0: 61 73 74 20 42 74 72 65 65 20 74 68 61 74 0a 2a  ast Btree that.*
a200: 2a 20 72 65 66 65 72 65 6e 63 65 73 20 74 68 65  * references the
a210: 6d 20 69 73 20 64 65 73 74 72 6f 79 65 64 2e 20  m is destroyed. 
a220: 20 20 54 68 65 20 54 45 4d 50 20 53 63 68 65 6d    The TEMP Schem
a230: 61 20 69 73 20 6d 61 6e 75 61 6c 6c 79 20 66 72  a is manually fr
a240: 65 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65  eed by.** sqlite
a250: 33 5f 63 6c 6f 73 65 28 29 2e 0a 2a 0a 2a 2a 20  3_close()..*.** 
a260: 41 20 74 68 72 65 61 64 20 6d 75 73 74 20 62 65  A thread must be
a270: 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65 78   holding a mutex
a280: 20 6f 6e 20 74 68 65 20 63 6f 72 72 65 73 70 6f   on the correspo
a290: 6e 64 69 6e 67 20 42 74 72 65 65 20 69 6e 20 6f  nding Btree in o
a2a0: 72 64 65 72 0a 2a 2a 20 74 6f 20 61 63 63 65 73  rder.** to acces
a2b0: 73 20 53 63 68 65 6d 61 20 63 6f 6e 74 65 6e 74  s Schema content
a2c0: 2e 20 20 54 68 69 73 20 69 6d 70 6c 69 65 73 20  .  This implies 
a2d0: 74 68 61 74 20 74 68 65 20 74 68 72 65 61 64 20  that the thread 
a2e0: 6d 75 73 74 20 61 6c 73 6f 20 62 65 0a 2a 2a 20  must also be.** 
a2f0: 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65 78 20  holding a mutex 
a300: 6f 6e 20 74 68 65 20 73 71 6c 69 74 65 33 20 63  on the sqlite3 c
a310: 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f 69 6e 74 65  onnection pointe
a320: 72 20 74 68 61 74 20 6f 77 6e 73 20 74 68 65 20  r that owns the 
a330: 42 74 72 65 65 2e 0a 2a 2a 20 46 6f 72 20 61 20  Btree..** For a 
a340: 54 45 4d 50 20 53 63 68 65 6d 61 2c 20 6f 6e 6c  TEMP Schema, onl
a350: 79 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  y the connection
a360: 20 6d 75 74 65 78 20 69 73 20 72 65 71 75 69 72   mutex is requir
a370: 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 63  ed..*/.struct Sc
a380: 68 65 6d 61 20 7b 0a 20 20 69 6e 74 20 73 63 68  hema {.  int sch
a390: 65 6d 61 5f 63 6f 6f 6b 69 65 3b 20 20 20 2f 2a  ema_cookie;   /*
a3a0: 20 44 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   Database schema
a3b0: 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20   version number 
a3c0: 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20 2a 2f  for this file */
a3d0: 0a 20 20 69 6e 74 20 69 47 65 6e 65 72 61 74 69  .  int iGenerati
a3e0: 6f 6e 3b 20 20 20 20 20 2f 2a 20 47 65 6e 65 72  on;     /* Gener
a3f0: 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 2e 20 20  ation counter.  
a400: 49 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68  Incremented with
a410: 20 65 61 63 68 20 63 68 61 6e 67 65 20 2a 2f 0a   each change */.
a420: 20 20 48 61 73 68 20 74 62 6c 48 61 73 68 3b 20    Hash tblHash; 
a430: 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 74 61         /* All ta
a440: 62 6c 65 73 20 69 6e 64 65 78 65 64 20 62 79 20  bles indexed by 
a450: 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 69  name */.  Hash i
a460: 64 78 48 61 73 68 3b 20 20 20 20 20 20 20 20 2f  dxHash;        /
a470: 2a 20 41 6c 6c 20 28 6e 61 6d 65 64 29 20 69 6e  * All (named) in
a480: 64 69 63 65 73 20 69 6e 64 65 78 65 64 20 62 79  dices indexed by
a490: 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20   name */.  Hash 
a4a0: 74 72 69 67 48 61 73 68 3b 20 20 20 20 20 20 20  trigHash;       
a4b0: 2f 2a 20 41 6c 6c 20 74 72 69 67 67 65 72 73 20  /* All triggers 
a4c0: 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20  indexed by name 
a4d0: 2a 2f 0a 20 20 48 61 73 68 20 66 6b 65 79 48 61  */.  Hash fkeyHa
a4e0: 73 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c  sh;       /* All
a4f0: 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 62 79   foreign keys by
a500: 20 72 65 66 65 72 65 6e 63 65 64 20 74 61 62 6c   referenced tabl
a510: 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 61 62 6c  e name */.  Tabl
a520: 65 20 2a 70 53 65 71 54 61 62 3b 20 20 20 20 20  e *pSeqTab;     
a530: 20 2f 2a 20 54 68 65 20 73 71 6c 69 74 65 5f 73   /* The sqlite_s
a540: 65 71 75 65 6e 63 65 20 74 61 62 6c 65 20 75 73  equence table us
a550: 65 64 20 62 79 20 41 55 54 4f 49 4e 43 52 45 4d  ed by AUTOINCREM
a560: 45 4e 54 20 2a 2f 0a 20 20 75 38 20 66 69 6c 65  ENT */.  u8 file
a570: 5f 66 6f 72 6d 61 74 3b 20 20 20 20 20 20 2f 2a  _format;      /*
a580: 20 53 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 76   Schema format v
a590: 65 72 73 69 6f 6e 20 66 6f 72 20 74 68 69 73 20  ersion for this 
a5a0: 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63  file */.  u8 enc
a5b0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
a5c0: 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20  * Text encoding 
a5d0: 75 73 65 64 20 62 79 20 74 68 69 73 20 64 61 74  used by this dat
a5e0: 61 62 61 73 65 20 2a 2f 0a 20 20 75 31 36 20 73  abase */.  u16 s
a5f0: 63 68 65 6d 61 46 6c 61 67 73 3b 20 20 20 20 20  chemaFlags;     
a600: 2f 2a 20 46 6c 61 67 73 20 61 73 73 6f 63 69 61  /* Flags associa
a610: 74 65 64 20 77 69 74 68 20 74 68 69 73 20 73 63  ted with this sc
a620: 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 63 61  hema */.  int ca
a630: 63 68 65 5f 73 69 7a 65 3b 20 20 20 20 20 20 2f  che_size;      /
a640: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  * Number of page
a650: 73 20 74 6f 20 75 73 65 20 69 6e 20 74 68 65 20  s to use in the 
a660: 63 61 63 68 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  cache */.};../*.
a670: 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20  ** These macros 
a680: 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 74  can be used to t
a690: 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65  est, set, or cle
a6a0: 61 72 20 62 69 74 73 20 69 6e 20 74 68 65 0a 2a  ar bits in the.*
a6b0: 2a 20 44 62 2e 70 53 63 68 65 6d 61 2d 3e 66 6c  * Db.pSchema->fl
a6c0: 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64  ags field..*/.#d
a6d0: 65 66 69 6e 65 20 44 62 48 61 73 50 72 6f 70 65  efine DbHasPrope
a6e0: 72 74 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28  rty(D,I,P)     (
a6f0: 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63  ((D)->aDb[I].pSc
a700: 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67  hema->schemaFlag
a710: 73 26 28 50 29 29 3d 3d 28 50 29 29 0a 23 64 65  s&(P))==(P)).#de
a720: 66 69 6e 65 20 44 62 48 61 73 41 6e 79 50 72 6f  fine DbHasAnyPro
a730: 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 28 28  perty(D,I,P)  ((
a740: 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68  (D)->aDb[I].pSch
a750: 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73  ema->schemaFlags
a760: 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66 69 6e  &(P))!=0).#defin
a770: 65 20 44 62 53 65 74 50 72 6f 70 65 72 74 79 28  e DbSetProperty(
a780: 44 2c 49 2c 50 29 20 20 20 20 20 28 44 29 2d 3e  D,I,P)     (D)->
a790: 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e  aDb[I].pSchema->
a7a0: 73 63 68 65 6d 61 46 6c 61 67 73 7c 3d 28 50 29  schemaFlags|=(P)
a7b0: 0a 23 64 65 66 69 6e 65 20 44 62 43 6c 65 61 72  .#define DbClear
a7c0: 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20  Property(D,I,P) 
a7d0: 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53    (D)->aDb[I].pS
a7e0: 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61  chema->schemaFla
a7f0: 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 0a 2a 2a 20  gs&=~(P)../*.** 
a800: 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
a810: 6f 72 20 74 68 65 20 44 42 2e 70 53 63 68 65 6d  or the DB.pSchem
a820: 61 2d 3e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a  a->flags field..
a830: 2a 2a 0a 2a 2a 20 54 68 65 20 44 42 5f 53 63 68  **.** The DB_Sch
a840: 65 6d 61 4c 6f 61 64 65 64 20 66 6c 61 67 20 69  emaLoaded flag i
a850: 73 20 73 65 74 20 61 66 74 65 72 20 74 68 65 20  s set after the 
a860: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
a870: 68 61 73 20 62 65 65 6e 0a 2a 2a 20 72 65 61 64  has been.** read
a880: 20 69 6e 74 6f 20 69 6e 74 65 72 6e 61 6c 20 68   into internal h
a890: 61 73 68 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a  ash tables..**.*
a8a0: 2a 20 44 42 5f 55 6e 72 65 73 65 74 56 69 65 77  * DB_UnresetView
a8b0: 73 20 6d 65 61 6e 73 20 74 68 61 74 20 6f 6e 65  s means that one
a8c0: 20 6f 72 20 6d 6f 72 65 20 76 69 65 77 73 20 68   or more views h
a8d0: 61 76 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  ave column names
a8e0: 20 74 68 61 74 0a 2a 2a 20 68 61 76 65 20 62 65   that.** have be
a8f0: 65 6e 20 66 69 6c 6c 65 64 20 6f 75 74 2e 20 20  en filled out.  
a900: 49 66 20 74 68 65 20 73 63 68 65 6d 61 20 63 68  If the schema ch
a910: 61 6e 67 65 73 2c 20 74 68 65 73 65 20 63 6f 6c  anges, these col
a920: 75 6d 6e 20 6e 61 6d 65 73 20 6d 69 67 68 74 0a  umn names might.
a930: 2a 2a 20 63 68 61 6e 67 65 73 20 61 6e 64 20 73  ** changes and s
a940: 6f 20 74 68 65 20 76 69 65 77 20 77 69 6c 6c 20  o the view will 
a950: 6e 65 65 64 20 74 6f 20 62 65 20 72 65 73 65 74  need to be reset
a960: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f  ..*/.#define DB_
a970: 53 63 68 65 6d 61 4c 6f 61 64 65 64 20 20 20 20  SchemaLoaded    
a980: 30 78 30 30 30 31 20 20 2f 2a 20 54 68 65 20 73  0x0001  /* The s
a990: 63 68 65 6d 61 20 68 61 73 20 62 65 65 6e 20 6c  chema has been l
a9a0: 6f 61 64 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  oaded */.#define
a9b0: 20 44 42 5f 55 6e 72 65 73 65 74 56 69 65 77 73   DB_UnresetViews
a9c0: 20 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20 53      0x0002  /* S
a9d0: 6f 6d 65 20 76 69 65 77 73 20 68 61 76 65 20 64  ome views have d
a9e0: 65 66 69 6e 65 64 20 63 6f 6c 75 6d 6e 20 6e 61  efined column na
a9f0: 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44  mes */.#define D
aa00: 42 5f 45 6d 70 74 79 20 20 20 20 20 20 20 20 20  B_Empty         
aa10: 20 20 30 78 30 30 30 34 20 20 2f 2a 20 54 68 65    0x0004  /* The
aa20: 20 66 69 6c 65 20 69 73 20 65 6d 70 74 79 20 28   file is empty (
aa30: 6c 65 6e 67 74 68 20 30 20 62 79 74 65 73 29 20  length 0 bytes) 
aa40: 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 52 65  */.#define DB_Re
aa50: 73 65 74 57 61 6e 74 65 64 20 20 20 20 20 30 78  setWanted     0x
aa60: 30 30 30 38 20 20 2f 2a 20 52 65 73 65 74 20 74  0008  /* Reset t
aa70: 68 65 20 73 63 68 65 6d 61 20 77 68 65 6e 20 6e  he schema when n
aa80: 53 63 68 65 6d 61 4c 6f 63 6b 3d 3d 30 20 2a 2f  SchemaLock==0 */
aa90: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62  ../*.** The numb
aaa0: 65 72 20 6f 66 20 64 69 66 66 65 72 65 6e 74 20  er of different 
aab0: 6b 69 6e 64 73 20 6f 66 20 74 68 69 6e 67 73 20  kinds of things 
aac0: 74 68 61 74 20 63 61 6e 20 62 65 20 6c 69 6d 69  that can be limi
aad0: 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20 74 68 65  ted.** using the
aae0: 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 29   sqlite3_limit()
aaf0: 20 69 6e 74 65 72 66 61 63 65 2e 0a 2a 2f 0a 23   interface..*/.#
ab00: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f  define SQLITE_N_
ab10: 4c 49 4d 49 54 20 28 53 51 4c 49 54 45 5f 4c 49  LIMIT (SQLITE_LI
ab20: 4d 49 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41  MIT_WORKER_THREA
ab30: 44 53 2b 31 29 0a 0a 2f 2a 0a 2a 2a 20 4c 6f 6f  DS+1)../*.** Loo
ab40: 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 69 73  kaside malloc is
ab50: 20 61 20 73 65 74 20 6f 66 20 66 69 78 65 64 2d   a set of fixed-
ab60: 73 69 7a 65 20 62 75 66 66 65 72 73 20 74 68 61  size buffers tha
ab70: 74 20 63 61 6e 20 62 65 20 75 73 65 64 0a 2a 2a  t can be used.**
ab80: 20 74 6f 20 73 61 74 69 73 66 79 20 73 6d 61 6c   to satisfy smal
ab90: 6c 20 74 72 61 6e 73 69 65 6e 74 20 6d 65 6d 6f  l transient memo
aba0: 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 72 65  ry allocation re
abb0: 71 75 65 73 74 73 20 66 6f 72 20 6f 62 6a 65 63  quests for objec
abc0: 74 73 0a 2a 2a 20 61 73 73 6f 63 69 61 74 65 64  ts.** associated
abd0: 20 77 69 74 68 20 61 20 70 61 72 74 69 63 75 6c   with a particul
abe0: 61 72 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ar database conn
abf0: 65 63 74 69 6f 6e 2e 20 20 54 68 65 20 75 73 65  ection.  The use
ac00: 20 6f 66 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65   of.** lookaside
ac10: 20 6d 61 6c 6c 6f 63 20 70 72 6f 76 69 64 65 73   malloc provides
ac20: 20 61 20 73 69 67 6e 69 66 69 63 61 6e 74 20 70   a significant p
ac30: 65 72 66 6f 72 6d 61 6e 63 65 20 65 6e 68 61 6e  erformance enhan
ac40: 63 65 6d 65 6e 74 0a 2a 2a 20 28 61 70 70 72 6f  cement.** (appro
ac50: 78 20 31 30 25 29 20 62 79 20 61 76 6f 69 64 69  x 10%) by avoidi
ac60: 6e 67 20 6e 75 6d 65 72 6f 75 73 20 6d 61 6c 6c  ng numerous mall
ac70: 6f 63 2f 66 72 65 65 20 72 65 71 75 65 73 74 73  oc/free requests
ac80: 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a   while parsing.*
ac90: 2a 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  * SQL statements
aca0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f 6f 6b  ..**.** The Look
acb0: 61 73 69 64 65 20 73 74 72 75 63 74 75 72 65 20  aside structure 
acc0: 68 6f 6c 64 73 20 63 6f 6e 66 69 67 75 72 61 74  holds configurat
acd0: 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ion information 
ace0: 61 62 6f 75 74 20 74 68 65 0a 2a 2a 20 6c 6f 6f  about the.** loo
acf0: 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 73 75  kaside malloc su
ad00: 62 73 79 73 74 65 6d 2e 20 20 45 61 63 68 20 61  bsystem.  Each a
ad10: 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20  vailable memory 
ad20: 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 0a 2a 2a  allocation in.**
ad30: 20 74 68 65 20 6c 6f 6f 6b 61 73 69 64 65 20 73   the lookaside s
ad40: 75 62 73 79 73 74 65 6d 20 69 73 20 73 74 6f 72  ubsystem is stor
ad50: 65 64 20 6f 6e 20 61 20 6c 69 6e 6b 65 64 20 6c  ed on a linked l
ad60: 69 73 74 20 6f 66 20 4c 6f 6f 6b 61 73 69 64 65  ist of Lookaside
ad70: 53 6c 6f 74 0a 2a 2a 20 6f 62 6a 65 63 74 73 2e  Slot.** objects.
ad80: 0a 2a 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65  .**.** Lookaside
ad90: 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65   allocations are
ada0: 20 6f 6e 6c 79 20 61 6c 6c 6f 77 65 64 20 66 6f   only allowed fo
adb0: 72 20 6f 62 6a 65 63 74 73 20 74 68 61 74 20 61  r objects that a
adc0: 72 65 20 61 73 73 6f 63 69 61 74 65 64 0a 2a 2a  re associated.**
add0: 20 77 69 74 68 20 61 20 70 61 72 74 69 63 75 6c   with a particul
ade0: 61 72 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ar database conn
adf0: 65 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65 2c 20  ection.  Hence, 
ae00: 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69  schema informati
ae10: 6f 6e 20 63 61 6e 6e 6f 74 0a 2a 2a 20 62 65 20  on cannot.** be 
ae20: 73 74 6f 72 65 64 20 69 6e 20 6c 6f 6f 6b 61 73  stored in lookas
ae30: 69 64 65 20 62 65 63 61 75 73 65 20 69 6e 20 73  ide because in s
ae40: 68 61 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65  hared cache mode
ae50: 20 74 68 65 20 73 63 68 65 6d 61 20 69 6e 66 6f   the schema info
ae60: 72 6d 61 74 69 6f 6e 0a 2a 2a 20 69 73 20 73 68  rmation.** is sh
ae70: 61 72 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65  ared by multiple
ae80: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
ae90: 74 69 6f 6e 73 2e 20 20 54 68 65 72 65 66 6f 72  tions.  Therefor
aea0: 65 2c 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67  e, while parsing
aeb0: 0a 2a 2a 20 73 63 68 65 6d 61 20 69 6e 66 6f 72  .** schema infor
aec0: 6d 61 74 69 6f 6e 2c 20 74 68 65 20 4c 6f 6f 6b  mation, the Look
aed0: 61 73 69 64 65 2e 62 45 6e 61 62 6c 65 64 20 66  aside.bEnabled f
aee0: 6c 61 67 20 69 73 20 63 6c 65 61 72 65 64 20 73  lag is cleared s
aef0: 6f 20 74 68 61 74 0a 2a 2a 20 6c 6f 6f 6b 61 73  o that.** lookas
af00: 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  ide allocations 
af10: 61 72 65 20 6e 6f 74 20 75 73 65 64 20 74 6f 20  are not used to 
af20: 63 6f 6e 73 74 72 75 63 74 20 74 68 65 20 73 63  construct the sc
af30: 68 65 6d 61 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f  hema objects..*/
af40: 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64  .struct Lookasid
af50: 65 20 7b 0a 20 20 75 33 32 20 62 44 69 73 61 62  e {.  u32 bDisab
af60: 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  le;           /*
af70: 20 4f 6e 6c 79 20 6f 70 65 72 61 74 65 20 74 68   Only operate th
af80: 65 20 6c 6f 6f 6b 61 73 69 64 65 20 77 68 65 6e  e lookaside when
af90: 20 7a 65 72 6f 20 2a 2f 0a 20 20 75 31 36 20 73   zero */.  u16 s
afa0: 7a 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  z;              
afb0: 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61     /* Size of ea
afc0: 63 68 20 62 75 66 66 65 72 20 69 6e 20 62 79 74  ch buffer in byt
afd0: 65 73 20 2a 2f 0a 20 20 75 38 20 62 4d 61 6c 6c  es */.  u8 bMall
afe0: 6f 63 65 64 3b 20 20 20 20 20 20 20 20 20 20 20  oced;           
aff0: 2f 2a 20 54 72 75 65 20 69 66 20 70 53 74 61 72  /* True if pStar
b000: 74 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20  t obtained from 
b010: 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29  sqlite3_malloc()
b020: 20 2a 2f 0a 20 20 75 33 32 20 6e 53 6c 6f 74 3b   */.  u32 nSlot;
b030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b040: 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 6f 6b 61   Number of looka
b050: 73 69 64 65 20 73 6c 6f 74 73 20 61 6c 6c 6f 63  side slots alloc
b060: 61 74 65 64 20 2a 2f 0a 20 20 75 33 32 20 61 6e  ated */.  u32 an
b070: 53 74 61 74 5b 33 5d 3b 20 20 20 20 20 20 20 20  Stat[3];        
b080: 20 20 2f 2a 20 30 3a 20 68 69 74 73 2e 20 20 31    /* 0: hits.  1
b090: 3a 20 73 69 7a 65 20 6d 69 73 73 65 73 2e 20 20  : size misses.  
b0a0: 32 3a 20 66 75 6c 6c 20 6d 69 73 73 65 73 20 2a  2: full misses *
b0b0: 2f 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f  /.  LookasideSlo
b0c0: 74 20 2a 70 49 6e 69 74 3b 20 20 20 2f 2a 20 4c  t *pInit;   /* L
b0d0: 69 73 74 20 6f 66 20 62 75 66 66 65 72 73 20 6e  ist of buffers n
b0e0: 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20 75 73  ot previously us
b0f0: 65 64 20 2a 2f 0a 20 20 4c 6f 6f 6b 61 73 69 64  ed */.  Lookasid
b100: 65 53 6c 6f 74 20 2a 70 46 72 65 65 3b 20 20 20  eSlot *pFree;   
b110: 2f 2a 20 4c 69 73 74 20 6f 66 20 61 76 61 69 6c  /* List of avail
b120: 61 62 6c 65 20 62 75 66 66 65 72 73 20 2a 2f 0a  able buffers */.
b130: 20 20 76 6f 69 64 20 2a 70 53 74 61 72 74 3b 20    void *pStart; 
b140: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72            /* Fir
b150: 73 74 20 62 79 74 65 20 6f 66 20 61 76 61 69 6c  st byte of avail
b160: 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73 70 61 63  able memory spac
b170: 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 45 6e  e */.  void *pEn
b180: 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  d;             /
b190: 2a 20 46 69 72 73 74 20 62 79 74 65 20 70 61 73  * First byte pas
b1a0: 74 20 65 6e 64 20 6f 66 20 61 76 61 69 6c 61 62  t end of availab
b1b0: 6c 65 20 73 70 61 63 65 20 2a 2f 0a 7d 3b 0a 73  le space */.};.s
b1c0: 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 53  truct LookasideS
b1d0: 6c 6f 74 20 7b 0a 20 20 4c 6f 6f 6b 61 73 69 64  lot {.  Lookasid
b1e0: 65 53 6c 6f 74 20 2a 70 4e 65 78 74 3b 20 20 20  eSlot *pNext;   
b1f0: 20 2f 2a 20 4e 65 78 74 20 62 75 66 66 65 72 20   /* Next buffer 
b200: 69 6e 20 74 68 65 20 6c 69 73 74 20 6f 66 20 66  in the list of f
b210: 72 65 65 20 62 75 66 66 65 72 73 20 2a 2f 0a 7d  ree buffers */.}
b220: 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 68 61 73 68 20  ;../*.** A hash 
b230: 74 61 62 6c 65 20 66 6f 72 20 62 75 69 6c 74 2d  table for built-
b240: 69 6e 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69  in function defi
b250: 6e 69 74 69 6f 6e 73 2e 20 20 28 41 70 70 6c 69  nitions.  (Appli
b260: 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64 0a 2a  cation-defined.*
b270: 2a 20 66 75 6e 63 74 69 6f 6e 73 20 75 73 65 20  * functions use 
b280: 61 20 72 65 67 75 6c 61 72 20 74 61 62 6c 65 20  a regular table 
b290: 74 61 62 6c 65 20 66 72 6f 6d 20 68 61 73 68 2e  table from hash.
b2a0: 68 2e 29 0a 2a 2a 0a 2a 2a 20 48 61 73 68 20 65  h.).**.** Hash e
b2b0: 61 63 68 20 46 75 6e 63 44 65 66 20 73 74 72 75  ach FuncDef stru
b2c0: 63 74 75 72 65 20 69 6e 74 6f 20 6f 6e 65 20 6f  cture into one o
b2d0: 66 20 74 68 65 20 46 75 6e 63 44 65 66 48 61 73  f the FuncDefHas
b2e0: 68 2e 61 5b 5d 20 73 6c 6f 74 73 2e 0a 2a 2a 20  h.a[] slots..** 
b2f0: 43 6f 6c 6c 69 73 69 6f 6e 73 20 61 72 65 20 6f  Collisions are o
b300: 6e 20 74 68 65 20 46 75 6e 63 44 65 66 2e 75 2e  n the FuncDef.u.
b310: 70 48 61 73 68 20 63 68 61 69 6e 2e 0a 2a 2f 0a  pHash chain..*/.
b320: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
b330: 55 4e 43 5f 48 41 53 48 5f 53 5a 20 32 33 0a 73  UNC_HASH_SZ 23.s
b340: 74 72 75 63 74 20 46 75 6e 63 44 65 66 48 61 73  truct FuncDefHas
b350: 68 20 7b 0a 20 20 46 75 6e 63 44 65 66 20 2a 61  h {.  FuncDef *a
b360: 5b 53 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53  [SQLITE_FUNC_HAS
b370: 48 5f 53 5a 5d 3b 20 20 20 20 20 20 20 2f 2a 20  H_SZ];       /* 
b380: 48 61 73 68 20 74 61 62 6c 65 20 66 6f 72 20 66  Hash table for f
b390: 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a  unctions */.};..
b3a0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53  #ifdef SQLITE_US
b3b0: 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f  ER_AUTHENTICATIO
b3c0: 4e 0a 2f 2a 0a 2a 2a 20 49 6e 66 6f 72 6d 61 74  N./*.** Informat
b3d0: 69 6f 6e 20 68 65 6c 64 20 69 6e 20 74 68 65 20  ion held in the 
b3e0: 22 73 71 6c 69 74 65 33 22 20 64 61 74 61 62 61  "sqlite3" databa
b3f0: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62  se connection ob
b400: 6a 65 63 74 20 61 6e 64 20 75 73 65 64 0a 2a 2a  ject and used.**
b410: 20 74 6f 20 6d 61 6e 61 67 65 20 75 73 65 72 20   to manage user 
b420: 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 2e 0a  authentication..
b430: 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
b440: 74 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75  t sqlite3_userau
b450: 74 68 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61  th sqlite3_usera
b460: 75 74 68 3b 0a 73 74 72 75 63 74 20 73 71 6c 69  uth;.struct sqli
b470: 74 65 33 5f 75 73 65 72 61 75 74 68 20 7b 0a 20  te3_userauth {. 
b480: 20 75 38 20 61 75 74 68 4c 65 76 65 6c 3b 20 20   u8 authLevel;  
b490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b4a0: 2a 20 43 75 72 72 65 6e 74 20 61 75 74 68 65 6e  * Current authen
b4b0: 74 69 63 61 74 69 6f 6e 20 6c 65 76 65 6c 20 2a  tication level *
b4c0: 2f 0a 20 20 69 6e 74 20 6e 41 75 74 68 50 57 3b  /.  int nAuthPW;
b4d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b4e0: 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65    /* Size of the
b4f0: 20 7a 41 75 74 68 50 57 20 69 6e 20 62 79 74 65   zAuthPW in byte
b500: 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 75  s */.  char *zAu
b510: 74 68 50 57 3b 20 20 20 20 20 20 20 20 20 20 20  thPW;           
b520: 20 20 20 20 20 2f 2a 20 50 61 73 73 77 6f 72 64       /* Password
b530: 20 75 73 65 64 20 74 6f 20 61 75 74 68 65 6e 74   used to authent
b540: 69 63 61 74 65 20 2a 2f 0a 20 20 63 68 61 72 20  icate */.  char 
b550: 2a 7a 41 75 74 68 55 73 65 72 3b 20 20 20 20 20  *zAuthUser;     
b560: 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 72           /* User
b570: 20 6e 61 6d 65 20 75 73 65 64 20 74 6f 20 61 75   name used to au
b580: 74 68 65 6e 74 69 63 61 74 65 20 2a 2f 0a 7d 3b  thenticate */.};
b590: 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  ../* Allowed val
b5a0: 75 65 73 20 66 6f 72 20 73 71 6c 69 74 65 33 5f  ues for sqlite3_
b5b0: 75 73 65 72 61 75 74 68 2e 61 75 74 68 4c 65 76  userauth.authLev
b5c0: 65 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41  el */.#define UA
b5d0: 55 54 48 5f 55 6e 6b 6e 6f 77 6e 20 20 20 20 20  UTH_Unknown     
b5e0: 30 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74  0     /* Authent
b5f0: 69 63 61 74 69 6f 6e 20 6e 6f 74 20 79 65 74 20  ication not yet 
b600: 63 68 65 63 6b 65 64 20 2a 2f 0a 23 64 65 66 69  checked */.#defi
b610: 6e 65 20 55 41 55 54 48 5f 46 61 69 6c 20 20 20  ne UAUTH_Fail   
b620: 20 20 20 20 20 31 20 20 20 20 20 2f 2a 20 55 73       1     /* Us
b630: 65 72 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f  er authenticatio
b640: 6e 20 66 61 69 6c 65 64 20 2a 2f 0a 23 64 65 66  n failed */.#def
b650: 69 6e 65 20 55 41 55 54 48 5f 55 73 65 72 20 20  ine UAUTH_User  
b660: 20 20 20 20 20 20 32 20 20 20 20 20 2f 2a 20 41        2     /* A
b670: 75 74 68 65 6e 74 69 63 61 74 65 64 20 61 73 20  uthenticated as 
b680: 61 20 6e 6f 72 6d 61 6c 20 75 73 65 72 20 2a 2f  a normal user */
b690: 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 41  .#define UAUTH_A
b6a0: 64 6d 69 6e 20 20 20 20 20 20 20 33 20 20 20 20  dmin       3    
b6b0: 20 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74 65   /* Authenticate
b6c0: 64 20 61 73 20 61 6e 20 61 64 6d 69 6e 69 73 74  d as an administ
b6d0: 72 61 74 6f 72 20 2a 2f 0a 0a 2f 2a 20 46 75 6e  rator */../* Fun
b6e0: 63 74 69 6f 6e 73 20 75 73 65 64 20 6f 6e 6c 79  ctions used only
b6f0: 20 62 79 20 75 73 65 72 20 61 75 74 68 6f 72 69   by user authori
b700: 7a 61 74 69 6f 6e 20 6c 6f 67 69 63 20 2a 2f 0a  zation logic */.
b710: 69 6e 74 20 73 71 6c 69 74 65 33 55 73 65 72 41  int sqlite3UserA
b720: 75 74 68 54 61 62 6c 65 28 63 6f 6e 73 74 20 63  uthTable(const c
b730: 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  har*);.int sqlit
b740: 65 33 55 73 65 72 41 75 74 68 43 68 65 63 6b 4c  e3UserAuthCheckL
b750: 6f 67 69 6e 28 73 71 6c 69 74 65 33 2a 2c 63 6f  ogin(sqlite3*,co
b760: 6e 73 74 20 63 68 61 72 2a 2c 75 38 2a 29 3b 0a  nst char*,u8*);.
b770: 76 6f 69 64 20 73 71 6c 69 74 65 33 55 73 65 72  void sqlite3User
b780: 41 75 74 68 49 6e 69 74 28 73 71 6c 69 74 65 33  AuthInit(sqlite3
b790: 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
b7a0: 43 72 79 70 74 46 75 6e 63 28 73 71 6c 69 74 65  CryptFunc(sqlite
b7b0: 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
b7c0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b  qlite3_value**);
b7d0: 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  ..#endif /* SQLI
b7e0: 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49  TE_USER_AUTHENTI
b7f0: 43 41 54 49 4f 4e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  CATION */../*.**
b800: 20 74 79 70 65 64 65 66 20 66 6f 72 20 74 68 65   typedef for the
b810: 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 63   authorization c
b820: 61 6c 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e  allback function
b830: 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
b840: 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49  TE_USER_AUTHENTI
b850: 43 41 54 49 4f 4e 0a 20 20 74 79 70 65 64 65 66  CATION.  typedef
b860: 20 69 6e 74 20 28 2a 73 71 6c 69 74 65 33 5f 78   int (*sqlite3_x
b870: 61 75 74 68 29 28 76 6f 69 64 2a 2c 69 6e 74 2c  auth)(void*,int,
b880: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
b890: 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
b8a0: 61 72 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ar*,.           
b8b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b8c0: 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c      const char*,
b8d0: 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23   const char*);.#
b8e0: 65 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20 69  else.  typedef i
b8f0: 6e 74 20 28 2a 73 71 6c 69 74 65 33 5f 78 61 75  nt (*sqlite3_xau
b900: 74 68 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f  th)(void*,int,co
b910: 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
b920: 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
b930: 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
b940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b950: 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a    const char*);.
b960: 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20  #endif..#ifndef 
b970: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52  SQLITE_OMIT_DEPR
b980: 45 43 41 54 45 44 0a 2f 2a 20 54 68 69 73 20 69  ECATED./* This i
b990: 73 20 61 6e 20 65 78 74 72 61 20 53 51 4c 49 54  s an extra SQLIT
b9a0: 45 5f 54 52 41 43 45 20 6d 61 63 72 6f 20 74 68  E_TRACE macro th
b9b0: 61 74 20 69 6e 64 69 63 61 74 65 73 20 22 6c 65  at indicates "le
b9c0: 67 61 63 79 22 20 74 72 61 63 69 6e 67 0a 2a 2a  gacy" tracing.**
b9d0: 20 69 6e 20 74 68 65 20 73 74 79 6c 65 20 6f 66   in the style of
b9e0: 20 73 71 6c 69 74 65 33 5f 74 72 61 63 65 28 29   sqlite3_trace()
b9f0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
ba00: 54 45 5f 54 52 41 43 45 5f 4c 45 47 41 43 59 20  TE_TRACE_LEGACY 
ba10: 20 30 78 38 30 0a 23 65 6c 73 65 0a 23 64 65 66   0x80.#else.#def
ba20: 69 6e 65 20 53 51 4c 49 54 45 5f 54 52 41 43 45  ine SQLITE_TRACE
ba30: 5f 4c 45 47 41 43 59 20 20 30 0a 23 65 6e 64 69  _LEGACY  0.#endi
ba40: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
ba50: 5f 44 45 50 52 45 43 41 54 45 44 20 2a 2f 0a 0a  _DEPRECATED */..
ba60: 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61  ./*.** Each data
ba70: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
ba80: 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  is an instance o
ba90: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
baa0: 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74  structure..*/.st
bab0: 72 75 63 74 20 73 71 6c 69 74 65 33 20 7b 0a 20  ruct sqlite3 {. 
bac0: 20 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 70 56   sqlite3_vfs *pV
bad0: 66 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  fs;            /
bae0: 2a 20 4f 53 20 49 6e 74 65 72 66 61 63 65 20 2a  * OS Interface *
baf0: 2f 0a 20 20 73 74 72 75 63 74 20 56 64 62 65 20  /.  struct Vdbe 
bb00: 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20 20 20  *pVdbe;         
bb10: 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63 74    /* List of act
bb20: 69 76 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68  ive virtual mach
bb30: 69 6e 65 73 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65  ines */.  CollSe
bb40: 71 20 2a 70 44 66 6c 74 43 6f 6c 6c 3b 20 20 20  q *pDfltColl;   
bb50: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64          /* The d
bb60: 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67  efault collating
bb70: 20 73 65 71 75 65 6e 63 65 20 28 42 49 4e 41 52   sequence (BINAR
bb80: 59 29 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  Y) */.  sqlite3_
bb90: 6d 75 74 65 78 20 2a 6d 75 74 65 78 3b 20 20 20  mutex *mutex;   
bba0: 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74        /* Connect
bbb0: 69 6f 6e 20 6d 75 74 65 78 20 2a 2f 0a 20 20 44  ion mutex */.  D
bbc0: 62 20 2a 61 44 62 3b 20 20 20 20 20 20 20 20 20  b *aDb;         
bbd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
bbe0: 41 6c 6c 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a  All backends */.
bbf0: 20 20 69 6e 74 20 6e 44 62 3b 20 20 20 20 20 20    int nDb;      
bc00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bc10: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 61 63  /* Number of bac
bc20: 6b 65 6e 64 73 20 63 75 72 72 65 6e 74 6c 79 20  kends currently 
bc30: 69 6e 20 75 73 65 20 2a 2f 0a 20 20 75 33 32 20  in use */.  u32 
bc40: 6d 44 62 46 6c 61 67 73 3b 20 20 20 20 20 20 20  mDbFlags;       
bc50: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 66 6c 61            /* fla
bc60: 67 73 20 72 65 63 6f 72 64 69 6e 67 20 69 6e 74  gs recording int
bc70: 65 72 6e 61 6c 20 73 74 61 74 65 20 2a 2f 0a 20  ernal state */. 
bc80: 20 75 33 32 20 66 6c 61 67 73 3b 20 20 20 20 20   u32 flags;     
bc90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
bca0: 2a 20 66 6c 61 67 73 20 73 65 74 74 61 62 6c 65  * flags settable
bcb0: 20 62 79 20 70 72 61 67 6d 61 73 2e 20 53 65 65   by pragmas. See
bcc0: 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 69 36 34 20   below */.  i64 
bcd0: 6c 61 73 74 52 6f 77 69 64 3b 20 20 20 20 20 20  lastRowid;      
bce0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 4f 57            /* ROW
bcf0: 49 44 20 6f 66 20 6d 6f 73 74 20 72 65 63 65 6e  ID of most recen
bd00: 74 20 69 6e 73 65 72 74 20 28 73 65 65 20 61 62  t insert (see ab
bd10: 6f 76 65 29 20 2a 2f 0a 20 20 69 36 34 20 73 7a  ove) */.  i64 sz
bd20: 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20  Mmap;           
bd30: 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
bd40: 6c 74 20 6d 6d 61 70 5f 73 69 7a 65 20 73 65 74  lt mmap_size set
bd50: 74 69 6e 67 20 2a 2f 0a 20 20 75 33 32 20 6e 53  ting */.  u32 nS
bd60: 63 68 65 6d 61 4c 6f 63 6b 3b 20 20 20 20 20 20  chemaLock;      
bd70: 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f          /* Do no
bd80: 74 20 72 65 73 65 74 20 74 68 65 20 73 63 68 65  t reset the sche
bd90: 6d 61 20 77 68 65 6e 20 6e 6f 6e 2d 7a 65 72 6f  ma when non-zero
bda0: 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69   */.  unsigned i
bdb0: 6e 74 20 6f 70 65 6e 46 6c 61 67 73 3b 20 20 20  nt openFlags;   
bdc0: 20 20 20 20 2f 2a 20 46 6c 61 67 73 20 70 61 73      /* Flags pas
bdd0: 73 65 64 20 74 6f 20 73 71 6c 69 74 65 33 5f 76  sed to sqlite3_v
bde0: 66 73 2e 78 4f 70 65 6e 28 29 20 2a 2f 0a 20 20  fs.xOpen() */.  
bdf0: 69 6e 74 20 65 72 72 43 6f 64 65 3b 20 20 20 20  int errCode;    
be00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
be10: 20 4d 6f 73 74 20 72 65 63 65 6e 74 20 65 72 72   Most recent err
be20: 6f 72 20 63 6f 64 65 20 28 53 51 4c 49 54 45 5f  or code (SQLITE_
be30: 2a 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 4d  *) */.  int errM
be40: 61 73 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20  ask;            
be50: 20 20 20 20 20 20 2f 2a 20 26 20 72 65 73 75 6c        /* & resul
be60: 74 20 63 6f 64 65 73 20 77 69 74 68 20 74 68 69  t codes with thi
be70: 73 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69  s before returni
be80: 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69 53 79 73  ng */.  int iSys
be90: 45 72 72 6e 6f 3b 20 20 20 20 20 20 20 20 20 20  Errno;          
bea0: 20 20 20 20 20 20 2f 2a 20 45 72 72 6e 6f 20 76        /* Errno v
beb0: 61 6c 75 65 20 66 72 6f 6d 20 6c 61 73 74 20 73  alue from last s
bec0: 79 73 74 65 6d 20 65 72 72 6f 72 20 2a 2f 0a 20  ystem error */. 
bed0: 20 75 31 36 20 64 62 4f 70 74 46 6c 61 67 73 3b   u16 dbOptFlags;
bee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
bef0: 2a 20 46 6c 61 67 73 20 74 6f 20 65 6e 61 62 6c  * Flags to enabl
bf00: 65 2f 64 69 73 61 62 6c 65 20 6f 70 74 69 6d 69  e/disable optimi
bf10: 7a 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20  zations */.  u8 
bf20: 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  enc;            
bf30: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
bf40: 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20  xt encoding */. 
bf50: 20 75 38 20 61 75 74 6f 43 6f 6d 6d 69 74 3b 20   u8 autoCommit; 
bf60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
bf70: 2a 20 54 68 65 20 61 75 74 6f 2d 63 6f 6d 6d 69  * The auto-commi
bf80: 74 20 66 6c 61 67 2e 20 2a 2f 0a 20 20 75 38 20  t flag. */.  u8 
bf90: 74 65 6d 70 5f 73 74 6f 72 65 3b 20 20 20 20 20  temp_store;     
bfa0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 3a             /* 1:
bfb0: 20 66 69 6c 65 20 32 3a 20 6d 65 6d 6f 72 79 20   file 2: memory 
bfc0: 30 3a 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20  0: default */.  
bfd0: 75 38 20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3b  u8 mallocFailed;
bfe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
bff0: 20 54 72 75 65 20 69 66 20 77 65 20 68 61 76 65   True if we have
c000: 20 73 65 65 6e 20 61 20 6d 61 6c 6c 6f 63 20 66   seen a malloc f
c010: 61 69 6c 75 72 65 20 2a 2f 0a 20 20 75 38 20 62  ailure */.  u8 b
c020: 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 3b 20 20 20  BenignMalloc;   
c030: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20            /* Do 
c040: 6e 6f 74 20 72 65 71 75 69 72 65 20 4f 4f 4d 73  not require OOMs
c050: 20 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 38   if true */.  u8
c060: 20 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65 3b 20 20   dfltLockMode;  
c070: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
c080: 65 66 61 75 6c 74 20 6c 6f 63 6b 69 6e 67 2d 6d  efault locking-m
c090: 6f 64 65 20 66 6f 72 20 61 74 74 61 63 68 65 64  ode for attached
c0a0: 20 64 62 73 20 2a 2f 0a 20 20 73 69 67 6e 65 64   dbs */.  signed
c0b0: 20 63 68 61 72 20 6e 65 78 74 41 75 74 6f 76 61   char nextAutova
c0c0: 63 3b 20 20 20 20 20 20 2f 2a 20 41 75 74 6f 76  c;      /* Autov
c0d0: 61 63 20 73 65 74 74 69 6e 67 20 61 66 74 65 72  ac setting after
c0e0: 20 56 41 43 55 55 4d 20 69 66 20 3e 3d 30 20 2a   VACUUM if >=0 *
c0f0: 2f 0a 20 20 75 38 20 73 75 70 70 72 65 73 73 45  /.  u8 suppressE
c100: 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rr;             
c110: 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 69 73 73 75    /* Do not issu
c120: 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73  e error messages
c130: 20 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 38   if true */.  u8
c140: 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b   vtabOnConflict;
c150: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
c160: 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20 66  alue to return f
c170: 6f 72 20 73 33 5f 76 74 61 62 5f 6f 6e 5f 63 6f  or s3_vtab_on_co
c180: 6e 66 6c 69 63 74 28 29 20 2a 2f 0a 20 20 75 38  nflict() */.  u8
c190: 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61   isTransactionSa
c1a0: 76 65 70 6f 69 6e 74 3b 20 20 20 20 2f 2a 20 54  vepoint;    /* T
c1b0: 72 75 65 20 69 66 20 74 68 65 20 6f 75 74 65 72  rue if the outer
c1c0: 6d 6f 73 74 20 73 61 76 65 70 6f 69 6e 74 20 69  most savepoint i
c1d0: 73 20 61 20 54 53 20 2a 2f 0a 20 20 75 38 20 6d  s a TS */.  u8 m
c1e0: 54 72 61 63 65 3b 20 20 20 20 20 20 20 20 20 20  Trace;          
c1f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 7a 65 72            /* zer
c200: 6f 20 6f 72 20 6d 6f 72 65 20 53 51 4c 49 54 45  o or more SQLITE
c210: 5f 54 52 41 43 45 20 66 6c 61 67 73 20 2a 2f 0a  _TRACE flags */.
c220: 20 20 75 38 20 6e 6f 53 68 61 72 65 64 43 61 63    u8 noSharedCac
c230: 68 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  he;             
c240: 2f 2a 20 54 72 75 65 20 69 66 20 6e 6f 20 73 68  /* True if no sh
c250: 61 72 65 64 2d 63 61 63 68 65 20 62 61 63 6b 65  ared-cache backe
c260: 6e 64 73 20 2a 2f 0a 20 20 75 38 20 6e 53 71 6c  nds */.  u8 nSql
c270: 45 78 65 63 3b 20 20 20 20 20 20 20 20 20 20 20  Exec;           
c280: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
c290: 20 6f 66 20 70 65 6e 64 69 6e 67 20 4f 50 5f 53   of pending OP_S
c2a0: 71 6c 45 78 65 63 20 6f 70 63 6f 64 65 73 20 2a  qlExec opcodes *
c2b0: 2f 0a 20 20 69 6e 74 20 6e 65 78 74 50 61 67 65  /.  int nextPage
c2c0: 73 69 7a 65 3b 20 20 20 20 20 20 20 20 20 20 20  size;           
c2d0: 20 20 2f 2a 20 50 61 67 65 73 69 7a 65 20 61 66    /* Pagesize af
c2e0: 74 65 72 20 56 41 43 55 55 4d 20 69 66 20 3e 30  ter VACUUM if >0
c2f0: 20 2a 2f 0a 20 20 75 33 32 20 6d 61 67 69 63 3b   */.  u32 magic;
c300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c310: 20 20 20 20 2f 2a 20 4d 61 67 69 63 20 6e 75 6d      /* Magic num
c320: 62 65 72 20 66 6f 72 20 64 65 74 65 63 74 20 6c  ber for detect l
c330: 69 62 72 61 72 79 20 6d 69 73 75 73 65 20 2a 2f  ibrary misuse */
c340: 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b 20  .  int nChange; 
c350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c360: 20 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e   /* Value return
c370: 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63 68  ed by sqlite3_ch
c380: 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74  anges() */.  int
c390: 20 6e 54 6f 74 61 6c 43 68 61 6e 67 65 3b 20 20   nTotalChange;  
c3a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61             /* Va
c3b0: 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20  lue returned by 
c3c0: 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68  sqlite3_total_ch
c3d0: 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74  anges() */.  int
c3e0: 20 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4e   aLimit[SQLITE_N
c3f0: 5f 4c 49 4d 49 54 5d 3b 20 20 20 2f 2a 20 4c 69  _LIMIT];   /* Li
c400: 6d 69 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d  mits */.  int nM
c410: 61 78 53 6f 72 74 65 72 4d 6d 61 70 3b 20 20 20  axSorterMmap;   
c420: 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d          /* Maxim
c430: 75 6d 20 73 69 7a 65 20 6f 66 20 72 65 67 69 6f  um size of regio
c440: 6e 73 20 6d 61 70 70 65 64 20 62 79 20 73 6f 72  ns mapped by sor
c450: 74 65 72 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  ter */.  struct 
c460: 73 71 6c 69 74 65 33 49 6e 69 74 49 6e 66 6f 20  sqlite3InitInfo 
c470: 7b 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d  {      /* Inform
c480: 61 74 69 6f 6e 20 75 73 65 64 20 64 75 72 69 6e  ation used durin
c490: 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  g initialization
c4a0: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 65 77 54   */.    int newT
c4b0: 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  num;            
c4c0: 20 20 20 20 2f 2a 20 52 6f 6f 74 70 61 67 65 20      /* Rootpage 
c4d0: 6f 66 20 74 61 62 6c 65 20 62 65 69 6e 67 20 69  of table being i
c4e0: 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20  nitialized */.  
c4f0: 20 20 75 38 20 69 44 62 3b 20 20 20 20 20 20 20    u8 iDb;       
c500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c510: 20 57 68 69 63 68 20 64 62 20 66 69 6c 65 20 69   Which db file i
c520: 73 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69  s being initiali
c530: 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38 20 62 75  zed */.    u8 bu
c540: 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  sy;             
c550: 20 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20 69         /* TRUE i
c560: 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 69 74  f currently init
c570: 69 61 6c 69 7a 69 6e 67 20 2a 2f 0a 20 20 20 20  ializing */.    
c580: 75 6e 73 69 67 6e 65 64 20 6f 72 70 68 61 6e 54  unsigned orphanT
c590: 72 69 67 67 65 72 20 3a 20 31 3b 20 2f 2a 20 4c  rigger : 1; /* L
c5a0: 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20 69 73  ast statement is
c5b0: 20 6f 72 70 68 61 6e 65 64 20 54 45 4d 50 20 74   orphaned TEMP t
c5c0: 72 69 67 67 65 72 20 2a 2f 0a 20 20 20 20 75 6e  rigger */.    un
c5d0: 73 69 67 6e 65 64 20 69 6d 70 6f 73 74 65 72 54  signed imposterT
c5e0: 61 62 6c 65 20 3a 20 31 3b 20 2f 2a 20 42 75 69  able : 1; /* Bui
c5f0: 6c 64 69 6e 67 20 61 6e 20 69 6d 70 6f 73 74 65  lding an imposte
c600: 72 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 75  r table */.    u
c610: 6e 73 69 67 6e 65 64 20 72 65 6f 70 65 6e 4d 65  nsigned reopenMe
c620: 6d 64 62 20 3a 20 31 3b 20 20 20 2f 2a 20 41 54  mdb : 1;   /* AT
c630: 54 41 43 48 20 69 73 20 72 65 61 6c 6c 79 20 61  TACH is really a
c640: 20 72 65 6f 70 65 6e 20 75 73 69 6e 67 20 4d 65   reopen using Me
c650: 6d 44 42 20 2a 2f 0a 20 20 7d 20 69 6e 69 74 3b  mDB */.  } init;
c660: 0a 20 20 69 6e 74 20 6e 56 64 62 65 41 63 74 69  .  int nVdbeActi
c670: 76 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ve;             
c680: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 56 44   /* Number of VD
c690: 42 45 73 20 63 75 72 72 65 6e 74 6c 79 20 72 75  BEs currently ru
c6a0: 6e 6e 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 6e  nning */.  int n
c6b0: 56 64 62 65 52 65 61 64 3b 20 20 20 20 20 20 20  VdbeRead;       
c6c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
c6d0: 65 72 20 6f 66 20 61 63 74 69 76 65 20 56 44 42  er of active VDB
c6e0: 45 73 20 74 68 61 74 20 72 65 61 64 20 6f 72 20  Es that read or 
c6f0: 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  write */.  int n
c700: 56 64 62 65 57 72 69 74 65 3b 20 20 20 20 20 20  VdbeWrite;      
c710: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
c720: 65 72 20 6f 66 20 61 63 74 69 76 65 20 56 44 42  er of active VDB
c730: 45 73 20 74 68 61 74 20 72 65 61 64 20 61 6e 64  Es that read and
c740: 20 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e 74 20   write */.  int 
c750: 6e 56 64 62 65 45 78 65 63 3b 20 20 20 20 20 20  nVdbeExec;      
c760: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
c770: 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20 63 61  ber of nested ca
c780: 6c 6c 73 20 74 6f 20 56 64 62 65 45 78 65 63 28  lls to VdbeExec(
c790: 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 44 65 73  ) */.  int nVDes
c7a0: 74 72 6f 79 3b 20 20 20 20 20 20 20 20 20 20 20  troy;           
c7b0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
c7c0: 66 20 61 63 74 69 76 65 20 4f 50 5f 56 44 65 73  f active OP_VDes
c7d0: 74 72 6f 79 20 6f 70 65 72 61 74 69 6f 6e 73 20  troy operations 
c7e0: 2a 2f 0a 20 20 69 6e 74 20 6e 45 78 74 65 6e 73  */.  int nExtens
c7f0: 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  ion;            
c800: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
c810: 6c 6f 61 64 65 64 20 65 78 74 65 6e 73 69 6f 6e  loaded extension
c820: 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 2a 61 45  s */.  void **aE
c830: 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20 20  xtension;       
c840: 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66       /* Array of
c850: 20 73 68 61 72 65 64 20 6c 69 62 72 61 72 79 20   shared library 
c860: 68 61 6e 64 6c 65 73 20 2a 2f 0a 20 20 69 6e 74  handles */.  int
c870: 20 28 2a 78 54 72 61 63 65 29 28 75 33 32 2c 76   (*xTrace)(u32,v
c880: 6f 69 64 2a 2c 76 6f 69 64 2a 2c 76 6f 69 64 2a  oid*,void*,void*
c890: 29 3b 20 20 20 20 20 2f 2a 20 54 72 61 63 65 20  );     /* Trace 
c8a0: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f  function */.  vo
c8b0: 69 64 20 2a 70 54 72 61 63 65 41 72 67 3b 20 20  id *pTraceArg;  
c8c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c8d0: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
c8e0: 65 6e 74 20 74 6f 20 74 68 65 20 74 72 61 63 65  ent to the trace
c8f0: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76   function */.  v
c900: 6f 69 64 20 28 2a 78 50 72 6f 66 69 6c 65 29 28  oid (*xProfile)(
c910: 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61 72  void*,const char
c920: 2a 2c 75 36 34 29 3b 20 20 2f 2a 20 50 72 6f 66  *,u64);  /* Prof
c930: 69 6c 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 2a  iling function *
c940: 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f 66 69  /.  void *pProfi
c950: 6c 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  leArg;          
c960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c970: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 70 72 6f   Argument to pro
c980: 66 69 6c 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  file function */
c990: 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6d 6d 69 74  .  void *pCommit
c9a0: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
c9b0: 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74       /* Argument
c9c0: 20 74 6f 20 78 43 6f 6d 6d 69 74 43 61 6c 6c 62   to xCommitCallb
c9d0: 61 63 6b 28 29 20 2a 2f 0a 20 20 69 6e 74 20 28  ack() */.  int (
c9e0: 2a 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b  *xCommitCallback
c9f0: 29 28 76 6f 69 64 2a 29 3b 20 20 20 20 2f 2a 20  )(void*);    /* 
ca00: 49 6e 76 6f 6b 65 64 20 61 74 20 65 76 65 72 79  Invoked at every
ca10: 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f   commit. */.  vo
ca20: 69 64 20 2a 70 52 6f 6c 6c 62 61 63 6b 41 72 67  id *pRollbackArg
ca30: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
ca40: 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78  /* Argument to x
ca50: 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b  RollbackCallback
ca60: 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  () */.  void (*x
ca70: 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b  RollbackCallback
ca80: 29 28 76 6f 69 64 2a 29 3b 20 2f 2a 20 49 6e 76  )(void*); /* Inv
ca90: 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20 63 6f  oked at every co
caa0: 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20  mmit. */.  void 
cab0: 2a 70 55 70 64 61 74 65 41 72 67 3b 0a 20 20 76  *pUpdateArg;.  v
cac0: 6f 69 64 20 28 2a 78 55 70 64 61 74 65 43 61 6c  oid (*xUpdateCal
cad0: 6c 62 61 63 6b 29 28 76 6f 69 64 2a 2c 69 6e 74  lback)(void*,int
cae0: 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  , const char*,co
caf0: 6e 73 74 20 63 68 61 72 2a 2c 73 71 6c 69 74 65  nst char*,sqlite
cb00: 5f 69 6e 74 36 34 29 3b 0a 23 69 66 64 65 66 20  _int64);.#ifdef 
cb10: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52  SQLITE_ENABLE_PR
cb20: 45 55 50 44 41 54 45 5f 48 4f 4f 4b 0a 20 20 76  EUPDATE_HOOK.  v
cb30: 6f 69 64 20 2a 70 50 72 65 55 70 64 61 74 65 41  oid *pPreUpdateA
cb40: 72 67 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  rg;          /* 
cb50: 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74  First argument t
cb60: 6f 20 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c  o xPreUpdateCall
cb70: 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 28  back */.  void (
cb80: 2a 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62  *xPreUpdateCallb
cb90: 61 63 6b 29 28 20 20 20 2f 2a 20 52 65 67 69 73  ack)(   /* Regis
cba0: 74 65 72 65 64 20 75 73 69 6e 67 20 73 71 6c 69  tered using sqli
cbb0: 74 65 33 5f 70 72 65 75 70 64 61 74 65 5f 68 6f  te3_preupdate_ho
cbc0: 6f 6b 28 29 20 2a 2f 0a 20 20 20 20 76 6f 69 64  ok() */.    void
cbd0: 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63  *,sqlite3*,int,c
cbe0: 68 61 72 20 63 6f 6e 73 74 2a 2c 63 68 61 72 20  har const*,char 
cbf0: 63 6f 6e 73 74 2a 2c 73 71 6c 69 74 65 33 5f 69  const*,sqlite3_i
cc00: 6e 74 36 34 2c 73 71 6c 69 74 65 33 5f 69 6e 74  nt64,sqlite3_int
cc10: 36 34 0a 20 20 29 3b 0a 20 20 50 72 65 55 70 64  64.  );.  PreUpd
cc20: 61 74 65 20 2a 70 50 72 65 55 70 64 61 74 65 3b  ate *pPreUpdate;
cc30: 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65          /* Conte
cc40: 78 74 20 66 6f 72 20 61 63 74 69 76 65 20 70 72  xt for active pr
cc50: 65 2d 75 70 64 61 74 65 20 63 61 6c 6c 62 61 63  e-update callbac
cc60: 6b 20 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k */.#endif /* S
cc70: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45  QLITE_ENABLE_PRE
cc80: 55 50 44 41 54 45 5f 48 4f 4f 4b 20 2a 2f 0a 23  UPDATE_HOOK */.#
cc90: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
cca0: 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20 28 2a 78  IT_WAL.  int (*x
ccb0: 57 61 6c 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69  WalCallback)(voi
ccc0: 64 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a 2c 20  d *, sqlite3 *, 
ccd0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e  const char *, in
cce0: 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70 57 61 6c  t);.  void *pWal
ccf0: 41 72 67 3b 0a 23 65 6e 64 69 66 0a 20 20 76 6f  Arg;.#endif.  vo
cd00: 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 29  id(*xCollNeeded)
cd10: 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c  (void*,sqlite3*,
cd20: 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f 6e  int eTextRep,con
cd30: 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69  st char*);.  voi
cd40: 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 31 36  d(*xCollNeeded16
cd50: 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a  )(void*,sqlite3*
cd60: 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f  ,int eTextRep,co
cd70: 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f  nst void*);.  vo
cd80: 69 64 20 2a 70 43 6f 6c 6c 4e 65 65 64 65 64 41  id *pCollNeededA
cd90: 72 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61  rg;.  sqlite3_va
cda0: 6c 75 65 20 2a 70 45 72 72 3b 20 20 20 20 20 20  lue *pErr;      
cdb0: 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65      /* Most rece
cdc0: 6e 74 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  nt error message
cdd0: 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20   */.  union {.  
cde0: 20 20 76 6f 6c 61 74 69 6c 65 20 69 6e 74 20 69    volatile int i
cdf0: 73 49 6e 74 65 72 72 75 70 74 65 64 3b 20 2f 2a  sInterrupted; /*
ce00: 20 54 72 75 65 20 69 66 20 73 71 6c 69 74 65 33   True if sqlite3
ce10: 5f 69 6e 74 65 72 72 75 70 74 20 68 61 73 20 62  _interrupt has b
ce20: 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20  een called */.  
ce30: 20 20 64 6f 75 62 6c 65 20 6e 6f 74 55 73 65 64    double notUsed
ce40: 31 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  1;            /*
ce50: 20 53 70 61 63 65 72 20 2a 2f 0a 20 20 7d 20 75   Spacer */.  } u
ce60: 31 3b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 20 6c  1;.  Lookaside l
ce70: 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20  ookaside;       
ce80: 20 20 20 2f 2a 20 4c 6f 6f 6b 61 73 69 64 65 20     /* Lookaside 
ce90: 6d 61 6c 6c 6f 63 20 63 6f 6e 66 69 67 75 72 61  malloc configura
cea0: 74 69 6f 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20  tion */.#ifndef 
ceb0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48  SQLITE_OMIT_AUTH
cec0: 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 73 71 6c 69  ORIZATION.  sqli
ced0: 74 65 33 5f 78 61 75 74 68 20 78 41 75 74 68 3b  te3_xauth xAuth;
cee0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 63 63            /* Acc
cef0: 65 73 73 20 61 75 74 68 6f 72 69 7a 61 74 69 6f  ess authorizatio
cf00: 6e 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  n function */.  
cf10: 76 6f 69 64 20 2a 70 41 75 74 68 41 72 67 3b 20  void *pAuthArg; 
cf20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
cf30: 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f   1st argument to
cf40: 20 74 68 65 20 61 63 63 65 73 73 20 61 75 74 68   the access auth
cf50: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 65 6e   function */.#en
cf60: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
cf70: 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53  TE_OMIT_PROGRESS
cf80: 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e 74 20  _CALLBACK.  int 
cf90: 28 2a 78 50 72 6f 67 72 65 73 73 29 28 76 6f 69  (*xProgress)(voi
cfa0: 64 20 2a 29 3b 20 20 20 20 20 2f 2a 20 54 68 65  d *);     /* The
cfb0: 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61   progress callba
cfc0: 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50  ck */.  void *pP
cfd0: 72 6f 67 72 65 73 73 41 72 67 3b 20 20 20 20 20  rogressArg;     
cfe0: 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e        /* Argumen
cff0: 74 20 74 6f 20 74 68 65 20 70 72 6f 67 72 65 73  t to the progres
d000: 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  s callback */.  
d010: 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67 72 65  unsigned nProgre
d020: 73 73 4f 70 73 3b 20 20 20 20 20 20 20 20 2f 2a  ssOps;        /*
d030: 20 4e 75 6d 62 65 72 20 6f 66 20 6f 70 63 6f 64   Number of opcod
d040: 65 73 20 66 6f 72 20 70 72 6f 67 72 65 73 73 20  es for progress 
d050: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e 64  callback */.#end
d060: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
d070: 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
d080: 42 4c 45 0a 20 20 69 6e 74 20 6e 56 54 72 61 6e  BLE.  int nVTran
d090: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
d0a0: 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65 64      /* Allocated
d0b0: 20 73 69 7a 65 20 6f 66 20 61 56 54 72 61 6e 73   size of aVTrans
d0c0: 20 2a 2f 0a 20 20 48 61 73 68 20 61 4d 6f 64 75   */.  Hash aModu
d0d0: 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  le;             
d0e0: 20 20 20 20 2f 2a 20 70 6f 70 75 6c 61 74 65 64      /* populated
d0f0: 20 62 79 20 73 71 6c 69 74 65 33 5f 63 72 65 61   by sqlite3_crea
d100: 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20  te_module() */. 
d110: 20 56 74 61 62 43 74 78 20 2a 70 56 74 61 62 43   VtabCtx *pVtabC
d120: 74 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  tx;            /
d130: 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72 20 61 63  * Context for ac
d140: 74 69 76 65 20 76 74 61 62 20 63 6f 6e 6e 65 63  tive vtab connec
d150: 74 2f 63 72 65 61 74 65 20 2a 2f 0a 20 20 56 54  t/create */.  VT
d160: 61 62 6c 65 20 2a 2a 61 56 54 72 61 6e 73 3b 20  able **aVTrans; 
d170: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
d180: 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 77 69  irtual tables wi
d190: 74 68 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74  th open transact
d1a0: 69 6f 6e 73 20 2a 2f 0a 20 20 56 54 61 62 6c 65  ions */.  VTable
d1b0: 20 2a 70 44 69 73 63 6f 6e 6e 65 63 74 3b 20 20   *pDisconnect;  
d1c0: 20 20 20 20 20 20 20 20 2f 2a 20 44 69 73 63 6f          /* Disco
d1d0: 6e 6e 65 63 74 20 74 68 65 73 65 20 69 6e 20 6e  nnect these in n
d1e0: 65 78 74 20 73 71 6c 69 74 65 33 5f 70 72 65 70  ext sqlite3_prep
d1f0: 61 72 65 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a  are() */.#endif.
d200: 20 20 48 61 73 68 20 61 46 75 6e 63 3b 20 20 20    Hash aFunc;   
d210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d220: 2f 2a 20 48 61 73 68 20 74 61 62 6c 65 20 6f 66  /* Hash table of
d230: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 75 6e 63   connection func
d240: 74 69 6f 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20  tions */.  Hash 
d250: 61 43 6f 6c 6c 53 65 71 3b 20 20 20 20 20 20 20  aCollSeq;       
d260: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20           /* All 
d270: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
d280: 63 65 73 20 2a 2f 0a 20 20 42 75 73 79 48 61 6e  ces */.  BusyHan
d290: 64 6c 65 72 20 62 75 73 79 48 61 6e 64 6c 65 72  dler busyHandler
d2a0: 3b 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20 63  ;      /* Busy c
d2b0: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 44 62 20  allback */.  Db 
d2c0: 61 44 62 53 74 61 74 69 63 5b 32 5d 3b 20 20 20  aDbStatic[2];   
d2d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74             /* St
d2e0: 61 74 69 63 20 73 70 61 63 65 20 66 6f 72 20 74  atic space for t
d2f0: 68 65 20 32 20 64 65 66 61 75 6c 74 20 62 61 63  he 2 default bac
d300: 6b 65 6e 64 73 20 2a 2f 0a 20 20 53 61 76 65 70  kends */.  Savep
d310: 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e 74  oint *pSavepoint
d320: 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74  ;        /* List
d330: 20 6f 66 20 61 63 74 69 76 65 20 73 61 76 65 70   of active savep
d340: 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 62  oints */.  int b
d350: 75 73 79 54 69 6d 65 6f 75 74 3b 20 20 20 20 20  usyTimeout;     
d360: 20 20 20 20 20 20 20 20 20 2f 2a 20 42 75 73 79           /* Busy
d370: 20 68 61 6e 64 6c 65 72 20 74 69 6d 65 6f 75 74   handler timeout
d380: 2c 20 69 6e 20 6d 73 65 63 20 2a 2f 0a 20 20 69  , in msec */.  i
d390: 6e 74 20 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20  nt nSavepoint;  
d3a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
d3b0: 4e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72  Number of non-tr
d3c0: 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f  ansaction savepo
d3d0: 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  ints */.  int nS
d3e0: 74 61 74 65 6d 65 6e 74 3b 20 20 20 20 20 20 20  tatement;       
d3f0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
d400: 72 20 6f 66 20 6e 65 73 74 65 64 20 73 74 61 74  r of nested stat
d410: 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f  ement-transactio
d420: 6e 73 20 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65  ns  */.  i64 nDe
d430: 66 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20 20  ferredCons;     
d440: 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64 65         /* Net de
d450: 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e  ferred constrain
d460: 74 73 20 74 68 69 73 20 74 72 61 6e 73 61 63 74  ts this transact
d470: 69 6f 6e 2e 20 2a 2f 0a 20 20 69 36 34 20 6e 44  ion. */.  i64 nD
d480: 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20  eferredImmCons; 
d490: 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64          /* Net d
d4a0: 65 66 65 72 72 65 64 20 69 6d 6d 65 64 69 61 74  eferred immediat
d4b0: 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f  e constraints */
d4c0: 0a 20 20 69 6e 74 20 2a 70 6e 42 79 74 65 73 46  .  int *pnBytesF
d4d0: 72 65 65 64 3b 20 20 20 20 20 20 20 20 20 20 20  reed;           
d4e0: 20 2f 2a 20 49 66 20 6e 6f 74 20 4e 55 4c 4c 2c   /* If not NULL,
d4f0: 20 69 6e 63 72 65 6d 65 6e 74 20 74 68 69 73 20   increment this 
d500: 69 6e 20 44 62 46 72 65 65 28 29 20 2a 2f 0a 23  in DbFree() */.#
d510: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
d520: 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46  BLE_UNLOCK_NOTIF
d530: 59 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f  Y.  /* The follo
d540: 77 69 6e 67 20 76 61 72 69 61 62 6c 65 73 20 61  wing variables a
d550: 72 65 20 61 6c 6c 20 70 72 6f 74 65 63 74 65 64  re all protected
d560: 20 62 79 20 74 68 65 20 53 54 41 54 49 43 5f 4d   by the STATIC_M
d570: 41 53 54 45 52 0a 20 20 2a 2a 20 6d 75 74 65 78  ASTER.  ** mutex
d580: 2c 20 6e 6f 74 20 62 79 20 73 71 6c 69 74 65 33  , not by sqlite3
d590: 2e 6d 75 74 65 78 2e 20 54 68 65 79 20 61 72 65  .mutex. They are
d5a0: 20 75 73 65 64 20 62 79 20 63 6f 64 65 20 69 6e   used by code in
d5b0: 20 6e 6f 74 69 66 79 2e 63 2e 0a 20 20 2a 2a 0a   notify.c..  **.
d5c0: 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70 55 6e 6c    ** When X.pUnl
d5d0: 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59  ockConnection==Y
d5e0: 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61  , that means tha
d5f0: 74 20 58 20 69 73 20 77 61 69 74 69 6e 67 20 66  t X is waiting f
d600: 6f 72 20 59 20 74 6f 0a 20 20 2a 2a 20 75 6e 6c  or Y to.  ** unl
d610: 6f 63 6b 20 73 6f 20 74 68 61 74 20 69 74 20 63  ock so that it c
d620: 61 6e 20 70 72 6f 63 65 65 64 2e 0a 20 20 2a 2a  an proceed..  **
d630: 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70 42 6c  .  ** When X.pBl
d640: 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e  ockingConnection
d650: 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20  ==Y, that means 
d660: 74 68 61 74 20 73 6f 6d 65 74 68 69 6e 67 20 74  that something t
d670: 68 61 74 20 58 20 74 72 69 65 64 0a 20 20 2a 2a  hat X tried.  **
d680: 20 74 72 69 65 64 20 74 6f 20 64 6f 20 72 65 63   tried to do rec
d690: 65 6e 74 6c 79 20 66 61 69 6c 65 64 20 77 69 74  ently failed wit
d6a0: 68 20 61 6e 20 53 51 4c 49 54 45 5f 4c 4f 43 4b  h an SQLITE_LOCK
d6b0: 45 44 20 65 72 72 6f 72 20 64 75 65 20 74 6f 20  ED error due to 
d6c0: 6c 6f 63 6b 73 0a 20 20 2a 2a 20 68 65 6c 64 20  locks.  ** held 
d6d0: 62 79 20 59 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c  by Y..  */.  sql
d6e0: 69 74 65 33 20 2a 70 42 6c 6f 63 6b 69 6e 67 43  ite3 *pBlockingC
d6f0: 6f 6e 6e 65 63 74 69 6f 6e 3b 20 2f 2a 20 43 6f  onnection; /* Co
d700: 6e 6e 65 63 74 69 6f 6e 20 74 68 61 74 20 63 61  nnection that ca
d710: 75 73 65 64 20 53 51 4c 49 54 45 5f 4c 4f 43 4b  used SQLITE_LOCK
d720: 45 44 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20  ED */.  sqlite3 
d730: 2a 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69  *pUnlockConnecti
d740: 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  on;           /*
d750: 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 77   Connection to w
d760: 61 74 63 68 20 66 6f 72 20 75 6e 6c 6f 63 6b 20  atch for unlock 
d770: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 6e 6c 6f  */.  void *pUnlo
d780: 63 6b 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  ckArg;          
d790: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
d7a0: 67 75 6d 65 6e 74 20 74 6f 20 78 55 6e 6c 6f 63  gument to xUnloc
d7b0: 6b 4e 6f 74 69 66 79 20 2a 2f 0a 20 20 76 6f 69  kNotify */.  voi
d7c0: 64 20 28 2a 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66  d (*xUnlockNotif
d7d0: 79 29 28 76 6f 69 64 20 2a 2a 2c 20 69 6e 74 29  y)(void **, int)
d7e0: 3b 20 20 2f 2a 20 55 6e 6c 6f 63 6b 20 6e 6f 74  ;  /* Unlock not
d7f0: 69 66 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  ify callback */.
d800: 20 20 73 71 6c 69 74 65 33 20 2a 70 4e 65 78 74    sqlite3 *pNext
d810: 42 6c 6f 63 6b 65 64 3b 20 20 20 20 20 20 20 20  Blocked;        
d820: 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69 73 74 20  /* Next in list 
d830: 6f 66 20 61 6c 6c 20 62 6c 6f 63 6b 65 64 20 63  of all blocked c
d840: 6f 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f 0a 23 65  onnections */.#e
d850: 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49  ndif.#ifdef SQLI
d860: 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49  TE_USER_AUTHENTI
d870: 43 41 54 49 4f 4e 0a 20 20 73 71 6c 69 74 65 33  CATION.  sqlite3
d880: 5f 75 73 65 72 61 75 74 68 20 61 75 74 68 3b 20  _userauth auth; 
d890: 20 20 20 20 20 20 20 2f 2a 20 55 73 65 72 20 61         /* User a
d8a0: 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 69 6e  uthentication in
d8b0: 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 23 65 6e  formation */.#en
d8c0: 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20  dif.};../*.** A 
d8d0: 6d 61 63 72 6f 20 74 6f 20 64 69 73 63 6f 76 65  macro to discove
d8e0: 72 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f  r the encoding o
d8f0: 66 20 61 20 64 61 74 61 62 61 73 65 2e 0a 2a 2f  f a database..*/
d900: 0a 23 64 65 66 69 6e 65 20 53 43 48 45 4d 41 5f  .#define SCHEMA_
d910: 45 4e 43 28 64 62 29 20 28 28 64 62 29 2d 3e 61  ENC(db) ((db)->a
d920: 44 62 5b 30 5d 2e 70 53 63 68 65 6d 61 2d 3e 65  Db[0].pSchema->e
d930: 6e 63 29 0a 23 64 65 66 69 6e 65 20 45 4e 43 28  nc).#define ENC(
d940: 64 62 29 20 20 20 20 20 20 20 20 28 28 64 62 29  db)        ((db)
d950: 2d 3e 65 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f  ->enc)../*.** Po
d960: 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f  ssible values fo
d970: 72 20 74 68 65 20 73 71 6c 69 74 65 33 2e 66 6c  r the sqlite3.fl
d980: 61 67 73 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65  ags..**.** Value
d990: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 65 6e   constraints (en
d9a0: 66 6f 72 63 65 64 20 76 69 61 20 61 73 73 65 72  forced via asser
d9b0: 74 28 29 29 3a 0a 2a 2a 20 20 20 20 20 20 53 51  t()):.**      SQ
d9c0: 4c 49 54 45 5f 46 75 6c 6c 46 53 79 6e 63 20 20  LITE_FullFSync  
d9d0: 20 20 20 3d 3d 20 50 41 47 45 52 5f 46 55 4c 4c     == PAGER_FULL
d9e0: 46 53 59 4e 43 0a 2a 2a 20 20 20 20 20 20 53 51  FSYNC.**      SQ
d9f0: 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53 79  LITE_CkptFullFSy
da00: 6e 63 20 3d 3d 20 50 41 47 45 52 5f 43 4b 50 54  nc == PAGER_CKPT
da10: 5f 46 55 4c 4c 46 53 59 4e 43 0a 2a 2a 20 20 20  _FULLFSYNC.**   
da20: 20 20 20 53 51 4c 49 54 45 5f 43 61 63 68 65 53     SQLITE_CacheS
da30: 70 69 6c 6c 20 20 20 20 3d 3d 20 50 41 47 45 52  pill    == PAGER
da40: 5f 43 41 43 48 45 5f 53 50 49 4c 4c 0a 2a 2f 0a  _CACHE_SPILL.*/.
da50: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57  #define SQLITE_W
da60: 72 69 74 65 53 63 68 65 6d 61 20 20 20 20 30 78  riteSchema    0x
da70: 30 30 30 30 30 30 30 31 20 20 2f 2a 20 4f 4b 20  00000001  /* OK 
da80: 74 6f 20 75 70 64 61 74 65 20 53 51 4c 49 54 45  to update SQLITE
da90: 5f 4d 41 53 54 45 52 20 2a 2f 0a 23 64 65 66 69  _MASTER */.#defi
daa0: 6e 65 20 53 51 4c 49 54 45 5f 4c 65 67 61 63 79  ne SQLITE_Legacy
dab0: 46 69 6c 65 46 6d 74 20 20 30 78 30 30 30 30 30  FileFmt  0x00000
dac0: 30 30 32 20 20 2f 2a 20 43 72 65 61 74 65 20 6e  002  /* Create n
dad0: 65 77 20 64 61 74 61 62 61 73 65 73 20 69 6e 20  ew databases in 
dae0: 66 6f 72 6d 61 74 20 31 20 2a 2f 0a 23 64 65 66  format 1 */.#def
daf0: 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c 43  ine SQLITE_FullC
db00: 6f 6c 4e 61 6d 65 73 20 20 20 30 78 30 30 30 30  olNames   0x0000
db10: 30 30 30 34 20 20 2f 2a 20 53 68 6f 77 20 66 75  0004  /* Show fu
db20: 6c 6c 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  ll column names 
db30: 6f 6e 20 53 45 4c 45 43 54 20 2a 2f 0a 23 64 65  on SELECT */.#de
db40: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c  fine SQLITE_Full
db50: 46 53 79 6e 63 20 20 20 20 20 20 30 78 30 30 30  FSync      0x000
db60: 30 30 30 30 38 20 20 2f 2a 20 55 73 65 20 66 75  00008  /* Use fu
db70: 6c 6c 20 66 73 79 6e 63 20 6f 6e 20 74 68 65 20  ll fsync on the 
db80: 62 61 63 6b 65 6e 64 20 2a 2f 0a 23 64 65 66 69  backend */.#defi
db90: 6e 65 20 53 51 4c 49 54 45 5f 43 6b 70 74 46 75  ne SQLITE_CkptFu
dba0: 6c 6c 46 53 79 6e 63 20 20 30 78 30 30 30 30 30  llFSync  0x00000
dbb0: 30 31 30 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c  010  /* Use full
dbc0: 20 66 73 79 6e 63 20 66 6f 72 20 63 68 65 63 6b   fsync for check
dbd0: 70 6f 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  point */.#define
dbe0: 20 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70 69   SQLITE_CacheSpi
dbf0: 6c 6c 20 20 20 20 20 30 78 30 30 30 30 30 30 32  ll     0x0000002
dc00: 30 20 20 2f 2a 20 4f 4b 20 74 6f 20 73 70 69 6c  0  /* OK to spil
dc10: 6c 20 70 61 67 65 72 20 63 61 63 68 65 20 2a 2f  l pager cache */
dc20: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
dc30: 53 68 6f 72 74 43 6f 6c 4e 61 6d 65 73 20 20 30  ShortColNames  0
dc40: 78 30 30 30 30 30 30 34 30 20 20 2f 2a 20 53 68  x00000040  /* Sh
dc50: 6f 77 20 73 68 6f 72 74 20 63 6f 6c 75 6d 6e 73  ow short columns
dc60: 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e   names */.#defin
dc70: 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f  e SQLITE_CountRo
dc80: 77 73 20 20 20 20 20 20 30 78 30 30 30 30 30 30  ws      0x000000
dc90: 38 30 20 20 2f 2a 20 43 6f 75 6e 74 20 72 6f 77  80  /* Count row
dca0: 73 20 63 68 61 6e 67 65 64 20 62 79 20 49 4e 53  s changed by INS
dcb0: 45 52 54 2c 20 2a 2f 0a 20 20 20 20 20 20 20 20  ERT, */.        
dcc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dcd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dce0: 20 20 2f 2a 20 20 20 44 45 4c 45 54 45 2c 20 6f    /*   DELETE, o
dcf0: 72 20 55 50 44 41 54 45 20 61 6e 64 20 72 65 74  r UPDATE and ret
dd00: 75 72 6e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  urn */.         
dd10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd30: 20 2f 2a 20 20 20 74 68 65 20 63 6f 75 6e 74 20   /*   the count 
dd40: 75 73 69 6e 67 20 61 20 63 61 6c 6c 62 61 63 6b  using a callback
dd50: 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  . */.#define SQL
dd60: 49 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62 61 63 6b  ITE_NullCallback
dd70: 20 20 20 30 78 30 30 30 30 30 31 30 30 20 20 2f     0x00000100  /
dd80: 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 63 61 6c  * Invoke the cal
dd90: 6c 62 61 63 6b 20 6f 6e 63 65 20 69 66 20 74 68  lback once if th
dda0: 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  e */.           
ddb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ddc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
ddd0: 2a 20 20 20 72 65 73 75 6c 74 20 73 65 74 20 69  *   result set i
dde0: 73 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69  s empty */.#defi
ddf0: 6e 65 20 53 51 4c 49 54 45 5f 49 67 6e 6f 72 65  ne SQLITE_Ignore
de00: 43 68 65 63 6b 73 20 20 20 30 78 30 30 30 30 30  Checks   0x00000
de10: 32 30 30 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 65  200  /* Do not e
de20: 6e 66 6f 72 63 65 20 63 68 65 63 6b 20 63 6f 6e  nforce check con
de30: 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66  straints */.#def
de40: 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 61 64 55  ine SQLITE_ReadU
de50: 6e 63 6f 6d 6d 69 74 20 20 20 30 78 30 30 30 30  ncommit   0x0000
de60: 30 34 30 30 20 20 2f 2a 20 52 45 41 44 20 55 4e  0400  /* READ UN
de70: 43 4f 4d 4d 49 54 54 45 44 20 69 6e 20 73 68 61  COMMITTED in sha
de80: 72 65 64 2d 63 61 63 68 65 20 2a 2f 0a 23 64 65  red-cache */.#de
de90: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 6f 43 6b  fine SQLITE_NoCk
dea0: 70 74 4f 6e 43 6c 6f 73 65 20 20 30 78 30 30 30  ptOnClose  0x000
deb0: 30 30 38 30 30 20 20 2f 2a 20 4e 6f 20 63 68 65  00800  /* No che
dec0: 63 6b 70 6f 69 6e 74 20 6f 6e 20 63 6c 6f 73 65  ckpoint on close
ded0: 28 29 2f 44 45 54 41 43 48 20 2a 2f 0a 23 64 65  ()/DETACH */.#de
dee0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 76 65  fine SQLITE_Reve
def0: 72 73 65 4f 72 64 65 72 20 20 20 30 78 30 30 30  rseOrder   0x000
df00: 30 31 30 30 30 20 20 2f 2a 20 52 65 76 65 72 73  01000  /* Revers
df10: 65 20 75 6e 6f 72 64 65 72 65 64 20 53 45 4c 45  e unordered SELE
df20: 43 54 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  CTs */.#define S
df30: 51 4c 49 54 45 5f 52 65 63 54 72 69 67 67 65 72  QLITE_RecTrigger
df40: 73 20 20 20 20 30 78 30 30 30 30 32 30 30 30 20  s    0x00002000 
df50: 20 2f 2a 20 45 6e 61 62 6c 65 20 72 65 63 75 72   /* Enable recur
df60: 73 69 76 65 20 74 72 69 67 67 65 72 73 20 2a 2f  sive triggers */
df70: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
df80: 46 6f 72 65 69 67 6e 4b 65 79 73 20 20 20 20 30  ForeignKeys    0
df90: 78 30 30 30 30 34 30 30 30 20 20 2f 2a 20 45 6e  x00004000  /* En
dfa0: 66 6f 72 63 65 20 66 6f 72 65 69 67 6e 20 6b 65  force foreign ke
dfb0: 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 20 2a  y constraints  *
dfc0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
dfd0: 5f 41 75 74 6f 49 6e 64 65 78 20 20 20 20 20 20  _AutoIndex      
dfe0: 30 78 30 30 30 30 38 30 30 30 20 20 2f 2a 20 45  0x00008000  /* E
dff0: 6e 61 62 6c 65 20 61 75 74 6f 6d 61 74 69 63 20  nable automatic 
e000: 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69  indexes */.#defi
e010: 6e 65 20 53 51 4c 49 54 45 5f 4c 6f 61 64 45 78  ne SQLITE_LoadEx
e020: 74 65 6e 73 69 6f 6e 20 20 30 78 30 30 30 31 30  tension  0x00010
e030: 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 6c  000  /* Enable l
e040: 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 20 2a 2f  oad_extension */
e050: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e060: 4c 6f 61 64 45 78 74 46 75 6e 63 20 20 20 20 30  LoadExtFunc    0
e070: 78 30 30 30 32 30 30 30 30 20 20 2f 2a 20 45 6e  x00020000  /* En
e080: 61 62 6c 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73  able load_extens
e090: 69 6f 6e 28 29 20 53 51 4c 20 66 75 6e 63 20 2a  ion() SQL func *
e0a0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e0b0: 5f 45 6e 61 62 6c 65 54 72 69 67 67 65 72 20 20  _EnableTrigger  
e0c0: 30 78 30 30 30 34 30 30 30 30 20 20 2f 2a 20 54  0x00040000  /* T
e0d0: 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 74 72  rue to enable tr
e0e0: 69 67 67 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e  iggers */.#defin
e0f0: 65 20 53 51 4c 49 54 45 5f 44 65 66 65 72 46 4b  e SQLITE_DeferFK
e100: 73 20 20 20 20 20 20 20 30 78 30 30 30 38 30 30  s       0x000800
e110: 30 30 20 20 2f 2a 20 44 65 66 65 72 20 61 6c 6c  00  /* Defer all
e120: 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20   FK constraints 
e130: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e140: 45 5f 51 75 65 72 79 4f 6e 6c 79 20 20 20 20 20  E_QueryOnly     
e150: 20 30 78 30 30 31 30 30 30 30 30 20 20 2f 2a 20   0x00100000  /* 
e160: 44 69 73 61 62 6c 65 20 64 61 74 61 62 61 73 65  Disable database
e170: 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66   changes */.#def
e180: 69 6e 65 20 53 51 4c 49 54 45 5f 43 65 6c 6c 53  ine SQLITE_CellS
e190: 69 7a 65 43 6b 20 20 20 20 20 30 78 30 30 32 30  izeCk     0x0020
e1a0: 30 30 30 30 20 20 2f 2a 20 43 68 65 63 6b 20 62  0000  /* Check b
e1b0: 74 72 65 65 20 63 65 6c 6c 20 73 69 7a 65 73 20  tree cell sizes 
e1c0: 6f 6e 20 6c 6f 61 64 20 2a 2f 0a 23 64 65 66 69  on load */.#defi
e1d0: 6e 65 20 53 51 4c 49 54 45 5f 46 74 73 33 54 6f  ne SQLITE_Fts3To
e1e0: 6b 65 6e 69 7a 65 72 20 20 30 78 30 30 34 30 30  kenizer  0x00400
e1f0: 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 66  000  /* Enable f
e200: 74 73 33 5f 74 6f 6b 65 6e 69 7a 65 72 28 32 29  ts3_tokenizer(2)
e210: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e220: 54 45 5f 45 6e 61 62 6c 65 51 50 53 47 20 20 20  TE_EnableQPSG   
e230: 20 20 30 78 30 30 38 30 30 30 30 30 20 20 2f 2a    0x00800000  /*
e240: 20 51 75 65 72 79 20 50 6c 61 6e 6e 65 72 20 53   Query Planner S
e250: 74 61 62 69 6c 69 74 79 20 47 75 61 72 61 6e 74  tability Guarant
e260: 65 65 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ee*/.#define SQL
e270: 49 54 45 5f 54 72 69 67 67 65 72 45 51 50 20 20  ITE_TriggerEQP  
e280: 20 20 20 30 78 30 31 30 30 30 30 30 30 20 20 2f     0x01000000  /
e290: 2a 20 53 68 6f 77 20 74 72 69 67 67 65 72 20 45  * Show trigger E
e2a0: 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41  XPLAIN QUERY PLA
e2b0: 4e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  N */.#define SQL
e2c0: 49 54 45 5f 52 65 73 65 74 44 61 74 61 62 61 73  ITE_ResetDatabas
e2d0: 65 20 20 30 78 30 32 30 30 30 30 30 30 20 20 2f  e  0x02000000  /
e2e0: 2a 20 52 65 73 65 74 20 74 68 65 20 64 61 74 61  * Reset the data
e2f0: 62 61 73 65 20 2a 2f 0a 0a 2f 2a 20 46 6c 61 67  base */../* Flag
e300: 73 20 75 73 65 64 20 6f 6e 6c 79 20 69 66 20 64  s used only if d
e310: 65 62 75 67 67 69 6e 67 20 2a 2f 0a 23 69 66 64  ebugging */.#ifd
e320: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
e330: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
e340: 71 6c 54 72 61 63 65 20 20 20 20 20 20 20 30 78  qlTrace       0x
e350: 30 38 30 30 30 30 30 30 20 20 2f 2a 20 44 65 62  08000000  /* Deb
e360: 75 67 20 70 72 69 6e 74 20 53 51 4c 20 61 73 20  ug print SQL as 
e370: 69 74 20 65 78 65 63 75 74 65 73 20 2a 2f 0a 23  it executes */.#
e380: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64  define SQLITE_Vd
e390: 62 65 4c 69 73 74 69 6e 67 20 20 20 20 30 78 31  beListing    0x1
e3a0: 30 30 30 30 30 30 30 20 20 2f 2a 20 44 65 62 75  0000000  /* Debu
e3b0: 67 20 6c 69 73 74 69 6e 67 73 20 6f 66 20 56 44  g listings of VD
e3c0: 42 45 20 70 72 6f 67 72 61 6d 73 20 2a 2f 0a 23  BE programs */.#
e3d0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64  define SQLITE_Vd
e3e0: 62 65 54 72 61 63 65 20 20 20 20 20 20 30 78 32  beTrace      0x2
e3f0: 30 30 30 30 30 30 30 20 20 2f 2a 20 54 72 75 65  0000000  /* True
e400: 20 74 6f 20 74 72 61 63 65 20 56 44 42 45 20 65   to trace VDBE e
e410: 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  xecution */.#def
e420: 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 41  ine SQLITE_VdbeA
e430: 64 64 6f 70 54 72 61 63 65 20 30 78 34 30 30 30  ddopTrace 0x4000
e440: 30 30 30 30 20 20 2f 2a 20 54 72 61 63 65 20 73  0000  /* Trace s
e450: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 28  qlite3VdbeAddOp(
e460: 29 20 63 61 6c 6c 73 20 2a 2f 0a 23 64 65 66 69  ) calls */.#defi
e470: 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 45 51  ne SQLITE_VdbeEQ
e480: 50 20 20 20 20 20 20 20 20 30 78 38 30 30 30 30  P        0x80000
e490: 30 30 30 20 20 2f 2a 20 44 65 62 75 67 20 45 58  000  /* Debug EX
e4a0: 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e  PLAIN QUERY PLAN
e4b0: 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a   */.#endif../*.*
e4c0: 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
e4d0: 20 66 6f 72 20 73 71 6c 69 74 65 33 2e 6d 44 62   for sqlite3.mDb
e4e0: 46 6c 61 67 73 0a 2a 2f 0a 23 64 65 66 69 6e 65  Flags.*/.#define
e4f0: 20 44 42 46 4c 41 47 5f 53 63 68 65 6d 61 43 68   DBFLAG_SchemaCh
e500: 61 6e 67 65 20 20 20 30 78 30 30 30 31 20 20 2f  ange   0x0001  /
e510: 2a 20 55 6e 63 6f 6d 6d 69 74 74 65 64 20 48 61  * Uncommitted Ha
e520: 73 68 20 74 61 62 6c 65 20 63 68 61 6e 67 65 73  sh table changes
e530: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 46 4c   */.#define DBFL
e540: 41 47 5f 50 72 65 66 65 72 42 75 69 6c 74 69 6e  AG_PreferBuiltin
e550: 20 20 30 78 30 30 30 32 20 20 2f 2a 20 50 72 65    0x0002  /* Pre
e560: 66 65 72 65 6e 63 65 20 74 6f 20 62 75 69 6c 74  ference to built
e570: 2d 69 6e 20 66 75 6e 63 73 20 2a 2f 0a 23 64 65  -in funcs */.#de
e580: 66 69 6e 65 20 44 42 46 4c 41 47 5f 56 61 63 75  fine DBFLAG_Vacu
e590: 75 6d 20 20 20 20 20 20 20 20 20 30 78 30 30 30  um         0x000
e5a0: 34 20 20 2f 2a 20 43 75 72 72 65 6e 74 6c 79 20  4  /* Currently 
e5b0: 69 6e 20 61 20 56 41 43 55 55 4d 20 2a 2f 0a 23  in a VACUUM */.#
e5c0: 64 65 66 69 6e 65 20 44 42 46 4c 41 47 5f 53 63  define DBFLAG_Sc
e5d0: 68 65 6d 61 4b 6e 6f 77 6e 4f 6b 20 20 30 78 30  hemaKnownOk  0x0
e5e0: 30 30 38 20 20 2f 2a 20 53 63 68 65 6d 61 20 69  008  /* Schema i
e5f0: 73 20 6b 6e 6f 77 6e 20 74 6f 20 62 65 20 76 61  s known to be va
e600: 6c 69 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 42 69  lid */../*.** Bi
e610: 74 73 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65  ts of the sqlite
e620: 33 2e 64 62 4f 70 74 46 6c 61 67 73 20 66 69 65  3.dbOptFlags fie
e630: 6c 64 20 74 68 61 74 20 61 72 65 20 75 73 65 64  ld that are used
e640: 20 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74   by the.** sqlit
e650: 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28  e3_test_control(
e660: 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f  SQLITE_TESTCTRL_
e670: 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 53 2c 2e 2e  OPTIMIZATIONS,..
e680: 2e 29 20 69 6e 74 65 72 66 61 63 65 20 74 6f 0a  .) interface to.
e690: 2a 2a 20 73 65 6c 65 63 74 69 76 65 6c 79 20 64  ** selectively d
e6a0: 69 73 61 62 6c 65 20 76 61 72 69 6f 75 73 20 6f  isable various o
e6b0: 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2f  ptimizations..*/
e6c0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e6d0: 51 75 65 72 79 46 6c 61 74 74 65 6e 65 72 20 30  QueryFlattener 0
e6e0: 78 30 30 30 31 20 20 20 2f 2a 20 51 75 65 72 79  x0001   /* Query
e6f0: 20 66 6c 61 74 74 65 6e 69 6e 67 20 2a 2f 0a 23   flattening */.#
e700: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f  define SQLITE_Co
e710: 6c 75 6d 6e 43 61 63 68 65 20 20 20 20 30 78 30  lumnCache    0x0
e720: 30 30 32 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20  002   /* Column 
e730: 63 61 63 68 65 20 2a 2f 0a 23 64 65 66 69 6e 65  cache */.#define
e740: 20 53 51 4c 49 54 45 5f 47 72 6f 75 70 42 79 4f   SQLITE_GroupByO
e750: 72 64 65 72 20 20 20 30 78 30 30 30 34 20 20 20  rder   0x0004   
e760: 2f 2a 20 47 52 4f 55 50 42 59 20 63 6f 76 65 72  /* GROUPBY cover
e770: 20 6f 66 20 4f 52 44 45 52 42 59 20 2a 2f 0a 23   of ORDERBY */.#
e780: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 61  define SQLITE_Fa
e790: 63 74 6f 72 4f 75 74 43 6f 6e 73 74 20 30 78 30  ctorOutConst 0x0
e7a0: 30 30 38 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e  008   /* Constan
e7b0: 74 20 66 61 63 74 6f 72 69 6e 67 20 2a 2f 0a 23  t factoring */.#
e7c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 69  define SQLITE_Di
e7d0: 73 74 69 6e 63 74 4f 70 74 20 20 20 20 30 78 30  stinctOpt    0x0
e7e0: 30 31 30 20 20 20 2f 2a 20 44 49 53 54 49 4e 43  010   /* DISTINC
e7f0: 54 20 75 73 69 6e 67 20 69 6e 64 65 78 65 73 20  T using indexes 
e800: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e810: 45 5f 43 6f 76 65 72 49 64 78 53 63 61 6e 20 20  E_CoverIdxScan  
e820: 20 30 78 30 30 32 30 20 20 20 2f 2a 20 43 6f 76   0x0020   /* Cov
e830: 65 72 69 6e 67 20 69 6e 64 65 78 20 73 63 61 6e  ering index scan
e840: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
e850: 49 54 45 5f 4f 72 64 65 72 42 79 49 64 78 4a 6f  ITE_OrderByIdxJo
e860: 69 6e 20 30 78 30 30 34 30 20 20 20 2f 2a 20 4f  in 0x0040   /* O
e870: 52 44 45 52 20 42 59 20 6f 66 20 6a 6f 69 6e 73  RDER BY of joins
e880: 20 76 69 61 20 69 6e 64 65 78 20 2a 2f 0a 23 64   via index */.#d
e890: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 72 61  efine SQLITE_Tra
e8a0: 6e 73 69 74 69 76 65 20 20 20 20 20 30 78 30 30  nsitive     0x00
e8b0: 38 30 20 20 20 2f 2a 20 54 72 61 6e 73 69 74 69  80   /* Transiti
e8c0: 76 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  ve constraints *
e8d0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e8e0: 5f 4f 6d 69 74 4e 6f 6f 70 4a 6f 69 6e 20 20 20  _OmitNoopJoin   
e8f0: 30 78 30 31 30 30 20 20 20 2f 2a 20 4f 6d 69 74  0x0100   /* Omit
e900: 20 75 6e 75 73 65 64 20 74 61 62 6c 65 73 20 69   unused tables i
e910: 6e 20 6a 6f 69 6e 73 20 2a 2f 0a 23 64 65 66 69  n joins */.#defi
e920: 6e 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 4f  ne SQLITE_CountO
e930: 66 56 69 65 77 20 20 20 20 30 78 30 32 30 30 20  fView    0x0200 
e940: 20 20 2f 2a 20 54 68 65 20 63 6f 75 6e 74 2d 6f    /* The count-o
e950: 66 2d 76 69 65 77 20 6f 70 74 69 6d 69 7a 61 74  f-view optimizat
e960: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
e970: 51 4c 49 54 45 5f 43 75 72 73 6f 72 48 69 6e 74  QLITE_CursorHint
e980: 73 20 20 20 20 30 78 30 34 30 30 20 20 20 2f 2a  s    0x0400   /*
e990: 20 41 64 64 20 4f 50 5f 43 75 72 73 6f 72 48 69   Add OP_CursorHi
e9a0: 6e 74 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 23 64  nt opcodes */.#d
e9b0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 74 61  efine SQLITE_Sta
e9c0: 74 33 34 20 20 20 20 20 20 20 20 20 30 78 30 38  t34         0x08
e9d0: 30 30 20 20 20 2f 2a 20 55 73 65 20 53 54 41 54  00   /* Use STAT
e9e0: 33 20 6f 72 20 53 54 41 54 34 20 64 61 74 61 20  3 or STAT4 data 
e9f0: 2a 2f 0a 20 20 20 2f 2a 20 54 48 33 20 65 78 70  */.   /* TH3 exp
ea00: 65 63 74 73 20 74 68 65 20 53 74 61 74 33 34 20  ects the Stat34 
ea10: 20 5e 5e 5e 5e 5e 5e 20 76 61 6c 75 65 20 74 6f   ^^^^^^ value to
ea20: 20 62 65 20 30 78 30 38 30 30 2e 20 20 44 6f 6e   be 0x0800.  Don
ea30: 27 74 20 63 68 61 6e 67 65 20 69 74 20 2a 2f 0a  't change it */.
ea40: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50  #define SQLITE_P
ea50: 75 73 68 44 6f 77 6e 20 20 20 20 20 20 20 30 78  ushDown       0x
ea60: 31 30 30 30 20 20 20 2f 2a 20 54 68 65 20 70 75  1000   /* The pu
ea70: 73 68 2d 64 6f 77 6e 20 6f 70 74 69 6d 69 7a 61  sh-down optimiza
ea80: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
ea90: 53 51 4c 49 54 45 5f 53 69 6d 70 6c 69 66 79 4a  SQLITE_SimplifyJ
eaa0: 6f 69 6e 20 20 20 30 78 32 30 30 30 20 20 20 2f  oin   0x2000   /
eab0: 2a 20 43 6f 6e 76 65 72 74 20 4c 45 46 54 20 4a  * Convert LEFT J
eac0: 4f 49 4e 20 74 6f 20 4a 4f 49 4e 20 2a 2f 0a 23  OIN to JOIN */.#
ead0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 6c  define SQLITE_Al
eae0: 6c 4f 70 74 73 20 20 20 20 20 20 20 20 30 78 66  lOpts        0xf
eaf0: 66 66 66 20 20 20 2f 2a 20 41 6c 6c 20 6f 70 74  fff   /* All opt
eb00: 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f  imizations */../
eb10: 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 66 6f 72 20  *.** Macros for 
eb20: 74 65 73 74 69 6e 67 20 77 68 65 74 68 65 72 20  testing whether 
eb30: 6f 72 20 6e 6f 74 20 6f 70 74 69 6d 69 7a 61 74  or not optimizat
eb40: 69 6f 6e 73 20 61 72 65 20 65 6e 61 62 6c 65 64  ions are enabled
eb50: 20 6f 72 20 64 69 73 61 62 6c 65 64 2e 0a 2a 2f   or disabled..*/
eb60: 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a  .#define Optimiz
eb70: 61 74 69 6f 6e 44 69 73 61 62 6c 65 64 28 64 62  ationDisabled(db
eb80: 2c 20 6d 61 73 6b 29 20 20 28 28 28 64 62 29 2d  , mask)  (((db)-
eb90: 3e 64 62 4f 70 74 46 6c 61 67 73 26 28 6d 61 73  >dbOptFlags&(mas
eba0: 6b 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20  k))!=0).#define 
ebb0: 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62  OptimizationEnab
ebc0: 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 20  led(db, mask)   
ebd0: 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61  (((db)->dbOptFla
ebe0: 67 73 26 28 6d 61 73 6b 29 29 3d 3d 30 29 0a 0a  gs&(mask))==0)..
ebf0: 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75  /*.** Return tru
ec00: 65 20 69 66 20 69 74 20 4f 4b 20 74 6f 20 66 61  e if it OK to fa
ec10: 63 74 6f 72 20 63 6f 6e 73 74 61 6e 74 20 65 78  ctor constant ex
ec20: 70 72 65 73 73 69 6f 6e 73 20 69 6e 74 6f 20 74  pressions into t
ec30: 68 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  he initializatio
ec40: 6e 0a 2a 2a 20 63 6f 64 65 2e 20 54 68 65 20 61  n.** code. The a
ec50: 72 67 75 6d 65 6e 74 20 69 73 20 61 20 50 61 72  rgument is a Par
ec60: 73 65 20 6f 62 6a 65 63 74 20 66 6f 72 20 74 68  se object for th
ec70: 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72  e code generator
ec80: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 6f 6e  ..*/.#define Con
ec90: 73 74 46 61 63 74 6f 72 4f 6b 28 50 29 20 28 28  stFactorOk(P) ((
eca0: 50 29 2d 3e 6f 6b 43 6f 6e 73 74 46 61 63 74 6f  P)->okConstFacto
ecb0: 72 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62  r)../*.** Possib
ecc0: 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68  le values for th
ecd0: 65 20 73 71 6c 69 74 65 2e 6d 61 67 69 63 20 66  e sqlite.magic f
ece0: 69 65 6c 64 2e 0a 2a 2a 20 54 68 65 20 6e 75 6d  ield..** The num
ecf0: 62 65 72 73 20 61 72 65 20 6f 62 74 61 69 6e 65  bers are obtaine
ed00: 64 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20  d at random and 
ed10: 68 61 76 65 20 6e 6f 20 73 70 65 63 69 61 6c 20  have no special 
ed20: 6d 65 61 6e 69 6e 67 2c 20 6f 74 68 65 72 0a 2a  meaning, other.*
ed30: 2a 20 74 68 61 6e 20 62 65 69 6e 67 20 64 69 73  * than being dis
ed40: 74 69 6e 63 74 20 66 72 6f 6d 20 6f 6e 65 20 61  tinct from one a
ed50: 6e 6f 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69  nother..*/.#defi
ed60: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
ed70: 4f 50 45 4e 20 20 20 20 20 30 78 61 30 32 39 61  OPEN     0xa029a
ed80: 36 39 37 20 20 2f 2a 20 44 61 74 61 62 61 73 65  697  /* Database
ed90: 20 69 73 20 6f 70 65 6e 20 2a 2f 0a 23 64 65 66   is open */.#def
eda0: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
edb0: 5f 43 4c 4f 53 45 44 20 20 20 30 78 39 66 33 63  _CLOSED   0x9f3c
edc0: 32 64 33 33 20 20 2f 2a 20 44 61 74 61 62 61 73  2d33  /* Databas
edd0: 65 20 69 73 20 63 6c 6f 73 65 64 20 2a 2f 0a 23  e is closed */.#
ede0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
edf0: 47 49 43 5f 53 49 43 4b 20 20 20 20 20 30 78 34  GIC_SICK     0x4
ee00: 62 37 37 31 32 39 30 20 20 2f 2a 20 45 72 72 6f  b771290  /* Erro
ee10: 72 20 61 6e 64 20 61 77 61 69 74 69 6e 67 20 63  r and awaiting c
ee20: 6c 6f 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  lose */.#define 
ee30: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53  SQLITE_MAGIC_BUS
ee40: 59 20 20 20 20 20 30 78 66 30 33 62 37 39 30 36  Y     0xf03b7906
ee50: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 63 75    /* Database cu
ee60: 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a  rrently in use *
ee70: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
ee80: 5f 4d 41 47 49 43 5f 45 52 52 4f 52 20 20 20 20  _MAGIC_ERROR    
ee90: 30 78 62 35 33 35 37 39 33 30 20 20 2f 2a 20 41  0xb5357930  /* A
eea0: 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20  n SQLITE_MISUSE 
eeb0: 65 72 72 6f 72 20 6f 63 63 75 72 72 65 64 20 2a  error occurred *
eec0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
eed0: 5f 4d 41 47 49 43 5f 5a 4f 4d 42 49 45 20 20 20  _MAGIC_ZOMBIE   
eee0: 30 78 36 34 63 66 66 63 37 66 20 20 2f 2a 20 43  0x64cffc7f  /* C
eef0: 6c 6f 73 65 20 77 69 74 68 20 6c 61 73 74 20 73  lose with last s
ef00: 74 61 74 65 6d 65 6e 74 20 63 6c 6f 73 65 20 2a  tatement close *
ef10: 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51  /../*.** Each SQ
ef20: 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 64 65  L function is de
ef30: 66 69 6e 65 64 20 62 79 20 61 6e 20 69 6e 73 74  fined by an inst
ef40: 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
ef50: 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75  owing.** structu
ef60: 72 65 2e 20 20 46 6f 72 20 67 6c 6f 62 61 6c 20  re.  For global 
ef70: 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63 74 69 6f  built-in functio
ef80: 6e 73 20 28 65 78 3a 20 73 75 62 73 74 72 28 29  ns (ex: substr()
ef90: 2c 20 6d 61 78 28 29 2c 20 63 6f 75 6e 74 28 29  , max(), count()
efa0: 29 0a 2a 2a 20 61 20 70 6f 69 6e 74 65 72 20 74  ).** a pointer t
efb0: 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  o this structure
efc0: 20 69 73 20 68 65 6c 64 20 69 6e 20 74 68 65 20   is held in the 
efd0: 73 71 6c 69 74 65 33 42 75 69 6c 74 69 6e 46 75  sqlite3BuiltinFu
efe0: 6e 63 74 69 6f 6e 73 20 6f 62 6a 65 63 74 2e 0a  nctions object..
eff0: 2a 2a 20 46 6f 72 20 70 65 72 2d 63 6f 6e 6e 65  ** For per-conne
f000: 63 74 69 6f 6e 20 61 70 70 6c 69 63 61 74 69 6f  ction applicatio
f010: 6e 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69  n-defined functi
f020: 6f 6e 73 2c 20 61 20 70 6f 69 6e 74 65 72 20 74  ons, a pointer t
f030: 6f 20 74 68 69 73 0a 2a 2a 20 73 74 72 75 63 74  o this.** struct
f040: 75 72 65 20 69 73 20 68 65 6c 64 20 69 6e 20 74  ure is held in t
f050: 68 65 20 64 62 2d 3e 61 48 61 73 68 20 68 61 73  he db->aHash has
f060: 68 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54  h table..**.** T
f070: 68 65 20 75 2e 70 48 61 73 68 20 66 69 65 6c 64  he u.pHash field
f080: 20 69 73 20 75 73 65 64 20 62 79 20 74 68 65 20   is used by the 
f090: 67 6c 6f 62 61 6c 20 62 75 69 6c 74 2d 69 6e 73  global built-ins
f0a0: 2e 20 20 54 68 65 20 75 2e 70 44 65 73 74 72 75  .  The u.pDestru
f0b0: 63 74 6f 72 0a 2a 2a 20 66 69 65 6c 64 20 69 73  ctor.** field is
f0c0: 20 75 73 65 64 20 62 79 20 70 65 72 2d 63 6f 6e   used by per-con
f0d0: 6e 65 63 74 69 6f 6e 20 61 70 70 2d 64 65 66 20  nection app-def 
f0e0: 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2f 0a 73 74  functions..*/.st
f0f0: 72 75 63 74 20 46 75 6e 63 44 65 66 20 7b 0a 20  ruct FuncDef {. 
f100: 20 69 38 20 6e 41 72 67 3b 20 20 20 20 20 20 20   i8 nArg;       
f110: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
f120: 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 2d  of arguments.  -
f130: 31 20 6d 65 61 6e 73 20 75 6e 6c 69 6d 69 74 65  1 means unlimite
f140: 64 20 2a 2f 0a 20 20 75 33 32 20 66 75 6e 63 46  d */.  u32 funcF
f150: 6c 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 53  lags;       /* S
f160: 6f 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20  ome combination 
f170: 6f 66 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 2a  of SQLITE_FUNC_*
f180: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73 65   */.  void *pUse
f190: 72 44 61 74 61 3b 20 20 20 20 20 2f 2a 20 55 73  rData;     /* Us
f1a0: 65 72 20 64 61 74 61 20 70 61 72 61 6d 65 74 65  er data paramete
f1b0: 72 20 2a 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a  r */.  FuncDef *
f1c0: 70 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e  pNext;      /* N
f1d0: 65 78 74 20 66 75 6e 63 74 69 6f 6e 20 77 69 74  ext function wit
f1e0: 68 20 73 61 6d 65 20 6e 61 6d 65 20 2a 2f 0a 20  h same name */. 
f1f0: 20 76 6f 69 64 20 28 2a 78 53 46 75 6e 63 29 28   void (*xSFunc)(
f200: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
f210: 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c  ,int,sqlite3_val
f220: 75 65 2a 2a 29 3b 20 2f 2a 20 66 75 6e 63 20 6f  ue**); /* func o
f230: 72 20 61 67 67 2d 73 74 65 70 20 2a 2f 0a 20 20  r agg-step */.  
f240: 76 6f 69 64 20 28 2a 78 46 69 6e 61 6c 69 7a 65  void (*xFinalize
f250: 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
f260: 74 2a 29 3b 20 20 20 20 20 20 20 20 20 20 20 20  t*);            
f270: 20 20 20 20 20 20 2f 2a 20 41 67 67 20 66 69 6e        /* Agg fin
f280: 61 6c 69 7a 65 72 20 2a 2f 0a 20 20 76 6f 69 64  alizer */.  void
f290: 20 28 2a 78 56 61 6c 75 65 29 28 73 71 6c 69 74   (*xValue)(sqlit
f2a0: 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 20 20 20  e3_context*);   
f2b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f2c0: 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 61 67 67    /* Current agg
f2d0: 20 76 61 6c 75 65 20 2a 2f 0a 20 20 76 6f 69 64   value */.  void
f2e0: 20 28 2a 78 49 6e 76 65 72 73 65 29 28 73 71 6c   (*xInverse)(sql
f2f0: 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e  ite3_context*,in
f300: 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  t,sqlite3_value*
f310: 2a 29 3b 20 2f 2a 20 69 6e 76 65 72 73 65 20 61  *); /* inverse a
f320: 67 67 2d 73 74 65 70 20 2a 2f 0a 20 20 63 6f 6e  gg-step */.  con
f330: 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  st char *zName; 
f340: 20 20 2f 2a 20 53 51 4c 20 6e 61 6d 65 20 6f 66    /* SQL name of
f350: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 2a   the function. *
f360: 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20  /.  union {.    
f370: 46 75 6e 63 44 65 66 20 2a 70 48 61 73 68 3b 20  FuncDef *pHash; 
f380: 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 74       /* Next wit
f390: 68 20 61 20 64 69 66 66 65 72 65 6e 74 20 6e 61  h a different na
f3a0: 6d 65 20 62 75 74 20 74 68 65 20 73 61 6d 65 20  me but the same 
f3b0: 68 61 73 68 20 2a 2f 0a 20 20 20 20 46 75 6e 63  hash */.    Func
f3c0: 44 65 73 74 72 75 63 74 6f 72 20 2a 70 44 65 73  Destructor *pDes
f3d0: 74 72 75 63 74 6f 72 3b 20 20 20 2f 2a 20 52 65  tructor;   /* Re
f3e0: 66 65 72 65 6e 63 65 20 63 6f 75 6e 74 65 64 20  ference counted 
f3f0: 64 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74  destructor funct
f400: 69 6f 6e 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b  ion */.  } u;.};
f410: 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72  ../*.** This str
f420: 75 63 74 75 72 65 20 65 6e 63 61 70 73 75 6c 61  ucture encapsula
f430: 74 65 73 20 61 20 75 73 65 72 2d 66 75 6e 63 74  tes a user-funct
f440: 69 6f 6e 20 64 65 73 74 72 75 63 74 6f 72 20 63  ion destructor c
f450: 61 6c 6c 62 61 63 6b 20 28 61 73 0a 2a 2a 20 63  allback (as.** c
f460: 6f 6e 66 69 67 75 72 65 64 20 75 73 69 6e 67 20  onfigured using 
f470: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f  create_function_
f480: 76 32 28 29 29 20 61 6e 64 20 61 20 72 65 66 65  v2()) and a refe
f490: 72 65 6e 63 65 20 63 6f 75 6e 74 65 72 2e 20 57  rence counter. W
f4a0: 68 65 6e 0a 2a 2a 20 63 72 65 61 74 65 5f 66 75  hen.** create_fu
f4b0: 6e 63 74 69 6f 6e 5f 76 32 28 29 20 69 73 20 63  nction_v2() is c
f4c0: 61 6c 6c 65 64 20 74 6f 20 63 72 65 61 74 65 20  alled to create 
f4d0: 61 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20  a function with 
f4e0: 61 20 64 65 73 74 72 75 63 74 6f 72 2c 0a 2a 2a  a destructor,.**
f4f0: 20 61 20 73 69 6e 67 6c 65 20 6f 62 6a 65 63 74   a single object
f500: 20 6f 66 20 74 68 69 73 20 74 79 70 65 20 69 73   of this type is
f510: 20 61 6c 6c 6f 63 61 74 65 64 2e 20 46 75 6e 63   allocated. Func
f520: 44 65 73 74 72 75 63 74 6f 72 2e 6e 52 65 66 20  Destructor.nRef 
f530: 69 73 20 73 65 74 20 74 6f 0a 2a 2a 20 74 68 65  is set to.** the
f540: 20 6e 75 6d 62 65 72 20 6f 66 20 46 75 6e 63 44   number of FuncD
f550: 65 66 20 6f 62 6a 65 63 74 73 20 63 72 65 61 74  ef objects creat
f560: 65 64 20 28 65 69 74 68 65 72 20 31 20 6f 72 20  ed (either 1 or 
f570: 33 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  3, depending on 
f580: 77 68 65 74 68 65 72 0a 2a 2a 20 6f 72 20 6e 6f  whether.** or no
f590: 74 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  t the specified 
f5a0: 65 6e 63 6f 64 69 6e 67 20 69 73 20 53 51 4c 49  encoding is SQLI
f5b0: 54 45 5f 41 4e 59 29 2e 20 54 68 65 20 46 75 6e  TE_ANY). The Fun
f5c0: 63 44 65 66 2e 70 44 65 73 74 72 75 63 74 6f 72  cDef.pDestructor
f5d0: 0a 2a 2a 20 6d 65 6d 62 65 72 20 6f 66 20 65 61  .** member of ea
f5e0: 63 68 20 6f 66 20 74 68 65 20 6e 65 77 20 46 75  ch of the new Fu
f5f0: 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20 69 73  ncDef objects is
f600: 20 73 65 74 20 74 6f 20 70 6f 69 6e 74 20 74 6f   set to point to
f610: 20 74 68 65 20 61 6c 6c 6f 63 61 74 65 64 0a 2a   the allocated.*
f620: 2a 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72  * FuncDestructor
f630: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 61 66 74  ..**.** Thereaft
f640: 65 72 2c 20 77 68 65 6e 20 6f 6e 65 20 6f 66 20  er, when one of 
f650: 74 68 65 20 46 75 6e 63 44 65 66 20 6f 62 6a 65  the FuncDef obje
f660: 63 74 73 20 69 73 20 64 65 6c 65 74 65 64 2c 20  cts is deleted, 
f670: 74 68 65 20 72 65 66 65 72 65 6e 63 65 0a 2a 2a  the reference.**
f680: 20 63 6f 75 6e 74 20 6f 6e 20 74 68 69 73 20 6f   count on this o
f690: 62 6a 65 63 74 20 69 73 20 64 65 63 72 65 6d 65  bject is decreme
f6a0: 6e 74 65 64 2e 20 57 68 65 6e 20 69 74 20 72 65  nted. When it re
f6b0: 61 63 68 65 73 20 30 2c 20 74 68 65 20 64 65 73  aches 0, the des
f6c0: 74 72 75 63 74 6f 72 0a 2a 2a 20 69 73 20 69 6e  tructor.** is in
f6d0: 76 6f 6b 65 64 20 61 6e 64 20 74 68 65 20 46 75  voked and the Fu
f6e0: 6e 63 44 65 73 74 72 75 63 74 6f 72 20 73 74 72  ncDestructor str
f6f0: 75 63 74 75 72 65 20 66 72 65 65 64 2e 0a 2a 2f  ucture freed..*/
f700: 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65 73 74  .struct FuncDest
f710: 72 75 63 74 6f 72 20 7b 0a 20 20 69 6e 74 20 6e  ructor {.  int n
f720: 52 65 66 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44  Ref;.  void (*xD
f730: 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b  estroy)(void *);
f740: 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44 61  .  void *pUserDa
f750: 74 61 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 6f  ta;.};../*.** Po
f760: 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f  ssible values fo
f770: 72 20 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 2e  r FuncDef.flags.
f780: 20 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20    Note that the 
f790: 5f 4c 45 4e 47 54 48 20 61 6e 64 20 5f 54 59 50  _LENGTH and _TYP
f7a0: 45 4f 46 0a 2a 2a 20 76 61 6c 75 65 73 20 6d 75  EOF.** values mu
f7b0: 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f  st correspond to
f7c0: 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52   OPFLAG_LENGTHAR
f7d0: 47 20 61 6e 64 20 4f 50 46 4c 41 47 5f 54 59 50  G and OPFLAG_TYP
f7e0: 45 4f 46 41 52 47 2e 20 20 41 6e 64 0a 2a 2a 20  EOFARG.  And.** 
f7f0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
f800: 54 41 4e 54 20 6d 75 73 74 20 62 65 20 74 68 65  TANT must be the
f810: 20 73 61 6d 65 20 61 73 20 53 51 4c 49 54 45 5f   same as SQLITE_
f820: 44 45 54 45 52 4d 49 4e 49 53 54 49 43 2e 20 20  DETERMINISTIC.  
f830: 54 68 65 72 65 0a 2a 2a 20 61 72 65 20 61 73 73  There.** are ass
f840: 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73  ert() statements
f850: 20 69 6e 20 74 68 65 20 63 6f 64 65 20 74 6f 20   in the code to 
f860: 76 65 72 69 66 79 20 74 68 69 73 2e 0a 2a 2a 0a  verify this..**.
f870: 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61  ** Value constra
f880: 69 6e 74 73 20 28 65 6e 66 6f 72 63 65 64 20 76  ints (enforced v
f890: 69 61 20 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a  ia assert()):.**
f8a0: 20 20 20 20 20 53 51 4c 49 54 45 5f 46 55 4e 43       SQLITE_FUNC
f8b0: 5f 4d 49 4e 4d 41 58 20 20 20 20 3d 3d 20 20 4e  _MINMAX    ==  N
f8c0: 43 5f 4d 69 6e 4d 61 78 41 67 67 20 20 20 20 20  C_MinMaxAgg     
f8d0: 20 3d 3d 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67   == SF_MinMaxAgg
f8e0: 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 46  .**     SQLITE_F
f8f0: 55 4e 43 5f 4c 45 4e 47 54 48 20 20 20 20 3d 3d  UNC_LENGTH    ==
f900: 20 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41    OPFLAG_LENGTHA
f910: 52 47 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45  RG.**     SQLITE
f920: 5f 46 55 4e 43 5f 54 59 50 45 4f 46 20 20 20 20  _FUNC_TYPEOF    
f930: 3d 3d 20 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f  ==  OPFLAG_TYPEO
f940: 46 41 52 47 0a 2a 2a 20 20 20 20 20 53 51 4c 49  FARG.**     SQLI
f950: 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
f960: 20 20 3d 3d 20 20 53 51 4c 49 54 45 5f 44 45 54    ==  SQLITE_DET
f970: 45 52 4d 49 4e 49 53 54 49 43 20 66 72 6f 6d 20  ERMINISTIC from 
f980: 74 68 65 20 41 50 49 0a 2a 2a 20 20 20 20 20 53  the API.**     S
f990: 51 4c 49 54 45 5f 46 55 4e 43 5f 45 4e 43 4d 41  QLITE_FUNC_ENCMA
f9a0: 53 4b 20 20 20 64 65 70 65 6e 64 73 20 6f 6e 20  SK   depends on 
f9b0: 53 51 4c 49 54 45 5f 55 54 46 2a 20 6d 61 63 72  SQLITE_UTF* macr
f9c0: 6f 73 20 69 6e 20 74 68 65 20 41 50 49 0a 2a 2f  os in the API.*/
f9d0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
f9e0: 46 55 4e 43 5f 45 4e 43 4d 41 53 4b 20 20 30 78  FUNC_ENCMASK  0x
f9f0: 30 30 30 33 20 2f 2a 20 53 51 4c 49 54 45 5f 55  0003 /* SQLITE_U
fa00: 54 46 38 2c 20 53 51 4c 49 54 45 5f 55 54 46 31  TF8, SQLITE_UTF1
fa10: 36 42 45 20 6f 72 20 55 54 46 31 36 4c 45 20 2a  6BE or UTF16LE *
fa20: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
fa30: 5f 46 55 4e 43 5f 4c 49 4b 45 20 20 20 20 20 30  _FUNC_LIKE     0
fa40: 78 30 30 30 34 20 2f 2a 20 43 61 6e 64 69 64 61  x0004 /* Candida
fa50: 74 65 20 66 6f 72 20 74 68 65 20 4c 49 4b 45 20  te for the LIKE 
fa60: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a  optimization */.
fa70: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
fa80: 55 4e 43 5f 43 41 53 45 20 20 20 20 20 30 78 30  UNC_CASE     0x0
fa90: 30 30 38 20 2f 2a 20 43 61 73 65 2d 73 65 6e 73  008 /* Case-sens
faa0: 69 74 69 76 65 20 4c 49 4b 45 2d 74 79 70 65 20  itive LIKE-type 
fab0: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  function */.#def
fac0: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
fad0: 45 50 48 45 4d 20 20 20 20 30 78 30 30 31 30 20  EPHEM    0x0010 
fae0: 2f 2a 20 45 70 68 65 6d 65 72 61 6c 2e 20 20 44  /* Ephemeral.  D
faf0: 65 6c 65 74 65 20 77 69 74 68 20 56 44 42 45 20  elete with VDBE 
fb00: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
fb10: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20  E_FUNC_NEEDCOLL 
fb20: 30 78 30 30 32 30 20 2f 2a 20 73 71 6c 69 74 65  0x0020 /* sqlite
fb30: 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28  3GetFuncCollSeq(
fb40: 29 20 6d 69 67 68 74 20 62 65 20 63 61 6c 6c 65  ) might be calle
fb50: 64 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  d*/.#define SQLI
fb60: 54 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 20 20  TE_FUNC_LENGTH  
fb70: 20 30 78 30 30 34 30 20 2f 2a 20 42 75 69 6c 74   0x0040 /* Built
fb80: 2d 69 6e 20 6c 65 6e 67 74 68 28 29 20 66 75 6e  -in length() fun
fb90: 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
fba0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59 50   SQLITE_FUNC_TYP
fbb0: 45 4f 46 20 20 20 30 78 30 30 38 30 20 2f 2a 20  EOF   0x0080 /* 
fbc0: 42 75 69 6c 74 2d 69 6e 20 74 79 70 65 6f 66 28  Built-in typeof(
fbd0: 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  ) function */.#d
fbe0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
fbf0: 43 5f 43 4f 55 4e 54 20 20 20 20 30 78 30 31 30  C_COUNT    0x010
fc00: 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f  0 /* Built-in co
fc10: 75 6e 74 28 2a 29 20 61 67 67 72 65 67 61 74 65  unt(*) aggregate
fc20: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
fc30: 54 45 5f 46 55 4e 43 5f 43 4f 41 4c 45 53 43 45  TE_FUNC_COALESCE
fc40: 20 30 78 30 32 30 30 20 2f 2a 20 42 75 69 6c 74   0x0200 /* Built
fc50: 2d 69 6e 20 63 6f 61 6c 65 73 63 65 28 29 20 6f  -in coalesce() o
fc60: 72 20 69 66 6e 75 6c 6c 28 29 20 2a 2f 0a 23 64  r ifnull() */.#d
fc70: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
fc80: 43 5f 55 4e 4c 49 4b 45 4c 59 20 30 78 30 34 30  C_UNLIKELY 0x040
fc90: 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 75 6e  0 /* Built-in un
fca0: 6c 69 6b 65 6c 79 28 29 20 66 75 6e 63 74 69 6f  likely() functio
fcb0: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
fcc0: 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
fcd0: 54 20 30 78 30 38 30 30 20 2f 2a 20 43 6f 6e 73  T 0x0800 /* Cons
fce0: 74 61 6e 74 20 69 6e 70 75 74 73 20 67 69 76 65  tant inputs give
fcf0: 20 61 20 63 6f 6e 73 74 61 6e 74 20 6f 75 74 70   a constant outp
fd00: 75 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ut */.#define SQ
fd10: 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58  LITE_FUNC_MINMAX
fd20: 20 20 20 30 78 31 30 30 30 20 2f 2a 20 54 72 75     0x1000 /* Tru
fd30: 65 20 66 6f 72 20 6d 69 6e 28 29 20 61 6e 64 20  e for min() and 
fd40: 6d 61 78 28 29 20 61 67 67 72 65 67 61 74 65 73  max() aggregates
fd50: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
fd60: 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 20  TE_FUNC_SLOCHNG 
fd70: 20 30 78 32 30 30 30 20 2f 2a 20 22 53 6c 6f 77   0x2000 /* "Slow
fd80: 20 43 68 61 6e 67 65 22 2e 20 56 61 6c 75 65 20   Change". Value 
fd90: 63 6f 6e 73 74 61 6e 74 20 64 75 72 69 6e 67 20  constant during 
fda0: 61 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  a.              
fdb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fdc0: 20 20 20 20 20 20 2a 2a 20 73 69 6e 67 6c 65 20        ** single 
fdd0: 71 75 65 72 79 20 2d 20 6d 69 67 68 74 20 63 68  query - might ch
fde0: 61 6e 67 65 20 6f 76 65 72 20 74 69 6d 65 20 2a  ange over time *
fdf0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
fe00: 5f 46 55 4e 43 5f 41 46 46 49 4e 49 54 59 20 30  _FUNC_AFFINITY 0
fe10: 78 34 30 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69  x4000 /* Built-i
fe20: 6e 20 61 66 66 69 6e 69 74 79 28 29 20 66 75 6e  n affinity() fun
fe30: 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
fe40: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4f 46 46   SQLITE_FUNC_OFF
fe50: 53 45 54 20 20 20 30 78 38 30 30 30 20 2f 2a 20  SET   0x8000 /* 
fe60: 42 75 69 6c 74 2d 69 6e 20 73 71 6c 69 74 65 5f  Built-in sqlite_
fe70: 6f 66 66 73 65 74 28 29 20 66 75 6e 63 74 69 6f  offset() functio
fe80: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
fe90: 49 54 45 5f 46 55 4e 43 5f 57 49 4e 44 4f 57 20  ITE_FUNC_WINDOW 
fea0: 20 30 78 31 30 30 30 30 20 2f 2a 20 42 75 69 6c   0x10000 /* Buil
feb0: 74 2d 69 6e 20 77 69 6e 64 6f 77 2d 6f 6e 6c 79  t-in window-only
fec0: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
fed0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
fee0: 5f 57 49 4e 44 4f 57 5f 53 49 5a 45 20 20 30 78  _WINDOW_SIZE  0x
fef0: 32 30 30 30 30 20 20 2f 2a 20 52 65 71 75 69 72  20000  /* Requir
ff00: 65 73 20 70 61 72 74 69 74 69 6f 6e 20 73 69 7a  es partition siz
ff10: 65 20 61 73 20 61 72 67 2e 20 2a 2f 0a 0a 2f 2a  e as arg. */../*
ff20: 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
ff30: 67 20 74 68 72 65 65 20 6d 61 63 72 6f 73 2c 20  g three macros, 
ff40: 46 55 4e 43 54 49 4f 4e 28 29 2c 20 4c 49 4b 45  FUNCTION(), LIKE
ff50: 46 55 4e 43 28 29 20 61 6e 64 20 41 47 47 52 45  FUNC() and AGGRE
ff60: 47 41 54 45 28 29 20 61 72 65 0a 2a 2a 20 75 73  GATE() are.** us
ff70: 65 64 20 74 6f 20 63 72 65 61 74 65 20 74 68 65  ed to create the
ff80: 20 69 6e 69 74 69 61 6c 69 7a 65 72 73 20 66 6f   initializers fo
ff90: 72 20 74 68 65 20 46 75 6e 63 44 65 66 20 73 74  r the FuncDef st
ffa0: 72 75 63 74 75 72 65 73 2e 0a 2a 2a 0a 2a 2a 20  ructures..**.** 
ffb0: 20 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65    FUNCTION(zName
ffc0: 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
ffd0: 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20  C, xFunc).**    
ffe0: 20 55 73 65 64 20 74 6f 20 63 72 65 61 74 65 20   Used to create 
fff0: 61 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f  a scalar functio
10000 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20  n definition of 
10010 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65  a function zName
10020 0a 2a 2a 20 20 20 20 20 69 6d 70 6c 65 6d 65 6e  .**     implemen
10030 74 65 64 20 62 79 20 43 20 66 75 6e 63 74 69 6f  ted by C functio
10040 6e 20 78 46 75 6e 63 20 74 68 61 74 20 61 63 63  n xFunc that acc
10050 65 70 74 73 20 6e 41 72 67 20 61 72 67 75 6d 65  epts nArg argume
10060 6e 74 73 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20  nts. The.**     
10070 76 61 6c 75 65 20 70 61 73 73 65 64 20 61 73 20  value passed as 
10080 69 41 72 67 20 69 73 20 63 61 73 74 20 74 6f 20  iArg is cast to 
10090 61 20 28 76 6f 69 64 2a 29 20 61 6e 64 20 6d 61  a (void*) and ma
100a0 64 65 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20  de available.** 
100b0 20 20 20 20 61 73 20 74 68 65 20 75 73 65 72 2d      as the user-
100c0 64 61 74 61 20 28 73 71 6c 69 74 65 33 5f 75 73  data (sqlite3_us
100d0 65 72 5f 64 61 74 61 28 29 29 20 66 6f 72 20 74  er_data()) for t
100e0 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 49 66 0a  he function. If.
100f0 2a 2a 20 20 20 20 20 61 72 67 75 6d 65 6e 74 20  **     argument 
10100 62 4e 43 20 69 73 20 74 72 75 65 2c 20 74 68 65  bNC is true, the
10110 6e 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e  n the SQLITE_FUN
10120 43 5f 4e 45 45 44 43 4f 4c 4c 20 66 6c 61 67 20  C_NEEDCOLL flag 
10130 69 73 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20  is set..**.**   
10140 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c  VFUNCTION(zName,
10150 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
10160 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20  , xFunc).**     
10170 4c 69 6b 65 20 46 55 4e 43 54 49 4f 4e 20 65 78  Like FUNCTION ex
10180 63 65 70 74 20 69 74 20 6f 6d 69 74 73 20 74 68  cept it omits th
10190 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  e SQLITE_FUNC_CO
101a0 4e 53 54 41 4e 54 20 66 6c 61 67 2e 0a 2a 2a 0a  NSTANT flag..**.
101b0 2a 2a 20 20 20 44 46 55 4e 43 54 49 4f 4e 28 7a  **   DFUNCTION(z
101c0 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67  Name, nArg, iArg
101d0 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a  , bNC, xFunc).**
101e0 20 20 20 20 20 4c 69 6b 65 20 46 55 4e 43 54 49       Like FUNCTI
101f0 4f 4e 20 65 78 63 65 70 74 20 69 74 20 6f 6d 69  ON except it omi
10200 74 73 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55  ts the SQLITE_FU
10210 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66 6c 61 67  NC_CONSTANT flag
10220 20 61 6e 64 0a 2a 2a 20 20 20 20 20 61 64 64 73   and.**     adds
10230 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43   the SQLITE_FUNC
10240 5f 53 4c 4f 43 48 4e 47 20 66 6c 61 67 2e 20 20  _SLOCHNG flag.  
10250 55 73 65 64 20 66 6f 72 20 64 61 74 65 20 26 20  Used for date & 
10260 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 0a 2a  time functions.*
10270 2a 20 20 20 20 20 61 6e 64 20 66 75 6e 63 74 69  *     and functi
10280 6f 6e 73 20 6c 69 6b 65 20 73 71 6c 69 74 65 5f  ons like sqlite_
10290 76 65 72 73 69 6f 6e 28 29 20 74 68 61 74 20 63  version() that c
102a0 61 6e 20 63 68 61 6e 67 65 2c 20 62 75 74 20 6e  an change, but n
102b0 6f 74 20 64 75 72 69 6e 67 0a 2a 2a 20 20 20 20  ot during.**    
102c0 20 61 20 73 69 6e 67 6c 65 20 71 75 65 72 79 2e   a single query.
102d0 20 20 54 68 65 20 69 41 72 67 20 69 73 20 69 67    The iArg is ig
102e0 6e 6f 72 65 64 2e 20 20 54 68 65 20 75 73 65 72  nored.  The user
102f0 2d 64 61 74 61 20 69 73 20 61 6c 77 61 79 73 20  -data is always 
10300 73 65 74 0a 2a 2a 20 20 20 20 20 74 6f 20 61 20  set.**     to a 
10310 4e 55 4c 4c 20 70 6f 69 6e 74 65 72 2e 20 20 54  NULL pointer.  T
10320 68 65 20 62 4e 43 20 70 61 72 61 6d 65 74 65 72  he bNC parameter
10330 20 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a   is not used..**
10340 0a 2a 2a 20 20 20 50 55 52 45 5f 44 41 54 45 28  .**   PURE_DATE(
10350 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
10360 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a  g, bNC, xFunc).*
10370 2a 20 20 20 20 20 55 73 65 64 20 66 6f 72 20 22  *     Used for "
10380 70 75 72 65 22 20 64 61 74 65 2f 74 69 6d 65 20  pure" date/time 
10390 66 75 6e 63 74 69 6f 6e 73 2c 20 74 68 69 73 20  functions, this 
103a0 6d 61 63 72 6f 20 69 73 20 6c 69 6b 65 20 44 46  macro is like DF
103b0 55 4e 43 54 49 4f 4e 0a 2a 2a 20 20 20 20 20 65  UNCTION.**     e
103c0 78 63 65 70 74 20 74 68 61 74 20 69 74 20 64 6f  xcept that it do
103d0 65 73 20 73 65 74 20 74 68 65 20 53 51 4c 49 54  es set the SQLIT
103e0 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20  E_FUNC_CONSTANT 
103f0 66 6c 61 67 73 2e 20 20 69 41 72 67 20 69 73 0a  flags.  iArg is.
10400 2a 2a 20 20 20 20 20 69 67 6e 6f 72 65 64 20 61  **     ignored a
10410 6e 64 20 74 68 65 20 75 73 65 72 2d 64 61 74 61  nd the user-data
10420 20 66 6f 72 20 74 68 65 73 65 20 66 75 6e 63 74   for these funct
10430 69 6f 6e 73 20 69 73 20 73 65 74 20 74 6f 20 61  ions is set to a
10440 6e 20 0a 2a 2a 20 20 20 20 20 61 72 62 69 74 72  n .**     arbitr
10450 61 72 79 20 6e 6f 6e 2d 4e 55 4c 4c 20 70 6f 69  ary non-NULL poi
10460 6e 74 65 72 2e 20 20 54 68 65 20 62 4e 43 20 70  nter.  The bNC p
10470 61 72 61 6d 65 74 65 72 20 69 73 20 6e 6f 74 20  arameter is not 
10480 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 20 20 41 47  used..**.**   AG
10490 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e  GREGATE(zName, n
104a0 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
104b0 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 29 0a 2a  xStep, xFinal).*
104c0 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63 72  *     Used to cr
104d0 65 61 74 65 20 61 6e 20 61 67 67 72 65 67 61 74  eate an aggregat
104e0 65 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e  e function defin
104f0 69 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65  ition implemente
10500 64 20 62 79 0a 2a 2a 20 20 20 20 20 74 68 65 20  d by.**     the 
10510 43 20 66 75 6e 63 74 69 6f 6e 73 20 78 53 74 65  C functions xSte
10520 70 20 61 6e 64 20 78 46 69 6e 61 6c 2e 20 54 68  p and xFinal. Th
10530 65 20 66 69 72 73 74 20 66 6f 75 72 20 70 61 72  e first four par
10540 61 6d 65 74 65 72 73 0a 2a 2a 20 20 20 20 20 61  ameters.**     a
10550 72 65 20 69 6e 74 65 72 70 72 65 74 65 64 20 69  re interpreted i
10560 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79 20 61  n the same way a
10570 73 20 74 68 65 20 66 69 72 73 74 20 34 20 70 61  s the first 4 pa
10580 72 61 6d 65 74 65 72 73 20 74 6f 0a 2a 2a 20 20  rameters to.**  
10590 20 20 20 46 55 4e 43 54 49 4f 4e 28 29 2e 0a 2a     FUNCTION()..*
105a0 2a 0a 2a 2a 20 20 20 57 46 55 4e 43 54 49 4f 4e  *.**   WFUNCTION
105b0 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
105c0 72 67 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61  rg, xStep, xFina
105d0 6c 2c 20 78 56 61 6c 75 65 2c 20 78 49 6e 76 65  l, xValue, xInve
105e0 72 73 65 29 0a 2a 2a 20 20 20 20 20 55 73 65 64  rse).**     Used
105f0 20 74 6f 20 63 72 65 61 74 65 20 61 6e 20 61 67   to create an ag
10600 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
10610 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 6d 70 6c   definition impl
10620 65 6d 65 6e 74 65 64 20 62 79 0a 2a 2a 20 20 20  emented by.**   
10630 20 20 74 68 65 20 43 20 66 75 6e 63 74 69 6f 6e    the C function
10640 73 20 78 53 74 65 70 20 61 6e 64 20 78 46 69 6e  s xStep and xFin
10650 61 6c 2e 20 54 68 65 20 66 69 72 73 74 20 66 6f  al. The first fo
10660 75 72 20 70 61 72 61 6d 65 74 65 72 73 0a 2a 2a  ur parameters.**
10670 20 20 20 20 20 61 72 65 20 69 6e 74 65 72 70 72       are interpr
10680 65 74 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65  eted in the same
10690 20 77 61 79 20 61 73 20 74 68 65 20 66 69 72 73   way as the firs
106a0 74 20 34 20 70 61 72 61 6d 65 74 65 72 73 20 74  t 4 parameters t
106b0 6f 0a 2a 2a 20 20 20 20 20 46 55 4e 43 54 49 4f  o.**     FUNCTIO
106c0 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c 49 4b  N()..**.**   LIK
106d0 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72  EFUNC(zName, nAr
106e0 67 2c 20 70 41 72 67 2c 20 66 6c 61 67 73 29 0a  g, pArg, flags).
106f0 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63  **     Used to c
10700 72 65 61 74 65 20 61 20 73 63 61 6c 61 72 20 66  reate a scalar f
10710 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69  unction definiti
10720 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e  on of a function
10730 20 7a 4e 61 6d 65 0a 2a 2a 20 20 20 20 20 74 68   zName.**     th
10740 61 74 20 61 63 63 65 70 74 73 20 6e 41 72 67 20  at accepts nArg 
10750 61 72 67 75 6d 65 6e 74 73 20 61 6e 64 20 69 73  arguments and is
10760 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20   implemented by 
10770 61 20 63 61 6c 6c 20 74 6f 20 43 0a 2a 2a 20 20  a call to C.**  
10780 20 20 20 66 75 6e 63 74 69 6f 6e 20 6c 69 6b 65     function like
10790 46 75 6e 63 2e 20 41 72 67 75 6d 65 6e 74 20 70  Func. Argument p
107a0 41 72 67 20 69 73 20 63 61 73 74 20 74 6f 20 61  Arg is cast to a
107b0 20 28 76 6f 69 64 20 2a 29 20 61 6e 64 20 6d 61   (void *) and ma
107c0 64 65 0a 2a 2a 20 20 20 20 20 61 76 61 69 6c 61  de.**     availa
107d0 62 6c 65 20 61 73 20 74 68 65 20 66 75 6e 63 74  ble as the funct
107e0 69 6f 6e 20 75 73 65 72 2d 64 61 74 61 20 28 73  ion user-data (s
107f0 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61  qlite3_user_data
10800 28 29 29 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20  ()). The.**     
10810 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 20 76 61  FuncDef.flags va
10820 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f  riable is set to
10830 20 74 68 65 20 76 61 6c 75 65 20 70 61 73 73 65   the value passe
10840 64 20 61 73 20 74 68 65 20 66 6c 61 67 73 0a 2a  d as the flags.*
10850 2a 20 20 20 20 20 70 61 72 61 6d 65 74 65 72 2e  *     parameter.
10860 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 46 55 4e 43  .*/.#define FUNC
10870 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
10880 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
10890 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  nc) \.  {nArg, S
108a0 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
108b0 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c  ANT|SQLITE_UTF8|
108c0 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43  (bNC*SQLITE_FUNC
108d0 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20  _NEEDCOLL), \.  
108e0 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
108f0 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75  TR(iArg), 0, xFu
10900 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e  nc, 0, 0, 0, #zN
10910 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69  ame, {0} }.#defi
10920 6e 65 20 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61  ne VFUNCTION(zNa
10930 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
10940 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20  bNC, xFunc) \.  
10950 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54  {nArg, SQLITE_UT
10960 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46  F8|(bNC*SQLITE_F
10970 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c  UNC_NEEDCOLL), \
10980 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  .   SQLITE_INT_T
10990 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20  O_PTR(iArg), 0, 
109a0 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20  xFunc, 0, 0, 0, 
109b0 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64  #zName, {0} }.#d
109c0 65 66 69 6e 65 20 44 46 55 4e 43 54 49 4f 4e 28  efine DFUNCTION(
109d0 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
109e0 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c  g, bNC, xFunc) \
109f0 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45  .  {nArg, SQLITE
10a00 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53 51  _FUNC_SLOCHNG|SQ
10a10 4c 49 54 45 5f 55 54 46 38 2c 20 5c 0a 20 20 20  LITE_UTF8, \.   
10a20 30 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20  0, 0, xFunc, 0, 
10a30 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30  0, 0, #zName, {0
10a40 7d 20 7d 0a 23 64 65 66 69 6e 65 20 50 55 52 45  } }.#define PURE
10a50 5f 44 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72  _DATE(zName, nAr
10a60 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
10a70 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  unc) \.  {nArg, 
10a80 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43  SQLITE_FUNC_SLOC
10a90 48 4e 47 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c  HNG|SQLITE_UTF8|
10aa0 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
10ab0 54 41 4e 54 2c 20 5c 0a 20 20 20 28 76 6f 69 64  TANT, \.   (void
10ac0 2a 29 26 73 71 6c 69 74 65 33 43 6f 6e 66 69 67  *)&sqlite3Config
10ad0 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30  , 0, xFunc, 0, 0
10ae0 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d  , 0, #zName, {0}
10af0 20 7d 0a 23 64 65 66 69 6e 65 20 46 55 4e 43 54   }.#define FUNCT
10b00 49 4f 4e 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  ION2(zName, nArg
10b10 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
10b20 6e 63 2c 20 65 78 74 72 61 46 6c 61 67 73 29 20  nc, extraFlags) 
10b30 5c 0a 20 20 7b 6e 41 72 67 2c 53 51 4c 49 54 45  \.  {nArg,SQLITE
10b40 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53  _FUNC_CONSTANT|S
10b50 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a  QLITE_UTF8|(bNC*
10b60 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
10b70 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67 73  COLL)|extraFlags
10b80 2c 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54  ,\.   SQLITE_INT
10b90 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30  _TO_PTR(iArg), 0
10ba0 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 30  , xFunc, 0, 0, 0
10bb0 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a  , #zName, {0} }.
10bc0 23 64 65 66 69 6e 65 20 53 54 52 5f 46 55 4e 43  #define STR_FUNC
10bd0 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
10be0 2c 20 70 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , pArg, bNC, xFu
10bf0 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  nc) \.  {nArg, S
10c00 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48  QLITE_FUNC_SLOCH
10c10 4e 47 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 28  NG|SQLITE_UTF8|(
10c20 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f  bNC*SQLITE_FUNC_
10c30 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20  NEEDCOLL), \.   
10c40 70 41 72 67 2c 20 30 2c 20 78 46 75 6e 63 2c 20  pArg, 0, xFunc, 
10c50 30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c  0, 0, 0, #zName,
10c60 20 7d 0a 23 64 65 66 69 6e 65 20 4c 49 4b 45 46   }.#define LIKEF
10c70 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  UNC(zName, nArg,
10c80 20 61 72 67 2c 20 66 6c 61 67 73 29 20 5c 0a 20   arg, flags) \. 
10c90 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46   {nArg, SQLITE_F
10ca0 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c  UNC_CONSTANT|SQL
10cb0 49 54 45 5f 55 54 46 38 7c 66 6c 61 67 73 2c 20  ITE_UTF8|flags, 
10cc0 5c 0a 20 20 20 28 76 6f 69 64 20 2a 29 61 72 67  \.   (void *)arg
10cd0 2c 20 30 2c 20 6c 69 6b 65 46 75 6e 63 2c 20 30  , 0, likeFunc, 0
10ce0 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20  , 0, 0, #zName, 
10cf0 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 41 47  {0} }.#define AG
10d00 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e  GREGATE(zName, n
10d10 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53  Arg, arg, nc, xS
10d20 74 65 70 2c 20 78 46 69 6e 61 6c 2c 20 78 56 61  tep, xFinal, xVa
10d30 6c 75 65 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  lue) \.  {nArg, 
10d40 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e 63 2a  SQLITE_UTF8|(nc*
10d50 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
10d60 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49  COLL), \.   SQLI
10d70 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72  TE_INT_TO_PTR(ar
10d80 67 29 2c 20 30 2c 20 78 53 74 65 70 2c 78 46 69  g), 0, xStep,xFi
10d90 6e 61 6c 2c 78 56 61 6c 75 65 2c 30 2c 23 7a 4e  nal,xValue,0,#zN
10da0 61 6d 65 2c 20 7b 30 7d 7d 0a 23 64 65 66 69 6e  ame, {0}}.#defin
10db0 65 20 41 47 47 52 45 47 41 54 45 32 28 7a 4e 61  e AGGREGATE2(zNa
10dc0 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e  me, nArg, arg, n
10dd0 63 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c  c, xStep, xFinal
10de0 2c 20 65 78 74 72 61 46 6c 61 67 73 29 20 5c 0a  , extraFlags) \.
10df0 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
10e00 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f  UTF8|(nc*SQLITE_
10e10 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65  FUNC_NEEDCOLL)|e
10e20 78 74 72 61 46 6c 61 67 73 2c 20 5c 0a 20 20 20  xtraFlags, \.   
10e30 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54  SQLITE_INT_TO_PT
10e40 52 28 61 72 67 29 2c 20 30 2c 20 78 53 74 65 70  R(arg), 0, xStep
10e50 2c 78 46 69 6e 61 6c 2c 78 46 69 6e 61 6c 2c 30  ,xFinal,xFinal,0
10e60 2c 23 7a 4e 61 6d 65 2c 20 7b 30 7d 7d 0a 0a 23  ,#zName, {0}}..#
10e70 64 65 66 69 6e 65 20 57 41 47 47 52 45 47 41 54  define WAGGREGAT
10e80 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61  E(zName, nArg, a
10e90 72 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20 78  rg, nc, xStep, x
10ea0 46 69 6e 61 6c 2c 20 78 56 61 6c 75 65 2c 20 78  Final, xValue, x
10eb0 49 6e 76 65 72 73 65 2c 20 66 29 20 5c 0a 20 20  Inverse, f) \.  
10ec0 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54  {nArg, SQLITE_UT
10ed0 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55  F8|(nc*SQLITE_FU
10ee0 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 66 2c 20  NC_NEEDCOLL)|f, 
10ef0 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f  \.   SQLITE_INT_
10f00 54 4f 5f 50 54 52 28 61 72 67 29 2c 20 30 2c 20  TO_PTR(arg), 0, 
10f10 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c 78 56 61  xStep,xFinal,xVa
10f20 6c 75 65 2c 78 49 6e 76 65 72 73 65 2c 23 7a 4e  lue,xInverse,#zN
10f30 61 6d 65 2c 20 7b 30 7d 7d 0a 0a 2f 2a 0a 2a 2a  ame, {0}}../*.**
10f40 20 41 6c 6c 20 63 75 72 72 65 6e 74 20 73 61 76   All current sav
10f50 65 70 6f 69 6e 74 73 20 61 72 65 20 73 74 6f 72  epoints are stor
10f60 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 20 6c  ed in a linked l
10f70 69 73 74 20 73 74 61 72 74 69 6e 67 20 61 74 0a  ist starting at.
10f80 2a 2a 20 73 71 6c 69 74 65 33 2e 70 53 61 76 65  ** sqlite3.pSave
10f90 70 6f 69 6e 74 2e 20 54 68 65 20 66 69 72 73 74  point. The first
10fa0 20 65 6c 65 6d 65 6e 74 20 69 6e 20 74 68 65 20   element in the 
10fb0 6c 69 73 74 20 69 73 20 74 68 65 20 6d 6f 73 74  list is the most
10fc0 20 72 65 63 65 6e 74 6c 79 0a 2a 2a 20 6f 70 65   recently.** ope
10fd0 6e 65 64 20 73 61 76 65 70 6f 69 6e 74 2e 20 53  ned savepoint. S
10fe0 61 76 65 70 6f 69 6e 74 73 20 61 72 65 20 61 64  avepoints are ad
10ff0 64 65 64 20 74 6f 20 74 68 65 20 6c 69 73 74 20  ded to the list 
11000 62 79 20 74 68 65 20 76 64 62 65 0a 2a 2a 20 4f  by the vdbe.** O
11010 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74  P_Savepoint inst
11020 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75  ruction..*/.stru
11030 63 74 20 53 61 76 65 70 6f 69 6e 74 20 7b 0a 20  ct Savepoint {. 
11040 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
11050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11060 20 20 20 20 20 2f 2a 20 53 61 76 65 70 6f 69 6e       /* Savepoin
11070 74 20 6e 61 6d 65 20 28 6e 75 6c 2d 74 65 72 6d  t name (nul-term
11080 69 6e 61 74 65 64 29 20 2a 2f 0a 20 20 69 36 34  inated) */.  i64
11090 20 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 20   nDeferredCons; 
110a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
110b0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64 65   /* Number of de
110c0 66 65 72 72 65 64 20 66 6b 20 76 69 6f 6c 61 74  ferred fk violat
110d0 69 6f 6e 73 20 2a 2f 0a 20 20 69 36 34 20 6e 44  ions */.  i64 nD
110e0 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20  eferredImmCons; 
110f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
11100 20 4e 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72   Number of defer
11110 72 65 64 20 69 6d 6d 20 66 6b 2e 20 2a 2f 0a 20  red imm fk. */. 
11120 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 4e 65 78   Savepoint *pNex
11130 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
11140 20 20 20 20 20 2f 2a 20 50 61 72 65 6e 74 20 73       /* Parent s
11150 61 76 65 70 6f 69 6e 74 20 28 69 66 20 61 6e 79  avepoint (if any
11160 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  ) */.};../*.** T
11170 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65  he following are
11180 20 75 73 65 64 20 61 73 20 74 68 65 20 73 65 63   used as the sec
11190 6f 6e 64 20 70 61 72 61 6d 65 74 65 72 20 74 6f  ond parameter to
111a0 20 73 71 6c 69 74 65 33 53 61 76 65 70 6f 69 6e   sqlite3Savepoin
111b0 74 28 29 2c 0a 2a 2a 20 61 6e 64 20 61 73 20 74  t(),.** and as t
111c0 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74  he P1 argument t
111d0 6f 20 74 68 65 20 4f 50 5f 53 61 76 65 70 6f 69  o the OP_Savepoi
111e0 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  nt instruction..
111f0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50  */.#define SAVEP
11200 4f 49 4e 54 5f 42 45 47 49 4e 20 20 20 20 20 20  OINT_BEGIN      
11210 30 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f  0.#define SAVEPO
11220 49 4e 54 5f 52 45 4c 45 41 53 45 20 20 20 20 31  INT_RELEASE    1
11230 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49  .#define SAVEPOI
11240 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 20 20 32 0a  NT_ROLLBACK   2.
11250 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c  ../*.** Each SQL
11260 69 74 65 20 6d 6f 64 75 6c 65 20 28 76 69 72 74  ite module (virt
11270 75 61 6c 20 74 61 62 6c 65 20 64 65 66 69 6e 69  ual table defini
11280 74 69 6f 6e 29 20 69 73 20 64 65 66 69 6e 65 64  tion) is defined
11290 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e   by an.** instan
112a0 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
112b0 69 6e 67 20 73 74 72 75 63 74 75 72 65 2c 20 73  ing structure, s
112c0 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c  tored in the sql
112d0 69 74 65 33 2e 61 4d 6f 64 75 6c 65 0a 2a 2a 20  ite3.aModule.** 
112e0 68 61 73 68 20 74 61 62 6c 65 2e 0a 2a 2f 0a 73  hash table..*/.s
112f0 74 72 75 63 74 20 4d 6f 64 75 6c 65 20 7b 0a 20  truct Module {. 
11300 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d   const sqlite3_m
11310 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 20  odule *pModule; 
11320 20 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63        /* Callbac
11330 6b 20 70 6f 69 6e 74 65 72 73 20 2a 2f 0a 20 20  k pointers */.  
11340 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d  const char *zNam
11350 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
11360 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 70 61 73       /* Name pas
11370 73 65 64 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f  sed to create_mo
11380 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64  dule() */.  void
11390 20 2a 70 41 75 78 3b 20 20 20 20 20 20 20 20 20   *pAux;         
113a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
113b0 20 2f 2a 20 70 41 75 78 20 70 61 73 73 65 64 20   /* pAux passed 
113c0 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65  to create_module
113d0 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  () */.  void (*x
113e0 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a 29  Destroy)(void *)
113f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
11400 4d 6f 64 75 6c 65 20 64 65 73 74 72 75 63 74 6f  Module destructo
11410 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  r function */.  
11420 54 61 62 6c 65 20 2a 70 45 70 6f 54 61 62 3b 20  Table *pEpoTab; 
11430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11440 20 20 20 20 20 2f 2a 20 45 70 6f 6e 79 6d 6f 75       /* Eponymou
11450 73 20 74 61 62 6c 65 20 66 6f 72 20 74 68 69 73  s table for this
11460 20 6d 6f 64 75 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f   module */.};../
11470 2a 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  *.** information
11480 20 61 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75   about each colu
11490 6d 6e 20 6f 66 20 61 6e 20 53 51 4c 20 74 61 62  mn of an SQL tab
114a0 6c 65 20 69 73 20 68 65 6c 64 20 69 6e 20 61 6e  le is held in an
114b0 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20   instance.** of 
114c0 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 0a  this structure..
114d0 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e  */.struct Column
114e0 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65   {.  char *zName
114f0 3b 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66  ;     /* Name of
11500 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2c 20 5c 30   this column, \0
11510 30 30 2c 20 74 68 65 6e 20 74 68 65 20 74 79 70  00, then the typ
11520 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 44 66  e */.  Expr *pDf
11530 6c 74 3b 20 20 20 20 20 2f 2a 20 44 65 66 61 75  lt;     /* Defau
11540 6c 74 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73  lt value of this
11550 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68 61   column */.  cha
11560 72 20 2a 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a  r *zColl;     /*
11570 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   Collating seque
11580 6e 63 65 2e 20 20 49 66 20 4e 55 4c 4c 2c 20 75  nce.  If NULL, u
11590 73 65 20 74 68 65 20 64 65 66 61 75 6c 74 20 2a  se the default *
115a0 2f 0a 20 20 75 38 20 6e 6f 74 4e 75 6c 6c 3b 20  /.  u8 notNull; 
115b0 20 20 20 20 20 2f 2a 20 41 6e 20 4f 45 5f 20 63       /* An OE_ c
115c0 6f 64 65 20 66 6f 72 20 68 61 6e 64 6c 69 6e 67  ode for handling
115d0 20 61 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73   a NOT NULL cons
115e0 74 72 61 69 6e 74 20 2a 2f 0a 20 20 63 68 61 72  traint */.  char
115f0 20 61 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a 20   affinity;   /* 
11600 4f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c 49 54  One of the SQLIT
11610 45 5f 41 46 46 5f 2e 2e 2e 20 76 61 6c 75 65 73  E_AFF_... values
11620 20 2a 2f 0a 20 20 75 38 20 73 7a 45 73 74 3b 20   */.  u8 szEst; 
11630 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61         /* Estima
11640 74 65 64 20 73 69 7a 65 20 6f 66 20 76 61 6c 75  ted size of valu
11650 65 20 69 6e 20 74 68 69 73 20 63 6f 6c 75 6d 6e  e in this column
11660 2e 20 73 69 7a 65 6f 66 28 49 4e 54 29 3d 3d 31  . sizeof(INT)==1
11670 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 46 6c 61 67   */.  u8 colFlag
11680 73 3b 20 20 20 20 20 2f 2a 20 42 6f 6f 6c 65 61  s;     /* Boolea
11690 6e 20 70 72 6f 70 65 72 74 69 65 73 2e 20 20 53  n properties.  S
116a0 65 65 20 43 4f 4c 46 4c 41 47 5f 20 64 65 66 69  ee COLFLAG_ defi
116b0 6e 65 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a  nes below */.};.
116c0 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  ./* Allowed valu
116d0 65 73 20 66 6f 72 20 43 6f 6c 75 6d 6e 2e 63 6f  es for Column.co
116e0 6c 46 6c 61 67 73 3a 0a 2a 2f 0a 23 64 65 66 69  lFlags:.*/.#defi
116f0 6e 65 20 43 4f 4c 46 4c 41 47 5f 50 52 49 4d 4b  ne COLFLAG_PRIMK
11700 45 59 20 20 30 78 30 30 30 31 20 20 20 20 2f 2a  EY  0x0001    /*
11710 20 43 6f 6c 75 6d 6e 20 69 73 20 70 61 72 74 20   Column is part 
11720 6f 66 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b  of the primary k
11730 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f  ey */.#define CO
11740 4c 46 4c 41 47 5f 48 49 44 44 45 4e 20 20 20 30  LFLAG_HIDDEN   0
11750 78 30 30 30 32 20 20 20 20 2f 2a 20 41 20 68 69  x0002    /* A hi
11760 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 69 6e 20 61  dden column in a
11770 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 2a   virtual table *
11780 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41  /.#define COLFLA
11790 47 5f 48 41 53 54 59 50 45 20 20 30 78 30 30 30  G_HASTYPE  0x000
117a0 34 20 20 20 20 2f 2a 20 54 79 70 65 20 6e 61 6d  4    /* Type nam
117b0 65 20 66 6f 6c 6c 6f 77 73 20 63 6f 6c 75 6d 6e  e follows column
117c0 20 6e 61 6d 65 20 2a 2f 0a 23 64 65 66 69 6e 65   name */.#define
117d0 20 43 4f 4c 46 4c 41 47 5f 55 4e 49 51 55 45 20   COLFLAG_UNIQUE 
117e0 20 20 30 78 30 30 30 38 20 20 20 20 2f 2a 20 43    0x0008    /* C
117f0 6f 6c 75 6d 6e 20 64 65 66 20 63 6f 6e 74 61 69  olumn def contai
11800 6e 73 20 22 55 4e 49 51 55 45 22 20 6f 72 20 22  ns "UNIQUE" or "
11810 50 4b 22 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43  PK" */.#define C
11820 4f 4c 46 4c 41 47 5f 53 4f 52 54 45 52 52 45 46  OLFLAG_SORTERREF
11830 20 30 78 30 30 31 30 20 20 20 2f 2a 20 55 73 65   0x0010   /* Use
11840 20 73 6f 72 74 65 72 2d 72 65 66 73 20 77 69 74   sorter-refs wit
11850 68 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f  h this column */
11860 0a 0a 2f 2a 0a 2a 2a 20 41 20 22 43 6f 6c 6c 61  ../*.** A "Colla
11870 74 69 6e 67 20 53 65 71 75 65 6e 63 65 22 20 69  ting Sequence" i
11880 73 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e 20  s defined by an 
11890 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
118a0 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72  following.** str
118b0 75 63 74 75 72 65 2e 20 43 6f 6e 63 65 70 74 75  ucture. Conceptu
118c0 61 6c 6c 79 2c 20 61 20 63 6f 6c 6c 61 74 69 6e  ally, a collatin
118d0 67 20 73 65 71 75 65 6e 63 65 20 63 6f 6e 73 69  g sequence consi
118e0 73 74 73 20 6f 66 20 61 20 6e 61 6d 65 20 61 6e  sts of a name an
118f0 64 0a 2a 2a 20 61 20 63 6f 6d 70 61 72 69 73 6f  d.** a compariso
11900 6e 20 72 6f 75 74 69 6e 65 20 74 68 61 74 20 64  n routine that d
11910 65 66 69 6e 65 73 20 74 68 65 20 6f 72 64 65 72  efines the order
11920 20 6f 66 20 74 68 61 74 20 73 65 71 75 65 6e 63   of that sequenc
11930 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 43 6f 6c 6c  e..**.** If Coll
11940 53 65 71 2e 78 43 6d 70 20 69 73 20 4e 55 4c 4c  Seq.xCmp is NULL
11950 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20  , it means that 
11960 74 68 65 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67  the.** collating
11970 20 73 65 71 75 65 6e 63 65 20 69 73 20 75 6e 64   sequence is und
11980 65 66 69 6e 65 64 2e 20 20 49 6e 64 69 63 65 73  efined.  Indices
11990 20 62 75 69 6c 74 20 6f 6e 20 61 6e 20 75 6e 64   built on an und
119a0 65 66 69 6e 65 64 0a 2a 2a 20 63 6f 6c 6c 61 74  efined.** collat
119b0 69 6e 67 20 73 65 71 75 65 6e 63 65 20 6d 61 79  ing sequence may
119c0 20 6e 6f 74 20 62 65 20 72 65 61 64 20 6f 72 20   not be read or 
119d0 77 72 69 74 74 65 6e 2e 0a 2a 2f 0a 73 74 72 75  written..*/.stru
119e0 63 74 20 43 6f 6c 6c 53 65 71 20 7b 0a 20 20 63  ct CollSeq {.  c
119f0 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
11a00 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
11a10 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  the collating se
11a20 71 75 65 6e 63 65 2c 20 55 54 46 2d 38 20 65 6e  quence, UTF-8 en
11a30 63 6f 64 65 64 20 2a 2f 0a 20 20 75 38 20 65 6e  coded */.  u8 en
11a40 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
11a50 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e   /* Text encodin
11a60 67 20 68 61 6e 64 6c 65 64 20 62 79 20 78 43 6d  g handled by xCm
11a70 70 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  p() */.  void *p
11a80 55 73 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f  User;          /
11a90 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74  * First argument
11aa0 20 74 6f 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20   to xCmp() */.  
11ab0 69 6e 74 20 28 2a 78 43 6d 70 29 28 76 6f 69 64  int (*xCmp)(void
11ac0 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69  *,int, const voi
11ad0 64 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76  d*, int, const v
11ae0 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20 28 2a  oid*);.  void (*
11af0 78 44 65 6c 29 28 76 6f 69 64 2a 29 3b 20 20 2f  xDel)(void*);  /
11b00 2a 20 44 65 73 74 72 75 63 74 6f 72 20 66 6f 72  * Destructor for
11b10 20 70 55 73 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   pUser */.};../*
11b20 0a 2a 2a 20 41 20 73 6f 72 74 20 6f 72 64 65 72  .** A sort order
11b30 20 63 61 6e 20 62 65 20 65 69 74 68 65 72 20 41   can be either A
11b40 53 43 20 6f 72 20 44 45 53 43 2e 0a 2a 2f 0a 23  SC or DESC..*/.#
11b50 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f  define SQLITE_SO
11b60 5f 41 53 43 20 20 20 20 20 20 20 30 20 20 2f 2a  _ASC       0  /*
11b70 20 53 6f 72 74 20 69 6e 20 61 73 63 65 6e 64 69   Sort in ascendi
11b80 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66  ng order */.#def
11b90 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 44 45  ine SQLITE_SO_DE
11ba0 53 43 20 20 20 20 20 20 31 20 20 2f 2a 20 53 6f  SC      1  /* So
11bb0 72 74 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20  rt in ascending 
11bc0 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65  order */.#define
11bd0 20 53 51 4c 49 54 45 5f 53 4f 5f 55 4e 44 45 46   SQLITE_SO_UNDEF
11be0 49 4e 45 44 20 2d 31 20 2f 2a 20 4e 6f 20 73 6f  INED -1 /* No so
11bf0 72 74 20 6f 72 64 65 72 20 73 70 65 63 69 66 69  rt order specifi
11c00 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6c  ed */../*.** Col
11c10 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 79 70  umn affinity typ
11c20 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 73 65 20  es..**.** These 
11c30 75 73 65 64 20 74 6f 20 68 61 76 65 20 6d 6e 65  used to have mne
11c40 6d 6f 6e 69 63 20 6e 61 6d 65 20 6c 69 6b 65 20  monic name like 
11c50 27 69 27 20 66 6f 72 20 53 51 4c 49 54 45 5f 41  'i' for SQLITE_A
11c60 46 46 5f 49 4e 54 45 47 45 52 20 61 6e 64 0a 2a  FF_INTEGER and.*
11c70 2a 20 27 74 27 20 66 6f 72 20 53 51 4c 49 54 45  * 't' for SQLITE
11c80 5f 41 46 46 5f 54 45 58 54 2e 20 20 42 75 74 20  _AFF_TEXT.  But 
11c90 77 65 20 63 61 6e 20 73 61 76 65 20 61 20 6c 69  we can save a li
11ca0 74 74 6c 65 20 73 70 61 63 65 20 61 6e 64 20 69  ttle space and i
11cb0 6d 70 72 6f 76 65 0a 2a 2a 20 74 68 65 20 73 70  mprove.** the sp
11cc0 65 65 64 20 61 20 6c 69 74 74 6c 65 20 62 79 20  eed a little by 
11cd0 6e 75 6d 62 65 72 69 6e 67 20 74 68 65 20 76 61  numbering the va
11ce0 6c 75 65 73 20 63 6f 6e 73 65 63 75 74 69 76 65  lues consecutive
11cf0 6c 79 2e 0a 2a 2a 0a 2a 2a 20 42 75 74 20 72 61  ly..**.** But ra
11d00 74 68 65 72 20 74 68 61 6e 20 73 74 61 72 74 20  ther than start 
11d10 77 69 74 68 20 30 20 6f 72 20 31 2c 20 77 65 20  with 0 or 1, we 
11d20 62 65 67 69 6e 20 77 69 74 68 20 27 41 27 2e 20  begin with 'A'. 
11d30 20 54 68 61 74 20 77 61 79 2c 0a 2a 2a 20 77 68   That way,.** wh
11d40 65 6e 20 6d 75 6c 74 69 70 6c 65 20 61 66 66 69  en multiple affi
11d50 6e 69 74 79 20 74 79 70 65 73 20 61 72 65 20 63  nity types are c
11d60 6f 6e 63 61 74 65 6e 61 74 65 64 20 69 6e 74 6f  oncatenated into
11d70 20 61 20 73 74 72 69 6e 67 20 61 6e 64 0a 2a 2a   a string and.**
11d80 20 75 73 65 64 20 61 73 20 74 68 65 20 50 34 20   used as the P4 
11d90 6f 70 65 72 61 6e 64 2c 20 74 68 65 79 20 77 69  operand, they wi
11da0 6c 6c 20 62 65 20 6d 6f 72 65 20 72 65 61 64 61  ll be more reada
11db0 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20  ble..**.** Note 
11dc0 61 6c 73 6f 20 74 68 61 74 20 74 68 65 20 6e 75  also that the nu
11dd0 6d 65 72 69 63 20 74 79 70 65 73 20 61 72 65 20  meric types are 
11de0 67 72 6f 75 70 65 64 20 74 6f 67 65 74 68 65 72  grouped together
11df0 20 73 6f 20 74 68 61 74 20 74 65 73 74 69 6e 67   so that testing
11e00 0a 2a 2a 20 66 6f 72 20 61 20 6e 75 6d 65 72 69  .** for a numeri
11e10 63 20 74 79 70 65 20 69 73 20 61 20 73 69 6e 67  c type is a sing
11e20 6c 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20  le comparison.  
11e30 41 6e 64 20 74 68 65 20 42 4c 4f 42 20 74 79 70  And the BLOB typ
11e40 65 20 69 73 20 66 69 72 73 74 2e 0a 2a 2f 0a 23  e is first..*/.#
11e50 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
11e60 46 5f 42 4c 4f 42 20 20 20 20 20 27 41 27 0a 23  F_BLOB     'A'.#
11e70 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
11e80 46 5f 54 45 58 54 20 20 20 20 20 27 42 27 0a 23  F_TEXT     'B'.#
11e90 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
11ea0 46 5f 4e 55 4d 45 52 49 43 20 20 27 43 27 0a 23  F_NUMERIC  'C'.#
11eb0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
11ec0 46 5f 49 4e 54 45 47 45 52 20 20 27 44 27 0a 23  F_INTEGER  'D'.#
11ed0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
11ee0 46 5f 52 45 41 4c 20 20 20 20 20 27 45 27 0a 0a  F_REAL     'E'..
11ef0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49  #define sqlite3I
11f00 73 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79  sNumericAffinity
11f10 28 58 29 20 20 28 28 58 29 3e 3d 53 51 4c 49 54  (X)  ((X)>=SQLIT
11f20 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 29 0a 0a  E_AFF_NUMERIC)..
11f30 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45  /*.** The SQLITE
11f40 5f 41 46 46 5f 4d 41 53 4b 20 76 61 6c 75 65 73  _AFF_MASK values
11f50 20 6d 61 73 6b 73 20 6f 66 66 20 74 68 65 20 73   masks off the s
11f60 69 67 6e 69 66 69 63 61 6e 74 20 62 69 74 73 20  ignificant bits 
11f70 6f 66 20 61 6e 0a 2a 2a 20 61 66 66 69 6e 69 74  of an.** affinit
11f80 79 20 76 61 6c 75 65 2e 0a 2a 2f 0a 23 64 65 66  y value..*/.#def
11f90 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d  ine SQLITE_AFF_M
11fa0 41 53 4b 20 20 20 20 20 30 78 34 37 0a 0a 2f 2a  ASK     0x47../*
11fb0 0a 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20 62  .** Additional b
11fc0 69 74 20 76 61 6c 75 65 73 20 74 68 61 74 20 63  it values that c
11fd0 61 6e 20 62 65 20 4f 52 65 64 20 77 69 74 68 20  an be ORed with 
11fe0 61 6e 20 61 66 66 69 6e 69 74 79 20 77 69 74 68  an affinity with
11ff0 6f 75 74 0a 2a 2a 20 63 68 61 6e 67 69 6e 67 20  out.** changing 
12000 74 68 65 20 61 66 66 69 6e 69 74 79 2e 0a 2a 2a  the affinity..**
12010 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 4e  .** The SQLITE_N
12020 4f 54 4e 55 4c 4c 20 66 6c 61 67 20 69 73 20 61  OTNULL flag is a
12030 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20   combination of 
12040 4e 55 4c 4c 45 51 20 61 6e 64 20 4a 55 4d 50 49  NULLEQ and JUMPI
12050 46 4e 55 4c 4c 2e 0a 2a 2a 20 49 74 20 63 61 75  FNULL..** It cau
12060 73 65 73 20 61 6e 20 61 73 73 65 72 74 28 29 20  ses an assert() 
12070 74 6f 20 66 69 72 65 20 69 66 20 65 69 74 68 65  to fire if eithe
12080 72 20 6f 70 65 72 61 6e 64 20 74 6f 20 61 20 63  r operand to a c
12090 6f 6d 70 61 72 69 73 6f 6e 0a 2a 2a 20 6f 70 65  omparison.** ope
120a0 72 61 74 6f 72 20 69 73 20 4e 55 4c 4c 2e 20 20  rator is NULL.  
120b0 49 74 20 69 73 20 61 64 64 65 64 20 74 6f 20 63  It is added to c
120c0 65 72 74 61 69 6e 20 63 6f 6d 70 61 72 69 73 6f  ertain compariso
120d0 6e 20 6f 70 65 72 61 74 6f 72 73 20 74 6f 0a 2a  n operators to.*
120e0 2a 20 70 72 6f 76 65 20 74 68 61 74 20 74 68 65  * prove that the
120f0 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 61 6c   operands are al
12100 77 61 79 73 20 4e 4f 54 20 4e 55 4c 4c 2e 0a 2a  ways NOT NULL..*
12110 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
12120 5f 4b 45 45 50 4e 55 4c 4c 20 20 20 20 20 30 78  _KEEPNULL     0x
12130 30 38 20 20 2f 2a 20 55 73 65 64 20 62 79 20 76  08  /* Used by v
12140 65 63 74 6f 72 20 3d 3d 20 6f 72 20 3c 3e 20 2a  ector == or <> *
12150 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
12160 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 20 20 30 78  _JUMPIFNULL   0x
12170 31 30 20 20 2f 2a 20 6a 75 6d 70 73 20 69 66 20  10  /* jumps if 
12180 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69  either operand i
12190 73 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e  s NULL */.#defin
121a0 65 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32  e SQLITE_STOREP2
121b0 20 20 20 20 20 20 30 78 32 30 20 20 2f 2a 20 53        0x20  /* S
121c0 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20 72  tore result in r
121d0 65 67 5b 50 32 5d 20 72 61 74 68 65 72 20 74 68  eg[P2] rather th
121e0 61 6e 20 6a 75 6d 70 20 2a 2f 0a 23 64 65 66 69  an jump */.#defi
121f0 6e 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  ne SQLITE_NULLEQ
12200 20 20 20 20 20 20 20 30 78 38 30 20 20 2f 2a 20         0x80  /* 
12210 4e 55 4c 4c 3d 4e 55 4c 4c 20 2a 2f 0a 23 64 65  NULL=NULL */.#de
12220 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e  fine SQLITE_NOTN
12230 55 4c 4c 20 20 20 20 20 20 30 78 39 30 20 20 2f  ULL      0x90  /
12240 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 6f 70  * Assert that op
12250 65 72 61 6e 64 73 20 61 72 65 20 6e 65 76 65 72  erands are never
12260 20 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20   NULL */../*.** 
12270 41 6e 20 6f 62 6a 65 63 74 20 6f 66 20 74 68 69  An object of thi
12280 73 20 74 79 70 65 20 69 73 20 63 72 65 61 74 65  s type is create
12290 64 20 66 6f 72 20 65 61 63 68 20 76 69 72 74 75  d for each virtu
122a0 61 6c 20 74 61 62 6c 65 20 70 72 65 73 65 6e 74  al table present
122b0 20 69 6e 0a 2a 2a 20 74 68 65 20 64 61 74 61 62   in.** the datab
122c0 61 73 65 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a  ase schema..**.*
122d0 2a 20 49 66 20 74 68 65 20 64 61 74 61 62 61 73  * If the databas
122e0 65 20 73 63 68 65 6d 61 20 69 73 20 73 68 61 72  e schema is shar
122f0 65 64 2c 20 74 68 65 6e 20 74 68 65 72 65 20 69  ed, then there i
12300 73 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f  s one instance o
12310 66 20 74 68 69 73 0a 2a 2a 20 73 74 72 75 63 74  f this.** struct
12320 75 72 65 20 66 6f 72 20 65 61 63 68 20 64 61 74  ure for each dat
12330 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
12340 20 28 73 71 6c 69 74 65 33 2a 29 20 74 68 61 74   (sqlite3*) that
12350 20 75 73 65 73 20 74 68 65 20 73 68 61 72 65 64   uses the shared
12360 0a 2a 2a 20 73 63 68 65 6d 61 2e 20 54 68 69 73  .** schema. This
12370 20 69 73 20 62 65 63 61 75 73 65 20 65 61 63 68   is because each
12380 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
12390 74 69 6f 6e 20 72 65 71 75 69 72 65 73 20 69 74  tion requires it
123a0 73 20 6f 77 6e 20 75 6e 69 71 75 65 0a 2a 2a 20  s own unique.** 
123b0 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
123c0 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61  sqlite3_vtab* ha
123d0 6e 64 6c 65 20 75 73 65 64 20 74 6f 20 61 63 63  ndle used to acc
123e0 65 73 73 20 74 68 65 20 76 69 72 74 75 61 6c 20  ess the virtual 
123f0 74 61 62 6c 65 0a 2a 2a 20 69 6d 70 6c 65 6d 65  table.** impleme
12400 6e 74 61 74 69 6f 6e 2e 20 73 71 6c 69 74 65 33  ntation. sqlite3
12410 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20 63  _vtab* handles c
12420 61 6e 20 6e 6f 74 20 62 65 20 73 68 61 72 65 64  an not be shared
12430 20 62 65 74 77 65 65 6e 0a 2a 2a 20 64 61 74 61   between.** data
12440 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73  base connections
12450 2c 20 65 76 65 6e 20 77 68 65 6e 20 74 68 65 20  , even when the 
12460 72 65 73 74 20 6f 66 20 74 68 65 20 69 6e 2d 6d  rest of the in-m
12470 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65 0a 2a  emory database.*
12480 2a 20 73 63 68 65 6d 61 20 69 73 20 73 68 61 72  * schema is shar
12490 65 64 2c 20 61 73 20 74 68 65 20 69 6d 70 6c 65  ed, as the imple
124a0 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 74 65 6e 20  mentation often 
124b0 73 74 6f 72 65 73 20 74 68 65 20 64 61 74 61 62  stores the datab
124c0 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f  ase.** connectio
124d0 6e 20 68 61 6e 64 6c 65 20 70 61 73 73 65 64 20  n handle passed 
124e0 74 6f 20 69 74 20 76 69 61 20 74 68 65 20 78 43  to it via the xC
124f0 6f 6e 6e 65 63 74 28 29 20 6f 72 20 78 43 72 65  onnect() or xCre
12500 61 74 65 28 29 20 6d 65 74 68 6f 64 0a 2a 2a 20  ate() method.** 
12510 64 75 72 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a  during initializ
12520 61 74 69 6f 6e 20 69 6e 74 65 72 6e 61 6c 6c 79  ation internally
12530 2e 20 54 68 69 73 20 64 61 74 61 62 61 73 65 20  . This database 
12540 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c  connection handl
12550 65 20 6d 61 79 0a 2a 2a 20 74 68 65 6e 20 62 65  e may.** then be
12560 20 75 73 65 64 20 62 79 20 74 68 65 20 76 69 72   used by the vir
12570 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65  tual table imple
12580 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20 61 63 63  mentation to acc
12590 65 73 73 20 72 65 61 6c 20 74 61 62 6c 65 73 0a  ess real tables.
125a0 2a 2a 20 77 69 74 68 69 6e 20 74 68 65 20 64 61  ** within the da
125b0 74 61 62 61 73 65 2e 20 53 6f 20 74 68 61 74 20  tabase. So that 
125c0 74 68 65 79 20 61 70 70 65 61 72 20 61 73 20 70  they appear as p
125d0 61 72 74 20 6f 66 20 74 68 65 20 63 61 6c 6c 65  art of the calle
125e0 72 73 0a 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f  rs.** transactio
125f0 6e 2c 20 74 68 65 73 65 20 61 63 63 65 73 73 65  n, these accesse
12600 73 20 6e 65 65 64 20 74 6f 20 62 65 20 6d 61 64  s need to be mad
12610 65 20 76 69 61 20 74 68 65 20 73 61 6d 65 20 64  e via the same d
12620 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65  atabase.** conne
12630 63 74 69 6f 6e 20 61 73 20 74 68 61 74 20 75 73  ction as that us
12640 65 64 20 74 6f 20 65 78 65 63 75 74 65 20 53 51  ed to execute SQ
12650 4c 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f 6e 20  L operations on 
12660 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
12670 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 56 54 61  e..**.** All VTa
12680 62 6c 65 20 6f 62 6a 65 63 74 73 20 74 68 61 74  ble objects that
12690 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 61   correspond to a
126a0 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 69 6e   single table in
126b0 20 61 20 73 68 61 72 65 64 0a 2a 2a 20 64 61 74   a shared.** dat
126c0 61 62 61 73 65 20 73 63 68 65 6d 61 20 61 72 65  abase schema are
126d0 20 69 6e 69 74 69 61 6c 6c 79 20 73 74 6f 72 65   initially store
126e0 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 2d 6c 69  d in a linked-li
126f0 73 74 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79  st pointed to by
12700 0a 2a 2a 20 74 68 65 20 54 61 62 6c 65 2e 70 56  .** the Table.pV
12710 54 61 62 6c 65 20 6d 65 6d 62 65 72 20 76 61 72  Table member var
12720 69 61 62 6c 65 20 6f 66 20 74 68 65 20 63 6f 72  iable of the cor
12730 72 65 73 70 6f 6e 64 69 6e 67 20 54 61 62 6c 65  responding Table
12740 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 57 68 65 6e   object..** When
12750 20 61 6e 20 73 71 6c 69 74 65 33 5f 70 72 65 70   an sqlite3_prep
12760 61 72 65 28 29 20 6f 70 65 72 61 74 69 6f 6e 20  are() operation 
12770 69 73 20 72 65 71 75 69 72 65 64 20 74 6f 20 61  is required to a
12780 63 63 65 73 73 20 74 68 65 20 76 69 72 74 75 61  ccess the virtua
12790 6c 0a 2a 2a 20 74 61 62 6c 65 2c 20 69 74 20 73  l.** table, it s
127a0 65 61 72 63 68 65 73 20 74 68 65 20 6c 69 73 74  earches the list
127b0 20 66 6f 72 20 74 68 65 20 56 54 61 62 6c 65 20   for the VTable 
127c0 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 73  that corresponds
127d0 20 74 6f 20 74 68 65 0a 2a 2a 20 64 61 74 61 62   to the.** datab
127e0 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 64  ase connection d
127f0 6f 69 6e 67 20 74 68 65 20 70 72 65 70 61 72 69  oing the prepari
12800 6e 67 20 73 6f 20 61 73 20 74 6f 20 75 73 65 20  ng so as to use 
12810 74 68 65 20 63 6f 72 72 65 63 74 0a 2a 2a 20 73  the correct.** s
12820 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e  qlite3_vtab* han
12830 64 6c 65 20 69 6e 20 74 68 65 20 63 6f 6d 70 69  dle in the compi
12840 6c 65 64 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a  led query..**.**
12850 20 57 68 65 6e 20 61 6e 20 69 6e 2d 6d 65 6d 6f   When an in-memo
12860 72 79 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 20  ry Table object 
12870 69 73 20 64 65 6c 65 74 65 64 20 28 66 6f 72 20  is deleted (for 
12880 65 78 61 6d 70 6c 65 20 77 68 65 6e 20 74 68 65  example when the
12890 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 62 65  .** schema is be
128a0 69 6e 67 20 72 65 6c 6f 61 64 65 64 20 66 6f 72  ing reloaded for
128b0 20 73 6f 6d 65 20 72 65 61 73 6f 6e 29 2c 20 74   some reason), t
128c0 68 65 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74  he VTable object
128d0 73 20 61 72 65 20 6e 6f 74 0a 2a 2a 20 64 65 6c  s are not.** del
128e0 65 74 65 64 20 61 6e 64 20 74 68 65 20 73 71 6c  eted and the sql
128f0 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c  ite3_vtab* handl
12900 65 73 20 61 72 65 20 6e 6f 74 20 78 44 69 73 63  es are not xDisc
12910 6f 6e 6e 65 63 74 28 29 65 64 0a 2a 2a 20 69 6d  onnect()ed.** im
12920 6d 65 64 69 61 74 65 6c 79 2e 20 49 6e 73 74 65  mediately. Inste
12930 61 64 2c 20 74 68 65 79 20 61 72 65 20 6d 6f 76  ad, they are mov
12940 65 64 20 66 72 6f 6d 20 74 68 65 20 54 61 62 6c  ed from the Tabl
12950 65 2e 70 56 54 61 62 6c 65 20 6c 69 73 74 20 74  e.pVTable list t
12960 6f 0a 2a 2a 20 61 6e 6f 74 68 65 72 20 6c 69 6e  o.** another lin
12970 6b 65 64 20 6c 69 73 74 20 68 65 61 64 65 64 20  ked list headed 
12980 62 79 20 74 68 65 20 73 71 6c 69 74 65 33 2e 70  by the sqlite3.p
12990 44 69 73 63 6f 6e 6e 65 63 74 20 6d 65 6d 62 65  Disconnect membe
129a0 72 20 6f 66 20 74 68 65 0a 2a 2a 20 63 6f 72 72  r of the.** corr
129b0 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65  esponding sqlite
129c0 33 20 73 74 72 75 63 74 75 72 65 2e 20 54 68 65  3 structure. The
129d0 79 20 61 72 65 20 74 68 65 6e 20 64 65 6c 65 74  y are then delet
129e0 65 64 2f 78 44 69 73 63 6f 6e 6e 65 63 74 65 64  ed/xDisconnected
129f0 0a 2a 2a 20 6e 65 78 74 20 74 69 6d 65 20 61 20  .** next time a 
12a00 73 74 61 74 65 6d 65 6e 74 20 69 73 20 70 72 65  statement is pre
12a10 70 61 72 65 64 20 75 73 69 6e 67 20 73 61 69 64  pared using said
12a20 20 73 71 6c 69 74 65 33 2a 2e 20 54 68 69 73 20   sqlite3*. This 
12a30 69 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20 61 76  is done.** to av
12a40 6f 69 64 20 64 65 61 64 6c 6f 63 6b 20 69 73 73  oid deadlock iss
12a50 75 65 73 20 69 6e 76 6f 6c 76 69 6e 67 20 6d 75  ues involving mu
12a60 6c 74 69 70 6c 65 20 73 71 6c 69 74 65 33 2e 6d  ltiple sqlite3.m
12a70 75 74 65 78 20 6d 75 74 65 78 65 73 2e 0a 2a 2a  utex mutexes..**
12a80 20 52 65 66 65 72 20 74 6f 20 63 6f 6d 6d 65 6e   Refer to commen
12a90 74 73 20 61 62 6f 76 65 20 66 75 6e 63 74 69 6f  ts above functio
12aa0 6e 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c  n sqlite3VtabUnl
12ab0 6f 63 6b 4c 69 73 74 28 29 20 66 6f 72 20 61 6e  ockList() for an
12ac0 0a 2a 2a 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20  .** explanation 
12ad0 61 73 20 74 6f 20 77 68 79 20 69 74 20 69 73 20  as to why it is 
12ae0 73 61 66 65 20 74 6f 20 61 64 64 20 61 6e 20 65  safe to add an e
12af0 6e 74 72 79 20 74 6f 20 61 6e 20 73 71 6c 69 74  ntry to an sqlit
12b00 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74 0a 2a  e3.pDisconnect.*
12b10 2a 20 6c 69 73 74 20 77 69 74 68 6f 75 74 20 68  * list without h
12b20 6f 6c 64 69 6e 67 20 74 68 65 20 63 6f 72 72 65  olding the corre
12b30 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33  sponding sqlite3
12b40 2e 6d 75 74 65 78 20 6d 75 74 65 78 2e 0a 2a 2a  .mutex mutex..**
12b50 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 66  .** The memory f
12b60 6f 72 20 6f 62 6a 65 63 74 73 20 6f 66 20 74 68  or objects of th
12b70 69 73 20 74 79 70 65 20 69 73 20 61 6c 77 61 79  is type is alway
12b80 73 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 0a 2a  s allocated by.*
12b90 2a 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  * sqlite3DbMallo
12ba0 63 28 29 2c 20 75 73 69 6e 67 20 74 68 65 20 63  c(), using the c
12bb0 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65  onnection handle
12bc0 20 73 74 6f 72 65 64 20 69 6e 20 56 54 61 62 6c   stored in VTabl
12bd0 65 2e 64 62 20 61 73 0a 2a 2a 20 74 68 65 20 66  e.db as.** the f
12be0 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a 2a  irst argument..*
12bf0 2f 0a 73 74 72 75 63 74 20 56 54 61 62 6c 65 20  /.struct VTable 
12c00 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
12c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
12c20 20 44 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   Database connec
12c30 74 69 6f 6e 20 61 73 73 6f 63 69 61 74 65 64 20  tion associated 
12c40 77 69 74 68 20 74 68 69 73 20 74 61 62 6c 65 20  with this table 
12c50 2a 2f 0a 20 20 4d 6f 64 75 6c 65 20 2a 70 4d 6f  */.  Module *pMo
12c60 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  d;             /
12c70 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 6d 6f 64  * Pointer to mod
12c80 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ule implementati
12c90 6f 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  on */.  sqlite3_
12ca0 76 74 61 62 20 2a 70 56 74 61 62 3b 20 20 20 20  vtab *pVtab;    
12cb0 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
12cc0 76 74 61 62 20 69 6e 73 74 61 6e 63 65 20 2a 2f  vtab instance */
12cd0 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20  .  int nRef;    
12ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
12cf0 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65  Number of pointe
12d00 72 73 20 74 6f 20 74 68 69 73 20 73 74 72 75 63  rs to this struc
12d10 74 75 72 65 20 2a 2f 0a 20 20 75 38 20 62 43 6f  ture */.  u8 bCo
12d20 6e 73 74 72 61 69 6e 74 3b 20 20 20 20 20 20 20  nstraint;       
12d30 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63      /* True if c
12d40 6f 6e 73 74 72 61 69 6e 74 73 20 61 72 65 20 73  onstraints are s
12d50 75 70 70 6f 72 74 65 64 20 2a 2f 0a 20 20 69 6e  upported */.  in
12d60 74 20 69 53 61 76 65 70 6f 69 6e 74 3b 20 20 20  t iSavepoint;   
12d70 20 20 20 20 20 20 20 20 2f 2a 20 44 65 70 74 68          /* Depth
12d80 20 6f 66 20 74 68 65 20 53 41 56 45 50 4f 49 4e   of the SAVEPOIN
12d90 54 20 73 74 61 63 6b 20 2a 2f 0a 20 20 56 54 61  T stack */.  VTa
12da0 62 6c 65 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  ble *pNext;     
12db0 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 69         /* Next i
12dc0 6e 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28 73  n linked list (s
12dd0 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 7d 3b 0a  ee above) */.};.
12de0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 73 63 68 65 6d  ./*.** The schem
12df0 61 20 66 6f 72 20 65 61 63 68 20 53 51 4c 20 74  a for each SQL t
12e00 61 62 6c 65 20 61 6e 64 20 76 69 65 77 20 69 73  able and view is
12e10 20 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20   represented in 
12e20 6d 65 6d 6f 72 79 0a 2a 2a 20 62 79 20 61 6e 20  memory.** by an 
12e30 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
12e40 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
12e50 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54  ure..*/.struct T
12e60 61 62 6c 65 20 7b 0a 20 20 63 68 61 72 20 2a 7a  able {.  char *z
12e70 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  Name;         /*
12e80 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   Name of the tab
12e90 6c 65 20 6f 72 20 76 69 65 77 20 2a 2f 0a 20 20  le or view */.  
12ea0 43 6f 6c 75 6d 6e 20 2a 61 43 6f 6c 3b 20 20 20  Column *aCol;   
12eb0 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74       /* Informat
12ec0 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20 63  ion about each c
12ed0 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78  olumn */.  Index
12ee0 20 2a 70 49 6e 64 65 78 3b 20 20 20 20 20 20 20   *pIndex;       
12ef0 2f 2a 20 4c 69 73 74 20 6f 66 20 53 51 4c 20 69  /* List of SQL i
12f00 6e 64 65 78 65 73 20 6f 6e 20 74 68 69 73 20 74  ndexes on this t
12f10 61 62 6c 65 2e 20 2a 2f 0a 20 20 53 65 6c 65 63  able. */.  Selec
12f20 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20  t *pSelect;     
12f30 2f 2a 20 4e 55 4c 4c 20 66 6f 72 20 74 61 62 6c  /* NULL for tabl
12f40 65 73 2e 20 20 50 6f 69 6e 74 73 20 74 6f 20 64  es.  Points to d
12f50 65 66 69 6e 69 74 69 6f 6e 20 69 66 20 61 20 76  efinition if a v
12f60 69 65 77 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a  iew. */.  FKey *
12f70 70 46 4b 65 79 3b 20 20 20 20 20 20 20 20 20 2f  pFKey;         /
12f80 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66  * Linked list of
12f90 20 61 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79   all foreign key
12fa0 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65 20  s in this table 
12fb0 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41  */.  char *zColA
12fc0 66 66 3b 20 20 20 20 20 20 20 2f 2a 20 53 74 72  ff;       /* Str
12fd0 69 6e 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65  ing defining the
12fe0 20 61 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63   affinity of eac
12ff0 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 45 78  h column */.  Ex
13000 70 72 4c 69 73 74 20 2a 70 43 68 65 63 6b 3b 20  prList *pCheck; 
13010 20 20 20 2f 2a 20 41 6c 6c 20 43 48 45 43 4b 20     /* All CHECK 
13020 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20  constraints */. 
13030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13040 20 20 20 20 20 20 2f 2a 20 20 20 2e 2e 2e 20 61        /*   ... a
13050 6c 73 6f 20 75 73 65 64 20 61 73 20 63 6f 6c 75  lso used as colu
13060 6d 6e 20 6e 61 6d 65 20 6c 69 73 74 20 69 6e 20  mn name list in 
13070 61 20 56 49 45 57 20 2a 2f 0a 20 20 69 6e 74 20  a VIEW */.  int 
13080 74 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20  tnum;           
13090 20 2f 2a 20 52 6f 6f 74 20 42 54 72 65 65 20 70   /* Root BTree p
130a0 61 67 65 20 66 6f 72 20 74 68 69 73 20 74 61 62  age for this tab
130b0 6c 65 20 2a 2f 0a 20 20 75 33 32 20 6e 54 61 62  le */.  u32 nTab
130c0 52 65 66 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Ref;         /* 
130d0 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65  Number of pointe
130e0 72 73 20 74 6f 20 74 68 69 73 20 54 61 62 6c 65  rs to this Table
130f0 20 2a 2f 0a 20 20 75 33 32 20 74 61 62 46 6c 61   */.  u32 tabFla
13100 67 73 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  gs;        /* Ma
13110 73 6b 20 6f 66 20 54 46 5f 2a 20 76 61 6c 75 65  sk of TF_* value
13120 73 20 2a 2f 0a 20 20 69 31 36 20 69 50 4b 65 79  s */.  i16 iPKey
13130 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49  ;           /* I
13140 66 20 6e 6f 74 20 6e 65 67 61 74 69 76 65 2c 20  f not negative, 
13150 75 73 65 20 61 43 6f 6c 5b 69 50 4b 65 79 5d 20  use aCol[iPKey] 
13160 61 73 20 74 68 65 20 72 6f 77 69 64 20 2a 2f 0a  as the rowid */.
13170 20 20 69 31 36 20 6e 43 6f 6c 3b 20 20 20 20 20    i16 nCol;     
13180 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
13190 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
131a0 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4c  his table */.  L
131b0 6f 67 45 73 74 20 6e 52 6f 77 4c 6f 67 45 73 74  ogEst nRowLogEst
131c0 3b 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64  ;   /* Estimated
131d0 20 72 6f 77 73 20 69 6e 20 74 61 62 6c 65 20 2d   rows in table -
131e0 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61   from sqlite_sta
131f0 74 31 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f  t1 table */.  Lo
13200 67 45 73 74 20 73 7a 54 61 62 52 6f 77 3b 20 20  gEst szTabRow;  
13210 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20     /* Estimated 
13220 73 69 7a 65 20 6f 66 20 65 61 63 68 20 74 61 62  size of each tab
13230 6c 65 20 72 6f 77 20 69 6e 20 62 79 74 65 73 20  le row in bytes 
13240 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
13250 5f 45 4e 41 42 4c 45 5f 43 4f 53 54 4d 55 4c 54  _ENABLE_COSTMULT
13260 0a 20 20 4c 6f 67 45 73 74 20 63 6f 73 74 4d 75  .  LogEst costMu
13270 6c 74 3b 20 20 20 20 20 2f 2a 20 43 6f 73 74 20  lt;     /* Cost 
13280 6d 75 6c 74 69 70 6c 69 65 72 20 66 6f 72 20 75  multiplier for u
13290 73 69 6e 67 20 74 68 69 73 20 74 61 62 6c 65 20  sing this table 
132a0 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 75 38 20 6b  */.#endif.  u8 k
132b0 65 79 43 6f 6e 66 3b 20 20 20 20 20 20 20 20 20  eyConf;         
132c0 20 2f 2a 20 57 68 61 74 20 74 6f 20 64 6f 20 69   /* What to do i
132d0 6e 20 63 61 73 65 20 6f 66 20 75 6e 69 71 75 65  n case of unique
132e0 6e 65 73 73 20 63 6f 6e 66 6c 69 63 74 20 6f 6e  ness conflict on
132f0 20 69 50 4b 65 79 20 2a 2f 0a 23 69 66 6e 64 65   iPKey */.#ifnde
13300 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c  f SQLITE_OMIT_AL
13310 54 45 52 54 41 42 4c 45 0a 20 20 69 6e 74 20 61  TERTABLE.  int a
13320 64 64 43 6f 6c 4f 66 66 73 65 74 3b 20 20 20 20  ddColOffset;    
13330 2f 2a 20 4f 66 66 73 65 74 20 69 6e 20 43 52 45  /* Offset in CRE
13340 41 54 45 20 54 41 42 4c 45 20 73 74 6d 74 20 74  ATE TABLE stmt t
13350 6f 20 61 64 64 20 61 20 6e 65 77 20 63 6f 6c 75  o add a new colu
13360 6d 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66  mn */.#endif.#if
13370 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
13380 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
13390 69 6e 74 20 6e 4d 6f 64 75 6c 65 41 72 67 3b 20  int nModuleArg; 
133a0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
133b0 66 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 74  f arguments to t
133c0 68 65 20 6d 6f 64 75 6c 65 20 2a 2f 0a 20 20 63  he module */.  c
133d0 68 61 72 20 2a 2a 61 7a 4d 6f 64 75 6c 65 41 72  har **azModuleAr
133e0 67 3b 20 20 2f 2a 20 30 3a 20 6d 6f 64 75 6c 65  g;  /* 0: module
133f0 20 31 3a 20 73 63 68 65 6d 61 20 32 3a 20 76 74   1: schema 2: vt
13400 61 62 20 6e 61 6d 65 20 33 2e 2e 2e 3a 20 61 72  ab name 3...: ar
13410 67 73 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a  gs */.  VTable *
13420 70 56 54 61 62 6c 65 3b 20 20 20 20 20 2f 2a 20  pVTable;     /* 
13430 4c 69 73 74 20 6f 66 20 56 54 61 62 6c 65 20 6f  List of VTable o
13440 62 6a 65 63 74 73 2e 20 2a 2f 0a 23 65 6e 64 69  bjects. */.#endi
13450 66 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54 72  f.  Trigger *pTr
13460 69 67 67 65 72 3b 20 20 20 2f 2a 20 4c 69 73 74  igger;   /* List
13470 20 6f 66 20 74 72 69 67 67 65 72 73 20 73 74 6f   of triggers sto
13480 72 65 64 20 69 6e 20 70 53 63 68 65 6d 61 20 2a  red in pSchema *
13490 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68  /.  Schema *pSch
134a0 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63 68 65  ema;     /* Sche
134b0 6d 61 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  ma that contains
134c0 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
134d0 20 54 61 62 6c 65 20 2a 70 4e 65 78 74 5a 6f 6d   Table *pNextZom
134e0 62 69 65 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 6e  bie;  /* Next on
134f0 20 74 68 65 20 50 61 72 73 65 2e 70 5a 6f 6d 62   the Parse.pZomb
13500 69 65 54 61 62 20 6c 69 73 74 20 2a 2f 0a 7d 3b  ieTab list */.};
13510 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  ../*.** Allowed 
13520 76 61 6c 75 65 73 20 66 6f 72 20 54 61 62 6c 65  values for Table
13530 2e 74 61 62 46 6c 61 67 73 2e 0a 2a 2a 0a 2a 2a  .tabFlags..**.**
13540 20 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20 61 70   TF_OOOHidden ap
13550 70 6c 69 65 73 20 74 6f 20 74 61 62 6c 65 73 20  plies to tables 
13560 6f 72 20 76 69 65 77 20 74 68 61 74 20 68 61 76  or view that hav
13570 65 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73  e hidden columns
13580 20 74 68 61 74 20 61 72 65 0a 2a 2a 20 66 6f 6c   that are.** fol
13590 6c 6f 77 65 64 20 62 79 20 6e 6f 6e 2d 68 69 64  lowed by non-hid
135a0 64 65 6e 20 63 6f 6c 75 6d 6e 73 2e 20 20 45 78  den columns.  Ex
135b0 61 6d 70 6c 65 3a 20 20 22 43 52 45 41 54 45 20  ample:  "CREATE 
135c0 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 78 20  VIRTUAL TABLE x 
135d0 55 53 49 4e 47 0a 2a 2a 20 76 74 61 62 31 28 61  USING.** vtab1(a
135e0 20 48 49 44 44 45 4e 2c 20 62 29 3b 22 2e 20 20   HIDDEN, b);".  
135f0 53 69 6e 63 65 20 22 62 22 20 69 73 20 61 20 6e  Since "b" is a n
13600 6f 6e 2d 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e  on-hidden column
13610 20 62 75 74 20 22 61 22 20 69 73 20 68 69 64 64   but "a" is hidd
13620 65 6e 2c 0a 2a 2a 20 74 68 65 20 54 46 5f 4f 4f  en,.** the TF_OO
13630 4f 48 69 64 64 65 6e 20 61 74 74 72 69 62 75 74  OHidden attribut
13640 65 20 77 6f 75 6c 64 20 61 70 70 6c 79 20 69 6e  e would apply in
13650 20 74 68 69 73 20 63 61 73 65 2e 20 20 53 75 63   this case.  Suc
13660 68 20 74 61 62 6c 65 73 20 72 65 71 75 69 72 65  h tables require
13670 0a 2a 2a 20 73 70 65 63 69 61 6c 20 68 61 6e 64  .** special hand
13680 6c 69 6e 67 20 64 75 72 69 6e 67 20 49 4e 53 45  ling during INSE
13690 52 54 20 70 72 6f 63 65 73 73 69 6e 67 2e 0a 2a  RT processing..*
136a0 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 52 65 61  /.#define TF_Rea
136b0 64 6f 6e 6c 79 20 20 20 20 20 20 20 20 30 78 30  donly        0x0
136c0 30 30 31 20 20 20 20 2f 2a 20 52 65 61 64 2d 6f  001    /* Read-o
136d0 6e 6c 79 20 73 79 73 74 65 6d 20 74 61 62 6c 65  nly system table
136e0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 45   */.#define TF_E
136f0 70 68 65 6d 65 72 61 6c 20 20 20 20 20 20 20 30  phemeral       0
13700 78 30 30 30 32 20 20 20 20 2f 2a 20 41 6e 20 65  x0002    /* An e
13710 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 2a  phemeral table *
13720 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73  /.#define TF_Has
13730 50 72 69 6d 61 72 79 4b 65 79 20 20 20 30 78 30  PrimaryKey   0x0
13740 30 30 34 20 20 20 20 2f 2a 20 54 61 62 6c 65 20  004    /* Table 
13750 68 61 73 20 61 20 70 72 69 6d 61 72 79 20 6b 65  has a primary ke
13760 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  y */.#define TF_
13770 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 20 20  Autoincrement   
13780 30 78 30 30 30 38 20 20 20 20 2f 2a 20 49 6e 74  0x0008    /* Int
13790 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79  eger primary key
137a0 20 69 73 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e   is autoincremen
137b0 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  t */.#define TF_
137c0 48 61 73 53 74 61 74 31 20 20 20 20 20 20 20 20  HasStat1        
137d0 30 78 30 30 31 30 20 20 20 20 2f 2a 20 6e 52 6f  0x0010    /* nRo
137e0 77 4c 6f 67 45 73 74 20 73 65 74 20 66 72 6f 6d  wLogEst set from
137f0 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 2a 2f   sqlite_stat1 */
13800 0a 23 64 65 66 69 6e 65 20 54 46 5f 57 69 74 68  .#define TF_With
13810 6f 75 74 52 6f 77 69 64 20 20 20 20 30 78 30 30  outRowid    0x00
13820 32 30 20 20 20 20 2f 2a 20 4e 6f 20 72 6f 77 69  20    /* No rowi
13830 64 2e 20 20 50 52 49 4d 41 52 59 20 4b 45 59 20  d.  PRIMARY KEY 
13840 69 73 20 74 68 65 20 6b 65 79 20 2a 2f 0a 23 64  is the key */.#d
13850 65 66 69 6e 65 20 54 46 5f 4e 6f 56 69 73 69 62  efine TF_NoVisib
13860 6c 65 52 6f 77 69 64 20 20 30 78 30 30 34 30 20  leRowid  0x0040 
13870 20 20 20 2f 2a 20 4e 6f 20 75 73 65 72 2d 76 69     /* No user-vi
13880 73 69 62 6c 65 20 22 72 6f 77 69 64 22 20 63 6f  sible "rowid" co
13890 6c 75 6d 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  lumn */.#define 
138a0 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20 20 20 20  TF_OOOHidden    
138b0 20 20 20 30 78 30 30 38 30 20 20 20 20 2f 2a 20     0x0080    /* 
138c0 4f 75 74 2d 6f 66 2d 4f 72 64 65 72 20 68 69 64  Out-of-Order hid
138d0 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 23  den columns */.#
138e0 64 65 66 69 6e 65 20 54 46 5f 53 74 61 74 73 55  define TF_StatsU
138f0 73 65 64 20 20 20 20 20 20 20 30 78 30 31 30 30  sed       0x0100
13900 20 20 20 20 2f 2a 20 51 75 65 72 79 20 70 6c 61      /* Query pla
13910 6e 6e 65 72 20 64 65 63 69 73 69 6f 6e 73 20 61  nner decisions a
13920 66 66 65 63 74 65 64 20 62 79 0a 20 20 20 20 20  ffected by.     
13930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13950 2a 2a 20 49 6e 64 65 78 2e 61 69 52 6f 77 4c 6f  ** Index.aiRowLo
13960 67 45 73 74 5b 5d 20 76 61 6c 75 65 73 20 2a 2f  gEst[] values */
13970 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73 4e  .#define TF_HasN
13980 6f 74 4e 75 6c 6c 20 20 20 20 20 20 30 78 30 32  otNull      0x02
13990 30 30 20 20 20 20 2f 2a 20 43 6f 6e 74 61 69 6e  00    /* Contain
139a0 73 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74  s NOT NULL const
139b0 72 61 69 6e 74 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  raints */../*.**
139c0 20 54 65 73 74 20 74 6f 20 73 65 65 20 77 68 65   Test to see whe
139d0 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 20 74 61  ther or not a ta
139e0 62 6c 65 20 69 73 20 61 20 76 69 72 74 75 61 6c  ble is a virtual
139f0 20 74 61 62 6c 65 2e 20 20 54 68 69 73 20 69 73   table.  This is
13a00 0a 2a 2a 20 64 6f 6e 65 20 61 73 20 61 20 6d 61  .** done as a ma
13a10 63 72 6f 20 73 6f 20 74 68 61 74 20 69 74 20 77  cro so that it w
13a20 69 6c 6c 20 62 65 20 6f 70 74 69 6d 69 7a 65 64  ill be optimized
13a30 20 6f 75 74 20 77 68 65 6e 20 76 69 72 74 75 61   out when virtua
13a40 6c 0a 2a 2a 20 74 61 62 6c 65 20 73 75 70 70 6f  l.** table suppo
13a50 72 74 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72  rt is omitted fr
13a60 6f 6d 20 74 68 65 20 62 75 69 6c 64 2e 0a 2a 2f  om the build..*/
13a70 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
13a80 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
13a90 45 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56 69  E.#  define IsVi
13aa0 72 74 75 61 6c 28 58 29 20 20 20 20 20 20 28 28  rtual(X)      ((
13ab0 58 29 2d 3e 6e 4d 6f 64 75 6c 65 41 72 67 29 0a  X)->nModuleArg).
13ac0 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20  #else.#  define 
13ad0 49 73 56 69 72 74 75 61 6c 28 58 29 20 20 20 20  IsVirtual(X)    
13ae0 20 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a    0.#endif../*.*
13af0 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74 65  * Macros to dete
13b00 72 6d 69 6e 65 20 69 66 20 61 20 63 6f 6c 75 6d  rmine if a colum
13b10 6e 20 69 73 20 68 69 64 64 65 6e 2e 20 20 49 73  n is hidden.  Is
13b20 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f  OrdinaryHiddenCo
13b30 6c 75 6d 6e 28 29 0a 2a 2a 20 6f 6e 6c 79 20 77  lumn().** only w
13b40 6f 72 6b 73 20 66 6f 72 20 6e 6f 6e 2d 76 69 72  orks for non-vir
13b50 74 75 61 6c 20 74 61 62 6c 65 73 20 28 6f 72 64  tual tables (ord
13b60 69 6e 61 72 79 20 74 61 62 6c 65 73 20 61 6e 64  inary tables and
13b70 20 76 69 65 77 73 29 20 61 6e 64 20 69 73 0a 2a   views) and is.*
13b80 2a 20 61 6c 77 61 79 73 20 66 61 6c 73 65 20 75  * always false u
13b90 6e 6c 65 73 73 20 53 51 4c 49 54 45 5f 45 4e 41  nless SQLITE_ENA
13ba0 42 4c 45 5f 48 49 44 44 45 4e 5f 43 4f 4c 55 4d  BLE_HIDDEN_COLUM
13bb0 4e 53 20 69 73 20 64 65 66 69 6e 65 64 2e 20 20  NS is defined.  
13bc0 54 68 65 0a 2a 2a 20 49 73 48 69 64 64 65 6e 43  The.** IsHiddenC
13bd0 6f 6c 75 6d 6e 28 29 20 6d 61 63 72 6f 20 69 73  olumn() macro is
13be0 20 67 65 6e 65 72 61 6c 20 70 75 72 70 6f 73 65   general purpose
13bf0 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
13c00 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48  (SQLITE_ENABLE_H
13c10 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53 29 0a 23  IDDEN_COLUMNS).#
13c20 20 20 64 65 66 69 6e 65 20 49 73 48 69 64 64 65    define IsHidde
13c30 6e 43 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20 20  nColumn(X)      
13c40 20 20 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61     (((X)->colFla
13c50 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44  gs & COLFLAG_HID
13c60 44 45 4e 29 21 3d 30 29 0a 23 20 20 64 65 66 69  DEN)!=0).#  defi
13c70 6e 65 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64  ne IsOrdinaryHid
13c80 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 28 28 28  denColumn(X) (((
13c90 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43  X)->colFlags & C
13ca0 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d  OLFLAG_HIDDEN)!=
13cb0 30 29 0a 23 65 6c 69 66 20 21 64 65 66 69 6e 65  0).#elif !define
13cc0 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  d(SQLITE_OMIT_VI
13cd0 52 54 55 41 4c 54 41 42 4c 45 29 0a 23 20 20 64  RTUALTABLE).#  d
13ce0 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f  efine IsHiddenCo
13cf0 6c 75 6d 6e 28 58 29 20 20 20 20 20 20 20 20 20  lumn(X)         
13d00 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20  (((X)->colFlags 
13d10 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e  & COLFLAG_HIDDEN
13d20 29 21 3d 30 29 0a 23 20 20 64 65 66 69 6e 65 20  )!=0).#  define 
13d30 49 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e  IsOrdinaryHidden
13d40 43 6f 6c 75 6d 6e 28 58 29 20 30 0a 23 65 6c 73  Column(X) 0.#els
13d50 65 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48 69  e.#  define IsHi
13d60 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 20 20  ddenColumn(X)   
13d70 20 20 20 20 20 20 30 0a 23 20 20 64 65 66 69 6e        0.#  defin
13d80 65 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64 64  e IsOrdinaryHidd
13d90 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 30 0a 23 65  enColumn(X) 0.#e
13da0 6e 64 69 66 0a 0a 0a 2f 2a 20 44 6f 65 73 20 74  ndif.../* Does t
13db0 68 65 20 74 61 62 6c 65 20 68 61 76 65 20 61 20  he table have a 
13dc0 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65  rowid */.#define
13dd0 20 48 61 73 52 6f 77 69 64 28 58 29 20 20 20 20   HasRowid(X)    
13de0 20 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73   (((X)->tabFlags
13df0 20 26 20 54 46 5f 57 69 74 68 6f 75 74 52 6f 77   & TF_WithoutRow
13e00 69 64 29 3d 3d 30 29 0a 23 64 65 66 69 6e 65 20  id)==0).#define 
13e10 56 69 73 69 62 6c 65 52 6f 77 69 64 28 58 29 20  VisibleRowid(X) 
13e20 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20  (((X)->tabFlags 
13e30 26 20 54 46 5f 4e 6f 56 69 73 69 62 6c 65 52 6f  & TF_NoVisibleRo
13e40 77 69 64 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20  wid)==0)../*.** 
13e50 45 61 63 68 20 66 6f 72 65 69 67 6e 20 6b 65 79  Each foreign key
13e60 20 63 6f 6e 73 74 72 61 69 6e 74 20 69 73 20 61   constraint is a
13e70 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
13e80 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
13e90 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 66  cture..**.** A f
13ea0 6f 72 65 69 67 6e 20 6b 65 79 20 69 73 20 61 73  oreign key is as
13eb0 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 77  sociated with tw
13ec0 6f 20 74 61 62 6c 65 73 2e 20 20 54 68 65 20 22  o tables.  The "
13ed0 66 72 6f 6d 22 20 74 61 62 6c 65 20 69 73 0a 2a  from" table is.*
13ee0 2a 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  * the table that
13ef0 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 52 45   contains the RE
13f00 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20  FERENCES clause 
13f10 74 68 61 74 20 63 72 65 61 74 65 73 20 74 68 65  that creates the
13f20 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 2e   foreign.** key.
13f30 20 20 54 68 65 20 22 74 6f 22 20 74 61 62 6c 65    The "to" table
13f40 20 69 73 20 74 68 65 20 74 61 62 6c 65 20 74 68   is the table th
13f50 61 74 20 69 73 20 6e 61 6d 65 64 20 69 6e 20 74  at is named in t
13f60 68 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c  he REFERENCES cl
13f70 61 75 73 65 2e 0a 2a 2a 20 43 6f 6e 73 69 64 65  ause..** Conside
13f80 72 20 74 68 69 73 20 65 78 61 6d 70 6c 65 3a 0a  r this example:.
13f90 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45  **.**     CREATE
13fa0 20 54 41 42 4c 45 20 65 78 31 28 0a 2a 2a 20 20   TABLE ex1(.**  
13fb0 20 20 20 20 20 61 20 49 4e 54 45 47 45 52 20 50       a INTEGER P
13fc0 52 49 4d 41 52 59 20 4b 45 59 2c 0a 2a 2a 20 20  RIMARY KEY,.**  
13fd0 20 20 20 20 20 62 20 49 4e 54 45 47 45 52 20 43       b INTEGER C
13fe0 4f 4e 53 54 52 41 49 4e 54 20 66 6b 31 20 52 45  ONSTRAINT fk1 RE
13ff0 46 45 52 45 4e 43 45 53 20 65 78 32 28 78 29 0a  FERENCES ex2(x).
14000 2a 2a 20 20 20 20 20 29 3b 0a 2a 2a 0a 2a 2a 20  **     );.**.** 
14010 46 6f 72 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  For foreign key 
14020 22 66 6b 31 22 2c 20 74 68 65 20 66 72 6f 6d 2d  "fk1", the from-
14030 74 61 62 6c 65 20 69 73 20 22 65 78 31 22 20 61  table is "ex1" a
14040 6e 64 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20  nd the to-table 
14050 69 73 20 22 65 78 32 22 2e 0a 2a 2a 20 45 71 75  is "ex2"..** Equ
14060 69 76 61 6c 65 6e 74 20 6e 61 6d 65 73 3a 0a 2a  ivalent names:.*
14070 2a 0a 2a 2a 20 20 20 20 20 66 72 6f 6d 2d 74 61  *.**     from-ta
14080 62 6c 65 20 3d 3d 20 63 68 69 6c 64 2d 74 61 62  ble == child-tab
14090 6c 65 0a 2a 2a 20 20 20 20 20 20 20 74 6f 2d 74  le.**       to-t
140a0 61 62 6c 65 20 3d 3d 20 70 61 72 65 6e 74 2d 74  able == parent-t
140b0 61 62 6c 65 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20  able.**.** Each 
140c0 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73  REFERENCES claus
140d0 65 20 67 65 6e 65 72 61 74 65 73 20 61 6e 20 69  e generates an i
140e0 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
140f0 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
14100 72 65 0a 2a 2a 20 77 68 69 63 68 20 69 73 20 61  re.** which is a
14110 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20 66  ttached to the f
14120 72 6f 6d 2d 74 61 62 6c 65 2e 20 20 54 68 65 20  rom-table.  The 
14130 74 6f 2d 74 61 62 6c 65 20 6e 65 65 64 20 6e 6f  to-table need no
14140 74 20 65 78 69 73 74 20 77 68 65 6e 0a 2a 2a 20  t exist when.** 
14150 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69  the from-table i
14160 73 20 63 72 65 61 74 65 64 2e 20 20 54 68 65 20  s created.  The 
14170 65 78 69 73 74 65 6e 63 65 20 6f 66 20 74 68 65  existence of the
14180 20 74 6f 2d 74 61 62 6c 65 20 69 73 20 6e 6f 74   to-table is not
14190 20 63 68 65 63 6b 65 64 2e 0a 2a 2a 0a 2a 2a 20   checked..**.** 
141a0 54 68 65 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20  The list of all 
141b0 70 61 72 65 6e 74 73 20 66 6f 72 20 63 68 69 6c  parents for chil
141c0 64 20 54 61 62 6c 65 20 58 20 69 73 20 68 65 6c  d Table X is hel
141d0 64 20 61 74 20 58 2e 70 46 4b 65 79 2e 0a 2a 2a  d at X.pFKey..**
141e0 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20 61 6c  .** A list of al
141f0 6c 20 63 68 69 6c 64 72 65 6e 20 66 6f 72 20 61  l children for a
14200 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 5a 20 28   table named Z (
14210 77 68 69 63 68 20 6d 69 67 68 74 20 6e 6f 74 20  which might not 
14220 65 76 65 6e 20 65 78 69 73 74 29 0a 2a 2a 20 69  even exist).** i
14230 73 20 68 65 6c 64 20 69 6e 20 53 63 68 65 6d 61  s held in Schema
14240 2e 66 6b 65 79 48 61 73 68 20 77 69 74 68 20 61  .fkeyHash with a
14250 20 68 61 73 68 20 6b 65 79 20 6f 66 20 5a 2e 0a   hash key of Z..
14260 2a 2f 0a 73 74 72 75 63 74 20 46 4b 65 79 20 7b  */.struct FKey {
14270 0a 20 20 54 61 62 6c 65 20 2a 70 46 72 6f 6d 3b  .  Table *pFrom;
14280 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f       /* Table co
14290 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 52 45 46  ntaining the REF
142a0 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 28  ERENCES clause (
142b0 61 6b 61 3a 20 43 68 69 6c 64 29 20 2a 2f 0a 20  aka: Child) */. 
142c0 20 46 4b 65 79 20 2a 70 4e 65 78 74 46 72 6f 6d   FKey *pNextFrom
142d0 3b 20 20 2f 2a 20 4e 65 78 74 20 46 4b 65 79 20  ;  /* Next FKey 
142e0 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 69 6e  with the same in
142f0 20 70 46 72 6f 6d 2e 20 4e 65 78 74 20 70 61 72   pFrom. Next par
14300 65 6e 74 20 6f 66 20 70 46 72 6f 6d 20 2a 2f 0a  ent of pFrom */.
14310 20 20 63 68 61 72 20 2a 7a 54 6f 3b 20 20 20 20    char *zTo;    
14320 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
14330 61 62 6c 65 20 74 68 61 74 20 74 68 65 20 6b 65  able that the ke
14340 79 20 70 6f 69 6e 74 73 20 74 6f 20 28 61 6b 61  y points to (aka
14350 3a 20 50 61 72 65 6e 74 29 20 2a 2f 0a 20 20 46  : Parent) */.  F
14360 4b 65 79 20 2a 70 4e 65 78 74 54 6f 3b 20 20 20  Key *pNextTo;   
14370 20 2f 2a 20 4e 65 78 74 20 77 69 74 68 20 74 68   /* Next with th
14380 65 20 73 61 6d 65 20 7a 54 6f 2e 20 4e 65 78 74  e same zTo. Next
14390 20 63 68 69 6c 64 20 6f 66 20 7a 54 6f 2e 20 2a   child of zTo. *
143a0 2f 0a 20 20 46 4b 65 79 20 2a 70 50 72 65 76 54  /.  FKey *pPrevT
143b0 6f 3b 20 20 20 20 2f 2a 20 50 72 65 76 69 6f 75  o;    /* Previou
143c0 73 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  s with the same 
143d0 7a 54 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f  zTo */.  int nCo
143e0 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  l;         /* Nu
143f0 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
14400 69 6e 20 74 68 69 73 20 6b 65 79 20 2a 2f 0a 20  in this key */. 
14410 20 2f 2a 20 45 56 3a 20 52 2d 33 30 33 32 33 2d   /* EV: R-30323-
14420 32 31 39 31 37 20 2a 2f 0a 20 20 75 38 20 69 73  21917 */.  u8 is
14430 44 65 66 65 72 72 65 64 3b 20 20 20 20 20 20 20  Deferred;       
14440 2f 2a 20 54 72 75 65 20 69 66 20 63 6f 6e 73 74  /* True if const
14450 72 61 69 6e 74 20 63 68 65 63 6b 69 6e 67 20 69  raint checking i
14460 73 20 64 65 66 65 72 72 65 64 20 74 69 6c 6c 20  s deferred till 
14470 43 4f 4d 4d 49 54 20 2a 2f 0a 20 20 75 38 20 61  COMMIT */.  u8 a
14480 41 63 74 69 6f 6e 5b 32 5d 3b 20 20 20 20 20 20  Action[2];      
14490 20 20 2f 2a 20 4f 4e 20 44 45 4c 45 54 45 20 61    /* ON DELETE a
144a0 6e 64 20 4f 4e 20 55 50 44 41 54 45 20 61 63 74  nd ON UPDATE act
144b0 69 6f 6e 73 2c 20 72 65 73 70 65 63 74 69 76 65  ions, respective
144c0 6c 79 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20  ly */.  Trigger 
144d0 2a 61 70 54 72 69 67 67 65 72 5b 32 5d 3b 2f 2a  *apTrigger[2];/*
144e0 20 54 72 69 67 67 65 72 73 20 66 6f 72 20 61 41   Triggers for aA
144f0 63 74 69 6f 6e 5b 5d 20 61 63 74 69 6f 6e 73 20  ction[] actions 
14500 2a 2f 0a 20 20 73 74 72 75 63 74 20 73 43 6f 6c  */.  struct sCol
14510 4d 61 70 20 7b 20 20 20 20 20 20 2f 2a 20 4d 61  Map {      /* Ma
14520 70 70 69 6e 67 20 6f 66 20 63 6f 6c 75 6d 6e 73  pping of columns
14530 20 69 6e 20 70 46 72 6f 6d 20 74 6f 20 63 6f 6c   in pFrom to col
14540 75 6d 6e 73 20 69 6e 20 7a 54 6f 20 2a 2f 0a 20  umns in zTo */. 
14550 20 20 20 69 6e 74 20 69 46 72 6f 6d 3b 20 20 20     int iFrom;   
14560 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
14570 78 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 70  x of column in p
14580 46 72 6f 6d 20 2a 2f 0a 20 20 20 20 63 68 61 72  From */.    char
14590 20 2a 7a 43 6f 6c 3b 20 20 20 20 20 20 20 20 20   *zCol;         
145a0 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 63 6f 6c    /* Name of col
145b0 75 6d 6e 20 69 6e 20 7a 54 6f 2e 20 20 49 66 20  umn in zTo.  If 
145c0 4e 55 4c 4c 20 75 73 65 20 50 52 49 4d 41 52 59  NULL use PRIMARY
145d0 20 4b 45 59 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c   KEY */.  } aCol
145e0 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20  [1];            
145f0 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72  /* One entry for
14600 20 65 61 63 68 20 6f 66 20 6e 43 6f 6c 20 63 6f   each of nCol co
14610 6c 75 6d 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  lumns */.};../*.
14620 2a 2a 20 53 51 4c 69 74 65 20 73 75 70 70 6f 72  ** SQLite suppor
14630 74 73 20 6d 61 6e 79 20 64 69 66 66 65 72 65 6e  ts many differen
14640 74 20 77 61 79 73 20 74 6f 20 72 65 73 6f 6c 76  t ways to resolv
14650 65 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a  e a constraint.*
14660 2a 20 65 72 72 6f 72 2e 20 20 52 4f 4c 4c 42 41  * error.  ROLLBA
14670 43 4b 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65  CK processing me
14680 61 6e 73 20 74 68 61 74 20 61 20 63 6f 6e 73 74  ans that a const
14690 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a  raint violation.
146a0 2a 2a 20 63 61 75 73 65 73 20 74 68 65 20 6f 70  ** causes the op
146b0 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65  eration in proce
146c0 73 73 20 74 6f 20 66 61 69 6c 20 61 6e 64 20 66  ss to fail and f
146d0 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  or the current t
146e0 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f  ransaction.** to
146f0 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e   be rolled back.
14700 20 20 41 42 4f 52 54 20 70 72 6f 63 65 73 73 69    ABORT processi
14710 6e 67 20 6d 65 61 6e 73 20 74 68 65 20 6f 70 65  ng means the ope
14720 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73  ration in proces
14730 73 0a 2a 2a 20 66 61 69 6c 73 20 61 6e 64 20 61  s.** fails and a
14740 6e 79 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73  ny prior changes
14750 20 66 72 6f 6d 20 74 68 61 74 20 6f 6e 65 20 6f   from that one o
14760 70 65 72 61 74 69 6f 6e 20 61 72 65 20 62 61 63  peration are bac
14770 6b 65 64 20 6f 75 74 2c 0a 2a 2a 20 62 75 74 20  ked out,.** but 
14780 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
14790 69 73 20 6e 6f 74 20 72 6f 6c 6c 65 64 20 62 61  is not rolled ba
147a0 63 6b 2e 20 20 46 41 49 4c 20 70 72 6f 63 65 73  ck.  FAIL proces
147b0 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 61 74 0a  sing means that.
147c0 2a 2a 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  ** the operation
147d0 20 69 6e 20 70 72 6f 67 72 65 73 73 20 73 74 6f   in progress sto
147e0 70 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20 61  ps and returns a
147f0 6e 20 65 72 72 6f 72 20 63 6f 64 65 2e 20 20 42  n error code.  B
14800 75 74 20 70 72 69 6f 72 0a 2a 2a 20 63 68 61 6e  ut prior.** chan
14810 67 65 73 20 64 75 65 20 74 6f 20 74 68 65 20 73  ges due to the s
14820 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72  ame operation ar
14830 65 20 6e 6f 74 20 62 61 63 6b 65 64 20 6f 75 74  e not backed out
14840 20 61 6e 64 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b   and no rollback
14850 0a 2a 2a 20 6f 63 63 75 72 73 2e 20 20 49 47 4e  .** occurs.  IGN
14860 4f 52 45 20 6d 65 61 6e 73 20 74 68 61 74 20 74  ORE means that t
14870 68 65 20 70 61 72 74 69 63 75 6c 61 72 20 72 6f  he particular ro
14880 77 20 74 68 61 74 20 63 61 75 73 65 64 20 74 68  w that caused th
14890 65 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20  e constraint.** 
148a0 65 72 72 6f 72 20 69 73 20 6e 6f 74 20 69 6e 73  error is not ins
148b0 65 72 74 65 64 20 6f 72 20 75 70 64 61 74 65 64  erted or updated
148c0 2e 20 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f  .  Processing co
148d0 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65  ntinues and no e
148e0 72 72 6f 72 0a 2a 2a 20 69 73 20 72 65 74 75 72  rror.** is retur
148f0 6e 65 64 2e 20 20 52 45 50 4c 41 43 45 20 6d 65  ned.  REPLACE me
14900 61 6e 73 20 74 68 61 74 20 70 72 65 65 78 69 73  ans that preexis
14910 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 72 6f  ting database ro
14920 77 73 20 74 68 61 74 20 63 61 75 73 65 64 0a 2a  ws that caused.*
14930 2a 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74  * a UNIQUE const
14940 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20  raint violation 
14950 61 72 65 20 72 65 6d 6f 76 65 64 20 73 6f 20 74  are removed so t
14960 68 61 74 20 74 68 65 20 6e 65 77 20 69 6e 73 65  hat the new inse
14970 72 74 20 6f 72 0a 2a 2a 20 75 70 64 61 74 65 20  rt or.** update 
14980 63 61 6e 20 70 72 6f 63 65 65 64 2e 20 20 50 72  can proceed.  Pr
14990 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75  ocessing continu
149a0 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72 20  es and no error 
149b0 69 73 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 0a  is reported..**.
149c0 2a 2a 20 52 45 53 54 52 49 43 54 2c 20 53 45 54  ** RESTRICT, SET
149d0 4e 55 4c 4c 2c 20 61 6e 64 20 43 41 53 43 41 44  NULL, and CASCAD
149e0 45 20 61 63 74 69 6f 6e 73 20 61 70 70 6c 79 20  E actions apply 
149f0 6f 6e 6c 79 20 74 6f 20 66 6f 72 65 69 67 6e 20  only to foreign 
14a00 6b 65 79 73 2e 0a 2a 2a 20 52 45 53 54 52 49 43  keys..** RESTRIC
14a10 54 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73  T is the same as
14a20 20 41 42 4f 52 54 20 66 6f 72 20 49 4d 4d 45 44   ABORT for IMMED
14a30 49 41 54 45 20 66 6f 72 65 69 67 6e 20 6b 65 79  IATE foreign key
14a40 73 20 61 6e 64 20 74 68 65 0a 2a 2a 20 73 61 6d  s and the.** sam
14a50 65 20 61 73 20 52 4f 4c 4c 42 41 43 4b 20 66 6f  e as ROLLBACK fo
14a60 72 20 44 45 46 45 52 52 45 44 20 6b 65 79 73 2e  r DEFERRED keys.
14a70 20 20 53 45 54 4e 55 4c 4c 20 6d 65 61 6e 73 20    SETNULL means 
14a80 74 68 61 74 20 74 68 65 20 66 6f 72 65 69 67 6e  that the foreign
14a90 0a 2a 2a 20 6b 65 79 20 69 73 20 73 65 74 20 74  .** key is set t
14aa0 6f 20 4e 55 4c 4c 2e 20 20 43 41 53 43 41 44 45  o NULL.  CASCADE
14ab0 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20 44 45   means that a DE
14ac0 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45 20 6f  LETE or UPDATE o
14ad0 66 20 74 68 65 0a 2a 2a 20 72 65 66 65 72 65 6e  f the.** referen
14ae0 63 65 64 20 74 61 62 6c 65 20 72 6f 77 20 69 73  ced table row is
14af0 20 70 72 6f 70 61 67 61 74 65 64 20 69 6e 74 6f   propagated into
14b00 20 74 68 65 20 72 6f 77 20 74 68 61 74 20 68 6f   the row that ho
14b10 6c 64 73 20 74 68 65 0a 2a 2a 20 66 6f 72 65 69  lds the.** forei
14b20 67 6e 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68  gn key..**.** Th
14b30 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79 6d 62  e following symb
14b40 6f 6c 69 63 20 76 61 6c 75 65 73 20 61 72 65 20  olic values are 
14b50 75 73 65 64 20 74 6f 20 72 65 63 6f 72 64 20 77  used to record w
14b60 68 69 63 68 20 74 79 70 65 0a 2a 2a 20 6f 66 20  hich type.** of 
14b70 61 63 74 69 6f 6e 20 74 6f 20 74 61 6b 65 2e 0a  action to take..
14b80 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 4e 6f  */.#define OE_No
14b90 6e 65 20 20 20 20 20 30 20 20 20 2f 2a 20 54 68  ne     0   /* Th
14ba0 65 72 65 20 69 73 20 6e 6f 20 63 6f 6e 73 74 72  ere is no constr
14bb0 61 69 6e 74 20 74 6f 20 63 68 65 63 6b 20 2a 2f  aint to check */
14bc0 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 6f 6c 6c  .#define OE_Roll
14bd0 62 61 63 6b 20 31 20 20 20 2f 2a 20 46 61 69 6c  back 1   /* Fail
14be0 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 61   the operation a
14bf0 6e 64 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20  nd rollback the 
14c00 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23  transaction */.#
14c10 64 65 66 69 6e 65 20 4f 45 5f 41 62 6f 72 74 20  define OE_Abort 
14c20 20 20 20 32 20 20 20 2f 2a 20 42 61 63 6b 20 6f     2   /* Back o
14c30 75 74 20 63 68 61 6e 67 65 73 20 62 75 74 20 64  ut changes but d
14c40 6f 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 72  o no rollback tr
14c50 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65  ansaction */.#de
14c60 66 69 6e 65 20 4f 45 5f 46 61 69 6c 20 20 20 20  fine OE_Fail    
14c70 20 33 20 20 20 2f 2a 20 53 74 6f 70 20 74 68 65   3   /* Stop the
14c80 20 6f 70 65 72 61 74 69 6f 6e 20 62 75 74 20 6c   operation but l
14c90 65 61 76 65 20 61 6c 6c 20 70 72 69 6f 72 20 63  eave all prior c
14ca0 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e  hanges */.#defin
14cb0 65 20 4f 45 5f 49 67 6e 6f 72 65 20 20 20 34 20  e OE_Ignore   4 
14cc0 20 20 2f 2a 20 49 67 6e 6f 72 65 20 74 68 65 20    /* Ignore the 
14cd0 65 72 72 6f 72 2e 20 44 6f 20 6e 6f 74 20 64 6f  error. Do not do
14ce0 20 74 68 65 20 49 4e 53 45 52 54 20 6f 72 20 55   the INSERT or U
14cf0 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65  PDATE */.#define
14d00 20 4f 45 5f 52 65 70 6c 61 63 65 20 20 35 20 20   OE_Replace  5  
14d10 20 2f 2a 20 44 65 6c 65 74 65 20 65 78 69 73 74   /* Delete exist
14d20 69 6e 67 20 72 65 63 6f 72 64 2c 20 74 68 65 6e  ing record, then
14d30 20 64 6f 20 49 4e 53 45 52 54 20 6f 72 20 55 50   do INSERT or UP
14d40 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  DATE */.#define 
14d50 4f 45 5f 55 70 64 61 74 65 20 20 20 36 20 20 20  OE_Update   6   
14d60 2f 2a 20 50 72 6f 63 65 73 73 20 61 73 20 61 20  /* Process as a 
14d70 44 4f 20 55 50 44 41 54 45 20 69 6e 20 61 6e 20  DO UPDATE in an 
14d80 75 70 73 65 72 74 20 2a 2f 0a 23 64 65 66 69 6e  upsert */.#defin
14d90 65 20 4f 45 5f 52 65 73 74 72 69 63 74 20 37 20  e OE_Restrict 7 
14da0 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 20 66 6f    /* OE_Abort fo
14db0 72 20 49 4d 4d 45 44 49 41 54 45 2c 20 4f 45 5f  r IMMEDIATE, OE_
14dc0 52 6f 6c 6c 62 61 63 6b 20 66 6f 72 20 44 45 46  Rollback for DEF
14dd0 45 52 52 45 44 20 2a 2f 0a 23 64 65 66 69 6e 65  ERRED */.#define
14de0 20 4f 45 5f 53 65 74 4e 75 6c 6c 20 20 38 20 20   OE_SetNull  8  
14df0 20 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65   /* Set the fore
14e00 69 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f  ign key value to
14e10 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65   NULL */.#define
14e20 20 4f 45 5f 53 65 74 44 66 6c 74 20 20 39 20 20   OE_SetDflt  9  
14e30 20 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65   /* Set the fore
14e40 69 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f  ign key value to
14e50 20 69 74 73 20 64 65 66 61 75 6c 74 20 2a 2f 0a   its default */.
14e60 23 64 65 66 69 6e 65 20 4f 45 5f 43 61 73 63 61  #define OE_Casca
14e70 64 65 20 20 31 30 20 20 2f 2a 20 43 61 73 63 61  de  10  /* Casca
14e80 64 65 20 74 68 65 20 63 68 61 6e 67 65 73 20 2a  de the changes *
14e90 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 44 65 66  /.#define OE_Def
14ea0 61 75 6c 74 20 20 31 31 20 20 2f 2a 20 44 6f 20  ault  11  /* Do 
14eb0 77 68 61 74 65 76 65 72 20 74 68 65 20 64 65 66  whatever the def
14ec0 61 75 6c 74 20 61 63 74 69 6f 6e 20 69 73 20 2a  ault action is *
14ed0 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  /.../*.** An ins
14ee0 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
14ef0 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
14f00 20 69 73 20 70 61 73 73 65 64 20 61 73 20 74 68   is passed as th
14f10 65 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d  e first.** argum
14f20 65 6e 74 20 74 6f 20 73 71 6c 69 74 65 33 56 64  ent to sqlite3Vd
14f30 62 65 4b 65 79 43 6f 6d 70 61 72 65 20 61 6e 64  beKeyCompare and
14f40 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6e 74   is used to cont
14f50 72 6f 6c 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61  rol the.** compa
14f60 72 69 73 6f 6e 20 6f 66 20 74 68 65 20 74 77 6f  rison of the two
14f70 20 69 6e 64 65 78 20 6b 65 79 73 2e 0a 2a 2a 0a   index keys..**.
14f80 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 61 53 6f  ** Note that aSo
14f90 72 74 4f 72 64 65 72 5b 5d 20 61 6e 64 20 61 43  rtOrder[] and aC
14fa0 6f 6c 6c 5b 5d 20 68 61 76 65 20 6e 46 69 65 6c  oll[] have nFiel
14fb0 64 2b 31 20 73 6c 6f 74 73 2e 20 20 54 68 65 72  d+1 slots.  Ther
14fc0 65 0a 2a 2a 20 61 72 65 20 6e 46 69 65 6c 64 20  e.** are nField 
14fd0 73 6c 6f 74 73 20 66 6f 72 20 74 68 65 20 63 6f  slots for the co
14fe0 6c 75 6d 6e 73 20 6f 66 20 61 6e 20 69 6e 64 65  lumns of an inde
14ff0 78 20 74 68 65 6e 20 6f 6e 65 20 65 78 74 72 61  x then one extra
15000 20 73 6c 6f 74 0a 2a 2a 20 66 6f 72 20 74 68 65   slot.** for the
15010 20 72 6f 77 69 64 20 61 74 20 74 68 65 20 65 6e   rowid at the en
15020 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4b 65 79  d..*/.struct Key
15030 49 6e 66 6f 20 7b 0a 20 20 75 33 32 20 6e 52 65  Info {.  u32 nRe
15040 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  f;           /* 
15050 4e 75 6d 62 65 72 20 6f 66 20 72 65 66 65 72 65  Number of refere
15060 6e 63 65 73 20 74 6f 20 74 68 69 73 20 4b 65 79  nces to this Key
15070 49 6e 66 6f 20 6f 62 6a 65 63 74 20 2a 2f 0a 20  Info object */. 
15080 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20   u8 enc;        
15090 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63       /* Text enc
150a0 6f 64 69 6e 67 20 2d 20 6f 6e 65 20 6f 66 20 74  oding - one of t
150b0 68 65 20 53 51 4c 49 54 45 5f 55 54 46 2a 20 76  he SQLITE_UTF* v
150c0 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e  alues */.  u16 n
150d0 4b 65 79 46 69 65 6c 64 3b 20 20 20 20 20 20 2f  KeyField;      /
150e0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6b 65 79 20  * Number of key 
150f0 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 69  columns in the i
15100 6e 64 65 78 20 2a 2f 0a 20 20 75 31 36 20 6e 41  ndex */.  u16 nA
15110 6c 6c 46 69 65 6c 64 3b 20 20 20 20 20 20 2f 2a  llField;      /*
15120 20 54 6f 74 61 6c 20 63 6f 6c 75 6d 6e 73 2c 20   Total columns, 
15130 69 6e 63 6c 75 64 69 6e 67 20 6b 65 79 20 70 6c  including key pl
15140 75 73 20 6f 74 68 65 72 73 20 2a 2f 0a 20 20 73  us others */.  s
15150 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
15160 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
15170 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f  se connection */
15180 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72 64 65  .  u8 *aSortOrde
15190 72 3b 20 20 20 20 20 2f 2a 20 53 6f 72 74 20 6f  r;     /* Sort o
151a0 72 64 65 72 20 66 6f 72 20 65 61 63 68 20 63 6f  rder for each co
151b0 6c 75 6d 6e 2e 20 2a 2f 0a 20 20 43 6f 6c 6c 53  lumn. */.  CollS
151c0 65 71 20 2a 61 43 6f 6c 6c 5b 31 5d 3b 20 20 2f  eq *aColl[1];  /
151d0 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  * Collating sequ
151e0 65 6e 63 65 20 66 6f 72 20 65 61 63 68 20 74 65  ence for each te
151f0 72 6d 20 6f 66 20 74 68 65 20 6b 65 79 20 2a 2f  rm of the key */
15200 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20  .};../*.** This 
15210 6f 62 6a 65 63 74 20 68 6f 6c 64 73 20 61 20 72  object holds a r
15220 65 63 6f 72 64 20 77 68 69 63 68 20 68 61 73 20  ecord which has 
15230 62 65 65 6e 20 70 61 72 73 65 64 20 6f 75 74 20  been parsed out 
15240 69 6e 74 6f 20 69 6e 64 69 76 69 64 75 61 6c 0a  into individual.
15250 2a 2a 20 66 69 65 6c 64 73 2c 20 66 6f 72 20 74  ** fields, for t
15260 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20 64  he purposes of d
15270 6f 69 6e 67 20 61 20 63 6f 6d 70 61 72 69 73 6f  oing a compariso
15280 6e 2e 0a 2a 2a 0a 2a 2a 20 41 20 72 65 63 6f 72  n..**.** A recor
15290 64 20 69 73 20 61 6e 20 6f 62 6a 65 63 74 20 74  d is an object t
152a0 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65  hat contains one
152b0 20 6f 72 20 6d 6f 72 65 20 66 69 65 6c 64 73 20   or more fields 
152c0 6f 66 20 64 61 74 61 2e 0a 2a 2a 20 52 65 63 6f  of data..** Reco
152d0 72 64 73 20 61 72 65 20 75 73 65 64 20 74 6f 20  rds are used to 
152e0 73 74 6f 72 65 20 74 68 65 20 63 6f 6e 74 65 6e  store the conten
152f0 74 20 6f 66 20 61 20 74 61 62 6c 65 20 72 6f 77  t of a table row
15300 20 61 6e 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a   and to store.**
15310 20 74 68 65 20 6b 65 79 20 6f 66 20 61 6e 20 69   the key of an i
15320 6e 64 65 78 2e 20 20 41 20 62 6c 6f 62 20 65 6e  ndex.  A blob en
15330 63 6f 64 69 6e 67 20 6f 66 20 61 20 72 65 63 6f  coding of a reco
15340 72 64 20 69 73 20 63 72 65 61 74 65 64 20 62 79  rd is created by
15350 0a 2a 2a 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52  .** the OP_MakeR
15360 65 63 6f 72 64 20 6f 70 63 6f 64 65 20 6f 66 20  ecord opcode of 
15370 74 68 65 20 56 44 42 45 20 61 6e 64 20 69 73 20  the VDBE and is 
15380 64 69 73 61 73 73 65 6d 62 6c 65 64 20 62 79 20  disassembled by 
15390 74 68 65 0a 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e  the.** OP_Column
153a0 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41   opcode..**.** A
153b0 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
153c0 69 73 20 6f 62 6a 65 63 74 20 73 65 72 76 65 73  is object serves
153d0 20 61 73 20 61 20 22 6b 65 79 22 20 66 6f 72 20   as a "key" for 
153e0 64 6f 69 6e 67 20 61 20 73 65 61 72 63 68 20 6f  doing a search o
153f0 6e 0a 2a 2a 20 61 6e 20 69 6e 64 65 78 20 62 2b  n.** an index b+
15400 74 72 65 65 2e 20 54 68 65 20 67 6f 61 6c 20 6f  tree. The goal o
15410 66 20 74 68 65 20 73 65 61 72 63 68 20 69 73 20  f the search is 
15420 74 6f 20 66 69 6e 64 20 74 68 65 20 65 6e 74 72  to find the entr
15430 79 20 74 68 61 74 0a 2a 2a 20 69 73 20 63 6c 6f  y that.** is clo
15440 73 65 64 20 74 6f 20 74 68 65 20 6b 65 79 20 64  sed to the key d
15450 65 73 63 72 69 62 65 64 20 62 79 20 74 68 69 73  escribed by this
15460 20 6f 62 6a 65 63 74 2e 20 20 54 68 69 73 20 6f   object.  This o
15470 62 6a 65 63 74 20 6d 69 67 68 74 20 68 6f 6c 64  bject might hold
15480 0a 2a 2a 20 6a 75 73 74 20 61 20 70 72 65 66 69  .** just a prefi
15490 78 20 6f 66 20 74 68 65 20 6b 65 79 2e 20 20 54  x of the key.  T
154a0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 66 69 65  he number of fie
154b0 6c 64 73 20 69 73 20 67 69 76 65 6e 20 62 79 0a  lds is given by.
154c0 2a 2a 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69  ** pKeyInfo->nFi
154d0 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72  eld..**.** The r
154e0 31 20 61 6e 64 20 72 32 20 66 69 65 6c 64 73 20  1 and r2 fields 
154f0 61 72 65 20 74 68 65 20 76 61 6c 75 65 73 20 74  are the values t
15500 6f 20 72 65 74 75 72 6e 20 69 66 20 74 68 69 73  o return if this
15510 20 6b 65 79 20 69 73 20 6c 65 73 73 20 74 68 61   key is less tha
15520 6e 0a 2a 2a 20 6f 72 20 67 72 65 61 74 65 72 20  n.** or greater 
15530 74 68 61 6e 20 61 20 6b 65 79 20 69 6e 20 74 68  than a key in th
15540 65 20 62 74 72 65 65 2c 20 72 65 73 70 65 63 74  e btree, respect
15550 69 76 65 6c 79 2e 20 20 54 68 65 73 65 20 61 72  ively.  These ar
15560 65 20 6e 6f 72 6d 61 6c 6c 79 0a 2a 2a 20 2d 31  e normally.** -1
15570 20 61 6e 64 20 2b 31 20 72 65 73 70 65 63 74 69   and +1 respecti
15580 76 65 6c 79 2c 20 62 75 74 20 6d 69 67 68 74 20  vely, but might 
15590 62 65 20 69 6e 76 65 72 74 65 64 20 74 6f 20 2b  be inverted to +
155a0 31 20 61 6e 64 20 2d 31 20 69 66 20 74 68 65 20  1 and -1 if the 
155b0 62 2d 74 72 65 65 0a 2a 2a 20 69 73 20 69 6e 20  b-tree.** is in 
155c0 44 45 53 43 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a  DESC order..**.*
155d0 2a 20 54 68 65 20 6b 65 79 20 63 6f 6d 70 61 72  * The key compar
155e0 69 73 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20 61  ison functions a
155f0 63 74 75 61 6c 6c 79 20 72 65 74 75 72 6e 20 64  ctually return d
15600 65 66 61 75 6c 74 5f 72 63 20 77 68 65 6e 20 74  efault_rc when t
15610 68 65 79 20 66 69 6e 64 0a 2a 2a 20 61 6e 20 65  hey find.** an e
15620 71 75 61 6c 73 20 63 6f 6d 70 61 72 69 73 6f 6e  quals comparison
15630 2e 20 20 64 65 66 61 75 6c 74 5f 72 63 20 63 61  .  default_rc ca
15640 6e 20 62 65 20 2d 31 2c 20 30 2c 20 6f 72 20 2b  n be -1, 0, or +
15650 31 2e 20 20 49 66 20 74 68 65 72 65 20 61 72 65  1.  If there are
15660 0a 2a 2a 20 6d 75 6c 74 69 70 6c 65 20 65 6e 74  .** multiple ent
15670 72 69 65 73 20 69 6e 20 74 68 65 20 62 2d 74 72  ries in the b-tr
15680 65 65 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  ee with the same
15690 20 6b 65 79 20 28 77 68 65 6e 20 6f 6e 6c 79 20   key (when only 
156a0 6c 6f 6f 6b 69 6e 67 0a 2a 2a 20 61 74 20 74 68  looking.** at th
156b0 65 20 66 69 72 73 74 20 70 4b 65 79 49 6e 66 6f  e first pKeyInfo
156c0 2d 3e 6e 46 69 65 6c 64 73 2c 29 20 74 68 65 6e  ->nFields,) then
156d0 20 64 65 66 61 75 6c 74 5f 72 63 20 63 61 6e 20   default_rc can 
156e0 62 65 20 73 65 74 20 74 6f 20 2d 31 20 74 6f 0a  be set to -1 to.
156f0 2a 2a 20 63 61 75 73 65 20 74 68 65 20 73 65 61  ** cause the sea
15700 72 63 68 20 74 6f 20 66 69 6e 64 20 74 68 65 20  rch to find the 
15710 6c 61 73 74 20 6d 61 74 63 68 2c 20 6f 72 20 2b  last match, or +
15720 31 20 74 6f 20 63 61 75 73 65 20 74 68 65 20 73  1 to cause the s
15730 65 61 72 63 68 20 74 6f 0a 2a 2a 20 66 69 6e 64  earch to.** find
15740 20 74 68 65 20 66 69 72 73 74 20 6d 61 74 63 68   the first match
15750 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6b 65 79 20  ..**.** The key 
15760 63 6f 6d 70 61 72 69 73 6f 6e 20 66 75 6e 63 74  comparison funct
15770 69 6f 6e 73 20 77 69 6c 6c 20 73 65 74 20 65 71  ions will set eq
15780 53 65 65 6e 20 74 6f 20 74 72 75 65 20 69 66 20  Seen to true if 
15790 74 68 65 79 20 65 76 65 72 0a 2a 2a 20 67 65 74  they ever.** get
157a0 20 61 6e 64 20 65 71 75 61 6c 20 72 65 73 75 6c   and equal resul
157b0 74 73 20 77 68 65 6e 20 63 6f 6d 70 61 72 69 6e  ts when comparin
157c0 67 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  g this structure
157d0 20 74 6f 20 61 20 62 2d 74 72 65 65 20 72 65 63   to a b-tree rec
157e0 6f 72 64 2e 0a 2a 2a 20 57 68 65 6e 20 64 65 66  ord..** When def
157f0 61 75 6c 74 5f 72 63 21 3d 30 2c 20 74 68 65 20  ault_rc!=0, the 
15800 73 65 61 72 63 68 20 6d 69 67 68 74 20 65 6e 64  search might end
15810 20 75 70 20 6f 6e 20 74 68 65 20 72 65 63 6f 72   up on the recor
15820 64 20 69 6d 6d 65 64 69 61 74 65 6c 79 0a 2a 2a  d immediately.**
15830 20 62 65 66 6f 72 65 20 74 68 65 20 66 69 72 73   before the firs
15840 74 20 6d 61 74 63 68 20 6f 72 20 69 6d 6d 65 64  t match or immed
15850 69 61 74 65 6c 79 20 61 66 74 65 72 20 74 68 65  iately after the
15860 20 6c 61 73 74 20 6d 61 74 63 68 2e 20 20 54 68   last match.  Th
15870 65 0a 2a 2a 20 65 71 53 65 65 6e 20 66 69 65 6c  e.** eqSeen fiel
15880 64 20 77 69 6c 6c 20 69 6e 64 69 63 61 74 65 20  d will indicate 
15890 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61  whether or not a
158a0 6e 20 65 78 61 63 74 20 6d 61 74 63 68 20 65 78  n exact match ex
158b0 69 73 74 73 20 69 6e 20 74 68 65 0a 2a 2a 20 62  ists in the.** b
158c0 2d 74 72 65 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  -tree..*/.struct
158d0 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20   UnpackedRecord 
158e0 7b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65  {.  KeyInfo *pKe
158f0 79 49 6e 66 6f 3b 20 20 2f 2a 20 43 6f 6c 6c 61  yInfo;  /* Colla
15900 74 69 6f 6e 20 61 6e 64 20 73 6f 72 74 2d 6f 72  tion and sort-or
15910 64 65 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  der information 
15920 2a 2f 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d 3b 20  */.  Mem *aMem; 
15930 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
15940 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65  es */.  u16 nFie
15950 6c 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ld;         /* N
15960 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73  umber of entries
15970 20 69 6e 20 61 70 4d 65 6d 5b 5d 20 2a 2f 0a 20   in apMem[] */. 
15980 20 69 38 20 64 65 66 61 75 6c 74 5f 72 63 3b 20   i8 default_rc; 
15990 20 20 20 20 20 2f 2a 20 43 6f 6d 70 61 72 69 73       /* Comparis
159a0 6f 6e 20 72 65 73 75 6c 74 20 69 66 20 6b 65 79  on result if key
159b0 73 20 61 72 65 20 65 71 75 61 6c 20 2a 2f 0a 20  s are equal */. 
159c0 20 75 38 20 65 72 72 43 6f 64 65 3b 20 20 20 20   u8 errCode;    
159d0 20 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 64 65       /* Error de
159e0 74 65 63 74 65 64 20 62 79 20 78 52 65 63 6f 72  tected by xRecor
159f0 64 43 6f 6d 70 61 72 65 20 28 43 4f 52 52 55 50  dCompare (CORRUP
15a00 54 20 6f 72 20 4e 4f 4d 45 4d 29 20 2a 2f 0a 20  T or NOMEM) */. 
15a10 20 69 38 20 72 31 3b 20 20 20 20 20 20 20 20 20   i8 r1;         
15a20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f       /* Value to
15a30 20 72 65 74 75 72 6e 20 69 66 20 28 6c 68 73 20   return if (lhs 
15a40 3c 20 72 68 73 29 20 2a 2f 0a 20 20 69 38 20 72  < rhs) */.  i8 r
15a50 32 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  2;              
15a60 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75  /* Value to retu
15a70 72 6e 20 69 66 20 28 6c 68 73 20 3e 20 72 68 73  rn if (lhs > rhs
15a80 29 20 2a 2f 0a 20 20 75 38 20 65 71 53 65 65 6e  ) */.  u8 eqSeen
15a90 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72  ;          /* Tr
15aa0 75 65 20 69 66 20 61 6e 20 65 71 75 61 6c 69 74  ue if an equalit
15ab0 79 20 63 6f 6d 70 61 72 69 73 6f 6e 20 68 61 73  y comparison has
15ac0 20 62 65 65 6e 20 73 65 65 6e 20 2a 2f 0a 7d 3b   been seen */.};
15ad0 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51  .../*.** Each SQ
15ae0 4c 20 69 6e 64 65 78 20 69 73 20 72 65 70 72 65  L index is repre
15af0 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79  sented in memory
15b00 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e   by an.** instan
15b10 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
15b20 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  ing structure..*
15b30 2a 0a 2a 2a 20 54 68 65 20 63 6f 6c 75 6d 6e 73  *.** The columns
15b40 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 68   of the table th
15b50 61 74 20 61 72 65 20 74 6f 20 62 65 20 69 6e 64  at are to be ind
15b60 65 78 65 64 20 61 72 65 20 64 65 73 63 72 69 62  exed are describ
15b70 65 64 0a 2a 2a 20 62 79 20 74 68 65 20 61 69 43  ed.** by the aiC
15b80 6f 6c 75 6d 6e 5b 5d 20 66 69 65 6c 64 20 6f 66  olumn[] field of
15b90 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e   this structure.
15ba0 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 73    For example, s
15bb0 75 70 70 6f 73 65 0a 2a 2a 20 77 65 20 68 61 76  uppose.** we hav
15bc0 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  e the following 
15bd0 74 61 62 6c 65 20 61 6e 64 20 69 6e 64 65 78 3a  table and index:
15be0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54  .**.**     CREAT
15bf0 45 20 54 41 42 4c 45 20 45 78 31 28 63 31 20 69  E TABLE Ex1(c1 i
15c00 6e 74 2c 20 63 32 20 69 6e 74 2c 20 63 33 20 74  nt, c2 int, c3 t
15c10 65 78 74 29 3b 0a 2a 2a 20 20 20 20 20 43 52 45  ext);.**     CRE
15c20 41 54 45 20 49 4e 44 45 58 20 45 78 32 20 4f 4e  ATE INDEX Ex2 ON
15c30 20 45 78 31 28 63 33 2c 63 31 29 3b 0a 2a 2a 0a   Ex1(c3,c1);.**.
15c40 2a 2a 20 49 6e 20 74 68 65 20 54 61 62 6c 65 20  ** In the Table 
15c50 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69  structure descri
15c60 62 69 6e 67 20 45 78 31 2c 20 6e 43 6f 6c 3d 3d  bing Ex1, nCol==
15c70 33 20 62 65 63 61 75 73 65 20 74 68 65 72 65 20  3 because there 
15c80 61 72 65 0a 2a 2a 20 74 68 72 65 65 20 63 6f 6c  are.** three col
15c90 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c  umns in the tabl
15ca0 65 2e 20 20 49 6e 20 74 68 65 20 49 6e 64 65 78  e.  In the Index
15cb0 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72   structure descr
15cc0 69 62 69 6e 67 0a 2a 2a 20 45 78 32 2c 20 6e 43  ibing.** Ex2, nC
15cd0 6f 6c 75 6d 6e 3d 3d 32 20 73 69 6e 63 65 20 32  olumn==2 since 2
15ce0 20 6f 66 20 74 68 65 20 33 20 63 6f 6c 75 6d 6e   of the 3 column
15cf0 73 20 6f 66 20 45 78 31 20 61 72 65 20 69 6e 64  s of Ex1 are ind
15d00 65 78 65 64 2e 0a 2a 2a 20 54 68 65 20 76 61 6c  exed..** The val
15d10 75 65 20 6f 66 20 61 69 43 6f 6c 75 6d 6e 20 69  ue of aiColumn i
15d20 73 20 7b 32 2c 20 30 7d 2e 20 20 61 69 43 6f 6c  s {2, 0}.  aiCol
15d30 75 6d 6e 5b 30 5d 3d 3d 32 20 62 65 63 61 75 73  umn[0]==2 becaus
15d40 65 20 74 68 65 0a 2a 2a 20 66 69 72 73 74 20 63  e the.** first c
15d50 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65  olumn to be inde
15d60 78 65 64 20 28 63 33 29 20 68 61 73 20 61 6e 20  xed (c3) has an 
15d70 69 6e 64 65 78 20 6f 66 20 32 20 69 6e 20 45 78  index of 2 in Ex
15d80 31 2e 61 43 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68 65  1.aCol[]..** The
15d90 20 73 65 63 6f 6e 64 20 63 6f 6c 75 6d 6e 20 74   second column t
15da0 6f 20 62 65 20 69 6e 64 65 78 65 64 20 28 63 31  o be indexed (c1
15db0 29 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f  ) has an index o
15dc0 66 20 30 20 69 6e 0a 2a 2a 20 45 78 31 2e 61 43  f 0 in.** Ex1.aC
15dd0 6f 6c 5b 5d 2c 20 68 65 6e 63 65 20 45 78 32 2e  ol[], hence Ex2.
15de0 61 69 43 6f 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a  aiColumn[1]==0..
15df0 2a 2a 0a 2a 2a 20 54 68 65 20 49 6e 64 65 78 2e  **.** The Index.
15e00 6f 6e 45 72 72 6f 72 20 66 69 65 6c 64 20 64 65  onError field de
15e10 74 65 72 6d 69 6e 65 73 20 77 68 65 74 68 65 72  termines whether
15e20 20 6f 72 20 6e 6f 74 20 74 68 65 20 69 6e 64 65   or not the inde
15e30 78 65 64 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d  xed columns.** m
15e40 75 73 74 20 62 65 20 75 6e 69 71 75 65 20 61 6e  ust be unique an
15e50 64 20 77 68 61 74 20 74 6f 20 64 6f 20 69 66 20  d what to do if 
15e60 74 68 65 79 20 61 72 65 20 6e 6f 74 2e 20 20 57  they are not.  W
15e70 68 65 6e 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f  hen Index.onErro
15e80 72 3d 4f 45 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69 74  r=OE_None,.** it
15e90 20 6d 65 61 6e 73 20 74 68 69 73 20 69 73 20 6e   means this is n
15ea0 6f 74 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65  ot a unique inde
15eb0 78 2e 20 20 4f 74 68 65 72 77 69 73 65 20 69 74  x.  Otherwise it
15ec0 20 69 73 20 61 20 75 6e 69 71 75 65 20 69 6e 64   is a unique ind
15ed0 65 78 0a 2a 2a 20 61 6e 64 20 74 68 65 20 76 61  ex.** and the va
15ee0 6c 75 65 20 6f 66 20 49 6e 64 65 78 2e 6f 6e 45  lue of Index.onE
15ef0 72 72 6f 72 20 69 6e 64 69 63 61 74 65 20 74 68  rror indicate th
15f00 65 20 77 68 69 63 68 20 63 6f 6e 66 6c 69 63 74  e which conflict
15f10 20 72 65 73 6f 6c 75 74 69 6f 6e 0a 2a 2a 20 61   resolution.** a
15f20 6c 67 6f 72 69 74 68 6d 20 74 6f 20 65 6d 70 6c  lgorithm to empl
15f30 6f 79 20 77 68 65 6e 65 76 65 72 20 61 6e 20 61  oy whenever an a
15f40 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74  ttempt is made t
15f50 6f 20 69 6e 73 65 72 74 20 61 20 6e 6f 6e 2d 75  o insert a non-u
15f60 6e 69 71 75 65 0a 2a 2a 20 65 6c 65 6d 65 6e 74  nique.** element
15f70 2e 0a 2a 2a 0a 2a 2a 20 57 68 69 6c 65 20 70 61  ..**.** While pa
15f80 72 73 69 6e 67 20 61 20 43 52 45 41 54 45 20 54  rsing a CREATE T
15f90 41 42 4c 45 20 6f 72 20 43 52 45 41 54 45 20 49  ABLE or CREATE I
15fa0 4e 44 45 58 20 73 74 61 74 65 6d 65 6e 74 20 69  NDEX statement i
15fb0 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67 65  n order to.** ge
15fc0 6e 65 72 61 74 65 20 56 44 42 45 20 63 6f 64 65  nerate VDBE code
15fd0 20 28 61 73 20 6f 70 70 6f 73 65 64 20 74 6f 20   (as opposed to 
15fe0 70 61 72 73 69 6e 67 20 6f 6e 65 20 72 65 61 64  parsing one read
15ff0 20 66 72 6f 6d 20 61 6e 20 73 71 6c 69 74 65 5f   from an sqlite_
16000 6d 61 73 74 65 72 0a 2a 2a 20 74 61 62 6c 65 20  master.** table 
16010 61 73 20 70 61 72 74 20 6f 66 20 70 61 72 73 69  as part of parsi
16020 6e 67 20 61 6e 20 65 78 69 73 74 69 6e 67 20 64  ng an existing d
16030 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 29 2c  atabase schema),
16040 20 74 72 61 6e 73 69 65 6e 74 20 69 6e 73 74 61   transient insta
16050 6e 63 65 73 0a 2a 2a 20 6f 66 20 74 68 69 73 20  nces.** of this 
16060 73 74 72 75 63 74 75 72 65 20 6d 61 79 20 62 65  structure may be
16070 20 63 72 65 61 74 65 64 2e 20 49 6e 20 74 68 69   created. In thi
16080 73 20 63 61 73 65 20 74 68 65 20 49 6e 64 65 78  s case the Index
16090 2e 74 6e 75 6d 20 76 61 72 69 61 62 6c 65 20 69  .tnum variable i
160a0 73 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73 74 6f  s.** used to sto
160b0 72 65 20 74 68 65 20 61 64 64 72 65 73 73 20 6f  re the address o
160c0 66 20 61 20 56 44 42 45 20 69 6e 73 74 72 75 63  f a VDBE instruc
160d0 74 69 6f 6e 2c 20 6e 6f 74 20 61 20 64 61 74 61  tion, not a data
160e0 62 61 73 65 20 70 61 67 65 0a 2a 2a 20 6e 75 6d  base page.** num
160f0 62 65 72 20 28 69 74 20 63 61 6e 6e 6f 74 20 2d  ber (it cannot -
16100 20 74 68 65 20 64 61 74 61 62 61 73 65 20 70 61   the database pa
16110 67 65 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 63 61  ge is not alloca
16120 74 65 64 20 75 6e 74 69 6c 20 74 68 65 20 56 44  ted until the VD
16130 42 45 0a 2a 2a 20 70 72 6f 67 72 61 6d 20 69 73  BE.** program is
16140 20 65 78 65 63 75 74 65 64 29 2e 20 53 65 65 20   executed). See 
16150 63 6f 6e 76 65 72 74 54 6f 57 69 74 68 6f 75 74  convertToWithout
16160 52 6f 77 69 64 54 61 62 6c 65 28 29 20 66 6f 72  RowidTable() for
16170 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 73 74 72   details..*/.str
16180 75 63 74 20 49 6e 64 65 78 20 7b 0a 20 20 63 68  uct Index {.  ch
16190 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
161a0 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
161b0 66 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a  f this index */.
161c0 20 20 69 31 36 20 2a 61 69 43 6f 6c 75 6d 6e 3b    i16 *aiColumn;
161d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68             /* Wh
161e0 69 63 68 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20  ich columns are 
161f0 75 73 65 64 20 62 79 20 74 68 69 73 20 69 6e 64  used by this ind
16200 65 78 2e 20 20 31 73 74 20 69 73 20 30 20 2a 2f  ex.  1st is 0 */
16210 0a 20 20 4c 6f 67 45 73 74 20 2a 61 69 52 6f 77  .  LogEst *aiRow
16220 4c 6f 67 45 73 74 3b 20 20 20 20 20 2f 2a 20 46  LogEst;     /* F
16230 72 6f 6d 20 41 4e 41 4c 59 5a 45 3a 20 45 73 74  rom ANALYZE: Est
16240 2e 20 72 6f 77 73 20 73 65 6c 65 63 74 65 64 20  . rows selected 
16250 62 79 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a  by each column *
16260 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 6c  /.  Table *pTabl
16270 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  e;           /* 
16280 54 68 65 20 53 51 4c 20 74 61 62 6c 65 20 62 65  The SQL table be
16290 69 6e 67 20 69 6e 64 65 78 65 64 20 2a 2f 0a 20  ing indexed */. 
162a0 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20   char *zColAff; 
162b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74 72            /* Str
162c0 69 6e 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65  ing defining the
162d0 20 61 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63   affinity of eac
162e0 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e  h column */.  In
162f0 64 65 78 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  dex *pNext;     
16300 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65         /* The ne
16310 78 74 20 69 6e 64 65 78 20 61 73 73 6f 63 69 61  xt index associa
16320 74 65 64 20 77 69 74 68 20 74 68 65 20 73 61 6d  ted with the sam
16330 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 53 63 68  e table */.  Sch
16340 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20  ema *pSchema;   
16350 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20        /* Schema 
16360 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 69 73 20  containing this 
16370 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20 2a 61  index */.  u8 *a
16380 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20  SortOrder;      
16390 20 20 20 20 2f 2a 20 66 6f 72 20 65 61 63 68 20      /* for each 
163a0 63 6f 6c 75 6d 6e 3a 20 54 72 75 65 3d 3d 44 45  column: True==DE
163b0 53 43 2c 20 46 61 6c 73 65 3d 3d 41 53 43 20 2a  SC, False==ASC *
163c0 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
163d0 2a 61 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20  *azColl;     /* 
163e0 41 72 72 61 79 20 6f 66 20 63 6f 6c 6c 61 74 69  Array of collati
163f0 6f 6e 20 73 65 71 75 65 6e 63 65 20 6e 61 6d 65  on sequence name
16400 73 20 66 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20  s for index */. 
16410 20 45 78 70 72 20 2a 70 50 61 72 74 49 64 78 57   Expr *pPartIdxW
16420 68 65 72 65 3b 20 20 20 20 20 2f 2a 20 57 48 45  here;     /* WHE
16430 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20 70 61  RE clause for pa
16440 72 74 69 61 6c 20 69 6e 64 69 63 65 73 20 2a 2f  rtial indices */
16450 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 61 43 6f  .  ExprList *aCo
16460 6c 45 78 70 72 3b 20 20 20 20 20 20 2f 2a 20 43  lExpr;      /* C
16470 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e  olumn expression
16480 73 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b  s */.  int tnum;
16490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
164a0 2f 2a 20 44 42 20 50 61 67 65 20 63 6f 6e 74 61  /* DB Page conta
164b0 69 6e 69 6e 67 20 72 6f 6f 74 20 6f 66 20 74 68  ining root of th
164c0 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 4c 6f  is index */.  Lo
164d0 67 45 73 74 20 73 7a 49 64 78 52 6f 77 3b 20 20  gEst szIdxRow;  
164e0 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61         /* Estima
164f0 74 65 64 20 61 76 65 72 61 67 65 20 72 6f 77 20  ted average row 
16500 73 69 7a 65 20 69 6e 20 62 79 74 65 73 20 2a 2f  size in bytes */
16510 0a 20 20 75 31 36 20 6e 4b 65 79 43 6f 6c 3b 20  .  u16 nKeyCol; 
16520 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
16530 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
16540 20 66 6f 72 6d 69 6e 67 20 74 68 65 20 6b 65 79   forming the key
16550 20 2a 2f 0a 20 20 75 31 36 20 6e 43 6f 6c 75 6d   */.  u16 nColum
16560 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  n;             /
16570 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
16580 6d 6e 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68  mns stored in th
16590 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20  e index */.  u8 
165a0 6f 6e 45 72 72 6f 72 3b 20 20 20 20 20 20 20 20  onError;        
165b0 20 20 20 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72        /* OE_Abor
165c0 74 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 4f 45  t, OE_Ignore, OE
165d0 5f 52 65 70 6c 61 63 65 2c 20 6f 72 20 4f 45 5f  _Replace, or OE_
165e0 4e 6f 6e 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  None */.  unsign
165f0 65 64 20 69 64 78 54 79 70 65 3a 32 3b 20 20 20  ed idxType:2;   
16600 20 20 20 2f 2a 20 31 3d 3d 55 4e 49 51 55 45 2c     /* 1==UNIQUE,
16610 20 32 3d 3d 50 52 49 4d 41 52 59 20 4b 45 59 2c   2==PRIMARY KEY,
16620 20 30 3d 3d 43 52 45 41 54 45 20 49 4e 44 45 58   0==CREATE INDEX
16630 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 62   */.  unsigned b
16640 55 6e 6f 72 64 65 72 65 64 3a 31 3b 20 20 20 2f  Unordered:1;   /
16650 2a 20 55 73 65 20 74 68 69 73 20 69 6e 64 65 78  * Use this index
16660 20 66 6f 72 20 3d 3d 20 6f 72 20 49 4e 20 71 75   for == or IN qu
16670 65 72 69 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20  eries only */.  
16680 75 6e 73 69 67 6e 65 64 20 75 6e 69 71 4e 6f 74  unsigned uniqNot
16690 4e 75 6c 6c 3a 31 3b 20 20 2f 2a 20 54 72 75 65  Null:1;  /* True
166a0 20 69 66 20 55 4e 49 51 55 45 20 61 6e 64 20 4e   if UNIQUE and N
166b0 4f 54 20 4e 55 4c 4c 20 66 6f 72 20 61 6c 6c 20  OT NULL for all 
166c0 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 75 6e 73  columns */.  uns
166d0 69 67 6e 65 64 20 69 73 52 65 73 69 7a 65 64 3a  igned isResized:
166e0 31 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  1;    /* True if
166f0 20 72 65 73 69 7a 65 49 6e 64 65 78 4f 62 6a 65   resizeIndexObje
16700 63 74 28 29 20 68 61 73 20 62 65 65 6e 20 63 61  ct() has been ca
16710 6c 6c 65 64 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  lled */.  unsign
16720 65 64 20 69 73 43 6f 76 65 72 69 6e 67 3a 31 3b  ed isCovering:1;
16730 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68     /* True if th
16740 69 73 20 69 73 20 61 20 63 6f 76 65 72 69 6e 67  is is a covering
16750 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 6e 73 69   index */.  unsi
16760 67 6e 65 64 20 6e 6f 53 6b 69 70 53 63 61 6e 3a  gned noSkipScan:
16770 31 3b 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 74  1;   /* Do not t
16780 72 79 20 74 6f 20 75 73 65 20 73 6b 69 70 2d 73  ry to use skip-s
16790 63 61 6e 20 69 66 20 74 72 75 65 20 2a 2f 0a 20  can if true */. 
167a0 20 75 6e 73 69 67 6e 65 64 20 68 61 73 53 74 61   unsigned hasSta
167b0 74 31 3a 31 3b 20 20 20 20 20 2f 2a 20 61 69 52  t1:1;     /* aiR
167c0 6f 77 4c 6f 67 45 73 74 20 76 61 6c 75 65 73 20  owLogEst values 
167d0 63 6f 6d 65 20 66 72 6f 6d 20 73 71 6c 69 74 65  come from sqlite
167e0 5f 73 74 61 74 31 20 2a 2f 0a 20 20 75 6e 73 69  _stat1 */.  unsi
167f0 67 6e 65 64 20 62 4e 6f 51 75 65 72 79 3a 31 3b  gned bNoQuery:1;
16800 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 75       /* Do not u
16810 73 65 20 74 68 69 73 20 69 6e 64 65 78 20 74 6f  se this index to
16820 20 6f 70 74 69 6d 69 7a 65 20 71 75 65 72 69 65   optimize querie
16830 73 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  s */.#ifdef SQLI
16840 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f  TE_ENABLE_STAT3_
16850 4f 52 5f 53 54 41 54 34 0a 20 20 69 6e 74 20 6e  OR_STAT4.  int n
16860 53 61 6d 70 6c 65 3b 20 20 20 20 20 20 20 20 20  Sample;         
16870 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
16880 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20 61 53 61   elements in aSa
16890 6d 70 6c 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  mple[] */.  int 
168a0 6e 53 61 6d 70 6c 65 43 6f 6c 3b 20 20 20 20 20  nSampleCol;     
168b0 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
168c0 49 6e 64 65 78 53 61 6d 70 6c 65 2e 61 6e 45 71  IndexSample.anEq
168d0 5b 5d 20 61 6e 64 20 73 6f 20 6f 6e 20 2a 2f 0a  [] and so on */.
168e0 20 20 74 52 6f 77 63 6e 74 20 2a 61 41 76 67 45    tRowcnt *aAvgE
168f0 71 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 76  q;         /* Av
16900 65 72 61 67 65 20 6e 45 71 20 76 61 6c 75 65 73  erage nEq values
16910 20 66 6f 72 20 6b 65 79 73 20 6e 6f 74 20 69 6e   for keys not in
16920 20 61 53 61 6d 70 6c 65 20 2a 2f 0a 20 20 49 6e   aSample */.  In
16930 64 65 78 53 61 6d 70 6c 65 20 2a 61 53 61 6d 70  dexSample *aSamp
16940 6c 65 3b 20 20 20 20 2f 2a 20 53 61 6d 70 6c 65  le;    /* Sample
16950 73 20 6f 66 20 74 68 65 20 6c 65 66 74 2d 6d 6f  s of the left-mo
16960 73 74 20 6b 65 79 20 2a 2f 0a 20 20 74 52 6f 77  st key */.  tRow
16970 63 6e 74 20 2a 61 69 52 6f 77 45 73 74 3b 20 20  cnt *aiRowEst;  
16980 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61       /* Non-loga
16990 72 69 74 68 6d 69 63 20 73 74 61 74 31 20 64 61  rithmic stat1 da
169a0 74 61 20 66 6f 72 20 74 68 69 73 20 69 6e 64 65  ta for this inde
169b0 78 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 6e  x */.  tRowcnt n
169c0 52 6f 77 45 73 74 30 3b 20 20 20 20 20 20 20 20  RowEst0;        
169d0 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d  /* Non-logarithm
169e0 69 63 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  ic number of row
169f0 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20 2a  s in the index *
16a00 2f 0a 23 65 6e 64 69 66 0a 20 20 42 69 74 6d 61  /.#endif.  Bitma
16a10 73 6b 20 63 6f 6c 4e 6f 74 49 64 78 65 64 3b 20  sk colNotIdxed; 
16a20 20 20 20 20 2f 2a 20 30 20 66 6f 72 20 75 6e 69      /* 0 for uni
16a30 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 73 20 69  ndexed columns i
16a40 6e 20 70 54 61 62 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  n pTab */.};../*
16a50 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
16a60 65 73 20 66 6f 72 20 49 6e 64 65 78 2e 69 64 78  es for Index.idx
16a70 54 79 70 65 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  Type.*/.#define 
16a80 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 41  SQLITE_IDXTYPE_A
16a90 50 50 44 45 46 20 20 20 20 20 20 30 20 20 20 2f  PPDEF      0   /
16aa0 2a 20 43 72 65 61 74 65 64 20 75 73 69 6e 67 20  * Created using 
16ab0 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a  CREATE INDEX */.
16ac0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49  #define SQLITE_I
16ad0 44 58 54 59 50 45 5f 55 4e 49 51 55 45 20 20 20  DXTYPE_UNIQUE   
16ae0 20 20 20 31 20 20 20 2f 2a 20 49 6d 70 6c 65 6d     1   /* Implem
16af0 65 6e 74 73 20 61 20 55 4e 49 51 55 45 20 63 6f  ents a UNIQUE co
16b00 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66  nstraint */.#def
16b10 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59  ine SQLITE_IDXTY
16b20 50 45 5f 50 52 49 4d 41 52 59 4b 45 59 20 20 32  PE_PRIMARYKEY  2
16b30 20 20 20 2f 2a 20 49 73 20 74 68 65 20 50 52 49     /* Is the PRI
16b40 4d 41 52 59 20 4b 45 59 20 66 6f 72 20 74 68 65  MARY KEY for the
16b50 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 20 52 65   table */../* Re
16b60 74 75 72 6e 20 74 72 75 65 20 69 66 20 69 6e 64  turn true if ind
16b70 65 78 20 58 20 69 73 20 61 20 50 52 49 4d 41 52  ex X is a PRIMAR
16b80 59 20 4b 45 59 20 69 6e 64 65 78 20 2a 2f 0a 23  Y KEY index */.#
16b90 64 65 66 69 6e 65 20 49 73 50 72 69 6d 61 72 79  define IsPrimary
16ba0 4b 65 79 49 6e 64 65 78 28 58 29 20 20 28 28 58  KeyIndex(X)  ((X
16bb0 29 2d 3e 69 64 78 54 79 70 65 3d 3d 53 51 4c 49  )->idxType==SQLI
16bc0 54 45 5f 49 44 58 54 59 50 45 5f 50 52 49 4d 41  TE_IDXTYPE_PRIMA
16bd0 52 59 4b 45 59 29 0a 0a 2f 2a 20 52 65 74 75 72  RYKEY)../* Retur
16be0 6e 20 74 72 75 65 20 69 66 20 69 6e 64 65 78 20  n true if index 
16bf0 58 20 69 73 20 61 20 55 4e 49 51 55 45 20 69 6e  X is a UNIQUE in
16c00 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  dex */.#define I
16c10 73 55 6e 69 71 75 65 49 6e 64 65 78 28 58 29 20  sUniqueIndex(X) 
16c20 20 20 20 20 20 28 28 58 29 2d 3e 6f 6e 45 72 72       ((X)->onErr
16c30 6f 72 21 3d 4f 45 5f 4e 6f 6e 65 29 0a 0a 2f 2a  or!=OE_None)../*
16c40 20 54 68 65 20 49 6e 64 65 78 2e 61 69 43 6f 6c   The Index.aiCol
16c50 75 6d 6e 5b 5d 20 76 61 6c 75 65 73 20 61 72 65  umn[] values are
16c60 20 6e 6f 72 6d 61 6c 6c 79 20 70 6f 73 69 74 69   normally positi
16c70 76 65 20 69 6e 74 65 67 65 72 2e 20 20 42 75 74  ve integer.  But
16c80 0a 2a 2a 20 74 68 65 72 65 20 61 72 65 20 73 6f  .** there are so
16c90 6d 65 20 6e 65 67 61 74 69 76 65 20 76 61 6c 75  me negative valu
16ca0 65 73 20 74 68 61 74 20 68 61 76 65 20 73 70 65  es that have spe
16cb0 63 69 61 6c 20 6d 65 61 6e 69 6e 67 3a 0a 2a 2f  cial meaning:.*/
16cc0 0a 23 64 65 66 69 6e 65 20 58 4e 5f 52 4f 57 49  .#define XN_ROWI
16cd0 44 20 20 20 20 20 28 2d 31 29 20 20 20 20 20 2f  D     (-1)     /
16ce0 2a 20 49 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e  * Indexed column
16cf0 20 69 73 20 74 68 65 20 72 6f 77 69 64 20 2a 2f   is the rowid */
16d00 0a 23 64 65 66 69 6e 65 20 58 4e 5f 45 58 50 52  .#define XN_EXPR
16d10 20 20 20 20 20 20 28 2d 32 29 20 20 20 20 20 2f        (-2)     /
16d20 2a 20 49 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e  * Indexed column
16d30 20 69 73 20 61 6e 20 65 78 70 72 65 73 73 69 6f   is an expressio
16d40 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  n */../*.** Each
16d50 20 73 61 6d 70 6c 65 20 73 74 6f 72 65 64 20 69   sample stored i
16d60 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61  n the sqlite_sta
16d70 74 33 20 74 61 62 6c 65 20 69 73 20 72 65 70 72  t3 table is repr
16d80 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72  esented in memor
16d90 79 0a 2a 2a 20 75 73 69 6e 67 20 61 20 73 74 72  y.** using a str
16da0 75 63 74 75 72 65 20 6f 66 20 74 68 69 73 20 74  ucture of this t
16db0 79 70 65 2e 20 20 53 65 65 20 64 6f 63 75 6d 65  ype.  See docume
16dc0 6e 74 61 74 69 6f 6e 20 61 74 20 74 68 65 20 74  ntation at the t
16dd0 6f 70 20 6f 66 20 74 68 65 0a 2a 2a 20 61 6e 61  op of the.** ana
16de0 6c 79 7a 65 2e 63 20 73 6f 75 72 63 65 20 66 69  lyze.c source fi
16df0 6c 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  le for additiona
16e00 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
16e10 2f 0a 73 74 72 75 63 74 20 49 6e 64 65 78 53 61  /.struct IndexSa
16e20 6d 70 6c 65 20 7b 0a 20 20 76 6f 69 64 20 2a 70  mple {.  void *p
16e30 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f  ;          /* Po
16e40 69 6e 74 65 72 20 74 6f 20 73 61 6d 70 6c 65 64  inter to sampled
16e50 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74   record */.  int
16e60 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f   n;            /
16e70 2a 20 53 69 7a 65 20 6f 66 20 72 65 63 6f 72 64  * Size of record
16e80 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 74   in bytes */.  t
16e90 52 6f 77 63 6e 74 20 2a 61 6e 45 71 3b 20 20 20  Rowcnt *anEq;   
16ea0 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20   /* Est. number 
16eb0 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20 74 68  of rows where th
16ec0 65 20 6b 65 79 20 65 71 75 61 6c 73 20 74 68 69  e key equals thi
16ed0 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52  s sample */.  tR
16ee0 6f 77 63 6e 74 20 2a 61 6e 4c 74 3b 20 20 20 20  owcnt *anLt;    
16ef0 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f  /* Est. number o
16f00 66 20 72 6f 77 73 20 77 68 65 72 65 20 6b 65 79  f rows where key
16f10 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68   is less than th
16f20 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74  is sample */.  t
16f30 52 6f 77 63 6e 74 20 2a 61 6e 44 4c 74 3b 20 20  Rowcnt *anDLt;  
16f40 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20   /* Est. number 
16f50 6f 66 20 64 69 73 74 69 6e 63 74 20 6b 65 79 73  of distinct keys
16f60 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73 20   less than this 
16f70 73 61 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  sample */.};../*
16f80 0a 2a 2a 20 45 61 63 68 20 74 6f 6b 65 6e 20 63  .** Each token c
16f90 6f 6d 69 6e 67 20 6f 75 74 20 6f 66 20 74 68 65  oming out of the
16fa0 20 6c 65 78 65 72 20 69 73 20 61 6e 20 69 6e 73   lexer is an ins
16fb0 74 61 6e 63 65 20 6f 66 0a 2a 2a 20 74 68 69 73  tance of.** this
16fc0 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 6f 6b   structure.  Tok
16fd0 65 6e 73 20 61 72 65 20 61 6c 73 6f 20 75 73 65  ens are also use
16fe0 64 20 61 73 20 70 61 72 74 20 6f 66 20 61 6e 20  d as part of an 
16ff0 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2a 0a 2a  expression..**.*
17000 2a 20 4e 6f 74 65 20 69 66 20 54 6f 6b 65 6e 2e  * Note if Token.
17010 7a 3d 3d 30 20 74 68 65 6e 20 54 6f 6b 65 6e 2e  z==0 then Token.
17020 64 79 6e 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20  dyn and Token.n 
17030 61 72 65 20 75 6e 64 65 66 69 6e 65 64 20 61 6e  are undefined an
17040 64 0a 2a 2a 20 6d 61 79 20 63 6f 6e 74 61 69 6e  d.** may contain
17050 20 72 61 6e 64 6f 6d 20 76 61 6c 75 65 73 2e 20   random values. 
17060 20 44 6f 20 6e 6f 74 20 6d 61 6b 65 20 61 6e 79   Do not make any
17070 20 61 73 73 75 6d 70 74 69 6f 6e 73 20 61 62 6f   assumptions abo
17080 75 74 20 54 6f 6b 65 6e 2e 64 79 6e 0a 2a 2a 20  ut Token.dyn.** 
17090 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 77 68 65 6e  and Token.n when
170a0 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 2e 0a 2a 2f 0a   Token.z==0..*/.
170b0 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 7b 0a 20  struct Token {. 
170c0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 3b 20   const char *z; 
170d0 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 74      /* Text of t
170e0 68 65 20 74 6f 6b 65 6e 2e 20 20 4e 6f 74 20 4e  he token.  Not N
170f0 55 4c 4c 2d 74 65 72 6d 69 6e 61 74 65 64 21 20  ULL-terminated! 
17100 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e  */.  unsigned in
17110 74 20 6e 3b 20 20 20 20 2f 2a 20 4e 75 6d 62 65  t n;    /* Numbe
17120 72 20 6f 66 20 63 68 61 72 61 63 74 65 72 73 20  r of characters 
17130 69 6e 20 74 68 69 73 20 74 6f 6b 65 6e 20 2a 2f  in this token */
17140 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  .};../*.** An in
17150 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73  stance of this s
17160 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e  tructure contain
17170 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65  s information ne
17180 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65  eded to generate
17190 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 61 20 53  .** code for a S
171a0 45 4c 45 43 54 20 74 68 61 74 20 63 6f 6e 74 61  ELECT that conta
171b0 69 6e 73 20 61 67 67 72 65 67 61 74 65 20 66 75  ins aggregate fu
171c0 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49  nctions..**.** I
171d0 66 20 45 78 70 72 2e 6f 70 3d 3d 54 4b 5f 41 47  f Expr.op==TK_AG
171e0 47 5f 43 4f 4c 55 4d 4e 20 6f 72 20 54 4b 5f 41  G_COLUMN or TK_A
171f0 47 47 5f 46 55 4e 43 54 49 4f 4e 20 74 68 65 6e  GG_FUNCTION then
17200 20 45 78 70 72 2e 70 41 67 67 49 6e 66 6f 20 69   Expr.pAggInfo i
17210 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74  s a.** pointer t
17220 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  o this structure
17230 2e 20 20 54 68 65 20 45 78 70 72 2e 69 43 6f 6c  .  The Expr.iCol
17240 75 6d 6e 20 66 69 65 6c 64 20 69 73 20 74 68 65  umn field is the
17250 20 69 6e 64 65 78 20 69 6e 0a 2a 2a 20 41 67 67   index in.** Agg
17260 49 6e 66 6f 2e 61 43 6f 6c 5b 5d 20 6f 72 20 41  Info.aCol[] or A
17270 67 67 49 6e 66 6f 2e 61 46 75 6e 63 5b 5d 20 6f  ggInfo.aFunc[] o
17280 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65  f information ne
17290 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65  eded to generate
172a0 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 74 68 61  .** code for tha
172b0 74 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 67  t node..**.** Ag
172c0 67 49 6e 66 6f 2e 70 47 72 6f 75 70 42 79 20 61  gInfo.pGroupBy a
172d0 6e 64 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63  nd AggInfo.aFunc
172e0 2e 70 45 78 70 72 20 70 6f 69 6e 74 20 74 6f 20  .pExpr point to 
172f0 66 69 65 6c 64 73 20 77 69 74 68 69 6e 20 74 68  fields within th
17300 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 53 65  e.** original Se
17310 6c 65 63 74 20 73 74 72 75 63 74 75 72 65 20 74  lect structure t
17320 68 61 74 20 64 65 73 63 72 69 62 65 73 20 74 68  hat describes th
17330 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
17340 6e 74 2e 20 20 54 68 65 73 65 0a 2a 2a 20 66 69  nt.  These.** fi
17350 65 6c 64 73 20 64 6f 20 6e 6f 74 20 6e 65 65 64  elds do not need
17360 20 74 6f 20 62 65 20 66 72 65 65 64 20 77 68 65   to be freed whe
17370 6e 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74  n deallocating t
17380 68 65 20 41 67 67 49 6e 66 6f 20 73 74 72 75 63  he AggInfo struc
17390 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ture..*/.struct 
173a0 41 67 67 49 6e 66 6f 20 7b 0a 20 20 75 38 20 64  AggInfo {.  u8 d
173b0 69 72 65 63 74 4d 6f 64 65 3b 20 20 20 20 20 20  irectMode;      
173c0 20 20 20 20 2f 2a 20 44 69 72 65 63 74 20 72 65      /* Direct re
173d0 6e 64 65 72 69 6e 67 20 6d 6f 64 65 20 6d 65 61  ndering mode mea
173e0 6e 73 20 74 61 6b 65 20 64 61 74 61 20 64 69 72  ns take data dir
173f0 65 63 74 6c 79 0a 20 20 20 20 20 20 20 20 20 20  ectly.          
17400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17410 2a 2a 20 66 72 6f 6d 20 73 6f 75 72 63 65 20 74  ** from source t
17420 61 62 6c 65 73 20 72 61 74 68 65 72 20 74 68 61  ables rather tha
17430 6e 20 66 72 6f 6d 20 61 63 63 75 6d 75 6c 61 74  n from accumulat
17440 6f 72 73 20 2a 2f 0a 20 20 75 38 20 75 73 65 53  ors */.  u8 useS
17450 6f 72 74 69 6e 67 49 64 78 3b 20 20 20 20 20 20  ortingIdx;      
17460 20 2f 2a 20 49 6e 20 64 69 72 65 63 74 20 6d 6f   /* In direct mo
17470 64 65 2c 20 72 65 66 65 72 65 6e 63 65 20 74 68  de, reference th
17480 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20  e sorting index 
17490 72 61 74 68 65 72 0a 20 20 20 20 20 20 20 20 20  rather.         
174a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
174b0 20 2a 2a 20 74 68 61 6e 20 74 68 65 20 73 6f 75   ** than the sou
174c0 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69  rce table */.  i
174d0 6e 74 20 73 6f 72 74 69 6e 67 49 64 78 3b 20 20  nt sortingIdx;  
174e0 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72         /* Cursor
174f0 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 73   number of the s
17500 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a  orting index */.
17510 20 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64 78    int sortingIdx
17520 50 54 61 62 3b 20 20 20 20 20 2f 2a 20 43 75 72  PTab;     /* Cur
17530 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 70 73  sor number of ps
17540 65 75 64 6f 2d 74 61 62 6c 65 20 2a 2f 0a 20 20  eudo-table */.  
17550 69 6e 74 20 6e 53 6f 72 74 69 6e 67 43 6f 6c 75  int nSortingColu
17560 6d 6e 3b 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  mn;     /* Numbe
17570 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
17580 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65  the sorting inde
17590 78 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 67  x */.  int mnReg
175a0 2c 20 6d 78 52 65 67 3b 20 20 20 20 20 20 20 2f  , mxReg;       /
175b0 2a 20 52 61 6e 67 65 20 6f 66 20 72 65 67 69 73  * Range of regis
175c0 74 65 72 73 20 61 6c 6c 6f 63 61 74 65 64 20 66  ters allocated f
175d0 6f 72 20 61 43 6f 6c 20 61 6e 64 20 61 46 75 6e  or aCol and aFun
175e0 63 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  c */.  ExprList 
175f0 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20 20 2f  *pGroupBy;     /
17600 2a 20 54 68 65 20 67 72 6f 75 70 20 62 79 20 63  * The group by c
17610 6c 61 75 73 65 20 2a 2f 0a 20 20 73 74 72 75 63  lause */.  struc
17620 74 20 41 67 67 49 6e 66 6f 5f 63 6f 6c 20 7b 20  t AggInfo_col { 
17630 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 63     /* For each c
17640 6f 6c 75 6d 6e 20 75 73 65 64 20 69 6e 20 73 6f  olumn used in so
17650 75 72 63 65 20 74 61 62 6c 65 73 20 2a 2f 0a 20  urce tables */. 
17660 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20     Table *pTab; 
17670 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
17680 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20  ource table */. 
17690 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20     int iTable;  
176a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
176b0 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20  ursor number of 
176c0 74 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65  the source table
176d0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43 6f 6c   */.    int iCol
176e0 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  umn;            
176f0 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65   /* Column numbe
17700 72 20 77 69 74 68 69 6e 20 74 68 65 20 73 6f 75  r within the sou
17710 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20  rce table */.   
17720 20 69 6e 74 20 69 53 6f 72 74 65 72 43 6f 6c 75   int iSorterColu
17730 6d 6e 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c  mn;       /* Col
17740 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20 74 68  umn number in th
17750 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20  e sorting index 
17760 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b  */.    int iMem;
17770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17780 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69  /* Memory locati
17790 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61 73 20  on that acts as 
177a0 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20  accumulator */. 
177b0 20 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20     Expr *pExpr; 
177c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
177d0 68 65 20 6f 72 69 67 69 6e 61 6c 20 65 78 70 72  he original expr
177e0 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 7d 20 2a 61  ession */.  } *a
177f0 43 6f 6c 3b 0a 20 20 69 6e 74 20 6e 43 6f 6c 75  Col;.  int nColu
17800 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  mn;            /
17810 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73 65 64  * Number of used
17820 20 65 6e 74 72 69 65 73 20 69 6e 20 61 43 6f 6c   entries in aCol
17830 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 63 63  [] */.  int nAcc
17840 75 6d 75 6c 61 74 6f 72 3b 20 20 20 20 20 20 20  umulator;       
17850 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
17860 75 6d 6e 73 20 74 68 61 74 20 73 68 6f 77 20 74  umns that show t
17870 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6f 75  hrough to the ou
17880 74 70 75 74 2e 0a 20 20 20 20 20 20 20 20 20 20  tput..          
17890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
178a0 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20 63 6f  ** Additional co
178b0 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64 20 6f  lumns are used o
178c0 6e 6c 79 20 61 73 20 70 61 72 61 6d 65 74 65 72  nly as parameter
178d0 73 20 74 6f 0a 20 20 20 20 20 20 20 20 20 20 20  s to.           
178e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
178f0 2a 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  * aggregate func
17900 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63  tions */.  struc
17910 74 20 41 67 67 49 6e 66 6f 5f 66 75 6e 63 20 7b  t AggInfo_func {
17920 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 61     /* For each a
17930 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
17940 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70  n */.    Expr *p
17950 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20  Expr;           
17960 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20    /* Expression 
17970 65 6e 63 6f 64 69 6e 67 20 74 68 65 20 66 75 6e  encoding the fun
17980 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 46 75 6e  ction */.    Fun
17990 63 44 65 66 20 2a 70 46 75 6e 63 3b 20 20 20 20  cDef *pFunc;    
179a0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 67 67        /* The agg
179b0 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20  regate function 
179c0 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a  implementation *
179d0 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20  /.    int iMem; 
179e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
179f0 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f  * Memory locatio
17a00 6e 20 74 68 61 74 20 61 63 74 73 20 61 73 20 61  n that acts as a
17a10 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20  ccumulator */.  
17a20 20 20 69 6e 74 20 69 44 69 73 74 69 6e 63 74 3b    int iDistinct;
17a30 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 70             /* Ep
17a40 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 75 73  hemeral table us
17a50 65 64 20 74 6f 20 65 6e 66 6f 72 63 65 20 44 49  ed to enforce DI
17a60 53 54 49 4e 43 54 20 2a 2f 0a 20 20 7d 20 2a 61  STINCT */.  } *a
17a70 46 75 6e 63 3b 0a 20 20 69 6e 74 20 6e 46 75 6e  Func;.  int nFun
17a80 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
17a90 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74  /* Number of ent
17aa0 72 69 65 73 20 69 6e 20 61 46 75 6e 63 5b 5d 20  ries in aFunc[] 
17ab0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
17ac0 20 64 61 74 61 74 79 70 65 20 79 6e 56 61 72 20   datatype ynVar 
17ad0 69 73 20 61 20 73 69 67 6e 65 64 20 69 6e 74 65  is a signed inte
17ae0 67 65 72 2c 20 65 69 74 68 65 72 20 31 36 2d 62  ger, either 16-b
17af0 69 74 20 6f 72 20 33 32 2d 62 69 74 2e 0a 2a 2a  it or 32-bit..**
17b00 20 55 73 75 61 6c 6c 79 20 69 74 20 69 73 20 31   Usually it is 1
17b10 36 2d 62 69 74 73 2e 20 20 42 75 74 20 69 66 20  6-bits.  But if 
17b20 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41  SQLITE_MAX_VARIA
17b30 42 4c 45 5f 4e 55 4d 42 45 52 20 69 73 20 67 72  BLE_NUMBER is gr
17b40 65 61 74 65 72 0a 2a 2a 20 74 68 61 6e 20 33 32  eater.** than 32
17b50 37 36 37 20 77 65 20 68 61 76 65 20 74 6f 20 6d  767 we have to m
17b60 61 6b 65 20 69 74 20 33 32 2d 62 69 74 2e 20 20  ake it 32-bit.  
17b70 31 36 2d 62 69 74 20 69 73 20 70 72 65 66 65 72  16-bit is prefer
17b80 72 65 64 20 62 65 63 61 75 73 65 0a 2a 2a 20 69  red because.** i
17b90 74 20 75 73 65 73 20 6c 65 73 73 20 6d 65 6d 6f  t uses less memo
17ba0 72 79 20 69 6e 20 74 68 65 20 45 78 70 72 20 6f  ry in the Expr o
17bb0 62 6a 65 63 74 2c 20 77 68 69 63 68 20 69 73 20  bject, which is 
17bc0 61 20 62 69 67 20 6d 65 6d 6f 72 79 20 75 73 65  a big memory use
17bd0 72 0a 2a 2a 20 69 6e 20 73 79 73 74 65 6d 73 20  r.** in systems 
17be0 77 69 74 68 20 6c 6f 74 73 20 6f 66 20 70 72 65  with lots of pre
17bf0 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73  pared statements
17c00 2e 20 20 41 6e 64 20 66 65 77 20 61 70 70 6c 69  .  And few appli
17c10 63 61 74 69 6f 6e 73 0a 2a 2a 20 6e 65 65 64 20  cations.** need 
17c20 6d 6f 72 65 20 74 68 61 6e 20 61 62 6f 75 74 20  more than about 
17c30 31 30 20 6f 72 20 32 30 20 76 61 72 69 61 62 6c  10 or 20 variabl
17c40 65 73 2e 20 20 42 75 74 20 73 6f 6d 65 20 65 78  es.  But some ex
17c50 74 72 65 6d 65 20 75 73 65 72 73 20 77 61 6e 74  treme users want
17c60 0a 2a 2a 20 74 6f 20 68 61 76 65 20 70 72 65 70  .** to have prep
17c70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20  ared statements 
17c80 77 69 74 68 20 6f 76 65 72 20 33 32 37 36 37 20  with over 32767 
17c90 76 61 72 69 61 62 6c 65 73 2c 20 61 6e 64 20 66  variables, and f
17ca0 6f 72 20 74 68 65 6d 0a 2a 2a 20 74 68 65 20 6f  or them.** the o
17cb0 70 74 69 6f 6e 20 69 73 20 61 76 61 69 6c 61 62  ption is availab
17cc0 6c 65 20 28 61 74 20 63 6f 6d 70 69 6c 65 2d 74  le (at compile-t
17cd0 69 6d 65 29 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c  ime)..*/.#if SQL
17ce0 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45  ITE_MAX_VARIABLE
17cf0 5f 4e 55 4d 42 45 52 3c 3d 33 32 37 36 37 0a 74  _NUMBER<=32767.t
17d00 79 70 65 64 65 66 20 69 31 36 20 79 6e 56 61 72  ypedef i16 ynVar
17d10 3b 0a 23 65 6c 73 65 0a 74 79 70 65 64 65 66 20  ;.#else.typedef 
17d20 69 6e 74 20 79 6e 56 61 72 3b 0a 23 65 6e 64 69  int ynVar;.#endi
17d30 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 6e 6f  f../*.** Each no
17d40 64 65 20 6f 66 20 61 6e 20 65 78 70 72 65 73 73  de of an express
17d50 69 6f 6e 20 69 6e 20 74 68 65 20 70 61 72 73 65  ion in the parse
17d60 20 74 72 65 65 20 69 73 20 61 6e 20 69 6e 73 74   tree is an inst
17d70 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20  ance.** of this 
17d80 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a  structure..**.**
17d90 20 45 78 70 72 2e 6f 70 20 69 73 20 74 68 65 20   Expr.op is the 
17da0 6f 70 63 6f 64 65 2e 20 54 68 65 20 69 6e 74 65  opcode. The inte
17db0 67 65 72 20 70 61 72 73 65 72 20 74 6f 6b 65 6e  ger parser token
17dc0 20 63 6f 64 65 73 20 61 72 65 20 72 65 75 73 65   codes are reuse
17dd0 64 0a 2a 2a 20 61 73 20 6f 70 63 6f 64 65 73 20  d.** as opcodes 
17de0 68 65 72 65 2e 20 46 6f 72 20 65 78 61 6d 70 6c  here. For exampl
17df0 65 2c 20 74 68 65 20 70 61 72 73 65 72 20 64 65  e, the parser de
17e00 66 69 6e 65 73 20 54 4b 5f 47 45 20 74 6f 20 62  fines TK_GE to b
17e10 65 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20  e an integer.** 
17e20 63 6f 64 65 20 72 65 70 72 65 73 65 6e 74 69 6e  code representin
17e30 67 20 74 68 65 20 22 3e 3d 22 20 6f 70 65 72 61  g the ">=" opera
17e40 74 6f 72 2e 20 54 68 69 73 20 73 61 6d 65 20 69  tor. This same i
17e50 6e 74 65 67 65 72 20 63 6f 64 65 20 69 73 20 72  nteger code is r
17e60 65 75 73 65 64 0a 2a 2a 20 74 6f 20 72 65 70 72  eused.** to repr
17e70 65 73 65 6e 74 20 74 68 65 20 67 72 65 61 74 65  esent the greate
17e80 72 2d 74 68 61 6e 2d 6f 72 2d 65 71 75 61 6c 2d  r-than-or-equal-
17e90 74 6f 20 6f 70 65 72 61 74 6f 72 20 69 6e 20 74  to operator in t
17ea0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 0a 2a 2a  he expression.**
17eb0 20 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   tree..**.** If 
17ec0 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
17ed0 73 20 61 6e 20 53 51 4c 20 6c 69 74 65 72 61 6c  s an SQL literal
17ee0 20 28 54 4b 5f 49 4e 54 45 47 45 52 2c 20 54 4b   (TK_INTEGER, TK
17ef0 5f 46 4c 4f 41 54 2c 20 54 4b 5f 42 4c 4f 42 2c  _FLOAT, TK_BLOB,
17f00 0a 2a 2a 20 6f 72 20 54 4b 5f 53 54 52 49 4e 47  .** or TK_STRING
17f10 29 2c 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b  ), then Expr.tok
17f20 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  en contains the 
17f30 74 65 78 74 20 6f 66 20 74 68 65 20 53 51 4c 20  text of the SQL 
17f40 6c 69 74 65 72 61 6c 2e 20 49 66 0a 2a 2a 20 74  literal. If.** t
17f50 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
17f60 20 61 20 76 61 72 69 61 62 6c 65 20 28 54 4b 5f   a variable (TK_
17f70 56 41 52 49 41 42 4c 45 29 2c 20 74 68 65 6e 20  VARIABLE), then 
17f80 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61  Expr.token conta
17f90 69 6e 73 20 74 68 65 0a 2a 2a 20 76 61 72 69 61  ins the.** varia
17fa0 62 6c 65 20 6e 61 6d 65 2e 20 46 69 6e 61 6c 6c  ble name. Finall
17fb0 79 2c 20 69 66 20 74 68 65 20 65 78 70 72 65 73  y, if the expres
17fc0 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 66  sion is an SQL f
17fd0 75 6e 63 74 69 6f 6e 20 28 54 4b 5f 46 55 4e 43  unction (TK_FUNC
17fe0 54 49 4f 4e 29 2c 0a 2a 2a 20 74 68 65 6e 20 45  TION),.** then E
17ff0 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69  xpr.token contai
18000 6e 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  ns the name of t
18010 68 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a  he function..**.
18020 2a 2a 20 45 78 70 72 2e 70 52 69 67 68 74 20 61  ** Expr.pRight a
18030 6e 64 20 45 78 70 72 2e 70 4c 65 66 74 20 61 72  nd Expr.pLeft ar
18040 65 20 74 68 65 20 6c 65 66 74 20 61 6e 64 20 72  e the left and r
18050 69 67 68 74 20 73 75 62 65 78 70 72 65 73 73 69  ight subexpressi
18060 6f 6e 73 20 6f 66 20 61 0a 2a 2a 20 62 69 6e 61  ons of a.** bina
18070 72 79 20 6f 70 65 72 61 74 6f 72 2e 20 45 69 74  ry operator. Eit
18080 68 65 72 20 6f 72 20 62 6f 74 68 20 6d 61 79 20  her or both may 
18090 62 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 45  be NULL..**.** E
180a0 78 70 72 2e 78 2e 70 4c 69 73 74 20 69 73 20 61  xpr.x.pList is a
180b0 20 6c 69 73 74 20 6f 66 20 61 72 67 75 6d 65 6e   list of argumen
180c0 74 73 20 69 66 20 74 68 65 20 65 78 70 72 65 73  ts if the expres
180d0 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 66  sion is an SQL f
180e0 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 61 20 43 41  unction,.** a CA
180f0 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 72  SE expression or
18100 20 61 6e 20 49 4e 20 65 78 70 72 65 73 73 69 6f   an IN expressio
18110 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 3c  n of the form "<
18120 6c 68 73 3e 20 49 4e 20 28 3c 79 3e 2c 20 3c 7a  lhs> IN (<y>, <z
18130 3e 2e 2e 2e 29 22 2e 0a 2a 2a 20 45 78 70 72 2e  >...)"..** Expr.
18140 78 2e 70 53 65 6c 65 63 74 20 69 73 20 75 73 65  x.pSelect is use
18150 64 20 69 66 20 74 68 65 20 65 78 70 72 65 73 73  d if the express
18160 69 6f 6e 20 69 73 20 61 20 73 75 62 2d 73 65 6c  ion is a sub-sel
18170 65 63 74 20 6f 72 20 61 6e 20 65 78 70 72 65 73  ect or an expres
18180 73 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 66  sion of.** the f
18190 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28 53  orm "<lhs> IN (S
181a0 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 20 49 66 20  ELECT ...)". If 
181b0 74 68 65 20 45 50 5f 78 49 73 53 65 6c 65 63 74  the EP_xIsSelect
181c0 20 62 69 74 20 69 73 20 73 65 74 20 69 6e 20 74   bit is set in t
181d0 68 65 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73  he.** Expr.flags
181e0 20 6d 61 73 6b 2c 20 74 68 65 6e 20 45 78 70 72   mask, then Expr
181f0 2e 78 2e 70 53 65 6c 65 63 74 20 69 73 20 76 61  .x.pSelect is va
18200 6c 69 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20  lid. Otherwise, 
18210 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 69 73 0a  Expr.x.pList is.
18220 2a 2a 20 76 61 6c 69 64 2e 0a 2a 2a 0a 2a 2a 20  ** valid..**.** 
18230 41 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66  An expression of
18240 20 74 68 65 20 66 6f 72 6d 20 49 44 20 6f 72 20   the form ID or 
18250 49 44 2e 49 44 20 72 65 66 65 72 73 20 74 6f 20  ID.ID refers to 
18260 61 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 74 61  a column in a ta
18270 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20 73 75 63 68  ble..** For such
18280 20 65 78 70 72 65 73 73 69 6f 6e 73 2c 20 45 78   expressions, Ex
18290 70 72 2e 6f 70 20 69 73 20 73 65 74 20 74 6f 20  pr.op is set to 
182a0 54 4b 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 45 78  TK_COLUMN and Ex
182b0 70 72 2e 69 54 61 62 6c 65 20 69 73 0a 2a 2a 20  pr.iTable is.** 
182c0 74 68 65 20 69 6e 74 65 67 65 72 20 63 75 72 73  the integer curs
182d0 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 61 20 56  or number of a V
182e0 44 42 45 20 63 75 72 73 6f 72 20 70 6f 69 6e 74  DBE cursor point
182f0 69 6e 67 20 74 6f 20 74 68 61 74 20 74 61 62 6c  ing to that tabl
18300 65 20 61 6e 64 0a 2a 2a 20 45 78 70 72 2e 69 43  e and.** Expr.iC
18310 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20 63 6f 6c  olumn is the col
18320 75 6d 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74  umn number for t
18330 68 65 20 73 70 65 63 69 66 69 63 20 63 6f 6c 75  he specific colu
18340 6d 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 65  mn.  If the.** e
18350 78 70 72 65 73 73 69 6f 6e 20 69 73 20 75 73 65  xpression is use
18360 64 20 61 73 20 61 20 72 65 73 75 6c 74 20 69 6e  d as a result in
18370 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 53 45   an aggregate SE
18380 4c 45 43 54 2c 20 74 68 65 6e 20 74 68 65 0a 2a  LECT, then the.*
18390 2a 20 76 61 6c 75 65 20 69 73 20 61 6c 73 6f 20  * value is also 
183a0 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 45 78  stored in the Ex
183b0 70 72 2e 69 41 67 67 20 63 6f 6c 75 6d 6e 20 69  pr.iAgg column i
183c0 6e 20 74 68 65 20 61 67 67 72 65 67 61 74 65 20  n the aggregate 
183d0 73 6f 20 74 68 61 74 0a 2a 2a 20 69 74 20 63 61  so that.** it ca
183e0 6e 20 62 65 20 61 63 63 65 73 73 65 64 20 61 66  n be accessed af
183f0 74 65 72 20 61 6c 6c 20 61 67 67 72 65 67 61 74  ter all aggregat
18400 65 73 20 61 72 65 20 63 6f 6d 70 75 74 65 64 2e  es are computed.
18410 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78  .**.** If the ex
18420 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 75  pression is an u
18430 6e 62 6f 75 6e 64 20 76 61 72 69 61 62 6c 65 20  nbound variable 
18440 6d 61 72 6b 65 72 20 28 61 20 71 75 65 73 74 69  marker (a questi
18450 6f 6e 20 6d 61 72 6b 0a 2a 2a 20 63 68 61 72 61  on mark.** chara
18460 63 74 65 72 20 27 3f 27 20 69 6e 20 74 68 65 20  cter '?' in the 
18470 6f 72 69 67 69 6e 61 6c 20 53 51 4c 29 20 74 68  original SQL) th
18480 65 6e 20 74 68 65 20 45 78 70 72 2e 69 54 61 62  en the Expr.iTab
18490 6c 65 20 68 6f 6c 64 73 20 74 68 65 20 69 6e 64  le holds the ind
184a0 65 78 0a 2a 2a 20 6e 75 6d 62 65 72 20 66 6f 72  ex.** number for
184b0 20 74 68 61 74 20 76 61 72 69 61 62 6c 65 2e 0a   that variable..
184c0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70  **.** If the exp
184d0 72 65 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62  ression is a sub
184e0 71 75 65 72 79 20 74 68 65 6e 20 45 78 70 72 2e  query then Expr.
184f0 69 43 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 61 6e  iColumn holds an
18500 20 69 6e 74 65 67 65 72 0a 2a 2a 20 72 65 67 69   integer.** regi
18510 73 74 65 72 20 6e 75 6d 62 65 72 20 63 6f 6e 74  ster number cont
18520 61 69 6e 69 6e 67 20 74 68 65 20 72 65 73 75 6c  aining the resul
18530 74 20 6f 66 20 74 68 65 20 73 75 62 71 75 65 72  t of the subquer
18540 79 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 73 75  y.  If the.** su
18550 62 71 75 65 72 79 20 67 69 76 65 73 20 61 20 63  bquery gives a c
18560 6f 6e 73 74 61 6e 74 20 72 65 73 75 6c 74 2c 20  onstant result, 
18570 74 68 65 6e 20 69 54 61 62 6c 65 20 69 73 20 2d  then iTable is -
18580 31 2e 20 20 49 66 20 74 68 65 20 73 75 62 71 75  1.  If the subqu
18590 65 72 79 0a 2a 2a 20 67 69 76 65 73 20 61 20 64  ery.** gives a d
185a0 69 66 66 65 72 65 6e 74 20 61 6e 73 77 65 72 20  ifferent answer 
185b0 61 74 20 64 69 66 66 65 72 65 6e 74 20 74 69 6d  at different tim
185c0 65 73 20 64 75 72 69 6e 67 20 73 74 61 74 65 6d  es during statem
185d0 65 6e 74 20 70 72 6f 63 65 73 73 69 6e 67 0a 2a  ent processing.*
185e0 2a 20 74 68 65 6e 20 69 54 61 62 6c 65 20 69 73  * then iTable is
185f0 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20   the address of 
18600 61 20 73 75 62 72 6f 75 74 69 6e 65 20 74 68 61  a subroutine tha
18610 74 20 63 6f 6d 70 75 74 65 73 20 74 68 65 20 73  t computes the s
18620 75 62 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 49  ubquery..**.** I
18630 66 20 74 68 65 20 45 78 70 72 20 69 73 20 6f 66  f the Expr is of
18640 20 74 79 70 65 20 4f 50 5f 43 6f 6c 75 6d 6e 2c   type OP_Column,
18650 20 61 6e 64 20 74 68 65 20 74 61 62 6c 65 20 69   and the table i
18660 74 20 69 73 20 73 65 6c 65 63 74 69 6e 67 20 66  t is selecting f
18670 72 6f 6d 0a 2a 2a 20 69 73 20 61 20 64 69 73 6b  rom.** is a disk
18680 20 74 61 62 6c 65 20 6f 72 20 74 68 65 20 22 6f   table or the "o
18690 6c 64 2e 2a 22 20 70 73 65 75 64 6f 2d 74 61 62  ld.*" pseudo-tab
186a0 6c 65 2c 20 74 68 65 6e 20 70 54 61 62 20 70 6f  le, then pTab po
186b0 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20 63  ints to the.** c
186c0 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 61 62  orresponding tab
186d0 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 2e 0a 2a  le definition..*
186e0 2a 0a 2a 2a 20 41 4c 4c 4f 43 41 54 49 4f 4e 20  *.** ALLOCATION 
186f0 4e 4f 54 45 53 3a 0a 2a 2a 0a 2a 2a 20 45 78 70  NOTES:.**.** Exp
18700 72 20 6f 62 6a 65 63 74 73 20 63 61 6e 20 75 73  r objects can us
18710 65 20 61 20 6c 6f 74 20 6f 66 20 6d 65 6d 6f 72  e a lot of memor
18720 79 20 73 70 61 63 65 20 69 6e 20 64 61 74 61 62  y space in datab
18730 61 73 65 20 73 63 68 65 6d 61 2e 20 20 54 6f 0a  ase schema.  To.
18740 2a 2a 20 68 65 6c 70 20 72 65 64 75 63 65 20 6d  ** help reduce m
18750 65 6d 6f 72 79 20 72 65 71 75 69 72 65 6d 65 6e  emory requiremen
18760 74 73 2c 20 73 6f 6d 65 74 69 6d 65 73 20 61 6e  ts, sometimes an
18770 20 45 78 70 72 20 6f 62 6a 65 63 74 20 77 69 6c   Expr object wil
18780 6c 20 62 65 0a 2a 2a 20 74 72 75 6e 63 61 74 65  l be.** truncate
18790 64 2e 20 20 41 6e 64 20 74 6f 20 72 65 64 75 63  d.  And to reduc
187a0 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  e the number of 
187b0 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
187c0 6e 73 2c 20 73 6f 6d 65 74 69 6d 65 73 0a 2a 2a  ns, sometimes.**
187d0 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 45 78 70   two or more Exp
187e0 72 20 6f 62 6a 65 63 74 73 20 77 69 6c 6c 20 62  r objects will b
187f0 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 73 69  e stored in a si
18800 6e 67 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  ngle memory allo
18810 63 61 74 69 6f 6e 2c 0a 2a 2a 20 74 6f 67 65 74  cation,.** toget
18820 68 65 72 20 77 69 74 68 20 45 78 70 72 2e 7a 54  her with Expr.zT
18830 6f 6b 65 6e 20 73 74 72 69 6e 67 73 2e 0a 2a 2a  oken strings..**
18840 0a 2a 2a 20 49 66 20 74 68 65 20 45 50 5f 52 65  .** If the EP_Re
18850 64 75 63 65 64 20 61 6e 64 20 45 50 5f 54 6f 6b  duced and EP_Tok
18860 65 6e 4f 6e 6c 79 20 66 6c 61 67 73 20 61 72 65  enOnly flags are
18870 20 73 65 74 20 77 68 65 6e 0a 2a 2a 20 61 6e 20   set when.** an 
18880 45 78 70 72 20 6f 62 6a 65 63 74 20 69 73 20 74  Expr object is t
18890 72 75 6e 63 61 74 65 64 2e 20 20 57 68 65 6e 20  runcated.  When 
188a0 45 50 5f 52 65 64 75 63 65 64 20 69 73 20 73 65  EP_Reduced is se
188b0 74 2c 20 74 68 65 6e 20 61 6c 6c 0a 2a 2a 20 74  t, then all.** t
188c0 68 65 20 63 68 69 6c 64 20 45 78 70 72 20 6f 62  he child Expr ob
188d0 6a 65 63 74 73 20 69 6e 20 74 68 65 20 45 78 70  jects in the Exp
188e0 72 2e 70 4c 65 66 74 20 61 6e 64 20 45 78 70 72  r.pLeft and Expr
188f0 2e 70 52 69 67 68 74 20 73 75 62 74 72 65 65 73  .pRight subtrees
18900 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 61 69 6e 65  .** are containe
18910 64 20 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d  d within the sam
18920 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  e memory allocat
18930 69 6f 6e 2e 20 20 4e 6f 74 65 2c 20 68 6f 77 65  ion.  Note, howe
18940 76 65 72 2c 20 74 68 61 74 0a 2a 2a 20 74 68 65  ver, that.** the
18950 20 73 75 62 74 72 65 65 73 20 69 6e 20 45 78 70   subtrees in Exp
18960 72 2e 78 2e 70 4c 69 73 74 20 6f 72 20 45 78 70  r.x.pList or Exp
18970 72 2e 78 2e 70 53 65 6c 65 63 74 20 61 72 65 20  r.x.pSelect are 
18980 61 6c 77 61 79 73 20 73 65 70 61 72 61 74 65 6c  always separatel
18990 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20  y.** allocated, 
189a0 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68  regardless of wh
189b0 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 45 50 5f  ether or not EP_
189c0 52 65 64 75 63 65 64 20 69 73 20 73 65 74 2e 0a  Reduced is set..
189d0 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72 20 7b  */.struct Expr {
189e0 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20  .  u8 op;       
189f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 65            /* Ope
18a00 72 61 74 69 6f 6e 20 70 65 72 66 6f 72 6d 65 64  ration performed
18a10 20 62 79 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f   by this node */
18a20 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79  .  char affinity
18a30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
18a40 20 61 66 66 69 6e 69 74 79 20 6f 66 20 74 68 65   affinity of the
18a50 20 63 6f 6c 75 6d 6e 20 6f 72 20 30 20 69 66 20   column or 0 if 
18a60 6e 6f 74 20 61 20 63 6f 6c 75 6d 6e 20 2a 2f 0a  not a column */.
18a70 20 20 75 33 32 20 66 6c 61 67 73 3b 20 20 20 20    u32 flags;    
18a80 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 72 69           /* Vari
18a90 6f 75 73 20 66 6c 61 67 73 2e 20 20 45 50 5f 2a  ous flags.  EP_*
18aa0 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20   See below */.  
18ab0 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 63 68 61 72  union {.    char
18ac0 20 2a 7a 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20   *zToken;       
18ad0 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 76 61 6c 75     /* Token valu
18ae0 65 2e 20 5a 65 72 6f 20 74 65 72 6d 69 6e 61 74  e. Zero terminat
18af0 65 64 20 61 6e 64 20 64 65 71 75 6f 74 65 64 20  ed and dequoted 
18b00 2a 2f 0a 20 20 20 20 69 6e 74 20 69 56 61 6c 75  */.    int iValu
18b10 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
18b20 20 4e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 69 6e   Non-negative in
18b30 74 65 67 65 72 20 76 61 6c 75 65 20 69 66 20 45  teger value if E
18b40 50 5f 49 6e 74 56 61 6c 75 65 20 2a 2f 0a 20 20  P_IntValue */.  
18b50 7d 20 75 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68  } u;..  /* If th
18b60 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66  e EP_TokenOnly f
18b70 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 74 68  lag is set in th
18b80 65 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73  e Expr.flags mas
18b90 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20  k, then no.  ** 
18ba0 73 70 61 63 65 20 69 73 20 61 6c 6c 6f 63 61 74  space is allocat
18bb0 65 64 20 66 6f 72 20 74 68 65 20 66 69 65 6c 64  ed for the field
18bc0 73 20 62 65 6c 6f 77 20 74 68 69 73 20 70 6f 69  s below this poi
18bd0 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 74  nt. An attempt t
18be0 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73 20 74 68  o.  ** access th
18bf0 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69  em will result i
18c00 6e 20 61 20 73 65 67 66 61 75 6c 74 20 6f 72 20  n a segfault or 
18c10 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a  malfunction..  *
18c20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18c30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18c40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18c50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18c60 2a 2a 2a 2a 2f 0a 0a 20 20 45 78 70 72 20 2a 70  ****/..  Expr *p
18c70 4c 65 66 74 3b 20 20 20 20 20 20 20 20 20 20 20  Left;           
18c80 2f 2a 20 4c 65 66 74 20 73 75 62 6e 6f 64 65 20  /* Left subnode 
18c90 2a 2f 0a 20 20 45 78 70 72 20 2a 70 52 69 67 68  */.  Expr *pRigh
18ca0 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52  t;          /* R
18cb0 69 67 68 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a  ight subnode */.
18cc0 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 45 78    union {.    Ex
18cd0 70 72 4c 69 73 74 20 2a 70 4c 69 73 74 3b 20 20  prList *pList;  
18ce0 20 20 20 2f 2a 20 6f 70 20 3d 20 49 4e 2c 20 45     /* op = IN, E
18cf0 58 49 53 54 53 2c 20 53 45 4c 45 43 54 2c 20 43  XISTS, SELECT, C
18d00 41 53 45 2c 20 46 55 4e 43 54 49 4f 4e 2c 20 42  ASE, FUNCTION, B
18d10 45 54 57 45 45 4e 20 2a 2f 0a 20 20 20 20 53 65  ETWEEN */.    Se
18d20 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20  lect *pSelect;  
18d30 20 20 20 2f 2a 20 45 50 5f 78 49 73 53 65 6c 65     /* EP_xIsSele
18d40 63 74 20 61 6e 64 20 6f 70 20 3d 20 49 4e 2c 20  ct and op = IN, 
18d50 45 58 49 53 54 53 2c 20 53 45 4c 45 43 54 20 2a  EXISTS, SELECT *
18d60 2f 0a 20 20 7d 20 78 3b 0a 0a 20 20 2f 2a 20 49  /.  } x;..  /* I
18d70 66 20 74 68 65 20 45 50 5f 52 65 64 75 63 65 64  f the EP_Reduced
18d80 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20   flag is set in 
18d90 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20 6d  the Expr.flags m
18da0 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a  ask, then no.  *
18db0 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c 6f 63  * space is alloc
18dc0 61 74 65 64 20 66 6f 72 20 74 68 65 20 66 69 65  ated for the fie
18dd0 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73 20 70  lds below this p
18de0 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70 74  oint. An attempt
18df0 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73 20   to.  ** access 
18e00 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74  them will result
18e10 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74 20 6f   in a segfault o
18e20 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20  r malfunction.. 
18e30 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   ***************
18e40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18e50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18e60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18e70 2a 2a 2a 2a 2a 2a 2f 0a 0a 23 69 66 20 53 51 4c  ******/..#if SQL
18e80 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50  ITE_MAX_EXPR_DEP
18e90 54 48 3e 30 0a 20 20 69 6e 74 20 6e 48 65 69 67  TH>0.  int nHeig
18ea0 68 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ht;           /*
18eb0 20 48 65 69 67 68 74 20 6f 66 20 74 68 65 20 74   Height of the t
18ec0 72 65 65 20 68 65 61 64 65 64 20 62 79 20 74 68  ree headed by th
18ed0 69 73 20 6e 6f 64 65 20 2a 2f 0a 23 65 6e 64 69  is node */.#endi
18ee0 66 0a 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20  f.  int iTable; 
18ef0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b             /* TK
18f00 5f 43 4f 4c 55 4d 4e 3a 20 63 75 72 73 6f 72 20  _COLUMN: cursor 
18f10 6e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 20  number of table 
18f20 68 6f 6c 64 69 6e 67 20 63 6f 6c 75 6d 6e 0a 20  holding column. 
18f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f40 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 52 45          ** TK_RE
18f50 47 49 53 54 45 52 3a 20 72 65 67 69 73 74 65 72  GISTER: register
18f60 20 6e 75 6d 62 65 72 0a 20 20 20 20 20 20 20 20   number.        
18f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f80 20 2a 2a 20 54 4b 5f 54 52 49 47 47 45 52 3a 20   ** TK_TRIGGER: 
18f90 31 20 2d 3e 20 6e 65 77 2c 20 30 20 2d 3e 20 6f  1 -> new, 0 -> o
18fa0 6c 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ld.             
18fb0 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 45              ** E
18fc0 50 5f 55 6e 6c 69 6b 65 6c 79 3a 20 20 31 33 34  P_Unlikely:  134
18fd0 32 31 37 37 32 38 20 74 69 6d 65 73 20 6c 69 6b  217728 times lik
18fe0 65 6c 69 68 6f 6f 64 0a 20 20 20 20 20 20 20 20  elihood.        
18ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19000 20 2a 2a 20 54 4b 5f 53 45 4c 45 43 54 3a 20 31   ** TK_SELECT: 1
19010 73 74 20 72 65 67 69 73 74 65 72 20 6f 66 20 72  st register of r
19020 65 73 75 6c 74 20 76 65 63 74 6f 72 20 2a 2f 0a  esult vector */.
19030 20 20 79 6e 56 61 72 20 69 43 6f 6c 75 6d 6e 3b    ynVar iColumn;
19040 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43           /* TK_C
19050 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 69 6e  OLUMN: column in
19060 64 65 78 2e 20 20 2d 31 20 66 6f 72 20 72 6f 77  dex.  -1 for row
19070 69 64 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20  id..            
19080 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
19090 54 4b 5f 56 41 52 49 41 42 4c 45 3a 20 76 61 72  TK_VARIABLE: var
190a0 69 61 62 6c 65 20 6e 75 6d 62 65 72 20 28 61 6c  iable number (al
190b0 77 61 79 73 20 3e 3d 20 31 29 2e 0a 20 20 20 20  ways >= 1)..    
190c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
190d0 20 20 20 20 20 2a 2a 20 54 4b 5f 53 45 4c 45 43       ** TK_SELEC
190e0 54 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e  T_COLUMN: column
190f0 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 76   of the result v
19100 65 63 74 6f 72 20 2a 2f 0a 20 20 69 31 36 20 69  ector */.  i16 i
19110 41 67 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Agg;            
19120 20 20 2f 2a 20 57 68 69 63 68 20 65 6e 74 72 79    /* Which entry
19130 20 69 6e 20 70 41 67 67 49 6e 66 6f 2d 3e 61 43   in pAggInfo->aC
19140 6f 6c 5b 5d 20 6f 72 20 2d 3e 61 46 75 6e 63 5b  ol[] or ->aFunc[
19150 5d 20 2a 2f 0a 20 20 69 31 36 20 69 52 69 67 68  ] */.  i16 iRigh
19160 74 4a 6f 69 6e 54 61 62 6c 65 3b 20 20 20 2f 2a  tJoinTable;   /*
19170 20 49 66 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 2c   If EP_FromJoin,
19180 20 74 68 65 20 72 69 67 68 74 20 74 61 62 6c 65   the right table
19190 20 6f 66 20 74 68 65 20 6a 6f 69 6e 20 2a 2f 0a   of the join */.
191a0 20 20 75 38 20 6f 70 32 3b 20 20 20 20 20 20 20    u8 op2;       
191b0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 52           /* TK_R
191c0 45 47 49 53 54 45 52 3a 20 6f 72 69 67 69 6e 61  EGISTER: origina
191d0 6c 20 76 61 6c 75 65 20 6f 66 20 45 78 70 72 2e  l value of Expr.
191e0 6f 70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  op.             
191f0 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54              ** T
19200 4b 5f 43 4f 4c 55 4d 4e 3a 20 74 68 65 20 76 61  K_COLUMN: the va
19210 6c 75 65 20 6f 66 20 70 35 20 66 6f 72 20 4f 50  lue of p5 for OP
19220 5f 43 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20  _Column.        
19230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19240 20 2a 2a 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54   ** TK_AGG_FUNCT
19250 49 4f 4e 3a 20 6e 65 73 74 69 6e 67 20 64 65 70  ION: nesting dep
19260 74 68 20 2a 2f 0a 20 20 41 67 67 49 6e 66 6f 20  th */.  AggInfo 
19270 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20 20 20 2f  *pAggInfo;     /
19280 2a 20 55 73 65 64 20 62 79 20 54 4b 5f 41 47 47  * Used by TK_AGG
19290 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 54 4b 5f 41  _COLUMN and TK_A
192a0 47 47 5f 46 55 4e 43 54 49 4f 4e 20 2a 2f 0a 20  GG_FUNCTION */. 
192b0 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20   Table *pTab;   
192c0 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65          /* Table
192d0 20 66 6f 72 20 54 4b 5f 43 4f 4c 55 4d 4e 20 65   for TK_COLUMN e
192e0 78 70 72 65 73 73 69 6f 6e 73 2e 20 20 43 61 6e  xpressions.  Can
192f0 20 62 65 20 4e 55 4c 4c 0a 20 20 20 20 20 20 20   be NULL.       
19300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19310 20 20 2a 2a 20 66 6f 72 20 61 20 63 6f 6c 75 6d    ** for a colum
19320 6e 20 6f 66 20 61 6e 20 69 6e 64 65 78 20 6f 6e  n of an index on
19330 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 2a   an expression *
19340 2f 0a 20 20 57 69 6e 64 6f 77 20 2a 70 57 69 6e  /.  Window *pWin
19350 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 69  ;          /* Wi
19360 6e 64 6f 77 20 64 65 66 69 6e 69 74 69 6f 6e 20  ndow definition 
19370 66 6f 72 20 77 69 6e 64 6f 77 20 66 75 6e 63 74  for window funct
19380 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ions */.};../*.*
19390 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
193a0 61 72 65 20 74 68 65 20 6d 65 61 6e 69 6e 67 73  are the meanings
193b0 20 6f 66 20 62 69 74 73 20 69 6e 20 74 68 65 20   of bits in the 
193c0 45 78 70 72 2e 66 6c 61 67 73 20 66 69 65 6c 64  Expr.flags field
193d0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  ..*/.#define EP_
193e0 46 72 6f 6d 4a 6f 69 6e 20 20 30 78 30 30 30 30  FromJoin  0x0000
193f0 30 31 20 2f 2a 20 4f 72 69 67 69 6e 61 74 65 73  01 /* Originates
19400 20 69 6e 20 4f 4e 2f 55 53 49 4e 47 20 63 6c 61   in ON/USING cla
19410 75 73 65 20 6f 66 20 6f 75 74 65 72 20 6a 6f 69  use of outer joi
19420 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  n */.#define EP_
19430 41 67 67 20 20 20 20 20 20 20 30 78 30 30 30 30  Agg       0x0000
19440 30 32 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 6f  02 /* Contains o
19450 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67 72 65  ne or more aggre
19460 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a  gate functions *
19470 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 48 61 73  /.#define EP_Has
19480 46 75 6e 63 20 20 20 30 78 30 30 30 30 30 34 20  Func   0x000004 
19490 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 6f 6e 65 20  /* Contains one 
194a0 6f 72 20 6d 6f 72 65 20 66 75 6e 63 74 69 6f 6e  or more function
194b0 73 20 6f 66 20 61 6e 79 20 6b 69 6e 64 20 2a 2f  s of any kind */
194c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
194d0 20 20 20 2f 2a 20 30 78 30 30 30 30 30 38 20 2f     /* 0x000008 /
194e0 2f 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20  / available for 
194f0 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  use */.#define E
19500 50 5f 44 69 73 74 69 6e 63 74 20 20 30 78 30 30  P_Distinct  0x00
19510 30 30 31 30 20 2f 2a 20 41 67 67 72 65 67 61 74  0010 /* Aggregat
19520 65 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20  e function with 
19530 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64  DISTINCT keyword
19540 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 56   */.#define EP_V
19550 61 72 53 65 6c 65 63 74 20 30 78 30 30 30 30 32  arSelect 0x00002
19560 30 20 2f 2a 20 70 53 65 6c 65 63 74 20 69 73 20  0 /* pSelect is 
19570 63 6f 72 72 65 6c 61 74 65 64 2c 20 6e 6f 74 20  correlated, not 
19580 63 6f 6e 73 74 61 6e 74 20 2a 2f 0a 23 64 65 66  constant */.#def
19590 69 6e 65 20 45 50 5f 44 62 6c 51 75 6f 74 65 64  ine EP_DblQuoted
195a0 20 30 78 30 30 30 30 34 30 20 2f 2a 20 74 6f 6b   0x000040 /* tok
195b0 65 6e 2e 7a 20 77 61 73 20 6f 72 69 67 69 6e 61  en.z was origina
195c0 6c 6c 79 20 69 6e 20 22 2e 2e 2e 22 20 2a 2f 0a  lly in "..." */.
195d0 23 64 65 66 69 6e 65 20 45 50 5f 49 6e 66 69 78  #define EP_Infix
195e0 46 75 6e 63 20 30 78 30 30 30 30 38 30 20 2f 2a  Func 0x000080 /*
195f0 20 54 72 75 65 20 66 6f 72 20 61 6e 20 69 6e 66   True for an inf
19600 69 78 20 66 75 6e 63 74 69 6f 6e 3a 20 4c 49 4b  ix function: LIK
19610 45 2c 20 47 4c 4f 42 2c 20 65 74 63 20 2a 2f 0a  E, GLOB, etc */.
19620 23 64 65 66 69 6e 65 20 45 50 5f 43 6f 6c 6c 61  #define EP_Colla
19630 74 65 20 20 20 30 78 30 30 30 31 30 30 20 2f 2a  te   0x000100 /*
19640 20 54 72 65 65 20 63 6f 6e 74 61 69 6e 73 20 61   Tree contains a
19650 20 54 4b 5f 43 4f 4c 4c 41 54 45 20 6f 70 65 72   TK_COLLATE oper
19660 61 74 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ator */.#define 
19670 45 50 5f 47 65 6e 65 72 69 63 20 20 20 30 78 30  EP_Generic   0x0
19680 30 30 32 30 30 20 2f 2a 20 49 67 6e 6f 72 65 20  00200 /* Ignore 
19690 43 4f 4c 4c 41 54 45 20 6f 72 20 61 66 66 69 6e  COLLATE or affin
196a0 69 74 79 20 6f 6e 20 74 68 69 73 20 74 72 65 65  ity on this tree
196b0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 49   */.#define EP_I
196c0 6e 74 56 61 6c 75 65 20 20 30 78 30 30 30 34 30  ntValue  0x00040
196d0 30 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c  0 /* Integer val
196e0 75 65 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20  ue contained in 
196f0 75 2e 69 56 61 6c 75 65 20 2a 2f 0a 23 64 65 66  u.iValue */.#def
19700 69 6e 65 20 45 50 5f 78 49 73 53 65 6c 65 63 74  ine EP_xIsSelect
19710 20 30 78 30 30 30 38 30 30 20 2f 2a 20 78 2e 70   0x000800 /* x.p
19720 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69 64 20  Select is valid 
19730 28 6f 74 68 65 72 77 69 73 65 20 78 2e 70 4c 69  (otherwise x.pLi
19740 73 74 20 69 73 29 20 2a 2f 0a 23 64 65 66 69 6e  st is) */.#defin
19750 65 20 45 50 5f 53 6b 69 70 20 20 20 20 20 20 30  e EP_Skip      0
19760 78 30 30 31 30 30 30 20 2f 2a 20 43 4f 4c 4c 41  x001000 /* COLLA
19770 54 45 2c 20 41 53 2c 20 6f 72 20 55 4e 4c 49 4b  TE, AS, or UNLIK
19780 45 4c 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ELY */.#define E
19790 50 5f 52 65 64 75 63 65 64 20 20 20 30 78 30 30  P_Reduced   0x00
197a0 32 30 30 30 20 2f 2a 20 45 78 70 72 20 73 74 72  2000 /* Expr str
197b0 75 63 74 20 45 58 50 52 5f 52 45 44 55 43 45 44  uct EXPR_REDUCED
197c0 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79 20  SIZE bytes only 
197d0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 54 6f  */.#define EP_To
197e0 6b 65 6e 4f 6e 6c 79 20 30 78 30 30 34 30 30 30  kenOnly 0x004000
197f0 20 2f 2a 20 45 78 70 72 20 73 74 72 75 63 74 20   /* Expr struct 
19800 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49  EXPR_TOKENONLYSI
19810 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f  ZE bytes only */
19820 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 74 61 74  .#define EP_Stat
19830 69 63 20 20 20 20 30 78 30 30 38 30 30 30 20 2f  ic    0x008000 /
19840 2a 20 48 65 6c 64 20 69 6e 20 6d 65 6d 6f 72 79  * Held in memory
19850 20 6e 6f 74 20 6f 62 74 61 69 6e 65 64 20 66 72   not obtained fr
19860 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 23  om malloc() */.#
19870 64 65 66 69 6e 65 20 45 50 5f 4d 65 6d 54 6f 6b  define EP_MemTok
19880 65 6e 20 20 30 78 30 31 30 30 30 30 20 2f 2a 20  en  0x010000 /* 
19890 4e 65 65 64 20 74 6f 20 73 71 6c 69 74 65 33 44  Need to sqlite3D
198a0 62 46 72 65 65 28 29 20 45 78 70 72 2e 7a 54 6f  bFree() Expr.zTo
198b0 6b 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ken */.#define E
198c0 50 5f 4e 6f 52 65 64 75 63 65 20 20 30 78 30 32  P_NoReduce  0x02
198d0 30 30 30 30 20 2f 2a 20 43 61 6e 6e 6f 74 20 45  0000 /* Cannot E
198e0 58 50 52 44 55 50 5f 52 45 44 55 43 45 20 74 68  XPRDUP_REDUCE th
198f0 69 73 20 45 78 70 72 20 2a 2f 0a 23 64 65 66 69  is Expr */.#defi
19900 6e 65 20 45 50 5f 55 6e 6c 69 6b 65 6c 79 20 20  ne EP_Unlikely  
19910 30 78 30 34 30 30 30 30 20 2f 2a 20 75 6e 6c 69  0x040000 /* unli
19920 6b 65 6c 79 28 29 20 6f 72 20 6c 69 6b 65 6c 69  kely() or likeli
19930 68 6f 6f 64 28 29 20 66 75 6e 63 74 69 6f 6e 20  hood() function 
19940 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 43 6f  */.#define EP_Co
19950 6e 73 74 46 75 6e 63 20 30 78 30 38 30 30 30 30  nstFunc 0x080000
19960 20 2f 2a 20 41 20 53 51 4c 49 54 45 5f 46 55 4e   /* A SQLITE_FUN
19970 43 5f 43 4f 4e 53 54 41 4e 54 20 6f 72 20 5f 53  C_CONSTANT or _S
19980 4c 4f 43 48 4e 47 20 66 75 6e 63 74 69 6f 6e 20  LOCHNG function 
19990 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 43 61  */.#define EP_Ca
199a0 6e 42 65 4e 75 6c 6c 20 30 78 31 30 30 30 30 30  nBeNull 0x100000
199b0 20 2f 2a 20 43 61 6e 20 62 65 20 6e 75 6c 6c 20   /* Can be null 
199c0 64 65 73 70 69 74 65 20 4e 4f 54 20 4e 55 4c 4c  despite NOT NULL
199d0 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23   constraint */.#
199e0 64 65 66 69 6e 65 20 45 50 5f 53 75 62 71 75 65  define EP_Subque
199f0 72 79 20 20 30 78 32 30 30 30 30 30 20 2f 2a 20  ry  0x200000 /* 
19a00 54 72 65 65 20 63 6f 6e 74 61 69 6e 73 20 61 20  Tree contains a 
19a10 54 4b 5f 53 45 4c 45 43 54 20 6f 70 65 72 61 74  TK_SELECT operat
19a20 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  or */.#define EP
19a30 5f 41 6c 69 61 73 20 20 20 20 20 30 78 34 30 30  _Alias     0x400
19a40 30 30 30 20 2f 2a 20 49 73 20 61 6e 20 61 6c 69  000 /* Is an ali
19a50 61 73 20 66 6f 72 20 61 20 72 65 73 75 6c 74 20  as for a result 
19a60 73 65 74 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 64  set column */.#d
19a70 65 66 69 6e 65 20 45 50 5f 4c 65 61 66 20 20 20  efine EP_Leaf   
19a80 20 20 20 30 78 38 30 30 30 30 30 20 2f 2a 20 45     0x800000 /* E
19a90 78 70 72 2e 70 4c 65 66 74 2c 20 2e 70 52 69 67  xpr.pLeft, .pRig
19aa0 68 74 2c 20 2e 75 2e 70 53 65 6c 65 63 74 20 61  ht, .u.pSelect a
19ab0 6c 6c 20 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a  ll NULL */../*.*
19ac0 2a 20 54 68 65 20 45 50 5f 50 72 6f 70 61 67 61  * The EP_Propaga
19ad0 74 65 20 6d 61 73 6b 20 69 73 20 61 20 73 65 74  te mask is a set
19ae0 20 6f 66 20 70 72 6f 70 65 72 74 69 65 73 20 74   of properties t
19af0 68 61 74 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  hat automaticall
19b00 79 20 70 72 6f 70 61 67 61 74 65 0a 2a 2a 20 75  y propagate.** u
19b10 70 77 61 72 64 73 20 69 6e 74 6f 20 70 61 72 65  pwards into pare
19b20 6e 74 20 6e 6f 64 65 73 2e 0a 2a 2f 0a 23 64 65  nt nodes..*/.#de
19b30 66 69 6e 65 20 45 50 5f 50 72 6f 70 61 67 61 74  fine EP_Propagat
19b40 65 20 28 45 50 5f 43 6f 6c 6c 61 74 65 7c 45 50  e (EP_Collate|EP
19b50 5f 53 75 62 71 75 65 72 79 7c 45 50 5f 48 61 73  _Subquery|EP_Has
19b60 46 75 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  Func)../*.** The
19b70 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62 65  se macros can be
19b80 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20 73   used to test, s
19b90 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69 74  et, or clear bit
19ba0 73 20 69 6e 20 74 68 65 0a 2a 2a 20 45 78 70 72  s in the.** Expr
19bb0 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f  .flags field..*/
19bc0 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48 61 73  .#define ExprHas
19bd0 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20  Property(E,P)   
19be0 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28    (((E)->flags&(
19bf0 50 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20  P))!=0).#define 
19c00 45 78 70 72 48 61 73 41 6c 6c 50 72 6f 70 65 72  ExprHasAllProper
19c10 74 79 28 45 2c 50 29 20 20 28 28 28 45 29 2d 3e  ty(E,P)  (((E)->
19c20 66 6c 61 67 73 26 28 50 29 29 3d 3d 28 50 29 29  flags&(P))==(P))
19c30 0a 23 64 65 66 69 6e 65 20 45 78 70 72 53 65 74  .#define ExprSet
19c40 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20  Property(E,P)   
19c50 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50    (E)->flags|=(P
19c60 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 43 6c  ).#define ExprCl
19c70 65 61 72 50 72 6f 70 65 72 74 79 28 45 2c 50 29  earProperty(E,P)
19c80 20 20 20 28 45 29 2d 3e 66 6c 61 67 73 26 3d 7e     (E)->flags&=~
19c90 28 50 29 0a 0a 2f 2a 20 54 68 65 20 45 78 70 72  (P)../* The Expr
19ca0 53 65 74 56 56 41 50 72 6f 70 65 72 74 79 28 29  SetVVAProperty()
19cb0 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 66   macro is used f
19cc0 6f 72 20 56 65 72 69 66 69 63 61 74 69 6f 6e 2c  or Verification,
19cd0 20 56 61 6c 69 64 61 74 69 6f 6e 2c 0a 2a 2a 20   Validation,.** 
19ce0 61 6e 64 20 41 63 63 72 65 64 69 74 61 74 69 6f  and Accreditatio
19cf0 6e 20 6f 6e 6c 79 2e 20 20 49 74 20 77 6f 72 6b  n only.  It work
19d00 73 20 6c 69 6b 65 20 45 78 70 72 53 65 74 50 72  s like ExprSetPr
19d10 6f 70 65 72 74 79 28 29 20 64 75 72 69 6e 67 20  operty() during 
19d20 56 56 41 0a 2a 2a 20 70 72 6f 63 65 73 73 65 73  VVA.** processes
19d30 20 62 75 74 20 69 73 20 61 20 6e 6f 2d 6f 70 20   but is a no-op 
19d40 66 6f 72 20 64 65 6c 69 76 65 72 79 2e 0a 2a 2f  for delivery..*/
19d50 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
19d60 45 42 55 47 0a 23 20 64 65 66 69 6e 65 20 45 78  EBUG.# define Ex
19d70 70 72 53 65 74 56 56 41 50 72 6f 70 65 72 74 79  prSetVVAProperty
19d80 28 45 2c 50 29 20 20 28 45 29 2d 3e 66 6c 61 67  (E,P)  (E)->flag
19d90 73 7c 3d 28 50 29 0a 23 65 6c 73 65 0a 23 20 64  s|=(P).#else.# d
19da0 65 66 69 6e 65 20 45 78 70 72 53 65 74 56 56 41  efine ExprSetVVA
19db0 50 72 6f 70 65 72 74 79 28 45 2c 50 29 0a 23 65  Property(E,P).#e
19dc0 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72  ndif../*.** Macr
19dd0 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  os to determine 
19de0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79  the number of by
19df0 74 65 73 20 72 65 71 75 69 72 65 64 20 62 79 20  tes required by 
19e00 61 20 6e 6f 72 6d 61 6c 20 45 78 70 72 0a 2a 2a  a normal Expr.**
19e10 20 73 74 72 75 63 74 2c 20 61 6e 20 45 78 70 72   struct, an Expr
19e20 20 73 74 72 75 63 74 20 77 69 74 68 20 74 68 65   struct with the
19e30 20 45 50 5f 52 65 64 75 63 65 64 20 66 6c 61 67   EP_Reduced flag
19e40 20 73 65 74 20 69 6e 20 45 78 70 72 2e 66 6c 61   set in Expr.fla
19e50 67 73 0a 2a 2a 20 61 6e 64 20 61 6e 20 45 78 70  gs.** and an Exp
19e60 72 20 73 74 72 75 63 74 20 77 69 74 68 20 74 68  r struct with th
19e70 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66  e EP_TokenOnly f
19e80 6c 61 67 20 73 65 74 2e 0a 2a 2f 0a 23 64 65 66  lag set..*/.#def
19e90 69 6e 65 20 45 58 50 52 5f 46 55 4c 4c 53 49 5a  ine EXPR_FULLSIZ
19ea0 45 20 20 20 20 20 20 20 20 20 20 20 73 69 7a 65  E           size
19eb0 6f 66 28 45 78 70 72 29 20 20 20 20 20 20 20 20  of(Expr)        
19ec0 20 20 20 2f 2a 20 46 75 6c 6c 20 73 69 7a 65 20     /* Full size 
19ed0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f  */.#define EXPR_
19ee0 52 45 44 55 43 45 44 53 49 5a 45 20 20 20 20 20  REDUCEDSIZE     
19ef0 20 20 20 6f 66 66 73 65 74 6f 66 28 45 78 70 72     offsetof(Expr
19f00 2c 69 54 61 62 6c 65 29 20 20 2f 2a 20 43 6f 6d  ,iTable)  /* Com
19f10 6d 6f 6e 20 66 65 61 74 75 72 65 73 20 2a 2f 0a  mon features */.
19f20 23 64 65 66 69 6e 65 20 45 58 50 52 5f 54 4f 4b  #define EXPR_TOK
19f30 45 4e 4f 4e 4c 59 53 49 5a 45 20 20 20 20 20 20  ENONLYSIZE      
19f40 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c 70 4c  offsetof(Expr,pL
19f50 65 66 74 29 20 20 20 2f 2a 20 46 65 77 65 72 20  eft)   /* Fewer 
19f60 66 65 61 74 75 72 65 73 20 2a 2f 0a 0a 2f 2a 0a  features */../*.
19f70 2a 2a 20 46 6c 61 67 73 20 70 61 73 73 65 64 20  ** Flags passed 
19f80 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 45 78  to the sqlite3Ex
19f90 70 72 44 75 70 28 29 20 66 75 6e 63 74 69 6f 6e  prDup() function
19fa0 2e 20 53 65 65 20 74 68 65 20 68 65 61 64 65 72  . See the header
19fb0 20 63 6f 6d 6d 65 6e 74 0a 2a 2a 20 61 62 6f 76   comment.** abov
19fc0 65 20 73 71 6c 69 74 65 33 45 78 70 72 44 75 70  e sqlite3ExprDup
19fd0 28 29 20 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a  () for details..
19fe0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 44  */.#define EXPRD
19ff0 55 50 5f 52 45 44 55 43 45 20 20 20 20 20 20 20  UP_REDUCE       
1a000 20 20 30 78 30 30 30 31 20 20 2f 2a 20 55 73 65    0x0001  /* Use
1a010 64 20 72 65 64 75 63 65 64 2d 73 69 7a 65 20 45  d reduced-size E
1a020 78 70 72 20 6e 6f 64 65 73 20 2a 2f 0a 0a 2f 2a  xpr nodes */../*
1a030 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20 65 78  .** A list of ex
1a040 70 72 65 73 73 69 6f 6e 73 2e 20 20 45 61 63 68  pressions.  Each
1a050 20 65 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 20   expression may 
1a060 6f 70 74 69 6f 6e 61 6c 6c 79 20 68 61 76 65 20  optionally have 
1a070 61 0a 2a 2a 20 6e 61 6d 65 2e 20 20 41 6e 20 65  a.** name.  An e
1a080 78 70 72 2f 6e 61 6d 65 20 63 6f 6d 62 69 6e 61  xpr/name combina
1a090 74 69 6f 6e 20 63 61 6e 20 62 65 20 75 73 65 64  tion can be used
1a0a0 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61 79 73   in several ways
1a0b0 2c 20 73 75 63 68 0a 2a 2a 20 61 73 20 74 68 65  , such.** as the
1a0c0 20 6c 69 73 74 20 6f 66 20 22 65 78 70 72 20 41   list of "expr A
1a0d0 53 20 49 44 22 20 66 69 65 6c 64 73 20 66 6f 6c  S ID" fields fol
1a0e0 6c 6f 77 69 6e 67 20 61 20 22 53 45 4c 45 43 54  lowing a "SELECT
1a0f0 22 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 6c  " or in the.** l
1a100 69 73 74 20 6f 66 20 22 49 44 20 3d 20 65 78 70  ist of "ID = exp
1a110 72 22 20 69 74 65 6d 73 20 69 6e 20 61 6e 20 55  r" items in an U
1a120 50 44 41 54 45 2e 20 20 41 20 6c 69 73 74 20 6f  PDATE.  A list o
1a130 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20 63 61  f expressions ca
1a140 6e 0a 2a 2a 20 61 6c 73 6f 20 62 65 20 75 73 65  n.** also be use
1a150 64 20 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e  d as the argumen
1a160 74 20 74 6f 20 61 20 66 75 6e 63 74 69 6f 6e 2c  t to a function,
1a170 20 69 6e 20 77 68 69 63 68 20 63 61 73 65 20 74   in which case t
1a180 68 65 20 61 2e 7a 4e 61 6d 65 0a 2a 2a 20 66 69  he a.zName.** fi
1a190 65 6c 64 20 69 73 20 6e 6f 74 20 75 73 65 64 2e  eld is not used.
1a1a0 0a 2a 2a 0a 2a 2a 20 42 79 20 64 65 66 61 75 6c  .**.** By defaul
1a1b0 74 20 74 68 65 20 45 78 70 72 2e 7a 53 70 61 6e  t the Expr.zSpan
1a1c0 20 66 69 65 6c 64 20 68 6f 6c 64 73 20 61 20 68   field holds a h
1a1d0 75 6d 61 6e 2d 72 65 61 64 61 62 6c 65 20 64 65  uman-readable de
1a1e0 73 63 72 69 70 74 69 6f 6e 20 6f 66 0a 2a 2a 20  scription of.** 
1a1f0 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 74  the expression t
1a200 68 61 74 20 69 73 20 75 73 65 64 20 69 6e 20 74  hat is used in t
1a210 68 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66  he generation of
1a220 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20   error messages 
1a230 61 6e 64 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6c 61  and.** column la
1a240 62 65 6c 73 2e 20 20 49 6e 20 74 68 69 73 20 63  bels.  In this c
1a250 61 73 65 2c 20 45 78 70 72 2e 7a 53 70 61 6e 20  ase, Expr.zSpan 
1a260 69 73 20 74 79 70 69 63 61 6c 6c 79 20 74 68 65  is typically the
1a270 20 74 65 78 74 20 6f 66 20 61 0a 2a 2a 20 63 6f   text of a.** co
1a280 6c 75 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  lumn expression 
1a290 61 73 20 69 74 20 65 78 69 73 74 73 20 69 6e 20  as it exists in 
1a2a0 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  a SELECT stateme
1a2b0 6e 74 2e 20 20 48 6f 77 65 76 65 72 2c 20 69 66  nt.  However, if
1a2c0 0a 2a 2a 20 74 68 65 20 62 53 70 61 6e 49 73 54  .** the bSpanIsT
1a2d0 61 62 20 66 6c 61 67 20 69 73 20 73 65 74 2c 20  ab flag is set, 
1a2e0 74 68 65 6e 20 7a 53 70 61 6e 20 69 73 20 6f 76  then zSpan is ov
1a2f0 65 72 6c 6f 61 64 65 64 20 74 6f 20 6d 65 61 6e  erloaded to mean
1a300 20 74 68 65 20 6e 61 6d 65 0a 2a 2a 20 6f 66 20   the name.** of 
1a310 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d  the result colum
1a320 6e 20 69 6e 20 74 68 65 20 66 6f 72 6d 3a 20 44  n in the form: D
1a330 41 54 41 42 41 53 45 2e 54 41 42 4c 45 2e 43 4f  ATABASE.TABLE.CO
1a340 4c 55 4d 4e 2e 20 20 54 68 69 73 20 6c 61 74 65  LUMN.  This late
1a350 72 0a 2a 2a 20 66 6f 72 6d 20 69 73 20 75 73 65  r.** form is use
1a360 64 20 66 6f 72 20 6e 61 6d 65 20 72 65 73 6f 6c  d for name resol
1a370 75 74 69 6f 6e 20 77 69 74 68 20 6e 65 73 74 65  ution with neste
1a380 64 20 46 52 4f 4d 20 63 6c 61 75 73 65 73 2e 0a  d FROM clauses..
1a390 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72 4c 69  */.struct ExprLi
1a3a0 73 74 20 7b 0a 20 20 69 6e 74 20 6e 45 78 70 72  st {.  int nExpr
1a3b0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
1a3c0 20 4e 75 6d 62 65 72 20 6f 66 20 65 78 70 72 65   Number of expre
1a3d0 73 73 69 6f 6e 73 20 6f 6e 20 74 68 65 20 6c 69  ssions on the li
1a3e0 73 74 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 45  st */.  struct E
1a3f0 78 70 72 4c 69 73 74 5f 69 74 65 6d 20 7b 20 2f  xprList_item { /
1a400 2a 20 46 6f 72 20 65 61 63 68 20 65 78 70 72 65  * For each expre
1a410 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 6c 69 73  ssion in the lis
1a420 74 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70  t */.    Expr *p
1a430 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20  Expr;           
1a440 20 2f 2a 20 54 68 65 20 70 61 72 73 65 20 74 72   /* The parse tr
1a450 65 65 20 66 6f 72 20 74 68 69 73 20 65 78 70 72  ee for this expr
1a460 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 63 68  ession */.    ch
1a470 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
1a480 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 61        /* Token a
1a490 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
1a4a0 68 69 73 20 65 78 70 72 65 73 73 69 6f 6e 20 2a  his expression *
1a4b0 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 53 70 61  /.    char *zSpa
1a4c0 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  n;            /*
1a4d0 20 4f 72 69 67 69 6e 61 6c 20 74 65 78 74 20 6f   Original text o
1a4e0 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
1a4f0 20 2a 2f 0a 20 20 20 20 75 38 20 73 6f 72 74 4f   */.    u8 sortO
1a500 72 64 65 72 3b 20 20 20 20 20 20 20 20 20 20 20  rder;           
1a510 2f 2a 20 31 20 66 6f 72 20 44 45 53 43 20 6f 72  /* 1 for DESC or
1a520 20 30 20 66 6f 72 20 41 53 43 20 2a 2f 0a 20 20   0 for ASC */.  
1a530 20 20 75 6e 73 69 67 6e 65 64 20 64 6f 6e 65 20    unsigned done 
1a540 3a 31 3b 20 20 20 20 20 20 20 2f 2a 20 41 20 66  :1;       /* A f
1a550 6c 61 67 20 74 6f 20 69 6e 64 69 63 61 74 65 20  lag to indicate 
1a560 77 68 65 6e 20 70 72 6f 63 65 73 73 69 6e 67 20  when processing 
1a570 69 73 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20  is finished */. 
1a580 20 20 20 75 6e 73 69 67 6e 65 64 20 62 53 70 61     unsigned bSpa
1a590 6e 49 73 54 61 62 20 3a 31 3b 20 2f 2a 20 7a 53  nIsTab :1; /* zS
1a5a0 70 61 6e 20 68 6f 6c 64 73 20 44 42 2e 54 41 42  pan holds DB.TAB
1a5b0 4c 45 2e 43 4f 4c 55 4d 4e 20 2a 2f 0a 20 20 20  LE.COLUMN */.   
1a5c0 20 75 6e 73 69 67 6e 65 64 20 72 65 75 73 61 62   unsigned reusab
1a5d0 6c 65 20 3a 31 3b 20 20 20 2f 2a 20 43 6f 6e 73  le :1;   /* Cons
1a5e0 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 20  tant expression 
1a5f0 69 73 20 72 65 75 73 61 62 6c 65 20 2a 2f 0a 20  is reusable */. 
1a600 20 20 20 75 6e 73 69 67 6e 65 64 20 62 53 6f 72     unsigned bSor
1a610 74 65 72 52 65 66 20 3a 31 3b 20 2f 2a 20 44 65  terRef :1; /* De
1a620 66 65 72 20 65 76 61 6c 75 61 74 69 6f 6e 20 75  fer evaluation u
1a630 6e 74 69 6c 20 61 66 74 65 72 20 73 6f 72 74 69  ntil after sorti
1a640 6e 67 20 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20  ng */.    union 
1a650 7b 0a 20 20 20 20 20 20 73 74 72 75 63 74 20 7b  {.      struct {
1a660 0a 20 20 20 20 20 20 20 20 75 31 36 20 69 4f 72  .        u16 iOr
1a670 64 65 72 42 79 43 6f 6c 3b 20 20 20 20 20 20 2f  derByCol;      /
1a680 2a 20 46 6f 72 20 4f 52 44 45 52 20 42 59 2c 20  * For ORDER BY, 
1a690 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e  column number in
1a6a0 20 72 65 73 75 6c 74 20 73 65 74 20 2a 2f 0a 20   result set */. 
1a6b0 20 20 20 20 20 20 20 75 31 36 20 69 41 6c 69 61         u16 iAlia
1a6c0 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  s;           /* 
1a6d0 49 6e 64 65 78 20 69 6e 74 6f 20 50 61 72 73 65  Index into Parse
1a6e0 2e 61 41 6c 69 61 73 5b 5d 20 66 6f 72 20 7a 4e  .aAlias[] for zN
1a6f0 61 6d 65 20 2a 2f 0a 20 20 20 20 20 20 7d 20 78  ame */.      } x
1a700 3b 0a 20 20 20 20 20 20 69 6e 74 20 69 43 6f 6e  ;.      int iCon
1a710 73 74 45 78 70 72 52 65 67 3b 20 20 20 20 20 20  stExprReg;      
1a720 2f 2a 20 52 65 67 69 73 74 65 72 20 69 6e 20 77  /* Register in w
1a730 68 69 63 68 20 45 78 70 72 20 76 61 6c 75 65 20  hich Expr value 
1a740 69 73 20 63 61 63 68 65 64 20 2a 2f 0a 20 20 20  is cached */.   
1a750 20 7d 20 75 3b 0a 20 20 7d 20 61 5b 31 5d 3b 20   } u;.  } a[1]; 
1a760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a770 20 2f 2a 20 4f 6e 65 20 73 6c 6f 74 20 66 6f 72   /* One slot for
1a780 20 65 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e   each expression
1a790 20 69 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a   in the list */.
1a7a0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  };../*.** An ins
1a7b0 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74  tance of this st
1a7c0 72 75 63 74 75 72 65 20 63 61 6e 20 68 6f 6c 64  ructure can hold
1a7d0 20 61 20 73 69 6d 70 6c 65 20 6c 69 73 74 20 6f   a simple list o
1a7e0 66 20 69 64 65 6e 74 69 66 69 65 72 73 2c 0a 2a  f identifiers,.*
1a7f0 2a 20 73 75 63 68 20 61 73 20 74 68 65 20 6c 69  * such as the li
1a800 73 74 20 22 61 2c 62 2c 63 22 20 69 6e 20 74 68  st "a,b,c" in th
1a810 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74  e following stat
1a820 65 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 20 20  ements:.**.**   
1a830 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
1a840 28 61 2c 62 2c 63 29 20 56 41 4c 55 45 53 20 2e  (a,b,c) VALUES .
1a850 2e 2e 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45 41  ..;.**      CREA
1a860 54 45 20 49 4e 44 45 58 20 69 64 78 20 4f 4e 20  TE INDEX idx ON 
1a870 74 28 61 2c 62 2c 63 29 3b 0a 2a 2a 20 20 20 20  t(a,b,c);.**    
1a880 20 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52    CREATE TRIGGER
1a890 20 74 72 69 67 20 42 45 46 4f 52 45 20 55 50 44   trig BEFORE UPD
1a8a0 41 54 45 20 4f 4e 20 74 28 61 2c 62 2c 63 29 20  ATE ON t(a,b,c) 
1a8b0 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49  ...;.**.** The I
1a8c0 64 4c 69 73 74 2e 61 2e 69 64 78 20 66 69 65 6c  dList.a.idx fiel
1a8d0 64 20 69 73 20 75 73 65 64 20 77 68 65 6e 20 74  d is used when t
1a8e0 68 65 20 49 64 4c 69 73 74 20 72 65 70 72 65 73  he IdList repres
1a8f0 65 6e 74 73 20 74 68 65 20 6c 69 73 74 20 6f 66  ents the list of
1a900 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  .** column names
1a910 20 61 66 74 65 72 20 61 20 74 61 62 6c 65 20 6e   after a table n
1a920 61 6d 65 20 69 6e 20 61 6e 20 49 4e 53 45 52 54  ame in an INSERT
1a930 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20   statement.  In 
1a940 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a  the statement.**
1a950 0a 2a 2a 20 20 20 20 20 49 4e 53 45 52 54 20 49  .**     INSERT I
1a960 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e  NTO t(a,b,c) ...
1a970 0a 2a 2a 0a 2a 2a 20 49 66 20 22 61 22 20 69 73  .**.** If "a" is
1a980 20 74 68 65 20 6b 2d 74 68 20 63 6f 6c 75 6d 6e   the k-th column
1a990 20 6f 66 20 74 61 62 6c 65 20 22 74 22 2c 20 74   of table "t", t
1a9a0 68 65 6e 20 49 64 4c 69 73 74 2e 61 5b 30 5d 2e  hen IdList.a[0].
1a9b0 69 64 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72 75 63  idx==k..*/.struc
1a9c0 74 20 49 64 4c 69 73 74 20 7b 0a 20 20 73 74 72  t IdList {.  str
1a9d0 75 63 74 20 49 64 4c 69 73 74 5f 69 74 65 6d 20  uct IdList_item 
1a9e0 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d  {.    char *zNam
1a9f0 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20  e;      /* Name 
1aa00 6f 66 20 74 68 65 20 69 64 65 6e 74 69 66 69 65  of the identifie
1aa10 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 64 78  r */.    int idx
1aa20 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e  ;          /* In
1aa30 64 65 78 20 69 6e 20 73 6f 6d 65 20 54 61 62 6c  dex in some Tabl
1aa40 65 2e 61 43 6f 6c 5b 5d 20 6f 66 20 61 20 63 6f  e.aCol[] of a co
1aa50 6c 75 6d 6e 20 6e 61 6d 65 64 20 7a 4e 61 6d 65  lumn named zName
1aa60 20 2a 2f 0a 20 20 7d 20 2a 61 3b 0a 20 20 69 6e   */.  } *a;.  in
1aa70 74 20 6e 49 64 3b 20 20 20 20 20 20 20 20 20 2f  t nId;         /
1aa80 2a 20 4e 75 6d 62 65 72 20 6f 66 20 69 64 65 6e  * Number of iden
1aa90 74 69 66 69 65 72 73 20 6f 6e 20 74 68 65 20 6c  tifiers on the l
1aaa0 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ist */.};../*.**
1aab0 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   The following s
1aac0 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62  tructure describ
1aad0 65 73 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  es the FROM clau
1aae0 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73  se of a SELECT s
1aaf0 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 45 61 63  tatement..** Eac
1ab00 68 20 74 61 62 6c 65 20 6f 72 20 73 75 62 71 75  h table or subqu
1ab10 65 72 79 20 69 6e 20 74 68 65 20 46 52 4f 4d 20  ery in the FROM 
1ab20 63 6c 61 75 73 65 20 69 73 20 61 20 73 65 70 61  clause is a sepa
1ab30 72 61 74 65 20 65 6c 65 6d 65 6e 74 20 6f 66 0a  rate element of.
1ab40 2a 2a 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61  ** the SrcList.a
1ab50 5b 5d 20 61 72 72 61 79 2e 0a 2a 2a 0a 2a 2a 20  [] array..**.** 
1ab60 57 69 74 68 20 74 68 65 20 61 64 64 69 74 69 6f  With the additio
1ab70 6e 20 6f 66 20 6d 75 6c 74 69 70 6c 65 20 64 61  n of multiple da
1ab80 74 61 62 61 73 65 20 73 75 70 70 6f 72 74 2c 20  tabase support, 
1ab90 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
1aba0 72 75 63 74 75 72 65 0a 2a 2a 20 63 61 6e 20 61  ructure.** can a
1abb0 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f 20 64  lso be used to d
1abc0 65 73 63 72 69 62 65 20 61 20 70 61 72 74 69 63  escribe a partic
1abd0 75 6c 61 72 20 74 61 62 6c 65 20 73 75 63 68 20  ular table such 
1abe0 61 73 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  as the table tha
1abf0 74 0a 2a 2a 20 69 73 20 6d 6f 64 69 66 69 65 64  t.** is modified
1ac00 20 62 79 20 61 6e 20 49 4e 53 45 52 54 2c 20 44   by an INSERT, D
1ac10 45 4c 45 54 45 2c 20 6f 72 20 55 50 44 41 54 45  ELETE, or UPDATE
1ac20 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20   statement.  In 
1ac30 73 74 61 6e 64 61 72 64 20 53 51 4c 2c 0a 2a 2a  standard SQL,.**
1ac40 20 73 75 63 68 20 61 20 74 61 62 6c 65 20 6d 75   such a table mu
1ac50 73 74 20 62 65 20 61 20 73 69 6d 70 6c 65 20 6e  st be a simple n
1ac60 61 6d 65 3a 20 49 44 2e 20 20 42 75 74 20 69 6e  ame: ID.  But in
1ac70 20 53 51 4c 69 74 65 2c 20 74 68 65 20 74 61 62   SQLite, the tab
1ac80 6c 65 20 63 61 6e 0a 2a 2a 20 6e 6f 77 20 62 65  le can.** now be
1ac90 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 61   identified by a
1aca0 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 2c 20   database name, 
1acb0 61 20 64 6f 74 2c 20 74 68 65 6e 20 74 68 65 20  a dot, then the 
1acc0 74 61 62 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 49  table name: ID.I
1acd0 44 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6a 6f 69  D..**.** The joi
1ace0 6e 74 79 70 65 20 73 74 61 72 74 73 20 6f 75 74  ntype starts out
1acf0 20 73 68 6f 77 69 6e 67 20 74 68 65 20 6a 6f 69   showing the joi
1ad00 6e 20 74 79 70 65 20 62 65 74 77 65 65 6e 20 74  n type between t
1ad10 68 65 20 63 75 72 72 65 6e 74 20 74 61 62 6c 65  he current table
1ad20 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6e 65 78 74  .** and the next
1ad30 20 74 61 62 6c 65 20 6f 6e 20 74 68 65 20 6c 69   table on the li
1ad40 73 74 2e 20 20 54 68 65 20 70 61 72 73 65 72 20  st.  The parser 
1ad50 62 75 69 6c 64 73 20 74 68 65 20 6c 69 73 74 20  builds the list 
1ad60 74 68 69 73 20 77 61 79 2e 0a 2a 2a 20 42 75 74  this way..** But
1ad70 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 53   sqlite3SrcListS
1ad80 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 29 20 6c  hiftJoinType() l
1ad90 61 74 65 72 20 73 68 69 66 74 73 20 74 68 65 20  ater shifts the 
1ada0 6a 6f 69 6e 74 79 70 65 73 20 73 6f 20 74 68 61  jointypes so tha
1adb0 74 20 65 61 63 68 0a 2a 2a 20 6a 6f 69 6e 74 79  t each.** jointy
1adc0 70 65 20 65 78 70 72 65 73 73 65 73 20 74 68 65  pe expresses the
1add0 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20 74 68   join between th
1ade0 65 20 74 61 62 6c 65 20 61 6e 64 20 74 68 65 20  e table and the 
1adf0 70 72 65 76 69 6f 75 73 20 74 61 62 6c 65 2e 0a  previous table..
1ae00 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 63 6f 6c  **.** In the col
1ae10 55 73 65 64 20 66 69 65 6c 64 2c 20 74 68 65 20  Used field, the 
1ae20 68 69 67 68 2d 6f 72 64 65 72 20 62 69 74 20 28  high-order bit (
1ae30 62 69 74 20 36 33 29 20 69 73 20 73 65 74 20 69  bit 63) is set i
1ae40 66 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20 63  f the table.** c
1ae50 6f 6e 74 61 69 6e 73 20 6d 6f 72 65 20 74 68 61  ontains more tha
1ae60 6e 20 36 33 20 63 6f 6c 75 6d 6e 73 20 61 6e 64  n 63 columns and
1ae70 20 74 68 65 20 36 34 2d 74 68 20 6f 72 20 6c 61   the 64-th or la
1ae80 74 65 72 20 63 6f 6c 75 6d 6e 20 69 73 20 75 73  ter column is us
1ae90 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 72  ed..*/.struct Sr
1aea0 63 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e 53  cList {.  int nS
1aeb0 72 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  rc;        /* Nu
1aec0 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73 20 6f  mber of tables o
1aed0 72 20 73 75 62 71 75 65 72 69 65 73 20 69 6e 20  r subqueries in 
1aee0 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
1aef0 2a 2f 0a 20 20 75 33 32 20 6e 41 6c 6c 6f 63 3b  */.  u32 nAlloc;
1af00 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1af10 6f 66 20 65 6e 74 72 69 65 73 20 61 6c 6c 6f 63  of entries alloc
1af20 61 74 65 64 20 69 6e 20 61 5b 5d 20 62 65 6c 6f  ated in a[] belo
1af30 77 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 53 72  w */.  struct Sr
1af40 63 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20  cList_item {.   
1af50 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61   Schema *pSchema
1af60 3b 20 20 2f 2a 20 53 63 68 65 6d 61 20 74 6f 20  ;  /* Schema to 
1af70 77 68 69 63 68 20 74 68 69 73 20 69 74 65 6d 20  which this item 
1af80 69 73 20 66 69 78 65 64 20 2a 2f 0a 20 20 20 20  is fixed */.    
1af90 63 68 61 72 20 2a 7a 44 61 74 61 62 61 73 65 3b  char *zDatabase;
1afa0 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74    /* Name of dat
1afb0 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20 74 68  abase holding th
1afc0 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  is table */.    
1afd0 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
1afe0 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65    /* Name of the
1aff0 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68   table */.    ch
1b000 61 72 20 2a 7a 41 6c 69 61 73 3b 20 20 20 20 20  ar *zAlias;     
1b010 2f 2a 20 54 68 65 20 22 42 22 20 70 61 72 74 20  /* The "B" part 
1b020 6f 66 20 61 20 22 41 20 41 53 20 42 22 20 70 68  of a "A AS B" ph
1b030 72 61 73 65 2e 20 20 7a 4e 61 6d 65 20 69 73 20  rase.  zName is 
1b040 74 68 65 20 22 41 22 20 2a 2f 0a 20 20 20 20 54  the "A" */.    T
1b050 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20  able *pTab;     
1b060 20 2f 2a 20 41 6e 20 53 51 4c 20 74 61 62 6c 65   /* An SQL table
1b070 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74   corresponding t
1b080 6f 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 53  o zName */.    S
1b090 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20  elect *pSelect; 
1b0a0 20 2f 2a 20 41 20 53 45 4c 45 43 54 20 73 74 61   /* A SELECT sta
1b0b0 74 65 6d 65 6e 74 20 75 73 65 64 20 69 6e 20 70  tement used in p
1b0c0 6c 61 63 65 20 6f 66 20 61 20 74 61 62 6c 65 20  lace of a table 
1b0d0 6e 61 6d 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20  name */.    int 
1b0e0 61 64 64 72 46 69 6c 6c 53 75 62 3b 20 20 2f 2a  addrFillSub;  /*
1b0f0 20 41 64 64 72 65 73 73 20 6f 66 20 73 75 62 72   Address of subr
1b100 6f 75 74 69 6e 65 20 74 6f 20 6d 61 6e 69 66 65  outine to manife
1b110 73 74 20 61 20 73 75 62 71 75 65 72 79 20 2a 2f  st a subquery */
1b120 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65 74 75  .    int regRetu
1b130 72 6e 3b 20 20 20 20 2f 2a 20 52 65 67 69 73 74  rn;    /* Regist
1b140 65 72 20 68 6f 6c 64 69 6e 67 20 72 65 74 75 72  er holding retur
1b150 6e 20 61 64 64 72 65 73 73 20 6f 66 20 61 64 64  n address of add
1b160 72 46 69 6c 6c 53 75 62 20 2a 2f 0a 20 20 20 20  rFillSub */.    
1b170 69 6e 74 20 72 65 67 52 65 73 75 6c 74 3b 20 20  int regResult;  
1b180 20 20 2f 2a 20 52 65 67 69 73 74 65 72 73 20 68    /* Registers h
1b190 6f 6c 64 69 6e 67 20 72 65 73 75 6c 74 73 20 6f  olding results o
1b1a0 66 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a  f a co-routine *
1b1b0 2f 0a 20 20 20 20 73 74 72 75 63 74 20 7b 0a 20  /.    struct {. 
1b1c0 20 20 20 20 20 75 38 20 6a 6f 69 6e 74 79 70 65       u8 jointype
1b1d0 3b 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20 6f  ;      /* Type o
1b1e0 66 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20 74  f join between t
1b1f0 68 69 73 20 74 61 62 6c 65 20 61 6e 64 20 74 68  his table and th
1b200 65 20 70 72 65 76 69 6f 75 73 20 2a 2f 0a 20 20  e previous */.  
1b210 20 20 20 20 75 6e 73 69 67 6e 65 64 20 6e 6f 74      unsigned not
1b220 49 6e 64 65 78 65 64 20 3a 31 3b 20 20 20 20 2f  Indexed :1;    /
1b230 2a 20 54 72 75 65 20 69 66 20 74 68 65 72 65 20  * True if there 
1b240 69 73 20 61 20 4e 4f 54 20 49 4e 44 45 58 45 44  is a NOT INDEXED
1b250 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 20   clause */.     
1b260 20 75 6e 73 69 67 6e 65 64 20 69 73 49 6e 64 65   unsigned isInde
1b270 78 65 64 42 79 20 3a 31 3b 20 20 20 2f 2a 20 54  xedBy :1;   /* T
1b280 72 75 65 20 69 66 20 74 68 65 72 65 20 69 73 20  rue if there is 
1b290 61 6e 20 49 4e 44 45 58 45 44 20 42 59 20 63 6c  an INDEXED BY cl
1b2a0 61 75 73 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e  ause */.      un
1b2b0 73 69 67 6e 65 64 20 69 73 54 61 62 46 75 6e 63  signed isTabFunc
1b2c0 20 3a 31 3b 20 20 20 20 20 2f 2a 20 54 72 75 65   :1;     /* True
1b2d0 20 69 66 20 74 61 62 6c 65 2d 76 61 6c 75 65 64   if table-valued
1b2e0 2d 66 75 6e 63 74 69 6f 6e 20 73 79 6e 74 61 78  -function syntax
1b2f0 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e   */.      unsign
1b300 65 64 20 69 73 43 6f 72 72 65 6c 61 74 65 64 20  ed isCorrelated 
1b310 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69 66 20  :1;  /* True if 
1b320 73 75 62 2d 71 75 65 72 79 20 69 73 20 63 6f 72  sub-query is cor
1b330 72 65 6c 61 74 65 64 20 2a 2f 0a 20 20 20 20 20  related */.     
1b340 20 75 6e 73 69 67 6e 65 64 20 76 69 61 43 6f 72   unsigned viaCor
1b350 6f 75 74 69 6e 65 20 3a 31 3b 20 20 2f 2a 20 49  outine :1;  /* I
1b360 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73 20 61 20  mplemented as a 
1b370 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20  co-routine */.  
1b380 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73 52      unsigned isR
1b390 65 63 75 72 73 69 76 65 20 3a 31 3b 20 20 20 2f  ecursive :1;   /
1b3a0 2a 20 54 72 75 65 20 66 6f 72 20 72 65 63 75 72  * True for recur
1b3b0 73 69 76 65 20 72 65 66 65 72 65 6e 63 65 20 69  sive reference i
1b3c0 6e 20 57 49 54 48 20 2a 2f 0a 20 20 20 20 7d 20  n WITH */.    } 
1b3d0 66 67 3b 0a 20 20 20 20 69 6e 74 20 69 43 75 72  fg;.    int iCur
1b3e0 73 6f 72 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  sor;      /* The
1b3f0 20 56 44 42 45 20 63 75 72 73 6f 72 20 6e 75 6d   VDBE cursor num
1b400 62 65 72 20 75 73 65 64 20 74 6f 20 61 63 63 65  ber used to acce
1b410 73 73 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  ss this table */
1b420 0a 20 20 20 20 45 78 70 72 20 2a 70 4f 6e 3b 20  .    Expr *pOn; 
1b430 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 4f 4e         /* The ON
1b440 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69   clause of a joi
1b450 6e 20 2a 2f 0a 20 20 20 20 49 64 4c 69 73 74 20  n */.    IdList 
1b460 2a 70 55 73 69 6e 67 3b 20 20 20 2f 2a 20 54 68  *pUsing;   /* Th
1b470 65 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20 6f  e USING clause o
1b480 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20  f a join */.    
1b490 42 69 74 6d 61 73 6b 20 63 6f 6c 55 73 65 64 3b  Bitmask colUsed;
1b4a0 20 20 2f 2a 20 42 69 74 20 4e 20 28 31 3c 3c 4e    /* Bit N (1<<N
1b4b0 29 20 73 65 74 20 69 66 20 63 6f 6c 75 6d 6e 20  ) set if column 
1b4c0 4e 20 6f 66 20 70 54 61 62 20 69 73 20 75 73 65  N of pTab is use
1b4d0 64 20 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b  d */.    union {
1b4e0 0a 20 20 20 20 20 20 63 68 61 72 20 2a 7a 49 6e  .      char *zIn
1b4f0 64 65 78 65 64 42 79 3b 20 20 20 20 2f 2a 20 49  dexedBy;    /* I
1b500 64 65 6e 74 69 66 69 65 72 20 66 72 6f 6d 20 22  dentifier from "
1b510 49 4e 44 45 58 45 44 20 42 59 20 3c 7a 49 6e 64  INDEXED BY <zInd
1b520 65 78 3e 22 20 63 6c 61 75 73 65 20 2a 2f 0a 20  ex>" clause */. 
1b530 20 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70       ExprList *p
1b540 46 75 6e 63 41 72 67 3b 20 20 2f 2a 20 41 72 67  FuncArg;  /* Arg
1b550 75 6d 65 6e 74 73 20 74 6f 20 74 61 62 6c 65 2d  uments to table-
1b560 76 61 6c 75 65 64 2d 66 75 6e 63 74 69 6f 6e 20  valued-function 
1b570 2a 2f 0a 20 20 20 20 7d 20 75 31 3b 0a 20 20 20  */.    } u1;.   
1b580 20 49 6e 64 65 78 20 2a 70 49 42 49 6e 64 65 78   Index *pIBIndex
1b590 3b 20 20 2f 2a 20 49 6e 64 65 78 20 73 74 72 75  ;  /* Index stru
1b5a0 63 74 75 72 65 20 63 6f 72 72 65 73 70 6f 6e 64  cture correspond
1b5b0 69 6e 67 20 74 6f 20 75 31 2e 7a 49 6e 64 65 78  ing to u1.zIndex
1b5c0 65 64 42 79 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d  edBy */.  } a[1]
1b5d0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
1b5e0 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65   One entry for e
1b5f0 61 63 68 20 69 64 65 6e 74 69 66 69 65 72 20 6f  ach identifier o
1b600 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b  n the list */.};
1b610 0a 0a 2f 2a 0a 2a 2a 20 50 65 72 6d 69 74 74 65  ../*.** Permitte
1b620 64 20 76 61 6c 75 65 73 20 6f 66 20 74 68 65 20  d values of the 
1b630 53 72 63 4c 69 73 74 2e 61 2e 6a 6f 69 6e 74 79  SrcList.a.jointy
1b640 70 65 20 66 69 65 6c 64 0a 2a 2f 0a 23 64 65 66  pe field.*/.#def
1b650 69 6e 65 20 4a 54 5f 49 4e 4e 45 52 20 20 20 20  ine JT_INNER    
1b660 20 30 78 30 30 30 31 20 20 20 20 2f 2a 20 41 6e   0x0001    /* An
1b670 79 20 6b 69 6e 64 20 6f 66 20 69 6e 6e 65 72 20  y kind of inner 
1b680 6f 72 20 63 72 6f 73 73 20 6a 6f 69 6e 20 2a 2f  or cross join */
1b690 0a 23 64 65 66 69 6e 65 20 4a 54 5f 43 52 4f 53  .#define JT_CROS
1b6a0 53 20 20 20 20 20 30 78 30 30 30 32 20 20 20 20  S     0x0002    
1b6b0 2f 2a 20 45 78 70 6c 69 63 69 74 20 75 73 65 20  /* Explicit use 
1b6c0 6f 66 20 74 68 65 20 43 52 4f 53 53 20 6b 65 79  of the CROSS key
1b6d0 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  word */.#define 
1b6e0 4a 54 5f 4e 41 54 55 52 41 4c 20 20 20 30 78 30  JT_NATURAL   0x0
1b6f0 30 30 34 20 20 20 20 2f 2a 20 54 72 75 65 20 66  004    /* True f
1b700 6f 72 20 61 20 22 6e 61 74 75 72 61 6c 22 20 6a  or a "natural" j
1b710 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  oin */.#define J
1b720 54 5f 4c 45 46 54 20 20 20 20 20 20 30 78 30 30  T_LEFT      0x00
1b730 30 38 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 75  08    /* Left ou
1b740 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66  ter join */.#def
1b750 69 6e 65 20 4a 54 5f 52 49 47 48 54 20 20 20 20  ine JT_RIGHT    
1b760 20 30 78 30 30 31 30 20 20 20 20 2f 2a 20 52 69   0x0010    /* Ri
1b770 67 68 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a  ght outer join *
1b780 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4f 55 54  /.#define JT_OUT
1b790 45 52 20 20 20 20 20 30 78 30 30 32 30 20 20 20  ER     0x0020   
1b7a0 20 2f 2a 20 54 68 65 20 22 4f 55 54 45 52 22 20   /* The "OUTER" 
1b7b0 6b 65 79 77 6f 72 64 20 69 73 20 70 72 65 73 65  keyword is prese
1b7c0 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  nt */.#define JT
1b7d0 5f 45 52 52 4f 52 20 20 20 20 20 30 78 30 30 34  _ERROR     0x004
1b7e0 30 20 20 20 20 2f 2a 20 75 6e 6b 6e 6f 77 6e 20  0    /* unknown 
1b7f0 6f 72 20 75 6e 73 75 70 70 6f 72 74 65 64 20 6a  or unsupported j
1b800 6f 69 6e 20 74 79 70 65 20 2a 2f 0a 0a 0a 2f 2a  oin type */.../*
1b810 0a 2a 2a 20 46 6c 61 67 73 20 61 70 70 72 6f 70  .** Flags approp
1b820 72 69 61 74 65 20 66 6f 72 20 74 68 65 20 77 63  riate for the wc
1b830 74 72 6c 46 6c 61 67 73 20 70 61 72 61 6d 65 74  trlFlags paramet
1b840 65 72 20 6f 66 20 73 71 6c 69 74 65 33 57 68 65  er of sqlite3Whe
1b850 72 65 42 65 67 69 6e 28 29 0a 2a 2a 20 61 6e 64  reBegin().** and
1b860 20 74 68 65 20 57 68 65 72 65 49 6e 66 6f 2e 77   the WhereInfo.w
1b870 63 74 72 6c 46 6c 61 67 73 20 6d 65 6d 62 65 72  ctrlFlags member
1b880 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f  ..**.** Value co
1b890 6e 73 74 72 61 69 6e 74 73 20 28 65 6e 66 6f 72  nstraints (enfor
1b8a0 63 65 64 20 76 69 61 20 61 73 73 65 72 74 28 29  ced via assert()
1b8b0 29 3a 0a 2a 2a 20 20 20 20 20 57 48 45 52 45 5f  ):.**     WHERE_
1b8c0 55 53 45 5f 4c 49 4d 49 54 20 20 3d 3d 20 53 46  USE_LIMIT  == SF
1b8d0 5f 46 69 78 65 64 4c 69 6d 69 74 0a 2a 2f 0a 23  _FixedLimit.*/.#
1b8e0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44  define WHERE_ORD
1b8f0 45 52 42 59 5f 4e 4f 52 4d 41 4c 20 20 20 30 78  ERBY_NORMAL   0x
1b900 30 30 30 30 20 2f 2a 20 4e 6f 2d 6f 70 20 2a 2f  0000 /* No-op */
1b910 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
1b920 52 44 45 52 42 59 5f 4d 49 4e 20 20 20 20 20 20  RDERBY_MIN      
1b930 30 78 30 30 30 31 20 2f 2a 20 4f 52 44 45 52 20  0x0001 /* ORDER 
1b940 42 59 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f  BY processing fo
1b950 72 20 6d 69 6e 28 29 20 66 75 6e 63 20 2a 2f 0a  r min() func */.
1b960 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52  #define WHERE_OR
1b970 44 45 52 42 59 5f 4d 41 58 20 20 20 20 20 20 30  DERBY_MAX      0
1b980 78 30 30 30 32 20 2f 2a 20 4f 52 44 45 52 20 42  x0002 /* ORDER B
1b990 59 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72  Y processing for
1b9a0 20 6d 61 78 28 29 20 66 75 6e 63 20 2a 2f 0a 23   max() func */.#
1b9b0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45  define WHERE_ONE
1b9c0 50 41 53 53 5f 44 45 53 49 52 45 44 20 20 30 78  PASS_DESIRED  0x
1b9d0 30 30 30 34 20 2f 2a 20 57 61 6e 74 20 74 6f 20  0004 /* Want to 
1b9e0 64 6f 20 6f 6e 65 2d 70 61 73 73 20 55 50 44 41  do one-pass UPDA
1b9f0 54 45 2f 44 45 4c 45 54 45 20 2a 2f 0a 23 64 65  TE/DELETE */.#de
1ba00 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50 41  fine WHERE_ONEPA
1ba10 53 53 5f 4d 55 4c 54 49 52 4f 57 20 30 78 30 30  SS_MULTIROW 0x00
1ba20 30 38 20 2f 2a 20 4f 4e 45 50 41 53 53 20 69 73  08 /* ONEPASS is
1ba30 20 6f 6b 20 77 69 74 68 20 6d 75 6c 74 69 70 6c   ok with multipl
1ba40 65 20 72 6f 77 73 20 2a 2f 0a 23 64 65 66 69 6e  e rows */.#defin
1ba50 65 20 57 48 45 52 45 5f 44 55 50 4c 49 43 41 54  e WHERE_DUPLICAT
1ba60 45 53 5f 4f 4b 20 20 20 20 30 78 30 30 31 30 20  ES_OK    0x0010 
1ba70 2f 2a 20 4f 6b 20 74 6f 20 72 65 74 75 72 6e 20  /* Ok to return 
1ba80 61 20 72 6f 77 20 6d 6f 72 65 20 74 68 61 6e 20  a row more than 
1ba90 6f 6e 63 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  once */.#define 
1baa0 57 48 45 52 45 5f 4f 52 5f 53 55 42 43 4c 41 55  WHERE_OR_SUBCLAU
1bab0 53 45 20 20 20 20 20 30 78 30 30 32 30 20 2f 2a  SE     0x0020 /*
1bac0 20 50 72 6f 63 65 73 73 69 6e 67 20 61 20 73 75   Processing a su
1bad0 62 2d 57 48 45 52 45 20 61 73 20 70 61 72 74 20  b-WHERE as part 
1bae0 6f 66 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  of.             
1baf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb00 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65 20           ** the 
1bb10 4f 52 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20  OR optimization 
1bb20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
1bb30 45 5f 47 52 4f 55 50 42 59 20 20 20 20 20 20 20  E_GROUPBY       
1bb40 20 20 20 30 78 30 30 34 30 20 2f 2a 20 70 4f 72     0x0040 /* pOr
1bb50 64 65 72 42 79 20 69 73 20 72 65 61 6c 6c 79 20  derBy is really 
1bb60 61 20 47 52 4f 55 50 20 42 59 20 2a 2f 0a 23 64  a GROUP BY */.#d
1bb70 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54  efine WHERE_DIST
1bb80 49 4e 43 54 42 59 20 20 20 20 20 20 20 30 78 30  INCTBY       0x0
1bb90 30 38 30 20 2f 2a 20 70 4f 72 64 65 72 62 79 20  080 /* pOrderby 
1bba0 69 73 20 72 65 61 6c 6c 79 20 61 20 44 49 53 54  is really a DIST
1bbb0 49 4e 43 54 20 63 6c 61 75 73 65 20 2a 2f 0a 23  INCT clause */.#
1bbc0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 57 41 4e  define WHERE_WAN
1bbd0 54 5f 44 49 53 54 49 4e 43 54 20 20 20 20 30 78  T_DISTINCT    0x
1bbe0 30 31 30 30 20 2f 2a 20 41 6c 6c 20 6f 75 74 70  0100 /* All outp
1bbf0 75 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 64  ut needs to be d
1bc00 69 73 74 69 6e 63 74 20 2a 2f 0a 23 64 65 66 69  istinct */.#defi
1bc10 6e 65 20 57 48 45 52 45 5f 53 4f 52 54 42 59 47  ne WHERE_SORTBYG
1bc20 52 4f 55 50 20 20 20 20 20 20 30 78 30 32 30 30  ROUP      0x0200
1bc30 20 2f 2a 20 53 75 70 70 6f 72 74 20 73 71 6c 69   /* Support sqli
1bc40 74 65 33 57 68 65 72 65 49 73 53 6f 72 74 65 64  te3WhereIsSorted
1bc50 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  () */.#define WH
1bc60 45 52 45 5f 53 45 45 4b 5f 54 41 42 4c 45 20 20  ERE_SEEK_TABLE  
1bc70 20 20 20 20 20 30 78 30 34 30 30 20 2f 2a 20 44       0x0400 /* D
1bc80 6f 20 6e 6f 74 20 64 65 66 65 72 20 73 65 65 6b  o not defer seek
1bc90 73 20 6f 6e 20 6d 61 69 6e 20 74 61 62 6c 65 20  s on main table 
1bca0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1bcb0 5f 4f 52 44 45 52 42 59 5f 4c 49 4d 49 54 20 20  _ORDERBY_LIMIT  
1bcc0 20 20 30 78 30 38 30 30 20 2f 2a 20 4f 52 44 45    0x0800 /* ORDE
1bcd0 52 42 59 2b 4c 49 4d 49 54 20 6f 6e 20 74 68 65  RBY+LIMIT on the
1bce0 20 69 6e 6e 65 72 20 6c 6f 6f 70 20 2a 2f 0a 23   inner loop */.#
1bcf0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 53 45 45  define WHERE_SEE
1bd00 4b 5f 55 4e 49 51 5f 54 41 42 4c 45 20 20 30 78  K_UNIQ_TABLE  0x
1bd10 31 30 30 30 20 2f 2a 20 44 6f 20 6e 6f 74 20 64  1000 /* Do not d
1bd20 65 66 65 72 20 73 65 65 6b 73 20 69 66 20 75 6e  efer seeks if un
1bd30 69 71 75 65 20 2a 2f 0a 20 20 20 20 20 20 20 20  ique */.        
1bd40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd50 2f 2a 20 20 20 20 20 30 78 32 30 30 30 20 20 20  /*     0x2000   
1bd60 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 75   not currently u
1bd70 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  sed */.#define W
1bd80 48 45 52 45 5f 55 53 45 5f 4c 49 4d 49 54 20 20  HERE_USE_LIMIT  
1bd90 20 20 20 20 20 20 30 78 34 30 30 30 20 2f 2a 20        0x4000 /* 
1bda0 55 73 65 20 74 68 65 20 4c 49 4d 49 54 20 69 6e  Use the LIMIT in
1bdb0 20 63 6f 73 74 20 65 73 74 69 6d 61 74 65 73 20   cost estimates 
1bdc0 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  */.             
1bdd0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20             /*   
1bde0 20 20 30 78 38 30 30 30 20 20 20 20 6e 6f 74 20    0x8000    not 
1bdf0 63 75 72 72 65 6e 74 6c 79 20 75 73 65 64 20 2a  currently used *
1be00 2f 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 72 65  /../* Allowed re
1be10 74 75 72 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d  turn values from
1be20 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 44   sqlite3WhereIsD
1be30 69 73 74 69 6e 63 74 28 29 0a 2a 2f 0a 23 64 65  istinct().*/.#de
1be40 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49  fine WHERE_DISTI
1be50 4e 43 54 5f 4e 4f 4f 50 20 20 20 20 20 20 30 20  NCT_NOOP      0 
1be60 20 2f 2a 20 44 49 53 54 49 4e 43 54 20 6b 65 79   /* DISTINCT key
1be70 77 6f 72 64 20 6e 6f 74 20 75 73 65 64 20 2a 2f  word not used */
1be80 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44  .#define WHERE_D
1be90 49 53 54 49 4e 43 54 5f 55 4e 49 51 55 45 20 20  ISTINCT_UNIQUE  
1bea0 20 20 31 20 20 2f 2a 20 4e 6f 20 64 75 70 6c 69    1  /* No dupli
1beb0 63 61 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  cates */.#define
1bec0 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f   WHERE_DISTINCT_
1bed0 4f 52 44 45 52 45 44 20 20 20 32 20 20 2f 2a 20  ORDERED   2  /* 
1bee0 41 6c 6c 20 64 75 70 6c 69 63 61 74 65 73 20 61  All duplicates a
1bef0 72 65 20 61 64 6a 61 63 65 6e 74 20 2a 2f 0a 23  re adjacent */.#
1bf00 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53  define WHERE_DIS
1bf10 54 49 4e 43 54 5f 55 4e 4f 52 44 45 52 45 44 20  TINCT_UNORDERED 
1bf20 33 20 20 2f 2a 20 44 75 70 6c 69 63 61 74 65 73  3  /* Duplicates
1bf30 20 61 72 65 20 73 63 61 74 74 65 72 65 64 20 2a   are scattered *
1bf40 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e 61 6d 65 43  /../*.** A NameC
1bf50 6f 6e 74 65 78 74 20 64 65 66 69 6e 65 73 20 61  ontext defines a
1bf60 20 63 6f 6e 74 65 78 74 20 69 6e 20 77 68 69 63   context in whic
1bf70 68 20 74 6f 20 72 65 73 6f 6c 76 65 20 74 61 62  h to resolve tab
1bf80 6c 65 20 61 6e 64 20 63 6f 6c 75 6d 6e 0a 2a 2a  le and column.**
1bf90 20 6e 61 6d 65 73 2e 20 20 54 68 65 20 63 6f 6e   names.  The con
1bfa0 74 65 78 74 20 63 6f 6e 73 69 73 74 73 20 6f 66  text consists of
1bfb0 20 61 20 6c 69 73 74 20 6f 66 20 74 61 62 6c 65   a list of table
1bfc0 73 20 28 74 68 65 20 70 53 72 63 4c 69 73 74 29  s (the pSrcList)
1bfd0 20 66 69 65 6c 64 20 61 6e 64 0a 2a 2a 20 61 20   field and.** a 
1bfe0 6c 69 73 74 20 6f 66 20 6e 61 6d 65 64 20 65 78  list of named ex
1bff0 70 72 65 73 73 69 6f 6e 20 28 70 45 4c 69 73 74  pression (pEList
1c000 29 2e 20 20 54 68 65 20 6e 61 6d 65 64 20 65 78  ).  The named ex
1c010 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 20 6d 61  pression list ma
1c020 79 0a 2a 2a 20 62 65 20 4e 55 4c 4c 2e 20 20 54  y.** be NULL.  T
1c030 68 65 20 70 53 72 63 20 63 6f 72 72 65 73 70 6f  he pSrc correspo
1c040 6e 64 73 20 74 6f 20 74 68 65 20 46 52 4f 4d 20  nds to the FROM 
1c050 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45  clause of a SELE
1c060 43 54 20 6f 72 0a 2a 2a 20 74 6f 20 74 68 65 20  CT or.** to the 
1c070 74 61 62 6c 65 20 62 65 69 6e 67 20 6f 70 65 72  table being oper
1c080 61 74 65 64 20 6f 6e 20 62 79 20 49 4e 53 45 52  ated on by INSER
1c090 54 2c 20 55 50 44 41 54 45 2c 20 6f 72 20 44 45  T, UPDATE, or DE
1c0a0 4c 45 54 45 2e 20 20 54 68 65 0a 2a 2a 20 70 45  LETE.  The.** pE
1c0b0 4c 69 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 73  List corresponds
1c0c0 20 74 6f 20 74 68 65 20 72 65 73 75 6c 74 20 73   to the result s
1c0d0 65 74 20 6f 66 20 61 20 53 45 4c 45 43 54 20 61  et of a SELECT a
1c0e0 6e 64 20 69 73 20 4e 55 4c 4c 20 66 6f 72 0a 2a  nd is NULL for.*
1c0f0 2a 20 6f 74 68 65 72 20 73 74 61 74 65 6d 65 6e  * other statemen
1c100 74 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65 43 6f  ts..**.** NameCo
1c110 6e 74 65 78 74 73 20 63 61 6e 20 62 65 20 6e 65  ntexts can be ne
1c120 73 74 65 64 2e 20 20 57 68 65 6e 20 72 65 73 6f  sted.  When reso
1c130 6c 76 69 6e 67 20 6e 61 6d 65 73 2c 20 74 68 65  lving names, the
1c140 20 69 6e 6e 65 72 2d 6d 6f 73 74 0a 2a 2a 20 63   inner-most.** c
1c150 6f 6e 74 65 78 74 20 69 73 20 73 65 61 72 63 68  ontext is search
1c160 65 64 20 66 69 72 73 74 2e 20 20 49 66 20 6e 6f  ed first.  If no
1c170 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c   match is found,
1c180 20 74 68 65 20 6e 65 78 74 20 6f 75 74 65 72 0a   the next outer.
1c190 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73 20 63 68  ** context is ch
1c1a0 65 63 6b 65 64 2e 20 20 49 66 20 74 68 65 72 65  ecked.  If there
1c1b0 20 69 73 20 73 74 69 6c 6c 20 6e 6f 20 6d 61 74   is still no mat
1c1c0 63 68 2c 20 74 68 65 20 6e 65 78 74 20 63 6f 6e  ch, the next con
1c1d0 74 65 78 74 0a 2a 2a 20 69 73 20 63 68 65 63 6b  text.** is check
1c1e0 65 64 2e 20 20 54 68 69 73 20 70 72 6f 63 65 73  ed.  This proces
1c1f0 73 20 63 6f 6e 74 69 6e 75 65 73 20 75 6e 74 69  s continues unti
1c200 6c 20 65 69 74 68 65 72 20 61 20 6d 61 74 63 68  l either a match
1c210 20 69 73 20 66 6f 75 6e 64 0a 2a 2a 20 6f 72 20   is found.** or 
1c220 61 6c 6c 20 63 6f 6e 74 65 78 74 73 20 61 72 65  all contexts are
1c230 20 63 68 65 63 6b 2e 20 20 57 68 65 6e 20 61 20   check.  When a 
1c240 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20  match is found, 
1c250 74 68 65 20 6e 52 65 66 20 6d 65 6d 62 65 72 20  the nRef member 
1c260 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 78  of.** the contex
1c270 74 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  t containing the
1c280 20 6d 61 74 63 68 20 69 73 20 69 6e 63 72 65 6d   match is increm
1c290 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 45 61 63  ented..**.** Eac
1c2a0 68 20 73 75 62 71 75 65 72 79 20 67 65 74 73 20  h subquery gets 
1c2b0 61 20 6e 65 77 20 4e 61 6d 65 43 6f 6e 74 65 78  a new NameContex
1c2c0 74 2e 20 20 54 68 65 20 70 4e 65 78 74 20 66 69  t.  The pNext fi
1c2d0 65 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20 74 68  eld points to th
1c2e0 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74  e.** NameContext
1c2f0 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20 71   in the parent q
1c300 75 65 72 79 2e 20 20 54 68 75 73 20 74 68 65 20  uery.  Thus the 
1c310 70 72 6f 63 65 73 73 20 6f 66 20 73 63 61 6e 6e  process of scann
1c320 69 6e 67 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43  ing the.** NameC
1c330 6f 6e 74 65 78 74 20 6c 69 73 74 20 63 6f 72 72  ontext list corr
1c340 65 73 70 6f 6e 64 73 20 74 6f 20 73 65 61 72 63  esponds to searc
1c350 68 69 6e 67 20 74 68 72 6f 75 67 68 20 73 75 63  hing through suc
1c360 63 65 73 73 69 76 65 6c 79 20 6f 75 74 65 72 0a  cessively outer.
1c370 2a 2a 20 73 75 62 71 75 65 72 69 65 73 20 6c 6f  ** subqueries lo
1c380 6f 6b 69 6e 67 20 66 6f 72 20 61 20 6d 61 74 63  oking for a matc
1c390 68 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4e 61 6d  h..*/.struct Nam
1c3a0 65 43 6f 6e 74 65 78 74 20 7b 0a 20 20 50 61 72  eContext {.  Par
1c3b0 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20  se *pParse;     
1c3c0 20 20 2f 2a 20 54 68 65 20 70 61 72 73 65 72 20    /* The parser 
1c3d0 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53  */.  SrcList *pS
1c3e0 72 63 4c 69 73 74 3b 20 20 20 2f 2a 20 4f 6e 65  rcList;   /* One
1c3f0 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65 73 20   or more tables 
1c400 75 73 65 64 20 74 6f 20 72 65 73 6f 6c 76 65 20  used to resolve 
1c410 6e 61 6d 65 73 20 2a 2f 0a 20 20 75 6e 69 6f 6e  names */.  union
1c420 20 7b 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20   {.    ExprList 
1c430 2a 70 45 4c 69 73 74 3b 20 20 20 20 2f 2a 20 4f  *pEList;    /* O
1c440 70 74 69 6f 6e 61 6c 20 6c 69 73 74 20 6f 66 20  ptional list of 
1c450 72 65 73 75 6c 74 2d 73 65 74 20 63 6f 6c 75 6d  result-set colum
1c460 6e 73 20 2a 2f 0a 20 20 20 20 41 67 67 49 6e 66  ns */.    AggInf
1c470 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20 2f  o *pAggInfo;   /
1c480 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  * Information ab
1c490 6f 75 74 20 61 67 67 72 65 67 61 74 65 73 20 61  out aggregates a
1c4a0 74 20 74 68 69 73 20 6c 65 76 65 6c 20 2a 2f 0a  t this level */.
1c4b0 20 20 20 20 55 70 73 65 72 74 20 2a 70 55 70 73      Upsert *pUps
1c4c0 65 72 74 3b 20 20 20 20 20 2f 2a 20 4f 4e 20 43  ert;     /* ON C
1c4d0 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 69  ONFLICT clause i
1c4e0 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20  nformation from 
1c4f0 61 6e 20 75 70 73 65 72 74 20 2a 2f 0a 20 20 7d  an upsert */.  }
1c500 20 75 4e 43 3b 0a 20 20 4e 61 6d 65 43 6f 6e 74   uNC;.  NameCont
1c510 65 78 74 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20  ext *pNext;  /* 
1c520 4e 65 78 74 20 6f 75 74 65 72 20 6e 61 6d 65 20  Next outer name 
1c530 63 6f 6e 74 65 78 74 2e 20 20 4e 55 4c 4c 20 66  context.  NULL f
1c540 6f 72 20 6f 75 74 65 72 6d 6f 73 74 20 2a 2f 0a  or outermost */.
1c550 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20    int nRef;     
1c560 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1c570 20 6f 66 20 6e 61 6d 65 73 20 72 65 73 6f 6c 76   of names resolv
1c580 65 64 20 62 79 20 74 68 69 73 20 63 6f 6e 74 65  ed by this conte
1c590 78 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72  xt */.  int nErr
1c5a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1c5b0 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73  Number of errors
1c5c0 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 77 68 69   encountered whi
1c5d0 6c 65 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d  le resolving nam
1c5e0 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 63 46 6c  es */.  u16 ncFl
1c5f0 61 67 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ags;         /* 
1c600 5a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 4e 43 5f  Zero or more NC_
1c610 2a 20 66 6c 61 67 73 20 64 65 66 69 6e 65 64 20  * flags defined 
1c620 62 65 6c 6f 77 20 2a 2f 0a 20 20 53 65 6c 65 63  below */.  Selec
1c630 74 20 2a 70 57 69 6e 53 65 6c 65 63 74 3b 20 20  t *pWinSelect;  
1c640 2f 2a 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  /* SELECT statem
1c650 65 6e 74 20 66 6f 72 20 61 6e 79 20 77 69 6e 64  ent for any wind
1c660 6f 77 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a  ow functions */.
1c670 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  };../*.** Allowe
1c680 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65  d values for the
1c690 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2c 20 6e 63   NameContext, nc
1c6a0 46 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a  Flags field..**.
1c6b0 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61  ** Value constra
1c6c0 69 6e 74 73 20 28 61 6c 6c 20 63 68 65 63 6b 65  ints (all checke
1c6d0 64 20 76 69 61 20 61 73 73 65 72 74 28 29 29 3a  d via assert()):
1c6e0 0a 2a 2a 20 20 20 20 4e 43 5f 48 61 73 41 67 67  .**    NC_HasAgg
1c6f0 20 20 20 20 3d 3d 20 53 46 5f 48 61 73 41 67 67      == SF_HasAgg
1c700 0a 2a 2a 20 20 20 20 4e 43 5f 4d 69 6e 4d 61 78  .**    NC_MinMax
1c710 41 67 67 20 3d 3d 20 53 46 5f 4d 69 6e 4d 61 78  Agg == SF_MinMax
1c720 41 67 67 20 3d 3d 20 53 51 4c 49 54 45 5f 46 55  Agg == SQLITE_FU
1c730 4e 43 5f 4d 49 4e 4d 41 58 0a 2a 2a 0a 2a 2f 0a  NC_MINMAX.**.*/.
1c740 23 64 65 66 69 6e 65 20 4e 43 5f 41 6c 6c 6f 77  #define NC_Allow
1c750 41 67 67 20 20 30 78 30 30 30 31 20 20 2f 2a 20  Agg  0x0001  /* 
1c760 41 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  Aggregate functi
1c770 6f 6e 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 20  ons are allowed 
1c780 68 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  here */.#define 
1c790 4e 43 5f 50 61 72 74 49 64 78 20 20 20 30 78 30  NC_PartIdx   0x0
1c7a0 30 30 32 20 20 2f 2a 20 54 72 75 65 20 69 66 20  002  /* True if 
1c7b0 72 65 73 6f 6c 76 69 6e 67 20 61 20 70 61 72 74  resolving a part
1c7c0 69 61 6c 20 69 6e 64 65 78 20 57 48 45 52 45 20  ial index WHERE 
1c7d0 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 73  */.#define NC_Is
1c7e0 43 68 65 63 6b 20 20 20 30 78 30 30 30 34 20 20  Check   0x0004  
1c7f0 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c  /* True if resol
1c800 76 69 6e 67 20 6e 61 6d 65 73 20 69 6e 20 61 20  ving names in a 
1c810 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74  CHECK constraint
1c820 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49   */.#define NC_I
1c830 6e 41 67 67 46 75 6e 63 20 30 78 30 30 30 38 20  nAggFunc 0x0008 
1c840 20 2f 2a 20 54 72 75 65 20 69 66 20 61 6e 61 6c   /* True if anal
1c850 79 7a 69 6e 67 20 61 72 67 75 6d 65 6e 74 73 20  yzing arguments 
1c860 74 6f 20 61 6e 20 61 67 67 20 66 75 6e 63 20 2a  to an agg func *
1c870 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 48 61 73  /.#define NC_Has
1c880 41 67 67 20 20 20 20 30 78 30 30 31 30 20 20 2f  Agg    0x0010  /
1c890 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67  * One or more ag
1c8a0 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
1c8b0 73 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e  s seen */.#defin
1c8c0 65 20 4e 43 5f 49 64 78 45 78 70 72 20 20 20 30  e NC_IdxExpr   0
1c8d0 78 30 30 32 30 20 20 2f 2a 20 54 72 75 65 20 69  x0020  /* True i
1c8e0 66 20 72 65 73 6f 6c 76 69 6e 67 20 63 6f 6c 75  f resolving colu
1c8f0 6d 6e 73 20 6f 66 20 43 52 45 41 54 45 20 49 4e  mns of CREATE IN
1c900 44 45 58 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  DEX */.#define N
1c910 43 5f 56 61 72 53 65 6c 65 63 74 20 30 78 30 30  C_VarSelect 0x00
1c920 34 30 20 20 2f 2a 20 41 20 63 6f 72 72 65 6c 61  40  /* A correla
1c930 74 65 64 20 73 75 62 71 75 65 72 79 20 68 61 73  ted subquery has
1c940 20 62 65 65 6e 20 73 65 65 6e 20 2a 2f 0a 23 64   been seen */.#d
1c950 65 66 69 6e 65 20 4e 43 5f 55 45 4c 69 73 74 20  efine NC_UEList 
1c960 20 20 20 30 78 30 30 38 30 20 20 2f 2a 20 54 72     0x0080  /* Tr
1c970 75 65 20 69 66 20 75 4e 43 2e 70 45 4c 69 73 74  ue if uNC.pEList
1c980 20 69 73 20 75 73 65 64 20 2a 2f 0a 23 64 65 66   is used */.#def
1c990 69 6e 65 20 4e 43 5f 55 41 67 67 49 6e 66 6f 20  ine NC_UAggInfo 
1c9a0 20 30 78 30 31 30 30 20 20 2f 2a 20 54 72 75 65   0x0100  /* True
1c9b0 20 69 66 20 75 4e 43 2e 70 41 67 67 49 6e 66 6f   if uNC.pAggInfo
1c9c0 20 69 73 20 75 73 65 64 20 2a 2f 0a 23 64 65 66   is used */.#def
1c9d0 69 6e 65 20 4e 43 5f 55 55 70 73 65 72 74 20 20  ine NC_UUpsert  
1c9e0 20 30 78 30 32 30 30 20 20 2f 2a 20 54 72 75 65   0x0200  /* True
1c9f0 20 69 66 20 75 4e 43 2e 70 55 70 73 65 72 74 20   if uNC.pUpsert 
1ca00 69 73 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69  is used */.#defi
1ca10 6e 65 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20  ne NC_MinMaxAgg 
1ca20 30 78 31 30 30 30 20 20 2f 2a 20 6d 69 6e 2f 6d  0x1000  /* min/m
1ca30 61 78 20 61 67 67 72 65 67 61 74 65 73 20 73 65  ax aggregates se
1ca40 65 6e 2e 20 20 53 65 65 20 6e 6f 74 65 20 61 62  en.  See note ab
1ca50 6f 76 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  ove */.#define N
1ca60 43 5f 43 6f 6d 70 6c 65 78 20 20 20 30 78 32 30  C_Complex   0x20
1ca70 30 30 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61  00  /* True if a
1ca80 20 66 75 6e 63 74 69 6f 6e 20 6f 72 20 73 75 62   function or sub
1ca90 71 75 65 72 79 20 73 65 65 6e 20 2a 2f 0a 23 64  query seen */.#d
1caa0 65 66 69 6e 65 20 4e 43 5f 41 6c 6c 6f 77 57 69  efine NC_AllowWi
1cab0 6e 20 20 30 78 34 30 30 30 20 20 2f 2a 20 57 69  n  0x4000  /* Wi
1cac0 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 73 20 61  ndow functions a
1cad0 72 65 20 61 6c 6c 6f 77 65 64 20 68 65 72 65 20  re allowed here 
1cae0 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  */../*.** An ins
1caf0 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
1cb00 6c 6f 77 69 6e 67 20 6f 62 6a 65 63 74 20 64 65  lowing object de
1cb10 73 63 72 69 62 65 73 20 61 20 73 69 6e 67 6c 65  scribes a single
1cb20 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 0a 2a 2a 20   ON CONFLICT.** 
1cb30 63 6c 61 75 73 65 20 69 6e 20 61 6e 20 75 70 73  clause in an ups
1cb40 65 72 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70  ert..**.** The p
1cb50 55 70 73 65 72 74 54 61 72 67 65 74 20 66 69 65  UpsertTarget fie
1cb60 6c 64 20 69 73 20 6f 6e 6c 79 20 73 65 74 20 69  ld is only set i
1cb70 66 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43  f the ON CONFLIC
1cb80 54 20 63 6c 61 75 73 65 20 69 6e 63 6c 75 64 65  T clause include
1cb90 73 0a 2a 2a 20 63 6f 6e 66 6c 69 63 74 2d 74 61  s.** conflict-ta
1cba0 72 67 65 74 20 63 6c 61 75 73 65 2e 20 20 28 49  rget clause.  (I
1cbb0 6e 20 22 4f 4e 20 43 4f 4e 46 4c 49 43 54 28 61  n "ON CONFLICT(a
1cbc0 2c 62 29 22 20 74 68 65 20 22 28 61 2c 62 29 22  ,b)" the "(a,b)"
1cbd0 20 69 73 20 74 68 65 0a 2a 2a 20 63 6f 6e 66 6c   is the.** confl
1cbe0 69 63 74 2d 74 61 72 67 65 74 20 63 6c 61 75 73  ict-target claus
1cbf0 65 2e 29 20 20 54 68 65 20 70 55 70 73 65 72 74  e.)  The pUpsert
1cc00 54 61 72 67 65 74 57 68 65 72 65 20 69 73 20 74  TargetWhere is t
1cc10 68 65 20 6f 70 74 69 6f 6e 61 6c 0a 2a 2a 20 57  he optional.** W
1cc20 48 45 52 45 20 63 6c 61 75 73 65 20 75 73 65 64  HERE clause used
1cc30 20 74 6f 20 69 64 65 6e 74 69 66 79 20 70 61 72   to identify par
1cc40 74 69 61 6c 20 75 6e 69 71 75 65 20 69 6e 64 65  tial unique inde
1cc50 78 65 73 2e 0a 2a 2a 0a 2a 2a 20 70 55 70 73 65  xes..**.** pUpse
1cc60 72 74 53 65 74 20 69 73 20 74 68 65 20 6c 69 73  rtSet is the lis
1cc70 74 20 6f 66 20 63 6f 6c 75 6d 6e 3d 65 78 70 72  t of column=expr
1cc80 20 74 65 72 6d 73 20 6f 66 20 74 68 65 20 55 50   terms of the UP
1cc90 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 2e 20  DATE statement. 
1cca0 0a 2a 2a 20 54 68 65 20 70 55 70 73 65 72 74 53  .** The pUpsertS
1ccb0 65 74 20 66 69 65 6c 64 20 69 73 20 4e 55 4c 4c  et field is NULL
1ccc0 20 66 6f 72 20 61 20 4f 4e 20 43 4f 4e 46 4c 49   for a ON CONFLI
1ccd0 43 54 20 44 4f 20 4e 4f 54 48 49 4e 47 2e 20 20  CT DO NOTHING.  
1cce0 54 68 65 0a 2a 2a 20 70 55 70 73 65 72 74 57 68  The.** pUpsertWh
1ccf0 65 72 65 20 69 73 20 74 68 65 20 57 48 45 52 45  ere is the WHERE
1cd00 20 63 6c 61 75 73 65 20 66 6f 72 20 74 68 65 20   clause for the 
1cd10 55 50 44 41 54 45 20 61 6e 64 20 69 73 20 4e 55  UPDATE and is NU
1cd20 4c 4c 20 69 66 20 74 68 65 0a 2a 2a 20 57 48 45  LL if the.** WHE
1cd30 52 45 20 63 6c 61 75 73 65 20 69 73 20 6f 6d 69  RE clause is omi
1cd40 74 74 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tted..*/.struct 
1cd50 55 70 73 65 72 74 20 7b 0a 20 20 45 78 70 72 4c  Upsert {.  ExprL
1cd60 69 73 74 20 2a 70 55 70 73 65 72 74 54 61 72 67  ist *pUpsertTarg
1cd70 65 74 3b 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c  et;  /* Optional
1cd80 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 20   description of 
1cd90 63 6f 6e 66 6c 69 63 74 69 6e 67 20 69 6e 64 65  conflicting inde
1cda0 78 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 55 70  x */.  Expr *pUp
1cdb0 73 65 72 74 54 61 72 67 65 74 57 68 65 72 65 3b  sertTargetWhere;
1cdc0 20 2f 2a 20 57 48 45 52 45 20 63 6c 61 75 73 65   /* WHERE clause
1cdd0 20 66 6f 72 20 70 61 72 74 69 61 6c 20 69 6e 64   for partial ind
1cde0 65 78 20 74 61 72 67 65 74 73 20 2a 2f 0a 20 20  ex targets */.  
1cdf0 45 78 70 72 4c 69 73 74 20 2a 70 55 70 73 65 72  ExprList *pUpser
1ce00 74 53 65 74 3b 20 20 20 20 20 2f 2a 20 54 68 65  tSet;     /* The
1ce10 20 53 45 54 20 63 6c 61 75 73 65 20 66 72 6f 6d   SET clause from
1ce20 20 61 6e 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20   an ON CONFLICT 
1ce30 55 50 44 41 54 45 20 2a 2f 0a 20 20 45 78 70 72  UPDATE */.  Expr
1ce40 20 2a 70 55 70 73 65 72 74 57 68 65 72 65 3b 20   *pUpsertWhere; 
1ce50 20 20 20 20 20 20 2f 2a 20 57 48 45 52 45 20 63        /* WHERE c
1ce60 6c 61 75 73 65 20 66 6f 72 20 74 68 65 20 4f 4e  lause for the ON
1ce70 20 43 4f 4e 46 4c 49 43 54 20 55 50 44 41 54 45   CONFLICT UPDATE
1ce80 20 2a 2f 0a 20 20 2f 2a 20 54 68 65 20 66 69 65   */.  /* The fie
1ce90 6c 64 73 20 61 62 6f 76 65 20 63 6f 6d 70 72 69  lds above compri
1cea0 73 65 20 74 68 65 20 70 61 72 73 65 20 74 72 65  se the parse tre
1ceb0 65 20 66 6f 72 20 74 68 65 20 75 70 73 65 72 74  e for the upsert
1cec0 20 63 6c 61 75 73 65 2e 0a 20 20 2a 2a 20 54 68   clause..  ** Th
1ced0 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 61  e fields below a
1cee0 72 65 20 75 73 65 64 20 74 6f 20 74 72 61 6e 73  re used to trans
1cef0 66 65 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  fer information 
1cf00 66 72 6f 6d 20 74 68 65 20 49 4e 53 45 52 54 0a  from the INSERT.
1cf10 20 20 2a 2a 20 70 72 6f 63 65 73 73 69 6e 67 20    ** processing 
1cf20 64 6f 77 6e 20 69 6e 74 6f 20 74 68 65 20 55 50  down into the UP
1cf30 44 41 54 45 20 70 72 6f 63 65 73 73 69 6e 67 20  DATE processing 
1cf40 77 68 69 6c 65 20 67 65 6e 65 72 61 74 69 6e 67  while generating
1cf50 20 63 6f 64 65 2e 0a 20 20 2a 2a 20 55 70 73 65   code..  ** Upse
1cf60 72 74 20 6f 77 6e 73 20 74 68 65 20 6d 65 6d 6f  rt owns the memo
1cf70 72 79 20 61 6c 6c 6f 63 61 74 65 64 20 61 62 6f  ry allocated abo
1cf80 76 65 2c 20 62 75 74 20 6e 6f 74 20 74 68 65 20  ve, but not the 
1cf90 6d 65 6d 6f 72 79 20 62 65 6c 6f 77 2e 20 2a 2f  memory below. */
1cfa0 0a 20 20 49 6e 64 65 78 20 2a 70 55 70 73 65 72  .  Index *pUpser
1cfb0 74 49 64 78 3b 20 20 20 20 20 20 20 20 2f 2a 20  tIdx;        /* 
1cfc0 43 6f 6e 73 74 72 61 69 6e 74 20 74 68 61 74 20  Constraint that 
1cfd0 70 55 70 73 65 72 74 54 61 72 67 65 74 20 69 64  pUpsertTarget id
1cfe0 65 6e 74 69 66 69 65 73 20 2a 2f 0a 20 20 53 72  entifies */.  Sr
1cff0 63 4c 69 73 74 20 2a 70 55 70 73 65 72 74 53 72  cList *pUpsertSr
1d000 63 3b 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65  c;      /* Table
1d010 20 74 6f 20 62 65 20 75 70 64 61 74 65 64 20 2a   to be updated *
1d020 2f 0a 20 20 69 6e 74 20 72 65 67 44 61 74 61 3b  /.  int regData;
1d030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1d040 20 46 69 72 73 74 20 72 65 67 69 73 74 65 72 20   First register 
1d050 68 6f 6c 64 69 6e 67 20 61 72 72 61 79 20 6f 66  holding array of
1d060 20 56 41 4c 55 45 53 20 2a 2f 0a 20 20 69 6e 74   VALUES */.  int
1d070 20 69 44 61 74 61 43 75 72 3b 20 20 20 20 20 20   iDataCur;      
1d080 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20         /* Index 
1d090 6f 66 20 74 68 65 20 64 61 74 61 20 63 75 72 73  of the data curs
1d0a0 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 69 49 64 78  or */.  int iIdx
1d0b0 43 75 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Cur;            
1d0c0 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74 68    /* Index of th
1d0d0 65 20 66 69 72 73 74 20 69 6e 64 65 78 20 63 75  e first index cu
1d0e0 72 73 6f 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  rsor */.};../*.*
1d0f0 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
1d100 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
1d110 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e  tructure contain
1d120 73 20 61 6c 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  s all informatio
1d130 6e 0a 2a 2a 20 6e 65 65 64 65 64 20 74 6f 20 67  n.** needed to g
1d140 65 6e 65 72 61 74 65 20 63 6f 64 65 20 66 6f 72  enerate code for
1d150 20 61 20 73 69 6e 67 6c 65 20 53 45 4c 45 43 54   a single SELECT
1d160 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a   statement..**.*
1d170 2a 20 53 65 65 20 74 68 65 20 68 65 61 64 65 72  * See the header
1d180 20 63 6f 6d 6d 65 6e 74 20 6f 6e 20 74 68 65 20   comment on the 
1d190 63 6f 6d 70 75 74 65 4c 69 6d 69 74 52 65 67 69  computeLimitRegi
1d1a0 73 74 65 72 73 28 29 20 72 6f 75 74 69 6e 65 20  sters() routine 
1d1b0 66 6f 72 20 61 0a 2a 2a 20 64 65 74 61 69 6c 65  for a.** detaile
1d1c0 64 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66  d description of
1d1d0 20 74 68 65 20 6d 65 61 6e 69 6e 67 20 6f 66 20   the meaning of 
1d1e0 74 68 65 20 69 4c 69 6d 69 74 20 61 6e 64 20 69  the iLimit and i
1d1f0 4f 66 66 73 65 74 20 66 69 65 6c 64 73 2e 0a 2a  Offset fields..*
1d200 2a 0a 2a 2a 20 61 64 64 72 4f 70 65 6e 45 70 68  *.** addrOpenEph
1d210 6d 5b 5d 20 65 6e 74 72 69 65 73 20 63 6f 6e 74  m[] entries cont
1d220 61 69 6e 20 74 68 65 20 61 64 64 72 65 73 73 20  ain the address 
1d230 6f 66 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65  of OP_OpenEpheme
1d240 72 61 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 20  ral opcodes..** 
1d250 54 68 65 73 65 20 61 64 64 72 65 73 73 65 73 20  These addresses 
1d260 6d 75 73 74 20 62 65 20 73 74 6f 72 65 64 20 73  must be stored s
1d270 6f 20 74 68 61 74 20 77 65 20 63 61 6e 20 67 6f  o that we can go
1d280 20 62 61 63 6b 20 61 6e 64 20 66 69 6c 6c 20 69   back and fill i
1d290 6e 0a 2a 2a 20 74 68 65 20 50 34 5f 4b 45 59 49  n.** the P4_KEYI
1d2a0 4e 46 4f 20 61 6e 64 20 50 32 20 70 61 72 61 6d  NFO and P2 param
1d2b0 65 74 65 72 73 20 6c 61 74 65 72 2e 20 20 4e 65  eters later.  Ne
1d2c0 69 74 68 65 72 20 74 68 65 20 4b 65 79 49 6e 66  ither the KeyInf
1d2d0 6f 20 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e 75 6d  o nor.** the num
1d2e0 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
1d2f0 6e 20 50 32 20 63 61 6e 20 62 65 20 63 6f 6d 70  n P2 can be comp
1d300 75 74 65 64 20 61 74 20 74 68 65 20 73 61 6d 65  uted at the same
1d310 20 74 69 6d 65 0a 2a 2a 20 61 73 20 74 68 65 20   time.** as the 
1d320 4f 50 5f 4f 70 65 6e 45 70 68 6d 20 69 6e 73 74  OP_OpenEphm inst
1d330 72 75 63 74 69 6f 6e 20 69 73 20 63 6f 64 65 64  ruction is coded
1d340 20 62 65 63 61 75 73 65 20 6e 6f 74 0a 2a 2a 20   because not.** 
1d350 65 6e 6f 75 67 68 20 69 6e 66 6f 72 6d 61 74 69  enough informati
1d360 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 63 6f 6d  on about the com
1d370 70 6f 75 6e 64 20 71 75 65 72 79 20 69 73 20 6b  pound query is k
1d380 6e 6f 77 6e 20 61 74 20 74 68 61 74 20 70 6f 69  nown at that poi
1d390 6e 74 2e 0a 2a 2a 20 54 68 65 20 4b 65 79 49 6e  nt..** The KeyIn
1d3a0 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 54  fo for addrOpenT
1d3b0 72 61 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d 20 63  ran[0] and [1] c
1d3c0 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e  ontains collatin
1d3d0 67 20 73 65 71 75 65 6e 63 65 73 0a 2a 2a 20 66  g sequences.** f
1d3e0 6f 72 20 74 68 65 20 72 65 73 75 6c 74 20 73 65  or the result se
1d3f0 74 2e 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20  t.  The KeyInfo 
1d400 66 6f 72 20 61 64 64 72 4f 70 65 6e 45 70 68 6d  for addrOpenEphm
1d410 5b 32 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c  [2] contains col
1d420 6c 61 74 69 6e 67 0a 2a 2a 20 73 65 71 75 65 6e  lating.** sequen
1d430 63 65 73 20 66 6f 72 20 74 68 65 20 4f 52 44 45  ces for the ORDE
1d440 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a  R BY clause..*/.
1d450 73 74 72 75 63 74 20 53 65 6c 65 63 74 20 7b 0a  struct Select {.
1d460 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c 69    ExprList *pELi
1d470 73 74 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20  st;      /* The 
1d480 66 69 65 6c 64 73 20 6f 66 20 74 68 65 20 72 65  fields of the re
1d490 73 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6f 70 3b  sult */.  u8 op;
1d4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d4b0 20 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b 5f 55   /* One of: TK_U
1d4c0 4e 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b 5f 49  NION TK_ALL TK_I
1d4d0 4e 54 45 52 53 45 43 54 20 54 4b 5f 45 58 43 45  NTERSECT TK_EXCE
1d4e0 50 54 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 6e  PT */.  LogEst n
1d4f0 53 65 6c 65 63 74 52 6f 77 3b 20 20 20 20 20 2f  SelectRow;     /
1d500 2a 20 45 73 74 69 6d 61 74 65 64 20 6e 75 6d 62  * Estimated numb
1d510 65 72 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77  er of result row
1d520 73 20 2a 2f 0a 20 20 75 33 32 20 73 65 6c 46 6c  s */.  u32 selFl
1d530 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ags;          /*
1d540 20 56 61 72 69 6f 75 73 20 53 46 5f 2a 20 76 61   Various SF_* va
1d550 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20 69 4c  lues */.  int iL
1d560 69 6d 69 74 2c 20 69 4f 66 66 73 65 74 3b 20 20  imit, iOffset;  
1d570 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69 73   /* Memory regis
1d580 74 65 72 73 20 68 6f 6c 64 69 6e 67 20 4c 49 4d  ters holding LIM
1d590 49 54 20 26 20 4f 46 46 53 45 54 20 63 6f 75 6e  IT & OFFSET coun
1d5a0 74 65 72 73 20 2a 2f 0a 23 69 66 20 53 45 4c 45  ters */.#if SELE
1d5b0 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a  CTTRACE_ENABLED.
1d5c0 20 20 63 68 61 72 20 7a 53 65 6c 4e 61 6d 65 5b    char zSelName[
1d5d0 31 32 5d 3b 20 20 20 20 20 2f 2a 20 53 79 6d 62  12];     /* Symb
1d5e0 6f 6c 69 63 20 6e 61 6d 65 20 6f 66 20 74 68 69  olic name of thi
1d5f0 73 20 53 45 4c 45 43 54 20 75 73 65 20 66 6f 72  s SELECT use for
1d600 20 64 65 62 75 67 67 69 6e 67 20 2a 2f 0a 23 65   debugging */.#e
1d610 6e 64 69 66 0a 20 20 69 6e 74 20 61 64 64 72 4f  ndif.  int addrO
1d620 70 65 6e 45 70 68 6d 5b 32 5d 3b 20 20 20 2f 2a  penEphm[2];   /*
1d630 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 20 6f 70   OP_OpenEphem op
1d640 63 6f 64 65 73 20 72 65 6c 61 74 65 64 20 74 6f  codes related to
1d650 20 74 68 69 73 20 73 65 6c 65 63 74 20 2a 2f 0a   this select */.
1d660 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 3b    SrcList *pSrc;
1d670 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
1d680 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20  FROM clause */. 
1d690 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b 20 20   Expr *pWhere;  
1d6a0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57          /* The W
1d6b0 48 45 52 45 20 63 6c 61 75 73 65 20 2a 2f 0a 20  HERE clause */. 
1d6c0 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75   ExprList *pGrou
1d6d0 70 42 79 3b 20 20 20 20 2f 2a 20 54 68 65 20 47  pBy;    /* The G
1d6e0 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20 2a  ROUP BY clause *
1d6f0 2f 0a 20 20 45 78 70 72 20 2a 70 48 61 76 69 6e  /.  Expr *pHavin
1d700 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  g;         /* Th
1d710 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65 20  e HAVING clause 
1d720 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  */.  ExprList *p
1d730 4f 72 64 65 72 42 79 3b 20 20 20 20 2f 2a 20 54  OrderBy;    /* T
1d740 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
1d750 73 65 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a  se */.  Select *
1d760 70 50 72 69 6f 72 3b 20 20 20 20 20 20 20 20 2f  pPrior;        /
1d770 2a 20 50 72 69 6f 72 20 73 65 6c 65 63 74 20 69  * Prior select i
1d780 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 73 65 6c  n a compound sel
1d790 65 63 74 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f  ect statement */
1d7a0 0a 20 20 53 65 6c 65 63 74 20 2a 70 4e 65 78 74  .  Select *pNext
1d7b0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78  ;         /* Nex
1d7c0 74 20 73 65 6c 65 63 74 20 74 6f 20 74 68 65 20  t select to the 
1d7d0 6c 65 66 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75  left in a compou
1d7e0 6e 64 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 4c  nd */.  Expr *pL
1d7f0 69 6d 69 74 3b 20 20 20 20 20 20 20 20 20 20 2f  imit;          /
1d800 2a 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73 69  * LIMIT expressi
1d810 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e  on. NULL means n
1d820 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20 57 69  ot used. */.  Wi
1d830 74 68 20 2a 70 57 69 74 68 3b 20 20 20 20 20 20  th *pWith;      
1d840 20 20 20 20 20 2f 2a 20 57 49 54 48 20 63 6c 61       /* WITH cla
1d850 75 73 65 20 61 74 74 61 63 68 65 64 20 74 6f 20  use attached to 
1d860 74 68 69 73 20 73 65 6c 65 63 74 2e 20 4f 72 20  this select. Or 
1d870 4e 55 4c 4c 2e 20 2a 2f 0a 20 20 57 69 6e 64 6f  NULL. */.  Windo
1d880 77 20 2a 70 57 69 6e 3b 20 20 20 20 20 20 20 20  w *pWin;        
1d890 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 77 69 6e    /* List of win
1d8a0 64 6f 77 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f  dow functions */
1d8b0 0a 20 20 57 69 6e 64 6f 77 20 2a 70 57 69 6e 44  .  Window *pWinD
1d8c0 65 66 6e 3b 20 20 20 20 20 20 2f 2a 20 4c 69 73  efn;      /* Lis
1d8d0 74 20 6f 66 20 6e 61 6d 65 64 20 77 69 6e 64 6f  t of named windo
1d8e0 77 20 64 65 66 69 6e 69 74 69 6f 6e 73 20 2a 2f  w definitions */
1d8f0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  .};../*.** Allow
1d900 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 53 65  ed values for Se
1d910 6c 65 63 74 2e 73 65 6c 46 6c 61 67 73 2e 20 20  lect.selFlags.  
1d920 54 68 65 20 22 53 46 22 20 70 72 65 66 69 78 20  The "SF" prefix 
1d930 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 53  stands for.** "S
1d940 65 6c 65 63 74 20 46 6c 61 67 22 2e 0a 2a 2a 0a  elect Flag"..**.
1d950 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61  ** Value constra
1d960 69 6e 74 73 20 28 61 6c 6c 20 63 68 65 63 6b 65  ints (all checke
1d970 64 20 76 69 61 20 61 73 73 65 72 74 28 29 29 0a  d via assert()).
1d980 2a 2a 20 20 20 20 20 53 46 5f 48 61 73 41 67 67  **     SF_HasAgg
1d990 20 20 20 20 20 3d 3d 20 4e 43 5f 48 61 73 41 67       == NC_HasAg
1d9a0 67 0a 2a 2a 20 20 20 20 20 53 46 5f 4d 69 6e 4d  g.**     SF_MinM
1d9b0 61 78 41 67 67 20 20 3d 3d 20 4e 43 5f 4d 69 6e  axAgg  == NC_Min
1d9c0 4d 61 78 41 67 67 20 20 20 20 20 3d 3d 20 53 51  MaxAgg     == SQ
1d9d0 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58  LITE_FUNC_MINMAX
1d9e0 0a 2a 2a 20 20 20 20 20 53 46 5f 46 69 78 65 64  .**     SF_Fixed
1d9f0 4c 69 6d 69 74 20 3d 3d 20 57 48 45 52 45 5f 55  Limit == WHERE_U
1da00 53 45 5f 4c 49 4d 49 54 0a 2a 2f 0a 23 64 65 66  SE_LIMIT.*/.#def
1da10 69 6e 65 20 53 46 5f 44 69 73 74 69 6e 63 74 20  ine SF_Distinct 
1da20 20 20 20 20 20 20 30 78 30 30 30 30 31 20 20 2f        0x00001  /
1da30 2a 20 4f 75 74 70 75 74 20 73 68 6f 75 6c 64 20  * Output should 
1da40 62 65 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a 23  be DISTINCT */.#
1da50 64 65 66 69 6e 65 20 53 46 5f 41 6c 6c 20 20 20  define SF_All   
1da60 20 20 20 20 20 20 20 20 20 30 78 30 30 30 30 32           0x00002
1da70 20 20 2f 2a 20 49 6e 63 6c 75 64 65 73 20 74 68    /* Includes th
1da80 65 20 41 4c 4c 20 6b 65 79 77 6f 72 64 20 2a 2f  e ALL keyword */
1da90 0a 23 64 65 66 69 6e 65 20 53 46 5f 52 65 73 6f  .#define SF_Reso
1daa0 6c 76 65 64 20 20 20 20 20 20 20 30 78 30 30 30  lved       0x000
1dab0 30 34 20 20 2f 2a 20 49 64 65 6e 74 69 66 69 65  04  /* Identifie
1dac0 72 73 20 68 61 76 65 20 62 65 65 6e 20 72 65 73  rs have been res
1dad0 6f 6c 76 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  olved */.#define
1dae0 20 53 46 5f 41 67 67 72 65 67 61 74 65 20 20 20   SF_Aggregate   
1daf0 20 20 20 30 78 30 30 30 30 38 20 20 2f 2a 20 43     0x00008  /* C
1db00 6f 6e 74 61 69 6e 73 20 61 67 67 20 66 75 6e 63  ontains agg func
1db10 74 69 6f 6e 73 20 6f 72 20 61 20 47 52 4f 55 50  tions or a GROUP
1db20 20 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53   BY */.#define S
1db30 46 5f 48 61 73 41 67 67 20 20 20 20 20 20 20 20  F_HasAgg        
1db40 20 30 78 30 30 30 31 30 20 20 2f 2a 20 43 6f 6e   0x00010  /* Con
1db50 74 61 69 6e 73 20 61 67 67 72 65 67 61 74 65 20  tains aggregate 
1db60 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65  functions */.#de
1db70 66 69 6e 65 20 53 46 5f 55 73 65 73 45 70 68 65  fine SF_UsesEphe
1db80 6d 65 72 61 6c 20 20 30 78 30 30 30 32 30 20 20  meral  0x00020  
1db90 2f 2a 20 55 73 65 73 20 74 68 65 20 4f 70 65 6e  /* Uses the Open
1dba0 45 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65  Ephemeral opcode
1dbb0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 45   */.#define SF_E
1dbc0 78 70 61 6e 64 65 64 20 20 20 20 20 20 20 30 78  xpanded       0x
1dbd0 30 30 30 34 30 20 20 2f 2a 20 73 71 6c 69 74 65  00040  /* sqlite
1dbe0 33 53 65 6c 65 63 74 45 78 70 61 6e 64 28 29 20  3SelectExpand() 
1dbf0 63 61 6c 6c 65 64 20 6f 6e 20 74 68 69 73 20 2a  called on this *
1dc00 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 48 61 73  /.#define SF_Has
1dc10 54 79 70 65 49 6e 66 6f 20 20 20 20 30 78 30 30  TypeInfo    0x00
1dc20 30 38 30 20 20 2f 2a 20 46 52 4f 4d 20 73 75 62  080  /* FROM sub
1dc30 71 75 65 72 69 65 73 20 68 61 76 65 20 54 61 62  queries have Tab
1dc40 6c 65 20 6d 65 74 61 64 61 74 61 20 2a 2f 0a 23  le metadata */.#
1dc50 64 65 66 69 6e 65 20 53 46 5f 43 6f 6d 70 6f 75  define SF_Compou
1dc60 6e 64 20 20 20 20 20 20 20 30 78 30 30 31 30 30  nd       0x00100
1dc70 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 61 20 63    /* Part of a c
1dc80 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79 20 2a 2f  ompound query */
1dc90 0a 23 64 65 66 69 6e 65 20 53 46 5f 56 61 6c 75  .#define SF_Valu
1dca0 65 73 20 20 20 20 20 20 20 20 20 30 78 30 30 32  es         0x002
1dcb0 30 30 20 20 2f 2a 20 53 79 6e 74 68 65 73 69 7a  00  /* Synthesiz
1dcc0 65 64 20 66 72 6f 6d 20 56 41 4c 55 45 53 20 63  ed from VALUES c
1dcd0 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65  lause */.#define
1dce0 20 53 46 5f 4d 75 6c 74 69 56 61 6c 75 65 20 20   SF_MultiValue  
1dcf0 20 20 20 30 78 30 30 34 30 30 20 20 2f 2a 20 53     0x00400  /* S
1dd00 69 6e 67 6c 65 20 56 41 4c 55 45 53 20 74 65 72  ingle VALUES ter
1dd10 6d 20 77 69 74 68 20 6d 75 6c 74 69 70 6c 65 20  m with multiple 
1dd20 72 6f 77 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rows */.#define 
1dd30 53 46 5f 4e 65 73 74 65 64 46 72 6f 6d 20 20 20  SF_NestedFrom   
1dd40 20 20 30 78 30 30 38 30 30 20 20 2f 2a 20 50 61    0x00800  /* Pa
1dd50 72 74 20 6f 66 20 61 20 70 61 72 65 6e 74 68 65  rt of a parenthe
1dd60 73 69 7a 65 64 20 46 52 4f 4d 20 63 6c 61 75 73  sized FROM claus
1dd70 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  e */.#define SF_
1dd80 4d 69 6e 4d 61 78 41 67 67 20 20 20 20 20 20 30  MinMaxAgg      0
1dd90 78 30 31 30 30 30 20 20 2f 2a 20 41 67 67 72 65  x01000  /* Aggre
1dda0 67 61 74 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20  gate containing 
1ddb0 6d 69 6e 28 29 20 6f 72 20 6d 61 78 28 29 20 2a  min() or max() *
1ddc0 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 52 65 63  /.#define SF_Rec
1ddd0 75 72 73 69 76 65 20 20 20 20 20 20 30 78 30 32  ursive      0x02
1dde0 30 30 30 20 20 2f 2a 20 54 68 65 20 72 65 63 75  000  /* The recu
1ddf0 72 73 69 76 65 20 70 61 72 74 20 6f 66 20 61 20  rsive part of a 
1de00 72 65 63 75 72 73 69 76 65 20 43 54 45 20 2a 2f  recursive CTE */
1de10 0a 23 64 65 66 69 6e 65 20 53 46 5f 46 69 78 65  .#define SF_Fixe
1de20 64 4c 69 6d 69 74 20 20 20 20 20 30 78 30 34 30  dLimit     0x040
1de30 30 30 20 20 2f 2a 20 6e 53 65 6c 65 63 74 52 6f  00  /* nSelectRo
1de40 77 20 73 65 74 20 62 79 20 61 20 63 6f 6e 73 74  w set by a const
1de50 61 6e 74 20 4c 49 4d 49 54 20 2a 2f 0a 23 64 65  ant LIMIT */.#de
1de60 66 69 6e 65 20 53 46 5f 4d 61 79 62 65 43 6f 6e  fine SF_MaybeCon
1de70 76 65 72 74 20 20 20 30 78 30 38 30 30 30 20 20  vert   0x08000  
1de80 2f 2a 20 4e 65 65 64 20 63 6f 6e 76 65 72 74 43  /* Need convertC
1de90 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53  ompoundSelectToS
1dea0 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 23 64 65  ubquery() */.#de
1deb0 66 69 6e 65 20 53 46 5f 43 6f 6e 76 65 72 74 65  fine SF_Converte
1dec0 64 20 20 20 20 20 20 30 78 31 30 30 30 30 20 20  d      0x10000  
1ded0 2f 2a 20 42 79 20 63 6f 6e 76 65 72 74 43 6f 6d  /* By convertCom
1dee0 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62  poundSelectToSub
1def0 71 75 65 72 79 28 29 20 2a 2f 0a 23 64 65 66 69  query() */.#defi
1df00 6e 65 20 53 46 5f 49 6e 63 6c 75 64 65 48 69 64  ne SF_IncludeHid
1df10 64 65 6e 20 20 30 78 32 30 30 30 30 20 20 2f 2a  den  0x20000  /*
1df20 20 49 6e 63 6c 75 64 65 20 68 69 64 64 65 6e 20   Include hidden 
1df30 63 6f 6c 75 6d 6e 73 20 69 6e 20 6f 75 74 70 75  columns in outpu
1df40 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  t */.#define SF_
1df50 43 6f 6d 70 6c 65 78 52 65 73 75 6c 74 20 20 30  ComplexResult  0
1df60 78 34 30 30 30 30 20 20 2f 2a 20 52 65 73 75 6c  x40000  /* Resul
1df70 74 20 63 6f 6e 74 61 69 6e 73 20 73 75 62 71 75  t contains subqu
1df80 65 72 79 20 6f 72 20 66 75 6e 63 74 69 6f 6e 20  ery or function 
1df90 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 65  */../*.** The re
1dfa0 73 75 6c 74 73 20 6f 66 20 61 20 53 45 4c 45 43  sults of a SELEC
1dfb0 54 20 63 61 6e 20 62 65 20 64 69 73 74 72 69 62  T can be distrib
1dfc0 75 74 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20  uted in several 
1dfd0 77 61 79 73 2c 20 61 73 20 64 65 66 69 6e 65 64  ways, as defined
1dfe0 0a 2a 2a 20 62 79 20 6f 6e 65 20 6f 66 20 74 68  .** by one of th
1dff0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72  e following macr
1e000 6f 73 2e 20 20 54 68 65 20 22 53 52 54 22 20 70  os.  The "SRT" p
1e010 72 65 66 69 78 20 6d 65 61 6e 73 20 22 53 45 4c  refix means "SEL
1e020 45 43 54 20 52 65 73 75 6c 74 0a 2a 2a 20 54 79  ECT Result.** Ty
1e030 70 65 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  pe"..**.**     S
1e040 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20 53  RT_Union       S
1e050 74 6f 72 65 20 72 65 73 75 6c 74 73 20 61 73 20  tore results as 
1e060 61 20 6b 65 79 20 69 6e 20 61 20 74 65 6d 70 6f  a key in a tempo
1e070 72 61 72 79 20 69 6e 64 65 78 0a 2a 2a 20 20 20  rary index.**   
1e080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e090 20 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20    identified by 
1e0a0 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a  pDest->iSDParm..
1e0b0 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 78  **.**     SRT_Ex
1e0c0 63 65 70 74 20 20 20 20 20 20 52 65 6d 6f 76 65  cept      Remove
1e0d0 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20 74 68   results from th
1e0e0 65 20 74 65 6d 70 6f 72 61 72 79 20 69 6e 64 65  e temporary inde
1e0f0 78 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  x pDest->iSDParm
1e100 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
1e110 45 78 69 73 74 73 20 20 20 20 20 20 53 74 6f 72  Exists      Stor
1e120 65 20 61 20 31 20 69 6e 20 6d 65 6d 6f 72 79 20  e a 1 in memory 
1e130 63 65 6c 6c 20 70 44 65 73 74 2d 3e 69 53 44 50  cell pDest->iSDP
1e140 61 72 6d 20 69 66 20 74 68 65 20 72 65 73 75 6c  arm if the resul
1e150 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  t.**            
1e160 20 20 20 20 20 20 20 20 20 73 65 74 20 69 73 20           set is 
1e170 6e 6f 74 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a  not empty..**.**
1e180 20 20 20 20 20 53 52 54 5f 44 69 73 63 61 72 64       SRT_Discard
1e190 20 20 20 20 20 54 68 72 6f 77 20 74 68 65 20 72       Throw the r
1e1a0 65 73 75 6c 74 73 20 61 77 61 79 2e 20 20 54 68  esults away.  Th
1e1b0 69 73 20 69 73 20 75 73 65 64 20 62 79 20 53 45  is is used by SE
1e1c0 4c 45 43 54 0a 2a 2a 20 20 20 20 20 20 20 20 20  LECT.**         
1e1d0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61 74              stat
1e1e0 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74 72  ements within tr
1e1f0 69 67 67 65 72 73 20 77 68 6f 73 65 20 6f 6e 6c  iggers whose onl
1e200 79 20 70 75 72 70 6f 73 65 20 69 73 0a 2a 2a 20  y purpose is.** 
1e210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e220 20 20 20 20 74 68 65 20 73 69 64 65 2d 65 66 66      the side-eff
1e230 65 63 74 73 20 6f 66 20 66 75 6e 63 74 69 6f 6e  ects of function
1e240 73 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20  s..**.** All of 
1e250 74 68 65 20 61 62 6f 76 65 20 61 72 65 20 66 72  the above are fr
1e260 65 65 20 74 6f 20 69 67 6e 6f 72 65 20 74 68 65  ee to ignore the
1e270 69 72 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  ir ORDER BY clau
1e280 73 65 2e 20 54 68 6f 73 65 20 74 68 61 74 0a 2a  se. Those that.*
1e290 2a 20 66 6f 6c 6c 6f 77 20 6d 75 73 74 20 68 6f  * follow must ho
1e2a0 6e 6f 72 20 74 68 65 20 4f 52 44 45 52 20 42 59  nor the ORDER BY
1e2b0 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20   clause..**.**  
1e2c0 20 20 20 53 52 54 5f 4f 75 74 70 75 74 20 20 20     SRT_Output   
1e2d0 20 20 20 47 65 6e 65 72 61 74 65 20 61 20 72 6f     Generate a ro
1e2e0 77 20 6f 66 20 6f 75 74 70 75 74 20 28 75 73 69  w of output (usi
1e2f0 6e 67 20 74 68 65 20 4f 50 5f 52 65 73 75 6c 74  ng the OP_Result
1e300 52 6f 77 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  Row.**          
1e310 20 20 20 20 20 20 20 20 20 20 20 6f 70 63 6f 64             opcod
1e320 65 29 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20  e) for each row 
1e330 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 73 65  in the result se
1e340 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  t..**.**     SRT
1e350 5f 4d 65 6d 20 20 20 20 20 20 20 20 20 4f 6e 6c  _Mem         Onl
1e360 79 20 76 61 6c 69 64 20 69 66 20 74 68 65 20 72  y valid if the r
1e370 65 73 75 6c 74 20 69 73 20 61 20 73 69 6e 67 6c  esult is a singl
1e380 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 20 20 20  e column..**    
1e390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e3a0 20 53 74 6f 72 65 20 74 68 65 20 66 69 72 73 74   Store the first
1e3b0 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 66   column of the f
1e3c0 69 72 73 74 20 72 65 73 75 6c 74 20 72 6f 77 0a  irst result row.
1e3d0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1e3e0 20 20 20 20 20 20 20 69 6e 20 72 65 67 69 73 74         in regist
1e3f0 65 72 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  er pDest->iSDPar
1e400 6d 20 74 68 65 6e 20 61 62 61 6e 64 6f 6e 20 74  m then abandon t
1e410 68 65 20 72 65 73 74 0a 2a 2a 20 20 20 20 20 20  he rest.**      
1e420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
1e430 66 20 74 68 65 20 71 75 65 72 79 2e 20 20 54 68  f the query.  Th
1e440 69 73 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 69  is destination i
1e450 6d 70 6c 69 65 73 20 22 4c 49 4d 49 54 20 31 22  mplies "LIMIT 1"
1e460 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
1e470 53 65 74 20 20 20 20 20 20 20 20 20 54 68 65 20  Set         The 
1e480 72 65 73 75 6c 74 20 6d 75 73 74 20 62 65 20 61  result must be a
1e490 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 20   single column. 
1e4a0 20 53 74 6f 72 65 20 65 61 63 68 0a 2a 2a 20 20   Store each.**  
1e4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e4c0 20 20 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74     row of result
1e4d0 20 61 73 20 74 68 65 20 6b 65 79 20 69 6e 20 74   as the key in t
1e4e0 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50  able pDest->iSDP
1e4f0 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20  arm..**         
1e500 20 20 20 20 20 20 20 20 20 20 20 20 41 70 70 6c              Appl
1e510 79 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 70  y the affinity p
1e520 44 65 73 74 2d 3e 61 66 66 53 64 73 74 20 62 65  Dest->affSdst be
1e530 66 6f 72 65 20 73 74 6f 72 69 6e 67 0a 2a 2a 20  fore storing.** 
1e540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e550 20 20 20 20 72 65 73 75 6c 74 73 2e 20 20 55 73      results.  Us
1e560 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20  ed to implement 
1e570 22 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29  "IN (SELECT ...)
1e580 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  "..**.**     SRT
1e590 5f 45 70 68 65 6d 54 61 62 20 20 20 20 43 72 65  _EphemTab    Cre
1e5a0 61 74 65 20 61 6e 20 74 65 6d 70 6f 72 61 72 79  ate an temporary
1e5b0 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53   table pDest->iS
1e5c0 44 50 61 72 6d 20 61 6e 64 20 73 74 6f 72 65 0a  DParm and store.
1e5d0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1e5e0 20 20 20 20 20 20 20 74 68 65 20 72 65 73 75 6c         the resul
1e5f0 74 20 74 68 65 72 65 2e 20 54 68 65 20 63 75 72  t there. The cur
1e600 73 6f 72 20 69 73 20 6c 65 66 74 20 6f 70 65 6e  sor is left open
1e610 20 61 66 74 65 72 0a 2a 2a 20 20 20 20 20 20 20   after.**       
1e620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1e630 74 75 72 6e 69 6e 67 2e 20 20 54 68 69 73 20 69  turning.  This i
1e640 73 20 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c 65  s like SRT_Table
1e650 20 65 78 63 65 70 74 20 74 68 61 74 0a 2a 2a 20   except that.** 
1e660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e670 20 20 20 20 74 68 69 73 20 64 65 73 74 69 6e 61      this destina
1e680 74 69 6f 6e 20 75 73 65 73 20 4f 50 5f 4f 70 65  tion uses OP_Ope
1e690 6e 45 70 68 65 6d 65 72 61 6c 20 74 6f 20 63 72  nEphemeral to cr
1e6a0 65 61 74 65 0a 2a 2a 20 20 20 20 20 20 20 20 20  eate.**         
1e6b0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20              the 
1e6c0 74 61 62 6c 65 20 66 69 72 73 74 2e 0a 2a 2a 0a  table first..**.
1e6d0 2a 2a 20 20 20 20 20 53 52 54 5f 43 6f 72 6f 75  **     SRT_Corou
1e6e0 74 69 6e 65 20 20 20 47 65 6e 65 72 61 74 65 20  tine   Generate 
1e6f0 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 74 68 61  a co-routine tha
1e700 74 20 72 65 74 75 72 6e 73 20 61 20 6e 65 77 20  t returns a new 
1e710 72 6f 77 20 6f 66 0a 2a 2a 20 20 20 20 20 20 20  row of.**       
1e720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1e730 73 75 6c 74 73 20 65 61 63 68 20 74 69 6d 65 20  sults each time 
1e740 69 74 20 69 73 20 69 6e 76 6f 6b 65 64 2e 20 20  it is invoked.  
1e750 54 68 65 20 65 6e 74 72 79 20 70 6f 69 6e 74 0a  The entry point.
1e760 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1e770 20 20 20 20 20 20 20 6f 66 20 74 68 65 20 63 6f         of the co
1e780 2d 72 6f 75 74 69 6e 65 20 69 73 20 73 74 6f 72  -routine is stor
1e790 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 70  ed in register p
1e7a0 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 0a 2a 2a  Dest->iSDParm.**
1e7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e7c0 20 20 20 20 20 61 6e 64 20 74 68 65 20 72 65 73       and the res
1e7d0 75 6c 74 20 72 6f 77 20 69 73 20 73 74 6f 72 65  ult row is store
1e7e0 64 20 69 6e 20 70 44 65 73 74 2d 3e 6e 44 65 73  d in pDest->nDes
1e7f0 74 20 72 65 67 69 73 74 65 72 73 0a 2a 2a 20 20  t registers.**  
1e800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e810 20 20 20 73 74 61 72 74 69 6e 67 20 77 69 74 68     starting with
1e820 20 70 44 65 73 74 2d 3e 69 53 64 73 74 2e 0a 2a   pDest->iSdst..*
1e830 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 54 61 62  *.**     SRT_Tab
1e840 6c 65 20 20 20 20 20 20 20 53 74 6f 72 65 20 72  le       Store r
1e850 65 73 75 6c 74 73 20 69 6e 20 74 65 6d 70 6f 72  esults in tempor
1e860 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d  ary table pDest-
1e870 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20  >iSDParm..**    
1e880 20 53 52 54 5f 46 69 66 6f 20 20 20 20 20 20 20   SRT_Fifo       
1e890 20 54 68 69 73 20 69 73 20 6c 69 6b 65 20 53 52   This is like SR
1e8a0 54 5f 45 70 68 65 6d 54 61 62 20 65 78 63 65 70  T_EphemTab excep
1e8b0 74 20 74 68 61 74 20 74 68 65 20 74 61 62 6c 65  t that the table
1e8c0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1e8d0 20 20 20 20 20 20 20 20 69 73 20 61 73 73 75 6d          is assum
1e8e0 65 64 20 74 6f 20 61 6c 72 65 61 64 79 20 62 65  ed to already be
1e8f0 20 6f 70 65 6e 2e 20 20 53 52 54 5f 46 69 66 6f   open.  SRT_Fifo
1e900 20 68 61 73 0a 2a 2a 20 20 20 20 20 20 20 20 20   has.**         
1e910 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20              the 
1e920 61 64 64 69 74 69 6f 6e 61 6c 20 70 72 6f 70 65  additional prope
1e930 72 74 79 20 6f 66 20 62 65 69 6e 67 20 61 62 6c  rty of being abl
1e940 65 20 74 6f 20 69 67 6e 6f 72 65 0a 2a 2a 20 20  e to ignore.**  
1e950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e960 20 20 20 74 68 65 20 4f 52 44 45 52 20 42 59 20     the ORDER BY 
1e970 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20  clause..**.**   
1e980 20 20 53 52 54 5f 44 69 73 74 46 69 66 6f 20 20    SRT_DistFifo  
1e990 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20    Store results 
1e9a0 69 6e 20 61 20 74 65 6d 70 6f 72 61 72 79 20 74  in a temporary t
1e9b0 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50  able pDest->iSDP
1e9c0 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20  arm..**         
1e9d0 20 20 20 20 20 20 20 20 20 20 20 20 42 75 74 20              But 
1e9e0 61 6c 73 6f 20 75 73 65 20 74 65 6d 70 6f 72 61  also use tempora
1e9f0 72 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e  ry table pDest->
1ea00 69 53 44 50 61 72 6d 2b 31 20 61 73 0a 2a 2a 20  iSDParm+1 as.** 
1ea10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea20 20 20 20 20 61 20 72 65 63 6f 72 64 20 6f 66 20      a record of 
1ea30 61 6c 6c 20 70 72 69 6f 72 20 72 65 73 75 6c 74  all prior result
1ea40 73 20 61 6e 64 20 69 67 6e 6f 72 65 20 61 6e 79  s and ignore any
1ea50 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20 20 20   duplicate.**   
1ea60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea70 20 20 72 6f 77 73 2e 20 20 4e 61 6d 65 20 6d 65    rows.  Name me
1ea80 61 6e 73 3a 20 20 22 44 69 73 74 69 6e 63 74 20  ans:  "Distinct 
1ea90 46 69 66 6f 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  Fifo"..**.**    
1eaa0 20 53 52 54 5f 51 75 65 75 65 20 20 20 20 20 20   SRT_Queue      
1eab0 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69   Store results i
1eac0 6e 20 70 72 69 6f 72 69 74 79 20 71 75 65 75 65  n priority queue
1ead0 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20   pDest->iSDParm 
1eae0 28 72 65 61 6c 6c 79 0a 2a 2a 20 20 20 20 20 20  (really.**      
1eaf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
1eb00 6e 20 69 6e 64 65 78 29 2e 20 20 41 70 70 65 6e  n index).  Appen
1eb10 64 20 61 20 73 65 71 75 65 6e 63 65 20 6e 75 6d  d a sequence num
1eb20 62 65 72 20 73 6f 20 74 68 61 74 20 61 6c 6c 20  ber so that all 
1eb30 65 6e 74 72 69 65 73 0a 2a 2a 20 20 20 20 20 20  entries.**      
1eb40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
1eb50 72 65 20 64 69 73 74 69 6e 63 74 2e 0a 2a 2a 0a  re distinct..**.
1eb60 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73 74 51  **     SRT_DistQ
1eb70 75 65 75 65 20 20 20 53 74 6f 72 65 20 72 65 73  ueue   Store res
1eb80 75 6c 74 73 20 69 6e 20 70 72 69 6f 72 69 74 79  ults in priority
1eb90 20 71 75 65 75 65 20 70 44 65 73 74 2d 3e 69 53   queue pDest->iS
1eba0 44 50 61 72 6d 20 6f 6e 6c 79 20 69 66 0a 2a 2a  DParm only if.**
1ebb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ebc0 20 20 20 20 20 74 68 65 20 73 61 6d 65 20 72 65       the same re
1ebd0 63 6f 72 64 20 68 61 73 20 6e 65 76 65 72 20 62  cord has never b
1ebe0 65 65 6e 20 73 74 6f 72 65 64 20 62 65 66 6f 72  een stored befor
1ebf0 65 2e 20 20 54 68 65 0a 2a 2a 20 20 20 20 20 20  e.  The.**      
1ec00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1ec10 6e 64 65 78 20 61 74 20 70 44 65 73 74 2d 3e 69  ndex at pDest->i
1ec20 53 44 50 61 72 6d 2b 31 20 68 6f 6c 64 20 61 6c  SDParm+1 hold al
1ec30 6c 20 70 72 69 6f 72 20 73 74 6f 72 65 73 2e 0a  l prior stores..
1ec40 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 55  */.#define SRT_U
1ec50 6e 69 6f 6e 20 20 20 20 20 20 20 20 31 20 20 2f  nion        1  /
1ec60 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61  * Store result a
1ec70 73 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64  s keys in an ind
1ec80 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ex */.#define SR
1ec90 54 5f 45 78 63 65 70 74 20 20 20 20 20 20 20 32  T_Except       2
1eca0 20 20 2f 2a 20 52 65 6d 6f 76 65 20 72 65 73 75    /* Remove resu
1ecb0 6c 74 20 66 72 6f 6d 20 61 20 55 4e 49 4f 4e 20  lt from a UNION 
1ecc0 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65  index */.#define
1ecd0 20 53 52 54 5f 45 78 69 73 74 73 20 20 20 20 20   SRT_Exists     
1ece0 20 20 33 20 20 2f 2a 20 53 74 6f 72 65 20 31 20    3  /* Store 1 
1ecf0 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  if the result is
1ed00 20 6e 6f 74 20 65 6d 70 74 79 20 2a 2f 0a 23 64   not empty */.#d
1ed10 65 66 69 6e 65 20 53 52 54 5f 44 69 73 63 61 72  efine SRT_Discar
1ed20 64 20 20 20 20 20 20 34 20 20 2f 2a 20 44 6f 20  d      4  /* Do 
1ed30 6e 6f 74 20 73 61 76 65 20 74 68 65 20 72 65 73  not save the res
1ed40 75 6c 74 73 20 61 6e 79 77 68 65 72 65 20 2a 2f  ults anywhere */
1ed50 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 46 69 66  .#define SRT_Fif
1ed60 6f 20 20 20 20 20 20 20 20 20 35 20 20 2f 2a 20  o         5  /* 
1ed70 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20  Store result as 
1ed80 64 61 74 61 20 77 69 74 68 20 61 6e 20 61 75 74  data with an aut
1ed90 6f 6d 61 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a  omatic rowid */.
1eda0 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73 74  #define SRT_Dist
1edb0 46 69 66 6f 20 20 20 20 20 36 20 20 2f 2a 20 4c  Fifo     6  /* L
1edc0 69 6b 65 20 53 52 54 5f 46 69 66 6f 2c 20 62 75  ike SRT_Fifo, bu
1edd0 74 20 75 6e 69 71 75 65 20 72 65 73 75 6c 74 73  t unique results
1ede0 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65   only */.#define
1edf0 20 53 52 54 5f 51 75 65 75 65 20 20 20 20 20 20   SRT_Queue      
1ee00 20 20 37 20 20 2f 2a 20 53 74 6f 72 65 20 72 65    7  /* Store re
1ee10 73 75 6c 74 20 69 6e 20 61 6e 20 71 75 65 75 65  sult in an queue
1ee20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1ee30 44 69 73 74 51 75 65 75 65 20 20 20 20 38 20 20  DistQueue    8  
1ee40 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 51 75 65 75  /* Like SRT_Queu
1ee50 65 2c 20 62 75 74 20 75 6e 69 71 75 65 20 72 65  e, but unique re
1ee60 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a 0a 2f  sults only */../
1ee70 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59 20 63  * The ORDER BY c
1ee80 6c 61 75 73 65 20 69 73 20 69 67 6e 6f 72 65 64  lause is ignored
1ee90 20 66 6f 72 20 61 6c 6c 20 6f 66 20 74 68 65 20   for all of the 
1eea0 61 62 6f 76 65 20 2a 2f 0a 23 64 65 66 69 6e 65  above */.#define
1eeb0 20 49 67 6e 6f 72 61 62 6c 65 4f 72 64 65 72 62   IgnorableOrderb
1eec0 79 28 58 29 20 28 28 58 2d 3e 65 44 65 73 74 29  y(X) ((X->eDest)
1eed0 3c 3d 53 52 54 5f 44 69 73 74 51 75 65 75 65 29  <=SRT_DistQueue)
1eee0 0a 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 4f 75  ..#define SRT_Ou
1eef0 74 70 75 74 20 20 20 20 20 20 20 39 20 20 2f 2a  tput       9  /*
1ef00 20 4f 75 74 70 75 74 20 65 61 63 68 20 72 6f 77   Output each row
1ef10 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64   of result */.#d
1ef20 65 66 69 6e 65 20 53 52 54 5f 4d 65 6d 20 20 20  efine SRT_Mem   
1ef30 20 20 20 20 20 20 31 30 20 20 2f 2a 20 53 74 6f        10  /* Sto
1ef40 72 65 20 72 65 73 75 6c 74 20 69 6e 20 61 20 6d  re result in a m
1ef50 65 6d 6f 72 79 20 63 65 6c 6c 20 2a 2f 0a 23 64  emory cell */.#d
1ef60 65 66 69 6e 65 20 53 52 54 5f 53 65 74 20 20 20  efine SRT_Set   
1ef70 20 20 20 20 20 20 31 31 20 20 2f 2a 20 53 74 6f        11  /* Sto
1ef80 72 65 20 72 65 73 75 6c 74 73 20 61 73 20 6b 65  re results as ke
1ef90 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a  ys in an index *
1efa0 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45 70  /.#define SRT_Ep
1efb0 68 65 6d 54 61 62 20 20 20 20 31 32 20 20 2f 2a  hemTab    12  /*
1efc0 20 43 72 65 61 74 65 20 74 72 61 6e 73 69 65 6e   Create transien
1efd0 74 20 74 61 62 20 61 6e 64 20 73 74 6f 72 65 20  t tab and store 
1efe0 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c 65 20 2a  like SRT_Table *
1eff0 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 43 6f  /.#define SRT_Co
1f000 72 6f 75 74 69 6e 65 20 20 20 31 33 20 20 2f 2a  routine   13  /*
1f010 20 47 65 6e 65 72 61 74 65 20 61 20 73 69 6e 67   Generate a sing
1f020 6c 65 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74  le row of result
1f030 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1f040 54 61 62 6c 65 20 20 20 20 20 20 20 31 34 20 20  Table       14  
1f050 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20  /* Store result 
1f060 61 73 20 64 61 74 61 20 77 69 74 68 20 61 6e 20  as data with an 
1f070 61 75 74 6f 6d 61 74 69 63 20 72 6f 77 69 64 20  automatic rowid 
1f080 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  */../*.** An ins
1f090 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 6f 62  tance of this ob
1f0a0 6a 65 63 74 20 64 65 73 63 72 69 62 65 73 20 77  ject describes w
1f0b0 68 65 72 65 20 74 6f 20 70 75 74 20 6f 66 20 74  here to put of t
1f0c0 68 65 20 72 65 73 75 6c 74 73 20 6f 66 0a 2a 2a  he results of.**
1f0d0 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d   a SELECT statem
1f0e0 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  ent..*/.struct S
1f0f0 65 6c 65 63 74 44 65 73 74 20 7b 0a 20 20 75 38  electDest {.  u8
1f100 20 65 44 65 73 74 3b 20 20 20 20 20 20 20 20 20   eDest;         
1f110 20 20 20 2f 2a 20 48 6f 77 20 74 6f 20 64 69 73     /* How to dis
1f120 70 6f 73 65 20 6f 66 20 74 68 65 20 72 65 73 75  pose of the resu
1f130 6c 74 73 2e 20 20 4f 6e 20 6f 66 20 53 52 54 5f  lts.  On of SRT_
1f140 2a 20 61 62 6f 76 65 2e 20 2a 2f 0a 20 20 69 6e  * above. */.  in
1f150 74 20 69 53 44 50 61 72 6d 3b 20 20 20 20 20 20  t iSDParm;      
1f160 20 20 20 2f 2a 20 41 20 70 61 72 61 6d 65 74 65     /* A paramete
1f170 72 20 75 73 65 64 20 62 79 20 74 68 65 20 65 44  r used by the eD
1f180 65 73 74 20 64 69 73 70 6f 73 61 6c 20 6d 65 74  est disposal met
1f190 68 6f 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53 64  hod */.  int iSd
1f1a0 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  st;           /*
1f1b0 20 42 61 73 65 20 72 65 67 69 73 74 65 72 20 77   Base register w
1f1c0 68 65 72 65 20 72 65 73 75 6c 74 73 20 61 72 65  here results are
1f1d0 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e   written */.  in
1f1e0 74 20 6e 53 64 73 74 3b 20 20 20 20 20 20 20 20  t nSdst;        
1f1f0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1f200 72 65 67 69 73 74 65 72 73 20 61 6c 6c 6f 63 61  registers alloca
1f210 74 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ted */.  char *z
1f220 41 66 66 53 64 73 74 3b 20 20 20 20 20 20 2f 2a  AffSdst;      /*
1f230 20 41 66 66 69 6e 69 74 79 20 75 73 65 64 20 77   Affinity used w
1f240 68 65 6e 20 65 44 65 73 74 3d 3d 53 52 54 5f 53  hen eDest==SRT_S
1f250 65 74 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  et */.  ExprList
1f260 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 2f 2a 20   *pOrderBy;  /* 
1f270 4b 65 79 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20  Key columns for 
1f280 53 52 54 5f 51 75 65 75 65 20 61 6e 64 20 53 52  SRT_Queue and SR
1f290 54 5f 44 69 73 74 51 75 65 75 65 20 2a 2f 0a 7d  T_DistQueue */.}
1f2a0 3b 0a 0a 2f 2a 0a 2a 2a 20 44 75 72 69 6e 67 20  ;../*.** During 
1f2b0 63 6f 64 65 20 67 65 6e 65 72 61 74 69 6f 6e 20  code generation 
1f2c0 6f 66 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68  of statements th
1f2d0 61 74 20 64 6f 20 69 6e 73 65 72 74 73 20 69 6e  at do inserts in
1f2e0 74 6f 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  to AUTOINCREMENT
1f2f0 0a 2a 2a 20 74 61 62 6c 65 73 2c 20 74 68 65 20  .** tables, the 
1f300 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 66 6f 72 6d  following inform
1f310 61 74 69 6f 6e 20 69 73 20 61 74 74 61 63 68 65  ation is attache
1f320 64 20 74 6f 20 74 68 65 20 54 61 62 6c 65 2e 75  d to the Table.u
1f330 2e 61 75 74 6f 49 6e 63 2e 70 0a 2a 2a 20 70 6f  .autoInc.p.** po
1f340 69 6e 74 65 72 20 6f 66 20 65 61 63 68 20 61 75  inter of each au
1f350 74 6f 69 6e 63 72 65 6d 65 6e 74 20 74 61 62 6c  toincrement tabl
1f360 65 20 74 6f 20 72 65 63 6f 72 64 20 73 6f 6d 65  e to record some
1f370 20 73 69 64 65 20 69 6e 66 6f 72 6d 61 74 69 6f   side informatio
1f380 6e 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 63 6f  n that.** the co
1f390 64 65 20 67 65 6e 65 72 61 74 6f 72 20 6e 65 65  de generator nee
1f3a0 64 73 2e 20 20 57 65 20 68 61 76 65 20 74 6f 20  ds.  We have to 
1f3b0 6b 65 65 70 20 70 65 72 2d 74 61 62 6c 65 20 61  keep per-table a
1f3c0 75 74 6f 69 6e 63 72 65 6d 65 6e 74 0a 2a 2a 20  utoincrement.** 
1f3d0 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 63  information in c
1f3e0 61 73 65 20 69 6e 73 65 72 74 73 20 61 72 65 20  ase inserts are 
1f3f0 64 6f 6e 65 20 77 69 74 68 69 6e 20 74 72 69 67  done within trig
1f400 67 65 72 73 2e 20 20 54 72 69 67 67 65 72 73 20  gers.  Triggers 
1f410 64 6f 20 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d 61 6c  do not.** normal
1f420 6c 79 20 63 6f 6f 72 64 69 6e 61 74 65 20 74 68  ly coordinate th
1f430 65 69 72 20 61 63 74 69 76 69 74 69 65 73 2c 20  eir activities, 
1f440 62 75 74 20 77 65 20 64 6f 20 6e 65 65 64 20 74  but we do need t
1f450 6f 20 63 6f 6f 72 64 69 6e 61 74 65 20 74 68 65  o coordinate the
1f460 0a 2a 2a 20 6c 6f 61 64 69 6e 67 20 61 6e 64 20  .** loading and 
1f470 73 61 76 69 6e 67 20 6f 66 20 61 75 74 6f 69 6e  saving of autoin
1f480 63 72 65 6d 65 6e 74 20 69 6e 66 6f 72 6d 61 74  crement informat
1f490 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41  ion..*/.struct A
1f4a0 75 74 6f 69 6e 63 49 6e 66 6f 20 7b 0a 20 20 41  utoincInfo {.  A
1f4b0 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 4e 65 78  utoincInfo *pNex
1f4c0 74 3b 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 66  t;   /* Next inf
1f4d0 6f 20 62 6c 6f 63 6b 20 69 6e 20 61 20 6c 69 73  o block in a lis
1f4e0 74 20 6f 66 20 74 68 65 6d 20 61 6c 6c 20 2a 2f  t of them all */
1f4f0 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20  .  Table *pTab; 
1f500 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c           /* Tabl
1f510 65 20 74 68 69 73 20 69 6e 66 6f 20 62 6c 6f 63  e this info bloc
1f520 6b 20 72 65 66 65 72 73 20 74 6f 20 2a 2f 0a 20  k refers to */. 
1f530 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20   int iDb;       
1f540 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20         /* Index 
1f550 69 6e 20 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d  in sqlite3.aDb[]
1f560 20 6f 66 20 64 61 74 61 62 61 73 65 20 68 6f 6c   of database hol
1f570 64 69 6e 67 20 70 54 61 62 20 2a 2f 0a 20 20 69  ding pTab */.  i
1f580 6e 74 20 72 65 67 43 74 72 3b 20 20 20 20 20 20  nt regCtr;      
1f590 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72       /* Memory r
1f5a0 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20  egister holding 
1f5b0 74 68 65 20 72 6f 77 69 64 20 63 6f 75 6e 74 65  the rowid counte
1f5c0 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53  r */.};../*.** S
1f5d0 69 7a 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  ize of the colum
1f5e0 6e 20 63 61 63 68 65 0a 2a 2f 0a 23 69 66 6e 64  n cache.*/.#ifnd
1f5f0 65 66 20 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43  ef SQLITE_N_COLC
1f600 41 43 48 45 0a 23 20 64 65 66 69 6e 65 20 53 51  ACHE.# define SQ
1f610 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 20  LITE_N_COLCACHE 
1f620 31 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  10.#endif../*.**
1f630 20 41 74 20 6c 65 61 73 74 20 6f 6e 65 20 69 6e   At least one in
1f640 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
1f650 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
1f660 65 20 69 73 20 63 72 65 61 74 65 64 20 66 6f 72  e is created for
1f670 20 65 61 63 68 0a 2a 2a 20 74 72 69 67 67 65 72   each.** trigger
1f680 20 74 68 61 74 20 6d 61 79 20 62 65 20 66 69 72   that may be fir
1f690 65 64 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67  ed while parsing
1f6a0 20 61 6e 20 49 4e 53 45 52 54 2c 20 55 50 44 41   an INSERT, UPDA
1f6b0 54 45 20 6f 72 20 44 45 4c 45 54 45 0a 2a 2a 20  TE or DELETE.** 
1f6c0 73 74 61 74 65 6d 65 6e 74 2e 20 41 6c 6c 20 73  statement. All s
1f6d0 75 63 68 20 6f 62 6a 65 63 74 73 20 61 72 65 20  uch objects are 
1f6e0 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 6c 69  stored in the li
1f6f0 6e 6b 65 64 20 6c 69 73 74 20 68 65 61 64 65 64  nked list headed
1f700 20 61 74 0a 2a 2a 20 50 61 72 73 65 2e 70 54 72   at.** Parse.pTr
1f710 69 67 67 65 72 50 72 67 20 61 6e 64 20 64 65 6c  iggerPrg and del
1f720 65 74 65 64 20 6f 6e 63 65 20 73 74 61 74 65 6d  eted once statem
1f730 65 6e 74 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20  ent compilation 
1f740 68 61 73 20 62 65 65 6e 0a 2a 2a 20 63 6f 6d 70  has been.** comp
1f750 6c 65 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 56  leted..**.** A V
1f760 64 62 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20  dbe sub-program 
1f770 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20  that implements 
1f780 74 68 65 20 62 6f 64 79 20 61 6e 64 20 57 48 45  the body and WHE
1f790 4e 20 63 6c 61 75 73 65 20 6f 66 20 74 72 69 67  N clause of trig
1f7a0 67 65 72 0a 2a 2a 20 54 72 69 67 67 65 72 50 72  ger.** TriggerPr
1f7b0 67 2e 70 54 72 69 67 67 65 72 2c 20 61 73 73 75  g.pTrigger, assu
1f7c0 6d 69 6e 67 20 61 20 64 65 66 61 75 6c 74 20 4f  ming a default O
1f7d0 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73  N CONFLICT claus
1f7e0 65 20 6f 66 0a 2a 2a 20 54 72 69 67 67 65 72 50  e of.** TriggerP
1f7f0 72 67 2e 6f 72 63 6f 6e 66 2c 20 69 73 20 73 74  rg.orconf, is st
1f800 6f 72 65 64 20 69 6e 20 74 68 65 20 54 72 69 67  ored in the Trig
1f810 67 65 72 50 72 67 2e 70 50 72 6f 67 72 61 6d 20  gerPrg.pProgram 
1f820 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 20 54 68 65  variable..** The
1f830 20 50 61 72 73 65 2e 70 54 72 69 67 67 65 72 50   Parse.pTriggerP
1f840 72 67 20 6c 69 73 74 20 6e 65 76 65 72 20 63 6f  rg list never co
1f850 6e 74 61 69 6e 73 20 74 77 6f 20 65 6e 74 72 69  ntains two entri
1f860 65 73 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  es with the same
1f870 0a 2a 2a 20 76 61 6c 75 65 73 20 66 6f 72 20 62  .** values for b
1f880 6f 74 68 20 70 54 72 69 67 67 65 72 20 61 6e 64  oth pTrigger and
1f890 20 6f 72 63 6f 6e 66 2e 0a 2a 2a 0a 2a 2a 20 54   orconf..**.** T
1f8a0 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 61 43  he TriggerPrg.aC
1f8b0 6f 6c 6d 61 73 6b 5b 30 5d 20 76 61 72 69 61 62  olmask[0] variab
1f8c0 6c 65 20 69 73 20 73 65 74 20 74 6f 20 61 20 6d  le is set to a m
1f8d0 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c  ask of old.* col
1f8e0 75 6d 6e 73 0a 2a 2a 20 61 63 63 65 73 73 65 64  umns.** accessed
1f8f0 20 28 6f 72 20 73 65 74 20 74 6f 20 30 20 66 6f   (or set to 0 fo
1f900 72 20 74 72 69 67 67 65 72 73 20 66 69 72 65 64  r triggers fired
1f910 20 61 73 20 61 20 72 65 73 75 6c 74 20 6f 66 20   as a result of 
1f920 49 4e 53 45 52 54 0a 2a 2a 20 73 74 61 74 65 6d  INSERT.** statem
1f930 65 6e 74 73 29 2e 20 53 69 6d 69 6c 61 72 6c 79  ents). Similarly
1f940 2c 20 74 68 65 20 54 72 69 67 67 65 72 50 72 67  , the TriggerPrg
1f950 2e 61 43 6f 6c 6d 61 73 6b 5b 31 5d 20 76 61 72  .aColmask[1] var
1f960 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f 0a  iable is set to.
1f970 2a 2a 20 61 20 6d 61 73 6b 20 6f 66 20 6e 65 77  ** a mask of new
1f980 2e 2a 20 63 6f 6c 75 6d 6e 73 20 75 73 65 64 20  .* columns used 
1f990 62 79 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a  by the program..
1f9a0 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67 65  */.struct Trigge
1f9b0 72 50 72 67 20 7b 0a 20 20 54 72 69 67 67 65 72  rPrg {.  Trigger
1f9c0 20 2a 70 54 72 69 67 67 65 72 3b 20 20 20 20 20   *pTrigger;     
1f9d0 20 2f 2a 20 54 72 69 67 67 65 72 20 74 68 69 73   /* Trigger this
1f9e0 20 70 72 6f 67 72 61 6d 20 77 61 73 20 63 6f 64   program was cod
1f9f0 65 64 20 66 72 6f 6d 20 2a 2f 0a 20 20 54 72 69  ed from */.  Tri
1fa00 67 67 65 72 50 72 67 20 2a 70 4e 65 78 74 3b 20  ggerPrg *pNext; 
1fa10 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 65 6e 74       /* Next ent
1fa20 72 79 20 69 6e 20 50 61 72 73 65 2e 70 54 72 69  ry in Parse.pTri
1fa30 67 67 65 72 50 72 67 20 6c 69 73 74 20 2a 2f 0a  ggerPrg list */.
1fa40 20 20 53 75 62 50 72 6f 67 72 61 6d 20 2a 70 50    SubProgram *pP
1fa50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 50 72 6f  rogram;   /* Pro
1fa60 67 72 61 6d 20 69 6d 70 6c 65 6d 65 6e 74 69 6e  gram implementin
1fa70 67 20 70 54 72 69 67 67 65 72 2f 6f 72 63 6f 6e  g pTrigger/orcon
1fa80 66 20 2a 2f 0a 20 20 69 6e 74 20 6f 72 63 6f 6e  f */.  int orcon
1fa90 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  f;             /
1faa0 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e  * Default ON CON
1fab0 46 4c 49 43 54 20 70 6f 6c 69 63 79 20 2a 2f 0a  FLICT policy */.
1fac0 20 20 75 33 32 20 61 43 6f 6c 6d 61 73 6b 5b 32    u32 aColmask[2
1fad0 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73  ];        /* Mas
1fae0 6b 73 20 6f 66 20 6f 6c 64 2e 2a 2c 20 6e 65 77  ks of old.*, new
1faf0 2e 2a 20 63 6f 6c 75 6d 6e 73 20 61 63 63 65 73  .* columns acces
1fb00 73 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  sed */.};../*.**
1fb10 20 54 68 65 20 79 44 62 4d 61 73 6b 20 64 61 74   The yDbMask dat
1fb20 61 74 79 70 65 20 66 6f 72 20 74 68 65 20 62 69  atype for the bi
1fb30 74 6d 61 73 6b 20 6f 66 20 61 6c 6c 20 61 74 74  tmask of all att
1fb40 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73 2e  ached databases.
1fb50 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d  .*/.#if SQLITE_M
1fb60 41 58 5f 41 54 54 41 43 48 45 44 3e 33 30 0a 20  AX_ATTACHED>30. 
1fb70 20 74 79 70 65 64 65 66 20 75 6e 73 69 67 6e 65   typedef unsigne
1fb80 64 20 63 68 61 72 20 79 44 62 4d 61 73 6b 5b 28  d char yDbMask[(
1fb90 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43  SQLITE_MAX_ATTAC
1fba0 48 45 44 2b 39 29 2f 38 5d 3b 0a 23 20 64 65 66  HED+9)/8];.# def
1fbb0 69 6e 65 20 44 62 4d 61 73 6b 54 65 73 74 28 4d  ine DbMaskTest(M
1fbc0 2c 49 29 20 20 20 20 28 28 28 4d 29 5b 28 49 29  ,I)    (((M)[(I)
1fbd0 2f 38 5d 26 28 31 3c 3c 28 28 49 29 26 37 29 29  /8]&(1<<((I)&7))
1fbe0 29 21 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 44  )!=0).# define D
1fbf0 62 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20  bMaskZero(M)    
1fc00 20 20 6d 65 6d 73 65 74 28 28 4d 29 2c 30 2c 73    memset((M),0,s
1fc10 69 7a 65 6f 66 28 4d 29 29 0a 23 20 64 65 66 69  izeof(M)).# defi
1fc20 6e 65 20 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49  ne DbMaskSet(M,I
1fc30 29 20 20 20 20 20 28 4d 29 5b 28 49 29 2f 38 5d  )     (M)[(I)/8]
1fc40 7c 3d 28 31 3c 3c 28 28 49 29 26 37 29 29 0a 23  |=(1<<((I)&7)).#
1fc50 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c   define DbMaskAl
1fc60 6c 5a 65 72 6f 28 4d 29 20 20 20 73 71 6c 69 74  lZero(M)   sqlit
1fc70 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28  e3DbMaskAllZero(
1fc80 4d 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  M).# define DbMa
1fc90 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20 20 28  skNonZero(M)   (
1fca0 73 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c  sqlite3DbMaskAll
1fcb0 5a 65 72 6f 28 4d 29 3d 3d 30 29 0a 23 65 6c 73  Zero(M)==0).#els
1fcc0 65 0a 20 20 74 79 70 65 64 65 66 20 75 6e 73 69  e.  typedef unsi
1fcd0 67 6e 65 64 20 69 6e 74 20 79 44 62 4d 61 73 6b  gned int yDbMask
1fce0 3b 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  ;.# define DbMas
1fcf0 6b 54 65 73 74 28 4d 2c 49 29 20 20 20 20 28 28  kTest(M,I)    ((
1fd00 28 4d 29 26 28 28 28 79 44 62 4d 61 73 6b 29 31  (M)&(((yDbMask)1
1fd10 29 3c 3c 28 49 29 29 29 21 3d 30 29 0a 23 20 64  )<<(I)))!=0).# d
1fd20 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a 65 72 6f  efine DbMaskZero
1fd30 28 4d 29 20 20 20 20 20 20 28 4d 29 3d 30 0a 23  (M)      (M)=0.#
1fd40 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 53 65   define DbMaskSe
1fd50 74 28 4d 2c 49 29 20 20 20 20 20 28 4d 29 7c 3d  t(M,I)     (M)|=
1fd60 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 28  (((yDbMask)1)<<(
1fd70 49 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  I)).# define DbM
1fd80 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20 20 20  askAllZero(M)   
1fd90 28 4d 29 3d 3d 30 0a 23 20 64 65 66 69 6e 65 20  (M)==0.# define 
1fda0 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29  DbMaskNonZero(M)
1fdb0 20 20 20 28 4d 29 21 3d 30 0a 23 65 6e 64 69 66     (M)!=0.#endif
1fdc0 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 53 51 4c 20 70  ../*.** An SQL p
1fdd0 61 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20  arser context.  
1fde0 41 20 63 6f 70 79 20 6f 66 20 74 68 69 73 20 73  A copy of this s
1fdf0 74 72 75 63 74 75 72 65 20 69 73 20 70 61 73 73  tructure is pass
1fe00 65 64 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 68  ed through.** th
1fe10 65 20 70 61 72 73 65 72 20 61 6e 64 20 64 6f 77  e parser and dow
1fe20 6e 20 69 6e 74 6f 20 61 6c 6c 20 74 68 65 20 70  n into all the p
1fe30 61 72 73 65 72 20 61 63 74 69 6f 6e 20 72 6f 75  arser action rou
1fe40 74 69 6e 65 20 69 6e 20 6f 72 64 65 72 20 74 6f  tine in order to
1fe50 0a 2a 2a 20 63 61 72 72 79 20 61 72 6f 75 6e 64  .** carry around
1fe60 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61   information tha
1fe70 74 20 69 73 20 67 6c 6f 62 61 6c 20 74 6f 20 74  t is global to t
1fe80 68 65 20 65 6e 74 69 72 65 20 70 61 72 73 65 2e  he entire parse.
1fe90 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72 75 63  .**.** The struc
1fea0 74 75 72 65 20 69 73 20 64 69 76 69 64 65 64 20  ture is divided 
1feb0 69 6e 74 6f 20 74 77 6f 20 70 61 72 74 73 2e 20  into two parts. 
1fec0 20 57 68 65 6e 20 74 68 65 20 70 61 72 73 65 72   When the parser
1fed0 20 61 6e 64 20 63 6f 64 65 0a 2a 2a 20 67 65 6e   and code.** gen
1fee0 65 72 61 74 65 20 63 61 6c 6c 20 74 68 65 6d 73  erate call thems
1fef0 65 6c 76 65 73 20 72 65 63 75 72 73 69 76 65 6c  elves recursivel
1ff00 79 2c 20 74 68 65 20 66 69 72 73 74 20 70 61 72  y, the first par
1ff10 74 20 6f 66 20 74 68 65 20 73 74 72 75 63 74 75  t of the structu
1ff20 72 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 74 61 6e  re.** is constan
1ff30 74 20 62 75 74 20 74 68 65 20 73 65 63 6f 6e 64  t but the second
1ff40 20 70 61 72 74 20 69 73 20 72 65 73 65 74 20 61   part is reset a
1ff50 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20  t the beginning 
1ff60 61 6e 64 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 61  and end of.** ea
1ff70 63 68 20 72 65 63 75 72 73 69 6f 6e 2e 0a 2a 2a  ch recursion..**
1ff80 0a 2a 2a 20 54 68 65 20 6e 54 61 62 6c 65 4c 6f  .** The nTableLo
1ff90 63 6b 20 61 6e 64 20 61 54 61 62 6c 65 4c 6f 63  ck and aTableLoc
1ffa0 6b 20 76 61 72 69 61 62 6c 65 73 20 61 72 65 20  k variables are 
1ffb0 6f 6e 6c 79 20 75 73 65 64 20 69 66 20 74 68 65  only used if the
1ffc0 20 73 68 61 72 65 64 2d 63 61 63 68 65 0a 2a 2a   shared-cache.**
1ffd0 20 66 65 61 74 75 72 65 20 69 73 20 65 6e 61 62   feature is enab
1ffe0 6c 65 64 20 28 69 66 20 73 71 6c 69 74 65 33 54  led (if sqlite3T
1fff0 73 64 28 29 2d 3e 75 73 65 53 68 61 72 65 64 44  sd()->useSharedD
20000 61 74 61 20 69 73 20 74 72 75 65 29 2e 20 54 68  ata is true). Th
20010 65 79 20 61 72 65 0a 2a 2a 20 75 73 65 64 20 74  ey are.** used t
20020 6f 20 73 74 6f 72 65 20 74 68 65 20 73 65 74 20  o store the set 
20030 6f 66 20 74 61 62 6c 65 2d 6c 6f 63 6b 73 20 72  of table-locks r
20040 65 71 75 69 72 65 64 20 62 79 20 74 68 65 20 73  equired by the s
20050 74 61 74 65 6d 65 6e 74 20 62 65 69 6e 67 0a 2a  tatement being.*
20060 2a 20 63 6f 6d 70 69 6c 65 64 2e 20 46 75 6e 63  * compiled. Func
20070 74 69 6f 6e 20 73 71 6c 69 74 65 33 54 61 62 6c  tion sqlite3Tabl
20080 65 4c 6f 63 6b 28 29 20 69 73 20 75 73 65 64 20  eLock() is used 
20090 74 6f 20 61 64 64 20 65 6e 74 72 69 65 73 20 74  to add entries t
200a0 6f 20 74 68 65 0a 2a 2a 20 6c 69 73 74 2e 0a 2a  o the.** list..*
200b0 2f 0a 73 74 72 75 63 74 20 50 61 72 73 65 20 7b  /.struct Parse {
200c0 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20  .  sqlite3 *db; 
200d0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6d          /* The m
200e0 61 69 6e 20 64 61 74 61 62 61 73 65 20 73 74 72  ain database str
200f0 75 63 74 75 72 65 20 2a 2f 0a 20 20 63 68 61 72  ucture */.  char
20100 20 2a 7a 45 72 72 4d 73 67 3b 20 20 20 20 20 20   *zErrMsg;      
20110 20 2f 2a 20 41 6e 20 65 72 72 6f 72 20 6d 65 73   /* An error mes
20120 73 61 67 65 20 2a 2f 0a 20 20 56 64 62 65 20 2a  sage */.  Vdbe *
20130 70 56 64 62 65 3b 20 20 20 20 20 20 20 20 20 2f  pVdbe;         /
20140 2a 20 41 6e 20 65 6e 67 69 6e 65 20 66 6f 72 20  * An engine for 
20150 65 78 65 63 75 74 69 6e 67 20 64 61 74 61 62 61  executing databa
20160 73 65 20 62 79 74 65 63 6f 64 65 20 2a 2f 0a 20  se bytecode */. 
20170 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20   int rc;        
20180 20 20 20 20 20 20 2f 2a 20 52 65 74 75 72 6e 20        /* Return 
20190 63 6f 64 65 20 66 72 6f 6d 20 65 78 65 63 75 74  code from execut
201a0 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 4e  ion */.  u8 colN
201b0 61 6d 65 73 53 65 74 3b 20 20 20 20 20 20 2f 2a  amesSet;      /*
201c0 20 54 52 55 45 20 61 66 74 65 72 20 4f 50 5f 43   TRUE after OP_C
201d0 6f 6c 75 6d 6e 4e 61 6d 65 20 68 61 73 20 62 65  olumnName has be
201e0 65 6e 20 69 73 73 75 65 64 20 74 6f 20 70 56 64  en issued to pVd
201f0 62 65 20 2a 2f 0a 20 20 75 38 20 63 68 65 63 6b  be */.  u8 check
20200 53 63 68 65 6d 61 3b 20 20 20 20 20 20 2f 2a 20  Schema;      /* 
20210 43 61 75 73 65 73 20 73 63 68 65 6d 61 20 63 6f  Causes schema co
20220 6f 6b 69 65 20 63 68 65 63 6b 20 61 66 74 65 72  okie check after
20230 20 61 6e 20 65 72 72 6f 72 20 2a 2f 0a 20 20 75   an error */.  u
20240 38 20 6e 65 73 74 65 64 3b 20 20 20 20 20 20 20  8 nested;       
20250 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
20260 20 6e 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f   nested calls to
20270 20 74 68 65 20 70 61 72 73 65 72 2f 63 6f 64 65   the parser/code
20280 20 67 65 6e 65 72 61 74 6f 72 20 2a 2f 0a 20 20   generator */.  
20290 75 38 20 6e 54 65 6d 70 52 65 67 3b 20 20 20 20  u8 nTempReg;    
202a0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
202b0 66 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69  f temporary regi
202c0 73 74 65 72 73 20 69 6e 20 61 54 65 6d 70 52 65  sters in aTempRe
202d0 67 5b 5d 20 2a 2f 0a 20 20 75 38 20 69 73 4d 75  g[] */.  u8 isMu
202e0 6c 74 69 57 72 69 74 65 3b 20 20 20 20 20 2f 2a  ltiWrite;     /*
202f0 20 54 72 75 65 20 69 66 20 73 74 61 74 65 6d 65   True if stateme
20300 6e 74 20 6d 61 79 20 6d 6f 64 69 66 79 2f 69 6e  nt may modify/in
20310 73 65 72 74 20 6d 75 6c 74 69 70 6c 65 20 72 6f  sert multiple ro
20320 77 73 20 2a 2f 0a 20 20 75 38 20 6d 61 79 41 62  ws */.  u8 mayAb
20330 6f 72 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ort;         /* 
20340 54 72 75 65 20 69 66 20 73 74 61 74 65 6d 65 6e  True if statemen
20350 74 20 6d 61 79 20 74 68 72 6f 77 20 61 6e 20 41  t may throw an A
20360 42 4f 52 54 20 65 78 63 65 70 74 69 6f 6e 20 2a  BORT exception *
20370 2f 0a 20 20 75 38 20 68 61 73 43 6f 6d 70 6f 75  /.  u8 hasCompou
20380 6e 64 3b 20 20 20 20 20 20 2f 2a 20 4e 65 65 64  nd;      /* Need
20390 20 74 6f 20 69 6e 76 6f 6b 65 20 63 6f 6e 76 65   to invoke conve
203a0 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74  rtCompoundSelect
203b0 54 6f 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a  ToSubquery() */.
203c0 20 20 75 38 20 6f 6b 43 6f 6e 73 74 46 61 63 74    u8 okConstFact
203d0 6f 72 3b 20 20 20 20 2f 2a 20 4f 4b 20 74 6f 20  or;    /* OK to 
203e0 66 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e 73 74  factor out const
203f0 61 6e 74 73 20 2a 2f 0a 20 20 75 38 20 64 69 73  ants */.  u8 dis
20400 61 62 6c 65 4c 6f 6f 6b 61 73 69 64 65 3b 20 2f  ableLookaside; /
20410 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 69 6d 65  * Number of time
20420 73 20 6c 6f 6f 6b 61 73 69 64 65 20 68 61 73 20  s lookaside has 
20430 62 65 65 6e 20 64 69 73 61 62 6c 65 64 20 2a 2f  been disabled */
20440 0a 20 20 75 38 20 6e 43 6f 6c 43 61 63 68 65 3b  .  u8 nColCache;
20450 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
20460 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20  r of entries in 
20470 61 43 6f 6c 43 61 63 68 65 5b 5d 20 2a 2f 0a 20  aColCache[] */. 
20480 20 69 6e 74 20 6e 52 61 6e 67 65 52 65 67 3b 20   int nRangeReg; 
20490 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
204a0 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 72   the temporary r
204b0 65 67 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f  egister block */
204c0 0a 20 20 69 6e 74 20 69 52 61 6e 67 65 52 65 67  .  int iRangeReg
204d0 3b 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74  ;       /* First
204e0 20 72 65 67 69 73 74 65 72 20 69 6e 20 74 65 6d   register in tem
204f0 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 20  porary register 
20500 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e  block */.  int n
20510 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Err;            
20520 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72  /* Number of err
20530 6f 72 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e  ors seen */.  in
20540 74 20 6e 54 61 62 3b 20 20 20 20 20 20 20 20 20  t nTab;         
20550 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
20560 70 72 65 76 69 6f 75 73 6c 79 20 61 6c 6c 6f 63  previously alloc
20570 61 74 65 64 20 56 44 42 45 20 63 75 72 73 6f 72  ated VDBE cursor
20580 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b  s */.  int nMem;
20590 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
205a0 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20  umber of memory 
205b0 63 65 6c 6c 73 20 75 73 65 64 20 73 6f 20 66 61  cells used so fa
205c0 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 70 41 6c  r */.  int nOpAl
205d0 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  loc;        /* N
205e0 75 6d 62 65 72 20 6f 66 20 73 6c 6f 74 73 20 61  umber of slots a
205f0 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 56 64 62  llocated for Vdb
20600 65 2e 61 4f 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74  e.aOp[] */.  int
20610 20 73 7a 4f 70 41 6c 6c 6f 63 3b 20 20 20 20 20   szOpAlloc;     
20620 20 20 2f 2a 20 42 79 74 65 73 20 6f 66 20 6d 65    /* Bytes of me
20630 6d 6f 72 79 20 73 70 61 63 65 20 61 6c 6c 6f 63  mory space alloc
20640 61 74 65 64 20 66 6f 72 20 56 64 62 65 2e 61 4f  ated for Vdbe.aO
20650 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 69 53 65  p[] */.  int iSe
20660 6c 66 54 61 62 3b 20 20 20 20 20 20 20 20 2f 2a  lfTab;        /*
20670 20 54 61 62 6c 65 20 61 73 73 6f 63 69 61 74 65   Table associate
20680 64 20 77 69 74 68 20 61 6e 20 69 6e 64 65 78 20  d with an index 
20690 6f 6e 20 65 78 70 72 2c 20 6f 72 20 6e 65 67 61  on expr, or nega
206a0 74 69 76 65 0a 20 20 20 20 20 20 20 20 20 20 20  tive.           
206b0 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 6f              ** o
206c0 66 20 74 68 65 20 62 61 73 65 20 72 65 67 69 73  f the base regis
206d0 74 65 72 20 64 75 72 69 6e 67 20 63 68 65 63 6b  ter during check
206e0 2d 63 6f 6e 73 74 72 61 69 6e 74 20 65 76 61 6c  -constraint eval
206f0 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63 68 65   */.  int iCache
20700 4c 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20 43 6f  Level;     /* Co
20710 6c 43 61 63 68 65 20 76 61 6c 69 64 20 77 68 65  lCache valid whe
20720 6e 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e 69 4c  n aColCache[].iL
20730 65 76 65 6c 3c 3d 69 43 61 63 68 65 4c 65 76 65  evel<=iCacheLeve
20740 6c 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63 68  l */.  int iCach
20750 65 43 6e 74 3b 20 20 20 20 20 20 20 2f 2a 20 43  eCnt;       /* C
20760 6f 75 6e 74 65 72 20 75 73 65 64 20 74 6f 20 67  ounter used to g
20770 65 6e 65 72 61 74 65 20 61 43 6f 6c 43 61 63 68  enerate aColCach
20780 65 5b 5d 2e 6c 72 75 20 76 61 6c 75 65 73 20 2a  e[].lru values *
20790 2f 0a 20 20 69 6e 74 20 6e 4c 61 62 65 6c 3b 20  /.  int nLabel; 
207a0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
207b0 65 72 20 6f 66 20 6c 61 62 65 6c 73 20 75 73 65  er of labels use
207c0 64 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 4c 61 62  d */.  int *aLab
207d0 65 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53  el;         /* S
207e0 70 61 63 65 20 74 6f 20 68 6f 6c 64 20 74 68 65  pace to hold the
207f0 20 6c 61 62 65 6c 73 20 2a 2f 0a 20 20 45 78 70   labels */.  Exp
20800 72 4c 69 73 74 20 2a 70 43 6f 6e 73 74 45 78 70  rList *pConstExp
20810 72 3b 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 65 78  r;/* Constant ex
20820 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 54  pressions */.  T
20830 6f 6b 65 6e 20 63 6f 6e 73 74 72 61 69 6e 74 4e  oken constraintN
20840 61 6d 65 3b 2f 2a 20 4e 61 6d 65 20 6f 66 20 74  ame;/* Name of t
20850 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 75  he constraint cu
20860 72 72 65 6e 74 6c 79 20 62 65 69 6e 67 20 70 61  rrently being pa
20870 72 73 65 64 20 2a 2f 0a 20 20 79 44 62 4d 61 73  rsed */.  yDbMas
20880 6b 20 77 72 69 74 65 4d 61 73 6b 3b 20 20 20 2f  k writeMask;   /
20890 2a 20 53 74 61 72 74 20 61 20 77 72 69 74 65 20  * Start a write 
208a0 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 74  transaction on t
208b0 68 65 73 65 20 64 61 74 61 62 61 73 65 73 20 2a  hese databases *
208c0 2f 0a 20 20 79 44 62 4d 61 73 6b 20 63 6f 6f 6b  /.  yDbMask cook
208d0 69 65 4d 61 73 6b 3b 20 20 2f 2a 20 42 69 74 6d  ieMask;  /* Bitm
208e0 61 73 6b 20 6f 66 20 73 63 68 65 6d 61 20 76 65  ask of schema ve
208f0 72 69 66 69 65 64 20 64 61 74 61 62 61 73 65 73  rified databases
20900 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f 77   */.  int regRow
20910 69 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 52 65  id;        /* Re
20920 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72  gister holding r
20930 6f 77 69 64 20 6f 66 20 43 52 45 41 54 45 20 54  owid of CREATE T
20940 41 42 4c 45 20 65 6e 74 72 79 20 2a 2f 0a 20 20  ABLE entry */.  
20950 69 6e 74 20 72 65 67 52 6f 6f 74 3b 20 20 20 20  int regRoot;    
20960 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
20970 20 68 6f 6c 64 69 6e 67 20 72 6f 6f 74 20 70 61   holding root pa
20980 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 6e 65  ge number for ne
20990 77 20 6f 62 6a 65 63 74 73 20 2a 2f 0a 20 20 69  w objects */.  i
209a0 6e 74 20 6e 4d 61 78 41 72 67 3b 20 20 20 20 20  nt nMaxArg;     
209b0 20 20 20 20 2f 2a 20 4d 61 78 20 61 72 67 73 20      /* Max args 
209c0 70 61 73 73 65 64 20 74 6f 20 75 73 65 72 20 66  passed to user f
209d0 75 6e 63 74 69 6f 6e 20 62 79 20 73 75 62 2d 70  unction by sub-p
209e0 72 6f 67 72 61 6d 20 2a 2f 0a 23 69 66 20 53 45  rogram */.#if SE
209f0 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45  LECTTRACE_ENABLE
20a00 44 0a 20 20 69 6e 74 20 6e 53 65 6c 65 63 74 3b  D.  int nSelect;
20a10 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
20a20 65 72 20 6f 66 20 53 45 4c 45 43 54 20 73 74 61  er of SELECT sta
20a30 74 65 6d 65 6e 74 73 20 73 65 65 6e 20 2a 2f 0a  tements seen */.
20a40 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
20a50 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45  QLITE_OMIT_SHARE
20a60 44 5f 43 41 43 48 45 0a 20 20 69 6e 74 20 6e 54  D_CACHE.  int nT
20a70 61 62 6c 65 4c 6f 63 6b 3b 20 20 20 20 20 20 20  ableLock;       
20a80 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f   /* Number of lo
20a90 63 6b 73 20 69 6e 20 61 54 61 62 6c 65 4c 6f 63  cks in aTableLoc
20aa0 6b 20 2a 2f 0a 20 20 54 61 62 6c 65 4c 6f 63 6b  k */.  TableLock
20ab0 20 2a 61 54 61 62 6c 65 4c 6f 63 6b 3b 20 2f 2a   *aTableLock; /*
20ac0 20 52 65 71 75 69 72 65 64 20 74 61 62 6c 65 20   Required table 
20ad0 6c 6f 63 6b 73 20 66 6f 72 20 73 68 61 72 65 64  locks for shared
20ae0 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a 23  -cache mode */.#
20af0 65 6e 64 69 66 0a 20 20 41 75 74 6f 69 6e 63 49  endif.  AutoincI
20b00 6e 66 6f 20 2a 70 41 69 6e 63 3b 20 20 2f 2a 20  nfo *pAinc;  /* 
20b10 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  Information abou
20b20 74 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20  t AUTOINCREMENT 
20b30 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 20 20 50 61  counters */.  Pa
20b40 72 73 65 20 2a 70 54 6f 70 6c 65 76 65 6c 3b 20  rse *pToplevel; 
20b50 20 20 20 2f 2a 20 50 61 72 73 65 20 73 74 72 75     /* Parse stru
20b60 63 74 75 72 65 20 66 6f 72 20 6d 61 69 6e 20 70  cture for main p
20b70 72 6f 67 72 61 6d 20 28 6f 72 20 4e 55 4c 4c 29  rogram (or NULL)
20b80 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 72   */.  Table *pTr
20b90 69 67 67 65 72 54 61 62 3b 20 20 2f 2a 20 54 61  iggerTab;  /* Ta
20ba0 62 6c 65 20 74 72 69 67 67 65 72 73 20 61 72 65  ble triggers are
20bb0 20 62 65 69 6e 67 20 63 6f 64 65 64 20 66 6f 72   being coded for
20bc0 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72 43 72   */.  int addrCr
20bd0 54 61 62 3b 20 20 20 20 20 20 20 2f 2a 20 41 64  Tab;       /* Ad
20be0 64 72 65 73 73 20 6f 66 20 4f 50 5f 43 72 65 61  dress of OP_Crea
20bf0 74 65 42 74 72 65 65 20 6f 70 63 6f 64 65 20 6f  teBtree opcode o
20c00 6e 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 2a  n CREATE TABLE *
20c10 2f 0a 20 20 75 33 32 20 6e 51 75 65 72 79 4c 6f  /.  u32 nQueryLo
20c20 6f 70 3b 20 20 20 20 20 20 2f 2a 20 45 73 74 20  op;      /* Est 
20c30 6e 75 6d 62 65 72 20 6f 66 20 69 74 65 72 61 74  number of iterat
20c40 69 6f 6e 73 20 6f 66 20 61 20 71 75 65 72 79 20  ions of a query 
20c50 28 31 30 2a 6c 6f 67 32 28 4e 29 29 20 2a 2f 0a  (10*log2(N)) */.
20c60 20 20 75 33 32 20 6f 6c 64 6d 61 73 6b 3b 20 20    u32 oldmask;  
20c70 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f         /* Mask o
20c80 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 20  f old.* columns 
20c90 72 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20  referenced */.  
20ca0 75 33 32 20 6e 65 77 6d 61 73 6b 3b 20 20 20 20  u32 newmask;    
20cb0 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20       /* Mask of 
20cc0 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65  new.* columns re
20cd0 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 38  ferenced */.  u8
20ce0 20 65 54 72 69 67 67 65 72 4f 70 3b 20 20 20 20   eTriggerOp;    
20cf0 20 20 20 2f 2a 20 54 4b 5f 55 50 44 41 54 45 2c     /* TK_UPDATE,
20d00 20 54 4b 5f 49 4e 53 45 52 54 20 6f 72 20 54 4b   TK_INSERT or TK
20d10 5f 44 45 4c 45 54 45 20 2a 2f 0a 20 20 75 38 20  _DELETE */.  u8 
20d20 65 4f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20  eOrconf;        
20d30 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20    /* Default ON 
20d40 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79 20  CONFLICT policy 
20d50 66 6f 72 20 74 72 69 67 67 65 72 20 73 74 65 70  for trigger step
20d60 73 20 2a 2f 0a 20 20 75 38 20 64 69 73 61 62 6c  s */.  u8 disabl
20d70 65 54 72 69 67 67 65 72 73 3b 20 20 2f 2a 20 54  eTriggers;  /* T
20d80 72 75 65 20 74 6f 20 64 69 73 61 62 6c 65 20 74  rue to disable t
20d90 72 69 67 67 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a  riggers */..  /*
20da0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20db0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20dc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20dd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20de0 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a 20 46  *********.  ** F
20df0 69 65 6c 64 73 20 61 62 6f 76 65 20 6d 75 73 74  ields above must
20e00 20 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20   be initialized 
20e10 74 6f 20 7a 65 72 6f 2e 20 20 54 68 65 20 66 69  to zero.  The fi
20e20 65 6c 64 73 20 74 68 61 74 20 66 6f 6c 6c 6f 77  elds that follow
20e30 2c 0a 20 20 2a 2a 20 64 6f 77 6e 20 74 6f 20 74  ,.  ** down to t
20e40 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20  he beginning of 
20e50 74 68 65 20 72 65 63 75 72 73 69 76 65 20 73 65  the recursive se
20e60 63 74 69 6f 6e 2c 20 64 6f 20 6e 6f 74 20 6e 65  ction, do not ne
20e70 65 64 20 74 6f 20 62 65 0a 20 20 2a 2a 20 69 6e  ed to be.  ** in
20e80 69 74 69 61 6c 69 7a 65 64 20 61 73 20 74 68 65  itialized as the
20e90 79 20 77 69 6c 6c 20 62 65 20 73 65 74 20 62 65  y will be set be
20ea0 66 6f 72 65 20 62 65 69 6e 67 20 75 73 65 64 2e  fore being used.
20eb0 20 20 54 68 65 20 62 6f 75 6e 64 61 72 79 20 69    The boundary i
20ec0 73 0a 20 20 2a 2a 20 64 65 74 65 72 6d 69 6e 65  s.  ** determine
20ed0 64 20 62 79 20 6f 66 66 73 65 74 6f 66 28 50 61  d by offsetof(Pa
20ee0 72 73 65 2c 61 43 6f 6c 43 61 63 68 65 29 2e 0a  rse,aColCache)..
20ef0 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a    **************
20f00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20f10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20f20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20f30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20  ************/.. 
20f40 20 73 74 72 75 63 74 20 79 43 6f 6c 43 61 63 68   struct yColCach
20f50 65 20 7b 0a 20 20 20 20 69 6e 74 20 69 54 61 62  e {.    int iTab
20f60 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  le;           /*
20f70 20 54 61 62 6c 65 20 63 75 72 73 6f 72 20 6e 75   Table cursor nu
20f80 6d 62 65 72 20 2a 2f 0a 20 20 20 20 69 31 36 20  mber */.    i16 
20f90 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20  iColumn;        
20fa0 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6c 75 6d    /* Table colum
20fb0 6e 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20  n number */.    
20fc0 75 38 20 74 65 6d 70 52 65 67 3b 20 20 20 20 20  u8 tempReg;     
20fd0 20 20 20 20 20 20 2f 2a 20 69 52 65 67 20 69 73        /* iReg is
20fe0 20 61 20 74 65 6d 70 20 72 65 67 69 73 74 65 72   a temp register
20ff0 20 74 68 61 74 20 6e 65 65 64 73 20 74 6f 20 62   that needs to b
21000 65 20 66 72 65 65 64 20 2a 2f 0a 20 20 20 20 69  e freed */.    i
21010 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20 20 20 20  nt iLevel;      
21020 20 20 20 20 20 2f 2a 20 4e 65 73 74 69 6e 67 20       /* Nesting 
21030 6c 65 76 65 6c 20 2a 2f 0a 20 20 20 20 69 6e 74  level */.    int
21040 20 69 52 65 67 3b 20 20 20 20 20 20 20 20 20 20   iReg;          
21050 20 20 20 2f 2a 20 52 65 67 20 77 69 74 68 20 76     /* Reg with v
21060 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6c  alue of this col
21070 75 6d 6e 2e 20 30 20 6d 65 61 6e 73 20 6e 6f 6e  umn. 0 means non
21080 65 2e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6c 72  e. */.    int lr
21090 75 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  u;              
210a0 2f 2a 20 4c 65 61 73 74 20 72 65 63 65 6e 74 6c  /* Least recentl
210b0 79 20 75 73 65 64 20 65 6e 74 72 79 20 68 61 73  y used entry has
210c0 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 76 61   the smallest va
210d0 6c 75 65 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 43  lue */.  } aColC
210e0 61 63 68 65 5b 53 51 4c 49 54 45 5f 4e 5f 43 4f  ache[SQLITE_N_CO
210f0 4c 43 41 43 48 45 5d 3b 20 20 2f 2a 20 4f 6e 65  LCACHE];  /* One
21100 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
21110 20 63 61 63 68 65 20 65 6e 74 72 79 20 2a 2f 0a   cache entry */.
21120 20 20 69 6e 74 20 61 54 65 6d 70 52 65 67 5b 38    int aTempReg[8
21130 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 48 6f 6c  ];        /* Hol
21140 64 69 6e 67 20 61 72 65 61 20 66 6f 72 20 74 65  ding area for te
21150 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72  mporary register
21160 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73 4e 61  s */.  Token sNa
21170 6d 65 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 2f  meToken;       /
21180 2a 20 54 6f 6b 65 6e 20 77 69 74 68 20 75 6e 71  * Token with unq
21190 75 61 6c 69 66 69 65 64 20 73 63 68 65 6d 61 20  ualified schema 
211a0 6f 62 6a 65 63 74 20 6e 61 6d 65 20 2a 2f 0a 0a  object name */..
211b0 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a    /*************
211c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
211d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
211e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
211f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a  ***********.  **
21200 20 41 62 6f 76 65 20 69 73 20 63 6f 6e 73 74 61   Above is consta
21210 6e 74 20 62 65 74 77 65 65 6e 20 72 65 63 75 72  nt between recur
21220 73 69 6f 6e 73 2e 20 20 42 65 6c 6f 77 20 69 73  sions.  Below is
21230 20 72 65 73 65 74 20 62 65 66 6f 72 65 20 61 6e   reset before an
21240 64 20 61 66 74 65 72 0a 20 20 2a 2a 20 65 61 63  d after.  ** eac
21250 68 20 72 65 63 75 72 73 69 6f 6e 2e 20 20 54 68  h recursion.  Th
21260 65 20 62 6f 75 6e 64 61 72 79 20 62 65 74 77 65  e boundary betwe
21270 65 6e 20 74 68 65 73 65 20 74 77 6f 20 72 65 67  en these two reg
21280 69 6f 6e 73 20 69 73 20 64 65 74 65 72 6d 69 6e  ions is determin
21290 65 64 0a 20 20 2a 2a 20 75 73 69 6e 67 20 6f 66  ed.  ** using of
212a0 66 73 65 74 6f 66 28 50 61 72 73 65 2c 73 4c 61  fsetof(Parse,sLa
212b0 73 74 54 6f 6b 65 6e 29 20 73 6f 20 74 68 65 20  stToken) so the 
212c0 73 4c 61 73 74 54 6f 6b 65 6e 20 66 69 65 6c 64  sLastToken field
212d0 20 6d 75 73 74 20 62 65 20 74 68 65 0a 20 20 2a   must be the.  *
212e0 2a 20 66 69 72 73 74 20 66 69 65 6c 64 20 69 6e  * first field in
212f0 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20 72   the recursive r
21300 65 67 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a  egion..  *******
21310 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21320 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21330 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21340 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21350 2a 2f 0a 0a 20 20 54 6f 6b 65 6e 20 73 4c 61 73  */..  Token sLas
21360 74 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 2f 2a  tToken;       /*
21370 20 54 68 65 20 6c 61 73 74 20 74 6f 6b 65 6e 20   The last token 
21380 70 61 72 73 65 64 20 2a 2f 0a 20 20 79 6e 56 61  parsed */.  ynVa
21390 72 20 6e 56 61 72 3b 20 20 20 20 20 20 20 20 20  r nVar;         
213a0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
213b0 6f 66 20 27 3f 27 20 76 61 72 69 61 62 6c 65 73  of '?' variables
213c0 20 73 65 65 6e 20 69 6e 20 74 68 65 20 53 51 4c   seen in the SQL
213d0 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 75 38 20   so far */.  u8 
213e0 69 50 6b 53 6f 72 74 4f 72 64 65 72 3b 20 20 20  iPkSortOrder;   
213f0 20 20 20 20 20 20 20 2f 2a 20 41 53 43 20 6f 72         /* ASC or
21400 20 44 45 53 43 20 66 6f 72 20 49 4e 54 45 47 45   DESC for INTEGE
21410 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 2a 2f  R PRIMARY KEY */
21420 0a 20 20 75 38 20 65 78 70 6c 61 69 6e 3b 20 20  .  u8 explain;  
21430 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
21440 54 72 75 65 20 69 66 20 74 68 65 20 45 58 50 4c  True if the EXPL
21450 41 49 4e 20 66 6c 61 67 20 69 73 20 66 6f 75 6e  AIN flag is foun
21460 64 20 6f 6e 20 74 68 65 20 71 75 65 72 79 20 2a  d on the query *
21470 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
21480 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
21490 4c 45 0a 20 20 75 38 20 64 65 63 6c 61 72 65 56  LE.  u8 declareV
214a0 74 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 2f  tab;           /
214b0 2a 20 54 72 75 65 20 69 66 20 69 6e 73 69 64 65  * True if inside
214c0 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65   sqlite3_declare
214d0 5f 76 74 61 62 28 29 20 2a 2f 0a 20 20 69 6e 74  _vtab() */.  int
214e0 20 6e 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20   nVtabLock;     
214f0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
21500 20 6f 66 20 76 69 72 74 75 61 6c 20 74 61 62 6c   of virtual tabl
21510 65 73 20 74 6f 20 6c 6f 63 6b 20 2a 2f 0a 23 65  es to lock */.#e
21520 6e 64 69 66 0a 20 20 69 6e 74 20 6e 48 65 69 67  ndif.  int nHeig
21530 68 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ht;             
21540 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 74   /* Expression t
21550 72 65 65 20 68 65 69 67 68 74 20 6f 66 20 63 75  ree height of cu
21560 72 72 65 6e 74 20 73 75 62 2d 73 65 6c 65 63 74  rrent sub-select
21570 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
21580 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a  TE_OMIT_EXPLAIN.
21590 20 20 69 6e 74 20 61 64 64 72 45 78 70 6c 61 69    int addrExplai
215a0 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41  n;          /* A
215b0 64 64 72 65 73 73 20 6f 66 20 63 75 72 72 65 6e  ddress of curren
215c0 74 20 4f 50 5f 45 78 70 6c 61 69 6e 20 6f 70 63  t OP_Explain opc
215d0 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ode */.#endif.  
215e0 56 4c 69 73 74 20 2a 70 56 4c 69 73 74 3b 20 20  VList *pVList;  
215f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 70            /* Map
21600 70 69 6e 67 20 62 65 74 77 65 65 6e 20 76 61 72  ping between var
21610 69 61 62 6c 65 20 6e 61 6d 65 73 20 61 6e 64 20  iable names and 
21620 6e 75 6d 62 65 72 73 20 2a 2f 0a 20 20 56 64 62  numbers */.  Vdb
21630 65 20 2a 70 52 65 70 72 65 70 61 72 65 3b 20 20  e *pReprepare;  
21640 20 20 20 20 20 20 20 2f 2a 20 56 4d 20 62 65 69         /* VM bei
21650 6e 67 20 72 65 70 72 65 70 61 72 65 64 20 28 73  ng reprepared (s
21660 71 6c 69 74 65 33 52 65 70 72 65 70 61 72 65 28  qlite3Reprepare(
21670 29 29 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  )) */.  const ch
21680 61 72 20 2a 7a 54 61 69 6c 3b 20 20 20 20 20 20  ar *zTail;      
21690 20 20 2f 2a 20 41 6c 6c 20 53 51 4c 20 74 65 78    /* All SQL tex
216a0 74 20 70 61 73 74 20 74 68 65 20 6c 61 73 74 20  t past the last 
216b0 73 65 6d 69 63 6f 6c 6f 6e 20 70 61 72 73 65 64  semicolon parsed
216c0 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65   */.  Table *pNe
216d0 77 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20  wTable;         
216e0 2f 2a 20 41 20 74 61 62 6c 65 20 62 65 69 6e 67  /* A table being
216f0 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20   constructed by 
21700 43 52 45 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a  CREATE TABLE */.
21710 20 20 54 72 69 67 67 65 72 20 2a 70 4e 65 77 54    Trigger *pNewT
21720 72 69 67 67 65 72 3b 20 20 20 20 20 2f 2a 20 54  rigger;     /* T
21730 72 69 67 67 65 72 20 75 6e 64 65 72 20 63 6f 6e  rigger under con
21740 73 74 72 75 63 74 20 62 79 20 61 20 43 52 45 41  struct by a CREA
21750 54 45 20 54 52 49 47 47 45 52 20 2a 2f 0a 20 20  TE TRIGGER */.  
21760 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 75 74  const char *zAut
21770 68 43 6f 6e 74 65 78 74 3b 20 2f 2a 20 54 68 65  hContext; /* The
21780 20 36 74 68 20 70 61 72 61 6d 65 74 65 72 20 74   6th parameter t
21790 6f 20 64 62 2d 3e 78 41 75 74 68 20 63 61 6c 6c  o db->xAuth call
217a0 62 61 63 6b 73 20 2a 2f 0a 23 69 66 6e 64 65 66  backs */.#ifndef
217b0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
217c0 54 55 41 4c 54 41 42 4c 45 0a 20 20 54 6f 6b 65  TUALTABLE.  Toke
217d0 6e 20 73 41 72 67 3b 20 20 20 20 20 20 20 20 20  n sArg;         
217e0 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70 6c 65 74        /* Complet
217f0 65 20 74 65 78 74 20 6f 66 20 61 20 6d 6f 64 75  e text of a modu
21800 6c 65 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 20  le argument */. 
21810 20 54 61 62 6c 65 20 2a 2a 61 70 56 74 61 62 4c   Table **apVtabL
21820 6f 63 6b 3b 20 20 20 20 20 20 20 2f 2a 20 50 6f  ock;       /* Po
21830 69 6e 74 65 72 20 74 6f 20 76 69 72 74 75 61 6c  inter to virtual
21840 20 74 61 62 6c 65 73 20 6e 65 65 64 69 6e 67 20   tables needing 
21850 6c 6f 63 6b 69 6e 67 20 2a 2f 0a 23 65 6e 64 69  locking */.#endi
21860 66 0a 20 20 54 61 62 6c 65 20 2a 70 5a 6f 6d 62  f.  Table *pZomb
21870 69 65 54 61 62 3b 20 20 20 20 20 20 20 20 2f 2a  ieTab;        /*
21880 20 4c 69 73 74 20 6f 66 20 54 61 62 6c 65 20 6f   List of Table o
21890 62 6a 65 63 74 73 20 74 6f 20 64 65 6c 65 74 65  bjects to delete
218a0 20 61 66 74 65 72 20 63 6f 64 65 20 67 65 6e 20   after code gen 
218b0 2a 2f 0a 20 20 54 72 69 67 67 65 72 50 72 67 20  */.  TriggerPrg 
218c0 2a 70 54 72 69 67 67 65 72 50 72 67 3b 20 20 2f  *pTriggerPrg;  /
218d0 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66  * Linked list of
218e0 20 63 6f 64 65 64 20 74 72 69 67 67 65 72 73 20   coded triggers 
218f0 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69 74 68  */.  With *pWith
21900 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
21910 2a 20 43 75 72 72 65 6e 74 20 57 49 54 48 20 63  * Current WITH c
21920 6c 61 75 73 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a  lause, or NULL *
21930 2f 0a 20 20 57 69 74 68 20 2a 70 57 69 74 68 54  /.  With *pWithT
21940 6f 46 72 65 65 3b 20 20 20 20 20 20 20 20 2f 2a  oFree;        /*
21950 20 46 72 65 65 20 74 68 69 73 20 57 49 54 48 20   Free this WITH 
21960 6f 62 6a 65 63 74 20 61 74 20 74 68 65 20 65 6e  object at the en
21970 64 20 6f 66 20 74 68 65 20 70 61 72 73 65 20 2a  d of the parse *
21980 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a 65  /.};../*.** Size
21990 73 20 61 6e 64 20 70 6f 69 6e 74 65 72 73 20 6f  s and pointers o
219a0 66 20 76 61 72 69 6f 75 73 20 70 61 72 74 73 20  f various parts 
219b0 6f 66 20 74 68 65 20 50 61 72 73 65 20 6f 62 6a  of the Parse obj
219c0 65 63 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ect..*/.#define 
219d0 50 41 52 53 45 5f 48 44 52 5f 53 5a 20 6f 66 66  PARSE_HDR_SZ off
219e0 73 65 74 6f 66 28 50 61 72 73 65 2c 61 43 6f 6c  setof(Parse,aCol
219f0 43 61 63 68 65 29 20 2f 2a 20 52 65 63 75 72 73  Cache) /* Recurs
21a00 69 76 65 20 70 61 72 74 20 77 2f 6f 20 61 43 6f  ive part w/o aCo
21a10 6c 43 61 63 68 65 2a 2f 0a 23 64 65 66 69 6e 65  lCache*/.#define
21a20 20 50 41 52 53 45 5f 52 45 43 55 52 53 45 5f 53   PARSE_RECURSE_S
21a30 5a 20 6f 66 66 73 65 74 6f 66 28 50 61 72 73 65  Z offsetof(Parse
21a40 2c 73 4c 61 73 74 54 6f 6b 65 6e 29 20 20 20 20  ,sLastToken)    
21a50 2f 2a 20 52 65 63 75 72 73 69 76 65 20 70 61 72  /* Recursive par
21a60 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 50 41 52  t */.#define PAR
21a70 53 45 5f 54 41 49 4c 5f 53 5a 20 28 73 69 7a 65  SE_TAIL_SZ (size
21a80 6f 66 28 50 61 72 73 65 29 2d 50 41 52 53 45 5f  of(Parse)-PARSE_
21a90 52 45 43 55 52 53 45 5f 53 5a 29 20 2f 2a 20 4e  RECURSE_SZ) /* N
21aa0 6f 6e 2d 72 65 63 75 72 73 69 76 65 20 70 61 72  on-recursive par
21ab0 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 50 41 52  t */.#define PAR
21ac0 53 45 5f 54 41 49 4c 28 58 29 20 28 28 28 63 68  SE_TAIL(X) (((ch
21ad0 61 72 2a 29 28 58 29 29 2b 50 41 52 53 45 5f 52  ar*)(X))+PARSE_R
21ae0 45 43 55 52 53 45 5f 53 5a 29 20 20 2f 2a 20 50  ECURSE_SZ)  /* P
21af0 6f 69 6e 74 65 72 20 74 6f 20 74 61 69 6c 20 2a  ointer to tail *
21b00 2f 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  /../*.** Return 
21b10 74 72 75 65 20 69 66 20 63 75 72 72 65 6e 74 6c  true if currentl
21b20 79 20 69 6e 73 69 64 65 20 61 6e 20 73 71 6c 69  y inside an sqli
21b30 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62  te3_declare_vtab
21b40 28 29 20 63 61 6c 6c 2e 0a 2a 2f 0a 23 69 66 64  () call..*/.#ifd
21b50 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
21b60 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 23 64  IRTUALTABLE.  #d
21b70 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45  efine IN_DECLARE
21b80 5f 56 54 41 42 20 30 0a 23 65 6c 73 65 0a 20 20  _VTAB 0.#else.  
21b90 23 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41  #define IN_DECLA
21ba0 52 45 5f 56 54 41 42 20 28 70 50 61 72 73 65 2d  RE_VTAB (pParse-
21bb0 3e 64 65 63 6c 61 72 65 56 74 61 62 29 0a 23 65  >declareVtab).#e
21bc0 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  ndif../*.** An i
21bd0 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
21be0 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
21bf0 72 65 20 63 61 6e 20 62 65 20 64 65 63 6c 61 72  re can be declar
21c00 65 64 20 6f 6e 20 61 20 73 74 61 63 6b 20 61 6e  ed on a stack an
21c10 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61 76  d used.** to sav
21c20 65 20 74 68 65 20 50 61 72 73 65 2e 7a 41 75 74  e the Parse.zAut
21c30 68 43 6f 6e 74 65 78 74 20 76 61 6c 75 65 20 73  hContext value s
21c40 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20 62 65  o that it can be
21c50 20 72 65 73 74 6f 72 65 64 20 6c 61 74 65 72 2e   restored later.
21c60 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 68 43  .*/.struct AuthC
21c70 6f 6e 74 65 78 74 20 7b 0a 20 20 63 6f 6e 73 74  ontext {.  const
21c80 20 63 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74   char *zAuthCont
21c90 65 78 74 3b 20 20 20 2f 2a 20 50 75 74 20 73 61  ext;   /* Put sa
21ca0 76 65 64 20 50 61 72 73 65 2e 7a 41 75 74 68 43  ved Parse.zAuthC
21cb0 6f 6e 74 65 78 74 20 68 65 72 65 20 2a 2f 0a 20  ontext here */. 
21cc0 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20   Parse *pParse; 
21cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
21ce0 54 68 65 20 50 61 72 73 65 20 73 74 72 75 63 74  The Parse struct
21cf0 75 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ure */.};../*.**
21d00 20 42 69 74 66 69 65 6c 64 20 66 6c 61 67 73 20   Bitfield flags 
21d10 66 6f 72 20 50 35 20 76 61 6c 75 65 20 69 6e 20  for P5 value in 
21d20 76 61 72 69 6f 75 73 20 6f 70 63 6f 64 65 73 2e  various opcodes.
21d30 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e  .**.** Value con
21d40 73 74 72 61 69 6e 74 73 20 28 65 6e 66 6f 72 63  straints (enforc
21d50 65 64 20 76 69 61 20 61 73 73 65 72 74 28 29 29  ed via assert())
21d60 3a 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 4c  :.**    OPFLAG_L
21d70 45 4e 47 54 48 41 52 47 20 20 20 20 3d 3d 20 53  ENGTHARG    == S
21d80 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e 47 54  QLITE_FUNC_LENGT
21d90 48 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 54  H.**    OPFLAG_T
21da0 59 50 45 4f 46 41 52 47 20 20 20 20 3d 3d 20 53  YPEOFARG    == S
21db0 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59 50 45 4f  QLITE_FUNC_TYPEO
21dc0 46 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 42  F.**    OPFLAG_B
21dd0 55 4c 4b 43 53 52 20 20 20 20 20 20 3d 3d 20 42  ULKCSR      == B
21de0 54 52 45 45 5f 42 55 4c 4b 4c 4f 41 44 0a 2a 2a  TREE_BULKLOAD.**
21df0 20 20 20 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45      OPFLAG_SEEKE
21e00 51 20 20 20 20 20 20 20 3d 3d 20 42 54 52 45 45  Q       == BTREE
21e10 5f 53 45 45 4b 5f 45 51 0a 2a 2a 20 20 20 20 4f  _SEEK_EQ.**    O
21e20 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 20  PFLAG_FORDELETE 
21e30 20 20 20 3d 3d 20 42 54 52 45 45 5f 46 4f 52 44     == BTREE_FORD
21e40 45 4c 45 54 45 0a 2a 2a 20 20 20 20 4f 50 46 4c  ELETE.**    OPFL
21e50 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 20  AG_SAVEPOSITION 
21e60 3d 3d 20 42 54 52 45 45 5f 53 41 56 45 50 4f 53  == BTREE_SAVEPOS
21e70 49 54 49 4f 4e 0a 2a 2a 20 20 20 20 4f 50 46 4c  ITION.**    OPFL
21e80 41 47 5f 41 55 58 44 45 4c 45 54 45 20 20 20 20  AG_AUXDELETE    
21e90 3d 3d 20 42 54 52 45 45 5f 41 55 58 44 45 4c 45  == BTREE_AUXDELE
21ea0 54 45 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  TE.*/.#define OP
21eb0 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 20 20 20  FLAG_NCHANGE    
21ec0 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50     0x01    /* OP
21ed0 5f 49 6e 73 65 72 74 3a 20 53 65 74 20 74 6f 20  _Insert: Set to 
21ee0 75 70 64 61 74 65 20 64 62 2d 3e 6e 43 68 61 6e  update db->nChan
21ef0 67 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  ge */.          
21f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21f10 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c             /* Al
21f20 73 6f 20 75 73 65 64 20 69 6e 20 50 32 20 28 6e  so used in P2 (n
21f30 6f 74 20 50 35 29 20 6f 66 20 4f 50 5f 44 65 6c  ot P5) of OP_Del
21f40 65 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ete */.#define O
21f50 50 46 4c 41 47 5f 45 50 48 45 4d 20 20 20 20 20  PFLAG_EPHEM     
21f60 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f      0x01    /* O
21f70 50 5f 43 6f 6c 75 6d 6e 3a 20 45 70 68 65 6d 65  P_Column: Epheme
21f80 72 61 6c 20 6f 75 74 70 75 74 20 69 73 20 6f 6b  ral output is ok
21f90 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
21fa0 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 20 20 20  AG_LASTROWID    
21fb0 20 30 78 32 30 20 20 20 20 2f 2a 20 53 65 74 20   0x20    /* Set 
21fc0 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6c 61  to update db->la
21fd0 73 74 52 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69  stRowid */.#defi
21fe0 6e 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41  ne OPFLAG_ISUPDA
21ff0 54 45 20 20 20 20 20 20 30 78 30 34 20 20 20 20  TE      0x04    
22000 2f 2a 20 54 68 69 73 20 4f 50 5f 49 6e 73 65 72  /* This OP_Inser
22010 74 20 69 73 20 61 6e 20 73 71 6c 20 55 50 44 41  t is an sql UPDA
22020 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  TE */.#define OP
22030 46 4c 41 47 5f 41 50 50 45 4e 44 20 20 20 20 20  FLAG_APPEND     
22040 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20 54 68     0x08    /* Th
22050 69 73 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20  is is likely to 
22060 62 65 20 61 6e 20 61 70 70 65 6e 64 20 2a 2f 0a  be an append */.
22070 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 55  #define OPFLAG_U
22080 53 45 53 45 45 4b 52 45 53 55 4c 54 20 30 78 31  SESEEKRESULT 0x1
22090 30 20 20 20 20 2f 2a 20 54 72 79 20 74 6f 20 61  0    /* Try to a
220a0 76 6f 69 64 20 61 20 73 65 65 6b 20 69 6e 20 42  void a seek in B
220b0 74 72 65 65 49 6e 73 65 72 74 28 29 20 2a 2f 0a  treeInsert() */.
220c0 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49  #define OPFLAG_I
220d0 53 4e 4f 4f 50 20 20 20 20 20 20 20 20 30 78 34  SNOOP        0x4
220e0 30 20 20 20 20 2f 2a 20 4f 50 5f 44 65 6c 65 74  0    /* OP_Delet
220f0 65 20 64 6f 65 73 20 70 72 65 2d 75 70 64 61 74  e does pre-updat
22100 65 2d 68 6f 6f 6b 20 6f 6e 6c 79 20 2a 2f 0a 23  e-hook only */.#
22110 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 45  define OPFLAG_LE
22120 4e 47 54 48 41 52 47 20 20 20 20 20 30 78 34 30  NGTHARG     0x40
22130 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e      /* OP_Column
22140 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 6c   only used for l
22150 65 6e 67 74 68 28 29 20 2a 2f 0a 23 64 65 66 69  ength() */.#defi
22160 6e 65 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46  ne OPFLAG_TYPEOF
22170 41 52 47 20 20 20 20 20 30 78 38 30 20 20 20 20  ARG     0x80    
22180 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c  /* OP_Column onl
22190 79 20 75 73 65 64 20 66 6f 72 20 74 79 70 65 6f  y used for typeo
221a0 66 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  f() */.#define O
221b0 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20 20 20  PFLAG_BULKCSR   
221c0 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f      0x01    /* O
221d0 50 5f 4f 70 65 6e 2a 2a 20 75 73 65 64 20 74 6f  P_Open** used to
221e0 20 6f 70 65 6e 20 62 75 6c 6b 20 63 75 72 73 6f   open bulk curso
221f0 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  r */.#define OPF
22200 4c 41 47 5f 53 45 45 4b 45 51 20 20 20 20 20 20  LAG_SEEKEQ      
22210 20 20 30 78 30 32 20 20 20 20 2f 2a 20 4f 50 5f    0x02    /* OP_
22220 4f 70 65 6e 2a 2a 20 63 75 72 73 6f 72 20 75 73  Open** cursor us
22230 65 73 20 45 51 20 73 65 65 6b 20 6f 6e 6c 79 20  es EQ seek only 
22240 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
22250 47 5f 46 4f 52 44 45 4c 45 54 45 20 20 20 20 20  G_FORDELETE     
22260 30 78 30 38 20 20 20 20 2f 2a 20 4f 50 5f 4f 70  0x08    /* OP_Op
22270 65 6e 20 73 68 6f 75 6c 64 20 75 73 65 20 42 54  en should use BT
22280 52 45 45 5f 46 4f 52 44 45 4c 45 54 45 20 2a 2f  REE_FORDELETE */
22290 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
222a0 50 32 49 53 52 45 47 20 20 20 20 20 20 20 30 78  P2ISREG       0x
222b0 31 30 20 20 20 20 2f 2a 20 50 32 20 74 6f 20 4f  10    /* P2 to O
222c0 50 5f 4f 70 65 6e 2a 2a 20 69 73 20 61 20 72 65  P_Open** is a re
222d0 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20 2a 2f  gister number */
222e0 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
222f0 50 45 52 4d 55 54 45 20 20 20 20 20 20 20 30 78  PERMUTE       0x
22300 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6d 70  01    /* OP_Comp
22310 61 72 65 3a 20 75 73 65 20 74 68 65 20 70 65 72  are: use the per
22320 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  mutation */.#def
22330 69 6e 65 20 4f 50 46 4c 41 47 5f 53 41 56 45 50  ine OPFLAG_SAVEP
22340 4f 53 49 54 49 4f 4e 20 20 30 78 30 32 20 20 20  OSITION  0x02   
22350 20 2f 2a 20 4f 50 5f 44 65 6c 65 74 65 2f 49 6e   /* OP_Delete/In
22360 73 65 72 74 3a 20 73 61 76 65 20 63 75 72 73 6f  sert: save curso
22370 72 20 70 6f 73 20 2a 2f 0a 23 64 65 66 69 6e 65  r pos */.#define
22380 20 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45 54   OPFLAG_AUXDELET
22390 45 20 20 20 20 20 30 78 30 34 20 20 20 20 2f 2a  E     0x04    /*
223a0 20 4f 50 5f 44 65 6c 65 74 65 3a 20 69 6e 64 65   OP_Delete: inde
223b0 78 20 69 6e 20 61 20 44 45 4c 45 54 45 20 6f 70  x in a DELETE op
223c0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
223d0 41 47 5f 4e 4f 43 48 4e 47 5f 4d 41 47 49 43 20  AG_NOCHNG_MAGIC 
223e0 20 30 78 36 64 20 20 20 20 2f 2a 20 4f 50 5f 4d   0x6d    /* OP_M
223f0 61 6b 65 52 65 63 6f 72 64 3a 20 73 65 72 69 61  akeRecord: seria
22400 6c 74 79 70 65 20 31 30 20 69 73 20 6f 6b 20 2a  ltype 10 is ok *
22410 2f 0a 0a 2f 2a 0a 20 2a 20 45 61 63 68 20 74 72  /../*. * Each tr
22420 69 67 67 65 72 20 70 72 65 73 65 6e 74 20 69 6e  igger present in
22430 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
22440 68 65 6d 61 20 69 73 20 73 74 6f 72 65 64 20 61  hema is stored a
22450 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
22460 0a 20 2a 20 73 74 72 75 63 74 20 54 72 69 67 67  . * struct Trigg
22470 65 72 2e 0a 20 2a 0a 20 2a 20 50 6f 69 6e 74 65  er.. *. * Pointe
22480 72 73 20 74 6f 20 69 6e 73 74 61 6e 63 65 73 20  rs to instances 
22490 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65  of struct Trigge
224a0 72 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20  r are stored in 
224b0 74 77 6f 20 77 61 79 73 2e 0a 20 2a 20 31 2e 20  two ways.. * 1. 
224c0 49 6e 20 74 68 65 20 22 74 72 69 67 48 61 73 68  In the "trigHash
224d0 22 20 68 61 73 68 20 74 61 62 6c 65 20 28 70 61  " hash table (pa
224e0 72 74 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65  rt of the sqlite
224f0 33 2a 20 74 68 61 74 20 72 65 70 72 65 73 65 6e  3* that represen
22500 74 73 20 74 68 65 0a 20 2a 20 20 20 20 64 61 74  ts the. *    dat
22510 61 62 61 73 65 29 2e 20 54 68 69 73 20 61 6c 6c  abase). This all
22520 6f 77 73 20 54 72 69 67 67 65 72 20 73 74 72 75  ows Trigger stru
22530 63 74 75 72 65 73 20 74 6f 20 62 65 20 72 65 74  ctures to be ret
22540 72 69 65 76 65 64 20 62 79 20 6e 61 6d 65 2e 0a  rieved by name..
22550 20 2a 20 32 2e 20 41 6c 6c 20 74 72 69 67 67 65   * 2. All trigge
22560 72 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  rs associated wi
22570 74 68 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c  th a single tabl
22580 65 20 66 6f 72 6d 20 61 20 6c 69 6e 6b 65 64 20  e form a linked 
22590 6c 69 73 74 2c 20 75 73 69 6e 67 20 74 68 65 0a  list, using the.
225a0 20 2a 20 20 20 20 70 4e 65 78 74 20 6d 65 6d 62   *    pNext memb
225b0 65 72 20 6f 66 20 73 74 72 75 63 74 20 54 72 69  er of struct Tri
225c0 67 67 65 72 2e 20 41 20 70 6f 69 6e 74 65 72 20  gger. A pointer 
225d0 74 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c 65  to the first ele
225e0 6d 65 6e 74 20 6f 66 20 74 68 65 0a 20 2a 20 20  ment of the. *  
225f0 20 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69 73    linked list is
22600 20 73 74 6f 72 65 64 20 61 73 20 74 68 65 20 22   stored as the "
22610 70 54 72 69 67 67 65 72 22 20 6d 65 6d 62 65 72  pTrigger" member
22620 20 6f 66 20 74 68 65 20 61 73 73 6f 63 69 61 74   of the associat
22630 65 64 0a 20 2a 20 20 20 20 73 74 72 75 63 74 20  ed. *    struct 
22640 54 61 62 6c 65 2e 0a 20 2a 0a 20 2a 20 54 68 65  Table.. *. * The
22650 20 22 73 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d   "step_list" mem
22660 62 65 72 20 70 6f 69 6e 74 73 20 74 6f 20 74 68  ber points to th
22670 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20  e first element 
22680 6f 66 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74  of a linked list
22690 0a 20 2a 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  . * containing t
226a0 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  he SQL statement
226b0 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20 74  s specified as t
226c0 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  he trigger progr
226d0 61 6d 2e 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54  am.. */.struct T
226e0 72 69 67 67 65 72 20 7b 0a 20 20 63 68 61 72 20  rigger {.  char 
226f0 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
22700 20 20 20 2f 2a 20 54 68 65 20 6e 61 6d 65 20 6f     /* The name o
22710 66 20 74 68 65 20 74 72 69 67 67 65 72 20 20 20  f the trigger   
22720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22730 20 20 20 20 20 2a 2f 0a 20 20 63 68 61 72 20 2a       */.  char *
22740 74 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20  table;          
22750 20 20 2f 2a 20 54 68 65 20 74 61 62 6c 65 20 6f    /* The table o
22760 72 20 76 69 65 77 20 74 6f 20 77 68 69 63 68 20  r view to which 
22770 74 68 65 20 74 72 69 67 67 65 72 20 61 70 70 6c  the trigger appl
22780 69 65 73 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20  ies */.  u8 op; 
22790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
227a0 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45   /* One of TK_DE
227b0 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c  LETE, TK_UPDATE,
227c0 20 54 4b 5f 49 4e 53 45 52 54 20 20 20 20 20 20   TK_INSERT      
227d0 20 20 20 2a 2f 0a 20 20 75 38 20 74 72 5f 74 6d     */.  u8 tr_tm
227e0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
227f0 2f 2a 20 4f 6e 65 20 6f 66 20 54 52 49 47 47 45  /* One of TRIGGE
22800 52 5f 42 45 46 4f 52 45 2c 20 54 52 49 47 47 45  R_BEFORE, TRIGGE
22810 52 5f 41 46 54 45 52 20 2a 2f 0a 20 20 45 78 70  R_AFTER */.  Exp
22820 72 20 2a 70 57 68 65 6e 3b 20 20 20 20 20 20 20  r *pWhen;       
22830 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45 4e       /* The WHEN
22840 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 65   clause of the e
22850 78 70 72 65 73 73 69 6f 6e 20 28 6d 61 79 20 62  xpression (may b
22860 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 49 64 4c  e NULL) */.  IdL
22870 69 73 74 20 2a 70 43 6f 6c 75 6d 6e 73 3b 20 20  ist *pColumns;  
22880 20 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20       /* If this 
22890 69 73 20 61 6e 20 55 50 44 41 54 45 20 4f 46 20  is an UPDATE OF 
228a0 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 74 72  <column-list> tr
228b0 69 67 67 65 72 2c 0a 20 20 20 20 20 20 20 20 20  igger,.         
228c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
228d0 20 20 20 20 74 68 65 20 3c 63 6f 6c 75 6d 6e 2d      the <column-
228e0 6c 69 73 74 3e 20 69 73 20 73 74 6f 72 65 64 20  list> is stored 
228f0 68 65 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61  here */.  Schema
22900 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 20   *pSchema;      
22910 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74    /* Schema cont
22920 61 69 6e 69 6e 67 20 74 68 65 20 74 72 69 67 67  aining the trigg
22930 65 72 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a  er */.  Schema *
22940 70 54 61 62 53 63 68 65 6d 61 3b 20 20 20 20 20  pTabSchema;     
22950 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69  /* Schema contai
22960 6e 69 6e 67 20 74 68 65 20 74 61 62 6c 65 20 2a  ning the table *
22970 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  /.  TriggerStep 
22980 2a 73 74 65 70 5f 6c 69 73 74 3b 20 2f 2a 20 4c  *step_list; /* L
22990 69 6e 6b 20 6c 69 73 74 20 6f 66 20 74 72 69 67  ink list of trig
229a0 67 65 72 20 70 72 6f 67 72 61 6d 20 73 74 65 70  ger program step
229b0 73 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f  s             */
229c0 0a 20 20 54 72 69 67 67 65 72 20 2a 70 4e 65 78  .  Trigger *pNex
229d0 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65  t;         /* Ne
229e0 78 74 20 74 72 69 67 67 65 72 20 61 73 73 6f 63  xt trigger assoc
229f0 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20 74  iated with the t
22a00 61 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  able */.};../*.*
22a10 2a 20 41 20 74 72 69 67 67 65 72 20 69 73 20 65  * A trigger is e
22a20 69 74 68 65 72 20 61 20 42 45 46 4f 52 45 20 6f  ither a BEFORE o
22a30 72 20 61 6e 20 41 46 54 45 52 20 74 72 69 67 67  r an AFTER trigg
22a40 65 72 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69  er.  The followi
22a50 6e 67 20 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20  ng constants.** 
22a60 64 65 74 65 72 6d 69 6e 65 20 77 68 69 63 68 2e  determine which.
22a70 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 72 65 20  .**.** If there 
22a80 61 72 65 20 6d 75 6c 74 69 70 6c 65 20 74 72 69  are multiple tri
22a90 67 67 65 72 73 2c 20 79 6f 75 20 6d 69 67 68 74  ggers, you might
22aa0 20 6f 66 20 73 6f 6d 65 20 42 45 46 4f 52 45 20   of some BEFORE 
22ab0 61 6e 64 20 73 6f 6d 65 20 41 46 54 45 52 2e 0a  and some AFTER..
22ac0 2a 2a 20 49 6e 20 74 68 61 74 20 63 61 73 65 73  ** In that cases
22ad0 2c 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 73 20  , the constants 
22ae0 62 65 6c 6f 77 20 63 61 6e 20 62 65 20 4f 52 65  below can be ORe
22af0 64 20 74 6f 67 65 74 68 65 72 2e 0a 2a 2f 0a 23  d together..*/.#
22b00 64 65 66 69 6e 65 20 54 52 49 47 47 45 52 5f 42  define TRIGGER_B
22b10 45 46 4f 52 45 20 20 31 0a 23 64 65 66 69 6e 65  EFORE  1.#define
22b20 20 54 52 49 47 47 45 52 5f 41 46 54 45 52 20 20   TRIGGER_AFTER  
22b30 20 32 0a 0a 2f 2a 0a 20 2a 20 41 6e 20 69 6e 73   2../*. * An ins
22b40 74 61 6e 63 65 20 6f 66 20 73 74 72 75 63 74 20  tance of struct 
22b50 54 72 69 67 67 65 72 53 74 65 70 20 69 73 20 75  TriggerStep is u
22b60 73 65 64 20 74 6f 20 73 74 6f 72 65 20 61 20 73  sed to store a s
22b70 69 6e 67 6c 65 20 53 51 4c 20 73 74 61 74 65 6d  ingle SQL statem
22b80 65 6e 74 0a 20 2a 20 74 68 61 74 20 69 73 20 61  ent. * that is a
22b90 20 70 61 72 74 20 6f 66 20 61 20 74 72 69 67 67   part of a trigg
22ba0 65 72 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a 0a 20  er-program.. *. 
22bb0 2a 20 49 6e 73 74 61 6e 63 65 73 20 6f 66 20 73  * Instances of s
22bc0 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65  truct TriggerSte
22bd0 70 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20  p are stored in 
22be0 61 20 73 69 6e 67 6c 79 20 6c 69 6e 6b 65 64 20  a singly linked 
22bf0 6c 69 73 74 20 28 6c 69 6e 6b 65 64 0a 20 2a 20  list (linked. * 
22c00 75 73 69 6e 67 20 74 68 65 20 22 70 4e 65 78 74  using the "pNext
22c10 22 20 6d 65 6d 62 65 72 29 20 72 65 66 65 72 65  " member) refere
22c20 6e 63 65 64 20 62 79 20 74 68 65 20 22 73 74 65  nced by the "ste
22c30 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72 20 6f  p_list" member o
22c40 66 20 74 68 65 0a 20 2a 20 61 73 73 6f 63 69 61  f the. * associa
22c50 74 65 64 20 73 74 72 75 63 74 20 54 72 69 67 67  ted struct Trigg
22c60 65 72 20 69 6e 73 74 61 6e 63 65 2e 20 54 68 65  er instance. The
22c70 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f   first element o
22c80 66 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73  f the linked lis
22c90 74 20 69 73 0a 20 2a 20 74 68 65 20 66 69 72 73  t is. * the firs
22ca0 74 20 73 74 65 70 20 6f 66 20 74 68 65 20 74 72  t step of the tr
22cb0 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e 0a 20  igger-program.. 
22cc0 2a 0a 20 2a 20 54 68 65 20 22 6f 70 22 20 6d 65  *. * The "op" me
22cd0 6d 62 65 72 20 69 6e 64 69 63 61 74 65 73 20 77  mber indicates w
22ce0 68 65 74 68 65 72 20 74 68 69 73 20 69 73 20 61  hether this is a
22cf0 20 22 44 45 4c 45 54 45 22 2c 20 22 49 4e 53 45   "DELETE", "INSE
22d00 52 54 22 2c 20 22 55 50 44 41 54 45 22 20 6f 72  RT", "UPDATE" or
22d10 0a 20 2a 20 22 53 45 4c 45 43 54 22 20 73 74 61  . * "SELECT" sta
22d20 74 65 6d 65 6e 74 2e 20 54 68 65 20 6d 65 61 6e  tement. The mean
22d30 69 6e 67 73 20 6f 66 20 74 68 65 20 6f 74 68 65  ings of the othe
22d40 72 20 6d 65 6d 62 65 72 73 20 69 73 20 64 65 74  r members is det
22d50 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 0a 20  ermined by the. 
22d60 2a 20 76 61 6c 75 65 20 6f 66 20 22 6f 70 22 20  * value of "op" 
22d70 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 20 2a 0a 20  as follows:. *. 
22d80 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 49 4e 53 45  * (op == TK_INSE
22d90 52 54 29 0a 20 2a 20 6f 72 63 6f 6e 66 20 20 20  RT). * orconf   
22da0 20 2d 3e 20 73 74 6f 72 65 73 20 74 68 65 20 4f   -> stores the O
22db0 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72  N CONFLICT algor
22dc0 69 74 68 6d 0a 20 2a 20 70 53 65 6c 65 63 74 20  ithm. * pSelect 
22dd0 20 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20    -> If this is 
22de0 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e  an INSERT INTO .
22df0 2e 2e 20 53 45 4c 45 43 54 20 2e 2e 2e 20 73 74  .. SELECT ... st
22e00 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a  atement, then. *
22e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
22e20 69 73 20 73 74 6f 72 65 73 20 61 20 70 6f 69 6e  is stores a poin
22e30 74 65 72 20 74 6f 20 74 68 65 20 53 45 4c 45 43  ter to the SELEC
22e40 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 4f 74 68  T statement. Oth
22e50 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20  erwise NULL.. * 
22e60 7a 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65 71  zTarget   -> Deq
22e70 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68  uoted name of th
22e80 65 20 74 61 62 6c 65 20 74 6f 20 69 6e 73 65 72  e table to inser
22e90 74 20 69 6e 74 6f 2e 0a 20 2a 20 70 45 78 70 72  t into.. * pExpr
22ea0 4c 69 73 74 20 2d 3e 20 49 66 20 74 68 69 73 20  List -> If this 
22eb0 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54  is an INSERT INT
22ec0 4f 20 2e 2e 2e 20 56 41 4c 55 45 53 20 2e 2e 2e  O ... VALUES ...
22ed0 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e   statement, then
22ee0 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
22ef0 20 74 68 69 73 20 73 74 6f 72 65 73 20 76 61 6c   this stores val
22f00 75 65 73 20 74 6f 20 62 65 20 69 6e 73 65 72 74  ues to be insert
22f10 65 64 2e 20 4f 74 68 65 72 77 69 73 65 20 4e 55  ed. Otherwise NU
22f20 4c 4c 2e 0a 20 2a 20 70 49 64 4c 69 73 74 20 20  LL.. * pIdList  
22f30 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20 61   -> If this is a
22f40 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e  n INSERT INTO ..
22f50 2e 20 28 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73  . (<column-names
22f60 3e 29 20 56 41 4c 55 45 53 20 2e 2e 2e 0a 20 2a  >) VALUES .... *
22f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
22f80 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68  atement, then th
22f90 69 73 20 73 74 6f 72 65 73 20 74 68 65 20 63 6f  is stores the co
22fa0 6c 75 6d 6e 2d 6e 61 6d 65 73 20 74 6f 20 62 65  lumn-names to be
22fb0 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
22fc0 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 2e 0a   inserted into..
22fd0 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f   *. * (op == TK_
22fe0 44 45 4c 45 54 45 29 0a 20 2a 20 7a 54 61 72 67  DELETE). * zTarg
22ff0 65 74 20 20 20 2d 3e 20 44 65 71 75 6f 74 65 64  et   -> Dequoted
23000 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
23010 6c 65 20 74 6f 20 64 65 6c 65 74 65 20 66 72 6f  le to delete fro
23020 6d 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20  m.. * pWhere    
23030 2d 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c 61  -> The WHERE cla
23040 75 73 65 20 6f 66 20 74 68 65 20 44 45 4c 45 54  use of the DELET
23050 45 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f  E statement if o
23060 6e 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2e  ne is specified.
23070 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
23080 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e   Otherwise NULL.
23090 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b  . *. * (op == TK
230a0 5f 55 50 44 41 54 45 29 0a 20 2a 20 7a 54 61 72  _UPDATE). * zTar
230b0 67 65 74 20 20 20 2d 3e 20 44 65 71 75 6f 74 65  get   -> Dequote
230c0 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  d name of the ta
230d0 62 6c 65 20 74 6f 20 75 70 64 61 74 65 2e 0a 20  ble to update.. 
230e0 2a 20 70 57 68 65 72 65 20 20 20 20 2d 3e 20 54  * pWhere    -> T
230f0 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
23100 6f 66 20 74 68 65 20 55 50 44 41 54 45 20 73 74  of the UPDATE st
23110 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69  atement if one i
23120 73 20 73 70 65 63 69 66 69 65 64 2e 0a 20 2a 20  s specified.. * 
23130 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 74 68               Oth
23140 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20  erwise NULL.. * 
23150 70 45 78 70 72 4c 69 73 74 20 2d 3e 20 41 20 6c  pExprList -> A l
23160 69 73 74 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  ist of the colum
23170 6e 73 20 74 6f 20 75 70 64 61 74 65 20 61 6e 64  ns to update and
23180 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73   the expressions
23190 20 74 6f 20 75 70 64 61 74 65 0a 20 2a 20 20 20   to update. *   
231a0 20 20 20 20 20 20 20 20 20 20 20 74 68 65 6d 20             them 
231b0 74 6f 2e 20 53 65 65 20 73 71 6c 69 74 65 33 55  to. See sqlite3U
231c0 70 64 61 74 65 28 29 20 64 6f 63 75 6d 65 6e 74  pdate() document
231d0 61 74 69 6f 6e 20 6f 66 20 22 70 43 68 61 6e 67  ation of "pChang
231e0 65 73 22 0a 20 2a 20 20 20 20 20 20 20 20 20 20  es". *          
231f0 20 20 20 20 61 72 67 75 6d 65 6e 74 2e 0a 20 2a      argument.. *
23200 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67  . */.struct Trig
23210 67 65 72 53 74 65 70 20 7b 0a 20 20 75 38 20 6f  gerStep {.  u8 o
23220 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
23230 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45   /* One of TK_DE
23240 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c  LETE, TK_UPDATE,
23250 20 54 4b 5f 49 4e 53 45 52 54 2c 20 54 4b 5f 53   TK_INSERT, TK_S
23260 45 4c 45 43 54 20 2a 2f 0a 20 20 75 38 20 6f 72  ELECT */.  u8 or
23270 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 20  conf;           
23280 2f 2a 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 65  /* OE_Rollback e
23290 74 63 2e 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  tc. */.  Trigger
232a0 20 2a 70 54 72 69 67 3b 20 20 20 20 20 20 2f 2a   *pTrig;      /*
232b0 20 54 68 65 20 74 72 69 67 67 65 72 20 74 68 61   The trigger tha
232c0 74 20 74 68 69 73 20 73 74 65 70 20 69 73 20 61  t this step is a
232d0 20 70 61 72 74 20 6f 66 20 2a 2f 0a 20 20 53 65   part of */.  Se
232e0 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20  lect *pSelect;  
232f0 20 20 20 2f 2a 20 53 45 4c 45 43 54 20 73 74 61     /* SELECT sta
23300 74 65 6d 65 6e 74 20 6f 72 20 52 48 53 20 6f 66  tement or RHS of
23310 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 53 45 4c   INSERT INTO SEL
23320 45 43 54 20 2e 2e 2e 20 2a 2f 0a 20 20 63 68 61  ECT ... */.  cha
23330 72 20 2a 7a 54 61 72 67 65 74 3b 20 20 20 20 20  r *zTarget;     
23340 20 20 2f 2a 20 54 61 72 67 65 74 20 74 61 62 6c    /* Target tabl
23350 65 20 66 6f 72 20 44 45 4c 45 54 45 2c 20 55 50  e for DELETE, UP
23360 44 41 54 45 2c 20 49 4e 53 45 52 54 20 2a 2f 0a  DATE, INSERT */.
23370 20 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b 20    Expr *pWhere; 
23380 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48         /* The WH
23390 45 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20 44  ERE clause for D
233a0 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45 20  ELETE or UPDATE 
233b0 73 74 65 70 73 20 2a 2f 0a 20 20 45 78 70 72 4c  steps */.  ExprL
233c0 69 73 74 20 2a 70 45 78 70 72 4c 69 73 74 3b 20  ist *pExprList; 
233d0 2f 2a 20 53 45 54 20 63 6c 61 75 73 65 20 66 6f  /* SET clause fo
233e0 72 20 55 50 44 41 54 45 20 2a 2f 0a 20 20 49 64  r UPDATE */.  Id
233f0 4c 69 73 74 20 2a 70 49 64 4c 69 73 74 3b 20 20  List *pIdList;  
23400 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 61 6d     /* Column nam
23410 65 73 20 66 6f 72 20 49 4e 53 45 52 54 20 2a 2f  es for INSERT */
23420 0a 20 20 55 70 73 65 72 74 20 2a 70 55 70 73 65  .  Upsert *pUpse
23430 72 74 3b 20 20 20 20 20 2f 2a 20 55 70 73 65 72  rt;     /* Upser
23440 74 20 63 6c 61 75 73 65 73 20 6f 6e 20 61 6e 20  t clauses on an 
23450 49 4e 53 45 52 54 20 2a 2f 0a 20 20 63 68 61 72  INSERT */.  char
23460 20 2a 7a 53 70 61 6e 3b 20 20 20 20 20 20 20 20   *zSpan;        
23470 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 53 51 4c   /* Original SQL
23480 20 74 65 78 74 20 6f 66 20 74 68 69 73 20 63 6f   text of this co
23490 6d 6d 61 6e 64 20 2a 2f 0a 20 20 54 72 69 67 67  mmand */.  Trigg
234a0 65 72 53 74 65 70 20 2a 70 4e 65 78 74 3b 20 20  erStep *pNext;  
234b0 2f 2a 20 4e 65 78 74 20 69 6e 20 74 68 65 20 6c  /* Next in the l
234c0 69 6e 6b 2d 6c 69 73 74 20 2a 2f 0a 20 20 54 72  ink-list */.  Tr
234d0 69 67 67 65 72 53 74 65 70 20 2a 70 4c 61 73 74  iggerStep *pLast
234e0 3b 20 20 2f 2a 20 4c 61 73 74 20 65 6c 65 6d 65  ;  /* Last eleme
234f0 6e 74 20 69 6e 20 6c 69 6e 6b 2d 6c 69 73 74 2e  nt in link-list.
23500 20 56 61 6c 69 64 20 66 6f 72 20 31 73 74 20 65   Valid for 1st e
23510 6c 65 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a 0a  lem only */.};..
23520 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
23530 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 6f  ing structure co
23540 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69  ntains informati
23550 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65 20 73  on used by the s
23560 71 6c 69 74 65 46 69 78 2e 2e 2e 0a 2a 2a 20 72  qliteFix....** r
23570 6f 75 74 69 6e 65 73 20 61 73 20 74 68 65 79 20  outines as they 
23580 77 61 6c 6b 20 74 68 65 20 70 61 72 73 65 20 74  walk the parse t
23590 72 65 65 20 74 6f 20 6d 61 6b 65 20 64 61 74 61  ree to make data
235a0 62 61 73 65 20 72 65 66 65 72 65 6e 63 65 73 0a  base references.
235b0 2a 2a 20 65 78 70 6c 69 63 69 74 2e 0a 2a 2f 0a  ** explicit..*/.
235c0 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 44  typedef struct D
235d0 62 46 69 78 65 72 20 44 62 46 69 78 65 72 3b 0a  bFixer DbFixer;.
235e0 73 74 72 75 63 74 20 44 62 46 69 78 65 72 20 7b  struct DbFixer {
235f0 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65  .  Parse *pParse
23600 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61  ;      /* The pa
23610 72 73 69 6e 67 20 63 6f 6e 74 65 78 74 2e 20 20  rsing context.  
23620 45 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 77  Error messages w
23630 72 69 74 74 65 6e 20 68 65 72 65 20 2a 2f 0a 20  ritten here */. 
23640 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61   Schema *pSchema
23650 3b 20 20 20 20 2f 2a 20 46 69 78 20 69 74 65 6d  ;    /* Fix item
23660 73 20 74 6f 20 74 68 69 73 20 73 63 68 65 6d 61  s to this schema
23670 20 2a 2f 0a 20 20 69 6e 74 20 62 56 61 72 4f 6e   */.  int bVarOn
23680 6c 79 3b 20 20 20 20 20 20 20 2f 2a 20 43 68 65  ly;       /* Che
23690 63 6b 20 66 6f 72 20 76 61 72 69 61 62 6c 65 20  ck for variable 
236a0 72 65 66 65 72 65 6e 63 65 73 20 6f 6e 6c 79 20  references only 
236b0 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
236c0 2a 7a 44 62 3b 20 20 20 20 2f 2a 20 4d 61 6b 65  *zDb;    /* Make
236d0 20 73 75 72 65 20 61 6c 6c 20 6f 62 6a 65 63 74   sure all object
236e0 73 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20  s are contained 
236f0 69 6e 20 74 68 69 73 20 64 61 74 61 62 61 73 65  in this database
23700 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
23710 20 2a 7a 54 79 70 65 3b 20 20 2f 2a 20 54 79 70   *zType;  /* Typ
23720 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e  e of the contain
23730 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72  er - used for er
23740 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a  ror messages */.
23750 20 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 2a 70    const Token *p
23760 4e 61 6d 65 3b 20 2f 2a 20 4e 61 6d 65 20 6f 66  Name; /* Name of
23770 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d   the container -
23780 20 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72 20   used for error 
23790 6d 65 73 73 61 67 65 73 20 2a 2f 0a 7d 3b 0a 0a  messages */.};..
237a0 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 65  /*.** An objecte
237b0 64 20 75 73 65 64 20 74 6f 20 61 63 63 75 6d 75  d used to accumu
237c0 6c 61 74 65 20 74 68 65 20 74 65 78 74 20 6f 66  late the text of
237d0 20 61 20 73 74 72 69 6e 67 20 77 68 65 72 65 20   a string where 
237e0 77 65 0a 2a 2a 20 64 6f 20 6e 6f 74 20 6e 65 63  we.** do not nec
237f0 65 73 73 61 72 69 6c 79 20 6b 6e 6f 77 20 68 6f  essarily know ho
23800 77 20 62 69 67 20 74 68 65 20 73 74 72 69 6e 67  w big the string
23810 20 77 69 6c 6c 20 62 65 20 69 6e 20 74 68 65 20   will be in the 
23820 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 73  end..*/.struct s
23830 71 6c 69 74 65 33 5f 73 74 72 20 7b 0a 20 20 73  qlite3_str {.  s
23840 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
23850 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20      /* Optional 
23860 64 61 74 61 62 61 73 65 20 66 6f 72 20 6c 6f 6f  database for loo
23870 6b 61 73 69 64 65 2e 20 20 43 61 6e 20 62 65 20  kaside.  Can be 
23880 4e 55 4c 4c 20 2a 2f 0a 20 20 63 68 61 72 20 2a  NULL */.  char *
23890 7a 54 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f  zText;         /
238a0 2a 20 54 68 65 20 73 74 72 69 6e 67 20 63 6f 6c  * The string col
238b0 6c 65 63 74 65 64 20 73 6f 20 66 61 72 20 2a 2f  lected so far */
238c0 0a 20 20 75 33 32 20 20 6e 41 6c 6c 6f 63 3b 20  .  u32  nAlloc; 
238d0 20 20 20 20 20 20 20 20 2f 2a 20 41 6d 6f 75 6e          /* Amoun
238e0 74 20 6f 66 20 73 70 61 63 65 20 61 6c 6c 6f 63  t of space alloc
238f0 61 74 65 64 20 69 6e 20 7a 54 65 78 74 20 2a 2f  ated in zText */
23900 0a 20 20 75 33 32 20 20 6d 78 41 6c 6c 6f 63 3b  .  u32  mxAlloc;
23910 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d          /* Maxim
23920 75 6d 20 61 6c 6c 6f 77 65 64 20 61 6c 6c 6f 63  um allowed alloc
23930 61 74 69 6f 6e 2e 20 20 30 20 66 6f 72 20 6e 6f  ation.  0 for no
23940 20 6d 61 6c 6c 6f 63 20 75 73 61 67 65 20 2a 2f   malloc usage */
23950 0a 20 20 75 33 32 20 20 6e 43 68 61 72 3b 20 20  .  u32  nChar;  
23960 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74          /* Lengt
23970 68 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20  h of the string 
23980 73 6f 20 66 61 72 20 2a 2f 0a 20 20 75 38 20 20  so far */.  u8  
23990 20 61 63 63 45 72 72 6f 72 3b 20 20 20 20 20 20   accError;      
239a0 20 2f 2a 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d   /* SQLITE_NOMEM
239b0 20 6f 72 20 53 51 4c 49 54 45 5f 54 4f 4f 42 49   or SQLITE_TOOBI
239c0 47 20 2a 2f 0a 20 20 75 38 20 20 20 70 72 69 6e  G */.  u8   prin
239d0 74 66 46 6c 61 67 73 3b 20 20 20 20 2f 2a 20 53  tfFlags;    /* S
239e0 51 4c 49 54 45 5f 50 52 49 4e 54 46 20 66 6c 61  QLITE_PRINTF fla
239f0 67 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 23  gs below */.};.#
23a00 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52  define SQLITE_PR
23a10 49 4e 54 46 5f 49 4e 54 45 52 4e 41 4c 20 30 78  INTF_INTERNAL 0x
23a20 30 31 20 20 2f 2a 20 49 6e 74 65 72 6e 61 6c 2d  01  /* Internal-
23a30 75 73 65 2d 6f 6e 6c 79 20 63 6f 6e 76 65 72 74  use-only convert
23a40 65 72 73 20 61 6c 6c 6f 77 65 64 20 2a 2f 0a 23  ers allowed */.#
23a50 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52  define SQLITE_PR
23a60 49 4e 54 46 5f 53 51 4c 46 55 4e 43 20 20 30 78  INTF_SQLFUNC  0x
23a70 30 32 20 20 2f 2a 20 53 51 4c 20 66 75 6e 63 74  02  /* SQL funct
23a80 69 6f 6e 20 61 72 67 75 6d 65 6e 74 73 20 74 6f  ion arguments to
23a90 20 56 58 50 72 69 6e 74 66 20 2a 2f 0a 23 64 65   VXPrintf */.#de
23aa0 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e  fine SQLITE_PRIN
23ab0 54 46 5f 4d 41 4c 4c 4f 43 45 44 20 30 78 30 34  TF_MALLOCED 0x04
23ac0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 78 54 65    /* True if xTe
23ad0 78 74 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20  xt is allocated 
23ae0 73 70 61 63 65 20 2a 2f 0a 0a 23 64 65 66 69 6e  space */..#defin
23af0 65 20 69 73 4d 61 6c 6c 6f 63 65 64 28 58 29 20  e isMalloced(X) 
23b00 20 28 28 28 58 29 2d 3e 70 72 69 6e 74 66 46 6c   (((X)->printfFl
23b10 61 67 73 20 26 20 53 51 4c 49 54 45 5f 50 52 49  ags & SQLITE_PRI
23b20 4e 54 46 5f 4d 41 4c 4c 4f 43 45 44 29 21 3d 30  NTF_MALLOCED)!=0
23b30 29 0a 0a 0a 2f 2a 0a 2a 2a 20 41 20 70 6f 69 6e  ).../*.** A poin
23b40 74 65 72 20 74 6f 20 74 68 69 73 20 73 74 72 75  ter to this stru
23b50 63 74 75 72 65 20 69 73 20 75 73 65 64 20 74 6f  cture is used to
23b60 20 63 6f 6d 6d 75 6e 69 63 61 74 65 20 69 6e 66   communicate inf
23b70 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 66 72 6f 6d  ormation.** from
23b80 20 73 71 6c 69 74 65 33 49 6e 69 74 20 61 6e 64   sqlite3Init and
23b90 20 4f 50 5f 50 61 72 73 65 53 63 68 65 6d 61 20   OP_ParseSchema 
23ba0 69 6e 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33  into the sqlite3
23bb0 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2e 0a 2a 2f  InitCallback..*/
23bc0 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
23bd0 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
23be0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64          /* The d
23bf0 61 74 61 62 61 73 65 20 62 65 69 6e 67 20 69 6e  atabase being in
23c00 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 63  itialized */.  c
23c10 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67 3b 20  har **pzErrMsg; 
23c20 20 20 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73     /* Error mess
23c30 61 67 65 20 73 74 6f 72 65 64 20 68 65 72 65 20  age stored here 
23c40 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20  */.  int iDb;   
23c50 20 20 20 20 20 20 20 20 20 2f 2a 20 30 20 66 6f           /* 0 fo
23c60 72 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2e  r main database.
23c70 20 20 31 20 66 6f 72 20 54 45 4d 50 2c 20 32 2e    1 for TEMP, 2.
23c80 2e 20 66 6f 72 20 41 54 54 41 43 48 65 64 20 2a  . for ATTACHed *
23c90 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20  /.  int rc;     
23ca0 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c          /* Resul
23cb0 74 20 63 6f 64 65 20 73 74 6f 72 65 64 20 68 65  t code stored he
23cc0 72 65 20 2a 2f 0a 7d 20 49 6e 69 74 44 61 74 61  re */.} InitData
23cd0 3b 0a 0a 2f 2a 0a 2a 2a 20 53 74 72 75 63 74 75  ;../*.** Structu
23ce0 72 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 67 6c  re containing gl
23cf0 6f 62 61 6c 20 63 6f 6e 66 69 67 75 72 61 74 69  obal configurati
23d00 6f 6e 20 64 61 74 61 20 66 6f 72 20 74 68 65 20  on data for the 
23d10 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e 0a  SQLite library..
23d20 2a 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72 75 63  **.** This struc
23d30 74 75 72 65 20 61 6c 73 6f 20 63 6f 6e 74 61 69  ture also contai
23d40 6e 73 20 73 6f 6d 65 20 73 74 61 74 65 20 69 6e  ns some state in
23d50 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74  formation..*/.st
23d60 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66  ruct Sqlite3Conf
23d70 69 67 20 7b 0a 20 20 69 6e 74 20 62 4d 65 6d 73  ig {.  int bMems
23d80 74 61 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  tat;            
23d90 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
23da0 20 74 6f 20 65 6e 61 62 6c 65 20 6d 65 6d 6f 72   to enable memor
23db0 79 20 73 74 61 74 75 73 20 2a 2f 0a 20 20 69 6e  y status */.  in
23dc0 74 20 62 43 6f 72 65 4d 75 74 65 78 3b 20 20 20  t bCoreMutex;   
23dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23de0 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c  /* True to enabl
23df0 65 20 63 6f 72 65 20 6d 75 74 65 78 69 6e 67 20  e core mutexing 
23e00 2a 2f 0a 20 20 69 6e 74 20 62 46 75 6c 6c 4d 75  */.  int bFullMu
23e10 74 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20  tex;            
23e20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74         /* True t
23e30 6f 20 65 6e 61 62 6c 65 20 66 75 6c 6c 20 6d 75  o enable full mu
23e40 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20  texing */.  int 
23e50 62 4f 70 65 6e 55 72 69 3b 20 20 20 20 20 20 20  bOpenUri;       
23e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
23e70 20 54 72 75 65 20 74 6f 20 69 6e 74 65 72 70 72   True to interpr
23e80 65 74 20 66 69 6c 65 6e 61 6d 65 73 20 61 73 20  et filenames as 
23e90 55 52 49 73 20 2a 2f 0a 20 20 69 6e 74 20 62 55  URIs */.  int bU
23ea0 73 65 43 69 73 3b 20 20 20 20 20 20 20 20 20 20  seCis;          
23eb0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55              /* U
23ec0 73 65 20 63 6f 76 65 72 69 6e 67 20 69 6e 64 69  se covering indi
23ed0 63 65 73 20 66 6f 72 20 66 75 6c 6c 2d 73 63 61  ces for full-sca
23ee0 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 62 53 6d 61  ns */.  int bSma
23ef0 6c 6c 4d 61 6c 6c 6f 63 3b 20 20 20 20 20 20 20  llMalloc;       
23f00 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 76 6f            /* Avo
23f10 69 64 20 6c 61 72 67 65 20 6d 65 6d 6f 72 79 20  id large memory 
23f20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 69 66 20 74  allocations if t
23f30 72 75 65 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 53  rue */.  int mxS
23f40 74 72 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20  trlen;          
23f50 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61             /* Ma
23f60 78 69 6d 75 6d 20 73 74 72 69 6e 67 20 6c 65 6e  ximum string len
23f70 67 74 68 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 76  gth */.  int nev
23f80 65 72 43 6f 72 72 75 70 74 3b 20 20 20 20 20 20  erCorrupt;      
23f90 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61             /* Da
23fa0 74 61 62 61 73 65 20 69 73 20 61 6c 77 61 79 73  tabase is always
23fb0 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 2a 2f 0a   well-formed */.
23fc0 20 20 69 6e 74 20 73 7a 4c 6f 6f 6b 61 73 69 64    int szLookasid
23fd0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
23fe0 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c      /* Default l
23ff0 6f 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72 20  ookaside buffer 
24000 73 69 7a 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c  size */.  int nL
24010 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20  ookaside;       
24020 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
24030 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65  efault lookaside
24040 20 62 75 66 66 65 72 20 63 6f 75 6e 74 20 2a 2f   buffer count */
24050 0a 20 20 69 6e 74 20 6e 53 74 6d 74 53 70 69 6c  .  int nStmtSpil
24060 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  l;              
24070 20 20 20 20 20 2f 2a 20 53 74 6d 74 2d 6a 6f 75       /* Stmt-jou
24080 72 6e 61 6c 20 73 70 69 6c 6c 2d 74 6f 2d 64 69  rnal spill-to-di
24090 73 6b 20 74 68 72 65 73 68 6f 6c 64 20 2a 2f 0a  sk threshold */.
240a0 20 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65    sqlite3_mem_me
240b0 74 68 6f 64 73 20 6d 3b 20 20 20 20 20 20 20 20  thods m;        
240c0 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c      /* Low-level
240d0 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
240e0 6f 6e 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a  on interface */.
240f0 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
24100 6d 65 74 68 6f 64 73 20 6d 75 74 65 78 3b 20 20  methods mutex;  
24110 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c      /* Low-level
24120 20 6d 75 74 65 78 20 69 6e 74 65 72 66 61 63 65   mutex interface
24130 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 70 63   */.  sqlite3_pc
24140 61 63 68 65 5f 6d 65 74 68 6f 64 73 32 20 70 63  ache_methods2 pc
24150 61 63 68 65 32 3b 20 20 2f 2a 20 4c 6f 77 2d 6c  ache2;  /* Low-l
24160 65 76 65 6c 20 70 61 67 65 2d 63 61 63 68 65 20  evel page-cache 
24170 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 76  interface */.  v
24180 6f 69 64 20 2a 70 48 65 61 70 3b 20 20 20 20 20  oid *pHeap;     
24190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
241a0 20 2f 2a 20 48 65 61 70 20 73 74 6f 72 61 67 65   /* Heap storage
241b0 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20   space */.  int 
241c0 6e 48 65 61 70 3b 20 20 20 20 20 20 20 20 20 20  nHeap;          
241d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
241e0 20 53 69 7a 65 20 6f 66 20 70 48 65 61 70 5b 5d   Size of pHeap[]
241f0 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 71 2c   */.  int mnReq,
24200 20 6d 78 52 65 71 3b 20 20 20 20 20 20 20 20 20   mxReq;         
24210 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 6e 20 61          /* Min a
24220 6e 64 20 6d 61 78 20 68 65 61 70 20 72 65 71 75  nd max heap requ
24230 65 73 74 73 20 73 69 7a 65 73 20 2a 2f 0a 20 20  ests sizes */.  
24240 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 7a  sqlite3_int64 sz
24250 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20  Mmap;           
24260 20 20 2f 2a 20 6d 6d 61 70 28 29 20 73 70 61 63    /* mmap() spac
24270 65 20 70 65 72 20 6f 70 65 6e 20 66 69 6c 65 20  e per open file 
24280 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74  */.  sqlite3_int
24290 36 34 20 6d 78 4d 6d 61 70 3b 20 20 20 20 20 20  64 mxMmap;      
242a0 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75         /* Maximu
242b0 6d 20 76 61 6c 75 65 20 66 6f 72 20 73 7a 4d 6d  m value for szMm
242c0 61 70 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50  ap */.  void *pP
242d0 61 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  age;            
242e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67            /* Pag
242f0 65 20 63 61 63 68 65 20 6d 65 6d 6f 72 79 20 2a  e cache memory *
24300 2f 0a 20 20 69 6e 74 20 73 7a 50 61 67 65 3b 20  /.  int szPage; 
24310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24320 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
24330 20 65 61 63 68 20 70 61 67 65 20 69 6e 20 70 50   each page in pP
24340 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e  age[] */.  int n
24350 50 61 67 65 3b 20 20 20 20 20 20 20 20 20 20 20  Page;           
24360 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
24370 4e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  Number of pages 
24380 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20  in pPage[] */.  
24390 69 6e 74 20 6d 78 50 61 72 73 65 72 53 74 61 63  int mxParserStac
243a0 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  k;              
243b0 20 20 2f 2a 20 6d 61 78 69 6d 75 6d 20 64 65 70    /* maximum dep
243c0 74 68 20 6f 66 20 74 68 65 20 70 61 72 73 65 72  th of the parser
243d0 20 73 74 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20   stack */.  int 
243e0 73 68 61 72 65 64 43 61 63 68 65 45 6e 61 62 6c  sharedCacheEnabl
243f0 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ed;           /*
24400 20 74 72 75 65 20 69 66 20 73 68 61 72 65 64 2d   true if shared-
24410 63 61 63 68 65 20 6d 6f 64 65 20 65 6e 61 62 6c  cache mode enabl
24420 65 64 20 2a 2f 0a 20 20 75 33 32 20 73 7a 50 6d  ed */.  u32 szPm
24430 61 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  a;              
24440 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78            /* Max
24450 69 6d 75 6d 20 53 6f 72 74 65 72 20 50 4d 41 20  imum Sorter PMA 
24460 73 69 7a 65 20 2a 2f 0a 20 20 2f 2a 20 54 68 65  size */.  /* The
24470 20 61 62 6f 76 65 20 6d 69 67 68 74 20 62 65 20   above might be 
24480 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 6e  initialized to n
24490 6f 6e 2d 7a 65 72 6f 2e 20 20 54 68 65 20 66 6f  on-zero.  The fo
244a0 6c 6c 6f 77 69 6e 67 20 6e 65 65 64 20 74 6f 20  llowing need to 
244b0 61 6c 77 61 79 73 0a 20 20 2a 2a 20 69 6e 69 74  always.  ** init
244c0 69 61 6c 6c 79 20 62 65 20 7a 65 72 6f 2c 20 68  ially be zero, h
244d0 6f 77 65 76 65 72 2e 20 2a 2f 0a 20 20 69 6e 74  owever. */.  int
244e0 20 69 73 49 6e 69 74 3b 20 20 20 20 20 20 20 20   isInit;        
244f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
24500 2a 20 54 72 75 65 20 61 66 74 65 72 20 69 6e 69  * True after ini
24510 74 69 61 6c 69 7a 61 74 69 6f 6e 20 68 61 73 20  tialization has 
24520 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20 69 6e  finished */.  in
24530 74 20 69 6e 50 72 6f 67 72 65 73 73 3b 20 20 20  t inProgress;   
24540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24550 2f 2a 20 54 72 75 65 20 77 68 69 6c 65 20 69 6e  /* True while in
24560 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 20  itialization in 
24570 70 72 6f 67 72 65 73 73 20 2a 2f 0a 20 20 69 6e  progress */.  in
24580 74 20 69 73 4d 75 74 65 78 49 6e 69 74 3b 20 20  t isMutexInit;  
24590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
245a0 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 75  /* True after mu
245b0 74 65 78 65 73 20 61 72 65 20 69 6e 69 74 69 61  texes are initia
245c0 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69  lized */.  int i
245d0 73 4d 61 6c 6c 6f 63 49 6e 69 74 3b 20 20 20 20  sMallocInit;    
245e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
245f0 54 72 75 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f  True after mallo
24600 63 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64  c is initialized
24610 20 2a 2f 0a 20 20 69 6e 74 20 69 73 50 43 61 63   */.  int isPCac
24620 68 65 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20  heInit;         
24630 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
24640 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20  after malloc is 
24650 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20  initialized */. 
24660 20 69 6e 74 20 6e 52 65 66 49 6e 69 74 4d 75 74   int nRefInitMut
24670 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ex;             
24680 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
24690 75 73 65 72 73 20 6f 66 20 70 49 6e 69 74 4d 75  users of pInitMu
246a0 74 65 78 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  tex */.  sqlite3
246b0 5f 6d 75 74 65 78 20 2a 70 49 6e 69 74 4d 75 74  _mutex *pInitMut
246c0 65 78 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 75  ex;        /* Mu
246d0 74 65 78 20 75 73 65 64 20 62 79 20 73 71 6c 69  tex used by sqli
246e0 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29  te3_initialize()
246f0 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 4c 6f   */.  void (*xLo
24700 67 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e  g)(void*,int,con
24710 73 74 20 63 68 61 72 2a 29 3b 20 2f 2a 20 46 75  st char*); /* Fu
24720 6e 63 74 69 6f 6e 20 66 6f 72 20 6c 6f 67 67 69  nction for loggi
24730 6e 67 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 4c  ng */.  void *pL
24740 6f 67 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  ogArg;          
24750 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
24760 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74  First argument t
24770 6f 20 78 4c 6f 67 28 29 20 2a 2f 0a 23 69 66 64  o xLog() */.#ifd
24780 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
24790 5f 53 51 4c 4c 4f 47 0a 20 20 76 6f 69 64 28 2a  _SQLLOG.  void(*
247a0 78 53 71 6c 6c 6f 67 29 28 76 6f 69 64 2a 2c 73  xSqllog)(void*,s
247b0 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
247c0 61 72 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  ar*, int);.  voi
247d0 64 20 2a 70 53 71 6c 6c 6f 67 41 72 67 3b 0a 23  d *pSqllogArg;.#
247e0 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c  endif.#ifdef SQL
247f0 49 54 45 5f 56 44 42 45 5f 43 4f 56 45 52 41 47  ITE_VDBE_COVERAG
24800 45 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f  E.  /* The follo
24810 77 69 6e 67 20 63 61 6c 6c 62 61 63 6b 20 28 69  wing callback (i
24820 66 20 6e 6f 74 20 4e 55 4c 4c 29 20 69 73 20 69  f not NULL) is i
24830 6e 76 6f 6b 65 64 20 6f 6e 20 65 76 65 72 79 20  nvoked on every 
24840 56 44 42 45 20 62 72 61 6e 63 68 0a 20 20 2a 2a  VDBE branch.  **
24850 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 53 65 74   operation.  Set
24860 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 75 73   the callback us
24870 69 6e 67 20 53 51 4c 49 54 45 5f 54 45 53 54 43  ing SQLITE_TESTC
24880 54 52 4c 5f 56 44 42 45 5f 43 4f 56 45 52 41 47  TRL_VDBE_COVERAG
24890 45 2e 0a 20 20 2a 2f 0a 20 20 76 6f 69 64 20 28  E..  */.  void (
248a0 2a 78 56 64 62 65 42 72 61 6e 63 68 29 28 76 6f  *xVdbeBranch)(vo
248b0 69 64 2a 2c 69 6e 74 20 69 53 72 63 4c 69 6e 65  id*,int iSrcLine
248c0 2c 75 38 20 65 54 68 69 73 2c 75 38 20 65 4d 78  ,u8 eThis,u8 eMx
248d0 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20  );  /* Callback 
248e0 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 56 64 62 65  */.  void *pVdbe
248f0 42 72 61 6e 63 68 41 72 67 3b 20 20 20 20 20 20  BranchArg;      
24900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
24920 2a 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20 2a  * 1st argument *
24930 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  /.#endif.#ifndef
24940 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42   SQLITE_UNTESTAB
24950 4c 45 0a 20 20 69 6e 74 20 28 2a 78 54 65 73 74  LE.  int (*xTest
24960 43 61 6c 6c 62 61 63 6b 29 28 69 6e 74 29 3b 20  Callback)(int); 
24970 20 20 20 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65         /* Invoke
24980 64 20 62 79 20 73 71 6c 69 74 65 33 46 61 75 6c  d by sqlite3Faul
24990 74 53 69 6d 28 29 20 2a 2f 0a 23 65 6e 64 69 66  tSim() */.#endif
249a0 0a 20 20 69 6e 74 20 62 4c 6f 63 61 6c 74 69 6d  .  int bLocaltim
249b0 65 46 61 75 6c 74 3b 20 20 20 20 20 20 20 20 20  eFault;         
249c0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20       /* True to 
249d0 66 61 69 6c 20 6c 6f 63 61 6c 74 69 6d 65 28 29  fail localtime()
249e0 20 63 61 6c 6c 73 20 2a 2f 0a 20 20 69 6e 74 20   calls */.  int 
249f0 69 4f 6e 63 65 52 65 73 65 74 54 68 72 65 73 68  iOnceResetThresh
24a00 6f 6c 64 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  old;          /*
24a10 20 57 68 65 6e 20 74 6f 20 72 65 73 65 74 20 4f   When to reset O
24a20 50 5f 4f 6e 63 65 20 63 6f 75 6e 74 65 72 73 20  P_Once counters 
24a30 2a 2f 0a 20 20 75 33 32 20 73 7a 53 6f 72 74 65  */.  u32 szSorte
24a40 72 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20  rRef;           
24a50 20 20 20 20 20 20 20 2f 2a 20 4d 69 6e 20 73 69         /* Min si
24a60 7a 65 20 69 6e 20 62 79 74 65 73 20 74 6f 20 75  ze in bytes to u
24a70 73 65 20 73 6f 72 74 65 72 2d 72 65 66 73 20 2a  se sorter-refs *
24a80 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73  /.};../*.** This
24a90 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 69   macro is used i
24aa0 6e 73 69 64 65 20 6f 66 20 61 73 73 65 72 74 28  nside of assert(
24ab0 29 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20  ) statements to 
24ac0 69 6e 64 69 63 61 74 65 20 74 68 61 74 0a 2a 2a  indicate that.**
24ad0 20 74 68 65 20 61 73 73 65 72 74 20 69 73 20 6f   the assert is o
24ae0 6e 6c 79 20 76 61 6c 69 64 20 6f 6e 20 61 20 77  nly valid on a w
24af0 65 6c 6c 2d 66 6f 72 6d 65 64 20 64 61 74 61 62  ell-formed datab
24b00 61 73 65 2e 20 20 49 6e 73 74 65 61 64 20 6f 66  ase.  Instead of
24b10 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65  :.**.**     asse
24b20 72 74 28 20 58 20 29 3b 0a 2a 2a 0a 2a 2a 20 4f  rt( X );.**.** O
24b30 6e 65 20 77 72 69 74 65 73 3a 0a 2a 2a 0a 2a 2a  ne writes:.**.**
24b40 20 20 20 20 20 61 73 73 65 72 74 28 20 58 20 7c       assert( X |
24b50 7c 20 43 4f 52 52 55 50 54 5f 44 42 20 29 3b 0a  | CORRUPT_DB );.
24b60 2a 2a 0a 2a 2a 20 43 4f 52 52 55 50 54 5f 44 42  **.** CORRUPT_DB
24b70 20 69 73 20 74 72 75 65 20 64 75 72 69 6e 67 20   is true during 
24b80 6e 6f 72 6d 61 6c 20 6f 70 65 72 61 74 69 6f 6e  normal operation
24b90 2e 20 20 43 4f 52 52 55 50 54 5f 44 42 20 64 6f  .  CORRUPT_DB do
24ba0 65 73 20 6e 6f 74 20 69 6e 64 69 63 61 74 65 0a  es not indicate.
24bb0 2a 2a 20 74 68 61 74 20 74 68 65 20 64 61 74 61  ** that the data
24bc0 62 61 73 65 20 69 73 20 64 65 66 69 6e 69 74 65  base is definite
24bd0 6c 79 20 63 6f 72 72 75 70 74 2c 20 6f 6e 6c 79  ly corrupt, only
24be0 20 74 68 61 74 20 69 74 20 6d 69 67 68 74 20 62   that it might b
24bf0 65 20 63 6f 72 72 75 70 74 2e 0a 2a 2a 20 46 6f  e corrupt..** Fo
24c00 72 20 6d 6f 73 74 20 74 65 73 74 20 63 61 73 65  r most test case
24c10 73 2c 20 43 4f 52 52 55 50 54 5f 44 42 20 69 73  s, CORRUPT_DB is
24c20 20 73 65 74 20 74 6f 20 66 61 6c 73 65 20 75 73   set to false us
24c30 69 6e 67 20 61 20 73 70 65 63 69 61 6c 0a 2a 2a  ing a special.**
24c40 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f   sqlite3_test_co
24c50 6e 74 72 6f 6c 28 29 2e 20 20 54 68 69 73 20 65  ntrol().  This e
24c60 6e 61 62 6c 65 73 20 61 73 73 65 72 74 28 29 20  nables assert() 
24c70 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 70 72  statements to pr
24c80 6f 76 65 0a 2a 2a 20 74 68 69 6e 67 73 20 74 68  ove.** things th
24c90 61 74 20 61 72 65 20 61 6c 77 61 79 73 20 74 72  at are always tr
24ca0 75 65 20 66 6f 72 20 77 65 6c 6c 2d 66 6f 72 6d  ue for well-form
24cb0 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f  ed databases..*/
24cc0 0a 23 64 65 66 69 6e 65 20 43 4f 52 52 55 50 54  .#define CORRUPT
24cd0 5f 44 42 20 20 28 73 71 6c 69 74 65 33 43 6f 6e  _DB  (sqlite3Con
24ce0 66 69 67 2e 6e 65 76 65 72 43 6f 72 72 75 70 74  fig.neverCorrupt
24cf0 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74  ==0)../*.** Cont
24d00 65 78 74 20 70 6f 69 6e 74 65 72 20 70 61 73 73  ext pointer pass
24d10 65 64 20 64 6f 77 6e 20 74 68 72 6f 75 67 68 20  ed down through 
24d20 74 68 65 20 74 72 65 65 2d 77 61 6c 6b 2e 0a 2a  the tree-walk..*
24d30 2f 0a 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20  /.struct Walker 
24d40 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73  {.  Parse *pPars
24d50 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
24d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
24d70 20 50 61 72 73 65 72 20 63 6f 6e 74 65 78 74 2e   Parser context.
24d80 20 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 45 78    */.  int (*xEx
24d90 70 72 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b  prCallback)(Walk
24da0 65 72 2a 2c 20 45 78 70 72 2a 29 3b 20 20 20 20  er*, Expr*);    
24db0 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72   /* Callback for
24dc0 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a   expressions */.
24dd0 20 20 69 6e 74 20 28 2a 78 53 65 6c 65 63 74 43    int (*xSelectC
24de0 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a  allback)(Walker*
24df0 2c 53 65 6c 65 63 74 2a 29 3b 20 20 2f 2a 20 43  ,Select*);  /* C
24e00 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c 45  allback for SELE
24e10 43 54 73 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  CTs */.  void (*
24e20 78 53 65 6c 65 63 74 43 61 6c 6c 62 61 63 6b 32  xSelectCallback2
24e30 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74  )(Walker*,Select
24e40 2a 29 3b 2f 2a 20 53 65 63 6f 6e 64 20 63 61 6c  *);/* Second cal
24e50 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c 45 43 54  lback for SELECT
24e60 73 20 2a 2f 0a 20 20 69 6e 74 20 77 61 6c 6b 65  s */.  int walke
24e70 72 44 65 70 74 68 3b 20 20 20 20 20 20 20 20 20  rDepth;         
24e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24e90 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 75   /* Number of su
24ea0 62 71 75 65 72 69 65 73 20 2a 2f 0a 20 20 75 38  bqueries */.  u8
24eb0 20 65 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20   eCode;         
24ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ed0 20 20 20 20 20 20 20 20 2f 2a 20 41 20 73 6d 61          /* A sma
24ee0 6c 6c 20 70 72 6f 63 65 73 73 69 6e 67 20 63 6f  ll processing co
24ef0 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 20  de */.  union { 
24f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24f20 20 20 2f 2a 20 45 78 74 72 61 20 64 61 74 61 20    /* Extra data 
24f30 66 6f 72 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  for callback */.
24f40 20 20 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20      NameContext 
24f50 2a 70 4e 43 3b 20 20 20 20 20 20 20 20 20 20 20  *pNC;           
24f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
24f70 20 4e 61 6d 69 6e 67 20 63 6f 6e 74 65 78 74 20   Naming context 
24f80 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 3b 20 20 20  */.    int n;   
24f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24fb0 20 2f 2a 20 41 20 63 6f 75 6e 74 65 72 20 2a 2f   /* A counter */
24fc0 0a 20 20 20 20 69 6e 74 20 69 43 75 72 3b 20 20  .    int iCur;  
24fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
24ff0 2a 20 41 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  * A cursor numbe
25000 72 20 2a 2f 0a 20 20 20 20 53 72 63 4c 69 73 74  r */.    SrcList
25010 20 2a 70 53 72 63 4c 69 73 74 3b 20 20 20 20 20   *pSrcList;     
25020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25030 20 20 20 2f 2a 20 46 52 4f 4d 20 63 6c 61 75 73     /* FROM claus
25040 65 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20  e */.    struct 
25050 53 72 63 43 6f 75 6e 74 20 2a 70 53 72 63 43 6f  SrcCount *pSrcCo
25060 75 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  unt;            
25070 20 20 20 2f 2a 20 43 6f 75 6e 74 69 6e 67 20 63     /* Counting c
25080 6f 6c 75 6d 6e 20 72 65 66 65 72 65 6e 63 65 73  olumn references
25090 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 43   */.    struct C
250a0 43 75 72 48 69 6e 74 20 2a 70 43 43 75 72 48 69  CurHint *pCCurHi
250b0 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nt;             
250c0 20 20 2f 2a 20 55 73 65 64 20 62 79 20 63 6f 64    /* Used by cod
250d0 65 43 75 72 73 6f 72 48 69 6e 74 28 29 20 2a 2f  eCursorHint() */
250e0 0a 20 20 20 20 69 6e 74 20 2a 61 69 43 6f 6c 3b  .    int *aiCol;
250f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
25110 2a 20 61 72 72 61 79 20 6f 66 20 63 6f 6c 75 6d  * array of colum
25120 6e 20 69 6e 64 65 78 65 73 20 2a 2f 0a 20 20 20  n indexes */.   
25130 20 73 74 72 75 63 74 20 49 64 78 43 6f 76 65 72   struct IdxCover
25140 20 2a 70 49 64 78 43 6f 76 65 72 3b 20 20 20 20   *pIdxCover;    
25150 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 68             /* Ch
25160 65 63 6b 20 66 6f 72 20 69 6e 64 65 78 20 63 6f  eck for index co
25170 76 65 72 61 67 65 20 2a 2f 0a 20 20 20 20 73 74  verage */.    st
25180 72 75 63 74 20 49 64 78 45 78 70 72 54 72 61 6e  ruct IdxExprTran
25190 73 20 2a 70 49 64 78 54 72 61 6e 73 3b 20 20 20  s *pIdxTrans;   
251a0 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 76 65          /* Conve
251b0 72 74 20 69 64 78 65 64 20 65 78 70 72 20 74 6f  rt idxed expr to
251c0 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 20 20 45   column */.    E
251d0 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75 70 42  xprList *pGroupB
251e0 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  y;              
251f0 20 20 20 20 20 20 20 20 20 2f 2a 20 47 52 4f 55           /* GROU
25200 50 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20  P BY clause */. 
25210 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65     Select *pSele
25220 63 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ct;             
25230 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
25240 48 41 56 49 4e 47 20 74 6f 20 57 48 45 52 45 20  HAVING to WHERE 
25250 63 6c 61 75 73 65 20 63 74 78 20 2a 2f 0a 20 20  clause ctx */.  
25260 20 20 73 74 72 75 63 74 20 57 69 6e 64 6f 77 52    struct WindowR
25270 65 77 72 69 74 65 20 2a 70 52 65 77 72 69 74 65  ewrite *pRewrite
25280 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57  ;           /* W
25290 69 6e 64 6f 77 20 72 65 77 72 69 74 65 20 63 6f  indow rewrite co
252a0 6e 74 65 78 74 20 2a 2f 0a 20 20 7d 20 75 3b 0a  ntext */.  } u;.
252b0 7d 3b 0a 0a 2f 2a 20 46 6f 72 77 61 72 64 20 64  };../* Forward d
252c0 65 63 6c 61 72 61 74 69 6f 6e 73 20 2a 2f 0a 69  eclarations */.i
252d0 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 45 78  nt sqlite3WalkEx
252e0 70 72 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72  pr(Walker*, Expr
252f0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
25300 61 6c 6b 45 78 70 72 4c 69 73 74 28 57 61 6c 6b  alkExprList(Walk
25310 65 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b  er*, ExprList*);
25320 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b  .int sqlite3Walk
25330 53 65 6c 65 63 74 28 57 61 6c 6b 65 72 2a 2c 20  Select(Walker*, 
25340 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71  Select*);.int sq
25350 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 45  lite3WalkSelectE
25360 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c  xpr(Walker*, Sel
25370 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ect*);.int sqlit
25380 65 33 57 61 6c 6b 53 65 6c 65 63 74 46 72 6f 6d  e3WalkSelectFrom
25390 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74  (Walker*, Select
253a0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
253b0 78 70 72 57 61 6c 6b 4e 6f 6f 70 28 57 61 6c 6b  xprWalkNoop(Walk
253c0 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74  er*, Expr*);.int
253d0 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 57 61   sqlite3SelectWa
253e0 6c 6b 4e 6f 6f 70 28 57 61 6c 6b 65 72 2a 2c 20  lkNoop(Walker*, 
253f0 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71  Select*);.int sq
25400 6c 69 74 65 33 53 65 6c 65 63 74 57 61 6c 6b 46  lite3SelectWalkF
25410 61 69 6c 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c  ail(Walker*, Sel
25420 65 63 74 2a 29 3b 0a 23 69 66 64 65 66 20 53 51  ect*);.#ifdef SQ
25430 4c 49 54 45 5f 44 45 42 55 47 0a 76 6f 69 64 20  LITE_DEBUG.void 
25440 73 71 6c 69 74 65 33 53 65 6c 65 63 74 57 61 6c  sqlite3SelectWal
25450 6b 41 73 73 65 72 74 32 28 57 61 6c 6b 65 72 2a  kAssert2(Walker*
25460 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 23 65 6e 64  , Select*);.#end
25470 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  if../*.** Return
25480 20 63 6f 64 65 20 66 72 6f 6d 20 74 68 65 20 70   code from the p
25490 61 72 73 65 2d 74 72 65 65 20 77 61 6c 6b 69 6e  arse-tree walkin
254a0 67 20 70 72 69 6d 69 74 69 76 65 73 20 61 6e 64  g primitives and
254b0 20 74 68 65 69 72 0a 2a 2a 20 63 61 6c 6c 62 61   their.** callba
254c0 63 6b 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  cks..*/.#define 
254d0 57 52 43 5f 43 6f 6e 74 69 6e 75 65 20 20 20 20  WRC_Continue    
254e0 30 20 20 20 2f 2a 20 43 6f 6e 74 69 6e 75 65 20  0   /* Continue 
254f0 64 6f 77 6e 20 69 6e 74 6f 20 63 68 69 6c 64 72  down into childr
25500 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52  en */.#define WR
25510 43 5f 50 72 75 6e 65 20 20 20 20 20 20 20 31 20  C_Prune       1 
25520 20 20 2f 2a 20 4f 6d 69 74 20 63 68 69 6c 64 72    /* Omit childr
25530 65 6e 20 62 75 74 20 63 6f 6e 74 69 6e 75 65 20  en but continue 
25540 77 61 6c 6b 69 6e 67 20 73 69 62 6c 69 6e 67 73  walking siblings
25550 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f   */.#define WRC_
25560 41 62 6f 72 74 20 20 20 20 20 20 20 32 20 20 20  Abort       2   
25570 2f 2a 20 41 62 61 6e 64 6f 6e 20 74 68 65 20 74  /* Abandon the t
25580 72 65 65 20 77 61 6c 6b 20 2a 2f 0a 0a 2f 2a 0a  ree walk */../*.
25590 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
255a0 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
255b0 20 72 65 70 72 65 73 65 6e 74 73 20 61 20 73 65   represents a se
255c0 74 20 6f 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  t of one or more
255d0 20 43 54 45 73 0a 2a 2a 20 28 63 6f 6d 6d 6f 6e   CTEs.** (common
255e0 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f   table expressio
255f0 6e 73 29 20 63 72 65 61 74 65 64 20 62 79 20 61  ns) created by a
25600 20 73 69 6e 67 6c 65 20 57 49 54 48 20 63 6c 61   single WITH cla
25610 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57  use..*/.struct W
25620 69 74 68 20 7b 0a 20 20 69 6e 74 20 6e 43 74 65  ith {.  int nCte
25630 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
25640 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
25650 72 20 6f 66 20 43 54 45 73 20 69 6e 20 74 68 65  r of CTEs in the
25660 20 57 49 54 48 20 63 6c 61 75 73 65 20 2a 2f 0a   WITH clause */.
25670 20 20 57 69 74 68 20 2a 70 4f 75 74 65 72 3b 20    With *pOuter; 
25680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25690 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 69 6e 67 20    /* Containing 
256a0 57 49 54 48 20 63 6c 61 75 73 65 2c 20 6f 72 20  WITH clause, or 
256b0 4e 55 4c 4c 20 2a 2f 0a 20 20 73 74 72 75 63 74  NULL */.  struct
256c0 20 43 74 65 20 7b 20 20 20 20 20 20 20 20 20 20   Cte {          
256d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72            /* For
256e0 20 65 61 63 68 20 43 54 45 20 69 6e 20 74 68 65   each CTE in the
256f0 20 57 49 54 48 20 63 6c 61 75 73 65 2e 2e 2e 2e   WITH clause....
25700 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e   */.    char *zN
25710 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
25720 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
25730 6f 66 20 74 68 69 73 20 43 54 45 20 2a 2f 0a 20  of this CTE */. 
25740 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43 6f     ExprList *pCo
25750 6c 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ls;             
25760 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 65 78     /* List of ex
25770 70 6c 69 63 69 74 20 63 6f 6c 75 6d 6e 20 6e 61  plicit column na
25780 6d 65 73 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a  mes, or NULL */.
25790 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c      Select *pSel
257a0 65 63 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ect;            
257b0 20 20 20 20 2f 2a 20 54 68 65 20 64 65 66 69 6e      /* The defin
257c0 69 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 43 54  ition of this CT
257d0 45 20 2a 2f 0a 20 20 20 20 63 6f 6e 73 74 20 63  E */.    const c
257e0 68 61 72 20 2a 7a 43 74 65 45 72 72 3b 20 20 20  har *zCteErr;   
257f0 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72 6f           /* Erro
25800 72 20 6d 65 73 73 61 67 65 20 66 6f 72 20 63 69  r message for ci
25810 72 63 75 6c 61 72 20 72 65 66 65 72 65 6e 63 65  rcular reference
25820 73 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 0a 7d  s */.  } a[1];.}
25830 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
25840 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 41 6e 20  _DEBUG./*.** An 
25850 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
25860 54 72 65 65 56 69 65 77 20 6f 62 6a 65 63 74 20  TreeView object 
25870 69 73 20 75 73 65 64 20 66 6f 72 20 70 72 69 6e  is used for prin
25880 74 69 6e 67 20 74 68 65 20 63 6f 6e 74 65 6e 74  ting the content
25890 20 6f 66 0a 2a 2a 20 64 61 74 61 20 73 74 72 75   of.** data stru
258a0 63 74 75 72 65 73 20 6f 6e 20 73 71 6c 69 74 65  ctures on sqlite
258b0 33 44 65 62 75 67 50 72 69 6e 74 66 28 29 20 75  3DebugPrintf() u
258c0 73 69 6e 67 20 61 20 74 72 65 65 2d 6c 69 6b 65  sing a tree-like
258d0 20 76 69 65 77 2e 0a 2a 2f 0a 73 74 72 75 63 74   view..*/.struct
258e0 20 54 72 65 65 56 69 65 77 20 7b 0a 20 20 69 6e   TreeView {.  in
258f0 74 20 69 4c 65 76 65 6c 3b 20 20 20 20 20 20 20  t iLevel;       
25900 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 6c        /* Which l
25910 65 76 65 6c 20 6f 66 20 74 68 65 20 74 72 65 65  evel of the tree
25920 20 77 65 20 61 72 65 20 6f 6e 20 2a 2f 0a 20 20   we are on */.  
25930 75 38 20 20 62 4c 69 6e 65 5b 31 30 30 5d 3b 20  u8  bLine[100]; 
25940 20 20 20 20 20 20 20 20 2f 2a 20 44 72 61 77 20          /* Draw 
25950 76 65 72 74 69 63 61 6c 20 69 6e 20 63 6f 6c 75  vertical in colu
25960 6d 6e 20 69 20 69 66 20 62 4c 69 6e 65 5b 69 5d  mn i if bLine[i]
25970 20 69 73 20 74 72 75 65 20 2a 2f 0a 7d 3b 0a 23   is true */.};.#
25980 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
25990 44 45 42 55 47 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  DEBUG */../*.** 
259a0 4f 62 6a 65 63 74 20 75 73 65 64 20 74 6f 20 65  Object used to e
259b0 6e 63 6f 64 65 20 74 68 65 20 4f 56 45 52 28 29  ncode the OVER()
259c0 20 63 6c 61 75 73 65 20 61 74 74 61 63 68 65 64   clause attached
259d0 20 74 6f 20 61 20 77 69 6e 64 6f 77 2d 66 75 6e   to a window-fun
259e0 63 74 69 6f 6e 0a 2a 2a 20 69 6e 76 6f 63 61 74  ction.** invocat
259f0 69 6f 6e 2e 20 41 6e 64 20 73 6f 6d 65 20 66 69  ion. And some fi
25a00 65 6c 64 73 20 75 73 65 64 20 77 68 69 6c 65 20  elds used while 
25a10 67 65 6e 65 72 61 74 69 6e 67 20 56 4d 20 63 6f  generating VM co
25a20 64 65 20 66 6f 72 20 74 68 65 20 73 61 6d 65 2e  de for the same.
25a30 0a 2a 2f 0a 73 74 72 75 63 74 20 57 69 6e 64 6f  .*/.struct Windo
25a40 77 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  w {.  char *zNam
25a50 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
25a60 20 4e 61 6d 65 20 6f 66 20 77 69 6e 64 6f 77 20   Name of window 
25a70 28 6d 61 79 20 62 65 20 4e 55 4c 4c 29 20 2a 2f  (may be NULL) */
25a80 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 50 61  .  ExprList *pPa
25a90 72 74 69 74 69 6f 6e 3b 20 20 20 2f 2a 20 50 41  rtition;   /* PA
25aa0 52 54 49 54 49 4f 4e 20 42 59 20 63 6c 61 75 73  RTITION BY claus
25ab0 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  e */.  ExprList 
25ac0 2a 70 4f 72 64 65 72 42 79 3b 20 20 20 20 20 2f  *pOrderBy;     /
25ad0 2a 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  * ORDER BY claus
25ae0 65 20 2a 2f 0a 20 20 75 38 20 65 54 79 70 65 3b  e */.  u8 eType;
25af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
25b00 2a 20 54 4b 5f 52 41 4e 47 45 20 6f 72 20 54 4b  * TK_RANGE or TK
25b10 5f 52 4f 57 53 20 2a 2f 0a 20 20 75 38 20 65 53  _ROWS */.  u8 eS
25b20 74 61 72 74 3b 20 20 20 20 20 20 20 20 20 20 20  tart;           
25b30 20 20 20 2f 2a 20 55 4e 42 4f 55 4e 44 45 44 2c     /* UNBOUNDED,
25b40 20 43 55 52 52 45 4e 54 2c 20 50 52 45 43 45 44   CURRENT, PRECED
25b50 49 4e 47 20 6f 72 20 46 4f 4c 4c 4f 57 49 4e 47  ING or FOLLOWING
25b60 20 2a 2f 0a 20 20 75 38 20 65 45 6e 64 3b 20 20   */.  u8 eEnd;  
25b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
25b80 20 55 4e 42 4f 55 4e 44 45 44 2c 20 43 55 52 52   UNBOUNDED, CURR
25b90 45 4e 54 2c 20 50 52 45 43 45 44 49 4e 47 20 6f  ENT, PRECEDING o
25ba0 72 20 46 4f 4c 4c 4f 57 49 4e 47 20 2a 2f 0a 20  r FOLLOWING */. 
25bb0 20 45 78 70 72 20 2a 70 53 74 61 72 74 3b 20 20   Expr *pStart;  
25bc0 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70 72           /* Expr
25bd0 65 73 73 69 6f 6e 20 66 6f 72 20 22 3c 65 78 70  ession for "<exp
25be0 72 3e 20 50 52 45 43 45 44 49 4e 47 22 20 2a 2f  r> PRECEDING" */
25bf0 0a 20 20 45 78 70 72 20 2a 70 45 6e 64 3b 20 20  .  Expr *pEnd;  
25c00 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78             /* Ex
25c10 70 72 65 73 73 69 6f 6e 20 66 6f 72 20 22 3c 65  pression for "<e
25c20 78 70 72 3e 20 46 4f 4c 4c 4f 57 49 4e 47 22 20  xpr> FOLLOWING" 
25c30 2a 2f 0a 0a 20 20 57 69 6e 64 6f 77 20 2a 70 4e  */..  Window *pN
25c40 65 78 74 57 69 6e 3b 20 20 20 20 20 20 20 2f 2a  extWin;       /*
25c50 20 4e 65 78 74 20 77 69 6e 64 6f 77 20 66 75 6e   Next window fun
25c60 63 74 69 6f 6e 20 62 65 6c 6f 6e 67 69 6e 67 20  ction belonging 
25c70 74 6f 20 74 68 69 73 20 53 45 4c 45 43 54 20 2a  to this SELECT *
25c80 2f 0a 0a 20 20 45 78 70 72 20 2a 70 46 69 6c 74  /..  Expr *pFilt
25c90 65 72 3b 0a 20 20 46 75 6e 63 44 65 66 20 2a 70  er;.  FuncDef *p
25ca0 46 75 6e 63 3b 0a 0a 20 20 69 6e 74 20 69 45 70  Func;..  int iEp
25cb0 68 43 73 72 3b 20 20 20 20 20 20 20 20 20 20 20  hCsr;           
25cc0 20 2f 2a 20 54 65 6d 70 20 74 61 62 6c 65 20 75   /* Temp table u
25cd0 73 65 64 20 62 79 20 74 68 69 73 20 77 69 6e 64  sed by this wind
25ce0 6f 77 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 41  ow */.  int regA
25cf0 63 63 75 6d 3b 0a 20 20 69 6e 74 20 72 65 67 52  ccum;.  int regR
25d00 65 73 75 6c 74 3b 0a 0a 20 20 69 6e 74 20 63 73  esult;..  int cs
25d10 72 41 70 70 3b 20 20 20 20 20 20 20 20 20 20 20  rApp;           
25d20 20 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20 63 75    /* Function cu
25d30 72 73 6f 72 20 28 75 73 65 64 20 62 79 20 6d 69  rsor (used by mi
25d40 6e 2f 6d 61 78 29 20 2a 2f 0a 20 20 69 6e 74 20  n/max) */.  int 
25d50 72 65 67 41 70 70 3b 20 20 20 20 20 20 20 20 20  regApp;         
25d60 20 20 20 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20      /* Function 
25d70 72 65 67 69 73 74 65 72 20 28 61 6c 73 6f 20 75  register (also u
25d80 73 65 64 20 62 79 20 6d 69 6e 2f 6d 61 78 29 20  sed by min/max) 
25d90 2a 2f 0a 0a 20 20 69 6e 74 20 72 65 67 50 61 72  */..  int regPar
25da0 74 3b 0a 20 20 45 78 70 72 20 2a 70 4f 77 6e 65  t;.  Expr *pOwne
25db0 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  r;           /* 
25dc0 45 78 70 72 65 73 73 69 6f 6e 20 6f 62 6a 65 63  Expression objec
25dd0 74 20 74 68 69 73 20 77 69 6e 64 6f 77 20 69 73  t this window is
25de0 20 61 74 74 61 63 68 65 64 20 74 6f 20 2a 2f 0a   attached to */.
25df0 20 20 69 6e 74 20 6e 42 75 66 66 65 72 43 6f 6c    int nBufferCol
25e00 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
25e10 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
25e20 6e 20 62 75 66 66 65 72 20 74 61 62 6c 65 20 2a  n buffer table *
25e30 2f 0a 20 20 69 6e 74 20 69 41 72 67 43 6f 6c 3b  /.  int iArgCol;
25e40 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
25e50 66 66 73 65 74 20 6f 66 20 66 69 72 73 74 20 61  ffset of first a
25e60 72 67 75 6d 65 6e 74 20 66 6f 72 20 74 68 69 73  rgument for this
25e70 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d 3b 0a   function */.};.
25e80 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 6e  .void sqlite3Win
25e90 64 6f 77 44 65 6c 65 74 65 28 73 71 6c 69 74 65  dowDelete(sqlite
25ea0 33 2a 2c 20 57 69 6e 64 6f 77 2a 29 3b 0a 76 6f  3*, Window*);.vo
25eb0 69 64 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77  id sqlite3Window
25ec0 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74  ListDelete(sqlit
25ed0 65 33 20 2a 64 62 2c 20 57 69 6e 64 6f 77 20 2a  e3 *db, Window *
25ee0 70 29 3b 0a 57 69 6e 64 6f 77 20 2a 73 71 6c 69  p);.Window *sqli
25ef0 74 65 33 57 69 6e 64 6f 77 41 6c 6c 6f 63 28 50  te3WindowAlloc(P
25f00 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  arse*, int, int,
25f10 20 45 78 70 72 2a 2c 20 69 6e 74 20 2c 20 45 78   Expr*, int , Ex
25f20 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
25f30 65 33 57 69 6e 64 6f 77 41 74 74 61 63 68 28 50  e3WindowAttach(P
25f40 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 57 69  arse*, Expr*, Wi
25f50 6e 64 6f 77 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ndow*);.int sqli
25f60 74 65 33 57 69 6e 64 6f 77 43 6f 6d 70 61 72 65  te3WindowCompare
25f70 28 50 61 72 73 65 2a 2c 20 57 69 6e 64 6f 77 2a  (Parse*, Window*
25f80 2c 20 57 69 6e 64 6f 77 2a 29 3b 0a 76 6f 69 64  , Window*);.void
25f90 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 43 6f   sqlite3WindowCo
25fa0 64 65 49 6e 69 74 28 50 61 72 73 65 2a 2c 20 57  deInit(Parse*, W
25fb0 69 6e 64 6f 77 2a 29 3b 0a 76 6f 69 64 20 73 71  indow*);.void sq
25fc0 6c 69 74 65 33 57 69 6e 64 6f 77 43 6f 64 65 53  lite3WindowCodeS
25fd0 74 65 70 28 50 61 72 73 65 2a 2c 20 53 65 6c 65  tep(Parse*, Sele
25fe0 63 74 2a 2c 20 57 68 65 72 65 49 6e 66 6f 2a 2c  ct*, WhereInfo*,
25ff0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20   int, int);.int 
26000 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 52 65 77  sqlite3WindowRew
26010 72 69 74 65 28 50 61 72 73 65 2a 2c 20 53 65 6c  rite(Parse*, Sel
26020 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ect*);.int sqlit
26030 65 33 45 78 70 61 6e 64 53 75 62 71 75 65 72 79  e3ExpandSubquery
26040 28 50 61 72 73 65 2a 2c 20 73 74 72 75 63 74 20  (Parse*, struct 
26050 53 72 63 4c 69 73 74 5f 69 74 65 6d 2a 29 3b 0a  SrcList_item*);.
26060 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 6e 64  void sqlite3Wind
26070 6f 77 55 70 64 61 74 65 28 50 61 72 73 65 2a 2c  owUpdate(Parse*,
26080 20 57 69 6e 64 6f 77 2a 2c 20 57 69 6e 64 6f 77   Window*, Window
26090 2a 2c 20 46 75 6e 63 44 65 66 2a 29 3b 0a 57 69  *, FuncDef*);.Wi
260a0 6e 64 6f 77 20 2a 73 71 6c 69 74 65 33 57 69 6e  ndow *sqlite3Win
260b0 64 6f 77 44 75 70 28 73 71 6c 69 74 65 33 20 2a  dowDup(sqlite3 *
260c0 64 62 2c 20 45 78 70 72 20 2a 70 4f 77 6e 65 72  db, Expr *pOwner
260d0 2c 20 57 69 6e 64 6f 77 20 2a 70 29 3b 0a 57 69  , Window *p);.Wi
260e0 6e 64 6f 77 20 2a 73 71 6c 69 74 65 33 57 69 6e  ndow *sqlite3Win
260f0 64 6f 77 4c 69 73 74 44 75 70 28 73 71 6c 69 74  dowListDup(sqlit
26100 65 33 20 2a 64 62 2c 20 57 69 6e 64 6f 77 20 2a  e3 *db, Window *
26110 70 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  p);.void sqlite3
26120 57 69 6e 64 6f 77 46 75 6e 63 74 69 6f 6e 73 28  WindowFunctions(
26130 76 6f 69 64 29 3b 0a 0a 2f 2a 0a 2a 2a 20 41 73  void);../*.** As
26140 73 75 6d 69 6e 67 20 7a 49 6e 20 70 6f 69 6e 74  suming zIn point
26150 73 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 62  s to the first b
26160 79 74 65 20 6f 66 20 61 20 55 54 46 2d 38 20 63  yte of a UTF-8 c
26170 68 61 72 61 63 74 65 72 2c 0a 2a 2a 20 61 64 76  haracter,.** adv
26180 61 6e 63 65 20 7a 49 6e 20 74 6f 20 70 6f 69 6e  ance zIn to poin
26190 74 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 62  t to the first b
261a0 79 74 65 20 6f 66 20 74 68 65 20 6e 65 78 74 20  yte of the next 
261b0 55 54 46 2d 38 20 63 68 61 72 61 63 74 65 72 2e  UTF-8 character.
261c0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
261d0 54 45 5f 53 4b 49 50 5f 55 54 46 38 28 7a 49 6e  TE_SKIP_UTF8(zIn
261e0 29 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  ) {             
261f0 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 69             \.  i
26200 66 28 20 28 2a 28 7a 49 6e 2b 2b 29 29 3e 3d 30  f( (*(zIn++))>=0
26210 78 63 30 20 29 7b 20 20 20 20 20 20 20 20 20 20  xc0 ){          
26220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26230 20 20 20 20 5c 0a 20 20 20 20 77 68 69 6c 65 28      \.    while(
26240 20 28 2a 7a 49 6e 20 26 20 30 78 63 30 29 3d 3d   (*zIn & 0xc0)==
26250 30 78 38 30 20 29 7b 20 7a 49 6e 2b 2b 3b 20 7d  0x80 ){ zIn++; }
26260 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20               \. 
26270 20 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 20   }              
26280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
262a0 20 20 20 20 20 20 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a        \.}../*.**
262b0 20 54 68 65 20 53 51 4c 49 54 45 5f 2a 5f 42 4b   The SQLITE_*_BK
262c0 50 54 20 6d 61 63 72 6f 73 20 61 72 65 20 73 75  PT macros are su
262d0 62 73 74 69 74 75 74 65 73 20 66 6f 72 20 74 68  bstitutes for th
262e0 65 20 65 72 72 6f 72 20 63 6f 64 65 73 20 77 69  e error codes wi
262f0 74 68 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20 6e  th.** the same n
26300 61 6d 65 20 62 75 74 20 77 69 74 68 6f 75 74 20  ame but without 
26310 74 68 65 20 5f 42 4b 50 54 20 73 75 66 66 69 78  the _BKPT suffix
26320 2e 20 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20  .  These macros 
26330 69 6e 76 6f 6b 65 0a 2a 2a 20 72 6f 75 74 69 6e  invoke.** routin
26340 65 73 20 74 68 61 74 20 72 65 70 6f 72 74 20 74  es that report t
26350 68 65 20 6c 69 6e 65 2d 6e 75 6d 62 65 72 20 6f  he line-number o
26360 6e 20 77 68 69 63 68 20 74 68 65 20 65 72 72 6f  n which the erro
26370 72 20 6f 72 69 67 69 6e 61 74 65 64 0a 2a 2a 20  r originated.** 
26380 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 6c 6f  using sqlite3_lo
26390 67 28 29 2e 20 20 54 68 65 20 72 6f 75 74 69 6e  g().  The routin
263a0 65 73 20 61 6c 73 6f 20 70 72 6f 76 69 64 65 20  es also provide 
263b0 61 20 63 6f 6e 76 65 6e 69 65 6e 74 20 70 6c 61  a convenient pla
263c0 63 65 0a 2a 2a 20 74 6f 20 73 65 74 20 61 20 64  ce.** to set a d
263d0 65 62 75 67 67 65 72 20 62 72 65 61 6b 70 6f 69  ebugger breakpoi
263e0 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  nt..*/.int sqlit
263f0 65 33 52 65 70 6f 72 74 45 72 72 6f 72 28 69 6e  e3ReportError(in
26400 74 20 69 45 72 72 2c 20 69 6e 74 20 6c 69 6e 65  t iErr, int line
26410 6e 6f 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  no, const char *
26420 7a 54 79 70 65 29 3b 0a 69 6e 74 20 73 71 6c 69  zType);.int sqli
26430 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28  te3CorruptError(
26440 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
26450 33 4d 69 73 75 73 65 45 72 72 6f 72 28 69 6e 74  3MisuseError(int
26460 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 61  );.int sqlite3Ca
26470 6e 74 6f 70 65 6e 45 72 72 6f 72 28 69 6e 74 29  ntopenError(int)
26480 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  ;.#define SQLITE
26490 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 20 73 71  _CORRUPT_BKPT sq
264a0 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f  lite3CorruptErro
264b0 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66  r(__LINE__).#def
264c0 69 6e 65 20 53 51 4c 49 54 45 5f 4d 49 53 55 53  ine SQLITE_MISUS
264d0 45 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 4d 69  E_BKPT sqlite3Mi
264e0 73 75 73 65 45 72 72 6f 72 28 5f 5f 4c 49 4e 45  suseError(__LINE
264f0 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  __).#define SQLI
26500 54 45 5f 43 41 4e 54 4f 50 45 4e 5f 42 4b 50 54  TE_CANTOPEN_BKPT
26510 20 73 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e   sqlite3Cantopen
26520 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a  Error(__LINE__).
26530 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
26540 42 55 47 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  BUG.  int sqlite
26550 33 4e 6f 6d 65 6d 45 72 72 6f 72 28 69 6e 74 29  3NomemError(int)
26560 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 49  ;.  int sqlite3I
26570 6f 65 72 72 6e 6f 6d 65 6d 45 72 72 6f 72 28 69  oerrnomemError(i
26580 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  nt);.  int sqlit
26590 65 33 43 6f 72 72 75 70 74 50 67 6e 6f 45 72 72  e3CorruptPgnoErr
265a0 6f 72 28 69 6e 74 2c 50 67 6e 6f 29 3b 0a 23 20  or(int,Pgno);.# 
265b0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f  define SQLITE_NO
265c0 4d 45 4d 5f 42 4b 50 54 20 73 71 6c 69 74 65 33  MEM_BKPT sqlite3
265d0 4e 6f 6d 65 6d 45 72 72 6f 72 28 5f 5f 4c 49 4e  NomemError(__LIN
265e0 45 5f 5f 29 0a 23 20 64 65 66 69 6e 65 20 53 51  E__).# define SQ
265f0 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d  LITE_IOERR_NOMEM
26600 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 49 6f 65  _BKPT sqlite3Ioe
26610 72 72 6e 6f 6d 65 6d 45 72 72 6f 72 28 5f 5f 4c  rrnomemError(__L
26620 49 4e 45 5f 5f 29 0a 23 20 64 65 66 69 6e 65 20  INE__).# define 
26630 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 50  SQLITE_CORRUPT_P
26640 47 4e 4f 28 50 29 20 73 71 6c 69 74 65 33 43 6f  GNO(P) sqlite3Co
26650 72 72 75 70 74 50 67 6e 6f 45 72 72 6f 72 28 5f  rruptPgnoError(_
26660 5f 4c 49 4e 45 5f 5f 2c 28 50 29 29 0a 23 65 6c  _LINE__,(P)).#el
26670 73 65 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  se.# define SQLI
26680 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20 53 51  TE_NOMEM_BKPT SQ
26690 4c 49 54 45 5f 4e 4f 4d 45 4d 0a 23 20 64 65 66  LITE_NOMEM.# def
266a0 69 6e 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52  ine SQLITE_IOERR
266b0 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20 53 51 4c 49  _NOMEM_BKPT SQLI
266c0 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 0a 23  TE_IOERR_NOMEM.#
266d0 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43   define SQLITE_C
266e0 4f 52 52 55 50 54 5f 50 47 4e 4f 28 50 29 20 73  ORRUPT_PGNO(P) s
266f0 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72 72  qlite3CorruptErr
26700 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 65 6e  or(__LINE__).#en
26710 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 54 53 33 20  dif../*.** FTS3 
26720 61 6e 64 20 46 54 53 34 20 62 6f 74 68 20 72 65  and FTS4 both re
26730 71 75 69 72 65 20 76 69 72 74 75 61 6c 20 74 61  quire virtual ta
26740 62 6c 65 20 73 75 70 70 6f 72 74 0a 2a 2f 0a 23  ble support.*/.#
26750 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
26760 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
26770 42 4c 45 29 0a 23 20 75 6e 64 65 66 20 53 51 4c  BLE).# undef SQL
26780 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 0a  ITE_ENABLE_FTS3.
26790 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45  # undef SQLITE_E
267a0 4e 41 42 4c 45 5f 46 54 53 34 0a 23 65 6e 64 69  NABLE_FTS4.#endi
267b0 66 0a 0a 2f 2a 0a 2a 2a 20 46 54 53 34 20 69 73  f../*.** FTS4 is
267c0 20 72 65 61 6c 6c 79 20 61 6e 20 65 78 74 65 6e   really an exten
267d0 73 69 6f 6e 20 66 6f 72 20 46 54 53 33 2e 20 20  sion for FTS3.  
267e0 49 74 20 69 73 20 65 6e 61 62 6c 65 64 20 75 73  It is enabled us
267f0 69 6e 67 20 74 68 65 0a 2a 2a 20 53 51 4c 49 54  ing the.** SQLIT
26800 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20 6d 61  E_ENABLE_FTS3 ma
26810 63 72 6f 2e 20 20 42 75 74 20 74 6f 20 61 76 6f  cro.  But to avo
26820 69 64 20 63 6f 6e 66 75 73 69 6f 6e 20 77 65 20  id confusion we 
26830 61 6c 73 6f 20 63 61 6c 6c 0a 2a 2a 20 74 68 65  also call.** the
26840 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46   SQLITE_ENABLE_F
26850 54 53 34 20 6d 61 63 72 6f 20 74 6f 20 73 65 72  TS4 macro to ser
26860 76 65 20 61 73 20 61 6e 20 61 6c 69 61 73 20 66  ve as an alias f
26870 6f 72 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  or SQLITE_ENABLE
26880 5f 46 54 53 33 2e 0a 2a 2f 0a 23 69 66 20 64 65  _FTS3..*/.#if de
26890 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
268a0 42 4c 45 5f 46 54 53 34 29 20 26 26 20 21 64 65  BLE_FTS4) && !de
268b0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
268c0 42 4c 45 5f 46 54 53 33 29 0a 23 20 64 65 66 69  BLE_FTS3).# defi
268d0 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ne SQLITE_ENABLE
268e0 5f 46 54 53 33 20 31 0a 23 65 6e 64 69 66 0a 0a  _FTS3 1.#endif..
268f0 2f 2a 0a 2a 2a 20 54 68 65 20 63 74 79 70 65 2e  /*.** The ctype.
26900 68 20 68 65 61 64 65 72 20 69 73 20 6e 65 65 64  h header is need
26910 65 64 20 66 6f 72 20 6e 6f 6e 2d 41 53 43 49 49  ed for non-ASCII
26920 20 73 79 73 74 65 6d 73 2e 20 20 49 74 20 69 73   systems.  It is
26930 20 61 6c 73 6f 0a 2a 2a 20 6e 65 65 64 65 64 20   also.** needed 
26940 62 79 20 46 54 53 33 20 77 68 65 6e 20 46 54 53  by FTS3 when FTS
26950 33 20 69 73 20 69 6e 63 6c 75 64 65 64 20 69 6e  3 is included in
26960 20 74 68 65 20 61 6d 61 6c 67 61 6d 61 74 69 6f   the amalgamatio
26970 6e 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  n..*/.#if !defin
26980 65 64 28 53 51 4c 49 54 45 5f 41 53 43 49 49 29  ed(SQLITE_ASCII)
26990 20 7c 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e   || \.    (defin
269a0 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
269b0 5f 46 54 53 33 29 20 26 26 20 64 65 66 69 6e 65  _FTS3) && define
269c0 64 28 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d  d(SQLITE_AMALGAM
269d0 41 54 49 4f 4e 29 29 0a 23 20 69 6e 63 6c 75 64  ATION)).# includ
269e0 65 20 3c 63 74 79 70 65 2e 68 3e 0a 23 65 6e 64  e <ctype.h>.#end
269f0 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  if../*.** The fo
26a00 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 6d  llowing macros m
26a10 69 6d 69 63 20 74 68 65 20 73 74 61 6e 64 61 72  imic the standar
26a20 64 20 6c 69 62 72 61 72 79 20 66 75 6e 63 74 69  d library functi
26a30 6f 6e 73 20 74 6f 75 70 70 65 72 28 29 2c 0a 2a  ons toupper(),.*
26a40 2a 20 69 73 73 70 61 63 65 28 29 2c 20 69 73 61  * isspace(), isa
26a50 6c 6e 75 6d 28 29 2c 20 69 73 64 69 67 69 74 28  lnum(), isdigit(
26a60 29 20 61 6e 64 20 69 73 78 64 69 67 69 74 28 29  ) and isxdigit()
26a70 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20  , respectively. 
26a80 54 68 65 0a 2a 2a 20 73 71 6c 69 74 65 20 76 65  The.** sqlite ve
26a90 72 73 69 6f 6e 73 20 6f 6e 6c 79 20 77 6f 72 6b  rsions only work
26aa0 20 66 6f 72 20 41 53 43 49 49 20 63 68 61 72 61   for ASCII chara
26ab0 63 74 65 72 73 2c 20 72 65 67 61 72 64 6c 65 73  cters, regardles
26ac0 73 20 6f 66 20 6c 6f 63 61 6c 65 2e 0a 2a 2f 0a  s of locale..*/.
26ad0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 41 53  #ifdef SQLITE_AS
26ae0 43 49 49 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  CII.# define sql
26af0 69 74 65 33 54 6f 75 70 70 65 72 28 78 29 20 20  ite3Toupper(x)  
26b00 28 28 78 29 26 7e 28 73 71 6c 69 74 65 33 43 74  ((x)&~(sqlite3Ct
26b10 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
26b20 20 63 68 61 72 29 28 78 29 5d 26 30 78 32 30 29   char)(x)]&0x20)
26b30 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
26b40 65 33 49 73 73 70 61 63 65 28 78 29 20 20 20 28  e3Isspace(x)   (
26b50 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
26b60 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
26b70 78 29 5d 26 30 78 30 31 29 0a 23 20 64 65 66 69  x)]&0x01).# defi
26b80 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 6e 75  ne sqlite3Isalnu
26b90 6d 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43  m(x)   (sqlite3C
26ba0 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
26bb0 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 36  d char)(x)]&0x06
26bc0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
26bd0 65 33 49 73 61 6c 70 68 61 28 78 29 20 20 20 28  e3Isalpha(x)   (
26be0 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
26bf0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
26c00 78 29 5d 26 30 78 30 32 29 0a 23 20 64 65 66 69  x)]&0x02).# defi
26c10 6e 65 20 73 71 6c 69 74 65 33 49 73 64 69 67 69  ne sqlite3Isdigi
26c20 74 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43  t(x)   (sqlite3C
26c30 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
26c40 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 34  d char)(x)]&0x04
26c50 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
26c60 65 33 49 73 78 64 69 67 69 74 28 78 29 20 20 28  e3Isxdigit(x)  (
26c70 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
26c80 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
26c90 78 29 5d 26 30 78 30 38 29 0a 23 20 64 65 66 69  x)]&0x08).# defi
26ca0 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65  ne sqlite3Tolowe
26cb0 72 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 55  r(x)   (sqlite3U
26cc0 70 70 65 72 54 6f 4c 6f 77 65 72 5b 28 75 6e 73  pperToLower[(uns
26cd0 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 29  igned char)(x)])
26ce0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
26cf0 33 49 73 71 75 6f 74 65 28 78 29 20 20 20 28 73  3Isquote(x)   (s
26d00 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28  qlite3CtypeMap[(
26d10 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
26d20 29 5d 26 30 78 38 30 29 0a 23 65 6c 73 65 0a 23  )]&0x80).#else.#
26d30 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
26d40 6f 75 70 70 65 72 28 78 29 20 20 20 74 6f 75 70  oupper(x)   toup
26d50 70 65 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68  per((unsigned ch
26d60 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65  ar)(x)).# define
26d70 20 73 71 6c 69 74 65 33 49 73 73 70 61 63 65 28   sqlite3Isspace(
26d80 78 29 20 20 20 69 73 73 70 61 63 65 28 28 75 6e  x)   isspace((un
26d90 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29  signed char)(x))
26da0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
26db0 33 49 73 61 6c 6e 75 6d 28 78 29 20 20 20 69 73  3Isalnum(x)   is
26dc0 61 6c 6e 75 6d 28 28 75 6e 73 69 67 6e 65 64 20  alnum((unsigned 
26dd0 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69  char)(x)).# defi
26de0 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 70 68  ne sqlite3Isalph
26df0 61 28 78 29 20 20 20 69 73 61 6c 70 68 61 28 28  a(x)   isalpha((
26e00 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
26e10 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
26e20 74 65 33 49 73 64 69 67 69 74 28 78 29 20 20 20  te3Isdigit(x)   
26e30 69 73 64 69 67 69 74 28 28 75 6e 73 69 67 6e 65  isdigit((unsigne
26e40 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65  d char)(x)).# de
26e50 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 78 64  fine sqlite3Isxd
26e60 69 67 69 74 28 78 29 20 20 69 73 78 64 69 67 69  igit(x)  isxdigi
26e70 74 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  t((unsigned char
26e80 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
26e90 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 78 29  qlite3Tolower(x)
26ea0 20 20 20 74 6f 6c 6f 77 65 72 28 28 75 6e 73 69     tolower((unsi
26eb0 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
26ec0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
26ed0 73 71 75 6f 74 65 28 78 29 20 20 20 28 28 78 29  squote(x)   ((x)
26ee0 3d 3d 27 22 27 7c 7c 28 78 29 3d 3d 27 5c 27 27  =='"'||(x)=='\''
26ef0 7c 7c 28 78 29 3d 3d 27 5b 27 7c 7c 28 78 29 3d  ||(x)=='['||(x)=
26f00 3d 27 60 27 29 0a 23 65 6e 64 69 66 0a 23 69 66  ='`').#endif.#if
26f10 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
26f20 5f 43 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f 44  _COMPILEOPTION_D
26f30 49 41 47 53 0a 69 6e 74 20 73 71 6c 69 74 65 33  IAGS.int sqlite3
26f40 49 73 49 64 43 68 61 72 28 75 38 29 3b 0a 23 65  IsIdChar(u8);.#e
26f50 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65  ndif../*.** Inte
26f60 72 6e 61 6c 20 66 75 6e 63 74 69 6f 6e 20 70 72  rnal function pr
26f70 6f 74 6f 74 79 70 65 73 0a 2a 2f 0a 69 6e 74 20  ototypes.*/.int 
26f80 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 63  sqlite3StrICmp(c
26f90 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
26fa0 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   char*);.int sql
26fb0 69 74 65 33 53 74 72 6c 65 6e 33 30 28 63 6f 6e  ite3Strlen30(con
26fc0 73 74 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20  st char*);.char 
26fd0 2a 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 54 79  *sqlite3ColumnTy
26fe0 70 65 28 43 6f 6c 75 6d 6e 2a 2c 63 68 61 72 2a  pe(Column*,char*
26ff0 29 3b 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74  );.#define sqlit
27000 65 33 53 74 72 4e 49 43 6d 70 20 73 71 6c 69 74  e3StrNICmp sqlit
27010 65 33 5f 73 74 72 6e 69 63 6d 70 0a 0a 69 6e 74  e3_strnicmp..int
27020 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 49 6e   sqlite3MallocIn
27030 69 74 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73  it(void);.void s
27040 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 45 6e 64 28  qlite3MallocEnd(
27050 76 6f 69 64 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  void);.void *sql
27060 69 74 65 33 4d 61 6c 6c 6f 63 28 75 36 34 29 3b  ite3Malloc(u64);
27070 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61  .void *sqlite3Ma
27080 6c 6c 6f 63 5a 65 72 6f 28 75 36 34 29 3b 0a 76  llocZero(u64);.v
27090 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61  oid *sqlite3DbMa
270a0 6c 6c 6f 63 5a 65 72 6f 28 73 71 6c 69 74 65 33  llocZero(sqlite3
270b0 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73  *, u64);.void *s
270c0 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61  qlite3DbMallocRa
270d0 77 28 73 71 6c 69 74 65 33 2a 2c 20 75 36 34 29  w(sqlite3*, u64)
270e0 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44  ;.void *sqlite3D
270f0 62 4d 61 6c 6c 6f 63 52 61 77 4e 4e 28 73 71 6c  bMallocRawNN(sql
27100 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a 63 68 61  ite3*, u64);.cha
27110 72 20 2a 73 71 6c 69 74 65 33 44 62 53 74 72 44  r *sqlite3DbStrD
27120 75 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  up(sqlite3*,cons
27130 74 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 2a  t char*);.char *
27140 73 71 6c 69 74 65 33 44 62 53 74 72 4e 44 75 70  sqlite3DbStrNDup
27150 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
27160 63 68 61 72 2a 2c 20 75 36 34 29 3b 0a 63 68 61  char*, u64);.cha
27170 72 20 2a 73 71 6c 69 74 65 33 44 62 53 70 61 6e  r *sqlite3DbSpan
27180 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  Dup(sqlite3*,con
27190 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
271a0 68 61 72 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  har*);.void *sql
271b0 69 74 65 33 52 65 61 6c 6c 6f 63 28 76 6f 69 64  ite3Realloc(void
271c0 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73  *, u64);.void *s
271d0 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 4f  qlite3DbReallocO
271e0 72 46 72 65 65 28 73 71 6c 69 74 65 33 20 2a 2c  rFree(sqlite3 *,
271f0 20 76 6f 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76   void *, u64);.v
27200 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 52 65  oid *sqlite3DbRe
27210 61 6c 6c 6f 63 28 73 71 6c 69 74 65 33 20 2a 2c  alloc(sqlite3 *,
27220 20 76 6f 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76   void *, u64);.v
27230 6f 69 64 20 73 71 6c 69 74 65 33 44 62 46 72 65  oid sqlite3DbFre
27240 65 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64  e(sqlite3*, void
27250 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
27260 44 62 46 72 65 65 4e 4e 28 73 71 6c 69 74 65 33  DbFreeNN(sqlite3
27270 2a 2c 20 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73  *, void*);.int s
27280 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65  qlite3MallocSize
27290 28 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c  (void*);.int sql
272a0 69 74 65 33 44 62 4d 61 6c 6c 6f 63 53 69 7a 65  ite3DbMallocSize
272b0 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a  (sqlite3*, void*
272c0 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
272d0 50 61 67 65 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b  PageMalloc(int);
272e0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 67  .void sqlite3Pag
272f0 65 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f  eFree(void*);.vo
27300 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 53 65 74  id sqlite3MemSet
27310 44 65 66 61 75 6c 74 28 76 6f 69 64 29 3b 0a 23  Default(void);.#
27320 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e  ifndef SQLITE_UN
27330 54 45 53 54 41 42 4c 45 0a 76 6f 69 64 20 73 71  TESTABLE.void sq
27340 6c 69 74 65 33 42 65 6e 69 67 6e 4d 61 6c 6c 6f  lite3BenignMallo
27350 63 48 6f 6f 6b 73 28 76 6f 69 64 20 28 2a 29 28  cHooks(void (*)(
27360 76 6f 69 64 29 2c 20 76 6f 69 64 20 28 2a 29 28  void), void (*)(
27370 76 6f 69 64 29 29 3b 0a 23 65 6e 64 69 66 0a 69  void));.#endif.i
27380 6e 74 20 73 71 6c 69 74 65 33 48 65 61 70 4e 65  nt sqlite3HeapNe
27390 61 72 6c 79 46 75 6c 6c 28 76 6f 69 64 29 3b 0a  arlyFull(void);.
273a0 0a 2f 2a 0a 2a 2a 20 4f 6e 20 73 79 73 74 65 6d  ./*.** On system
273b0 73 20 77 69 74 68 20 61 6d 70 6c 65 20 73 74 61  s with ample sta
273c0 63 6b 20 73 70 61 63 65 20 61 6e 64 20 74 68 61  ck space and tha
273d0 74 20 73 75 70 70 6f 72 74 20 61 6c 6c 6f 63 61  t support alloca
273e0 28 29 2c 20 6d 61 6b 65 0a 2a 2a 20 75 73 65 20  (), make.** use 
273f0 6f 66 20 61 6c 6c 6f 63 61 28 29 20 74 6f 20 6f  of alloca() to o
27400 62 74 61 69 6e 20 73 70 61 63 65 20 66 6f 72 20  btain space for 
27410 6c 61 72 67 65 20 61 75 74 6f 6d 61 74 69 63 20  large automatic 
27420 6f 62 6a 65 63 74 73 2e 20 20 42 79 20 64 65 66  objects.  By def
27430 61 75 6c 74 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20  ault,.** obtain 
27440 73 70 61 63 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f  space from mallo
27450 63 28 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61  c()..**.** The a
27460 6c 6c 6f 63 61 28 29 20 72 6f 75 74 69 6e 65 20  lloca() routine 
27470 6e 65 76 65 72 20 72 65 74 75 72 6e 73 20 4e 55  never returns NU
27480 4c 4c 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 63  LL.  This will c
27490 61 75 73 65 20 63 6f 64 65 20 70 61 74 68 73 0a  ause code paths.
274a0 2a 2a 20 74 68 61 74 20 64 65 61 6c 20 77 69 74  ** that deal wit
274b0 68 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c  h sqlite3StackAl
274c0 6c 6f 63 28 29 20 66 61 69 6c 75 72 65 73 20 74  loc() failures t
274d0 6f 20 62 65 20 75 6e 72 65 61 63 68 61 62 6c 65  o be unreachable
274e0 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
274f0 54 45 5f 55 53 45 5f 41 4c 4c 4f 43 41 0a 23 20  TE_USE_ALLOCA.# 
27500 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
27510 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29  ackAllocRaw(D,N)
27520 20 20 20 61 6c 6c 6f 63 61 28 4e 29 0a 23 20 64     alloca(N).# d
27530 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
27540 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29  ckAllocZero(D,N)
27550 20 20 6d 65 6d 73 65 74 28 61 6c 6c 6f 63 61 28    memset(alloca(
27560 4e 29 2c 20 30 2c 20 4e 29 0a 23 20 64 65 66 69  N), 0, N).# defi
27570 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46  ne sqlite3StackF
27580 72 65 65 28 44 2c 50 29 0a 23 65 6c 73 65 0a 23  ree(D,P).#else.#
27590 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53   define sqlite3S
275a0 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e  tackAllocRaw(D,N
275b0 29 20 20 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  )   sqlite3DbMal
275c0 6c 6f 63 52 61 77 28 44 2c 4e 29 0a 23 20 64 65  locRaw(D,N).# de
275d0 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
275e0 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20  kAllocZero(D,N) 
275f0 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
27600 5a 65 72 6f 28 44 2c 4e 29 0a 23 20 64 65 66 69  Zero(D,N).# defi
27610 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46  ne sqlite3StackF
27620 72 65 65 28 44 2c 50 29 20 20 20 20 20 20 20 73  ree(D,P)       s
27630 71 6c 69 74 65 33 44 62 46 72 65 65 28 44 2c 50  qlite3DbFree(D,P
27640 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 44 6f 20  ).#endif../* Do 
27650 6e 6f 74 20 61 6c 6c 6f 77 20 62 6f 74 68 20 4d  not allow both M
27660 45 4d 53 59 53 35 20 61 6e 64 20 4d 45 4d 53 59  EMSYS5 and MEMSY
27670 53 33 20 74 6f 20 62 65 20 64 65 66 69 6e 65 64  S3 to be defined
27680 20 74 6f 67 65 74 68 65 72 2e 20 20 49 66 20 74   together.  If t
27690 68 65 79 0a 2a 2a 20 61 72 65 2c 20 64 69 73 61  hey.** are, disa
276a0 62 6c 65 20 4d 45 4d 53 59 53 33 0a 2a 2f 0a 23  ble MEMSYS3.*/.#
276b0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
276c0 42 4c 45 5f 4d 45 4d 53 59 53 35 0a 63 6f 6e 73  BLE_MEMSYS5.cons
276d0 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65  t sqlite3_mem_me
276e0 74 68 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d 65  thods *sqlite3Me
276f0 6d 47 65 74 4d 65 6d 73 79 73 35 28 76 6f 69 64  mGetMemsys5(void
27700 29 3b 0a 23 75 6e 64 65 66 20 53 51 4c 49 54 45  );.#undef SQLITE
27710 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a  _ENABLE_MEMSYS3.
27720 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51  #endif.#ifdef SQ
27730 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53  LITE_ENABLE_MEMS
27740 59 53 33 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65  YS3.const sqlite
27750 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73  3_mem_methods *s
27760 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73  qlite3MemGetMems
27770 79 73 33 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69  ys3(void);.#endi
27780 66 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  f...#ifndef SQLI
27790 54 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 0a 20 20  TE_MUTEX_OMIT.  
277a0 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65  sqlite3_mutex_me
277b0 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c  thods const *sql
277c0 69 74 65 33 44 65 66 61 75 6c 74 4d 75 74 65 78  ite3DefaultMutex
277d0 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74 65  (void);.  sqlite
277e0 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20  3_mutex_methods 
277f0 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33 4e 6f  const *sqlite3No
27800 6f 70 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 20  opMutex(void);. 
27810 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a   sqlite3_mutex *
27820 73 71 6c 69 74 65 33 4d 75 74 65 78 41 6c 6c 6f  sqlite3MutexAllo
27830 63 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71  c(int);.  int sq
27840 6c 69 74 65 33 4d 75 74 65 78 49 6e 69 74 28 76  lite3MutexInit(v
27850 6f 69 64 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  oid);.  int sqli
27860 74 65 33 4d 75 74 65 78 45 6e 64 28 76 6f 69 64  te3MutexEnd(void
27870 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64  );.#endif.#if !d
27880 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55  efined(SQLITE_MU
27890 54 45 58 5f 4f 4d 49 54 29 20 26 26 20 21 64 65  TEX_OMIT) && !de
278a0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55 54  fined(SQLITE_MUT
278b0 45 58 5f 4e 4f 4f 50 29 0a 20 20 76 6f 69 64 20  EX_NOOP).  void 
278c0 73 71 6c 69 74 65 33 4d 65 6d 6f 72 79 42 61 72  sqlite3MemoryBar
278d0 72 69 65 72 28 76 6f 69 64 29 3b 0a 23 65 6c 73  rier(void);.#els
278e0 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
278f0 65 33 4d 65 6d 6f 72 79 42 61 72 72 69 65 72 28  e3MemoryBarrier(
27900 29 0a 23 65 6e 64 69 66 0a 0a 73 71 6c 69 74 65  ).#endif..sqlite
27910 33 5f 69 6e 74 36 34 20 73 71 6c 69 74 65 33 53  3_int64 sqlite3S
27920 74 61 74 75 73 56 61 6c 75 65 28 69 6e 74 29 3b  tatusValue(int);
27930 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61  .void sqlite3Sta
27940 74 75 73 55 70 28 69 6e 74 2c 20 69 6e 74 29 3b  tusUp(int, int);
27950 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61  .void sqlite3Sta
27960 74 75 73 44 6f 77 6e 28 69 6e 74 2c 20 69 6e 74  tusDown(int, int
27970 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
27980 74 61 74 75 73 48 69 67 68 77 61 74 65 72 28 69  tatusHighwater(i
27990 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  nt, int);.int sq
279a0 6c 69 74 65 33 4c 6f 6f 6b 61 73 69 64 65 55 73  lite3LookasideUs
279b0 65 64 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2a  ed(sqlite3*,int*
279c0 29 3b 0a 0a 2f 2a 20 41 63 63 65 73 73 20 74 6f  );../* Access to
279d0 20 6d 75 74 65 78 65 73 20 75 73 65 64 20 62 79   mutexes used by
279e0 20 73 71 6c 69 74 65 33 5f 73 74 61 74 75 73 28   sqlite3_status(
279f0 29 20 2a 2f 0a 73 71 6c 69 74 65 33 5f 6d 75 74  ) */.sqlite3_mut
27a00 65 78 20 2a 73 71 6c 69 74 65 33 50 63 61 63 68  ex *sqlite3Pcach
27a10 65 31 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 73  e1Mutex(void);.s
27a20 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71  qlite3_mutex *sq
27a30 6c 69 74 65 33 4d 61 6c 6c 6f 63 4d 75 74 65 78  lite3MallocMutex
27a40 28 76 6f 69 64 29 3b 0a 0a 23 69 66 20 64 65 66  (void);..#if def
27a50 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
27a60 4c 45 5f 4d 55 4c 54 49 54 48 52 45 41 44 45 44  LE_MULTITHREADED
27a70 5f 43 48 45 43 4b 53 29 20 26 26 20 21 64 65 66  _CHECKS) && !def
27a80 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55 54 45  ined(SQLITE_MUTE
27a90 58 5f 4f 4d 49 54 29 0a 76 6f 69 64 20 73 71 6c  X_OMIT).void sql
27aa0 69 74 65 33 4d 75 74 65 78 57 61 72 6e 4f 6e 43  ite3MutexWarnOnC
27ab0 6f 6e 74 65 6e 74 69 6f 6e 28 73 71 6c 69 74 65  ontention(sqlite
27ac0 33 5f 6d 75 74 65 78 2a 29 3b 0a 23 65 6c 73 65  3_mutex*);.#else
27ad0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
27ae0 33 4d 75 74 65 78 57 61 72 6e 4f 6e 43 6f 6e 74  3MutexWarnOnCont
27af0 65 6e 74 69 6f 6e 28 78 29 0a 23 65 6e 64 69 66  ention(x).#endif
27b00 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
27b10 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
27b20 4f 49 4e 54 0a 20 20 69 6e 74 20 73 71 6c 69 74  OINT.  int sqlit
27b30 65 33 49 73 4e 61 4e 28 64 6f 75 62 6c 65 29 3b  e3IsNaN(double);
27b40 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
27b50 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 58 29 20  sqlite3IsNaN(X) 
27b60 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   0.#endif../*.**
27b70 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
27b80 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
27b90 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20 69 6e  ructure holds in
27ba0 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
27bb0 53 51 4c 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73  SQL.** functions
27bc0 20 61 72 67 75 6d 65 6e 74 73 20 74 68 61 74 20   arguments that 
27bd0 61 72 65 20 74 68 65 20 70 61 72 61 6d 65 74 65  are the paramete
27be0 72 73 20 74 6f 20 74 68 65 20 70 72 69 6e 74 66  rs to the printf
27bf0 28 29 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a  () function..*/.
27c00 73 74 72 75 63 74 20 50 72 69 6e 74 66 41 72 67  struct PrintfArg
27c10 75 6d 65 6e 74 73 20 7b 0a 20 20 69 6e 74 20 6e  uments {.  int n
27c20 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
27c30 20 20 20 20 2f 2a 20 54 6f 74 61 6c 20 6e 75 6d      /* Total num
27c40 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
27c50 20 2a 2f 0a 20 20 69 6e 74 20 6e 55 73 65 64 3b   */.  int nUsed;
27c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
27c70 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
27c80 6d 65 6e 74 73 20 75 73 65 64 20 73 6f 20 66 61  ments used so fa
27c90 72 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76  r */.  sqlite3_v
27ca0 61 6c 75 65 20 2a 2a 61 70 41 72 67 3b 20 20 20  alue **apArg;   
27cb0 2f 2a 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20  /* The argument 
27cc0 76 61 6c 75 65 73 20 2a 2f 0a 7d 3b 0a 0a 63 68  values */.};..ch
27cd0 61 72 20 2a 73 71 6c 69 74 65 33 4d 50 72 69 6e  ar *sqlite3MPrin
27ce0 74 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  tf(sqlite3*,cons
27cf0 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63  t char*, ...);.c
27d00 68 61 72 20 2a 73 71 6c 69 74 65 33 56 4d 50 72  har *sqlite3VMPr
27d10 69 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f  intf(sqlite3*,co
27d20 6e 73 74 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69  nst char*, va_li
27d30 73 74 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64  st);.#if defined
27d40 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 7c  (SQLITE_DEBUG) |
27d50 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  | defined(SQLITE
27d60 5f 48 41 56 45 5f 4f 53 5f 54 52 41 43 45 29 0a  _HAVE_OS_TRACE).
27d70 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65    void sqlite3De
27d80 62 75 67 50 72 69 6e 74 66 28 63 6f 6e 73 74 20  bugPrintf(const 
27d90 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 23 65 6e  char*, ...);.#en
27da0 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28  dif.#if defined(
27db0 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 20 20 76  SQLITE_TEST).  v
27dc0 6f 69 64 20 2a 73 71 6c 69 74 65 33 54 65 73 74  oid *sqlite3Test
27dd0 54 65 78 74 54 6f 50 74 72 28 63 6f 6e 73 74 20  TextToPtr(const 
27de0 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  char*);.#endif..
27df0 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
27e00 54 45 5f 44 45 42 55 47 29 0a 20 20 76 6f 69 64  TE_DEBUG).  void
27e10 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77   sqlite3TreeView
27e20 45 78 70 72 28 54 72 65 65 56 69 65 77 2a 2c 20  Expr(TreeView*, 
27e30 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20 75 38 29  const Expr*, u8)
27e40 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
27e50 54 72 65 65 56 69 65 77 42 61 72 65 45 78 70 72  TreeViewBareExpr
27e60 4c 69 73 74 28 54 72 65 65 56 69 65 77 2a 2c 20  List(TreeView*, 
27e70 63 6f 6e 73 74 20 45 78 70 72 4c 69 73 74 2a 2c  const ExprList*,
27e80 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20   const char*);. 
27e90 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65   void sqlite3Tre
27ea0 65 56 69 65 77 45 78 70 72 4c 69 73 74 28 54 72  eViewExprList(Tr
27eb0 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45  eeView*, const E
27ec0 78 70 72 4c 69 73 74 2a 2c 20 75 38 2c 20 63 6f  xprList*, u8, co
27ed0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f  nst char*);.  vo
27ee0 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69  id sqlite3TreeVi
27ef0 65 77 53 65 6c 65 63 74 28 54 72 65 65 56 69 65  ewSelect(TreeVie
27f00 77 2a 2c 20 63 6f 6e 73 74 20 53 65 6c 65 63 74  w*, const Select
27f10 2a 2c 20 75 38 29 3b 0a 20 20 76 6f 69 64 20 73  *, u8);.  void s
27f20 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 57 69  qlite3TreeViewWi
27f30 74 68 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f  th(TreeView*, co
27f40 6e 73 74 20 57 69 74 68 2a 2c 20 75 38 29 3b 0a  nst With*, u8);.
27f50 23 65 6e 64 69 66 0a 0a 0a 76 6f 69 64 20 73 71  #endif...void sq
27f60 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 63  lite3SetString(c
27f70 68 61 72 20 2a 2a 2c 20 73 71 6c 69 74 65 33 2a  har **, sqlite3*
27f80 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
27f90 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f  void sqlite3Erro
27fa0 72 4d 73 67 28 50 61 72 73 65 2a 2c 20 63 6f 6e  rMsg(Parse*, con
27fb0 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a  st char*, ...);.
27fc0 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 71 75  void sqlite3Dequ
27fd0 6f 74 65 28 63 68 61 72 2a 29 3b 0a 76 6f 69 64  ote(char*);.void
27fe0 20 73 71 6c 69 74 65 33 54 6f 6b 65 6e 49 6e 69   sqlite3TokenIni
27ff0 74 28 54 6f 6b 65 6e 2a 2c 63 68 61 72 2a 29 3b  t(Token*,char*);
28000 0a 69 6e 74 20 73 71 6c 69 74 65 33 4b 65 79 77  .int sqlite3Keyw
28010 6f 72 64 43 6f 64 65 28 63 6f 6e 73 74 20 75 6e  ordCode(const un
28020 73 69 67 6e 65 64 20 63 68 61 72 2a 2c 20 69 6e  signed char*, in
28030 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  t);.int sqlite3R
28040 75 6e 50 61 72 73 65 72 28 50 61 72 73 65 2a 2c  unParser(Parse*,
28050 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 68   const char*, ch
28060 61 72 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ar **);.void sql
28070 69 74 65 33 46 69 6e 69 73 68 43 6f 64 69 6e 67  ite3FinishCoding
28080 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71  (Parse*);.int sq
28090 6c 69 74 65 33 47 65 74 54 65 6d 70 52 65 67 28  lite3GetTempReg(
280a0 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
280b0 6c 69 74 65 33 52 65 6c 65 61 73 65 54 65 6d 70  lite3ReleaseTemp
280c0 52 65 67 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b  Reg(Parse*,int);
280d0 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54  .int sqlite3GetT
280e0 65 6d 70 52 61 6e 67 65 28 50 61 72 73 65 2a 2c  empRange(Parse*,
280f0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
28100 65 33 52 65 6c 65 61 73 65 54 65 6d 70 52 61 6e  e3ReleaseTempRan
28110 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 2c 69 6e  ge(Parse*,int,in
28120 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
28130 43 6c 65 61 72 54 65 6d 70 52 65 67 43 61 63 68  ClearTempRegCach
28140 65 28 50 61 72 73 65 2a 29 3b 0a 23 69 66 64 65  e(Parse*);.#ifde
28150 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 69  f SQLITE_DEBUG.i
28160 6e 74 20 73 71 6c 69 74 65 33 4e 6f 54 65 6d 70  nt sqlite3NoTemp
28170 73 49 6e 52 61 6e 67 65 28 50 61 72 73 65 2a 2c  sInRange(Parse*,
28180 69 6e 74 2c 69 6e 74 29 3b 0a 23 65 6e 64 69 66  int,int);.#endif
28190 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
281a0 70 72 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a  prAlloc(sqlite3*
281b0 2c 69 6e 74 2c 63 6f 6e 73 74 20 54 6f 6b 65 6e  ,int,const Token
281c0 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71  *,int);.Expr *sq
281d0 6c 69 74 65 33 45 78 70 72 28 73 71 6c 69 74 65  lite3Expr(sqlite
281e0 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61  3*,int,const cha
281f0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
28200 33 45 78 70 72 41 74 74 61 63 68 53 75 62 74 72  3ExprAttachSubtr
28210 65 65 73 28 73 71 6c 69 74 65 33 2a 2c 45 78 70  ees(sqlite3*,Exp
28220 72 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b  r*,Expr*,Expr*);
28230 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 50 45  .Expr *sqlite3PE
28240 78 70 72 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  xpr(Parse*, int,
28250 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a   Expr*, Expr*);.
28260 76 6f 69 64 20 73 71 6c 69 74 65 33 50 45 78 70  void sqlite3PExp
28270 72 41 64 64 53 65 6c 65 63 74 28 50 61 72 73 65  rAddSelect(Parse
28280 2a 2c 20 45 78 70 72 2a 2c 20 53 65 6c 65 63 74  *, Expr*, Select
28290 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  *);.Expr *sqlite
282a0 33 45 78 70 72 41 6e 64 28 73 71 6c 69 74 65 33  3ExprAnd(sqlite3
282b0 2a 2c 45 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b  *,Expr*, Expr*);
282c0 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
282d0 70 72 46 75 6e 63 74 69 6f 6e 28 50 61 72 73 65  prFunction(Parse
282e0 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b  *,ExprList*, Tok
282f0 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
28300 65 33 45 78 70 72 41 73 73 69 67 6e 56 61 72 4e  e3ExprAssignVarN
28310 75 6d 62 65 72 28 50 61 72 73 65 2a 2c 20 45 78  umber(Parse*, Ex
28320 70 72 2a 2c 20 75 33 32 29 3b 0a 76 6f 69 64 20  pr*, u32);.void 
28330 73 71 6c 69 74 65 33 45 78 70 72 44 65 6c 65 74  sqlite3ExprDelet
28340 65 28 73 71 6c 69 74 65 33 2a 2c 20 45 78 70 72  e(sqlite3*, Expr
28350 2a 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71  *);.ExprList *sq
28360 6c 69 74 65 33 45 78 70 72 4c 69 73 74 41 70 70  lite3ExprListApp
28370 65 6e 64 28 50 61 72 73 65 2a 2c 45 78 70 72 4c  end(Parse*,ExprL
28380 69 73 74 2a 2c 45 78 70 72 2a 29 3b 0a 45 78 70  ist*,Expr*);.Exp
28390 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78  rList *sqlite3Ex
283a0 70 72 4c 69 73 74 41 70 70 65 6e 64 56 65 63 74  prListAppendVect
283b0 6f 72 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69  or(Parse*,ExprLi
283c0 73 74 2a 2c 49 64 4c 69 73 74 2a 2c 45 78 70 72  st*,IdList*,Expr
283d0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
283e0 45 78 70 72 4c 69 73 74 53 65 74 53 6f 72 74 4f  ExprListSetSortO
283f0 72 64 65 72 28 45 78 70 72 4c 69 73 74 2a 2c 69  rder(ExprList*,i
28400 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
28410 33 45 78 70 72 4c 69 73 74 53 65 74 4e 61 6d 65  3ExprListSetName
28420 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74  (Parse*,ExprList
28430 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76  *,Token*,int);.v
28440 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c  oid sqlite3ExprL
28450 69 73 74 53 65 74 53 70 61 6e 28 50 61 72 73 65  istSetSpan(Parse
28460 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 63 6f 6e 73  *,ExprList*,cons
28470 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
28480 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
28490 65 33 45 78 70 72 4c 69 73 74 44 65 6c 65 74 65  e3ExprListDelete
284a0 28 73 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 4c  (sqlite3*, ExprL
284b0 69 73 74 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74  ist*);.u32 sqlit
284c0 65 33 45 78 70 72 4c 69 73 74 46 6c 61 67 73 28  e3ExprListFlags(
284d0 63 6f 6e 73 74 20 45 78 70 72 4c 69 73 74 2a 29  const ExprList*)
284e0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69  ;.int sqlite3Ini
284f0 74 28 73 71 6c 69 74 65 33 2a 2c 20 63 68 61 72  t(sqlite3*, char
28500 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  **);.int sqlite3
28510 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28 76 6f 69  InitCallback(voi
28520 64 2a 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2a 2c  d*, int, char**,
28530 20 63 68 61 72 2a 2a 29 3b 0a 76 6f 69 64 20 73   char**);.void s
28540 71 6c 69 74 65 33 50 72 61 67 6d 61 28 50 61 72  qlite3Pragma(Par
28550 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  se*,Token*,Token
28560 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 23  *,Token*,int);.#
28570 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
28580 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
28590 4d 6f 64 75 6c 65 20 2a 73 71 6c 69 74 65 33 50  Module *sqlite3P
285a0 72 61 67 6d 61 56 74 61 62 52 65 67 69 73 74 65  ragmaVtabRegiste
285b0 72 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  r(sqlite3*,const
285c0 20 63 68 61 72 20 2a 7a 4e 61 6d 65 29 3b 0a 23   char *zName);.#
285d0 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
285e0 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61  e3ResetAllSchema
285f0 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 73 71  sOfConnection(sq
28600 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71  lite3*);.void sq
28610 6c 69 74 65 33 52 65 73 65 74 4f 6e 65 53 63 68  lite3ResetOneSch
28620 65 6d 61 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  ema(sqlite3*,int
28630 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
28640 6f 6c 6c 61 70 73 65 44 61 74 61 62 61 73 65 41  ollapseDatabaseA
28650 72 72 61 79 28 73 71 6c 69 74 65 33 2a 29 3b 0a  rray(sqlite3*);.
28660 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d  void sqlite3Comm
28670 69 74 49 6e 74 65 72 6e 61 6c 43 68 61 6e 67 65  itInternalChange
28680 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69  s(sqlite3*);.voi
28690 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 43  d sqlite3DeleteC
286a0 6f 6c 75 6d 6e 4e 61 6d 65 73 28 73 71 6c 69 74  olumnNames(sqlit
286b0 65 33 2a 2c 54 61 62 6c 65 2a 29 3b 0a 69 6e 74  e3*,Table*);.int
286c0 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 73 46   sqlite3ColumnsF
286d0 72 6f 6d 45 78 70 72 4c 69 73 74 28 50 61 72 73  romExprList(Pars
286e0 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 31 36  e*,ExprList*,i16
286f0 2a 2c 43 6f 6c 75 6d 6e 2a 2a 29 3b 0a 76 6f 69  *,Column**);.voi
28700 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 41  d sqlite3SelectA
28710 64 64 43 6f 6c 75 6d 6e 54 79 70 65 41 6e 64 43  ddColumnTypeAndC
28720 6f 6c 6c 61 74 69 6f 6e 28 50 61 72 73 65 2a 2c  ollation(Parse*,
28730 54 61 62 6c 65 2a 2c 53 65 6c 65 63 74 2a 29 3b  Table*,Select*);
28740 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 52  .Table *sqlite3R
28750 65 73 75 6c 74 53 65 74 4f 66 53 65 6c 65 63 74  esultSetOfSelect
28760 28 50 61 72 73 65 2a 2c 53 65 6c 65 63 74 2a 29  (Parse*,Select*)
28770 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70  ;.void sqlite3Op
28780 65 6e 4d 61 73 74 65 72 54 61 62 6c 65 28 50 61  enMasterTable(Pa
28790 72 73 65 20 2a 2c 20 69 6e 74 29 3b 0a 49 6e 64  rse *, int);.Ind
287a0 65 78 20 2a 73 71 6c 69 74 65 33 50 72 69 6d 61  ex *sqlite3Prima
287b0 72 79 4b 65 79 49 6e 64 65 78 28 54 61 62 6c 65  ryKeyIndex(Table
287c0 2a 29 3b 0a 69 31 36 20 73 71 6c 69 74 65 33 43  *);.i16 sqlite3C
287d0 6f 6c 75 6d 6e 4f 66 49 6e 64 65 78 28 49 6e 64  olumnOfIndex(Ind
287e0 65 78 2a 2c 20 69 31 36 29 3b 0a 76 6f 69 64 20  ex*, i16);.void 
287f0 73 71 6c 69 74 65 33 53 74 61 72 74 54 61 62 6c  sqlite3StartTabl
28800 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c  e(Parse*,Token*,
28810 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 69  Token*,int,int,i
28820 6e 74 2c 69 6e 74 29 3b 0a 23 69 66 20 53 51 4c  nt,int);.#if SQL
28830 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49 44 44 45  ITE_ENABLE_HIDDE
28840 4e 5f 43 4f 4c 55 4d 4e 53 0a 20 20 76 6f 69 64  N_COLUMNS.  void
28850 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 50 72   sqlite3ColumnPr
28860 6f 70 65 72 74 69 65 73 46 72 6f 6d 4e 61 6d 65  opertiesFromName
28870 28 54 61 62 6c 65 2a 2c 20 43 6f 6c 75 6d 6e 2a  (Table*, Column*
28880 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
28890 65 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 50  e sqlite3ColumnP
288a0 72 6f 70 65 72 74 69 65 73 46 72 6f 6d 4e 61 6d  ropertiesFromNam
288b0 65 28 54 2c 43 29 20 2f 2a 20 6e 6f 2d 6f 70 20  e(T,C) /* no-op 
288c0 2a 2f 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  */.#endif.void s
288d0 71 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e 28  qlite3AddColumn(
288e0 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Parse*,Token*,To
288f0 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
28900 74 65 33 41 64 64 4e 6f 74 4e 75 6c 6c 28 50 61  te3AddNotNull(Pa
28910 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  rse*, int);.void
28920 20 73 71 6c 69 74 65 33 41 64 64 50 72 69 6d 61   sqlite3AddPrima
28930 72 79 4b 65 79 28 50 61 72 73 65 2a 2c 20 45 78  ryKey(Parse*, Ex
28940 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e  prList*, int, in
28950 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
28960 6c 69 74 65 33 41 64 64 43 68 65 63 6b 43 6f 6e  lite3AddCheckCon
28970 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20  straint(Parse*, 
28980 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
28990 69 74 65 33 41 64 64 44 65 66 61 75 6c 74 56 61  ite3AddDefaultVa
289a0 6c 75 65 28 50 61 72 73 65 2a 2c 45 78 70 72 2a  lue(Parse*,Expr*
289b0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e  ,const char*,con
289c0 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
289d0 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 6c 61 74  sqlite3AddCollat
289e0 65 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f  eType(Parse*, To
289f0 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
28a00 74 65 33 45 6e 64 54 61 62 6c 65 28 50 61 72 73  te3EndTable(Pars
28a10 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  e*,Token*,Token*
28a20 2c 75 38 2c 53 65 6c 65 63 74 2a 29 3b 0a 69 6e  ,u8,Select*);.in
28a30 74 20 73 71 6c 69 74 65 33 50 61 72 73 65 55 72  t sqlite3ParseUr
28a40 69 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  i(const char*,co
28a50 6e 73 74 20 63 68 61 72 2a 2c 75 6e 73 69 67 6e  nst char*,unsign
28a60 65 64 20 69 6e 74 2a 2c 0a 20 20 20 20 20 20 20  ed int*,.       
28a70 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c               sql
28a80 69 74 65 33 5f 76 66 73 2a 2a 2c 63 68 61 72 2a  ite3_vfs**,char*
28a90 2a 2c 63 68 61 72 20 2a 2a 29 3b 0a 42 74 72 65  *,char **);.Btre
28aa0 65 20 2a 73 71 6c 69 74 65 33 44 62 4e 61 6d 65  e *sqlite3DbName
28ab0 54 6f 42 74 72 65 65 28 73 71 6c 69 74 65 33 2a  ToBtree(sqlite3*
28ac0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 0a  ,const char*);..
28ad0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 4e  #ifdef SQLITE_UN
28ae0 54 45 53 54 41 42 4c 45 0a 23 20 64 65 66 69 6e  TESTABLE.# defin
28af0 65 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69  e sqlite3FaultSi
28b00 6d 28 58 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23  m(X) SQLITE_OK.#
28b10 65 6c 73 65 0a 20 20 69 6e 74 20 73 71 6c 69 74  else.  int sqlit
28b20 65 33 46 61 75 6c 74 53 69 6d 28 69 6e 74 29 3b  e3FaultSim(int);
28b30 0a 23 65 6e 64 69 66 0a 0a 42 69 74 76 65 63 20  .#endif..Bitvec 
28b40 2a 73 71 6c 69 74 65 33 42 69 74 76 65 63 43 72  *sqlite3BitvecCr
28b50 65 61 74 65 28 75 33 32 29 3b 0a 69 6e 74 20 73  eate(u32);.int s
28b60 71 6c 69 74 65 33 42 69 74 76 65 63 54 65 73 74  qlite3BitvecTest
28b70 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a  (Bitvec*, u32);.
28b80 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65  int sqlite3Bitve
28b90 63 54 65 73 74 4e 6f 74 4e 75 6c 6c 28 42 69 74  cTestNotNull(Bit
28ba0 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69 6e 74 20  vec*, u32);.int 
28bb0 73 71 6c 69 74 65 33 42 69 74 76 65 63 53 65 74  sqlite3BitvecSet
28bc0 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a  (Bitvec*, u32);.
28bd0 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69 74 76  void sqlite3Bitv
28be0 65 63 43 6c 65 61 72 28 42 69 74 76 65 63 2a 2c  ecClear(Bitvec*,
28bf0 20 75 33 32 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f   u32, void*);.vo
28c00 69 64 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  id sqlite3Bitvec
28c10 44 65 73 74 72 6f 79 28 42 69 74 76 65 63 2a 29  Destroy(Bitvec*)
28c20 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 42 69 74  ;.u32 sqlite3Bit
28c30 76 65 63 53 69 7a 65 28 42 69 74 76 65 63 2a 29  vecSize(Bitvec*)
28c40 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
28c50 5f 55 4e 54 45 53 54 41 42 4c 45 0a 69 6e 74 20  _UNTESTABLE.int 
28c60 73 71 6c 69 74 65 33 42 69 74 76 65 63 42 75 69  sqlite3BitvecBui
28c70 6c 74 69 6e 54 65 73 74 28 69 6e 74 2c 69 6e 74  ltinTest(int,int
28c80 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 52 6f 77 53  *);.#endif..RowS
28c90 65 74 20 2a 73 71 6c 69 74 65 33 52 6f 77 53 65  et *sqlite3RowSe
28ca0 74 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c 20  tInit(sqlite3*, 
28cb0 76 6f 69 64 2a 2c 20 75 6e 73 69 67 6e 65 64 20  void*, unsigned 
28cc0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
28cd0 65 33 52 6f 77 53 65 74 43 6c 65 61 72 28 52 6f  e3RowSetClear(Ro
28ce0 77 53 65 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  wSet*);.void sql
28cf0 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74  ite3RowSetInsert
28d00 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 29 3b 0a  (RowSet*, i64);.
28d10 69 6e 74 20 73 71 6c 69 74 65 33 52 6f 77 53 65  int sqlite3RowSe
28d20 74 54 65 73 74 28 52 6f 77 53 65 74 2a 2c 20 69  tTest(RowSet*, i
28d30 6e 74 20 69 42 61 74 63 68 2c 20 69 36 34 29 3b  nt iBatch, i64);
28d40 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f 77 53  .int sqlite3RowS
28d50 65 74 4e 65 78 74 28 52 6f 77 53 65 74 2a 2c 20  etNext(RowSet*, 
28d60 69 36 34 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c  i64*);..void sql
28d70 69 74 65 33 43 72 65 61 74 65 56 69 65 77 28 50  ite3CreateView(P
28d80 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  arse*,Token*,Tok
28d90 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c  en*,Token*,ExprL
28da0 69 73 74 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74  ist*,Select*,int
28db0 2c 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65 66  ,int);..#if !def
28dc0 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
28dd0 5f 56 49 45 57 29 20 7c 7c 20 21 64 65 66 69 6e  _VIEW) || !defin
28de0 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ed(SQLITE_OMIT_V
28df0 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 20 20 69  IRTUALTABLE).  i
28e00 6e 74 20 73 71 6c 69 74 65 33 56 69 65 77 47 65  nt sqlite3ViewGe
28e10 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 50 61 72  tColumnNames(Par
28e20 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23 65 6c  se*,Table*);.#el
28e30 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
28e40 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e  te3ViewGetColumn
28e50 4e 61 6d 65 73 28 41 2c 42 29 20 30 0a 23 65 6e  Names(A,B) 0.#en
28e60 64 69 66 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f  dif..#if SQLITE_
28e70 4d 41 58 5f 41 54 54 41 43 48 45 44 3e 33 30 0a  MAX_ATTACHED>30.
28e80 20 20 69 6e 74 20 73 71 6c 69 74 65 33 44 62 4d    int sqlite3DbM
28e90 61 73 6b 41 6c 6c 5a 65 72 6f 28 79 44 62 4d 61  askAllZero(yDbMa
28ea0 73 6b 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64  sk);.#endif.void
28eb0 20 73 71 6c 69 74 65 33 44 72 6f 70 54 61 62 6c   sqlite3DropTabl
28ec0 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  e(Parse*, SrcLis
28ed0 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  t*, int, int);.v
28ee0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 44  oid sqlite3CodeD
28ef0 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  ropTable(Parse*,
28f00 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
28f10 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
28f20 44 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69  DeleteTable(sqli
28f30 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 23  te3*, Table*);.#
28f40 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
28f50 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  IT_AUTOINCREMENT
28f60 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41  .  void sqlite3A
28f70 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67 69  utoincrementBegi
28f80 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29  n(Parse *pParse)
28f90 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
28fa0 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64  AutoincrementEnd
28fb0 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b  (Parse *pParse);
28fc0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
28fd0 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65  sqlite3Autoincre
28fe0 6d 65 6e 74 42 65 67 69 6e 28 58 29 0a 23 20 64  mentBegin(X).# d
28ff0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74  efine sqlite3Aut
29000 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28 58 29  oincrementEnd(X)
29010 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
29020 69 74 65 33 49 6e 73 65 72 74 28 50 61 72 73 65  ite3Insert(Parse
29030 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 53 65 6c  *, SrcList*, Sel
29040 65 63 74 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 69  ect*, IdList*, i
29050 6e 74 2c 20 55 70 73 65 72 74 2a 29 3b 0a 76 6f  nt, Upsert*);.vo
29060 69 64 20 2a 73 71 6c 69 74 65 33 41 72 72 61 79  id *sqlite3Array
29070 41 6c 6c 6f 63 61 74 65 28 73 71 6c 69 74 65 33  Allocate(sqlite3
29080 2a 2c 76 6f 69 64 2a 2c 69 6e 74 2c 69 6e 74 2a  *,void*,int,int*
29090 2c 69 6e 74 2a 29 3b 0a 49 64 4c 69 73 74 20 2a  ,int*);.IdList *
290a0 73 71 6c 69 74 65 33 49 64 4c 69 73 74 41 70 70  sqlite3IdListApp
290b0 65 6e 64 28 73 71 6c 69 74 65 33 2a 2c 20 49 64  end(sqlite3*, Id
290c0 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  List*, Token*);.
290d0 69 6e 74 20 73 71 6c 69 74 65 33 49 64 4c 69 73  int sqlite3IdLis
290e0 74 49 6e 64 65 78 28 49 64 4c 69 73 74 2a 2c 63  tIndex(IdList*,c
290f0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 53 72 63  onst char*);.Src
29100 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63  List *sqlite3Src
29110 4c 69 73 74 45 6e 6c 61 72 67 65 28 73 71 6c 69  ListEnlarge(sqli
29120 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  te3*, SrcList*, 
29130 69 6e 74 2c 20 69 6e 74 29 3b 0a 53 72 63 4c 69  int, int);.SrcLi
29140 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69  st *sqlite3SrcLi
29150 73 74 41 70 70 65 6e 64 28 73 71 6c 69 74 65 33  stAppend(sqlite3
29160 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b  *, SrcList*, Tok
29170 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 53 72  en*, Token*);.Sr
29180 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72  cList *sqlite3Sr
29190 63 4c 69 73 74 41 70 70 65 6e 64 46 72 6f 6d 54  cListAppendFromT
291a0 65 72 6d 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  erm(Parse*, SrcL
291b0 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  ist*, Token*, To
291c0 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  ken*,.          
291d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
291e0 20 20 20 20 20 20 20 20 20 20 20 20 54 6f 6b 65              Toke
291f0 6e 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78 70  n*, Select*, Exp
29200 72 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f  r*, IdList*);.vo
29210 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  id sqlite3SrcLis
29220 74 49 6e 64 65 78 65 64 42 79 28 50 61 72 73 65  tIndexedBy(Parse
29230 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 54   *, SrcList *, T
29240 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71  oken *);.void sq
29250 6c 69 74 65 33 53 72 63 4c 69 73 74 46 75 6e 63  lite3SrcListFunc
29260 41 72 67 73 28 50 61 72 73 65 2a 2c 20 53 72 63  Args(Parse*, Src
29270 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a  List*, ExprList*
29280 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e  );.int sqlite3In
29290 64 65 78 65 64 42 79 4c 6f 6f 6b 75 70 28 50 61  dexedByLookup(Pa
292a0 72 73 65 20 2a 2c 20 73 74 72 75 63 74 20 53 72  rse *, struct Sr
292b0 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 76  cList_item *);.v
292c0 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69  oid sqlite3SrcLi
292d0 73 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28  stShiftJoinType(
292e0 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20  SrcList*);.void 
292f0 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41 73  sqlite3SrcListAs
29300 73 69 67 6e 43 75 72 73 6f 72 73 28 50 61 72 73  signCursors(Pars
29310 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 76  e*, SrcList*);.v
29320 6f 69 64 20 73 71 6c 69 74 65 33 49 64 4c 69 73  oid sqlite3IdLis
29330 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a  tDelete(sqlite3*
29340 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64  , IdList*);.void
29350 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 44   sqlite3SrcListD
29360 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  elete(sqlite3*, 
29370 53 72 63 4c 69 73 74 2a 29 3b 0a 49 6e 64 65 78  SrcList*);.Index
29380 20 2a 73 71 6c 69 74 65 33 41 6c 6c 6f 63 61 74   *sqlite3Allocat
29390 65 49 6e 64 65 78 4f 62 6a 65 63 74 28 73 71 6c  eIndexObject(sql
293a0 69 74 65 33 2a 2c 69 31 36 2c 69 6e 74 2c 63 68  ite3*,i16,int,ch
293b0 61 72 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ar**);.void sqli
293c0 74 65 33 43 72 65 61 74 65 49 6e 64 65 78 28 50  te3CreateIndex(P
293d0 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  arse*,Token*,Tok
293e0 65 6e 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70  en*,SrcList*,Exp
293f0 72 4c 69 73 74 2a 2c 69 6e 74 2c 54 6f 6b 65 6e  rList*,int,Token
29400 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
29410 20 20 20 20 20 20 20 20 20 20 20 20 20 45 78 70               Exp
29420 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38  r*, int, int, u8
29430 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
29440 72 6f 70 49 6e 64 65 78 28 50 61 72 73 65 2a 2c  ropIndex(Parse*,
29450 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b   SrcList*, int);
29460 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65  .int sqlite3Sele
29470 63 74 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63  ct(Parse*, Selec
29480 74 2a 2c 20 53 65 6c 65 63 74 44 65 73 74 2a 29  t*, SelectDest*)
29490 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69 74 65  ;.Select *sqlite
294a0 33 53 65 6c 65 63 74 4e 65 77 28 50 61 72 73 65  3SelectNew(Parse
294b0 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53 72 63 4c  *,ExprList*,SrcL
294c0 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c  ist*,Expr*,ExprL
294d0 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  ist*,.          
294e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45                 E
294f0 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75  xpr*,ExprList*,u
29500 33 32 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  32,Expr*);.void 
29510 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 65 6c  sqlite3SelectDel
29520 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 65  ete(sqlite3*, Se
29530 6c 65 63 74 2a 29 3b 0a 54 61 62 6c 65 20 2a 73  lect*);.Table *s
29540 71 6c 69 74 65 33 53 72 63 4c 69 73 74 4c 6f 6f  qlite3SrcListLoo
29550 6b 75 70 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  kup(Parse*, SrcL
29560 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
29570 65 33 49 73 52 65 61 64 4f 6e 6c 79 28 50 61 72  e3IsReadOnly(Par
29580 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
29590 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f  );.void sqlite3O
295a0 70 65 6e 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  penTable(Parse*,
295b0 20 69 6e 74 20 69 43 75 72 2c 20 69 6e 74 20 69   int iCur, int i
295c0 44 62 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29  Db, Table*, int)
295d0 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ;.#if defined(SQ
295e0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41  LITE_ENABLE_UPDA
295f0 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54 29  TE_DELETE_LIMIT)
29600 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
29610 49 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52  ITE_OMIT_SUBQUER
29620 59 29 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  Y).Expr *sqlite3
29630 4c 69 6d 69 74 57 68 65 72 65 28 50 61 72 73 65  LimitWhere(Parse
29640 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a  *,SrcList*,Expr*
29650 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a  ,ExprList*,Expr*
29660 2c 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a  ,char*);.#endif.
29670 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65  void sqlite3Dele
29680 74 65 46 72 6f 6d 28 50 61 72 73 65 2a 2c 20 53  teFrom(Parse*, S
29690 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20  rcList*, Expr*, 
296a0 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a  ExprList*, Expr*
296b0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55  );.void sqlite3U
296c0 70 64 61 74 65 28 50 61 72 73 65 2a 2c 20 53 72  pdate(Parse*, Sr
296d0 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74  cList*, ExprList
296e0 2a 2c 45 78 70 72 2a 2c 69 6e 74 2c 45 78 70 72  *,Expr*,int,Expr
296f0 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 0a 20 20 20  List*,Expr*,.   
29700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29710 55 70 73 65 72 74 2a 29 3b 0a 57 68 65 72 65 49  Upsert*);.WhereI
29720 6e 66 6f 20 2a 73 71 6c 69 74 65 33 57 68 65 72  nfo *sqlite3Wher
29730 65 42 65 67 69 6e 28 50 61 72 73 65 2a 2c 53 72  eBegin(Parse*,Sr
29740 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70  cList*,Expr*,Exp
29750 72 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a  rList*,ExprList*
29760 2c 75 31 36 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  ,u16,int);.void 
29770 73 71 6c 69 74 65 33 57 68 65 72 65 45 6e 64 28  sqlite3WhereEnd(
29780 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 4c 6f 67  WhereInfo*);.Log
29790 45 73 74 20 73 71 6c 69 74 65 33 57 68 65 72 65  Est sqlite3Where
297a0 4f 75 74 70 75 74 52 6f 77 43 6f 75 6e 74 28 57  OutputRowCount(W
297b0 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
297c0 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 44 69  sqlite3WhereIsDi
297d0 73 74 69 6e 63 74 28 57 68 65 72 65 49 6e 66 6f  stinct(WhereInfo
297e0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
297f0 68 65 72 65 49 73 4f 72 64 65 72 65 64 28 57 68  hereIsOrdered(Wh
29800 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73  ereInfo*);.int s
29810 71 6c 69 74 65 33 57 68 65 72 65 4f 72 64 65 72  qlite3WhereOrder
29820 65 64 49 6e 6e 65 72 4c 6f 6f 70 28 57 68 65 72  edInnerLoop(Wher
29830 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c  eInfo*);.int sql
29840 69 74 65 33 57 68 65 72 65 49 73 53 6f 72 74 65  ite3WhereIsSorte
29850 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69  d(WhereInfo*);.i
29860 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 43  nt sqlite3WhereC
29870 6f 6e 74 69 6e 75 65 4c 61 62 65 6c 28 57 68 65  ontinueLabel(Whe
29880 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
29890 6c 69 74 65 33 57 68 65 72 65 42 72 65 61 6b 4c  lite3WhereBreakL
298a0 61 62 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29  abel(WhereInfo*)
298b0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65  ;.int sqlite3Whe
298c0 72 65 4f 6b 4f 6e 65 50 61 73 73 28 57 68 65 72  reOkOnePass(Wher
298d0 65 49 6e 66 6f 2a 2c 20 69 6e 74 2a 29 3b 0a 23  eInfo*, int*);.#
298e0 64 65 66 69 6e 65 20 4f 4e 45 50 41 53 53 5f 4f  define ONEPASS_O
298f0 46 46 20 20 20 20 20 20 30 20 20 20 20 20 20 20  FF      0       
29900 20 2f 2a 20 55 73 65 20 6f 66 20 4f 4e 45 50 41   /* Use of ONEPA
29910 53 53 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 2a  SS not allowed *
29920 2f 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50 41 53  /.#define ONEPAS
29930 53 5f 53 49 4e 47 4c 45 20 20 20 31 20 20 20 20  S_SINGLE   1    
29940 20 20 20 20 2f 2a 20 4f 4e 45 50 41 53 53 20 76      /* ONEPASS v
29950 61 6c 69 64 20 66 6f 72 20 61 20 73 69 6e 67 6c  alid for a singl
29960 65 20 72 6f 77 20 75 70 64 61 74 65 20 2a 2f 0a  e row update */.
29970 23 64 65 66 69 6e 65 20 4f 4e 45 50 41 53 53 5f  #define ONEPASS_
29980 4d 55 4c 54 49 20 20 20 20 32 20 20 20 20 20 20  MULTI    2      
29990 20 20 2f 2a 20 4f 4e 45 50 41 53 53 20 69 73 20    /* ONEPASS is 
299a0 76 61 6c 69 64 20 66 6f 72 20 6d 75 6c 74 69 70  valid for multip
299b0 6c 65 20 72 6f 77 73 20 2a 2f 0a 76 6f 69 64 20  le rows */.void 
299c0 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 4c  sqlite3ExprCodeL
299d0 6f 61 64 49 6e 64 65 78 43 6f 6c 75 6d 6e 28 50  oadIndexColumn(P
299e0 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20 69  arse*, Index*, i
299f0 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69  nt, int, int);.i
29a00 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
29a10 64 65 47 65 74 43 6f 6c 75 6d 6e 28 50 61 72 73  deGetColumn(Pars
29a20 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c  e*, Table*, int,
29a30 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a   int, int, u8);.
29a40 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
29a50 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 54 6f 52  CodeGetColumnToR
29a60 65 67 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  eg(Parse*, Table
29a70 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
29a80 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
29a90 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e  xprCodeGetColumn
29aa0 4f 66 54 61 62 6c 65 28 56 64 62 65 2a 2c 20 54  OfTable(Vdbe*, T
29ab0 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  able*, int, int,
29ac0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
29ad0 74 65 33 45 78 70 72 43 6f 64 65 4d 6f 76 65 28  te3ExprCodeMove(
29ae0 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Parse*, int, int
29af0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
29b00 69 74 65 33 45 78 70 72 43 61 63 68 65 53 74 6f  ite3ExprCacheSto
29b10 72 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  re(Parse*, int, 
29b20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
29b30 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65  sqlite3ExprCache
29b40 50 75 73 68 28 50 61 72 73 65 2a 29 3b 0a 76 6f  Push(Parse*);.vo
29b50 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61  id sqlite3ExprCa
29b60 63 68 65 50 6f 70 28 50 61 72 73 65 2a 29 3b 0a  chePop(Parse*);.
29b70 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
29b80 43 61 63 68 65 52 65 6d 6f 76 65 28 50 61 72 73  CacheRemove(Pars
29b90 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  e*, int, int);.v
29ba0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
29bb0 61 63 68 65 43 6c 65 61 72 28 50 61 72 73 65 2a  acheClear(Parse*
29bc0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
29bd0 78 70 72 43 61 63 68 65 41 66 66 69 6e 69 74 79  xprCacheAffinity
29be0 43 68 61 6e 67 65 28 50 61 72 73 65 2a 2c 20 69  Change(Parse*, i
29bf0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
29c00 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 28 50  qlite3ExprCode(P
29c10 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
29c20 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
29c30 45 78 70 72 43 6f 64 65 43 6f 70 79 28 50 61 72  ExprCodeCopy(Par
29c40 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  se*, Expr*, int)
29c50 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
29c60 70 72 43 6f 64 65 46 61 63 74 6f 72 61 62 6c 65  prCodeFactorable
29c70 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
29c80 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
29c90 33 45 78 70 72 43 6f 64 65 41 74 49 6e 69 74 28  3ExprCodeAtInit(
29ca0 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
29cb0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
29cc0 45 78 70 72 43 6f 64 65 54 65 6d 70 28 50 61 72  ExprCodeTemp(Par
29cd0 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2a  se*, Expr*, int*
29ce0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
29cf0 70 72 43 6f 64 65 54 61 72 67 65 74 28 50 61 72  prCodeTarget(Par
29d00 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  se*, Expr*, int)
29d10 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
29d20 70 72 43 6f 64 65 41 6e 64 43 61 63 68 65 28 50  prCodeAndCache(P
29d30 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
29d40 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  t);.int sqlite3E
29d50 78 70 72 43 6f 64 65 45 78 70 72 4c 69 73 74 28  xprCodeExprList(
29d60 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74  Parse*, ExprList
29d70 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29  *, int, int, u8)
29d80 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  ;.#define SQLITE
29d90 5f 45 43 45 4c 5f 44 55 50 20 20 20 20 20 20 30  _ECEL_DUP      0
29da0 78 30 31 20 20 2f 2a 20 44 65 65 70 2c 20 6e 6f  x01  /* Deep, no
29db0 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70 69 65 73  t shallow copies
29dc0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
29dd0 54 45 5f 45 43 45 4c 5f 46 41 43 54 4f 52 20 20  TE_ECEL_FACTOR  
29de0 20 30 78 30 32 20 20 2f 2a 20 46 61 63 74 6f 72   0x02  /* Factor
29df0 20 6f 75 74 20 63 6f 6e 73 74 61 6e 74 20 74 65   out constant te
29e00 72 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  rms */.#define S
29e10 51 4c 49 54 45 5f 45 43 45 4c 5f 52 45 46 20 20  QLITE_ECEL_REF  
29e20 20 20 20 20 30 78 30 34 20 20 2f 2a 20 55 73 65      0x04  /* Use
29e30 20 45 78 70 72 4c 69 73 74 2e 75 2e 78 2e 69 4f   ExprList.u.x.iO
29e40 72 64 65 72 42 79 43 6f 6c 20 2a 2f 0a 23 64 65  rderByCol */.#de
29e50 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c  fine SQLITE_ECEL
29e60 5f 4f 4d 49 54 52 45 46 20 20 30 78 30 38 20 20  _OMITREF  0x08  
29e70 2f 2a 20 4f 6d 69 74 20 69 66 20 45 78 70 72 4c  /* Omit if ExprL
29e80 69 73 74 2e 75 2e 78 2e 69 4f 72 64 65 72 42 79  ist.u.x.iOrderBy
29e90 43 6f 6c 20 2a 2f 0a 76 6f 69 64 20 73 71 6c 69  Col */.void sqli
29ea0 74 65 33 45 78 70 72 49 66 54 72 75 65 28 50 61  te3ExprIfTrue(Pa
29eb0 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
29ec0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
29ed0 69 74 65 33 45 78 70 72 49 66 46 61 6c 73 65 28  ite3ExprIfFalse(
29ee0 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
29ef0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
29f00 71 6c 69 74 65 33 45 78 70 72 49 66 46 61 6c 73  qlite3ExprIfFals
29f10 65 44 75 70 28 50 61 72 73 65 2a 2c 20 45 78 70  eDup(Parse*, Exp
29f20 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 54  r*, int, int);.T
29f30 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 46 69 6e  able *sqlite3Fin
29f40 64 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c  dTable(sqlite3*,
29f50 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
29f60 73 74 20 63 68 61 72 2a 29 3b 0a 23 64 65 66 69  st char*);.#defi
29f70 6e 65 20 4c 4f 43 41 54 45 5f 56 49 45 57 20 20  ne LOCATE_VIEW  
29f80 20 20 30 78 30 31 0a 23 64 65 66 69 6e 65 20 4c    0x01.#define L
29f90 4f 43 41 54 45 5f 4e 4f 45 52 52 20 20 20 30 78  OCATE_NOERR   0x
29fa0 30 32 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65  02.Table *sqlite
29fb0 33 4c 6f 63 61 74 65 54 61 62 6c 65 28 50 61 72  3LocateTable(Par
29fc0 73 65 2a 2c 75 33 32 20 66 6c 61 67 73 2c 63 6f  se*,u32 flags,co
29fd0 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
29fe0 20 63 68 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a   char*);.Table *
29ff0 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62  sqlite3LocateTab
2a000 6c 65 49 74 65 6d 28 50 61 72 73 65 2a 2c 75 33  leItem(Parse*,u3
2a010 32 20 66 6c 61 67 73 2c 73 74 72 75 63 74 20 53  2 flags,struct S
2a020 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a  rcList_item *);.
2a030 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 46 69  Index *sqlite3Fi
2a040 6e 64 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a  ndIndex(sqlite3*
2a050 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f  ,const char*, co
2a060 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
2a070 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e   sqlite3UnlinkAn
2a080 64 44 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c  dDeleteTable(sql
2a090 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  ite3*,int,const 
2a0a0 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
2a0b0 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c  ite3UnlinkAndDel
2a0c0 65 74 65 49 6e 64 65 78 28 73 71 6c 69 74 65 33  eteIndex(sqlite3
2a0d0 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
2a0e0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2a0f0 56 61 63 75 75 6d 28 50 61 72 73 65 2a 2c 54 6f  Vacuum(Parse*,To
2a100 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
2a110 65 33 52 75 6e 56 61 63 75 75 6d 28 63 68 61 72  e3RunVacuum(char
2a120 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 69 6e  **, sqlite3*, in
2a130 74 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  t);.char *sqlite
2a140 33 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 73  3NameFromToken(s
2a150 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29  qlite3*, Token*)
2a160 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
2a170 72 43 6f 6d 70 61 72 65 28 50 61 72 73 65 2a 2c  rCompare(Parse*,
2a180 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  Expr*, Expr*, in
2a190 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  t);.int sqlite3E
2a1a0 78 70 72 43 6f 6d 70 61 72 65 53 6b 69 70 28 45  xprCompareSkip(E
2a1b0 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  xpr*, Expr*, int
2a1c0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
2a1d0 70 72 4c 69 73 74 43 6f 6d 70 61 72 65 28 45 78  prListCompare(Ex
2a1e0 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73  prList*, ExprLis
2a1f0 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  t*, int);.int sq
2a200 6c 69 74 65 33 45 78 70 72 49 6d 70 6c 69 65 73  lite3ExprImplies
2a210 45 78 70 72 28 50 61 72 73 65 2a 2c 45 78 70 72  Expr(Parse*,Expr
2a220 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
2a230 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49  int sqlite3ExprI
2a240 6d 70 6c 69 65 73 4e 6f 6e 4e 75 6c 6c 52 6f 77  mpliesNonNullRow
2a250 28 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69  (Expr*,int);.voi
2a260 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e 61  d sqlite3ExprAna
2a270 6c 79 7a 65 41 67 67 72 65 67 61 74 65 73 28 4e  lyzeAggregates(N
2a280 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70  ameContext*, Exp
2a290 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
2a2a0 33 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67 4c  3ExprAnalyzeAggL
2a2b0 69 73 74 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a  ist(NameContext*
2a2c0 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74  ,ExprList*);.int
2a2d0 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 76 65   sqlite3ExprCove
2a2e0 72 65 64 42 79 49 6e 64 65 78 28 45 78 70 72 2a  redByIndex(Expr*
2a2f0 2c 20 69 6e 74 20 69 43 75 72 2c 20 49 6e 64 65  , int iCur, Inde
2a300 78 20 2a 70 49 64 78 29 3b 0a 69 6e 74 20 73 71  x *pIdx);.int sq
2a310 6c 69 74 65 33 46 75 6e 63 74 69 6f 6e 55 73 65  lite3FunctionUse
2a320 73 54 68 69 73 53 72 63 28 45 78 70 72 2a 2c 20  sThisSrc(Expr*, 
2a330 53 72 63 4c 69 73 74 2a 29 3b 0a 56 64 62 65 20  SrcList*);.Vdbe 
2a340 2a 73 71 6c 69 74 65 33 47 65 74 56 64 62 65 28  *sqlite3GetVdbe(
2a350 50 61 72 73 65 2a 29 3b 0a 23 69 66 6e 64 65 66  Parse*);.#ifndef
2a360 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42   SQLITE_UNTESTAB
2a370 4c 45 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  LE.void sqlite3P
2a380 72 6e 67 53 61 76 65 53 74 61 74 65 28 76 6f 69  rngSaveState(voi
2a390 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  d);.void sqlite3
2a3a0 50 72 6e 67 52 65 73 74 6f 72 65 53 74 61 74 65  PrngRestoreState
2a3b0 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 76  (void);.#endif.v
2a3c0 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62  oid sqlite3Rollb
2a3d0 61 63 6b 41 6c 6c 28 73 71 6c 69 74 65 33 2a 2c  ackAll(sqlite3*,
2a3e0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2a3f0 65 33 43 6f 64 65 56 65 72 69 66 79 53 63 68 65  e3CodeVerifySche
2a400 6d 61 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b  ma(Parse*, int);
2a410 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64  .void sqlite3Cod
2a420 65 56 65 72 69 66 79 4e 61 6d 65 64 53 63 68 65  eVerifyNamedSche
2a430 6d 61 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74  ma(Parse*, const
2a440 20 63 68 61 72 20 2a 7a 44 62 29 3b 0a 76 6f 69   char *zDb);.voi
2a450 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 54 72  d sqlite3BeginTr
2a460 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a  ansaction(Parse*
2a470 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
2a480 69 74 65 33 45 6e 64 54 72 61 6e 73 61 63 74 69  ite3EndTransacti
2a490 6f 6e 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a  on(Parse*,int);.
2a4a0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 61 76 65  void sqlite3Save
2a4b0 70 6f 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e  point(Parse*, in
2a4c0 74 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  t, Token*);.void
2a4d0 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 53 61 76   sqlite3CloseSav
2a4e0 65 70 6f 69 6e 74 73 28 73 71 6c 69 74 65 33 20  epoints(sqlite3 
2a4f0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2a500 4c 65 61 76 65 4d 75 74 65 78 41 6e 64 43 6c 6f  LeaveMutexAndClo
2a510 73 65 5a 6f 6d 62 69 65 28 73 71 6c 69 74 65 33  seZombie(sqlite3
2a520 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
2a530 78 70 72 49 64 54 6f 54 72 75 65 46 61 6c 73 65  xprIdToTrueFalse
2a540 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  (Expr*);.int sql
2a550 69 74 65 33 45 78 70 72 54 72 75 74 68 56 61 6c  ite3ExprTruthVal
2a560 75 65 28 63 6f 6e 73 74 20 45 78 70 72 2a 29 3b  ue(const Expr*);
2a570 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
2a580 49 73 43 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a  IsConstant(Expr*
2a590 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
2a5a0 70 72 49 73 43 6f 6e 73 74 61 6e 74 4e 6f 74 4a  prIsConstantNotJ
2a5b0 6f 69 6e 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20  oin(Expr*);.int 
2a5c0 73 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e  sqlite3ExprIsCon
2a5d0 73 74 61 6e 74 4f 72 46 75 6e 63 74 69 6f 6e 28  stantOrFunction(
2a5e0 45 78 70 72 2a 2c 20 75 38 29 3b 0a 69 6e 74 20  Expr*, u8);.int 
2a5f0 73 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e  sqlite3ExprIsCon
2a600 73 74 61 6e 74 4f 72 47 72 6f 75 70 42 79 28 50  stantOrGroupBy(P
2a610 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 45 78  arse*, Expr*, Ex
2a620 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  prList*);.int sq
2a630 6c 69 74 65 33 45 78 70 72 49 73 54 61 62 6c 65  lite3ExprIsTable
2a640 43 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a 2c 69  Constant(Expr*,i
2a650 6e 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  nt);.#ifdef SQLI
2a660 54 45 5f 45 4e 41 42 4c 45 5f 43 55 52 53 4f 52  TE_ENABLE_CURSOR
2a670 5f 48 49 4e 54 53 0a 69 6e 74 20 73 71 6c 69 74  _HINTS.int sqlit
2a680 65 33 45 78 70 72 43 6f 6e 74 61 69 6e 73 53 75  e3ExprContainsSu
2a690 62 71 75 65 72 79 28 45 78 70 72 2a 29 3b 0a 23  bquery(Expr*);.#
2a6a0 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65  endif.int sqlite
2a6b0 33 45 78 70 72 49 73 49 6e 74 65 67 65 72 28 45  3ExprIsInteger(E
2a6c0 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74  xpr*, int*);.int
2a6d0 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 6e 42   sqlite3ExprCanB
2a6e0 65 4e 75 6c 6c 28 63 6f 6e 73 74 20 45 78 70 72  eNull(const Expr
2a6f0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
2a700 78 70 72 4e 65 65 64 73 4e 6f 41 66 66 69 6e 69  xprNeedsNoAffini
2a710 74 79 43 68 61 6e 67 65 28 63 6f 6e 73 74 20 45  tyChange(const E
2a720 78 70 72 2a 2c 20 63 68 61 72 29 3b 0a 69 6e 74  xpr*, char);.int
2a730 20 73 71 6c 69 74 65 33 49 73 52 6f 77 69 64 28   sqlite3IsRowid(
2a740 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
2a750 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61  id sqlite3Genera
2a760 74 65 52 6f 77 44 65 6c 65 74 65 28 0a 20 20 20  teRowDelete(.   
2a770 20 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 54   Parse*,Table*,T
2a780 72 69 67 67 65 72 2a 2c 69 6e 74 2c 69 6e 74 2c  rigger*,int,int,
2a790 69 6e 74 2c 69 31 36 2c 75 38 2c 75 38 2c 75 38  int,i16,u8,u8,u8
2a7a0 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
2a7b0 74 65 33 47 65 6e 65 72 61 74 65 52 6f 77 49 6e  te3GenerateRowIn
2a7c0 64 65 78 44 65 6c 65 74 65 28 50 61 72 73 65 2a  dexDelete(Parse*
2a7d0 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69  , Table*, int, i
2a7e0 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a  nt, int*, int);.
2a7f0 69 6e 74 20 73 71 6c 69 74 65 33 47 65 6e 65 72  int sqlite3Gener
2a800 61 74 65 49 6e 64 65 78 4b 65 79 28 50 61 72 73  ateIndexKey(Pars
2a810 65 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74 2c  e*, Index*, int,
2a820 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c   int, int, int*,
2a830 49 6e 64 65 78 2a 2c 69 6e 74 29 3b 0a 76 6f 69  Index*,int);.voi
2a840 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65  d sqlite3Resolve
2a850 50 61 72 74 49 64 78 4c 61 62 65 6c 28 50 61 72  PartIdxLabel(Par
2a860 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  se*,int);.void s
2a870 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 43 6f  qlite3GenerateCo
2a880 6e 73 74 72 61 69 6e 74 43 68 65 63 6b 73 28 50  nstraintChecks(P
2a890 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74  arse*,Table*,int
2a8a0 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e  *,int,int,int,in
2a8b0 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t,.             
2a8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a8d0 20 20 20 20 20 20 20 20 75 38 2c 75 38 2c 69 6e          u8,u8,in
2a8e0 74 2c 69 6e 74 2a 2c 69 6e 74 2a 2c 55 70 73 65  t,int*,int*,Upse
2a8f0 72 74 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  rt*);.#ifdef SQL
2a900 49 54 45 5f 45 4e 41 42 4c 45 5f 4e 55 4c 4c 5f  ITE_ENABLE_NULL_
2a910 54 52 49 4d 0a 20 20 76 6f 69 64 20 73 71 6c 69  TRIM.  void sqli
2a920 74 65 33 53 65 74 4d 61 6b 65 52 65 63 6f 72 64  te3SetMakeRecord
2a930 50 35 28 56 64 62 65 2a 2c 54 61 62 6c 65 2a 29  P5(Vdbe*,Table*)
2a940 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
2a950 20 73 71 6c 69 74 65 33 53 65 74 4d 61 6b 65 52   sqlite3SetMakeR
2a960 65 63 6f 72 64 50 35 28 41 2c 42 29 0a 23 65 6e  ecordP5(A,B).#en
2a970 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
2a980 43 6f 6d 70 6c 65 74 65 49 6e 73 65 72 74 69 6f  CompleteInsertio
2a990 6e 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c  n(Parse*,Table*,
2a9a0 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2a  int,int,int,int*
2a9b0 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a 69  ,int,int,int);.i
2a9c0 6e 74 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61  nt sqlite3OpenTa
2a9d0 62 6c 65 41 6e 64 49 6e 64 69 63 65 73 28 50 61  bleAndIndices(Pa
2a9e0 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
2a9f0 74 2c 20 75 38 2c 20 69 6e 74 2c 20 75 38 2a 2c  t, u8, int, u8*,
2aa00 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 76 6f   int*, int*);.vo
2aa10 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 57  id sqlite3BeginW
2aa20 72 69 74 65 4f 70 65 72 61 74 69 6f 6e 28 50 61  riteOperation(Pa
2aa30 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  rse*, int, int);
2aa40 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 75 6c  .void sqlite3Mul
2aa50 74 69 57 72 69 74 65 28 50 61 72 73 65 2a 29 3b  tiWrite(Parse*);
2aa60 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 79  .void sqlite3May
2aa70 41 62 6f 72 74 28 50 61 72 73 65 2a 29 3b 0a 76  Abort(Parse*);.v
2aa80 6f 69 64 20 73 71 6c 69 74 65 33 48 61 6c 74 43  oid sqlite3HaltC
2aa90 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a  onstraint(Parse*
2aaa0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 63 68 61 72  , int, int, char
2aab0 2a 2c 20 69 38 2c 20 75 38 29 3b 0a 76 6f 69 64  *, i8, u8);.void
2aac0 20 73 71 6c 69 74 65 33 55 6e 69 71 75 65 43 6f   sqlite3UniqueCo
2aad0 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c  nstraint(Parse*,
2aae0 20 69 6e 74 2c 20 49 6e 64 65 78 2a 29 3b 0a 76   int, Index*);.v
2aaf0 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77 69 64  oid sqlite3Rowid
2ab00 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65  Constraint(Parse
2ab10 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65 2a 29 3b  *, int, Table*);
2ab20 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
2ab30 70 72 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 45  prDup(sqlite3*,E
2ab40 78 70 72 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 4c  xpr*,int);.ExprL
2ab50 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72  ist *sqlite3Expr
2ab60 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a  ListDup(sqlite3*
2ab70 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 29 3b  ,ExprList*,int);
2ab80 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65  .SrcList *sqlite
2ab90 33 53 72 63 4c 69 73 74 44 75 70 28 73 71 6c 69  3SrcListDup(sqli
2aba0 74 65 33 2a 2c 53 72 63 4c 69 73 74 2a 2c 69 6e  te3*,SrcList*,in
2abb0 74 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69  t);.IdList *sqli
2abc0 74 65 33 49 64 4c 69 73 74 44 75 70 28 73 71 6c  te3IdListDup(sql
2abd0 69 74 65 33 2a 2c 49 64 4c 69 73 74 2a 29 3b 0a  ite3*,IdList*);.
2abe0 53 65 6c 65 63 74 20 2a 73 71 6c 69 74 65 33 53  Select *sqlite3S
2abf0 65 6c 65 63 74 44 75 70 28 73 71 6c 69 74 65 33  electDup(sqlite3
2ac00 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 29 3b 0a  *,Select*,int);.
2ac10 23 69 66 20 53 45 4c 45 43 54 54 52 41 43 45 5f  #if SELECTTRACE_
2ac20 45 4e 41 42 4c 45 44 0a 76 6f 69 64 20 73 71 6c  ENABLED.void sql
2ac30 69 74 65 33 53 65 6c 65 63 74 53 65 74 4e 61 6d  ite3SelectSetNam
2ac40 65 28 53 65 6c 65 63 74 2a 2c 63 6f 6e 73 74 20  e(Select*,const 
2ac50 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20  char*);.#else.# 
2ac60 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 65  define sqlite3Se
2ac70 6c 65 63 74 53 65 74 4e 61 6d 65 28 41 2c 42 29  lectSetName(A,B)
2ac80 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
2ac90 69 74 65 33 49 6e 73 65 72 74 42 75 69 6c 74 69  ite3InsertBuilti
2aca0 6e 46 75 6e 63 73 28 46 75 6e 63 44 65 66 2a 2c  nFuncs(FuncDef*,
2acb0 69 6e 74 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73  int);.FuncDef *s
2acc0 71 6c 69 74 65 33 46 69 6e 64 46 75 6e 63 74 69  qlite3FindFuncti
2acd0 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  on(sqlite3*,cons
2ace0 74 20 63 68 61 72 2a 2c 69 6e 74 2c 75 38 2c 75  t char*,int,u8,u
2acf0 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  8);.void sqlite3
2ad00 52 65 67 69 73 74 65 72 42 75 69 6c 74 69 6e 46  RegisterBuiltinF
2ad10 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a  unctions(void);.
2ad20 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69  void sqlite3Regi
2ad30 73 74 65 72 44 61 74 65 54 69 6d 65 46 75 6e 63  sterDateTimeFunc
2ad40 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69  tions(void);.voi
2ad50 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65  d sqlite3Registe
2ad60 72 50 65 72 43 6f 6e 6e 65 63 74 69 6f 6e 42 75  rPerConnectionBu
2ad70 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 28 73  iltinFunctions(s
2ad80 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71  qlite3*);.int sq
2ad90 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b  lite3SafetyCheck
2ada0 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e  Ok(sqlite3*);.in
2adb0 74 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43  t sqlite3SafetyC
2adc0 68 65 63 6b 53 69 63 6b 4f 72 4f 6b 28 73 71 6c  heckSickOrOk(sql
2add0 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
2ade0 69 74 65 33 43 68 61 6e 67 65 43 6f 6f 6b 69 65  ite3ChangeCookie
2adf0 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 0a  (Parse*, int);..
2ae00 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
2ae10 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20 26  ITE_OMIT_VIEW) &
2ae20 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
2ae30 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a  E_OMIT_TRIGGER).
2ae40 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 74 65  void sqlite3Mate
2ae50 72 69 61 6c 69 7a 65 56 69 65 77 28 50 61 72 73  rializeView(Pars
2ae60 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72  e*, Table*, Expr
2ae70 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 45 78 70  *, ExprList*,Exp
2ae80 72 2a 2c 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a  r*,int);.#endif.
2ae90 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2aea0 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 20 20 76  OMIT_TRIGGER.  v
2aeb0 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e  oid sqlite3Begin
2aec0 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20  Trigger(Parse*, 
2aed0 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e  Token*,Token*,in
2aee0 74 2c 69 6e 74 2c 49 64 4c 69 73 74 2a 2c 53 72  t,int,IdList*,Sr
2aef0 63 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20  cList*,.        
2af00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2af10 20 20 20 45 78 70 72 2a 2c 69 6e 74 2c 20 69 6e     Expr*,int, in
2af20 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  t);.  void sqlit
2af30 65 33 46 69 6e 69 73 68 54 72 69 67 67 65 72 28  e3FinishTrigger(
2af40 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 53  Parse*, TriggerS
2af50 74 65 70 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 20  tep*, Token*);. 
2af60 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f   void sqlite3Dro
2af70 70 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c  pTrigger(Parse*,
2af80 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b   SrcList*, int);
2af90 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44  .  void sqlite3D
2afa0 72 6f 70 54 72 69 67 67 65 72 50 74 72 28 50 61  ropTriggerPtr(Pa
2afb0 72 73 65 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b  rse*, Trigger*);
2afc0 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69  .  Trigger *sqli
2afd0 74 65 33 54 72 69 67 67 65 72 73 45 78 69 73 74  te3TriggersExist
2afe0 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65 2a  (Parse *, Table*
2aff0 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a  , int, ExprList*
2b000 2c 20 69 6e 74 20 2a 70 4d 61 73 6b 29 3b 0a 20  , int *pMask);. 
2b010 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69 74 65   Trigger *sqlite
2b020 33 54 72 69 67 67 65 72 4c 69 73 74 28 50 61 72  3TriggerList(Par
2b030 73 65 20 2a 2c 20 54 61 62 6c 65 20 2a 29 3b 0a  se *, Table *);.
2b040 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f    void sqlite3Co
2b050 64 65 52 6f 77 54 72 69 67 67 65 72 28 50 61 72  deRowTrigger(Par
2b060 73 65 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c 20  se*, Trigger *, 
2b070 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  int, ExprList*, 
2b080 69 6e 74 2c 20 54 61 62 6c 65 20 2a 2c 0a 20 20  int, Table *,.  
2b090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b0a0 20 20 20 20 20 20 20 20 20 20 69 6e 74 2c 20 69            int, i
2b0b0 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  nt, int);.  void
2b0c0 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54   sqlite3CodeRowT
2b0d0 72 69 67 67 65 72 44 69 72 65 63 74 28 50 61 72  riggerDirect(Par
2b0e0 73 65 20 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c  se *, Trigger *,
2b0f0 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69   Table *, int, i
2b100 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  nt, int);.  void
2b110 20 73 71 6c 69 74 65 56 69 65 77 54 72 69 67 67   sqliteViewTrigg
2b120 65 72 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ers(Parse*, Tabl
2b130 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20  e*, Expr*, int, 
2b140 45 78 70 72 4c 69 73 74 2a 29 3b 0a 20 20 76 6f  ExprList*);.  vo
2b150 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  id sqlite3Delete
2b160 54 72 69 67 67 65 72 53 74 65 70 28 73 71 6c 69  TriggerStep(sqli
2b170 74 65 33 2a 2c 20 54 72 69 67 67 65 72 53 74 65  te3*, TriggerSte
2b180 70 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74  p*);.  TriggerSt
2b190 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67  ep *sqlite3Trigg
2b1a0 65 72 53 65 6c 65 63 74 53 74 65 70 28 73 71 6c  erSelectStep(sql
2b1b0 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 2c 0a 20  ite3*,Select*,. 
2b1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b1e0 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61         const cha
2b1f0 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  r*,const char*);
2b200 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
2b210 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 49 6e  sqlite3TriggerIn
2b220 73 65 72 74 53 74 65 70 28 73 71 6c 69 74 65 33  sertStep(sqlite3
2b230 2a 2c 54 6f 6b 65 6e 2a 2c 20 49 64 4c 69 73 74  *,Token*, IdList
2b240 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
2b250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b260 20 20 20 20 20 20 20 20 20 20 20 53 65 6c 65 63             Selec
2b270 74 2a 2c 75 38 2c 55 70 73 65 72 74 2a 2c 0a 20  t*,u8,Upsert*,. 
2b280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b2a0 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61         const cha
2b2b0 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  r*,const char*);
2b2c0 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
2b2d0 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 55 70  sqlite3TriggerUp
2b2e0 64 61 74 65 53 74 65 70 28 73 71 6c 69 74 65 33  dateStep(sqlite3
2b2f0 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73  *,Token*,ExprLis
2b300 74 2a 2c 20 45 78 70 72 2a 2c 20 75 38 2c 0a 20  t*, Expr*, u8,. 
2b310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b330 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61         const cha
2b340 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  r*,const char*);
2b350 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
2b360 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 44 65  sqlite3TriggerDe
2b370 6c 65 74 65 53 74 65 70 28 73 71 6c 69 74 65 33  leteStep(sqlite3
2b380 2a 2c 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 2a 2c  *,Token*, Expr*,
2b390 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b3b0 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63           const c
2b3c0 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
2b3d0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
2b3e0 33 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 73  3DeleteTrigger(s
2b3f0 71 6c 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72  qlite3*, Trigger
2b400 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
2b410 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
2b420 65 54 72 69 67 67 65 72 28 73 71 6c 69 74 65 33  eTrigger(sqlite3
2b430 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
2b440 2a 29 3b 0a 20 20 75 33 32 20 73 71 6c 69 74 65  *);.  u32 sqlite
2b450 33 54 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28  3TriggerColmask(
2b460 50 61 72 73 65 2a 2c 54 72 69 67 67 65 72 2a 2c  Parse*,Trigger*,
2b470 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 69 6e  ExprList*,int,in
2b480 74 2c 54 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 23  t,Table*,int);.#
2b490 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 50   define sqlite3P
2b4a0 61 72 73 65 54 6f 70 6c 65 76 65 6c 28 70 29 20  arseToplevel(p) 
2b4b0 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20  ((p)->pToplevel 
2b4c0 3f 20 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c  ? (p)->pToplevel
2b4d0 20 3a 20 28 70 29 29 0a 23 20 64 65 66 69 6e 65   : (p)).# define
2b4e0 20 73 71 6c 69 74 65 33 49 73 54 6f 70 6c 65 76   sqlite3IsToplev
2b4f0 65 6c 28 70 29 20 28 28 70 29 2d 3e 70 54 6f 70  el(p) ((p)->pTop
2b500 6c 65 76 65 6c 3d 3d 30 29 0a 23 65 6c 73 65 0a  level==0).#else.
2b510 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2b520 54 72 69 67 67 65 72 73 45 78 69 73 74 28 42 2c  TriggersExist(B,
2b530 43 2c 44 2c 45 2c 46 29 20 30 0a 23 20 64 65 66  C,D,E,F) 0.# def
2b540 69 6e 65 20 73 71 6c 69 74 65 33 44 65 6c 65 74  ine sqlite3Delet
2b550 65 54 72 69 67 67 65 72 28 41 2c 42 29 0a 23 20  eTrigger(A,B).# 
2b560 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 44 72  define sqlite3Dr
2b570 6f 70 54 72 69 67 67 65 72 50 74 72 28 41 2c 42  opTriggerPtr(A,B
2b580 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
2b590 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
2b5a0 65 54 72 69 67 67 65 72 28 41 2c 42 2c 43 29 0a  eTrigger(A,B,C).
2b5b0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2b5c0 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 28 41  CodeRowTrigger(A
2b5d0 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 2c 48 2c 49  ,B,C,D,E,F,G,H,I
2b5e0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
2b5f0 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72  e3CodeRowTrigger
2b600 44 69 72 65 63 74 28 41 2c 42 2c 43 2c 44 2c 45  Direct(A,B,C,D,E
2b610 2c 46 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,F).# define sql
2b620 69 74 65 33 54 72 69 67 67 65 72 4c 69 73 74 28  ite3TriggerList(
2b630 58 2c 20 59 29 20 30 0a 23 20 64 65 66 69 6e 65  X, Y) 0.# define
2b640 20 73 71 6c 69 74 65 33 50 61 72 73 65 54 6f 70   sqlite3ParseTop
2b650 6c 65 76 65 6c 28 70 29 20 70 0a 23 20 64 65 66  level(p) p.# def
2b660 69 6e 65 20 73 71 6c 69 74 65 33 49 73 54 6f 70  ine sqlite3IsTop
2b670 6c 65 76 65 6c 28 70 29 20 31 0a 23 20 64 65 66  level(p) 1.# def
2b680 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67 67  ine sqlite3Trigg
2b690 65 72 43 6f 6c 6d 61 73 6b 28 41 2c 42 2c 43 2c  erColmask(A,B,C,
2b6a0 44 2c 45 2c 46 2c 47 29 20 30 0a 23 65 6e 64 69  D,E,F,G) 0.#endi
2b6b0 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f  f..int sqlite3Jo
2b6c0 69 6e 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54  inType(Parse*, T
2b6d0 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  oken*, Token*, T
2b6e0 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
2b6f0 69 74 65 33 43 72 65 61 74 65 46 6f 72 65 69 67  ite3CreateForeig
2b700 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20 45 78 70  nKey(Parse*, Exp
2b710 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  rList*, Token*, 
2b720 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b  ExprList*, int);
2b730 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 66  .void sqlite3Def
2b740 65 72 46 6f 72 65 69 67 6e 4b 65 79 28 50 61 72  erForeignKey(Par
2b750 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 6e 64  se*, int);.#ifnd
2b760 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
2b770 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 76  UTHORIZATION.  v
2b780 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 52  oid sqlite3AuthR
2b790 65 61 64 28 50 61 72 73 65 2a 2c 45 78 70 72 2a  ead(Parse*,Expr*
2b7a0 2c 53 63 68 65 6d 61 2a 2c 53 72 63 4c 69 73 74  ,Schema*,SrcList
2b7b0 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  *);.  int sqlite
2b7c0 33 41 75 74 68 43 68 65 63 6b 28 50 61 72 73 65  3AuthCheck(Parse
2b7d0 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61  *,int, const cha
2b7e0 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  r*, const char*,
2b7f0 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20   const char*);. 
2b800 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74   void sqlite3Aut
2b810 68 43 6f 6e 74 65 78 74 50 75 73 68 28 50 61 72  hContextPush(Par
2b820 73 65 2a 2c 20 41 75 74 68 43 6f 6e 74 65 78 74  se*, AuthContext
2b830 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
2b840 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41  .  void sqlite3A
2b850 75 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 41 75  uthContextPop(Au
2b860 74 68 43 6f 6e 74 65 78 74 2a 29 3b 0a 20 20 69  thContext*);.  i
2b870 6e 74 20 73 71 6c 69 74 65 33 41 75 74 68 52 65  nt sqlite3AuthRe
2b880 61 64 43 6f 6c 28 50 61 72 73 65 2a 2c 20 63 6f  adCol(Parse*, co
2b890 6e 73 74 20 63 68 61 72 20 2a 2c 20 63 6f 6e 73  nst char *, cons
2b8a0 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a  t char *, int);.
2b8b0 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
2b8c0 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 28 61  qlite3AuthRead(a
2b8d0 2c 62 2c 63 2c 64 29 0a 23 20 64 65 66 69 6e 65  ,b,c,d).# define
2b8e0 20 73 71 6c 69 74 65 33 41 75 74 68 43 68 65 63   sqlite3AuthChec
2b8f0 6b 28 61 2c 62 2c 63 2c 64 2c 65 29 20 20 20 20  k(a,b,c,d,e)    
2b900 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 64 65 66 69  SQLITE_OK.# defi
2b910 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f  ne sqlite3AuthCo
2b920 6e 74 65 78 74 50 75 73 68 28 61 2c 62 2c 63 29  ntextPush(a,b,c)
2b930 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2b940 33 41 75 74 68 43 6f 6e 74 65 78 74 50 6f 70 28  3AuthContextPop(
2b950 61 29 20 20 28 28 76 6f 69 64 29 28 61 29 29 0a  a)  ((void)(a)).
2b960 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
2b970 74 65 33 41 74 74 61 63 68 28 50 61 72 73 65 2a  te3Attach(Parse*
2b980 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20  , Expr*, Expr*, 
2b990 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
2b9a0 69 74 65 33 44 65 74 61 63 68 28 50 61 72 73 65  ite3Detach(Parse
2b9b0 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  *, Expr*);.void 
2b9c0 73 71 6c 69 74 65 33 46 69 78 49 6e 69 74 28 44  sqlite3FixInit(D
2b9d0 62 46 69 78 65 72 2a 2c 20 50 61 72 73 65 2a 2c  bFixer*, Parse*,
2b9e0 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72   int, const char
2b9f0 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29  *, const Token*)
2ba00 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78  ;.int sqlite3Fix
2ba10 53 72 63 4c 69 73 74 28 44 62 46 69 78 65 72 2a  SrcList(DbFixer*
2ba20 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74  , SrcList*);.int
2ba30 20 73 71 6c 69 74 65 33 46 69 78 53 65 6c 65 63   sqlite3FixSelec
2ba40 74 28 44 62 46 69 78 65 72 2a 2c 20 53 65 6c 65  t(DbFixer*, Sele
2ba50 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ct*);.int sqlite
2ba60 33 46 69 78 45 78 70 72 28 44 62 46 69 78 65 72  3FixExpr(DbFixer
2ba70 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  *, Expr*);.int s
2ba80 71 6c 69 74 65 33 46 69 78 45 78 70 72 4c 69 73  qlite3FixExprLis
2ba90 74 28 44 62 46 69 78 65 72 2a 2c 20 45 78 70 72  t(DbFixer*, Expr
2baa0 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
2bab0 74 65 33 46 69 78 54 72 69 67 67 65 72 53 74 65  te3FixTriggerSte
2bac0 70 28 44 62 46 69 78 65 72 2a 2c 20 54 72 69 67  p(DbFixer*, Trig
2bad0 67 65 72 53 74 65 70 2a 29 3b 0a 69 6e 74 20 73  gerStep*);.int s
2bae0 71 6c 69 74 65 33 41 74 6f 46 28 63 6f 6e 73 74  qlite3AtoF(const
2baf0 20 63 68 61 72 20 2a 7a 2c 20 64 6f 75 62 6c 65   char *z, double
2bb00 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74  *, int, u8);.int
2bb10 20 73 71 6c 69 74 65 33 47 65 74 49 6e 74 33 32   sqlite3GetInt32
2bb20 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69  (const char *, i
2bb30 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  nt*);.int sqlite
2bb40 33 41 74 6f 69 28 63 6f 6e 73 74 20 63 68 61 72  3Atoi(const char
2bb50 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  *);.#ifndef SQLI
2bb60 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 69 6e  TE_OMIT_UTF16.in
2bb70 74 20 73 71 6c 69 74 65 33 55 74 66 31 36 42 79  t sqlite3Utf16By
2bb80 74 65 4c 65 6e 28 63 6f 6e 73 74 20 76 6f 69 64  teLen(const void
2bb90 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e 43 68   *pData, int nCh
2bba0 61 72 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20  ar);.#endif.int 
2bbb0 73 71 6c 69 74 65 33 55 74 66 38 43 68 61 72 4c  sqlite3Utf8CharL
2bbc0 65 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 70  en(const char *p
2bbd0 44 61 74 61 2c 20 69 6e 74 20 6e 42 79 74 65 29  Data, int nByte)
2bbe0 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 55 74 66  ;.u32 sqlite3Utf
2bbf0 38 52 65 61 64 28 63 6f 6e 73 74 20 75 38 2a 2a  8Read(const u8**
2bc00 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65  );.LogEst sqlite
2bc10 33 4c 6f 67 45 73 74 28 75 36 34 29 3b 0a 4c 6f  3LogEst(u64);.Lo
2bc20 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45  gEst sqlite3LogE
2bc30 73 74 41 64 64 28 4c 6f 67 45 73 74 2c 4c 6f 67  stAdd(LogEst,Log
2bc40 45 73 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  Est);.#ifndef SQ
2bc50 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
2bc60 4c 54 41 42 4c 45 0a 4c 6f 67 45 73 74 20 73 71  LTABLE.LogEst sq
2bc70 6c 69 74 65 33 4c 6f 67 45 73 74 46 72 6f 6d 44  lite3LogEstFromD
2bc80 6f 75 62 6c 65 28 64 6f 75 62 6c 65 29 3b 0a 23  ouble(double);.#
2bc90 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65  endif.#if define
2bca0 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
2bcb0 53 54 4d 54 5f 53 43 41 4e 53 54 41 54 55 53 29  STMT_SCANSTATUS)
2bcc0 20 7c 7c 20 5c 0a 20 20 20 20 64 65 66 69 6e 65   || \.    define
2bcd0 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
2bce0 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 29 20  STAT3_OR_STAT4) 
2bcf0 7c 7c 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64  || \.    defined
2bd00 28 53 51 4c 49 54 45 5f 45 58 50 4c 41 49 4e 5f  (SQLITE_EXPLAIN_
2bd10 45 53 54 49 4d 41 54 45 44 5f 52 4f 57 53 29 0a  ESTIMATED_ROWS).
2bd20 75 36 34 20 73 71 6c 69 74 65 33 4c 6f 67 45 73  u64 sqlite3LogEs
2bd30 74 54 6f 49 6e 74 28 4c 6f 67 45 73 74 29 3b 0a  tToInt(LogEst);.
2bd40 23 65 6e 64 69 66 0a 56 4c 69 73 74 20 2a 73 71  #endif.VList *sq
2bd50 6c 69 74 65 33 56 4c 69 73 74 41 64 64 28 73 71  lite3VListAdd(sq
2bd60 6c 69 74 65 33 2a 2c 56 4c 69 73 74 2a 2c 63 6f  lite3*,VList*,co
2bd70 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 2c 69 6e  nst char*,int,in
2bd80 74 29 3b 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a  t);.const char *
2bd90 73 71 6c 69 74 65 33 56 4c 69 73 74 4e 75 6d 54  sqlite3VListNumT
2bda0 6f 4e 61 6d 65 28 56 4c 69 73 74 2a 2c 69 6e 74  oName(VList*,int
2bdb0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 4c  );.int sqlite3VL
2bdc0 69 73 74 4e 61 6d 65 54 6f 4e 75 6d 28 56 4c 69  istNameToNum(VLi
2bdd0 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  st*,const char*,
2bde0 69 6e 74 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75  int);../*.** Rou
2bdf0 74 69 6e 65 73 20 74 6f 20 72 65 61 64 20 61 6e  tines to read an
2be00 64 20 77 72 69 74 65 20 76 61 72 69 61 62 6c 65  d write variable
2be10 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72 73  -length integers
2be20 2e 20 20 54 68 65 73 65 20 75 73 65 64 20 74 6f  .  These used to
2be30 0a 2a 2a 20 62 65 20 64 65 66 69 6e 65 64 20 6c  .** be defined l
2be40 6f 63 61 6c 6c 79 2c 20 62 75 74 20 6e 6f 77 20  ocally, but now 
2be50 77 65 20 75 73 65 20 74 68 65 20 76 61 72 69 6e  we use the varin
2be60 74 20 72 6f 75 74 69 6e 65 73 20 69 6e 20 74 68  t routines in th
2be70 65 20 75 74 69 6c 2e 63 0a 2a 2a 20 66 69 6c 65  e util.c.** file
2be80 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
2be90 50 75 74 56 61 72 69 6e 74 28 75 6e 73 69 67 6e  PutVarint(unsign
2bea0 65 64 20 63 68 61 72 2a 2c 20 75 36 34 29 3b 0a  ed char*, u64);.
2beb0 75 38 20 73 71 6c 69 74 65 33 47 65 74 56 61 72  u8 sqlite3GetVar
2bec0 69 6e 74 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e  int(const unsign
2bed0 65 64 20 63 68 61 72 20 2a 2c 20 75 36 34 20 2a  ed char *, u64 *
2bee0 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74  );.u8 sqlite3Get
2bef0 56 61 72 69 6e 74 33 32 28 63 6f 6e 73 74 20 75  Varint32(const u
2bf00 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20  nsigned char *, 
2bf10 75 33 32 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  u32 *);.int sqli
2bf20 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 75 36 34  te3VarintLen(u64
2bf30 20 76 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20   v);../*.** The 
2bf40 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 69 73 20 66  common case is f
2bf50 6f 72 20 61 20 76 61 72 69 6e 74 20 74 6f 20 62  or a varint to b
2bf60 65 20 61 20 73 69 6e 67 6c 65 20 62 79 74 65 2e  e a single byte.
2bf70 20 20 54 68 65 79 20 66 6f 6c 6c 6f 77 69 6e 67    They following
2bf80 0a 2a 2a 20 6d 61 63 72 6f 73 20 68 61 6e 64 6c  .** macros handl
2bf90 65 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73  e the common cas
2bfa0 65 20 77 69 74 68 6f 75 74 20 61 20 70 72 6f 63  e without a proc
2bfb0 65 64 75 72 65 20 63 61 6c 6c 2c 20 62 75 74 20  edure call, but 
2bfc0 74 68 65 6e 20 63 61 6c 6c 0a 2a 2a 20 74 68 65  then call.** the
2bfd0 20 70 72 6f 63 65 64 75 72 65 20 66 6f 72 20 6c   procedure for l
2bfe0 61 72 67 65 72 20 76 61 72 69 6e 74 73 2e 0a 2a  arger varints..*
2bff0 2f 0a 23 64 65 66 69 6e 65 20 67 65 74 56 61 72  /.#define getVar
2c000 69 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a 20 20  int32(A,B)  \.  
2c010 28 75 38 29 28 28 2a 28 41 29 3c 28 75 38 29 30  (u8)((*(A)<(u8)0
2c020 78 38 30 29 3f 28 28 42 29 3d 28 75 33 32 29 2a  x80)?((B)=(u32)*
2c030 28 41 29 29 2c 31 3a 73 71 6c 69 74 65 33 47 65  (A)),1:sqlite3Ge
2c040 74 56 61 72 69 6e 74 33 32 28 28 41 29 2c 28 75  tVarint32((A),(u
2c050 33 32 20 2a 29 26 28 42 29 29 29 0a 23 64 65 66  32 *)&(B))).#def
2c060 69 6e 65 20 70 75 74 56 61 72 69 6e 74 33 32 28  ine putVarint32(
2c070 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29 28 28  A,B)  \.  (u8)((
2c080 28 75 33 32 29 28 42 29 3c 28 75 33 32 29 30 78  (u32)(B)<(u32)0x
2c090 38 30 29 3f 28 2a 28 41 29 3d 28 75 6e 73 69 67  80)?(*(A)=(unsig
2c0a0 6e 65 64 20 63 68 61 72 29 28 42 29 29 2c 31 3a  ned char)(B)),1:
2c0b0 5c 0a 20 20 73 71 6c 69 74 65 33 50 75 74 56 61  \.  sqlite3PutVa
2c0c0 72 69 6e 74 28 28 41 29 2c 28 42 29 29 29 0a 23  rint((A),(B))).#
2c0d0 64 65 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74  define getVarint
2c0e0 20 20 20 20 73 71 6c 69 74 65 33 47 65 74 56 61      sqlite3GetVa
2c0f0 72 69 6e 74 0a 23 64 65 66 69 6e 65 20 70 75 74  rint.#define put
2c100 56 61 72 69 6e 74 20 20 20 20 73 71 6c 69 74 65  Varint    sqlite
2c110 33 50 75 74 56 61 72 69 6e 74 0a 0a 0a 63 6f 6e  3PutVarint...con
2c120 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33  st char *sqlite3
2c130 49 6e 64 65 78 41 66 66 69 6e 69 74 79 53 74 72  IndexAffinityStr
2c140 28 73 71 6c 69 74 65 33 2a 2c 20 49 6e 64 65 78  (sqlite3*, Index
2c150 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2c160 54 61 62 6c 65 41 66 66 69 6e 69 74 79 28 56 64  TableAffinity(Vd
2c170 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  be*, Table*, int
2c180 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33 43  );.char sqlite3C
2c190 6f 6d 70 61 72 65 41 66 66 69 6e 69 74 79 28 45  ompareAffinity(E
2c1a0 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72  xpr *pExpr, char
2c1b0 20 61 66 66 32 29 3b 0a 69 6e 74 20 73 71 6c 69   aff2);.int sqli
2c1c0 74 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79  te3IndexAffinity
2c1d0 4f 6b 28 45 78 70 72 20 2a 70 45 78 70 72 2c 20  Ok(Expr *pExpr, 
2c1e0 63 68 61 72 20 69 64 78 5f 61 66 66 69 6e 69 74  char idx_affinit
2c1f0 79 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33  y);.char sqlite3
2c200 54 61 62 6c 65 43 6f 6c 75 6d 6e 41 66 66 69 6e  TableColumnAffin
2c210 69 74 79 28 54 61 62 6c 65 2a 2c 69 6e 74 29 3b  ity(Table*,int);
2c220 0a 63 68 61 72 20 73 71 6c 69 74 65 33 45 78 70  .char sqlite3Exp
2c230 72 41 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a  rAffinity(Expr *
2c240 70 45 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69  pExpr);.int sqli
2c250 74 65 33 41 74 6f 69 36 34 28 63 6f 6e 73 74 20  te3Atoi64(const 
2c260 63 68 61 72 2a 2c 20 69 36 34 2a 2c 20 69 6e 74  char*, i64*, int
2c270 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74  , u8);.int sqlit
2c280 65 33 44 65 63 4f 72 48 65 78 54 6f 49 36 34 28  e3DecOrHexToI64(
2c290 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 36 34  const char*, i64
2c2a0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2c2b0 45 72 72 6f 72 57 69 74 68 4d 73 67 28 73 71 6c  ErrorWithMsg(sql
2c2c0 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73  ite3*, int, cons
2c2d0 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f  t char*,...);.vo
2c2e0 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28  id sqlite3Error(
2c2f0 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76  sqlite3*,int);.v
2c300 6f 69 64 20 73 71 6c 69 74 65 33 53 79 73 74 65  oid sqlite3Syste
2c310 6d 45 72 72 6f 72 28 73 71 6c 69 74 65 33 2a 2c  mError(sqlite3*,
2c320 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  int);.void *sqli
2c330 74 65 33 48 65 78 54 6f 42 6c 6f 62 28 73 71 6c  te3HexToBlob(sql
2c340 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61  ite3*, const cha
2c350 72 20 2a 7a 2c 20 69 6e 74 20 6e 29 3b 0a 75 38  r *z, int n);.u8
2c360 20 73 71 6c 69 74 65 33 48 65 78 54 6f 49 6e 74   sqlite3HexToInt
2c370 28 69 6e 74 20 68 29 3b 0a 69 6e 74 20 73 71 6c  (int h);.int sql
2c380 69 74 65 33 54 77 6f 50 61 72 74 4e 61 6d 65 28  ite3TwoPartName(
2c390 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a  Parse *, Token *
2c3a0 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e  , Token *, Token
2c3b0 20 2a 2a 29 3b 0a 0a 23 69 66 20 64 65 66 69 6e   **);..#if defin
2c3c0 65 64 28 53 51 4c 49 54 45 5f 4e 45 45 44 5f 45  ed(SQLITE_NEED_E
2c3d0 52 52 5f 4e 41 4d 45 29 0a 63 6f 6e 73 74 20 63  RR_NAME).const c
2c3e0 68 61 72 20 2a 73 71 6c 69 74 65 33 45 72 72 4e  har *sqlite3ErrN
2c3f0 61 6d 65 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66  ame(int);.#endif
2c400 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
2c410 45 4e 41 42 4c 45 5f 44 45 53 45 52 49 41 4c 49  ENABLE_DESERIALI
2c420 5a 45 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 65  ZE.int sqlite3Me
2c430 6d 64 62 49 6e 69 74 28 76 6f 69 64 29 3b 0a 23  mdbInit(void);.#
2c440 65 6e 64 69 66 0a 0a 63 6f 6e 73 74 20 63 68 61  endif..const cha
2c450 72 20 2a 73 71 6c 69 74 65 33 45 72 72 53 74 72  r *sqlite3ErrStr
2c460 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74  (int);.int sqlit
2c470 65 33 52 65 61 64 53 63 68 65 6d 61 28 50 61 72  e3ReadSchema(Par
2c480 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 43 6f 6c  se *pParse);.Col
2c490 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 46 69 6e  lSeq *sqlite3Fin
2c4a0 64 43 6f 6c 6c 53 65 71 28 73 71 6c 69 74 65 33  dCollSeq(sqlite3
2c4b0 2a 2c 75 38 20 65 6e 63 2c 20 63 6f 6e 73 74 20  *,u8 enc, const 
2c4c0 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 43 6f 6c 6c  char*,int);.Coll
2c4d0 53 65 71 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61  Seq *sqlite3Loca
2c4e0 74 65 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20  teCollSeq(Parse 
2c4f0 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73 74 20 63  *pParse, const c
2c500 68 61 72 2a 7a 4e 61 6d 65 29 3b 0a 43 6f 6c 6c  har*zName);.Coll
2c510 53 65 71 20 2a 73 71 6c 69 74 65 33 45 78 70 72  Seq *sqlite3Expr
2c520 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70  CollSeq(Parse *p
2c530 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70 45 78  Parse, Expr *pEx
2c540 70 72 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71  pr);.CollSeq *sq
2c550 6c 69 74 65 33 45 78 70 72 4e 4e 43 6f 6c 6c 53  lite3ExprNNCollS
2c560 65 71 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  eq(Parse *pParse
2c570 2c 20 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a  , Expr *pExpr);.
2c580 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
2c590 6f 6c 6c 53 65 71 4d 61 74 63 68 28 50 61 72 73  ollSeqMatch(Pars
2c5a0 65 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b  e*,Expr*,Expr*);
2c5b0 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
2c5c0 70 72 41 64 64 43 6f 6c 6c 61 74 65 54 6f 6b 65  prAddCollateToke
2c5d0 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c  n(Parse *pParse,
2c5e0 20 45 78 70 72 2a 2c 20 63 6f 6e 73 74 20 54 6f   Expr*, const To
2c5f0 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 45 78 70 72  ken*, int);.Expr
2c600 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 64 64   *sqlite3ExprAdd
2c610 43 6f 6c 6c 61 74 65 53 74 72 69 6e 67 28 50 61  CollateString(Pa
2c620 72 73 65 2a 2c 45 78 70 72 2a 2c 63 6f 6e 73 74  rse*,Expr*,const
2c630 20 63 68 61 72 2a 29 3b 0a 45 78 70 72 20 2a 73   char*);.Expr *s
2c640 71 6c 69 74 65 33 45 78 70 72 53 6b 69 70 43 6f  qlite3ExprSkipCo
2c650 6c 6c 61 74 65 28 45 78 70 72 2a 29 3b 0a 69 6e  llate(Expr*);.in
2c660 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 43 6f  t sqlite3CheckCo
2c670 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c 20 43  llSeq(Parse *, C
2c680 6f 6c 6c 53 65 71 20 2a 29 3b 0a 69 6e 74 20 73  ollSeq *);.int s
2c690 71 6c 69 74 65 33 43 68 65 63 6b 4f 62 6a 65 63  qlite3CheckObjec
2c6a0 74 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c 20 63  tName(Parse *, c
2c6b0 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 76 6f  onst char *);.vo
2c6c0 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  id sqlite3VdbeSe
2c6d0 74 43 68 61 6e 67 65 73 28 73 71 6c 69 74 65 33  tChanges(sqlite3
2c6e0 20 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71   *, int);.int sq
2c6f0 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28 69 36  lite3AddInt64(i6
2c700 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c  4*,i64);.int sql
2c710 69 74 65 33 53 75 62 49 6e 74 36 34 28 69 36 34  ite3SubInt64(i64
2c720 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69  *,i64);.int sqli
2c730 74 65 33 4d 75 6c 49 6e 74 36 34 28 69 36 34 2a  te3MulInt64(i64*
2c740 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ,i64);.int sqlit
2c750 65 33 41 62 73 49 6e 74 33 32 28 69 6e 74 29 3b  e3AbsInt32(int);
2c760 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
2c770 4e 41 42 4c 45 5f 38 5f 33 5f 4e 41 4d 45 53 0a  NABLE_8_3_NAMES.
2c780 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6c 65  void sqlite3File
2c790 53 75 66 66 69 78 33 28 63 6f 6e 73 74 20 63 68  Suffix3(const ch
2c7a0 61 72 2a 2c 20 63 68 61 72 2a 29 3b 0a 23 65 6c  ar*, char*);.#el
2c7b0 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
2c7c0 74 65 33 46 69 6c 65 53 75 66 66 69 78 33 28 58  te3FileSuffix3(X
2c7d0 2c 59 29 0a 23 65 6e 64 69 66 0a 75 38 20 73 71  ,Y).#endif.u8 sq
2c7e0 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28  lite3GetBoolean(
2c7f0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 75 38  const char *z,u8
2c800 29 3b 0a 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a  );..const void *
2c810 73 71 6c 69 74 65 33 56 61 6c 75 65 54 65 78 74  sqlite3ValueText
2c820 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c  (sqlite3_value*,
2c830 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65   u8);.int sqlite
2c840 33 56 61 6c 75 65 42 79 74 65 73 28 73 71 6c 69  3ValueBytes(sqli
2c850 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b  te3_value*, u8);
2c860 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c  .void sqlite3Val
2c870 75 65 53 65 74 53 74 72 28 73 71 6c 69 74 65 33  ueSetStr(sqlite3
2c880 5f 76 61 6c 75 65 2a 2c 20 69 6e 74 2c 20 63 6f  _value*, int, co
2c890 6e 73 74 20 76 6f 69 64 20 2a 2c 75 38 2c 0a 20  nst void *,u8,. 
2c8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c8b0 20 20 20 20 20 20 20 76 6f 69 64 28 2a 29 28 76         void(*)(v
2c8c0 6f 69 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c  oid*));.void sql
2c8d0 69 74 65 33 56 61 6c 75 65 53 65 74 4e 75 6c 6c  ite3ValueSetNull
2c8e0 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29  (sqlite3_value*)
2c8f0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61  ;.void sqlite3Va
2c900 6c 75 65 46 72 65 65 28 73 71 6c 69 74 65 33 5f  lueFree(sqlite3_
2c910 76 61 6c 75 65 2a 29 3b 0a 73 71 6c 69 74 65 33  value*);.sqlite3
2c920 5f 76 61 6c 75 65 20 2a 73 71 6c 69 74 65 33 56  _value *sqlite3V
2c930 61 6c 75 65 4e 65 77 28 73 71 6c 69 74 65 33 20  alueNew(sqlite3 
2c940 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  *);.#ifndef SQLI
2c950 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 63 68  TE_OMIT_UTF16.ch
2c960 61 72 20 2a 73 71 6c 69 74 65 33 55 74 66 31 36  ar *sqlite3Utf16
2c970 74 6f 38 28 73 71 6c 69 74 65 33 20 2a 2c 20 63  to8(sqlite3 *, c
2c980 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c  onst void*, int,
2c990 20 75 38 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74   u8);.#endif.int
2c9a0 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72 6f   sqlite3ValueFro
2c9b0 6d 45 78 70 72 28 73 71 6c 69 74 65 33 20 2a 2c  mExpr(sqlite3 *,
2c9c0 20 45 78 70 72 20 2a 2c 20 75 38 2c 20 75 38 2c   Expr *, u8, u8,
2c9d0 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
2c9e0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2c9f0 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e 69  ValueApplyAffini
2ca00 74 79 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ty(sqlite3_value
2ca10 20 2a 2c 20 75 38 2c 20 75 38 29 3b 0a 23 69 66   *, u8, u8);.#if
2ca20 6e 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c  ndef SQLITE_AMAL
2ca30 47 41 4d 41 54 49 4f 4e 0a 65 78 74 65 72 6e 20  GAMATION.extern 
2ca40 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
2ca50 68 61 72 20 73 71 6c 69 74 65 33 4f 70 63 6f 64  har sqlite3Opcod
2ca60 65 50 72 6f 70 65 72 74 79 5b 5d 3b 0a 65 78 74  eProperty[];.ext
2ca70 65 72 6e 20 63 6f 6e 73 74 20 63 68 61 72 20 73  ern const char s
2ca80 71 6c 69 74 65 33 53 74 72 42 49 4e 41 52 59 5b  qlite3StrBINARY[
2ca90 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20  ];.extern const 
2caa0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73 71  unsigned char sq
2cab0 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f 77 65  lite3UpperToLowe
2cac0 72 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73  r[];.extern cons
2cad0 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
2cae0 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
2caf0 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20  ];.extern const 
2cb00 54 6f 6b 65 6e 20 73 71 6c 69 74 65 33 49 6e 74  Token sqlite3Int
2cb10 54 6f 6b 65 6e 73 5b 5d 3b 0a 65 78 74 65 72 6e  Tokens[];.extern
2cb20 20 53 51 4c 49 54 45 5f 57 53 44 20 73 74 72 75   SQLITE_WSD stru
2cb30 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69 67  ct Sqlite3Config
2cb40 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 3b 0a   sqlite3Config;.
2cb50 65 78 74 65 72 6e 20 46 75 6e 63 44 65 66 48 61  extern FuncDefHa
2cb60 73 68 20 73 71 6c 69 74 65 33 42 75 69 6c 74 69  sh sqlite3Builti
2cb70 6e 46 75 6e 63 74 69 6f 6e 73 3b 0a 23 69 66 6e  nFunctions;.#ifn
2cb80 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2cb90 57 53 44 0a 65 78 74 65 72 6e 20 69 6e 74 20 73  WSD.extern int s
2cba0 71 6c 69 74 65 33 50 65 6e 64 69 6e 67 42 79 74  qlite3PendingByt
2cbb0 65 3b 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66  e;.#endif.#endif
2cbc0 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f  .#ifdef VDBE_PRO
2cbd0 46 49 4c 45 0a 65 78 74 65 72 6e 20 73 71 6c 69  FILE.extern sqli
2cbe0 74 65 33 5f 75 69 6e 74 36 34 20 73 71 6c 69 74  te3_uint64 sqlit
2cbf0 65 33 4e 50 72 6f 66 69 6c 65 43 6e 74 3b 0a 23  e3NProfileCnt;.#
2cc00 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
2cc10 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28  e3RootPageMoved(
2cc20 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69  sqlite3*, int, i
2cc30 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
2cc40 71 6c 69 74 65 33 52 65 69 6e 64 65 78 28 50 61  qlite3Reindex(Pa
2cc50 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  rse*, Token*, To
2cc60 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
2cc70 74 65 33 41 6c 74 65 72 46 75 6e 63 74 69 6f 6e  te3AlterFunction
2cc80 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71  s(void);.void sq
2cc90 6c 69 74 65 33 41 6c 74 65 72 52 65 6e 61 6d 65  lite3AlterRename
2cca0 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72  Table(Parse*, Sr
2ccb0 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  cList*, Token*);
2ccc0 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54  .int sqlite3GetT
2ccd0 6f 6b 65 6e 28 63 6f 6e 73 74 20 75 6e 73 69 67  oken(const unsig
2cce0 6e 65 64 20 63 68 61 72 20 2a 2c 20 69 6e 74 20  ned char *, int 
2ccf0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2cd00 4e 65 73 74 65 64 50 61 72 73 65 28 50 61 72 73  NestedParse(Pars
2cd10 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e*, const char*,
2cd20 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69   ...);.void sqli
2cd30 74 65 33 45 78 70 69 72 65 50 72 65 70 61 72 65  te3ExpirePrepare
2cd40 64 53 74 61 74 65 6d 65 6e 74 73 28 73 71 6c 69  dStatements(sqli
2cd50 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  te3*);.int sqlit
2cd60 65 33 43 6f 64 65 53 75 62 73 65 6c 65 63 74 28  e3CodeSubselect(
2cd70 50 61 72 73 65 2a 2c 20 45 78 70 72 20 2a 2c 20  Parse*, Expr *, 
2cd80 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
2cd90 73 71 6c 69 74 65 33 53 65 6c 65 63 74 50 72 65  sqlite3SelectPre
2cda0 70 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74  p(Parse*, Select
2cdb0 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29  *, NameContext*)
2cdc0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  ;.void sqlite3Se
2cdd0 6c 65 63 74 57 72 6f 6e 67 4e 75 6d 54 65 72 6d  lectWrongNumTerm
2cde0 73 45 72 72 6f 72 28 50 61 72 73 65 20 2a 70 50  sError(Parse *pP
2cdf0 61 72 73 65 2c 20 53 65 6c 65 63 74 20 2a 70 29  arse, Select *p)
2ce00 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 74  ;.int sqlite3Mat
2ce10 63 68 53 70 61 6e 4e 61 6d 65 28 63 6f 6e 73 74  chSpanName(const
2ce20 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
2ce30 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
2ce40 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
2ce50 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c  int sqlite3Resol
2ce60 76 65 45 78 70 72 4e 61 6d 65 73 28 4e 61 6d 65  veExprNames(Name
2ce70 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a 29  Context*, Expr*)
2ce80 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73  ;.int sqlite3Res
2ce90 6f 6c 76 65 45 78 70 72 4c 69 73 74 4e 61 6d 65  olveExprListName
2cea0 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20  s(NameContext*, 
2ceb0 45 78 70 72 4c 69 73 74 2a 29 3b 0a 76 6f 69 64  ExprList*);.void
2cec0 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 53   sqlite3ResolveS
2ced0 65 6c 65 63 74 4e 61 6d 65 73 28 50 61 72 73 65  electNames(Parse
2cee0 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65  *, Select*, Name
2cef0 43 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f 69 64 20  Context*);.void 
2cf00 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 53 65  sqlite3ResolveSe
2cf10 6c 66 52 65 66 65 72 65 6e 63 65 28 50 61 72 73  lfReference(Pars
2cf20 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 45 78  e*,Table*,int,Ex
2cf30 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a  pr*,ExprList*);.
2cf40 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c  int sqlite3Resol
2cf50 76 65 4f 72 64 65 72 47 72 6f 75 70 42 79 28 50  veOrderGroupBy(P
2cf60 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  arse*, Select*, 
2cf70 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74  ExprList*, const
2cf80 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
2cf90 6c 69 74 65 33 43 6f 6c 75 6d 6e 44 65 66 61 75  lite3ColumnDefau
2cfa0 6c 74 28 56 64 62 65 20 2a 2c 20 54 61 62 6c 65  lt(Vdbe *, Table
2cfb0 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76   *, int, int);.v
2cfc0 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72  oid sqlite3Alter
2cfd0 46 69 6e 69 73 68 41 64 64 43 6f 6c 75 6d 6e 28  FinishAddColumn(
2cfe0 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a  Parse *, Token *
2cff0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
2d000 6c 74 65 72 42 65 67 69 6e 41 64 64 43 6f 6c 75  lterBeginAddColu
2d010 6d 6e 28 50 61 72 73 65 20 2a 2c 20 53 72 63 4c  mn(Parse *, SrcL
2d020 69 73 74 20 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20  ist *);.CollSeq 
2d030 2a 73 71 6c 69 74 65 33 47 65 74 43 6f 6c 6c 53  *sqlite3GetCollS
2d040 65 71 28 50 61 72 73 65 2a 2c 20 75 38 2c 20 43  eq(Parse*, u8, C
2d050 6f 6c 6c 53 65 71 20 2a 2c 20 63 6f 6e 73 74 20  ollSeq *, const 
2d060 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 73 71 6c  char*);.char sql
2d070 69 74 65 33 41 66 66 69 6e 69 74 79 54 79 70 65  ite3AffinityType
2d080 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 43 6f  (const char*, Co
2d090 6c 75 6d 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  lumn*);.void sql
2d0a0 69 74 65 33 41 6e 61 6c 79 7a 65 28 50 61 72 73  ite3Analyze(Pars
2d0b0 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  e*, Token*, Toke
2d0c0 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
2d0d0 49 6e 76 6f 6b 65 42 75 73 79 48 61 6e 64 6c 65  InvokeBusyHandle
2d0e0 72 28 42 75 73 79 48 61 6e 64 6c 65 72 2a 2c 20  r(BusyHandler*, 
2d0f0 73 71 6c 69 74 65 33 5f 66 69 6c 65 2a 29 3b 0a  sqlite3_file*);.
2d100 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64 44  int sqlite3FindD
2d110 62 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65  b(sqlite3*, Toke
2d120 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
2d130 46 69 6e 64 44 62 4e 61 6d 65 28 73 71 6c 69 74  FindDbName(sqlit
2d140 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  e3 *, const char
2d150 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
2d160 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28 73 71 6c  AnalysisLoad(sql
2d170 69 74 65 33 2a 2c 69 6e 74 20 69 44 42 29 3b 0a  ite3*,int iDB);.
2d180 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65  void sqlite3Dele
2d190 74 65 49 6e 64 65 78 53 61 6d 70 6c 65 73 28 73  teIndexSamples(s
2d1a0 71 6c 69 74 65 33 2a 2c 49 6e 64 65 78 2a 29 3b  qlite3*,Index*);
2d1b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 66  .void sqlite3Def
2d1c0 61 75 6c 74 52 6f 77 45 73 74 28 49 6e 64 65 78  aultRowEst(Index
2d1d0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2d1e0 52 65 67 69 73 74 65 72 4c 69 6b 65 46 75 6e 63  RegisterLikeFunc
2d1f0 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 2c 20  tions(sqlite3*, 
2d200 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
2d210 33 49 73 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 28  3IsLikeFunction(
2d220 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69  sqlite3*,Expr*,i
2d230 6e 74 2a 2c 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nt*,char*);.void
2d240 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 43 6c   sqlite3SchemaCl
2d250 65 61 72 28 76 6f 69 64 20 2a 29 3b 0a 53 63 68  ear(void *);.Sch
2d260 65 6d 61 20 2a 73 71 6c 69 74 65 33 53 63 68 65  ema *sqlite3Sche
2d270 6d 61 47 65 74 28 73 71 6c 69 74 65 33 20 2a 2c  maGet(sqlite3 *,
2d280 20 42 74 72 65 65 20 2a 29 3b 0a 69 6e 74 20 73   Btree *);.int s
2d290 71 6c 69 74 65 33 53 63 68 65 6d 61 54 6f 49 6e  qlite3SchemaToIn
2d2a0 64 65 78 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  dex(sqlite3 *db,
2d2b0 20 53 63 68 65 6d 61 20 2a 29 3b 0a 4b 65 79 49   Schema *);.KeyI
2d2c0 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49  nfo *sqlite3KeyI
2d2d0 6e 66 6f 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33  nfoAlloc(sqlite3
2d2e0 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64  *,int,int);.void
2d2f0 20 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 55   sqlite3KeyInfoU
2d300 6e 72 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a  nref(KeyInfo*);.
2d310 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33  KeyInfo *sqlite3
2d320 4b 65 79 49 6e 66 6f 52 65 66 28 4b 65 79 49 6e  KeyInfoRef(KeyIn
2d330 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73  fo*);.KeyInfo *s
2d340 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 4f 66 49  qlite3KeyInfoOfI
2d350 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 49 6e 64  ndex(Parse*, Ind
2d360 65 78 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73  ex*);.KeyInfo *s
2d370 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 46 72 6f  qlite3KeyInfoFro
2d380 6d 45 78 70 72 4c 69 73 74 28 50 61 72 73 65 2a  mExprList(Parse*
2d390 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
2d3a0 2c 20 69 6e 74 29 3b 0a 0a 23 69 66 64 65 66 20  , int);..#ifdef 
2d3b0 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 69 6e 74  SQLITE_DEBUG.int
2d3c0 20 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 49   sqlite3KeyInfoI
2d3d0 73 57 72 69 74 65 61 62 6c 65 28 4b 65 79 49 6e  sWriteable(KeyIn
2d3e0 66 6f 2a 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74  fo*);.#endif.int
2d3f0 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 46 75   sqlite3CreateFu
2d400 6e 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f  nc(sqlite3 *, co
2d410 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2c  nst char *, int,
2d420 20 69 6e 74 2c 20 76 6f 69 64 20 2a 2c 0a 20 20   int, void *,.  
2d430 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33  void (*)(sqlite3
2d440 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
2d450 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c  lite3_value **),
2d460 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69  .  void (*)(sqli
2d470 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74  te3_context*,int
2d480 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  ,sqlite3_value *
2d490 2a 29 2c 20 0a 20 20 76 6f 69 64 20 28 2a 29 28  *), .  void (*)(
2d4a0 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
2d4b0 29 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71  ),.  void (*)(sq
2d4c0 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 2c  lite3_context*),
2d4d0 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69  .  void (*)(sqli
2d4e0 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74  te3_context*,int
2d4f0 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  ,sqlite3_value *
2d500 2a 29 2c 20 0a 20 20 46 75 6e 63 44 65 73 74 72  *), .  FuncDestr
2d510 75 63 74 6f 72 20 2a 70 44 65 73 74 72 75 63 74  uctor *pDestruct
2d520 6f 72 0a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  or.);.void sqlit
2d530 65 33 4e 6f 6f 70 44 65 73 74 72 75 63 74 6f 72  e3NoopDestructor
2d540 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71  (void*);.void sq
2d550 6c 69 74 65 33 4f 6f 6d 46 61 75 6c 74 28 73 71  lite3OomFault(sq
2d560 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71  lite3*);.void sq
2d570 6c 69 74 65 33 4f 6f 6d 43 6c 65 61 72 28 73 71  lite3OomClear(sq
2d580 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c  lite3*);.int sql
2d590 69 74 65 33 41 70 69 45 78 69 74 28 73 71 6c 69  ite3ApiExit(sqli
2d5a0 74 65 33 20 2a 64 62 2c 20 69 6e 74 29 3b 0a 69  te3 *db, int);.i
2d5b0 6e 74 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 65  nt sqlite3OpenTe
2d5c0 6d 70 44 61 74 61 62 61 73 65 28 50 61 72 73 65  mpDatabase(Parse
2d5d0 20 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74   *);..void sqlit
2d5e0 65 33 53 74 72 41 63 63 75 6d 49 6e 69 74 28 53  e3StrAccumInit(S
2d5f0 74 72 41 63 63 75 6d 2a 2c 20 73 71 6c 69 74 65  trAccum*, sqlite
2d600 33 2a 2c 20 63 68 61 72 2a 2c 20 69 6e 74 2c 20  3*, char*, int, 
2d610 69 6e 74 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  int);.char *sqli
2d620 74 65 33 53 74 72 41 63 63 75 6d 46 69 6e 69 73  te3StrAccumFinis
2d630 68 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f  h(StrAccum*);.vo
2d640 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  id sqlite3Select
2d650 44 65 73 74 49 6e 69 74 28 53 65 6c 65 63 74 44  DestInit(SelectD
2d660 65 73 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 45  est*,int,int);.E
2d670 78 70 72 20 2a 73 71 6c 69 74 65 33 43 72 65 61  xpr *sqlite3Crea
2d680 74 65 43 6f 6c 75 6d 6e 45 78 70 72 28 73 71 6c  teColumnExpr(sql
2d690 69 74 65 33 20 2a 2c 20 53 72 63 4c 69 73 74 20  ite3 *, SrcList 
2d6a0 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 76  *, int, int);..v
2d6b0 6f 69 64 20 73 71 6c 69 74 65 33 42 61 63 6b 75  oid sqlite3Backu
2d6c0 70 52 65 73 74 61 72 74 28 73 71 6c 69 74 65 33  pRestart(sqlite3
2d6d0 5f 62 61 63 6b 75 70 20 2a 29 3b 0a 76 6f 69 64  _backup *);.void
2d6e0 20 73 71 6c 69 74 65 33 42 61 63 6b 75 70 55 70   sqlite3BackupUp
2d6f0 64 61 74 65 28 73 71 6c 69 74 65 33 5f 62 61 63  date(sqlite3_bac
2d700 6b 75 70 20 2a 2c 20 50 67 6e 6f 2c 20 63 6f 6e  kup *, Pgno, con
2d710 73 74 20 75 38 20 2a 29 3b 0a 0a 23 69 66 6e 64  st u8 *);..#ifnd
2d720 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53  ef SQLITE_OMIT_S
2d730 55 42 51 55 45 52 59 0a 69 6e 74 20 73 71 6c 69  UBQUERY.int sqli
2d740 74 65 33 45 78 70 72 43 68 65 63 6b 49 4e 28 50  te3ExprCheckIN(P
2d750 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 23  arse*, Expr*);.#
2d760 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
2d770 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b 49 4e  lite3ExprCheckIN
2d780 28 78 2c 79 29 20 53 51 4c 49 54 45 5f 4f 4b 0a  (x,y) SQLITE_OK.
2d790 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
2d7a0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
2d7b0 54 33 5f 4f 52 5f 53 54 41 54 34 0a 76 6f 69 64  T3_OR_STAT4.void
2d7c0 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65 46   sqlite3AnalyzeF
2d7d0 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a  unctions(void);.
2d7e0 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74 34  int sqlite3Stat4
2d7f0 50 72 6f 62 65 53 65 74 56 61 6c 75 65 28 0a 20  ProbeSetValue(. 
2d800 20 20 20 50 61 72 73 65 2a 2c 49 6e 64 65 78 2a     Parse*,Index*
2d810 2c 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 2a  ,UnpackedRecord*
2d820 2a 2c 45 78 70 72 2a 2c 69 6e 74 2c 69 6e 74 2c  *,Expr*,int,int,
2d830 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  int*);.int sqlit
2d840 65 33 53 74 61 74 34 56 61 6c 75 65 46 72 6f 6d  e3Stat4ValueFrom
2d850 45 78 70 72 28 50 61 72 73 65 2a 2c 20 45 78 70  Expr(Parse*, Exp
2d860 72 2a 2c 20 75 38 2c 20 73 71 6c 69 74 65 33 5f  r*, u8, sqlite3_
2d870 76 61 6c 75 65 2a 2a 29 3b 0a 76 6f 69 64 20 73  value**);.void s
2d880 71 6c 69 74 65 33 53 74 61 74 34 50 72 6f 62 65  qlite3Stat4Probe
2d890 46 72 65 65 28 55 6e 70 61 63 6b 65 64 52 65 63  Free(UnpackedRec
2d8a0 6f 72 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ord*);.int sqlit
2d8b0 65 33 53 74 61 74 34 43 6f 6c 75 6d 6e 28 73 71  e3Stat4Column(sq
2d8c0 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 76 6f  lite3*, const vo
2d8d0 69 64 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 73  id*, int, int, s
2d8e0 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b  qlite3_value**);
2d8f0 0a 63 68 61 72 20 73 71 6c 69 74 65 33 49 6e 64  .char sqlite3Ind
2d900 65 78 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79  exColumnAffinity
2d910 28 73 71 6c 69 74 65 33 2a 2c 20 49 6e 64 65 78  (sqlite3*, Index
2d920 2a 2c 20 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a  *, int);.#endif.
2d930 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72  ./*.** The inter
2d940 66 61 63 65 20 74 6f 20 74 68 65 20 4c 45 4d 4f  face to the LEMO
2d950 4e 2d 67 65 6e 65 72 61 74 65 64 20 70 61 72 73  N-generated pars
2d960 65 72 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  er.*/.#ifndef SQ
2d970 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f  LITE_AMALGAMATIO
2d980 4e 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65  N.  void *sqlite
2d990 33 50 61 72 73 65 72 41 6c 6c 6f 63 28 76 6f 69  3ParserAlloc(voi
2d9a0 64 2a 28 2a 29 28 75 36 34 29 2c 20 50 61 72 73  d*(*)(u64), Pars
2d9b0 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  e*);.  void sqli
2d9c0 74 65 33 50 61 72 73 65 72 46 72 65 65 28 76 6f  te3ParserFree(vo
2d9d0 69 64 2a 2c 20 76 6f 69 64 28 2a 29 28 76 6f 69  id*, void(*)(voi
2d9e0 64 2a 29 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69  d*));.#endif.voi
2d9f0 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 28  d sqlite3Parser(
2da00 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65  void*, int, Toke
2da10 6e 29 3b 0a 23 69 66 64 65 66 20 59 59 54 52 41  n);.#ifdef YYTRA
2da20 43 4b 4d 41 58 53 54 41 43 4b 44 45 50 54 48 0a  CKMAXSTACKDEPTH.
2da30 20 20 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72    int sqlite3Par
2da40 73 65 72 53 74 61 63 6b 50 65 61 6b 28 76 6f 69  serStackPeak(voi
2da50 64 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 76 6f 69  d*);.#endif..voi
2da60 64 20 73 71 6c 69 74 65 33 41 75 74 6f 4c 6f 61  d sqlite3AutoLoa
2da70 64 45 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69  dExtensions(sqli
2da80 74 65 33 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53  te3*);.#ifndef S
2da90 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f  QLITE_OMIT_LOAD_
2daa0 45 58 54 45 4e 53 49 4f 4e 0a 20 20 76 6f 69 64  EXTENSION.  void
2dab0 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74   sqlite3CloseExt
2dac0 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a  ensions(sqlite3*
2dad0 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
2dae0 65 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78  e sqlite3CloseEx
2daf0 74 65 6e 73 69 6f 6e 73 28 58 29 0a 23 65 6e 64  tensions(X).#end
2db00 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  if..#ifndef SQLI
2db10 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43  TE_OMIT_SHARED_C
2db20 41 43 48 45 0a 20 20 76 6f 69 64 20 73 71 6c 69  ACHE.  void sqli
2db30 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 50 61 72  te3TableLock(Par
2db40 73 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  se *, int, int, 
2db50 75 38 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  u8, const char *
2db60 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
2db70 6e 65 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c  ne sqlite3TableL
2db80 6f 63 6b 28 76 2c 77 2c 78 2c 79 2c 7a 29 0a 23  ock(v,w,x,y,z).#
2db90 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
2dba0 4c 49 54 45 5f 54 45 53 54 0a 20 20 69 6e 74 20  LITE_TEST.  int 
2dbb0 73 71 6c 69 74 65 33 55 74 66 38 54 6f 38 28 75  sqlite3Utf8To8(u
2dbc0 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 29 3b 0a  nsigned char*);.
2dbd0 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
2dbe0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2dbf0 41 4c 54 41 42 4c 45 0a 23 20 20 64 65 66 69 6e  ALTABLE.#  defin
2dc00 65 20 73 71 6c 69 74 65 33 56 74 61 62 43 6c 65  e sqlite3VtabCle
2dc10 61 72 28 59 29 0a 23 20 20 64 65 66 69 6e 65 20  ar(Y).#  define 
2dc20 73 71 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28  sqlite3VtabSync(
2dc30 58 2c 59 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23  X,Y) SQLITE_OK.#
2dc40 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
2dc50 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28 58 29 0a  VtabRollback(X).
2dc60 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
2dc70 33 56 74 61 62 43 6f 6d 6d 69 74 28 58 29 0a 23  3VtabCommit(X).#
2dc80 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
2dc90 56 74 61 62 49 6e 53 79 6e 63 28 64 62 29 20 30  VtabInSync(db) 0
2dca0 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
2dcb0 65 33 56 74 61 62 4c 6f 63 6b 28 58 29 0a 23 20  e3VtabLock(X).# 
2dcc0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
2dcd0 74 61 62 55 6e 6c 6f 63 6b 28 58 29 0a 23 20 20  tabUnlock(X).#  
2dce0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
2dcf0 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 58 29 0a  abUnlockList(X).
2dd00 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
2dd10 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 58  3VtabSavepoint(X
2dd20 2c 20 59 2c 20 5a 29 20 53 51 4c 49 54 45 5f 4f  , Y, Z) SQLITE_O
2dd30 4b 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  K.#  define sqli
2dd40 74 65 33 47 65 74 56 54 61 62 6c 65 28 58 2c 59  te3GetVTable(X,Y
2dd50 29 20 20 28 28 56 54 61 62 6c 65 2a 29 30 29 0a  )  ((VTable*)0).
2dd60 23 65 6c 73 65 0a 20 20 20 76 6f 69 64 20 73 71  #else.   void sq
2dd70 6c 69 74 65 33 56 74 61 62 43 6c 65 61 72 28 73  lite3VtabClear(s
2dd80 71 6c 69 74 65 33 20 2a 64 62 2c 20 54 61 62 6c  qlite3 *db, Tabl
2dd90 65 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c  e*);.   void sql
2dda0 69 74 65 33 56 74 61 62 44 69 73 63 6f 6e 6e 65  ite3VtabDisconne
2ddb0 63 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  ct(sqlite3 *db, 
2ddc0 54 61 62 6c 65 20 2a 70 29 3b 0a 20 20 20 69 6e  Table *p);.   in
2ddd0 74 20 73 71 6c 69 74 65 33 56 74 61 62 53 79 6e  t sqlite3VtabSyn
2dde0 63 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 56  c(sqlite3 *db, V
2ddf0 64 62 65 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71  dbe*);.   int sq
2de00 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63  lite3VtabRollbac
2de10 6b 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a  k(sqlite3 *db);.
2de20 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74     int sqlite3Vt
2de30 61 62 43 6f 6d 6d 69 74 28 73 71 6c 69 74 65 33  abCommit(sqlite3
2de40 20 2a 64 62 29 3b 0a 20 20 20 76 6f 69 64 20 73   *db);.   void s
2de50 71 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 56  qlite3VtabLock(V
2de60 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69  Table *);.   voi
2de70 64 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c  d sqlite3VtabUnl
2de80 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20  ock(VTable *);. 
2de90 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74    void sqlite3Vt
2dea0 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 73 71 6c  abUnlockList(sql
2deb0 69 74 65 33 2a 29 3b 0a 20 20 20 69 6e 74 20 73  ite3*);.   int s
2dec0 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f  qlite3VtabSavepo
2ded0 69 6e 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 69  int(sqlite3 *, i
2dee0 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 20 76 6f 69  nt, int);.   voi
2def0 64 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70  d sqlite3VtabImp
2df00 6f 72 74 45 72 72 6d 73 67 28 56 64 62 65 2a 2c  ortErrmsg(Vdbe*,
2df10 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 29 3b   sqlite3_vtab*);
2df20 0a 20 20 20 56 54 61 62 6c 65 20 2a 73 71 6c 69  .   VTable *sqli
2df30 74 65 33 47 65 74 56 54 61 62 6c 65 28 73 71 6c  te3GetVTable(sql
2df40 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a  ite3*, Table*);.
2df50 20 20 20 4d 6f 64 75 6c 65 20 2a 73 71 6c 69 74     Module *sqlit
2df60 65 33 56 74 61 62 43 72 65 61 74 65 4d 6f 64 75  e3VtabCreateModu
2df70 6c 65 28 0a 20 20 20 20 20 73 71 6c 69 74 65 33  le(.     sqlite3
2df80 2a 2c 0a 20 20 20 20 20 63 6f 6e 73 74 20 63 68  *,.     const ch
2df90 61 72 2a 2c 0a 20 20 20 20 20 63 6f 6e 73 74 20  ar*,.     const 
2dfa0 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 2a 2c  sqlite3_module*,
2dfb0 0a 20 20 20 20 20 76 6f 69 64 2a 2c 0a 20 20 20  .     void*,.   
2dfc0 20 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29    void(*)(void*)
2dfd0 0a 20 20 20 29 3b 0a 23 20 20 64 65 66 69 6e 65  .   );.#  define
2dfe0 20 73 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79   sqlite3VtabInSy
2dff0 6e 63 28 64 62 29 20 28 28 64 62 29 2d 3e 6e 56  nc(db) ((db)->nV
2e000 54 72 61 6e 73 3e 30 20 26 26 20 28 64 62 29 2d  Trans>0 && (db)-
2e010 3e 61 56 54 72 61 6e 73 3d 3d 30 29 0a 23 65 6e  >aVTrans==0).#en
2e020 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  dif.int sqlite3V
2e030 74 61 62 45 70 6f 6e 79 6d 6f 75 73 54 61 62 6c  tabEponymousTabl
2e040 65 49 6e 69 74 28 50 61 72 73 65 2a 2c 4d 6f 64  eInit(Parse*,Mod
2e050 75 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ule*);.void sqli
2e060 74 65 33 56 74 61 62 45 70 6f 6e 79 6d 6f 75 73  te3VtabEponymous
2e070 54 61 62 6c 65 43 6c 65 61 72 28 73 71 6c 69 74  TableClear(sqlit
2e080 65 33 2a 2c 4d 6f 64 75 6c 65 2a 29 3b 0a 76 6f  e3*,Module*);.vo
2e090 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 4d 61  id sqlite3VtabMa
2e0a0 6b 65 57 72 69 74 61 62 6c 65 28 50 61 72 73 65  keWritable(Parse
2e0b0 2a 2c 54 61 62 6c 65 2a 29 3b 0a 76 6f 69 64 20  *,Table*);.void 
2e0c0 73 71 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e  sqlite3VtabBegin
2e0d0 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54 6f  Parse(Parse*, To
2e0e0 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  ken*, Token*, To
2e0f0 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  ken*, int);.void
2e100 20 73 71 6c 69 74 65 33 56 74 61 62 46 69 6e 69   sqlite3VtabFini
2e110 73 68 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20  shParse(Parse*, 
2e120 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
2e130 6c 69 74 65 33 56 74 61 62 41 72 67 49 6e 69 74  lite3VtabArgInit
2e140 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
2e150 71 6c 69 74 65 33 56 74 61 62 41 72 67 45 78 74  qlite3VtabArgExt
2e160 65 6e 64 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  end(Parse*, Toke
2e170 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
2e180 56 74 61 62 43 61 6c 6c 43 72 65 61 74 65 28 73  VtabCallCreate(s
2e190 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f  qlite3*, int, co
2e1a0 6e 73 74 20 63 68 61 72 20 2a 2c 20 63 68 61 72  nst char *, char
2e1b0 20 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65   **);.int sqlite
2e1c0 33 56 74 61 62 43 61 6c 6c 43 6f 6e 6e 65 63 74  3VtabCallConnect
2e1d0 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29  (Parse*, Table*)
2e1e0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61  ;.int sqlite3Vta
2e1f0 62 43 61 6c 6c 44 65 73 74 72 6f 79 28 73 71 6c  bCallDestroy(sql
2e200 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73  ite3*, int, cons
2e210 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73  t char *);.int s
2e220 71 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e 28  qlite3VtabBegin(
2e230 73 71 6c 69 74 65 33 20 2a 2c 20 56 54 61 62 6c  sqlite3 *, VTabl
2e240 65 20 2a 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73  e *);.FuncDef *s
2e250 71 6c 69 74 65 33 56 74 61 62 4f 76 65 72 6c 6f  qlite3VtabOverlo
2e260 61 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74  adFunction(sqlit
2e270 65 33 20 2a 2c 46 75 6e 63 44 65 66 2a 2c 20 69  e3 *,FuncDef*, i
2e280 6e 74 20 6e 41 72 67 2c 20 45 78 70 72 2a 29 3b  nt nArg, Expr*);
2e290 0a 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73  .sqlite3_int64 s
2e2a0 71 6c 69 74 65 33 53 74 6d 74 43 75 72 72 65 6e  qlite3StmtCurren
2e2b0 74 54 69 6d 65 28 73 71 6c 69 74 65 33 5f 63 6f  tTime(sqlite3_co
2e2c0 6e 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  ntext*);.int sql
2e2d0 69 74 65 33 56 64 62 65 50 61 72 61 6d 65 74 65  ite3VdbeParamete
2e2e0 72 49 6e 64 65 78 28 56 64 62 65 2a 2c 20 63 6f  rIndex(Vdbe*, co
2e2f0 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b  nst char*, int);
2e300 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 72 61 6e  .int sqlite3Tran
2e310 73 66 65 72 42 69 6e 64 69 6e 67 73 28 73 71 6c  sferBindings(sql
2e320 69 74 65 33 5f 73 74 6d 74 20 2a 2c 20 73 71 6c  ite3_stmt *, sql
2e330 69 74 65 33 5f 73 74 6d 74 20 2a 29 3b 0a 76 6f  ite3_stmt *);.vo
2e340 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72  id sqlite3Parser
2e350 52 65 73 65 74 28 50 61 72 73 65 2a 29 3b 0a 69  Reset(Parse*);.i
2e360 6e 74 20 73 71 6c 69 74 65 33 52 65 70 72 65 70  nt sqlite3Reprep
2e370 61 72 65 28 56 64 62 65 2a 29 3b 0a 76 6f 69 64  are(Vdbe*);.void
2e380 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
2e390 43 68 65 63 6b 4c 65 6e 67 74 68 28 50 61 72 73  CheckLength(Pars
2e3a0 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 63  e*, ExprList*, c
2e3b0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 43 6f 6c  onst char*);.Col
2e3c0 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 42 69 6e  lSeq *sqlite3Bin
2e3d0 61 72 79 43 6f 6d 70 61 72 65 43 6f 6c 6c 53 65  aryCompareCollSe
2e3e0 71 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20  q(Parse *, Expr 
2e3f0 2a 2c 20 45 78 70 72 20 2a 29 3b 0a 69 6e 74 20  *, Expr *);.int 
2e400 73 71 6c 69 74 65 33 54 65 6d 70 49 6e 4d 65 6d  sqlite3TempInMem
2e410 6f 72 79 28 63 6f 6e 73 74 20 73 71 6c 69 74 65  ory(const sqlite
2e420 33 2a 29 3b 0a 63 6f 6e 73 74 20 63 68 61 72 20  3*);.const char 
2e430 2a 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d  *sqlite3JournalM
2e440 6f 64 65 6e 61 6d 65 28 69 6e 74 29 3b 0a 23 69  odename(int);.#i
2e450 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2e460 54 5f 57 41 4c 0a 20 20 69 6e 74 20 73 71 6c 69  T_WAL.  int sqli
2e470 74 65 33 43 68 65 63 6b 70 6f 69 6e 74 28 73 71  te3Checkpoint(sq
2e480 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74  lite3*, int, int
2e490 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 20  , int*, int*);. 
2e4a0 20 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 44   int sqlite3WalD
2e4b0 65 66 61 75 6c 74 48 6f 6f 6b 28 76 6f 69 64 2a  efaultHook(void*
2e4c0 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  ,sqlite3*,const 
2e4d0 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 23 65 6e 64  char*,int);.#end
2e4e0 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
2e4f0 45 5f 4f 4d 49 54 5f 43 54 45 0a 20 20 57 69 74  E_OMIT_CTE.  Wit
2e500 68 20 2a 73 71 6c 69 74 65 33 57 69 74 68 41 64  h *sqlite3WithAd
2e510 64 28 50 61 72 73 65 2a 2c 57 69 74 68 2a 2c 54  d(Parse*,With*,T
2e520 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  oken*,ExprList*,
2e530 53 65 6c 65 63 74 2a 29 3b 0a 20 20 76 6f 69 64  Select*);.  void
2e540 20 73 71 6c 69 74 65 33 57 69 74 68 44 65 6c 65   sqlite3WithDele
2e550 74 65 28 73 71 6c 69 74 65 33 2a 2c 57 69 74 68  te(sqlite3*,With
2e560 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
2e570 65 33 57 69 74 68 50 75 73 68 28 50 61 72 73 65  e3WithPush(Parse
2e580 2a 2c 20 57 69 74 68 2a 2c 20 75 38 29 3b 0a 23  *, With*, u8);.#
2e590 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 73 71 6c  else.#define sql
2e5a0 69 74 65 33 57 69 74 68 50 75 73 68 28 78 2c 79  ite3WithPush(x,y
2e5b0 2c 7a 29 0a 23 64 65 66 69 6e 65 20 73 71 6c 69  ,z).#define sqli
2e5c0 74 65 33 57 69 74 68 44 65 6c 65 74 65 28 78 2c  te3WithDelete(x,
2e5d0 79 29 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  y).#endif.#ifnde
2e5e0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 50  f SQLITE_OMIT_UP
2e5f0 53 45 52 54 0a 20 20 55 70 73 65 72 74 20 2a 73  SERT.  Upsert *s
2e600 71 6c 69 74 65 33 55 70 73 65 72 74 4e 65 77 28  qlite3UpsertNew(
2e610 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 4c 69 73  sqlite3*,ExprLis
2e620 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73  t*,Expr*,ExprLis
2e630 74 2a 2c 45 78 70 72 2a 29 3b 0a 20 20 76 6f 69  t*,Expr*);.  voi
2e640 64 20 73 71 6c 69 74 65 33 55 70 73 65 72 74 44  d sqlite3UpsertD
2e650 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 55  elete(sqlite3*,U
2e660 70 73 65 72 74 2a 29 3b 0a 20 20 55 70 73 65 72  psert*);.  Upser
2e670 74 20 2a 73 71 6c 69 74 65 33 55 70 73 65 72 74  t *sqlite3Upsert
2e680 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 55 70 73  Dup(sqlite3*,Ups
2e690 65 72 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  ert*);.  int sql
2e6a0 69 74 65 33 55 70 73 65 72 74 41 6e 61 6c 79 7a  ite3UpsertAnalyz
2e6b0 65 54 61 72 67 65 74 28 50 61 72 73 65 2a 2c 53  eTarget(Parse*,S
2e6c0 72 63 4c 69 73 74 2a 2c 55 70 73 65 72 74 2a 29  rcList*,Upsert*)
2e6d0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2e6e0 55 70 73 65 72 74 44 6f 55 70 64 61 74 65 28 50  UpsertDoUpdate(P
2e6f0 61 72 73 65 2a 2c 55 70 73 65 72 74 2a 2c 54 61  arse*,Upsert*,Ta
2e700 62 6c 65 2a 2c 49 6e 64 65 78 2a 2c 69 6e 74 29  ble*,Index*,int)
2e710 3b 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20  ;.#else.#define 
2e720 73 71 6c 69 74 65 33 55 70 73 65 72 74 4e 65 77  sqlite3UpsertNew
2e730 28 76 2c 77 2c 78 2c 79 2c 7a 29 20 28 28 55 70  (v,w,x,y,z) ((Up
2e740 73 65 72 74 2a 29 30 29 0a 23 64 65 66 69 6e 65  sert*)0).#define
2e750 20 73 71 6c 69 74 65 33 55 70 73 65 72 74 44 65   sqlite3UpsertDe
2e760 6c 65 74 65 28 78 2c 79 29 0a 23 64 65 66 69 6e  lete(x,y).#defin
2e770 65 20 73 71 6c 69 74 65 33 55 70 73 65 72 74 44  e sqlite3UpsertD
2e780 75 70 28 78 2c 79 29 20 20 20 20 20 20 20 28 28  up(x,y)       ((
2e790 55 70 73 65 72 74 2a 29 30 29 0a 23 65 6e 64 69  Upsert*)0).#endi
2e7a0 66 0a 0a 0a 2f 2a 20 44 65 63 6c 61 72 61 74 69  f.../* Declarati
2e7b0 6f 6e 73 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e  ons for function
2e7c0 73 20 69 6e 20 66 6b 65 79 2e 63 2e 20 41 6c 6c  s in fkey.c. All
2e7d0 20 6f 66 20 74 68 65 73 65 20 61 72 65 20 72 65   of these are re
2e7e0 70 6c 61 63 65 64 20 62 79 0a 2a 2a 20 6e 6f 2d  placed by.** no-
2e7f0 6f 70 20 6d 61 63 72 6f 73 20 69 66 20 4f 4d 49  op macros if OMI
2e800 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73  T_FOREIGN_KEY is
2e810 20 64 65 66 69 6e 65 64 2e 20 49 6e 20 74 68 69   defined. In thi
2e820 73 20 63 61 73 65 20 6e 6f 20 66 6f 72 65 69 67  s case no foreig
2e830 6e 0a 2a 2a 20 6b 65 79 20 66 75 6e 63 74 69 6f  n.** key functio
2e840 6e 61 6c 69 74 79 20 69 73 20 61 76 61 69 6c 61  nality is availa
2e850 62 6c 65 2e 20 49 66 20 4f 4d 49 54 5f 54 52 49  ble. If OMIT_TRI
2e860 47 47 45 52 20 69 73 20 64 65 66 69 6e 65 64 20  GGER is defined 
2e870 62 75 74 0a 2a 2a 20 4f 4d 49 54 5f 46 4f 52 45  but.** OMIT_FORE
2e880 49 47 4e 5f 4b 45 59 20 69 73 20 6e 6f 74 2c 20  IGN_KEY is not, 
2e890 6f 6e 6c 79 20 73 6f 6d 65 20 6f 66 20 74 68 65  only some of the
2e8a0 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 6e   functions are n
2e8b0 6f 2d 6f 70 65 64 2e 20 49 6e 0a 2a 2a 20 74 68  o-oped. In.** th
2e8c0 69 73 20 63 61 73 65 20 66 6f 72 65 69 67 6e 20  is case foreign 
2e8d0 6b 65 79 73 20 61 72 65 20 70 61 72 73 65 64 2c  keys are parsed,
2e8e0 20 62 75 74 20 6e 6f 20 6f 74 68 65 72 20 66 75   but no other fu
2e8f0 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 0a 2a  nctionality is.*
2e900 2a 20 70 72 6f 76 69 64 65 64 20 28 65 6e 66 6f  * provided (enfo
2e910 72 63 65 6d 65 6e 74 20 6f 66 20 46 4b 20 63 6f  rcement of FK co
2e920 6e 73 74 72 61 69 6e 74 73 20 72 65 71 75 69 72  nstraints requir
2e930 65 73 20 74 68 65 20 74 72 69 67 67 65 72 73 20  es the triggers 
2e940 73 75 62 2d 73 79 73 74 65 6d 29 2e 0a 2a 2f 0a  sub-system)..*/.
2e950 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
2e960 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  ITE_OMIT_FOREIGN
2e970 5f 4b 45 59 29 20 26 26 20 21 64 65 66 69 6e 65  _KEY) && !define
2e980 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  d(SQLITE_OMIT_TR
2e990 49 47 47 45 52 29 0a 20 20 76 6f 69 64 20 73 71  IGGER).  void sq
2e9a0 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 50 61 72  lite3FkCheck(Par
2e9b0 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
2e9c0 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74  , int, int*, int
2e9d0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
2e9e0 33 46 6b 44 72 6f 70 54 61 62 6c 65 28 50 61 72  3FkDropTable(Par
2e9f0 73 65 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20  se*, SrcList *, 
2ea00 54 61 62 6c 65 2a 29 3b 0a 20 20 76 6f 69 64 20  Table*);.  void 
2ea10 73 71 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e 73  sqlite3FkActions
2ea20 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
2ea30 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c   ExprList*, int,
2ea40 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 69   int*, int);.  i
2ea50 6e 74 20 73 71 6c 69 74 65 33 46 6b 52 65 71 75  nt sqlite3FkRequ
2ea60 69 72 65 64 28 50 61 72 73 65 2a 2c 20 54 61 62  ired(Parse*, Tab
2ea70 6c 65 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b  le*, int*, int);
2ea80 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33 46 6b  .  u32 sqlite3Fk
2ea90 4f 6c 64 6d 61 73 6b 28 50 61 72 73 65 2a 2c 20  Oldmask(Parse*, 
2eaa0 54 61 62 6c 65 2a 29 3b 0a 20 20 46 4b 65 79 20  Table*);.  FKey 
2eab0 2a 73 71 6c 69 74 65 33 46 6b 52 65 66 65 72 65  *sqlite3FkRefere
2eac0 6e 63 65 73 28 54 61 62 6c 65 20 2a 29 3b 0a 23  nces(Table *);.#
2ead0 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
2eae0 71 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e 73 28  qlite3FkActions(
2eaf0 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23  a,b,c,d,e,f).  #
2eb00 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
2eb10 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 2c  Check(a,b,c,d,e,
2eb20 66 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  f).  #define sql
2eb30 69 74 65 33 46 6b 44 72 6f 70 54 61 62 6c 65 28  ite3FkDropTable(
2eb40 61 2c 62 2c 63 29 0a 20 20 23 64 65 66 69 6e 65  a,b,c).  #define
2eb50 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73   sqlite3FkOldmas
2eb60 6b 28 61 2c 62 29 20 20 20 20 20 20 20 20 20 30  k(a,b)         0
2eb70 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
2eb80 65 33 46 6b 52 65 71 75 69 72 65 64 28 61 2c 62  e3FkRequired(a,b
2eb90 2c 63 2c 64 29 20 20 20 20 30 0a 20 20 23 64 65  ,c,d)    0.  #de
2eba0 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 52 65  fine sqlite3FkRe
2ebb0 66 65 72 65 6e 63 65 73 28 61 29 20 20 20 20 20  ferences(a)     
2ebc0 20 20 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 6e     0.#endif.#ifn
2ebd0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2ebe0 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 20 20 76 6f  FOREIGN_KEY.  vo
2ebf0 69 64 20 73 71 6c 69 74 65 33 46 6b 44 65 6c 65  id sqlite3FkDele
2ec00 74 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 54 61  te(sqlite3 *, Ta
2ec10 62 6c 65 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  ble*);.  int sql
2ec20 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65  ite3FkLocateInde
2ec30 78 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c  x(Parse*,Table*,
2ec40 46 4b 65 79 2a 2c 49 6e 64 65 78 2a 2a 2c 69 6e  FKey*,Index**,in
2ec50 74 2a 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  t**);.#else.  #d
2ec60 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44  efine sqlite3FkD
2ec70 65 6c 65 74 65 28 61 2c 62 29 0a 20 20 23 64 65  elete(a,b).  #de
2ec80 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 4c 6f  fine sqlite3FkLo
2ec90 63 61 74 65 49 6e 64 65 78 28 61 2c 62 2c 63 2c  cateIndex(a,b,c,
2eca0 64 2c 65 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a  d,e).#endif.../*
2ecb0 0a 2a 2a 20 41 76 61 69 6c 61 62 6c 65 20 66 61  .** Available fa
2ecc0 75 6c 74 20 69 6e 6a 65 63 74 6f 72 73 2e 20 20  ult injectors.  
2ecd0 53 68 6f 75 6c 64 20 62 65 20 6e 75 6d 62 65 72  Should be number
2ece0 65 64 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74  ed beginning wit
2ecf0 68 20 30 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  h 0..*/.#define 
2ed00 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45  SQLITE_FAULTINJE
2ed10 43 54 4f 52 5f 4d 41 4c 4c 4f 43 20 20 20 20 20  CTOR_MALLOC     
2ed20 30 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  0.#define SQLITE
2ed30 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 43  _FAULTINJECTOR_C
2ed40 4f 55 4e 54 20 20 20 20 20 20 31 0a 0a 2f 2a 0a  OUNT      1../*.
2ed50 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63 65  ** The interface
2ed60 20 74 6f 20 74 68 65 20 63 6f 64 65 20 69 6e 20   to the code in 
2ed70 66 61 75 6c 74 2e 63 20 75 73 65 64 20 66 6f 72  fault.c used for
2ed80 20 69 64 65 6e 74 69 66 79 69 6e 67 20 22 62 65   identifying "be
2ed90 6e 69 67 6e 22 0a 2a 2a 20 6d 61 6c 6c 6f 63 20  nign".** malloc 
2eda0 66 61 69 6c 75 72 65 73 2e 20 54 68 69 73 20 69  failures. This i
2edb0 73 20 6f 6e 6c 79 20 70 72 65 73 65 6e 74 20 69  s only present i
2edc0 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41  f SQLITE_UNTESTA
2edd0 42 4c 45 0a 2a 2a 20 69 73 20 6e 6f 74 20 64 65  BLE.** is not de
2ede0 66 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65  fined..*/.#ifnde
2edf0 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41  f SQLITE_UNTESTA
2ee00 42 4c 45 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  BLE.  void sqlit
2ee10 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c  e3BeginBenignMal
2ee20 6c 6f 63 28 76 6f 69 64 29 3b 0a 20 20 76 6f 69  loc(void);.  voi
2ee30 64 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69  d sqlite3EndBeni
2ee40 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a  gnMalloc(void);.
2ee50 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
2ee60 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69  sqlite3BeginBeni
2ee70 67 6e 4d 61 6c 6c 6f 63 28 29 0a 20 20 23 64 65  gnMalloc().  #de
2ee80 66 69 6e 65 20 73 71 6c 69 74 65 33 45 6e 64 42  fine sqlite3EndB
2ee90 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 23 65  enignMalloc().#e
2eea0 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  ndif../*.** Allo
2eeb0 77 65 64 20 72 65 74 75 72 6e 20 76 61 6c 75 65  wed return value
2eec0 73 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 46 69  s from sqlite3Fi
2eed0 6e 64 49 6e 49 6e 64 65 78 28 29 0a 2a 2f 0a 23  ndInIndex().*/.#
2eee0 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
2eef0 52 4f 57 49 44 20 20 20 20 20 20 20 20 31 20 20  ROWID        1  
2ef00 20 2f 2a 20 53 65 61 72 63 68 20 74 68 65 20 72   /* Search the r
2ef10 6f 77 69 64 20 6f 66 20 74 68 65 20 74 61 62 6c  owid of the tabl
2ef20 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f  e */.#define IN_
2ef30 49 4e 44 45 58 5f 45 50 48 20 20 20 20 20 20 20  INDEX_EPH       
2ef40 20 20 20 32 20 20 20 2f 2a 20 53 65 61 72 63 68     2   /* Search
2ef50 20 61 6e 20 65 70 68 65 6d 65 72 61 6c 20 62 2d   an ephemeral b-
2ef60 74 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tree */.#define 
2ef70 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f 41  IN_INDEX_INDEX_A
2ef80 53 43 20 20 20 20 33 20 20 20 2f 2a 20 45 78 69  SC    3   /* Exi
2ef90 73 74 69 6e 67 20 69 6e 64 65 78 20 41 53 43 45  sting index ASCE
2efa0 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e 65  NDING */.#define
2efb0 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f   IN_INDEX_INDEX_
2efc0 44 45 53 43 20 20 20 34 20 20 20 2f 2a 20 45 78  DESC   4   /* Ex
2efd0 69 73 74 69 6e 67 20 69 6e 64 65 78 20 44 45 53  isting index DES
2efe0 43 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69  CENDING */.#defi
2eff0 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50  ne IN_INDEX_NOOP
2f000 20 20 20 20 20 20 20 20 20 35 20 20 20 2f 2a 20           5   /* 
2f010 4e 6f 20 74 61 62 6c 65 20 61 76 61 69 6c 61 62  No table availab
2f020 6c 65 2e 20 55 73 65 20 63 6f 6d 70 61 72 69 73  le. Use comparis
2f030 6f 6e 73 20 2a 2f 0a 2f 2a 0a 2a 2a 20 41 6c 6c  ons */./*.** All
2f040 6f 77 65 64 20 66 6c 61 67 73 20 66 6f 72 20 74  owed flags for t
2f050 68 65 20 33 72 64 20 70 61 72 61 6d 65 74 65 72  he 3rd parameter
2f060 20 74 6f 20 73 71 6c 69 74 65 33 46 69 6e 64 49   to sqlite3FindI
2f070 6e 49 6e 64 65 78 28 29 2e 0a 2a 2f 0a 23 64 65  nIndex()..*/.#de
2f080 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f  fine IN_INDEX_NO
2f090 4f 50 5f 4f 4b 20 20 20 20 20 30 78 30 30 30 31  OP_OK     0x0001
2f0a0 20 20 2f 2a 20 4f 4b 20 74 6f 20 72 65 74 75 72    /* OK to retur
2f0b0 6e 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20  n IN_INDEX_NOOP 
2f0c0 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  */.#define IN_IN
2f0d0 44 45 58 5f 4d 45 4d 42 45 52 53 48 49 50 20 20  DEX_MEMBERSHIP  
2f0e0 30 78 30 30 30 32 20 20 2f 2a 20 49 4e 20 6f 70  0x0002  /* IN op
2f0f0 65 72 61 74 6f 72 20 75 73 65 64 20 66 6f 72 20  erator used for 
2f100 6d 65 6d 62 65 72 73 68 69 70 20 74 65 73 74 20  membership test 
2f110 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  */.#define IN_IN
2f120 44 45 58 5f 4c 4f 4f 50 20 20 20 20 20 20 20 20  DEX_LOOP        
2f130 30 78 30 30 30 34 20 20 2f 2a 20 49 4e 20 6f 70  0x0004  /* IN op
2f140 65 72 61 74 6f 72 20 75 73 65 64 20 61 73 20 61  erator used as a
2f150 20 6c 6f 6f 70 20 2a 2f 0a 69 6e 74 20 73 71 6c   loop */.int sql
2f160 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28  ite3FindInIndex(
2f170 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c  Parse *, Expr *,
2f180 20 75 33 32 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a   u32, int*, int*
2f190 29 3b 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a  );..int sqlite3J
2f1a0 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74  ournalOpen(sqlit
2f1b0 65 33 5f 76 66 73 20 2a 2c 20 63 6f 6e 73 74 20  e3_vfs *, const 
2f1c0 63 68 61 72 20 2a 2c 20 73 71 6c 69 74 65 33 5f  char *, sqlite3_
2f1d0 66 69 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  file *, int, int
2f1e0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f  );.int sqlite3Jo
2f1f0 75 72 6e 61 6c 53 69 7a 65 28 73 71 6c 69 74 65  urnalSize(sqlite
2f200 33 5f 76 66 73 20 2a 29 3b 0a 23 69 66 20 64 65  3_vfs *);.#if de
2f210 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
2f220 42 4c 45 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45  BLE_ATOMIC_WRITE
2f230 29 20 5c 0a 20 7c 7c 20 64 65 66 69 6e 65 64 28  ) \. || defined(
2f240 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 42 41  SQLITE_ENABLE_BA
2f250 54 43 48 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45  TCH_ATOMIC_WRITE
2f260 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a  ).  int sqlite3J
2f270 6f 75 72 6e 61 6c 43 72 65 61 74 65 28 73 71 6c  ournalCreate(sql
2f280 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 23 65  ite3_file *);.#e
2f290 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65  ndif..int sqlite
2f2a0 33 4a 6f 75 72 6e 61 6c 49 73 49 6e 4d 65 6d 6f  3JournalIsInMemo
2f2b0 72 79 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20  ry(sqlite3_file 
2f2c0 2a 70 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  *p);.void sqlite
2f2d0 33 4d 65 6d 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28  3MemJournalOpen(
2f2e0 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b  sqlite3_file *);
2f2f0 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ..void sqlite3Ex
2f300 70 72 53 65 74 48 65 69 67 68 74 41 6e 64 46 6c  prSetHeightAndFl
2f310 61 67 73 28 50 61 72 73 65 20 2a 70 50 61 72 73  ags(Parse *pPars
2f320 65 2c 20 45 78 70 72 20 2a 70 29 3b 0a 23 69 66  e, Expr *p);.#if
2f330 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52   SQLITE_MAX_EXPR
2f340 5f 44 45 50 54 48 3e 30 0a 20 20 69 6e 74 20 73  _DEPTH>0.  int s
2f350 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 72  qlite3SelectExpr
2f360 48 65 69 67 68 74 28 53 65 6c 65 63 74 20 2a 29  Height(Select *)
2f370 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 45  ;.  int sqlite3E
2f380 78 70 72 43 68 65 63 6b 48 65 69 67 68 74 28 50  xprCheckHeight(P
2f390 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c  arse*, int);.#el
2f3a0 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  se.  #define sql
2f3b0 69 74 65 33 53 65 6c 65 63 74 45 78 70 72 48 65  ite3SelectExprHe
2f3c0 69 67 68 74 28 78 29 20 30 0a 20 20 23 64 65 66  ight(x) 0.  #def
2f3d0 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 72 43  ine sqlite3ExprC
2f3e0 68 65 63 6b 48 65 69 67 68 74 28 78 2c 79 29 0a  heckHeight(x,y).
2f3f0 23 65 6e 64 69 66 0a 0a 75 33 32 20 73 71 6c 69  #endif..u32 sqli
2f400 74 65 33 47 65 74 34 62 79 74 65 28 63 6f 6e 73  te3Get4byte(cons
2f410 74 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  t u8*);.void sql
2f420 69 74 65 33 50 75 74 34 62 79 74 65 28 75 38 2a  ite3Put4byte(u8*
2f430 2c 20 75 33 32 29 3b 0a 0a 23 69 66 64 65 66 20  , u32);..#ifdef 
2f440 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e  SQLITE_ENABLE_UN
2f450 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 76 6f  LOCK_NOTIFY.  vo
2f460 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63  id sqlite3Connec
2f470 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 73 71 6c 69  tionBlocked(sqli
2f480 74 65 33 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a  te3 *, sqlite3 *
2f490 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
2f4a0 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63  3ConnectionUnloc
2f4b0 6b 65 64 28 73 71 6c 69 74 65 33 20 2a 64 62 29  ked(sqlite3 *db)
2f4c0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2f4d0 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64  ConnectionClosed
2f4e0 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 23  (sqlite3 *db);.#
2f4f0 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
2f500 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e  qlite3Connection
2f510 42 6c 6f 63 6b 65 64 28 78 2c 79 29 0a 20 20 23  Blocked(x,y).  #
2f520 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f  define sqlite3Co
2f530 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64  nnectionUnlocked
2f540 28 78 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  (x).  #define sq
2f550 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43  lite3ConnectionC
2f560 6c 6f 73 65 64 28 78 29 0a 23 65 6e 64 69 66 0a  losed(x).#endif.
2f570 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
2f580 45 42 55 47 0a 20 20 76 6f 69 64 20 73 71 6c 69  EBUG.  void sqli
2f590 74 65 33 50 61 72 73 65 72 54 72 61 63 65 28 46  te3ParserTrace(F
2f5a0 49 4c 45 2a 2c 20 63 68 61 72 20 2a 29 3b 0a 23  ILE*, char *);.#
2f5b0 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65  endif.#if define
2f5c0 64 28 59 59 43 4f 56 45 52 41 47 45 29 0a 20 20  d(YYCOVERAGE).  
2f5d0 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73 65  int sqlite3Parse
2f5e0 72 43 6f 76 65 72 61 67 65 28 46 49 4c 45 2a 29  rCoverage(FILE*)
2f5f0 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ;.#endif../*.** 
2f600 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e  If the SQLITE_EN
2f610 41 42 4c 45 20 49 4f 54 52 41 43 45 20 65 78 69  ABLE IOTRACE exi
2f620 73 74 73 20 74 68 65 6e 20 74 68 65 20 67 6c 6f  sts then the glo
2f630 62 61 6c 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20  bal variable.** 
2f640 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 69  sqlite3IoTrace i
2f650 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
2f660 20 70 72 69 6e 74 66 2d 6c 69 6b 65 20 72 6f 75   printf-like rou
2f670 74 69 6e 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20  tine used to.** 
2f680 70 72 69 6e 74 20 49 2f 4f 20 74 72 61 63 69 6e  print I/O tracin
2f690 67 20 6d 65 73 73 61 67 65 73 2e 0a 2a 2f 0a 23  g messages..*/.#
2f6a0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
2f6b0 42 4c 45 5f 49 4f 54 52 41 43 45 0a 23 20 64 65  BLE_IOTRACE.# de
2f6c0 66 69 6e 65 20 49 4f 54 52 41 43 45 28 41 29 20  fine IOTRACE(A) 
2f6d0 20 69 66 28 20 73 71 6c 69 74 65 33 49 6f 54 72   if( sqlite3IoTr
2f6e0 61 63 65 20 29 7b 20 73 71 6c 69 74 65 33 49 6f  ace ){ sqlite3Io
2f6f0 54 72 61 63 65 20 41 3b 20 7d 0a 20 20 76 6f 69  Trace A; }.  voi
2f700 64 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54  d sqlite3VdbeIOT
2f710 72 61 63 65 53 71 6c 28 56 64 62 65 2a 29 3b 0a  raceSql(Vdbe*);.
2f720 53 51 4c 49 54 45 5f 41 50 49 20 53 51 4c 49 54  SQLITE_API SQLIT
2f730 45 5f 45 58 54 45 52 4e 20 76 6f 69 64 20 28 53  E_EXTERN void (S
2f740 51 4c 49 54 45 5f 43 44 45 43 4c 20 2a 73 71 6c  QLITE_CDECL *sql
2f750 69 74 65 33 49 6f 54 72 61 63 65 29 28 63 6f 6e  ite3IoTrace)(con
2f760 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23  st char*,...);.#
2f770 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 49 4f  else.# define IO
2f780 54 52 41 43 45 28 41 29 0a 23 20 64 65 66 69 6e  TRACE(A).# defin
2f790 65 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54  e sqlite3VdbeIOT
2f7a0 72 61 63 65 53 71 6c 28 58 29 0a 23 65 6e 64 69  raceSql(X).#endi
2f7b0 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 72  f../*.** These r
2f7c0 6f 75 74 69 6e 65 73 20 61 72 65 20 61 76 61 69  outines are avai
2f7d0 6c 61 62 6c 65 20 66 6f 72 20 74 68 65 20 6d 65  lable for the me
2f7e0 6d 32 2e 63 20 64 65 62 75 67 67 69 6e 67 20 6d  m2.c debugging m
2f7f0 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72 0a  emory allocator.
2f800 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 79 20 61  ** only.  They a
2f810 72 65 20 75 73 65 64 20 74 6f 20 76 65 72 69 66  re used to verif
2f820 79 20 74 68 61 74 20 64 69 66 66 65 72 65 6e 74  y that different
2f830 20 22 74 79 70 65 73 22 20 6f 66 20 6d 65 6d 6f   "types" of memo
2f840 72 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e  ry.** allocation
2f850 73 20 61 72 65 20 70 72 6f 70 65 72 6c 79 20 74  s are properly t
2f860 72 61 63 6b 65 64 20 62 79 20 74 68 65 20 73 79  racked by the sy
2f870 73 74 65 6d 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69  stem..**.** sqli
2f880 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79  te3MemdebugSetTy
2f890 70 65 28 29 20 73 65 74 73 20 74 68 65 20 22 74  pe() sets the "t
2f8a0 79 70 65 22 20 6f 66 20 61 6e 20 61 6c 6c 6f 63  ype" of an alloc
2f8b0 61 74 69 6f 6e 20 74 6f 20 6f 6e 65 20 6f 66 0a  ation to one of.
2f8c0 2a 2a 20 74 68 65 20 4d 45 4d 54 59 50 45 5f 2a  ** the MEMTYPE_*
2f8d0 20 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 64 20   macros defined 
2f8e0 62 65 6c 6f 77 2e 20 20 54 68 65 20 74 79 70 65  below.  The type
2f8f0 20 6d 75 73 74 20 62 65 20 61 20 62 69 74 6d 61   must be a bitma
2f900 73 6b 20 77 69 74 68 0a 2a 2a 20 61 20 73 69 6e  sk with.** a sin
2f910 67 6c 65 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a  gle bit set..**.
2f920 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ** sqlite3Memdeb
2f930 75 67 48 61 73 54 79 70 65 28 29 20 72 65 74 75  ugHasType() retu
2f940 72 6e 73 20 74 72 75 65 20 69 66 20 61 6e 79 20  rns true if any 
2f950 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e 20 69  of the bits in i
2f960 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67  ts second.** arg
2f970 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68 65 20  ument match the 
2f980 74 79 70 65 20 73 65 74 20 62 79 20 74 68 65 20  type set by the 
2f990 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74 65 33  previous sqlite3
2f9a0 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28  MemdebugSetType(
2f9b0 29 2e 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d  )..** sqlite3Mem
2f9c0 64 65 62 75 67 48 61 73 54 79 70 65 28 29 20 69  debugHasType() i
2f9d0 73 20 69 6e 74 65 6e 64 65 64 20 66 6f 72 20 75  s intended for u
2f9e0 73 65 20 69 6e 73 69 64 65 20 61 73 73 65 72 74  se inside assert
2f9f0 28 29 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a  () statements..*
2fa00 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64  *.** sqlite3Memd
2fa10 65 62 75 67 4e 6f 54 79 70 65 28 29 20 72 65 74  ebugNoType() ret
2fa20 75 72 6e 73 20 74 72 75 65 20 69 66 20 6e 6f 6e  urns true if non
2fa30 65 20 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e  e of the bits in
2fa40 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61   its second.** a
2fa50 72 67 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68  rgument match th
2fa60 65 20 74 79 70 65 20 73 65 74 20 62 79 20 74 68  e type set by th
2fa70 65 20 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74  e previous sqlit
2fa80 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70  e3MemdebugSetTyp
2fa90 65 28 29 2e 0a 2a 2a 0a 2a 2a 20 50 65 72 68 61  e()..**.** Perha
2faa0 70 73 20 74 68 65 20 6d 6f 73 74 20 69 6d 70 6f  ps the most impo
2fab0 72 74 61 6e 74 20 70 6f 69 6e 74 20 69 73 20 74  rtant point is t
2fac0 68 65 20 64 69 66 66 65 72 65 6e 63 65 20 62 65  he difference be
2fad0 74 77 65 65 6e 20 4d 45 4d 54 59 50 45 5f 48 45  tween MEMTYPE_HE
2fae0 41 50 0a 2a 2a 20 61 6e 64 20 4d 45 4d 54 59 50  AP.** and MEMTYP
2faf0 45 5f 4c 4f 4f 4b 41 53 49 44 45 2e 20 20 49 66  E_LOOKASIDE.  If
2fb00 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69   an allocation i
2fb10 73 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53  s MEMTYPE_LOOKAS
2fb20 49 44 45 2c 20 74 68 61 74 20 6d 65 61 6e 73 0a  IDE, that means.
2fb30 2a 2a 20 69 74 20 6d 69 67 68 74 20 68 61 76 65  ** it might have
2fb40 20 62 65 65 6e 20 61 6c 6c 6f 63 61 74 65 64 20   been allocated 
2fb50 62 79 20 6c 6f 6f 6b 61 73 69 64 65 2c 20 65 78  by lookaside, ex
2fb60 63 65 70 74 20 74 68 65 20 61 6c 6c 6f 63 61 74  cept the allocat
2fb70 69 6f 6e 20 77 61 73 0a 2a 2a 20 74 6f 6f 20 6c  ion was.** too l
2fb80 61 72 67 65 20 6f 72 20 6c 6f 6f 6b 61 73 69 64  arge or lookasid
2fb90 65 20 77 61 73 20 61 6c 72 65 61 64 79 20 66 75  e was already fu
2fba0 6c 6c 2e 20 20 49 74 20 69 73 20 69 6d 70 6f 72  ll.  It is impor
2fbb0 74 61 6e 74 20 74 6f 20 76 65 72 69 66 79 0a 2a  tant to verify.*
2fbc0 2a 20 74 68 61 74 20 61 6c 6c 6f 63 61 74 69 6f  * that allocatio
2fbd0 6e 73 20 74 68 61 74 20 6d 69 67 68 74 20 68 61  ns that might ha
2fbe0 76 65 20 62 65 65 6e 20 73 61 74 69 73 66 69 65  ve been satisfie
2fbf0 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65 20 61  d by lookaside a
2fc00 72 65 20 6e 6f 74 0a 2a 2a 20 70 61 73 73 65 64  re not.** passed
2fc10 20 62 61 63 6b 20 74 6f 20 6e 6f 6e 2d 6c 6f 6f   back to non-loo
2fc20 6b 61 73 69 64 65 20 66 72 65 65 28 29 20 72 6f  kaside free() ro
2fc30 75 74 69 6e 65 73 2e 20 20 41 73 73 65 72 74 73  utines.  Asserts
2fc40 20 73 75 63 68 20 61 73 20 74 68 65 0a 2a 2a 20   such as the.** 
2fc50 65 78 61 6d 70 6c 65 20 61 62 6f 76 65 20 61 72  example above ar
2fc60 65 20 70 6c 61 63 65 64 20 6f 6e 20 74 68 65 20  e placed on the 
2fc70 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72  non-lookaside fr
2fc80 65 65 28 29 20 72 6f 75 74 69 6e 65 73 20 74 6f  ee() routines to
2fc90 20 76 65 72 69 66 79 0a 2a 2a 20 74 68 69 73 20   verify.** this 
2fca0 63 6f 6e 73 74 72 61 69 6e 74 2e 0a 2a 2a 0a 2a  constraint..**.*
2fcb0 2a 20 41 6c 6c 20 6f 66 20 74 68 69 73 20 69 73  * All of this is
2fcc0 20 6e 6f 2d 6f 70 20 66 6f 72 20 61 20 70 72 6f   no-op for a pro
2fcd0 64 75 63 74 69 6f 6e 20 62 75 69 6c 64 2e 20 20  duction build.  
2fce0 49 74 20 6f 6e 6c 79 20 63 6f 6d 65 73 20 69 6e  It only comes in
2fcf0 74 6f 0a 2a 2a 20 70 6c 61 79 20 77 68 65 6e 20  to.** play when 
2fd00 74 68 65 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45  the SQLITE_MEMDE
2fd10 42 55 47 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  BUG compile-time
2fd20 20 6f 70 74 69 6f 6e 20 69 73 20 75 73 65 64 2e   option is used.
2fd30 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
2fd40 45 5f 4d 45 4d 44 45 42 55 47 0a 20 20 76 6f 69  E_MEMDEBUG.  voi
2fd50 64 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  d sqlite3Memdebu
2fd60 67 53 65 74 54 79 70 65 28 76 6f 69 64 2a 2c 75  gSetType(void*,u
2fd70 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  8);.  int sqlite
2fd80 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65  3MemdebugHasType
2fd90 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e  (void*,u8);.  in
2fda0 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  t sqlite3Memdebu
2fdb0 67 4e 6f 54 79 70 65 28 76 6f 69 64 2a 2c 75 38  gNoType(void*,u8
2fdc0 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
2fdd0 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  e sqlite3Memdebu
2fde0 67 53 65 74 54 79 70 65 28 58 2c 59 29 20 20 2f  gSetType(X,Y)  /
2fdf0 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 20 64 65 66  * no-op */.# def
2fe00 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  ine sqlite3Memde
2fe10 62 75 67 48 61 73 54 79 70 65 28 58 2c 59 29 20  bugHasType(X,Y) 
2fe20 20 31 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69   1.# define sqli
2fe30 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70  te3MemdebugNoTyp
2fe40 65 28 58 2c 59 29 20 20 20 31 0a 23 65 6e 64 69  e(X,Y)   1.#endi
2fe50 66 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50  f.#define MEMTYP
2fe60 45 5f 48 45 41 50 20 20 20 20 20 20 20 30 78 30  E_HEAP       0x0
2fe70 31 20 20 2f 2a 20 47 65 6e 65 72 61 6c 20 68 65  1  /* General he
2fe80 61 70 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a  ap allocations *
2fe90 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50  /.#define MEMTYP
2fea0 45 5f 4c 4f 4f 4b 41 53 49 44 45 20 20 30 78 30  E_LOOKASIDE  0x0
2feb0 32 20 20 2f 2a 20 48 65 61 70 20 74 68 61 74 20  2  /* Heap that 
2fec0 6d 69 67 68 74 20 68 61 76 65 20 62 65 65 6e 20  might have been 
2fed0 6c 6f 6f 6b 61 73 69 64 65 20 2a 2f 0a 23 64 65  lookaside */.#de
2fee0 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 50 43 41  fine MEMTYPE_PCA
2fef0 43 48 45 20 20 20 20 20 30 78 30 34 20 20 2f 2a  CHE     0x04  /*
2ff00 20 50 61 67 65 20 63 61 63 68 65 20 61 6c 6c 6f   Page cache allo
2ff10 63 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a  cations */../*.*
2ff20 2a 20 54 68 72 65 61 64 69 6e 67 20 69 6e 74 65  * Threading inte
2ff30 72 66 61 63 65 0a 2a 2f 0a 23 69 66 20 53 51 4c  rface.*/.#if SQL
2ff40 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
2ff50 48 52 45 41 44 53 3e 30 0a 69 6e 74 20 73 71 6c  HREADS>0.int sql
2ff60 69 74 65 33 54 68 72 65 61 64 43 72 65 61 74 65  ite3ThreadCreate
2ff70 28 53 51 4c 69 74 65 54 68 72 65 61 64 2a 2a 2c  (SQLiteThread**,
2ff80 76 6f 69 64 2a 28 2a 29 28 76 6f 69 64 2a 29 2c  void*(*)(void*),
2ff90 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  void*);.int sqli
2ffa0 74 65 33 54 68 72 65 61 64 4a 6f 69 6e 28 53 51  te3ThreadJoin(SQ
2ffb0 4c 69 74 65 54 68 72 65 61 64 2a 2c 20 76 6f 69  LiteThread*, voi
2ffc0 64 2a 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  d**);.#endif..#i
2ffd0 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
2ffe0 5f 45 4e 41 42 4c 45 5f 44 42 50 41 47 45 5f 56  _ENABLE_DBPAGE_V
2fff0 54 41 42 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  TAB) || defined(
30000 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 69 6e 74  SQLITE_TEST).int
30010 20 73 71 6c 69 74 65 33 44 62 70 61 67 65 52 65   sqlite3DbpageRe
30020 67 69 73 74 65 72 28 73 71 6c 69 74 65 33 2a 29  gister(sqlite3*)
30030 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66  ;.#endif.#if def
30040 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
30050 4c 45 5f 44 42 53 54 41 54 5f 56 54 41 42 29 20  LE_DBSTAT_VTAB) 
30060 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  || defined(SQLIT
30070 45 5f 54 45 53 54 29 0a 69 6e 74 20 73 71 6c 69  E_TEST).int sqli
30080 74 65 33 44 62 73 74 61 74 52 65 67 69 73 74 65  te3DbstatRegiste
30090 72 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6e  r(sqlite3*);.#en
300a0 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33  dif..int sqlite3
300b0 45 78 70 72 56 65 63 74 6f 72 53 69 7a 65 28 45  ExprVectorSize(E
300c0 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74  xpr *pExpr);.int
300d0 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 56 65   sqlite3ExprIsVe
300e0 63 74 6f 72 28 45 78 70 72 20 2a 70 45 78 70 72  ctor(Expr *pExpr
300f0 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
30100 56 65 63 74 6f 72 46 69 65 6c 64 53 75 62 65 78  VectorFieldSubex
30110 70 72 28 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  pr(Expr*, int);.
30120 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
30130 72 46 6f 72 56 65 63 74 6f 72 46 69 65 6c 64 28  rForVectorField(
30140 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 69 6e 74  Parse*,Expr*,int
30150 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
30160 65 63 74 6f 72 45 72 72 6f 72 4d 73 67 28 50 61  ectorErrorMsg(Pa
30170 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 0a 23  rse*, Expr*);..#
30180 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
30190 49 54 5f 43 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e  IT_COMPILEOPTION
301a0 5f 44 49 41 47 53 0a 63 6f 6e 73 74 20 63 68 61  _DIAGS.const cha
301b0 72 20 2a 2a 73 71 6c 69 74 65 33 43 6f 6d 70 69  r **sqlite3Compi
301c0 6c 65 4f 70 74 69 6f 6e 73 28 69 6e 74 20 2a 70  leOptions(int *p
301d0 6e 4f 70 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  nOpt);.#endif..#
301e0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 49  endif /* SQLITEI
301f0 4e 54 5f 48 20 2a 2f 0a                          NT_H */.