/ Hex Artifact Content
Login

Artifact d51b1b549b6f64a44b0f5f5620aeb5bba414cf07704978238885b273ce2aa84f:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 53 51 4c 49 54 45 49 4e 54 5f 48 0a 23  ef SQLITEINT_H.#
01c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 49 4e 54  define SQLITEINT
01d0: 5f 48 0a 0a 2f 2a 20 53 70 65 63 69 61 6c 20 43  _H../* Special C
01e0: 6f 6d 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 53  omments:.**.** S
01f0: 6f 6d 65 20 63 6f 6d 6d 65 6e 74 73 20 68 61 76  ome comments hav
0200: 65 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e  e special meanin
0210: 67 20 74 6f 20 74 68 65 20 74 6f 6f 6c 73 20 74  g to the tools t
0220: 68 61 74 20 6d 65 61 73 75 72 65 20 74 65 73 74  hat measure test
0230: 0a 2a 2a 20 63 6f 76 65 72 61 67 65 3a 0a 2a 2a  .** coverage:.**
0240: 0a 2a 2a 20 20 20 20 4e 4f 5f 54 45 53 54 20 20  .**    NO_TEST  
0250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0260: 20 20 20 2d 20 54 68 65 20 62 72 61 6e 63 68 65     - The branche
0270: 73 20 6f 6e 20 74 68 69 73 20 6c 69 6e 65 20 61  s on this line a
0280: 72 65 20 6e 6f 74 0a 2a 2a 20 20 20 20 20 20 20  re not.**       
0290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02a0: 20 20 20 20 20 20 20 20 20 20 20 6d 65 61 73 75             measu
02b0: 72 65 64 20 62 79 20 62 72 61 6e 63 68 20 63 6f  red by branch co
02c0: 76 65 72 61 67 65 2e 20 20 54 68 69 73 20 69 73  verage.  This is
02d0: 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
02e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02f0: 20 20 20 20 20 75 73 65 64 20 6f 6e 20 6c 69 6e       used on lin
0300: 65 73 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20  es of code that 
0310: 61 63 74 75 61 6c 6c 79 0a 2a 2a 20 20 20 20 20  actually.**     
0320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0330: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6d 70               imp
0340: 6c 65 6d 65 6e 74 20 70 61 72 74 73 20 6f 66 20  lement parts of 
0350: 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e 67  coverage testing
0360: 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d  ..**.**    OPTIM
0370: 49 5a 41 54 49 4f 4e 2d 49 46 2d 54 52 55 45 20  IZATION-IF-TRUE 
0380: 20 20 20 20 20 20 20 2d 20 54 68 69 73 20 62 72         - This br
0390: 61 6e 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20  anch is allowed 
03a0: 74 6f 20 61 6c 77 61 79 20 62 65 20 66 61 6c 73  to alway be fals
03b0: 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
03c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
03d0: 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 63 6f        and the co
03e0: 72 72 65 63 74 20 61 6e 73 77 65 72 20 69 73 20  rrect answer is 
03f0: 73 74 69 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a  still obtained,.
0400: 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
0410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0420: 20 20 20 20 74 68 6f 75 67 68 20 70 65 72 68 61      though perha
0430: 70 73 20 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a  ps more slowly..
0440: 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d 49 5a  **.**    OPTIMIZ
0450: 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 20 20  ATION-IF-FALSE  
0460: 20 20 20 20 20 2d 20 54 68 69 73 20 62 72 61 6e       - This bran
0470: 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f  ch is allowed to
0480: 20 61 6c 77 61 79 20 62 65 20 74 72 75 65 0a 2a   alway be true.*
0490: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
04a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04b0: 20 20 20 61 6e 64 20 74 68 65 20 63 6f 72 72 65     and the corre
04c0: 63 74 20 61 6e 73 77 65 72 20 69 73 20 73 74 69  ct answer is sti
04d0: 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a 2a 2a 20  ll obtained,.** 
04e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0500: 20 74 68 6f 75 67 68 20 70 65 72 68 61 70 73 20   though perhaps 
0510: 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a 2a 2a 0a  more slowly..**.
0520: 2a 2a 20 20 20 20 50 52 45 56 45 4e 54 53 2d 48  **    PREVENTS-H
0530: 41 52 4d 4c 45 53 53 2d 4f 56 45 52 52 45 41 44  ARMLESS-OVERREAD
0540: 20 20 2d 20 54 68 69 73 20 62 72 61 6e 63 68 20    - This branch 
0550: 70 72 65 76 65 6e 74 73 20 61 20 62 75 66 66 65  prevents a buffe
0560: 72 20 6f 76 65 72 72 65 61 64 0a 2a 2a 20 20 20  r overread.**   
0570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
0590: 68 61 74 20 77 6f 75 6c 64 20 62 65 20 68 61 72  hat would be har
05a0: 6d 6c 65 73 73 20 61 6e 64 20 75 6e 64 65 74 65  mless and undete
05b0: 63 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20  ctable.**       
05c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
05d0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 69 74             if it
05e0: 20 64 69 64 20 6f 63 63 75 72 2e 20 20 0a 2a 2a   did occur.  .**
05f0: 0a 2a 2a 20 49 6e 20 61 6c 6c 20 63 61 73 65 73  .** In all cases
0600: 2c 20 74 68 65 20 73 70 65 63 69 61 6c 20 63 6f  , the special co
0610: 6d 6d 65 6e 74 20 6d 75 73 74 20 62 65 20 65 6e  mment must be en
0620: 63 6c 6f 73 65 64 20 69 6e 20 74 68 65 20 75 73  closed in the us
0630: 75 61 6c 0a 2a 2a 20 73 6c 61 73 68 2d 61 73 74  ual.** slash-ast
0640: 65 72 69 73 6b 2e 2e 2e 61 73 74 65 72 69 73 6b  erisk...asterisk
0650: 2d 73 6c 61 73 68 20 63 6f 6d 6d 65 6e 74 20 6d  -slash comment m
0660: 61 72 6b 73 2c 20 77 69 74 68 20 6e 6f 20 73 70  arks, with no sp
0670: 61 63 65 73 20 62 65 74 77 65 65 6e 20 74 68 65  aces between the
0680: 20 0a 2a 2a 20 61 73 74 65 72 69 73 6b 73 20 61   .** asterisks a
0690: 6e 64 20 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74  nd the comment t
06a0: 65 78 74 2e 0a 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d  ext..*/../*.** M
06b0: 61 6b 65 20 73 75 72 65 20 74 68 65 20 54 63 6c  ake sure the Tcl
06c0: 20 63 61 6c 6c 69 6e 67 20 63 6f 6e 76 65 6e 74   calling convent
06d0: 69 6f 6e 20 6d 61 63 72 6f 20 69 73 20 64 65 66  ion macro is def
06e0: 69 6e 65 64 2e 20 20 54 68 69 73 20 6d 61 63 72  ined.  This macr
06f0: 6f 20 69 73 0a 2a 2a 20 6f 6e 6c 79 20 75 73 65  o is.** only use
0700: 64 20 62 79 20 74 65 73 74 20 63 6f 64 65 20 61  d by test code a
0710: 6e 64 20 54 63 6c 20 69 6e 74 65 67 72 61 74 69  nd Tcl integrati
0720: 6f 6e 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 6e  on code..*/.#ifn
0730: 64 65 66 20 53 51 4c 49 54 45 5f 54 43 4c 41 50  def SQLITE_TCLAP
0740: 49 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49  I.#  define SQLI
0750: 54 45 5f 54 43 4c 41 50 49 0a 23 65 6e 64 69 66  TE_TCLAPI.#endif
0760: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c 75 64 65 20  ../*.** Include 
0770: 74 68 65 20 68 65 61 64 65 72 20 66 69 6c 65 20  the header file 
0780: 75 73 65 64 20 74 6f 20 63 75 73 74 6f 6d 69 7a  used to customiz
0790: 65 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 6f  e the compiler o
07a0: 70 74 69 6f 6e 73 20 66 6f 72 20 4d 53 56 43 2e  ptions for MSVC.
07b0: 0a 2a 2a 20 54 68 69 73 20 73 68 6f 75 6c 64 20  .** This should 
07c0: 62 65 20 64 6f 6e 65 20 66 69 72 73 74 20 73 6f  be done first so
07d0: 20 74 68 61 74 20 69 74 20 63 61 6e 20 73 75 63   that it can suc
07e0: 63 65 73 73 66 75 6c 6c 79 20 70 72 65 76 65 6e  cessfully preven
07f0: 74 20 73 70 75 72 69 6f 75 73 0a 2a 2a 20 63 6f  t spurious.** co
0800: 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 73 20  mpiler warnings 
0810: 64 75 65 20 74 6f 20 73 75 62 73 65 71 75 65 6e  due to subsequen
0820: 74 20 63 6f 6e 74 65 6e 74 20 69 6e 20 74 68 69  t content in thi
0830: 73 20 66 69 6c 65 20 61 6e 64 20 6f 74 68 65 72  s file and other
0840: 20 66 69 6c 65 73 0a 2a 2a 20 74 68 61 74 20 61   files.** that a
0850: 72 65 20 69 6e 63 6c 75 64 65 64 20 62 79 20 74  re included by t
0860: 68 69 73 20 66 69 6c 65 2e 0a 2a 2f 0a 23 69 6e  his file..*/.#in
0870: 63 6c 75 64 65 20 22 6d 73 76 63 2e 68 22 0a 0a  clude "msvc.h"..
0880: 2f 2a 0a 2a 2a 20 53 70 65 63 69 61 6c 20 73 65  /*.** Special se
0890: 74 75 70 20 66 6f 72 20 56 78 57 6f 72 6b 73 0a  tup for VxWorks.
08a0: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 76 78 77  */.#include "vxw
08b0: 6f 72 6b 73 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 54  orks.h"../*.** T
08c0: 68 65 73 65 20 23 64 65 66 69 6e 65 73 20 73 68  hese #defines sh
08d0: 6f 75 6c 64 20 65 6e 61 62 6c 65 20 3e 32 47 42  ould enable >2GB
08e0: 20 66 69 6c 65 20 73 75 70 70 6f 72 74 20 6f 6e   file support on
08f0: 20 50 4f 53 49 58 20 69 66 20 74 68 65 0a 2a 2a   POSIX if the.**
0900: 20 75 6e 64 65 72 6c 79 69 6e 67 20 6f 70 65 72   underlying oper
0910: 61 74 69 6e 67 20 73 79 73 74 65 6d 20 73 75 70  ating system sup
0920: 70 6f 72 74 73 20 69 74 2e 20 20 49 66 20 74 68  ports it.  If th
0930: 65 20 4f 53 20 6c 61 63 6b 73 0a 2a 2a 20 6c 61  e OS lacks.** la
0940: 72 67 65 20 66 69 6c 65 20 73 75 70 70 6f 72 74  rge file support
0950: 2c 20 6f 72 20 69 66 20 74 68 65 20 4f 53 20 69  , or if the OS i
0960: 73 20 77 69 6e 64 6f 77 73 2c 20 74 68 65 73 65  s windows, these
0970: 20 73 68 6f 75 6c 64 20 62 65 20 6e 6f 2d 6f 70   should be no-op
0980: 73 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20  s..**.** Ticket 
0990: 23 32 37 33 39 3a 20 20 54 68 65 20 5f 4c 41 52  #2739:  The _LAR
09a0: 47 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 6d 61  GEFILE_SOURCE ma
09b0: 63 72 6f 20 6d 75 73 74 20 61 70 70 65 61 72 20  cro must appear 
09c0: 62 65 66 6f 72 65 20 61 6e 79 0a 2a 2a 20 73 79  before any.** sy
09d0: 73 74 65 6d 20 23 69 6e 63 6c 75 64 65 73 2e 20  stem #includes. 
09e0: 20 48 65 6e 63 65 2c 20 74 68 69 73 20 62 6c 6f   Hence, this blo
09f0: 63 6b 20 6f 66 20 63 6f 64 65 20 6d 75 73 74 20  ck of code must 
0a00: 62 65 20 74 68 65 20 76 65 72 79 20 66 69 72 73  be the very firs
0a10: 74 0a 2a 2a 20 63 6f 64 65 20 69 6e 20 61 6c 6c  t.** code in all
0a20: 20 73 6f 75 72 63 65 20 66 69 6c 65 73 2e 0a 2a   source files..*
0a30: 2a 0a 2a 2a 20 4c 61 72 67 65 20 66 69 6c 65 20  *.** Large file 
0a40: 73 75 70 70 6f 72 74 20 63 61 6e 20 62 65 20 64  support can be d
0a50: 69 73 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68  isabled using th
0a60: 65 20 2d 44 53 51 4c 49 54 45 5f 44 49 53 41 42  e -DSQLITE_DISAB
0a70: 4c 45 5f 4c 46 53 20 73 77 69 74 63 68 0a 2a 2a  LE_LFS switch.**
0a80: 20 6f 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 72   on the compiler
0a90: 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2e 20 20   command line.  
0aa0: 54 68 69 73 20 69 73 20 6e 65 63 65 73 73 61 72  This is necessar
0ab0: 79 20 69 66 20 79 6f 75 20 61 72 65 20 63 6f 6d  y if you are com
0ac0: 70 69 6c 69 6e 67 0a 2a 2a 20 6f 6e 20 61 20 72  piling.** on a r
0ad0: 65 63 65 6e 74 20 6d 61 63 68 69 6e 65 20 28 65  ecent machine (e
0ae0: 78 3a 20 52 65 64 20 48 61 74 20 37 2e 32 29 20  x: Red Hat 7.2) 
0af0: 62 75 74 20 79 6f 75 20 77 61 6e 74 20 79 6f 75  but you want you
0b00: 72 20 63 6f 64 65 20 74 6f 20 77 6f 72 6b 0a 2a  r code to work.*
0b10: 2a 20 6f 6e 20 61 6e 20 6f 6c 64 65 72 20 6d 61  * on an older ma
0b20: 63 68 69 6e 65 20 28 65 78 3a 20 52 65 64 20 48  chine (ex: Red H
0b30: 61 74 20 36 2e 30 29 2e 20 20 49 66 20 79 6f 75  at 6.0).  If you
0b40: 20 63 6f 6d 70 69 6c 65 20 6f 6e 20 52 65 64 20   compile on Red 
0b50: 48 61 74 20 37 2e 32 0a 2a 2a 20 77 69 74 68 6f  Hat 7.2.** witho
0b60: 75 74 20 74 68 69 73 20 6f 70 74 69 6f 6e 2c 20  ut this option, 
0b70: 4c 46 53 20 69 73 20 65 6e 61 62 6c 65 2e 20 20  LFS is enable.  
0b80: 42 75 74 20 4c 46 53 20 64 6f 65 73 20 6e 6f 74  But LFS does not
0b90: 20 65 78 69 73 74 20 69 6e 20 74 68 65 20 6b 65   exist in the ke
0ba0: 72 6e 65 6c 0a 2a 2a 20 69 6e 20 52 65 64 20 48  rnel.** in Red H
0bb0: 61 74 20 36 2e 30 2c 20 73 6f 20 74 68 65 20 63  at 6.0, so the c
0bc0: 6f 64 65 20 77 6f 6e 27 74 20 77 6f 72 6b 2e 20  ode won't work. 
0bd0: 20 48 65 6e 63 65 2c 20 66 6f 72 20 6d 61 78 69   Hence, for maxi
0be0: 6d 75 6d 20 62 69 6e 61 72 79 0a 2a 2a 20 70 6f  mum binary.** po
0bf0: 72 74 61 62 69 6c 69 74 79 20 79 6f 75 20 73 68  rtability you sh
0c00: 6f 75 6c 64 20 6f 6d 69 74 20 4c 46 53 2e 0a 2a  ould omit LFS..*
0c10: 2a 0a 2a 2a 20 54 68 65 20 70 72 65 76 69 6f 75  *.** The previou
0c20: 73 20 70 61 72 61 67 72 61 70 68 20 77 61 73 20  s paragraph was 
0c30: 77 72 69 74 74 65 6e 20 69 6e 20 32 30 30 35 2e  written in 2005.
0c40: 20 20 28 54 68 69 73 20 70 61 72 61 67 72 61 70    (This paragrap
0c50: 68 20 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20  h is written.** 
0c60: 6f 6e 20 32 30 30 38 2d 31 31 2d 32 38 2e 29 20  on 2008-11-28.) 
0c70: 54 68 65 73 65 20 64 61 79 73 2c 20 61 6c 6c 20  These days, all 
0c80: 4c 69 6e 75 78 20 6b 65 72 6e 65 6c 73 20 73 75  Linux kernels su
0c90: 70 70 6f 72 74 20 6c 61 72 67 65 20 66 69 6c 65  pport large file
0ca0: 73 2c 20 73 6f 0a 2a 2a 20 79 6f 75 20 73 68 6f  s, so.** you sho
0cb0: 75 6c 64 20 70 72 6f 62 61 62 6c 79 20 6c 65 61  uld probably lea
0cc0: 76 65 20 4c 46 53 20 65 6e 61 62 6c 65 64 2e 20  ve LFS enabled. 
0cd0: 20 42 75 74 20 73 6f 6d 65 20 65 6d 62 65 64 64   But some embedd
0ce0: 65 64 20 70 6c 61 74 66 6f 72 6d 73 20 6d 69 67  ed platforms mig
0cf0: 68 74 0a 2a 2a 20 6c 61 63 6b 20 4c 46 53 20 69  ht.** lack LFS i
0d00: 6e 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65  n which case the
0d10: 20 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f   SQLITE_DISABLE_
0d20: 4c 46 53 20 6d 61 63 72 6f 20 6d 69 67 68 74 20  LFS macro might 
0d30: 73 74 69 6c 6c 20 62 65 20 75 73 65 66 75 6c 2e  still be useful.
0d40: 0a 2a 2a 0a 2a 2a 20 53 69 6d 69 6c 61 72 20 69  .**.** Similar i
0d50: 73 20 74 72 75 65 20 66 6f 72 20 4d 61 63 20 4f  s true for Mac O
0d60: 53 20 58 2e 20 20 4c 46 53 20 69 73 20 6f 6e 6c  S X.  LFS is onl
0d70: 79 20 73 75 70 70 6f 72 74 65 64 20 6f 6e 20 4d  y supported on M
0d80: 61 63 20 4f 53 20 58 20 39 20 61 6e 64 20 6c 61  ac OS X 9 and la
0d90: 74 65 72 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ter..*/.#ifndef 
0da0: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c  SQLITE_DISABLE_L
0db0: 46 53 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52  FS.# define _LAR
0dc0: 47 45 5f 46 49 4c 45 20 20 20 20 20 20 20 31 0a  GE_FILE       1.
0dd0: 23 20 69 66 6e 64 65 66 20 5f 46 49 4c 45 5f 4f  # ifndef _FILE_O
0de0: 46 46 53 45 54 5f 42 49 54 53 0a 23 20 20 20 64  FFSET_BITS.#   d
0df0: 65 66 69 6e 65 20 5f 46 49 4c 45 5f 4f 46 46 53  efine _FILE_OFFS
0e00: 45 54 5f 42 49 54 53 20 36 34 0a 23 20 65 6e 64  ET_BITS 64.# end
0e10: 69 66 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52  if.# define _LAR
0e20: 47 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 31 0a  GEFILE_SOURCE 1.
0e30: 23 65 6e 64 69 66 0a 0a 2f 2a 20 54 68 65 20 47  #endif../* The G
0e40: 43 43 5f 56 45 52 53 49 4f 4e 20 61 6e 64 20 4d  CC_VERSION and M
0e50: 53 56 43 5f 56 45 52 53 49 4f 4e 20 6d 61 63 72  SVC_VERSION macr
0e60: 6f 73 20 61 72 65 20 75 73 65 64 20 74 6f 0a 2a  os are used to.*
0e70: 2a 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 6c 79 20  * conditionally 
0e80: 69 6e 63 6c 75 64 65 20 6f 70 74 69 6d 69 7a 61  include optimiza
0e90: 74 69 6f 6e 73 20 66 6f 72 20 65 61 63 68 20 6f  tions for each o
0ea0: 66 20 74 68 65 73 65 20 63 6f 6d 70 69 6c 65 72  f these compiler
0eb0: 73 2e 20 20 41 0a 2a 2a 20 76 61 6c 75 65 20 6f  s.  A.** value o
0ec0: 66 20 30 20 6d 65 61 6e 73 20 74 68 61 74 20 63  f 0 means that c
0ed0: 6f 6d 70 69 6c 65 72 20 69 73 20 6e 6f 74 20 62  ompiler is not b
0ee0: 65 69 6e 67 20 75 73 65 64 2e 20 20 54 68 65 0a  eing used.  The.
0ef0: 2a 2a 20 53 51 4c 49 54 45 5f 44 49 53 41 42 4c  ** SQLITE_DISABL
0f00: 45 5f 49 4e 54 52 49 4e 53 49 43 20 6d 61 63 72  E_INTRINSIC macr
0f10: 6f 20 6d 65 61 6e 73 20 64 6f 20 6e 6f 74 20 75  o means do not u
0f20: 73 65 20 61 6e 79 20 63 6f 6d 70 69 6c 65 72 2d  se any compiler-
0f30: 73 70 65 63 69 66 69 63 0a 2a 2a 20 6f 70 74 69  specific.** opti
0f40: 6d 69 7a 61 74 69 6f 6e 73 2c 20 61 6e 64 20 68  mizations, and h
0f50: 65 6e 63 65 20 73 65 74 20 61 6c 6c 20 63 6f 6d  ence set all com
0f60: 70 69 6c 65 72 20 6d 61 63 72 6f 73 20 74 6f 20  piler macros to 
0f70: 30 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 77 61  0.**.** There wa
0f80: 73 20 6f 6e 63 65 20 61 6c 73 6f 20 61 20 43 4c  s once also a CL
0f90: 41 4e 47 5f 56 45 52 53 49 4f 4e 20 6d 61 63 72  ANG_VERSION macr
0fa0: 6f 2e 20 20 48 6f 77 65 76 65 72 2c 20 77 65 20  o.  However, we 
0fb0: 6c 65 61 72 6e 20 74 68 61 74 20 74 68 65 0a 2a  learn that the.*
0fc0: 2a 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72  * version number
0fd0: 73 20 69 6e 20 63 6c 61 6e 67 20 61 72 65 20 66  s in clang are f
0fe0: 6f 72 20 22 6d 61 72 6b 65 74 69 6e 67 22 20 6f  or "marketing" o
0ff0: 6e 6c 79 20 61 6e 64 20 61 72 65 20 69 6e 63 6f  nly and are inco
1000: 6e 73 69 73 74 65 6e 74 0a 2a 2a 20 61 6e 64 20  nsistent.** and 
1010: 75 6e 72 65 6c 69 61 62 6c 65 2e 20 20 46 6f 72  unreliable.  For
1020: 74 75 6e 61 74 65 6c 79 2c 20 61 6c 6c 20 76 65  tunately, all ve
1030: 72 73 69 6f 6e 73 20 6f 66 20 63 6c 61 6e 67 20  rsions of clang 
1040: 61 6c 73 6f 20 72 65 63 6f 67 6e 69 7a 65 20 74  also recognize t
1050: 68 65 0a 2a 2a 20 67 63 63 20 76 65 72 73 69 6f  he.** gcc versio
1060: 6e 20 6e 75 6d 62 65 72 73 20 61 6e 64 20 68 61  n numbers and ha
1070: 76 65 20 72 65 61 73 6f 6e 61 62 6c 65 20 73 65  ve reasonable se
1080: 74 74 69 6e 67 73 20 66 6f 72 20 67 63 63 20 76  ttings for gcc v
1090: 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 73 2c 0a  ersion numbers,.
10a0: 2a 2a 20 73 6f 20 74 68 65 20 47 43 43 5f 56 45  ** so the GCC_VE
10b0: 52 53 49 4f 4e 20 6d 61 63 72 6f 20 77 69 6c 6c  RSION macro will
10c0: 20 62 65 20 73 65 74 20 74 6f 20 61 20 63 6f 72   be set to a cor
10d0: 72 65 63 74 20 6e 6f 6e 2d 7a 65 72 6f 20 76 61  rect non-zero va
10e0: 6c 75 65 20 65 76 65 6e 0a 2a 2a 20 77 68 65 6e  lue even.** when
10f0: 20 63 6f 6d 70 69 6c 69 6e 67 20 77 69 74 68 20   compiling with 
1100: 63 6c 61 6e 67 2e 0a 2a 2f 0a 23 69 66 20 64 65  clang..*/.#if de
1110: 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20  fined(__GNUC__) 
1120: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
1130: 54 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52 49  TE_DISABLE_INTRI
1140: 4e 53 49 43 29 0a 23 20 64 65 66 69 6e 65 20 47  NSIC).# define G
1150: 43 43 5f 56 45 52 53 49 4f 4e 20 28 5f 5f 47 4e  CC_VERSION (__GN
1160: 55 43 5f 5f 2a 31 30 30 30 30 30 30 2b 5f 5f 47  UC__*1000000+__G
1170: 4e 55 43 5f 4d 49 4e 4f 52 5f 5f 2a 31 30 30 30  NUC_MINOR__*1000
1180: 2b 5f 5f 47 4e 55 43 5f 50 41 54 43 48 4c 45 56  +__GNUC_PATCHLEV
1190: 45 4c 5f 5f 29 0a 23 65 6c 73 65 0a 23 20 64 65  EL__).#else.# de
11a0: 66 69 6e 65 20 47 43 43 5f 56 45 52 53 49 4f 4e  fine GCC_VERSION
11b0: 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65   0.#endif.#if de
11c0: 66 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52 29 20  fined(_MSC_VER) 
11d0: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
11e0: 54 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52 49  TE_DISABLE_INTRI
11f0: 4e 53 49 43 29 0a 23 20 64 65 66 69 6e 65 20 4d  NSIC).# define M
1200: 53 56 43 5f 56 45 52 53 49 4f 4e 20 5f 4d 53 43  SVC_VERSION _MSC
1210: 5f 56 45 52 0a 23 65 6c 73 65 0a 23 20 64 65 66  _VER.#else.# def
1220: 69 6e 65 20 4d 53 56 43 5f 56 45 52 53 49 4f 4e  ine MSVC_VERSION
1230: 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4e 65   0.#endif../* Ne
1240: 65 64 65 64 20 66 6f 72 20 76 61 72 69 6f 75 73  eded for various
1250: 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e 2e 2e 20   definitions... 
1260: 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f  */.#if defined(_
1270: 5f 47 4e 55 43 5f 5f 29 20 26 26 20 21 64 65 66  _GNUC__) && !def
1280: 69 6e 65 64 28 5f 47 4e 55 5f 53 4f 55 52 43 45  ined(_GNU_SOURCE
1290: 29 0a 23 20 64 65 66 69 6e 65 20 5f 47 4e 55 5f  ).# define _GNU_
12a0: 53 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a 23  SOURCE.#endif..#
12b0: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 4f 70 65  if defined(__Ope
12c0: 6e 42 53 44 5f 5f 29 20 26 26 20 21 64 65 66 69  nBSD__) && !defi
12d0: 6e 65 64 28 5f 42 53 44 5f 53 4f 55 52 43 45 29  ned(_BSD_SOURCE)
12e0: 0a 23 20 64 65 66 69 6e 65 20 5f 42 53 44 5f 53  .# define _BSD_S
12f0: 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a  OURCE.#endif../*
1300: 0a 2a 2a 20 46 6f 72 20 4d 69 6e 47 57 2c 20 63  .** For MinGW, c
1310: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 77  heck to see if w
1320: 65 20 63 61 6e 20 69 6e 63 6c 75 64 65 20 74 68  e can include th
1330: 65 20 68 65 61 64 65 72 20 66 69 6c 65 20 63 6f  e header file co
1340: 6e 74 61 69 6e 69 6e 67 20 69 74 73 0a 2a 2a 20  ntaining its.** 
1350: 76 65 72 73 69 6f 6e 20 69 6e 66 6f 72 6d 61 74  version informat
1360: 69 6f 6e 2c 20 61 6d 6f 6e 67 20 6f 74 68 65 72  ion, among other
1370: 20 74 68 69 6e 67 73 2e 20 20 4e 6f 72 6d 61 6c   things.  Normal
1380: 6c 79 2c 20 74 68 69 73 20 69 6e 74 65 72 6e 61  ly, this interna
1390: 6c 20 4d 69 6e 47 57 0a 2a 2a 20 68 65 61 64 65  l MinGW.** heade
13a0: 72 20 66 69 6c 65 20 77 6f 75 6c 64 20 5b 6f 6e  r file would [on
13b0: 6c 79 5d 20 62 65 20 69 6e 63 6c 75 64 65 64 20  ly] be included 
13c0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 62 79  automatically by
13d0: 20 6f 74 68 65 72 20 4d 69 6e 47 57 20 68 65 61   other MinGW hea
13e0: 64 65 72 0a 2a 2a 20 66 69 6c 65 73 3b 20 68 6f  der.** files; ho
13f0: 77 65 76 65 72 2c 20 74 68 65 20 63 6f 6e 74 61  wever, the conta
1400: 69 6e 65 64 20 76 65 72 73 69 6f 6e 20 69 6e 66  ined version inf
1410: 6f 72 6d 61 74 69 6f 6e 20 69 73 20 6e 6f 77 20  ormation is now 
1420: 72 65 71 75 69 72 65 64 20 62 79 20 74 68 69 73  required by this
1430: 0a 2a 2a 20 68 65 61 64 65 72 20 66 69 6c 65 20  .** header file 
1440: 74 6f 20 77 6f 72 6b 20 61 72 6f 75 6e 64 20 62  to work around b
1450: 69 6e 61 72 79 20 63 6f 6d 70 61 74 69 62 69 6c  inary compatibil
1460: 69 74 79 20 69 73 73 75 65 73 20 28 73 65 65 20  ity issues (see 
1470: 62 65 6c 6f 77 29 20 61 6e 64 0a 2a 2a 20 74 68  below) and.** th
1480: 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 6b  is is the only k
1490: 6e 6f 77 6e 20 77 61 79 20 74 6f 20 72 65 6c 69  nown way to reli
14a0: 61 62 6c 79 20 6f 62 74 61 69 6e 20 69 74 2e 20  ably obtain it. 
14b0: 20 54 68 69 73 20 65 6e 74 69 72 65 20 23 69 66   This entire #if
14c0: 20 62 6c 6f 63 6b 0a 2a 2a 20 77 6f 75 6c 64 20   block.** would 
14d0: 62 65 20 63 6f 6d 70 6c 65 74 65 6c 79 20 75 6e  be completely un
14e0: 6e 65 63 65 73 73 61 72 79 20 69 66 20 74 68 65  necessary if the
14f0: 72 65 20 77 61 73 20 61 6e 79 20 6f 74 68 65 72  re was any other
1500: 20 77 61 79 20 6f 66 20 64 65 74 65 63 74 69 6e   way of detectin
1510: 67 0a 2a 2a 20 4d 69 6e 47 57 20 76 69 61 20 74  g.** MinGW via t
1520: 68 65 69 72 20 70 72 65 70 72 6f 63 65 73 73 6f  heir preprocesso
1530: 72 20 28 65 2e 67 2e 20 69 66 20 74 68 65 79 20  r (e.g. if they 
1540: 63 75 73 74 6f 6d 69 7a 65 64 20 74 68 65 69 72  customized their
1550: 20 47 43 43 20 74 6f 20 64 65 66 69 6e 65 0a 2a   GCC to define.*
1560: 2a 20 73 6f 6d 65 20 4d 69 6e 47 57 2d 73 70 65  * some MinGW-spe
1570: 63 69 66 69 63 20 6d 61 63 72 6f 73 29 2e 20 20  cific macros).  
1580: 57 68 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 66  When compiling f
1590: 6f 72 20 4d 69 6e 47 57 2c 20 65 69 74 68 65 72  or MinGW, either
15a0: 20 74 68 65 0a 2a 2a 20 5f 48 41 56 45 5f 4d 49   the.** _HAVE_MI
15b0: 4e 47 57 5f 48 20 6f 72 20 5f 48 41 56 45 5f 5f  NGW_H or _HAVE__
15c0: 4d 49 4e 47 57 5f 48 20 28 6e 6f 74 65 20 74 68  MINGW_H (note th
15d0: 65 20 65 78 74 72 61 20 75 6e 64 65 72 73 63 6f  e extra undersco
15e0: 72 65 29 20 6d 61 63 72 6f 20 6d 75 73 74 20 62  re) macro must b
15f0: 65 0a 2a 2a 20 64 65 66 69 6e 65 64 3b 20 6f 74  e.** defined; ot
1600: 68 65 72 77 69 73 65 2c 20 64 65 74 65 63 74 69  herwise, detecti
1610: 6f 6e 20 6f 66 20 63 6f 6e 64 69 74 69 6f 6e 73  on of conditions
1620: 20 73 70 65 63 69 66 69 63 20 74 6f 20 4d 69 6e   specific to Min
1630: 47 57 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 64 69  GW will be.** di
1640: 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66 20 64  sabled..*/.#if d
1650: 65 66 69 6e 65 64 28 5f 48 41 56 45 5f 4d 49 4e  efined(_HAVE_MIN
1660: 47 57 5f 48 29 0a 23 20 69 6e 63 6c 75 64 65 20  GW_H).# include 
1670: 22 6d 69 6e 67 77 2e 68 22 0a 23 65 6c 69 66 20  "mingw.h".#elif 
1680: 64 65 66 69 6e 65 64 28 5f 48 41 56 45 5f 5f 4d  defined(_HAVE__M
1690: 49 4e 47 57 5f 48 29 0a 23 20 69 6e 63 6c 75 64  INGW_H).# includ
16a0: 65 20 22 5f 6d 69 6e 67 77 2e 68 22 0a 23 65 6e  e "_mingw.h".#en
16b0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 4d  dif../*.** For M
16c0: 69 6e 47 57 20 76 65 72 73 69 6f 6e 20 34 2e 78  inGW version 4.x
16d0: 20 28 61 6e 64 20 68 69 67 68 65 72 29 2c 20 63   (and higher), c
16e0: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74  heck to see if t
16f0: 68 65 20 5f 55 53 45 5f 33 32 42 49 54 5f 54 49  he _USE_32BIT_TI
1700: 4d 45 5f 54 0a 2a 2a 20 64 65 66 69 6e 65 20 69  ME_T.** define i
1710: 73 20 72 65 71 75 69 72 65 64 20 74 6f 20 6d 61  s required to ma
1720: 69 6e 74 61 69 6e 20 62 69 6e 61 72 79 20 63 6f  intain binary co
1730: 6d 70 61 74 69 62 69 6c 69 74 79 20 77 69 74 68  mpatibility with
1740: 20 74 68 65 20 4d 53 56 43 20 72 75 6e 74 69 6d   the MSVC runtim
1750: 65 0a 2a 2a 20 6c 69 62 72 61 72 79 20 69 6e 20  e.** library in 
1760: 75 73 65 20 28 65 2e 67 2e 20 66 6f 72 20 57 69  use (e.g. for Wi
1770: 6e 64 6f 77 73 20 58 50 29 2e 0a 2a 2f 0a 23 69  ndows XP)..*/.#i
1780: 66 20 21 64 65 66 69 6e 65 64 28 5f 55 53 45 5f  f !defined(_USE_
1790: 33 32 42 49 54 5f 54 49 4d 45 5f 54 29 20 26 26  32BIT_TIME_T) &&
17a0: 20 21 64 65 66 69 6e 65 64 28 5f 55 53 45 5f 36   !defined(_USE_6
17b0: 34 42 49 54 5f 54 49 4d 45 5f 54 29 20 26 26 20  4BIT_TIME_T) && 
17c0: 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 5f 57  \.    defined(_W
17d0: 49 4e 33 32 29 20 26 26 20 21 64 65 66 69 6e 65  IN32) && !define
17e0: 64 28 5f 57 49 4e 36 34 29 20 26 26 20 5c 0a 20  d(_WIN64) && \. 
17f0: 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 4d 49 4e     defined(__MIN
1800: 47 57 5f 4d 41 4a 4f 52 5f 56 45 52 53 49 4f 4e  GW_MAJOR_VERSION
1810: 29 20 26 26 20 5f 5f 4d 49 4e 47 57 5f 4d 41 4a  ) && __MINGW_MAJ
1820: 4f 52 5f 56 45 52 53 49 4f 4e 20 3e 3d 20 34 20  OR_VERSION >= 4 
1830: 26 26 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64  && \.    defined
1840: 28 5f 5f 4d 53 56 43 52 54 5f 5f 29 0a 23 20 64  (__MSVCRT__).# d
1850: 65 66 69 6e 65 20 5f 55 53 45 5f 33 32 42 49 54  efine _USE_32BIT
1860: 5f 54 49 4d 45 5f 54 0a 23 65 6e 64 69 66 0a 0a  _TIME_T.#endif..
1870: 2f 2a 20 54 68 65 20 70 75 62 6c 69 63 20 53 51  /* The public SQ
1880: 4c 69 74 65 20 69 6e 74 65 72 66 61 63 65 2e 20  Lite interface. 
1890: 20 54 68 65 20 5f 46 49 4c 45 5f 4f 46 46 53 45   The _FILE_OFFSE
18a0: 54 5f 42 49 54 53 20 6d 61 63 72 6f 20 6d 75 73  T_BITS macro mus
18b0: 74 20 61 70 70 65 61 72 0a 2a 2a 20 66 69 72 73  t appear.** firs
18c0: 74 20 69 6e 20 51 4e 58 2e 20 20 41 6c 73 6f 2c  t in QNX.  Also,
18d0: 20 74 68 65 20 5f 55 53 45 5f 33 32 42 49 54 5f   the _USE_32BIT_
18e0: 54 49 4d 45 5f 54 20 6d 61 63 72 6f 20 6d 75 73  TIME_T macro mus
18f0: 74 20 61 70 70 65 61 72 20 66 69 72 73 74 20 66  t appear first f
1900: 6f 72 0a 2a 2a 20 4d 69 6e 47 57 2e 0a 2a 2f 0a  or.** MinGW..*/.
1910: 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65  #include "sqlite
1920: 33 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c  3.h"../*.** Incl
1930: 75 64 65 20 74 68 65 20 63 6f 6e 66 69 67 75 72  ude the configur
1940: 61 74 69 6f 6e 20 68 65 61 64 65 72 20 6f 75 74  ation header out
1950: 70 75 74 20 62 79 20 27 63 6f 6e 66 69 67 75 72  put by 'configur
1960: 65 27 20 69 66 20 77 65 27 72 65 20 75 73 69 6e  e' if we're usin
1970: 67 20 74 68 65 0a 2a 2a 20 61 75 74 6f 63 6f 6e  g the.** autocon
1980: 66 2d 62 61 73 65 64 20 62 75 69 6c 64 0a 2a 2f  f-based build.*/
1990: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 48 41  .#if defined(_HA
19a0: 56 45 5f 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47  VE_SQLITE_CONFIG
19b0: 5f 48 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  _H) && !defined(
19c0: 53 51 4c 49 54 45 43 4f 4e 46 49 47 5f 48 29 0a  SQLITECONFIG_H).
19d0: 23 69 6e 63 6c 75 64 65 20 22 63 6f 6e 66 69 67  #include "config
19e0: 2e 68 22 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .h".#define SQLI
19f0: 54 45 43 4f 4e 46 49 47 5f 48 20 31 0a 23 65 6e  TECONFIG_H 1.#en
1a00: 64 69 66 0a 0a 23 69 6e 63 6c 75 64 65 20 22 73  dif..#include "s
1a10: 71 6c 69 74 65 4c 69 6d 69 74 2e 68 22 0a 0a 2f  qliteLimit.h"../
1a20: 2a 20 44 69 73 61 62 6c 65 20 6e 75 69 73 61 6e  * Disable nuisan
1a30: 63 65 20 77 61 72 6e 69 6e 67 73 20 6f 6e 20 42  ce warnings on B
1a40: 6f 72 6c 61 6e 64 20 63 6f 6d 70 69 6c 65 72 73  orland compilers
1a50: 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28   */.#if defined(
1a60: 5f 5f 42 4f 52 4c 41 4e 44 43 5f 5f 29 0a 23 70  __BORLANDC__).#p
1a70: 72 61 67 6d 61 20 77 61 72 6e 20 2d 72 63 68 20  ragma warn -rch 
1a80: 2f 2a 20 75 6e 72 65 61 63 68 61 62 6c 65 20 63  /* unreachable c
1a90: 6f 64 65 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77  ode */.#pragma w
1aa0: 61 72 6e 20 2d 63 63 63 20 2f 2a 20 43 6f 6e 64  arn -ccc /* Cond
1ab0: 69 74 69 6f 6e 20 69 73 20 61 6c 77 61 79 73 20  ition is always 
1ac0: 74 72 75 65 20 6f 72 20 66 61 6c 73 65 20 2a 2f  true or false */
1ad0: 0a 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 61  .#pragma warn -a
1ae0: 75 73 20 2f 2a 20 41 73 73 69 67 6e 65 64 20 76  us /* Assigned v
1af0: 61 6c 75 65 20 69 73 20 6e 65 76 65 72 20 75 73  alue is never us
1b00: 65 64 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61  ed */.#pragma wa
1b10: 72 6e 20 2d 63 73 75 20 2f 2a 20 43 6f 6d 70 61  rn -csu /* Compa
1b20: 72 69 6e 67 20 73 69 67 6e 65 64 20 61 6e 64 20  ring signed and 
1b30: 75 6e 73 69 67 6e 65 64 20 2a 2f 0a 23 70 72 61  unsigned */.#pra
1b40: 67 6d 61 20 77 61 72 6e 20 2d 73 70 61 20 2f 2a  gma warn -spa /*
1b50: 20 53 75 73 70 69 63 69 6f 75 73 20 70 6f 69 6e   Suspicious poin
1b60: 74 65 72 20 61 72 69 74 68 6d 65 74 69 63 20 2a  ter arithmetic *
1b70: 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  /.#endif../*.** 
1b80: 49 6e 63 6c 75 64 65 20 73 74 61 6e 64 61 72 64  Include standard
1b90: 20 68 65 61 64 65 72 20 66 69 6c 65 73 20 61 73   header files as
1ba0: 20 6e 65 63 65 73 73 61 72 79 0a 2a 2f 0a 23 69   necessary.*/.#i
1bb0: 66 64 65 66 20 48 41 56 45 5f 53 54 44 49 4e 54  fdef HAVE_STDINT
1bc0: 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64  _H.#include <std
1bd0: 69 6e 74 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 69  int.h>.#endif.#i
1be0: 66 64 65 66 20 48 41 56 45 5f 49 4e 54 54 59 50  fdef HAVE_INTTYP
1bf0: 45 53 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c 69  ES_H.#include <i
1c00: 6e 74 74 79 70 65 73 2e 68 3e 0a 23 65 6e 64 69  nttypes.h>.#endi
1c10: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  f../*.** The fol
1c20: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 61 72  lowing macros ar
1c30: 65 20 75 73 65 64 20 74 6f 20 63 61 73 74 20 70  e used to cast p
1c40: 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e 74 65 67  ointers to integ
1c50: 65 72 73 20 61 6e 64 0a 2a 2a 20 69 6e 74 65 67  ers and.** integ
1c60: 65 72 73 20 74 6f 20 70 6f 69 6e 74 65 72 73 2e  ers to pointers.
1c70: 20 20 54 68 65 20 77 61 79 20 79 6f 75 20 64 6f    The way you do
1c80: 20 74 68 69 73 20 76 61 72 69 65 73 20 66 72 6f   this varies fro
1c90: 6d 20 6f 6e 65 20 63 6f 6d 70 69 6c 65 72 0a 2a  m one compiler.*
1ca0: 2a 20 74 6f 20 74 68 65 20 6e 65 78 74 2c 20 73  * to the next, s
1cb0: 6f 20 77 65 20 68 61 76 65 20 64 65 76 65 6c 6f  o we have develo
1cc0: 70 65 64 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  ped the followin
1cd0: 67 20 73 65 74 20 6f 66 20 23 69 66 20 73 74 61  g set of #if sta
1ce0: 74 65 6d 65 6e 74 73 0a 2a 2a 20 74 6f 20 67 65  tements.** to ge
1cf0: 6e 65 72 61 74 65 20 61 70 70 72 6f 70 72 69 61  nerate appropria
1d00: 74 65 20 6d 61 63 72 6f 73 20 66 6f 72 20 61 20  te macros for a 
1d10: 77 69 64 65 20 72 61 6e 67 65 20 6f 66 20 63 6f  wide range of co
1d20: 6d 70 69 6c 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 54  mpilers..**.** T
1d30: 68 65 20 63 6f 72 72 65 63 74 20 22 41 4e 53 49  he correct "ANSI
1d40: 22 20 77 61 79 20 74 6f 20 64 6f 20 74 68 69 73  " way to do this
1d50: 20 69 73 20 74 6f 20 75 73 65 20 74 68 65 20 69   is to use the i
1d60: 6e 74 70 74 72 5f 74 20 74 79 70 65 2e 0a 2a 2a  ntptr_t type..**
1d70: 20 55 6e 66 6f 72 74 75 6e 61 74 65 6c 79 2c 20   Unfortunately, 
1d80: 74 68 61 74 20 74 79 70 65 64 65 66 20 69 73 20  that typedef is 
1d90: 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 20 6f 6e  not available on
1da0: 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73 2c 20   all compilers, 
1db0: 6f 72 0a 2a 2a 20 69 66 20 69 74 20 69 73 20 61  or.** if it is a
1dc0: 76 61 69 6c 61 62 6c 65 2c 20 69 74 20 72 65 71  vailable, it req
1dd0: 75 69 72 65 73 20 61 6e 20 23 69 6e 63 6c 75 64  uires an #includ
1de0: 65 20 6f 66 20 73 70 65 63 69 66 69 63 20 68 65  e of specific he
1df0: 61 64 65 72 73 0a 2a 2a 20 74 68 61 74 20 76 61  aders.** that va
1e00: 72 79 20 66 72 6f 6d 20 6f 6e 65 20 6d 61 63 68  ry from one mach
1e10: 69 6e 65 20 74 6f 20 74 68 65 20 6e 65 78 74 2e  ine to the next.
1e20: 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20 23 33  .**.** Ticket #3
1e30: 38 36 30 3a 20 20 54 68 65 20 6c 6c 76 6d 2d 67  860:  The llvm-g
1e40: 63 63 2d 34 2e 32 20 63 6f 6d 70 69 6c 65 72 20  cc-4.2 compiler 
1e50: 66 72 6f 6d 20 41 70 70 6c 65 20 63 68 6f 6b 65  from Apple choke
1e60: 73 20 6f 6e 0a 2a 2a 20 74 68 65 20 28 28 76 6f  s on.** the ((vo
1e70: 69 64 2a 29 26 28 28 63 68 61 72 2a 29 30 29 5b  id*)&((char*)0)[
1e80: 58 5d 29 20 63 6f 6e 73 74 72 75 63 74 2e 20 20  X]) construct.  
1e90: 42 75 74 20 4d 53 56 43 20 63 68 6f 6b 65 73 20  But MSVC chokes 
1ea0: 6f 6e 20 28 28 76 6f 69 64 2a 29 28 58 29 29 2e  on ((void*)(X)).
1eb0: 0a 2a 2a 20 53 6f 20 77 65 20 68 61 76 65 20 74  .** So we have t
1ec0: 6f 20 64 65 66 69 6e 65 20 74 68 65 20 6d 61 63  o define the mac
1ed0: 72 6f 73 20 69 6e 20 64 69 66 66 65 72 65 6e 74  ros in different
1ee0: 20 77 61 79 73 20 64 65 70 65 6e 64 69 6e 67 20   ways depending 
1ef0: 6f 6e 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 69 6c  on the.** compil
1f00: 65 72 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  er..*/.#if defin
1f10: 65 64 28 5f 5f 50 54 52 44 49 46 46 5f 54 59 50  ed(__PTRDIFF_TYP
1f20: 45 5f 5f 29 20 20 2f 2a 20 54 68 69 73 20 63 61  E__)  /* This ca
1f30: 73 65 20 73 68 6f 75 6c 64 20 77 6f 72 6b 20 66  se should work f
1f40: 6f 72 20 47 43 43 20 2a 2f 0a 23 20 64 65 66 69  or GCC */.# defi
1f50: 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f  ne SQLITE_INT_TO
1f60: 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69 64 2a  _PTR(X)  ((void*
1f70: 29 28 5f 5f 50 54 52 44 49 46 46 5f 54 59 50 45  )(__PTRDIFF_TYPE
1f80: 5f 5f 29 28 58 29 29 0a 23 20 64 65 66 69 6e 65  __)(X)).# define
1f90: 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49   SQLITE_PTR_TO_I
1fa0: 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28 5f 5f  NT(X)  ((int)(__
1fb0: 50 54 52 44 49 46 46 5f 54 59 50 45 5f 5f 29 28  PTRDIFF_TYPE__)(
1fc0: 58 29 29 0a 23 65 6c 69 66 20 21 64 65 66 69 6e  X)).#elif !defin
1fd0: 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20 20 20 20  ed(__GNUC__)    
1fe0: 20 20 20 2f 2a 20 57 6f 72 6b 73 20 66 6f 72 20     /* Works for 
1ff0: 63 6f 6d 70 69 6c 65 72 73 20 6f 74 68 65 72 20  compilers other 
2000: 74 68 61 6e 20 4c 4c 56 4d 20 2a 2f 0a 23 20 64  than LLVM */.# d
2010: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54  efine SQLITE_INT
2020: 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f  _TO_PTR(X)  ((vo
2030: 69 64 2a 29 26 28 28 63 68 61 72 2a 29 30 29 5b  id*)&((char*)0)[
2040: 58 5d 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  X]).# define SQL
2050: 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58  ITE_PTR_TO_INT(X
2060: 29 20 20 28 28 69 6e 74 29 28 28 28 63 68 61 72  )  ((int)(((char
2070: 2a 29 58 29 2d 28 63 68 61 72 2a 29 30 29 29 0a  *)X)-(char*)0)).
2080: 23 65 6c 69 66 20 64 65 66 69 6e 65 64 28 48 41  #elif defined(HA
2090: 56 45 5f 53 54 44 49 4e 54 5f 48 29 20 20 20 2f  VE_STDINT_H)   /
20a0: 2a 20 55 73 65 20 74 68 69 73 20 63 61 73 65 20  * Use this case 
20b0: 69 66 20 77 65 20 68 61 76 65 20 41 4e 53 49 20  if we have ANSI 
20c0: 68 65 61 64 65 72 73 20 2a 2f 0a 23 20 64 65 66  headers */.# def
20d0: 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  ine SQLITE_INT_T
20e0: 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69 64  O_PTR(X)  ((void
20f0: 2a 29 28 69 6e 74 70 74 72 5f 74 29 28 58 29 29  *)(intptr_t)(X))
2100: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
2110: 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20  _PTR_TO_INT(X)  
2120: 28 28 69 6e 74 29 28 69 6e 74 70 74 72 5f 74 29  ((int)(intptr_t)
2130: 28 58 29 29 0a 23 65 6c 73 65 20 20 20 20 20 20  (X)).#else      
2140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2150: 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 73      /* Generates
2160: 20 61 20 77 61 72 6e 69 6e 67 20 2d 20 62 75 74   a warning - but
2170: 20 69 74 20 61 6c 77 61 79 73 20 77 6f 72 6b 73   it always works
2180: 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c   */.# define SQL
2190: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58  ITE_INT_TO_PTR(X
21a0: 29 20 20 28 28 76 6f 69 64 2a 29 28 58 29 29 0a  )  ((void*)(X)).
21b0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
21c0: 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28  PTR_TO_INT(X)  (
21d0: 28 69 6e 74 29 28 58 29 29 0a 23 65 6e 64 69 66  (int)(X)).#endif
21e0: 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63 72 6f 20  ../*.** A macro 
21f0: 74 6f 20 68 69 6e 74 20 74 6f 20 74 68 65 20 63  to hint to the c
2200: 6f 6d 70 69 6c 65 72 20 74 68 61 74 20 61 20 66  ompiler that a f
2210: 75 6e 63 74 69 6f 6e 20 73 68 6f 75 6c 64 20 6e  unction should n
2220: 6f 74 20 62 65 0a 2a 2a 20 69 6e 6c 69 6e 65 64  ot be.** inlined
2230: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
2240: 28 5f 5f 47 4e 55 43 5f 5f 29 0a 23 20 20 64 65  (__GNUC__).#  de
2250: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e  fine SQLITE_NOIN
2260: 4c 49 4e 45 20 20 5f 5f 61 74 74 72 69 62 75 74  LINE  __attribut
2270: 65 5f 5f 28 28 6e 6f 69 6e 6c 69 6e 65 29 29 0a  e__((noinline)).
2280: 23 65 6c 69 66 20 64 65 66 69 6e 65 64 28 5f 4d  #elif defined(_M
2290: 53 43 5f 56 45 52 29 20 26 26 20 5f 4d 53 43 5f  SC_VER) && _MSC_
22a0: 56 45 52 3e 3d 31 33 31 30 0a 23 20 20 64 65 66  VER>=1310.#  def
22b0: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c  ine SQLITE_NOINL
22c0: 49 4e 45 20 20 5f 5f 64 65 63 6c 73 70 65 63 28  INE  __declspec(
22d0: 6e 6f 69 6e 6c 69 6e 65 29 0a 23 65 6c 73 65 0a  noinline).#else.
22e0: 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  #  define SQLITE
22f0: 5f 4e 4f 49 4e 4c 49 4e 45 0a 23 65 6e 64 69 66  _NOINLINE.#endif
2300: 0a 0a 2f 2a 0a 2a 2a 20 4d 61 6b 65 20 73 75 72  ../*.** Make sur
2310: 65 20 74 68 61 74 20 74 68 65 20 63 6f 6d 70 69  e that the compi
2320: 6c 65 72 20 69 6e 74 72 69 6e 73 69 63 73 20 77  ler intrinsics w
2330: 65 20 64 65 73 69 72 65 20 61 72 65 20 65 6e 61  e desire are ena
2340: 62 6c 65 64 20 77 68 65 6e 0a 2a 2a 20 63 6f 6d  bled when.** com
2350: 70 69 6c 69 6e 67 20 77 69 74 68 20 61 6e 20 61  piling with an a
2360: 70 70 72 6f 70 72 69 61 74 65 20 76 65 72 73 69  ppropriate versi
2370: 6f 6e 20 6f 66 20 4d 53 56 43 20 75 6e 6c 65 73  on of MSVC unles
2380: 73 20 70 72 65 76 65 6e 74 65 64 20 62 79 0a 2a  s prevented by.*
2390: 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 44 49 53  * the SQLITE_DIS
23a0: 41 42 4c 45 5f 49 4e 54 52 49 4e 53 49 43 20 64  ABLE_INTRINSIC d
23b0: 65 66 69 6e 65 2e 0a 2a 2f 0a 23 69 66 20 21 64  efine..*/.#if !d
23c0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 49  efined(SQLITE_DI
23d0: 53 41 42 4c 45 5f 49 4e 54 52 49 4e 53 49 43 29  SABLE_INTRINSIC)
23e0: 0a 23 20 20 69 66 20 64 65 66 69 6e 65 64 28 5f  .#  if defined(_
23f0: 4d 53 43 5f 56 45 52 29 20 26 26 20 5f 4d 53 43  MSC_VER) && _MSC
2400: 5f 56 45 52 3e 3d 31 34 30 30 0a 23 20 20 20 20  _VER>=1400.#    
2410: 69 66 20 21 64 65 66 69 6e 65 64 28 5f 57 49 4e  if !defined(_WIN
2420: 33 32 5f 57 43 45 29 0a 23 20 20 20 20 20 20 69  32_WCE).#      i
2430: 6e 63 6c 75 64 65 20 3c 69 6e 74 72 69 6e 2e 68  nclude <intrin.h
2440: 3e 0a 23 20 20 20 20 20 20 70 72 61 67 6d 61 20  >.#      pragma 
2450: 69 6e 74 72 69 6e 73 69 63 28 5f 62 79 74 65 73  intrinsic(_bytes
2460: 77 61 70 5f 75 73 68 6f 72 74 29 0a 23 20 20 20  wap_ushort).#   
2470: 20 20 20 70 72 61 67 6d 61 20 69 6e 74 72 69 6e     pragma intrin
2480: 73 69 63 28 5f 62 79 74 65 73 77 61 70 5f 75 6c  sic(_byteswap_ul
2490: 6f 6e 67 29 0a 23 20 20 20 20 20 20 70 72 61 67  ong).#      prag
24a0: 6d 61 20 69 6e 74 72 69 6e 73 69 63 28 5f 62 79  ma intrinsic(_by
24b0: 74 65 73 77 61 70 5f 75 69 6e 74 36 34 29 0a 23  teswap_uint64).#
24c0: 20 20 20 20 20 20 70 72 61 67 6d 61 20 69 6e 74        pragma int
24d0: 72 69 6e 73 69 63 28 5f 52 65 61 64 57 72 69 74  rinsic(_ReadWrit
24e0: 65 42 61 72 72 69 65 72 29 0a 23 20 20 20 20 65  eBarrier).#    e
24f0: 6c 73 65 0a 23 20 20 20 20 20 20 69 6e 63 6c 75  lse.#      inclu
2500: 64 65 20 3c 63 6d 6e 69 6e 74 72 69 6e 2e 68 3e  de <cmnintrin.h>
2510: 0a 23 20 20 20 20 65 6e 64 69 66 0a 23 20 20 65  .#    endif.#  e
2520: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ndif.#endif../*.
2530: 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 54 48  ** The SQLITE_TH
2540: 52 45 41 44 53 41 46 45 20 6d 61 63 72 6f 20 6d  READSAFE macro m
2550: 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20 61  ust be defined a
2560: 73 20 30 2c 20 31 2c 20 6f 72 20 32 2e 0a 2a 2a  s 0, 1, or 2..**
2570: 20 30 20 6d 65 61 6e 73 20 6d 75 74 65 78 65 73   0 means mutexes
2580: 20 61 72 65 20 70 65 72 6d 61 6e 65 6e 74 6c 79   are permanently
2590: 20 64 69 73 61 62 6c 65 20 61 6e 64 20 74 68 65   disable and the
25a0: 20 6c 69 62 72 61 72 79 20 69 73 20 6e 65 76 65   library is neve
25b0: 72 0a 2a 2a 20 74 68 72 65 61 64 73 61 66 65 2e  r.** threadsafe.
25c0: 20 20 31 20 6d 65 61 6e 73 20 74 68 65 20 6c 69    1 means the li
25d0: 62 72 61 72 79 20 69 73 20 73 65 72 69 61 6c 69  brary is seriali
25e0: 7a 65 64 20 77 68 69 63 68 20 69 73 20 74 68 65  zed which is the
25f0: 20 68 69 67 68 65 73 74 0a 2a 2a 20 6c 65 76 65   highest.** leve
2600: 6c 20 6f 66 20 74 68 72 65 61 64 73 61 66 65 74  l of threadsafet
2610: 79 2e 20 20 32 20 6d 65 61 6e 73 20 74 68 65 20  y.  2 means the 
2620: 6c 69 62 72 61 72 79 20 69 73 20 6d 75 6c 74 69  library is multi
2630: 74 68 72 65 61 64 65 64 20 2d 20 6d 75 6c 74 69  threaded - multi
2640: 70 6c 65 0a 2a 2a 20 74 68 72 65 61 64 73 20 63  ple.** threads c
2650: 61 6e 20 75 73 65 20 53 51 4c 69 74 65 20 61 73  an use SQLite as
2660: 20 6c 6f 6e 67 20 61 73 20 6e 6f 20 74 77 6f 20   long as no two 
2670: 74 68 72 65 61 64 73 20 74 72 79 20 74 6f 20 75  threads try to u
2680: 73 65 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 64  se the same.** d
2690: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
26a0: 6f 6e 20 61 74 20 74 68 65 20 73 61 6d 65 20 74  on at the same t
26b0: 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 4f 6c 64 65 72  ime..**.** Older
26c0: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
26d0: 69 74 65 20 75 73 65 64 20 61 6e 20 6f 70 74 69  ite used an opti
26e0: 6f 6e 61 6c 20 54 48 52 45 41 44 53 41 46 45 20  onal THREADSAFE 
26f0: 6d 61 63 72 6f 2e 0a 2a 2a 20 57 65 20 73 75 70  macro..** We sup
2700: 70 6f 72 74 20 74 68 61 74 20 66 6f 72 20 6c 65  port that for le
2710: 67 61 63 79 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 65  gacy..**.** To e
2720: 6e 73 75 72 65 20 74 68 61 74 20 74 68 65 20 63  nsure that the c
2730: 6f 72 72 65 63 74 20 76 61 6c 75 65 20 6f 66 20  orrect value of 
2740: 22 54 48 52 45 41 44 53 41 46 45 22 20 69 73 20  "THREADSAFE" is 
2750: 72 65 70 6f 72 74 65 64 20 77 68 65 6e 20 71 75  reported when qu
2760: 65 72 79 69 6e 67 0a 2a 2a 20 66 6f 72 20 63 6f  erying.** for co
2770: 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
2780: 6e 73 20 61 74 20 72 75 6e 74 69 6d 65 20 28 65  ns at runtime (e
2790: 2e 67 2e 20 22 50 52 41 47 4d 41 20 63 6f 6d 70  .g. "PRAGMA comp
27a0: 69 6c 65 5f 6f 70 74 69 6f 6e 73 22 29 2c 20 74  ile_options"), t
27b0: 68 69 73 0a 2a 2a 20 6c 6f 67 69 63 20 69 73 20  his.** logic is 
27c0: 70 61 72 74 69 61 6c 6c 79 20 72 65 70 6c 69 63  partially replic
27d0: 61 74 65 64 20 69 6e 20 63 74 69 6d 65 2e 63 2e  ated in ctime.c.
27e0: 20 49 66 20 69 74 20 69 73 20 75 70 64 61 74 65   If it is update
27f0: 64 20 68 65 72 65 2c 20 69 74 20 73 68 6f 75 6c  d here, it shoul
2800: 64 0a 2a 2a 20 61 6c 73 6f 20 62 65 20 75 70 64  d.** also be upd
2810: 61 74 65 64 20 74 68 65 72 65 2e 0a 2a 2f 0a 23  ated there..*/.#
2820: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
2830: 54 45 5f 54 48 52 45 41 44 53 41 46 45 29 0a 23  TE_THREADSAFE).#
2840: 20 69 66 20 64 65 66 69 6e 65 64 28 54 48 52 45   if defined(THRE
2850: 41 44 53 41 46 45 29 0a 23 20 20 20 64 65 66 69  ADSAFE).#   defi
2860: 6e 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44  ne SQLITE_THREAD
2870: 53 41 46 45 20 54 48 52 45 41 44 53 41 46 45 0a  SAFE THREADSAFE.
2880: 23 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e  # else.#   defin
2890: 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53  e SQLITE_THREADS
28a0: 41 46 45 20 31 20 2f 2a 20 49 4d 50 3a 20 52 2d  AFE 1 /* IMP: R-
28b0: 30 37 32 37 32 2d 32 32 33 30 39 20 2a 2f 0a 23  07272-22309 */.#
28c0: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f   endif.#endif../
28d0: 2a 0a 2a 2a 20 50 6f 77 65 72 73 61 66 65 20 6f  *.** Powersafe o
28e0: 76 65 72 77 72 69 74 65 20 69 73 20 6f 6e 20 62  verwrite is on b
28f0: 79 20 64 65 66 61 75 6c 74 2e 20 20 42 75 74 20  y default.  But 
2900: 63 61 6e 20 62 65 20 74 75 72 6e 65 64 20 6f 66  can be turned of
2910: 66 20 75 73 69 6e 67 0a 2a 2a 20 74 68 65 20 2d  f using.** the -
2920: 44 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41 46  DSQLITE_POWERSAF
2930: 45 5f 4f 56 45 52 57 52 49 54 45 3d 30 20 63 6f  E_OVERWRITE=0 co
2940: 6d 6d 61 6e 64 2d 6c 69 6e 65 20 6f 70 74 69 6f  mmand-line optio
2950: 6e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  n..*/.#ifndef SQ
2960: 4c 49 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f  LITE_POWERSAFE_O
2970: 56 45 52 57 52 49 54 45 0a 23 20 64 65 66 69 6e  VERWRITE.# defin
2980: 65 20 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41  e SQLITE_POWERSA
2990: 46 45 5f 4f 56 45 52 57 52 49 54 45 20 31 0a 23  FE_OVERWRITE 1.#
29a0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 56 49  endif../*.** EVI
29b0: 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 32 35 37 31  DENCE-OF: R-2571
29c0: 35 2d 33 37 30 37 32 20 4d 65 6d 6f 72 79 20 61  5-37072 Memory a
29d0: 6c 6c 6f 63 61 74 69 6f 6e 20 73 74 61 74 69 73  llocation statis
29e0: 74 69 63 73 20 61 72 65 20 65 6e 61 62 6c 65 64  tics are enabled
29f0: 20 62 79 0a 2a 2a 20 64 65 66 61 75 6c 74 20 75   by.** default u
2a00: 6e 6c 65 73 73 20 53 51 4c 69 74 65 20 69 73 20  nless SQLite is 
2a10: 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 53 51  compiled with SQ
2a20: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d  LITE_DEFAULT_MEM
2a30: 53 54 41 54 55 53 3d 30 20 69 6e 0a 2a 2a 20 77  STATUS=0 in.** w
2a40: 68 69 63 68 20 63 61 73 65 20 6d 65 6d 6f 72 79  hich case memory
2a50: 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 74 61 74   allocation stat
2a60: 69 73 74 69 63 73 20 61 72 65 20 64 69 73 61 62  istics are disab
2a70: 6c 65 64 20 62 79 20 64 65 66 61 75 6c 74 2e 0a  led by default..
2a80: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
2a90: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
2aa0: 45 4d 53 54 41 54 55 53 29 0a 23 20 64 65 66 69  EMSTATUS).# defi
2ab0: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
2ac0: 54 5f 4d 45 4d 53 54 41 54 55 53 20 31 0a 23 65  T_MEMSTATUS 1.#e
2ad0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 78 61 63  ndif../*.** Exac
2ae0: 74 6c 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 66  tly one of the f
2af0: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20  ollowing macros 
2b00: 6d 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20  must be defined 
2b10: 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 73  in order to.** s
2b20: 70 65 63 69 66 79 20 77 68 69 63 68 20 6d 65 6d  pecify which mem
2b30: 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73  ory allocation s
2b40: 75 62 73 79 73 74 65 6d 20 74 6f 20 75 73 65 2e  ubsystem to use.
2b50: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54  .**.**     SQLIT
2b60: 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20  E_SYSTEM_MALLOC 
2b70: 20 20 20 20 20 20 20 20 20 2f 2f 20 55 73 65 20           // Use 
2b80: 6e 6f 72 6d 61 6c 20 73 79 73 74 65 6d 20 6d 61  normal system ma
2b90: 6c 6c 6f 63 28 29 0a 2a 2a 20 20 20 20 20 53 51  lloc().**     SQ
2ba0: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
2bb0: 43 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55  C           // U
2bc0: 73 65 20 57 69 6e 33 32 20 6e 61 74 69 76 65 20  se Win32 native 
2bd0: 68 65 61 70 20 41 50 49 0a 2a 2a 20 20 20 20 20  heap API.**     
2be0: 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c  SQLITE_ZERO_MALL
2bf0: 4f 43 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  OC            //
2c00: 20 55 73 65 20 61 20 73 74 75 62 20 61 6c 6c 6f   Use a stub allo
2c10: 63 61 74 6f 72 20 74 68 61 74 20 61 6c 77 61 79  cator that alway
2c20: 73 20 66 61 69 6c 73 0a 2a 2a 20 20 20 20 20 53  s fails.**     S
2c30: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 20  QLITE_MEMDEBUG  
2c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2c50: 44 65 62 75 67 67 69 6e 67 20 76 65 72 73 69 6f  Debugging versio
2c60: 6e 20 6f 66 20 73 79 73 74 65 6d 20 6d 61 6c 6c  n of system mall
2c70: 6f 63 28 29 0a 2a 2a 0a 2a 2a 20 4f 6e 20 57 69  oc().**.** On Wi
2c80: 6e 64 6f 77 73 2c 20 69 66 20 74 68 65 20 53 51  ndows, if the SQ
2c90: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
2ca0: 43 5f 56 41 4c 49 44 41 54 45 20 6d 61 63 72 6f  C_VALIDATE macro
2cb0: 20 69 73 20 64 65 66 69 6e 65 64 20 61 6e 64 20   is defined and 
2cc0: 74 68 65 0a 2a 2a 20 61 73 73 65 72 74 28 29 20  the.** assert() 
2cd0: 6d 61 63 72 6f 20 69 73 20 65 6e 61 62 6c 65 64  macro is enabled
2ce0: 2c 20 65 61 63 68 20 63 61 6c 6c 20 69 6e 74 6f  , each call into
2cf0: 20 74 68 65 20 57 69 6e 33 32 20 6e 61 74 69 76   the Win32 nativ
2d00: 65 20 68 65 61 70 20 73 75 62 73 79 73 74 65 6d  e heap subsystem
2d10: 0a 2a 2a 20 77 69 6c 6c 20 63 61 75 73 65 20 48  .** will cause H
2d20: 65 61 70 56 61 6c 69 64 61 74 65 20 74 6f 20 62  eapValidate to b
2d30: 65 20 63 61 6c 6c 65 64 2e 20 20 49 66 20 68 65  e called.  If he
2d40: 61 70 20 76 61 6c 69 64 61 74 69 6f 6e 20 73 68  ap validation sh
2d50: 6f 75 6c 64 20 66 61 69 6c 2c 20 61 6e 0a 2a 2a  ould fail, an.**
2d60: 20 61 73 73 65 72 74 69 6f 6e 20 77 69 6c 6c 20   assertion will 
2d70: 62 65 20 74 72 69 67 67 65 72 65 64 2e 0a 2a 2a  be triggered..**
2d80: 0a 2a 2a 20 49 66 20 6e 6f 6e 65 20 6f 66 20 74  .** If none of t
2d90: 68 65 20 61 62 6f 76 65 20 61 72 65 20 64 65 66  he above are def
2da0: 69 6e 65 64 2c 20 74 68 65 6e 20 73 65 74 20 53  ined, then set S
2db0: 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c  QLITE_SYSTEM_MAL
2dc0: 4c 4f 43 20 61 73 0a 2a 2a 20 74 68 65 20 64 65  LOC as.** the de
2dd0: 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66 20 64 65  fault..*/.#if de
2de0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 53 59 53  fined(SQLITE_SYS
2df0: 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20  TEM_MALLOC) \.  
2e00: 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  + defined(SQLITE
2e10: 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c  _WIN32_MALLOC) \
2e20: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
2e30: 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29  ITE_ZERO_MALLOC)
2e40: 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53   \.  + defined(S
2e50: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 3e  QLITE_MEMDEBUG)>
2e60: 31 0a 23 20 65 72 72 6f 72 20 22 54 77 6f 20 6f  1.# error "Two o
2e70: 72 20 6d 6f 72 65 20 6f 66 20 74 68 65 20 66 6f  r more of the fo
2e80: 6c 6c 6f 77 69 6e 67 20 63 6f 6d 70 69 6c 65 2d  llowing compile-
2e90: 74 69 6d 65 20 63 6f 6e 66 69 67 75 72 61 74 69  time configurati
2ea0: 6f 6e 20 6f 70 74 69 6f 6e 73 5c 0a 20 61 72 65  on options\. are
2eb0: 20 64 65 66 69 6e 65 64 20 62 75 74 20 61 74 20   defined but at 
2ec0: 6d 6f 73 74 20 6f 6e 65 20 69 73 20 61 6c 6c 6f  most one is allo
2ed0: 77 65 64 3a 5c 0a 20 53 51 4c 49 54 45 5f 53 59  wed:\. SQLITE_SY
2ee0: 53 54 45 4d 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c  STEM_MALLOC, SQL
2ef0: 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43  ITE_WIN32_MALLOC
2f00: 2c 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  , SQLITE_MEMDEBU
2f10: 47 2c 5c 0a 20 53 51 4c 49 54 45 5f 5a 45 52 4f  G,\. SQLITE_ZERO
2f20: 5f 4d 41 4c 4c 4f 43 22 0a 23 65 6e 64 69 66 0a  _MALLOC".#endif.
2f30: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
2f40: 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43  TE_SYSTEM_MALLOC
2f50: 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28  ) \.  + defined(
2f60: 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c  SQLITE_WIN32_MAL
2f70: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
2f80: 65 64 28 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d  ed(SQLITE_ZERO_M
2f90: 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66  ALLOC) \.  + def
2fa0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44  ined(SQLITE_MEMD
2fb0: 45 42 55 47 29 3d 3d 30 0a 23 20 64 65 66 69 6e  EBUG)==0.# defin
2fc0: 65 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f  e SQLITE_SYSTEM_
2fd0: 4d 41 4c 4c 4f 43 20 31 0a 23 65 6e 64 69 66 0a  MALLOC 1.#endif.
2fe0: 0a 2f 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45  ./*.** If SQLITE
2ff0: 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d  _MALLOC_SOFT_LIM
3000: 49 54 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  IT is not zero, 
3010: 74 68 65 6e 20 74 72 79 20 74 6f 20 6b 65 65 70  then try to keep
3020: 20 74 68 65 0a 2a 2a 20 73 69 7a 65 73 20 6f 66   the.** sizes of
3030: 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
3040: 6f 6e 73 20 62 65 6c 6f 77 20 74 68 69 73 20 76  ons below this v
3050: 61 6c 75 65 20 77 68 65 72 65 20 70 6f 73 73 69  alue where possi
3060: 62 6c 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66  ble..*/.#if !def
3070: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 41 4c 4c  ined(SQLITE_MALL
3080: 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54 29 0a 23  OC_SOFT_LIMIT).#
3090: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
30a0: 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54  ALLOC_SOFT_LIMIT
30b0: 20 31 30 32 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a   1024.#endif../*
30c0: 0a 2a 2a 20 57 65 20 6e 65 65 64 20 74 6f 20 64  .** We need to d
30d0: 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55  efine _XOPEN_SOU
30e0: 52 43 45 20 61 73 20 66 6f 6c 6c 6f 77 73 20 69  RCE as follows i
30f0: 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e 61 62 6c  n order to enabl
3100: 65 0a 2a 2a 20 72 65 63 75 72 73 69 76 65 20 6d  e.** recursive m
3110: 75 74 65 78 65 73 20 6f 6e 20 6d 6f 73 74 20 55  utexes on most U
3120: 6e 69 78 20 73 79 73 74 65 6d 73 20 61 6e 64 20  nix systems and 
3130: 66 63 68 6d 6f 64 28 29 20 6f 6e 20 4f 70 65 6e  fchmod() on Open
3140: 42 53 44 2e 0a 2a 2a 20 42 75 74 20 5f 58 4f 50  BSD..** But _XOP
3150: 45 4e 5f 53 4f 55 52 43 45 20 64 65 66 69 6e 65  EN_SOURCE define
3160: 20 63 61 75 73 65 73 20 70 72 6f 62 6c 65 6d 73   causes problems
3170: 20 66 6f 72 20 4d 61 63 20 4f 53 20 58 2c 20 73   for Mac OS X, s
3180: 6f 20 6f 6d 69 74 0a 2a 2a 20 69 74 2e 0a 2a 2f  o omit.** it..*/
3190: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f 58  .#if !defined(_X
31a0: 4f 50 45 4e 5f 53 4f 55 52 43 45 29 20 26 26 20  OPEN_SOURCE) && 
31b0: 21 64 65 66 69 6e 65 64 28 5f 5f 44 41 52 57 49  !defined(__DARWI
31c0: 4e 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64  N__) && !defined
31d0: 28 5f 5f 41 50 50 4c 45 5f 5f 29 0a 23 20 20 64  (__APPLE__).#  d
31e0: 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55  efine _XOPEN_SOU
31f0: 52 43 45 20 36 30 30 0a 23 65 6e 64 69 66 0a 0a  RCE 600.#endif..
3200: 2f 2a 0a 2a 2a 20 4e 44 45 42 55 47 20 61 6e 64  /*.** NDEBUG and
3210: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 61 72   SQLITE_DEBUG ar
3220: 65 20 6f 70 70 6f 73 69 74 65 73 2e 20 20 49 74  e opposites.  It
3230: 20 73 68 6f 75 6c 64 20 61 6c 77 61 79 73 20 62   should always b
3240: 65 20 74 72 75 65 20 74 68 61 74 0a 2a 2a 20 64  e true that.** d
3250: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 3d 3d  efined(NDEBUG)==
3260: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
3270: 44 45 42 55 47 29 2e 20 20 49 66 20 74 68 69 73  DEBUG).  If this
3280: 20 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c   is not currentl
3290: 79 20 74 72 75 65 2c 0a 2a 2a 20 6d 61 6b 65 20  y true,.** make 
32a0: 69 74 20 74 72 75 65 20 62 79 20 64 65 66 69 6e  it true by defin
32b0: 69 6e 67 20 6f 72 20 75 6e 64 65 66 69 6e 69 6e  ing or undefinin
32c0: 67 20 4e 44 45 42 55 47 2e 0a 2a 2a 0a 2a 2a 20  g NDEBUG..**.** 
32d0: 53 65 74 74 69 6e 67 20 4e 44 45 42 55 47 20 6d  Setting NDEBUG m
32e0: 61 6b 65 73 20 74 68 65 20 63 6f 64 65 20 73 6d  akes the code sm
32f0: 61 6c 6c 65 72 20 61 6e 64 20 66 61 73 74 65 72  aller and faster
3300: 20 62 79 20 64 69 73 61 62 6c 69 6e 67 20 74 68   by disabling th
3310: 65 0a 2a 2a 20 61 73 73 65 72 74 28 29 20 73 74  e.** assert() st
3320: 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20  atements in the 
3330: 63 6f 64 65 2e 20 20 53 6f 20 77 65 20 77 61 6e  code.  So we wan
3340: 74 20 74 68 65 20 64 65 66 61 75 6c 74 20 61 63  t the default ac
3350: 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 66 6f  tion.** to be fo
3360: 72 20 4e 44 45 42 55 47 20 74 6f 20 62 65 20 73  r NDEBUG to be s
3370: 65 74 20 61 6e 64 20 4e 44 45 42 55 47 20 74 6f  et and NDEBUG to
3380: 20 62 65 20 75 6e 64 65 66 69 6e 65 64 20 6f 6e   be undefined on
3390: 6c 79 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42  ly if SQLITE_DEB
33a0: 55 47 0a 2a 2a 20 69 73 20 73 65 74 2e 20 20 54  UG.** is set.  T
33b0: 68 75 73 20 4e 44 45 42 55 47 20 62 65 63 6f 6d  hus NDEBUG becom
33c0: 65 73 20 61 6e 20 6f 70 74 2d 69 6e 20 72 61 74  es an opt-in rat
33d0: 68 65 72 20 74 68 61 6e 20 61 6e 20 6f 70 74 2d  her than an opt-
33e0: 6f 75 74 0a 2a 2a 20 66 65 61 74 75 72 65 2e 0a  out.** feature..
33f0: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
3400: 4e 44 45 42 55 47 29 20 26 26 20 21 64 65 66 69  NDEBUG) && !defi
3410: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
3420: 29 0a 23 20 64 65 66 69 6e 65 20 4e 44 45 42 55  ).# define NDEBU
3430: 47 20 31 0a 23 65 6e 64 69 66 0a 23 69 66 20 64  G 1.#endif.#if d
3440: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20 26  efined(NDEBUG) &
3450: 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  & defined(SQLITE
3460: 5f 44 45 42 55 47 29 0a 23 20 75 6e 64 65 66 20  _DEBUG).# undef 
3470: 4e 44 45 42 55 47 0a 23 65 6e 64 69 66 0a 0a 2f  NDEBUG.#endif../
3480: 2a 0a 2a 2a 20 45 6e 61 62 6c 65 20 53 51 4c 49  *.** Enable SQLI
3490: 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49  TE_ENABLE_EXPLAI
34a0: 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69 66 20 53 51  N_COMMENTS if SQ
34b0: 4c 49 54 45 5f 44 45 42 55 47 20 69 73 20 74 75  LITE_DEBUG is tu
34c0: 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66 20  rned on..*/.#if 
34d0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
34e0: 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e 5f 43  ENABLE_EXPLAIN_C
34f0: 4f 4d 4d 45 4e 54 53 29 20 26 26 20 64 65 66 69  OMMENTS) && defi
3500: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
3510: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
3520: 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e  E_ENABLE_EXPLAIN
3530: 5f 43 4f 4d 4d 45 4e 54 53 20 31 0a 23 65 6e 64  _COMMENTS 1.#end
3540: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 74 65  if../*.** The te
3550: 73 74 63 61 73 65 28 29 20 6d 61 63 72 6f 20 69  stcase() macro i
3560: 73 20 75 73 65 64 20 74 6f 20 61 69 64 20 69 6e  s used to aid in
3570: 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e   coverage testin
3580: 67 2e 20 20 57 68 65 6e 0a 2a 2a 20 64 6f 69 6e  g.  When.** doin
3590: 67 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69  g coverage testi
35a0: 6e 67 2c 20 74 68 65 20 63 6f 6e 64 69 74 69 6f  ng, the conditio
35b0: 6e 20 69 6e 73 69 64 65 20 74 68 65 20 61 72 67  n inside the arg
35c0: 75 6d 65 6e 74 20 74 6f 0a 2a 2a 20 74 65 73 74  ument to.** test
35d0: 63 61 73 65 28 29 20 6d 75 73 74 20 62 65 20 65  case() must be e
35e0: 76 61 6c 75 61 74 65 64 20 62 6f 74 68 20 74 72  valuated both tr
35f0: 75 65 20 61 6e 64 20 66 61 6c 73 65 20 69 6e 20  ue and false in 
3600: 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67 65 74 20  order to.** get 
3610: 66 75 6c 6c 20 62 72 61 6e 63 68 20 63 6f 76 65  full branch cove
3620: 72 61 67 65 2e 20 20 54 68 65 20 74 65 73 74 63  rage.  The testc
3630: 61 73 65 28 29 20 6d 61 63 72 6f 20 69 73 20 69  ase() macro is i
3640: 6e 73 65 72 74 65 64 0a 2a 2a 20 74 6f 20 68 65  nserted.** to he
3650: 6c 70 20 65 6e 73 75 72 65 20 61 64 65 71 75 61  lp ensure adequa
3660: 74 65 20 74 65 73 74 20 63 6f 76 65 72 61 67 65  te test coverage
3670: 20 69 6e 20 70 6c 61 63 65 73 20 77 68 65 72 65   in places where
3680: 20 73 69 6d 70 6c 65 0a 2a 2a 20 63 6f 6e 64 69   simple.** condi
3690: 74 69 6f 6e 2f 64 65 63 69 73 69 6f 6e 20 63 6f  tion/decision co
36a0: 76 65 72 61 67 65 20 69 73 20 69 6e 61 64 65 71  verage is inadeq
36b0: 75 61 74 65 2e 20 20 46 6f 72 20 65 78 61 6d 70  uate.  For examp
36c0: 6c 65 2c 20 74 65 73 74 63 61 73 65 28 29 0a 2a  le, testcase().*
36d0: 2a 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  * can be used to
36e0: 20 6d 61 6b 65 20 73 75 72 65 20 62 6f 75 6e 64   make sure bound
36f0: 61 72 79 20 76 61 6c 75 65 73 20 61 72 65 20 74  ary values are t
3700: 65 73 74 65 64 2e 20 20 46 6f 72 0a 2a 2a 20 62  ested.  For.** b
3710: 69 74 6d 61 73 6b 20 74 65 73 74 73 2c 20 74 65  itmask tests, te
3720: 73 74 63 61 73 65 28 29 20 63 61 6e 20 62 65 20  stcase() can be 
3730: 75 73 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 72  used to make sur
3740: 65 20 65 61 63 68 20 62 69 74 0a 2a 2a 20 69 73  e each bit.** is
3750: 20 73 69 67 6e 69 66 69 63 61 6e 74 20 61 6e 64   significant and
3760: 20 75 73 65 64 20 61 74 20 6c 65 61 73 74 20 6f   used at least o
3770: 6e 63 65 2e 20 20 4f 6e 20 73 77 69 74 63 68 20  nce.  On switch 
3780: 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a 20 77 68  statements.** wh
3790: 65 72 65 20 6d 75 6c 74 69 70 6c 65 20 63 61 73  ere multiple cas
37a0: 65 73 20 67 6f 20 74 6f 20 74 68 65 20 73 61 6d  es go to the sam
37b0: 65 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 2c  e block of code,
37c0: 20 74 65 73 74 63 61 73 65 28 29 0a 2a 2a 20 63   testcase().** c
37d0: 61 6e 20 69 6e 73 75 72 65 20 74 68 61 74 20 61  an insure that a
37e0: 6c 6c 20 63 61 73 65 73 20 61 72 65 20 65 76 61  ll cases are eva
37f0: 6c 75 61 74 65 64 2e 0a 2a 2a 0a 2a 2f 0a 23 69  luated..**.*/.#i
3800: 66 64 65 66 20 53 51 4c 49 54 45 5f 43 4f 56 45  fdef SQLITE_COVE
3810: 52 41 47 45 5f 54 45 53 54 0a 20 20 76 6f 69 64  RAGE_TEST.  void
3820: 20 73 71 6c 69 74 65 33 43 6f 76 65 72 61 67 65   sqlite3Coverage
3830: 28 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65 20  (int);.# define 
3840: 74 65 73 74 63 61 73 65 28 58 29 20 20 69 66 28  testcase(X)  if(
3850: 20 58 20 29 7b 20 73 71 6c 69 74 65 33 43 6f 76   X ){ sqlite3Cov
3860: 65 72 61 67 65 28 5f 5f 4c 49 4e 45 5f 5f 29 3b  erage(__LINE__);
3870: 20 7d 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   }.#else.# defin
3880: 65 20 74 65 73 74 63 61 73 65 28 58 29 0a 23 65  e testcase(X).#e
3890: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
38a0: 54 45 53 54 4f 4e 4c 59 20 6d 61 63 72 6f 20 69  TESTONLY macro i
38b0: 73 20 75 73 65 64 20 74 6f 20 65 6e 63 6c 6f 73  s used to enclos
38c0: 65 20 76 61 72 69 61 62 6c 65 20 64 65 63 6c 61  e variable decla
38d0: 72 61 74 69 6f 6e 73 20 6f 72 0a 2a 2a 20 6f 74  rations or.** ot
38e0: 68 65 72 20 62 69 74 73 20 6f 66 20 63 6f 64 65  her bits of code
38f0: 20 74 68 61 74 20 61 72 65 20 6e 65 65 64 65 64   that are needed
3900: 20 74 6f 20 73 75 70 70 6f 72 74 20 74 68 65 20   to support the 
3910: 61 72 67 75 6d 65 6e 74 73 0a 2a 2a 20 77 69 74  arguments.** wit
3920: 68 69 6e 20 74 65 73 74 63 61 73 65 28 29 20 61  hin testcase() a
3930: 6e 64 20 61 73 73 65 72 74 28 29 20 6d 61 63 72  nd assert() macr
3940: 6f 73 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  os..*/.#if !defi
3950: 6e 65 64 28 4e 44 45 42 55 47 29 20 7c 7c 20 64  ned(NDEBUG) || d
3960: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 43 4f  efined(SQLITE_CO
3970: 56 45 52 41 47 45 5f 54 45 53 54 29 0a 23 20 64  VERAGE_TEST).# d
3980: 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28 58  efine TESTONLY(X
3990: 29 20 20 58 0a 23 65 6c 73 65 0a 23 20 64 65 66  )  X.#else.# def
39a0: 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28 58 29 0a  ine TESTONLY(X).
39b0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f  #endif../*.** So
39c0: 6d 65 74 69 6d 65 73 20 77 65 20 6e 65 65 64 20  metimes we need 
39d0: 61 20 73 6d 61 6c 6c 20 61 6d 6f 75 6e 74 20 6f  a small amount o
39e0: 66 20 63 6f 64 65 20 73 75 63 68 20 61 73 20 61  f code such as a
39f0: 20 76 61 72 69 61 62 6c 65 20 69 6e 69 74 69 61   variable initia
3a00: 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74 6f 20 73  lization.** to s
3a10: 65 74 75 70 20 66 6f 72 20 61 20 6c 61 74 65 72  etup for a later
3a20: 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
3a30: 65 6e 74 2e 20 20 57 65 20 64 6f 20 6e 6f 74 20  ent.  We do not 
3a40: 77 61 6e 74 20 74 68 69 73 20 63 6f 64 65 20 74  want this code t
3a50: 6f 0a 2a 2a 20 61 70 70 65 61 72 20 77 68 65 6e  o.** appear when
3a60: 20 61 73 73 65 72 74 28 29 20 69 73 20 64 69 73   assert() is dis
3a70: 61 62 6c 65 64 2e 20 20 54 68 65 20 66 6f 6c 6c  abled.  The foll
3a80: 6f 77 69 6e 67 20 6d 61 63 72 6f 20 69 73 20 74  owing macro is t
3a90: 68 65 72 65 66 6f 72 65 0a 2a 2a 20 75 73 65 64  herefore.** used
3aa0: 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74 68 61 74   to contain that
3ab0: 20 73 65 74 75 70 20 63 6f 64 65 2e 20 20 54 68   setup code.  Th
3ac0: 65 20 22 56 56 41 22 20 61 63 72 6f 6e 79 6d 20  e "VVA" acronym 
3ad0: 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 56  stands for.** "V
3ae0: 65 72 69 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c  erification, Val
3af0: 69 64 61 74 69 6f 6e 2c 20 61 6e 64 20 41 63 63  idation, and Acc
3b00: 72 65 64 69 74 61 74 69 6f 6e 22 2e 20 20 49 6e  reditation".  In
3b10: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
3b20: 65 0a 2a 2a 20 63 6f 64 65 20 77 69 74 68 69 6e  e.** code within
3b30: 20 56 56 41 5f 4f 4e 4c 59 28 29 20 77 69 6c 6c   VVA_ONLY() will
3b40: 20 6f 6e 6c 79 20 72 75 6e 20 64 75 72 69 6e 67   only run during
3b50: 20 76 65 72 69 66 69 63 61 74 69 6f 6e 20 70 72   verification pr
3b60: 6f 63 65 73 73 65 73 2e 0a 2a 2f 0a 23 69 66 6e  ocesses..*/.#ifn
3b70: 64 65 66 20 4e 44 45 42 55 47 0a 23 20 64 65 66  def NDEBUG.# def
3b80: 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29 20  ine VVA_ONLY(X) 
3b90: 20 58 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   X.#else.# defin
3ba0: 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29 0a 23 65  e VVA_ONLY(X).#e
3bb0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
3bc0: 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56 45 52  ALWAYS and NEVER
3bd0: 20 6d 61 63 72 6f 73 20 73 75 72 72 6f 75 6e 64   macros surround
3be0: 20 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73   boolean express
3bf0: 69 6f 6e 73 20 77 68 69 63 68 0a 2a 2a 20 61 72  ions which.** ar
3c00: 65 20 69 6e 74 65 6e 64 65 64 20 74 6f 20 61 6c  e intended to al
3c10: 77 61 79 73 20 62 65 20 74 72 75 65 20 6f 72 20  ways be true or 
3c20: 66 61 6c 73 65 2c 20 72 65 73 70 65 63 74 69 76  false, respectiv
3c30: 65 6c 79 2e 20 20 53 75 63 68 0a 2a 2a 20 65 78  ely.  Such.** ex
3c40: 70 72 65 73 73 69 6f 6e 73 20 63 6f 75 6c 64 20  pressions could 
3c50: 62 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  be omitted from 
3c60: 74 68 65 20 63 6f 64 65 20 63 6f 6d 70 6c 65 74  the code complet
3c70: 65 6c 79 2e 20 20 42 75 74 20 74 68 65 79 0a 2a  ely.  But they.*
3c80: 2a 20 61 72 65 20 69 6e 63 6c 75 64 65 64 20 69  * are included i
3c90: 6e 20 61 20 66 65 77 20 63 61 73 65 73 20 69 6e  n a few cases in
3ca0: 20 6f 72 64 65 72 20 74 6f 20 65 6e 68 61 6e 63   order to enhanc
3cb0: 65 20 74 68 65 20 72 65 73 69 6c 69 65 6e 63 65  e the resilience
3cc0: 0a 2a 2a 20 6f 66 20 53 51 4c 69 74 65 20 74 6f  .** of SQLite to
3cd0: 20 75 6e 65 78 70 65 63 74 65 64 20 62 65 68 61   unexpected beha
3ce0: 76 69 6f 72 20 2d 20 74 6f 20 6d 61 6b 65 20 74  vior - to make t
3cf0: 68 65 20 63 6f 64 65 20 22 73 65 6c 66 2d 68 65  he code "self-he
3d00: 61 6c 69 6e 67 22 0a 2a 2a 20 6f 72 20 22 64 75  aling".** or "du
3d10: 63 74 69 6c 65 22 20 72 61 74 68 65 72 20 74 68  ctile" rather th
3d20: 61 6e 20 62 65 69 6e 67 20 22 62 72 69 74 74 6c  an being "brittl
3d30: 65 22 20 61 6e 64 20 63 72 61 73 68 69 6e 67 20  e" and crashing 
3d40: 61 74 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20  at the first.** 
3d50: 68 69 6e 74 20 6f 66 20 75 6e 70 6c 61 6e 6e 65  hint of unplanne
3d60: 64 20 62 65 68 61 76 69 6f 72 2e 0a 2a 2a 0a 2a  d behavior..**.*
3d70: 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  * In other words
3d80: 2c 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56  , ALWAYS and NEV
3d90: 45 52 20 61 72 65 20 61 64 64 65 64 20 66 6f 72  ER are added for
3da0: 20 64 65 66 65 6e 73 69 76 65 20 63 6f 64 65 2e   defensive code.
3db0: 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 64 6f 69 6e  .**.** When doin
3dc0: 67 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69  g coverage testi
3dd0: 6e 67 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45  ng ALWAYS and NE
3de0: 56 45 52 20 61 72 65 20 68 61 72 64 2d 63 6f 64  VER are hard-cod
3df0: 65 64 20 74 6f 0a 2a 2a 20 62 65 20 74 72 75 65  ed to.** be true
3e00: 20 61 6e 64 20 66 61 6c 73 65 20 73 6f 20 74 68   and false so th
3e10: 61 74 20 74 68 65 20 75 6e 72 65 61 63 68 61 62  at the unreachab
3e20: 6c 65 20 63 6f 64 65 20 74 68 65 79 20 73 70 65  le code they spe
3e30: 63 69 66 79 20 77 69 6c 6c 0a 2a 2a 20 6e 6f 74  cify will.** not
3e40: 20 62 65 20 63 6f 75 6e 74 65 64 20 61 73 20 75   be counted as u
3e50: 6e 74 65 73 74 65 64 20 63 6f 64 65 2e 0a 2a 2f  ntested code..*/
3e60: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
3e70: 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53  ITE_COVERAGE_TES
3e80: 54 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51  T) || defined(SQ
3e90: 4c 49 54 45 5f 4d 55 54 41 54 49 4f 4e 5f 54 45  LITE_MUTATION_TE
3ea0: 53 54 29 0a 23 20 64 65 66 69 6e 65 20 41 4c 57  ST).# define ALW
3eb0: 41 59 53 28 58 29 20 20 20 20 20 20 28 31 29 0a  AYS(X)      (1).
3ec0: 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28 58  # define NEVER(X
3ed0: 29 20 20 20 20 20 20 20 28 30 29 0a 23 65 6c 69  )       (0).#eli
3ee0: 66 20 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55  f !defined(NDEBU
3ef0: 47 29 0a 23 20 64 65 66 69 6e 65 20 41 4c 57 41  G).# define ALWA
3f00: 59 53 28 58 29 20 20 20 20 20 20 28 28 58 29 3f  YS(X)      ((X)?
3f10: 31 3a 28 61 73 73 65 72 74 28 30 29 2c 30 29 29  1:(assert(0),0))
3f20: 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28  .# define NEVER(
3f30: 58 29 20 20 20 20 20 20 20 28 28 58 29 3f 28 61  X)       ((X)?(a
3f40: 73 73 65 72 74 28 30 29 2c 31 29 3a 30 29 0a 23  ssert(0),1):0).#
3f50: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 41 4c  else.# define AL
3f60: 57 41 59 53 28 58 29 20 20 20 20 20 20 28 58 29  WAYS(X)      (X)
3f70: 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28  .# define NEVER(
3f80: 58 29 20 20 20 20 20 20 20 28 58 29 0a 23 65 6e  X)       (X).#en
3f90: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65 20  dif../*.** Some 
3fa0: 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 73 20  malloc failures 
3fb0: 61 72 65 20 6f 6e 6c 79 20 70 6f 73 73 69 62 6c  are only possibl
3fc0: 65 20 69 66 20 53 51 4c 49 54 45 5f 54 45 53 54  e if SQLITE_TEST
3fd0: 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53 53 20  _REALLOC_STRESS 
3fe0: 69 73 0a 2a 2a 20 64 65 66 69 6e 65 64 2e 20 20  is.** defined.  
3ff0: 57 65 20 6e 65 65 64 20 74 6f 20 64 65 66 65 6e  We need to defen
4000: 64 20 61 67 61 69 6e 73 74 20 74 68 6f 73 65 20  d against those 
4010: 66 61 69 6c 75 72 65 73 20 77 68 65 6e 20 74 65  failures when te
4020: 73 74 69 6e 67 20 77 69 74 68 0a 2a 2a 20 53 51  sting with.** SQ
4030: 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c 4f  LITE_TEST_REALLO
4040: 43 5f 53 54 52 45 53 53 2c 20 62 75 74 20 77 65  C_STRESS, but we
4050: 20 64 6f 6e 27 74 20 77 61 6e 74 20 74 68 65 20   don't want the 
4060: 75 6e 72 65 61 63 68 61 62 6c 65 20 62 72 61 6e  unreachable bran
4070: 63 68 65 73 0a 2a 2a 20 64 75 72 69 6e 67 20 61  ches.** during a
4080: 20 6e 6f 72 6d 61 6c 20 62 75 69 6c 64 2e 20 20   normal build.  
4090: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
40a0: 63 72 6f 20 63 61 6e 20 62 65 20 75 73 65 64 20  cro can be used 
40b0: 74 6f 20 64 69 73 61 62 6c 65 20 74 65 73 74 73  to disable tests
40c0: 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 61 6c 77  .** that are alw
40d0: 61 79 73 20 66 61 6c 73 65 20 65 78 63 65 70 74  ays false except
40e0: 20 77 68 65 6e 20 53 51 4c 49 54 45 5f 54 45 53   when SQLITE_TES
40f0: 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53 53  T_REALLOC_STRESS
4100: 20 69 73 20 73 65 74 2e 0a 2a 2f 0a 23 69 66 20   is set..*/.#if 
4110: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54  defined(SQLITE_T
4120: 45 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45  EST_REALLOC_STRE
4130: 53 53 29 0a 23 20 64 65 66 69 6e 65 20 4f 4e 4c  SS).# define ONL
4140: 59 5f 49 46 5f 52 45 41 4c 4c 4f 43 5f 53 54 52  Y_IF_REALLOC_STR
4150: 45 53 53 28 58 29 20 20 28 58 29 0a 23 65 6c 69  ESS(X)  (X).#eli
4160: 66 20 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55  f !defined(NDEBU
4170: 47 29 0a 23 20 64 65 66 69 6e 65 20 4f 4e 4c 59  G).# define ONLY
4180: 5f 49 46 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45  _IF_REALLOC_STRE
4190: 53 53 28 58 29 20 20 28 28 58 29 3f 28 61 73 73  SS(X)  ((X)?(ass
41a0: 65 72 74 28 30 29 2c 31 29 3a 30 29 0a 23 65 6c  ert(0),1):0).#el
41b0: 73 65 0a 23 20 64 65 66 69 6e 65 20 4f 4e 4c 59  se.# define ONLY
41c0: 5f 49 46 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45  _IF_REALLOC_STRE
41d0: 53 53 28 58 29 20 20 28 30 29 0a 23 65 6e 64 69  SS(X)  (0).#endi
41e0: 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 63 6c 61 72 61  f../*.** Declara
41f0: 74 69 6f 6e 73 20 75 73 65 64 20 66 6f 72 20 74  tions used for t
4200: 72 61 63 69 6e 67 20 74 68 65 20 6f 70 65 72 61  racing the opera
4210: 74 69 6e 67 20 73 79 73 74 65 6d 20 69 6e 74 65  ting system inte
4220: 72 66 61 63 65 73 2e 0a 2a 2f 0a 23 69 66 20 64  rfaces..*/.#if d
4230: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 46 4f  efined(SQLITE_FO
4240: 52 43 45 5f 4f 53 5f 54 52 41 43 45 29 20 7c 7c  RCE_OS_TRACE) ||
4250: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
4260: 54 45 53 54 29 20 7c 7c 20 5c 0a 20 20 20 20 28  TEST) || \.    (
4270: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
4280: 45 42 55 47 29 20 26 26 20 53 51 4c 49 54 45 5f  EBUG) && SQLITE_
4290: 4f 53 5f 57 49 4e 29 0a 20 20 65 78 74 65 72 6e  OS_WIN).  extern
42a0: 20 69 6e 74 20 73 71 6c 69 74 65 33 4f 53 54 72   int sqlite3OSTr
42b0: 61 63 65 3b 0a 23 20 64 65 66 69 6e 65 20 4f 53  ace;.# define OS
42c0: 54 52 41 43 45 28 58 29 20 20 20 20 20 20 20 20  TRACE(X)        
42d0: 20 20 69 66 28 20 73 71 6c 69 74 65 33 4f 53 54    if( sqlite3OST
42e0: 72 61 63 65 20 29 20 73 71 6c 69 74 65 33 44 65  race ) sqlite3De
42f0: 62 75 67 50 72 69 6e 74 66 20 58 0a 23 20 64 65  bugPrintf X.# de
4300: 66 69 6e 65 20 53 51 4c 49 54 45 5f 48 41 56 45  fine SQLITE_HAVE
4310: 5f 4f 53 5f 54 52 41 43 45 0a 23 65 6c 73 65 0a  _OS_TRACE.#else.
4320: 23 20 64 65 66 69 6e 65 20 4f 53 54 52 41 43 45  # define OSTRACE
4330: 28 58 29 0a 23 20 75 6e 64 65 66 20 20 53 51 4c  (X).# undef  SQL
4340: 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41 43  ITE_HAVE_OS_TRAC
4350: 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  E.#endif../*.** 
4360: 49 73 20 74 68 65 20 73 71 6c 69 74 65 33 45 72  Is the sqlite3Er
4370: 72 4e 61 6d 65 28 29 20 66 75 6e 63 74 69 6f 6e  rName() function
4380: 20 6e 65 65 64 65 64 20 69 6e 20 74 68 65 20 62   needed in the b
4390: 75 69 6c 64 3f 20 20 43 75 72 72 65 6e 74 6c 79  uild?  Currently
43a0: 2c 0a 2a 2a 20 69 74 20 69 73 20 6e 65 65 64 65  ,.** it is neede
43b0: 64 20 62 79 20 22 6d 75 74 65 78 5f 77 33 32 2e  d by "mutex_w32.
43c0: 63 22 20 28 77 68 65 6e 20 64 65 62 75 67 67 69  c" (when debuggi
43d0: 6e 67 29 2c 20 22 6f 73 5f 77 69 6e 2e 63 22 20  ng), "os_win.c" 
43e0: 28 77 68 65 6e 0a 2a 2a 20 4f 53 54 52 41 43 45  (when.** OSTRACE
43f0: 20 69 73 20 65 6e 61 62 6c 65 64 29 2c 20 61 6e   is enabled), an
4400: 64 20 62 79 20 73 65 76 65 72 61 6c 20 22 74 65  d by several "te
4410: 73 74 2a 2e 63 22 20 66 69 6c 65 73 20 28 77 68  st*.c" files (wh
4420: 69 63 68 20 61 72 65 0a 2a 2a 20 63 6f 6d 70 69  ich are.** compi
4430: 6c 65 64 20 75 73 69 6e 67 20 53 51 4c 49 54 45  led using SQLITE
4440: 5f 54 45 53 54 29 2e 0a 2a 2f 0a 23 69 66 20 64  _TEST)..*/.#if d
4450: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 48 41  efined(SQLITE_HA
4460: 56 45 5f 4f 53 5f 54 52 41 43 45 29 20 7c 7c 20  VE_OS_TRACE) || 
4470: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54  defined(SQLITE_T
4480: 45 53 54 29 20 7c 7c 20 5c 0a 20 20 20 20 28 64  EST) || \.    (d
4490: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
44a0: 42 55 47 29 20 26 26 20 53 51 4c 49 54 45 5f 4f  BUG) && SQLITE_O
44b0: 53 5f 57 49 4e 29 0a 23 20 64 65 66 69 6e 65 20  S_WIN).# define 
44c0: 53 51 4c 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f  SQLITE_NEED_ERR_
44d0: 4e 41 4d 45 0a 23 65 6c 73 65 0a 23 20 75 6e 64  NAME.#else.# und
44e0: 65 66 20 20 53 51 4c 49 54 45 5f 4e 45 45 44 5f  ef  SQLITE_NEED_
44f0: 45 52 52 5f 4e 41 4d 45 0a 23 65 6e 64 69 66 0a  ERR_NAME.#endif.
4500: 0a 2f 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 45 4e  ./*.** SQLITE_EN
4510: 41 42 4c 45 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d  ABLE_EXPLAIN_COM
4520: 4d 45 4e 54 53 20 69 73 20 69 6e 63 6f 6d 70 61  MENTS is incompa
4530: 74 69 62 6c 65 20 77 69 74 68 20 53 51 4c 49 54  tible with SQLIT
4540: 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 2a  E_OMIT_EXPLAIN.*
4550: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
4560: 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 23 20 75  OMIT_EXPLAIN.# u
4570: 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  ndef SQLITE_ENAB
4580: 4c 45 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45  LE_EXPLAIN_COMME
4590: 4e 54 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  NTS.#endif../*.*
45a0: 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 28 6e  * Return true (n
45b0: 6f 6e 2d 7a 65 72 6f 29 20 69 66 20 74 68 65 20  on-zero) if the 
45c0: 69 6e 70 75 74 20 69 73 20 61 6e 20 69 6e 74 65  input is an inte
45d0: 67 65 72 20 74 68 61 74 20 69 73 20 74 6f 6f 20  ger that is too 
45e0: 6c 61 72 67 65 0a 2a 2a 20 74 6f 20 66 69 74 20  large.** to fit 
45f0: 69 6e 20 33 32 2d 62 69 74 73 2e 20 20 54 68 69  in 32-bits.  Thi
4600: 73 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20  s macro is used 
4610: 69 6e 73 69 64 65 20 6f 66 20 76 61 72 69 6f 75  inside of variou
4620: 73 20 74 65 73 74 63 61 73 65 28 29 0a 2a 2a 20  s testcase().** 
4630: 6d 61 63 72 6f 73 20 74 6f 20 76 65 72 69 66 79  macros to verify
4640: 20 74 68 61 74 20 77 65 20 68 61 76 65 20 74 65   that we have te
4650: 73 74 65 64 20 53 51 4c 69 74 65 20 66 6f 72 20  sted SQLite for 
4660: 6c 61 72 67 65 2d 66 69 6c 65 20 73 75 70 70 6f  large-file suppo
4670: 72 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49  rt..*/.#define I
4680: 53 5f 42 49 47 5f 49 4e 54 28 58 29 20 20 28 28  S_BIG_INT(X)  ((
4690: 28 58 29 26 7e 28 69 36 34 29 30 78 66 66 66 66  (X)&~(i64)0xffff
46a0: 66 66 66 66 29 21 3d 30 29 0a 0a 2f 2a 0a 2a 2a  ffff)!=0)../*.**
46b0: 20 54 68 65 20 6d 61 63 72 6f 20 75 6e 6c 69 6b   The macro unlik
46c0: 65 6c 79 28 29 20 69 73 20 61 20 68 69 6e 74 20  ely() is a hint 
46d0: 74 68 61 74 20 73 75 72 72 6f 75 6e 64 73 20 61  that surrounds a
46e0: 20 62 6f 6f 6c 65 61 6e 0a 2a 2a 20 65 78 70 72   boolean.** expr
46f0: 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20 75  ession that is u
4700: 73 75 61 6c 6c 79 20 66 61 6c 73 65 2e 20 20 4d  sually false.  M
4710: 61 63 72 6f 20 6c 69 6b 65 6c 79 28 29 20 73 75  acro likely() su
4720: 72 72 6f 75 6e 64 73 0a 2a 2a 20 61 20 62 6f 6f  rrounds.** a boo
4730: 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  lean expression 
4740: 74 68 61 74 20 69 73 20 75 73 75 61 6c 6c 79 20  that is usually 
4750: 74 72 75 65 2e 20 20 54 68 65 73 65 20 68 69 6e  true.  These hin
4760: 74 73 20 63 6f 75 6c 64 2c 0a 2a 2a 20 69 6e 20  ts could,.** in 
4770: 74 68 65 6f 72 79 2c 20 62 65 20 75 73 65 64 20  theory, be used 
4780: 62 79 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20  by the compiler 
4790: 74 6f 20 67 65 6e 65 72 61 74 65 20 62 65 74 74  to generate bett
47a0: 65 72 20 63 6f 64 65 2c 20 62 75 74 0a 2a 2a 20  er code, but.** 
47b0: 63 75 72 72 65 6e 74 6c 79 20 74 68 65 79 20 61  currently they a
47c0: 72 65 20 6a 75 73 74 20 63 6f 6d 6d 65 6e 74 73  re just comments
47d0: 20 66 6f 72 20 68 75 6d 61 6e 20 72 65 61 64 65   for human reade
47e0: 72 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 6c  rs..*/.#define l
47f0: 69 6b 65 6c 79 28 58 29 20 20 20 20 28 58 29 0a  ikely(X)    (X).
4800: 23 64 65 66 69 6e 65 20 75 6e 6c 69 6b 65 6c 79  #define unlikely
4810: 28 58 29 20 20 28 58 29 0a 0a 23 69 6e 63 6c 75  (X)  (X)..#inclu
4820: 64 65 20 22 68 61 73 68 2e 68 22 0a 23 69 6e 63  de "hash.h".#inc
4830: 6c 75 64 65 20 22 70 61 72 73 65 2e 68 22 0a 23  lude "parse.h".#
4840: 69 6e 63 6c 75 64 65 20 3c 73 74 64 69 6f 2e 68  include <stdio.h
4850: 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 6c  >.#include <stdl
4860: 69 62 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c  ib.h>.#include <
4870: 73 74 72 69 6e 67 2e 68 3e 0a 23 69 6e 63 6c 75  string.h>.#inclu
4880: 64 65 20 3c 61 73 73 65 72 74 2e 68 3e 0a 23 69  de <assert.h>.#i
4890: 6e 63 6c 75 64 65 20 3c 73 74 64 64 65 66 2e 68  nclude <stddef.h
48a0: 3e 0a 0a 2f 2a 0a 2a 2a 20 55 73 65 20 61 20 6d  >../*.** Use a m
48b0: 61 63 72 6f 20 74 6f 20 72 65 70 6c 61 63 65 20  acro to replace 
48c0: 6d 65 6d 63 70 79 28 29 20 69 66 20 63 6f 6d 70  memcpy() if comp
48d0: 69 6c 65 64 20 77 69 74 68 20 53 51 4c 49 54 45  iled with SQLITE
48e0: 5f 49 4e 4c 49 4e 45 5f 4d 45 4d 43 50 59 2e 0a  _INLINE_MEMCPY..
48f0: 2a 2a 20 54 68 69 73 20 61 6c 6c 6f 77 73 20 62  ** This allows b
4900: 65 74 74 65 72 20 6d 65 61 73 75 72 65 6d 65 6e  etter measuremen
4910: 74 73 20 6f 66 20 77 68 65 72 65 20 6d 65 6d 63  ts of where memc
4920: 70 79 28 29 20 69 73 20 75 73 65 64 20 77 68 65  py() is used whe
4930: 6e 20 72 75 6e 6e 69 6e 67 0a 2a 2a 20 63 61 63  n running.** cac
4940: 68 65 67 72 69 6e 64 2e 20 20 42 75 74 20 74 68  hegrind.  But th
4950: 69 73 20 6d 61 63 72 6f 20 76 65 72 73 69 6f 6e  is macro version
4960: 20 6f 66 20 6d 65 6d 63 70 79 28 29 20 69 73 20   of memcpy() is 
4970: 76 65 72 79 20 73 6c 6f 77 20 73 6f 20 69 74 0a  very slow so it.
4980: 2a 2a 20 73 68 6f 75 6c 64 20 6e 6f 74 20 62 65  ** should not be
4990: 20 75 73 65 64 20 69 6e 20 70 72 6f 64 75 63 74   used in product
49a0: 69 6f 6e 2e 20 20 54 68 69 73 20 69 73 20 61 20  ion.  This is a 
49b0: 70 65 72 66 6f 72 6d 61 6e 63 65 20 6d 65 61 73  performance meas
49c0: 75 72 65 6d 65 6e 74 0a 2a 2a 20 68 61 63 6b 20  urement.** hack 
49d0: 6f 6e 6c 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  only..*/.#ifdef 
49e0: 53 51 4c 49 54 45 5f 49 4e 4c 49 4e 45 5f 4d 45  SQLITE_INLINE_ME
49f0: 4d 43 50 59 0a 23 20 64 65 66 69 6e 65 20 6d 65  MCPY.# define me
4a00: 6d 63 70 79 28 44 2c 53 2c 4e 29 20 7b 63 68 61  mcpy(D,S,N) {cha
4a10: 72 2a 78 78 64 3d 28 63 68 61 72 2a 29 28 44 29  r*xxd=(char*)(D)
4a20: 3b 63 6f 6e 73 74 20 63 68 61 72 2a 78 78 73 3d  ;const char*xxs=
4a30: 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 28 53 29  (const char*)(S)
4a40: 3b 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;\.             
4a50: 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 78             int x
4a60: 78 6e 3d 28 4e 29 3b 77 68 69 6c 65 28 78 78 6e  xn=(N);while(xxn
4a70: 2d 2d 3e 30 29 2a 28 78 78 64 2b 2b 29 3d 2a 28  -->0)*(xxd++)=*(
4a80: 78 78 73 2b 2b 29 3b 7d 0a 23 65 6e 64 69 66 0a  xxs++);}.#endif.
4a90: 0a 2f 2a 0a 2a 2a 20 49 66 20 63 6f 6d 70 69 6c  ./*.** If compil
4aa0: 69 6e 67 20 66 6f 72 20 61 20 70 72 6f 63 65 73  ing for a proces
4ab0: 73 6f 72 20 74 68 61 74 20 6c 61 63 6b 73 20 66  sor that lacks f
4ac0: 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 73 75  loating point su
4ad0: 70 70 6f 72 74 2c 0a 2a 2a 20 73 75 62 73 74 69  pport,.** substi
4ae0: 74 75 74 65 20 69 6e 74 65 67 65 72 20 66 6f 72  tute integer for
4af0: 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 0a   floating-point.
4b00: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
4b10: 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
4b20: 4f 49 4e 54 0a 23 20 64 65 66 69 6e 65 20 64 6f  OINT.# define do
4b30: 75 62 6c 65 20 73 71 6c 69 74 65 5f 69 6e 74 36  uble sqlite_int6
4b40: 34 0a 23 20 64 65 66 69 6e 65 20 66 6c 6f 61 74  4.# define float
4b50: 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20   sqlite_int64.# 
4b60: 64 65 66 69 6e 65 20 4c 4f 4e 47 44 4f 55 42 4c  define LONGDOUBL
4b70: 45 5f 54 59 50 45 20 73 71 6c 69 74 65 5f 69 6e  E_TYPE sqlite_in
4b80: 74 36 34 0a 23 20 69 66 6e 64 65 66 20 53 51 4c  t64.# ifndef SQL
4b90: 49 54 45 5f 42 49 47 5f 44 42 4c 0a 23 20 20 20  ITE_BIG_DBL.#   
4ba0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49  define SQLITE_BI
4bb0: 47 5f 44 42 4c 20 28 28 28 73 71 6c 69 74 65 33  G_DBL (((sqlite3
4bc0: 5f 69 6e 74 36 34 29 31 29 3c 3c 35 30 29 0a 23  _int64)1)<<50).#
4bd0: 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e 65 20   endif.# define 
4be0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 41 54 45  SQLITE_OMIT_DATE
4bf0: 54 49 4d 45 5f 46 55 4e 43 53 20 31 0a 23 20 64  TIME_FUNCS 1.# d
4c00: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 4d 49  efine SQLITE_OMI
4c10: 54 5f 54 52 41 43 45 20 31 0a 23 20 75 6e 64 65  T_TRACE 1.# unde
4c20: 66 20 53 51 4c 49 54 45 5f 4d 49 58 45 44 5f 45  f SQLITE_MIXED_E
4c30: 4e 44 49 41 4e 5f 36 34 42 49 54 5f 46 4c 4f 41  NDIAN_64BIT_FLOA
4c40: 54 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  T.# undef SQLITE
4c50: 5f 48 41 56 45 5f 49 53 4e 41 4e 0a 23 65 6e 64  _HAVE_ISNAN.#end
4c60: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
4c70: 45 5f 42 49 47 5f 44 42 4c 0a 23 20 64 65 66 69  E_BIG_DBL.# defi
4c80: 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42  ne SQLITE_BIG_DB
4c90: 4c 20 28 31 65 39 39 29 0a 23 65 6e 64 69 66 0a  L (1e99).#endif.
4ca0: 0a 2f 2a 0a 2a 2a 20 4f 4d 49 54 5f 54 45 4d 50  ./*.** OMIT_TEMP
4cb0: 44 42 20 69 73 20 73 65 74 20 74 6f 20 31 20 69  DB is set to 1 i
4cc0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45  f SQLITE_OMIT_TE
4cd0: 4d 50 44 42 20 69 73 20 64 65 66 69 6e 65 64 2c  MPDB is defined,
4ce0: 20 6f 72 20 30 0a 2a 2a 20 61 66 74 65 72 77 61   or 0.** afterwa
4cf0: 72 64 2e 20 48 61 76 69 6e 67 20 74 68 69 73 20  rd. Having this 
4d00: 6d 61 63 72 6f 20 61 6c 6c 6f 77 73 20 75 73 20  macro allows us 
4d10: 74 6f 20 63 61 75 73 65 20 74 68 65 20 43 20 63  to cause the C c
4d20: 6f 6d 70 69 6c 65 72 0a 2a 2a 20 74 6f 20 6f 6d  ompiler.** to om
4d30: 69 74 20 63 6f 64 65 20 75 73 65 64 20 62 79 20  it code used by 
4d40: 54 45 4d 50 20 74 61 62 6c 65 73 20 77 69 74 68  TEMP tables with
4d50: 6f 75 74 20 6d 65 73 73 79 20 23 69 66 6e 64 65  out messy #ifnde
4d60: 66 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2f  f statements..*/
4d70: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
4d80: 4d 49 54 5f 54 45 4d 50 44 42 0a 23 64 65 66 69  MIT_TEMPDB.#defi
4d90: 6e 65 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 31  ne OMIT_TEMPDB 1
4da0: 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 4f  .#else.#define O
4db0: 4d 49 54 5f 54 45 4d 50 44 42 20 30 0a 23 65 6e  MIT_TEMPDB 0.#en
4dc0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 22  dif../*.** The "
4dd0: 66 69 6c 65 20 66 6f 72 6d 61 74 22 20 6e 75 6d  file format" num
4de0: 62 65 72 20 69 73 20 61 6e 20 69 6e 74 65 67 65  ber is an intege
4df0: 72 20 74 68 61 74 20 69 73 20 69 6e 63 72 65 6d  r that is increm
4e00: 65 6e 74 65 64 20 77 68 65 6e 65 76 65 72 0a 2a  ented whenever.*
4e10: 2a 20 74 68 65 20 56 44 42 45 2d 6c 65 76 65 6c  * the VDBE-level
4e20: 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 63 68 61   file format cha
4e30: 6e 67 65 73 2e 20 20 54 68 65 20 66 6f 6c 6c 6f  nges.  The follo
4e40: 77 69 6e 67 20 6d 61 63 72 6f 73 20 64 65 66 69  wing macros defi
4e50: 6e 65 20 74 68 65 0a 2a 2a 20 74 68 65 20 64 65  ne the.** the de
4e60: 66 61 75 6c 74 20 66 69 6c 65 20 66 6f 72 6d 61  fault file forma
4e70: 74 20 66 6f 72 20 6e 65 77 20 64 61 74 61 62 61  t for new databa
4e80: 73 65 73 20 61 6e 64 20 74 68 65 20 6d 61 78 69  ses and the maxi
4e90: 6d 75 6d 20 66 69 6c 65 20 66 6f 72 6d 61 74 0a  mum file format.
4ea0: 2a 2a 20 74 68 61 74 20 74 68 65 20 6c 69 62 72  ** that the libr
4eb0: 61 72 79 20 63 61 6e 20 72 65 61 64 2e 0a 2a 2f  ary can read..*/
4ec0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
4ed0: 4d 41 58 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20  MAX_FILE_FORMAT 
4ee0: 34 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  4.#ifndef SQLITE
4ef0: 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f  _DEFAULT_FILE_FO
4f00: 52 4d 41 54 0a 23 20 64 65 66 69 6e 65 20 53 51  RMAT.# define SQ
4f10: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c  LITE_DEFAULT_FIL
4f20: 45 5f 46 4f 52 4d 41 54 20 34 0a 23 65 6e 64 69  E_FORMAT 4.#endi
4f30: 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65 72 6d 69  f../*.** Determi
4f40: 6e 65 20 77 68 65 74 68 65 72 20 74 72 69 67 67  ne whether trigg
4f50: 65 72 73 20 61 72 65 20 72 65 63 75 72 73 69 76  ers are recursiv
4f60: 65 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20 54  e by default.  T
4f70: 68 69 73 20 63 61 6e 20 62 65 0a 2a 2a 20 63 68  his can be.** ch
4f80: 61 6e 67 65 64 20 61 74 20 72 75 6e 2d 74 69 6d  anged at run-tim
4f90: 65 20 75 73 69 6e 67 20 61 20 70 72 61 67 6d 61  e using a pragma
4fa0: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
4fb0: 49 54 45 5f 44 45 46 41 55 4c 54 5f 52 45 43 55  ITE_DEFAULT_RECU
4fc0: 52 53 49 56 45 5f 54 52 49 47 47 45 52 53 0a 23  RSIVE_TRIGGERS.#
4fd0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44   define SQLITE_D
4fe0: 45 46 41 55 4c 54 5f 52 45 43 55 52 53 49 56 45  EFAULT_RECURSIVE
4ff0: 5f 54 52 49 47 47 45 52 53 20 30 0a 23 65 6e 64  _TRIGGERS 0.#end
5000: 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 76 69 64  if../*.** Provid
5010: 65 20 61 20 64 65 66 61 75 6c 74 20 76 61 6c 75  e a default valu
5020: 65 20 66 6f 72 20 53 51 4c 49 54 45 5f 54 45 4d  e for SQLITE_TEM
5030: 50 5f 53 54 4f 52 45 20 69 6e 20 63 61 73 65 20  P_STORE in case 
5040: 69 74 20 69 73 20 6e 6f 74 20 73 70 65 63 69 66  it is not specif
5050: 69 65 64 0a 2a 2a 20 6f 6e 20 74 68 65 20 63 6f  ied.** on the co
5060: 6d 6d 61 6e 64 2d 6c 69 6e 65 0a 2a 2f 0a 23 69  mmand-line.*/.#i
5070: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 54 45 4d  fndef SQLITE_TEM
5080: 50 5f 53 54 4f 52 45 0a 23 20 64 65 66 69 6e 65  P_STORE.# define
5090: 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f   SQLITE_TEMP_STO
50a0: 52 45 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  RE 1.#endif../*.
50b0: 2a 2a 20 49 66 20 6e 6f 20 76 61 6c 75 65 20 68  ** If no value h
50c0: 61 73 20 62 65 65 6e 20 70 72 6f 76 69 64 65 64  as been provided
50d0: 20 66 6f 72 20 53 51 4c 49 54 45 5f 4d 41 58 5f   for SQLITE_MAX_
50e0: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 2c 20  WORKER_THREADS, 
50f0: 6f 72 20 69 66 0a 2a 2a 20 53 51 4c 49 54 45 5f  or if.** SQLITE_
5100: 54 45 4d 50 5f 53 54 4f 52 45 20 69 73 20 73 65  TEMP_STORE is se
5110: 74 20 74 6f 20 33 20 28 6e 65 76 65 72 20 75 73  t to 3 (never us
5120: 65 20 74 65 6d 70 6f 72 61 72 79 20 66 69 6c 65  e temporary file
5130: 73 29 2c 20 73 65 74 20 69 74 0a 2a 2a 20 74 6f  s), set it.** to
5140: 20 7a 65 72 6f 2e 0a 2a 2f 0a 23 69 66 20 53 51   zero..*/.#if SQ
5150: 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d  LITE_TEMP_STORE=
5160: 3d 33 20 7c 7c 20 53 51 4c 49 54 45 5f 54 48 52  =3 || SQLITE_THR
5170: 45 41 44 53 41 46 45 3d 3d 30 0a 23 20 75 6e 64  EADSAFE==0.# und
5180: 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f  ef SQLITE_MAX_WO
5190: 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20 64  RKER_THREADS.# d
51a0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58  efine SQLITE_MAX
51b0: 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 20  _WORKER_THREADS 
51c0: 30 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  0.#endif.#ifndef
51d0: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b   SQLITE_MAX_WORK
51e0: 45 52 5f 54 48 52 45 41 44 53 0a 23 20 64 65 66  ER_THREADS.# def
51f0: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57  ine SQLITE_MAX_W
5200: 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 20 38 0a  ORKER_THREADS 8.
5210: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
5220: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f  QLITE_DEFAULT_WO
5230: 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20 64  RKER_THREADS.# d
5240: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46  efine SQLITE_DEF
5250: 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45  AULT_WORKER_THRE
5260: 41 44 53 20 30 0a 23 65 6e 64 69 66 0a 23 69 66  ADS 0.#endif.#if
5270: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
5280: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 3e 53  WORKER_THREADS>S
5290: 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52  QLITE_MAX_WORKER
52a0: 5f 54 48 52 45 41 44 53 0a 23 20 75 6e 64 65 66  _THREADS.# undef
52b0: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b   SQLITE_MAX_WORK
52c0: 45 52 5f 54 48 52 45 41 44 53 0a 23 20 64 65 66  ER_THREADS.# def
52d0: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57  ine SQLITE_MAX_W
52e0: 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 20 53 51  ORKER_THREADS SQ
52f0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f 52  LITE_DEFAULT_WOR
5300: 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 65 6e 64  KER_THREADS.#end
5310: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 65  if../*.** The de
5320: 66 61 75 6c 74 20 69 6e 69 74 69 61 6c 20 61 6c  fault initial al
5330: 6c 6f 63 61 74 69 6f 6e 20 66 6f 72 20 74 68 65  location for the
5340: 20 70 61 67 65 63 61 63 68 65 20 77 68 65 6e 20   pagecache when 
5350: 75 73 69 6e 67 20 73 65 70 61 72 61 74 65 0a 2a  using separate.*
5360: 2a 20 70 61 67 65 63 61 63 68 65 73 20 66 6f 72  * pagecaches for
5370: 20 65 61 63 68 20 64 61 74 61 62 61 73 65 20 63   each database c
5380: 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 41 20 70 6f  onnection.  A po
5390: 73 69 74 69 76 65 20 6e 75 6d 62 65 72 20 69 73  sitive number is
53a0: 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f   the.** number o
53b0: 66 20 70 61 67 65 73 2e 20 20 41 20 6e 65 67 61  f pages.  A nega
53c0: 74 69 76 65 20 6e 75 6d 62 65 72 20 4e 20 74 72  tive number N tr
53d0: 61 6e 73 6c 61 74 69 6f 6e 73 20 6d 65 61 6e 73  anslations means
53e0: 20 74 68 61 74 20 61 20 62 75 66 66 65 72 0a 2a   that a buffer.*
53f0: 2a 20 6f 66 20 2d 31 30 32 34 2a 4e 20 62 79 74  * of -1024*N byt
5400: 65 73 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20  es is allocated 
5410: 61 6e 64 20 75 73 65 64 20 66 6f 72 20 61 73 20  and used for as 
5420: 6d 61 6e 79 20 70 61 67 65 73 20 61 73 20 69 74  many pages as it
5430: 20 77 69 6c 6c 20 68 6f 6c 64 2e 0a 2a 2a 0a 2a   will hold..**.*
5440: 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20 76 61  * The default va
5450: 6c 75 65 20 6f 66 20 22 32 30 22 20 77 61 73 20  lue of "20" was 
5460: 63 68 6f 6f 73 65 6e 20 74 6f 20 6d 69 6e 69 6d  choosen to minim
5470: 69 7a 65 20 74 68 65 20 72 75 6e 2d 74 69 6d 65  ize the run-time
5480: 20 6f 66 20 74 68 65 0a 2a 2a 20 73 70 65 65 64   of the.** speed
5490: 74 65 73 74 31 20 74 65 73 74 20 70 72 6f 67 72  test1 test progr
54a0: 61 6d 20 77 69 74 68 20 6f 70 74 69 6f 6e 73 3a  am with options:
54b0: 20 2d 2d 73 68 72 69 6e 6b 2d 6d 65 6d 6f 72 79   --shrink-memory
54c0: 20 2d 2d 72 65 70 72 65 70 61 72 65 0a 2a 2f 0a   --reprepare.*/.
54d0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44  #ifndef SQLITE_D
54e0: 45 46 41 55 4c 54 5f 50 43 41 43 48 45 5f 49 4e  EFAULT_PCACHE_IN
54f0: 49 54 53 5a 0a 23 20 64 65 66 69 6e 65 20 53 51  ITSZ.# define SQ
5500: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 50 43 41  LITE_DEFAULT_PCA
5510: 43 48 45 5f 49 4e 49 54 53 5a 20 32 30 0a 23 65  CHE_INITSZ 20.#e
5520: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
5530: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74  compile-time opt
5540: 69 6f 6e 73 20 53 51 4c 49 54 45 5f 4d 4d 41 50  ions SQLITE_MMAP
5550: 5f 52 45 41 44 57 52 49 54 45 20 61 6e 64 20 0a  _READWRITE and .
5560: 2a 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ** SQLITE_ENABLE
5570: 5f 42 41 54 43 48 5f 41 54 4f 4d 49 43 5f 57 52  _BATCH_ATOMIC_WR
5580: 49 54 45 20 61 72 65 20 6e 6f 74 20 63 6f 6d 70  ITE are not comp
5590: 61 74 69 62 6c 65 20 77 69 74 68 20 6f 6e 65 20  atible with one 
55a0: 61 6e 6f 74 68 65 72 2e 0a 2a 2a 20 59 6f 75 20  another..** You 
55b0: 6d 75 73 74 20 63 68 6f 6f 73 65 20 6f 6e 65 20  must choose one 
55c0: 6f 72 20 74 68 65 20 6f 74 68 65 72 20 28 6f 72  or the other (or
55d0: 20 6e 65 69 74 68 65 72 29 20 62 75 74 20 6e 6f   neither) but no
55e0: 74 20 62 6f 74 68 2e 0a 2a 2f 0a 23 69 66 20 64  t both..*/.#if d
55f0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 4d  efined(SQLITE_MM
5600: 41 50 5f 52 45 41 44 57 52 49 54 45 29 20 26 26  AP_READWRITE) &&
5610: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
5620: 45 4e 41 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f  ENABLE_BATCH_ATO
5630: 4d 49 43 5f 57 52 49 54 45 29 0a 23 65 72 72 6f  MIC_WRITE).#erro
5640: 72 20 43 61 6e 6e 6f 74 20 75 73 65 20 62 6f 74  r Cannot use bot
5650: 68 20 53 51 4c 49 54 45 5f 4d 4d 41 50 5f 52 45  h SQLITE_MMAP_RE
5660: 41 44 57 52 49 54 45 20 61 6e 64 20 53 51 4c 49  ADWRITE and SQLI
5670: 54 45 5f 45 4e 41 42 4c 45 5f 42 41 54 43 48 5f  TE_ENABLE_BATCH_
5680: 41 54 4f 4d 49 43 5f 57 52 49 54 45 0a 23 65 6e  ATOMIC_WRITE.#en
5690: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 47 43 43 20 64  dif../*.** GCC d
56a0: 6f 65 73 20 6e 6f 74 20 64 65 66 69 6e 65 20 74  oes not define t
56b0: 68 65 20 6f 66 66 73 65 74 6f 66 28 29 20 6d 61  he offsetof() ma
56c0: 63 72 6f 20 73 6f 20 77 65 27 6c 6c 20 68 61 76  cro so we'll hav
56d0: 65 20 74 6f 20 64 6f 20 69 74 0a 2a 2a 20 6f 75  e to do it.** ou
56e0: 72 73 65 6c 76 65 73 2e 0a 2a 2f 0a 23 69 66 6e  rselves..*/.#ifn
56f0: 64 65 66 20 6f 66 66 73 65 74 6f 66 0a 23 64 65  def offsetof.#de
5700: 66 69 6e 65 20 6f 66 66 73 65 74 6f 66 28 53 54  fine offsetof(ST
5710: 52 55 43 54 55 52 45 2c 46 49 45 4c 44 29 20 28  RUCTURE,FIELD) (
5720: 28 69 6e 74 29 28 28 63 68 61 72 2a 29 26 28 28  (int)((char*)&((
5730: 53 54 52 55 43 54 55 52 45 2a 29 30 29 2d 3e 46  STRUCTURE*)0)->F
5740: 49 45 4c 44 29 29 0a 23 65 6e 64 69 66 0a 0a 2f  IELD)).#endif../
5750: 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 63  *.** Macros to c
5760: 6f 6d 70 75 74 65 20 6d 69 6e 69 6d 75 6d 20 61  ompute minimum a
5770: 6e 64 20 6d 61 78 69 6d 75 6d 20 6f 66 20 74 77  nd maximum of tw
5780: 6f 20 6e 75 6d 62 65 72 73 2e 0a 2a 2f 0a 23 69  o numbers..*/.#i
5790: 66 6e 64 65 66 20 4d 49 4e 0a 23 20 64 65 66 69  fndef MIN.# defi
57a0: 6e 65 20 4d 49 4e 28 41 2c 42 29 20 28 28 41 29  ne MIN(A,B) ((A)
57b0: 3c 28 42 29 3f 28 41 29 3a 28 42 29 29 0a 23 65  <(B)?(A):(B)).#e
57c0: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 4d 41 58  ndif.#ifndef MAX
57d0: 0a 23 20 64 65 66 69 6e 65 20 4d 41 58 28 41 2c  .# define MAX(A,
57e0: 42 29 20 28 28 41 29 3e 28 42 29 3f 28 41 29 3a  B) ((A)>(B)?(A):
57f0: 28 42 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  (B)).#endif../*.
5800: 2a 2a 20 53 77 61 70 20 74 77 6f 20 6f 62 6a 65  ** Swap two obje
5810: 63 74 73 20 6f 66 20 74 79 70 65 20 54 59 50 45  cts of type TYPE
5820: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 57 41  ..*/.#define SWA
5830: 50 28 54 59 50 45 2c 41 2c 42 29 20 7b 54 59 50  P(TYPE,A,B) {TYP
5840: 45 20 74 3d 41 3b 20 41 3d 42 3b 20 42 3d 74 3b  E t=A; A=B; B=t;
5850: 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20 74  }../*.** Check t
5860: 6f 20 73 65 65 20 69 66 20 74 68 69 73 20 6d 61  o see if this ma
5870: 63 68 69 6e 65 20 75 73 65 73 20 45 42 43 44 49  chine uses EBCDI
5880: 43 2e 20 20 28 59 65 73 2c 20 62 65 6c 69 65 76  C.  (Yes, believ
5890: 65 20 69 74 20 6f 72 0a 2a 2a 20 6e 6f 74 2c 20  e it or.** not, 
58a0: 74 68 65 72 65 20 61 72 65 20 73 74 69 6c 6c 20  there are still 
58b0: 6d 61 63 68 69 6e 65 73 20 6f 75 74 20 74 68 65  machines out the
58c0: 72 65 20 74 68 61 74 20 75 73 65 20 45 42 43 44  re that use EBCD
58d0: 49 43 2e 29 0a 2a 2f 0a 23 69 66 20 27 41 27 20  IC.).*/.#if 'A' 
58e0: 3d 3d 20 27 5c 33 30 31 27 0a 23 20 64 65 66 69  == '\301'.# defi
58f0: 6e 65 20 53 51 4c 49 54 45 5f 45 42 43 44 49 43  ne SQLITE_EBCDIC
5900: 20 31 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   1.#else.# defin
5910: 65 20 53 51 4c 49 54 45 5f 41 53 43 49 49 20 31  e SQLITE_ASCII 1
5920: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49  .#endif../*.** I
5930: 6e 74 65 67 65 72 73 20 6f 66 20 6b 6e 6f 77 6e  ntegers of known
5940: 20 73 69 7a 65 73 2e 20 20 54 68 65 73 65 20 74   sizes.  These t
5950: 79 70 65 64 65 66 73 20 6d 69 67 68 74 20 63 68  ypedefs might ch
5960: 61 6e 67 65 20 66 6f 72 20 61 72 63 68 69 74 65  ange for archite
5970: 63 74 75 72 65 73 0a 2a 2a 20 77 68 65 72 65 20  ctures.** where 
5980: 74 68 65 20 73 69 7a 65 73 20 76 65 72 79 2e 20  the sizes very. 
5990: 20 50 72 65 70 72 6f 63 65 73 73 6f 72 20 6d 61   Preprocessor ma
59a0: 63 72 6f 73 20 61 72 65 20 61 76 61 69 6c 61 62  cros are availab
59b0: 6c 65 20 73 6f 20 74 68 61 74 20 74 68 65 0a 2a  le so that the.*
59c0: 2a 20 74 79 70 65 73 20 63 61 6e 20 62 65 20 63  * types can be c
59d0: 6f 6e 76 65 6e 69 65 6e 74 6c 79 20 72 65 64 65  onveniently rede
59e0: 66 69 6e 65 64 20 61 74 20 63 6f 6d 70 69 6c 65  fined at compile
59f0: 2d 74 79 70 65 2e 20 20 4c 69 6b 65 20 74 68 69  -type.  Like thi
5a00: 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20  s:.**.**        
5a10: 20 63 63 20 27 2d 44 55 49 4e 54 50 54 52 5f 54   cc '-DUINTPTR_T
5a20: 59 50 45 3d 6c 6f 6e 67 20 6c 6f 6e 67 20 69 6e  YPE=long long in
5a30: 74 27 20 2e 2e 2e 0a 2a 2f 0a 23 69 66 6e 64 65  t' ....*/.#ifnde
5a40: 66 20 55 49 4e 54 33 32 5f 54 59 50 45 0a 23 20  f UINT32_TYPE.# 
5a50: 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54 33  ifdef HAVE_UINT3
5a60: 32 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49  2_T.#  define UI
5a70: 4e 54 33 32 5f 54 59 50 45 20 75 69 6e 74 33 32  NT32_TYPE uint32
5a80: 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66  _t.# else.#  def
5a90: 69 6e 65 20 55 49 4e 54 33 32 5f 54 59 50 45 20  ine UINT32_TYPE 
5aa0: 75 6e 73 69 67 6e 65 64 20 69 6e 74 0a 23 20 65  unsigned int.# e
5ab0: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e  ndif.#endif.#ifn
5ac0: 64 65 66 20 55 49 4e 54 31 36 5f 54 59 50 45 0a  def UINT16_TYPE.
5ad0: 23 20 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e  # ifdef HAVE_UIN
5ae0: 54 31 36 5f 54 0a 23 20 20 64 65 66 69 6e 65 20  T16_T.#  define 
5af0: 55 49 4e 54 31 36 5f 54 59 50 45 20 75 69 6e 74  UINT16_TYPE uint
5b00: 31 36 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64  16_t.# else.#  d
5b10: 65 66 69 6e 65 20 55 49 4e 54 31 36 5f 54 59 50  efine UINT16_TYP
5b20: 45 20 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 74  E unsigned short
5b30: 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e   int.# endif.#en
5b40: 64 69 66 0a 23 69 66 6e 64 65 66 20 49 4e 54 31  dif.#ifndef INT1
5b50: 36 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48  6_TYPE.# ifdef H
5b60: 41 56 45 5f 49 4e 54 31 36 5f 54 0a 23 20 20 64  AVE_INT16_T.#  d
5b70: 65 66 69 6e 65 20 49 4e 54 31 36 5f 54 59 50 45  efine INT16_TYPE
5b80: 20 69 6e 74 31 36 5f 74 0a 23 20 65 6c 73 65 0a   int16_t.# else.
5b90: 23 20 20 64 65 66 69 6e 65 20 49 4e 54 31 36 5f  #  define INT16_
5ba0: 54 59 50 45 20 73 68 6f 72 74 20 69 6e 74 0a 23  TYPE short int.#
5bb0: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69   endif.#endif.#i
5bc0: 66 6e 64 65 66 20 55 49 4e 54 38 5f 54 59 50 45  fndef UINT8_TYPE
5bd0: 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f 55 49  .# ifdef HAVE_UI
5be0: 4e 54 38 5f 54 0a 23 20 20 64 65 66 69 6e 65 20  NT8_T.#  define 
5bf0: 55 49 4e 54 38 5f 54 59 50 45 20 75 69 6e 74 38  UINT8_TYPE uint8
5c00: 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66  _t.# else.#  def
5c10: 69 6e 65 20 55 49 4e 54 38 5f 54 59 50 45 20 75  ine UINT8_TYPE u
5c20: 6e 73 69 67 6e 65 64 20 63 68 61 72 0a 23 20 65  nsigned char.# e
5c30: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e  ndif.#endif.#ifn
5c40: 64 65 66 20 49 4e 54 38 5f 54 59 50 45 0a 23 20  def INT8_TYPE.# 
5c50: 69 66 64 65 66 20 48 41 56 45 5f 49 4e 54 38 5f  ifdef HAVE_INT8_
5c60: 54 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 38  T.#  define INT8
5c70: 5f 54 59 50 45 20 69 6e 74 38 5f 74 0a 23 20 65  _TYPE int8_t.# e
5c80: 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49 4e  lse.#  define IN
5c90: 54 38 5f 54 59 50 45 20 73 69 67 6e 65 64 20 63  T8_TYPE signed c
5ca0: 68 61 72 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64  har.# endif.#end
5cb0: 69 66 0a 23 69 66 6e 64 65 66 20 4c 4f 4e 47 44  if.#ifndef LONGD
5cc0: 4f 55 42 4c 45 5f 54 59 50 45 0a 23 20 64 65 66  OUBLE_TYPE.# def
5cd0: 69 6e 65 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54  ine LONGDOUBLE_T
5ce0: 59 50 45 20 6c 6f 6e 67 20 64 6f 75 62 6c 65 0a  YPE long double.
5cf0: 23 65 6e 64 69 66 0a 74 79 70 65 64 65 66 20 73  #endif.typedef s
5d00: 71 6c 69 74 65 5f 69 6e 74 36 34 20 69 36 34 3b  qlite_int64 i64;
5d10: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 38 2d 62            /* 8-b
5d20: 79 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67  yte signed integ
5d30: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 73 71  er */.typedef sq
5d40: 6c 69 74 65 5f 75 69 6e 74 36 34 20 75 36 34 3b  lite_uint64 u64;
5d50: 20 20 20 20 20 20 20 20 20 2f 2a 20 38 2d 62 79           /* 8-by
5d60: 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65  te unsigned inte
5d70: 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55  ger */.typedef U
5d80: 49 4e 54 33 32 5f 54 59 50 45 20 75 33 32 3b 20  INT32_TYPE u32; 
5d90: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 34 2d 62            /* 4-b
5da0: 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  yte unsigned int
5db0: 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20  eger */.typedef 
5dc0: 55 49 4e 54 31 36 5f 54 59 50 45 20 75 31 36 3b  UINT16_TYPE u16;
5dd0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32 2d             /* 2-
5de0: 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e  byte unsigned in
5df0: 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66  teger */.typedef
5e00: 20 49 4e 54 31 36 5f 54 59 50 45 20 69 31 36 3b   INT16_TYPE i16;
5e10: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32              /* 2
5e20: 2d 62 79 74 65 20 73 69 67 6e 65 64 20 69 6e 74  -byte signed int
5e30: 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20  eger */.typedef 
5e40: 55 49 4e 54 38 5f 54 59 50 45 20 75 38 3b 20 20  UINT8_TYPE u8;  
5e50: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 2d             /* 1-
5e60: 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e  byte unsigned in
5e70: 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66  teger */.typedef
5e80: 20 49 4e 54 38 5f 54 59 50 45 20 69 38 3b 20 20   INT8_TYPE i8;  
5e90: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31              /* 1
5ea0: 2d 62 79 74 65 20 73 69 67 6e 65 64 20 69 6e 74  -byte signed int
5eb0: 65 67 65 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53  eger */../*.** S
5ec0: 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32 20 69 73  QLITE_MAX_U32 is
5ed0: 20 61 20 75 36 34 20 63 6f 6e 73 74 61 6e 74 20   a u64 constant 
5ee0: 74 68 61 74 20 69 73 20 74 68 65 20 6d 61 78 69  that is the maxi
5ef0: 6d 75 6d 20 75 36 34 20 76 61 6c 75 65 0a 2a 2a  mum u64 value.**
5f00: 20 74 68 61 74 20 63 61 6e 20 62 65 20 73 74 6f   that can be sto
5f10: 72 65 64 20 69 6e 20 61 20 75 33 32 20 77 69 74  red in a u32 wit
5f20: 68 6f 75 74 20 6c 6f 73 73 20 6f 66 20 64 61 74  hout loss of dat
5f30: 61 2e 20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a  a.  The value.**
5f40: 20 69 73 20 30 78 30 30 30 30 30 30 30 30 66 66   is 0x00000000ff
5f50: 66 66 66 66 66 66 2e 20 20 42 75 74 20 62 65 63  ffffff.  But bec
5f60: 61 75 73 65 20 6f 66 20 71 75 69 72 6b 73 20 6f  ause of quirks o
5f70: 66 20 73 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73  f some compilers
5f80: 2c 20 77 65 0a 2a 2a 20 68 61 76 65 20 74 6f 20  , we.** have to 
5f90: 73 70 65 63 69 66 79 20 74 68 65 20 76 61 6c 75  specify the valu
5fa0: 65 20 69 6e 20 74 68 65 20 6c 65 73 73 20 69 6e  e in the less in
5fb0: 74 75 69 74 69 76 65 20 6d 61 6e 6e 65 72 20 73  tuitive manner s
5fc0: 68 6f 77 6e 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65  hown:.*/.#define
5fd0: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32 20   SQLITE_MAX_U32 
5fe0: 20 28 28 28 28 75 36 34 29 31 29 3c 3c 33 32 29   ((((u64)1)<<32)
5ff0: 2d 31 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64  -1)../*.** The d
6000: 61 74 61 74 79 70 65 20 75 73 65 64 20 74 6f 20  atatype used to 
6010: 73 74 6f 72 65 20 65 73 74 69 6d 61 74 65 73 20  store estimates 
6020: 6f 66 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  of the number of
6030: 20 72 6f 77 73 20 69 6e 20 61 0a 2a 2a 20 74 61   rows in a.** ta
6040: 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 54  ble or index.  T
6050: 68 69 73 20 69 73 20 61 6e 20 75 6e 73 69 67 6e  his is an unsign
6060: 65 64 20 69 6e 74 65 67 65 72 20 74 79 70 65 2e  ed integer type.
6070: 20 20 46 6f 72 20 39 39 2e 39 25 20 6f 66 0a 2a    For 99.9% of.*
6080: 2a 20 74 68 65 20 77 6f 72 6c 64 2c 20 61 20 33  * the world, a 3
6090: 32 2d 62 69 74 20 69 6e 74 65 67 65 72 20 69 73  2-bit integer is
60a0: 20 73 75 66 66 69 63 69 65 6e 74 2e 20 20 42 75   sufficient.  Bu
60b0: 74 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67  t a 64-bit integ
60c0: 65 72 0a 2a 2a 20 63 61 6e 20 62 65 20 75 73 65  er.** can be use
60d0: 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  d at compile-tim
60e0: 65 20 69 66 20 64 65 73 69 72 65 64 2e 0a 2a 2f  e if desired..*/
60f0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 36  .#ifdef SQLITE_6
6100: 34 42 49 54 5f 53 54 41 54 53 0a 20 74 79 70 65  4BIT_STATS. type
6110: 64 65 66 20 75 36 34 20 74 52 6f 77 63 6e 74 3b  def u64 tRowcnt;
6120: 20 20 20 20 2f 2a 20 36 34 2d 62 69 74 20 6f 6e      /* 64-bit on
6130: 6c 79 20 69 66 20 72 65 71 75 65 73 74 65 64 20  ly if requested 
6140: 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  at compile-time 
6150: 2a 2f 0a 23 65 6c 73 65 0a 20 74 79 70 65 64 65  */.#else. typede
6160: 66 20 75 33 32 20 74 52 6f 77 63 6e 74 3b 20 20  f u32 tRowcnt;  
6170: 20 20 2f 2a 20 33 32 2d 62 69 74 20 69 73 20 74    /* 32-bit is t
6180: 68 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23 65  he default */.#e
6190: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 73 74 69  ndif../*.** Esti
61a0: 6d 61 74 65 64 20 71 75 61 6e 74 69 74 69 65 73  mated quantities
61b0: 20 75 73 65 64 20 66 6f 72 20 71 75 65 72 79 20   used for query 
61c0: 70 6c 61 6e 6e 69 6e 67 20 61 72 65 20 73 74 6f  planning are sto
61d0: 72 65 64 20 61 73 20 31 36 2d 62 69 74 0a 2a 2a  red as 16-bit.**
61e0: 20 6c 6f 67 61 72 69 74 68 6d 73 2e 20 20 46 6f   logarithms.  Fo
61f0: 72 20 71 75 61 6e 74 69 74 79 20 58 2c 20 74 68  r quantity X, th
6200: 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64 20 69  e value stored i
6210: 73 20 31 30 2a 6c 6f 67 32 28 58 29 2e 20 20 54  s 10*log2(X).  T
6220: 68 69 73 0a 2a 2a 20 67 69 76 65 73 20 61 20 70  his.** gives a p
6230: 6f 73 73 69 62 6c 65 20 72 61 6e 67 65 20 6f 66  ossible range of
6240: 20 76 61 6c 75 65 73 20 6f 66 20 61 70 70 72 6f   values of appro
6250: 78 69 6d 61 74 65 6c 79 20 31 2e 30 65 39 38 36  ximately 1.0e986
6260: 20 74 6f 20 31 65 2d 39 38 36 2e 0a 2a 2a 20 42   to 1e-986..** B
6270: 75 74 20 74 68 65 20 61 6c 6c 6f 77 65 64 20 76  ut the allowed v
6280: 61 6c 75 65 73 20 61 72 65 20 22 67 72 61 69 6e  alues are "grain
6290: 79 22 2e 20 20 4e 6f 74 20 65 76 65 72 79 20 76  y".  Not every v
62a0: 61 6c 75 65 20 69 73 20 72 65 70 72 65 73 65 6e  alue is represen
62b0: 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20 65 78  table..** For ex
62c0: 61 6d 70 6c 65 2c 20 71 75 61 6e 74 69 74 69 65  ample, quantitie
62d0: 73 20 31 36 20 61 6e 64 20 31 37 20 61 72 65 20  s 16 and 17 are 
62e0: 62 6f 74 68 20 72 65 70 72 65 73 65 6e 74 65 64  both represented
62f0: 20 62 79 20 61 20 4c 6f 67 45 73 74 0a 2a 2a 20   by a LogEst.** 
6300: 6f 66 20 34 30 2e 20 20 48 6f 77 65 76 65 72 2c  of 40.  However,
6310: 20 73 69 6e 63 65 20 4c 6f 67 45 73 74 20 71 75   since LogEst qu
6320: 61 6e 74 69 74 69 65 73 20 61 72 65 20 73 75 70  antities are sup
6330: 70 6f 73 65 20 74 6f 20 62 65 20 65 73 74 69 6d  pose to be estim
6340: 61 74 65 73 2c 0a 2a 2a 20 6e 6f 74 20 65 78 61  ates,.** not exa
6350: 63 74 20 76 61 6c 75 65 73 2c 20 74 68 69 73 20  ct values, this 
6360: 69 6d 70 72 65 63 69 73 69 6f 6e 20 69 73 20 6e  imprecision is n
6370: 6f 74 20 61 20 70 72 6f 62 6c 65 6d 2e 0a 2a 2a  ot a problem..**
6380: 0a 2a 2a 20 22 4c 6f 67 45 73 74 22 20 69 73 20  .** "LogEst" is 
6390: 73 68 6f 72 74 20 66 6f 72 20 22 4c 6f 67 61 72  short for "Logar
63a0: 69 74 68 6d 69 63 20 45 73 74 69 6d 61 74 65 22  ithmic Estimate"
63b0: 2e 0a 2a 2a 0a 2a 2a 20 45 78 61 6d 70 6c 65 73  ..**.** Examples
63c0: 3a 0a 2a 2a 20 20 20 20 20 20 31 20 2d 3e 20 30  :.**      1 -> 0
63d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 32 30                20
63e0: 20 2d 3e 20 34 33 20 20 20 20 20 20 20 20 20 20   -> 43          
63f0: 31 30 30 30 30 20 2d 3e 20 31 33 32 0a 2a 2a 20  10000 -> 132.** 
6400: 20 20 20 20 20 32 20 2d 3e 20 31 30 20 20 20 20       2 -> 10    
6410: 20 20 20 20 20 20 20 20 20 32 35 20 2d 3e 20 34           25 -> 4
6420: 36 20 20 20 20 20 20 20 20 20 20 32 35 30 30 30  6          25000
6430: 20 2d 3e 20 31 34 36 0a 2a 2a 20 20 20 20 20 20   -> 146.**      
6440: 33 20 2d 3e 20 31 36 20 20 20 20 20 20 20 20 20  3 -> 16         
6450: 20 20 20 31 30 30 20 2d 3e 20 36 36 20 20 20 20     100 -> 66    
6460: 20 20 20 20 31 30 30 30 30 30 30 20 2d 3e 20 31      1000000 -> 1
6470: 39 39 0a 2a 2a 20 20 20 20 20 20 34 20 2d 3e 20  99.**      4 -> 
6480: 32 30 20 20 20 20 20 20 20 20 20 20 20 31 30 30  20           100
6490: 30 20 2d 3e 20 39 39 20 20 20 20 20 20 20 20 31  0 -> 99        1
64a0: 30 34 38 35 37 36 20 2d 3e 20 32 30 30 0a 2a 2a  048576 -> 200.**
64b0: 20 20 20 20 20 31 30 20 2d 3e 20 33 33 20 20 20       10 -> 33   
64c0: 20 20 20 20 20 20 20 20 31 30 32 34 20 2d 3e 20          1024 -> 
64d0: 31 30 30 20 20 20 20 34 32 39 34 39 36 37 32 39  100    429496729
64e0: 36 20 2d 3e 20 33 32 30 0a 2a 2a 0a 2a 2a 20 54  6 -> 320.**.** T
64f0: 68 65 20 4c 6f 67 45 73 74 20 63 61 6e 20 62 65  he LogEst can be
6500: 20 6e 65 67 61 74 69 76 65 20 74 6f 20 69 6e 64   negative to ind
6510: 69 63 61 74 65 20 66 72 61 63 74 69 6f 6e 61 6c  icate fractional
6520: 20 76 61 6c 75 65 73 2e 0a 2a 2a 20 45 78 61 6d   values..** Exam
6530: 70 6c 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 30  ples:.**.**    0
6540: 2e 35 20 2d 3e 20 2d 31 30 20 20 20 20 20 20 20  .5 -> -10       
6550: 20 20 20 20 30 2e 31 20 2d 3e 20 2d 33 33 20 20      0.1 -> -33  
6560: 20 20 20 20 20 20 30 2e 30 36 32 35 20 2d 3e 20        0.0625 -> 
6570: 2d 34 30 0a 2a 2f 0a 74 79 70 65 64 65 66 20 49  -40.*/.typedef I
6580: 4e 54 31 36 5f 54 59 50 45 20 4c 6f 67 45 73 74  NT16_TYPE LogEst
6590: 3b 0a 0a 2f 2a 0a 2a 2a 20 53 65 74 20 74 68 65  ;../*.** Set the
65a0: 20 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 20   SQLITE_PTRSIZE 
65b0: 6d 61 63 72 6f 20 74 6f 20 74 68 65 20 6e 75 6d  macro to the num
65c0: 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20  ber of bytes in 
65d0: 61 20 70 6f 69 6e 74 65 72 0a 2a 2f 0a 23 69 66  a pointer.*/.#if
65e0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 50 54 52 53  ndef SQLITE_PTRS
65f0: 49 5a 45 0a 23 20 69 66 20 64 65 66 69 6e 65 64  IZE.# if defined
6600: 28 5f 5f 53 49 5a 45 4f 46 5f 50 4f 49 4e 54 45  (__SIZEOF_POINTE
6610: 52 5f 5f 29 0a 23 20 20 20 64 65 66 69 6e 65 20  R__).#   define 
6620: 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 20 5f  SQLITE_PTRSIZE _
6630: 5f 53 49 5a 45 4f 46 5f 50 4f 49 4e 54 45 52 5f  _SIZEOF_POINTER_
6640: 5f 0a 23 20 65 6c 69 66 20 64 65 66 69 6e 65 64  _.# elif defined
6650: 28 69 33 38 36 29 20 20 20 20 20 7c 7c 20 64 65  (i386)     || de
6660: 66 69 6e 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20  fined(__i386__) 
6670: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f    || defined(_M_
6680: 49 58 38 36 29 20 7c 7c 20 20 20 20 5c 0a 20 20  IX86) ||    \.  
6690: 20 20 20 20 20 64 65 66 69 6e 65 64 28 5f 4d 5f       defined(_M_
66a0: 41 52 4d 29 20 20 20 7c 7c 20 64 65 66 69 6e 65  ARM)   || define
66b0: 64 28 5f 5f 61 72 6d 5f 5f 29 20 20 20 20 7c 7c  d(__arm__)    ||
66c0: 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 29 0a   defined(__x86).
66d0: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
66e0: 45 5f 50 54 52 53 49 5a 45 20 34 0a 23 20 65 6c  E_PTRSIZE 4.# el
66f0: 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51  se.#   define SQ
6700: 4c 49 54 45 5f 50 54 52 53 49 5a 45 20 38 0a 23  LITE_PTRSIZE 8.#
6710: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f   endif.#endif../
6720: 2a 20 54 68 65 20 75 70 74 72 20 74 79 70 65 20  * The uptr type 
6730: 69 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20 69  is an unsigned i
6740: 6e 74 65 67 65 72 20 6c 61 72 67 65 20 65 6e 6f  nteger large eno
6750: 75 67 68 20 74 6f 20 68 6f 6c 64 20 61 20 70 6f  ugh to hold a po
6760: 69 6e 74 65 72 0a 2a 2f 0a 23 69 66 20 64 65 66  inter.*/.#if def
6770: 69 6e 65 64 28 48 41 56 45 5f 53 54 44 49 4e 54  ined(HAVE_STDINT
6780: 5f 48 29 0a 20 20 74 79 70 65 64 65 66 20 75 69  _H).  typedef ui
6790: 6e 74 70 74 72 5f 74 20 75 70 74 72 3b 0a 23 65  ntptr_t uptr;.#e
67a0: 6c 69 66 20 53 51 4c 49 54 45 5f 50 54 52 53 49  lif SQLITE_PTRSI
67b0: 5a 45 3d 3d 34 0a 20 20 74 79 70 65 64 65 66 20  ZE==4.  typedef 
67c0: 75 33 32 20 75 70 74 72 3b 0a 23 65 6c 73 65 0a  u32 uptr;.#else.
67d0: 20 20 74 79 70 65 64 65 66 20 75 36 34 20 75 70    typedef u64 up
67e0: 74 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  tr;.#endif../*.*
67f0: 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 57 49 54  * The SQLITE_WIT
6800: 48 49 4e 28 50 2c 53 2c 45 29 20 6d 61 63 72 6f  HIN(P,S,E) macro
6810: 20 63 68 65 63 6b 73 20 74 6f 20 73 65 65 20 69   checks to see i
6820: 66 20 70 6f 69 6e 74 65 72 20 50 20 70 6f 69 6e  f pointer P poin
6830: 74 73 20 74 6f 0a 2a 2a 20 73 6f 6d 65 74 68 69  ts to.** somethi
6840: 6e 67 20 62 65 74 77 65 65 6e 20 53 20 28 69 6e  ng between S (in
6850: 63 6c 75 73 69 76 65 29 20 61 6e 64 20 45 20 28  clusive) and E (
6860: 65 78 63 6c 75 73 69 76 65 29 2e 0a 2a 2a 0a 2a  exclusive)..**.*
6870: 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  * In other words
6880: 2c 20 53 20 69 73 20 61 20 62 75 66 66 65 72 20  , S is a buffer 
6890: 61 6e 64 20 45 20 69 73 20 61 20 70 6f 69 6e 74  and E is a point
68a0: 65 72 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  er to the first 
68b0: 62 79 74 65 20 61 66 74 65 72 0a 2a 2a 20 74 68  byte after.** th
68c0: 65 20 65 6e 64 20 6f 66 20 62 75 66 66 65 72 20  e end of buffer 
68d0: 53 2e 20 20 54 68 69 73 20 6d 61 63 72 6f 20 72  S.  This macro r
68e0: 65 74 75 72 6e 73 20 74 72 75 65 20 69 66 20 50  eturns true if P
68f0: 20 70 6f 69 6e 74 73 20 74 6f 20 73 6f 6d 65 74   points to somet
6900: 68 69 6e 67 0a 2a 2a 20 63 6f 6e 74 61 69 6e 65  hing.** containe
6910: 64 20 77 69 74 68 69 6e 20 74 68 65 20 62 75 66  d within the buf
6920: 66 65 72 20 53 2e 0a 2a 2f 0a 23 64 65 66 69 6e  fer S..*/.#defin
6930: 65 20 53 51 4c 49 54 45 5f 57 49 54 48 49 4e 28  e SQLITE_WITHIN(
6940: 50 2c 53 2c 45 29 20 28 28 28 75 70 74 72 29 28  P,S,E) (((uptr)(
6950: 50 29 3e 3d 28 75 70 74 72 29 28 53 29 29 26 26  P)>=(uptr)(S))&&
6960: 28 28 75 70 74 72 29 28 50 29 3c 28 75 70 74 72  ((uptr)(P)<(uptr
6970: 29 28 45 29 29 29 0a 0a 0a 2f 2a 0a 2a 2a 20 4d  )(E))).../*.** M
6980: 61 63 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69  acros to determi
6990: 6e 65 20 77 68 65 74 68 65 72 20 74 68 65 20 6d  ne whether the m
69a0: 61 63 68 69 6e 65 20 69 73 20 62 69 67 20 6f 72  achine is big or
69b0: 20 6c 69 74 74 6c 65 20 65 6e 64 69 61 6e 2c 0a   little endian,.
69c0: 2a 2a 20 61 6e 64 20 77 68 65 74 68 65 72 20 6f  ** and whether o
69d0: 72 20 6e 6f 74 20 74 68 61 74 20 64 65 74 65 72  r not that deter
69e0: 6d 69 6e 61 74 69 6f 6e 20 69 73 20 72 75 6e 2d  mination is run-
69f0: 74 69 6d 65 20 6f 72 20 63 6f 6d 70 69 6c 65 2d  time or compile-
6a00: 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 46 6f 72 20  time..**.** For 
6a10: 62 65 73 74 20 70 65 72 66 6f 72 6d 61 6e 63 65  best performance
6a20: 2c 20 61 6e 20 61 74 74 65 6d 70 74 20 69 73 20  , an attempt is 
6a30: 6d 61 64 65 20 74 6f 20 67 75 65 73 73 20 61 74  made to guess at
6a40: 20 74 68 65 20 62 79 74 65 2d 6f 72 64 65 72 0a   the byte-order.
6a50: 2a 2a 20 75 73 69 6e 67 20 43 2d 70 72 65 70 72  ** using C-prepr
6a60: 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f 73 2e 20  ocessor macros. 
6a70: 20 49 66 20 74 68 61 74 20 69 73 20 75 6e 73 75   If that is unsu
6a80: 63 63 65 73 73 66 75 6c 2c 20 6f 72 20 69 66 0a  ccessful, or if.
6a90: 2a 2a 20 2d 44 53 51 4c 49 54 45 5f 42 59 54 45  ** -DSQLITE_BYTE
6aa0: 4f 52 44 45 52 3d 30 20 69 73 20 73 65 74 2c 20  ORDER=0 is set, 
6ab0: 74 68 65 6e 20 62 79 74 65 2d 6f 72 64 65 72 20  then byte-order 
6ac0: 69 73 20 64 65 74 65 72 6d 69 6e 65 64 0a 2a 2a  is determined.**
6ad0: 20 61 74 20 72 75 6e 2d 74 69 6d 65 2e 0a 2a 2f   at run-time..*/
6ae0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
6af0: 42 59 54 45 4f 52 44 45 52 0a 23 20 69 66 20 64  BYTEORDER.# if d
6b00: 65 66 69 6e 65 64 28 69 33 38 36 29 20 20 20 20  efined(i386)    
6b10: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 69 33   || defined(__i3
6b20: 38 36 5f 5f 29 20 20 20 7c 7c 20 64 65 66 69 6e  86__)   || defin
6b30: 65 64 28 5f 4d 5f 49 58 38 36 29 20 7c 7c 20 20  ed(_M_IX86) ||  
6b40: 20 20 5c 0a 20 20 20 20 20 64 65 66 69 6e 65 64    \.     defined
6b50: 28 5f 5f 78 38 36 5f 36 34 29 20 7c 7c 20 64 65  (__x86_64) || de
6b60: 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34 5f 5f  fined(__x86_64__
6b70: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f  ) || defined(_M_
6b80: 58 36 34 29 20 20 7c 7c 20 20 20 20 5c 0a 20 20  X64)  ||    \.  
6b90: 20 20 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41 4d     defined(_M_AM
6ba0: 44 36 34 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  D64) || defined(
6bb0: 5f 4d 5f 41 52 4d 29 20 20 20 20 20 7c 7c 20 64  _M_ARM)     || d
6bc0: 65 66 69 6e 65 64 28 5f 5f 78 38 36 29 20 20 20  efined(__x86)   
6bd0: 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20 64 65 66  ||    \.     def
6be0: 69 6e 65 64 28 5f 5f 61 72 6d 5f 5f 29 0a 23 20  ined(__arm__).# 
6bf0: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
6c00: 42 59 54 45 4f 52 44 45 52 20 20 20 20 31 32 33  BYTEORDER    123
6c10: 34 0a 23 20 65 6c 69 66 20 64 65 66 69 6e 65 64  4.# elif defined
6c20: 28 73 70 61 72 63 29 20 20 20 20 7c 7c 20 64 65  (sparc)    || de
6c30: 66 69 6e 65 64 28 5f 5f 70 70 63 5f 5f 29 0a 23  fined(__ppc__).#
6c40: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
6c50: 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20 34 33  _BYTEORDER    43
6c60: 32 31 0a 23 20 65 6c 73 65 0a 23 20 20 20 64 65  21.# else.#   de
6c70: 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 59 54 45  fine SQLITE_BYTE
6c80: 4f 52 44 45 52 20 30 0a 23 20 65 6e 64 69 66 0a  ORDER 0.# endif.
6c90: 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49 54  #endif.#if SQLIT
6ca0: 45 5f 42 59 54 45 4f 52 44 45 52 3d 3d 34 33 32  E_BYTEORDER==432
6cb0: 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  1.# define SQLIT
6cc0: 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20 31  E_BIGENDIAN    1
6cd0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
6ce0: 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 30 0a  _LITTLEENDIAN 0.
6cf0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
6d00: 55 54 46 31 36 4e 41 54 49 56 45 20 20 53 51 4c  UTF16NATIVE  SQL
6d10: 49 54 45 5f 55 54 46 31 36 42 45 0a 23 65 6c 69  ITE_UTF16BE.#eli
6d20: 66 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44  f SQLITE_BYTEORD
6d30: 45 52 3d 3d 31 32 33 34 0a 23 20 64 65 66 69 6e  ER==1234.# defin
6d40: 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49  e SQLITE_BIGENDI
6d50: 41 4e 20 20 20 20 30 0a 23 20 64 65 66 69 6e 65  AN    0.# define
6d60: 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e   SQLITE_LITTLEEN
6d70: 44 49 41 4e 20 31 0a 23 20 64 65 66 69 6e 65 20  DIAN 1.# define 
6d80: 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49  SQLITE_UTF16NATI
6d90: 56 45 20 20 53 51 4c 49 54 45 5f 55 54 46 31 36  VE  SQLITE_UTF16
6da0: 4c 45 0a 23 65 6c 73 65 0a 23 20 69 66 64 65 66  LE.#else.# ifdef
6db0: 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41   SQLITE_AMALGAMA
6dc0: 54 49 4f 4e 0a 20 20 63 6f 6e 73 74 20 69 6e 74  TION.  const int
6dd0: 20 73 71 6c 69 74 65 33 6f 6e 65 20 3d 20 31 3b   sqlite3one = 1;
6de0: 0a 23 20 65 6c 73 65 0a 20 20 65 78 74 65 72 6e  .# else.  extern
6df0: 20 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69 74   const int sqlit
6e00: 65 33 6f 6e 65 3b 0a 23 20 65 6e 64 69 66 0a 23  e3one;.# endif.#
6e10: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42   define SQLITE_B
6e20: 49 47 45 4e 44 49 41 4e 20 20 20 20 28 2a 28 63  IGENDIAN    (*(c
6e30: 68 61 72 20 2a 29 28 26 73 71 6c 69 74 65 33 6f  har *)(&sqlite3o
6e40: 6e 65 29 3d 3d 30 29 0a 23 20 64 65 66 69 6e 65  ne)==0).# define
6e50: 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e   SQLITE_LITTLEEN
6e60: 44 49 41 4e 20 28 2a 28 63 68 61 72 20 2a 29 28  DIAN (*(char *)(
6e70: 26 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d 31 29  &sqlite3one)==1)
6e80: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
6e90: 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20 28 53  _UTF16NATIVE  (S
6ea0: 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 3f  QLITE_BIGENDIAN?
6eb0: 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 3a 53  SQLITE_UTF16BE:S
6ec0: 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 29 0a 23  QLITE_UTF16LE).#
6ed0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e  endif../*.** Con
6ee0: 73 74 61 6e 74 73 20 66 6f 72 20 74 68 65 20 6c  stants for the l
6ef0: 61 72 67 65 73 74 20 61 6e 64 20 73 6d 61 6c 6c  argest and small
6f00: 65 73 74 20 70 6f 73 73 69 62 6c 65 20 36 34 2d  est possible 64-
6f10: 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67  bit signed integ
6f20: 65 72 73 2e 0a 2a 2a 20 54 68 65 73 65 20 6d 61  ers..** These ma
6f30: 63 72 6f 73 20 61 72 65 20 64 65 73 69 67 6e 65  cros are designe
6f40: 64 20 74 6f 20 77 6f 72 6b 20 63 6f 72 72 65 63  d to work correc
6f50: 74 6c 79 20 6f 6e 20 62 6f 74 68 20 33 32 2d 62  tly on both 32-b
6f60: 69 74 20 61 6e 64 20 36 34 2d 62 69 74 0a 2a 2a  it and 64-bit.**
6f70: 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2f 0a 23   compilers..*/.#
6f80: 64 65 66 69 6e 65 20 4c 41 52 47 45 53 54 5f 49  define LARGEST_I
6f90: 4e 54 36 34 20 20 28 30 78 66 66 66 66 66 66 66  NT64  (0xfffffff
6fa0: 66 7c 28 28 28 69 36 34 29 30 78 37 66 66 66 66  f|(((i64)0x7ffff
6fb0: 66 66 66 29 3c 3c 33 32 29 29 0a 23 64 65 66 69  fff)<<32)).#defi
6fc0: 6e 65 20 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36  ne SMALLEST_INT6
6fd0: 34 20 28 28 28 69 36 34 29 2d 31 29 20 2d 20 4c  4 (((i64)-1) - L
6fe0: 41 52 47 45 53 54 5f 49 4e 54 36 34 29 0a 0a 2f  ARGEST_INT64)../
6ff0: 2a 0a 2a 2a 20 52 6f 75 6e 64 20 75 70 20 61 20  *.** Round up a 
7000: 6e 75 6d 62 65 72 20 74 6f 20 74 68 65 20 6e 65  number to the ne
7010: 78 74 20 6c 61 72 67 65 72 20 6d 75 6c 74 69 70  xt larger multip
7020: 6c 65 20 6f 66 20 38 2e 20 20 54 68 69 73 20 69  le of 8.  This i
7030: 73 20 75 73 65 64 0a 2a 2a 20 74 6f 20 66 6f 72  s used.** to for
7040: 63 65 20 38 2d 62 79 74 65 20 61 6c 69 67 6e 6d  ce 8-byte alignm
7050: 65 6e 74 20 6f 6e 20 36 34 2d 62 69 74 20 61 72  ent on 64-bit ar
7060: 63 68 69 74 65 63 74 75 72 65 73 2e 0a 2a 2f 0a  chitectures..*/.
7070: 23 64 65 66 69 6e 65 20 52 4f 55 4e 44 38 28 78  #define ROUND8(x
7080: 29 20 20 20 20 20 28 28 28 78 29 2b 37 29 26 7e  )     (((x)+7)&~
7090: 37 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20  7)../*.** Round 
70a0: 64 6f 77 6e 20 74 6f 20 74 68 65 20 6e 65 61 72  down to the near
70b0: 65 73 74 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20  est multiple of 
70c0: 38 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55  8.*/.#define ROU
70d0: 4e 44 44 4f 57 4e 38 28 78 29 20 28 28 78 29 26  NDDOWN8(x) ((x)&
70e0: 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 65 72  ~7)../*.** Asser
70f0: 74 20 74 68 61 74 20 74 68 65 20 70 6f 69 6e 74  t that the point
7100: 65 72 20 58 20 69 73 20 61 6c 69 67 6e 65 64 20  er X is aligned 
7110: 74 6f 20 61 6e 20 38 2d 62 79 74 65 20 62 6f 75  to an 8-byte bou
7120: 6e 64 61 72 79 2e 20 20 54 68 69 73 0a 2a 2a 20  ndary.  This.** 
7130: 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 6f 6e  macro is used on
7140: 6c 79 20 77 69 74 68 69 6e 20 61 73 73 65 72 74  ly within assert
7150: 28 29 20 74 6f 20 76 65 72 69 66 79 20 74 68 61  () to verify tha
7160: 74 20 74 68 65 20 63 6f 64 65 20 67 65 74 73 0a  t the code gets.
7170: 2a 2a 20 61 6c 6c 20 61 6c 69 67 6e 6d 65 6e 74  ** all alignment
7180: 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20 63 6f   restrictions co
7190: 72 72 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 45 78 63  rrect..**.** Exc
71a0: 65 70 74 2c 20 69 66 20 53 51 4c 49 54 45 5f 34  ept, if SQLITE_4
71b0: 5f 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41  _BYTE_ALIGNED_MA
71c0: 4c 4c 4f 43 20 69 73 20 64 65 66 69 6e 65 64 2c  LLOC is defined,
71d0: 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 75 6e 64   then the.** und
71e0: 65 72 6c 79 69 6e 67 20 6d 61 6c 6c 6f 63 28 29  erlying malloc()
71f0: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
7200: 6d 69 67 68 74 20 72 65 74 75 72 6e 20 75 73 20  might return us 
7210: 34 2d 62 79 74 65 20 61 6c 69 67 6e 65 64 0a 2a  4-byte aligned.*
7220: 2a 20 70 6f 69 6e 74 65 72 73 2e 20 20 49 6e 20  * pointers.  In 
7230: 74 68 61 74 20 63 61 73 65 2c 20 6f 6e 6c 79 20  that case, only 
7240: 76 65 72 69 66 79 20 34 2d 62 79 74 65 20 61 6c  verify 4-byte al
7250: 69 67 6e 6d 65 6e 74 2e 0a 2a 2f 0a 23 69 66 64  ignment..*/.#ifd
7260: 65 66 20 53 51 4c 49 54 45 5f 34 5f 42 59 54 45  ef SQLITE_4_BYTE
7270: 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43 0a  _ALIGNED_MALLOC.
7280: 23 20 64 65 66 69 6e 65 20 45 49 47 48 54 5f 42  # define EIGHT_B
7290: 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28 58 29  YTE_ALIGNMENT(X)
72a0: 20 20 20 28 28 28 28 63 68 61 72 2a 29 28 58 29     ((((char*)(X)
72b0: 20 2d 20 28 63 68 61 72 2a 29 30 29 26 33 29 3d   - (char*)0)&3)=
72c0: 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  =0).#else.# defi
72d0: 6e 65 20 45 49 47 48 54 5f 42 59 54 45 5f 41 4c  ne EIGHT_BYTE_AL
72e0: 49 47 4e 4d 45 4e 54 28 58 29 20 20 20 28 28 28  IGNMENT(X)   (((
72f0: 28 63 68 61 72 2a 29 28 58 29 20 2d 20 28 63 68  (char*)(X) - (ch
7300: 61 72 2a 29 30 29 26 37 29 3d 3d 30 29 0a 23 65  ar*)0)&7)==0).#e
7310: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 69 73 61  ndif../*.** Disa
7320: 62 6c 65 20 4d 4d 41 50 20 6f 6e 20 70 6c 61 74  ble MMAP on plat
7330: 66 6f 72 6d 73 20 77 68 65 72 65 20 69 74 20 69  forms where it i
7340: 73 20 6b 6e 6f 77 6e 20 74 6f 20 6e 6f 74 20 77  s known to not w
7350: 6f 72 6b 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  ork.*/.#if defin
7360: 65 64 28 5f 5f 4f 70 65 6e 42 53 44 5f 5f 29 20  ed(__OpenBSD__) 
7370: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 51 4e 58  || defined(__QNX
7380: 4e 54 4f 5f 5f 29 0a 23 20 75 6e 64 65 66 20 53  NTO__).# undef S
7390: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
73a0: 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  IZE.# define SQL
73b0: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
73c0: 45 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  E 0.#endif../*.*
73d0: 2a 20 44 65 66 61 75 6c 74 20 6d 61 78 69 6d 75  * Default maximu
73e0: 6d 20 73 69 7a 65 20 6f 66 20 6d 65 6d 6f 72 79  m size of memory
73f0: 20 75 73 65 64 20 62 79 20 6d 65 6d 6f 72 79 2d   used by memory-
7400: 6d 61 70 70 65 64 20 49 2f 4f 20 69 6e 20 74 68  mapped I/O in th
7410: 65 20 56 46 53 0a 2a 2f 0a 23 69 66 64 65 66 20  e VFS.*/.#ifdef 
7420: 5f 5f 41 50 50 4c 45 5f 5f 0a 23 20 69 6e 63 6c  __APPLE__.# incl
7430: 75 64 65 20 3c 54 61 72 67 65 74 43 6f 6e 64 69  ude <TargetCondi
7440: 74 69 6f 6e 61 6c 73 2e 68 3e 0a 23 65 6e 64 69  tionals.h>.#endi
7450: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
7460: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23  _MAX_MMAP_SIZE.#
7470: 20 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 6c 69   if defined(__li
7480: 6e 75 78 5f 5f 29 20 5c 0a 20 20 7c 7c 20 64 65  nux__) \.  || de
7490: 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 5c 0a  fined(_WIN32) \.
74a0: 20 20 7c 7c 20 28 64 65 66 69 6e 65 64 28 5f 5f    || (defined(__
74b0: 41 50 50 4c 45 5f 5f 29 20 26 26 20 64 65 66 69  APPLE__) && defi
74c0: 6e 65 64 28 5f 5f 4d 41 43 48 5f 5f 29 29 20 5c  ned(__MACH__)) \
74d0: 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f  .  || defined(__
74e0: 73 75 6e 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69  sun) \.  || defi
74f0: 6e 65 64 28 5f 5f 46 72 65 65 42 53 44 5f 5f 29  ned(__FreeBSD__)
7500: 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28   \.  || defined(
7510: 5f 5f 44 72 61 67 6f 6e 46 6c 79 5f 5f 29 0a 23  __DragonFly__).#
7520: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
7530: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30  _MAX_MMAP_SIZE 0
7540: 78 37 66 66 66 30 30 30 30 20 20 2f 2a 20 32 31  x7fff0000  /* 21
7550: 34 37 34 31 38 31 31 32 20 2a 2f 0a 23 20 65 6c  47418112 */.# el
7560: 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51  se.#   define SQ
7570: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
7580: 5a 45 20 30 0a 23 20 65 6e 64 69 66 0a 23 65 6e  ZE 0.# endif.#en
7590: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64  dif../*.** The d
75a0: 65 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45  efault MMAP_SIZE
75b0: 20 69 73 20 7a 65 72 6f 20 6f 6e 20 61 6c 6c 20   is zero on all 
75c0: 70 6c 61 74 66 6f 72 6d 73 2e 20 20 4f 72 2c 20  platforms.  Or, 
75d0: 65 76 65 6e 20 69 66 20 61 20 6c 61 72 67 65 72  even if a larger
75e0: 0a 2a 2a 20 64 65 66 61 75 6c 74 20 4d 4d 41 50  .** default MMAP
75f0: 5f 53 49 5a 45 20 69 73 20 73 70 65 63 69 66 69  _SIZE is specifi
7600: 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69  ed at compile-ti
7610: 6d 65 2c 20 6d 61 6b 65 20 73 75 72 65 20 74 68  me, make sure th
7620: 61 74 20 69 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f  at it does.** no
7630: 74 20 65 78 63 65 65 64 20 74 68 65 20 6d 61 78  t exceed the max
7640: 69 6d 75 6d 20 6d 6d 61 70 20 73 69 7a 65 2e 0a  imum mmap size..
7650: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
7660: 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53  E_DEFAULT_MMAP_S
7670: 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  IZE.# define SQL
7680: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50  ITE_DEFAULT_MMAP
7690: 5f 53 49 5a 45 20 30 0a 23 65 6e 64 69 66 0a 23  _SIZE 0.#endif.#
76a0: 69 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  if SQLITE_DEFAUL
76b0: 54 5f 4d 4d 41 50 5f 53 49 5a 45 3e 53 51 4c 49  T_MMAP_SIZE>SQLI
76c0: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
76d0: 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f  .# undef SQLITE_
76e0: 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a  DEFAULT_MMAP_SIZ
76f0: 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  E.# define SQLIT
7700: 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53  E_DEFAULT_MMAP_S
7710: 49 5a 45 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d  IZE SQLITE_MAX_M
7720: 4d 41 50 5f 53 49 5a 45 0a 23 65 6e 64 69 66 0a  MAP_SIZE.#endif.
7730: 0a 2f 2a 0a 2a 2a 20 4f 6e 6c 79 20 6f 6e 65 20  ./*.** Only one 
7740: 6f 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  of SQLITE_ENABLE
7750: 5f 53 54 41 54 33 20 6f 72 20 53 51 4c 49 54 45  _STAT3 or SQLITE
7760: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 20 63 61  _ENABLE_STAT4 ca
7770: 6e 20 62 65 20 64 65 66 69 6e 65 64 2e 0a 2a 2a  n be defined..**
7780: 20 50 72 69 6f 72 69 74 79 20 69 73 20 67 69 76   Priority is giv
7790: 65 6e 20 74 6f 20 53 51 4c 49 54 45 5f 45 4e 41  en to SQLITE_ENA
77a0: 42 4c 45 5f 53 54 41 54 34 2e 20 20 49 66 20 65  BLE_STAT4.  If e
77b0: 69 74 68 65 72 20 61 72 65 20 64 65 66 69 6e 65  ither are define
77c0: 64 2c 20 61 6c 73 6f 0a 2a 2a 20 64 65 66 69 6e  d, also.** defin
77d0: 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  e SQLITE_ENABLE_
77e0: 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 2a  STAT3_OR_STAT4.*
77f0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
7800: 45 4e 41 42 4c 45 5f 53 54 41 54 34 0a 23 20 75  ENABLE_STAT4.# u
7810: 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  ndef SQLITE_ENAB
7820: 4c 45 5f 53 54 41 54 33 0a 23 20 64 65 66 69 6e  LE_STAT3.# defin
7830: 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  e SQLITE_ENABLE_
7840: 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 20 31  STAT3_OR_STAT4 1
7850: 0a 23 65 6c 69 66 20 53 51 4c 49 54 45 5f 45 4e  .#elif SQLITE_EN
7860: 41 42 4c 45 5f 53 54 41 54 33 0a 23 20 64 65 66  ABLE_STAT3.# def
7870: 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ine SQLITE_ENABL
7880: 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34  E_STAT3_OR_STAT4
7890: 20 31 0a 23 65 6c 69 66 20 53 51 4c 49 54 45 5f   1.#elif SQLITE_
78a0: 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f  ENABLE_STAT3_OR_
78b0: 53 54 41 54 34 0a 23 20 75 6e 64 65 66 20 53 51  STAT4.# undef SQ
78c0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
78d0: 33 5f 4f 52 5f 53 54 41 54 34 0a 23 65 6e 64 69  3_OR_STAT4.#endi
78e0: 66 0a 0a 2f 2a 0a 2a 2a 20 53 45 4c 45 43 54 54  f../*.** SELECTT
78f0: 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 77 69 6c  RACE_ENABLED wil
7900: 6c 20 62 65 20 65 69 74 68 65 72 20 31 20 6f 72  l be either 1 or
7910: 20 30 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20   0 depending on 
7920: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 0a 2a  whether or not.*
7930: 2a 20 74 68 65 20 53 65 6c 65 63 74 20 71 75 65  * the Select que
7940: 72 79 20 67 65 6e 65 72 61 74 6f 72 20 74 72 61  ry generator tra
7950: 63 69 6e 67 20 6c 6f 67 69 63 20 69 73 20 74 75  cing logic is tu
7960: 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66 20  rned on..*/.#if 
7970: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
7980: 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64  EBUG) || defined
7990: 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53  (SQLITE_ENABLE_S
79a0: 45 4c 45 43 54 54 52 41 43 45 29 0a 23 20 64 65  ELECTTRACE).# de
79b0: 66 69 6e 65 20 53 45 4c 45 43 54 54 52 41 43 45  fine SELECTTRACE
79c0: 5f 45 4e 41 42 4c 45 44 20 31 0a 23 65 6c 73 65  _ENABLED 1.#else
79d0: 0a 23 20 64 65 66 69 6e 65 20 53 45 4c 45 43 54  .# define SELECT
79e0: 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 30 0a  TRACE_ENABLED 0.
79f0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e  #endif../*.** An
7a00: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
7a10: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
7a20: 74 75 72 65 20 69 73 20 75 73 65 64 20 74 6f 20  ture is used to 
7a30: 73 74 6f 72 65 20 74 68 65 20 62 75 73 79 2d 68  store the busy-h
7a40: 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62 61  andler.** callba
7a50: 63 6b 20 66 6f 72 20 61 20 67 69 76 65 6e 20 73  ck for a given s
7a60: 71 6c 69 74 65 20 68 61 6e 64 6c 65 2e 0a 2a 2a  qlite handle..**
7a70: 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74 65 2e 62  .** The sqlite.b
7a80: 75 73 79 48 61 6e 64 6c 65 72 20 6d 65 6d 62 65  usyHandler membe
7a90: 72 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 20  r of the sqlite 
7aa0: 73 74 72 75 63 74 20 63 6f 6e 74 61 69 6e 73 20  struct contains 
7ab0: 74 68 65 20 62 75 73 79 0a 2a 2a 20 63 61 6c 6c  the busy.** call
7ac0: 62 61 63 6b 20 66 6f 72 20 74 68 65 20 64 61 74  back for the dat
7ad0: 61 62 61 73 65 20 68 61 6e 64 6c 65 2e 20 45 61  abase handle. Ea
7ae0: 63 68 20 70 61 67 65 72 20 6f 70 65 6e 65 64 20  ch pager opened 
7af0: 76 69 61 20 74 68 65 20 73 71 6c 69 74 65 0a 2a  via the sqlite.*
7b00: 2a 20 68 61 6e 64 6c 65 20 69 73 20 70 61 73 73  * handle is pass
7b10: 65 64 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  ed a pointer to 
7b20: 73 71 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c  sqlite.busyHandl
7b30: 65 72 2e 20 54 68 65 20 62 75 73 79 2d 68 61 6e  er. The busy-han
7b40: 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b  dler.** callback
7b50: 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e   is currently in
7b60: 76 6f 6b 65 64 20 6f 6e 6c 79 20 66 72 6f 6d 20  voked only from 
7b70: 77 69 74 68 69 6e 20 70 61 67 65 72 2e 63 2e 0a  within pager.c..
7b80: 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
7b90: 74 20 42 75 73 79 48 61 6e 64 6c 65 72 20 42 75  t BusyHandler Bu
7ba0: 73 79 48 61 6e 64 6c 65 72 3b 0a 73 74 72 75 63  syHandler;.struc
7bb0: 74 20 42 75 73 79 48 61 6e 64 6c 65 72 20 7b 0a  t BusyHandler {.
7bc0: 20 20 69 6e 74 20 28 2a 78 46 75 6e 63 29 28 76    int (*xFunc)(v
7bd0: 6f 69 64 20 2a 2c 69 6e 74 29 3b 20 20 2f 2a 20  oid *,int);  /* 
7be0: 54 68 65 20 62 75 73 79 20 63 61 6c 6c 62 61 63  The busy callbac
7bf0: 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 72  k */.  void *pAr
7c00: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
7c10: 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67 20 74    /* First arg t
7c20: 6f 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20  o busy callback 
7c30: 2a 2f 0a 20 20 69 6e 74 20 6e 42 75 73 79 3b 20  */.  int nBusy; 
7c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c50: 2f 2a 20 49 6e 63 72 65 6d 65 6e 74 65 64 20 77  /* Incremented w
7c60: 69 74 68 20 65 61 63 68 20 62 75 73 79 20 63 61  ith each busy ca
7c70: 6c 6c 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ll */.};../*.** 
7c80: 4e 61 6d 65 20 6f 66 20 74 68 65 20 6d 61 73 74  Name of the mast
7c90: 65 72 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  er database tabl
7ca0: 65 2e 20 20 54 68 65 20 6d 61 73 74 65 72 20 64  e.  The master d
7cb0: 61 74 61 62 61 73 65 20 74 61 62 6c 65 0a 2a 2a  atabase table.**
7cc0: 20 69 73 20 61 20 73 70 65 63 69 61 6c 20 74 61   is a special ta
7cd0: 62 6c 65 20 74 68 61 74 20 68 6f 6c 64 73 20 74  ble that holds t
7ce0: 68 65 20 6e 61 6d 65 73 20 61 6e 64 20 61 74 74  he names and att
7cf0: 72 69 62 75 74 65 73 20 6f 66 20 61 6c 6c 0a 2a  ributes of all.*
7d00: 2a 20 75 73 65 72 20 74 61 62 6c 65 73 20 61 6e  * user tables an
7d10: 64 20 69 6e 64 69 63 65 73 2e 0a 2a 2f 0a 23 64  d indices..*/.#d
7d20: 65 66 69 6e 65 20 4d 41 53 54 45 52 5f 4e 41 4d  efine MASTER_NAM
7d30: 45 20 20 20 20 20 20 20 22 73 71 6c 69 74 65 5f  E       "sqlite_
7d40: 6d 61 73 74 65 72 22 0a 23 64 65 66 69 6e 65 20  master".#define 
7d50: 54 45 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45  TEMP_MASTER_NAME
7d60: 20 20 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d    "sqlite_temp_m
7d70: 61 73 74 65 72 22 0a 0a 2f 2a 0a 2a 2a 20 54 68  aster"../*.** Th
7d80: 65 20 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74  e root-page of t
7d90: 68 65 20 6d 61 73 74 65 72 20 64 61 74 61 62 61  he master databa
7da0: 73 65 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65  se table..*/.#de
7db0: 66 69 6e 65 20 4d 41 53 54 45 52 5f 52 4f 4f 54  fine MASTER_ROOT
7dc0: 20 20 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20         1../*.** 
7dd0: 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  The name of the 
7de0: 73 63 68 65 6d 61 20 74 61 62 6c 65 2e 0a 2a 2f  schema table..*/
7df0: 0a 23 64 65 66 69 6e 65 20 53 43 48 45 4d 41 5f  .#define SCHEMA_
7e00: 54 41 42 4c 45 28 78 29 20 20 28 28 21 4f 4d 49  TABLE(x)  ((!OMI
7e10: 54 5f 54 45 4d 50 44 42 29 26 26 28 78 3d 3d 31  T_TEMPDB)&&(x==1
7e20: 29 3f 54 45 4d 50 5f 4d 41 53 54 45 52 5f 4e 41  )?TEMP_MASTER_NA
7e30: 4d 45 3a 4d 41 53 54 45 52 5f 4e 41 4d 45 29 0a  ME:MASTER_NAME).
7e40: 0a 2f 2a 0a 2a 2a 20 41 20 63 6f 6e 76 65 6e 69  ./*.** A conveni
7e50: 65 6e 63 65 20 6d 61 63 72 6f 20 74 68 61 74 20  ence macro that 
7e60: 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62  returns the numb
7e70: 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69  er of elements i
7e80: 6e 0a 2a 2a 20 61 6e 20 61 72 72 61 79 2e 0a 2a  n.** an array..*
7e90: 2f 0a 23 64 65 66 69 6e 65 20 41 72 72 61 79 53  /.#define ArrayS
7ea0: 69 7a 65 28 58 29 20 20 20 20 28 28 69 6e 74 29  ize(X)    ((int)
7eb0: 28 73 69 7a 65 6f 66 28 58 29 2f 73 69 7a 65 6f  (sizeof(X)/sizeo
7ec0: 66 28 58 5b 30 5d 29 29 29 0a 0a 2f 2a 0a 2a 2a  f(X[0])))../*.**
7ed0: 20 44 65 74 65 72 6d 69 6e 65 20 69 66 20 74 68   Determine if th
7ee0: 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20  e argument is a 
7ef0: 70 6f 77 65 72 20 6f 66 20 74 77 6f 0a 2a 2f 0a  power of two.*/.
7f00: 23 64 65 66 69 6e 65 20 49 73 50 6f 77 65 72 4f  #define IsPowerO
7f10: 66 54 77 6f 28 58 29 20 28 28 28 58 29 26 28 28  fTwo(X) (((X)&((
7f20: 58 29 2d 31 29 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a  X)-1))==0)../*.*
7f30: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
7f40: 76 61 6c 75 65 20 61 73 20 61 20 64 65 73 74 72  value as a destr
7f50: 75 63 74 6f 72 20 6d 65 61 6e 73 20 74 6f 20 75  uctor means to u
7f60: 73 65 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  se sqlite3DbFree
7f70: 28 29 2e 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74  ()..** The sqlit
7f80: 65 33 44 62 46 72 65 65 28 29 20 72 6f 75 74 69  e3DbFree() routi
7f90: 6e 65 20 72 65 71 75 69 72 65 73 20 74 77 6f 20  ne requires two 
7fa0: 70 61 72 61 6d 65 74 65 72 73 20 69 6e 73 74 65  parameters inste
7fb0: 61 64 20 6f 66 20 74 68 65 0a 2a 2a 20 6f 6e 65  ad of the.** one
7fc0: 20 70 61 72 61 6d 65 74 65 72 20 74 68 61 74 20   parameter that 
7fd0: 64 65 73 74 72 75 63 74 6f 72 73 20 6e 6f 72 6d  destructors norm
7fe0: 61 6c 6c 79 20 77 61 6e 74 2e 20 20 53 6f 20 77  ally want.  So w
7ff0: 65 20 68 61 76 65 20 74 6f 20 69 6e 74 72 6f 64  e have to introd
8000: 75 63 65 0a 2a 2a 20 74 68 69 73 20 6d 61 67 69  uce.** this magi
8010: 63 20 76 61 6c 75 65 20 74 68 61 74 20 74 68 65  c value that the
8020: 20 63 6f 64 65 20 6b 6e 6f 77 73 20 74 6f 20 68   code knows to h
8030: 61 6e 64 6c 65 20 64 69 66 66 65 72 65 6e 74 6c  andle differentl
8040: 79 2e 20 20 41 6e 79 0a 2a 2a 20 70 6f 69 6e 74  y.  Any.** point
8050: 65 72 20 77 69 6c 6c 20 77 6f 72 6b 20 68 65 72  er will work her
8060: 65 20 61 73 20 6c 6f 6e 67 20 61 73 20 69 74 20  e as long as it 
8070: 69 73 20 64 69 73 74 69 6e 63 74 20 66 72 6f 6d  is distinct from
8080: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 0a 2a   SQLITE_STATIC.*
8090: 2a 20 61 6e 64 20 53 51 4c 49 54 45 5f 54 52 41  * and SQLITE_TRA
80a0: 4e 53 49 45 4e 54 2e 0a 2a 2f 0a 23 64 65 66 69  NSIENT..*/.#defi
80b0: 6e 65 20 53 51 4c 49 54 45 5f 44 59 4e 41 4d 49  ne SQLITE_DYNAMI
80c0: 43 20 20 20 28 28 73 71 6c 69 74 65 33 5f 64 65  C   ((sqlite3_de
80d0: 73 74 72 75 63 74 6f 72 5f 74 79 70 65 29 73 71  structor_type)sq
80e0: 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 29  lite3MallocSize)
80f0: 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 53 51 4c  ../*.** When SQL
8100: 49 54 45 5f 4f 4d 49 54 5f 57 53 44 20 69 73 20  ITE_OMIT_WSD is 
8110: 64 65 66 69 6e 65 64 2c 20 69 74 20 6d 65 61 6e  defined, it mean
8120: 73 20 74 68 61 74 20 74 68 65 20 74 61 72 67 65  s that the targe
8130: 74 20 70 6c 61 74 66 6f 72 6d 20 64 6f 65 73 0a  t platform does.
8140: 2a 2a 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 57  ** not support W
8150: 72 69 74 61 62 6c 65 20 53 74 61 74 69 63 20 44  ritable Static D
8160: 61 74 61 20 28 57 53 44 29 20 73 75 63 68 20 61  ata (WSD) such a
8170: 73 20 67 6c 6f 62 61 6c 20 61 6e 64 20 73 74 61  s global and sta
8180: 74 69 63 20 76 61 72 69 61 62 6c 65 73 2e 0a 2a  tic variables..*
8190: 2a 20 41 6c 6c 20 76 61 72 69 61 62 6c 65 73 20  * All variables 
81a0: 6d 75 73 74 20 65 69 74 68 65 72 20 62 65 20 6f  must either be o
81b0: 6e 20 74 68 65 20 73 74 61 63 6b 20 6f 72 20 64  n the stack or d
81c0: 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63  ynamically alloc
81d0: 61 74 65 64 20 66 72 6f 6d 0a 2a 2a 20 74 68 65  ated from.** the
81e0: 20 68 65 61 70 2e 20 20 57 68 65 6e 20 57 53 44   heap.  When WSD
81f0: 20 69 73 20 75 6e 73 75 70 70 6f 72 74 65 64 2c   is unsupported,
8200: 20 74 68 65 20 76 61 72 69 61 62 6c 65 20 64 65   the variable de
8210: 63 6c 61 72 61 74 69 6f 6e 73 20 73 63 61 74 74  clarations scatt
8220: 65 72 65 64 0a 2a 2a 20 74 68 72 6f 75 67 68 6f  ered.** througho
8230: 75 74 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  ut the SQLite co
8240: 64 65 20 6d 75 73 74 20 62 65 63 6f 6d 65 20 63  de must become c
8250: 6f 6e 73 74 61 6e 74 73 20 69 6e 73 74 65 61 64  onstants instead
8260: 2e 20 20 54 68 65 20 53 51 4c 49 54 45 5f 57 53  .  The SQLITE_WS
8270: 44 0a 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75 73  D.** macro is us
8280: 65 64 20 66 6f 72 20 74 68 69 73 20 70 75 72 70  ed for this purp
8290: 6f 73 65 2e 20 20 41 6e 64 20 69 6e 73 74 65 61  ose.  And instea
82a0: 64 20 6f 66 20 72 65 66 65 72 65 6e 63 69 6e 67  d of referencing
82b0: 20 74 68 65 20 76 61 72 69 61 62 6c 65 0a 2a 2a   the variable.**
82c0: 20 64 69 72 65 63 74 6c 79 2c 20 77 65 20 75 73   directly, we us
82d0: 65 20 69 74 73 20 63 6f 6e 73 74 61 6e 74 20 61  e its constant a
82e0: 73 20 61 20 6b 65 79 20 74 6f 20 6c 6f 6f 6b 75  s a key to looku
82f0: 70 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20 61  p the run-time a
8300: 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 62 75 66 66  llocated.** buff
8310: 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20 72 65  er that holds re
8320: 61 6c 20 76 61 72 69 61 62 6c 65 2e 20 20 54 68  al variable.  Th
8330: 65 20 63 6f 6e 73 74 61 6e 74 20 69 73 20 61 6c  e constant is al
8340: 73 6f 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a  so the initializ
8350: 65 72 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 75  er.** for the ru
8360: 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65 64  n-time allocated
8370: 20 62 75 66 66 65 72 2e 0a 2a 2a 0a 2a 2a 20 49   buffer..**.** I
8380: 6e 20 74 68 65 20 75 73 75 61 6c 20 63 61 73 65  n the usual case
8390: 20 77 68 65 72 65 20 57 53 44 20 69 73 20 73 75   where WSD is su
83a0: 70 70 6f 72 74 65 64 2c 20 74 68 65 20 53 51 4c  pported, the SQL
83b0: 49 54 45 5f 57 53 44 20 61 6e 64 20 47 4c 4f 42  ITE_WSD and GLOB
83c0: 41 4c 0a 2a 2a 20 6d 61 63 72 6f 73 20 62 65 63  AL.** macros bec
83d0: 6f 6d 65 20 6e 6f 2d 6f 70 73 20 61 6e 64 20 68  ome no-ops and h
83e0: 61 76 65 20 7a 65 72 6f 20 70 65 72 66 6f 72 6d  ave zero perform
83f0: 61 6e 63 65 20 69 6d 70 61 63 74 2e 0a 2a 2f 0a  ance impact..*/.
8400: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
8410: 49 54 5f 57 53 44 0a 20 20 23 64 65 66 69 6e 65  IT_WSD.  #define
8420: 20 53 51 4c 49 54 45 5f 57 53 44 20 63 6f 6e 73   SQLITE_WSD cons
8430: 74 0a 20 20 23 64 65 66 69 6e 65 20 47 4c 4f 42  t.  #define GLOB
8440: 41 4c 28 74 2c 76 29 20 28 2a 28 74 2a 29 73 71  AL(t,v) (*(t*)sq
8450: 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e 64 28 28  lite3_wsd_find((
8460: 76 6f 69 64 2a 29 26 28 76 29 2c 20 73 69 7a 65  void*)&(v), size
8470: 6f 66 28 76 29 29 29 0a 20 20 23 64 65 66 69 6e  of(v))).  #defin
8480: 65 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43  e sqlite3GlobalC
8490: 6f 6e 66 69 67 20 47 4c 4f 42 41 4c 28 73 74 72  onfig GLOBAL(str
84a0: 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69  uct Sqlite3Confi
84b0: 67 2c 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67  g, sqlite3Config
84c0: 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 5f  ).  int sqlite3_
84d0: 77 73 64 5f 69 6e 69 74 28 69 6e 74 20 4e 2c 20  wsd_init(int N, 
84e0: 69 6e 74 20 4a 29 3b 0a 20 20 76 6f 69 64 20 2a  int J);.  void *
84f0: 73 71 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e 64  sqlite3_wsd_find
8500: 28 76 6f 69 64 20 2a 4b 2c 20 69 6e 74 20 4c 29  (void *K, int L)
8510: 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
8520: 65 20 53 51 4c 49 54 45 5f 57 53 44 0a 20 20 23  e SQLITE_WSD.  #
8530: 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28 74 2c  define GLOBAL(t,
8540: 76 29 20 76 0a 20 20 23 64 65 66 69 6e 65 20 73  v) v.  #define s
8550: 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66  qlite3GlobalConf
8560: 69 67 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67  ig sqlite3Config
8570: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
8580: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63  he following mac
8590: 72 6f 73 20 61 72 65 20 75 73 65 64 20 74 6f 20  ros are used to 
85a0: 73 75 70 70 72 65 73 73 20 63 6f 6d 70 69 6c 65  suppress compile
85b0: 72 20 77 61 72 6e 69 6e 67 73 20 61 6e 64 20 74  r warnings and t
85c0: 6f 0a 2a 2a 20 6d 61 6b 65 20 69 74 20 63 6c 65  o.** make it cle
85d0: 61 72 20 74 6f 20 68 75 6d 61 6e 20 72 65 61 64  ar to human read
85e0: 65 72 73 20 77 68 65 6e 20 61 20 66 75 6e 63 74  ers when a funct
85f0: 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69 73  ion parameter is
8600: 20 64 65 6c 69 62 65 72 61 74 65 6c 79 0a 2a 2a   deliberately.**
8610: 20 6c 65 66 74 20 75 6e 75 73 65 64 20 77 69 74   left unused wit
8620: 68 69 6e 20 74 68 65 20 62 6f 64 79 20 6f 66 20  hin the body of 
8630: 61 20 66 75 6e 63 74 69 6f 6e 2e 20 54 68 69 73  a function. This
8640: 20 75 73 75 61 6c 6c 79 20 68 61 70 70 65 6e 73   usually happens
8650: 20 77 68 65 6e 0a 2a 2a 20 61 20 66 75 6e 63 74   when.** a funct
8660: 69 6f 6e 20 69 73 20 63 61 6c 6c 65 64 20 76 69  ion is called vi
8670: 61 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69  a a function poi
8680: 6e 74 65 72 2e 20 46 6f 72 20 65 78 61 6d 70 6c  nter. For exampl
8690: 65 20 74 68 65 0a 2a 2a 20 69 6d 70 6c 65 6d 65  e the.** impleme
86a0: 6e 74 61 74 69 6f 6e 20 6f 66 20 61 6e 20 53 51  ntation of an SQ
86b0: 4c 20 61 67 67 72 65 67 61 74 65 20 73 74 65 70  L aggregate step
86c0: 20 63 61 6c 6c 62 61 63 6b 20 6d 61 79 20 6e 6f   callback may no
86d0: 74 20 75 73 65 20 74 68 65 0a 2a 2a 20 70 61 72  t use the.** par
86e0: 61 6d 65 74 65 72 20 69 6e 64 69 63 61 74 69 6e  ameter indicatin
86f0: 67 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  g the number of 
8700: 61 72 67 75 6d 65 6e 74 73 20 70 61 73 73 65 64  arguments passed
8710: 20 74 6f 20 74 68 65 20 61 67 67 72 65 67 61 74   to the aggregat
8720: 65 2c 0a 2a 2a 20 69 66 20 69 74 20 6b 6e 6f 77  e,.** if it know
8730: 73 20 74 68 61 74 20 74 68 69 73 20 69 73 20 65  s that this is e
8740: 6e 66 6f 72 63 65 64 20 65 6c 73 65 77 68 65 72  nforced elsewher
8750: 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61 20  e..**.** When a 
8760: 66 75 6e 63 74 69 6f 6e 20 70 61 72 61 6d 65 74  function paramet
8770: 65 72 20 69 73 20 6e 6f 74 20 75 73 65 64 20 61  er is not used a
8780: 74 20 61 6c 6c 20 77 69 74 68 69 6e 20 74 68 65  t all within the
8790: 20 62 6f 64 79 20 6f 66 20 61 20 66 75 6e 63 74   body of a funct
87a0: 69 6f 6e 2c 0a 2a 2a 20 69 74 20 69 73 20 67 65  ion,.** it is ge
87b0: 6e 65 72 61 6c 6c 79 20 6e 61 6d 65 64 20 22 4e  nerally named "N
87c0: 6f 74 55 73 65 64 22 20 6f 72 20 22 4e 6f 74 55  otUsed" or "NotU
87d0: 73 65 64 32 22 20 74 6f 20 6d 61 6b 65 20 74 68  sed2" to make th
87e0: 69 6e 67 73 20 65 76 65 6e 20 63 6c 65 61 72 65  ings even cleare
87f0: 72 2e 0a 2a 2a 20 48 6f 77 65 76 65 72 2c 20 74  r..** However, t
8800: 68 65 73 65 20 6d 61 63 72 6f 73 20 6d 61 79 20  hese macros may 
8810: 61 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f 20  also be used to 
8820: 73 75 70 70 72 65 73 73 20 77 61 72 6e 69 6e 67  suppress warning
8830: 73 20 72 65 6c 61 74 65 64 20 74 6f 0a 2a 2a 20  s related to.** 
8840: 70 61 72 61 6d 65 74 65 72 73 20 74 68 61 74 20  parameters that 
8850: 6d 61 79 20 6f 72 20 6d 61 79 20 6e 6f 74 20 62  may or may not b
8860: 65 20 75 73 65 64 20 64 65 70 65 6e 64 69 6e 67  e used depending
8870: 20 6f 6e 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20   on compilation 
8880: 6f 70 74 69 6f 6e 73 2e 0a 2a 2a 20 46 6f 72 20  options..** For 
8890: 65 78 61 6d 70 6c 65 20 74 68 6f 73 65 20 70 61  example those pa
88a0: 72 61 6d 65 74 65 72 73 20 6f 6e 6c 79 20 75 73  rameters only us
88b0: 65 64 20 69 6e 20 61 73 73 65 72 74 28 29 20 73  ed in assert() s
88c0: 74 61 74 65 6d 65 6e 74 73 2e 20 49 6e 20 74 68  tatements. In th
88d0: 65 73 65 0a 2a 2a 20 63 61 73 65 73 20 74 68 65  ese.** cases the
88e0: 20 70 61 72 61 6d 65 74 65 72 73 20 61 72 65 20   parameters are 
88f0: 6e 61 6d 65 64 20 61 73 20 70 65 72 20 74 68 65  named as per the
8900: 20 75 73 75 61 6c 20 63 6f 6e 76 65 6e 74 69 6f   usual conventio
8910: 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 55  ns..*/.#define U
8920: 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28  NUSED_PARAMETER(
8930: 78 29 20 28 76 6f 69 64 29 28 78 29 0a 23 64 65  x) (void)(x).#de
8940: 66 69 6e 65 20 55 4e 55 53 45 44 5f 50 41 52 41  fine UNUSED_PARA
8950: 4d 45 54 45 52 32 28 78 2c 79 29 20 55 4e 55 53  METER2(x,y) UNUS
8960: 45 44 5f 50 41 52 41 4d 45 54 45 52 28 78 29 2c  ED_PARAMETER(x),
8970: 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
8980: 28 79 29 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 77 61  (y)../*.** Forwa
8990: 72 64 20 72 65 66 65 72 65 6e 63 65 73 20 74 6f  rd references to
89a0: 20 73 74 72 75 63 74 75 72 65 73 0a 2a 2f 0a 74   structures.*/.t
89b0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 41 67  ypedef struct Ag
89c0: 67 49 6e 66 6f 20 41 67 67 49 6e 66 6f 3b 0a 74  gInfo AggInfo;.t
89d0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 41 75  ypedef struct Au
89e0: 74 68 43 6f 6e 74 65 78 74 20 41 75 74 68 43 6f  thContext AuthCo
89f0: 6e 74 65 78 74 3b 0a 74 79 70 65 64 65 66 20 73  ntext;.typedef s
8a00: 74 72 75 63 74 20 41 75 74 6f 69 6e 63 49 6e 66  truct AutoincInf
8a10: 6f 20 41 75 74 6f 69 6e 63 49 6e 66 6f 3b 0a 74  o AutoincInfo;.t
8a20: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 42 69  ypedef struct Bi
8a30: 74 76 65 63 20 42 69 74 76 65 63 3b 0a 74 79 70  tvec Bitvec;.typ
8a40: 65 64 65 66 20 73 74 72 75 63 74 20 43 6f 6c 6c  edef struct Coll
8a50: 53 65 71 20 43 6f 6c 6c 53 65 71 3b 0a 74 79 70  Seq CollSeq;.typ
8a60: 65 64 65 66 20 73 74 72 75 63 74 20 43 6f 6c 75  edef struct Colu
8a70: 6d 6e 20 43 6f 6c 75 6d 6e 3b 0a 74 79 70 65 64  mn Column;.typed
8a80: 65 66 20 73 74 72 75 63 74 20 44 62 20 44 62 3b  ef struct Db Db;
8a90: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8aa0: 53 63 68 65 6d 61 20 53 63 68 65 6d 61 3b 0a 74  Schema Schema;.t
8ab0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 45 78  ypedef struct Ex
8ac0: 70 72 20 45 78 70 72 3b 0a 74 79 70 65 64 65 66  pr Expr;.typedef
8ad0: 20 73 74 72 75 63 74 20 45 78 70 72 4c 69 73 74   struct ExprList
8ae0: 20 45 78 70 72 4c 69 73 74 3b 0a 74 79 70 65 64   ExprList;.typed
8af0: 65 66 20 73 74 72 75 63 74 20 45 78 70 72 53 70  ef struct ExprSp
8b00: 61 6e 20 45 78 70 72 53 70 61 6e 3b 0a 74 79 70  an ExprSpan;.typ
8b10: 65 64 65 66 20 73 74 72 75 63 74 20 46 4b 65 79  edef struct FKey
8b20: 20 46 4b 65 79 3b 0a 74 79 70 65 64 65 66 20 73   FKey;.typedef s
8b30: 74 72 75 63 74 20 46 75 6e 63 44 65 73 74 72 75  truct FuncDestru
8b40: 63 74 6f 72 20 46 75 6e 63 44 65 73 74 72 75 63  ctor FuncDestruc
8b50: 74 6f 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72  tor;.typedef str
8b60: 75 63 74 20 46 75 6e 63 44 65 66 20 46 75 6e 63  uct FuncDef Func
8b70: 44 65 66 3b 0a 74 79 70 65 64 65 66 20 73 74 72  Def;.typedef str
8b80: 75 63 74 20 46 75 6e 63 44 65 66 48 61 73 68 20  uct FuncDefHash 
8b90: 46 75 6e 63 44 65 66 48 61 73 68 3b 0a 74 79 70  FuncDefHash;.typ
8ba0: 65 64 65 66 20 73 74 72 75 63 74 20 49 64 4c 69  edef struct IdLi
8bb0: 73 74 20 49 64 4c 69 73 74 3b 0a 74 79 70 65 64  st IdList;.typed
8bc0: 65 66 20 73 74 72 75 63 74 20 49 6e 64 65 78 20  ef struct Index 
8bd0: 49 6e 64 65 78 3b 0a 74 79 70 65 64 65 66 20 73  Index;.typedef s
8be0: 74 72 75 63 74 20 49 6e 64 65 78 53 61 6d 70 6c  truct IndexSampl
8bf0: 65 20 49 6e 64 65 78 53 61 6d 70 6c 65 3b 0a 74  e IndexSample;.t
8c00: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4b 65  ypedef struct Ke
8c10: 79 43 6c 61 73 73 20 4b 65 79 43 6c 61 73 73 3b  yClass KeyClass;
8c20: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8c30: 4b 65 79 49 6e 66 6f 20 4b 65 79 49 6e 66 6f 3b  KeyInfo KeyInfo;
8c40: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8c50: 4c 6f 6f 6b 61 73 69 64 65 20 4c 6f 6f 6b 61 73  Lookaside Lookas
8c60: 69 64 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ide;.typedef str
8c70: 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f  uct LookasideSlo
8c80: 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 3b  t LookasideSlot;
8c90: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8ca0: 4d 6f 64 75 6c 65 20 4d 6f 64 75 6c 65 3b 0a 74  Module Module;.t
8cb0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4e 61  ypedef struct Na
8cc0: 6d 65 43 6f 6e 74 65 78 74 20 4e 61 6d 65 43 6f  meContext NameCo
8cd0: 6e 74 65 78 74 3b 0a 74 79 70 65 64 65 66 20 73  ntext;.typedef s
8ce0: 74 72 75 63 74 20 50 61 72 73 65 20 50 61 72 73  truct Parse Pars
8cf0: 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  e;.typedef struc
8d00: 74 20 50 72 65 55 70 64 61 74 65 20 50 72 65 55  t PreUpdate PreU
8d10: 70 64 61 74 65 3b 0a 74 79 70 65 64 65 66 20 73  pdate;.typedef s
8d20: 74 72 75 63 74 20 50 72 69 6e 74 66 41 72 67 75  truct PrintfArgu
8d30: 6d 65 6e 74 73 20 50 72 69 6e 74 66 41 72 67 75  ments PrintfArgu
8d40: 6d 65 6e 74 73 3b 0a 74 79 70 65 64 65 66 20 73  ments;.typedef s
8d50: 74 72 75 63 74 20 52 6f 77 53 65 74 20 52 6f 77  truct RowSet Row
8d60: 53 65 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  Set;.typedef str
8d70: 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20 53 61  uct Savepoint Sa
8d80: 76 65 70 6f 69 6e 74 3b 0a 74 79 70 65 64 65 66  vepoint;.typedef
8d90: 20 73 74 72 75 63 74 20 53 65 6c 65 63 74 20 53   struct Select S
8da0: 65 6c 65 63 74 3b 0a 74 79 70 65 64 65 66 20 73  elect;.typedef s
8db0: 74 72 75 63 74 20 53 51 4c 69 74 65 54 68 72 65  truct SQLiteThre
8dc0: 61 64 20 53 51 4c 69 74 65 54 68 72 65 61 64 3b  ad SQLiteThread;
8dd0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8de0: 53 65 6c 65 63 74 44 65 73 74 20 53 65 6c 65 63  SelectDest Selec
8df0: 74 44 65 73 74 3b 0a 74 79 70 65 64 65 66 20 73  tDest;.typedef s
8e00: 74 72 75 63 74 20 53 72 63 4c 69 73 74 20 53 72  truct SrcList Sr
8e10: 63 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73  cList;.typedef s
8e20: 74 72 75 63 74 20 53 74 72 41 63 63 75 6d 20 53  truct StrAccum S
8e30: 74 72 41 63 63 75 6d 3b 0a 74 79 70 65 64 65 66  trAccum;.typedef
8e40: 20 73 74 72 75 63 74 20 54 61 62 6c 65 20 54 61   struct Table Ta
8e50: 62 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ble;.typedef str
8e60: 75 63 74 20 54 61 62 6c 65 4c 6f 63 6b 20 54 61  uct TableLock Ta
8e70: 62 6c 65 4c 6f 63 6b 3b 0a 74 79 70 65 64 65 66  bleLock;.typedef
8e80: 20 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 54 6f   struct Token To
8e90: 6b 65 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ken;.typedef str
8ea0: 75 63 74 20 54 72 65 65 56 69 65 77 20 54 72 65  uct TreeView Tre
8eb0: 65 56 69 65 77 3b 0a 74 79 70 65 64 65 66 20 73  eView;.typedef s
8ec0: 74 72 75 63 74 20 54 72 69 67 67 65 72 20 54 72  truct Trigger Tr
8ed0: 69 67 67 65 72 3b 0a 74 79 70 65 64 65 66 20 73  igger;.typedef s
8ee0: 74 72 75 63 74 20 54 72 69 67 67 65 72 50 72 67  truct TriggerPrg
8ef0: 20 54 72 69 67 67 65 72 50 72 67 3b 0a 74 79 70   TriggerPrg;.typ
8f00: 65 64 65 66 20 73 74 72 75 63 74 20 54 72 69 67  edef struct Trig
8f10: 67 65 72 53 74 65 70 20 54 72 69 67 67 65 72 53  gerStep TriggerS
8f20: 74 65 70 3b 0a 74 79 70 65 64 65 66 20 73 74 72  tep;.typedef str
8f30: 75 63 74 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  uct UnpackedReco
8f40: 72 64 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  rd UnpackedRecor
8f50: 64 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  d;.typedef struc
8f60: 74 20 56 54 61 62 6c 65 20 56 54 61 62 6c 65 3b  t VTable VTable;
8f70: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8f80: 56 74 61 62 43 74 78 20 56 74 61 62 43 74 78 3b  VtabCtx VtabCtx;
8f90: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8fa0: 57 61 6c 6b 65 72 20 57 61 6c 6b 65 72 3b 0a 74  Walker Walker;.t
8fb0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 57 68  ypedef struct Wh
8fc0: 65 72 65 49 6e 66 6f 20 57 68 65 72 65 49 6e 66  ereInfo WhereInf
8fd0: 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  o;.typedef struc
8fe0: 74 20 57 69 74 68 20 57 69 74 68 3b 0a 0a 2f 2a  t With With;../*
8ff0: 20 41 20 56 4c 69 73 74 20 6f 62 6a 65 63 74 20   A VList object 
9000: 72 65 63 6f 72 64 73 20 61 20 6d 61 70 70 69 6e  records a mappin
9010: 67 20 62 65 74 77 65 65 6e 20 70 61 72 61 6d 65  g between parame
9020: 74 65 72 73 2f 76 61 72 69 61 62 6c 65 73 2f 77  ters/variables/w
9030: 69 6c 64 63 61 72 64 73 0a 2a 2a 20 69 6e 20 74  ildcards.** in t
9040: 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  he SQL statement
9050: 20 28 73 75 63 68 20 61 73 20 24 61 62 63 2c 20   (such as $abc, 
9060: 40 70 71 72 2c 20 6f 72 20 3a 78 79 7a 29 20 61  @pqr, or :xyz) a
9070: 6e 64 20 74 68 65 20 69 6e 74 65 67 65 72 0a 2a  nd the integer.*
9080: 2a 20 76 61 72 69 61 62 6c 65 20 6e 75 6d 62 65  * variable numbe
9090: 72 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  r associated wit
90a0: 68 20 74 68 61 74 20 70 61 72 61 6d 65 74 65 72  h that parameter
90b0: 2e 20 20 53 65 65 20 74 68 65 20 66 6f 72 6d 61  .  See the forma
90c0: 74 20 64 65 73 63 72 69 70 74 69 6f 6e 0a 2a 2a  t description.**
90d0: 20 6f 6e 20 74 68 65 20 73 71 6c 69 74 65 33 56   on the sqlite3V
90e0: 4c 69 73 74 41 64 64 28 29 20 72 6f 75 74 69 6e  ListAdd() routin
90f0: 65 20 66 6f 72 20 6d 6f 72 65 20 69 6e 66 6f 72  e for more infor
9100: 6d 61 74 69 6f 6e 2e 20 20 41 20 56 4c 69 73 74  mation.  A VList
9110: 20 69 73 20 72 65 61 6c 6c 79 0a 2a 2a 20 6a 75   is really.** ju
9120: 73 74 20 61 6e 20 61 72 72 61 79 20 6f 66 20 69  st an array of i
9130: 6e 74 65 67 65 72 73 2e 0a 2a 2f 0a 74 79 70 65  ntegers..*/.type
9140: 64 65 66 20 69 6e 74 20 56 4c 69 73 74 3b 0a 0a  def int VList;..
9150: 2f 2a 0a 2a 2a 20 44 65 66 65 72 20 73 6f 75 72  /*.** Defer sour
9160: 63 69 6e 67 20 76 64 62 65 2e 68 20 61 6e 64 20  cing vdbe.h and 
9170: 62 74 72 65 65 2e 68 20 75 6e 74 69 6c 20 61 66  btree.h until af
9180: 74 65 72 20 74 68 65 20 22 75 38 22 20 61 6e 64  ter the "u8" and
9190: 0a 2a 2a 20 22 42 75 73 79 48 61 6e 64 6c 65 72  .** "BusyHandler
91a0: 22 20 74 79 70 65 64 65 66 73 2e 20 76 64 62 65  " typedefs. vdbe
91b0: 2e 68 20 61 6c 73 6f 20 72 65 71 75 69 72 65 73  .h also requires
91c0: 20 61 20 66 65 77 20 6f 66 20 74 68 65 20 6f 70   a few of the op
91d0: 61 71 75 65 0a 2a 2a 20 70 6f 69 6e 74 65 72 20  aque.** pointer 
91e0: 74 79 70 65 73 20 28 69 2e 65 2e 20 46 75 6e 63  types (i.e. Func
91f0: 44 65 66 29 20 64 65 66 69 6e 65 64 20 61 62 6f  Def) defined abo
9200: 76 65 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20  ve..*/.#include 
9210: 22 62 74 72 65 65 2e 68 22 0a 23 69 6e 63 6c 75  "btree.h".#inclu
9220: 64 65 20 22 76 64 62 65 2e 68 22 0a 23 69 6e 63  de "vdbe.h".#inc
9230: 6c 75 64 65 20 22 70 61 67 65 72 2e 68 22 0a 23  lude "pager.h".#
9240: 69 6e 63 6c 75 64 65 20 22 70 63 61 63 68 65 2e  include "pcache.
9250: 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 6f 73 2e  h".#include "os.
9260: 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 6d 75 74  h".#include "mut
9270: 65 78 2e 68 22 0a 0a 2f 2a 20 54 68 65 20 53 51  ex.h"../* The SQ
9280: 4c 49 54 45 5f 45 58 54 52 41 5f 44 55 52 41 42  LITE_EXTRA_DURAB
9290: 4c 45 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  LE compile-time 
92a0: 6f 70 74 69 6f 6e 20 75 73 65 64 20 74 6f 20 73  option used to s
92b0: 65 74 20 74 68 65 20 64 65 66 61 75 6c 74 0a 2a  et the default.*
92c0: 2a 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 73 65  * synchronous se
92d0: 74 74 69 6e 67 20 74 6f 20 45 58 54 52 41 2e 20  tting to EXTRA. 
92e0: 20 49 74 20 69 73 20 6e 6f 20 6c 6f 6e 67 65 72   It is no longer
92f0: 20 73 75 70 70 6f 72 74 65 64 2e 0a 2a 2f 0a 23   supported..*/.#
9300: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 58 54  ifdef SQLITE_EXT
9310: 52 41 5f 44 55 52 41 42 4c 45 0a 23 20 77 61 72  RA_DURABLE.# war
9320: 6e 69 6e 67 20 55 73 65 20 53 51 4c 49 54 45 5f  ning Use SQLITE_
9330: 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e  DEFAULT_SYNCHRON
9340: 4f 55 53 3d 33 20 69 6e 73 74 65 61 64 20 6f 66  OUS=3 instead of
9350: 20 53 51 4c 49 54 45 5f 45 58 54 52 41 5f 44 55   SQLITE_EXTRA_DU
9360: 52 41 42 4c 45 0a 23 20 64 65 66 69 6e 65 20 53  RABLE.# define S
9370: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59  QLITE_DEFAULT_SY
9380: 4e 43 48 52 4f 4e 4f 55 53 20 33 0a 23 65 6e 64  NCHRONOUS 3.#end
9390: 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 61 75 6c  if../*.** Defaul
93a0: 74 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 6c 65  t synchronous le
93b0: 76 65 6c 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65  vels..**.** Note
93c0: 20 74 68 61 74 20 28 66 6f 72 20 68 69 73 74 6f   that (for histo
93d0: 72 63 61 6c 20 72 65 61 73 6f 6e 73 29 20 74 68  rcal reasons) th
93e0: 65 20 50 41 47 45 52 5f 53 59 4e 43 48 52 4f 4e  e PAGER_SYNCHRON
93f0: 4f 55 53 5f 2a 20 6d 61 63 72 6f 73 20 64 69 66  OUS_* macros dif
9400: 66 65 72 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20  fer.** from the 
9410: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53  SQLITE_DEFAULT_S
9420: 59 4e 43 48 52 4f 4e 4f 55 53 20 76 61 6c 75 65  YNCHRONOUS value
9430: 20 62 79 20 31 2e 0a 2a 2a 0a 2a 2a 20 20 20 20   by 1..**.**    
9440: 20 20 20 20 20 20 20 50 41 47 45 52 5f 53 59 4e         PAGER_SYN
9450: 43 48 52 4f 4e 4f 55 53 20 20 20 20 20 20 20 44  CHRONOUS       D
9460: 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f  EFAULT_SYNCHRONO
9470: 55 53 0a 2a 2a 20 20 20 4f 46 46 20 20 20 20 20  US.**   OFF     
9480: 20 20 20 20 20 20 31 20 20 20 20 20 20 20 20 20        1         
9490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
94a0: 30 0a 2a 2a 20 20 20 4e 4f 52 4d 41 4c 20 20 20  0.**   NORMAL   
94b0: 20 20 20 20 20 32 20 20 20 20 20 20 20 20 20 20       2          
94c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 31                 1
94d0: 0a 2a 2a 20 20 20 46 55 4c 4c 20 20 20 20 20 20  .**   FULL      
94e0: 20 20 20 20 33 20 20 20 20 20 20 20 20 20 20 20      3           
94f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 32 0a                2.
9500: 2a 2a 20 20 20 45 58 54 52 41 20 20 20 20 20 20  **   EXTRA      
9510: 20 20 20 34 20 20 20 20 20 20 20 20 20 20 20 20     4            
9520: 20 20 20 20 20 20 20 20 20 20 20 20 20 33 0a 2a               3.*
9530: 2a 0a 2a 2a 20 54 68 65 20 22 50 52 41 47 4d 41  *.** The "PRAGMA
9540: 20 73 79 6e 63 68 72 6f 6e 6f 75 73 22 20 73 74   synchronous" st
9550: 61 74 65 6d 65 6e 74 20 61 6c 73 6f 20 75 73 65  atement also use
9560: 73 20 74 68 65 20 7a 65 72 6f 2d 62 61 73 65 64  s the zero-based
9570: 20 6e 75 6d 62 65 72 73 2e 0a 2a 2a 20 49 6e 20   numbers..** In 
9580: 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
9590: 20 7a 65 72 6f 2d 62 61 73 65 64 20 6e 75 6d 62   zero-based numb
95a0: 65 72 73 20 61 72 65 20 75 73 65 64 20 66 6f 72  ers are used for
95b0: 20 61 6c 6c 20 65 78 74 65 72 6e 61 6c 20 69 6e   all external in
95c0: 74 65 72 66 61 63 65 73 0a 2a 2a 20 61 6e 64 20  terfaces.** and 
95d0: 74 68 65 20 6f 6e 65 2d 62 61 73 65 64 20 76 61  the one-based va
95e0: 6c 75 65 73 20 61 72 65 20 75 73 65 64 20 69 6e  lues are used in
95f0: 74 65 72 6e 61 6c 6c 79 2e 0a 2a 2f 0a 23 69 66  ternally..*/.#if
9600: 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41  ndef SQLITE_DEFA
9610: 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a  ULT_SYNCHRONOUS.
9620: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
9630: 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e  DEFAULT_SYNCHRON
9640: 4f 55 53 20 32 0a 23 65 6e 64 69 66 0a 23 69 66  OUS 2.#endif.#if
9650: 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41  ndef SQLITE_DEFA
9660: 55 4c 54 5f 57 41 4c 5f 53 59 4e 43 48 52 4f 4e  ULT_WAL_SYNCHRON
9670: 4f 55 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  OUS.# define SQL
9680: 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 41 4c 5f  ITE_DEFAULT_WAL_
9690: 53 59 4e 43 48 52 4f 4e 4f 55 53 20 53 51 4c 49  SYNCHRONOUS SQLI
96a0: 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48  TE_DEFAULT_SYNCH
96b0: 52 4f 4e 4f 55 53 0a 23 65 6e 64 69 66 0a 0a 2f  RONOUS.#endif../
96c0: 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62 61  *.** Each databa
96d0: 73 65 20 66 69 6c 65 20 74 6f 20 62 65 20 61 63  se file to be ac
96e0: 63 65 73 73 65 64 20 62 79 20 74 68 65 20 73 79  cessed by the sy
96f0: 73 74 65 6d 20 69 73 20 61 6e 20 69 6e 73 74 61  stem is an insta
9700: 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 65 20 66 6f  nce.** of the fo
9710: 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
9720: 65 2e 20 20 54 68 65 72 65 20 61 72 65 20 6e 6f  e.  There are no
9730: 72 6d 61 6c 6c 79 20 74 77 6f 20 6f 66 20 74 68  rmally two of th
9740: 65 73 65 20 73 74 72 75 63 74 75 72 65 73 0a 2a  ese structures.*
9750: 2a 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 2e  * in the sqlite.
9760: 61 44 62 5b 5d 20 61 72 72 61 79 2e 20 20 61 44  aDb[] array.  aD
9770: 62 5b 30 5d 20 69 73 20 74 68 65 20 6d 61 69 6e  b[0] is the main
9780: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61   database file a
9790: 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d 20 69 73 20  nd.** aDb[1] is 
97a0: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
97b0: 65 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 74  e used to hold t
97c0: 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e  emporary tables.
97d0: 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20    Additional.** 
97e0: 64 61 74 61 62 61 73 65 73 20 6d 61 79 20 62 65  databases may be
97f0: 20 61 74 74 61 63 68 65 64 2e 0a 2a 2f 0a 73 74   attached..*/.st
9800: 72 75 63 74 20 44 62 20 7b 0a 20 20 63 68 61 72  ruct Db {.  char
9810: 20 2a 7a 44 62 53 4e 61 6d 65 3b 20 20 20 20 20   *zDbSName;     
9820: 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73   /* Name of this
9830: 20 64 61 74 61 62 61 73 65 2e 20 28 73 63 68 65   database. (sche
9840: 6d 61 20 6e 61 6d 65 2c 20 6e 6f 74 20 66 69 6c  ma name, not fil
9850: 65 6e 61 6d 65 29 20 2a 2f 0a 20 20 42 74 72 65  ename) */.  Btre
9860: 65 20 2a 70 42 74 3b 20 20 20 20 20 20 20 20 20  e *pBt;         
9870: 20 2f 2a 20 54 68 65 20 42 2a 54 72 65 65 20 73   /* The B*Tree s
9880: 74 72 75 63 74 75 72 65 20 66 6f 72 20 74 68 69  tructure for thi
9890: 73 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  s database file 
98a0: 2a 2f 0a 20 20 75 38 20 73 61 66 65 74 79 5f 6c  */.  u8 safety_l
98b0: 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20 48 6f 77  evel;     /* How
98c0: 20 61 67 67 72 65 73 73 69 76 65 20 61 74 20 73   aggressive at s
98d0: 79 6e 63 69 6e 67 20 64 61 74 61 20 74 6f 20 64  yncing data to d
98e0: 69 73 6b 20 2a 2f 0a 20 20 75 38 20 62 53 79 6e  isk */.  u8 bSyn
98f0: 63 53 65 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  cSet;         /*
9900: 20 54 72 75 65 20 69 66 20 22 50 52 41 47 4d 41   True if "PRAGMA
9910: 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3d 4e 22 20   synchronous=N" 
9920: 68 61 73 20 62 65 65 6e 20 72 75 6e 20 2a 2f 0a  has been run */.
9930: 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d    Schema *pSchem
9940: 61 3b 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65  a;     /* Pointe
9950: 72 20 74 6f 20 64 61 74 61 62 61 73 65 20 73 63  r to database sc
9960: 68 65 6d 61 20 28 70 6f 73 73 69 62 6c 79 20 73  hema (possibly s
9970: 68 61 72 65 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  hared) */.};../*
9980: 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
9990: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
99a0: 20 73 74 72 75 63 74 75 72 65 20 73 74 6f 72 65   structure store
99b0: 73 20 61 20 64 61 74 61 62 61 73 65 20 73 63 68  s a database sch
99c0: 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74 20  ema..**.** Most 
99d0: 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 20 61  Schema objects a
99e0: 72 65 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  re associated wi
99f0: 74 68 20 61 20 42 74 72 65 65 2e 20 20 54 68 65  th a Btree.  The
9a00: 20 65 78 63 65 70 74 69 6f 6e 20 69 73 0a 2a 2a   exception is.**
9a10: 20 74 68 65 20 53 63 68 65 6d 61 20 66 6f 72 20   the Schema for 
9a20: 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61 65  the TEMP databae
9a30: 73 20 28 73 71 6c 69 74 65 33 2e 61 44 62 5b 31  s (sqlite3.aDb[1
9a40: 5d 29 20 77 68 69 63 68 20 69 73 20 66 72 65 65  ]) which is free
9a50: 2d 73 74 61 6e 64 69 6e 67 2e 0a 2a 2a 20 49 6e  -standing..** In
9a60: 20 73 68 61 72 65 64 20 63 61 63 68 65 20 6d 6f   shared cache mo
9a70: 64 65 2c 20 61 20 73 69 6e 67 6c 65 20 53 63 68  de, a single Sch
9a80: 65 6d 61 20 6f 62 6a 65 63 74 20 63 61 6e 20 62  ema object can b
9a90: 65 20 73 68 61 72 65 64 20 62 79 20 6d 75 6c 74  e shared by mult
9aa0: 69 70 6c 65 0a 2a 2a 20 42 74 72 65 65 73 20 74  iple.** Btrees t
9ab0: 68 61 74 20 72 65 66 65 72 20 74 6f 20 74 68 65  hat refer to the
9ac0: 20 73 61 6d 65 20 75 6e 64 65 72 6c 79 69 6e 67   same underlying
9ad0: 20 42 74 53 68 61 72 65 64 20 6f 62 6a 65 63 74   BtShared object
9ae0: 2e 0a 2a 2a 0a 2a 2a 20 53 63 68 65 6d 61 20 6f  ..**.** Schema o
9af0: 62 6a 65 63 74 73 20 61 72 65 20 61 75 74 6f 6d  bjects are autom
9b00: 61 74 69 63 61 6c 6c 79 20 64 65 61 6c 6c 6f 63  atically dealloc
9b10: 61 74 65 64 20 77 68 65 6e 20 74 68 65 20 6c 61  ated when the la
9b20: 73 74 20 42 74 72 65 65 20 74 68 61 74 0a 2a 2a  st Btree that.**
9b30: 20 72 65 66 65 72 65 6e 63 65 73 20 74 68 65 6d   references them
9b40: 20 69 73 20 64 65 73 74 72 6f 79 65 64 2e 20 20   is destroyed.  
9b50: 20 54 68 65 20 54 45 4d 50 20 53 63 68 65 6d 61   The TEMP Schema
9b60: 20 69 73 20 6d 61 6e 75 61 6c 6c 79 20 66 72 65   is manually fre
9b70: 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33  ed by.** sqlite3
9b80: 5f 63 6c 6f 73 65 28 29 2e 0a 2a 0a 2a 2a 20 41  _close()..*.** A
9b90: 20 74 68 72 65 61 64 20 6d 75 73 74 20 62 65 20   thread must be 
9ba0: 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65 78 20  holding a mutex 
9bb0: 6f 6e 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  on the correspon
9bc0: 64 69 6e 67 20 42 74 72 65 65 20 69 6e 20 6f 72  ding Btree in or
9bd0: 64 65 72 0a 2a 2a 20 74 6f 20 61 63 63 65 73 73  der.** to access
9be0: 20 53 63 68 65 6d 61 20 63 6f 6e 74 65 6e 74 2e   Schema content.
9bf0: 20 20 54 68 69 73 20 69 6d 70 6c 69 65 73 20 74    This implies t
9c00: 68 61 74 20 74 68 65 20 74 68 72 65 61 64 20 6d  hat the thread m
9c10: 75 73 74 20 61 6c 73 6f 20 62 65 0a 2a 2a 20 68  ust also be.** h
9c20: 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f  olding a mutex o
9c30: 6e 20 74 68 65 20 73 71 6c 69 74 65 33 20 63 6f  n the sqlite3 co
9c40: 6e 6e 65 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72  nnection pointer
9c50: 20 74 68 61 74 20 6f 77 6e 73 20 74 68 65 20 42   that owns the B
9c60: 74 72 65 65 2e 0a 2a 2a 20 46 6f 72 20 61 20 54  tree..** For a T
9c70: 45 4d 50 20 53 63 68 65 6d 61 2c 20 6f 6e 6c 79  EMP Schema, only
9c80: 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   the connection 
9c90: 6d 75 74 65 78 20 69 73 20 72 65 71 75 69 72 65  mutex is require
9ca0: 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 63 68  d..*/.struct Sch
9cb0: 65 6d 61 20 7b 0a 20 20 69 6e 74 20 73 63 68 65  ema {.  int sche
9cc0: 6d 61 5f 63 6f 6f 6b 69 65 3b 20 20 20 2f 2a 20  ma_cookie;   /* 
9cd0: 44 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  Database schema 
9ce0: 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66  version number f
9cf0: 6f 72 20 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a  or this file */.
9d00: 20 20 69 6e 74 20 69 47 65 6e 65 72 61 74 69 6f    int iGeneratio
9d10: 6e 3b 20 20 20 20 20 2f 2a 20 47 65 6e 65 72 61  n;     /* Genera
9d20: 74 69 6f 6e 20 63 6f 75 6e 74 65 72 2e 20 20 49  tion counter.  I
9d30: 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68 20  ncremented with 
9d40: 65 61 63 68 20 63 68 61 6e 67 65 20 2a 2f 0a 20  each change */. 
9d50: 20 48 61 73 68 20 74 62 6c 48 61 73 68 3b 20 20   Hash tblHash;  
9d60: 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 74 61 62        /* All tab
9d70: 6c 65 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e  les indexed by n
9d80: 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 69 64  ame */.  Hash id
9d90: 78 48 61 73 68 3b 20 20 20 20 20 20 20 20 2f 2a  xHash;        /*
9da0: 20 41 6c 6c 20 28 6e 61 6d 65 64 29 20 69 6e 64   All (named) ind
9db0: 69 63 65 73 20 69 6e 64 65 78 65 64 20 62 79 20  ices indexed by 
9dc0: 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 74  name */.  Hash t
9dd0: 72 69 67 48 61 73 68 3b 20 20 20 20 20 20 20 2f  rigHash;       /
9de0: 2a 20 41 6c 6c 20 74 72 69 67 67 65 72 73 20 69  * All triggers i
9df0: 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a  ndexed by name *
9e00: 2f 0a 20 20 48 61 73 68 20 66 6b 65 79 48 61 73  /.  Hash fkeyHas
9e10: 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  h;       /* All 
9e20: 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 62 79 20  foreign keys by 
9e30: 72 65 66 65 72 65 6e 63 65 64 20 74 61 62 6c 65  referenced table
9e40: 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 61 62 6c 65   name */.  Table
9e50: 20 2a 70 53 65 71 54 61 62 3b 20 20 20 20 20 20   *pSeqTab;      
9e60: 2f 2a 20 54 68 65 20 73 71 6c 69 74 65 5f 73 65  /* The sqlite_se
9e70: 71 75 65 6e 63 65 20 74 61 62 6c 65 20 75 73 65  quence table use
9e80: 64 20 62 79 20 41 55 54 4f 49 4e 43 52 45 4d 45  d by AUTOINCREME
9e90: 4e 54 20 2a 2f 0a 20 20 75 38 20 66 69 6c 65 5f  NT */.  u8 file_
9ea0: 66 6f 72 6d 61 74 3b 20 20 20 20 20 20 2f 2a 20  format;      /* 
9eb0: 53 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 76 65  Schema format ve
9ec0: 72 73 69 6f 6e 20 66 6f 72 20 74 68 69 73 20 66  rsion for this f
9ed0: 69 6c 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b  ile */.  u8 enc;
9ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9ef0: 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 75   Text encoding u
9f00: 73 65 64 20 62 79 20 74 68 69 73 20 64 61 74 61  sed by this data
9f10: 62 61 73 65 20 2a 2f 0a 20 20 75 31 36 20 73 63  base */.  u16 sc
9f20: 68 65 6d 61 46 6c 61 67 73 3b 20 20 20 20 20 2f  hemaFlags;     /
9f30: 2a 20 46 6c 61 67 73 20 61 73 73 6f 63 69 61 74  * Flags associat
9f40: 65 64 20 77 69 74 68 20 74 68 69 73 20 73 63 68  ed with this sch
9f50: 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 63 61 63  ema */.  int cac
9f60: 68 65 5f 73 69 7a 65 3b 20 20 20 20 20 20 2f 2a  he_size;      /*
9f70: 20 4e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   Number of pages
9f80: 20 74 6f 20 75 73 65 20 69 6e 20 74 68 65 20 63   to use in the c
9f90: 61 63 68 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ache */.};../*.*
9fa0: 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 63  * These macros c
9fb0: 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 74 65  an be used to te
9fc0: 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65 61  st, set, or clea
9fd0: 72 20 62 69 74 73 20 69 6e 20 74 68 65 0a 2a 2a  r bits in the.**
9fe0: 20 44 62 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61   Db.pSchema->fla
9ff0: 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65  gs field..*/.#de
a000: 66 69 6e 65 20 44 62 48 61 73 50 72 6f 70 65 72  fine DbHasProper
a010: 74 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28 28  ty(D,I,P)     ((
a020: 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68  (D)->aDb[I].pSch
a030: 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73  ema->schemaFlags
a040: 26 28 50 29 29 3d 3d 28 50 29 29 0a 23 64 65 66  &(P))==(P)).#def
a050: 69 6e 65 20 44 62 48 61 73 41 6e 79 50 72 6f 70  ine DbHasAnyProp
a060: 65 72 74 79 28 44 2c 49 2c 50 29 20 20 28 28 28  erty(D,I,P)  (((
a070: 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65  D)->aDb[I].pSche
a080: 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 26  ma->schemaFlags&
a090: 28 50 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65  (P))!=0).#define
a0a0: 20 44 62 53 65 74 50 72 6f 70 65 72 74 79 28 44   DbSetProperty(D
a0b0: 2c 49 2c 50 29 20 20 20 20 20 28 44 29 2d 3e 61  ,I,P)     (D)->a
a0c0: 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73  Db[I].pSchema->s
a0d0: 63 68 65 6d 61 46 6c 61 67 73 7c 3d 28 50 29 0a  chemaFlags|=(P).
a0e0: 23 64 65 66 69 6e 65 20 44 62 43 6c 65 61 72 50  #define DbClearP
a0f0: 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20  roperty(D,I,P)  
a100: 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63   (D)->aDb[I].pSc
a110: 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67  hema->schemaFlag
a120: 73 26 3d 7e 28 50 29 0a 0a 2f 2a 0a 2a 2a 20 41  s&=~(P)../*.** A
a130: 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f  llowed values fo
a140: 72 20 74 68 65 20 44 42 2e 70 53 63 68 65 6d 61  r the DB.pSchema
a150: 2d 3e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a  ->flags field..*
a160: 2a 0a 2a 2a 20 54 68 65 20 44 42 5f 53 63 68 65  *.** The DB_Sche
a170: 6d 61 4c 6f 61 64 65 64 20 66 6c 61 67 20 69 73  maLoaded flag is
a180: 20 73 65 74 20 61 66 74 65 72 20 74 68 65 20 64   set after the d
a190: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 68  atabase schema h
a1a0: 61 73 20 62 65 65 6e 0a 2a 2a 20 72 65 61 64 20  as been.** read 
a1b0: 69 6e 74 6f 20 69 6e 74 65 72 6e 61 6c 20 68 61  into internal ha
a1c0: 73 68 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a  sh tables..**.**
a1d0: 20 44 42 5f 55 6e 72 65 73 65 74 56 69 65 77 73   DB_UnresetViews
a1e0: 20 6d 65 61 6e 73 20 74 68 61 74 20 6f 6e 65 20   means that one 
a1f0: 6f 72 20 6d 6f 72 65 20 76 69 65 77 73 20 68 61  or more views ha
a200: 76 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  ve column names 
a210: 74 68 61 74 0a 2a 2a 20 68 61 76 65 20 62 65 65  that.** have bee
a220: 6e 20 66 69 6c 6c 65 64 20 6f 75 74 2e 20 20 49  n filled out.  I
a230: 66 20 74 68 65 20 73 63 68 65 6d 61 20 63 68 61  f the schema cha
a240: 6e 67 65 73 2c 20 74 68 65 73 65 20 63 6f 6c 75  nges, these colu
a250: 6d 6e 20 6e 61 6d 65 73 20 6d 69 67 68 74 0a 2a  mn names might.*
a260: 2a 20 63 68 61 6e 67 65 73 20 61 6e 64 20 73 6f  * changes and so
a270: 20 74 68 65 20 76 69 65 77 20 77 69 6c 6c 20 6e   the view will n
a280: 65 65 64 20 74 6f 20 62 65 20 72 65 73 65 74 2e  eed to be reset.
a290: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 53  .*/.#define DB_S
a2a0: 63 68 65 6d 61 4c 6f 61 64 65 64 20 20 20 20 30  chemaLoaded    0
a2b0: 78 30 30 30 31 20 20 2f 2a 20 54 68 65 20 73 63  x0001  /* The sc
a2c0: 68 65 6d 61 20 68 61 73 20 62 65 65 6e 20 6c 6f  hema has been lo
a2d0: 61 64 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  aded */.#define 
a2e0: 44 42 5f 55 6e 72 65 73 65 74 56 69 65 77 73 20  DB_UnresetViews 
a2f0: 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20 53 6f     0x0002  /* So
a300: 6d 65 20 76 69 65 77 73 20 68 61 76 65 20 64 65  me views have de
a310: 66 69 6e 65 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d  fined column nam
a320: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42  es */.#define DB
a330: 5f 45 6d 70 74 79 20 20 20 20 20 20 20 20 20 20  _Empty          
a340: 20 30 78 30 30 30 34 20 20 2f 2a 20 54 68 65 20   0x0004  /* The 
a350: 66 69 6c 65 20 69 73 20 65 6d 70 74 79 20 28 6c  file is empty (l
a360: 65 6e 67 74 68 20 30 20 62 79 74 65 73 29 20 2a  ength 0 bytes) *
a370: 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 52 65 73  /.#define DB_Res
a380: 65 74 57 61 6e 74 65 64 20 20 20 20 20 30 78 30  etWanted     0x0
a390: 30 30 38 20 20 2f 2a 20 52 65 73 65 74 20 74 68  008  /* Reset th
a3a0: 65 20 73 63 68 65 6d 61 20 77 68 65 6e 20 6e 53  e schema when nS
a3b0: 63 68 65 6d 61 4c 6f 63 6b 3d 3d 30 20 2a 2f 0a  chemaLock==0 */.
a3c0: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65  ./*.** The numbe
a3d0: 72 20 6f 66 20 64 69 66 66 65 72 65 6e 74 20 6b  r of different k
a3e0: 69 6e 64 73 20 6f 66 20 74 68 69 6e 67 73 20 74  inds of things t
a3f0: 68 61 74 20 63 61 6e 20 62 65 20 6c 69 6d 69 74  hat can be limit
a400: 65 64 0a 2a 2a 20 75 73 69 6e 67 20 74 68 65 20  ed.** using the 
a410: 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 29 20  sqlite3_limit() 
a420: 69 6e 74 65 72 66 61 63 65 2e 0a 2a 2f 0a 23 64  interface..*/.#d
a430: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 4c  efine SQLITE_N_L
a440: 49 4d 49 54 20 28 53 51 4c 49 54 45 5f 4c 49 4d  IMIT (SQLITE_LIM
a450: 49 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  IT_WORKER_THREAD
a460: 53 2b 31 29 0a 0a 2f 2a 0a 2a 2a 20 4c 6f 6f 6b  S+1)../*.** Look
a470: 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 69 73 20  aside malloc is 
a480: 61 20 73 65 74 20 6f 66 20 66 69 78 65 64 2d 73  a set of fixed-s
a490: 69 7a 65 20 62 75 66 66 65 72 73 20 74 68 61 74  ize buffers that
a4a0: 20 63 61 6e 20 62 65 20 75 73 65 64 0a 2a 2a 20   can be used.** 
a4b0: 74 6f 20 73 61 74 69 73 66 79 20 73 6d 61 6c 6c  to satisfy small
a4c0: 20 74 72 61 6e 73 69 65 6e 74 20 6d 65 6d 6f 72   transient memor
a4d0: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 72 65 71  y allocation req
a4e0: 75 65 73 74 73 20 66 6f 72 20 6f 62 6a 65 63 74  uests for object
a4f0: 73 0a 2a 2a 20 61 73 73 6f 63 69 61 74 65 64 20  s.** associated 
a500: 77 69 74 68 20 61 20 70 61 72 74 69 63 75 6c 61  with a particula
a510: 72 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  r database conne
a520: 63 74 69 6f 6e 2e 20 20 54 68 65 20 75 73 65 20  ction.  The use 
a530: 6f 66 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20  of.** lookaside 
a540: 6d 61 6c 6c 6f 63 20 70 72 6f 76 69 64 65 73 20  malloc provides 
a550: 61 20 73 69 67 6e 69 66 69 63 61 6e 74 20 70 65  a significant pe
a560: 72 66 6f 72 6d 61 6e 63 65 20 65 6e 68 61 6e 63  rformance enhanc
a570: 65 6d 65 6e 74 0a 2a 2a 20 28 61 70 70 72 6f 78  ement.** (approx
a580: 20 31 30 25 29 20 62 79 20 61 76 6f 69 64 69 6e   10%) by avoidin
a590: 67 20 6e 75 6d 65 72 6f 75 73 20 6d 61 6c 6c 6f  g numerous mallo
a5a0: 63 2f 66 72 65 65 20 72 65 71 75 65 73 74 73 20  c/free requests 
a5b0: 77 68 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a  while parsing.**
a5c0: 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 2e   SQL statements.
a5d0: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f 6f 6b 61  .**.** The Looka
a5e0: 73 69 64 65 20 73 74 72 75 63 74 75 72 65 20 68  side structure h
a5f0: 6f 6c 64 73 20 63 6f 6e 66 69 67 75 72 61 74 69  olds configurati
a600: 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  on information a
a610: 62 6f 75 74 20 74 68 65 0a 2a 2a 20 6c 6f 6f 6b  bout the.** look
a620: 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 73 75 62  aside malloc sub
a630: 73 79 73 74 65 6d 2e 20 20 45 61 63 68 20 61 76  system.  Each av
a640: 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20 61  ailable memory a
a650: 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 0a 2a 2a 20  llocation in.** 
a660: 74 68 65 20 6c 6f 6f 6b 61 73 69 64 65 20 73 75  the lookaside su
a670: 62 73 79 73 74 65 6d 20 69 73 20 73 74 6f 72 65  bsystem is store
a680: 64 20 6f 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69  d on a linked li
a690: 73 74 20 6f 66 20 4c 6f 6f 6b 61 73 69 64 65 53  st of LookasideS
a6a0: 6c 6f 74 0a 2a 2a 20 6f 62 6a 65 63 74 73 2e 0a  lot.** objects..
a6b0: 2a 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20  **.** Lookaside 
a6c0: 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20  allocations are 
a6d0: 6f 6e 6c 79 20 61 6c 6c 6f 77 65 64 20 66 6f 72  only allowed for
a6e0: 20 6f 62 6a 65 63 74 73 20 74 68 61 74 20 61 72   objects that ar
a6f0: 65 20 61 73 73 6f 63 69 61 74 65 64 0a 2a 2a 20  e associated.** 
a700: 77 69 74 68 20 61 20 70 61 72 74 69 63 75 6c 61  with a particula
a710: 72 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  r database conne
a720: 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65 2c 20 73  ction.  Hence, s
a730: 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f  chema informatio
a740: 6e 20 63 61 6e 6e 6f 74 0a 2a 2a 20 62 65 20 73  n cannot.** be s
a750: 74 6f 72 65 64 20 69 6e 20 6c 6f 6f 6b 61 73 69  tored in lookasi
a760: 64 65 20 62 65 63 61 75 73 65 20 69 6e 20 73 68  de because in sh
a770: 61 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65 20  ared cache mode 
a780: 74 68 65 20 73 63 68 65 6d 61 20 69 6e 66 6f 72  the schema infor
a790: 6d 61 74 69 6f 6e 0a 2a 2a 20 69 73 20 73 68 61  mation.** is sha
a7a0: 72 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65 20  red by multiple 
a7b0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
a7c0: 69 6f 6e 73 2e 20 20 54 68 65 72 65 66 6f 72 65  ions.  Therefore
a7d0: 2c 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67 0a  , while parsing.
a7e0: 2a 2a 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d  ** schema inform
a7f0: 61 74 69 6f 6e 2c 20 74 68 65 20 4c 6f 6f 6b 61  ation, the Looka
a800: 73 69 64 65 2e 62 45 6e 61 62 6c 65 64 20 66 6c  side.bEnabled fl
a810: 61 67 20 69 73 20 63 6c 65 61 72 65 64 20 73 6f  ag is cleared so
a820: 20 74 68 61 74 0a 2a 2a 20 6c 6f 6f 6b 61 73 69   that.** lookasi
a830: 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61  de allocations a
a840: 72 65 20 6e 6f 74 20 75 73 65 64 20 74 6f 20 63  re not used to c
a850: 6f 6e 73 74 72 75 63 74 20 74 68 65 20 73 63 68  onstruct the sch
a860: 65 6d 61 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a  ema objects..*/.
a870: 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65  struct Lookaside
a880: 20 7b 0a 20 20 75 33 32 20 62 44 69 73 61 62 6c   {.  u32 bDisabl
a890: 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  e;           /* 
a8a0: 4f 6e 6c 79 20 6f 70 65 72 61 74 65 20 74 68 65  Only operate the
a8b0: 20 6c 6f 6f 6b 61 73 69 64 65 20 77 68 65 6e 20   lookaside when 
a8c0: 7a 65 72 6f 20 2a 2f 0a 20 20 75 31 36 20 73 7a  zero */.  u16 sz
a8d0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
a8e0: 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63    /* Size of eac
a8f0: 68 20 62 75 66 66 65 72 20 69 6e 20 62 79 74 65  h buffer in byte
a900: 73 20 2a 2f 0a 20 20 75 38 20 62 4d 61 6c 6c 6f  s */.  u8 bMallo
a910: 63 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ced;           /
a920: 2a 20 54 72 75 65 20 69 66 20 70 53 74 61 72 74  * True if pStart
a930: 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 73   obtained from s
a940: 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20  qlite3_malloc() 
a950: 2a 2f 0a 20 20 75 33 32 20 6e 53 6c 6f 74 3b 20  */.  u32 nSlot; 
a960: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a970: 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 6f 6b 61 73  Number of lookas
a980: 69 64 65 20 73 6c 6f 74 73 20 61 6c 6c 6f 63 61  ide slots alloca
a990: 74 65 64 20 2a 2f 0a 20 20 75 33 32 20 61 6e 53  ted */.  u32 anS
a9a0: 74 61 74 5b 33 5d 3b 20 20 20 20 20 20 20 20 20  tat[3];         
a9b0: 20 2f 2a 20 30 3a 20 68 69 74 73 2e 20 20 31 3a   /* 0: hits.  1:
a9c0: 20 73 69 7a 65 20 6d 69 73 73 65 73 2e 20 20 32   size misses.  2
a9d0: 3a 20 66 75 6c 6c 20 6d 69 73 73 65 73 20 2a 2f  : full misses */
a9e0: 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74  .  LookasideSlot
a9f0: 20 2a 70 49 6e 69 74 3b 20 20 20 2f 2a 20 4c 69   *pInit;   /* Li
aa00: 73 74 20 6f 66 20 62 75 66 66 65 72 73 20 6e 6f  st of buffers no
aa10: 74 20 70 72 65 76 69 6f 75 73 6c 79 20 75 73 65  t previously use
aa20: 64 20 2a 2f 0a 20 20 4c 6f 6f 6b 61 73 69 64 65  d */.  Lookaside
aa30: 53 6c 6f 74 20 2a 70 46 72 65 65 3b 20 20 20 2f  Slot *pFree;   /
aa40: 2a 20 4c 69 73 74 20 6f 66 20 61 76 61 69 6c 61  * List of availa
aa50: 62 6c 65 20 62 75 66 66 65 72 73 20 2a 2f 0a 20  ble buffers */. 
aa60: 20 76 6f 69 64 20 2a 70 53 74 61 72 74 3b 20 20   void *pStart;  
aa70: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
aa80: 74 20 62 79 74 65 20 6f 66 20 61 76 61 69 6c 61  t byte of availa
aa90: 62 6c 65 20 6d 65 6d 6f 72 79 20 73 70 61 63 65  ble memory space
aaa0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 45 6e 64   */.  void *pEnd
aab0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
aac0: 20 46 69 72 73 74 20 62 79 74 65 20 70 61 73 74   First byte past
aad0: 20 65 6e 64 20 6f 66 20 61 76 61 69 6c 61 62 6c   end of availabl
aae0: 65 20 73 70 61 63 65 20 2a 2f 0a 7d 3b 0a 73 74  e space */.};.st
aaf0: 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c  ruct LookasideSl
ab00: 6f 74 20 7b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65  ot {.  Lookaside
ab10: 53 6c 6f 74 20 2a 70 4e 65 78 74 3b 20 20 20 20  Slot *pNext;    
ab20: 2f 2a 20 4e 65 78 74 20 62 75 66 66 65 72 20 69  /* Next buffer i
ab30: 6e 20 74 68 65 20 6c 69 73 74 20 6f 66 20 66 72  n the list of fr
ab40: 65 65 20 62 75 66 66 65 72 73 20 2a 2f 0a 7d 3b  ee buffers */.};
ab50: 0a 0a 2f 2a 0a 2a 2a 20 41 20 68 61 73 68 20 74  ../*.** A hash t
ab60: 61 62 6c 65 20 66 6f 72 20 62 75 69 6c 74 2d 69  able for built-i
ab70: 6e 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e  n function defin
ab80: 69 74 69 6f 6e 73 2e 20 20 28 41 70 70 6c 69 63  itions.  (Applic
ab90: 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64 0a 2a 2a  ation-defined.**
aba0: 20 66 75 6e 63 74 69 6f 6e 73 20 75 73 65 20 61   functions use a
abb0: 20 72 65 67 75 6c 61 72 20 74 61 62 6c 65 20 74   regular table t
abc0: 61 62 6c 65 20 66 72 6f 6d 20 68 61 73 68 2e 68  able from hash.h
abd0: 2e 29 0a 2a 2a 0a 2a 2a 20 48 61 73 68 20 65 61  .).**.** Hash ea
abe0: 63 68 20 46 75 6e 63 44 65 66 20 73 74 72 75 63  ch FuncDef struc
abf0: 74 75 72 65 20 69 6e 74 6f 20 6f 6e 65 20 6f 66  ture into one of
ac00: 20 74 68 65 20 46 75 6e 63 44 65 66 48 61 73 68   the FuncDefHash
ac10: 2e 61 5b 5d 20 73 6c 6f 74 73 2e 0a 2a 2a 20 43  .a[] slots..** C
ac20: 6f 6c 6c 69 73 69 6f 6e 73 20 61 72 65 20 6f 6e  ollisions are on
ac30: 20 74 68 65 20 46 75 6e 63 44 65 66 2e 75 2e 70   the FuncDef.u.p
ac40: 48 61 73 68 20 63 68 61 69 6e 2e 0a 2a 2f 0a 23  Hash chain..*/.#
ac50: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
ac60: 4e 43 5f 48 41 53 48 5f 53 5a 20 32 33 0a 73 74  NC_HASH_SZ 23.st
ac70: 72 75 63 74 20 46 75 6e 63 44 65 66 48 61 73 68  ruct FuncDefHash
ac80: 20 7b 0a 20 20 46 75 6e 63 44 65 66 20 2a 61 5b   {.  FuncDef *a[
ac90: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48  SQLITE_FUNC_HASH
aca0: 5f 53 5a 5d 3b 20 20 20 20 20 20 20 2f 2a 20 48  _SZ];       /* H
acb0: 61 73 68 20 74 61 62 6c 65 20 66 6f 72 20 66 75  ash table for fu
acc0: 6e 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a 23  nctions */.};..#
acd0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45  ifdef SQLITE_USE
ace0: 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e  R_AUTHENTICATION
acf0: 0a 2f 2a 0a 2a 2a 20 49 6e 66 6f 72 6d 61 74 69  ./*.** Informati
ad00: 6f 6e 20 68 65 6c 64 20 69 6e 20 74 68 65 20 22  on held in the "
ad10: 73 71 6c 69 74 65 33 22 20 64 61 74 61 62 61 73  sqlite3" databas
ad20: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a  e connection obj
ad30: 65 63 74 20 61 6e 64 20 75 73 65 64 0a 2a 2a 20  ect and used.** 
ad40: 74 6f 20 6d 61 6e 61 67 65 20 75 73 65 72 20 61  to manage user a
ad50: 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 2e 0a 2a  uthentication..*
ad60: 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  /.typedef struct
ad70: 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74   sqlite3_useraut
ad80: 68 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75  h sqlite3_userau
ad90: 74 68 3b 0a 73 74 72 75 63 74 20 73 71 6c 69 74  th;.struct sqlit
ada0: 65 33 5f 75 73 65 72 61 75 74 68 20 7b 0a 20 20  e3_userauth {.  
adb0: 75 38 20 61 75 74 68 4c 65 76 65 6c 3b 20 20 20  u8 authLevel;   
adc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
add0: 20 43 75 72 72 65 6e 74 20 61 75 74 68 65 6e 74   Current authent
ade0: 69 63 61 74 69 6f 6e 20 6c 65 76 65 6c 20 2a 2f  ication level */
adf0: 0a 20 20 69 6e 74 20 6e 41 75 74 68 50 57 3b 20  .  int nAuthPW; 
ae00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ae10: 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20   /* Size of the 
ae20: 7a 41 75 74 68 50 57 20 69 6e 20 62 79 74 65 73  zAuthPW in bytes
ae30: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 75 74   */.  char *zAut
ae40: 68 50 57 3b 20 20 20 20 20 20 20 20 20 20 20 20  hPW;            
ae50: 20 20 20 20 2f 2a 20 50 61 73 73 77 6f 72 64 20      /* Password 
ae60: 75 73 65 64 20 74 6f 20 61 75 74 68 65 6e 74 69  used to authenti
ae70: 63 61 74 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a  cate */.  char *
ae80: 7a 41 75 74 68 55 73 65 72 3b 20 20 20 20 20 20  zAuthUser;      
ae90: 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 72 20          /* User 
aea0: 6e 61 6d 65 20 75 73 65 64 20 74 6f 20 61 75 74  name used to aut
aeb0: 68 65 6e 74 69 63 61 74 65 20 2a 2f 0a 7d 3b 0a  henticate */.};.
aec0: 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  ./* Allowed valu
aed0: 65 73 20 66 6f 72 20 73 71 6c 69 74 65 33 5f 75  es for sqlite3_u
aee0: 73 65 72 61 75 74 68 2e 61 75 74 68 4c 65 76 65  serauth.authLeve
aef0: 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55  l */.#define UAU
af00: 54 48 5f 55 6e 6b 6e 6f 77 6e 20 20 20 20 20 30  TH_Unknown     0
af10: 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74 69       /* Authenti
af20: 63 61 74 69 6f 6e 20 6e 6f 74 20 79 65 74 20 63  cation not yet c
af30: 68 65 63 6b 65 64 20 2a 2f 0a 23 64 65 66 69 6e  hecked */.#defin
af40: 65 20 55 41 55 54 48 5f 46 61 69 6c 20 20 20 20  e UAUTH_Fail    
af50: 20 20 20 20 31 20 20 20 20 20 2f 2a 20 55 73 65      1     /* Use
af60: 72 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e  r authentication
af70: 20 66 61 69 6c 65 64 20 2a 2f 0a 23 64 65 66 69   failed */.#defi
af80: 6e 65 20 55 41 55 54 48 5f 55 73 65 72 20 20 20  ne UAUTH_User   
af90: 20 20 20 20 20 32 20 20 20 20 20 2f 2a 20 41 75       2     /* Au
afa0: 74 68 65 6e 74 69 63 61 74 65 64 20 61 73 20 61  thenticated as a
afb0: 20 6e 6f 72 6d 61 6c 20 75 73 65 72 20 2a 2f 0a   normal user */.
afc0: 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 41 64  #define UAUTH_Ad
afd0: 6d 69 6e 20 20 20 20 20 20 20 33 20 20 20 20 20  min       3     
afe0: 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74 65 64  /* Authenticated
aff0: 20 61 73 20 61 6e 20 61 64 6d 69 6e 69 73 74 72   as an administr
b000: 61 74 6f 72 20 2a 2f 0a 0a 2f 2a 20 46 75 6e 63  ator */../* Func
b010: 74 69 6f 6e 73 20 75 73 65 64 20 6f 6e 6c 79 20  tions used only 
b020: 62 79 20 75 73 65 72 20 61 75 74 68 6f 72 69 7a  by user authoriz
b030: 61 74 69 6f 6e 20 6c 6f 67 69 63 20 2a 2f 0a 69  ation logic */.i
b040: 6e 74 20 73 71 6c 69 74 65 33 55 73 65 72 41 75  nt sqlite3UserAu
b050: 74 68 54 61 62 6c 65 28 63 6f 6e 73 74 20 63 68  thTable(const ch
b060: 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ar*);.int sqlite
b070: 33 55 73 65 72 41 75 74 68 43 68 65 63 6b 4c 6f  3UserAuthCheckLo
b080: 67 69 6e 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  gin(sqlite3*,con
b090: 73 74 20 63 68 61 72 2a 2c 75 38 2a 29 3b 0a 76  st char*,u8*);.v
b0a0: 6f 69 64 20 73 71 6c 69 74 65 33 55 73 65 72 41  oid sqlite3UserA
b0b0: 75 74 68 49 6e 69 74 28 73 71 6c 69 74 65 33 2a  uthInit(sqlite3*
b0c0: 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
b0d0: 72 79 70 74 46 75 6e 63 28 73 71 6c 69 74 65 33  ryptFunc(sqlite3
b0e0: 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
b0f0: 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a  lite3_value**);.
b100: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
b110: 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43  E_USER_AUTHENTIC
b120: 41 54 49 4f 4e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  ATION */../*.** 
b130: 74 79 70 65 64 65 66 20 66 6f 72 20 74 68 65 20  typedef for the 
b140: 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 63 61  authorization ca
b150: 6c 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e 2e  llback function.
b160: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
b170: 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43  E_USER_AUTHENTIC
b180: 41 54 49 4f 4e 0a 20 20 74 79 70 65 64 65 66 20  ATION.  typedef 
b190: 69 6e 74 20 28 2a 73 71 6c 69 74 65 33 5f 78 61  int (*sqlite3_xa
b1a0: 75 74 68 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63  uth)(void*,int,c
b1b0: 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
b1c0: 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
b1d0: 72 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  r*,.            
b1e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b1f0: 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20     const char*, 
b200: 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65  const char*);.#e
b210: 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20 69 6e  lse.  typedef in
b220: 74 20 28 2a 73 71 6c 69 74 65 33 5f 78 61 75 74  t (*sqlite3_xaut
b230: 68 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e  h)(void*,int,con
b240: 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
b250: 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
b260: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
b270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b280: 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23   const char*);.#
b290: 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53  endif..#ifndef S
b2a0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45  QLITE_OMIT_DEPRE
b2b0: 43 41 54 45 44 0a 2f 2a 20 54 68 69 73 20 69 73  CATED./* This is
b2c0: 20 61 6e 20 65 78 74 72 61 20 53 51 4c 49 54 45   an extra SQLITE
b2d0: 5f 54 52 41 43 45 20 6d 61 63 72 6f 20 74 68 61  _TRACE macro tha
b2e0: 74 20 69 6e 64 69 63 61 74 65 73 20 22 6c 65 67  t indicates "leg
b2f0: 61 63 79 22 20 74 72 61 63 69 6e 67 0a 2a 2a 20  acy" tracing.** 
b300: 69 6e 20 74 68 65 20 73 74 79 6c 65 20 6f 66 20  in the style of 
b310: 73 71 6c 69 74 65 33 5f 74 72 61 63 65 28 29 0a  sqlite3_trace().
b320: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
b330: 45 5f 54 52 41 43 45 5f 4c 45 47 41 43 59 20 20  E_TRACE_LEGACY  
b340: 30 78 38 30 0a 23 65 6c 73 65 0a 23 64 65 66 69  0x80.#else.#defi
b350: 6e 65 20 53 51 4c 49 54 45 5f 54 52 41 43 45 5f  ne SQLITE_TRACE_
b360: 4c 45 47 41 43 59 20 20 30 0a 23 65 6e 64 69 66  LEGACY  0.#endif
b370: 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
b380: 44 45 50 52 45 43 41 54 45 44 20 2a 2f 0a 0a 0a  DEPRECATED */...
b390: 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62  /*.** Each datab
b3a0: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69  ase connection i
b3b0: 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
b3c0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
b3d0: 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72  tructure..*/.str
b3e0: 75 63 74 20 73 71 6c 69 74 65 33 20 7b 0a 20 20  uct sqlite3 {.  
b3f0: 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 70 56 66  sqlite3_vfs *pVf
b400: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  s;            /*
b410: 20 4f 53 20 49 6e 74 65 72 66 61 63 65 20 2a 2f   OS Interface */
b420: 0a 20 20 73 74 72 75 63 74 20 56 64 62 65 20 2a  .  struct Vdbe *
b430: 70 56 64 62 65 3b 20 20 20 20 20 20 20 20 20 20  pVdbe;          
b440: 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63 74 69   /* List of acti
b450: 76 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69  ve virtual machi
b460: 6e 65 73 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71  nes */.  CollSeq
b470: 20 2a 70 44 66 6c 74 43 6f 6c 6c 3b 20 20 20 20   *pDfltColl;    
b480: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65         /* The de
b490: 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20  fault collating 
b4a0: 73 65 71 75 65 6e 63 65 20 28 42 49 4e 41 52 59  sequence (BINARY
b4b0: 29 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d  ) */.  sqlite3_m
b4c0: 75 74 65 78 20 2a 6d 75 74 65 78 3b 20 20 20 20  utex *mutex;    
b4d0: 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69       /* Connecti
b4e0: 6f 6e 20 6d 75 74 65 78 20 2a 2f 0a 20 20 44 62  on mutex */.  Db
b4f0: 20 2a 61 44 62 3b 20 20 20 20 20 20 20 20 20 20   *aDb;          
b500: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
b510: 6c 6c 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20  ll backends */. 
b520: 20 69 6e 74 20 6e 44 62 3b 20 20 20 20 20 20 20   int nDb;       
b530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b540: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 61 63 6b  * Number of back
b550: 65 6e 64 73 20 63 75 72 72 65 6e 74 6c 79 20 69  ends currently i
b560: 6e 20 75 73 65 20 2a 2f 0a 20 20 75 33 32 20 6d  n use */.  u32 m
b570: 44 62 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20  DbFlags;        
b580: 20 20 20 20 20 20 20 20 20 2f 2a 20 66 6c 61 67           /* flag
b590: 73 20 72 65 63 6f 72 64 69 6e 67 20 69 6e 74 65  s recording inte
b5a0: 72 6e 61 6c 20 73 74 61 74 65 20 2a 2f 0a 20 20  rnal state */.  
b5b0: 75 33 32 20 66 6c 61 67 73 3b 20 20 20 20 20 20  u32 flags;      
b5c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b5d0: 20 66 6c 61 67 73 20 73 65 74 74 61 62 6c 65 20   flags settable 
b5e0: 62 79 20 70 72 61 67 6d 61 73 2e 20 53 65 65 20  by pragmas. See 
b5f0: 62 65 6c 6f 77 20 2a 2f 0a 20 20 69 36 34 20 6c  below */.  i64 l
b600: 61 73 74 52 6f 77 69 64 3b 20 20 20 20 20 20 20  astRowid;       
b610: 20 20 20 20 20 20 20 20 20 2f 2a 20 52 4f 57 49           /* ROWI
b620: 44 20 6f 66 20 6d 6f 73 74 20 72 65 63 65 6e 74  D of most recent
b630: 20 69 6e 73 65 72 74 20 28 73 65 65 20 61 62 6f   insert (see abo
b640: 76 65 29 20 2a 2f 0a 20 20 69 36 34 20 73 7a 4d  ve) */.  i64 szM
b650: 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20  map;            
b660: 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c         /* Defaul
b670: 74 20 6d 6d 61 70 5f 73 69 7a 65 20 73 65 74 74  t mmap_size sett
b680: 69 6e 67 20 2a 2f 0a 20 20 75 33 32 20 6e 53 63  ing */.  u32 nSc
b690: 68 65 6d 61 4c 6f 63 6b 3b 20 20 20 20 20 20 20  hemaLock;       
b6a0: 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74         /* Do not
b6b0: 20 72 65 73 65 74 20 74 68 65 20 73 63 68 65 6d   reset the schem
b6c0: 61 20 77 68 65 6e 20 6e 6f 6e 2d 7a 65 72 6f 20  a when non-zero 
b6d0: 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e  */.  unsigned in
b6e0: 74 20 6f 70 65 6e 46 6c 61 67 73 3b 20 20 20 20  t openFlags;    
b6f0: 20 20 20 2f 2a 20 46 6c 61 67 73 20 70 61 73 73     /* Flags pass
b700: 65 64 20 74 6f 20 73 71 6c 69 74 65 33 5f 76 66  ed to sqlite3_vf
b710: 73 2e 78 4f 70 65 6e 28 29 20 2a 2f 0a 20 20 69  s.xOpen() */.  i
b720: 6e 74 20 65 72 72 43 6f 64 65 3b 20 20 20 20 20  nt errCode;     
b730: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b740: 4d 6f 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f  Most recent erro
b750: 72 20 63 6f 64 65 20 28 53 51 4c 49 54 45 5f 2a  r code (SQLITE_*
b760: 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 4d 61  ) */.  int errMa
b770: 73 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  sk;             
b780: 20 20 20 20 20 2f 2a 20 26 20 72 65 73 75 6c 74       /* & result
b790: 20 63 6f 64 65 73 20 77 69 74 68 20 74 68 69 73   codes with this
b7a0: 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e   before returnin
b7b0: 67 20 2a 2f 0a 20 20 69 6e 74 20 69 53 79 73 45  g */.  int iSysE
b7c0: 72 72 6e 6f 3b 20 20 20 20 20 20 20 20 20 20 20  rrno;           
b7d0: 20 20 20 20 20 2f 2a 20 45 72 72 6e 6f 20 76 61       /* Errno va
b7e0: 6c 75 65 20 66 72 6f 6d 20 6c 61 73 74 20 73 79  lue from last sy
b7f0: 73 74 65 6d 20 65 72 72 6f 72 20 2a 2f 0a 20 20  stem error */.  
b800: 75 31 36 20 64 62 4f 70 74 46 6c 61 67 73 3b 20  u16 dbOptFlags; 
b810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b820: 20 46 6c 61 67 73 20 74 6f 20 65 6e 61 62 6c 65   Flags to enable
b830: 2f 64 69 73 61 62 6c 65 20 6f 70 74 69 6d 69 7a  /disable optimiz
b840: 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 65  ations */.  u8 e
b850: 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nc;             
b860: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
b870: 74 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20  t encoding */.  
b880: 75 38 20 61 75 74 6f 43 6f 6d 6d 69 74 3b 20 20  u8 autoCommit;  
b890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b8a0: 20 54 68 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74   The auto-commit
b8b0: 20 66 6c 61 67 2e 20 2a 2f 0a 20 20 75 38 20 74   flag. */.  u8 t
b8c0: 65 6d 70 5f 73 74 6f 72 65 3b 20 20 20 20 20 20  emp_store;      
b8d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 3a 20            /* 1: 
b8e0: 66 69 6c 65 20 32 3a 20 6d 65 6d 6f 72 79 20 30  file 2: memory 0
b8f0: 3a 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75  : default */.  u
b900: 38 20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3b 20  8 mallocFailed; 
b910: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b920: 54 72 75 65 20 69 66 20 77 65 20 68 61 76 65 20  True if we have 
b930: 73 65 65 6e 20 61 20 6d 61 6c 6c 6f 63 20 66 61  seen a malloc fa
b940: 69 6c 75 72 65 20 2a 2f 0a 20 20 75 38 20 62 42  ilure */.  u8 bB
b950: 65 6e 69 67 6e 4d 61 6c 6c 6f 63 3b 20 20 20 20  enignMalloc;    
b960: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e           /* Do n
b970: 6f 74 20 72 65 71 75 69 72 65 20 4f 4f 4d 73 20  ot require OOMs 
b980: 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 38 20  if true */.  u8 
b990: 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65 3b 20 20 20  dfltLockMode;   
b9a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65             /* De
b9b0: 66 61 75 6c 74 20 6c 6f 63 6b 69 6e 67 2d 6d 6f  fault locking-mo
b9c0: 64 65 20 66 6f 72 20 61 74 74 61 63 68 65 64 20  de for attached 
b9d0: 64 62 73 20 2a 2f 0a 20 20 73 69 67 6e 65 64 20  dbs */.  signed 
b9e0: 63 68 61 72 20 6e 65 78 74 41 75 74 6f 76 61 63  char nextAutovac
b9f0: 3b 20 20 20 20 20 20 2f 2a 20 41 75 74 6f 76 61  ;      /* Autova
ba00: 63 20 73 65 74 74 69 6e 67 20 61 66 74 65 72 20  c setting after 
ba10: 56 41 43 55 55 4d 20 69 66 20 3e 3d 30 20 2a 2f  VACUUM if >=0 */
ba20: 0a 20 20 75 38 20 73 75 70 70 72 65 73 73 45 72  .  u8 suppressEr
ba30: 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
ba40: 20 2f 2a 20 44 6f 20 6e 6f 74 20 69 73 73 75 65   /* Do not issue
ba50: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20   error messages 
ba60: 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 38 20  if true */.  u8 
ba70: 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 20  vtabOnConflict; 
ba80: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61             /* Va
ba90: 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20 66 6f  lue to return fo
baa0: 72 20 73 33 5f 76 74 61 62 5f 6f 6e 5f 63 6f 6e  r s3_vtab_on_con
bab0: 66 6c 69 63 74 28 29 20 2a 2f 0a 20 20 75 38 20  flict() */.  u8 
bac0: 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76  isTransactionSav
bad0: 65 70 6f 69 6e 74 3b 20 20 20 20 2f 2a 20 54 72  epoint;    /* Tr
bae0: 75 65 20 69 66 20 74 68 65 20 6f 75 74 65 72 6d  ue if the outerm
baf0: 6f 73 74 20 73 61 76 65 70 6f 69 6e 74 20 69 73  ost savepoint is
bb00: 20 61 20 54 53 20 2a 2f 0a 20 20 75 38 20 6d 54   a TS */.  u8 mT
bb10: 72 61 63 65 3b 20 20 20 20 20 20 20 20 20 20 20  race;           
bb20: 20 20 20 20 20 20 20 20 20 2f 2a 20 7a 65 72 6f           /* zero
bb30: 20 6f 72 20 6d 6f 72 65 20 53 51 4c 49 54 45 5f   or more SQLITE_
bb40: 54 52 41 43 45 20 66 6c 61 67 73 20 2a 2f 0a 20  TRACE flags */. 
bb50: 20 75 38 20 73 6b 69 70 42 74 72 65 65 4d 75 74   u8 skipBtreeMut
bb60: 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ex;            /
bb70: 2a 20 54 72 75 65 20 69 66 20 6e 6f 20 73 68 61  * True if no sha
bb80: 72 65 64 2d 63 61 63 68 65 20 62 61 63 6b 65 6e  red-cache backen
bb90: 64 73 20 2a 2f 0a 20 20 75 38 20 6e 53 71 6c 45  ds */.  u8 nSqlE
bba0: 78 65 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  xec;            
bbb0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
bbc0: 6f 66 20 70 65 6e 64 69 6e 67 20 4f 50 5f 53 71  of pending OP_Sq
bbd0: 6c 45 78 65 63 20 6f 70 63 6f 64 65 73 20 2a 2f  lExec opcodes */
bbe0: 0a 20 20 69 6e 74 20 6e 65 78 74 50 61 67 65 73  .  int nextPages
bbf0: 69 7a 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ize;            
bc00: 20 2f 2a 20 50 61 67 65 73 69 7a 65 20 61 66 74   /* Pagesize aft
bc10: 65 72 20 56 41 43 55 55 4d 20 69 66 20 3e 30 20  er VACUUM if >0 
bc20: 2a 2f 0a 20 20 75 33 32 20 6d 61 67 69 63 3b 20  */.  u32 magic; 
bc30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bc40: 20 20 20 2f 2a 20 4d 61 67 69 63 20 6e 75 6d 62     /* Magic numb
bc50: 65 72 20 66 6f 72 20 64 65 74 65 63 74 20 6c 69  er for detect li
bc60: 62 72 61 72 79 20 6d 69 73 75 73 65 20 2a 2f 0a  brary misuse */.
bc70: 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b 20 20    int nChange;  
bc80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bc90: 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e 65  /* Value returne
bca0: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63 68 61  d by sqlite3_cha
bcb0: 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20  nges() */.  int 
bcc0: 6e 54 6f 74 61 6c 43 68 61 6e 67 65 3b 20 20 20  nTotalChange;   
bcd0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
bce0: 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73  ue returned by s
bcf0: 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61  qlite3_total_cha
bd00: 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20  nges() */.  int 
bd10: 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4e 5f  aLimit[SQLITE_N_
bd20: 4c 49 4d 49 54 5d 3b 20 20 20 2f 2a 20 4c 69 6d  LIMIT];   /* Lim
bd30: 69 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61  its */.  int nMa
bd40: 78 53 6f 72 74 65 72 4d 6d 61 70 3b 20 20 20 20  xSorterMmap;    
bd50: 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75         /* Maximu
bd60: 6d 20 73 69 7a 65 20 6f 66 20 72 65 67 69 6f 6e  m size of region
bd70: 73 20 6d 61 70 70 65 64 20 62 79 20 73 6f 72 74  s mapped by sort
bd80: 65 72 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 73  er */.  struct s
bd90: 71 6c 69 74 65 33 49 6e 69 74 49 6e 66 6f 20 7b  qlite3InitInfo {
bda0: 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61        /* Informa
bdb0: 74 69 6f 6e 20 75 73 65 64 20 64 75 72 69 6e 67  tion used during
bdc0: 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20   initialization 
bdd0: 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 65 77 54 6e  */.    int newTn
bde0: 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  um;             
bdf0: 20 20 20 2f 2a 20 52 6f 6f 74 70 61 67 65 20 6f     /* Rootpage o
be00: 66 20 74 61 62 6c 65 20 62 65 69 6e 67 20 69 6e  f table being in
be10: 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20  itialized */.   
be20: 20 75 38 20 69 44 62 3b 20 20 20 20 20 20 20 20   u8 iDb;        
be30: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
be40: 57 68 69 63 68 20 64 62 20 66 69 6c 65 20 69 73  Which db file is
be50: 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a   being initializ
be60: 65 64 20 2a 2f 0a 20 20 20 20 75 38 20 62 75 73  ed */.    u8 bus
be70: 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  y;              
be80: 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20 69 66        /* TRUE if
be90: 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 69 74 69   currently initi
bea0: 61 6c 69 7a 69 6e 67 20 2a 2f 0a 20 20 20 20 75  alizing */.    u
beb0: 38 20 6f 72 70 68 61 6e 54 72 69 67 67 65 72 3b  8 orphanTrigger;
bec0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61             /* La
bed0: 73 74 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  st statement is 
bee0: 6f 72 70 68 61 6e 65 64 20 54 45 4d 50 20 74 72  orphaned TEMP tr
bef0: 69 67 67 65 72 20 2a 2f 0a 20 20 20 20 75 38 20  igger */.    u8 
bf00: 69 6d 70 6f 73 74 65 72 54 61 62 6c 65 3b 20 20  imposterTable;  
bf10: 20 20 20 20 20 20 20 20 20 2f 2a 20 42 75 69 6c           /* Buil
bf20: 64 69 6e 67 20 61 6e 20 69 6d 70 6f 73 74 65 72  ding an imposter
bf30: 20 74 61 62 6c 65 20 2a 2f 0a 20 20 7d 20 69 6e   table */.  } in
bf40: 69 74 3b 0a 20 20 69 6e 74 20 6e 56 64 62 65 41  it;.  int nVdbeA
bf50: 63 74 69 76 65 3b 20 20 20 20 20 20 20 20 20 20  ctive;          
bf60: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
bf70: 20 56 44 42 45 73 20 63 75 72 72 65 6e 74 6c 79   VDBEs currently
bf80: 20 72 75 6e 6e 69 6e 67 20 2a 2f 0a 20 20 69 6e   running */.  in
bf90: 74 20 6e 56 64 62 65 52 65 61 64 3b 20 20 20 20  t nVdbeRead;    
bfa0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
bfb0: 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65 20  umber of active 
bfc0: 56 44 42 45 73 20 74 68 61 74 20 72 65 61 64 20  VDBEs that read 
bfd0: 6f 72 20 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e  or write */.  in
bfe0: 74 20 6e 56 64 62 65 57 72 69 74 65 3b 20 20 20  t nVdbeWrite;   
bff0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
c000: 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65 20  umber of active 
c010: 56 44 42 45 73 20 74 68 61 74 20 72 65 61 64 20  VDBEs that read 
c020: 61 6e 64 20 77 72 69 74 65 20 2a 2f 0a 20 20 69  and write */.  i
c030: 6e 74 20 6e 56 64 62 65 45 78 65 63 3b 20 20 20  nt nVdbeExec;   
c040: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c050: 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64  Number of nested
c060: 20 63 61 6c 6c 73 20 74 6f 20 56 64 62 65 45 78   calls to VdbeEx
c070: 65 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56  ec() */.  int nV
c080: 44 65 73 74 72 6f 79 3b 20 20 20 20 20 20 20 20  Destroy;        
c090: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
c0a0: 72 20 6f 66 20 61 63 74 69 76 65 20 4f 50 5f 56  r of active OP_V
c0b0: 44 65 73 74 72 6f 79 20 6f 70 65 72 61 74 69 6f  Destroy operatio
c0c0: 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 78 74  ns */.  int nExt
c0d0: 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20 20 20 20  ension;         
c0e0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
c0f0: 6f 66 20 6c 6f 61 64 65 64 20 65 78 74 65 6e 73  of loaded extens
c100: 69 6f 6e 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  ions */.  void *
c110: 2a 61 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20  *aExtension;    
c120: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 72 61 79          /* Array
c130: 20 6f 66 20 73 68 61 72 65 64 20 6c 69 62 72 61   of shared libra
c140: 72 79 20 68 61 6e 64 6c 65 73 20 2a 2f 0a 20 20  ry handles */.  
c150: 69 6e 74 20 28 2a 78 54 72 61 63 65 29 28 75 33  int (*xTrace)(u3
c160: 32 2c 76 6f 69 64 2a 2c 76 6f 69 64 2a 2c 76 6f  2,void*,void*,vo
c170: 69 64 2a 29 3b 20 20 20 20 20 2f 2a 20 54 72 61  id*);     /* Tra
c180: 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  ce function */. 
c190: 20 76 6f 69 64 20 2a 70 54 72 61 63 65 41 72 67   void *pTraceArg
c1a0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
c1b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
c1c0: 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 74 72  gument to the tr
c1d0: 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ace function */.
c1e0: 20 20 76 6f 69 64 20 28 2a 78 50 72 6f 66 69 6c    void (*xProfil
c1f0: 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63  e)(void*,const c
c200: 68 61 72 2a 2c 75 36 34 29 3b 20 20 2f 2a 20 50  har*,u64);  /* P
c210: 72 6f 66 69 6c 69 6e 67 20 66 75 6e 63 74 69 6f  rofiling functio
c220: 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72  n */.  void *pPr
c230: 6f 66 69 6c 65 41 72 67 3b 20 20 20 20 20 20 20  ofileArg;       
c240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c250: 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20   /* Argument to 
c260: 70 72 6f 66 69 6c 65 20 66 75 6e 63 74 69 6f 6e  profile function
c270: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6d   */.  void *pCom
c280: 6d 69 74 41 72 67 3b 20 20 20 20 20 20 20 20 20  mitArg;         
c290: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
c2a0: 65 6e 74 20 74 6f 20 78 43 6f 6d 6d 69 74 43 61  ent to xCommitCa
c2b0: 6c 6c 62 61 63 6b 28 29 20 2a 2f 0a 20 20 69 6e  llback() */.  in
c2c0: 74 20 28 2a 78 43 6f 6d 6d 69 74 43 61 6c 6c 62  t (*xCommitCallb
c2d0: 61 63 6b 29 28 76 6f 69 64 2a 29 3b 20 20 20 20  ack)(void*);    
c2e0: 2f 2a 20 49 6e 76 6f 6b 65 64 20 61 74 20 65 76  /* Invoked at ev
c2f0: 65 72 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20  ery commit. */. 
c300: 20 76 6f 69 64 20 2a 70 52 6f 6c 6c 62 61 63 6b   void *pRollback
c310: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
c320: 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74     /* Argument t
c330: 6f 20 78 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62  o xRollbackCallb
c340: 61 63 6b 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20  ack() */.  void 
c350: 28 2a 78 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62  (*xRollbackCallb
c360: 61 63 6b 29 28 76 6f 69 64 2a 29 3b 20 2f 2a 20  ack)(void*); /* 
c370: 49 6e 76 6f 6b 65 64 20 61 74 20 65 76 65 72 79  Invoked at every
c380: 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f   commit. */.  vo
c390: 69 64 20 2a 70 55 70 64 61 74 65 41 72 67 3b 0a  id *pUpdateArg;.
c3a0: 20 20 76 6f 69 64 20 28 2a 78 55 70 64 61 74 65    void (*xUpdate
c3b0: 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 2c  Callback)(void*,
c3c0: 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  int, const char*
c3d0: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 73 71 6c  ,const char*,sql
c3e0: 69 74 65 5f 69 6e 74 36 34 29 3b 0a 23 69 66 64  ite_int64);.#ifd
c3f0: 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
c400: 5f 50 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b 0a  _PREUPDATE_HOOK.
c410: 20 20 76 6f 69 64 20 2a 70 50 72 65 55 70 64 61    void *pPreUpda
c420: 74 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  teArg;          
c430: 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e  /* First argumen
c440: 74 20 74 6f 20 78 50 72 65 55 70 64 61 74 65 43  t to xPreUpdateC
c450: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69  allback */.  voi
c460: 64 20 28 2a 78 50 72 65 55 70 64 61 74 65 43 61  d (*xPreUpdateCa
c470: 6c 6c 62 61 63 6b 29 28 20 20 20 2f 2a 20 52 65  llback)(   /* Re
c480: 67 69 73 74 65 72 65 64 20 75 73 69 6e 67 20 73  gistered using s
c490: 71 6c 69 74 65 33 5f 70 72 65 75 70 64 61 74 65  qlite3_preupdate
c4a0: 5f 68 6f 6f 6b 28 29 20 2a 2f 0a 20 20 20 20 76  _hook() */.    v
c4b0: 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e  oid*,sqlite3*,in
c4c0: 74 2c 63 68 61 72 20 63 6f 6e 73 74 2a 2c 63 68  t,char const*,ch
c4d0: 61 72 20 63 6f 6e 73 74 2a 2c 73 71 6c 69 74 65  ar const*,sqlite
c4e0: 33 5f 69 6e 74 36 34 2c 73 71 6c 69 74 65 33 5f  3_int64,sqlite3_
c4f0: 69 6e 74 36 34 0a 20 20 29 3b 0a 20 20 50 72 65  int64.  );.  Pre
c500: 55 70 64 61 74 65 20 2a 70 50 72 65 55 70 64 61  Update *pPreUpda
c510: 74 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 43 6f  te;        /* Co
c520: 6e 74 65 78 74 20 66 6f 72 20 61 63 74 69 76 65  ntext for active
c530: 20 70 72 65 2d 75 70 64 61 74 65 20 63 61 6c 6c   pre-update call
c540: 62 61 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 20 2f  back */.#endif /
c550: 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  * SQLITE_ENABLE_
c560: 50 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b 20 2a  PREUPDATE_HOOK *
c570: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
c580: 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20  _OMIT_WAL.  int 
c590: 28 2a 78 57 61 6c 43 61 6c 6c 62 61 63 6b 29 28  (*xWalCallback)(
c5a0: 76 6f 69 64 20 2a 2c 20 73 71 6c 69 74 65 33 20  void *, sqlite3 
c5b0: 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  *, const char *,
c5c0: 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70   int);.  void *p
c5d0: 57 61 6c 41 72 67 3b 0a 23 65 6e 64 69 66 0a 20  WalArg;.#endif. 
c5e0: 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64   void(*xCollNeed
c5f0: 65 64 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65  ed)(void*,sqlite
c600: 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c  3*,int eTextRep,
c610: 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
c620: 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65  void(*xCollNeede
c630: 64 31 36 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74  d16)(void*,sqlit
c640: 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70  e3*,int eTextRep
c650: 2c 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20  ,const void*);. 
c660: 20 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e 65 65 64   void *pCollNeed
c670: 65 64 41 72 67 3b 0a 20 20 73 71 6c 69 74 65 33  edArg;.  sqlite3
c680: 5f 76 61 6c 75 65 20 2a 70 45 72 72 3b 20 20 20  _value *pErr;   
c690: 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72         /* Most r
c6a0: 65 63 65 6e 74 20 65 72 72 6f 72 20 6d 65 73 73  ecent error mess
c6b0: 61 67 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  age */.  union {
c6c0: 0a 20 20 20 20 76 6f 6c 61 74 69 6c 65 20 69 6e  .    volatile in
c6d0: 74 20 69 73 49 6e 74 65 72 72 75 70 74 65 64 3b  t isInterrupted;
c6e0: 20 2f 2a 20 54 72 75 65 20 69 66 20 73 71 6c 69   /* True if sqli
c6f0: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 20 68 61  te3_interrupt ha
c700: 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f  s been called */
c710: 0a 20 20 20 20 64 6f 75 62 6c 65 20 6e 6f 74 55  .    double notU
c720: 73 65 64 31 3b 20 20 20 20 20 20 20 20 20 20 20  sed1;           
c730: 20 2f 2a 20 53 70 61 63 65 72 20 2a 2f 0a 20 20   /* Spacer */.  
c740: 7d 20 75 31 3b 0a 20 20 4c 6f 6f 6b 61 73 69 64  } u1;.  Lookasid
c750: 65 20 6c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20  e lookaside;    
c760: 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 6b 61 73 69        /* Lookasi
c770: 64 65 20 6d 61 6c 6c 6f 63 20 63 6f 6e 66 69 67  de malloc config
c780: 75 72 61 74 69 6f 6e 20 2a 2f 0a 23 69 66 6e 64  uration */.#ifnd
c790: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
c7a0: 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 73  UTHORIZATION.  s
c7b0: 71 6c 69 74 65 33 5f 78 61 75 74 68 20 78 41 75  qlite3_xauth xAu
c7c0: 74 68 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  th;          /* 
c7d0: 41 63 63 65 73 73 20 61 75 74 68 6f 72 69 7a 61  Access authoriza
c7e0: 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  tion function */
c7f0: 0a 20 20 76 6f 69 64 20 2a 70 41 75 74 68 41 72  .  void *pAuthAr
c800: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
c810: 20 2f 2a 20 31 73 74 20 61 72 67 75 6d 65 6e 74   /* 1st argument
c820: 20 74 6f 20 74 68 65 20 61 63 63 65 73 73 20 61   to the access a
c830: 75 74 68 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  uth function */.
c840: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
c850: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52  QLITE_OMIT_PROGR
c860: 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69  ESS_CALLBACK.  i
c870: 6e 74 20 28 2a 78 50 72 6f 67 72 65 73 73 29 28  nt (*xProgress)(
c880: 76 6f 69 64 20 2a 29 3b 20 20 20 20 20 2f 2a 20  void *);     /* 
c890: 54 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c  The progress cal
c8a0: 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20  lback */.  void 
c8b0: 2a 70 50 72 6f 67 72 65 73 73 41 72 67 3b 20 20  *pProgressArg;  
c8c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75           /* Argu
c8d0: 6d 65 6e 74 20 74 6f 20 74 68 65 20 70 72 6f 67  ment to the prog
c8e0: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  ress callback */
c8f0: 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f  .  unsigned nPro
c900: 67 72 65 73 73 4f 70 73 3b 20 20 20 20 20 20 20  gressOps;       
c910: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6f 70   /* Number of op
c920: 63 6f 64 65 73 20 66 6f 72 20 70 72 6f 67 72 65  codes for progre
c930: 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23  ss callback */.#
c940: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
c950: 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
c960: 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e 56 54  LTABLE.  int nVT
c970: 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20  rans;           
c980: 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 61         /* Alloca
c990: 74 65 64 20 73 69 7a 65 20 6f 66 20 61 56 54 72  ted size of aVTr
c9a0: 61 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20 61 4d  ans */.  Hash aM
c9b0: 6f 64 75 6c 65 3b 20 20 20 20 20 20 20 20 20 20  odule;          
c9c0: 20 20 20 20 20 20 20 2f 2a 20 70 6f 70 75 6c 61         /* popula
c9d0: 74 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63  ted by sqlite3_c
c9e0: 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a  reate_module() *
c9f0: 2f 0a 20 20 56 74 61 62 43 74 78 20 2a 70 56 74  /.  VtabCtx *pVt
ca00: 61 62 43 74 78 3b 20 20 20 20 20 20 20 20 20 20  abCtx;          
ca10: 20 20 2f 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72    /* Context for
ca20: 20 61 63 74 69 76 65 20 76 74 61 62 20 63 6f 6e   active vtab con
ca30: 6e 65 63 74 2f 63 72 65 61 74 65 20 2a 2f 0a 20  nect/create */. 
ca40: 20 56 54 61 62 6c 65 20 2a 2a 61 56 54 72 61 6e   VTable **aVTran
ca50: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  s;             /
ca60: 2a 20 56 69 72 74 75 61 6c 20 74 61 62 6c 65 73  * Virtual tables
ca70: 20 77 69 74 68 20 6f 70 65 6e 20 74 72 61 6e 73   with open trans
ca80: 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 56 54 61  actions */.  VTa
ca90: 62 6c 65 20 2a 70 44 69 73 63 6f 6e 6e 65 63 74  ble *pDisconnect
caa0: 3b 20 20 20 20 2f 2a 20 44 69 73 63 6f 6e 6e 65  ;    /* Disconne
cab0: 63 74 20 74 68 65 73 65 20 69 6e 20 6e 65 78 74  ct these in next
cac0: 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
cad0: 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 48  () */.#endif.  H
cae0: 61 73 68 20 61 46 75 6e 63 3b 20 20 20 20 20 20  ash aFunc;      
caf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
cb00: 48 61 73 68 20 74 61 62 6c 65 20 6f 66 20 63 6f  Hash table of co
cb10: 6e 6e 65 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f  nnection functio
cb20: 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20 61 43 6f  ns */.  Hash aCo
cb30: 6c 6c 53 65 71 3b 20 20 20 20 20 20 20 20 20 20  llSeq;          
cb40: 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 63 6f 6c        /* All col
cb50: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73  lating sequences
cb60: 20 2a 2f 0a 20 20 42 75 73 79 48 61 6e 64 6c 65   */.  BusyHandle
cb70: 72 20 62 75 73 79 48 61 6e 64 6c 65 72 3b 20 20  r busyHandler;  
cb80: 20 20 20 20 2f 2a 20 42 75 73 79 20 63 61 6c 6c      /* Busy call
cb90: 62 61 63 6b 20 2a 2f 0a 20 20 44 62 20 61 44 62  back */.  Db aDb
cba0: 53 74 61 74 69 63 5b 32 5d 3b 20 20 20 20 20 20  Static[2];      
cbb0: 20 20 20 20 20 20 20 20 2f 2a 20 53 74 61 74 69          /* Stati
cbc0: 63 20 73 70 61 63 65 20 66 6f 72 20 74 68 65 20  c space for the 
cbd0: 32 20 64 65 66 61 75 6c 74 20 62 61 63 6b 65 6e  2 default backen
cbe0: 64 73 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e  ds */.  Savepoin
cbf0: 74 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b 20 20  t *pSavepoint;  
cc00: 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66        /* List of
cc10: 20 61 63 74 69 76 65 20 73 61 76 65 70 6f 69 6e   active savepoin
cc20: 74 73 20 2a 2f 0a 20 20 69 6e 74 20 62 75 73 79  ts */.  int busy
cc30: 54 69 6d 65 6f 75 74 3b 20 20 20 20 20 20 20 20  Timeout;        
cc40: 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20 68 61        /* Busy ha
cc50: 6e 64 6c 65 72 20 74 69 6d 65 6f 75 74 2c 20 69  ndler timeout, i
cc60: 6e 20 6d 73 65 63 20 2a 2f 0a 20 20 69 6e 74 20  n msec */.  int 
cc70: 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20  nSavepoint;     
cc80: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
cc90: 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73  ber of non-trans
cca0: 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74  action savepoint
ccb0: 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 74 61 74  s */.  int nStat
ccc0: 65 6d 65 6e 74 3b 20 20 20 20 20 20 20 20 20 20  ement;          
ccd0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
cce0: 66 20 6e 65 73 74 65 64 20 73 74 61 74 65 6d 65  f nested stateme
ccf0: 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20  nt-transactions 
cd00: 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72   */.  i64 nDefer
cd10: 72 65 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20  redCons;        
cd20: 20 20 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72      /* Net defer
cd30: 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  red constraints 
cd40: 74 68 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e  this transaction
cd50: 2e 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65  . */.  i64 nDefe
cd60: 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20  rredImmCons;    
cd70: 20 20 20 20 20 2f 2a 20 4e 65 74 20 64 65 66 65       /* Net defe
cd80: 72 72 65 64 20 69 6d 6d 65 64 69 61 74 65 20 63  rred immediate c
cd90: 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20  onstraints */.  
cda0: 69 6e 74 20 2a 70 6e 42 79 74 65 73 46 72 65 65  int *pnBytesFree
cdb0: 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  d;            /*
cdc0: 20 49 66 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 6e   If not NULL, in
cdd0: 63 72 65 6d 65 6e 74 20 74 68 69 73 20 69 6e 20  crement this in 
cde0: 44 62 46 72 65 65 28 29 20 2a 2f 0a 23 69 66 64  DbFree() */.#ifd
cdf0: 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
ce00: 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20  _UNLOCK_NOTIFY. 
ce10: 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e   /* The followin
ce20: 67 20 76 61 72 69 61 62 6c 65 73 20 61 72 65 20  g variables are 
ce30: 61 6c 6c 20 70 72 6f 74 65 63 74 65 64 20 62 79  all protected by
ce40: 20 74 68 65 20 53 54 41 54 49 43 5f 4d 41 53 54   the STATIC_MAST
ce50: 45 52 0a 20 20 2a 2a 20 6d 75 74 65 78 2c 20 6e  ER.  ** mutex, n
ce60: 6f 74 20 62 79 20 73 71 6c 69 74 65 33 2e 6d 75  ot by sqlite3.mu
ce70: 74 65 78 2e 20 54 68 65 79 20 61 72 65 20 75 73  tex. They are us
ce80: 65 64 20 62 79 20 63 6f 64 65 20 69 6e 20 6e 6f  ed by code in no
ce90: 74 69 66 79 2e 63 2e 0a 20 20 2a 2a 0a 20 20 2a  tify.c..  **.  *
cea0: 2a 20 57 68 65 6e 20 58 2e 70 55 6e 6c 6f 63 6b  * When X.pUnlock
ceb0: 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20 74  Connection==Y, t
cec0: 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20 58  hat means that X
ced0: 20 69 73 20 77 61 69 74 69 6e 67 20 66 6f 72 20   is waiting for 
cee0: 59 20 74 6f 0a 20 20 2a 2a 20 75 6e 6c 6f 63 6b  Y to.  ** unlock
cef0: 20 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20   so that it can 
cf00: 70 72 6f 63 65 65 64 2e 0a 20 20 2a 2a 0a 20 20  proceed..  **.  
cf10: 2a 2a 20 57 68 65 6e 20 58 2e 70 42 6c 6f 63 6b  ** When X.pBlock
cf20: 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59  ingConnection==Y
cf30: 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61  , that means tha
cf40: 74 20 73 6f 6d 65 74 68 69 6e 67 20 74 68 61 74  t something that
cf50: 20 58 20 74 72 69 65 64 0a 20 20 2a 2a 20 74 72   X tried.  ** tr
cf60: 69 65 64 20 74 6f 20 64 6f 20 72 65 63 65 6e 74  ied to do recent
cf70: 6c 79 20 66 61 69 6c 65 64 20 77 69 74 68 20 61  ly failed with a
cf80: 6e 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20  n SQLITE_LOCKED 
cf90: 65 72 72 6f 72 20 64 75 65 20 74 6f 20 6c 6f 63  error due to loc
cfa0: 6b 73 0a 20 20 2a 2a 20 68 65 6c 64 20 62 79 20  ks.  ** held by 
cfb0: 59 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65  Y..  */.  sqlite
cfc0: 33 20 2a 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e  3 *pBlockingConn
cfd0: 65 63 74 69 6f 6e 3b 20 2f 2a 20 43 6f 6e 6e 65  ection; /* Conne
cfe0: 63 74 69 6f 6e 20 74 68 61 74 20 63 61 75 73 65  ction that cause
cff0: 64 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20  d SQLITE_LOCKED 
d000: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 55  */.  sqlite3 *pU
d010: 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3b  nlockConnection;
d020: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
d030: 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 77 61 74 63  nnection to watc
d040: 68 20 66 6f 72 20 75 6e 6c 6f 63 6b 20 2a 2f 0a  h for unlock */.
d050: 20 20 76 6f 69 64 20 2a 70 55 6e 6c 6f 63 6b 41    void *pUnlockA
d060: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
d070: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
d080: 65 6e 74 20 74 6f 20 78 55 6e 6c 6f 63 6b 4e 6f  ent to xUnlockNo
d090: 74 69 66 79 20 2a 2f 0a 20 20 76 6f 69 64 20 28  tify */.  void (
d0a0: 2a 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 29 28  *xUnlockNotify)(
d0b0: 76 6f 69 64 20 2a 2a 2c 20 69 6e 74 29 3b 20 20  void **, int);  
d0c0: 2f 2a 20 55 6e 6c 6f 63 6b 20 6e 6f 74 69 66 79  /* Unlock notify
d0d0: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 73   callback */.  s
d0e0: 71 6c 69 74 65 33 20 2a 70 4e 65 78 74 42 6c 6f  qlite3 *pNextBlo
d0f0: 63 6b 65 64 3b 20 20 20 20 20 20 20 20 2f 2a 20  cked;        /* 
d100: 4e 65 78 74 20 69 6e 20 6c 69 73 74 20 6f 66 20  Next in list of 
d110: 61 6c 6c 20 62 6c 6f 63 6b 65 64 20 63 6f 6e 6e  all blocked conn
d120: 65 63 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e 64 69  ections */.#endi
d130: 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  f.#ifdef SQLITE_
d140: 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54  USER_AUTHENTICAT
d150: 49 4f 4e 0a 20 20 73 71 6c 69 74 65 33 5f 75 73  ION.  sqlite3_us
d160: 65 72 61 75 74 68 20 61 75 74 68 3b 20 20 20 20  erauth auth;    
d170: 20 20 20 20 2f 2a 20 55 73 65 72 20 61 75 74 68      /* User auth
d180: 65 6e 74 69 63 61 74 69 6f 6e 20 69 6e 66 6f 72  entication infor
d190: 6d 61 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66  mation */.#endif
d1a0: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63  .};../*.** A mac
d1b0: 72 6f 20 74 6f 20 64 69 73 63 6f 76 65 72 20 74  ro to discover t
d1c0: 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61  he encoding of a
d1d0: 20 64 61 74 61 62 61 73 65 2e 0a 2a 2f 0a 23 64   database..*/.#d
d1e0: 65 66 69 6e 65 20 53 43 48 45 4d 41 5f 45 4e 43  efine SCHEMA_ENC
d1f0: 28 64 62 29 20 28 28 64 62 29 2d 3e 61 44 62 5b  (db) ((db)->aDb[
d200: 30 5d 2e 70 53 63 68 65 6d 61 2d 3e 65 6e 63 29  0].pSchema->enc)
d210: 0a 23 64 65 66 69 6e 65 20 45 4e 43 28 64 62 29  .#define ENC(db)
d220: 20 20 20 20 20 20 20 20 28 28 64 62 29 2d 3e 65          ((db)->e
d230: 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69  nc)../*.** Possi
d240: 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74  ble values for t
d250: 68 65 20 73 71 6c 69 74 65 33 2e 66 6c 61 67 73  he sqlite3.flags
d260: 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f  ..**.** Value co
d270: 6e 73 74 72 61 69 6e 74 73 20 28 65 6e 66 6f 72  nstraints (enfor
d280: 63 65 64 20 76 69 61 20 61 73 73 65 72 74 28 29  ced via assert()
d290: 29 3a 0a 2a 2a 20 20 20 20 20 20 53 51 4c 49 54  ):.**      SQLIT
d2a0: 45 5f 46 75 6c 6c 46 53 79 6e 63 20 20 20 20 20  E_FullFSync     
d2b0: 3d 3d 20 50 41 47 45 52 5f 46 55 4c 4c 46 53 59  == PAGER_FULLFSY
d2c0: 4e 43 0a 2a 2a 20 20 20 20 20 20 53 51 4c 49 54  NC.**      SQLIT
d2d0: 45 5f 43 6b 70 74 46 75 6c 6c 46 53 79 6e 63 20  E_CkptFullFSync 
d2e0: 3d 3d 20 50 41 47 45 52 5f 43 4b 50 54 5f 46 55  == PAGER_CKPT_FU
d2f0: 4c 4c 46 53 59 4e 43 0a 2a 2a 20 20 20 20 20 20  LLFSYNC.**      
d300: 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c  SQLITE_CacheSpil
d310: 6c 20 20 20 20 3d 3d 20 50 41 47 45 52 5f 43 41  l    == PAGER_CA
d320: 43 48 45 5f 53 50 49 4c 4c 0a 2a 2f 0a 23 64 65  CHE_SPILL.*/.#de
d330: 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 72 69 74  fine SQLITE_Writ
d340: 65 53 63 68 65 6d 61 20 20 20 20 30 78 30 30 30  eSchema    0x000
d350: 30 30 30 30 31 20 20 2f 2a 20 4f 4b 20 74 6f 20  00001  /* OK to 
d360: 75 70 64 61 74 65 20 53 51 4c 49 54 45 5f 4d 41  update SQLITE_MA
d370: 53 54 45 52 20 2a 2f 0a 23 64 65 66 69 6e 65 20  STER */.#define 
d380: 53 51 4c 49 54 45 5f 4c 65 67 61 63 79 46 69 6c  SQLITE_LegacyFil
d390: 65 46 6d 74 20 20 30 78 30 30 30 30 30 30 30 32  eFmt  0x00000002
d3a0: 20 20 2f 2a 20 43 72 65 61 74 65 20 6e 65 77 20    /* Create new 
d3b0: 64 61 74 61 62 61 73 65 73 20 69 6e 20 66 6f 72  databases in for
d3c0: 6d 61 74 20 31 20 2a 2f 0a 23 64 65 66 69 6e 65  mat 1 */.#define
d3d0: 20 53 51 4c 49 54 45 5f 46 75 6c 6c 43 6f 6c 4e   SQLITE_FullColN
d3e0: 61 6d 65 73 20 20 20 30 78 30 30 30 30 30 30 30  ames   0x0000000
d3f0: 34 20 20 2f 2a 20 53 68 6f 77 20 66 75 6c 6c 20  4  /* Show full 
d400: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6f 6e 20  column names on 
d410: 53 45 4c 45 43 54 20 2a 2f 0a 23 64 65 66 69 6e  SELECT */.#defin
d420: 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79  e SQLITE_FullFSy
d430: 6e 63 20 20 20 20 20 20 30 78 30 30 30 30 30 30  nc      0x000000
d440: 30 38 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20  08  /* Use full 
d450: 66 73 79 6e 63 20 6f 6e 20 74 68 65 20 62 61 63  fsync on the bac
d460: 6b 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  kend */.#define 
d470: 53 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46  SQLITE_CkptFullF
d480: 53 79 6e 63 20 20 30 78 30 30 30 30 30 30 31 30  Sync  0x00000010
d490: 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66 73    /* Use full fs
d4a0: 79 6e 63 20 66 6f 72 20 63 68 65 63 6b 70 6f 69  ync for checkpoi
d4b0: 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  nt */.#define SQ
d4c0: 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c 6c 20  LITE_CacheSpill 
d4d0: 20 20 20 20 30 78 30 30 30 30 30 30 32 30 20 20      0x00000020  
d4e0: 2f 2a 20 4f 4b 20 74 6f 20 73 70 69 6c 6c 20 70  /* OK to spill p
d4f0: 61 67 65 72 20 63 61 63 68 65 20 2a 2f 0a 23 64  ager cache */.#d
d500: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 68 6f  efine SQLITE_Sho
d510: 72 74 43 6f 6c 4e 61 6d 65 73 20 20 30 78 30 30  rtColNames  0x00
d520: 30 30 30 30 34 30 20 20 2f 2a 20 53 68 6f 77 20  000040  /* Show 
d530: 73 68 6f 72 74 20 63 6f 6c 75 6d 6e 73 20 6e 61  short columns na
d540: 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  mes */.#define S
d550: 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20  QLITE_CountRows 
d560: 20 20 20 20 20 30 78 30 30 30 30 30 30 38 30 20       0x00000080 
d570: 20 2f 2a 20 43 6f 75 6e 74 20 72 6f 77 73 20 63   /* Count rows c
d580: 68 61 6e 67 65 64 20 62 79 20 49 4e 53 45 52 54  hanged by INSERT
d590: 2c 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  , */.           
d5a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d5b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
d5c0: 2a 20 20 20 44 45 4c 45 54 45 2c 20 6f 72 20 55  *   DELETE, or U
d5d0: 50 44 41 54 45 20 61 6e 64 20 72 65 74 75 72 6e  PDATE and return
d5e0: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
d5f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
d610: 20 20 20 74 68 65 20 63 6f 75 6e 74 20 75 73 69     the count usi
d620: 6e 67 20 61 20 63 61 6c 6c 62 61 63 6b 2e 20 2a  ng a callback. *
d630: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
d640: 5f 4e 75 6c 6c 43 61 6c 6c 62 61 63 6b 20 20 20  _NullCallback   
d650: 30 78 30 30 30 30 30 31 30 30 20 20 2f 2a 20 49  0x00000100  /* I
d660: 6e 76 6f 6b 65 20 74 68 65 20 63 61 6c 6c 62 61  nvoke the callba
d670: 63 6b 20 6f 6e 63 65 20 69 66 20 74 68 65 20 2a  ck once if the *
d680: 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
d690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d6a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20              /*  
d6b0: 20 72 65 73 75 6c 74 20 73 65 74 20 69 73 20 65   result set is e
d6c0: 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  mpty */.#define 
d6d0: 53 51 4c 49 54 45 5f 49 67 6e 6f 72 65 43 68 65  SQLITE_IgnoreChe
d6e0: 63 6b 73 20 20 20 30 78 30 30 30 30 30 32 30 30  cks   0x00000200
d6f0: 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 65 6e 66 6f    /* Do not enfo
d700: 72 63 65 20 63 68 65 63 6b 20 63 6f 6e 73 74 72  rce check constr
d710: 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65  aints */.#define
d720: 20 53 51 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f   SQLITE_ReadUnco
d730: 6d 6d 69 74 20 20 20 30 78 30 30 30 30 30 34 30  mmit   0x0000040
d740: 30 20 20 2f 2a 20 52 45 41 44 20 55 4e 43 4f 4d  0  /* READ UNCOM
d750: 4d 49 54 54 45 44 20 69 6e 20 73 68 61 72 65 64  MITTED in shared
d760: 2d 63 61 63 68 65 20 2a 2f 0a 23 64 65 66 69 6e  -cache */.#defin
d770: 65 20 53 51 4c 49 54 45 5f 4e 6f 43 6b 70 74 4f  e SQLITE_NoCkptO
d780: 6e 43 6c 6f 73 65 20 20 30 78 30 30 30 30 30 38  nClose  0x000008
d790: 30 30 20 20 2f 2a 20 4e 6f 20 63 68 65 63 6b 70  00  /* No checkp
d7a0: 6f 69 6e 74 20 6f 6e 20 63 6c 6f 73 65 28 29 2f  oint on close()/
d7b0: 44 45 54 41 43 48 20 2a 2f 0a 23 64 65 66 69 6e  DETACH */.#defin
d7c0: 65 20 53 51 4c 49 54 45 5f 52 65 76 65 72 73 65  e SQLITE_Reverse
d7d0: 4f 72 64 65 72 20 20 20 30 78 30 30 30 30 31 30  Order   0x000010
d7e0: 30 30 20 20 2f 2a 20 52 65 76 65 72 73 65 20 75  00  /* Reverse u
d7f0: 6e 6f 72 64 65 72 65 64 20 53 45 4c 45 43 54 73  nordered SELECTs
d800: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
d810: 54 45 5f 52 65 63 54 72 69 67 67 65 72 73 20 20  TE_RecTriggers  
d820: 20 20 30 78 30 30 30 30 32 30 30 30 20 20 2f 2a    0x00002000  /*
d830: 20 45 6e 61 62 6c 65 20 72 65 63 75 72 73 69 76   Enable recursiv
d840: 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 23 64  e triggers */.#d
d850: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 6f 72  efine SQLITE_For
d860: 65 69 67 6e 4b 65 79 73 20 20 20 20 30 78 30 30  eignKeys    0x00
d870: 30 30 34 30 30 30 20 20 2f 2a 20 45 6e 66 6f 72  004000  /* Enfor
d880: 63 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  ce foreign key c
d890: 6f 6e 73 74 72 61 69 6e 74 73 20 20 2a 2f 0a 23  onstraints  */.#
d8a0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 75  define SQLITE_Au
d8b0: 74 6f 49 6e 64 65 78 20 20 20 20 20 20 30 78 30  toIndex      0x0
d8c0: 30 30 30 38 30 30 30 20 20 2f 2a 20 45 6e 61 62  0008000  /* Enab
d8d0: 6c 65 20 61 75 74 6f 6d 61 74 69 63 20 69 6e 64  le automatic ind
d8e0: 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  exes */.#define 
d8f0: 53 51 4c 49 54 45 5f 4c 6f 61 64 45 78 74 65 6e  SQLITE_LoadExten
d900: 73 69 6f 6e 20 20 30 78 30 30 30 31 30 30 30 30  sion  0x00010000
d910: 20 20 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f 61 64    /* Enable load
d920: 5f 65 78 74 65 6e 73 69 6f 6e 20 2a 2f 0a 23 64  _extension */.#d
d930: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 6f 61  efine SQLITE_Loa
d940: 64 45 78 74 46 75 6e 63 20 20 20 20 30 78 30 30  dExtFunc    0x00
d950: 30 32 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c  020000  /* Enabl
d960: 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e  e load_extension
d970: 28 29 20 53 51 4c 20 66 75 6e 63 20 2a 2f 0a 23  () SQL func */.#
d980: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 6e  define SQLITE_En
d990: 61 62 6c 65 54 72 69 67 67 65 72 20 20 30 78 30  ableTrigger  0x0
d9a0: 30 30 34 30 30 30 30 20 20 2f 2a 20 54 72 75 65  0040000  /* True
d9b0: 20 74 6f 20 65 6e 61 62 6c 65 20 74 72 69 67 67   to enable trigg
d9c0: 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ers */.#define S
d9d0: 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73 20 20  QLITE_DeferFKs  
d9e0: 20 20 20 20 20 30 78 30 30 30 38 30 30 30 30 20       0x00080000 
d9f0: 20 2f 2a 20 44 65 66 65 72 20 61 6c 6c 20 46 4b   /* Defer all FK
da00: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
da10: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 51  #define SQLITE_Q
da20: 75 65 72 79 4f 6e 6c 79 20 20 20 20 20 20 30 78  ueryOnly      0x
da30: 30 30 31 30 30 30 30 30 20 20 2f 2a 20 44 69 73  00100000  /* Dis
da40: 61 62 6c 65 20 64 61 74 61 62 61 73 65 20 63 68  able database ch
da50: 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  anges */.#define
da60: 20 53 51 4c 49 54 45 5f 43 65 6c 6c 53 69 7a 65   SQLITE_CellSize
da70: 43 6b 20 20 20 20 20 30 78 30 30 32 30 30 30 30  Ck     0x0020000
da80: 30 20 20 2f 2a 20 43 68 65 63 6b 20 62 74 72 65  0  /* Check btre
da90: 65 20 63 65 6c 6c 20 73 69 7a 65 73 20 6f 6e 20  e cell sizes on 
daa0: 6c 6f 61 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  load */.#define 
dab0: 53 51 4c 49 54 45 5f 46 74 73 33 54 6f 6b 65 6e  SQLITE_Fts3Token
dac0: 69 7a 65 72 20 20 30 78 30 30 34 30 30 30 30 30  izer  0x00400000
dad0: 20 20 2f 2a 20 45 6e 61 62 6c 65 20 66 74 73 33    /* Enable fts3
dae0: 5f 74 6f 6b 65 6e 69 7a 65 72 28 32 29 20 2a 2f  _tokenizer(2) */
daf0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
db00: 45 6e 61 62 6c 65 51 50 53 47 20 20 20 20 20 30  EnableQPSG     0
db10: 78 30 30 38 30 30 30 30 30 20 20 2f 2a 20 51 75  x00800000  /* Qu
db20: 65 72 79 20 50 6c 61 6e 6e 65 72 20 53 74 61 62  ery Planner Stab
db30: 69 6c 69 74 79 20 47 75 61 72 61 6e 74 65 65 20  ility Guarantee 
db40: 2a 2f 0a 2f 2a 20 46 6c 61 67 73 20 75 73 65 64  */./* Flags used
db50: 20 6f 6e 6c 79 20 69 66 20 64 65 62 75 67 67 69   only if debuggi
db60: 6e 67 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  ng */.#ifdef SQL
db70: 49 54 45 5f 44 45 42 55 47 0a 23 64 65 66 69 6e  ITE_DEBUG.#defin
db80: 65 20 53 51 4c 49 54 45 5f 53 71 6c 54 72 61 63  e SQLITE_SqlTrac
db90: 65 20 20 20 20 20 20 20 30 78 30 38 30 30 30 30  e       0x080000
dba0: 30 30 20 20 2f 2a 20 44 65 62 75 67 20 70 72 69  00  /* Debug pri
dbb0: 6e 74 20 53 51 4c 20 61 73 20 69 74 20 65 78 65  nt SQL as it exe
dbc0: 63 75 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  cutes */.#define
dbd0: 20 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74   SQLITE_VdbeList
dbe0: 69 6e 67 20 20 20 20 30 78 31 30 30 30 30 30 30  ing    0x1000000
dbf0: 30 20 20 2f 2a 20 44 65 62 75 67 20 6c 69 73 74  0  /* Debug list
dc00: 69 6e 67 73 20 6f 66 20 56 44 42 45 20 70 72 6f  ings of VDBE pro
dc10: 67 72 61 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65  grams */.#define
dc20: 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63   SQLITE_VdbeTrac
dc30: 65 20 20 20 20 20 20 30 78 32 30 30 30 30 30 30  e      0x2000000
dc40: 30 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 74 72  0  /* True to tr
dc50: 61 63 65 20 56 44 42 45 20 65 78 65 63 75 74 69  ace VDBE executi
dc60: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
dc70: 4c 49 54 45 5f 56 64 62 65 41 64 64 6f 70 54 72  LITE_VdbeAddopTr
dc80: 61 63 65 20 30 78 34 30 30 30 30 30 30 30 20 20  ace 0x40000000  
dc90: 2f 2a 20 54 72 61 63 65 20 73 71 6c 69 74 65 33  /* Trace sqlite3
dca0: 56 64 62 65 41 64 64 4f 70 28 29 20 63 61 6c 6c  VdbeAddOp() call
dcb0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
dcc0: 49 54 45 5f 56 64 62 65 45 51 50 20 20 20 20 20  ITE_VdbeEQP     
dcd0: 20 20 20 30 78 38 30 30 30 30 30 30 30 20 20 2f     0x80000000  /
dce0: 2a 20 44 65 62 75 67 20 45 58 50 4c 41 49 4e 20  * Debug EXPLAIN 
dcf0: 51 55 45 52 59 20 50 4c 41 4e 20 2a 2f 0a 23 65  QUERY PLAN */.#e
dd00: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  ndif../*.** Allo
dd10: 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 73  wed values for s
dd20: 71 6c 69 74 65 33 2e 6d 44 62 46 6c 61 67 73 0a  qlite3.mDbFlags.
dd30: 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 46 4c 41  */.#define DBFLA
dd40: 47 5f 53 63 68 65 6d 61 43 68 61 6e 67 65 20 20  G_SchemaChange  
dd50: 20 30 78 30 30 30 31 20 20 2f 2a 20 55 6e 63 6f   0x0001  /* Unco
dd60: 6d 6d 69 74 74 65 64 20 48 61 73 68 20 74 61 62  mmitted Hash tab
dd70: 6c 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64  le changes */.#d
dd80: 65 66 69 6e 65 20 44 42 46 4c 41 47 5f 50 72 65  efine DBFLAG_Pre
dd90: 66 65 72 42 75 69 6c 74 69 6e 20 20 30 78 30 30  ferBuiltin  0x00
dda0: 30 32 20 20 2f 2a 20 50 72 65 66 65 72 65 6e 63  02  /* Preferenc
ddb0: 65 20 74 6f 20 62 75 69 6c 74 2d 69 6e 20 66 75  e to built-in fu
ddc0: 6e 63 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44  ncs */.#define D
ddd0: 42 46 4c 41 47 5f 56 61 63 75 75 6d 20 20 20 20  BFLAG_Vacuum    
dde0: 20 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20       0x0004  /* 
ddf0: 43 75 72 72 65 6e 74 6c 79 20 69 6e 20 61 20 56  Currently in a V
de00: 41 43 55 55 4d 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  ACUUM */../*.** 
de10: 42 69 74 73 20 6f 66 20 74 68 65 20 73 71 6c 69  Bits of the sqli
de20: 74 65 33 2e 64 62 4f 70 74 46 6c 61 67 73 20 66  te3.dbOptFlags f
de30: 69 65 6c 64 20 74 68 61 74 20 61 72 65 20 75 73  ield that are us
de40: 65 64 20 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c  ed by the.** sql
de50: 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f  ite3_test_contro
de60: 6c 28 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52  l(SQLITE_TESTCTR
de70: 4c 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 53 2c  L_OPTIMIZATIONS,
de80: 2e 2e 2e 29 20 69 6e 74 65 72 66 61 63 65 20 74  ...) interface t
de90: 6f 0a 2a 2a 20 73 65 6c 65 63 74 69 76 65 6c 79  o.** selectively
dea0: 20 64 69 73 61 62 6c 65 20 76 61 72 69 6f 75 73   disable various
deb0: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a   optimizations..
dec0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
ded0: 45 5f 51 75 65 72 79 46 6c 61 74 74 65 6e 65 72  E_QueryFlattener
dee0: 20 30 78 30 30 30 31 20 20 20 2f 2a 20 51 75 65   0x0001   /* Que
def0: 72 79 20 66 6c 61 74 74 65 6e 69 6e 67 20 2a 2f  ry flattening */
df00: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
df10: 43 6f 6c 75 6d 6e 43 61 63 68 65 20 20 20 20 30  ColumnCache    0
df20: 78 30 30 30 32 20 20 20 2f 2a 20 43 6f 6c 75 6d  x0002   /* Colum
df30: 6e 20 63 61 63 68 65 20 2a 2f 0a 23 64 65 66 69  n cache */.#defi
df40: 6e 65 20 53 51 4c 49 54 45 5f 47 72 6f 75 70 42  ne SQLITE_GroupB
df50: 79 4f 72 64 65 72 20 20 20 30 78 30 30 30 34 20  yOrder   0x0004 
df60: 20 20 2f 2a 20 47 52 4f 55 50 42 59 20 63 6f 76    /* GROUPBY cov
df70: 65 72 20 6f 66 20 4f 52 44 45 52 42 59 20 2a 2f  er of ORDERBY */
df80: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
df90: 46 61 63 74 6f 72 4f 75 74 43 6f 6e 73 74 20 30  FactorOutConst 0
dfa0: 78 30 30 30 38 20 20 20 2f 2a 20 43 6f 6e 73 74  x0008   /* Const
dfb0: 61 6e 74 20 66 61 63 74 6f 72 69 6e 67 20 2a 2f  ant factoring */
dfc0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
dfd0: 44 69 73 74 69 6e 63 74 4f 70 74 20 20 20 20 30  DistinctOpt    0
dfe0: 78 30 30 31 30 20 20 20 2f 2a 20 44 49 53 54 49  x0010   /* DISTI
dff0: 4e 43 54 20 75 73 69 6e 67 20 69 6e 64 65 78 65  NCT using indexe
e000: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
e010: 49 54 45 5f 43 6f 76 65 72 49 64 78 53 63 61 6e  ITE_CoverIdxScan
e020: 20 20 20 30 78 30 30 32 30 20 20 20 2f 2a 20 43     0x0020   /* C
e030: 6f 76 65 72 69 6e 67 20 69 6e 64 65 78 20 73 63  overing index sc
e040: 61 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ans */.#define S
e050: 51 4c 49 54 45 5f 4f 72 64 65 72 42 79 49 64 78  QLITE_OrderByIdx
e060: 4a 6f 69 6e 20 30 78 30 30 34 30 20 20 20 2f 2a  Join 0x0040   /*
e070: 20 4f 52 44 45 52 20 42 59 20 6f 66 20 6a 6f 69   ORDER BY of joi
e080: 6e 73 20 76 69 61 20 69 6e 64 65 78 20 2a 2f 0a  ns via index */.
e090: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54  #define SQLITE_T
e0a0: 72 61 6e 73 69 74 69 76 65 20 20 20 20 20 30 78  ransitive     0x
e0b0: 30 30 38 30 20 20 20 2f 2a 20 54 72 61 6e 73 69  0080   /* Transi
e0c0: 74 69 76 65 20 63 6f 6e 73 74 72 61 69 6e 74 73  tive constraints
e0d0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e0e0: 54 45 5f 4f 6d 69 74 4e 6f 6f 70 4a 6f 69 6e 20  TE_OmitNoopJoin 
e0f0: 20 20 30 78 30 31 30 30 20 20 20 2f 2a 20 4f 6d    0x0100   /* Om
e100: 69 74 20 75 6e 75 73 65 64 20 74 61 62 6c 65 73  it unused tables
e110: 20 69 6e 20 6a 6f 69 6e 73 20 2a 2f 0a 23 64 65   in joins */.#de
e120: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 74 61 74  fine SQLITE_Stat
e130: 33 34 20 20 20 20 20 20 20 20 20 30 78 30 32 30  34         0x020
e140: 30 20 20 20 2f 2a 20 55 73 65 20 53 54 41 54 33  0   /* Use STAT3
e150: 20 6f 72 20 53 54 41 54 34 20 64 61 74 61 20 2a   or STAT4 data *
e160: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e170: 5f 43 6f 75 6e 74 4f 66 56 69 65 77 20 20 20 20  _CountOfView    
e180: 30 78 30 34 30 30 20 20 20 2f 2a 20 54 68 65 20  0x0400   /* The 
e190: 63 6f 75 6e 74 2d 6f 66 2d 76 69 65 77 20 6f 70  count-of-view op
e1a0: 74 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64  timization */.#d
e1b0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 75 72  efine SQLITE_Cur
e1c0: 73 6f 72 48 69 6e 74 73 20 20 20 20 30 78 30 38  sorHints    0x08
e1d0: 30 30 20 20 20 2f 2a 20 41 64 64 20 4f 50 5f 43  00   /* Add OP_C
e1e0: 75 72 73 6f 72 48 69 6e 74 20 6f 70 63 6f 64 65  ursorHint opcode
e1f0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
e200: 49 54 45 5f 41 6c 6c 4f 70 74 73 20 20 20 20 20  ITE_AllOpts     
e210: 20 20 20 30 78 66 66 66 66 20 20 20 2f 2a 20 41     0xffff   /* A
e220: 6c 6c 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  ll optimizations
e230: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f   */../*.** Macro
e240: 73 20 66 6f 72 20 74 65 73 74 69 6e 67 20 77 68  s for testing wh
e250: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 6f 70 74  ether or not opt
e260: 69 6d 69 7a 61 74 69 6f 6e 73 20 61 72 65 20 65  imizations are e
e270: 6e 61 62 6c 65 64 20 6f 72 20 64 69 73 61 62 6c  nabled or disabl
e280: 65 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ed..*/.#define O
e290: 70 74 69 6d 69 7a 61 74 69 6f 6e 44 69 73 61 62  ptimizationDisab
e2a0: 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 28  led(db, mask)  (
e2b0: 28 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67  ((db)->dbOptFlag
e2c0: 73 26 28 6d 61 73 6b 29 29 21 3d 30 29 0a 23 64  s&(mask))!=0).#d
e2d0: 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69  efine Optimizati
e2e0: 6f 6e 45 6e 61 62 6c 65 64 28 64 62 2c 20 6d 61  onEnabled(db, ma
e2f0: 73 6b 29 20 20 20 28 28 28 64 62 29 2d 3e 64 62  sk)   (((db)->db
e300: 4f 70 74 46 6c 61 67 73 26 28 6d 61 73 6b 29 29  OptFlags&(mask))
e310: 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75  ==0)../*.** Retu
e320: 72 6e 20 74 72 75 65 20 69 66 20 69 74 20 4f 4b  rn true if it OK
e330: 20 74 6f 20 66 61 63 74 6f 72 20 63 6f 6e 73 74   to factor const
e340: 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 73 20  ant expressions 
e350: 69 6e 74 6f 20 74 68 65 20 69 6e 69 74 69 61 6c  into the initial
e360: 69 7a 61 74 69 6f 6e 0a 2a 2a 20 63 6f 64 65 2e  ization.** code.
e370: 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20 69 73   The argument is
e380: 20 61 20 50 61 72 73 65 20 6f 62 6a 65 63 74 20   a Parse object 
e390: 66 6f 72 20 74 68 65 20 63 6f 64 65 20 67 65 6e  for the code gen
e3a0: 65 72 61 74 6f 72 2e 0a 2a 2f 0a 23 64 65 66 69  erator..*/.#defi
e3b0: 6e 65 20 43 6f 6e 73 74 46 61 63 74 6f 72 4f 6b  ne ConstFactorOk
e3c0: 28 50 29 20 28 28 50 29 2d 3e 6f 6b 43 6f 6e 73  (P) ((P)->okCons
e3d0: 74 46 61 63 74 6f 72 29 0a 0a 2f 2a 0a 2a 2a 20  tFactor)../*.** 
e3e0: 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20  Possible values 
e3f0: 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 2e 6d  for the sqlite.m
e400: 61 67 69 63 20 66 69 65 6c 64 2e 0a 2a 2a 20 54  agic field..** T
e410: 68 65 20 6e 75 6d 62 65 72 73 20 61 72 65 20 6f  he numbers are o
e420: 62 74 61 69 6e 65 64 20 61 74 20 72 61 6e 64 6f  btained at rando
e430: 6d 20 61 6e 64 20 68 61 76 65 20 6e 6f 20 73 70  m and have no sp
e440: 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67 2c 20 6f  ecial meaning, o
e450: 74 68 65 72 0a 2a 2a 20 74 68 61 6e 20 62 65 69  ther.** than bei
e460: 6e 67 20 64 69 73 74 69 6e 63 74 20 66 72 6f 6d  ng distinct from
e470: 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2e 0a 2a 2f   one another..*/
e480: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e490: 4d 41 47 49 43 5f 4f 50 45 4e 20 20 20 20 20 30  MAGIC_OPEN     0
e4a0: 78 61 30 32 39 61 36 39 37 20 20 2f 2a 20 44 61  xa029a697  /* Da
e4b0: 74 61 62 61 73 65 20 69 73 20 6f 70 65 6e 20 2a  tabase is open *
e4c0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e4d0: 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44 20 20 20  _MAGIC_CLOSED   
e4e0: 30 78 39 66 33 63 32 64 33 33 20 20 2f 2a 20 44  0x9f3c2d33  /* D
e4f0: 61 74 61 62 61 73 65 20 69 73 20 63 6c 6f 73 65  atabase is close
e500: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  d */.#define SQL
e510: 49 54 45 5f 4d 41 47 49 43 5f 53 49 43 4b 20 20  ITE_MAGIC_SICK  
e520: 20 20 20 30 78 34 62 37 37 31 32 39 30 20 20 2f     0x4b771290  /
e530: 2a 20 45 72 72 6f 72 20 61 6e 64 20 61 77 61 69  * Error and awai
e540: 74 69 6e 67 20 63 6c 6f 73 65 20 2a 2f 0a 23 64  ting close */.#d
e550: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47  efine SQLITE_MAG
e560: 49 43 5f 42 55 53 59 20 20 20 20 20 30 78 66 30  IC_BUSY     0xf0
e570: 33 62 37 39 30 36 20 20 2f 2a 20 44 61 74 61 62  3b7906  /* Datab
e580: 61 73 65 20 63 75 72 72 65 6e 74 6c 79 20 69 6e  ase currently in
e590: 20 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20   use */.#define 
e5a0: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 45 52 52  SQLITE_MAGIC_ERR
e5b0: 4f 52 20 20 20 20 30 78 62 35 33 35 37 39 33 30  OR    0xb5357930
e5c0: 20 20 2f 2a 20 41 6e 20 53 51 4c 49 54 45 5f 4d    /* An SQLITE_M
e5d0: 49 53 55 53 45 20 65 72 72 6f 72 20 6f 63 63 75  ISUSE error occu
e5e0: 72 72 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rred */.#define 
e5f0: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 5a 4f 4d  SQLITE_MAGIC_ZOM
e600: 42 49 45 20 20 20 30 78 36 34 63 66 66 63 37 66  BIE   0x64cffc7f
e610: 20 20 2f 2a 20 43 6c 6f 73 65 20 77 69 74 68 20    /* Close with 
e620: 6c 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20 63  last statement c
e630: 6c 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45  lose */../*.** E
e640: 61 63 68 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  ach SQL function
e650: 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61   is defined by a
e660: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
e670: 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73  e following.** s
e680: 74 72 75 63 74 75 72 65 2e 20 20 46 6f 72 20 67  tructure.  For g
e690: 6c 6f 62 61 6c 20 62 75 69 6c 74 2d 69 6e 20 66  lobal built-in f
e6a0: 75 6e 63 74 69 6f 6e 73 20 28 65 78 3a 20 73 75  unctions (ex: su
e6b0: 62 73 74 72 28 29 2c 20 6d 61 78 28 29 2c 20 63  bstr(), max(), c
e6c0: 6f 75 6e 74 28 29 29 0a 2a 2a 20 61 20 70 6f 69  ount()).** a poi
e6d0: 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73 74 72  nter to this str
e6e0: 75 63 74 75 72 65 20 69 73 20 68 65 6c 64 20 69  ucture is held i
e6f0: 6e 20 74 68 65 20 73 71 6c 69 74 65 33 42 75 69  n the sqlite3Bui
e700: 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 20 6f 62  ltinFunctions ob
e710: 6a 65 63 74 2e 0a 2a 2a 20 46 6f 72 20 70 65 72  ject..** For per
e720: 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 70 70 6c  -connection appl
e730: 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64 20  ication-defined 
e740: 66 75 6e 63 74 69 6f 6e 73 2c 20 61 20 70 6f 69  functions, a poi
e750: 6e 74 65 72 20 74 6f 20 74 68 69 73 0a 2a 2a 20  nter to this.** 
e760: 73 74 72 75 63 74 75 72 65 20 69 73 20 68 65 6c  structure is hel
e770: 64 20 69 6e 20 74 68 65 20 64 62 2d 3e 61 48 61  d in the db->aHa
e780: 73 68 20 68 61 73 68 20 74 61 62 6c 65 2e 0a 2a  sh hash table..*
e790: 2a 0a 2a 2a 20 54 68 65 20 75 2e 70 48 61 73 68  *.** The u.pHash
e7a0: 20 66 69 65 6c 64 20 69 73 20 75 73 65 64 20 62   field is used b
e7b0: 79 20 74 68 65 20 67 6c 6f 62 61 6c 20 62 75 69  y the global bui
e7c0: 6c 74 2d 69 6e 73 2e 20 20 54 68 65 20 75 2e 70  lt-ins.  The u.p
e7d0: 44 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 66 69  Destructor.** fi
e7e0: 65 6c 64 20 69 73 20 75 73 65 64 20 62 79 20 70  eld is used by p
e7f0: 65 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 70  er-connection ap
e800: 70 2d 64 65 66 20 66 75 6e 63 74 69 6f 6e 73 2e  p-def functions.
e810: 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44  .*/.struct FuncD
e820: 65 66 20 7b 0a 20 20 69 38 20 6e 41 72 67 3b 20  ef {.  i8 nArg; 
e830: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
e840: 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
e850: 74 73 2e 20 20 2d 31 20 6d 65 61 6e 73 20 75 6e  ts.  -1 means un
e860: 6c 69 6d 69 74 65 64 20 2a 2f 0a 20 20 75 31 36  limited */.  u16
e870: 20 66 75 6e 63 46 6c 61 67 73 3b 20 20 20 20 20   funcFlags;     
e880: 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 62 69 6e    /* Some combin
e890: 61 74 69 6f 6e 20 6f 66 20 53 51 4c 49 54 45 5f  ation of SQLITE_
e8a0: 46 55 4e 43 5f 2a 20 2a 2f 0a 20 20 76 6f 69 64  FUNC_* */.  void
e8b0: 20 2a 70 55 73 65 72 44 61 74 61 3b 20 20 20 20   *pUserData;    
e8c0: 20 2f 2a 20 55 73 65 72 20 64 61 74 61 20 70 61   /* User data pa
e8d0: 72 61 6d 65 74 65 72 20 2a 2f 0a 20 20 46 75 6e  rameter */.  Fun
e8e0: 63 44 65 66 20 2a 70 4e 65 78 74 3b 20 20 20 20  cDef *pNext;    
e8f0: 20 20 2f 2a 20 4e 65 78 74 20 66 75 6e 63 74 69    /* Next functi
e900: 6f 6e 20 77 69 74 68 20 73 61 6d 65 20 6e 61 6d  on with same nam
e910: 65 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53  e */.  void (*xS
e920: 46 75 6e 63 29 28 73 71 6c 69 74 65 33 5f 63 6f  Func)(sqlite3_co
e930: 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
e940: 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20  e3_value**); /* 
e950: 66 75 6e 63 20 6f 72 20 61 67 67 2d 73 74 65 70  func or agg-step
e960: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 46 69   */.  void (*xFi
e970: 6e 61 6c 69 7a 65 29 28 73 71 6c 69 74 65 33 5f  nalize)(sqlite3_
e980: 63 6f 6e 74 65 78 74 2a 29 3b 20 20 20 20 20 20  context*);      
e990: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
e9a0: 67 67 20 66 69 6e 61 6c 69 7a 65 72 20 2a 2f 0a  gg finalizer */.
e9b0: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e    const char *zN
e9c0: 61 6d 65 3b 20 20 20 2f 2a 20 53 51 4c 20 6e 61  ame;   /* SQL na
e9d0: 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  me of the functi
e9e0: 6f 6e 2e 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  on. */.  union {
e9f0: 0a 20 20 20 20 46 75 6e 63 44 65 66 20 2a 70 48  .    FuncDef *pH
ea00: 61 73 68 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78  ash;      /* Nex
ea10: 74 20 77 69 74 68 20 61 20 64 69 66 66 65 72 65  t with a differe
ea20: 6e 74 20 6e 61 6d 65 20 62 75 74 20 74 68 65 20  nt name but the 
ea30: 73 61 6d 65 20 68 61 73 68 20 2a 2f 0a 20 20 20  same hash */.   
ea40: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20   FuncDestructor 
ea50: 2a 70 44 65 73 74 72 75 63 74 6f 72 3b 20 20 20  *pDestructor;   
ea60: 2f 2a 20 52 65 66 65 72 65 6e 63 65 20 63 6f 75  /* Reference cou
ea70: 6e 74 65 64 20 64 65 73 74 72 75 63 74 6f 72 20  nted destructor 
ea80: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 7d 20  function */.  } 
ea90: 75 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69  u;.};../*.** Thi
eaa0: 73 20 73 74 72 75 63 74 75 72 65 20 65 6e 63 61  s structure enca
eab0: 70 73 75 6c 61 74 65 73 20 61 20 75 73 65 72 2d  psulates a user-
eac0: 66 75 6e 63 74 69 6f 6e 20 64 65 73 74 72 75 63  function destruc
ead0: 74 6f 72 20 63 61 6c 6c 62 61 63 6b 20 28 61 73  tor callback (as
eae0: 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 75  .** configured u
eaf0: 73 69 6e 67 20 63 72 65 61 74 65 5f 66 75 6e 63  sing create_func
eb00: 74 69 6f 6e 5f 76 32 28 29 29 20 61 6e 64 20 61  tion_v2()) and a
eb10: 20 72 65 66 65 72 65 6e 63 65 20 63 6f 75 6e 74   reference count
eb20: 65 72 2e 20 57 68 65 6e 0a 2a 2a 20 63 72 65 61  er. When.** crea
eb30: 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29  te_function_v2()
eb40: 20 69 73 20 63 61 6c 6c 65 64 20 74 6f 20 63 72   is called to cr
eb50: 65 61 74 65 20 61 20 66 75 6e 63 74 69 6f 6e 20  eate a function 
eb60: 77 69 74 68 20 61 20 64 65 73 74 72 75 63 74 6f  with a destructo
eb70: 72 2c 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20 6f  r,.** a single o
eb80: 62 6a 65 63 74 20 6f 66 20 74 68 69 73 20 74 79  bject of this ty
eb90: 70 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 2e  pe is allocated.
eba0: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 2e   FuncDestructor.
ebb0: 6e 52 65 66 20 69 73 20 73 65 74 20 74 6f 0a 2a  nRef is set to.*
ebc0: 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  * the number of 
ebd0: 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20  FuncDef objects 
ebe0: 63 72 65 61 74 65 64 20 28 65 69 74 68 65 72 20  created (either 
ebf0: 31 20 6f 72 20 33 2c 20 64 65 70 65 6e 64 69 6e  1 or 3, dependin
ec00: 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20  g on whether.** 
ec10: 6f 72 20 6e 6f 74 20 74 68 65 20 73 70 65 63 69  or not the speci
ec20: 66 69 65 64 20 65 6e 63 6f 64 69 6e 67 20 69 73  fied encoding is
ec30: 20 53 51 4c 49 54 45 5f 41 4e 59 29 2e 20 54 68   SQLITE_ANY). Th
ec40: 65 20 46 75 6e 63 44 65 66 2e 70 44 65 73 74 72  e FuncDef.pDestr
ec50: 75 63 74 6f 72 0a 2a 2a 20 6d 65 6d 62 65 72 20  uctor.** member 
ec60: 6f 66 20 65 61 63 68 20 6f 66 20 74 68 65 20 6e  of each of the n
ec70: 65 77 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63  ew FuncDef objec
ec80: 74 73 20 69 73 20 73 65 74 20 74 6f 20 70 6f 69  ts is set to poi
ec90: 6e 74 20 74 6f 20 74 68 65 20 61 6c 6c 6f 63 61  nt to the alloca
eca0: 74 65 64 0a 2a 2a 20 46 75 6e 63 44 65 73 74 72  ted.** FuncDestr
ecb0: 75 63 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  uctor..**.** The
ecc0: 72 65 61 66 74 65 72 2c 20 77 68 65 6e 20 6f 6e  reafter, when on
ecd0: 65 20 6f 66 20 74 68 65 20 46 75 6e 63 44 65 66  e of the FuncDef
ece0: 20 6f 62 6a 65 63 74 73 20 69 73 20 64 65 6c 65   objects is dele
ecf0: 74 65 64 2c 20 74 68 65 20 72 65 66 65 72 65 6e  ted, the referen
ed00: 63 65 0a 2a 2a 20 63 6f 75 6e 74 20 6f 6e 20 74  ce.** count on t
ed10: 68 69 73 20 6f 62 6a 65 63 74 20 69 73 20 64 65  his object is de
ed20: 63 72 65 6d 65 6e 74 65 64 2e 20 57 68 65 6e 20  cremented. When 
ed30: 69 74 20 72 65 61 63 68 65 73 20 30 2c 20 74 68  it reaches 0, th
ed40: 65 20 64 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20  e destructor.** 
ed50: 69 73 20 69 6e 76 6f 6b 65 64 20 61 6e 64 20 74  is invoked and t
ed60: 68 65 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  he FuncDestructo
ed70: 72 20 73 74 72 75 63 74 75 72 65 20 66 72 65 65  r structure free
ed80: 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e  d..*/.struct Fun
ed90: 63 44 65 73 74 72 75 63 74 6f 72 20 7b 0a 20 20  cDestructor {.  
eda0: 69 6e 74 20 6e 52 65 66 3b 0a 20 20 76 6f 69 64  int nRef;.  void
edb0: 20 28 2a 78 44 65 73 74 72 6f 79 29 28 76 6f 69   (*xDestroy)(voi
edc0: 64 20 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70 55  d *);.  void *pU
edd0: 73 65 72 44 61 74 61 3b 0a 7d 3b 0a 0a 2f 2a 0a  serData;.};../*.
ede0: 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75  ** Possible valu
edf0: 65 73 20 66 6f 72 20 46 75 6e 63 44 65 66 2e 66  es for FuncDef.f
ee00: 6c 61 67 73 2e 20 20 4e 6f 74 65 20 74 68 61 74  lags.  Note that
ee10: 20 74 68 65 20 5f 4c 45 4e 47 54 48 20 61 6e 64   the _LENGTH and
ee20: 20 5f 54 59 50 45 4f 46 0a 2a 2a 20 76 61 6c 75   _TYPEOF.** valu
ee30: 65 73 20 6d 75 73 74 20 63 6f 72 72 65 73 70 6f  es must correspo
ee40: 6e 64 20 74 6f 20 4f 50 46 4c 41 47 5f 4c 45 4e  nd to OPFLAG_LEN
ee50: 47 54 48 41 52 47 20 61 6e 64 20 4f 50 46 4c 41  GTHARG and OPFLA
ee60: 47 5f 54 59 50 45 4f 46 41 52 47 2e 20 20 41 6e  G_TYPEOFARG.  An
ee70: 64 0a 2a 2a 20 53 51 4c 49 54 45 5f 46 55 4e 43  d.** SQLITE_FUNC
ee80: 5f 43 4f 4e 53 54 41 4e 54 20 6d 75 73 74 20 62  _CONSTANT must b
ee90: 65 20 74 68 65 20 73 61 6d 65 20 61 73 20 53 51  e the same as SQ
eea0: 4c 49 54 45 5f 44 45 54 45 52 4d 49 4e 49 53 54  LITE_DETERMINIST
eeb0: 49 43 2e 20 20 54 68 65 72 65 0a 2a 2a 20 61 72  IC.  There.** ar
eec0: 65 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65  e assert() state
eed0: 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 63 6f 64  ments in the cod
eee0: 65 20 74 6f 20 76 65 72 69 66 79 20 74 68 69 73  e to verify this
eef0: 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f  ..**.** Value co
ef00: 6e 73 74 72 61 69 6e 74 73 20 28 65 6e 66 6f 72  nstraints (enfor
ef10: 63 65 64 20 76 69 61 20 61 73 73 65 72 74 28 29  ced via assert()
ef20: 29 3a 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45  ):.**     SQLITE
ef30: 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 20 20 20 20  _FUNC_MINMAX    
ef40: 3d 3d 20 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67  ==  NC_MinMaxAgg
ef50: 20 20 20 20 20 20 3d 3d 20 53 46 5f 4d 69 6e 4d        == SF_MinM
ef60: 61 78 41 67 67 0a 2a 2a 20 20 20 20 20 53 51 4c  axAgg.**     SQL
ef70: 49 54 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 20  ITE_FUNC_LENGTH 
ef80: 20 20 20 3d 3d 20 20 4f 50 46 4c 41 47 5f 4c 45     ==  OPFLAG_LE
ef90: 4e 47 54 48 41 52 47 0a 2a 2a 20 20 20 20 20 53  NGTHARG.**     S
efa0: 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59 50 45 4f  QLITE_FUNC_TYPEO
efb0: 46 20 20 20 20 3d 3d 20 20 4f 50 46 4c 41 47 5f  F    ==  OPFLAG_
efc0: 54 59 50 45 4f 46 41 52 47 0a 2a 2a 20 20 20 20  TYPEOFARG.**    
efd0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
efe0: 53 54 41 4e 54 20 20 3d 3d 20 20 53 51 4c 49 54  STANT  ==  SQLIT
eff0: 45 5f 44 45 54 45 52 4d 49 4e 49 53 54 49 43 20  E_DETERMINISTIC 
f000: 66 72 6f 6d 20 74 68 65 20 41 50 49 0a 2a 2a 20  from the API.** 
f010: 20 20 20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f      SQLITE_FUNC_
f020: 45 4e 43 4d 41 53 4b 20 20 20 64 65 70 65 6e 64  ENCMASK   depend
f030: 73 20 6f 6e 20 53 51 4c 49 54 45 5f 55 54 46 2a  s on SQLITE_UTF*
f040: 20 6d 61 63 72 6f 73 20 69 6e 20 74 68 65 20 41   macros in the A
f050: 50 49 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  PI.*/.#define SQ
f060: 4c 49 54 45 5f 46 55 4e 43 5f 45 4e 43 4d 41 53  LITE_FUNC_ENCMAS
f070: 4b 20 20 30 78 30 30 30 33 20 2f 2a 20 53 51 4c  K  0x0003 /* SQL
f080: 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45  ITE_UTF8, SQLITE
f090: 5f 55 54 46 31 36 42 45 20 6f 72 20 55 54 46 31  _UTF16BE or UTF1
f0a0: 36 4c 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  6LE */.#define S
f0b0: 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 49 4b 45 20  QLITE_FUNC_LIKE 
f0c0: 20 20 20 20 30 78 30 30 30 34 20 2f 2a 20 43 61      0x0004 /* Ca
f0d0: 6e 64 69 64 61 74 65 20 66 6f 72 20 74 68 65 20  ndidate for the 
f0e0: 4c 49 4b 45 20 6f 70 74 69 6d 69 7a 61 74 69 6f  LIKE optimizatio
f0f0: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
f100: 49 54 45 5f 46 55 4e 43 5f 43 41 53 45 20 20 20  ITE_FUNC_CASE   
f110: 20 20 30 78 30 30 30 38 20 2f 2a 20 43 61 73 65    0x0008 /* Case
f120: 2d 73 65 6e 73 69 74 69 76 65 20 4c 49 4b 45 2d  -sensitive LIKE-
f130: 74 79 70 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  type function */
f140: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
f150: 46 55 4e 43 5f 45 50 48 45 4d 20 20 20 20 30 78  FUNC_EPHEM    0x
f160: 30 30 31 30 20 2f 2a 20 45 70 68 65 6d 65 72 61  0010 /* Ephemera
f170: 6c 2e 20 20 44 65 6c 65 74 65 20 77 69 74 68 20  l.  Delete with 
f180: 56 44 42 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  VDBE */.#define 
f190: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
f1a0: 43 4f 4c 4c 20 30 78 30 30 32 30 20 2f 2a 20 73  COLL 0x0020 /* s
f1b0: 71 6c 69 74 65 33 47 65 74 46 75 6e 63 43 6f 6c  qlite3GetFuncCol
f1c0: 6c 53 65 71 28 29 20 6d 69 67 68 74 20 62 65 20  lSeq() might be 
f1d0: 63 61 6c 6c 65 64 2a 2f 0a 23 64 65 66 69 6e 65  called*/.#define
f1e0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e   SQLITE_FUNC_LEN
f1f0: 47 54 48 20 20 20 30 78 30 30 34 30 20 2f 2a 20  GTH   0x0040 /* 
f200: 42 75 69 6c 74 2d 69 6e 20 6c 65 6e 67 74 68 28  Built-in length(
f210: 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  ) function */.#d
f220: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
f230: 43 5f 54 59 50 45 4f 46 20 20 20 30 78 30 30 38  C_TYPEOF   0x008
f240: 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 74 79  0 /* Built-in ty
f250: 70 65 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 20  peof() function 
f260: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
f270: 45 5f 46 55 4e 43 5f 43 4f 55 4e 54 20 20 20 20  E_FUNC_COUNT    
f280: 30 78 30 31 30 30 20 2f 2a 20 42 75 69 6c 74 2d  0x0100 /* Built-
f290: 69 6e 20 63 6f 75 6e 74 28 2a 29 20 61 67 67 72  in count(*) aggr
f2a0: 65 67 61 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65  egate */.#define
f2b0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 41   SQLITE_FUNC_COA
f2c0: 4c 45 53 43 45 20 30 78 30 32 30 30 20 2f 2a 20  LESCE 0x0200 /* 
f2d0: 42 75 69 6c 74 2d 69 6e 20 63 6f 61 6c 65 73 63  Built-in coalesc
f2e0: 65 28 29 20 6f 72 20 69 66 6e 75 6c 6c 28 29 20  e() or ifnull() 
f2f0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
f300: 45 5f 46 55 4e 43 5f 55 4e 4c 49 4b 45 4c 59 20  E_FUNC_UNLIKELY 
f310: 30 78 30 34 30 30 20 2f 2a 20 42 75 69 6c 74 2d  0x0400 /* Built-
f320: 69 6e 20 75 6e 6c 69 6b 65 6c 79 28 29 20 66 75  in unlikely() fu
f330: 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
f340: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  e SQLITE_FUNC_CO
f350: 4e 53 54 41 4e 54 20 30 78 30 38 30 30 20 2f 2a  NSTANT 0x0800 /*
f360: 20 43 6f 6e 73 74 61 6e 74 20 69 6e 70 75 74 73   Constant inputs
f370: 20 67 69 76 65 20 61 20 63 6f 6e 73 74 61 6e 74   give a constant
f380: 20 6f 75 74 70 75 74 20 2a 2f 0a 23 64 65 66 69   output */.#defi
f390: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d  ne SQLITE_FUNC_M
f3a0: 49 4e 4d 41 58 20 20 20 30 78 31 30 30 30 20 2f  INMAX   0x1000 /
f3b0: 2a 20 54 72 75 65 20 66 6f 72 20 6d 69 6e 28 29  * True for min()
f3c0: 20 61 6e 64 20 6d 61 78 28 29 20 61 67 67 72 65   and max() aggre
f3d0: 67 61 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  gates */.#define
f3e0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f   SQLITE_FUNC_SLO
f3f0: 43 48 4e 47 20 20 30 78 32 30 30 30 20 2f 2a 20  CHNG  0x2000 /* 
f400: 22 53 6c 6f 77 20 43 68 61 6e 67 65 22 2e 20 56  "Slow Change". V
f410: 61 6c 75 65 20 63 6f 6e 73 74 61 6e 74 20 64 75  alue constant du
f420: 72 69 6e 67 20 61 0a 20 20 20 20 20 20 20 20 20  ring a.         
f430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f440: 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 73 69             ** si
f450: 6e 67 6c 65 20 71 75 65 72 79 20 2d 20 6d 69 67  ngle query - mig
f460: 68 74 20 63 68 61 6e 67 65 20 6f 76 65 72 20 74  ht change over t
f470: 69 6d 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ime */.#define S
f480: 51 4c 49 54 45 5f 46 55 4e 43 5f 41 46 46 49 4e  QLITE_FUNC_AFFIN
f490: 49 54 59 20 30 78 34 30 30 30 20 2f 2a 20 42 75  ITY 0x4000 /* Bu
f4a0: 69 6c 74 2d 69 6e 20 61 66 66 69 6e 69 74 79 28  ilt-in affinity(
f4b0: 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 0a 2f  ) function */../
f4c0: 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
f4d0: 6e 67 20 74 68 72 65 65 20 6d 61 63 72 6f 73 2c  ng three macros,
f4e0: 20 46 55 4e 43 54 49 4f 4e 28 29 2c 20 4c 49 4b   FUNCTION(), LIK
f4f0: 45 46 55 4e 43 28 29 20 61 6e 64 20 41 47 47 52  EFUNC() and AGGR
f500: 45 47 41 54 45 28 29 20 61 72 65 0a 2a 2a 20 75  EGATE() are.** u
f510: 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 74 68  sed to create th
f520: 65 20 69 6e 69 74 69 61 6c 69 7a 65 72 73 20 66  e initializers f
f530: 6f 72 20 74 68 65 20 46 75 6e 63 44 65 66 20 73  or the FuncDef s
f540: 74 72 75 63 74 75 72 65 73 2e 0a 2a 2a 0a 2a 2a  tructures..**.**
f550: 20 20 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d     FUNCTION(zNam
f560: 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
f570: 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20  NC, xFunc).**   
f580: 20 20 55 73 65 64 20 74 6f 20 63 72 65 61 74 65    Used to create
f590: 20 61 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69   a scalar functi
f5a0: 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66  on definition of
f5b0: 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d   a function zNam
f5c0: 65 0a 2a 2a 20 20 20 20 20 69 6d 70 6c 65 6d 65  e.**     impleme
f5d0: 6e 74 65 64 20 62 79 20 43 20 66 75 6e 63 74 69  nted by C functi
f5e0: 6f 6e 20 78 46 75 6e 63 20 74 68 61 74 20 61 63  on xFunc that ac
f5f0: 63 65 70 74 73 20 6e 41 72 67 20 61 72 67 75 6d  cepts nArg argum
f600: 65 6e 74 73 2e 20 54 68 65 0a 2a 2a 20 20 20 20  ents. The.**    
f610: 20 76 61 6c 75 65 20 70 61 73 73 65 64 20 61 73   value passed as
f620: 20 69 41 72 67 20 69 73 20 63 61 73 74 20 74 6f   iArg is cast to
f630: 20 61 20 28 76 6f 69 64 2a 29 20 61 6e 64 20 6d   a (void*) and m
f640: 61 64 65 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a  ade available.**
f650: 20 20 20 20 20 61 73 20 74 68 65 20 75 73 65 72       as the user
f660: 2d 64 61 74 61 20 28 73 71 6c 69 74 65 33 5f 75  -data (sqlite3_u
f670: 73 65 72 5f 64 61 74 61 28 29 29 20 66 6f 72 20  ser_data()) for 
f680: 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 49 66  the function. If
f690: 0a 2a 2a 20 20 20 20 20 61 72 67 75 6d 65 6e 74  .**     argument
f6a0: 20 62 4e 43 20 69 73 20 74 72 75 65 2c 20 74 68   bNC is true, th
f6b0: 65 6e 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55  en the SQLITE_FU
f6c0: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 66 6c 61 67  NC_NEEDCOLL flag
f6d0: 20 69 73 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20   is set..**.**  
f6e0: 20 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65   VFUNCTION(zName
f6f0: 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
f700: 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20  C, xFunc).**    
f710: 20 4c 69 6b 65 20 46 55 4e 43 54 49 4f 4e 20 65   Like FUNCTION e
f720: 78 63 65 70 74 20 69 74 20 6f 6d 69 74 73 20 74  xcept it omits t
f730: 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  he SQLITE_FUNC_C
f740: 4f 4e 53 54 41 4e 54 20 66 6c 61 67 2e 0a 2a 2a  ONSTANT flag..**
f750: 0a 2a 2a 20 20 20 44 46 55 4e 43 54 49 4f 4e 28  .**   DFUNCTION(
f760: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
f770: 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a  g, bNC, xFunc).*
f780: 2a 20 20 20 20 20 4c 69 6b 65 20 46 55 4e 43 54  *     Like FUNCT
f790: 49 4f 4e 20 65 78 63 65 70 74 20 69 74 20 6f 6d  ION except it om
f7a0: 69 74 73 20 74 68 65 20 53 51 4c 49 54 45 5f 46  its the SQLITE_F
f7b0: 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66 6c 61  UNC_CONSTANT fla
f7c0: 67 20 61 6e 64 0a 2a 2a 20 20 20 20 20 61 64 64  g and.**     add
f7d0: 73 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e  s the SQLITE_FUN
f7e0: 43 5f 53 4c 4f 43 48 4e 47 20 66 6c 61 67 2e 20  C_SLOCHNG flag. 
f7f0: 20 55 73 65 64 20 66 6f 72 20 64 61 74 65 20 26   Used for date &
f800: 20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 0a   time functions.
f810: 2a 2a 20 20 20 20 20 61 6e 64 20 66 75 6e 63 74  **     and funct
f820: 69 6f 6e 73 20 6c 69 6b 65 20 73 71 6c 69 74 65  ions like sqlite
f830: 5f 76 65 72 73 69 6f 6e 28 29 20 74 68 61 74 20  _version() that 
f840: 63 61 6e 20 63 68 61 6e 67 65 2c 20 62 75 74 20  can change, but 
f850: 6e 6f 74 20 64 75 72 69 6e 67 0a 2a 2a 20 20 20  not during.**   
f860: 20 20 61 20 73 69 6e 67 6c 65 20 71 75 65 72 79    a single query
f870: 2e 20 20 54 68 65 20 69 41 72 67 20 69 73 20 69  .  The iArg is i
f880: 67 6e 6f 72 65 64 2e 20 20 54 68 65 20 75 73 65  gnored.  The use
f890: 72 2d 64 61 74 61 20 69 73 20 61 6c 77 61 79 73  r-data is always
f8a0: 20 73 65 74 0a 2a 2a 20 20 20 20 20 74 6f 20 61   set.**     to a
f8b0: 20 4e 55 4c 4c 20 70 6f 69 6e 74 65 72 2e 20 20   NULL pointer.  
f8c0: 54 68 65 20 62 4e 43 20 70 61 72 61 6d 65 74 65  The bNC paramete
f8d0: 72 20 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a  r is not used..*
f8e0: 2a 0a 2a 2a 20 20 20 50 55 52 45 5f 44 41 54 45  *.**   PURE_DATE
f8f0: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
f900: 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a  rg, bNC, xFunc).
f910: 2a 2a 20 20 20 20 20 55 73 65 64 20 66 6f 72 20  **     Used for 
f920: 22 70 75 72 65 22 20 64 61 74 65 2f 74 69 6d 65  "pure" date/time
f930: 20 66 75 6e 63 74 69 6f 6e 73 2c 20 74 68 69 73   functions, this
f940: 20 6d 61 63 72 6f 20 69 73 20 6c 69 6b 65 20 44   macro is like D
f950: 46 55 4e 43 54 49 4f 4e 0a 2a 2a 20 20 20 20 20  FUNCTION.**     
f960: 65 78 63 65 70 74 20 74 68 61 74 20 69 74 20 64  except that it d
f970: 6f 65 73 20 73 65 74 20 74 68 65 20 53 51 4c 49  oes set the SQLI
f980: 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
f990: 20 66 6c 61 67 73 2e 20 20 69 41 72 67 20 69 73   flags.  iArg is
f9a0: 0a 2a 2a 20 20 20 20 20 69 67 6e 6f 72 65 64 20  .**     ignored 
f9b0: 61 6e 64 20 74 68 65 20 75 73 65 72 2d 64 61 74  and the user-dat
f9c0: 61 20 66 6f 72 20 74 68 65 73 65 20 66 75 6e 63  a for these func
f9d0: 74 69 6f 6e 73 20 69 73 20 73 65 74 20 74 6f 20  tions is set to 
f9e0: 61 6e 20 0a 2a 2a 20 20 20 20 20 61 72 62 69 74  an .**     arbit
f9f0: 72 61 72 79 20 6e 6f 6e 2d 4e 55 4c 4c 20 70 6f  rary non-NULL po
fa00: 69 6e 74 65 72 2e 20 20 54 68 65 20 62 4e 43 20  inter.  The bNC 
fa10: 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e 6f 74  parameter is not
fa20: 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 20 20 41   used..**.**   A
fa30: 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20  GGREGATE(zName, 
fa40: 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
fa50: 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 29 0a   xStep, xFinal).
fa60: 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63  **     Used to c
fa70: 72 65 61 74 65 20 61 6e 20 61 67 67 72 65 67 61  reate an aggrega
fa80: 74 65 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69  te function defi
fa90: 6e 69 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74  nition implement
faa0: 65 64 20 62 79 0a 2a 2a 20 20 20 20 20 74 68 65  ed by.**     the
fab0: 20 43 20 66 75 6e 63 74 69 6f 6e 73 20 78 53 74   C functions xSt
fac0: 65 70 20 61 6e 64 20 78 46 69 6e 61 6c 2e 20 54  ep and xFinal. T
fad0: 68 65 20 66 69 72 73 74 20 66 6f 75 72 20 70 61  he first four pa
fae0: 72 61 6d 65 74 65 72 73 0a 2a 2a 20 20 20 20 20  rameters.**     
faf0: 61 72 65 20 69 6e 74 65 72 70 72 65 74 65 64 20  are interpreted 
fb00: 69 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79 20  in the same way 
fb10: 61 73 20 74 68 65 20 66 69 72 73 74 20 34 20 70  as the first 4 p
fb20: 61 72 61 6d 65 74 65 72 73 20 74 6f 0a 2a 2a 20  arameters to.** 
fb30: 20 20 20 20 46 55 4e 43 54 49 4f 4e 28 29 2e 0a      FUNCTION()..
fb40: 2a 2a 0a 2a 2a 20 20 20 4c 49 4b 45 46 55 4e 43  **.**   LIKEFUNC
fb50: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41  (zName, nArg, pA
fb60: 72 67 2c 20 66 6c 61 67 73 29 0a 2a 2a 20 20 20  rg, flags).**   
fb70: 20 20 55 73 65 64 20 74 6f 20 63 72 65 61 74 65    Used to create
fb80: 20 61 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69   a scalar functi
fb90: 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66  on definition of
fba0: 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d   a function zNam
fbb0: 65 0a 2a 2a 20 20 20 20 20 74 68 61 74 20 61 63  e.**     that ac
fbc0: 63 65 70 74 73 20 6e 41 72 67 20 61 72 67 75 6d  cepts nArg argum
fbd0: 65 6e 74 73 20 61 6e 64 20 69 73 20 69 6d 70 6c  ents and is impl
fbe0: 65 6d 65 6e 74 65 64 20 62 79 20 61 20 63 61 6c  emented by a cal
fbf0: 6c 20 74 6f 20 43 0a 2a 2a 20 20 20 20 20 66 75  l to C.**     fu
fc00: 6e 63 74 69 6f 6e 20 6c 69 6b 65 46 75 6e 63 2e  nction likeFunc.
fc10: 20 41 72 67 75 6d 65 6e 74 20 70 41 72 67 20 69   Argument pArg i
fc20: 73 20 63 61 73 74 20 74 6f 20 61 20 28 76 6f 69  s cast to a (voi
fc30: 64 20 2a 29 20 61 6e 64 20 6d 61 64 65 0a 2a 2a  d *) and made.**
fc40: 20 20 20 20 20 61 76 61 69 6c 61 62 6c 65 20 61       available a
fc50: 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 75  s the function u
fc60: 73 65 72 2d 64 61 74 61 20 28 73 71 6c 69 74 65  ser-data (sqlite
fc70: 33 5f 75 73 65 72 5f 64 61 74 61 28 29 29 2e 20  3_user_data()). 
fc80: 54 68 65 0a 2a 2a 20 20 20 20 20 46 75 6e 63 44  The.**     FuncD
fc90: 65 66 2e 66 6c 61 67 73 20 76 61 72 69 61 62 6c  ef.flags variabl
fca0: 65 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20  e is set to the 
fcb0: 76 61 6c 75 65 20 70 61 73 73 65 64 20 61 73 20  value passed as 
fcc0: 74 68 65 20 66 6c 61 67 73 0a 2a 2a 20 20 20 20  the flags.**    
fcd0: 20 70 61 72 61 6d 65 74 65 72 2e 0a 2a 2f 0a 23   parameter..*/.#
fce0: 64 65 66 69 6e 65 20 46 55 4e 43 54 49 4f 4e 28  define FUNCTION(
fcf0: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
fd00: 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c  g, bNC, xFunc) \
fd10: 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45  .  {nArg, SQLITE
fd20: 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53  _FUNC_CONSTANT|S
fd30: 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a  QLITE_UTF8|(bNC*
fd40: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
fd50: 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49  COLL), \.   SQLI
fd60: 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41  TE_INT_TO_PTR(iA
fd70: 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30  rg), 0, xFunc, 0
fd80: 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a  , #zName, {0} }.
fd90: 23 64 65 66 69 6e 65 20 56 46 55 4e 43 54 49 4f  #define VFUNCTIO
fda0: 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69  N(zName, nArg, i
fdb0: 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29  Arg, bNC, xFunc)
fdc0: 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
fdd0: 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c  TE_UTF8|(bNC*SQL
fde0: 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
fdf0: 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f  L), \.   SQLITE_
fe00: 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29  INT_TO_PTR(iArg)
fe10: 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 23  , 0, xFunc, 0, #
fe20: 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65  zName, {0} }.#de
fe30: 66 69 6e 65 20 44 46 55 4e 43 54 49 4f 4e 28 7a  fine DFUNCTION(z
fe40: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67  Name, nArg, iArg
fe50: 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a  , bNC, xFunc) \.
fe60: 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
fe70: 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c  FUNC_SLOCHNG|SQL
fe80: 49 54 45 5f 55 54 46 38 2c 20 5c 0a 20 20 20 30  ITE_UTF8, \.   0
fe90: 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 23  , 0, xFunc, 0, #
fea0: 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65  zName, {0} }.#de
feb0: 66 69 6e 65 20 50 55 52 45 5f 44 41 54 45 28 7a  fine PURE_DATE(z
fec0: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67  Name, nArg, iArg
fed0: 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a  , bNC, xFunc) \.
fee0: 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
fef0: 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c  FUNC_SLOCHNG|SQL
ff00: 49 54 45 5f 55 54 46 38 7c 53 51 4c 49 54 45 5f  ITE_UTF8|SQLITE_
ff10: 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 2c 20 5c  FUNC_CONSTANT, \
ff20: 0a 20 20 20 28 76 6f 69 64 2a 29 26 73 71 6c 69  .   (void*)&sqli
ff30: 74 65 33 43 6f 6e 66 69 67 2c 20 30 2c 20 78 46  te3Config, 0, xF
ff40: 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20  unc, 0, #zName, 
ff50: 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 46 55  {0} }.#define FU
ff60: 4e 43 54 49 4f 4e 32 28 7a 4e 61 6d 65 2c 20 6e  NCTION2(zName, n
ff70: 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
ff80: 78 46 75 6e 63 2c 20 65 78 74 72 61 46 6c 61 67  xFunc, extraFlag
ff90: 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 53 51 4c  s) \.  {nArg,SQL
ffa0: 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
ffb0: 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62  T|SQLITE_UTF8|(b
ffc0: 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  NC*SQLITE_FUNC_N
ffd0: 45 45 44 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c  EEDCOLL)|extraFl
ffe0: 61 67 73 2c 5c 0a 20 20 20 53 51 4c 49 54 45 5f  ags,\.   SQLITE_
fff0: 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29  INT_TO_PTR(iArg)
10000 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 23  , 0, xFunc, 0, #
10010 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65  zName, {0} }.#de
10020 66 69 6e 65 20 53 54 52 5f 46 55 4e 43 54 49 4f  fine STR_FUNCTIO
10030 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70  N(zName, nArg, p
10040 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29  Arg, bNC, xFunc)
10050 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
10060 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c  TE_FUNC_SLOCHNG|
10070 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43  SQLITE_UTF8|(bNC
10080 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
10090 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 70 41 72  DCOLL), \.   pAr
100a0 67 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20  g, 0, xFunc, 0, 
100b0 23 7a 4e 61 6d 65 2c 20 7d 0a 23 64 65 66 69 6e  #zName, }.#defin
100c0 65 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65  e LIKEFUNC(zName
100d0 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 66 6c 61  , nArg, arg, fla
100e0 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  gs) \.  {nArg, S
100f0 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
10100 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c  ANT|SQLITE_UTF8|
10110 66 6c 61 67 73 2c 20 5c 0a 20 20 20 28 76 6f 69  flags, \.   (voi
10120 64 20 2a 29 61 72 67 2c 20 30 2c 20 6c 69 6b 65  d *)arg, 0, like
10130 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c  Func, 0, #zName,
10140 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 41   {0} }.#define A
10150 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20  GGREGATE(zName, 
10160 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78  nArg, arg, nc, x
10170 53 74 65 70 2c 20 78 46 69 6e 61 6c 29 20 5c 0a  Step, xFinal) \.
10180 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
10190 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f  UTF8|(nc*SQLITE_
101a0 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20  FUNC_NEEDCOLL), 
101b0 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f  \.   SQLITE_INT_
101c0 54 4f 5f 50 54 52 28 61 72 67 29 2c 20 30 2c 20  TO_PTR(arg), 0, 
101d0 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c 23 7a 4e  xStep,xFinal,#zN
101e0 61 6d 65 2c 20 7b 30 7d 7d 0a 23 64 65 66 69 6e  ame, {0}}.#defin
101f0 65 20 41 47 47 52 45 47 41 54 45 32 28 7a 4e 61  e AGGREGATE2(zNa
10200 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e  me, nArg, arg, n
10210 63 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c  c, xStep, xFinal
10220 2c 20 65 78 74 72 61 46 6c 61 67 73 29 20 5c 0a  , extraFlags) \.
10230 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
10240 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f  UTF8|(nc*SQLITE_
10250 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65  FUNC_NEEDCOLL)|e
10260 78 74 72 61 46 6c 61 67 73 2c 20 5c 0a 20 20 20  xtraFlags, \.   
10270 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54  SQLITE_INT_TO_PT
10280 52 28 61 72 67 29 2c 20 30 2c 20 78 53 74 65 70  R(arg), 0, xStep
10290 2c 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c 20  ,xFinal,#zName, 
102a0 7b 30 7d 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 20  {0}}../*.** All 
102b0 63 75 72 72 65 6e 74 20 73 61 76 65 70 6f 69 6e  current savepoin
102c0 74 73 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e  ts are stored in
102d0 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 73   a linked list s
102e0 74 61 72 74 69 6e 67 20 61 74 0a 2a 2a 20 73 71  tarting at.** sq
102f0 6c 69 74 65 33 2e 70 53 61 76 65 70 6f 69 6e 74  lite3.pSavepoint
10300 2e 20 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d  . The first elem
10310 65 6e 74 20 69 6e 20 74 68 65 20 6c 69 73 74 20  ent in the list 
10320 69 73 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65  is the most rece
10330 6e 74 6c 79 0a 2a 2a 20 6f 70 65 6e 65 64 20 73  ntly.** opened s
10340 61 76 65 70 6f 69 6e 74 2e 20 53 61 76 65 70 6f  avepoint. Savepo
10350 69 6e 74 73 20 61 72 65 20 61 64 64 65 64 20 74  ints are added t
10360 6f 20 74 68 65 20 6c 69 73 74 20 62 79 20 74 68  o the list by th
10370 65 20 76 64 62 65 0a 2a 2a 20 4f 50 5f 53 61 76  e vdbe.** OP_Sav
10380 65 70 6f 69 6e 74 20 69 6e 73 74 72 75 63 74 69  epoint instructi
10390 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 61  on..*/.struct Sa
103a0 76 65 70 6f 69 6e 74 20 7b 0a 20 20 63 68 61 72  vepoint {.  char
103b0 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
103c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
103d0 2f 2a 20 53 61 76 65 70 6f 69 6e 74 20 6e 61 6d  /* Savepoint nam
103e0 65 20 28 6e 75 6c 2d 74 65 72 6d 69 6e 61 74 65  e (nul-terminate
103f0 64 29 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66  d) */.  i64 nDef
10400 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20 20 20  erredCons;      
10410 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
10420 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72 65  umber of deferre
10430 64 20 66 6b 20 76 69 6f 6c 61 74 69 6f 6e 73 20  d fk violations 
10440 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72  */.  i64 nDeferr
10450 65 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20  edImmCons;      
10460 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
10470 65 72 20 6f 66 20 64 65 66 65 72 72 65 64 20 69  er of deferred i
10480 6d 6d 20 66 6b 2e 20 2a 2f 0a 20 20 53 61 76 65  mm fk. */.  Save
10490 70 6f 69 6e 74 20 2a 70 4e 65 78 74 3b 20 20 20  point *pNext;   
104a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
104b0 2f 2a 20 50 61 72 65 6e 74 20 73 61 76 65 70 6f  /* Parent savepo
104c0 69 6e 74 20 28 69 66 20 61 6e 79 29 20 2a 2f 0a  int (if any) */.
104d0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  };../*.** The fo
104e0 6c 6c 6f 77 69 6e 67 20 61 72 65 20 75 73 65 64  llowing are used
104f0 20 61 73 20 74 68 65 20 73 65 63 6f 6e 64 20 70   as the second p
10500 61 72 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69  arameter to sqli
10510 74 65 33 53 61 76 65 70 6f 69 6e 74 28 29 2c 0a  te3Savepoint(),.
10520 2a 2a 20 61 6e 64 20 61 73 20 74 68 65 20 50 31  ** and as the P1
10530 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   argument to the
10540 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e   OP_Savepoint in
10550 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 64  struction..*/.#d
10560 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f  efine SAVEPOINT_
10570 42 45 47 49 4e 20 20 20 20 20 20 30 0a 23 64 65  BEGIN      0.#de
10580 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52  fine SAVEPOINT_R
10590 45 4c 45 41 53 45 20 20 20 20 31 0a 23 64 65 66  ELEASE    1.#def
105a0 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 4f  ine SAVEPOINT_RO
105b0 4c 4c 42 41 43 4b 20 20 20 32 0a 0a 0a 2f 2a 0a  LLBACK   2.../*.
105c0 2a 2a 20 45 61 63 68 20 53 51 4c 69 74 65 20 6d  ** Each SQLite m
105d0 6f 64 75 6c 65 20 28 76 69 72 74 75 61 6c 20 74  odule (virtual t
105e0 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 29  able definition)
105f0 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61   is defined by a
10600 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66  n.** instance of
10610 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
10620 74 72 75 63 74 75 72 65 2c 20 73 74 6f 72 65 64  tructure, stored
10630 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 33 2e   in the sqlite3.
10640 61 4d 6f 64 75 6c 65 0a 2a 2a 20 68 61 73 68 20  aModule.** hash 
10650 74 61 62 6c 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  table..*/.struct
10660 20 4d 6f 64 75 6c 65 20 7b 0a 20 20 63 6f 6e 73   Module {.  cons
10670 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  t sqlite3_module
10680 20 2a 70 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20   *pModule;      
10690 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 70 6f 69   /* Callback poi
106a0 6e 74 65 72 73 20 2a 2f 0a 20 20 63 6f 6e 73 74  nters */.  const
106b0 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
106c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
106d0 2f 2a 20 4e 61 6d 65 20 70 61 73 73 65 64 20 74  /* Name passed t
106e0 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28  o create_module(
106f0 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75  ) */.  void *pAu
10700 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  x;              
10710 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70              /* p
10720 41 75 78 20 70 61 73 73 65 64 20 74 6f 20 63 72  Aux passed to cr
10730 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f  eate_module() */
10740 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 73 74 72  .  void (*xDestr
10750 6f 79 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20  oy)(void *);    
10760 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 64 75 6c          /* Modul
10770 65 20 64 65 73 74 72 75 63 74 6f 72 20 66 75 6e  e destructor fun
10780 63 74 69 6f 6e 20 2a 2f 0a 20 20 54 61 62 6c 65  ction */.  Table
10790 20 2a 70 45 70 6f 54 61 62 3b 20 20 20 20 20 20   *pEpoTab;      
107a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
107b0 2f 2a 20 45 70 6f 6e 79 6d 6f 75 73 20 74 61 62  /* Eponymous tab
107c0 6c 65 20 66 6f 72 20 74 68 69 73 20 6d 6f 64 75  le for this modu
107d0 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  le */.};../*.** 
107e0 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
107f0 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66  t each column of
10800 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 69 73   an SQL table is
10810 20 68 65 6c 64 20 69 6e 20 61 6e 20 69 6e 73 74   held in an inst
10820 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20  ance.** of this 
10830 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74  structure..*/.st
10840 72 75 63 74 20 43 6f 6c 75 6d 6e 20 7b 0a 20 20  ruct Column {.  
10850 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
10860 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73   /* Name of this
10870 20 63 6f 6c 75 6d 6e 2c 20 5c 30 30 30 2c 20 74   column, \000, t
10880 68 65 6e 20 74 68 65 20 74 79 70 65 20 2a 2f 0a  hen the type */.
10890 20 20 45 78 70 72 20 2a 70 44 66 6c 74 3b 20 20    Expr *pDflt;  
108a0 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 76 61     /* Default va
108b0 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75  lue of this colu
108c0 6d 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43  mn */.  char *zC
108d0 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 6c  oll;     /* Coll
108e0 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2e 20  ating sequence. 
108f0 20 49 66 20 4e 55 4c 4c 2c 20 75 73 65 20 74 68   If NULL, use th
10900 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75  e default */.  u
10910 38 20 6e 6f 74 4e 75 6c 6c 3b 20 20 20 20 20 20  8 notNull;      
10920 2f 2a 20 41 6e 20 4f 45 5f 20 63 6f 64 65 20 66  /* An OE_ code f
10930 6f 72 20 68 61 6e 64 6c 69 6e 67 20 61 20 4e 4f  or handling a NO
10940 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e  T NULL constrain
10950 74 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69  t */.  char affi
10960 6e 69 74 79 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f  nity;   /* One o
10970 66 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46  f the SQLITE_AFF
10980 5f 2e 2e 2e 20 76 61 6c 75 65 73 20 2a 2f 0a 20  _... values */. 
10990 20 75 38 20 73 7a 45 73 74 3b 20 20 20 20 20 20   u8 szEst;      
109a0 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 73    /* Estimated s
109b0 69 7a 65 20 6f 66 20 76 61 6c 75 65 20 69 6e 20  ize of value in 
109c0 74 68 69 73 20 63 6f 6c 75 6d 6e 2e 20 73 69 7a  this column. siz
109d0 65 6f 66 28 49 4e 54 29 3d 3d 31 20 2a 2f 0a 20  eof(INT)==1 */. 
109e0 20 75 38 20 63 6f 6c 46 6c 61 67 73 3b 20 20 20   u8 colFlags;   
109f0 20 20 2f 2a 20 42 6f 6f 6c 65 61 6e 20 70 72 6f    /* Boolean pro
10a00 70 65 72 74 69 65 73 2e 20 20 53 65 65 20 43 4f  perties.  See CO
10a10 4c 46 4c 41 47 5f 20 64 65 66 69 6e 65 73 20 62  LFLAG_ defines b
10a20 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41  elow */.};../* A
10a30 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f  llowed values fo
10a40 72 20 43 6f 6c 75 6d 6e 2e 63 6f 6c 46 6c 61 67  r Column.colFlag
10a50 73 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f  s:.*/.#define CO
10a60 4c 46 4c 41 47 5f 50 52 49 4d 4b 45 59 20 20 30  LFLAG_PRIMKEY  0
10a70 78 30 30 30 31 20 20 20 20 2f 2a 20 43 6f 6c 75  x0001    /* Colu
10a80 6d 6e 20 69 73 20 70 61 72 74 20 6f 66 20 74 68  mn is part of th
10a90 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f  e primary key */
10aa0 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47  .#define COLFLAG
10ab0 5f 48 49 44 44 45 4e 20 20 20 30 78 30 30 30 32  _HIDDEN   0x0002
10ac0 20 20 20 20 2f 2a 20 41 20 68 69 64 64 65 6e 20      /* A hidden 
10ad0 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 76 69 72 74  column in a virt
10ae0 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65  ual table */.#de
10af0 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 48 41 53  fine COLFLAG_HAS
10b00 54 59 50 45 20 20 30 78 30 30 30 34 20 20 20 20  TYPE  0x0004    
10b10 2f 2a 20 54 79 70 65 20 6e 61 6d 65 20 66 6f 6c  /* Type name fol
10b20 6c 6f 77 73 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  lows column name
10b30 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 22 43 6f   */../*.** A "Co
10b40 6c 6c 61 74 69 6e 67 20 53 65 71 75 65 6e 63 65  llating Sequence
10b50 22 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20  " is defined by 
10b60 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
10b70 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20  he following.** 
10b80 73 74 72 75 63 74 75 72 65 2e 20 43 6f 6e 63 65  structure. Conce
10b90 70 74 75 61 6c 6c 79 2c 20 61 20 63 6f 6c 6c 61  ptually, a colla
10ba0 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 63 6f  ting sequence co
10bb0 6e 73 69 73 74 73 20 6f 66 20 61 20 6e 61 6d 65  nsists of a name
10bc0 20 61 6e 64 0a 2a 2a 20 61 20 63 6f 6d 70 61 72   and.** a compar
10bd0 69 73 6f 6e 20 72 6f 75 74 69 6e 65 20 74 68 61  ison routine tha
10be0 74 20 64 65 66 69 6e 65 73 20 74 68 65 20 6f 72  t defines the or
10bf0 64 65 72 20 6f 66 20 74 68 61 74 20 73 65 71 75  der of that sequ
10c00 65 6e 63 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 43  ence..**.** If C
10c10 6f 6c 6c 53 65 71 2e 78 43 6d 70 20 69 73 20 4e  ollSeq.xCmp is N
10c20 55 4c 4c 2c 20 69 74 20 6d 65 61 6e 73 20 74 68  ULL, it means th
10c30 61 74 20 74 68 65 0a 2a 2a 20 63 6f 6c 6c 61 74  at the.** collat
10c40 69 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73 20  ing sequence is 
10c50 75 6e 64 65 66 69 6e 65 64 2e 20 20 49 6e 64 69  undefined.  Indi
10c60 63 65 73 20 62 75 69 6c 74 20 6f 6e 20 61 6e 20  ces built on an 
10c70 75 6e 64 65 66 69 6e 65 64 0a 2a 2a 20 63 6f 6c  undefined.** col
10c80 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
10c90 6d 61 79 20 6e 6f 74 20 62 65 20 72 65 61 64 20  may not be read 
10ca0 6f 72 20 77 72 69 74 74 65 6e 2e 0a 2a 2f 0a 73  or written..*/.s
10cb0 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 7b 0a  truct CollSeq {.
10cc0 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
10cd0 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
10ce0 6f 66 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67  of the collating
10cf0 20 73 65 71 75 65 6e 63 65 2c 20 55 54 46 2d 38   sequence, UTF-8
10d00 20 65 6e 63 6f 64 65 64 20 2a 2f 0a 20 20 75 38   encoded */.  u8
10d10 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20   enc;           
10d20 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f      /* Text enco
10d30 64 69 6e 67 20 68 61 6e 64 6c 65 64 20 62 79 20  ding handled by 
10d40 78 43 6d 70 28 29 20 2a 2f 0a 20 20 76 6f 69 64  xCmp() */.  void
10d50 20 2a 70 55 73 65 72 3b 20 20 20 20 20 20 20 20   *pUser;        
10d60 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d    /* First argum
10d70 65 6e 74 20 74 6f 20 78 43 6d 70 28 29 20 2a 2f  ent to xCmp() */
10d80 0a 20 20 69 6e 74 20 28 2a 78 43 6d 70 29 28 76  .  int (*xCmp)(v
10d90 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20  oid*,int, const 
10da0 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73  void*, int, cons
10db0 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64  t void*);.  void
10dc0 20 28 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29 3b   (*xDel)(void*);
10dd0 20 20 2f 2a 20 44 65 73 74 72 75 63 74 6f 72 20    /* Destructor 
10de0 66 6f 72 20 70 55 73 65 72 20 2a 2f 0a 7d 3b 0a  for pUser */.};.
10df0 0a 2f 2a 0a 2a 2a 20 41 20 73 6f 72 74 20 6f 72  ./*.** A sort or
10e00 64 65 72 20 63 61 6e 20 62 65 20 65 69 74 68 65  der can be eithe
10e10 72 20 41 53 43 20 6f 72 20 44 45 53 43 2e 0a 2a  r ASC or DESC..*
10e20 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
10e30 5f 53 4f 5f 41 53 43 20 20 20 20 20 20 20 30 20  _SO_ASC       0 
10e40 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73 63 65   /* Sort in asce
10e50 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23  nding order */.#
10e60 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f  define SQLITE_SO
10e70 5f 44 45 53 43 20 20 20 20 20 20 31 20 20 2f 2a  _DESC      1  /*
10e80 20 53 6f 72 74 20 69 6e 20 61 73 63 65 6e 64 69   Sort in ascendi
10e90 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66  ng order */.#def
10ea0 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 55 4e  ine SQLITE_SO_UN
10eb0 44 45 46 49 4e 45 44 20 2d 31 20 2f 2a 20 4e 6f  DEFINED -1 /* No
10ec0 20 73 6f 72 74 20 6f 72 64 65 72 20 73 70 65 63   sort order spec
10ed0 69 66 69 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  ified */../*.** 
10ee0 43 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20  Column affinity 
10ef0 74 79 70 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  types..**.** The
10f00 73 65 20 75 73 65 64 20 74 6f 20 68 61 76 65 20  se used to have 
10f10 6d 6e 65 6d 6f 6e 69 63 20 6e 61 6d 65 20 6c 69  mnemonic name li
10f20 6b 65 20 27 69 27 20 66 6f 72 20 53 51 4c 49 54  ke 'i' for SQLIT
10f30 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 61 6e  E_AFF_INTEGER an
10f40 64 0a 2a 2a 20 27 74 27 20 66 6f 72 20 53 51 4c  d.** 't' for SQL
10f50 49 54 45 5f 41 46 46 5f 54 45 58 54 2e 20 20 42  ITE_AFF_TEXT.  B
10f60 75 74 20 77 65 20 63 61 6e 20 73 61 76 65 20 61  ut we can save a
10f70 20 6c 69 74 74 6c 65 20 73 70 61 63 65 20 61 6e   little space an
10f80 64 20 69 6d 70 72 6f 76 65 0a 2a 2a 20 74 68 65  d improve.** the
10f90 20 73 70 65 65 64 20 61 20 6c 69 74 74 6c 65 20   speed a little 
10fa0 62 79 20 6e 75 6d 62 65 72 69 6e 67 20 74 68 65  by numbering the
10fb0 20 76 61 6c 75 65 73 20 63 6f 6e 73 65 63 75 74   values consecut
10fc0 69 76 65 6c 79 2e 0a 2a 2a 0a 2a 2a 20 42 75 74  ively..**.** But
10fd0 20 72 61 74 68 65 72 20 74 68 61 6e 20 73 74 61   rather than sta
10fe0 72 74 20 77 69 74 68 20 30 20 6f 72 20 31 2c 20  rt with 0 or 1, 
10ff0 77 65 20 62 65 67 69 6e 20 77 69 74 68 20 27 41  we begin with 'A
11000 27 2e 20 20 54 68 61 74 20 77 61 79 2c 0a 2a 2a  '.  That way,.**
11010 20 77 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20 61   when multiple a
11020 66 66 69 6e 69 74 79 20 74 79 70 65 73 20 61 72  ffinity types ar
11030 65 20 63 6f 6e 63 61 74 65 6e 61 74 65 64 20 69  e concatenated i
11040 6e 74 6f 20 61 20 73 74 72 69 6e 67 20 61 6e 64  nto a string and
11050 0a 2a 2a 20 75 73 65 64 20 61 73 20 74 68 65 20  .** used as the 
11060 50 34 20 6f 70 65 72 61 6e 64 2c 20 74 68 65 79  P4 operand, they
11070 20 77 69 6c 6c 20 62 65 20 6d 6f 72 65 20 72 65   will be more re
11080 61 64 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 4e 6f  adable..**.** No
11090 74 65 20 61 6c 73 6f 20 74 68 61 74 20 74 68 65  te also that the
110a0 20 6e 75 6d 65 72 69 63 20 74 79 70 65 73 20 61   numeric types a
110b0 72 65 20 67 72 6f 75 70 65 64 20 74 6f 67 65 74  re grouped toget
110c0 68 65 72 20 73 6f 20 74 68 61 74 20 74 65 73 74  her so that test
110d0 69 6e 67 0a 2a 2a 20 66 6f 72 20 61 20 6e 75 6d  ing.** for a num
110e0 65 72 69 63 20 74 79 70 65 20 69 73 20 61 20 73  eric type is a s
110f0 69 6e 67 6c 65 20 63 6f 6d 70 61 72 69 73 6f 6e  ingle comparison
11100 2e 20 20 41 6e 64 20 74 68 65 20 42 4c 4f 42 20  .  And the BLOB 
11110 74 79 70 65 20 69 73 20 66 69 72 73 74 2e 0a 2a  type is first..*
11120 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
11130 5f 41 46 46 5f 42 4c 4f 42 20 20 20 20 20 27 41  _AFF_BLOB     'A
11140 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  '.#define SQLITE
11150 5f 41 46 46 5f 54 45 58 54 20 20 20 20 20 27 42  _AFF_TEXT     'B
11160 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  '.#define SQLITE
11170 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 20 27 43  _AFF_NUMERIC  'C
11180 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  '.#define SQLITE
11190 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 20 27 44  _AFF_INTEGER  'D
111a0 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  '.#define SQLITE
111b0 5f 41 46 46 5f 52 45 41 4c 20 20 20 20 20 27 45  _AFF_REAL     'E
111c0 27 0a 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74  '..#define sqlit
111d0 65 33 49 73 4e 75 6d 65 72 69 63 41 66 66 69 6e  e3IsNumericAffin
111e0 69 74 79 28 58 29 20 20 28 28 58 29 3e 3d 53 51  ity(X)  ((X)>=SQ
111f0 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43  LITE_AFF_NUMERIC
11200 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c  )../*.** The SQL
11210 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 76 61 6c  ITE_AFF_MASK val
11220 75 65 73 20 6d 61 73 6b 73 20 6f 66 66 20 74 68  ues masks off th
11230 65 20 73 69 67 6e 69 66 69 63 61 6e 74 20 62 69  e significant bi
11240 74 73 20 6f 66 20 61 6e 0a 2a 2a 20 61 66 66 69  ts of an.** affi
11250 6e 69 74 79 20 76 61 6c 75 65 2e 0a 2a 2f 0a 23  nity value..*/.#
11260 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
11270 46 5f 4d 41 53 4b 20 20 20 20 20 30 78 34 37 0a  F_MASK     0x47.
11280 0a 2f 2a 0a 2a 2a 20 41 64 64 69 74 69 6f 6e 61  ./*.** Additiona
11290 6c 20 62 69 74 20 76 61 6c 75 65 73 20 74 68 61  l bit values tha
112a0 74 20 63 61 6e 20 62 65 20 4f 52 65 64 20 77 69  t can be ORed wi
112b0 74 68 20 61 6e 20 61 66 66 69 6e 69 74 79 20 77  th an affinity w
112c0 69 74 68 6f 75 74 0a 2a 2a 20 63 68 61 6e 67 69  ithout.** changi
112d0 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74 79 2e  ng the affinity.
112e0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54  .**.** The SQLIT
112f0 45 5f 4e 4f 54 4e 55 4c 4c 20 66 6c 61 67 20 69  E_NOTNULL flag i
11300 73 20 61 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20  s a combination 
11310 6f 66 20 4e 55 4c 4c 45 51 20 61 6e 64 20 4a 55  of NULLEQ and JU
11320 4d 50 49 46 4e 55 4c 4c 2e 0a 2a 2a 20 49 74 20  MPIFNULL..** It 
11330 63 61 75 73 65 73 20 61 6e 20 61 73 73 65 72 74  causes an assert
11340 28 29 20 74 6f 20 66 69 72 65 20 69 66 20 65 69  () to fire if ei
11350 74 68 65 72 20 6f 70 65 72 61 6e 64 20 74 6f 20  ther operand to 
11360 61 20 63 6f 6d 70 61 72 69 73 6f 6e 0a 2a 2a 20  a comparison.** 
11370 6f 70 65 72 61 74 6f 72 20 69 73 20 4e 55 4c 4c  operator is NULL
11380 2e 20 20 49 74 20 69 73 20 61 64 64 65 64 20 74  .  It is added t
11390 6f 20 63 65 72 74 61 69 6e 20 63 6f 6d 70 61 72  o certain compar
113a0 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72 73 20 74  ison operators t
113b0 6f 0a 2a 2a 20 70 72 6f 76 65 20 74 68 61 74 20  o.** prove that 
113c0 74 68 65 20 6f 70 65 72 61 6e 64 73 20 61 72 65  the operands are
113d0 20 61 6c 77 61 79 73 20 4e 4f 54 20 4e 55 4c 4c   always NOT NULL
113e0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
113f0 49 54 45 5f 4b 45 45 50 4e 55 4c 4c 20 20 20 20  ITE_KEEPNULL    
11400 20 30 78 30 38 20 20 2f 2a 20 55 73 65 64 20 62   0x08  /* Used b
11410 79 20 76 65 63 74 6f 72 20 3d 3d 20 6f 72 20 3c  y vector == or <
11420 3e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  > */.#define SQL
11430 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 20  ITE_JUMPIFNULL  
11440 20 30 78 31 30 20 20 2f 2a 20 6a 75 6d 70 73 20   0x10  /* jumps 
11450 69 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e  if either operan
11460 64 20 69 73 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65  d is NULL */.#de
11470 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 54 4f 52  fine SQLITE_STOR
11480 45 50 32 20 20 20 20 20 20 30 78 32 30 20 20 2f  EP2      0x20  /
11490 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69  * Store result i
114a0 6e 20 72 65 67 5b 50 32 5d 20 72 61 74 68 65 72  n reg[P2] rather
114b0 20 74 68 61 6e 20 6a 75 6d 70 20 2a 2f 0a 23 64   than jump */.#d
114c0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 55 4c  efine SQLITE_NUL
114d0 4c 45 51 20 20 20 20 20 20 20 30 78 38 30 20 20  LEQ       0x80  
114e0 2f 2a 20 4e 55 4c 4c 3d 4e 55 4c 4c 20 2a 2f 0a  /* NULL=NULL */.
114f0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e  #define SQLITE_N
11500 4f 54 4e 55 4c 4c 20 20 20 20 20 20 30 78 39 30  OTNULL      0x90
11510 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74    /* Assert that
11520 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 6e 65   operands are ne
11530 76 65 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a  ver NULL */../*.
11540 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 20 6f 66 20  ** An object of 
11550 74 68 69 73 20 74 79 70 65 20 69 73 20 63 72 65  this type is cre
11560 61 74 65 64 20 66 6f 72 20 65 61 63 68 20 76 69  ated for each vi
11570 72 74 75 61 6c 20 74 61 62 6c 65 20 70 72 65 73  rtual table pres
11580 65 6e 74 20 69 6e 0a 2a 2a 20 74 68 65 20 64 61  ent in.** the da
11590 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 0a 2a  tabase schema..*
115a0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 64 61 74 61  *.** If the data
115b0 62 61 73 65 20 73 63 68 65 6d 61 20 69 73 20 73  base schema is s
115c0 68 61 72 65 64 2c 20 74 68 65 6e 20 74 68 65 72  hared, then ther
115d0 65 20 69 73 20 6f 6e 65 20 69 6e 73 74 61 6e 63  e is one instanc
115e0 65 20 6f 66 20 74 68 69 73 0a 2a 2a 20 73 74 72  e of this.** str
115f0 75 63 74 75 72 65 20 66 6f 72 20 65 61 63 68 20  ucture for each 
11600 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
11610 69 6f 6e 20 28 73 71 6c 69 74 65 33 2a 29 20 74  ion (sqlite3*) t
11620 68 61 74 20 75 73 65 73 20 74 68 65 20 73 68 61  hat uses the sha
11630 72 65 64 0a 2a 2a 20 73 63 68 65 6d 61 2e 20 54  red.** schema. T
11640 68 69 73 20 69 73 20 62 65 63 61 75 73 65 20 65  his is because e
11650 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e  ach database con
11660 6e 65 63 74 69 6f 6e 20 72 65 71 75 69 72 65 73  nection requires
11670 20 69 74 73 20 6f 77 6e 20 75 6e 69 71 75 65 0a   its own unique.
11680 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  ** instance of t
11690 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a  he sqlite3_vtab*
116a0 20 68 61 6e 64 6c 65 20 75 73 65 64 20 74 6f 20   handle used to 
116b0 61 63 63 65 73 73 20 74 68 65 20 76 69 72 74 75  access the virtu
116c0 61 6c 20 74 61 62 6c 65 0a 2a 2a 20 69 6d 70 6c  al table.** impl
116d0 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 73 71 6c 69  ementation. sqli
116e0 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65  te3_vtab* handle
116f0 73 20 63 61 6e 20 6e 6f 74 20 62 65 20 73 68 61  s can not be sha
11700 72 65 64 20 62 65 74 77 65 65 6e 0a 2a 2a 20 64  red between.** d
11710 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
11720 6f 6e 73 2c 20 65 76 65 6e 20 77 68 65 6e 20 74  ons, even when t
11730 68 65 20 72 65 73 74 20 6f 66 20 74 68 65 20 69  he rest of the i
11740 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73  n-memory databas
11750 65 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 73  e.** schema is s
11760 68 61 72 65 64 2c 20 61 73 20 74 68 65 20 69 6d  hared, as the im
11770 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 74  plementation oft
11780 65 6e 20 73 74 6f 72 65 73 20 74 68 65 20 64 61  en stores the da
11790 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63  tabase.** connec
117a0 74 69 6f 6e 20 68 61 6e 64 6c 65 20 70 61 73 73  tion handle pass
117b0 65 64 20 74 6f 20 69 74 20 76 69 61 20 74 68 65  ed to it via the
117c0 20 78 43 6f 6e 6e 65 63 74 28 29 20 6f 72 20 78   xConnect() or x
117d0 43 72 65 61 74 65 28 29 20 6d 65 74 68 6f 64 0a  Create() method.
117e0 2a 2a 20 64 75 72 69 6e 67 20 69 6e 69 74 69 61  ** during initia
117f0 6c 69 7a 61 74 69 6f 6e 20 69 6e 74 65 72 6e 61  lization interna
11800 6c 6c 79 2e 20 54 68 69 73 20 64 61 74 61 62 61  lly. This databa
11810 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  se connection ha
11820 6e 64 6c 65 20 6d 61 79 0a 2a 2a 20 74 68 65 6e  ndle may.** then
11830 20 62 65 20 75 73 65 64 20 62 79 20 74 68 65 20   be used by the 
11840 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d  virtual table im
11850 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20  plementation to 
11860 61 63 63 65 73 73 20 72 65 61 6c 20 74 61 62 6c  access real tabl
11870 65 73 0a 2a 2a 20 77 69 74 68 69 6e 20 74 68 65  es.** within the
11880 20 64 61 74 61 62 61 73 65 2e 20 53 6f 20 74 68   database. So th
11890 61 74 20 74 68 65 79 20 61 70 70 65 61 72 20 61  at they appear a
118a0 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 63 61  s part of the ca
118b0 6c 6c 65 72 73 0a 2a 2a 20 74 72 61 6e 73 61 63  llers.** transac
118c0 74 69 6f 6e 2c 20 74 68 65 73 65 20 61 63 63 65  tion, these acce
118d0 73 73 65 73 20 6e 65 65 64 20 74 6f 20 62 65 20  sses need to be 
118e0 6d 61 64 65 20 76 69 61 20 74 68 65 20 73 61 6d  made via the sam
118f0 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f  e database.** co
11900 6e 6e 65 63 74 69 6f 6e 20 61 73 20 74 68 61 74  nnection as that
11910 20 75 73 65 64 20 74 6f 20 65 78 65 63 75 74 65   used to execute
11920 20 53 51 4c 20 6f 70 65 72 61 74 69 6f 6e 73 20   SQL operations 
11930 6f 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  on the virtual t
11940 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20  able..**.** All 
11950 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 74  VTable objects t
11960 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 20 74  hat correspond t
11970 6f 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65  o a single table
11980 20 69 6e 20 61 20 73 68 61 72 65 64 0a 2a 2a 20   in a shared.** 
11990 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
119a0 61 72 65 20 69 6e 69 74 69 61 6c 6c 79 20 73 74  are initially st
119b0 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64  ored in a linked
119c0 2d 6c 69 73 74 20 70 6f 69 6e 74 65 64 20 74 6f  -list pointed to
119d0 20 62 79 0a 2a 2a 20 74 68 65 20 54 61 62 6c 65   by.** the Table
119e0 2e 70 56 54 61 62 6c 65 20 6d 65 6d 62 65 72 20  .pVTable member 
119f0 76 61 72 69 61 62 6c 65 20 6f 66 20 74 68 65 20  variable of the 
11a00 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 54 61  corresponding Ta
11a10 62 6c 65 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 57  ble object..** W
11a20 68 65 6e 20 61 6e 20 73 71 6c 69 74 65 33 5f 70  hen an sqlite3_p
11a30 72 65 70 61 72 65 28 29 20 6f 70 65 72 61 74 69  repare() operati
11a40 6f 6e 20 69 73 20 72 65 71 75 69 72 65 64 20 74  on is required t
11a50 6f 20 61 63 63 65 73 73 20 74 68 65 20 76 69 72  o access the vir
11a60 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 2c 20 69  tual.** table, i
11a70 74 20 73 65 61 72 63 68 65 73 20 74 68 65 20 6c  t searches the l
11a80 69 73 74 20 66 6f 72 20 74 68 65 20 56 54 61 62  ist for the VTab
11a90 6c 65 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f  le that correspo
11aa0 6e 64 73 20 74 6f 20 74 68 65 0a 2a 2a 20 64 61  nds to the.** da
11ab0 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
11ac0 6e 20 64 6f 69 6e 67 20 74 68 65 20 70 72 65 70  n doing the prep
11ad0 61 72 69 6e 67 20 73 6f 20 61 73 20 74 6f 20 75  aring so as to u
11ae0 73 65 20 74 68 65 20 63 6f 72 72 65 63 74 0a 2a  se the correct.*
11af0 2a 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20  * sqlite3_vtab* 
11b00 68 61 6e 64 6c 65 20 69 6e 20 74 68 65 20 63 6f  handle in the co
11b10 6d 70 69 6c 65 64 20 71 75 65 72 79 2e 0a 2a 2a  mpiled query..**
11b20 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 69 6e 2d 6d  .** When an in-m
11b30 65 6d 6f 72 79 20 54 61 62 6c 65 20 6f 62 6a 65  emory Table obje
11b40 63 74 20 69 73 20 64 65 6c 65 74 65 64 20 28 66  ct is deleted (f
11b50 6f 72 20 65 78 61 6d 70 6c 65 20 77 68 65 6e 20  or example when 
11b60 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73  the.** schema is
11b70 20 62 65 69 6e 67 20 72 65 6c 6f 61 64 65 64 20   being reloaded 
11b80 66 6f 72 20 73 6f 6d 65 20 72 65 61 73 6f 6e 29  for some reason)
11b90 2c 20 74 68 65 20 56 54 61 62 6c 65 20 6f 62 6a  , the VTable obj
11ba0 65 63 74 73 20 61 72 65 20 6e 6f 74 0a 2a 2a 20  ects are not.** 
11bb0 64 65 6c 65 74 65 64 20 61 6e 64 20 74 68 65 20  deleted and the 
11bc0 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61  sqlite3_vtab* ha
11bd0 6e 64 6c 65 73 20 61 72 65 20 6e 6f 74 20 78 44  ndles are not xD
11be0 69 73 63 6f 6e 6e 65 63 74 28 29 65 64 0a 2a 2a  isconnect()ed.**
11bf0 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 49 6e   immediately. In
11c00 73 74 65 61 64 2c 20 74 68 65 79 20 61 72 65 20  stead, they are 
11c10 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20 54  moved from the T
11c20 61 62 6c 65 2e 70 56 54 61 62 6c 65 20 6c 69 73  able.pVTable lis
11c30 74 20 74 6f 0a 2a 2a 20 61 6e 6f 74 68 65 72 20  t to.** another 
11c40 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68 65 61 64  linked list head
11c50 65 64 20 62 79 20 74 68 65 20 73 71 6c 69 74 65  ed by the sqlite
11c60 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74 20 6d 65  3.pDisconnect me
11c70 6d 62 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 63  mber of the.** c
11c80 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c  orresponding sql
11c90 69 74 65 33 20 73 74 72 75 63 74 75 72 65 2e 20  ite3 structure. 
11ca0 54 68 65 79 20 61 72 65 20 74 68 65 6e 20 64 65  They are then de
11cb0 6c 65 74 65 64 2f 78 44 69 73 63 6f 6e 6e 65 63  leted/xDisconnec
11cc0 74 65 64 0a 2a 2a 20 6e 65 78 74 20 74 69 6d 65  ted.** next time
11cd0 20 61 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20   a statement is 
11ce0 70 72 65 70 61 72 65 64 20 75 73 69 6e 67 20 73  prepared using s
11cf0 61 69 64 20 73 71 6c 69 74 65 33 2a 2e 20 54 68  aid sqlite3*. Th
11d00 69 73 20 69 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f  is is done.** to
11d10 20 61 76 6f 69 64 20 64 65 61 64 6c 6f 63 6b 20   avoid deadlock 
11d20 69 73 73 75 65 73 20 69 6e 76 6f 6c 76 69 6e 67  issues involving
11d30 20 6d 75 6c 74 69 70 6c 65 20 73 71 6c 69 74 65   multiple sqlite
11d40 33 2e 6d 75 74 65 78 20 6d 75 74 65 78 65 73 2e  3.mutex mutexes.
11d50 0a 2a 2a 20 52 65 66 65 72 20 74 6f 20 63 6f 6d  .** Refer to com
11d60 6d 65 6e 74 73 20 61 62 6f 76 65 20 66 75 6e 63  ments above func
11d70 74 69 6f 6e 20 73 71 6c 69 74 65 33 56 74 61 62  tion sqlite3Vtab
11d80 55 6e 6c 6f 63 6b 4c 69 73 74 28 29 20 66 6f 72  UnlockList() for
11d90 20 61 6e 0a 2a 2a 20 65 78 70 6c 61 6e 61 74 69   an.** explanati
11da0 6f 6e 20 61 73 20 74 6f 20 77 68 79 20 69 74 20  on as to why it 
11db0 69 73 20 73 61 66 65 20 74 6f 20 61 64 64 20 61  is safe to add a
11dc0 6e 20 65 6e 74 72 79 20 74 6f 20 61 6e 20 73 71  n entry to an sq
11dd0 6c 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63  lite3.pDisconnec
11de0 74 0a 2a 2a 20 6c 69 73 74 20 77 69 74 68 6f 75  t.** list withou
11df0 74 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 63 6f  t holding the co
11e00 72 72 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69  rresponding sqli
11e10 74 65 33 2e 6d 75 74 65 78 20 6d 75 74 65 78 2e  te3.mutex mutex.
11e20 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f 72  .**.** The memor
11e30 79 20 66 6f 72 20 6f 62 6a 65 63 74 73 20 6f 66  y for objects of
11e40 20 74 68 69 73 20 74 79 70 65 20 69 73 20 61 6c   this type is al
11e50 77 61 79 73 20 61 6c 6c 6f 63 61 74 65 64 20 62  ways allocated b
11e60 79 0a 2a 2a 20 73 71 6c 69 74 65 33 44 62 4d 61  y.** sqlite3DbMa
11e70 6c 6c 6f 63 28 29 2c 20 75 73 69 6e 67 20 74 68  lloc(), using th
11e80 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e  e connection han
11e90 64 6c 65 20 73 74 6f 72 65 64 20 69 6e 20 56 54  dle stored in VT
11ea0 61 62 6c 65 2e 64 62 20 61 73 0a 2a 2a 20 74 68  able.db as.** th
11eb0 65 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74  e first argument
11ec0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 56 54 61 62  ..*/.struct VTab
11ed0 6c 65 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a  le {.  sqlite3 *
11ee0 64 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  db;             
11ef0 20 2f 2a 20 44 61 74 61 62 61 73 65 20 63 6f 6e   /* Database con
11f00 6e 65 63 74 69 6f 6e 20 61 73 73 6f 63 69 61 74  nection associat
11f10 65 64 20 77 69 74 68 20 74 68 69 73 20 74 61 62  ed with this tab
11f20 6c 65 20 2a 2f 0a 20 20 4d 6f 64 75 6c 65 20 2a  le */.  Module *
11f30 70 4d 6f 64 3b 20 20 20 20 20 20 20 20 20 20 20  pMod;           
11f40 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
11f50 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74  module implement
11f60 61 74 69 6f 6e 20 2a 2f 0a 20 20 73 71 6c 69 74  ation */.  sqlit
11f70 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 20  e3_vtab *pVtab; 
11f80 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20       /* Pointer 
11f90 74 6f 20 76 74 61 62 20 69 6e 73 74 61 6e 63 65  to vtab instance
11fa0 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20   */.  int nRef; 
11fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11fc0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69  /* Number of poi
11fd0 6e 74 65 72 73 20 74 6f 20 74 68 69 73 20 73 74  nters to this st
11fe0 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 75 38 20  ructure */.  u8 
11ff0 62 43 6f 6e 73 74 72 61 69 6e 74 3b 20 20 20 20  bConstraint;    
12000 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
12010 66 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 61 72  f constraints ar
12020 65 20 73 75 70 70 6f 72 74 65 64 20 2a 2f 0a 20  e supported */. 
12030 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 3b   int iSavepoint;
12040 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65             /* De
12050 70 74 68 20 6f 66 20 74 68 65 20 53 41 56 45 50  pth of the SAVEP
12060 4f 49 4e 54 20 73 74 61 63 6b 20 2a 2f 0a 20 20  OINT stack */.  
12070 56 54 61 62 6c 65 20 2a 70 4e 65 78 74 3b 20 20  VTable *pNext;  
12080 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78            /* Nex
12090 74 20 69 6e 20 6c 69 6e 6b 65 64 20 6c 69 73 74  t in linked list
120a0 20 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a   (see above) */.
120b0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 73 63  };../*.** The sc
120c0 68 65 6d 61 20 66 6f 72 20 65 61 63 68 20 53 51  hema for each SQ
120d0 4c 20 74 61 62 6c 65 20 61 6e 64 20 76 69 65 77  L table and view
120e0 20 69 73 20 72 65 70 72 65 73 65 6e 74 65 64 20   is represented 
120f0 69 6e 20 6d 65 6d 6f 72 79 0a 2a 2a 20 62 79 20  in memory.** by 
12100 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
12110 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
12120 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63  ucture..*/.struc
12130 74 20 54 61 62 6c 65 20 7b 0a 20 20 63 68 61 72  t Table {.  char
12140 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
12150 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20   /* Name of the 
12160 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20 2a 2f  table or view */
12170 0a 20 20 43 6f 6c 75 6d 6e 20 2a 61 43 6f 6c 3b  .  Column *aCol;
12180 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72          /* Infor
12190 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63  mation about eac
121a0 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e  h column */.  In
121b0 64 65 78 20 2a 70 49 6e 64 65 78 3b 20 20 20 20  dex *pIndex;    
121c0 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 53 51     /* List of SQ
121d0 4c 20 69 6e 64 65 78 65 73 20 6f 6e 20 74 68 69  L indexes on thi
121e0 73 20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20 53 65  s table. */.  Se
121f0 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20  lect *pSelect;  
12200 20 20 20 2f 2a 20 4e 55 4c 4c 20 66 6f 72 20 74     /* NULL for t
12210 61 62 6c 65 73 2e 20 20 50 6f 69 6e 74 73 20 74  ables.  Points t
12220 6f 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 66 20  o definition if 
12230 61 20 76 69 65 77 2e 20 2a 2f 0a 20 20 46 4b 65  a view. */.  FKe
12240 79 20 2a 70 46 4b 65 79 3b 20 20 20 20 20 20 20  y *pFKey;       
12250 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74    /* Linked list
12260 20 6f 66 20 61 6c 6c 20 66 6f 72 65 69 67 6e 20   of all foreign 
12270 6b 65 79 73 20 69 6e 20 74 68 69 73 20 74 61 62  keys in this tab
12280 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43  le */.  char *zC
12290 6f 6c 41 66 66 3b 20 20 20 20 20 20 20 2f 2a 20  olAff;       /* 
122a0 53 74 72 69 6e 67 20 64 65 66 69 6e 69 6e 67 20  String defining 
122b0 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20  the affinity of 
122c0 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  each column */. 
122d0 20 45 78 70 72 4c 69 73 74 20 2a 70 43 68 65 63   ExprList *pChec
122e0 6b 3b 20 20 20 20 2f 2a 20 41 6c 6c 20 43 48 45  k;    /* All CHE
122f0 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  CK constraints *
12300 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
12310 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 2e 2e           /*   ..
12320 2e 20 61 6c 73 6f 20 75 73 65 64 20 61 73 20 63  . also used as c
12330 6f 6c 75 6d 6e 20 6e 61 6d 65 20 6c 69 73 74 20  olumn name list 
12340 69 6e 20 61 20 56 49 45 57 20 2a 2f 0a 20 20 69  in a VIEW */.  i
12350 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20 20 20 20  nt tnum;        
12360 20 20 20 20 2f 2a 20 52 6f 6f 74 20 42 54 72 65      /* Root BTre
12370 65 20 70 61 67 65 20 66 6f 72 20 74 68 69 73 20  e page for this 
12380 74 61 62 6c 65 20 2a 2f 0a 20 20 75 33 32 20 6e  table */.  u32 n
12390 54 61 62 52 65 66 3b 20 20 20 20 20 20 20 20 20  TabRef;         
123a0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69  /* Number of poi
123b0 6e 74 65 72 73 20 74 6f 20 74 68 69 73 20 54 61  nters to this Ta
123c0 62 6c 65 20 2a 2f 0a 20 20 75 33 32 20 74 61 62  ble */.  u32 tab
123d0 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 2f 2a  Flags;        /*
123e0 20 4d 61 73 6b 20 6f 66 20 54 46 5f 2a 20 76 61   Mask of TF_* va
123f0 6c 75 65 73 20 2a 2f 0a 20 20 69 31 36 20 69 50  lues */.  i16 iP
12400 4b 65 79 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Key;           /
12410 2a 20 49 66 20 6e 6f 74 20 6e 65 67 61 74 69 76  * If not negativ
12420 65 2c 20 75 73 65 20 61 43 6f 6c 5b 69 50 4b 65  e, use aCol[iPKe
12430 79 5d 20 61 73 20 74 68 65 20 72 6f 77 69 64 20  y] as the rowid 
12440 2a 2f 0a 20 20 69 31 36 20 6e 43 6f 6c 3b 20 20  */.  i16 nCol;  
12450 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
12460 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
12470 6e 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  n this table */.
12480 20 20 4c 6f 67 45 73 74 20 6e 52 6f 77 4c 6f 67    LogEst nRowLog
12490 45 73 74 3b 20 20 20 2f 2a 20 45 73 74 69 6d 61  Est;   /* Estima
124a0 74 65 64 20 72 6f 77 73 20 69 6e 20 74 61 62 6c  ted rows in tabl
124b0 65 20 2d 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f  e - from sqlite_
124c0 73 74 61 74 31 20 74 61 62 6c 65 20 2a 2f 0a 20  stat1 table */. 
124d0 20 4c 6f 67 45 73 74 20 73 7a 54 61 62 52 6f 77   LogEst szTabRow
124e0 3b 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74  ;     /* Estimat
124f0 65 64 20 73 69 7a 65 20 6f 66 20 65 61 63 68 20  ed size of each 
12500 74 61 62 6c 65 20 72 6f 77 20 69 6e 20 62 79 74  table row in byt
12510 65 73 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  es */.#ifdef SQL
12520 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 53 54 4d  ITE_ENABLE_COSTM
12530 55 4c 54 0a 20 20 4c 6f 67 45 73 74 20 63 6f 73  ULT.  LogEst cos
12540 74 4d 75 6c 74 3b 20 20 20 20 20 2f 2a 20 43 6f  tMult;     /* Co
12550 73 74 20 6d 75 6c 74 69 70 6c 69 65 72 20 66 6f  st multiplier fo
12560 72 20 75 73 69 6e 67 20 74 68 69 73 20 74 61 62  r using this tab
12570 6c 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 75  le */.#endif.  u
12580 38 20 6b 65 79 43 6f 6e 66 3b 20 20 20 20 20 20  8 keyConf;      
12590 20 20 20 20 2f 2a 20 57 68 61 74 20 74 6f 20 64      /* What to d
125a0 6f 20 69 6e 20 63 61 73 65 20 6f 66 20 75 6e 69  o in case of uni
125b0 71 75 65 6e 65 73 73 20 63 6f 6e 66 6c 69 63 74  queness conflict
125c0 20 6f 6e 20 69 50 4b 65 79 20 2a 2f 0a 23 69 66   on iPKey */.#if
125d0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
125e0 5f 41 4c 54 45 52 54 41 42 4c 45 0a 20 20 69 6e  _ALTERTABLE.  in
125f0 74 20 61 64 64 43 6f 6c 4f 66 66 73 65 74 3b 20  t addColOffset; 
12600 20 20 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e 20     /* Offset in 
12610 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 6d  CREATE TABLE stm
12620 74 20 74 6f 20 61 64 64 20 61 20 6e 65 77 20 63  t to add a new c
12630 6f 6c 75 6d 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a  olumn */.#endif.
12640 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
12650 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
12660 0a 20 20 69 6e 74 20 6e 4d 6f 64 75 6c 65 41 72  .  int nModuleAr
12670 67 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  g;      /* Numbe
12680 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74  r of arguments t
12690 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20 2a 2f 0a  o the module */.
126a0 20 20 63 68 61 72 20 2a 2a 61 7a 4d 6f 64 75 6c    char **azModul
126b0 65 41 72 67 3b 20 20 2f 2a 20 30 3a 20 6d 6f 64  eArg;  /* 0: mod
126c0 75 6c 65 20 31 3a 20 73 63 68 65 6d 61 20 32 3a  ule 1: schema 2:
126d0 20 76 74 61 62 20 6e 61 6d 65 20 33 2e 2e 2e 3a   vtab name 3...:
126e0 20 61 72 67 73 20 2a 2f 0a 20 20 56 54 61 62 6c   args */.  VTabl
126f0 65 20 2a 70 56 54 61 62 6c 65 3b 20 20 20 20 20  e *pVTable;     
12700 2f 2a 20 4c 69 73 74 20 6f 66 20 56 54 61 62 6c  /* List of VTabl
12710 65 20 6f 62 6a 65 63 74 73 2e 20 2a 2f 0a 23 65  e objects. */.#e
12720 6e 64 69 66 0a 20 20 54 72 69 67 67 65 72 20 2a  ndif.  Trigger *
12730 70 54 72 69 67 67 65 72 3b 20 20 20 2f 2a 20 4c  pTrigger;   /* L
12740 69 73 74 20 6f 66 20 74 72 69 67 67 65 72 73 20  ist of triggers 
12750 73 74 6f 72 65 64 20 69 6e 20 70 53 63 68 65 6d  stored in pSchem
12760 61 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70  a */.  Schema *p
12770 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53  Schema;     /* S
12780 63 68 65 6d 61 20 74 68 61 74 20 63 6f 6e 74 61  chema that conta
12790 69 6e 73 20 74 68 69 73 20 74 61 62 6c 65 20 2a  ins this table *
127a0 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65 78 74  /.  Table *pNext
127b0 5a 6f 6d 62 69 65 3b 20 20 2f 2a 20 4e 65 78 74  Zombie;  /* Next
127c0 20 6f 6e 20 74 68 65 20 50 61 72 73 65 2e 70 5a   on the Parse.pZ
127d0 6f 6d 62 69 65 54 61 62 20 6c 69 73 74 20 2a 2f  ombieTab list */
127e0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  .};../*.** Allow
127f0 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 54 61  ed values for Ta
12800 62 6c 65 2e 74 61 62 46 6c 61 67 73 2e 0a 2a 2a  ble.tabFlags..**
12810 0a 2a 2a 20 54 46 5f 4f 4f 4f 48 69 64 64 65 6e  .** TF_OOOHidden
12820 20 61 70 70 6c 69 65 73 20 74 6f 20 74 61 62 6c   applies to tabl
12830 65 73 20 6f 72 20 76 69 65 77 20 74 68 61 74 20  es or view that 
12840 68 61 76 65 20 68 69 64 64 65 6e 20 63 6f 6c 75  have hidden colu
12850 6d 6e 73 20 74 68 61 74 20 61 72 65 0a 2a 2a 20  mns that are.** 
12860 66 6f 6c 6c 6f 77 65 64 20 62 79 20 6e 6f 6e 2d  followed by non-
12870 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 2e 20  hidden columns. 
12880 20 45 78 61 6d 70 6c 65 3a 20 20 22 43 52 45 41   Example:  "CREA
12890 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45  TE VIRTUAL TABLE
128a0 20 78 20 55 53 49 4e 47 0a 2a 2a 20 76 74 61 62   x USING.** vtab
128b0 31 28 61 20 48 49 44 44 45 4e 2c 20 62 29 3b 22  1(a HIDDEN, b);"
128c0 2e 20 20 53 69 6e 63 65 20 22 62 22 20 69 73 20  .  Since "b" is 
128d0 61 20 6e 6f 6e 2d 68 69 64 64 65 6e 20 63 6f 6c  a non-hidden col
128e0 75 6d 6e 20 62 75 74 20 22 61 22 20 69 73 20 68  umn but "a" is h
128f0 69 64 64 65 6e 2c 0a 2a 2a 20 74 68 65 20 54 46  idden,.** the TF
12900 5f 4f 4f 4f 48 69 64 64 65 6e 20 61 74 74 72 69  _OOOHidden attri
12910 62 75 74 65 20 77 6f 75 6c 64 20 61 70 70 6c 79  bute would apply
12920 20 69 6e 20 74 68 69 73 20 63 61 73 65 2e 20 20   in this case.  
12930 53 75 63 68 20 74 61 62 6c 65 73 20 72 65 71 75  Such tables requ
12940 69 72 65 0a 2a 2a 20 73 70 65 63 69 61 6c 20 68  ire.** special h
12950 61 6e 64 6c 69 6e 67 20 64 75 72 69 6e 67 20 49  andling during I
12960 4e 53 45 52 54 20 70 72 6f 63 65 73 73 69 6e 67  NSERT processing
12970 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  ..*/.#define TF_
12980 52 65 61 64 6f 6e 6c 79 20 20 20 20 20 20 20 20  Readonly        
12990 30 78 30 30 30 31 20 20 20 20 2f 2a 20 52 65 61  0x0001    /* Rea
129a0 64 2d 6f 6e 6c 79 20 73 79 73 74 65 6d 20 74 61  d-only system ta
129b0 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54  ble */.#define T
129c0 46 5f 45 70 68 65 6d 65 72 61 6c 20 20 20 20 20  F_Ephemeral     
129d0 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a 20 41    0x0002    /* A
129e0 6e 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c  n ephemeral tabl
129f0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  e */.#define TF_
12a00 48 61 73 50 72 69 6d 61 72 79 4b 65 79 20 20 20  HasPrimaryKey   
12a10 30 78 30 30 30 34 20 20 20 20 2f 2a 20 54 61 62  0x0004    /* Tab
12a20 6c 65 20 68 61 73 20 61 20 70 72 69 6d 61 72 79  le has a primary
12a30 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20   key */.#define 
12a40 54 46 5f 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74  TF_Autoincrement
12a50 20 20 20 30 78 30 30 30 38 20 20 20 20 2f 2a 20     0x0008    /* 
12a60 49 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 20  Integer primary 
12a70 6b 65 79 20 69 73 20 61 75 74 6f 69 6e 63 72 65  key is autoincre
12a80 6d 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ment */.#define 
12a90 54 46 5f 48 61 73 53 74 61 74 31 20 20 20 20 20  TF_HasStat1     
12aa0 20 20 20 30 78 30 30 31 30 20 20 20 20 2f 2a 20     0x0010    /* 
12ab0 6e 52 6f 77 4c 6f 67 45 73 74 20 73 65 74 20 66  nRowLogEst set f
12ac0 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61 74 31  rom sqlite_stat1
12ad0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 57   */.#define TF_W
12ae0 69 74 68 6f 75 74 52 6f 77 69 64 20 20 20 20 30  ithoutRowid    0
12af0 78 30 30 32 30 20 20 20 20 2f 2a 20 4e 6f 20 72  x0020    /* No r
12b00 6f 77 69 64 2e 20 20 50 52 49 4d 41 52 59 20 4b  owid.  PRIMARY K
12b10 45 59 20 69 73 20 74 68 65 20 6b 65 79 20 2a 2f  EY is the key */
12b20 0a 23 64 65 66 69 6e 65 20 54 46 5f 4e 6f 56 69  .#define TF_NoVi
12b30 73 69 62 6c 65 52 6f 77 69 64 20 20 30 78 30 30  sibleRowid  0x00
12b40 34 30 20 20 20 20 2f 2a 20 4e 6f 20 75 73 65 72  40    /* No user
12b50 2d 76 69 73 69 62 6c 65 20 22 72 6f 77 69 64 22  -visible "rowid"
12b60 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 64 65 66 69   column */.#defi
12b70 6e 65 20 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20  ne TF_OOOHidden 
12b80 20 20 20 20 20 20 30 78 30 30 38 30 20 20 20 20        0x0080    
12b90 2f 2a 20 4f 75 74 2d 6f 66 2d 4f 72 64 65 72 20  /* Out-of-Order 
12ba0 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 2a  hidden columns *
12bb0 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 53 74 61  /.#define TF_Sta
12bc0 74 73 55 73 65 64 20 20 20 20 20 20 20 30 78 30  tsUsed       0x0
12bd0 31 30 30 20 20 20 20 2f 2a 20 51 75 65 72 79 20  100    /* Query 
12be0 70 6c 61 6e 6e 65 72 20 64 65 63 69 73 69 6f 6e  planner decision
12bf0 73 20 61 66 66 65 63 74 65 64 20 62 79 0a 20 20  s affected by.  
12c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c20 20 20 20 2a 2a 20 49 6e 64 65 78 2e 61 69 52 6f     ** Index.aiRo
12c30 77 4c 6f 67 45 73 74 5b 5d 20 76 61 6c 75 65 73  wLogEst[] values
12c40 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 48   */.#define TF_H
12c50 61 73 4e 6f 74 4e 75 6c 6c 20 20 20 20 20 20 30  asNotNull      0
12c60 78 30 32 30 30 20 20 20 20 2f 2a 20 43 6f 6e 74  x0200    /* Cont
12c70 61 69 6e 73 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f  ains NOT NULL co
12c80 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 0a 2f 2a  nstraints */../*
12c90 0a 2a 2a 20 54 65 73 74 20 74 6f 20 73 65 65 20  .** Test to see 
12ca0 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61  whether or not a
12cb0 20 74 61 62 6c 65 20 69 73 20 61 20 76 69 72 74   table is a virt
12cc0 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 69 73  ual table.  This
12cd0 20 69 73 0a 2a 2a 20 64 6f 6e 65 20 61 73 20 61   is.** done as a
12ce0 20 6d 61 63 72 6f 20 73 6f 20 74 68 61 74 20 69   macro so that i
12cf0 74 20 77 69 6c 6c 20 62 65 20 6f 70 74 69 6d 69  t will be optimi
12d00 7a 65 64 20 6f 75 74 20 77 68 65 6e 20 76 69 72  zed out when vir
12d10 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 73 75  tual.** table su
12d20 70 70 6f 72 74 20 69 73 20 6f 6d 69 74 74 65 64  pport is omitted
12d30 20 66 72 6f 6d 20 74 68 65 20 62 75 69 6c 64 2e   from the build.
12d40 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
12d50 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
12d60 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20 49  ABLE.#  define I
12d70 73 56 69 72 74 75 61 6c 28 58 29 20 20 20 20 20  sVirtual(X)     
12d80 20 28 28 58 29 2d 3e 6e 4d 6f 64 75 6c 65 41 72   ((X)->nModuleAr
12d90 67 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69  g).#else.#  defi
12da0 6e 65 20 49 73 56 69 72 74 75 61 6c 28 58 29 20  ne IsVirtual(X) 
12db0 20 20 20 20 20 30 0a 23 65 6e 64 69 66 0a 0a 2f       0.#endif../
12dc0 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64  *.** Macros to d
12dd0 65 74 65 72 6d 69 6e 65 20 69 66 20 61 20 63 6f  etermine if a co
12de0 6c 75 6d 6e 20 69 73 20 68 69 64 64 65 6e 2e 20  lumn is hidden. 
12df0 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65   IsOrdinaryHidde
12e00 6e 43 6f 6c 75 6d 6e 28 29 0a 2a 2a 20 6f 6e 6c  nColumn().** onl
12e10 79 20 77 6f 72 6b 73 20 66 6f 72 20 6e 6f 6e 2d  y works for non-
12e20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 28  virtual tables (
12e30 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65 73 20  ordinary tables 
12e40 61 6e 64 20 76 69 65 77 73 29 20 61 6e 64 20 69  and views) and i
12e50 73 0a 2a 2a 20 61 6c 77 61 79 73 20 66 61 6c 73  s.** always fals
12e60 65 20 75 6e 6c 65 73 73 20 53 51 4c 49 54 45 5f  e unless SQLITE_
12e70 45 4e 41 42 4c 45 5f 48 49 44 44 45 4e 5f 43 4f  ENABLE_HIDDEN_CO
12e80 4c 55 4d 4e 53 20 69 73 20 64 65 66 69 6e 65 64  LUMNS is defined
12e90 2e 20 20 54 68 65 0a 2a 2a 20 49 73 48 69 64 64  .  The.** IsHidd
12ea0 65 6e 43 6f 6c 75 6d 6e 28 29 20 6d 61 63 72 6f  enColumn() macro
12eb0 20 69 73 20 67 65 6e 65 72 61 6c 20 70 75 72 70   is general purp
12ec0 6f 73 65 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69  ose..*/.#if defi
12ed0 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
12ee0 45 5f 48 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53  E_HIDDEN_COLUMNS
12ef0 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48 69  ).#  define IsHi
12f00 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 20 20  ddenColumn(X)   
12f10 20 20 20 20 20 20 28 28 28 58 29 2d 3e 63 6f 6c        (((X)->col
12f20 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f  Flags & COLFLAG_
12f30 48 49 44 44 45 4e 29 21 3d 30 29 0a 23 20 20 64  HIDDEN)!=0).#  d
12f40 65 66 69 6e 65 20 49 73 4f 72 64 69 6e 61 72 79  efine IsOrdinary
12f50 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20  HiddenColumn(X) 
12f60 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20  (((X)->colFlags 
12f70 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e  & COLFLAG_HIDDEN
12f80 29 21 3d 30 29 0a 23 65 6c 69 66 20 21 64 65 66  )!=0).#elif !def
12f90 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
12fa0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 23  _VIRTUALTABLE).#
12fb0 20 20 64 65 66 69 6e 65 20 49 73 48 69 64 64 65    define IsHidde
12fc0 6e 43 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20 20  nColumn(X)      
12fd0 20 20 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61     (((X)->colFla
12fe0 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44  gs & COLFLAG_HID
12ff0 44 45 4e 29 21 3d 30 29 0a 23 20 20 64 65 66 69  DEN)!=0).#  defi
13000 6e 65 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64  ne IsOrdinaryHid
13010 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 30 0a 23  denColumn(X) 0.#
13020 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49  else.#  define I
13030 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29  sHiddenColumn(X)
13040 20 20 20 20 20 20 20 20 20 30 0a 23 20 20 64 65           0.#  de
13050 66 69 6e 65 20 49 73 4f 72 64 69 6e 61 72 79 48  fine IsOrdinaryH
13060 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 30  iddenColumn(X) 0
13070 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20 44 6f 65  .#endif.../* Doe
13080 73 20 74 68 65 20 74 61 62 6c 65 20 68 61 76 65  s the table have
13090 20 61 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66   a rowid */.#def
130a0 69 6e 65 20 48 61 73 52 6f 77 69 64 28 58 29 20  ine HasRowid(X) 
130b0 20 20 20 20 28 28 28 58 29 2d 3e 74 61 62 46 6c      (((X)->tabFl
130c0 61 67 73 20 26 20 54 46 5f 57 69 74 68 6f 75 74  ags & TF_Without
130d0 52 6f 77 69 64 29 3d 3d 30 29 0a 23 64 65 66 69  Rowid)==0).#defi
130e0 6e 65 20 56 69 73 69 62 6c 65 52 6f 77 69 64 28  ne VisibleRowid(
130f0 58 29 20 28 28 28 58 29 2d 3e 74 61 62 46 6c 61  X) (((X)->tabFla
13100 67 73 20 26 20 54 46 5f 4e 6f 56 69 73 69 62 6c  gs & TF_NoVisibl
13110 65 52 6f 77 69 64 29 3d 3d 30 29 0a 0a 2f 2a 0a  eRowid)==0)../*.
13120 2a 2a 20 45 61 63 68 20 66 6f 72 65 69 67 6e 20  ** Each foreign 
13130 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20 69  key constraint i
13140 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
13150 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
13160 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20  tructure..**.** 
13170 41 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 69 73  A foreign key is
13180 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
13190 20 74 77 6f 20 74 61 62 6c 65 73 2e 20 20 54 68   two tables.  Th
131a0 65 20 22 66 72 6f 6d 22 20 74 61 62 6c 65 20 69  e "from" table i
131b0 73 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 74  s.** the table t
131c0 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  hat contains the
131d0 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75   REFERENCES clau
131e0 73 65 20 74 68 61 74 20 63 72 65 61 74 65 73 20  se that creates 
131f0 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b  the foreign.** k
13200 65 79 2e 20 20 54 68 65 20 22 74 6f 22 20 74 61  ey.  The "to" ta
13210 62 6c 65 20 69 73 20 74 68 65 20 74 61 62 6c 65  ble is the table
13220 20 74 68 61 74 20 69 73 20 6e 61 6d 65 64 20 69   that is named i
13230 6e 20 74 68 65 20 52 45 46 45 52 45 4e 43 45 53  n the REFERENCES
13240 20 63 6c 61 75 73 65 2e 0a 2a 2a 20 43 6f 6e 73   clause..** Cons
13250 69 64 65 72 20 74 68 69 73 20 65 78 61 6d 70 6c  ider this exampl
13260 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45  e:.**.**     CRE
13270 41 54 45 20 54 41 42 4c 45 20 65 78 31 28 0a 2a  ATE TABLE ex1(.*
13280 2a 20 20 20 20 20 20 20 61 20 49 4e 54 45 47 45  *       a INTEGE
13290 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 2a  R PRIMARY KEY,.*
132a0 2a 20 20 20 20 20 20 20 62 20 49 4e 54 45 47 45  *       b INTEGE
132b0 52 20 43 4f 4e 53 54 52 41 49 4e 54 20 66 6b 31  R CONSTRAINT fk1
132c0 20 52 45 46 45 52 45 4e 43 45 53 20 65 78 32 28   REFERENCES ex2(
132d0 78 29 0a 2a 2a 20 20 20 20 20 29 3b 0a 2a 2a 0a  x).**     );.**.
132e0 2a 2a 20 46 6f 72 20 66 6f 72 65 69 67 6e 20 6b  ** For foreign k
132f0 65 79 20 22 66 6b 31 22 2c 20 74 68 65 20 66 72  ey "fk1", the fr
13300 6f 6d 2d 74 61 62 6c 65 20 69 73 20 22 65 78 31  om-table is "ex1
13310 22 20 61 6e 64 20 74 68 65 20 74 6f 2d 74 61 62  " and the to-tab
13320 6c 65 20 69 73 20 22 65 78 32 22 2e 0a 2a 2a 20  le is "ex2"..** 
13330 45 71 75 69 76 61 6c 65 6e 74 20 6e 61 6d 65 73  Equivalent names
13340 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 66 72 6f 6d  :.**.**     from
13350 2d 74 61 62 6c 65 20 3d 3d 20 63 68 69 6c 64 2d  -table == child-
13360 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20 74  table.**       t
13370 6f 2d 74 61 62 6c 65 20 3d 3d 20 70 61 72 65 6e  o-table == paren
13380 74 2d 74 61 62 6c 65 0a 2a 2a 0a 2a 2a 20 45 61  t-table.**.** Ea
13390 63 68 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c  ch REFERENCES cl
133a0 61 75 73 65 20 67 65 6e 65 72 61 74 65 73 20 61  ause generates a
133b0 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
133c0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
133d0 63 74 75 72 65 0a 2a 2a 20 77 68 69 63 68 20 69  cture.** which i
133e0 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68  s attached to th
133f0 65 20 66 72 6f 6d 2d 74 61 62 6c 65 2e 20 20 54  e from-table.  T
13400 68 65 20 74 6f 2d 74 61 62 6c 65 20 6e 65 65 64  he to-table need
13410 20 6e 6f 74 20 65 78 69 73 74 20 77 68 65 6e 0a   not exist when.
13420 2a 2a 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c  ** the from-tabl
13430 65 20 69 73 20 63 72 65 61 74 65 64 2e 20 20 54  e is created.  T
13440 68 65 20 65 78 69 73 74 65 6e 63 65 20 6f 66 20  he existence of 
13450 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69 73 20  the to-table is 
13460 6e 6f 74 20 63 68 65 63 6b 65 64 2e 0a 2a 2a 0a  not checked..**.
13470 2a 2a 20 54 68 65 20 6c 69 73 74 20 6f 66 20 61  ** The list of a
13480 6c 6c 20 70 61 72 65 6e 74 73 20 66 6f 72 20 63  ll parents for c
13490 68 69 6c 64 20 54 61 62 6c 65 20 58 20 69 73 20  hild Table X is 
134a0 68 65 6c 64 20 61 74 20 58 2e 70 46 4b 65 79 2e  held at X.pFKey.
134b0 0a 2a 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66  .**.** A list of
134c0 20 61 6c 6c 20 63 68 69 6c 64 72 65 6e 20 66 6f   all children fo
134d0 72 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 64 20  r a table named 
134e0 5a 20 28 77 68 69 63 68 20 6d 69 67 68 74 20 6e  Z (which might n
134f0 6f 74 20 65 76 65 6e 20 65 78 69 73 74 29 0a 2a  ot even exist).*
13500 2a 20 69 73 20 68 65 6c 64 20 69 6e 20 53 63 68  * is held in Sch
13510 65 6d 61 2e 66 6b 65 79 48 61 73 68 20 77 69 74  ema.fkeyHash wit
13520 68 20 61 20 68 61 73 68 20 6b 65 79 20 6f 66 20  h a hash key of 
13530 5a 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 4b 65  Z..*/.struct FKe
13540 79 20 7b 0a 20 20 54 61 62 6c 65 20 2a 70 46 72  y {.  Table *pFr
13550 6f 6d 3b 20 20 20 20 20 2f 2a 20 54 61 62 6c 65  om;     /* Table
13560 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
13570 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73  REFERENCES claus
13580 65 20 28 61 6b 61 3a 20 43 68 69 6c 64 29 20 2a  e (aka: Child) *
13590 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 46  /.  FKey *pNextF
135a0 72 6f 6d 3b 20 20 2f 2a 20 4e 65 78 74 20 46 4b  rom;  /* Next FK
135b0 65 79 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  ey with the same
135c0 20 69 6e 20 70 46 72 6f 6d 2e 20 4e 65 78 74 20   in pFrom. Next 
135d0 70 61 72 65 6e 74 20 6f 66 20 70 46 72 6f 6d 20  parent of pFrom 
135e0 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 6f 3b 20  */.  char *zTo; 
135f0 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
13600 66 20 74 61 62 6c 65 20 74 68 61 74 20 74 68 65  f table that the
13610 20 6b 65 79 20 70 6f 69 6e 74 73 20 74 6f 20 28   key points to (
13620 61 6b 61 3a 20 50 61 72 65 6e 74 29 20 2a 2f 0a  aka: Parent) */.
13630 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 54 6f 3b    FKey *pNextTo;
13640 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 74 68      /* Next with
13650 20 74 68 65 20 73 61 6d 65 20 7a 54 6f 2e 20 4e   the same zTo. N
13660 65 78 74 20 63 68 69 6c 64 20 6f 66 20 7a 54 6f  ext child of zTo
13670 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 50 72  . */.  FKey *pPr
13680 65 76 54 6f 3b 20 20 20 20 2f 2a 20 50 72 65 76  evTo;    /* Prev
13690 69 6f 75 73 20 77 69 74 68 20 74 68 65 20 73 61  ious with the sa
136a0 6d 65 20 7a 54 6f 20 2a 2f 0a 20 20 69 6e 74 20  me zTo */.  int 
136b0 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a  nCol;         /*
136c0 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
136d0 6e 73 20 69 6e 20 74 68 69 73 20 6b 65 79 20 2a  ns in this key *
136e0 2f 0a 20 20 2f 2a 20 45 56 3a 20 52 2d 33 30 33  /.  /* EV: R-303
136f0 32 33 2d 32 31 39 31 37 20 2a 2f 0a 20 20 75 38  23-21917 */.  u8
13700 20 69 73 44 65 66 65 72 72 65 64 3b 20 20 20 20   isDeferred;    
13710 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63 6f     /* True if co
13720 6e 73 74 72 61 69 6e 74 20 63 68 65 63 6b 69 6e  nstraint checkin
13730 67 20 69 73 20 64 65 66 65 72 72 65 64 20 74 69  g is deferred ti
13740 6c 6c 20 43 4f 4d 4d 49 54 20 2a 2f 0a 20 20 75  ll COMMIT */.  u
13750 38 20 61 41 63 74 69 6f 6e 5b 32 5d 3b 20 20 20  8 aAction[2];   
13760 20 20 20 20 20 2f 2a 20 4f 4e 20 44 45 4c 45 54       /* ON DELET
13770 45 20 61 6e 64 20 4f 4e 20 55 50 44 41 54 45 20  E and ON UPDATE 
13780 61 63 74 69 6f 6e 73 2c 20 72 65 73 70 65 63 74  actions, respect
13790 69 76 65 6c 79 20 2a 2f 0a 20 20 54 72 69 67 67  ively */.  Trigg
137a0 65 72 20 2a 61 70 54 72 69 67 67 65 72 5b 32 5d  er *apTrigger[2]
137b0 3b 2f 2a 20 54 72 69 67 67 65 72 73 20 66 6f 72  ;/* Triggers for
137c0 20 61 41 63 74 69 6f 6e 5b 5d 20 61 63 74 69 6f   aAction[] actio
137d0 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 73  ns */.  struct s
137e0 43 6f 6c 4d 61 70 20 7b 20 20 20 20 20 20 2f 2a  ColMap {      /*
137f0 20 4d 61 70 70 69 6e 67 20 6f 66 20 63 6f 6c 75   Mapping of colu
13800 6d 6e 73 20 69 6e 20 70 46 72 6f 6d 20 74 6f 20  mns in pFrom to 
13810 63 6f 6c 75 6d 6e 73 20 69 6e 20 7a 54 6f 20 2a  columns in zTo *
13820 2f 0a 20 20 20 20 69 6e 74 20 69 46 72 6f 6d 3b  /.    int iFrom;
13830 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
13840 6e 64 65 78 20 6f 66 20 63 6f 6c 75 6d 6e 20 69  ndex of column i
13850 6e 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 20 20 63  n pFrom */.    c
13860 68 61 72 20 2a 7a 43 6f 6c 3b 20 20 20 20 20 20  har *zCol;      
13870 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
13880 63 6f 6c 75 6d 6e 20 69 6e 20 7a 54 6f 2e 20 20  column in zTo.  
13890 49 66 20 4e 55 4c 4c 20 75 73 65 20 50 52 49 4d  If NULL use PRIM
138a0 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 7d 20 61  ARY KEY */.  } a
138b0 43 6f 6c 5b 31 5d 3b 20 20 20 20 20 20 20 20 20  Col[1];         
138c0 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20     /* One entry 
138d0 66 6f 72 20 65 61 63 68 20 6f 66 20 6e 43 6f 6c  for each of nCol
138e0 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 7d 3b 0a 0a   columns */.};..
138f0 2f 2a 0a 2a 2a 20 53 51 4c 69 74 65 20 73 75 70  /*.** SQLite sup
13900 70 6f 72 74 73 20 6d 61 6e 79 20 64 69 66 66 65  ports many diffe
13910 72 65 6e 74 20 77 61 79 73 20 74 6f 20 72 65 73  rent ways to res
13920 6f 6c 76 65 20 61 20 63 6f 6e 73 74 72 61 69 6e  olve a constrain
13930 74 0a 2a 2a 20 65 72 72 6f 72 2e 20 20 52 4f 4c  t.** error.  ROL
13940 4c 42 41 43 4b 20 70 72 6f 63 65 73 73 69 6e 67  LBACK processing
13950 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20 63 6f   means that a co
13960 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
13970 6f 6e 0a 2a 2a 20 63 61 75 73 65 73 20 74 68 65  on.** causes the
13980 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72   operation in pr
13990 6f 63 65 73 73 20 74 6f 20 66 61 69 6c 20 61 6e  ocess to fail an
139a0 64 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e  d for the curren
139b0 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a  t transaction.**
139c0 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61   to be rolled ba
139d0 63 6b 2e 20 20 41 42 4f 52 54 20 70 72 6f 63 65  ck.  ABORT proce
139e0 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 65 20  ssing means the 
139f0 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f  operation in pro
13a00 63 65 73 73 0a 2a 2a 20 66 61 69 6c 73 20 61 6e  cess.** fails an
13a10 64 20 61 6e 79 20 70 72 69 6f 72 20 63 68 61 6e  d any prior chan
13a20 67 65 73 20 66 72 6f 6d 20 74 68 61 74 20 6f 6e  ges from that on
13a30 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65 20  e operation are 
13a40 62 61 63 6b 65 64 20 6f 75 74 2c 0a 2a 2a 20 62  backed out,.** b
13a50 75 74 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  ut the transacti
13a60 6f 6e 20 69 73 20 6e 6f 74 20 72 6f 6c 6c 65 64  on is not rolled
13a70 20 62 61 63 6b 2e 20 20 46 41 49 4c 20 70 72 6f   back.  FAIL pro
13a80 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68  cessing means th
13a90 61 74 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 74  at.** the operat
13aa0 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73 20  ion in progress 
13ab0 73 74 6f 70 73 20 61 6e 64 20 72 65 74 75 72 6e  stops and return
13ac0 73 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 2e  s an error code.
13ad0 20 20 42 75 74 20 70 72 69 6f 72 0a 2a 2a 20 63    But prior.** c
13ae0 68 61 6e 67 65 73 20 64 75 65 20 74 6f 20 74 68  hanges due to th
13af0 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e  e same operation
13b00 20 61 72 65 20 6e 6f 74 20 62 61 63 6b 65 64 20   are not backed 
13b10 6f 75 74 20 61 6e 64 20 6e 6f 20 72 6f 6c 6c 62  out and no rollb
13b20 61 63 6b 0a 2a 2a 20 6f 63 63 75 72 73 2e 20 20  ack.** occurs.  
13b30 49 47 4e 4f 52 45 20 6d 65 61 6e 73 20 74 68 61  IGNORE means tha
13b40 74 20 74 68 65 20 70 61 72 74 69 63 75 6c 61 72  t the particular
13b50 20 72 6f 77 20 74 68 61 74 20 63 61 75 73 65 64   row that caused
13b60 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 0a   the constraint.
13b70 2a 2a 20 65 72 72 6f 72 20 69 73 20 6e 6f 74 20  ** error is not 
13b80 69 6e 73 65 72 74 65 64 20 6f 72 20 75 70 64 61  inserted or upda
13b90 74 65 64 2e 20 20 50 72 6f 63 65 73 73 69 6e 67  ted.  Processing
13ba0 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e   continues and n
13bb0 6f 20 65 72 72 6f 72 0a 2a 2a 20 69 73 20 72 65  o error.** is re
13bc0 74 75 72 6e 65 64 2e 20 20 52 45 50 4c 41 43 45  turned.  REPLACE
13bd0 20 6d 65 61 6e 73 20 74 68 61 74 20 70 72 65 65   means that pree
13be0 78 69 73 74 69 6e 67 20 64 61 74 61 62 61 73 65  xisting database
13bf0 20 72 6f 77 73 20 74 68 61 74 20 63 61 75 73 65   rows that cause
13c00 64 0a 2a 2a 20 61 20 55 4e 49 51 55 45 20 63 6f  d.** a UNIQUE co
13c10 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
13c20 6f 6e 20 61 72 65 20 72 65 6d 6f 76 65 64 20 73  on are removed s
13c30 6f 20 74 68 61 74 20 74 68 65 20 6e 65 77 20 69  o that the new i
13c40 6e 73 65 72 74 20 6f 72 0a 2a 2a 20 75 70 64 61  nsert or.** upda
13c50 74 65 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 20  te can proceed. 
13c60 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74   Processing cont
13c70 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72 72  inues and no err
13c80 6f 72 20 69 73 20 72 65 70 6f 72 74 65 64 2e 0a  or is reported..
13c90 2a 2a 0a 2a 2a 20 52 45 53 54 52 49 43 54 2c 20  **.** RESTRICT, 
13ca0 53 45 54 4e 55 4c 4c 2c 20 61 6e 64 20 43 41 53  SETNULL, and CAS
13cb0 43 41 44 45 20 61 63 74 69 6f 6e 73 20 61 70 70  CADE actions app
13cc0 6c 79 20 6f 6e 6c 79 20 74 6f 20 66 6f 72 65 69  ly only to forei
13cd0 67 6e 20 6b 65 79 73 2e 0a 2a 2a 20 52 45 53 54  gn keys..** REST
13ce0 52 49 43 54 20 69 73 20 74 68 65 20 73 61 6d 65  RICT is the same
13cf0 20 61 73 20 41 42 4f 52 54 20 66 6f 72 20 49 4d   as ABORT for IM
13d00 4d 45 44 49 41 54 45 20 66 6f 72 65 69 67 6e 20  MEDIATE foreign 
13d10 6b 65 79 73 20 61 6e 64 20 74 68 65 0a 2a 2a 20  keys and the.** 
13d20 73 61 6d 65 20 61 73 20 52 4f 4c 4c 42 41 43 4b  same as ROLLBACK
13d30 20 66 6f 72 20 44 45 46 45 52 52 45 44 20 6b 65   for DEFERRED ke
13d40 79 73 2e 20 20 53 45 54 4e 55 4c 4c 20 6d 65 61  ys.  SETNULL mea
13d50 6e 73 20 74 68 61 74 20 74 68 65 20 66 6f 72 65  ns that the fore
13d60 69 67 6e 0a 2a 2a 20 6b 65 79 20 69 73 20 73 65  ign.** key is se
13d70 74 20 74 6f 20 4e 55 4c 4c 2e 20 20 43 41 53 43  t to NULL.  CASC
13d80 41 44 45 20 6d 65 61 6e 73 20 74 68 61 74 20 61  ADE means that a
13d90 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54   DELETE or UPDAT
13da0 45 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65 66 65  E of the.** refe
13db0 72 65 6e 63 65 64 20 74 61 62 6c 65 20 72 6f 77  renced table row
13dc0 20 69 73 20 70 72 6f 70 61 67 61 74 65 64 20 69   is propagated i
13dd0 6e 74 6f 20 74 68 65 20 72 6f 77 20 74 68 61 74  nto the row that
13de0 20 68 6f 6c 64 73 20 74 68 65 0a 2a 2a 20 66 6f   holds the.** fo
13df0 72 65 69 67 6e 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a  reign key..**.**
13e00 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   The following s
13e10 79 6d 62 6f 6c 69 63 20 76 61 6c 75 65 73 20 61  ymbolic values a
13e20 72 65 20 75 73 65 64 20 74 6f 20 72 65 63 6f 72  re used to recor
13e30 64 20 77 68 69 63 68 20 74 79 70 65 0a 2a 2a 20  d which type.** 
13e40 6f 66 20 61 63 74 69 6f 6e 20 74 6f 20 74 61 6b  of action to tak
13e50 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  e..*/.#define OE
13e60 5f 4e 6f 6e 65 20 20 20 20 20 30 20 20 20 2f 2a  _None     0   /*
13e70 20 54 68 65 72 65 20 69 73 20 6e 6f 20 63 6f 6e   There is no con
13e80 73 74 72 61 69 6e 74 20 74 6f 20 63 68 65 63 6b  straint to check
13e90 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52   */.#define OE_R
13ea0 6f 6c 6c 62 61 63 6b 20 31 20 20 20 2f 2a 20 46  ollback 1   /* F
13eb0 61 69 6c 20 74 68 65 20 6f 70 65 72 61 74 69 6f  ail the operatio
13ec0 6e 20 61 6e 64 20 72 6f 6c 6c 62 61 63 6b 20 74  n and rollback t
13ed0 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a  he transaction *
13ee0 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 41 62 6f  /.#define OE_Abo
13ef0 72 74 20 20 20 20 32 20 20 20 2f 2a 20 42 61 63  rt    2   /* Bac
13f00 6b 20 6f 75 74 20 63 68 61 6e 67 65 73 20 62 75  k out changes bu
13f10 74 20 64 6f 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b  t do no rollback
13f20 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a   transaction */.
13f30 23 64 65 66 69 6e 65 20 4f 45 5f 46 61 69 6c 20  #define OE_Fail 
13f40 20 20 20 20 33 20 20 20 2f 2a 20 53 74 6f 70 20      3   /* Stop 
13f50 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 62 75  the operation bu
13f60 74 20 6c 65 61 76 65 20 61 6c 6c 20 70 72 69 6f  t leave all prio
13f70 72 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65  r changes */.#de
13f80 66 69 6e 65 20 4f 45 5f 49 67 6e 6f 72 65 20 20  fine OE_Ignore  
13f90 20 34 20 20 20 2f 2a 20 49 67 6e 6f 72 65 20 74   4   /* Ignore t
13fa0 68 65 20 65 72 72 6f 72 2e 20 44 6f 20 6e 6f 74  he error. Do not
13fb0 20 64 6f 20 74 68 65 20 49 4e 53 45 52 54 20 6f   do the INSERT o
13fc0 72 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66  r UPDATE */.#def
13fd0 69 6e 65 20 4f 45 5f 52 65 70 6c 61 63 65 20 20  ine OE_Replace  
13fe0 35 20 20 20 2f 2a 20 44 65 6c 65 74 65 20 65 78  5   /* Delete ex
13ff0 69 73 74 69 6e 67 20 72 65 63 6f 72 64 2c 20 74  isting record, t
14000 68 65 6e 20 64 6f 20 49 4e 53 45 52 54 20 6f 72  hen do INSERT or
14010 20 55 50 44 41 54 45 20 2a 2f 0a 0a 23 64 65 66   UPDATE */..#def
14020 69 6e 65 20 4f 45 5f 52 65 73 74 72 69 63 74 20  ine OE_Restrict 
14030 36 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 20  6   /* OE_Abort 
14040 66 6f 72 20 49 4d 4d 45 44 49 41 54 45 2c 20 4f  for IMMEDIATE, O
14050 45 5f 52 6f 6c 6c 62 61 63 6b 20 66 6f 72 20 44  E_Rollback for D
14060 45 46 45 52 52 45 44 20 2a 2f 0a 23 64 65 66 69  EFERRED */.#defi
14070 6e 65 20 4f 45 5f 53 65 74 4e 75 6c 6c 20 20 37  ne OE_SetNull  7
14080 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20 66 6f     /* Set the fo
14090 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75 65 20  reign key value 
140a0 74 6f 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69  to NULL */.#defi
140b0 6e 65 20 4f 45 5f 53 65 74 44 66 6c 74 20 20 38  ne OE_SetDflt  8
140c0 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20 66 6f     /* Set the fo
140d0 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75 65 20  reign key value 
140e0 74 6f 20 69 74 73 20 64 65 66 61 75 6c 74 20 2a  to its default *
140f0 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 43 61 73  /.#define OE_Cas
14100 63 61 64 65 20 20 39 20 20 20 2f 2a 20 43 61 73  cade  9   /* Cas
14110 63 61 64 65 20 74 68 65 20 63 68 61 6e 67 65 73  cade the changes
14120 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 4f 45 5f   */..#define OE_
14130 44 65 66 61 75 6c 74 20 20 31 30 20 20 2f 2a 20  Default  10  /* 
14140 44 6f 20 77 68 61 74 65 76 65 72 20 74 68 65 20  Do whatever the 
14150 64 65 66 61 75 6c 74 20 61 63 74 69 6f 6e 20 69  default action i
14160 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  s */.../*.** An 
14170 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
14180 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
14190 75 72 65 20 69 73 20 70 61 73 73 65 64 20 61 73  ure is passed as
141a0 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 61 72   the first.** ar
141b0 67 75 6d 65 6e 74 20 74 6f 20 73 71 6c 69 74 65  gument to sqlite
141c0 33 56 64 62 65 4b 65 79 43 6f 6d 70 61 72 65 20  3VdbeKeyCompare 
141d0 61 6e 64 20 69 73 20 75 73 65 64 20 74 6f 20 63  and is used to c
141e0 6f 6e 74 72 6f 6c 20 74 68 65 0a 2a 2a 20 63 6f  ontrol the.** co
141f0 6d 70 61 72 69 73 6f 6e 20 6f 66 20 74 68 65 20  mparison of the 
14200 74 77 6f 20 69 6e 64 65 78 20 6b 65 79 73 2e 0a  two index keys..
14210 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20  **.** Note that 
14220 61 53 6f 72 74 4f 72 64 65 72 5b 5d 20 61 6e 64  aSortOrder[] and
14230 20 61 43 6f 6c 6c 5b 5d 20 68 61 76 65 20 6e 46   aColl[] have nF
14240 69 65 6c 64 2b 31 20 73 6c 6f 74 73 2e 20 20 54  ield+1 slots.  T
14250 68 65 72 65 0a 2a 2a 20 61 72 65 20 6e 46 69 65  here.** are nFie
14260 6c 64 20 73 6c 6f 74 73 20 66 6f 72 20 74 68 65  ld slots for the
14270 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 61 6e 20 69   columns of an i
14280 6e 64 65 78 20 74 68 65 6e 20 6f 6e 65 20 65 78  ndex then one ex
14290 74 72 61 20 73 6c 6f 74 0a 2a 2a 20 66 6f 72 20  tra slot.** for 
142a0 74 68 65 20 72 6f 77 69 64 20 61 74 20 74 68 65  the rowid at the
142b0 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20   end..*/.struct 
142c0 4b 65 79 49 6e 66 6f 20 7b 0a 20 20 75 33 32 20  KeyInfo {.  u32 
142d0 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20  nRef;           
142e0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 66  /* Number of ref
142f0 65 72 65 6e 63 65 73 20 74 6f 20 74 68 69 73 20  erences to this 
14300 4b 65 79 49 6e 66 6f 20 6f 62 6a 65 63 74 20 2a  KeyInfo object *
14310 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20  /.  u8 enc;     
14320 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
14330 65 6e 63 6f 64 69 6e 67 20 2d 20 6f 6e 65 20 6f  encoding - one o
14340 66 20 74 68 65 20 53 51 4c 49 54 45 5f 55 54 46  f the SQLITE_UTF
14350 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31  * values */.  u1
14360 36 20 6e 4b 65 79 46 69 65 6c 64 3b 20 20 20 20  6 nKeyField;    
14370 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6b    /* Number of k
14380 65 79 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  ey columns in th
14390 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 31 36  e index */.  u16
143a0 20 6e 41 6c 6c 46 69 65 6c 64 3b 20 20 20 20 20   nAllField;     
143b0 20 2f 2a 20 54 6f 74 61 6c 20 63 6f 6c 75 6d 6e   /* Total column
143c0 73 2c 20 69 6e 63 6c 75 64 69 6e 67 20 6b 65 79  s, including key
143d0 20 70 6c 75 73 20 6f 74 68 65 72 73 20 2a 2f 0a   plus others */.
143e0 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20    sqlite3 *db;  
143f0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74        /* The dat
14400 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
14410 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f   */.  u8 *aSortO
14420 72 64 65 72 3b 20 20 20 20 20 2f 2a 20 53 6f 72  rder;     /* Sor
14430 74 20 6f 72 64 65 72 20 66 6f 72 20 65 61 63 68  t order for each
14440 20 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20 20 43 6f   column. */.  Co
14450 6c 6c 53 65 71 20 2a 61 43 6f 6c 6c 5b 31 5d 3b  llSeq *aColl[1];
14460 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73    /* Collating s
14470 65 71 75 65 6e 63 65 20 66 6f 72 20 65 61 63 68  equence for each
14480 20 74 65 72 6d 20 6f 66 20 74 68 65 20 6b 65 79   term of the key
14490 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
144a0 69 73 20 6f 62 6a 65 63 74 20 68 6f 6c 64 73 20  is object holds 
144b0 61 20 72 65 63 6f 72 64 20 77 68 69 63 68 20 68  a record which h
144c0 61 73 20 62 65 65 6e 20 70 61 72 73 65 64 20 6f  as been parsed o
144d0 75 74 20 69 6e 74 6f 20 69 6e 64 69 76 69 64 75  ut into individu
144e0 61 6c 0a 2a 2a 20 66 69 65 6c 64 73 2c 20 66 6f  al.** fields, fo
144f0 72 20 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f  r the purposes o
14500 66 20 64 6f 69 6e 67 20 61 20 63 6f 6d 70 61 72  f doing a compar
14510 69 73 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 20 72 65  ison..**.** A re
14520 63 6f 72 64 20 69 73 20 61 6e 20 6f 62 6a 65 63  cord is an objec
14530 74 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  t that contains 
14540 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 66 69 65 6c  one or more fiel
14550 64 73 20 6f 66 20 64 61 74 61 2e 0a 2a 2a 20 52  ds of data..** R
14560 65 63 6f 72 64 73 20 61 72 65 20 75 73 65 64 20  ecords are used 
14570 74 6f 20 73 74 6f 72 65 20 74 68 65 20 63 6f 6e  to store the con
14580 74 65 6e 74 20 6f 66 20 61 20 74 61 62 6c 65 20  tent of a table 
14590 72 6f 77 20 61 6e 64 20 74 6f 20 73 74 6f 72 65  row and to store
145a0 0a 2a 2a 20 74 68 65 20 6b 65 79 20 6f 66 20 61  .** the key of a
145b0 6e 20 69 6e 64 65 78 2e 20 20 41 20 62 6c 6f 62  n index.  A blob
145c0 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20 72   encoding of a r
145d0 65 63 6f 72 64 20 69 73 20 63 72 65 61 74 65 64  ecord is created
145e0 20 62 79 0a 2a 2a 20 74 68 65 20 4f 50 5f 4d 61   by.** the OP_Ma
145f0 6b 65 52 65 63 6f 72 64 20 6f 70 63 6f 64 65 20  keRecord opcode 
14600 6f 66 20 74 68 65 20 56 44 42 45 20 61 6e 64 20  of the VDBE and 
14610 69 73 20 64 69 73 61 73 73 65 6d 62 6c 65 64 20  is disassembled 
14620 62 79 20 74 68 65 0a 2a 2a 20 4f 50 5f 43 6f 6c  by the.** OP_Col
14630 75 6d 6e 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a  umn opcode..**.*
14640 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
14650 20 74 68 69 73 20 6f 62 6a 65 63 74 20 73 65 72   this object ser
14660 76 65 73 20 61 73 20 61 20 22 6b 65 79 22 20 66  ves as a "key" f
14670 6f 72 20 64 6f 69 6e 67 20 61 20 73 65 61 72 63  or doing a searc
14680 68 20 6f 6e 0a 2a 2a 20 61 6e 20 69 6e 64 65 78  h on.** an index
14690 20 62 2b 74 72 65 65 2e 20 54 68 65 20 67 6f 61   b+tree. The goa
146a0 6c 20 6f 66 20 74 68 65 20 73 65 61 72 63 68 20  l of the search 
146b0 69 73 20 74 6f 20 66 69 6e 64 20 74 68 65 20 65  is to find the e
146c0 6e 74 72 79 20 74 68 61 74 0a 2a 2a 20 69 73 20  ntry that.** is 
146d0 63 6c 6f 73 65 64 20 74 6f 20 74 68 65 20 6b 65  closed to the ke
146e0 79 20 64 65 73 63 72 69 62 65 64 20 62 79 20 74  y described by t
146f0 68 69 73 20 6f 62 6a 65 63 74 2e 20 20 54 68 69  his object.  Thi
14700 73 20 6f 62 6a 65 63 74 20 6d 69 67 68 74 20 68  s object might h
14710 6f 6c 64 0a 2a 2a 20 6a 75 73 74 20 61 20 70 72  old.** just a pr
14720 65 66 69 78 20 6f 66 20 74 68 65 20 6b 65 79 2e  efix of the key.
14730 20 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20    The number of 
14740 66 69 65 6c 64 73 20 69 73 20 67 69 76 65 6e 20  fields is given 
14750 62 79 0a 2a 2a 20 70 4b 65 79 49 6e 66 6f 2d 3e  by.** pKeyInfo->
14760 6e 46 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  nField..**.** Th
14770 65 20 72 31 20 61 6e 64 20 72 32 20 66 69 65 6c  e r1 and r2 fiel
14780 64 73 20 61 72 65 20 74 68 65 20 76 61 6c 75 65  ds are the value
14790 73 20 74 6f 20 72 65 74 75 72 6e 20 69 66 20 74  s to return if t
147a0 68 69 73 20 6b 65 79 20 69 73 20 6c 65 73 73 20  his key is less 
147b0 74 68 61 6e 0a 2a 2a 20 6f 72 20 67 72 65 61 74  than.** or great
147c0 65 72 20 74 68 61 6e 20 61 20 6b 65 79 20 69 6e  er than a key in
147d0 20 74 68 65 20 62 74 72 65 65 2c 20 72 65 73 70   the btree, resp
147e0 65 63 74 69 76 65 6c 79 2e 20 20 54 68 65 73 65  ectively.  These
147f0 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 0a 2a 2a   are normally.**
14800 20 2d 31 20 61 6e 64 20 2b 31 20 72 65 73 70 65   -1 and +1 respe
14810 63 74 69 76 65 6c 79 2c 20 62 75 74 20 6d 69 67  ctively, but mig
14820 68 74 20 62 65 20 69 6e 76 65 72 74 65 64 20 74  ht be inverted t
14830 6f 20 2b 31 20 61 6e 64 20 2d 31 20 69 66 20 74  o +1 and -1 if t
14840 68 65 20 62 2d 74 72 65 65 0a 2a 2a 20 69 73 20  he b-tree.** is 
14850 69 6e 20 44 45 53 43 20 6f 72 64 65 72 2e 0a 2a  in DESC order..*
14860 2a 0a 2a 2a 20 54 68 65 20 6b 65 79 20 63 6f 6d  *.** The key com
14870 70 61 72 69 73 6f 6e 20 66 75 6e 63 74 69 6f 6e  parison function
14880 73 20 61 63 74 75 61 6c 6c 79 20 72 65 74 75 72  s actually retur
14890 6e 20 64 65 66 61 75 6c 74 5f 72 63 20 77 68 65  n default_rc whe
148a0 6e 20 74 68 65 79 20 66 69 6e 64 0a 2a 2a 20 61  n they find.** a
148b0 6e 20 65 71 75 61 6c 73 20 63 6f 6d 70 61 72 69  n equals compari
148c0 73 6f 6e 2e 20 20 64 65 66 61 75 6c 74 5f 72 63  son.  default_rc
148d0 20 63 61 6e 20 62 65 20 2d 31 2c 20 30 2c 20 6f   can be -1, 0, o
148e0 72 20 2b 31 2e 20 20 49 66 20 74 68 65 72 65 20  r +1.  If there 
148f0 61 72 65 0a 2a 2a 20 6d 75 6c 74 69 70 6c 65 20  are.** multiple 
14900 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20 62  entries in the b
14910 2d 74 72 65 65 20 77 69 74 68 20 74 68 65 20 73  -tree with the s
14920 61 6d 65 20 6b 65 79 20 28 77 68 65 6e 20 6f 6e  ame key (when on
14930 6c 79 20 6c 6f 6f 6b 69 6e 67 0a 2a 2a 20 61 74  ly looking.** at
14940 20 74 68 65 20 66 69 72 73 74 20 70 4b 65 79 49   the first pKeyI
14950 6e 66 6f 2d 3e 6e 46 69 65 6c 64 73 2c 29 20 74  nfo->nFields,) t
14960 68 65 6e 20 64 65 66 61 75 6c 74 5f 72 63 20 63  hen default_rc c
14970 61 6e 20 62 65 20 73 65 74 20 74 6f 20 2d 31 20  an be set to -1 
14980 74 6f 0a 2a 2a 20 63 61 75 73 65 20 74 68 65 20  to.** cause the 
14990 73 65 61 72 63 68 20 74 6f 20 66 69 6e 64 20 74  search to find t
149a0 68 65 20 6c 61 73 74 20 6d 61 74 63 68 2c 20 6f  he last match, o
149b0 72 20 2b 31 20 74 6f 20 63 61 75 73 65 20 74 68  r +1 to cause th
149c0 65 20 73 65 61 72 63 68 20 74 6f 0a 2a 2a 20 66  e search to.** f
149d0 69 6e 64 20 74 68 65 20 66 69 72 73 74 20 6d 61  ind the first ma
149e0 74 63 68 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6b  tch..**.** The k
149f0 65 79 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66 75  ey comparison fu
14a00 6e 63 74 69 6f 6e 73 20 77 69 6c 6c 20 73 65 74  nctions will set
14a10 20 65 71 53 65 65 6e 20 74 6f 20 74 72 75 65 20   eqSeen to true 
14a20 69 66 20 74 68 65 79 20 65 76 65 72 0a 2a 2a 20  if they ever.** 
14a30 67 65 74 20 61 6e 64 20 65 71 75 61 6c 20 72 65  get and equal re
14a40 73 75 6c 74 73 20 77 68 65 6e 20 63 6f 6d 70 61  sults when compa
14a50 72 69 6e 67 20 74 68 69 73 20 73 74 72 75 63 74  ring this struct
14a60 75 72 65 20 74 6f 20 61 20 62 2d 74 72 65 65 20  ure to a b-tree 
14a70 72 65 63 6f 72 64 2e 0a 2a 2a 20 57 68 65 6e 20  record..** When 
14a80 64 65 66 61 75 6c 74 5f 72 63 21 3d 30 2c 20 74  default_rc!=0, t
14a90 68 65 20 73 65 61 72 63 68 20 6d 69 67 68 74 20  he search might 
14aa0 65 6e 64 20 75 70 20 6f 6e 20 74 68 65 20 72 65  end up on the re
14ab0 63 6f 72 64 20 69 6d 6d 65 64 69 61 74 65 6c 79  cord immediately
14ac0 0a 2a 2a 20 62 65 66 6f 72 65 20 74 68 65 20 66  .** before the f
14ad0 69 72 73 74 20 6d 61 74 63 68 20 6f 72 20 69 6d  irst match or im
14ae0 6d 65 64 69 61 74 65 6c 79 20 61 66 74 65 72 20  mediately after 
14af0 74 68 65 20 6c 61 73 74 20 6d 61 74 63 68 2e 20  the last match. 
14b00 20 54 68 65 0a 2a 2a 20 65 71 53 65 65 6e 20 66   The.** eqSeen f
14b10 69 65 6c 64 20 77 69 6c 6c 20 69 6e 64 69 63 61  ield will indica
14b20 74 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  te whether or no
14b30 74 20 61 6e 20 65 78 61 63 74 20 6d 61 74 63 68  t an exact match
14b40 20 65 78 69 73 74 73 20 69 6e 20 74 68 65 0a 2a   exists in the.*
14b50 2a 20 62 2d 74 72 65 65 2e 0a 2a 2f 0a 73 74 72  * b-tree..*/.str
14b60 75 63 74 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  uct UnpackedReco
14b70 72 64 20 7b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a  rd {.  KeyInfo *
14b80 70 4b 65 79 49 6e 66 6f 3b 20 20 2f 2a 20 43 6f  pKeyInfo;  /* Co
14b90 6c 6c 61 74 69 6f 6e 20 61 6e 64 20 73 6f 72 74  llation and sort
14ba0 2d 6f 72 64 65 72 20 69 6e 66 6f 72 6d 61 74 69  -order informati
14bb0 6f 6e 20 2a 2f 0a 20 20 4d 65 6d 20 2a 61 4d 65  on */.  Mem *aMe
14bc0 6d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56  m;          /* V
14bd0 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e  alues */.  u16 n
14be0 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20 2f  Field;         /
14bf0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72  * Number of entr
14c00 69 65 73 20 69 6e 20 61 70 4d 65 6d 5b 5d 20 2a  ies in apMem[] *
14c10 2f 0a 20 20 69 38 20 64 65 66 61 75 6c 74 5f 72  /.  i8 default_r
14c20 63 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70 61  c;      /* Compa
14c30 72 69 73 6f 6e 20 72 65 73 75 6c 74 20 69 66 20  rison result if 
14c40 6b 65 79 73 20 61 72 65 20 65 71 75 61 6c 20 2a  keys are equal *
14c50 2f 0a 20 20 75 38 20 65 72 72 43 6f 64 65 3b 20  /.  u8 errCode; 
14c60 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72 6f 72          /* Error
14c70 20 64 65 74 65 63 74 65 64 20 62 79 20 78 52 65   detected by xRe
14c80 63 6f 72 64 43 6f 6d 70 61 72 65 20 28 43 4f 52  cordCompare (COR
14c90 52 55 50 54 20 6f 72 20 4e 4f 4d 45 4d 29 20 2a  RUPT or NOMEM) *
14ca0 2f 0a 20 20 69 38 20 72 31 3b 20 20 20 20 20 20  /.  i8 r1;      
14cb0 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
14cc0 20 74 6f 20 72 65 74 75 72 6e 20 69 66 20 28 6c   to return if (l
14cd0 68 73 20 3c 20 72 68 73 29 20 2a 2f 0a 20 20 69  hs < rhs) */.  i
14ce0 38 20 72 32 3b 20 20 20 20 20 20 20 20 20 20 20  8 r2;           
14cf0 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72     /* Value to r
14d00 65 74 75 72 6e 20 69 66 20 28 6c 68 73 20 3e 20  eturn if (lhs > 
14d10 72 68 73 29 20 2a 2f 0a 20 20 75 38 20 65 71 53  rhs) */.  u8 eqS
14d20 65 65 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  een;          /*
14d30 20 54 72 75 65 20 69 66 20 61 6e 20 65 71 75 61   True if an equa
14d40 6c 69 74 79 20 63 6f 6d 70 61 72 69 73 6f 6e 20  lity comparison 
14d50 68 61 73 20 62 65 65 6e 20 73 65 65 6e 20 2a 2f  has been seen */
14d60 0a 7d 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  .};.../*.** Each
14d70 20 53 51 4c 20 69 6e 64 65 78 20 69 73 20 72 65   SQL index is re
14d80 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d  presented in mem
14d90 6f 72 79 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73  ory by an.** ins
14da0 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
14db0 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
14dc0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6c 75  ..**.** The colu
14dd0 6d 6e 73 20 6f 66 20 74 68 65 20 74 61 62 6c 65  mns of the table
14de0 20 74 68 61 74 20 61 72 65 20 74 6f 20 62 65 20   that are to be 
14df0 69 6e 64 65 78 65 64 20 61 72 65 20 64 65 73 63  indexed are desc
14e00 72 69 62 65 64 0a 2a 2a 20 62 79 20 74 68 65 20  ribed.** by the 
14e10 61 69 43 6f 6c 75 6d 6e 5b 5d 20 66 69 65 6c 64  aiColumn[] field
14e20 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
14e30 72 65 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65  re.  For example
14e40 2c 20 73 75 70 70 6f 73 65 0a 2a 2a 20 77 65 20  , suppose.** we 
14e50 68 61 76 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69  have the followi
14e60 6e 67 20 74 61 62 6c 65 20 61 6e 64 20 69 6e 64  ng table and ind
14e70 65 78 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52  ex:.**.**     CR
14e80 45 41 54 45 20 54 41 42 4c 45 20 45 78 31 28 63  EATE TABLE Ex1(c
14e90 31 20 69 6e 74 2c 20 63 32 20 69 6e 74 2c 20 63  1 int, c2 int, c
14ea0 33 20 74 65 78 74 29 3b 0a 2a 2a 20 20 20 20 20  3 text);.**     
14eb0 43 52 45 41 54 45 20 49 4e 44 45 58 20 45 78 32  CREATE INDEX Ex2
14ec0 20 4f 4e 20 45 78 31 28 63 33 2c 63 31 29 3b 0a   ON Ex1(c3,c1);.
14ed0 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 54 61 62  **.** In the Tab
14ee0 6c 65 20 73 74 72 75 63 74 75 72 65 20 64 65 73  le structure des
14ef0 63 72 69 62 69 6e 67 20 45 78 31 2c 20 6e 43 6f  cribing Ex1, nCo
14f00 6c 3d 3d 33 20 62 65 63 61 75 73 65 20 74 68 65  l==3 because the
14f10 72 65 20 61 72 65 0a 2a 2a 20 74 68 72 65 65 20  re are.** three 
14f20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74  columns in the t
14f30 61 62 6c 65 2e 20 20 49 6e 20 74 68 65 20 49 6e  able.  In the In
14f40 64 65 78 20 73 74 72 75 63 74 75 72 65 20 64 65  dex structure de
14f50 73 63 72 69 62 69 6e 67 0a 2a 2a 20 45 78 32 2c  scribing.** Ex2,
14f60 20 6e 43 6f 6c 75 6d 6e 3d 3d 32 20 73 69 6e 63   nColumn==2 sinc
14f70 65 20 32 20 6f 66 20 74 68 65 20 33 20 63 6f 6c  e 2 of the 3 col
14f80 75 6d 6e 73 20 6f 66 20 45 78 31 20 61 72 65 20  umns of Ex1 are 
14f90 69 6e 64 65 78 65 64 2e 0a 2a 2a 20 54 68 65 20  indexed..** The 
14fa0 76 61 6c 75 65 20 6f 66 20 61 69 43 6f 6c 75 6d  value of aiColum
14fb0 6e 20 69 73 20 7b 32 2c 20 30 7d 2e 20 20 61 69  n is {2, 0}.  ai
14fc0 43 6f 6c 75 6d 6e 5b 30 5d 3d 3d 32 20 62 65 63  Column[0]==2 bec
14fd0 61 75 73 65 20 74 68 65 0a 2a 2a 20 66 69 72 73  ause the.** firs
14fe0 74 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69  t column to be i
14ff0 6e 64 65 78 65 64 20 28 63 33 29 20 68 61 73 20  ndexed (c3) has 
15000 61 6e 20 69 6e 64 65 78 20 6f 66 20 32 20 69 6e  an index of 2 in
15010 20 45 78 31 2e 61 43 6f 6c 5b 5d 2e 0a 2a 2a 20   Ex1.aCol[]..** 
15020 54 68 65 20 73 65 63 6f 6e 64 20 63 6f 6c 75 6d  The second colum
15030 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20  n to be indexed 
15040 28 63 31 29 20 68 61 73 20 61 6e 20 69 6e 64 65  (c1) has an inde
15050 78 20 6f 66 20 30 20 69 6e 0a 2a 2a 20 45 78 31  x of 0 in.** Ex1
15060 2e 61 43 6f 6c 5b 5d 2c 20 68 65 6e 63 65 20 45  .aCol[], hence E
15070 78 32 2e 61 69 43 6f 6c 75 6d 6e 5b 31 5d 3d 3d  x2.aiColumn[1]==
15080 30 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 6e 64  0..**.** The Ind
15090 65 78 2e 6f 6e 45 72 72 6f 72 20 66 69 65 6c 64  ex.onError field
150a0 20 64 65 74 65 72 6d 69 6e 65 73 20 77 68 65 74   determines whet
150b0 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 69  her or not the i
150c0 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 73 0a 2a  ndexed columns.*
150d0 2a 20 6d 75 73 74 20 62 65 20 75 6e 69 71 75 65  * must be unique
150e0 20 61 6e 64 20 77 68 61 74 20 74 6f 20 64 6f 20   and what to do 
150f0 69 66 20 74 68 65 79 20 61 72 65 20 6e 6f 74 2e  if they are not.
15100 20 20 57 68 65 6e 20 49 6e 64 65 78 2e 6f 6e 45    When Index.onE
15110 72 72 6f 72 3d 4f 45 5f 4e 6f 6e 65 2c 0a 2a 2a  rror=OE_None,.**
15120 20 69 74 20 6d 65 61 6e 73 20 74 68 69 73 20 69   it means this i
15130 73 20 6e 6f 74 20 61 20 75 6e 69 71 75 65 20 69  s not a unique i
15140 6e 64 65 78 2e 20 20 4f 74 68 65 72 77 69 73 65  ndex.  Otherwise
15150 20 69 74 20 69 73 20 61 20 75 6e 69 71 75 65 20   it is a unique 
15160 69 6e 64 65 78 0a 2a 2a 20 61 6e 64 20 74 68 65  index.** and the
15170 20 76 61 6c 75 65 20 6f 66 20 49 6e 64 65 78 2e   value of Index.
15180 6f 6e 45 72 72 6f 72 20 69 6e 64 69 63 61 74 65  onError indicate
15190 20 74 68 65 20 77 68 69 63 68 20 63 6f 6e 66 6c   the which confl
151a0 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 0a 2a  ict resolution.*
151b0 2a 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20 65  * algorithm to e
151c0 6d 70 6c 6f 79 20 77 68 65 6e 65 76 65 72 20 61  mploy whenever a
151d0 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64  n attempt is mad
151e0 65 20 74 6f 20 69 6e 73 65 72 74 20 61 20 6e 6f  e to insert a no
151f0 6e 2d 75 6e 69 71 75 65 0a 2a 2a 20 65 6c 65 6d  n-unique.** elem
15200 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 57 68 69 6c 65  ent..**.** While
15210 20 70 61 72 73 69 6e 67 20 61 20 43 52 45 41 54   parsing a CREAT
15220 45 20 54 41 42 4c 45 20 6f 72 20 43 52 45 41 54  E TABLE or CREAT
15230 45 20 49 4e 44 45 58 20 73 74 61 74 65 6d 65 6e  E INDEX statemen
15240 74 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a  t in order to.**
15250 20 67 65 6e 65 72 61 74 65 20 56 44 42 45 20 63   generate VDBE c
15260 6f 64 65 20 28 61 73 20 6f 70 70 6f 73 65 64 20  ode (as opposed 
15270 74 6f 20 70 61 72 73 69 6e 67 20 6f 6e 65 20 72  to parsing one r
15280 65 61 64 20 66 72 6f 6d 20 61 6e 20 73 71 6c 69  ead from an sqli
15290 74 65 5f 6d 61 73 74 65 72 0a 2a 2a 20 74 61 62  te_master.** tab
152a0 6c 65 20 61 73 20 70 61 72 74 20 6f 66 20 70 61  le as part of pa
152b0 72 73 69 6e 67 20 61 6e 20 65 78 69 73 74 69 6e  rsing an existin
152c0 67 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  g database schem
152d0 61 29 2c 20 74 72 61 6e 73 69 65 6e 74 20 69 6e  a), transient in
152e0 73 74 61 6e 63 65 73 0a 2a 2a 20 6f 66 20 74 68  stances.** of th
152f0 69 73 20 73 74 72 75 63 74 75 72 65 20 6d 61 79  is structure may
15300 20 62 65 20 63 72 65 61 74 65 64 2e 20 49 6e 20   be created. In 
15310 74 68 69 73 20 63 61 73 65 20 74 68 65 20 49 6e  this case the In
15320 64 65 78 2e 74 6e 75 6d 20 76 61 72 69 61 62 6c  dex.tnum variabl
15330 65 20 69 73 0a 2a 2a 20 75 73 65 64 20 74 6f 20  e is.** used to 
15340 73 74 6f 72 65 20 74 68 65 20 61 64 64 72 65 73  store the addres
15350 73 20 6f 66 20 61 20 56 44 42 45 20 69 6e 73 74  s of a VDBE inst
15360 72 75 63 74 69 6f 6e 2c 20 6e 6f 74 20 61 20 64  ruction, not a d
15370 61 74 61 62 61 73 65 20 70 61 67 65 0a 2a 2a 20  atabase page.** 
15380 6e 75 6d 62 65 72 20 28 69 74 20 63 61 6e 6e 6f  number (it canno
15390 74 20 2d 20 74 68 65 20 64 61 74 61 62 61 73 65  t - the database
153a0 20 70 61 67 65 20 69 73 20 6e 6f 74 20 61 6c 6c   page is not all
153b0 6f 63 61 74 65 64 20 75 6e 74 69 6c 20 74 68 65  ocated until the
153c0 20 56 44 42 45 0a 2a 2a 20 70 72 6f 67 72 61 6d   VDBE.** program
153d0 20 69 73 20 65 78 65 63 75 74 65 64 29 2e 20 53   is executed). S
153e0 65 65 20 63 6f 6e 76 65 72 74 54 6f 57 69 74 68  ee convertToWith
153f0 6f 75 74 52 6f 77 69 64 54 61 62 6c 65 28 29 20  outRowidTable() 
15400 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a  for details..*/.
15410 73 74 72 75 63 74 20 49 6e 64 65 78 20 7b 0a 20  struct Index {. 
15420 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
15430 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
15440 65 20 6f 66 20 74 68 69 73 20 69 6e 64 65 78 20  e of this index 
15450 2a 2f 0a 20 20 69 31 36 20 2a 61 69 43 6f 6c 75  */.  i16 *aiColu
15460 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  mn;           /*
15470 20 57 68 69 63 68 20 63 6f 6c 75 6d 6e 73 20 61   Which columns a
15480 72 65 20 75 73 65 64 20 62 79 20 74 68 69 73 20  re used by this 
15490 69 6e 64 65 78 2e 20 20 31 73 74 20 69 73 20 30  index.  1st is 0
154a0 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 2a 61 69   */.  LogEst *ai
154b0 52 6f 77 4c 6f 67 45 73 74 3b 20 20 20 20 20 2f  RowLogEst;     /
154c0 2a 20 46 72 6f 6d 20 41 4e 41 4c 59 5a 45 3a 20  * From ANALYZE: 
154d0 45 73 74 2e 20 72 6f 77 73 20 73 65 6c 65 63 74  Est. rows select
154e0 65 64 20 62 79 20 65 61 63 68 20 63 6f 6c 75 6d  ed by each colum
154f0 6e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54  n */.  Table *pT
15500 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  able;           
15510 2f 2a 20 54 68 65 20 53 51 4c 20 74 61 62 6c 65  /* The SQL table
15520 20 62 65 69 6e 67 20 69 6e 64 65 78 65 64 20 2a   being indexed *
15530 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66  /.  char *zColAf
15540 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  f;           /* 
15550 53 74 72 69 6e 67 20 64 65 66 69 6e 69 6e 67 20  String defining 
15560 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20  the affinity of 
15570 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  each column */. 
15580 20 49 6e 64 65 78 20 2a 70 4e 65 78 74 3b 20 20   Index *pNext;  
15590 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
155a0 20 6e 65 78 74 20 69 6e 64 65 78 20 61 73 73 6f   next index asso
155b0 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20  ciated with the 
155c0 73 61 6d 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20  same table */.  
155d0 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
155e0 20 20 20 20 20 20 20 20 20 2f 2a 20 53 63 68 65           /* Sche
155f0 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  ma containing th
15600 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38  is index */.  u8
15610 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20 20 20   *aSortOrder;   
15620 20 20 20 20 20 20 20 2f 2a 20 66 6f 72 20 65 61         /* for ea
15630 63 68 20 63 6f 6c 75 6d 6e 3a 20 54 72 75 65 3d  ch column: True=
15640 3d 44 45 53 43 2c 20 46 61 6c 73 65 3d 3d 41 53  =DESC, False==AS
15650 43 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  C */.  const cha
15660 72 20 2a 2a 61 7a 43 6f 6c 6c 3b 20 20 20 20 20  r **azColl;     
15670 2f 2a 20 41 72 72 61 79 20 6f 66 20 63 6f 6c 6c  /* Array of coll
15680 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 6e  ation sequence n
15690 61 6d 65 73 20 66 6f 72 20 69 6e 64 65 78 20 2a  ames for index *
156a0 2f 0a 20 20 45 78 70 72 20 2a 70 50 61 72 74 49  /.  Expr *pPartI
156b0 64 78 57 68 65 72 65 3b 20 20 20 20 20 2f 2a 20  dxWhere;     /* 
156c0 57 48 45 52 45 20 63 6c 61 75 73 65 20 66 6f 72  WHERE clause for
156d0 20 70 61 72 74 69 61 6c 20 69 6e 64 69 63 65 73   partial indices
156e0 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
156f0 61 43 6f 6c 45 78 70 72 3b 20 20 20 20 20 20 2f  aColExpr;      /
15700 2a 20 43 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73  * Column express
15710 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 74 6e  ions */.  int tn
15720 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  um;             
15730 20 20 20 2f 2a 20 44 42 20 50 61 67 65 20 63 6f     /* DB Page co
15740 6e 74 61 69 6e 69 6e 67 20 72 6f 6f 74 20 6f 66  ntaining root of
15750 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20   this index */. 
15760 20 4c 6f 67 45 73 74 20 73 7a 49 64 78 52 6f 77   LogEst szIdxRow
15770 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 45 73 74  ;         /* Est
15780 69 6d 61 74 65 64 20 61 76 65 72 61 67 65 20 72  imated average r
15790 6f 77 20 73 69 7a 65 20 69 6e 20 62 79 74 65 73  ow size in bytes
157a0 20 2a 2f 0a 20 20 75 31 36 20 6e 4b 65 79 43 6f   */.  u16 nKeyCo
157b0 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  l;             /
157c0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
157d0 6d 6e 73 20 66 6f 72 6d 69 6e 67 20 74 68 65 20  mns forming the 
157e0 6b 65 79 20 2a 2f 0a 20 20 75 31 36 20 6e 43 6f  key */.  u16 nCo
157f0 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20  lumn;           
15800 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
15810 6f 6c 75 6d 6e 73 20 73 74 6f 72 65 64 20 69 6e  olumns stored in
15820 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20   the index */.  
15830 75 38 20 6f 6e 45 72 72 6f 72 3b 20 20 20 20 20  u8 onError;     
15840 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f 41           /* OE_A
15850 62 6f 72 74 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c  bort, OE_Ignore,
15860 20 4f 45 5f 52 65 70 6c 61 63 65 2c 20 6f 72 20   OE_Replace, or 
15870 4f 45 5f 4e 6f 6e 65 20 2a 2f 0a 20 20 75 6e 73  OE_None */.  uns
15880 69 67 6e 65 64 20 69 64 78 54 79 70 65 3a 32 3b  igned idxType:2;
15890 20 20 20 20 20 20 2f 2a 20 31 3d 3d 55 4e 49 51        /* 1==UNIQ
158a0 55 45 2c 20 32 3d 3d 50 52 49 4d 41 52 59 20 4b  UE, 2==PRIMARY K
158b0 45 59 2c 20 30 3d 3d 43 52 45 41 54 45 20 49 4e  EY, 0==CREATE IN
158c0 44 45 58 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  DEX */.  unsigne
158d0 64 20 62 55 6e 6f 72 64 65 72 65 64 3a 31 3b 20  d bUnordered:1; 
158e0 20 20 2f 2a 20 55 73 65 20 74 68 69 73 20 69 6e    /* Use this in
158f0 64 65 78 20 66 6f 72 20 3d 3d 20 6f 72 20 49 4e  dex for == or IN
15900 20 71 75 65 72 69 65 73 20 6f 6e 6c 79 20 2a 2f   queries only */
15910 0a 20 20 75 6e 73 69 67 6e 65 64 20 75 6e 69 71  .  unsigned uniq
15920 4e 6f 74 4e 75 6c 6c 3a 31 3b 20 20 2f 2a 20 54  NotNull:1;  /* T
15930 72 75 65 20 69 66 20 55 4e 49 51 55 45 20 61 6e  rue if UNIQUE an
15940 64 20 4e 4f 54 20 4e 55 4c 4c 20 66 6f 72 20 61  d NOT NULL for a
15950 6c 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20  ll columns */.  
15960 75 6e 73 69 67 6e 65 64 20 69 73 52 65 73 69 7a  unsigned isResiz
15970 65 64 3a 31 3b 20 20 20 20 2f 2a 20 54 72 75 65  ed:1;    /* True
15980 20 69 66 20 72 65 73 69 7a 65 49 6e 64 65 78 4f   if resizeIndexO
15990 62 6a 65 63 74 28 29 20 68 61 73 20 62 65 65 6e  bject() has been
159a0 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20 75 6e 73   called */.  uns
159b0 69 67 6e 65 64 20 69 73 43 6f 76 65 72 69 6e 67  igned isCovering
159c0 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20 69 66  :1;   /* True if
159d0 20 74 68 69 73 20 69 73 20 61 20 63 6f 76 65 72   this is a cover
159e0 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75  ing index */.  u
159f0 6e 73 69 67 6e 65 64 20 6e 6f 53 6b 69 70 53 63  nsigned noSkipSc
15a00 61 6e 3a 31 3b 20 20 20 2f 2a 20 44 6f 20 6e 6f  an:1;   /* Do no
15a10 74 20 74 72 79 20 74 6f 20 75 73 65 20 73 6b 69  t try to use ski
15a20 70 2d 73 63 61 6e 20 69 66 20 74 72 75 65 20 2a  p-scan if true *
15a30 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 68 61 73  /.  unsigned has
15a40 53 74 61 74 31 3a 31 3b 20 20 20 20 20 2f 2a 20  Stat1:1;     /* 
15a50 61 69 52 6f 77 4c 6f 67 45 73 74 20 76 61 6c 75  aiRowLogEst valu
15a60 65 73 20 63 6f 6d 65 20 66 72 6f 6d 20 73 71 6c  es come from sql
15a70 69 74 65 5f 73 74 61 74 31 20 2a 2f 0a 23 69 66  ite_stat1 */.#if
15a80 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
15a90 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34  E_STAT3_OR_STAT4
15aa0 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65 3b 20  .  int nSample; 
15ab0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
15ac0 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74  umber of element
15ad0 73 20 69 6e 20 61 53 61 6d 70 6c 65 5b 5d 20 2a  s in aSample[] *
15ae0 2f 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65 43  /.  int nSampleC
15af0 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ol;          /* 
15b00 53 69 7a 65 20 6f 66 20 49 6e 64 65 78 53 61 6d  Size of IndexSam
15b10 70 6c 65 2e 61 6e 45 71 5b 5d 20 61 6e 64 20 73  ple.anEq[] and s
15b20 6f 20 6f 6e 20 2a 2f 0a 20 20 74 52 6f 77 63 6e  o on */.  tRowcn
15b30 74 20 2a 61 41 76 67 45 71 3b 20 20 20 20 20 20  t *aAvgEq;      
15b40 20 20 20 2f 2a 20 41 76 65 72 61 67 65 20 6e 45     /* Average nE
15b50 71 20 76 61 6c 75 65 73 20 66 6f 72 20 6b 65 79  q values for key
15b60 73 20 6e 6f 74 20 69 6e 20 61 53 61 6d 70 6c 65  s not in aSample
15b70 20 2a 2f 0a 20 20 49 6e 64 65 78 53 61 6d 70 6c   */.  IndexSampl
15b80 65 20 2a 61 53 61 6d 70 6c 65 3b 20 20 20 20 2f  e *aSample;    /
15b90 2a 20 53 61 6d 70 6c 65 73 20 6f 66 20 74 68 65  * Samples of the
15ba0 20 6c 65 66 74 2d 6d 6f 73 74 20 6b 65 79 20 2a   left-most key *
15bb0 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 69 52  /.  tRowcnt *aiR
15bc0 6f 77 45 73 74 3b 20 20 20 20 20 20 20 2f 2a 20  owEst;       /* 
15bd0 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d 69 63 20  Non-logarithmic 
15be0 73 74 61 74 31 20 64 61 74 61 20 66 6f 72 20 74  stat1 data for t
15bf0 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 74  his index */.  t
15c00 52 6f 77 63 6e 74 20 6e 52 6f 77 45 73 74 30 3b  Rowcnt nRowEst0;
15c10 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c          /* Non-l
15c20 6f 67 61 72 69 74 68 6d 69 63 20 6e 75 6d 62 65  ogarithmic numbe
15c30 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65  r of rows in the
15c40 20 69 6e 64 65 78 20 2a 2f 0a 23 65 6e 64 69 66   index */.#endif
15c50 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  .};../*.** Allow
15c60 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 49 6e  ed values for In
15c70 64 65 78 2e 69 64 78 54 79 70 65 0a 2a 2f 0a 23  dex.idxType.*/.#
15c80 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44  define SQLITE_ID
15c90 58 54 59 50 45 5f 41 50 50 44 45 46 20 20 20 20  XTYPE_APPDEF    
15ca0 20 20 30 20 20 20 2f 2a 20 43 72 65 61 74 65 64    0   /* Created
15cb0 20 75 73 69 6e 67 20 43 52 45 41 54 45 20 49 4e   using CREATE IN
15cc0 44 45 58 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  DEX */.#define S
15cd0 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 55 4e  QLITE_IDXTYPE_UN
15ce0 49 51 55 45 20 20 20 20 20 20 31 20 20 20 2f 2a  IQUE      1   /*
15cf0 20 49 6d 70 6c 65 6d 65 6e 74 73 20 61 20 55 4e   Implements a UN
15d00 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20  IQUE constraint 
15d10 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
15d20 45 5f 49 44 58 54 59 50 45 5f 50 52 49 4d 41 52  E_IDXTYPE_PRIMAR
15d30 59 4b 45 59 20 20 32 20 20 20 2f 2a 20 49 73 20  YKEY  2   /* Is 
15d40 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20  the PRIMARY KEY 
15d50 66 6f 72 20 74 68 65 20 74 61 62 6c 65 20 2a 2f  for the table */
15d60 0a 0a 2f 2a 20 52 65 74 75 72 6e 20 74 72 75 65  ../* Return true
15d70 20 69 66 20 69 6e 64 65 78 20 58 20 69 73 20 61   if index X is a
15d80 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69 6e 64   PRIMARY KEY ind
15d90 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73  ex */.#define Is
15da0 50 72 69 6d 61 72 79 4b 65 79 49 6e 64 65 78 28  PrimaryKeyIndex(
15db0 58 29 20 20 28 28 58 29 2d 3e 69 64 78 54 79 70  X)  ((X)->idxTyp
15dc0 65 3d 3d 53 51 4c 49 54 45 5f 49 44 58 54 59 50  e==SQLITE_IDXTYP
15dd0 45 5f 50 52 49 4d 41 52 59 4b 45 59 29 0a 0a 2f  E_PRIMARYKEY)../
15de0 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66  * Return true if
15df0 20 69 6e 64 65 78 20 58 20 69 73 20 61 20 55 4e   index X is a UN
15e00 49 51 55 45 20 69 6e 64 65 78 20 2a 2f 0a 23 64  IQUE index */.#d
15e10 65 66 69 6e 65 20 49 73 55 6e 69 71 75 65 49 6e  efine IsUniqueIn
15e20 64 65 78 28 58 29 20 20 20 20 20 20 28 28 58 29  dex(X)      ((X)
15e30 2d 3e 6f 6e 45 72 72 6f 72 21 3d 4f 45 5f 4e 6f  ->onError!=OE_No
15e40 6e 65 29 0a 0a 2f 2a 20 54 68 65 20 49 6e 64 65  ne)../* The Inde
15e50 78 2e 61 69 43 6f 6c 75 6d 6e 5b 5d 20 76 61 6c  x.aiColumn[] val
15e60 75 65 73 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79  ues are normally
15e70 20 70 6f 73 69 74 69 76 65 20 69 6e 74 65 67 65   positive intege
15e80 72 2e 20 20 42 75 74 0a 2a 2a 20 74 68 65 72 65  r.  But.** there
15e90 20 61 72 65 20 73 6f 6d 65 20 6e 65 67 61 74 69   are some negati
15ea0 76 65 20 76 61 6c 75 65 73 20 74 68 61 74 20 68  ve values that h
15eb0 61 76 65 20 73 70 65 63 69 61 6c 20 6d 65 61 6e  ave special mean
15ec0 69 6e 67 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ing:.*/.#define 
15ed0 58 4e 5f 52 4f 57 49 44 20 20 20 20 20 28 2d 31  XN_ROWID     (-1
15ee0 29 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 65 64  )     /* Indexed
15ef0 20 63 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20 72   column is the r
15f00 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  owid */.#define 
15f10 58 4e 5f 45 58 50 52 20 20 20 20 20 20 28 2d 32  XN_EXPR      (-2
15f20 29 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 65 64  )     /* Indexed
15f30 20 63 6f 6c 75 6d 6e 20 69 73 20 61 6e 20 65 78   column is an ex
15f40 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a  pression */../*.
15f50 2a 2a 20 45 61 63 68 20 73 61 6d 70 6c 65 20 73  ** Each sample s
15f60 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c  tored in the sql
15f70 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c 65 20  ite_stat3 table 
15f80 69 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 69  is represented i
15f90 6e 20 6d 65 6d 6f 72 79 0a 2a 2a 20 75 73 69 6e  n memory.** usin
15fa0 67 20 61 20 73 74 72 75 63 74 75 72 65 20 6f 66  g a structure of
15fb0 20 74 68 69 73 20 74 79 70 65 2e 20 20 53 65 65   this type.  See
15fc0 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61   documentation a
15fd0 74 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68 65  t the top of the
15fe0 0a 2a 2a 20 61 6e 61 6c 79 7a 65 2e 63 20 73 6f  .** analyze.c so
15ff0 75 72 63 65 20 66 69 6c 65 20 66 6f 72 20 61 64  urce file for ad
16000 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
16010 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tion..*/.struct 
16020 49 6e 64 65 78 53 61 6d 70 6c 65 20 7b 0a 20 20  IndexSample {.  
16030 76 6f 69 64 20 2a 70 3b 20 20 20 20 20 20 20 20  void *p;        
16040 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
16050 73 61 6d 70 6c 65 64 20 72 65 63 6f 72 64 20 2a  sampled record *
16060 2f 0a 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20  /.  int n;      
16070 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
16080 20 72 65 63 6f 72 64 20 69 6e 20 62 79 74 65 73   record in bytes
16090 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61   */.  tRowcnt *a
160a0 6e 45 71 3b 20 20 20 20 2f 2a 20 45 73 74 2e 20  nEq;    /* Est. 
160b0 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 77  number of rows w
160c0 68 65 72 65 20 74 68 65 20 6b 65 79 20 65 71 75  here the key equ
160d0 61 6c 73 20 74 68 69 73 20 73 61 6d 70 6c 65 20  als this sample 
160e0 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e  */.  tRowcnt *an
160f0 4c 74 3b 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e  Lt;    /* Est. n
16100 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 77 68  umber of rows wh
16110 65 72 65 20 6b 65 79 20 69 73 20 6c 65 73 73 20  ere key is less 
16120 74 68 61 6e 20 74 68 69 73 20 73 61 6d 70 6c 65  than this sample
16130 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61   */.  tRowcnt *a
16140 6e 44 4c 74 3b 20 20 20 2f 2a 20 45 73 74 2e 20  nDLt;   /* Est. 
16150 6e 75 6d 62 65 72 20 6f 66 20 64 69 73 74 69 6e  number of distin
16160 63 74 20 6b 65 79 73 20 6c 65 73 73 20 74 68 61  ct keys less tha
16170 6e 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f  n this sample */
16180 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20  .};../*.** Each 
16190 74 6f 6b 65 6e 20 63 6f 6d 69 6e 67 20 6f 75 74  token coming out
161a0 20 6f 66 20 74 68 65 20 6c 65 78 65 72 20 69 73   of the lexer is
161b0 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a   an instance of.
161c0 2a 2a 20 74 68 69 73 20 73 74 72 75 63 74 75 72  ** this structur
161d0 65 2e 20 20 54 6f 6b 65 6e 73 20 61 72 65 20 61  e.  Tokens are a
161e0 6c 73 6f 20 75 73 65 64 20 61 73 20 70 61 72 74  lso used as part
161f0 20 6f 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f   of an expressio
16200 6e 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 69 66  n..**.** Note if
16210 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 20 74 68 65 6e   Token.z==0 then
16220 20 54 6f 6b 65 6e 2e 64 79 6e 20 61 6e 64 20 54   Token.dyn and T
16230 6f 6b 65 6e 2e 6e 20 61 72 65 20 75 6e 64 65 66  oken.n are undef
16240 69 6e 65 64 20 61 6e 64 0a 2a 2a 20 6d 61 79 20  ined and.** may 
16250 63 6f 6e 74 61 69 6e 20 72 61 6e 64 6f 6d 20 76  contain random v
16260 61 6c 75 65 73 2e 20 20 44 6f 20 6e 6f 74 20 6d  alues.  Do not m
16270 61 6b 65 20 61 6e 79 20 61 73 73 75 6d 70 74 69  ake any assumpti
16280 6f 6e 73 20 61 62 6f 75 74 20 54 6f 6b 65 6e 2e  ons about Token.
16290 64 79 6e 0a 2a 2a 20 61 6e 64 20 54 6f 6b 65 6e  dyn.** and Token
162a0 2e 6e 20 77 68 65 6e 20 54 6f 6b 65 6e 2e 7a 3d  .n when Token.z=
162b0 3d 30 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 6f  =0..*/.struct To
162c0 6b 65 6e 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68  ken {.  const ch
162d0 61 72 20 2a 7a 3b 20 20 20 20 20 2f 2a 20 54 65  ar *z;     /* Te
162e0 78 74 20 6f 66 20 74 68 65 20 74 6f 6b 65 6e 2e  xt of the token.
162f0 20 20 4e 6f 74 20 4e 55 4c 4c 2d 74 65 72 6d 69    Not NULL-termi
16300 6e 61 74 65 64 21 20 2a 2f 0a 20 20 75 6e 73 69  nated! */.  unsi
16310 67 6e 65 64 20 69 6e 74 20 6e 3b 20 20 20 20 2f  gned int n;    /
16320 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 68 61 72  * Number of char
16330 61 63 74 65 72 73 20 69 6e 20 74 68 69 73 20 74  acters in this t
16340 6f 6b 65 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  oken */.};../*.*
16350 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
16360 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
16370 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61  contains informa
16380 74 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20 67  tion needed to g
16390 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65 20  enerate.** code 
163a0 66 6f 72 20 61 20 53 45 4c 45 43 54 20 74 68 61  for a SELECT tha
163b0 74 20 63 6f 6e 74 61 69 6e 73 20 61 67 67 72 65  t contains aggre
163c0 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 2e 0a  gate functions..
163d0 2a 2a 0a 2a 2a 20 49 66 20 45 78 70 72 2e 6f 70  **.** If Expr.op
163e0 3d 3d 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20  ==TK_AGG_COLUMN 
163f0 6f 72 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49  or TK_AGG_FUNCTI
16400 4f 4e 20 74 68 65 6e 20 45 78 70 72 2e 70 41 67  ON then Expr.pAg
16410 67 49 6e 66 6f 20 69 73 20 61 0a 2a 2a 20 70 6f  gInfo is a.** po
16420 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73 74  inter to this st
16430 72 75 63 74 75 72 65 2e 20 20 54 68 65 20 45 78  ructure.  The Ex
16440 70 72 2e 69 43 6f 6c 75 6d 6e 20 66 69 65 6c 64  pr.iColumn field
16450 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 69 6e   is the index in
16460 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 61 43 6f 6c  .** AggInfo.aCol
16470 5b 5d 20 6f 72 20 41 67 67 49 6e 66 6f 2e 61 46  [] or AggInfo.aF
16480 75 6e 63 5b 5d 20 6f 66 20 69 6e 66 6f 72 6d 61  unc[] of informa
16490 74 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20 67  tion needed to g
164a0 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65 20  enerate.** code 
164b0 66 6f 72 20 74 68 61 74 20 6e 6f 64 65 2e 0a 2a  for that node..*
164c0 2a 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 70 47 72  *.** AggInfo.pGr
164d0 6f 75 70 42 79 20 61 6e 64 20 41 67 67 49 6e 66  oupBy and AggInf
164e0 6f 2e 61 46 75 6e 63 2e 70 45 78 70 72 20 70 6f  o.aFunc.pExpr po
164f0 69 6e 74 20 74 6f 20 66 69 65 6c 64 73 20 77 69  int to fields wi
16500 74 68 69 6e 20 74 68 65 0a 2a 2a 20 6f 72 69 67  thin the.** orig
16510 69 6e 61 6c 20 53 65 6c 65 63 74 20 73 74 72 75  inal Select stru
16520 63 74 75 72 65 20 74 68 61 74 20 64 65 73 63 72  cture that descr
16530 69 62 65 73 20 74 68 65 20 53 45 4c 45 43 54 20  ibes the SELECT 
16540 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 73  statement.  Thes
16550 65 0a 2a 2a 20 66 69 65 6c 64 73 20 64 6f 20 6e  e.** fields do n
16560 6f 74 20 6e 65 65 64 20 74 6f 20 62 65 20 66 72  ot need to be fr
16570 65 65 64 20 77 68 65 6e 20 64 65 61 6c 6c 6f 63  eed when dealloc
16580 61 74 69 6e 67 20 74 68 65 20 41 67 67 49 6e 66  ating the AggInf
16590 6f 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a  o structure..*/.
165a0 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 20 7b  struct AggInfo {
165b0 0a 20 20 75 38 20 64 69 72 65 63 74 4d 6f 64 65  .  u8 directMode
165c0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 69  ;          /* Di
165d0 72 65 63 74 20 72 65 6e 64 65 72 69 6e 67 20 6d  rect rendering m
165e0 6f 64 65 20 6d 65 61 6e 73 20 74 61 6b 65 20 64  ode means take d
165f0 61 74 61 20 64 69 72 65 63 74 6c 79 0a 20 20 20  ata directly.   
16600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16610 20 20 20 20 20 20 20 2a 2a 20 66 72 6f 6d 20 73         ** from s
16620 6f 75 72 63 65 20 74 61 62 6c 65 73 20 72 61 74  ource tables rat
16630 68 65 72 20 74 68 61 6e 20 66 72 6f 6d 20 61 63  her than from ac
16640 63 75 6d 75 6c 61 74 6f 72 73 20 2a 2f 0a 20 20  cumulators */.  
16650 75 38 20 75 73 65 53 6f 72 74 69 6e 67 49 64 78  u8 useSortingIdx
16660 3b 20 20 20 20 20 20 20 2f 2a 20 49 6e 20 64 69  ;       /* In di
16670 72 65 63 74 20 6d 6f 64 65 2c 20 72 65 66 65 72  rect mode, refer
16680 65 6e 63 65 20 74 68 65 20 73 6f 72 74 69 6e 67  ence the sorting
16690 20 69 6e 64 65 78 20 72 61 74 68 65 72 0a 20 20   index rather.  
166a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
166b0 20 20 20 20 20 20 20 20 2a 2a 20 74 68 61 6e 20          ** than 
166c0 74 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65  the source table
166d0 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e   */.  int sortin
166e0 67 49 64 78 3b 20 20 20 20 20 20 20 20 20 2f 2a  gIdx;         /*
166f0 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f   Cursor number o
16700 66 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e  f the sorting in
16710 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72  dex */.  int sor
16720 74 69 6e 67 49 64 78 50 54 61 62 3b 20 20 20 20  tingIdxPTab;    
16730 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65   /* Cursor numbe
16740 72 20 6f 66 20 70 73 65 75 64 6f 2d 74 61 62 6c  r of pseudo-tabl
16750 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 6f 72 74  e */.  int nSort
16760 69 6e 67 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 2f  ingColumn;     /
16770 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
16780 6d 6e 73 20 69 6e 20 74 68 65 20 73 6f 72 74 69  mns in the sorti
16790 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e  ng index */.  in
167a0 74 20 6d 6e 52 65 67 2c 20 6d 78 52 65 67 3b 20  t mnReg, mxReg; 
167b0 20 20 20 20 20 20 2f 2a 20 52 61 6e 67 65 20 6f        /* Range o
167c0 66 20 72 65 67 69 73 74 65 72 73 20 61 6c 6c 6f  f registers allo
167d0 63 61 74 65 64 20 66 6f 72 20 61 43 6f 6c 20 61  cated for aCol a
167e0 6e 64 20 61 46 75 6e 63 20 2a 2f 0a 20 20 45 78  nd aFunc */.  Ex
167f0 70 72 4c 69 73 74 20 2a 70 47 72 6f 75 70 42 79  prList *pGroupBy
16800 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 67 72 6f  ;     /* The gro
16810 75 70 20 62 79 20 63 6c 61 75 73 65 20 2a 2f 0a  up by clause */.
16820 20 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f    struct AggInfo
16830 5f 63 6f 6c 20 7b 20 20 20 20 2f 2a 20 46 6f 72  _col {    /* For
16840 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 75 73 65   each column use
16850 64 20 69 6e 20 73 6f 75 72 63 65 20 74 61 62 6c  d in source tabl
16860 65 73 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20  es */.    Table 
16870 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20  *pTab;          
16880 20 20 20 2f 2a 20 53 6f 75 72 63 65 20 74 61 62     /* Source tab
16890 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 54  le */.    int iT
168a0 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  able;           
168b0 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d     /* Cursor num
168c0 62 65 72 20 6f 66 20 74 68 65 20 73 6f 75 72 63  ber of the sourc
168d0 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69  e table */.    i
168e0 6e 74 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  nt iColumn;     
168f0 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d          /* Colum
16900 6e 20 6e 75 6d 62 65 72 20 77 69 74 68 69 6e 20  n number within 
16910 74 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65  the source table
16920 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 53 6f 72   */.    int iSor
16930 74 65 72 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20  terColumn;      
16940 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65   /* Column numbe
16950 72 20 69 6e 20 74 68 65 20 73 6f 72 74 69 6e 67  r in the sorting
16960 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20 69 6e   index */.    in
16970 74 20 69 4d 65 6d 3b 20 20 20 20 20 20 20 20 20  t iMem;         
16980 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79         /* Memory
16990 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 61   location that a
169a0 63 74 73 20 61 73 20 61 63 63 75 6d 75 6c 61 74  cts as accumulat
169b0 6f 72 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a  or */.    Expr *
169c0 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20  pExpr;          
169d0 20 20 20 2f 2a 20 54 68 65 20 6f 72 69 67 69 6e     /* The origin
169e0 61 6c 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f  al expression */
169f0 0a 20 20 7d 20 2a 61 43 6f 6c 3b 0a 20 20 69 6e  .  } *aCol;.  in
16a00 74 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20  t nColumn;      
16a10 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
16a20 6f 66 20 75 73 65 64 20 65 6e 74 72 69 65 73 20  of used entries 
16a30 69 6e 20 61 43 6f 6c 5b 5d 20 2a 2f 0a 20 20 69  in aCol[] */.  i
16a40 6e 74 20 6e 41 63 63 75 6d 75 6c 61 74 6f 72 3b  nt nAccumulator;
16a50 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
16a60 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74   of columns that
16a70 20 73 68 6f 77 20 74 68 72 6f 75 67 68 20 74 6f   show through to
16a80 20 74 68 65 20 6f 75 74 70 75 74 2e 0a 20 20 20   the output..   
16a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16aa0 20 20 20 20 20 20 20 2a 2a 20 41 64 64 69 74 69         ** Additi
16ab0 6f 6e 61 6c 20 63 6f 6c 75 6d 6e 73 20 61 72 65  onal columns are
16ac0 20 75 73 65 64 20 6f 6e 6c 79 20 61 73 20 70 61   used only as pa
16ad0 72 61 6d 65 74 65 72 73 20 74 6f 0a 20 20 20 20  rameters to.    
16ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16af0 20 20 20 20 20 20 2a 2a 20 61 67 67 72 65 67 61        ** aggrega
16b00 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a  te functions */.
16b10 20 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f    struct AggInfo
16b20 5f 66 75 6e 63 20 7b 20 20 20 2f 2a 20 46 6f 72  _func {   /* For
16b30 20 65 61 63 68 20 61 67 67 72 65 67 61 74 65 20   each aggregate 
16b40 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20  function */.    
16b50 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20  Expr *pExpr;    
16b60 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70 72           /* Expr
16b70 65 73 73 69 6f 6e 20 65 6e 63 6f 64 69 6e 67 20  ession encoding 
16b80 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  the function */.
16b90 20 20 20 20 46 75 6e 63 44 65 66 20 2a 70 46 75      FuncDef *pFu
16ba0 6e 63 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  nc;          /* 
16bb0 54 68 65 20 61 67 67 72 65 67 61 74 65 20 66 75  The aggregate fu
16bc0 6e 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74  nction implement
16bd0 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74  ation */.    int
16be0 20 69 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20   iMem;          
16bf0 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20        /* Memory 
16c00 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 61 63  location that ac
16c10 74 73 20 61 73 20 61 63 63 75 6d 75 6c 61 74 6f  ts as accumulato
16c20 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 44 69  r */.    int iDi
16c30 73 74 69 6e 63 74 3b 20 20 20 20 20 20 20 20 20  stinct;         
16c40 20 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c 20 74    /* Ephemeral t
16c50 61 62 6c 65 20 75 73 65 64 20 74 6f 20 65 6e 66  able used to enf
16c60 6f 72 63 65 20 44 49 53 54 49 4e 43 54 20 2a 2f  orce DISTINCT */
16c70 0a 20 20 7d 20 2a 61 46 75 6e 63 3b 0a 20 20 69  .  } *aFunc;.  i
16c80 6e 74 20 6e 46 75 6e 63 3b 20 20 20 20 20 20 20  nt nFunc;       
16c90 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
16ca0 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61   of entries in a
16cb0 46 75 6e 63 5b 5d 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  Func[] */.};../*
16cc0 0a 2a 2a 20 54 68 65 20 64 61 74 61 74 79 70 65  .** The datatype
16cd0 20 79 6e 56 61 72 20 69 73 20 61 20 73 69 67 6e   ynVar is a sign
16ce0 65 64 20 69 6e 74 65 67 65 72 2c 20 65 69 74 68  ed integer, eith
16cf0 65 72 20 31 36 2d 62 69 74 20 6f 72 20 33 32 2d  er 16-bit or 32-
16d00 62 69 74 2e 0a 2a 2a 20 55 73 75 61 6c 6c 79 20  bit..** Usually 
16d10 69 74 20 69 73 20 31 36 2d 62 69 74 73 2e 20 20  it is 16-bits.  
16d20 42 75 74 20 69 66 20 53 51 4c 49 54 45 5f 4d 41  But if SQLITE_MA
16d30 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45  X_VARIABLE_NUMBE
16d40 52 20 69 73 20 67 72 65 61 74 65 72 0a 2a 2a 20  R is greater.** 
16d50 74 68 61 6e 20 33 32 37 36 37 20 77 65 20 68 61  than 32767 we ha
16d60 76 65 20 74 6f 20 6d 61 6b 65 20 69 74 20 33 32  ve to make it 32
16d70 2d 62 69 74 2e 20 20 31 36 2d 62 69 74 20 69 73  -bit.  16-bit is
16d80 20 70 72 65 66 65 72 72 65 64 20 62 65 63 61 75   preferred becau
16d90 73 65 0a 2a 2a 20 69 74 20 75 73 65 73 20 6c 65  se.** it uses le
16da0 73 73 20 6d 65 6d 6f 72 79 20 69 6e 20 74 68 65  ss memory in the
16db0 20 45 78 70 72 20 6f 62 6a 65 63 74 2c 20 77 68   Expr object, wh
16dc0 69 63 68 20 69 73 20 61 20 62 69 67 20 6d 65 6d  ich is a big mem
16dd0 6f 72 79 20 75 73 65 72 0a 2a 2a 20 69 6e 20 73  ory user.** in s
16de0 79 73 74 65 6d 73 20 77 69 74 68 20 6c 6f 74 73  ystems with lots
16df0 20 6f 66 20 70 72 65 70 61 72 65 64 20 73 74 61   of prepared sta
16e00 74 65 6d 65 6e 74 73 2e 20 20 41 6e 64 20 66 65  tements.  And fe
16e10 77 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 0a 2a  w applications.*
16e20 2a 20 6e 65 65 64 20 6d 6f 72 65 20 74 68 61 6e  * need more than
16e30 20 61 62 6f 75 74 20 31 30 20 6f 72 20 32 30 20   about 10 or 20 
16e40 76 61 72 69 61 62 6c 65 73 2e 20 20 42 75 74 20  variables.  But 
16e50 73 6f 6d 65 20 65 78 74 72 65 6d 65 20 75 73 65  some extreme use
16e60 72 73 20 77 61 6e 74 0a 2a 2a 20 74 6f 20 68 61  rs want.** to ha
16e70 76 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74  ve prepared stat
16e80 65 6d 65 6e 74 73 20 77 69 74 68 20 6f 76 65 72  ements with over
16e90 20 33 32 37 36 37 20 76 61 72 69 61 62 6c 65 73   32767 variables
16ea0 2c 20 61 6e 64 20 66 6f 72 20 74 68 65 6d 0a 2a  , and for them.*
16eb0 2a 20 74 68 65 20 6f 70 74 69 6f 6e 20 69 73 20  * the option is 
16ec0 61 76 61 69 6c 61 62 6c 65 20 28 61 74 20 63 6f  available (at co
16ed0 6d 70 69 6c 65 2d 74 69 6d 65 29 2e 0a 2a 2f 0a  mpile-time)..*/.
16ee0 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56  #if SQLITE_MAX_V
16ef0 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 3c 3d  ARIABLE_NUMBER<=
16f00 33 32 37 36 37 0a 74 79 70 65 64 65 66 20 69 31  32767.typedef i1
16f10 36 20 79 6e 56 61 72 3b 0a 23 65 6c 73 65 0a 74  6 ynVar;.#else.t
16f20 79 70 65 64 65 66 20 69 6e 74 20 79 6e 56 61 72  ypedef int ynVar
16f30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ;.#endif../*.** 
16f40 45 61 63 68 20 6e 6f 64 65 20 6f 66 20 61 6e 20  Each node of an 
16f50 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68  expression in th
16f60 65 20 70 61 72 73 65 20 74 72 65 65 20 69 73 20  e parse tree is 
16f70 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f  an instance.** o
16f80 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
16f90 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 6f 70 20  ..**.** Expr.op 
16fa0 69 73 20 74 68 65 20 6f 70 63 6f 64 65 2e 20 54  is the opcode. T
16fb0 68 65 20 69 6e 74 65 67 65 72 20 70 61 72 73 65  he integer parse
16fc0 72 20 74 6f 6b 65 6e 20 63 6f 64 65 73 20 61 72  r token codes ar
16fd0 65 20 72 65 75 73 65 64 0a 2a 2a 20 61 73 20 6f  e reused.** as o
16fe0 70 63 6f 64 65 73 20 68 65 72 65 2e 20 46 6f 72  pcodes here. For
16ff0 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 70 61   example, the pa
17000 72 73 65 72 20 64 65 66 69 6e 65 73 20 54 4b 5f  rser defines TK_
17010 47 45 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65  GE to be an inte
17020 67 65 72 0a 2a 2a 20 63 6f 64 65 20 72 65 70 72  ger.** code repr
17030 65 73 65 6e 74 69 6e 67 20 74 68 65 20 22 3e 3d  esenting the ">=
17040 22 20 6f 70 65 72 61 74 6f 72 2e 20 54 68 69 73  " operator. This
17050 20 73 61 6d 65 20 69 6e 74 65 67 65 72 20 63 6f   same integer co
17060 64 65 20 69 73 20 72 65 75 73 65 64 0a 2a 2a 20  de is reused.** 
17070 74 6f 20 72 65 70 72 65 73 65 6e 74 20 74 68 65  to represent the
17080 20 67 72 65 61 74 65 72 2d 74 68 61 6e 2d 6f 72   greater-than-or
17090 2d 65 71 75 61 6c 2d 74 6f 20 6f 70 65 72 61 74  -equal-to operat
170a0 6f 72 20 69 6e 20 74 68 65 20 65 78 70 72 65 73  or in the expres
170b0 73 69 6f 6e 0a 2a 2a 20 74 72 65 65 2e 0a 2a 2a  sion.** tree..**
170c0 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72 65  .** If the expre
170d0 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20  ssion is an SQL 
170e0 6c 69 74 65 72 61 6c 20 28 54 4b 5f 49 4e 54 45  literal (TK_INTE
170f0 47 45 52 2c 20 54 4b 5f 46 4c 4f 41 54 2c 20 54  GER, TK_FLOAT, T
17100 4b 5f 42 4c 4f 42 2c 0a 2a 2a 20 6f 72 20 54 4b  K_BLOB,.** or TK
17110 5f 53 54 52 49 4e 47 29 2c 20 74 68 65 6e 20 45  _STRING), then E
17120 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69  xpr.token contai
17130 6e 73 20 74 68 65 20 74 65 78 74 20 6f 66 20 74  ns the text of t
17140 68 65 20 53 51 4c 20 6c 69 74 65 72 61 6c 2e 20  he SQL literal. 
17150 49 66 0a 2a 2a 20 74 68 65 20 65 78 70 72 65 73  If.** the expres
17160 73 69 6f 6e 20 69 73 20 61 20 76 61 72 69 61 62  sion is a variab
17170 6c 65 20 28 54 4b 5f 56 41 52 49 41 42 4c 45 29  le (TK_VARIABLE)
17180 2c 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65  , then Expr.toke
17190 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 0a 2a  n contains the.*
171a0 2a 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 2e  * variable name.
171b0 20 46 69 6e 61 6c 6c 79 2c 20 69 66 20 74 68 65   Finally, if the
171c0 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
171d0 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 28  n SQL function (
171e0 54 4b 5f 46 55 4e 43 54 49 4f 4e 29 2c 0a 2a 2a  TK_FUNCTION),.**
171f0 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e   then Expr.token
17200 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 6e 61   contains the na
17210 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  me of the functi
17220 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 70  on..**.** Expr.p
17230 52 69 67 68 74 20 61 6e 64 20 45 78 70 72 2e 70  Right and Expr.p
17240 4c 65 66 74 20 61 72 65 20 74 68 65 20 6c 65 66  Left are the lef
17250 74 20 61 6e 64 20 72 69 67 68 74 20 73 75 62 65  t and right sube
17260 78 70 72 65 73 73 69 6f 6e 73 20 6f 66 20 61 0a  xpressions of a.
17270 2a 2a 20 62 69 6e 61 72 79 20 6f 70 65 72 61 74  ** binary operat
17280 6f 72 2e 20 45 69 74 68 65 72 20 6f 72 20 62 6f  or. Either or bo
17290 74 68 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 0a  th may be NULL..
172a0 2a 2a 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 4c 69  **.** Expr.x.pLi
172b0 73 74 20 69 73 20 61 20 6c 69 73 74 20 6f 66 20  st is a list of 
172c0 61 72 67 75 6d 65 6e 74 73 20 69 66 20 74 68 65  arguments if the
172d0 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
172e0 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 2c 0a  n SQL function,.
172f0 2a 2a 20 61 20 43 41 53 45 20 65 78 70 72 65 73  ** a CASE expres
17300 73 69 6f 6e 20 6f 72 20 61 6e 20 49 4e 20 65 78  sion or an IN ex
17310 70 72 65 73 73 69 6f 6e 20 6f 66 20 74 68 65 20  pression of the 
17320 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28  form "<lhs> IN (
17330 3c 79 3e 2c 20 3c 7a 3e 2e 2e 2e 29 22 2e 0a 2a  <y>, <z>...)"..*
17340 2a 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74  * Expr.x.pSelect
17350 20 69 73 20 75 73 65 64 20 69 66 20 74 68 65 20   is used if the 
17360 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20  expression is a 
17370 73 75 62 2d 73 65 6c 65 63 74 20 6f 72 20 61 6e  sub-select or an
17380 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 0a 2a   expression of.*
17390 2a 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73  * the form "<lhs
173a0 3e 20 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e  > IN (SELECT ...
173b0 29 22 2e 20 49 66 20 74 68 65 20 45 50 5f 78 49  )". If the EP_xI
173c0 73 53 65 6c 65 63 74 20 62 69 74 20 69 73 20 73  sSelect bit is s
173d0 65 74 20 69 6e 20 74 68 65 0a 2a 2a 20 45 78 70  et in the.** Exp
173e0 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68  r.flags mask, th
173f0 65 6e 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63  en Expr.x.pSelec
17400 74 20 69 73 20 76 61 6c 69 64 2e 20 4f 74 68 65  t is valid. Othe
17410 72 77 69 73 65 2c 20 45 78 70 72 2e 78 2e 70 4c  rwise, Expr.x.pL
17420 69 73 74 20 69 73 0a 2a 2a 20 76 61 6c 69 64 2e  ist is.** valid.
17430 0a 2a 2a 0a 2a 2a 20 41 6e 20 65 78 70 72 65 73  .**.** An expres
17440 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d  sion of the form
17450 20 49 44 20 6f 72 20 49 44 2e 49 44 20 72 65 66   ID or ID.ID ref
17460 65 72 73 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20  ers to a column 
17470 69 6e 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 46  in a table..** F
17480 6f 72 20 73 75 63 68 20 65 78 70 72 65 73 73 69  or such expressi
17490 6f 6e 73 2c 20 45 78 70 72 2e 6f 70 20 69 73 20  ons, Expr.op is 
174a0 73 65 74 20 74 6f 20 54 4b 5f 43 4f 4c 55 4d 4e  set to TK_COLUMN
174b0 20 61 6e 64 20 45 78 70 72 2e 69 54 61 62 6c 65   and Expr.iTable
174c0 20 69 73 0a 2a 2a 20 74 68 65 20 69 6e 74 65 67   is.** the integ
174d0 65 72 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72  er cursor number
174e0 20 6f 66 20 61 20 56 44 42 45 20 63 75 72 73 6f   of a VDBE curso
174f0 72 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68  r pointing to th
17500 61 74 20 74 61 62 6c 65 20 61 6e 64 0a 2a 2a 20  at table and.** 
17510 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 69 73 20  Expr.iColumn is 
17520 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65  the column numbe
17530 72 20 66 6f 72 20 74 68 65 20 73 70 65 63 69 66  r for the specif
17540 69 63 20 63 6f 6c 75 6d 6e 2e 20 20 49 66 20 74  ic column.  If t
17550 68 65 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e  he.** expression
17560 20 69 73 20 75 73 65 64 20 61 73 20 61 20 72 65   is used as a re
17570 73 75 6c 74 20 69 6e 20 61 6e 20 61 67 67 72 65  sult in an aggre
17580 67 61 74 65 20 53 45 4c 45 43 54 2c 20 74 68 65  gate SELECT, the
17590 6e 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69  n the.** value i
175a0 73 20 61 6c 73 6f 20 73 74 6f 72 65 64 20 69 6e  s also stored in
175b0 20 74 68 65 20 45 78 70 72 2e 69 41 67 67 20 63   the Expr.iAgg c
175c0 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 61 67 67  olumn in the agg
175d0 72 65 67 61 74 65 20 73 6f 20 74 68 61 74 0a 2a  regate so that.*
175e0 2a 20 69 74 20 63 61 6e 20 62 65 20 61 63 63 65  * it can be acce
175f0 73 73 65 64 20 61 66 74 65 72 20 61 6c 6c 20 61  ssed after all a
17600 67 67 72 65 67 61 74 65 73 20 61 72 65 20 63 6f  ggregates are co
17610 6d 70 75 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66  mputed..**.** If
17620 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
17630 69 73 20 61 6e 20 75 6e 62 6f 75 6e 64 20 76 61  is an unbound va
17640 72 69 61 62 6c 65 20 6d 61 72 6b 65 72 20 28 61  riable marker (a
17650 20 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b 0a 2a   question mark.*
17660 2a 20 63 68 61 72 61 63 74 65 72 20 27 3f 27 20  * character '?' 
17670 69 6e 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  in the original 
17680 53 51 4c 29 20 74 68 65 6e 20 74 68 65 20 45 78  SQL) then the Ex
17690 70 72 2e 69 54 61 62 6c 65 20 68 6f 6c 64 73 20  pr.iTable holds 
176a0 74 68 65 20 69 6e 64 65 78 0a 2a 2a 20 6e 75 6d  the index.** num
176b0 62 65 72 20 66 6f 72 20 74 68 61 74 20 76 61 72  ber for that var
176c0 69 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  iable..**.** If 
176d0 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
176e0 73 20 61 20 73 75 62 71 75 65 72 79 20 74 68 65  s a subquery the
176f0 6e 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 68  n Expr.iColumn h
17700 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72 0a  olds an integer.
17710 2a 2a 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62  ** register numb
17720 65 72 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  er containing th
17730 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20  e result of the 
17740 73 75 62 71 75 65 72 79 2e 20 20 49 66 20 74 68  subquery.  If th
17750 65 0a 2a 2a 20 73 75 62 71 75 65 72 79 20 67 69  e.** subquery gi
17760 76 65 73 20 61 20 63 6f 6e 73 74 61 6e 74 20 72  ves a constant r
17770 65 73 75 6c 74 2c 20 74 68 65 6e 20 69 54 61 62  esult, then iTab
17780 6c 65 20 69 73 20 2d 31 2e 20 20 49 66 20 74 68  le is -1.  If th
17790 65 20 73 75 62 71 75 65 72 79 0a 2a 2a 20 67 69  e subquery.** gi
177a0 76 65 73 20 61 20 64 69 66 66 65 72 65 6e 74 20  ves a different 
177b0 61 6e 73 77 65 72 20 61 74 20 64 69 66 66 65 72  answer at differ
177c0 65 6e 74 20 74 69 6d 65 73 20 64 75 72 69 6e 67  ent times during
177d0 20 73 74 61 74 65 6d 65 6e 74 20 70 72 6f 63 65   statement proce
177e0 73 73 69 6e 67 0a 2a 2a 20 74 68 65 6e 20 69 54  ssing.** then iT
177f0 61 62 6c 65 20 69 73 20 74 68 65 20 61 64 64 72  able is the addr
17800 65 73 73 20 6f 66 20 61 20 73 75 62 72 6f 75 74  ess of a subrout
17810 69 6e 65 20 74 68 61 74 20 63 6f 6d 70 75 74 65  ine that compute
17820 73 20 74 68 65 20 73 75 62 71 75 65 72 79 2e 0a  s the subquery..
17830 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 78 70  **.** If the Exp
17840 72 20 69 73 20 6f 66 20 74 79 70 65 20 4f 50 5f  r is of type OP_
17850 43 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74 68 65 20  Column, and the 
17860 74 61 62 6c 65 20 69 74 20 69 73 20 73 65 6c 65  table it is sele
17870 63 74 69 6e 67 20 66 72 6f 6d 0a 2a 2a 20 69 73  cting from.** is
17880 20 61 20 64 69 73 6b 20 74 61 62 6c 65 20 6f 72   a disk table or
17890 20 74 68 65 20 22 6f 6c 64 2e 2a 22 20 70 73 65   the "old.*" pse
178a0 75 64 6f 2d 74 61 62 6c 65 2c 20 74 68 65 6e 20  udo-table, then 
178b0 70 54 61 62 20 70 6f 69 6e 74 73 20 74 6f 20 74  pTab points to t
178c0 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64  he.** correspond
178d0 69 6e 67 20 74 61 62 6c 65 20 64 65 66 69 6e 69  ing table defini
178e0 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c 4f  tion..**.** ALLO
178f0 43 41 54 49 4f 4e 20 4e 4f 54 45 53 3a 0a 2a 2a  CATION NOTES:.**
17900 0a 2a 2a 20 45 78 70 72 20 6f 62 6a 65 63 74 73  .** Expr objects
17910 20 63 61 6e 20 75 73 65 20 61 20 6c 6f 74 20 6f   can use a lot o
17920 66 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 69  f memory space i
17930 6e 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  n database schem
17940 61 2e 20 20 54 6f 0a 2a 2a 20 68 65 6c 70 20 72  a.  To.** help r
17950 65 64 75 63 65 20 6d 65 6d 6f 72 79 20 72 65 71  educe memory req
17960 75 69 72 65 6d 65 6e 74 73 2c 20 73 6f 6d 65 74  uirements, somet
17970 69 6d 65 73 20 61 6e 20 45 78 70 72 20 6f 62 6a  imes an Expr obj
17980 65 63 74 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 74  ect will be.** t
17990 72 75 6e 63 61 74 65 64 2e 20 20 41 6e 64 20 74  runcated.  And t
179a0 6f 20 72 65 64 75 63 65 20 74 68 65 20 6e 75 6d  o reduce the num
179b0 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c  ber of memory al
179c0 6c 6f 63 61 74 69 6f 6e 73 2c 20 73 6f 6d 65 74  locations, somet
179d0 69 6d 65 73 0a 2a 2a 20 74 77 6f 20 6f 72 20 6d  imes.** two or m
179e0 6f 72 65 20 45 78 70 72 20 6f 62 6a 65 63 74 73  ore Expr objects
179f0 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20   will be stored 
17a00 69 6e 20 61 20 73 69 6e 67 6c 65 20 6d 65 6d 6f  in a single memo
17a10 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c 0a 2a  ry allocation,.*
17a20 2a 20 74 6f 67 65 74 68 65 72 20 77 69 74 68 20  * together with 
17a30 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 73 74 72 69  Expr.zToken stri
17a40 6e 67 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ngs..**.** If th
17a50 65 20 45 50 5f 52 65 64 75 63 65 64 20 61 6e 64  e EP_Reduced and
17a60 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c   EP_TokenOnly fl
17a70 61 67 73 20 61 72 65 20 73 65 74 20 77 68 65 6e  ags are set when
17a80 0a 2a 2a 20 61 6e 20 45 78 70 72 20 6f 62 6a 65  .** an Expr obje
17a90 63 74 20 69 73 20 74 72 75 6e 63 61 74 65 64 2e  ct is truncated.
17aa0 20 20 57 68 65 6e 20 45 50 5f 52 65 64 75 63 65    When EP_Reduce
17ab0 64 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 61  d is set, then a
17ac0 6c 6c 0a 2a 2a 20 74 68 65 20 63 68 69 6c 64 20  ll.** the child 
17ad0 45 78 70 72 20 6f 62 6a 65 63 74 73 20 69 6e 20  Expr objects in 
17ae0 74 68 65 20 45 78 70 72 2e 70 4c 65 66 74 20 61  the Expr.pLeft a
17af0 6e 64 20 45 78 70 72 2e 70 52 69 67 68 74 20 73  nd Expr.pRight s
17b00 75 62 74 72 65 65 73 0a 2a 2a 20 61 72 65 20 63  ubtrees.** are c
17b10 6f 6e 74 61 69 6e 65 64 20 77 69 74 68 69 6e 20  ontained within 
17b20 74 68 65 20 73 61 6d 65 20 6d 65 6d 6f 72 79 20  the same memory 
17b30 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f 74  allocation.  Not
17b40 65 2c 20 68 6f 77 65 76 65 72 2c 20 74 68 61 74  e, however, that
17b50 0a 2a 2a 20 74 68 65 20 73 75 62 74 72 65 65 73  .** the subtrees
17b60 20 69 6e 20 45 78 70 72 2e 78 2e 70 4c 69 73 74   in Expr.x.pList
17b70 20 6f 72 20 45 78 70 72 2e 78 2e 70 53 65 6c 65   or Expr.x.pSele
17b80 63 74 20 61 72 65 20 61 6c 77 61 79 73 20 73 65  ct are always se
17b90 70 61 72 61 74 65 6c 79 0a 2a 2a 20 61 6c 6c 6f  parately.** allo
17ba0 63 61 74 65 64 2c 20 72 65 67 61 72 64 6c 65 73  cated, regardles
17bb0 73 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72 20  s of whether or 
17bc0 6e 6f 74 20 45 50 5f 52 65 64 75 63 65 64 20 69  not EP_Reduced i
17bd0 73 20 73 65 74 2e 0a 2a 2f 0a 73 74 72 75 63 74  s set..*/.struct
17be0 20 45 78 70 72 20 7b 0a 20 20 75 38 20 6f 70 3b   Expr {.  u8 op;
17bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c00 20 2f 2a 20 4f 70 65 72 61 74 69 6f 6e 20 70 65   /* Operation pe
17c10 72 66 6f 72 6d 65 64 20 62 79 20 74 68 69 73 20  rformed by this 
17c20 6e 6f 64 65 20 2a 2f 0a 20 20 63 68 61 72 20 61  node */.  char a
17c30 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20 20 20  ffinity;        
17c40 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79   /* The affinity
17c50 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6f   of the column o
17c60 72 20 30 20 69 66 20 6e 6f 74 20 61 20 63 6f 6c  r 0 if not a col
17c70 75 6d 6e 20 2a 2f 0a 20 20 75 33 32 20 66 6c 61  umn */.  u32 fla
17c80 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  gs;             
17c90 2f 2a 20 56 61 72 69 6f 75 73 20 66 6c 61 67 73  /* Various flags
17ca0 2e 20 20 45 50 5f 2a 20 53 65 65 20 62 65 6c 6f  .  EP_* See belo
17cb0 77 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20  w */.  union {. 
17cc0 20 20 20 63 68 61 72 20 2a 7a 54 6f 6b 65 6e 3b     char *zToken;
17cd0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b            /* Tok
17ce0 65 6e 20 76 61 6c 75 65 2e 20 5a 65 72 6f 20 74  en value. Zero t
17cf0 65 72 6d 69 6e 61 74 65 64 20 61 6e 64 20 64 65  erminated and de
17d00 71 75 6f 74 65 64 20 2a 2f 0a 20 20 20 20 69 6e  quoted */.    in
17d10 74 20 69 56 61 6c 75 65 3b 20 20 20 20 20 20 20  t iValue;       
17d20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6e 65 67 61       /* Non-nega
17d30 74 69 76 65 20 69 6e 74 65 67 65 72 20 76 61 6c  tive integer val
17d40 75 65 20 69 66 20 45 50 5f 49 6e 74 56 61 6c 75  ue if EP_IntValu
17d50 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a 0a 20 20 2f  e */.  } u;..  /
17d60 2a 20 49 66 20 74 68 65 20 45 50 5f 54 6f 6b 65  * If the EP_Toke
17d70 6e 4f 6e 6c 79 20 66 6c 61 67 20 69 73 20 73 65  nOnly flag is se
17d80 74 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c  t in the Expr.fl
17d90 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e  ags mask, then n
17da0 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20  o.  ** space is 
17db0 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68  allocated for th
17dc0 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74  e fields below t
17dd0 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74  his point. An at
17de0 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63  tempt to.  ** ac
17df0 63 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72  cess them will r
17e00 65 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61  esult in a segfa
17e10 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69  ult or malfuncti
17e20 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  on..  **********
17e30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17e40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17e50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17e60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20  ***********/..  
17e70 45 78 70 72 20 2a 70 4c 65 66 74 3b 20 20 20 20  Expr *pLeft;    
17e80 20 20 20 20 20 20 20 2f 2a 20 4c 65 66 74 20 73         /* Left s
17e90 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 45 78 70 72  ubnode */.  Expr
17ea0 20 2a 70 52 69 67 68 74 3b 20 20 20 20 20 20 20   *pRight;       
17eb0 20 20 20 2f 2a 20 52 69 67 68 74 20 73 75 62 6e     /* Right subn
17ec0 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  ode */.  union {
17ed0 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70  .    ExprList *p
17ee0 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 6f 70 20  List;     /* op 
17ef0 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c 20 53 45  = IN, EXISTS, SE
17f00 4c 45 43 54 2c 20 43 41 53 45 2c 20 46 55 4e 43  LECT, CASE, FUNC
17f10 54 49 4f 4e 2c 20 42 45 54 57 45 45 4e 20 2a 2f  TION, BETWEEN */
17f20 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65  .    Select *pSe
17f30 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 45 50 5f  lect;     /* EP_
17f40 78 49 73 53 65 6c 65 63 74 20 61 6e 64 20 6f 70  xIsSelect and op
17f50 20 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c 20 53   = IN, EXISTS, S
17f60 45 4c 45 43 54 20 2a 2f 0a 20 20 7d 20 78 3b 0a  ELECT */.  } x;.
17f70 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 45 50 5f  .  /* If the EP_
17f80 52 65 64 75 63 65 64 20 66 6c 61 67 20 69 73 20  Reduced flag is 
17f90 73 65 74 20 69 6e 20 74 68 65 20 45 78 70 72 2e  set in the Expr.
17fa0 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e  flags mask, then
17fb0 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20 69   no.  ** space i
17fc0 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20  s allocated for 
17fd0 74 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77  the fields below
17fe0 20 74 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20   this point. An 
17ff0 61 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20  attempt to.  ** 
18000 61 63 63 65 73 73 20 74 68 65 6d 20 77 69 6c 6c  access them will
18010 20 72 65 73 75 6c 74 20 69 6e 20 61 20 73 65 67   result in a seg
18020 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63  fault or malfunc
18030 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a  tion..  ********
18040 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18050 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18060 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18070 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a  *************/..
18080 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45  #if SQLITE_MAX_E
18090 58 50 52 5f 44 45 50 54 48 3e 30 0a 20 20 69 6e  XPR_DEPTH>0.  in
180a0 74 20 6e 48 65 69 67 68 74 3b 20 20 20 20 20 20  t nHeight;      
180b0 20 20 20 20 20 2f 2a 20 48 65 69 67 68 74 20 6f       /* Height o
180c0 66 20 74 68 65 20 74 72 65 65 20 68 65 61 64 65  f the tree heade
180d0 64 20 62 79 20 74 68 69 73 20 6e 6f 64 65 20 2a  d by this node *
180e0 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 69  /.#endif.  int i
180f0 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20  Table;          
18100 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20    /* TK_COLUMN: 
18110 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66  cursor number of
18120 20 74 61 62 6c 65 20 68 6f 6c 64 69 6e 67 20 63   table holding c
18130 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20 20 20  olumn.          
18140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
18150 2a 20 54 4b 5f 52 45 47 49 53 54 45 52 3a 20 72  * TK_REGISTER: r
18160 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 0a 20  egister number. 
18170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18180 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 54 52          ** TK_TR
18190 49 47 47 45 52 3a 20 31 20 2d 3e 20 6e 65 77 2c  IGGER: 1 -> new,
181a0 20 30 20 2d 3e 20 6f 6c 64 0a 20 20 20 20 20 20   0 -> old.      
181b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
181c0 20 20 20 2a 2a 20 45 50 5f 55 6e 6c 69 6b 65 6c     ** EP_Unlikel
181d0 79 3a 20 20 31 33 34 32 31 37 37 32 38 20 74 69  y:  134217728 ti
181e0 6d 65 73 20 6c 69 6b 65 6c 69 68 6f 6f 64 0a 20  mes likelihood. 
181f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18200 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 53 45          ** TK_SE
18210 4c 45 43 54 3a 20 31 73 74 20 72 65 67 69 73 74  LECT: 1st regist
18220 65 72 20 6f 66 20 72 65 73 75 6c 74 20 76 65 63  er of result vec
18230 74 6f 72 20 2a 2f 0a 20 20 79 6e 56 61 72 20 69  tor */.  ynVar i
18240 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20  Column;         
18250 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 6f  /* TK_COLUMN: co
18260 6c 75 6d 6e 20 69 6e 64 65 78 2e 20 20 2d 31 20  lumn index.  -1 
18270 66 6f 72 20 72 6f 77 69 64 2e 0a 20 20 20 20 20  for rowid..     
18280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18290 20 20 20 20 2a 2a 20 54 4b 5f 56 41 52 49 41 42      ** TK_VARIAB
182a0 4c 45 3a 20 76 61 72 69 61 62 6c 65 20 6e 75 6d  LE: variable num
182b0 62 65 72 20 28 61 6c 77 61 79 73 20 3e 3d 20 31  ber (always >= 1
182c0 29 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
182d0 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54              ** T
182e0 4b 5f 53 45 4c 45 43 54 5f 43 4f 4c 55 4d 4e 3a  K_SELECT_COLUMN:
182f0 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 72   column of the r
18300 65 73 75 6c 74 20 76 65 63 74 6f 72 20 2a 2f 0a  esult vector */.
18310 20 20 69 31 36 20 69 41 67 67 3b 20 20 20 20 20    i16 iAgg;     
18320 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63           /* Whic
18330 68 20 65 6e 74 72 79 20 69 6e 20 70 41 67 67 49  h entry in pAggI
18340 6e 66 6f 2d 3e 61 43 6f 6c 5b 5d 20 6f 72 20 2d  nfo->aCol[] or -
18350 3e 61 46 75 6e 63 5b 5d 20 2a 2f 0a 20 20 69 31  >aFunc[] */.  i1
18360 36 20 69 52 69 67 68 74 4a 6f 69 6e 54 61 62 6c  6 iRightJoinTabl
18370 65 3b 20 20 20 2f 2a 20 49 66 20 45 50 5f 46 72  e;   /* If EP_Fr
18380 6f 6d 4a 6f 69 6e 2c 20 74 68 65 20 72 69 67 68  omJoin, the righ
18390 74 20 74 61 62 6c 65 20 6f 66 20 74 68 65 20 6a  t table of the j
183a0 6f 69 6e 20 2a 2f 0a 20 20 75 38 20 6f 70 32 3b  oin */.  u8 op2;
183b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
183c0 2f 2a 20 54 4b 5f 52 45 47 49 53 54 45 52 3a 20  /* TK_REGISTER: 
183d0 6f 72 69 67 69 6e 61 6c 20 76 61 6c 75 65 20 6f  original value o
183e0 66 20 45 78 70 72 2e 6f 70 0a 20 20 20 20 20 20  f Expr.op.      
183f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18400 20 20 20 2a 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a     ** TK_COLUMN:
18410 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 70 35   the value of p5
18420 20 66 6f 72 20 4f 50 5f 43 6f 6c 75 6d 6e 0a 20   for OP_Column. 
18430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18440 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 41 47          ** TK_AG
18450 47 5f 46 55 4e 43 54 49 4f 4e 3a 20 6e 65 73 74  G_FUNCTION: nest
18460 69 6e 67 20 64 65 70 74 68 20 2a 2f 0a 20 20 41  ing depth */.  A
18470 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f  ggInfo *pAggInfo
18480 3b 20 20 20 20 20 2f 2a 20 55 73 65 64 20 62 79  ;     /* Used by
18490 20 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 61   TK_AGG_COLUMN a
184a0 6e 64 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49  nd TK_AGG_FUNCTI
184b0 4f 4e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  ON */.  Table *p
184c0 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Tab;           /
184d0 2a 20 54 61 62 6c 65 20 66 6f 72 20 54 4b 5f 43  * Table for TK_C
184e0 4f 4c 55 4d 4e 20 65 78 70 72 65 73 73 69 6f 6e  OLUMN expression
184f0 73 2e 20 20 43 61 6e 20 62 65 20 4e 55 4c 4c 0a  s.  Can be NULL.
18500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18510 20 20 20 20 20 20 20 20 20 2a 2a 20 66 6f 72 20           ** for 
18520 61 20 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e 20 69  a column of an i
18530 6e 64 65 78 20 6f 6e 20 61 6e 20 65 78 70 72 65  ndex on an expre
18540 73 73 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  ssion */.};../*.
18550 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
18560 20 61 72 65 20 74 68 65 20 6d 65 61 6e 69 6e 67   are the meaning
18570 73 20 6f 66 20 62 69 74 73 20 69 6e 20 74 68 65  s of bits in the
18580 20 45 78 70 72 2e 66 6c 61 67 73 20 66 69 65 6c   Expr.flags fiel
18590 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  d..*/.#define EP
185a0 5f 46 72 6f 6d 4a 6f 69 6e 20 20 30 78 30 30 30  _FromJoin  0x000
185b0 30 30 31 20 2f 2a 20 4f 72 69 67 69 6e 61 74 65  001 /* Originate
185c0 73 20 69 6e 20 4f 4e 2f 55 53 49 4e 47 20 63 6c  s in ON/USING cl
185d0 61 75 73 65 20 6f 66 20 6f 75 74 65 72 20 6a 6f  ause of outer jo
185e0 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  in */.#define EP
185f0 5f 41 67 67 20 20 20 20 20 20 20 30 78 30 30 30  _Agg       0x000
18600 30 30 32 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20  002 /* Contains 
18610 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67 72  one or more aggr
18620 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20  egate functions 
18630 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  */.             
18640 20 20 20 20 20 2f 2a 20 30 78 30 30 30 30 30 34       /* 0x000004
18650 20 2f 2f 20 61 76 61 69 6c 61 62 6c 65 20 66 6f   // available fo
18660 72 20 75 73 65 20 2a 2f 0a 20 20 20 20 20 20 20  r use */.       
18670 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30 78             /* 0x
18680 30 30 30 30 30 38 20 2f 2f 20 61 76 61 69 6c 61  000008 // availa
18690 62 6c 65 20 66 6f 72 20 75 73 65 20 2a 2f 0a 23  ble for use */.#
186a0 64 65 66 69 6e 65 20 45 50 5f 44 69 73 74 69 6e  define EP_Distin
186b0 63 74 20 20 30 78 30 30 30 30 31 30 20 2f 2a 20  ct  0x000010 /* 
186c0 41 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  Aggregate functi
186d0 6f 6e 20 77 69 74 68 20 44 49 53 54 49 4e 43 54  on with DISTINCT
186e0 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66   keyword */.#def
186f0 69 6e 65 20 45 50 5f 56 61 72 53 65 6c 65 63 74  ine EP_VarSelect
18700 20 30 78 30 30 30 30 32 30 20 2f 2a 20 70 53 65   0x000020 /* pSe
18710 6c 65 63 74 20 69 73 20 63 6f 72 72 65 6c 61 74  lect is correlat
18720 65 64 2c 20 6e 6f 74 20 63 6f 6e 73 74 61 6e 74  ed, not constant
18730 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 44   */.#define EP_D
18740 62 6c 51 75 6f 74 65 64 20 30 78 30 30 30 30 34  blQuoted 0x00004
18750 30 20 2f 2a 20 74 6f 6b 65 6e 2e 7a 20 77 61 73  0 /* token.z was
18760 20 6f 72 69 67 69 6e 61 6c 6c 79 20 69 6e 20 22   originally in "
18770 2e 2e 2e 22 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ..." */.#define 
18780 45 50 5f 49 6e 66 69 78 46 75 6e 63 20 30 78 30  EP_InfixFunc 0x0
18790 30 30 30 38 30 20 2f 2a 20 54 72 75 65 20 66 6f  00080 /* True fo
187a0 72 20 61 6e 20 69 6e 66 69 78 20 66 75 6e 63 74  r an infix funct
187b0 69 6f 6e 3a 20 4c 49 4b 45 2c 20 47 4c 4f 42 2c  ion: LIKE, GLOB,
187c0 20 65 74 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20   etc */.#define 
187d0 45 50 5f 43 6f 6c 6c 61 74 65 20 20 20 30 78 30  EP_Collate   0x0
187e0 30 30 31 30 30 20 2f 2a 20 54 72 65 65 20 63 6f  00100 /* Tree co
187f0 6e 74 61 69 6e 73 20 61 20 54 4b 5f 43 4f 4c 4c  ntains a TK_COLL
18800 41 54 45 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a  ATE operator */.
18810 23 64 65 66 69 6e 65 20 45 50 5f 47 65 6e 65 72  #define EP_Gener
18820 69 63 20 20 20 30 78 30 30 30 32 30 30 20 2f 2a  ic   0x000200 /*
18830 20 49 67 6e 6f 72 65 20 43 4f 4c 4c 41 54 45 20   Ignore COLLATE 
18840 6f 72 20 61 66 66 69 6e 69 74 79 20 6f 6e 20 74  or affinity on t
18850 68 69 73 20 74 72 65 65 20 2a 2f 0a 23 64 65 66  his tree */.#def
18860 69 6e 65 20 45 50 5f 49 6e 74 56 61 6c 75 65 20  ine EP_IntValue 
18870 20 30 78 30 30 30 34 30 30 20 2f 2a 20 49 6e 74   0x000400 /* Int
18880 65 67 65 72 20 76 61 6c 75 65 20 63 6f 6e 74 61  eger value conta
18890 69 6e 65 64 20 69 6e 20 75 2e 69 56 61 6c 75 65  ined in u.iValue
188a0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 78   */.#define EP_x
188b0 49 73 53 65 6c 65 63 74 20 30 78 30 30 30 38 30  IsSelect 0x00080
188c0 30 20 2f 2a 20 78 2e 70 53 65 6c 65 63 74 20 69  0 /* x.pSelect i
188d0 73 20 76 61 6c 69 64 20 28 6f 74 68 65 72 77 69  s valid (otherwi
188e0 73 65 20 78 2e 70 4c 69 73 74 20 69 73 29 20 2a  se x.pList is) *
188f0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 6b 69  /.#define EP_Ski
18900 70 20 20 20 20 20 20 30 78 30 30 31 30 30 30 20  p      0x001000 
18910 2f 2a 20 43 4f 4c 4c 41 54 45 2c 20 41 53 2c 20  /* COLLATE, AS, 
18920 6f 72 20 55 4e 4c 49 4b 45 4c 59 20 2a 2f 0a 23  or UNLIKELY */.#
18930 64 65 66 69 6e 65 20 45 50 5f 52 65 64 75 63 65  define EP_Reduce
18940 64 20 20 20 30 78 30 30 32 30 30 30 20 2f 2a 20  d   0x002000 /* 
18950 45 78 70 72 20 73 74 72 75 63 74 20 45 58 50 52  Expr struct EXPR
18960 5f 52 45 44 55 43 45 44 53 49 5a 45 20 62 79 74  _REDUCEDSIZE byt
18970 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69  es only */.#defi
18980 6e 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20  ne EP_TokenOnly 
18990 30 78 30 30 34 30 30 30 20 2f 2a 20 45 78 70 72  0x004000 /* Expr
189a0 20 73 74 72 75 63 74 20 45 58 50 52 5f 54 4f 4b   struct EXPR_TOK
189b0 45 4e 4f 4e 4c 59 53 49 5a 45 20 62 79 74 65 73  ENONLYSIZE bytes
189c0 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65   only */.#define
189d0 20 45 50 5f 53 74 61 74 69 63 20 20 20 20 30 78   EP_Static    0x
189e0 30 30 38 30 30 30 20 2f 2a 20 48 65 6c 64 20 69  008000 /* Held i
189f0 6e 20 6d 65 6d 6f 72 79 20 6e 6f 74 20 6f 62 74  n memory not obt
18a00 61 69 6e 65 64 20 66 72 6f 6d 20 6d 61 6c 6c 6f  ained from mallo
18a10 63 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  c() */.#define E
18a20 50 5f 4d 65 6d 54 6f 6b 65 6e 20 20 30 78 30 31  P_MemToken  0x01
18a30 30 30 30 30 20 2f 2a 20 4e 65 65 64 20 74 6f 20  0000 /* Need to 
18a40 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 20  sqlite3DbFree() 
18a50 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 2a 2f 0a 23  Expr.zToken */.#
18a60 64 65 66 69 6e 65 20 45 50 5f 4e 6f 52 65 64 75  define EP_NoRedu
18a70 63 65 20 20 30 78 30 32 30 30 30 30 20 2f 2a 20  ce  0x020000 /* 
18a80 43 61 6e 6e 6f 74 20 45 58 50 52 44 55 50 5f 52  Cannot EXPRDUP_R
18a90 45 44 55 43 45 20 74 68 69 73 20 45 78 70 72 20  EDUCE this Expr 
18aa0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 55 6e  */.#define EP_Un
18ab0 6c 69 6b 65 6c 79 20 20 30 78 30 34 30 30 30 30  likely  0x040000
18ac0 20 2f 2a 20 75 6e 6c 69 6b 65 6c 79 28 29 20 6f   /* unlikely() o
18ad0 72 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 29 20 66  r likelihood() f
18ae0 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  unction */.#defi
18af0 6e 65 20 45 50 5f 43 6f 6e 73 74 46 75 6e 63 20  ne EP_ConstFunc 
18b00 30 78 30 38 30 30 30 30 20 2f 2a 20 41 20 53 51  0x080000 /* A SQ
18b10 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41  LITE_FUNC_CONSTA
18b20 4e 54 20 6f 72 20 5f 53 4c 4f 43 48 4e 47 20 66  NT or _SLOCHNG f
18b30 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  unction */.#defi
18b40 6e 65 20 45 50 5f 43 61 6e 42 65 4e 75 6c 6c 20  ne EP_CanBeNull 
18b50 30 78 31 30 30 30 30 30 20 2f 2a 20 43 61 6e 20  0x100000 /* Can 
18b60 62 65 20 6e 75 6c 6c 20 64 65 73 70 69 74 65 20  be null despite 
18b70 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61  NOT NULL constra
18b80 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  int */.#define E
18b90 50 5f 53 75 62 71 75 65 72 79 20 20 30 78 32 30  P_Subquery  0x20
18ba0 30 30 30 30 20 2f 2a 20 54 72 65 65 20 63 6f 6e  0000 /* Tree con
18bb0 74 61 69 6e 73 20 61 20 54 4b 5f 53 45 4c 45 43  tains a TK_SELEC
18bc0 54 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 23 64  T operator */.#d
18bd0 65 66 69 6e 65 20 45 50 5f 41 6c 69 61 73 20 20  efine EP_Alias  
18be0 20 20 20 30 78 34 30 30 30 30 30 20 2f 2a 20 49     0x400000 /* I
18bf0 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 61  s an alias for a
18c00 20 72 65 73 75 6c 74 20 73 65 74 20 63 6f 6c 75   result set colu
18c10 6d 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  mn */.#define EP
18c20 5f 4c 65 61 66 20 20 20 20 20 20 30 78 38 30 30  _Leaf      0x800
18c30 30 30 30 20 2f 2a 20 45 78 70 72 2e 70 4c 65 66  000 /* Expr.pLef
18c40 74 2c 20 2e 70 52 69 67 68 74 2c 20 2e 75 2e 70  t, .pRight, .u.p
18c50 53 65 6c 65 63 74 20 61 6c 6c 20 4e 55 4c 4c 20  Select all NULL 
18c60 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6d 62 69 6e  */../*.** Combin
18c70 61 74 69 6f 6e 73 20 6f 66 20 74 77 6f 20 6f 72  ations of two or
18c80 20 6d 6f 72 65 20 45 50 5f 2a 20 66 6c 61 67 73   more EP_* flags
18c90 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 50  .*/.#define EP_P
18ca0 72 6f 70 61 67 61 74 65 20 28 45 50 5f 43 6f 6c  ropagate (EP_Col
18cb0 6c 61 74 65 7c 45 50 5f 53 75 62 71 75 65 72 79  late|EP_Subquery
18cc0 29 20 2f 2a 20 50 72 6f 70 61 67 61 74 65 20 74  ) /* Propagate t
18cd0 68 65 73 65 20 62 69 74 73 20 75 70 20 74 72 65  hese bits up tre
18ce0 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73  e */../*.** Thes
18cf0 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62 65 20  e macros can be 
18d00 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20 73 65  used to test, se
18d10 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69 74 73  t, or clear bits
18d20 20 69 6e 20 74 68 65 0a 2a 2a 20 45 78 70 72 2e   in the.** Expr.
18d30 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a  flags field..*/.
18d40 23 64 65 66 69 6e 65 20 45 78 70 72 48 61 73 50  #define ExprHasP
18d50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20 20  roperty(E,P)    
18d60 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 50   (((E)->flags&(P
18d70 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 45  ))!=0).#define E
18d80 78 70 72 48 61 73 41 6c 6c 50 72 6f 70 65 72 74  xprHasAllPropert
18d90 79 28 45 2c 50 29 20 20 28 28 28 45 29 2d 3e 66  y(E,P)  (((E)->f
18da0 6c 61 67 73 26 28 50 29 29 3d 3d 28 50 29 29 0a  lags&(P))==(P)).
18db0 23 64 65 66 69 6e 65 20 45 78 70 72 53 65 74 50  #define ExprSetP
18dc0 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20 20  roperty(E,P)    
18dd0 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29   (E)->flags|=(P)
18de0 0a 23 64 65 66 69 6e 65 20 45 78 70 72 43 6c 65  .#define ExprCle
18df0 61 72 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20  arProperty(E,P) 
18e00 20 20 28 45 29 2d 3e 66 6c 61 67 73 26 3d 7e 28    (E)->flags&=~(
18e10 50 29 0a 0a 2f 2a 20 54 68 65 20 45 78 70 72 53  P)../* The ExprS
18e20 65 74 56 56 41 50 72 6f 70 65 72 74 79 28 29 20  etVVAProperty() 
18e30 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 66 6f  macro is used fo
18e40 72 20 56 65 72 69 66 69 63 61 74 69 6f 6e 2c 20  r Verification, 
18e50 56 61 6c 69 64 61 74 69 6f 6e 2c 0a 2a 2a 20 61  Validation,.** a
18e60 6e 64 20 41 63 63 72 65 64 69 74 61 74 69 6f 6e  nd Accreditation
18e70 20 6f 6e 6c 79 2e 20 20 49 74 20 77 6f 72 6b 73   only.  It works
18e80 20 6c 69 6b 65 20 45 78 70 72 53 65 74 50 72 6f   like ExprSetPro
18e90 70 65 72 74 79 28 29 20 64 75 72 69 6e 67 20 56  perty() during V
18ea0 56 41 0a 2a 2a 20 70 72 6f 63 65 73 73 65 73 20  VA.** processes 
18eb0 62 75 74 20 69 73 20 61 20 6e 6f 2d 6f 70 20 66  but is a no-op f
18ec0 6f 72 20 64 65 6c 69 76 65 72 79 2e 0a 2a 2f 0a  or delivery..*/.
18ed0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
18ee0 42 55 47 0a 23 20 64 65 66 69 6e 65 20 45 78 70  BUG.# define Exp
18ef0 72 53 65 74 56 56 41 50 72 6f 70 65 72 74 79 28  rSetVVAProperty(
18f00 45 2c 50 29 20 20 28 45 29 2d 3e 66 6c 61 67 73  E,P)  (E)->flags
18f10 7c 3d 28 50 29 0a 23 65 6c 73 65 0a 23 20 64 65  |=(P).#else.# de
18f20 66 69 6e 65 20 45 78 70 72 53 65 74 56 56 41 50  fine ExprSetVVAP
18f30 72 6f 70 65 72 74 79 28 45 2c 50 29 0a 23 65 6e  roperty(E,P).#en
18f40 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f  dif../*.** Macro
18f50 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74  s to determine t
18f60 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74  he number of byt
18f70 65 73 20 72 65 71 75 69 72 65 64 20 62 79 20 61  es required by a
18f80 20 6e 6f 72 6d 61 6c 20 45 78 70 72 0a 2a 2a 20   normal Expr.** 
18f90 73 74 72 75 63 74 2c 20 61 6e 20 45 78 70 72 20  struct, an Expr 
18fa0 73 74 72 75 63 74 20 77 69 74 68 20 74 68 65 20  struct with the 
18fb0 45 50 5f 52 65 64 75 63 65 64 20 66 6c 61 67 20  EP_Reduced flag 
18fc0 73 65 74 20 69 6e 20 45 78 70 72 2e 66 6c 61 67  set in Expr.flag
18fd0 73 0a 2a 2a 20 61 6e 64 20 61 6e 20 45 78 70 72  s.** and an Expr
18fe0 20 73 74 72 75 63 74 20 77 69 74 68 20 74 68 65   struct with the
18ff0 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c   EP_TokenOnly fl
19000 61 67 20 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69  ag set..*/.#defi
19010 6e 65 20 45 58 50 52 5f 46 55 4c 4c 53 49 5a 45  ne EXPR_FULLSIZE
19020 20 20 20 20 20 20 20 20 20 20 20 73 69 7a 65 6f             sizeo
19030 66 28 45 78 70 72 29 20 20 20 20 20 20 20 20 20  f(Expr)         
19040 20 20 2f 2a 20 46 75 6c 6c 20 73 69 7a 65 20 2a    /* Full size *
19050 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f 52  /.#define EXPR_R
19060 45 44 55 43 45 44 53 49 5a 45 20 20 20 20 20 20  EDUCEDSIZE      
19070 20 20 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c    offsetof(Expr,
19080 69 54 61 62 6c 65 29 20 20 2f 2a 20 43 6f 6d 6d  iTable)  /* Comm
19090 6f 6e 20 66 65 61 74 75 72 65 73 20 2a 2f 0a 23  on features */.#
190a0 64 65 66 69 6e 65 20 45 58 50 52 5f 54 4f 4b 45  define EXPR_TOKE
190b0 4e 4f 4e 4c 59 53 49 5a 45 20 20 20 20 20 20 6f  NONLYSIZE      o
190c0 66 66 73 65 74 6f 66 28 45 78 70 72 2c 70 4c 65  ffsetof(Expr,pLe
190d0 66 74 29 20 20 20 2f 2a 20 46 65 77 65 72 20 66  ft)   /* Fewer f
190e0 65 61 74 75 72 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a  eatures */../*.*
190f0 2a 20 46 6c 61 67 73 20 70 61 73 73 65 64 20 74  * Flags passed t
19100 6f 20 74 68 65 20 73 71 6c 69 74 65 33 45 78 70  o the sqlite3Exp
19110 72 44 75 70 28 29 20 66 75 6e 63 74 69 6f 6e 2e  rDup() function.
19120 20 53 65 65 20 74 68 65 20 68 65 61 64 65 72 20   See the header 
19130 63 6f 6d 6d 65 6e 74 0a 2a 2a 20 61 62 6f 76 65  comment.** above
19140 20 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28   sqlite3ExprDup(
19150 29 20 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a 2a  ) for details..*
19160 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 44 55  /.#define EXPRDU
19170 50 5f 52 45 44 55 43 45 20 20 20 20 20 20 20 20  P_REDUCE        
19180 20 30 78 30 30 30 31 20 20 2f 2a 20 55 73 65 64   0x0001  /* Used
19190 20 72 65 64 75 63 65 64 2d 73 69 7a 65 20 45 78   reduced-size Ex
191a0 70 72 20 6e 6f 64 65 73 20 2a 2f 0a 0a 2f 2a 0a  pr nodes */../*.
191b0 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70  ** A list of exp
191c0 72 65 73 73 69 6f 6e 73 2e 20 20 45 61 63 68 20  ressions.  Each 
191d0 65 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 20 6f  expression may o
191e0 70 74 69 6f 6e 61 6c 6c 79 20 68 61 76 65 20 61  ptionally have a
191f0 0a 2a 2a 20 6e 61 6d 65 2e 20 20 41 6e 20 65 78  .** name.  An ex
19200 70 72 2f 6e 61 6d 65 20 63 6f 6d 62 69 6e 61 74  pr/name combinat
19210 69 6f 6e 20 63 61 6e 20 62 65 20 75 73 65 64 20  ion can be used 
19220 69 6e 20 73 65 76 65 72 61 6c 20 77 61 79 73 2c  in several ways,
19230 20 73 75 63 68 0a 2a 2a 20 61 73 20 74 68 65 20   such.** as the 
19240 6c 69 73 74 20 6f 66 20 22 65 78 70 72 20 41 53  list of "expr AS
19250 20 49 44 22 20 66 69 65 6c 64 73 20 66 6f 6c 6c   ID" fields foll
19260 6f 77 69 6e 67 20 61 20 22 53 45 4c 45 43 54 22  owing a "SELECT"
19270 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 6c 69   or in the.** li
19280 73 74 20 6f 66 20 22 49 44 20 3d 20 65 78 70 72  st of "ID = expr
19290 22 20 69 74 65 6d 73 20 69 6e 20 61 6e 20 55 50  " items in an UP
192a0 44 41 54 45 2e 20 20 41 20 6c 69 73 74 20 6f 66  DATE.  A list of
192b0 20 65 78 70 72 65 73 73 69 6f 6e 73 20 63 61 6e   expressions can
192c0 0a 2a 2a 20 61 6c 73 6f 20 62 65 20 75 73 65 64  .** also be used
192d0 20 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74   as the argument
192e0 20 74 6f 20 61 20 66 75 6e 63 74 69 6f 6e 2c 20   to a function, 
192f0 69 6e 20 77 68 69 63 68 20 63 61 73 65 20 74 68  in which case th
19300 65 20 61 2e 7a 4e 61 6d 65 0a 2a 2a 20 66 69 65  e a.zName.** fie
19310 6c 64 20 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a  ld is not used..
19320 2a 2a 0a 2a 2a 20 42 79 20 64 65 66 61 75 6c 74  **.** By default
19330 20 74 68 65 20 45 78 70 72 2e 7a 53 70 61 6e 20   the Expr.zSpan 
19340 66 69 65 6c 64 20 68 6f 6c 64 73 20 61 20 68 75  field holds a hu
19350 6d 61 6e 2d 72 65 61 64 61 62 6c 65 20 64 65 73  man-readable des
19360 63 72 69 70 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74  cription of.** t
19370 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68  he expression th
19380 61 74 20 69 73 20 75 73 65 64 20 69 6e 20 74 68  at is used in th
19390 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20  e generation of 
193a0 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 61  error messages a
193b0 6e 64 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6c 61 62  nd.** column lab
193c0 65 6c 73 2e 20 20 49 6e 20 74 68 69 73 20 63 61  els.  In this ca
193d0 73 65 2c 20 45 78 70 72 2e 7a 53 70 61 6e 20 69  se, Expr.zSpan i
193e0 73 20 74 79 70 69 63 61 6c 6c 79 20 74 68 65 20  s typically the 
193f0 74 65 78 74 20 6f 66 20 61 0a 2a 2a 20 63 6f 6c  text of a.** col
19400 75 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 61  umn expression a
19410 73 20 69 74 20 65 78 69 73 74 73 20 69 6e 20 61  s it exists in a
19420 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
19430 74 2e 20 20 48 6f 77 65 76 65 72 2c 20 69 66 0a  t.  However, if.
19440 2a 2a 20 74 68 65 20 62 53 70 61 6e 49 73 54 61  ** the bSpanIsTa
19450 62 20 66 6c 61 67 20 69 73 20 73 65 74 2c 20 74  b flag is set, t
19460 68 65 6e 20 7a 53 70 61 6e 20 69 73 20 6f 76 65  hen zSpan is ove
19470 72 6c 6f 61 64 65 64 20 74 6f 20 6d 65 61 6e 20  rloaded to mean 
19480 74 68 65 20 6e 61 6d 65 0a 2a 2a 20 6f 66 20 74  the name.** of t
19490 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e  he result column
194a0 20 69 6e 20 74 68 65 20 66 6f 72 6d 3a 20 44 41   in the form: DA
194b0 54 41 42 41 53 45 2e 54 41 42 4c 45 2e 43 4f 4c  TABASE.TABLE.COL
194c0 55 4d 4e 2e 20 20 54 68 69 73 20 6c 61 74 65 72  UMN.  This later
194d0 0a 2a 2a 20 66 6f 72 6d 20 69 73 20 75 73 65 64  .** form is used
194e0 20 66 6f 72 20 6e 61 6d 65 20 72 65 73 6f 6c 75   for name resolu
194f0 74 69 6f 6e 20 77 69 74 68 20 6e 65 73 74 65 64  tion with nested
19500 20 46 52 4f 4d 20 63 6c 61 75 73 65 73 2e 0a 2a   FROM clauses..*
19510 2f 0a 73 74 72 75 63 74 20 45 78 70 72 4c 69 73  /.struct ExprLis
19520 74 20 7b 0a 20 20 69 6e 74 20 6e 45 78 70 72 3b  t {.  int nExpr;
19530 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
19540 4e 75 6d 62 65 72 20 6f 66 20 65 78 70 72 65 73  Number of expres
19550 73 69 6f 6e 73 20 6f 6e 20 74 68 65 20 6c 69 73  sions on the lis
19560 74 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 45 78  t */.  struct Ex
19570 70 72 4c 69 73 74 5f 69 74 65 6d 20 7b 20 2f 2a  prList_item { /*
19580 20 46 6f 72 20 65 61 63 68 20 65 78 70 72 65 73   For each expres
19590 73 69 6f 6e 20 69 6e 20 74 68 65 20 6c 69 73 74  sion in the list
195a0 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45   */.    Expr *pE
195b0 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  xpr;            
195c0 2f 2a 20 54 68 65 20 70 61 72 73 65 20 74 72 65  /* The parse tre
195d0 65 20 66 6f 72 20 74 68 69 73 20 65 78 70 72 65  e for this expre
195e0 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 63 68 61  ssion */.    cha
195f0 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
19600 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 61 73       /* Token as
19610 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
19620 69 73 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f  is expression */
19630 0a 20 20 20 20 63 68 61 72 20 2a 7a 53 70 61 6e  .    char *zSpan
19640 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
19650 4f 72 69 67 69 6e 61 6c 20 74 65 78 74 20 6f 66  Original text of
19660 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
19670 2a 2f 0a 20 20 20 20 75 38 20 73 6f 72 74 4f 72  */.    u8 sortOr
19680 64 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f  der;           /
19690 2a 20 31 20 66 6f 72 20 44 45 53 43 20 6f 72 20  * 1 for DESC or 
196a0 30 20 66 6f 72 20 41 53 43 20 2a 2f 0a 20 20 20  0 for ASC */.   
196b0 20 75 6e 73 69 67 6e 65 64 20 64 6f 6e 65 20 3a   unsigned done :
196c0 31 3b 20 20 20 20 20 20 20 2f 2a 20 41 20 66 6c  1;       /* A fl
196d0 61 67 20 74 6f 20 69 6e 64 69 63 61 74 65 20 77  ag to indicate w
196e0 68 65 6e 20 70 72 6f 63 65 73 73 69 6e 67 20 69  hen processing i
196f0 73 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20  s finished */.  
19700 20 20 75 6e 73 69 67 6e 65 64 20 62 53 70 61 6e    unsigned bSpan
19710 49 73 54 61 62 20 3a 31 3b 20 2f 2a 20 7a 53 70  IsTab :1; /* zSp
19720 61 6e 20 68 6f 6c 64 73 20 44 42 2e 54 41 42 4c  an holds DB.TABL
19730 45 2e 43 4f 4c 55 4d 4e 20 2a 2f 0a 20 20 20 20  E.COLUMN */.    
19740 75 6e 73 69 67 6e 65 64 20 72 65 75 73 61 62 6c  unsigned reusabl
19750 65 20 3a 31 3b 20 20 20 2f 2a 20 43 6f 6e 73 74  e :1;   /* Const
19760 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 20 69  ant expression i
19770 73 20 72 65 75 73 61 62 6c 65 20 2a 2f 0a 20 20  s reusable */.  
19780 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 20 20    union {.      
19790 73 74 72 75 63 74 20 7b 0a 20 20 20 20 20 20 20  struct {.       
197a0 20 75 31 36 20 69 4f 72 64 65 72 42 79 43 6f 6c   u16 iOrderByCol
197b0 3b 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 4f 52  ;      /* For OR
197c0 44 45 52 20 42 59 2c 20 63 6f 6c 75 6d 6e 20 6e  DER BY, column n
197d0 75 6d 62 65 72 20 69 6e 20 72 65 73 75 6c 74 20  umber in result 
197e0 73 65 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 75  set */.        u
197f0 31 36 20 69 41 6c 69 61 73 3b 20 20 20 20 20 20  16 iAlias;      
19800 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e       /* Index in
19810 74 6f 20 50 61 72 73 65 2e 61 41 6c 69 61 73 5b  to Parse.aAlias[
19820 5d 20 66 6f 72 20 7a 4e 61 6d 65 20 2a 2f 0a 20  ] for zName */. 
19830 20 20 20 20 20 7d 20 78 3b 0a 20 20 20 20 20 20       } x;.      
19840 69 6e 74 20 69 43 6f 6e 73 74 45 78 70 72 52 65  int iConstExprRe
19850 67 3b 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73  g;      /* Regis
19860 74 65 72 20 69 6e 20 77 68 69 63 68 20 45 78 70  ter in which Exp
19870 72 20 76 61 6c 75 65 20 69 73 20 63 61 63 68 65  r value is cache
19880 64 20 2a 2f 0a 20 20 20 20 7d 20 75 3b 0a 20 20  d */.    } u;.  
19890 7d 20 61 5b 31 5d 3b 20 20 20 20 20 20 20 20 20  } a[1];         
198a0 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20           /* One 
198b0 73 6c 6f 74 20 66 6f 72 20 65 61 63 68 20 65 78  slot for each ex
198c0 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20  pression in the 
198d0 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  list */.};../*.*
198e0 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
198f0 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
19900 69 73 20 75 73 65 64 20 62 79 20 74 68 65 20 70  is used by the p
19910 61 72 73 65 72 20 74 6f 20 72 65 63 6f 72 64 20  arser to record 
19920 62 6f 74 68 0a 2a 2a 20 74 68 65 20 70 61 72 73  both.** the pars
19930 65 20 74 72 65 65 20 66 6f 72 20 61 6e 20 65 78  e tree for an ex
19940 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 74 68 65  pression and the
19950 20 73 70 61 6e 20 6f 66 20 69 6e 70 75 74 20 74   span of input t
19960 65 78 74 20 66 6f 72 20 61 6e 0a 2a 2a 20 65 78  ext for an.** ex
19970 70 72 65 73 73 69 6f 6e 2e 0a 2a 2f 0a 73 74 72  pression..*/.str
19980 75 63 74 20 45 78 70 72 53 70 61 6e 20 7b 0a 20  uct ExprSpan {. 
19990 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20   Expr *pExpr;   
199a0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 65 78         /* The ex
199b0 70 72 65 73 73 69 6f 6e 20 70 61 72 73 65 20 74  pression parse t
199c0 72 65 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ree */.  const c
199d0 68 61 72 20 2a 7a 53 74 61 72 74 3b 20 20 20 2f  har *zStart;   /
199e0 2a 20 46 69 72 73 74 20 63 68 61 72 61 63 74 65  * First characte
199f0 72 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74 20  r of input text 
19a00 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
19a10 2a 7a 45 6e 64 3b 20 20 20 20 20 2f 2a 20 4f 6e  *zEnd;     /* On
19a20 65 20 63 68 61 72 61 63 74 65 72 20 70 61 73 74  e character past
19a30 20 74 68 65 20 65 6e 64 20 6f 66 20 69 6e 70 75   the end of inpu
19a40 74 20 74 65 78 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  t text */.};../*
19a50 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
19a60 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
19a70 65 20 63 61 6e 20 68 6f 6c 64 20 61 20 73 69 6d  e can hold a sim
19a80 70 6c 65 20 6c 69 73 74 20 6f 66 20 69 64 65 6e  ple list of iden
19a90 74 69 66 69 65 72 73 2c 0a 2a 2a 20 73 75 63 68  tifiers,.** such
19aa0 20 61 73 20 74 68 65 20 6c 69 73 74 20 22 61 2c   as the list "a,
19ab0 62 2c 63 22 20 69 6e 20 74 68 65 20 66 6f 6c 6c  b,c" in the foll
19ac0 6f 77 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 73  owing statements
19ad0 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 49 4e 53  :.**.**      INS
19ae0 45 52 54 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63  ERT INTO t(a,b,c
19af0 29 20 56 41 4c 55 45 53 20 2e 2e 2e 3b 0a 2a 2a  ) VALUES ...;.**
19b00 20 20 20 20 20 20 43 52 45 41 54 45 20 49 4e 44        CREATE IND
19b10 45 58 20 69 64 78 20 4f 4e 20 74 28 61 2c 62 2c  EX idx ON t(a,b,
19b20 63 29 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45 41  c);.**      CREA
19b30 54 45 20 54 52 49 47 47 45 52 20 74 72 69 67 20  TE TRIGGER trig 
19b40 42 45 46 4f 52 45 20 55 50 44 41 54 45 20 4f 4e  BEFORE UPDATE ON
19b50 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 3b 0a 2a   t(a,b,c) ...;.*
19b60 2a 0a 2a 2a 20 54 68 65 20 49 64 4c 69 73 74 2e  *.** The IdList.
19b70 61 2e 69 64 78 20 66 69 65 6c 64 20 69 73 20 75  a.idx field is u
19b80 73 65 64 20 77 68 65 6e 20 74 68 65 20 49 64 4c  sed when the IdL
19b90 69 73 74 20 72 65 70 72 65 73 65 6e 74 73 20 74  ist represents t
19ba0 68 65 20 6c 69 73 74 20 6f 66 0a 2a 2a 20 63 6f  he list of.** co
19bb0 6c 75 6d 6e 20 6e 61 6d 65 73 20 61 66 74 65 72  lumn names after
19bc0 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e   a table name in
19bd0 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74 65   an INSERT state
19be0 6d 65 6e 74 2e 20 20 49 6e 20 74 68 65 20 73 74  ment.  In the st
19bf0 61 74 65 6d 65 6e 74 0a 2a 2a 0a 2a 2a 20 20 20  atement.**.**   
19c00 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 28    INSERT INTO t(
19c10 61 2c 62 2c 63 29 20 2e 2e 2e 0a 2a 2a 0a 2a 2a  a,b,c) ....**.**
19c20 20 49 66 20 22 61 22 20 69 73 20 74 68 65 20 6b   If "a" is the k
19c30 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 61  -th column of ta
19c40 62 6c 65 20 22 74 22 2c 20 74 68 65 6e 20 49 64  ble "t", then Id
19c50 4c 69 73 74 2e 61 5b 30 5d 2e 69 64 78 3d 3d 6b  List.a[0].idx==k
19c60 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 64 4c 69  ..*/.struct IdLi
19c70 73 74 20 7b 0a 20 20 73 74 72 75 63 74 20 49 64  st {.  struct Id
19c80 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20  List_item {.    
19c90 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
19ca0 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65    /* Name of the
19cb0 20 69 64 65 6e 74 69 66 69 65 72 20 2a 2f 0a 20   identifier */. 
19cc0 20 20 20 69 6e 74 20 69 64 78 3b 20 20 20 20 20     int idx;     
19cd0 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e       /* Index in
19ce0 20 73 6f 6d 65 20 54 61 62 6c 65 2e 61 43 6f 6c   some Table.aCol
19cf0 5b 5d 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 6e  [] of a column n
19d00 61 6d 65 64 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20  amed zName */.  
19d10 7d 20 2a 61 3b 0a 20 20 69 6e 74 20 6e 49 64 3b  } *a;.  int nId;
19d20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
19d30 65 72 20 6f 66 20 69 64 65 6e 74 69 66 69 65 72  er of identifier
19d40 73 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f  s on the list */
19d50 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 62  .};../*.** The b
19d60 69 74 6d 61 73 6b 20 64 61 74 61 74 79 70 65 20  itmask datatype 
19d70 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 20 69 73  defined below is
19d80 20 75 73 65 64 20 66 6f 72 20 76 61 72 69 6f 75   used for variou
19d90 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e  s optimizations.
19da0 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 69 6e 67 20  .**.** Changing 
19db0 74 68 69 73 20 66 72 6f 6d 20 61 20 36 34 2d 62  this from a 64-b
19dc0 69 74 20 74 6f 20 61 20 33 32 2d 62 69 74 20 74  it to a 32-bit t
19dd0 79 70 65 20 6c 69 6d 69 74 73 20 74 68 65 20 6e  ype limits the n
19de0 75 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 61 62 6c  umber of.** tabl
19df0 65 73 20 69 6e 20 61 20 6a 6f 69 6e 20 74 6f 20  es in a join to 
19e00 33 32 20 69 6e 73 74 65 61 64 20 6f 66 20 36 34  32 instead of 64
19e10 2e 20 20 42 75 74 20 69 74 20 61 6c 73 6f 20 72  .  But it also r
19e20 65 64 75 63 65 73 20 74 68 65 20 73 69 7a 65 0a  educes the size.
19e30 2a 2a 20 6f 66 20 74 68 65 20 6c 69 62 72 61 72  ** of the librar
19e40 79 20 62 79 20 37 33 38 20 62 79 74 65 73 20 6f  y by 738 bytes o
19e50 6e 20 69 78 38 36 2e 0a 2a 2f 0a 23 69 66 64 65  n ix86..*/.#ifde
19e60 66 20 53 51 4c 49 54 45 5f 42 49 54 4d 41 53 4b  f SQLITE_BITMASK
19e70 5f 54 59 50 45 0a 20 20 74 79 70 65 64 65 66 20  _TYPE.  typedef 
19e80 53 51 4c 49 54 45 5f 42 49 54 4d 41 53 4b 5f 54  SQLITE_BITMASK_T
19e90 59 50 45 20 42 69 74 6d 61 73 6b 3b 0a 23 65 6c  YPE Bitmask;.#el
19ea0 73 65 0a 20 20 74 79 70 65 64 65 66 20 75 36 34  se.  typedef u64
19eb0 20 42 69 74 6d 61 73 6b 3b 0a 23 65 6e 64 69 66   Bitmask;.#endif
19ec0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62  ../*.** The numb
19ed0 65 72 20 6f 66 20 62 69 74 73 20 69 6e 20 61 20  er of bits in a 
19ee0 42 69 74 6d 61 73 6b 2e 20 20 22 42 4d 53 22 20  Bitmask.  "BMS" 
19ef0 6d 65 61 6e 73 20 22 42 69 74 4d 61 73 6b 20 53  means "BitMask S
19f00 69 7a 65 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ize"..*/.#define
19f10 20 42 4d 53 20 20 28 28 69 6e 74 29 28 73 69 7a   BMS  ((int)(siz
19f20 65 6f 66 28 42 69 74 6d 61 73 6b 29 2a 38 29 29  eof(Bitmask)*8))
19f30 0a 0a 2f 2a 0a 2a 2a 20 41 20 62 69 74 20 69 6e  ../*.** A bit in
19f40 20 61 20 42 69 74 6d 61 73 6b 0a 2a 2f 0a 23 64   a Bitmask.*/.#d
19f50 65 66 69 6e 65 20 4d 41 53 4b 42 49 54 28 6e 29  efine MASKBIT(n)
19f60 20 20 20 28 28 28 42 69 74 6d 61 73 6b 29 31 29     (((Bitmask)1)
19f70 3c 3c 28 6e 29 29 0a 23 64 65 66 69 6e 65 20 4d  <<(n)).#define M
19f80 41 53 4b 42 49 54 33 32 28 6e 29 20 28 28 28 75  ASKBIT32(n) (((u
19f90 6e 73 69 67 6e 65 64 20 69 6e 74 29 31 29 3c 3c  nsigned int)1)<<
19fa0 28 6e 29 29 0a 23 64 65 66 69 6e 65 20 41 4c 4c  (n)).#define ALL
19fb0 42 49 54 53 20 20 20 20 20 20 28 28 42 69 74 6d  BITS      ((Bitm
19fc0 61 73 6b 29 2d 31 29 0a 0a 2f 2a 0a 2a 2a 20 54  ask)-1)../*.** T
19fd0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
19fe0 75 63 74 75 72 65 20 64 65 73 63 72 69 62 65 73  ucture describes
19ff0 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
1a000 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74 61   of a SELECT sta
1a010 74 65 6d 65 6e 74 2e 0a 2a 2a 20 45 61 63 68 20  tement..** Each 
1a020 74 61 62 6c 65 20 6f 72 20 73 75 62 71 75 65 72  table or subquer
1a030 79 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c  y in the FROM cl
1a040 61 75 73 65 20 69 73 20 61 20 73 65 70 61 72 61  ause is a separa
1a050 74 65 20 65 6c 65 6d 65 6e 74 20 6f 66 0a 2a 2a  te element of.**
1a060 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61 5b 5d   the SrcList.a[]
1a070 20 61 72 72 61 79 2e 0a 2a 2a 0a 2a 2a 20 57 69   array..**.** Wi
1a080 74 68 20 74 68 65 20 61 64 64 69 74 69 6f 6e 20  th the addition 
1a090 6f 66 20 6d 75 6c 74 69 70 6c 65 20 64 61 74 61  of multiple data
1a0a0 62 61 73 65 20 73 75 70 70 6f 72 74 2c 20 74 68  base support, th
1a0b0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
1a0c0 63 74 75 72 65 0a 2a 2a 20 63 61 6e 20 61 6c 73  cture.** can als
1a0d0 6f 20 62 65 20 75 73 65 64 20 74 6f 20 64 65 73  o be used to des
1a0e0 63 72 69 62 65 20 61 20 70 61 72 74 69 63 75 6c  cribe a particul
1a0f0 61 72 20 74 61 62 6c 65 20 73 75 63 68 20 61 73  ar table such as
1a100 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 0a   the table that.
1a110 2a 2a 20 69 73 20 6d 6f 64 69 66 69 65 64 20 62  ** is modified b
1a120 79 20 61 6e 20 49 4e 53 45 52 54 2c 20 44 45 4c  y an INSERT, DEL
1a130 45 54 45 2c 20 6f 72 20 55 50 44 41 54 45 20 73  ETE, or UPDATE s
1a140 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20 73 74  tatement.  In st
1a150 61 6e 64 61 72 64 20 53 51 4c 2c 0a 2a 2a 20 73  andard SQL,.** s
1a160 75 63 68 20 61 20 74 61 62 6c 65 20 6d 75 73 74  uch a table must
1a170 20 62 65 20 61 20 73 69 6d 70 6c 65 20 6e 61 6d   be a simple nam
1a180 65 3a 20 49 44 2e 20 20 42 75 74 20 69 6e 20 53  e: ID.  But in S
1a190 51 4c 69 74 65 2c 20 74 68 65 20 74 61 62 6c 65  QLite, the table
1a1a0 20 63 61 6e 0a 2a 2a 20 6e 6f 77 20 62 65 20 69   can.** now be i
1a1b0 64 65 6e 74 69 66 69 65 64 20 62 79 20 61 20 64  dentified by a d
1a1c0 61 74 61 62 61 73 65 20 6e 61 6d 65 2c 20 61 20  atabase name, a 
1a1d0 64 6f 74 2c 20 74 68 65 6e 20 74 68 65 20 74 61  dot, then the ta
1a1e0 62 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 49 44 2e  ble name: ID.ID.
1a1f0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6a 6f 69 6e 74  .**.** The joint
1a200 79 70 65 20 73 74 61 72 74 73 20 6f 75 74 20 73  ype starts out s
1a210 68 6f 77 69 6e 67 20 74 68 65 20 6a 6f 69 6e 20  howing the join 
1a220 74 79 70 65 20 62 65 74 77 65 65 6e 20 74 68 65  type between the
1a230 20 63 75 72 72 65 6e 74 20 74 61 62 6c 65 0a 2a   current table.*
1a240 2a 20 61 6e 64 20 74 68 65 20 6e 65 78 74 20 74  * and the next t
1a250 61 62 6c 65 20 6f 6e 20 74 68 65 20 6c 69 73 74  able on the list
1a260 2e 20 20 54 68 65 20 70 61 72 73 65 72 20 62 75  .  The parser bu
1a270 69 6c 64 73 20 74 68 65 20 6c 69 73 74 20 74 68  ilds the list th
1a280 69 73 20 77 61 79 2e 0a 2a 2a 20 42 75 74 20 73  is way..** But s
1a290 71 6c 69 74 65 33 53 72 63 4c 69 73 74 53 68 69  qlite3SrcListShi
1a2a0 66 74 4a 6f 69 6e 54 79 70 65 28 29 20 6c 61 74  ftJoinType() lat
1a2b0 65 72 20 73 68 69 66 74 73 20 74 68 65 20 6a 6f  er shifts the jo
1a2c0 69 6e 74 79 70 65 73 20 73 6f 20 74 68 61 74 20  intypes so that 
1a2d0 65 61 63 68 0a 2a 2a 20 6a 6f 69 6e 74 79 70 65  each.** jointype
1a2e0 20 65 78 70 72 65 73 73 65 73 20 74 68 65 20 6a   expresses the j
1a2f0 6f 69 6e 20 62 65 74 77 65 65 6e 20 74 68 65 20  oin between the 
1a300 74 61 62 6c 65 20 61 6e 64 20 74 68 65 20 70 72  table and the pr
1a310 65 76 69 6f 75 73 20 74 61 62 6c 65 2e 0a 2a 2a  evious table..**
1a320 0a 2a 2a 20 49 6e 20 74 68 65 20 63 6f 6c 55 73  .** In the colUs
1a330 65 64 20 66 69 65 6c 64 2c 20 74 68 65 20 68 69  ed field, the hi
1a340 67 68 2d 6f 72 64 65 72 20 62 69 74 20 28 62 69  gh-order bit (bi
1a350 74 20 36 33 29 20 69 73 20 73 65 74 20 69 66 20  t 63) is set if 
1a360 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20 63 6f 6e  the table.** con
1a370 74 61 69 6e 73 20 6d 6f 72 65 20 74 68 61 6e 20  tains more than 
1a380 36 33 20 63 6f 6c 75 6d 6e 73 20 61 6e 64 20 74  63 columns and t
1a390 68 65 20 36 34 2d 74 68 20 6f 72 20 6c 61 74 65  he 64-th or late
1a3a0 72 20 63 6f 6c 75 6d 6e 20 69 73 20 75 73 65 64  r column is used
1a3b0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 72 63 4c  ..*/.struct SrcL
1a3c0 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e 53 72 63  ist {.  int nSrc
1a3d0 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ;        /* Numb
1a3e0 65 72 20 6f 66 20 74 61 62 6c 65 73 20 6f 72 20  er of tables or 
1a3f0 73 75 62 71 75 65 72 69 65 73 20 69 6e 20 74 68  subqueries in th
1a400 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f  e FROM clause */
1a410 0a 20 20 75 33 32 20 6e 41 6c 6c 6f 63 3b 20 20  .  u32 nAlloc;  
1a420 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1a430 20 65 6e 74 72 69 65 73 20 61 6c 6c 6f 63 61 74   entries allocat
1a440 65 64 20 69 6e 20 61 5b 5d 20 62 65 6c 6f 77 20  ed in a[] below 
1a450 2a 2f 0a 20 20 73 74 72 75 63 74 20 53 72 63 4c  */.  struct SrcL
1a460 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 53  ist_item {.    S
1a470 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20  chema *pSchema; 
1a480 20 2f 2a 20 53 63 68 65 6d 61 20 74 6f 20 77 68   /* Schema to wh
1a490 69 63 68 20 74 68 69 73 20 69 74 65 6d 20 69 73  ich this item is
1a4a0 20 66 69 78 65 64 20 2a 2f 0a 20 20 20 20 63 68   fixed */.    ch
1a4b0 61 72 20 2a 7a 44 61 74 61 62 61 73 65 3b 20 20  ar *zDatabase;  
1a4c0 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74 61 62  /* Name of datab
1a4d0 61 73 65 20 68 6f 6c 64 69 6e 67 20 74 68 69 73  ase holding this
1a4e0 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68   table */.    ch
1a4f0 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
1a500 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74  /* Name of the t
1a510 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61 72  able */.    char
1a520 20 2a 7a 41 6c 69 61 73 3b 20 20 20 20 20 2f 2a   *zAlias;     /*
1a530 20 54 68 65 20 22 42 22 20 70 61 72 74 20 6f 66   The "B" part of
1a540 20 61 20 22 41 20 41 53 20 42 22 20 70 68 72 61   a "A AS B" phra
1a550 73 65 2e 20 20 7a 4e 61 6d 65 20 69 73 20 74 68  se.  zName is th
1a560 65 20 22 41 22 20 2a 2f 0a 20 20 20 20 54 61 62  e "A" */.    Tab
1a570 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 2f  le *pTab;      /
1a580 2a 20 41 6e 20 53 51 4c 20 74 61 62 6c 65 20 63  * An SQL table c
1a590 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20  orresponding to 
1a5a0 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 53 65 6c  zName */.    Sel
1a5b0 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 2f  ect *pSelect;  /
1a5c0 2a 20 41 20 53 45 4c 45 43 54 20 73 74 61 74 65  * A SELECT state
1a5d0 6d 65 6e 74 20 75 73 65 64 20 69 6e 20 70 6c 61  ment used in pla
1a5e0 63 65 20 6f 66 20 61 20 74 61 62 6c 65 20 6e 61  ce of a table na
1a5f0 6d 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61 64  me */.    int ad
1a600 64 72 46 69 6c 6c 53 75 62 3b 20 20 2f 2a 20 41  drFillSub;  /* A
1a610 64 64 72 65 73 73 20 6f 66 20 73 75 62 72 6f 75  ddress of subrou
1a620 74 69 6e 65 20 74 6f 20 6d 61 6e 69 66 65 73 74  tine to manifest
1a630 20 61 20 73 75 62 71 75 65 72 79 20 2a 2f 0a 20   a subquery */. 
1a640 20 20 20 69 6e 74 20 72 65 67 52 65 74 75 72 6e     int regReturn
1a650 3b 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72  ;    /* Register
1a660 20 68 6f 6c 64 69 6e 67 20 72 65 74 75 72 6e 20   holding return 
1a670 61 64 64 72 65 73 73 20 6f 66 20 61 64 64 72 46  address of addrF
1a680 69 6c 6c 53 75 62 20 2a 2f 0a 20 20 20 20 69 6e  illSub */.    in
1a690 74 20 72 65 67 52 65 73 75 6c 74 3b 20 20 20 20  t regResult;    
1a6a0 2f 2a 20 52 65 67 69 73 74 65 72 73 20 68 6f 6c  /* Registers hol
1a6b0 64 69 6e 67 20 72 65 73 75 6c 74 73 20 6f 66 20  ding results of 
1a6c0 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a  a co-routine */.
1a6d0 20 20 20 20 73 74 72 75 63 74 20 7b 0a 20 20 20      struct {.   
1a6e0 20 20 20 75 38 20 6a 6f 69 6e 74 79 70 65 3b 20     u8 jointype; 
1a6f0 20 20 20 20 20 2f 2a 20 54 79 70 65 20 6f 66 20       /* Type of 
1a700 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20 74 68 69  join between thi
1a710 73 20 74 61 62 6c 65 20 61 6e 64 20 74 68 65 20  s table and the 
1a720 70 72 65 76 69 6f 75 73 20 2a 2f 0a 20 20 20 20  previous */.    
1a730 20 20 75 6e 73 69 67 6e 65 64 20 6e 6f 74 49 6e    unsigned notIn
1a740 64 65 78 65 64 20 3a 31 3b 20 20 20 20 2f 2a 20  dexed :1;    /* 
1a750 54 72 75 65 20 69 66 20 74 68 65 72 65 20 69 73  True if there is
1a760 20 61 20 4e 4f 54 20 49 4e 44 45 58 45 44 20 63   a NOT INDEXED c
1a770 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 20 20 75  lause */.      u
1a780 6e 73 69 67 6e 65 64 20 69 73 49 6e 64 65 78 65  nsigned isIndexe
1a790 64 42 79 20 3a 31 3b 20 20 20 2f 2a 20 54 72 75  dBy :1;   /* Tru
1a7a0 65 20 69 66 20 74 68 65 72 65 20 69 73 20 61 6e  e if there is an
1a7b0 20 49 4e 44 45 58 45 44 20 42 59 20 63 6c 61 75   INDEXED BY clau
1a7c0 73 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69  se */.      unsi
1a7d0 67 6e 65 64 20 69 73 54 61 62 46 75 6e 63 20 3a  gned isTabFunc :
1a7e0 31 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69  1;     /* True i
1a7f0 66 20 74 61 62 6c 65 2d 76 61 6c 75 65 64 2d 66  f table-valued-f
1a800 75 6e 63 74 69 6f 6e 20 73 79 6e 74 61 78 20 2a  unction syntax *
1a810 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64  /.      unsigned
1a820 20 69 73 43 6f 72 72 65 6c 61 74 65 64 20 3a 31   isCorrelated :1
1a830 3b 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73 75  ;  /* True if su
1a840 62 2d 71 75 65 72 79 20 69 73 20 63 6f 72 72 65  b-query is corre
1a850 6c 61 74 65 64 20 2a 2f 0a 20 20 20 20 20 20 75  lated */.      u
1a860 6e 73 69 67 6e 65 64 20 76 69 61 43 6f 72 6f 75  nsigned viaCorou
1a870 74 69 6e 65 20 3a 31 3b 20 20 2f 2a 20 49 6d 70  tine :1;  /* Imp
1a880 6c 65 6d 65 6e 74 65 64 20 61 73 20 61 20 63 6f  lemented as a co
1a890 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20 20 20  -routine */.    
1a8a0 20 20 75 6e 73 69 67 6e 65 64 20 69 73 52 65 63    unsigned isRec
1a8b0 75 72 73 69 76 65 20 3a 31 3b 20 20 20 2f 2a 20  ursive :1;   /* 
1a8c0 54 72 75 65 20 66 6f 72 20 72 65 63 75 72 73 69  True for recursi
1a8d0 76 65 20 72 65 66 65 72 65 6e 63 65 20 69 6e 20  ve reference in 
1a8e0 57 49 54 48 20 2a 2f 0a 20 20 20 20 7d 20 66 67  WITH */.    } fg
1a8f0 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
1a900 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20  _OMIT_EXPLAIN.  
1a910 20 20 75 38 20 69 53 65 6c 65 63 74 49 64 3b 20    u8 iSelectId; 
1a920 20 20 20 20 2f 2a 20 49 66 20 70 53 65 6c 65 63      /* If pSelec
1a930 74 21 3d 30 2c 20 74 68 65 20 69 64 20 6f 66 20  t!=0, the id of 
1a940 74 68 65 20 73 75 62 2d 73 65 6c 65 63 74 20 69  the sub-select i
1a950 6e 20 45 51 50 20 2a 2f 0a 23 65 6e 64 69 66 0a  n EQP */.#endif.
1a960 20 20 20 20 69 6e 74 20 69 43 75 72 73 6f 72 3b      int iCursor;
1a970 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42        /* The VDB
1a980 45 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  E cursor number 
1a990 75 73 65 64 20 74 6f 20 61 63 63 65 73 73 20 74  used to access t
1a9a0 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20  his table */.   
1a9b0 20 45 78 70 72 20 2a 70 4f 6e 3b 20 20 20 20 20   Expr *pOn;     
1a9c0 20 20 20 2f 2a 20 54 68 65 20 4f 4e 20 63 6c 61     /* The ON cla
1a9d0 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f  use of a join */
1a9e0 0a 20 20 20 20 49 64 4c 69 73 74 20 2a 70 55 73  .    IdList *pUs
1a9f0 69 6e 67 3b 20 20 20 2f 2a 20 54 68 65 20 55 53  ing;   /* The US
1aa00 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 61 20  ING clause of a 
1aa10 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 42 69 74 6d  join */.    Bitm
1aa20 61 73 6b 20 63 6f 6c 55 73 65 64 3b 20 20 2f 2a  ask colUsed;  /*
1aa30 20 42 69 74 20 4e 20 28 31 3c 3c 4e 29 20 73 65   Bit N (1<<N) se
1aa40 74 20 69 66 20 63 6f 6c 75 6d 6e 20 4e 20 6f 66  t if column N of
1aa50 20 70 54 61 62 20 69 73 20 75 73 65 64 20 2a 2f   pTab is used */
1aa60 0a 20 20 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20  .    union {.   
1aa70 20 20 20 63 68 61 72 20 2a 7a 49 6e 64 65 78 65     char *zIndexe
1aa80 64 42 79 3b 20 20 20 20 2f 2a 20 49 64 65 6e 74  dBy;    /* Ident
1aa90 69 66 69 65 72 20 66 72 6f 6d 20 22 49 4e 44 45  ifier from "INDE
1aaa0 58 45 44 20 42 59 20 3c 7a 49 6e 64 65 78 3e 22  XED BY <zIndex>"
1aab0 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 20   clause */.     
1aac0 20 45 78 70 72 4c 69 73 74 20 2a 70 46 75 6e 63   ExprList *pFunc
1aad0 41 72 67 3b 20 20 2f 2a 20 41 72 67 75 6d 65 6e  Arg;  /* Argumen
1aae0 74 73 20 74 6f 20 74 61 62 6c 65 2d 76 61 6c 75  ts to table-valu
1aaf0 65 64 2d 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  ed-function */. 
1ab00 20 20 20 7d 20 75 31 3b 0a 20 20 20 20 49 6e 64     } u1;.    Ind
1ab10 65 78 20 2a 70 49 42 49 6e 64 65 78 3b 20 20 2f  ex *pIBIndex;  /
1ab20 2a 20 49 6e 64 65 78 20 73 74 72 75 63 74 75 72  * Index structur
1ab30 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
1ab40 74 6f 20 75 31 2e 7a 49 6e 64 65 78 65 64 42 79  to u1.zIndexedBy
1ab50 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 20 20 20   */.  } a[1];   
1ab60 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65            /* One
1ab70 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20   entry for each 
1ab80 69 64 65 6e 74 69 66 69 65 72 20 6f 6e 20 74 68  identifier on th
1ab90 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  e list */.};../*
1aba0 0a 2a 2a 20 50 65 72 6d 69 74 74 65 64 20 76 61  .** Permitted va
1abb0 6c 75 65 73 20 6f 66 20 74 68 65 20 53 72 63 4c  lues of the SrcL
1abc0 69 73 74 2e 61 2e 6a 6f 69 6e 74 79 70 65 20 66  ist.a.jointype f
1abd0 69 65 6c 64 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ield.*/.#define 
1abe0 4a 54 5f 49 4e 4e 45 52 20 20 20 20 20 30 78 30  JT_INNER     0x0
1abf0 30 30 31 20 20 20 20 2f 2a 20 41 6e 79 20 6b 69  001    /* Any ki
1ac00 6e 64 20 6f 66 20 69 6e 6e 65 72 20 6f 72 20 63  nd of inner or c
1ac10 72 6f 73 73 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65  ross join */.#de
1ac20 66 69 6e 65 20 4a 54 5f 43 52 4f 53 53 20 20 20  fine JT_CROSS   
1ac30 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a 20 45    0x0002    /* E
1ac40 78 70 6c 69 63 69 74 20 75 73 65 20 6f 66 20 74  xplicit use of t
1ac50 68 65 20 43 52 4f 53 53 20 6b 65 79 77 6f 72 64  he CROSS keyword
1ac60 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4e   */.#define JT_N
1ac70 41 54 55 52 41 4c 20 20 20 30 78 30 30 30 34 20  ATURAL   0x0004 
1ac80 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 61     /* True for a
1ac90 20 22 6e 61 74 75 72 61 6c 22 20 6a 6f 69 6e 20   "natural" join 
1aca0 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4c 45  */.#define JT_LE
1acb0 46 54 20 20 20 20 20 20 30 78 30 30 30 38 20 20  FT      0x0008  
1acc0 20 20 2f 2a 20 4c 65 66 74 20 6f 75 74 65 72 20    /* Left outer 
1acd0 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  join */.#define 
1ace0 4a 54 5f 52 49 47 48 54 20 20 20 20 20 30 78 30  JT_RIGHT     0x0
1acf0 30 31 30 20 20 20 20 2f 2a 20 52 69 67 68 74 20  010    /* Right 
1ad00 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64  outer join */.#d
1ad10 65 66 69 6e 65 20 4a 54 5f 4f 55 54 45 52 20 20  efine JT_OUTER  
1ad20 20 20 20 30 78 30 30 32 30 20 20 20 20 2f 2a 20     0x0020    /* 
1ad30 54 68 65 20 22 4f 55 54 45 52 22 20 6b 65 79 77  The "OUTER" keyw
1ad40 6f 72 64 20 69 73 20 70 72 65 73 65 6e 74 20 2a  ord is present *
1ad50 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 45 52 52  /.#define JT_ERR
1ad60 4f 52 20 20 20 20 20 30 78 30 30 34 30 20 20 20  OR     0x0040   
1ad70 20 2f 2a 20 75 6e 6b 6e 6f 77 6e 20 6f 72 20 75   /* unknown or u
1ad80 6e 73 75 70 70 6f 72 74 65 64 20 6a 6f 69 6e 20  nsupported join 
1ad90 74 79 70 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20  type */.../*.** 
1ada0 46 6c 61 67 73 20 61 70 70 72 6f 70 72 69 61 74  Flags appropriat
1adb0 65 20 66 6f 72 20 74 68 65 20 77 63 74 72 6c 46  e for the wctrlF
1adc0 6c 61 67 73 20 70 61 72 61 6d 65 74 65 72 20 6f  lags parameter o
1add0 66 20 73 71 6c 69 74 65 33 57 68 65 72 65 42 65  f sqlite3WhereBe
1ade0 67 69 6e 28 29 0a 2a 2a 20 61 6e 64 20 74 68 65  gin().** and the
1adf0 20 57 68 65 72 65 49 6e 66 6f 2e 77 63 74 72 6c   WhereInfo.wctrl
1ae00 46 6c 61 67 73 20 6d 65 6d 62 65 72 2e 0a 2a 2a  Flags member..**
1ae10 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72  .** Value constr
1ae20 61 69 6e 74 73 20 28 65 6e 66 6f 72 63 65 64 20  aints (enforced 
1ae30 76 69 61 20 61 73 73 65 72 74 28 29 29 3a 0a 2a  via assert()):.*
1ae40 2a 20 20 20 20 20 57 48 45 52 45 5f 55 53 45 5f  *     WHERE_USE_
1ae50 4c 49 4d 49 54 20 20 3d 3d 20 53 46 5f 46 69 78  LIMIT  == SF_Fix
1ae60 65 64 4c 69 6d 69 74 0a 2a 2f 0a 23 64 65 66 69  edLimit.*/.#defi
1ae70 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59  ne WHERE_ORDERBY
1ae80 5f 4e 4f 52 4d 41 4c 20 20 20 30 78 30 30 30 30  _NORMAL   0x0000
1ae90 20 2f 2a 20 4e 6f 2d 6f 70 20 2a 2f 0a 23 64 65   /* No-op */.#de
1aea0 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52  fine WHERE_ORDER
1aeb0 42 59 5f 4d 49 4e 20 20 20 20 20 20 30 78 30 30  BY_MIN      0x00
1aec0 30 31 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 70  01 /* ORDER BY p
1aed0 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 6d 69  rocessing for mi
1aee0 6e 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66  n() func */.#def
1aef0 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42  ine WHERE_ORDERB
1af00 59 5f 4d 41 58 20 20 20 20 20 20 30 78 30 30 30  Y_MAX      0x000
1af10 32 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 70 72  2 /* ORDER BY pr
1af20 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 6d 61 78  ocessing for max
1af30 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69  () func */.#defi
1af40 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50 41 53 53  ne WHERE_ONEPASS
1af50 5f 44 45 53 49 52 45 44 20 20 30 78 30 30 30 34  _DESIRED  0x0004
1af60 20 2f 2a 20 57 61 6e 74 20 74 6f 20 64 6f 20 6f   /* Want to do o
1af70 6e 65 2d 70 61 73 73 20 55 50 44 41 54 45 2f 44  ne-pass UPDATE/D
1af80 45 4c 45 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65  ELETE */.#define
1af90 20 57 48 45 52 45 5f 4f 4e 45 50 41 53 53 5f 4d   WHERE_ONEPASS_M
1afa0 55 4c 54 49 52 4f 57 20 30 78 30 30 30 38 20 2f  ULTIROW 0x0008 /
1afb0 2a 20 4f 4e 45 50 41 53 53 20 69 73 20 6f 6b 20  * ONEPASS is ok 
1afc0 77 69 74 68 20 6d 75 6c 74 69 70 6c 65 20 72 6f  with multiple ro
1afd0 77 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  ws */.#define WH
1afe0 45 52 45 5f 44 55 50 4c 49 43 41 54 45 53 5f 4f  ERE_DUPLICATES_O
1aff0 4b 20 20 20 20 30 78 30 30 31 30 20 2f 2a 20 4f  K    0x0010 /* O
1b000 6b 20 74 6f 20 72 65 74 75 72 6e 20 61 20 72 6f  k to return a ro
1b010 77 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 63 65  w more than once
1b020 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
1b030 45 5f 4f 52 5f 53 55 42 43 4c 41 55 53 45 20 20  E_OR_SUBCLAUSE  
1b040 20 20 20 30 78 30 30 32 30 20 2f 2a 20 50 72 6f     0x0020 /* Pro
1b050 63 65 73 73 69 6e 67 20 61 20 73 75 62 2d 57 48  cessing a sub-WH
1b060 45 52 45 20 61 73 20 70 61 72 74 20 6f 66 0a 20  ERE as part of. 
1b070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b090 20 20 20 20 20 2a 2a 20 74 68 65 20 4f 52 20 6f       ** the OR o
1b0a0 70 74 69 6d 69 7a 61 74 69 6f 6e 20 20 2a 2f 0a  ptimization  */.
1b0b0 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 47 52  #define WHERE_GR
1b0c0 4f 55 50 42 59 20 20 20 20 20 20 20 20 20 20 30  OUPBY          0
1b0d0 78 30 30 34 30 20 2f 2a 20 70 4f 72 64 65 72 42  x0040 /* pOrderB
1b0e0 79 20 69 73 20 72 65 61 6c 6c 79 20 61 20 47 52  y is really a GR
1b0f0 4f 55 50 20 42 59 20 2a 2f 0a 23 64 65 66 69 6e  OUP BY */.#defin
1b100 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54  e WHERE_DISTINCT
1b110 42 59 20 20 20 20 20 20 20 30 78 30 30 38 30 20  BY       0x0080 
1b120 2f 2a 20 70 4f 72 64 65 72 62 79 20 69 73 20 72  /* pOrderby is r
1b130 65 61 6c 6c 79 20 61 20 44 49 53 54 49 4e 43 54  eally a DISTINCT
1b140 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69   clause */.#defi
1b150 6e 65 20 57 48 45 52 45 5f 57 41 4e 54 5f 44 49  ne WHERE_WANT_DI
1b160 53 54 49 4e 43 54 20 20 20 20 30 78 30 31 30 30  STINCT    0x0100
1b170 20 2f 2a 20 41 6c 6c 20 6f 75 74 70 75 74 20 6e   /* All output n
1b180 65 65 64 73 20 74 6f 20 62 65 20 64 69 73 74 69  eeds to be disti
1b190 6e 63 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  nct */.#define W
1b1a0 48 45 52 45 5f 53 4f 52 54 42 59 47 52 4f 55 50  HERE_SORTBYGROUP
1b1b0 20 20 20 20 20 20 30 78 30 32 30 30 20 2f 2a 20        0x0200 /* 
1b1c0 53 75 70 70 6f 72 74 20 73 71 6c 69 74 65 33 57  Support sqlite3W
1b1d0 68 65 72 65 49 73 53 6f 72 74 65 64 28 29 20 2a  hereIsSorted() *
1b1e0 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1b1f0 53 45 45 4b 5f 54 41 42 4c 45 20 20 20 20 20 20  SEEK_TABLE      
1b200 20 30 78 30 34 30 30 20 2f 2a 20 44 6f 20 6e 6f   0x0400 /* Do no
1b210 74 20 64 65 66 65 72 20 73 65 65 6b 73 20 6f 6e  t defer seeks on
1b220 20 6d 61 69 6e 20 74 61 62 6c 65 20 2a 2f 0a 23   main table */.#
1b230 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44  define WHERE_ORD
1b240 45 52 42 59 5f 4c 49 4d 49 54 20 20 20 20 30 78  ERBY_LIMIT    0x
1b250 30 38 30 30 20 2f 2a 20 4f 52 44 45 52 42 59 2b  0800 /* ORDERBY+
1b260 4c 49 4d 49 54 20 6f 6e 20 74 68 65 20 69 6e 6e  LIMIT on the inn
1b270 65 72 20 6c 6f 6f 70 20 2a 2f 0a 23 64 65 66 69  er loop */.#defi
1b280 6e 65 20 57 48 45 52 45 5f 53 45 45 4b 5f 55 4e  ne WHERE_SEEK_UN
1b290 49 51 5f 54 41 42 4c 45 20 20 30 78 31 30 30 30  IQ_TABLE  0x1000
1b2a0 20 2f 2a 20 44 6f 20 6e 6f 74 20 64 65 66 65 72   /* Do not defer
1b2b0 20 73 65 65 6b 73 20 69 66 20 75 6e 69 71 75 65   seeks if unique
1b2c0 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
1b2d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20              /*  
1b2e0 20 20 20 30 78 32 30 30 30 20 20 20 20 6e 6f 74     0x2000    not
1b2f0 20 63 75 72 72 65 6e 74 6c 79 20 75 73 65 64 20   currently used 
1b300 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1b310 5f 55 53 45 5f 4c 49 4d 49 54 20 20 20 20 20 20  _USE_LIMIT      
1b320 20 20 30 78 34 30 30 30 20 2f 2a 20 55 73 65 20    0x4000 /* Use 
1b330 74 68 65 20 4c 49 4d 49 54 20 69 6e 20 63 6f 73  the LIMIT in cos
1b340 74 20 65 73 74 69 6d 61 74 65 73 20 2a 2f 0a 20  t estimates */. 
1b350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b360 20 20 20 20 20 20 20 2f 2a 20 20 20 20 20 30 78         /*     0x
1b370 38 30 30 30 20 20 20 20 6e 6f 74 20 63 75 72 72  8000    not curr
1b380 65 6e 74 6c 79 20 75 73 65 64 20 2a 2f 0a 0a 2f  ently used */../
1b390 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74 75 72 6e  * Allowed return
1b3a0 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 73 71 6c   values from sql
1b3b0 69 74 65 33 57 68 65 72 65 49 73 44 69 73 74 69  ite3WhereIsDisti
1b3c0 6e 63 74 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65  nct().*/.#define
1b3d0 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f   WHERE_DISTINCT_
1b3e0 4e 4f 4f 50 20 20 20 20 20 20 30 20 20 2f 2a 20  NOOP      0  /* 
1b3f0 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64  DISTINCT keyword
1b400 20 6e 6f 74 20 75 73 65 64 20 2a 2f 0a 23 64 65   not used */.#de
1b410 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49  fine WHERE_DISTI
1b420 4e 43 54 5f 55 4e 49 51 55 45 20 20 20 20 31 20  NCT_UNIQUE    1 
1b430 20 2f 2a 20 4e 6f 20 64 75 70 6c 69 63 61 74 65   /* No duplicate
1b440 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  s */.#define WHE
1b450 52 45 5f 44 49 53 54 49 4e 43 54 5f 4f 52 44 45  RE_DISTINCT_ORDE
1b460 52 45 44 20 20 20 32 20 20 2f 2a 20 41 6c 6c 20  RED   2  /* All 
1b470 64 75 70 6c 69 63 61 74 65 73 20 61 72 65 20 61  duplicates are a
1b480 64 6a 61 63 65 6e 74 20 2a 2f 0a 23 64 65 66 69  djacent */.#defi
1b490 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43  ne WHERE_DISTINC
1b4a0 54 5f 55 4e 4f 52 44 45 52 45 44 20 33 20 20 2f  T_UNORDERED 3  /
1b4b0 2a 20 44 75 70 6c 69 63 61 74 65 73 20 61 72 65  * Duplicates are
1b4c0 20 73 63 61 74 74 65 72 65 64 20 2a 2f 0a 0a 2f   scattered */../
1b4d0 2a 0a 2a 2a 20 41 20 4e 61 6d 65 43 6f 6e 74 65  *.** A NameConte
1b4e0 78 74 20 64 65 66 69 6e 65 73 20 61 20 63 6f 6e  xt defines a con
1b4f0 74 65 78 74 20 69 6e 20 77 68 69 63 68 20 74 6f  text in which to
1b500 20 72 65 73 6f 6c 76 65 20 74 61 62 6c 65 20 61   resolve table a
1b510 6e 64 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 6e 61 6d  nd column.** nam
1b520 65 73 2e 20 20 54 68 65 20 63 6f 6e 74 65 78 74  es.  The context
1b530 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 6c   consists of a l
1b540 69 73 74 20 6f 66 20 74 61 62 6c 65 73 20 28 74  ist of tables (t
1b550 68 65 20 70 53 72 63 4c 69 73 74 29 20 66 69 65  he pSrcList) fie
1b560 6c 64 20 61 6e 64 0a 2a 2a 20 61 20 6c 69 73 74  ld and.** a list
1b570 20 6f 66 20 6e 61 6d 65 64 20 65 78 70 72 65 73   of named expres
1b580 73 69 6f 6e 20 28 70 45 4c 69 73 74 29 2e 20 20  sion (pEList).  
1b590 54 68 65 20 6e 61 6d 65 64 20 65 78 70 72 65 73  The named expres
1b5a0 73 69 6f 6e 20 6c 69 73 74 20 6d 61 79 0a 2a 2a  sion list may.**
1b5b0 20 62 65 20 4e 55 4c 4c 2e 20 20 54 68 65 20 70   be NULL.  The p
1b5c0 53 72 63 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  Src corresponds 
1b5d0 74 6f 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  to the FROM clau
1b5e0 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20 6f  se of a SELECT o
1b5f0 72 0a 2a 2a 20 74 6f 20 74 68 65 20 74 61 62 6c  r.** to the tabl
1b600 65 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64  e being operated
1b610 20 6f 6e 20 62 79 20 49 4e 53 45 52 54 2c 20 55   on by INSERT, U
1b620 50 44 41 54 45 2c 20 6f 72 20 44 45 4c 45 54 45  PDATE, or DELETE
1b630 2e 20 20 54 68 65 0a 2a 2a 20 70 45 4c 69 73 74  .  The.** pEList
1b640 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
1b650 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 20 6f  the result set o
1b660 66 20 61 20 53 45 4c 45 43 54 20 61 6e 64 20 69  f a SELECT and i
1b670 73 20 4e 55 4c 4c 20 66 6f 72 0a 2a 2a 20 6f 74  s NULL for.** ot
1b680 68 65 72 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a  her statements..
1b690 2a 2a 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78  **.** NameContex
1b6a0 74 73 20 63 61 6e 20 62 65 20 6e 65 73 74 65 64  ts can be nested
1b6b0 2e 20 20 57 68 65 6e 20 72 65 73 6f 6c 76 69 6e  .  When resolvin
1b6c0 67 20 6e 61 6d 65 73 2c 20 74 68 65 20 69 6e 6e  g names, the inn
1b6d0 65 72 2d 6d 6f 73 74 0a 2a 2a 20 63 6f 6e 74 65  er-most.** conte
1b6e0 78 74 20 69 73 20 73 65 61 72 63 68 65 64 20 66  xt is searched f
1b6f0 69 72 73 74 2e 20 20 49 66 20 6e 6f 20 6d 61 74  irst.  If no mat
1b700 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65  ch is found, the
1b710 20 6e 65 78 74 20 6f 75 74 65 72 0a 2a 2a 20 63   next outer.** c
1b720 6f 6e 74 65 78 74 20 69 73 20 63 68 65 63 6b 65  ontext is checke
1b730 64 2e 20 20 49 66 20 74 68 65 72 65 20 69 73 20  d.  If there is 
1b740 73 74 69 6c 6c 20 6e 6f 20 6d 61 74 63 68 2c 20  still no match, 
1b750 74 68 65 20 6e 65 78 74 20 63 6f 6e 74 65 78 74  the next context
1b760 0a 2a 2a 20 69 73 20 63 68 65 63 6b 65 64 2e 20  .** is checked. 
1b770 20 54 68 69 73 20 70 72 6f 63 65 73 73 20 63 6f   This process co
1b780 6e 74 69 6e 75 65 73 20 75 6e 74 69 6c 20 65 69  ntinues until ei
1b790 74 68 65 72 20 61 20 6d 61 74 63 68 20 69 73 20  ther a match is 
1b7a0 66 6f 75 6e 64 0a 2a 2a 20 6f 72 20 61 6c 6c 20  found.** or all 
1b7b0 63 6f 6e 74 65 78 74 73 20 61 72 65 20 63 68 65  contexts are che
1b7c0 63 6b 2e 20 20 57 68 65 6e 20 61 20 6d 61 74 63  ck.  When a matc
1b7d0 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20  h is found, the 
1b7e0 6e 52 65 66 20 6d 65 6d 62 65 72 20 6f 66 0a 2a  nRef member of.*
1b7f0 2a 20 74 68 65 20 63 6f 6e 74 65 78 74 20 63 6f  * the context co
1b800 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 6d 61 74  ntaining the mat
1b810 63 68 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  ch is incremente
1b820 64 2e 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 73 75  d..**.** Each su
1b830 62 71 75 65 72 79 20 67 65 74 73 20 61 20 6e 65  bquery gets a ne
1b840 77 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2e 20 20  w NameContext.  
1b850 54 68 65 20 70 4e 65 78 74 20 66 69 65 6c 64 20  The pNext field 
1b860 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a  points to the.**
1b870 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 69 6e 20   NameContext in 
1b880 74 68 65 20 70 61 72 65 6e 74 20 71 75 65 72 79  the parent query
1b890 2e 20 20 54 68 75 73 20 74 68 65 20 70 72 6f 63  .  Thus the proc
1b8a0 65 73 73 20 6f 66 20 73 63 61 6e 6e 69 6e 67 20  ess of scanning 
1b8b0 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65  the.** NameConte
1b8c0 78 74 20 6c 69 73 74 20 63 6f 72 72 65 73 70 6f  xt list correspo
1b8d0 6e 64 73 20 74 6f 20 73 65 61 72 63 68 69 6e 67  nds to searching
1b8e0 20 74 68 72 6f 75 67 68 20 73 75 63 63 65 73 73   through success
1b8f0 69 76 65 6c 79 20 6f 75 74 65 72 0a 2a 2a 20 73  ively outer.** s
1b900 75 62 71 75 65 72 69 65 73 20 6c 6f 6f 6b 69 6e  ubqueries lookin
1b910 67 20 66 6f 72 20 61 20 6d 61 74 63 68 2e 0a 2a  g for a match..*
1b920 2f 0a 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e  /.struct NameCon
1b930 74 65 78 74 20 7b 0a 20 20 50 61 72 73 65 20 2a  text {.  Parse *
1b940 70 50 61 72 73 65 3b 20 20 20 20 20 20 20 2f 2a  pParse;       /*
1b950 20 54 68 65 20 70 61 72 73 65 72 20 2a 2f 0a 20   The parser */. 
1b960 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 4c 69   SrcList *pSrcLi
1b970 73 74 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20  st;   /* One or 
1b980 6d 6f 72 65 20 74 61 62 6c 65 73 20 75 73 65 64  more tables used
1b990 20 74 6f 20 72 65 73 6f 6c 76 65 20 6e 61 6d 65   to resolve name
1b9a0 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  s */.  ExprList 
1b9b0 2a 70 45 4c 69 73 74 3b 20 20 20 20 2f 2a 20 4f  *pEList;    /* O
1b9c0 70 74 69 6f 6e 61 6c 20 6c 69 73 74 20 6f 66 20  ptional list of 
1b9d0 72 65 73 75 6c 74 2d 73 65 74 20 63 6f 6c 75 6d  result-set colum
1b9e0 6e 73 20 2a 2f 0a 20 20 41 67 67 49 6e 66 6f 20  ns */.  AggInfo 
1b9f0 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20 2f 2a 20  *pAggInfo;   /* 
1ba00 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  Information abou
1ba10 74 20 61 67 67 72 65 67 61 74 65 73 20 61 74 20  t aggregates at 
1ba20 74 68 69 73 20 6c 65 76 65 6c 20 2a 2f 0a 20 20  this level */.  
1ba30 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e 65  NameContext *pNe
1ba40 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 75 74  xt;  /* Next out
1ba50 65 72 20 6e 61 6d 65 20 63 6f 6e 74 65 78 74 2e  er name context.
1ba60 20 20 4e 55 4c 4c 20 66 6f 72 20 6f 75 74 65 72    NULL for outer
1ba70 6d 6f 73 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 52  most */.  int nR
1ba80 65 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ef;            /
1ba90 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 61 6d 65  * Number of name
1baa0 73 20 72 65 73 6f 6c 76 65 64 20 62 79 20 74 68  s resolved by th
1bab0 69 73 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20  is context */.  
1bac0 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20  int nErr;       
1bad0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1bae0 66 20 65 72 72 6f 72 73 20 65 6e 63 6f 75 6e 74  f errors encount
1baf0 65 72 65 64 20 77 68 69 6c 65 20 72 65 73 6f 6c  ered while resol
1bb00 76 69 6e 67 20 6e 61 6d 65 73 20 2a 2f 0a 20 20  ving names */.  
1bb10 75 31 36 20 6e 63 46 6c 61 67 73 3b 20 20 20 20  u16 ncFlags;    
1bb20 20 20 20 20 20 2f 2a 20 5a 65 72 6f 20 6f 72 20       /* Zero or 
1bb30 6d 6f 72 65 20 4e 43 5f 2a 20 66 6c 61 67 73 20  more NC_* flags 
1bb40 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 20 2a 2f  defined below */
1bb50 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  .};../*.** Allow
1bb60 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68  ed values for th
1bb70 65 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2c 20 6e  e NameContext, n
1bb80 63 46 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a  cFlags field..**
1bb90 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72  .** Value constr
1bba0 61 69 6e 74 73 20 28 61 6c 6c 20 63 68 65 63 6b  aints (all check
1bbb0 65 64 20 76 69 61 20 61 73 73 65 72 74 28 29 29  ed via assert())
1bbc0 3a 0a 2a 2a 20 20 20 20 4e 43 5f 48 61 73 41 67  :.**    NC_HasAg
1bbd0 67 20 20 20 20 3d 3d 20 53 46 5f 48 61 73 41 67  g    == SF_HasAg
1bbe0 67 0a 2a 2a 20 20 20 20 4e 43 5f 4d 69 6e 4d 61  g.**    NC_MinMa
1bbf0 78 41 67 67 20 3d 3d 20 53 46 5f 4d 69 6e 4d 61  xAgg == SF_MinMa
1bc00 78 41 67 67 20 3d 3d 20 53 51 4c 49 54 45 5f 46  xAgg == SQLITE_F
1bc10 55 4e 43 5f 4d 49 4e 4d 41 58 0a 2a 2a 0a 2a 2f  UNC_MINMAX.**.*/
1bc20 0a 23 64 65 66 69 6e 65 20 4e 43 5f 41 6c 6c 6f  .#define NC_Allo
1bc30 77 41 67 67 20 20 30 78 30 30 30 31 20 20 2f 2a  wAgg  0x0001  /*
1bc40 20 41 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   Aggregate funct
1bc50 69 6f 6e 73 20 61 72 65 20 61 6c 6c 6f 77 65 64  ions are allowed
1bc60 20 68 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65   here */.#define
1bc70 20 4e 43 5f 50 61 72 74 49 64 78 20 20 20 30 78   NC_PartIdx   0x
1bc80 30 30 30 32 20 20 2f 2a 20 54 72 75 65 20 69 66  0002  /* True if
1bc90 20 72 65 73 6f 6c 76 69 6e 67 20 61 20 70 61 72   resolving a par
1bca0 74 69 61 6c 20 69 6e 64 65 78 20 57 48 45 52 45  tial index WHERE
1bcb0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49   */.#define NC_I
1bcc0 73 43 68 65 63 6b 20 20 20 30 78 30 30 30 34 20  sCheck   0x0004 
1bcd0 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f   /* True if reso
1bce0 6c 76 69 6e 67 20 6e 61 6d 65 73 20 69 6e 20 61  lving names in a
1bcf0 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e   CHECK constrain
1bd00 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  t */.#define NC_
1bd10 49 6e 41 67 67 46 75 6e 63 20 30 78 30 30 30 38  InAggFunc 0x0008
1bd20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61 6e 61    /* True if ana
1bd30 6c 79 7a 69 6e 67 20 61 72 67 75 6d 65 6e 74 73  lyzing arguments
1bd40 20 74 6f 20 61 6e 20 61 67 67 20 66 75 6e 63 20   to an agg func 
1bd50 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 48 61  */.#define NC_Ha
1bd60 73 41 67 67 20 20 20 20 30 78 30 30 31 30 20 20  sAgg    0x0010  
1bd70 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 61  /* One or more a
1bd80 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
1bd90 6e 73 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69  ns seen */.#defi
1bda0 6e 65 20 4e 43 5f 49 64 78 45 78 70 72 20 20 20  ne NC_IdxExpr   
1bdb0 30 78 30 30 32 30 20 20 2f 2a 20 54 72 75 65 20  0x0020  /* True 
1bdc0 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 63 6f 6c  if resolving col
1bdd0 75 6d 6e 73 20 6f 66 20 43 52 45 41 54 45 20 49  umns of CREATE I
1bde0 4e 44 45 58 20 2a 2f 0a 23 64 65 66 69 6e 65 20  NDEX */.#define 
1bdf0 4e 43 5f 56 61 72 53 65 6c 65 63 74 20 30 78 30  NC_VarSelect 0x0
1be00 30 34 30 20 20 2f 2a 20 41 20 63 6f 72 72 65 6c  040  /* A correl
1be10 61 74 65 64 20 73 75 62 71 75 65 72 79 20 68 61  ated subquery ha
1be20 73 20 62 65 65 6e 20 73 65 65 6e 20 2a 2f 0a 23  s been seen */.#
1be30 64 65 66 69 6e 65 20 4e 43 5f 4d 69 6e 4d 61 78  define NC_MinMax
1be40 41 67 67 20 30 78 31 30 30 30 20 20 2f 2a 20 6d  Agg 0x1000  /* m
1be50 69 6e 2f 6d 61 78 20 61 67 67 72 65 67 61 74 65  in/max aggregate
1be60 73 20 73 65 65 6e 2e 20 20 53 65 65 20 6e 6f 74  s seen.  See not
1be70 65 20 61 62 6f 76 65 20 2a 2f 0a 0a 2f 2a 0a 2a  e above */../*.*
1be80 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
1be90 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
1bea0 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e  tructure contain
1beb0 73 20 61 6c 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  s all informatio
1bec0 6e 0a 2a 2a 20 6e 65 65 64 65 64 20 74 6f 20 67  n.** needed to g
1bed0 65 6e 65 72 61 74 65 20 63 6f 64 65 20 66 6f 72  enerate code for
1bee0 20 61 20 73 69 6e 67 6c 65 20 53 45 4c 45 43 54   a single SELECT
1bef0 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a   statement..**.*
1bf00 2a 20 6e 4c 69 6d 69 74 20 69 73 20 73 65 74 20  * nLimit is set 
1bf10 74 6f 20 2d 31 20 69 66 20 74 68 65 72 65 20 69  to -1 if there i
1bf20 73 20 6e 6f 20 4c 49 4d 49 54 20 63 6c 61 75 73  s no LIMIT claus
1bf30 65 2e 20 20 6e 4f 66 66 73 65 74 20 69 73 20 73  e.  nOffset is s
1bf40 65 74 20 74 6f 20 30 2e 0a 2a 2a 20 49 66 20 74  et to 0..** If t
1bf50 68 65 72 65 20 69 73 20 61 20 4c 49 4d 49 54 20  here is a LIMIT 
1bf60 63 6c 61 75 73 65 2c 20 74 68 65 20 70 61 72 73  clause, the pars
1bf70 65 72 20 73 65 74 73 20 6e 4c 69 6d 69 74 20 74  er sets nLimit t
1bf80 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  o the value of t
1bf90 68 65 0a 2a 2a 20 6c 69 6d 69 74 20 61 6e 64 20  he.** limit and 
1bfa0 6e 4f 66 66 73 65 74 20 74 6f 20 74 68 65 20 76  nOffset to the v
1bfb0 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 66 66 73  alue of the offs
1bfc0 65 74 20 28 6f 72 20 30 20 69 66 20 74 68 65 72  et (or 0 if ther
1bfd0 65 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 66 66 73  e is not.** offs
1bfe0 65 74 29 2e 20 20 42 75 74 20 6c 61 74 65 72 20  et).  But later 
1bff0 6f 6e 2c 20 6e 4c 69 6d 69 74 20 61 6e 64 20 6e  on, nLimit and n
1c000 4f 66 66 73 65 74 20 62 65 63 6f 6d 65 20 74 68  Offset become th
1c010 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f  e memory locatio
1c020 6e 73 0a 2a 2a 20 69 6e 20 74 68 65 20 56 44 42  ns.** in the VDB
1c030 45 20 74 68 61 74 20 72 65 63 6f 72 64 20 74 68  E that record th
1c040 65 20 6c 69 6d 69 74 20 61 6e 64 20 6f 66 66 73  e limit and offs
1c050 65 74 20 63 6f 75 6e 74 65 72 73 2e 0a 2a 2a 0a  et counters..**.
1c060 2a 2a 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b  ** addrOpenEphm[
1c070 5d 20 65 6e 74 72 69 65 73 20 63 6f 6e 74 61 69  ] entries contai
1c080 6e 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66  n the address of
1c090 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61   OP_OpenEphemera
1c0a0 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 20 54 68  l opcodes..** Th
1c0b0 65 73 65 20 61 64 64 72 65 73 73 65 73 20 6d 75  ese addresses mu
1c0c0 73 74 20 62 65 20 73 74 6f 72 65 64 20 73 6f 20  st be stored so 
1c0d0 74 68 61 74 20 77 65 20 63 61 6e 20 67 6f 20 62  that we can go b
1c0e0 61 63 6b 20 61 6e 64 20 66 69 6c 6c 20 69 6e 0a  ack and fill in.
1c0f0 2a 2a 20 74 68 65 20 50 34 5f 4b 45 59 49 4e 46  ** the P4_KEYINF
1c100 4f 20 61 6e 64 20 50 32 20 70 61 72 61 6d 65 74  O and P2 paramet
1c110 65 72 73 20 6c 61 74 65 72 2e 20 20 4e 65 69 74  ers later.  Neit
1c120 68 65 72 20 74 68 65 20 4b 65 79 49 6e 66 6f 20  her the KeyInfo 
1c130 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65  nor.** the numbe
1c140 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
1c150 50 32 20 63 61 6e 20 62 65 20 63 6f 6d 70 75 74  P2 can be comput
1c160 65 64 20 61 74 20 74 68 65 20 73 61 6d 65 20 74  ed at the same t
1c170 69 6d 65 0a 2a 2a 20 61 73 20 74 68 65 20 4f 50  ime.** as the OP
1c180 5f 4f 70 65 6e 45 70 68 6d 20 69 6e 73 74 72 75  _OpenEphm instru
1c190 63 74 69 6f 6e 20 69 73 20 63 6f 64 65 64 20 62  ction is coded b
1c1a0 65 63 61 75 73 65 20 6e 6f 74 0a 2a 2a 20 65 6e  ecause not.** en
1c1b0 6f 75 67 68 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ough information
1c1c0 20 61 62 6f 75 74 20 74 68 65 20 63 6f 6d 70 6f   about the compo
1c1d0 75 6e 64 20 71 75 65 72 79 20 69 73 20 6b 6e 6f  und query is kno
1c1e0 77 6e 20 61 74 20 74 68 61 74 20 70 6f 69 6e 74  wn at that point
1c1f0 2e 0a 2a 2a 20 54 68 65 20 4b 65 79 49 6e 66 6f  ..** The KeyInfo
1c200 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 54 72 61   for addrOpenTra
1c210 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d 20 63 6f 6e  n[0] and [1] con
1c220 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 20  tains collating 
1c230 73 65 71 75 65 6e 63 65 73 0a 2a 2a 20 66 6f 72  sequences.** for
1c240 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e   the result set.
1c250 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f    The KeyInfo fo
1c260 72 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32  r addrOpenEphm[2
1c270 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61  ] contains colla
1c280 74 69 6e 67 0a 2a 2a 20 73 65 71 75 65 6e 63 65  ting.** sequence
1c290 73 20 66 6f 72 20 74 68 65 20 4f 52 44 45 52 20  s for the ORDER 
1c2a0 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74  BY clause..*/.st
1c2b0 72 75 63 74 20 53 65 6c 65 63 74 20 7b 0a 20 20  ruct Select {.  
1c2c0 45 78 70 72 4c 69 73 74 20 2a 70 45 4c 69 73 74  ExprList *pEList
1c2d0 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 66 69  ;      /* The fi
1c2e0 65 6c 64 73 20 6f 66 20 74 68 65 20 72 65 73 75  elds of the resu
1c2f0 6c 74 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20  lt */.  u8 op;  
1c300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1c310 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b 5f 55 4e 49  * One of: TK_UNI
1c320 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b 5f 49 4e 54  ON TK_ALL TK_INT
1c330 45 52 53 45 43 54 20 54 4b 5f 45 58 43 45 50 54  ERSECT TK_EXCEPT
1c340 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 6e 53 65   */.  LogEst nSe
1c350 6c 65 63 74 52 6f 77 3b 20 20 20 20 20 2f 2a 20  lectRow;     /* 
1c360 45 73 74 69 6d 61 74 65 64 20 6e 75 6d 62 65 72  Estimated number
1c370 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20   of result rows 
1c380 2a 2f 0a 20 20 75 33 32 20 73 65 6c 46 6c 61 67  */.  u32 selFlag
1c390 73 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56  s;          /* V
1c3a0 61 72 69 6f 75 73 20 53 46 5f 2a 20 76 61 6c 75  arious SF_* valu
1c3b0 65 73 20 2a 2f 0a 20 20 69 6e 74 20 69 4c 69 6d  es */.  int iLim
1c3c0 69 74 2c 20 69 4f 66 66 73 65 74 3b 20 20 20 2f  it, iOffset;   /
1c3d0 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69 73 74 65  * Memory registe
1c3e0 72 73 20 68 6f 6c 64 69 6e 67 20 4c 49 4d 49 54  rs holding LIMIT
1c3f0 20 26 20 4f 46 46 53 45 54 20 63 6f 75 6e 74 65   & OFFSET counte
1c400 72 73 20 2a 2f 0a 23 69 66 20 53 45 4c 45 43 54  rs */.#if SELECT
1c410 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a 20 20  TRACE_ENABLED.  
1c420 63 68 61 72 20 7a 53 65 6c 4e 61 6d 65 5b 31 32  char zSelName[12
1c430 5d 3b 20 20 20 20 20 2f 2a 20 53 79 6d 62 6f 6c  ];     /* Symbol
1c440 69 63 20 6e 61 6d 65 20 6f 66 20 74 68 69 73 20  ic name of this 
1c450 53 45 4c 45 43 54 20 75 73 65 20 66 6f 72 20 64  SELECT use for d
1c460 65 62 75 67 67 69 6e 67 20 2a 2f 0a 23 65 6e 64  ebugging */.#end
1c470 69 66 0a 20 20 69 6e 74 20 61 64 64 72 4f 70 65  if.  int addrOpe
1c480 6e 45 70 68 6d 5b 32 5d 3b 20 20 20 2f 2a 20 4f  nEphm[2];   /* O
1c490 50 5f 4f 70 65 6e 45 70 68 65 6d 20 6f 70 63 6f  P_OpenEphem opco
1c4a0 64 65 73 20 72 65 6c 61 74 65 64 20 74 6f 20 74  des related to t
1c4b0 68 69 73 20 73 65 6c 65 63 74 20 2a 2f 0a 20 20  his select */.  
1c4c0 53 72 63 4c 69 73 74 20 2a 70 53 72 63 3b 20 20  SrcList *pSrc;  
1c4d0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 46 52         /* The FR
1c4e0 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45  OM clause */.  E
1c4f0 78 70 72 20 2a 70 57 68 65 72 65 3b 20 20 20 20  xpr *pWhere;    
1c500 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45        /* The WHE
1c510 52 45 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45  RE clause */.  E
1c520 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75 70 42  xprList *pGroupB
1c530 79 3b 20 20 20 20 2f 2a 20 54 68 65 20 47 52 4f  y;    /* The GRO
1c540 55 50 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a  UP BY clause */.
1c550 20 20 45 78 70 72 20 2a 70 48 61 76 69 6e 67 3b    Expr *pHaving;
1c560 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
1c570 48 41 56 49 4e 47 20 63 6c 61 75 73 65 20 2a 2f  HAVING clause */
1c580 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4f 72  .  ExprList *pOr
1c590 64 65 72 42 79 3b 20 20 20 20 2f 2a 20 54 68 65  derBy;    /* The
1c5a0 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
1c5b0 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 50   */.  Select *pP
1c5c0 72 69 6f 72 3b 20 20 20 20 20 20 20 20 2f 2a 20  rior;        /* 
1c5d0 50 72 69 6f 72 20 73 65 6c 65 63 74 20 69 6e 20  Prior select in 
1c5e0 61 20 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65 63  a compound selec
1c5f0 74 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20  t statement */. 
1c600 20 53 65 6c 65 63 74 20 2a 70 4e 65 78 74 3b 20   Select *pNext; 
1c610 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20          /* Next 
1c620 73 65 6c 65 63 74 20 74 6f 20 74 68 65 20 6c 65  select to the le
1c630 66 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64  ft in a compound
1c640 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 4c 69 6d   */.  Expr *pLim
1c650 69 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  it;          /* 
1c660 4c 49 4d 49 54 20 65 78 70 72 65 73 73 69 6f 6e  LIMIT expression
1c670 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74  . NULL means not
1c680 20 75 73 65 64 2e 20 2a 2f 0a 20 20 45 78 70 72   used. */.  Expr
1c690 20 2a 70 4f 66 66 73 65 74 3b 20 20 20 20 20 20   *pOffset;      
1c6a0 20 20 20 2f 2a 20 4f 46 46 53 45 54 20 65 78 70     /* OFFSET exp
1c6b0 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65  ression. NULL me
1c6c0 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f  ans not used. */
1c6d0 0a 20 20 57 69 74 68 20 2a 70 57 69 74 68 3b 20  .  With *pWith; 
1c6e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 49 54            /* WIT
1c6f0 48 20 63 6c 61 75 73 65 20 61 74 74 61 63 68 65  H clause attache
1c700 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63 74  d to this select
1c710 2e 20 4f 72 20 4e 55 4c 4c 2e 20 2a 2f 0a 7d 3b  . Or NULL. */.};
1c720 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  ../*.** Allowed 
1c730 76 61 6c 75 65 73 20 66 6f 72 20 53 65 6c 65 63  values for Selec
1c740 74 2e 73 65 6c 46 6c 61 67 73 2e 20 20 54 68 65  t.selFlags.  The
1c750 20 22 53 46 22 20 70 72 65 66 69 78 20 73 74 61   "SF" prefix sta
1c760 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 53 65 6c 65  nds for.** "Sele
1c770 63 74 20 46 6c 61 67 22 2e 0a 2a 2a 0a 2a 2a 20  ct Flag"..**.** 
1c780 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74  Value constraint
1c790 73 20 28 61 6c 6c 20 63 68 65 63 6b 65 64 20 76  s (all checked v
1c7a0 69 61 20 61 73 73 65 72 74 28 29 29 0a 2a 2a 20  ia assert()).** 
1c7b0 20 20 20 20 53 46 5f 48 61 73 41 67 67 20 20 20      SF_HasAgg   
1c7c0 20 20 3d 3d 20 4e 43 5f 48 61 73 41 67 67 0a 2a    == NC_HasAgg.*
1c7d0 2a 20 20 20 20 20 53 46 5f 4d 69 6e 4d 61 78 41  *     SF_MinMaxA
1c7e0 67 67 20 20 3d 3d 20 4e 43 5f 4d 69 6e 4d 61 78  gg  == NC_MinMax
1c7f0 41 67 67 20 20 20 20 20 3d 3d 20 53 51 4c 49 54  Agg     == SQLIT
1c800 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 0a 2a 2a  E_FUNC_MINMAX.**
1c810 20 20 20 20 20 53 46 5f 46 69 78 65 64 4c 69 6d       SF_FixedLim
1c820 69 74 20 3d 3d 20 57 48 45 52 45 5f 55 53 45 5f  it == WHERE_USE_
1c830 4c 49 4d 49 54 0a 2a 2f 0a 23 64 65 66 69 6e 65  LIMIT.*/.#define
1c840 20 53 46 5f 44 69 73 74 69 6e 63 74 20 20 20 20   SF_Distinct    
1c850 20 20 20 30 78 30 30 30 30 31 20 20 2f 2a 20 4f     0x00001  /* O
1c860 75 74 70 75 74 20 73 68 6f 75 6c 64 20 62 65 20  utput should be 
1c870 44 49 53 54 49 4e 43 54 20 2a 2f 0a 23 64 65 66  DISTINCT */.#def
1c880 69 6e 65 20 53 46 5f 41 6c 6c 20 20 20 20 20 20  ine SF_All      
1c890 20 20 20 20 20 20 30 78 30 30 30 30 32 20 20 2f        0x00002  /
1c8a0 2a 20 49 6e 63 6c 75 64 65 73 20 74 68 65 20 41  * Includes the A
1c8b0 4c 4c 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64  LL keyword */.#d
1c8c0 65 66 69 6e 65 20 53 46 5f 52 65 73 6f 6c 76 65  efine SF_Resolve
1c8d0 64 20 20 20 20 20 20 20 30 78 30 30 30 30 34 20  d       0x00004 
1c8e0 20 2f 2a 20 49 64 65 6e 74 69 66 69 65 72 73 20   /* Identifiers 
1c8f0 68 61 76 65 20 62 65 65 6e 20 72 65 73 6f 6c 76  have been resolv
1c900 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  ed */.#define SF
1c910 5f 41 67 67 72 65 67 61 74 65 20 20 20 20 20 20  _Aggregate      
1c920 30 78 30 30 30 30 38 20 20 2f 2a 20 43 6f 6e 74  0x00008  /* Cont
1c930 61 69 6e 73 20 61 67 67 20 66 75 6e 63 74 69 6f  ains agg functio
1c940 6e 73 20 6f 72 20 61 20 47 52 4f 55 50 20 42 59  ns or a GROUP BY
1c950 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 48   */.#define SF_H
1c960 61 73 41 67 67 20 20 20 20 20 20 20 20 20 30 78  asAgg         0x
1c970 30 30 30 31 30 20 20 2f 2a 20 43 6f 6e 74 61 69  00010  /* Contai
1c980 6e 73 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  ns aggregate fun
1c990 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e  ctions */.#defin
1c9a0 65 20 53 46 5f 55 73 65 73 45 70 68 65 6d 65 72  e SF_UsesEphemer
1c9b0 61 6c 20 20 30 78 30 30 30 32 30 20 20 2f 2a 20  al  0x00020  /* 
1c9c0 55 73 65 73 20 74 68 65 20 4f 70 65 6e 45 70 68  Uses the OpenEph
1c9d0 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65 20 2a 2f  emeral opcode */
1c9e0 0a 23 64 65 66 69 6e 65 20 53 46 5f 45 78 70 61  .#define SF_Expa
1c9f0 6e 64 65 64 20 20 20 20 20 20 20 30 78 30 30 30  nded       0x000
1ca00 34 30 20 20 2f 2a 20 73 71 6c 69 74 65 33 53 65  40  /* sqlite3Se
1ca10 6c 65 63 74 45 78 70 61 6e 64 28 29 20 63 61 6c  lectExpand() cal
1ca20 6c 65 64 20 6f 6e 20 74 68 69 73 20 2a 2f 0a 23  led on this */.#
1ca30 64 65 66 69 6e 65 20 53 46 5f 48 61 73 54 79 70  define SF_HasTyp
1ca40 65 49 6e 66 6f 20 20 20 20 30 78 30 30 30 38 30  eInfo    0x00080
1ca50 20 20 2f 2a 20 46 52 4f 4d 20 73 75 62 71 75 65    /* FROM subque
1ca60 72 69 65 73 20 68 61 76 65 20 54 61 62 6c 65 20  ries have Table 
1ca70 6d 65 74 61 64 61 74 61 20 2a 2f 0a 23 64 65 66  metadata */.#def
1ca80 69 6e 65 20 53 46 5f 43 6f 6d 70 6f 75 6e 64 20  ine SF_Compound 
1ca90 20 20 20 20 20 20 30 78 30 30 31 30 30 20 20 2f        0x00100  /
1caa0 2a 20 50 61 72 74 20 6f 66 20 61 20 63 6f 6d 70  * Part of a comp
1cab0 6f 75 6e 64 20 71 75 65 72 79 20 2a 2f 0a 23 64  ound query */.#d
1cac0 65 66 69 6e 65 20 53 46 5f 56 61 6c 75 65 73 20  efine SF_Values 
1cad0 20 20 20 20 20 20 20 20 30 78 30 30 32 30 30 20          0x00200 
1cae0 20 2f 2a 20 53 79 6e 74 68 65 73 69 7a 65 64 20   /* Synthesized 
1caf0 66 72 6f 6d 20 56 41 4c 55 45 53 20 63 6c 61 75  from VALUES clau
1cb00 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  se */.#define SF
1cb10 5f 4d 75 6c 74 69 56 61 6c 75 65 20 20 20 20 20  _MultiValue     
1cb20 30 78 30 30 34 30 30 20 20 2f 2a 20 53 69 6e 67  0x00400  /* Sing
1cb30 6c 65 20 56 41 4c 55 45 53 20 74 65 72 6d 20 77  le VALUES term w
1cb40 69 74 68 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77  ith multiple row
1cb50 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  s */.#define SF_
1cb60 4e 65 73 74 65 64 46 72 6f 6d 20 20 20 20 20 30  NestedFrom     0
1cb70 78 30 30 38 30 30 20 20 2f 2a 20 50 61 72 74 20  x00800  /* Part 
1cb80 6f 66 20 61 20 70 61 72 65 6e 74 68 65 73 69 7a  of a parenthesiz
1cb90 65 64 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a  ed FROM clause *
1cba0 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d 69 6e  /.#define SF_Min
1cbb0 4d 61 78 41 67 67 20 20 20 20 20 20 30 78 30 31  MaxAgg      0x01
1cbc0 30 30 30 20 20 2f 2a 20 41 67 67 72 65 67 61 74  000  /* Aggregat
1cbd0 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 6d 69 6e  e containing min
1cbe0 28 29 20 6f 72 20 6d 61 78 28 29 20 2a 2f 0a 23  () or max() */.#
1cbf0 64 65 66 69 6e 65 20 53 46 5f 52 65 63 75 72 73  define SF_Recurs
1cc00 69 76 65 20 20 20 20 20 20 30 78 30 32 30 30 30  ive      0x02000
1cc10 20 20 2f 2a 20 54 68 65 20 72 65 63 75 72 73 69    /* The recursi
1cc20 76 65 20 70 61 72 74 20 6f 66 20 61 20 72 65 63  ve part of a rec
1cc30 75 72 73 69 76 65 20 43 54 45 20 2a 2f 0a 23 64  ursive CTE */.#d
1cc40 65 66 69 6e 65 20 53 46 5f 46 69 78 65 64 4c 69  efine SF_FixedLi
1cc50 6d 69 74 20 20 20 20 20 30 78 30 34 30 30 30 20  mit     0x04000 
1cc60 20 2f 2a 20 6e 53 65 6c 65 63 74 52 6f 77 20 73   /* nSelectRow s
1cc70 65 74 20 62 79 20 61 20 63 6f 6e 73 74 61 6e 74  et by a constant
1cc80 20 4c 49 4d 49 54 20 2a 2f 0a 23 64 65 66 69 6e   LIMIT */.#defin
1cc90 65 20 53 46 5f 4d 61 79 62 65 43 6f 6e 76 65 72  e SF_MaybeConver
1cca0 74 20 20 20 30 78 30 38 30 30 30 20 20 2f 2a 20  t   0x08000  /* 
1ccb0 4e 65 65 64 20 63 6f 6e 76 65 72 74 43 6f 6d 70  Need convertComp
1ccc0 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71  oundSelectToSubq
1ccd0 75 65 72 79 28 29 20 2a 2f 0a 23 64 65 66 69 6e  uery() */.#defin
1cce0 65 20 53 46 5f 43 6f 6e 76 65 72 74 65 64 20 20  e SF_Converted  
1ccf0 20 20 20 20 30 78 31 30 30 30 30 20 20 2f 2a 20      0x10000  /* 
1cd00 42 79 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75  By convertCompou
1cd10 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65  ndSelectToSubque
1cd20 72 79 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ry() */.#define 
1cd30 53 46 5f 49 6e 63 6c 75 64 65 48 69 64 64 65 6e  SF_IncludeHidden
1cd40 20 20 30 78 32 30 30 30 30 20 20 2f 2a 20 49 6e    0x20000  /* In
1cd50 63 6c 75 64 65 20 68 69 64 64 65 6e 20 63 6f 6c  clude hidden col
1cd60 75 6d 6e 73 20 69 6e 20 6f 75 74 70 75 74 20 2a  umns in output *
1cd70 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 65  /.../*.** The re
1cd80 73 75 6c 74 73 20 6f 66 20 61 20 53 45 4c 45 43  sults of a SELEC
1cd90 54 20 63 61 6e 20 62 65 20 64 69 73 74 72 69 62  T can be distrib
1cda0 75 74 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20  uted in several 
1cdb0 77 61 79 73 2c 20 61 73 20 64 65 66 69 6e 65 64  ways, as defined
1cdc0 0a 2a 2a 20 62 79 20 6f 6e 65 20 6f 66 20 74 68  .** by one of th
1cdd0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72  e following macr
1cde0 6f 73 2e 20 20 54 68 65 20 22 53 52 54 22 20 70  os.  The "SRT" p
1cdf0 72 65 66 69 78 20 6d 65 61 6e 73 20 22 53 45 4c  refix means "SEL
1ce00 45 43 54 20 52 65 73 75 6c 74 0a 2a 2a 20 54 79  ECT Result.** Ty
1ce10 70 65 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  pe"..**.**     S
1ce20 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20 53  RT_Union       S
1ce30 74 6f 72 65 20 72 65 73 75 6c 74 73 20 61 73 20  tore results as 
1ce40 61 20 6b 65 79 20 69 6e 20 61 20 74 65 6d 70 6f  a key in a tempo
1ce50 72 61 72 79 20 69 6e 64 65 78 0a 2a 2a 20 20 20  rary index.**   
1ce60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce70 20 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20    identified by 
1ce80 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a  pDest->iSDParm..
1ce90 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 78  **.**     SRT_Ex
1cea0 63 65 70 74 20 20 20 20 20 20 52 65 6d 6f 76 65  cept      Remove
1ceb0 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20 74 68   results from th
1cec0 65 20 74 65 6d 70 6f 72 61 72 79 20 69 6e 64 65  e temporary inde
1ced0 78 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  x pDest->iSDParm
1cee0 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
1cef0 45 78 69 73 74 73 20 20 20 20 20 20 53 74 6f 72  Exists      Stor
1cf00 65 20 61 20 31 20 69 6e 20 6d 65 6d 6f 72 79 20  e a 1 in memory 
1cf10 63 65 6c 6c 20 70 44 65 73 74 2d 3e 69 53 44 50  cell pDest->iSDP
1cf20 61 72 6d 20 69 66 20 74 68 65 20 72 65 73 75 6c  arm if the resul
1cf30 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  t.**            
1cf40 20 20 20 20 20 20 20 20 20 73 65 74 20 69 73 20           set is 
1cf50 6e 6f 74 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a  not empty..**.**
1cf60 20 20 20 20 20 53 52 54 5f 44 69 73 63 61 72 64       SRT_Discard
1cf70 20 20 20 20 20 54 68 72 6f 77 20 74 68 65 20 72       Throw the r
1cf80 65 73 75 6c 74 73 20 61 77 61 79 2e 20 20 54 68  esults away.  Th
1cf90 69 73 20 69 73 20 75 73 65 64 20 62 79 20 53 45  is is used by SE
1cfa0 4c 45 43 54 0a 2a 2a 20 20 20 20 20 20 20 20 20  LECT.**         
1cfb0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61 74              stat
1cfc0 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74 72  ements within tr
1cfd0 69 67 67 65 72 73 20 77 68 6f 73 65 20 6f 6e 6c  iggers whose onl
1cfe0 79 20 70 75 72 70 6f 73 65 20 69 73 0a 2a 2a 20  y purpose is.** 
1cff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d000 20 20 20 20 74 68 65 20 73 69 64 65 2d 65 66 66      the side-eff
1d010 65 63 74 73 20 6f 66 20 66 75 6e 63 74 69 6f 6e  ects of function
1d020 73 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20  s..**.** All of 
1d030 74 68 65 20 61 62 6f 76 65 20 61 72 65 20 66 72  the above are fr
1d040 65 65 20 74 6f 20 69 67 6e 6f 72 65 20 74 68 65  ee to ignore the
1d050 69 72 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  ir ORDER BY clau
1d060 73 65 2e 20 54 68 6f 73 65 20 74 68 61 74 0a 2a  se. Those that.*
1d070 2a 20 66 6f 6c 6c 6f 77 20 6d 75 73 74 20 68 6f  * follow must ho
1d080 6e 6f 72 20 74 68 65 20 4f 52 44 45 52 20 42 59  nor the ORDER BY
1d090 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20   clause..**.**  
1d0a0 20 20 20 53 52 54 5f 4f 75 74 70 75 74 20 20 20     SRT_Output   
1d0b0 20 20 20 47 65 6e 65 72 61 74 65 20 61 20 72 6f     Generate a ro
1d0c0 77 20 6f 66 20 6f 75 74 70 75 74 20 28 75 73 69  w of output (usi
1d0d0 6e 67 20 74 68 65 20 4f 50 5f 52 65 73 75 6c 74  ng the OP_Result
1d0e0 52 6f 77 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  Row.**          
1d0f0 20 20 20 20 20 20 20 20 20 20 20 6f 70 63 6f 64             opcod
1d100 65 29 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20  e) for each row 
1d110 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 73 65  in the result se
1d120 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  t..**.**     SRT
1d130 5f 4d 65 6d 20 20 20 20 20 20 20 20 20 4f 6e 6c  _Mem         Onl
1d140 79 20 76 61 6c 69 64 20 69 66 20 74 68 65 20 72  y valid if the r
1d150 65 73 75 6c 74 20 69 73 20 61 20 73 69 6e 67 6c  esult is a singl
1d160 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 20 20 20  e column..**    
1d170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d180 20 53 74 6f 72 65 20 74 68 65 20 66 69 72 73 74   Store the first
1d190 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 66   column of the f
1d1a0 69 72 73 74 20 72 65 73 75 6c 74 20 72 6f 77 0a  irst result row.
1d1b0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1d1c0 20 20 20 20 20 20 20 69 6e 20 72 65 67 69 73 74         in regist
1d1d0 65 72 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  er pDest->iSDPar
1d1e0 6d 20 74 68 65 6e 20 61 62 61 6e 64 6f 6e 20 74  m then abandon t
1d1f0 68 65 20 72 65 73 74 0a 2a 2a 20 20 20 20 20 20  he rest.**      
1d200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
1d210 66 20 74 68 65 20 71 75 65 72 79 2e 20 20 54 68  f the query.  Th
1d220 69 73 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 69  is destination i
1d230 6d 70 6c 69 65 73 20 22 4c 49 4d 49 54 20 31 22  mplies "LIMIT 1"
1d240 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
1d250 53 65 74 20 20 20 20 20 20 20 20 20 54 68 65 20  Set         The 
1d260 72 65 73 75 6c 74 20 6d 75 73 74 20 62 65 20 61  result must be a
1d270 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 20   single column. 
1d280 20 53 74 6f 72 65 20 65 61 63 68 0a 2a 2a 20 20   Store each.**  
1d290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d2a0 20 20 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74     row of result
1d2b0 20 61 73 20 74 68 65 20 6b 65 79 20 69 6e 20 74   as the key in t
1d2c0 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50  able pDest->iSDP
1d2d0 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20  arm..**         
1d2e0 20 20 20 20 20 20 20 20 20 20 20 20 41 70 70 6c              Appl
1d2f0 79 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 70  y the affinity p
1d300 44 65 73 74 2d 3e 61 66 66 53 64 73 74 20 62 65  Dest->affSdst be
1d310 66 6f 72 65 20 73 74 6f 72 69 6e 67 0a 2a 2a 20  fore storing.** 
1d320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d330 20 20 20 20 72 65 73 75 6c 74 73 2e 20 20 55 73      results.  Us
1d340 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20  ed to implement 
1d350 22 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29  "IN (SELECT ...)
1d360 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  "..**.**     SRT
1d370 5f 45 70 68 65 6d 54 61 62 20 20 20 20 43 72 65  _EphemTab    Cre
1d380 61 74 65 20 61 6e 20 74 65 6d 70 6f 72 61 72 79  ate an temporary
1d390 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53   table pDest->iS
1d3a0 44 50 61 72 6d 20 61 6e 64 20 73 74 6f 72 65 0a  DParm and store.
1d3b0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1d3c0 20 20 20 20 20 20 20 74 68 65 20 72 65 73 75 6c         the resul
1d3d0 74 20 74 68 65 72 65 2e 20 54 68 65 20 63 75 72  t there. The cur
1d3e0 73 6f 72 20 69 73 20 6c 65 66 74 20 6f 70 65 6e  sor is left open
1d3f0 20 61 66 74 65 72 0a 2a 2a 20 20 20 20 20 20 20   after.**       
1d400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1d410 74 75 72 6e 69 6e 67 2e 20 20 54 68 69 73 20 69  turning.  This i
1d420 73 20 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c 65  s like SRT_Table
1d430 20 65 78 63 65 70 74 20 74 68 61 74 0a 2a 2a 20   except that.** 
1d440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d450 20 20 20 20 74 68 69 73 20 64 65 73 74 69 6e 61      this destina
1d460 74 69 6f 6e 20 75 73 65 73 20 4f 50 5f 4f 70 65  tion uses OP_Ope
1d470 6e 45 70 68 65 6d 65 72 61 6c 20 74 6f 20 63 72  nEphemeral to cr
1d480 65 61 74 65 0a 2a 2a 20 20 20 20 20 20 20 20 20  eate.**         
1d490 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20              the 
1d4a0 74 61 62 6c 65 20 66 69 72 73 74 2e 0a 2a 2a 0a  table first..**.
1d4b0 2a 2a 20 20 20 20 20 53 52 54 5f 43 6f 72 6f 75  **     SRT_Corou
1d4c0 74 69 6e 65 20 20 20 47 65 6e 65 72 61 74 65 20  tine   Generate 
1d4d0 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 74 68 61  a co-routine tha
1d4e0 74 20 72 65 74 75 72 6e 73 20 61 20 6e 65 77 20  t returns a new 
1d4f0 72 6f 77 20 6f 66 0a 2a 2a 20 20 20 20 20 20 20  row of.**       
1d500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1d510 73 75 6c 74 73 20 65 61 63 68 20 74 69 6d 65 20  sults each time 
1d520 69 74 20 69 73 20 69 6e 76 6f 6b 65 64 2e 20 20  it is invoked.  
1d530 54 68 65 20 65 6e 74 72 79 20 70 6f 69 6e 74 0a  The entry point.
1d540 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1d550 20 20 20 20 20 20 20 6f 66 20 74 68 65 20 63 6f         of the co
1d560 2d 72 6f 75 74 69 6e 65 20 69 73 20 73 74 6f 72  -routine is stor
1d570 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 70  ed in register p
1d580 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 0a 2a 2a  Dest->iSDParm.**
1d590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d5a0 20 20 20 20 20 61 6e 64 20 74 68 65 20 72 65 73       and the res
1d5b0 75 6c 74 20 72 6f 77 20 69 73 20 73 74 6f 72 65  ult row is store
1d5c0 64 20 69 6e 20 70 44 65 73 74 2d 3e 6e 44 65 73  d in pDest->nDes
1d5d0 74 20 72 65 67 69 73 74 65 72 73 0a 2a 2a 20 20  t registers.**  
1d5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d5f0 20 20 20 73 74 61 72 74 69 6e 67 20 77 69 74 68     starting with
1d600 20 70 44 65 73 74 2d 3e 69 53 64 73 74 2e 0a 2a   pDest->iSdst..*
1d610 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 54 61 62  *.**     SRT_Tab
1d620 6c 65 20 20 20 20 20 20 20 53 74 6f 72 65 20 72  le       Store r
1d630 65 73 75 6c 74 73 20 69 6e 20 74 65 6d 70 6f 72  esults in tempor
1d640 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d  ary table pDest-
1d650 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20  >iSDParm..**    
1d660 20 53 52 54 5f 46 69 66 6f 20 20 20 20 20 20 20   SRT_Fifo       
1d670 20 54 68 69 73 20 69 73 20 6c 69 6b 65 20 53 52   This is like SR
1d680 54 5f 45 70 68 65 6d 54 61 62 20 65 78 63 65 70  T_EphemTab excep
1d690 74 20 74 68 61 74 20 74 68 65 20 74 61 62 6c 65  t that the table
1d6a0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1d6b0 20 20 20 20 20 20 20 20 69 73 20 61 73 73 75 6d          is assum
1d6c0 65 64 20 74 6f 20 61 6c 72 65 61 64 79 20 62 65  ed to already be
1d6d0 20 6f 70 65 6e 2e 20 20 53 52 54 5f 46 69 66 6f   open.  SRT_Fifo
1d6e0 20 68 61 73 0a 2a 2a 20 20 20 20 20 20 20 20 20   has.**         
1d6f0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20              the 
1d700 61 64 64 69 74 69 6f 6e 61 6c 20 70 72 6f 70 65  additional prope
1d710 72 74 79 20 6f 66 20 62 65 69 6e 67 20 61 62 6c  rty of being abl
1d720 65 20 74 6f 20 69 67 6e 6f 72 65 0a 2a 2a 20 20  e to ignore.**  
1d730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d740 20 20 20 74 68 65 20 4f 52 44 45 52 20 42 59 20     the ORDER BY 
1d750 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20  clause..**.**   
1d760 20 20 53 52 54 5f 44 69 73 74 46 69 66 6f 20 20    SRT_DistFifo  
1d770 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20    Store results 
1d780 69 6e 20 61 20 74 65 6d 70 6f 72 61 72 79 20 74  in a temporary t
1d790 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50  able pDest->iSDP
1d7a0 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20  arm..**         
1d7b0 20 20 20 20 20 20 20 20 20 20 20 20 42 75 74 20              But 
1d7c0 61 6c 73 6f 20 75 73 65 20 74 65 6d 70 6f 72 61  also use tempora
1d7d0 72 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e  ry table pDest->
1d7e0 69 53 44 50 61 72 6d 2b 31 20 61 73 0a 2a 2a 20  iSDParm+1 as.** 
1d7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d800 20 20 20 20 61 20 72 65 63 6f 72 64 20 6f 66 20      a record of 
1d810 61 6c 6c 20 70 72 69 6f 72 20 72 65 73 75 6c 74  all prior result
1d820 73 20 61 6e 64 20 69 67 6e 6f 72 65 20 61 6e 79  s and ignore any
1d830 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20 20 20   duplicate.**   
1d840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d850 20 20 72 6f 77 73 2e 20 20 4e 61 6d 65 20 6d 65    rows.  Name me
1d860 61 6e 73 3a 20 20 22 44 69 73 74 69 6e 63 74 20  ans:  "Distinct 
1d870 46 69 66 6f 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  Fifo"..**.**    
1d880 20 53 52 54 5f 51 75 65 75 65 20 20 20 20 20 20   SRT_Queue      
1d890 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69   Store results i
1d8a0 6e 20 70 72 69 6f 72 69 74 79 20 71 75 65 75 65  n priority queue
1d8b0 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20   pDest->iSDParm 
1d8c0 28 72 65 61 6c 6c 79 0a 2a 2a 20 20 20 20 20 20  (really.**      
1d8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
1d8e0 6e 20 69 6e 64 65 78 29 2e 20 20 41 70 70 65 6e  n index).  Appen
1d8f0 64 20 61 20 73 65 71 75 65 6e 63 65 20 6e 75 6d  d a sequence num
1d900 62 65 72 20 73 6f 20 74 68 61 74 20 61 6c 6c 20  ber so that all 
1d910 65 6e 74 72 69 65 73 0a 2a 2a 20 20 20 20 20 20  entries.**      
1d920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
1d930 72 65 20 64 69 73 74 69 6e 63 74 2e 0a 2a 2a 0a  re distinct..**.
1d940 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73 74 51  **     SRT_DistQ
1d950 75 65 75 65 20 20 20 53 74 6f 72 65 20 72 65 73  ueue   Store res
1d960 75 6c 74 73 20 69 6e 20 70 72 69 6f 72 69 74 79  ults in priority
1d970 20 71 75 65 75 65 20 70 44 65 73 74 2d 3e 69 53   queue pDest->iS
1d980 44 50 61 72 6d 20 6f 6e 6c 79 20 69 66 0a 2a 2a  DParm only if.**
1d990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d9a0 20 20 20 20 20 74 68 65 20 73 61 6d 65 20 72 65       the same re
1d9b0 63 6f 72 64 20 68 61 73 20 6e 65 76 65 72 20 62  cord has never b
1d9c0 65 65 6e 20 73 74 6f 72 65 64 20 62 65 66 6f 72  een stored befor
1d9d0 65 2e 20 20 54 68 65 0a 2a 2a 20 20 20 20 20 20  e.  The.**      
1d9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1d9f0 6e 64 65 78 20 61 74 20 70 44 65 73 74 2d 3e 69  ndex at pDest->i
1da00 53 44 50 61 72 6d 2b 31 20 68 6f 6c 64 20 61 6c  SDParm+1 hold al
1da10 6c 20 70 72 69 6f 72 20 73 74 6f 72 65 73 2e 0a  l prior stores..
1da20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 55  */.#define SRT_U
1da30 6e 69 6f 6e 20 20 20 20 20 20 20 20 31 20 20 2f  nion        1  /
1da40 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61  * Store result a
1da50 73 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64  s keys in an ind
1da60 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ex */.#define SR
1da70 54 5f 45 78 63 65 70 74 20 20 20 20 20 20 20 32  T_Except       2
1da80 20 20 2f 2a 20 52 65 6d 6f 76 65 20 72 65 73 75    /* Remove resu
1da90 6c 74 20 66 72 6f 6d 20 61 20 55 4e 49 4f 4e 20  lt from a UNION 
1daa0 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65  index */.#define
1dab0 20 53 52 54 5f 45 78 69 73 74 73 20 20 20 20 20   SRT_Exists     
1dac0 20 20 33 20 20 2f 2a 20 53 74 6f 72 65 20 31 20    3  /* Store 1 
1dad0 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  if the result is
1dae0 20 6e 6f 74 20 65 6d 70 74 79 20 2a 2f 0a 23 64   not empty */.#d
1daf0 65 66 69 6e 65 20 53 52 54 5f 44 69 73 63 61 72  efine SRT_Discar
1db00 64 20 20 20 20 20 20 34 20 20 2f 2a 20 44 6f 20  d      4  /* Do 
1db10 6e 6f 74 20 73 61 76 65 20 74 68 65 20 72 65 73  not save the res
1db20 75 6c 74 73 20 61 6e 79 77 68 65 72 65 20 2a 2f  ults anywhere */
1db30 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 46 69 66  .#define SRT_Fif
1db40 6f 20 20 20 20 20 20 20 20 20 35 20 20 2f 2a 20  o         5  /* 
1db50 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20  Store result as 
1db60 64 61 74 61 20 77 69 74 68 20 61 6e 20 61 75 74  data with an aut
1db70 6f 6d 61 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a  omatic rowid */.
1db80 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73 74  #define SRT_Dist
1db90 46 69 66 6f 20 20 20 20 20 36 20 20 2f 2a 20 4c  Fifo     6  /* L
1dba0 69 6b 65 20 53 52 54 5f 46 69 66 6f 2c 20 62 75  ike SRT_Fifo, bu
1dbb0 74 20 75 6e 69 71 75 65 20 72 65 73 75 6c 74 73  t unique results
1dbc0 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65   only */.#define
1dbd0 20 53 52 54 5f 51 75 65 75 65 20 20 20 20 20 20   SRT_Queue      
1dbe0 20 20 37 20 20 2f 2a 20 53 74 6f 72 65 20 72 65    7  /* Store re
1dbf0 73 75 6c 74 20 69 6e 20 61 6e 20 71 75 65 75 65  sult in an queue
1dc00 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1dc10 44 69 73 74 51 75 65 75 65 20 20 20 20 38 20 20  DistQueue    8  
1dc20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 51 75 65 75  /* Like SRT_Queu
1dc30 65 2c 20 62 75 74 20 75 6e 69 71 75 65 20 72 65  e, but unique re
1dc40 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a 0a 2f  sults only */../
1dc50 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59 20 63  * The ORDER BY c
1dc60 6c 61 75 73 65 20 69 73 20 69 67 6e 6f 72 65 64  lause is ignored
1dc70 20 66 6f 72 20 61 6c 6c 20 6f 66 20 74 68 65 20   for all of the 
1dc80 61 62 6f 76 65 20 2a 2f 0a 23 64 65 66 69 6e 65  above */.#define
1dc90 20 49 67 6e 6f 72 61 62 6c 65 4f 72 64 65 72 62   IgnorableOrderb
1dca0 79 28 58 29 20 28 28 58 2d 3e 65 44 65 73 74 29  y(X) ((X->eDest)
1dcb0 3c 3d 53 52 54 5f 44 69 73 74 51 75 65 75 65 29  <=SRT_DistQueue)
1dcc0 0a 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 4f 75  ..#define SRT_Ou
1dcd0 74 70 75 74 20 20 20 20 20 20 20 39 20 20 2f 2a  tput       9  /*
1dce0 20 4f 75 74 70 75 74 20 65 61 63 68 20 72 6f 77   Output each row
1dcf0 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64   of result */.#d
1dd00 65 66 69 6e 65 20 53 52 54 5f 4d 65 6d 20 20 20  efine SRT_Mem   
1dd10 20 20 20 20 20 20 31 30 20 20 2f 2a 20 53 74 6f        10  /* Sto
1dd20 72 65 20 72 65 73 75 6c 74 20 69 6e 20 61 20 6d  re result in a m
1dd30 65 6d 6f 72 79 20 63 65 6c 6c 20 2a 2f 0a 23 64  emory cell */.#d
1dd40 65 66 69 6e 65 20 53 52 54 5f 53 65 74 20 20 20  efine SRT_Set   
1dd50 20 20 20 20 20 20 31 31 20 20 2f 2a 20 53 74 6f        11  /* Sto
1dd60 72 65 20 72 65 73 75 6c 74 73 20 61 73 20 6b 65  re results as ke
1dd70 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a  ys in an index *
1dd80 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45 70  /.#define SRT_Ep
1dd90 68 65 6d 54 61 62 20 20 20 20 31 32 20 20 2f 2a  hemTab    12  /*
1dda0 20 43 72 65 61 74 65 20 74 72 61 6e 73 69 65 6e   Create transien
1ddb0 74 20 74 61 62 20 61 6e 64 20 73 74 6f 72 65 20  t tab and store 
1ddc0 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c 65 20 2a  like SRT_Table *
1ddd0 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 43 6f  /.#define SRT_Co
1dde0 72 6f 75 74 69 6e 65 20 20 20 31 33 20 20 2f 2a  routine   13  /*
1ddf0 20 47 65 6e 65 72 61 74 65 20 61 20 73 69 6e 67   Generate a sing
1de00 6c 65 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74  le row of result
1de10 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1de20 54 61 62 6c 65 20 20 20 20 20 20 20 31 34 20 20  Table       14  
1de30 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20  /* Store result 
1de40 61 73 20 64 61 74 61 20 77 69 74 68 20 61 6e 20  as data with an 
1de50 61 75 74 6f 6d 61 74 69 63 20 72 6f 77 69 64 20  automatic rowid 
1de60 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  */../*.** An ins
1de70 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 6f 62  tance of this ob
1de80 6a 65 63 74 20 64 65 73 63 72 69 62 65 73 20 77  ject describes w
1de90 68 65 72 65 20 74 6f 20 70 75 74 20 6f 66 20 74  here to put of t
1dea0 68 65 20 72 65 73 75 6c 74 73 20 6f 66 0a 2a 2a  he results of.**
1deb0 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d   a SELECT statem
1dec0 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  ent..*/.struct S
1ded0 65 6c 65 63 74 44 65 73 74 20 7b 0a 20 20 75 38  electDest {.  u8
1dee0 20 65 44 65 73 74 3b 20 20 20 20 20 20 20 20 20   eDest;         
1def0 20 20 20 2f 2a 20 48 6f 77 20 74 6f 20 64 69 73     /* How to dis
1df00 70 6f 73 65 20 6f 66 20 74 68 65 20 72 65 73 75  pose of the resu
1df10 6c 74 73 2e 20 20 4f 6e 20 6f 66 20 53 52 54 5f  lts.  On of SRT_
1df20 2a 20 61 62 6f 76 65 2e 20 2a 2f 0a 20 20 69 6e  * above. */.  in
1df30 74 20 69 53 44 50 61 72 6d 3b 20 20 20 20 20 20  t iSDParm;      
1df40 20 20 20 2f 2a 20 41 20 70 61 72 61 6d 65 74 65     /* A paramete
1df50 72 20 75 73 65 64 20 62 79 20 74 68 65 20 65 44  r used by the eD
1df60 65 73 74 20 64 69 73 70 6f 73 61 6c 20 6d 65 74  est disposal met
1df70 68 6f 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53 64  hod */.  int iSd
1df80 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  st;           /*
1df90 20 42 61 73 65 20 72 65 67 69 73 74 65 72 20 77   Base register w
1dfa0 68 65 72 65 20 72 65 73 75 6c 74 73 20 61 72 65  here results are
1dfb0 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e   written */.  in
1dfc0 74 20 6e 53 64 73 74 3b 20 20 20 20 20 20 20 20  t nSdst;        
1dfd0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1dfe0 72 65 67 69 73 74 65 72 73 20 61 6c 6c 6f 63 61  registers alloca
1dff0 74 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ted */.  char *z
1e000 41 66 66 53 64 73 74 3b 20 20 20 20 20 20 2f 2a  AffSdst;      /*
1e010 20 41 66 66 69 6e 69 74 79 20 75 73 65 64 20 77   Affinity used w
1e020 68 65 6e 20 65 44 65 73 74 3d 3d 53 52 54 5f 53  hen eDest==SRT_S
1e030 65 74 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  et */.  ExprList
1e040 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 2f 2a 20   *pOrderBy;  /* 
1e050 4b 65 79 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20  Key columns for 
1e060 53 52 54 5f 51 75 65 75 65 20 61 6e 64 20 53 52  SRT_Queue and SR
1e070 54 5f 44 69 73 74 51 75 65 75 65 20 2a 2f 0a 7d  T_DistQueue */.}
1e080 3b 0a 0a 2f 2a 0a 2a 2a 20 44 75 72 69 6e 67 20  ;../*.** During 
1e090 63 6f 64 65 20 67 65 6e 65 72 61 74 69 6f 6e 20  code generation 
1e0a0 6f 66 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68  of statements th
1e0b0 61 74 20 64 6f 20 69 6e 73 65 72 74 73 20 69 6e  at do inserts in
1e0c0 74 6f 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  to AUTOINCREMENT
1e0d0 0a 2a 2a 20 74 61 62 6c 65 73 2c 20 74 68 65 20  .** tables, the 
1e0e0 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 66 6f 72 6d  following inform
1e0f0 61 74 69 6f 6e 20 69 73 20 61 74 74 61 63 68 65  ation is attache
1e100 64 20 74 6f 20 74 68 65 20 54 61 62 6c 65 2e 75  d to the Table.u
1e110 2e 61 75 74 6f 49 6e 63 2e 70 0a 2a 2a 20 70 6f  .autoInc.p.** po
1e120 69 6e 74 65 72 20 6f 66 20 65 61 63 68 20 61 75  inter of each au
1e130 74 6f 69 6e 63 72 65 6d 65 6e 74 20 74 61 62 6c  toincrement tabl
1e140 65 20 74 6f 20 72 65 63 6f 72 64 20 73 6f 6d 65  e to record some
1e150 20 73 69 64 65 20 69 6e 66 6f 72 6d 61 74 69 6f   side informatio
1e160 6e 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 63 6f  n that.** the co
1e170 64 65 20 67 65 6e 65 72 61 74 6f 72 20 6e 65 65  de generator nee
1e180 64 73 2e 20 20 57 65 20 68 61 76 65 20 74 6f 20  ds.  We have to 
1e190 6b 65 65 70 20 70 65 72 2d 74 61 62 6c 65 20 61  keep per-table a
1e1a0 75 74 6f 69 6e 63 72 65 6d 65 6e 74 0a 2a 2a 20  utoincrement.** 
1e1b0 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 63  information in c
1e1c0 61 73 65 20 69 6e 73 65 72 74 73 20 61 72 65 20  ase inserts are 
1e1d0 64 6f 6e 65 20 77 69 74 68 69 6e 20 74 72 69 67  done within trig
1e1e0 67 65 72 73 2e 20 20 54 72 69 67 67 65 72 73 20  gers.  Triggers 
1e1f0 64 6f 20 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d 61 6c  do not.** normal
1e200 6c 79 20 63 6f 6f 72 64 69 6e 61 74 65 20 74 68  ly coordinate th
1e210 65 69 72 20 61 63 74 69 76 69 74 69 65 73 2c 20  eir activities, 
1e220 62 75 74 20 77 65 20 64 6f 20 6e 65 65 64 20 74  but we do need t
1e230 6f 20 63 6f 6f 72 64 69 6e 61 74 65 20 74 68 65  o coordinate the
1e240 0a 2a 2a 20 6c 6f 61 64 69 6e 67 20 61 6e 64 20  .** loading and 
1e250 73 61 76 69 6e 67 20 6f 66 20 61 75 74 6f 69 6e  saving of autoin
1e260 63 72 65 6d 65 6e 74 20 69 6e 66 6f 72 6d 61 74  crement informat
1e270 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41  ion..*/.struct A
1e280 75 74 6f 69 6e 63 49 6e 66 6f 20 7b 0a 20 20 41  utoincInfo {.  A
1e290 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 4e 65 78  utoincInfo *pNex
1e2a0 74 3b 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 66  t;   /* Next inf
1e2b0 6f 20 62 6c 6f 63 6b 20 69 6e 20 61 20 6c 69 73  o block in a lis
1e2c0 74 20 6f 66 20 74 68 65 6d 20 61 6c 6c 20 2a 2f  t of them all */
1e2d0 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20  .  Table *pTab; 
1e2e0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c           /* Tabl
1e2f0 65 20 74 68 69 73 20 69 6e 66 6f 20 62 6c 6f 63  e this info bloc
1e300 6b 20 72 65 66 65 72 73 20 74 6f 20 2a 2f 0a 20  k refers to */. 
1e310 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20   int iDb;       
1e320 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20         /* Index 
1e330 69 6e 20 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d  in sqlite3.aDb[]
1e340 20 6f 66 20 64 61 74 61 62 61 73 65 20 68 6f 6c   of database hol
1e350 64 69 6e 67 20 70 54 61 62 20 2a 2f 0a 20 20 69  ding pTab */.  i
1e360 6e 74 20 72 65 67 43 74 72 3b 20 20 20 20 20 20  nt regCtr;      
1e370 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72       /* Memory r
1e380 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20  egister holding 
1e390 74 68 65 20 72 6f 77 69 64 20 63 6f 75 6e 74 65  the rowid counte
1e3a0 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53  r */.};../*.** S
1e3b0 69 7a 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  ize of the colum
1e3c0 6e 20 63 61 63 68 65 0a 2a 2f 0a 23 69 66 6e 64  n cache.*/.#ifnd
1e3d0 65 66 20 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43  ef SQLITE_N_COLC
1e3e0 41 43 48 45 0a 23 20 64 65 66 69 6e 65 20 53 51  ACHE.# define SQ
1e3f0 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 20  LITE_N_COLCACHE 
1e400 31 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  10.#endif../*.**
1e410 20 41 74 20 6c 65 61 73 74 20 6f 6e 65 20 69 6e   At least one in
1e420 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
1e430 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
1e440 65 20 69 73 20 63 72 65 61 74 65 64 20 66 6f 72  e is created for
1e450 20 65 61 63 68 0a 2a 2a 20 74 72 69 67 67 65 72   each.** trigger
1e460 20 74 68 61 74 20 6d 61 79 20 62 65 20 66 69 72   that may be fir
1e470 65 64 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67  ed while parsing
1e480 20 61 6e 20 49 4e 53 45 52 54 2c 20 55 50 44 41   an INSERT, UPDA
1e490 54 45 20 6f 72 20 44 45 4c 45 54 45 0a 2a 2a 20  TE or DELETE.** 
1e4a0 73 74 61 74 65 6d 65 6e 74 2e 20 41 6c 6c 20 73  statement. All s
1e4b0 75 63 68 20 6f 62 6a 65 63 74 73 20 61 72 65 20  uch objects are 
1e4c0 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 6c 69  stored in the li
1e4d0 6e 6b 65 64 20 6c 69 73 74 20 68 65 61 64 65 64  nked list headed
1e4e0 20 61 74 0a 2a 2a 20 50 61 72 73 65 2e 70 54 72   at.** Parse.pTr
1e4f0 69 67 67 65 72 50 72 67 20 61 6e 64 20 64 65 6c  iggerPrg and del
1e500 65 74 65 64 20 6f 6e 63 65 20 73 74 61 74 65 6d  eted once statem
1e510 65 6e 74 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20  ent compilation 
1e520 68 61 73 20 62 65 65 6e 0a 2a 2a 20 63 6f 6d 70  has been.** comp
1e530 6c 65 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 56  leted..**.** A V
1e540 64 62 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20  dbe sub-program 
1e550 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20  that implements 
1e560 74 68 65 20 62 6f 64 79 20 61 6e 64 20 57 48 45  the body and WHE
1e570 4e 20 63 6c 61 75 73 65 20 6f 66 20 74 72 69 67  N clause of trig
1e580 67 65 72 0a 2a 2a 20 54 72 69 67 67 65 72 50 72  ger.** TriggerPr
1e590 67 2e 70 54 72 69 67 67 65 72 2c 20 61 73 73 75  g.pTrigger, assu
1e5a0 6d 69 6e 67 20 61 20 64 65 66 61 75 6c 74 20 4f  ming a default O
1e5b0 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73  N CONFLICT claus
1e5c0 65 20 6f 66 0a 2a 2a 20 54 72 69 67 67 65 72 50  e of.** TriggerP
1e5d0 72 67 2e 6f 72 63 6f 6e 66 2c 20 69 73 20 73 74  rg.orconf, is st
1e5e0 6f 72 65 64 20 69 6e 20 74 68 65 20 54 72 69 67  ored in the Trig
1e5f0 67 65 72 50 72 67 2e 70 50 72 6f 67 72 61 6d 20  gerPrg.pProgram 
1e600 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 20 54 68 65  variable..** The
1e610 20 50 61 72 73 65 2e 70 54 72 69 67 67 65 72 50   Parse.pTriggerP
1e620 72 67 20 6c 69 73 74 20 6e 65 76 65 72 20 63 6f  rg list never co
1e630 6e 74 61 69 6e 73 20 74 77 6f 20 65 6e 74 72 69  ntains two entri
1e640 65 73 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  es with the same
1e650 0a 2a 2a 20 76 61 6c 75 65 73 20 66 6f 72 20 62  .** values for b
1e660 6f 74 68 20 70 54 72 69 67 67 65 72 20 61 6e 64  oth pTrigger and
1e670 20 6f 72 63 6f 6e 66 2e 0a 2a 2a 0a 2a 2a 20 54   orconf..**.** T
1e680 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 61 43  he TriggerPrg.aC
1e690 6f 6c 6d 61 73 6b 5b 30 5d 20 76 61 72 69 61 62  olmask[0] variab
1e6a0 6c 65 20 69 73 20 73 65 74 20 74 6f 20 61 20 6d  le is set to a m
1e6b0 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c  ask of old.* col
1e6c0 75 6d 6e 73 0a 2a 2a 20 61 63 63 65 73 73 65 64  umns.** accessed
1e6d0 20 28 6f 72 20 73 65 74 20 74 6f 20 30 20 66 6f   (or set to 0 fo
1e6e0 72 20 74 72 69 67 67 65 72 73 20 66 69 72 65 64  r triggers fired
1e6f0 20 61 73 20 61 20 72 65 73 75 6c 74 20 6f 66 20   as a result of 
1e700 49 4e 53 45 52 54 0a 2a 2a 20 73 74 61 74 65 6d  INSERT.** statem
1e710 65 6e 74 73 29 2e 20 53 69 6d 69 6c 61 72 6c 79  ents). Similarly
1e720 2c 20 74 68 65 20 54 72 69 67 67 65 72 50 72 67  , the TriggerPrg
1e730 2e 61 43 6f 6c 6d 61 73 6b 5b 31 5d 20 76 61 72  .aColmask[1] var
1e740 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f 0a  iable is set to.
1e750 2a 2a 20 61 20 6d 61 73 6b 20 6f 66 20 6e 65 77  ** a mask of new
1e760 2e 2a 20 63 6f 6c 75 6d 6e 73 20 75 73 65 64 20  .* columns used 
1e770 62 79 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a  by the program..
1e780 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67 65  */.struct Trigge
1e790 72 50 72 67 20 7b 0a 20 20 54 72 69 67 67 65 72  rPrg {.  Trigger
1e7a0 20 2a 70 54 72 69 67 67 65 72 3b 20 20 20 20 20   *pTrigger;     
1e7b0 20 2f 2a 20 54 72 69 67 67 65 72 20 74 68 69 73   /* Trigger this
1e7c0 20 70 72 6f 67 72 61 6d 20 77 61 73 20 63 6f 64   program was cod
1e7d0 65 64 20 66 72 6f 6d 20 2a 2f 0a 20 20 54 72 69  ed from */.  Tri
1e7e0 67 67 65 72 50 72 67 20 2a 70 4e 65 78 74 3b 20  ggerPrg *pNext; 
1e7f0 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 65 6e 74       /* Next ent
1e800 72 79 20 69 6e 20 50 61 72 73 65 2e 70 54 72 69  ry in Parse.pTri
1e810 67 67 65 72 50 72 67 20 6c 69 73 74 20 2a 2f 0a  ggerPrg list */.
1e820 20 20 53 75 62 50 72 6f 67 72 61 6d 20 2a 70 50    SubProgram *pP
1e830 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 50 72 6f  rogram;   /* Pro
1e840 67 72 61 6d 20 69 6d 70 6c 65 6d 65 6e 74 69 6e  gram implementin
1e850 67 20 70 54 72 69 67 67 65 72 2f 6f 72 63 6f 6e  g pTrigger/orcon
1e860 66 20 2a 2f 0a 20 20 69 6e 74 20 6f 72 63 6f 6e  f */.  int orcon
1e870 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  f;             /
1e880 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e  * Default ON CON
1e890 46 4c 49 43 54 20 70 6f 6c 69 63 79 20 2a 2f 0a  FLICT policy */.
1e8a0 20 20 75 33 32 20 61 43 6f 6c 6d 61 73 6b 5b 32    u32 aColmask[2
1e8b0 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73  ];        /* Mas
1e8c0 6b 73 20 6f 66 20 6f 6c 64 2e 2a 2c 20 6e 65 77  ks of old.*, new
1e8d0 2e 2a 20 63 6f 6c 75 6d 6e 73 20 61 63 63 65 73  .* columns acces
1e8e0 73 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  sed */.};../*.**
1e8f0 20 54 68 65 20 79 44 62 4d 61 73 6b 20 64 61 74   The yDbMask dat
1e900 61 74 79 70 65 20 66 6f 72 20 74 68 65 20 62 69  atype for the bi
1e910 74 6d 61 73 6b 20 6f 66 20 61 6c 6c 20 61 74 74  tmask of all att
1e920 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73 2e  ached databases.
1e930 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d  .*/.#if SQLITE_M
1e940 41 58 5f 41 54 54 41 43 48 45 44 3e 33 30 0a 20  AX_ATTACHED>30. 
1e950 20 74 79 70 65 64 65 66 20 75 6e 73 69 67 6e 65   typedef unsigne
1e960 64 20 63 68 61 72 20 79 44 62 4d 61 73 6b 5b 28  d char yDbMask[(
1e970 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43  SQLITE_MAX_ATTAC
1e980 48 45 44 2b 39 29 2f 38 5d 3b 0a 23 20 64 65 66  HED+9)/8];.# def
1e990 69 6e 65 20 44 62 4d 61 73 6b 54 65 73 74 28 4d  ine DbMaskTest(M
1e9a0 2c 49 29 20 20 20 20 28 28 28 4d 29 5b 28 49 29  ,I)    (((M)[(I)
1e9b0 2f 38 5d 26 28 31 3c 3c 28 28 49 29 26 37 29 29  /8]&(1<<((I)&7))
1e9c0 29 21 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 44  )!=0).# define D
1e9d0 62 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20  bMaskZero(M)    
1e9e0 20 20 6d 65 6d 73 65 74 28 28 4d 29 2c 30 2c 73    memset((M),0,s
1e9f0 69 7a 65 6f 66 28 4d 29 29 0a 23 20 64 65 66 69  izeof(M)).# defi
1ea00 6e 65 20 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49  ne DbMaskSet(M,I
1ea10 29 20 20 20 20 20 28 4d 29 5b 28 49 29 2f 38 5d  )     (M)[(I)/8]
1ea20 7c 3d 28 31 3c 3c 28 28 49 29 26 37 29 29 0a 23  |=(1<<((I)&7)).#
1ea30 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c   define DbMaskAl
1ea40 6c 5a 65 72 6f 28 4d 29 20 20 20 73 71 6c 69 74  lZero(M)   sqlit
1ea50 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28  e3DbMaskAllZero(
1ea60 4d 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  M).# define DbMa
1ea70 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20 20 28  skNonZero(M)   (
1ea80 73 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c  sqlite3DbMaskAll
1ea90 5a 65 72 6f 28 4d 29 3d 3d 30 29 0a 23 65 6c 73  Zero(M)==0).#els
1eaa0 65 0a 20 20 74 79 70 65 64 65 66 20 75 6e 73 69  e.  typedef unsi
1eab0 67 6e 65 64 20 69 6e 74 20 79 44 62 4d 61 73 6b  gned int yDbMask
1eac0 3b 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  ;.# define DbMas
1ead0 6b 54 65 73 74 28 4d 2c 49 29 20 20 20 20 28 28  kTest(M,I)    ((
1eae0 28 4d 29 26 28 28 28 79 44 62 4d 61 73 6b 29 31  (M)&(((yDbMask)1
1eaf0 29 3c 3c 28 49 29 29 29 21 3d 30 29 0a 23 20 64  )<<(I)))!=0).# d
1eb00 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a 65 72 6f  efine DbMaskZero
1eb10 28 4d 29 20 20 20 20 20 20 28 4d 29 3d 30 0a 23  (M)      (M)=0.#
1eb20 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 53 65   define DbMaskSe
1eb30 74 28 4d 2c 49 29 20 20 20 20 20 28 4d 29 7c 3d  t(M,I)     (M)|=
1eb40 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 28  (((yDbMask)1)<<(
1eb50 49 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  I)).# define DbM
1eb60 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20 20 20  askAllZero(M)   
1eb70 28 4d 29 3d 3d 30 0a 23 20 64 65 66 69 6e 65 20  (M)==0.# define 
1eb80 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29  DbMaskNonZero(M)
1eb90 20 20 20 28 4d 29 21 3d 30 0a 23 65 6e 64 69 66     (M)!=0.#endif
1eba0 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 53 51 4c 20 70  ../*.** An SQL p
1ebb0 61 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20  arser context.  
1ebc0 41 20 63 6f 70 79 20 6f 66 20 74 68 69 73 20 73  A copy of this s
1ebd0 74 72 75 63 74 75 72 65 20 69 73 20 70 61 73 73  tructure is pass
1ebe0 65 64 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 68  ed through.** th
1ebf0 65 20 70 61 72 73 65 72 20 61 6e 64 20 64 6f 77  e parser and dow
1ec00 6e 20 69 6e 74 6f 20 61 6c 6c 20 74 68 65 20 70  n into all the p
1ec10 61 72 73 65 72 20 61 63 74 69 6f 6e 20 72 6f 75  arser action rou
1ec20 74 69 6e 65 20 69 6e 20 6f 72 64 65 72 20 74 6f  tine in order to
1ec30 0a 2a 2a 20 63 61 72 72 79 20 61 72 6f 75 6e 64  .** carry around
1ec40 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61   information tha
1ec50 74 20 69 73 20 67 6c 6f 62 61 6c 20 74 6f 20 74  t is global to t
1ec60 68 65 20 65 6e 74 69 72 65 20 70 61 72 73 65 2e  he entire parse.
1ec70 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72 75 63  .**.** The struc
1ec80 74 75 72 65 20 69 73 20 64 69 76 69 64 65 64 20  ture is divided 
1ec90 69 6e 74 6f 20 74 77 6f 20 70 61 72 74 73 2e 20  into two parts. 
1eca0 20 57 68 65 6e 20 74 68 65 20 70 61 72 73 65 72   When the parser
1ecb0 20 61 6e 64 20 63 6f 64 65 0a 2a 2a 20 67 65 6e   and code.** gen
1ecc0 65 72 61 74 65 20 63 61 6c 6c 20 74 68 65 6d 73  erate call thems
1ecd0 65 6c 76 65 73 20 72 65 63 75 72 73 69 76 65 6c  elves recursivel
1ece0 79 2c 20 74 68 65 20 66 69 72 73 74 20 70 61 72  y, the first par
1ecf0 74 20 6f 66 20 74 68 65 20 73 74 72 75 63 74 75  t of the structu
1ed00 72 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 74 61 6e  re.** is constan
1ed10 74 20 62 75 74 20 74 68 65 20 73 65 63 6f 6e 64  t but the second
1ed20 20 70 61 72 74 20 69 73 20 72 65 73 65 74 20 61   part is reset a
1ed30 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20  t the beginning 
1ed40 61 6e 64 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 61  and end of.** ea
1ed50 63 68 20 72 65 63 75 72 73 69 6f 6e 2e 0a 2a 2a  ch recursion..**
1ed60 0a 2a 2a 20 54 68 65 20 6e 54 61 62 6c 65 4c 6f  .** The nTableLo
1ed70 63 6b 20 61 6e 64 20 61 54 61 62 6c 65 4c 6f 63  ck and aTableLoc
1ed80 6b 20 76 61 72 69 61 62 6c 65 73 20 61 72 65 20  k variables are 
1ed90 6f 6e 6c 79 20 75 73 65 64 20 69 66 20 74 68 65  only used if the
1eda0 20 73 68 61 72 65 64 2d 63 61 63 68 65 0a 2a 2a   shared-cache.**
1edb0 20 66 65 61 74 75 72 65 20 69 73 20 65 6e 61 62   feature is enab
1edc0 6c 65 64 20 28 69 66 20 73 71 6c 69 74 65 33 54  led (if sqlite3T
1edd0 73 64 28 29 2d 3e 75 73 65 53 68 61 72 65 64 44  sd()->useSharedD
1ede0 61 74 61 20 69 73 20 74 72 75 65 29 2e 20 54 68  ata is true). Th
1edf0 65 79 20 61 72 65 0a 2a 2a 20 75 73 65 64 20 74  ey are.** used t
1ee00 6f 20 73 74 6f 72 65 20 74 68 65 20 73 65 74 20  o store the set 
1ee10 6f 66 20 74 61 62 6c 65 2d 6c 6f 63 6b 73 20 72  of table-locks r
1ee20 65 71 75 69 72 65 64 20 62 79 20 74 68 65 20 73  equired by the s
1ee30 74 61 74 65 6d 65 6e 74 20 62 65 69 6e 67 0a 2a  tatement being.*
1ee40 2a 20 63 6f 6d 70 69 6c 65 64 2e 20 46 75 6e 63  * compiled. Func
1ee50 74 69 6f 6e 20 73 71 6c 69 74 65 33 54 61 62 6c  tion sqlite3Tabl
1ee60 65 4c 6f 63 6b 28 29 20 69 73 20 75 73 65 64 20  eLock() is used 
1ee70 74 6f 20 61 64 64 20 65 6e 74 72 69 65 73 20 74  to add entries t
1ee80 6f 20 74 68 65 0a 2a 2a 20 6c 69 73 74 2e 0a 2a  o the.** list..*
1ee90 2f 0a 73 74 72 75 63 74 20 50 61 72 73 65 20 7b  /.struct Parse {
1eea0 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20  .  sqlite3 *db; 
1eeb0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6d          /* The m
1eec0 61 69 6e 20 64 61 74 61 62 61 73 65 20 73 74 72  ain database str
1eed0 75 63 74 75 72 65 20 2a 2f 0a 20 20 63 68 61 72  ucture */.  char
1eee0 20 2a 7a 45 72 72 4d 73 67 3b 20 20 20 20 20 20   *zErrMsg;      
1eef0 20 2f 2a 20 41 6e 20 65 72 72 6f 72 20 6d 65 73   /* An error mes
1ef00 73 61 67 65 20 2a 2f 0a 20 20 56 64 62 65 20 2a  sage */.  Vdbe *
1ef10 70 56 64 62 65 3b 20 20 20 20 20 20 20 20 20 2f  pVdbe;         /
1ef20 2a 20 41 6e 20 65 6e 67 69 6e 65 20 66 6f 72 20  * An engine for 
1ef30 65 78 65 63 75 74 69 6e 67 20 64 61 74 61 62 61  executing databa
1ef40 73 65 20 62 79 74 65 63 6f 64 65 20 2a 2f 0a 20  se bytecode */. 
1ef50 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20   int rc;        
1ef60 20 20 20 20 20 20 2f 2a 20 52 65 74 75 72 6e 20        /* Return 
1ef70 63 6f 64 65 20 66 72 6f 6d 20 65 78 65 63 75 74  code from execut
1ef80 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 4e  ion */.  u8 colN
1ef90 61 6d 65 73 53 65 74 3b 20 20 20 20 20 20 2f 2a  amesSet;      /*
1efa0 20 54 52 55 45 20 61 66 74 65 72 20 4f 50 5f 43   TRUE after OP_C
1efb0 6f 6c 75 6d 6e 4e 61 6d 65 20 68 61 73 20 62 65  olumnName has be
1efc0 65 6e 20 69 73 73 75 65 64 20 74 6f 20 70 56 64  en issued to pVd
1efd0 62 65 20 2a 2f 0a 20 20 75 38 20 63 68 65 63 6b  be */.  u8 check
1efe0 53 63 68 65 6d 61 3b 20 20 20 20 20 20 2f 2a 20  Schema;      /* 
1eff0 43 61 75 73 65 73 20 73 63 68 65 6d 61 20 63 6f  Causes schema co
1f000 6f 6b 69 65 20 63 68 65 63 6b 20 61 66 74 65 72  okie check after
1f010 20 61 6e 20 65 72 72 6f 72 20 2a 2f 0a 20 20 75   an error */.  u
1f020 38 20 6e 65 73 74 65 64 3b 20 20 20 20 20 20 20  8 nested;       
1f030 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1f040 20 6e 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f   nested calls to
1f050 20 74 68 65 20 70 61 72 73 65 72 2f 63 6f 64 65   the parser/code
1f060 20 67 65 6e 65 72 61 74 6f 72 20 2a 2f 0a 20 20   generator */.  
1f070 75 38 20 6e 54 65 6d 70 52 65 67 3b 20 20 20 20  u8 nTempReg;    
1f080 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1f090 66 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69  f temporary regi
1f0a0 73 74 65 72 73 20 69 6e 20 61 54 65 6d 70 52 65  sters in aTempRe
1f0b0 67 5b 5d 20 2a 2f 0a 20 20 75 38 20 69 73 4d 75  g[] */.  u8 isMu
1f0c0 6c 74 69 57 72 69 74 65 3b 20 20 20 20 20 2f 2a  ltiWrite;     /*
1f0d0 20 54 72 75 65 20 69 66 20 73 74 61 74 65 6d 65   True if stateme
1f0e0 6e 74 20 6d 61 79 20 6d 6f 64 69 66 79 2f 69 6e  nt may modify/in
1f0f0 73 65 72 74 20 6d 75 6c 74 69 70 6c 65 20 72 6f  sert multiple ro
1f100 77 73 20 2a 2f 0a 20 20 75 38 20 6d 61 79 41 62  ws */.  u8 mayAb
1f110 6f 72 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ort;         /* 
1f120 54 72 75 65 20 69 66 20 73 74 61 74 65 6d 65 6e  True if statemen
1f130 74 20 6d 61 79 20 74 68 72 6f 77 20 61 6e 20 41  t may throw an A
1f140 42 4f 52 54 20 65 78 63 65 70 74 69 6f 6e 20 2a  BORT exception *
1f150 2f 0a 20 20 75 38 20 68 61 73 43 6f 6d 70 6f 75  /.  u8 hasCompou
1f160 6e 64 3b 20 20 20 20 20 20 2f 2a 20 4e 65 65 64  nd;      /* Need
1f170 20 74 6f 20 69 6e 76 6f 6b 65 20 63 6f 6e 76 65   to invoke conve
1f180 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74  rtCompoundSelect
1f190 54 6f 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a  ToSubquery() */.
1f1a0 20 20 75 38 20 6f 6b 43 6f 6e 73 74 46 61 63 74    u8 okConstFact
1f1b0 6f 72 3b 20 20 20 20 2f 2a 20 4f 4b 20 74 6f 20  or;    /* OK to 
1f1c0 66 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e 73 74  factor out const
1f1d0 61 6e 74 73 20 2a 2f 0a 20 20 75 38 20 64 69 73  ants */.  u8 dis
1f1e0 61 62 6c 65 4c 6f 6f 6b 61 73 69 64 65 3b 20 2f  ableLookaside; /
1f1f0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 69 6d 65  * Number of time
1f200 73 20 6c 6f 6f 6b 61 73 69 64 65 20 68 61 73 20  s lookaside has 
1f210 62 65 65 6e 20 64 69 73 61 62 6c 65 64 20 2a 2f  been disabled */
1f220 0a 20 20 75 38 20 6e 43 6f 6c 43 61 63 68 65 3b  .  u8 nColCache;
1f230 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1f240 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20  r of entries in 
1f250 61 43 6f 6c 43 61 63 68 65 5b 5d 20 2a 2f 0a 20  aColCache[] */. 
1f260 20 69 6e 74 20 6e 52 61 6e 67 65 52 65 67 3b 20   int nRangeReg; 
1f270 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
1f280 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 72   the temporary r
1f290 65 67 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f  egister block */
1f2a0 0a 20 20 69 6e 74 20 69 52 61 6e 67 65 52 65 67  .  int iRangeReg
1f2b0 3b 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74  ;       /* First
1f2c0 20 72 65 67 69 73 74 65 72 20 69 6e 20 74 65 6d   register in tem
1f2d0 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 20  porary register 
1f2e0 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e  block */.  int n
1f2f0 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Err;            
1f300 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72  /* Number of err
1f310 6f 72 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e  ors seen */.  in
1f320 74 20 6e 54 61 62 3b 20 20 20 20 20 20 20 20 20  t nTab;         
1f330 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1f340 70 72 65 76 69 6f 75 73 6c 79 20 61 6c 6c 6f 63  previously alloc
1f350 61 74 65 64 20 56 44 42 45 20 63 75 72 73 6f 72  ated VDBE cursor
1f360 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b  s */.  int nMem;
1f370 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1f380 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20  umber of memory 
1f390 63 65 6c 6c 73 20 75 73 65 64 20 73 6f 20 66 61  cells used so fa
1f3a0 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 70 41 6c  r */.  int nOpAl
1f3b0 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  loc;        /* N
1f3c0 75 6d 62 65 72 20 6f 66 20 73 6c 6f 74 73 20 61  umber of slots a
1f3d0 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 56 64 62  llocated for Vdb
1f3e0 65 2e 61 4f 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74  e.aOp[] */.  int
1f3f0 20 73 7a 4f 70 41 6c 6c 6f 63 3b 20 20 20 20 20   szOpAlloc;     
1f400 20 20 2f 2a 20 42 79 74 65 73 20 6f 66 20 6d 65    /* Bytes of me
1f410 6d 6f 72 79 20 73 70 61 63 65 20 61 6c 6c 6f 63  mory space alloc
1f420 61 74 65 64 20 66 6f 72 20 56 64 62 65 2e 61 4f  ated for Vdbe.aO
1f430 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 69 53 65  p[] */.  int iSe
1f440 6c 66 54 61 62 3b 20 20 20 20 20 20 20 20 2f 2a  lfTab;        /*
1f450 20 54 61 62 6c 65 20 66 6f 72 20 61 73 73 6f 63   Table for assoc
1f460 69 61 74 65 64 20 77 69 74 68 20 61 6e 20 69 6e  iated with an in
1f470 64 65 78 20 6f 6e 20 65 78 70 72 2c 20 6f 72 20  dex on expr, or 
1f480 6e 65 67 61 74 69 76 65 0a 20 20 20 20 20 20 20  negative.       
1f490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f4a0 2a 2a 20 6f 66 20 74 68 65 20 62 61 73 65 20 72  ** of the base r
1f4b0 65 67 69 73 74 65 72 20 64 75 72 69 6e 67 20 63  egister during c
1f4c0 68 65 63 6b 2d 63 6f 6e 73 74 72 61 69 6e 74 20  heck-constraint 
1f4d0 65 76 61 6c 20 2a 2f 0a 20 20 69 6e 74 20 69 43  eval */.  int iC
1f4e0 61 63 68 65 4c 65 76 65 6c 3b 20 20 20 20 20 2f  acheLevel;     /
1f4f0 2a 20 43 6f 6c 43 61 63 68 65 20 76 61 6c 69 64  * ColCache valid
1f500 20 77 68 65 6e 20 61 43 6f 6c 43 61 63 68 65 5b   when aColCache[
1f510 5d 2e 69 4c 65 76 65 6c 3c 3d 69 43 61 63 68 65  ].iLevel<=iCache
1f520 4c 65 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 69  Level */.  int i
1f530 43 61 63 68 65 43 6e 74 3b 20 20 20 20 20 20 20  CacheCnt;       
1f540 2f 2a 20 43 6f 75 6e 74 65 72 20 75 73 65 64 20  /* Counter used 
1f550 74 6f 20 67 65 6e 65 72 61 74 65 20 61 43 6f 6c  to generate aCol
1f560 43 61 63 68 65 5b 5d 2e 6c 72 75 20 76 61 6c 75  Cache[].lru valu
1f570 65 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 61 62  es */.  int nLab
1f580 65 6c 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  el;          /* 
1f590 4e 75 6d 62 65 72 20 6f 66 20 6c 61 62 65 6c 73  Number of labels
1f5a0 20 75 73 65 64 20 2a 2f 0a 20 20 69 6e 74 20 2a   used */.  int *
1f5b0 61 4c 61 62 65 6c 3b 20 20 20 20 20 20 20 20 20  aLabel;         
1f5c0 2f 2a 20 53 70 61 63 65 20 74 6f 20 68 6f 6c 64  /* Space to hold
1f5d0 20 74 68 65 20 6c 61 62 65 6c 73 20 2a 2f 0a 20   the labels */. 
1f5e0 20 45 78 70 72 4c 69 73 74 20 2a 70 43 6f 6e 73   ExprList *pCons
1f5f0 74 45 78 70 72 3b 2f 2a 20 43 6f 6e 73 74 61 6e  tExpr;/* Constan
1f600 74 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f  t expressions */
1f610 0a 20 20 54 6f 6b 65 6e 20 63 6f 6e 73 74 72 61  .  Token constra
1f620 69 6e 74 4e 61 6d 65 3b 2f 2a 20 4e 61 6d 65 20  intName;/* Name 
1f630 6f 66 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e  of the constrain
1f640 74 20 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e  t currently bein
1f650 67 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 79 44  g parsed */.  yD
1f660 62 4d 61 73 6b 20 77 72 69 74 65 4d 61 73 6b 3b  bMask writeMask;
1f670 20 20 20 2f 2a 20 53 74 61 72 74 20 61 20 77 72     /* Start a wr
1f680 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ite transaction 
1f690 6f 6e 20 74 68 65 73 65 20 64 61 74 61 62 61 73  on these databas
1f6a0 65 73 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20  es */.  yDbMask 
1f6b0 63 6f 6f 6b 69 65 4d 61 73 6b 3b 20 20 2f 2a 20  cookieMask;  /* 
1f6c0 42 69 74 6d 61 73 6b 20 6f 66 20 73 63 68 65 6d  Bitmask of schem
1f6d0 61 20 76 65 72 69 66 69 65 64 20 64 61 74 61 62  a verified datab
1f6e0 61 73 65 73 20 2a 2f 0a 20 20 69 6e 74 20 72 65  ases */.  int re
1f6f0 67 52 6f 77 69 64 3b 20 20 20 20 20 20 20 20 2f  gRowid;        /
1f700 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69  * Register holdi
1f710 6e 67 20 72 6f 77 69 64 20 6f 66 20 43 52 45 41  ng rowid of CREA
1f720 54 45 20 54 41 42 4c 45 20 65 6e 74 72 79 20 2a  TE TABLE entry *
1f730 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f 6f 74 3b  /.  int regRoot;
1f740 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69           /* Regi
1f750 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 6f  ster holding roo
1f760 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f  t page number fo
1f770 72 20 6e 65 77 20 6f 62 6a 65 63 74 73 20 2a 2f  r new objects */
1f780 0a 20 20 69 6e 74 20 6e 4d 61 78 41 72 67 3b 20  .  int nMaxArg; 
1f790 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 20 61          /* Max a
1f7a0 72 67 73 20 70 61 73 73 65 64 20 74 6f 20 75 73  rgs passed to us
1f7b0 65 72 20 66 75 6e 63 74 69 6f 6e 20 62 79 20 73  er function by s
1f7c0 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 23 69  ub-program */.#i
1f7d0 66 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e  f SELECTTRACE_EN
1f7e0 41 42 4c 45 44 0a 20 20 69 6e 74 20 6e 53 65 6c  ABLED.  int nSel
1f7f0 65 63 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ect;         /* 
1f800 4e 75 6d 62 65 72 20 6f 66 20 53 45 4c 45 43 54  Number of SELECT
1f810 20 73 74 61 74 65 6d 65 6e 74 73 20 73 65 65 6e   statements seen
1f820 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 65 6c 65 63   */.  int nSelec
1f830 74 49 6e 64 65 6e 74 3b 20 20 20 2f 2a 20 48 6f  tIndent;   /* Ho
1f840 77 20 66 61 72 20 74 6f 20 69 6e 64 65 6e 74 20  w far to indent 
1f850 53 45 4c 45 43 54 54 52 41 43 45 28 29 20 6f 75  SELECTTRACE() ou
1f860 74 70 75 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 23  tput */.#endif.#
1f870 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
1f880 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a  IT_SHARED_CACHE.
1f890 20 20 69 6e 74 20 6e 54 61 62 6c 65 4c 6f 63 6b    int nTableLock
1f8a0 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ;        /* Numb
1f8b0 65 72 20 6f 66 20 6c 6f 63 6b 73 20 69 6e 20 61  er of locks in a
1f8c0 54 61 62 6c 65 4c 6f 63 6b 20 2a 2f 0a 20 20 54  TableLock */.  T
1f8d0 61 62 6c 65 4c 6f 63 6b 20 2a 61 54 61 62 6c 65  ableLock *aTable
1f8e0 4c 6f 63 6b 3b 20 2f 2a 20 52 65 71 75 69 72 65  Lock; /* Require
1f8f0 64 20 74 61 62 6c 65 20 6c 6f 63 6b 73 20 66 6f  d table locks fo
1f900 72 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d  r shared-cache m
1f910 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ode */.#endif.  
1f920 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 41 69  AutoincInfo *pAi
1f930 6e 63 3b 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74  nc;  /* Informat
1f940 69 6f 6e 20 61 62 6f 75 74 20 41 55 54 4f 49 4e  ion about AUTOIN
1f950 43 52 45 4d 45 4e 54 20 63 6f 75 6e 74 65 72 73  CREMENT counters
1f960 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 54 6f   */.  Parse *pTo
1f970 70 6c 65 76 65 6c 3b 20 20 20 20 2f 2a 20 50 61  plevel;    /* Pa
1f980 72 73 65 20 73 74 72 75 63 74 75 72 65 20 66 6f  rse structure fo
1f990 72 20 6d 61 69 6e 20 70 72 6f 67 72 61 6d 20 28  r main program (
1f9a0 6f 72 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 54 61  or NULL) */.  Ta
1f9b0 62 6c 65 20 2a 70 54 72 69 67 67 65 72 54 61 62  ble *pTriggerTab
1f9c0 3b 20 20 2f 2a 20 54 61 62 6c 65 20 74 72 69 67  ;  /* Table trig
1f9d0 67 65 72 73 20 61 72 65 20 62 65 69 6e 67 20 63  gers are being c
1f9e0 6f 64 65 64 20 66 6f 72 20 2a 2f 0a 20 20 69 6e  oded for */.  in
1f9f0 74 20 61 64 64 72 43 72 54 61 62 3b 20 20 20 20  t addrCrTab;    
1fa00 20 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66     /* Address of
1fa10 20 4f 50 5f 43 72 65 61 74 65 42 74 72 65 65 20   OP_CreateBtree 
1fa20 6f 70 63 6f 64 65 20 6f 6e 20 43 52 45 41 54 45  opcode on CREATE
1fa30 20 54 41 42 4c 45 20 2a 2f 0a 20 20 75 33 32 20   TABLE */.  u32 
1fa40 6e 51 75 65 72 79 4c 6f 6f 70 3b 20 20 20 20 20  nQueryLoop;     
1fa50 20 2f 2a 20 45 73 74 20 6e 75 6d 62 65 72 20 6f   /* Est number o
1fa60 66 20 69 74 65 72 61 74 69 6f 6e 73 20 6f 66 20  f iterations of 
1fa70 61 20 71 75 65 72 79 20 28 31 30 2a 6c 6f 67 32  a query (10*log2
1fa80 28 4e 29 29 20 2a 2f 0a 20 20 75 33 32 20 6f 6c  (N)) */.  u32 ol
1fa90 64 6d 61 73 6b 3b 20 20 20 20 20 20 20 20 20 2f  dmask;         /
1faa0 2a 20 4d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20  * Mask of old.* 
1fab0 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e 63  columns referenc
1fac0 65 64 20 2a 2f 0a 20 20 75 33 32 20 6e 65 77 6d  ed */.  u32 newm
1fad0 61 73 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ask;         /* 
1fae0 4d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f  Mask of new.* co
1faf0 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e 63 65 64  lumns referenced
1fb00 20 2a 2f 0a 20 20 75 38 20 65 54 72 69 67 67 65   */.  u8 eTrigge
1fb10 72 4f 70 3b 20 20 20 20 20 20 20 2f 2a 20 54 4b  rOp;       /* TK
1fb20 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45  _UPDATE, TK_INSE
1fb30 52 54 20 6f 72 20 54 4b 5f 44 45 4c 45 54 45 20  RT or TK_DELETE 
1fb40 2a 2f 0a 20 20 75 38 20 65 4f 72 63 6f 6e 66 3b  */.  u8 eOrconf;
1fb50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
1fb60 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  ault ON CONFLICT
1fb70 20 70 6f 6c 69 63 79 20 66 6f 72 20 74 72 69 67   policy for trig
1fb80 67 65 72 20 73 74 65 70 73 20 2a 2f 0a 20 20 75  ger steps */.  u
1fb90 38 20 64 69 73 61 62 6c 65 54 72 69 67 67 65 72  8 disableTrigger
1fba0 73 3b 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 64  s;  /* True to d
1fbb0 69 73 61 62 6c 65 20 74 72 69 67 67 65 72 73 20  isable triggers 
1fbc0 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a  */..  /*********
1fbd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fbe0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fbf0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fc00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fc10 2a 0a 20 20 2a 2a 20 46 69 65 6c 64 73 20 61 62  *.  ** Fields ab
1fc20 6f 76 65 20 6d 75 73 74 20 62 65 20 69 6e 69 74  ove must be init
1fc30 69 61 6c 69 7a 65 64 20 74 6f 20 7a 65 72 6f 2e  ialized to zero.
1fc40 20 20 54 68 65 20 66 69 65 6c 64 73 20 74 68 61    The fields tha
1fc50 74 20 66 6f 6c 6c 6f 77 2c 0a 20 20 2a 2a 20 64  t follow,.  ** d
1fc60 6f 77 6e 20 74 6f 20 74 68 65 20 62 65 67 69 6e  own to the begin
1fc70 6e 69 6e 67 20 6f 66 20 74 68 65 20 72 65 63 75  ning of the recu
1fc80 72 73 69 76 65 20 73 65 63 74 69 6f 6e 2c 20 64  rsive section, d
1fc90 6f 20 6e 6f 74 20 6e 65 65 64 20 74 6f 20 62 65  o not need to be
1fca0 0a 20 20 2a 2a 20 69 6e 69 74 69 61 6c 69 7a 65  .  ** initialize
1fcb0 64 20 61 73 20 74 68 65 79 20 77 69 6c 6c 20 62  d as they will b
1fcc0 65 20 73 65 74 20 62 65 66 6f 72 65 20 62 65 69  e set before bei
1fcd0 6e 67 20 75 73 65 64 2e 20 20 54 68 65 20 62 6f  ng used.  The bo
1fce0 75 6e 64 61 72 79 20 69 73 0a 20 20 2a 2a 20 64  undary is.  ** d
1fcf0 65 74 65 72 6d 69 6e 65 64 20 62 79 20 6f 66 66  etermined by off
1fd00 73 65 74 6f 66 28 50 61 72 73 65 2c 61 43 6f 6c  setof(Parse,aCol
1fd10 43 61 63 68 65 29 2e 0a 20 20 2a 2a 2a 2a 2a 2a  Cache)..  ******
1fd20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fd30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fd40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fd50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fd60 2a 2a 2a 2a 2f 0a 0a 20 20 73 74 72 75 63 74 20  ****/..  struct 
1fd70 79 43 6f 6c 43 61 63 68 65 20 7b 0a 20 20 20 20  yColCache {.    
1fd80 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20  int iTable;     
1fd90 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63        /* Table c
1fda0 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 2a 2f 0a  ursor number */.
1fdb0 20 20 20 20 69 31 36 20 69 43 6f 6c 75 6d 6e 3b      i16 iColumn;
1fdc0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62            /* Tab
1fdd0 6c 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72  le column number
1fde0 20 2a 2f 0a 20 20 20 20 75 38 20 74 65 6d 70 52   */.    u8 tempR
1fdf0 65 67 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  eg;           /*
1fe00 20 69 52 65 67 20 69 73 20 61 20 74 65 6d 70 20   iReg is a temp 
1fe10 72 65 67 69 73 74 65 72 20 74 68 61 74 20 6e 65  register that ne
1fe20 65 64 73 20 74 6f 20 62 65 20 66 72 65 65 64 20  eds to be freed 
1fe30 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4c 65 76 65  */.    int iLeve
1fe40 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  l;           /* 
1fe50 4e 65 73 74 69 6e 67 20 6c 65 76 65 6c 20 2a 2f  Nesting level */
1fe60 0a 20 20 20 20 69 6e 74 20 69 52 65 67 3b 20 20  .    int iReg;  
1fe70 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
1fe80 67 20 77 69 74 68 20 76 61 6c 75 65 20 6f 66 20  g with value of 
1fe90 74 68 69 73 20 63 6f 6c 75 6d 6e 2e 20 30 20 6d  this column. 0 m
1fea0 65 61 6e 73 20 6e 6f 6e 65 2e 20 2a 2f 0a 20 20  eans none. */.  
1feb0 20 20 69 6e 74 20 6c 72 75 3b 20 20 20 20 20 20    int lru;      
1fec0 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 61 73 74          /* Least
1fed0 20 72 65 63 65 6e 74 6c 79 20 75 73 65 64 20 65   recently used e
1fee0 6e 74 72 79 20 68 61 73 20 74 68 65 20 73 6d 61  ntry has the sma
1fef0 6c 6c 65 73 74 20 76 61 6c 75 65 20 2a 2f 0a 20  llest value */. 
1ff00 20 7d 20 61 43 6f 6c 43 61 63 68 65 5b 53 51 4c   } aColCache[SQL
1ff10 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 5d 3b  ITE_N_COLCACHE];
1ff20 20 20 2f 2a 20 4f 6e 65 20 66 6f 72 20 65 61 63    /* One for eac
1ff30 68 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 20 65  h column cache e
1ff40 6e 74 72 79 20 2a 2f 0a 20 20 69 6e 74 20 61 54  ntry */.  int aT
1ff50 65 6d 70 52 65 67 5b 38 5d 3b 20 20 20 20 20 20  empReg[8];      
1ff60 20 20 2f 2a 20 48 6f 6c 64 69 6e 67 20 61 72 65    /* Holding are
1ff70 61 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20  a for temporary 
1ff80 72 65 67 69 73 74 65 72 73 20 2a 2f 0a 20 20 54  registers */.  T
1ff90 6f 6b 65 6e 20 73 4e 61 6d 65 54 6f 6b 65 6e 3b  oken sNameToken;
1ffa0 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20         /* Token 
1ffb0 77 69 74 68 20 75 6e 71 75 61 6c 69 66 69 65 64  with unqualified
1ffc0 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 20 6e   schema object n
1ffd0 61 6d 65 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a  ame */..  /*****
1ffe0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fff0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20000 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20010 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20020 2a 2a 2a 0a 20 20 2a 2a 20 41 62 6f 76 65 20 69  ***.  ** Above i
20030 73 20 63 6f 6e 73 74 61 6e 74 20 62 65 74 77 65  s constant betwe
20040 65 6e 20 72 65 63 75 72 73 69 6f 6e 73 2e 20 20  en recursions.  
20050 42 65 6c 6f 77 20 69 73 20 72 65 73 65 74 20 62  Below is reset b
20060 65 66 6f 72 65 20 61 6e 64 20 61 66 74 65 72 0a  efore and after.
20070 20 20 2a 2a 20 65 61 63 68 20 72 65 63 75 72 73    ** each recurs
20080 69 6f 6e 2e 20 20 54 68 65 20 62 6f 75 6e 64 61  ion.  The bounda
20090 72 79 20 62 65 74 77 65 65 6e 20 74 68 65 73 65  ry between these
200a0 20 74 77 6f 20 72 65 67 69 6f 6e 73 20 69 73 20   two regions is 
200b0 64 65 74 65 72 6d 69 6e 65 64 0a 20 20 2a 2a 20  determined.  ** 
200c0 75 73 69 6e 67 20 6f 66 66 73 65 74 6f 66 28 50  using offsetof(P
200d0 61 72 73 65 2c 73 4c 61 73 74 54 6f 6b 65 6e 29  arse,sLastToken)
200e0 20 73 6f 20 74 68 65 20 73 4c 61 73 74 54 6f 6b   so the sLastTok
200f0 65 6e 20 66 69 65 6c 64 20 6d 75 73 74 20 62 65  en field must be
20100 20 74 68 65 0a 20 20 2a 2a 20 66 69 72 73 74 20   the.  ** first 
20110 66 69 65 6c 64 20 69 6e 20 74 68 65 20 72 65 63  field in the rec
20120 75 72 73 69 76 65 20 72 65 67 69 6f 6e 2e 0a 20  ursive region.. 
20130 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   ***************
20140 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20150 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20160 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20170 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 54 6f  *********/..  To
20180 6b 65 6e 20 73 4c 61 73 74 54 6f 6b 65 6e 3b 20  ken sLastToken; 
20190 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 61 73        /* The las
201a0 74 20 74 6f 6b 65 6e 20 70 61 72 73 65 64 20 2a  t token parsed *
201b0 2f 0a 20 20 79 6e 56 61 72 20 6e 56 61 72 3b 20  /.  ynVar nVar; 
201c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
201d0 20 4e 75 6d 62 65 72 20 6f 66 20 27 3f 27 20 76   Number of '?' v
201e0 61 72 69 61 62 6c 65 73 20 73 65 65 6e 20 69 6e  ariables seen in
201f0 20 74 68 65 20 53 51 4c 20 73 6f 20 66 61 72 20   the SQL so far 
20200 2a 2f 0a 20 20 75 38 20 69 50 6b 53 6f 72 74 4f  */.  u8 iPkSortO
20210 72 64 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f  rder;          /
20220 2a 20 41 53 43 20 6f 72 20 44 45 53 43 20 66 6f  * ASC or DESC fo
20230 72 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  r INTEGER PRIMAR
20240 59 20 4b 45 59 20 2a 2f 0a 20 20 75 38 20 65 78  Y KEY */.  u8 ex
20250 70 6c 61 69 6e 3b 20 20 20 20 20 20 20 20 20 20  plain;          
20260 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
20270 74 68 65 20 45 58 50 4c 41 49 4e 20 66 6c 61 67  the EXPLAIN flag
20280 20 69 73 20 66 6f 75 6e 64 20 6f 6e 20 74 68 65   is found on the
20290 20 71 75 65 72 79 20 2a 2f 0a 23 69 66 6e 64 65   query */.#ifnde
202a0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
202b0 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 75 38 20  RTUALTABLE.  u8 
202c0 64 65 63 6c 61 72 65 56 74 61 62 3b 20 20 20 20  declareVtab;    
202d0 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
202e0 66 20 69 6e 73 69 64 65 20 73 71 6c 69 74 65 33  f inside sqlite3
202f0 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20  _declare_vtab() 
20300 2a 2f 0a 20 20 69 6e 74 20 6e 56 74 61 62 4c 6f  */.  int nVtabLo
20310 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ck;            /
20320 2a 20 4e 75 6d 62 65 72 20 6f 66 20 76 69 72 74  * Number of virt
20330 75 61 6c 20 74 61 62 6c 65 73 20 74 6f 20 6c 6f  ual tables to lo
20340 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69  ck */.#endif.  i
20350 6e 74 20 6e 48 65 69 67 68 74 3b 20 20 20 20 20  nt nHeight;     
20360 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70 72           /* Expr
20370 65 73 73 69 6f 6e 20 74 72 65 65 20 68 65 69 67  ession tree heig
20380 68 74 20 6f 66 20 63 75 72 72 65 6e 74 20 73 75  ht of current su
20390 62 2d 73 65 6c 65 63 74 20 2a 2f 0a 23 69 66 6e  b-select */.#ifn
203a0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
203b0 45 58 50 4c 41 49 4e 0a 20 20 69 6e 74 20 69 53  EXPLAIN.  int iS
203c0 65 6c 65 63 74 49 64 3b 20 20 20 20 20 20 20 20  electId;        
203d0 20 20 20 20 2f 2a 20 49 44 20 6f 66 20 63 75 72      /* ID of cur
203e0 72 65 6e 74 20 73 65 6c 65 63 74 20 66 6f 72 20  rent select for 
203f0 45 58 50 4c 41 49 4e 20 6f 75 74 70 75 74 20 2a  EXPLAIN output *
20400 2f 0a 20 20 69 6e 74 20 69 4e 65 78 74 53 65 6c  /.  int iNextSel
20410 65 63 74 49 64 3b 20 20 20 20 20 20 20 20 2f 2a  ectId;        /*
20420 20 4e 65 78 74 20 61 76 61 69 6c 61 62 6c 65 20   Next available 
20430 73 65 6c 65 63 74 20 49 44 20 66 6f 72 20 45 58  select ID for EX
20440 50 4c 41 49 4e 20 6f 75 74 70 75 74 20 2a 2f 0a  PLAIN output */.
20450 23 65 6e 64 69 66 0a 20 20 56 4c 69 73 74 20 2a  #endif.  VList *
20460 70 56 4c 69 73 74 3b 20 20 20 20 20 20 20 20 20  pVList;         
20470 20 20 20 2f 2a 20 4d 61 70 70 69 6e 67 20 62 65     /* Mapping be
20480 74 77 65 65 6e 20 76 61 72 69 61 62 6c 65 20 6e  tween variable n
20490 61 6d 65 73 20 61 6e 64 20 6e 75 6d 62 65 72 73  ames and numbers
204a0 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 52 65 70   */.  Vdbe *pRep
204b0 72 65 70 61 72 65 3b 20 20 20 20 20 20 20 20 20  repare;         
204c0 2f 2a 20 56 4d 20 62 65 69 6e 67 20 72 65 70 72  /* VM being repr
204d0 65 70 61 72 65 64 20 28 73 71 6c 69 74 65 33 52  epared (sqlite3R
204e0 65 70 72 65 70 61 72 65 28 29 29 20 2a 2f 0a 20  eprepare()) */. 
204f0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61   const char *zTa
20500 69 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c  il;        /* Al
20510 6c 20 53 51 4c 20 74 65 78 74 20 70 61 73 74 20  l SQL text past 
20520 74 68 65 20 6c 61 73 74 20 73 65 6d 69 63 6f 6c  the last semicol
20530 6f 6e 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 54  on parsed */.  T
20540 61 62 6c 65 20 2a 70 4e 65 77 54 61 62 6c 65 3b  able *pNewTable;
20550 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 74 61           /* A ta
20560 62 6c 65 20 62 65 69 6e 67 20 63 6f 6e 73 74 72  ble being constr
20570 75 63 74 65 64 20 62 79 20 43 52 45 41 54 45 20  ucted by CREATE 
20580 54 41 42 4c 45 20 2a 2f 0a 20 20 54 72 69 67 67  TABLE */.  Trigg
20590 65 72 20 2a 70 4e 65 77 54 72 69 67 67 65 72 3b  er *pNewTrigger;
205a0 20 20 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20       /* Trigger 
205b0 75 6e 64 65 72 20 63 6f 6e 73 74 72 75 63 74 20  under construct 
205c0 62 79 20 61 20 43 52 45 41 54 45 20 54 52 49 47  by a CREATE TRIG
205d0 47 45 52 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  GER */.  const c
205e0 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78  har *zAuthContex
205f0 74 3b 20 2f 2a 20 54 68 65 20 36 74 68 20 70 61  t; /* The 6th pa
20600 72 61 6d 65 74 65 72 20 74 6f 20 64 62 2d 3e 78  rameter to db->x
20610 41 75 74 68 20 63 61 6c 6c 62 61 63 6b 73 20 2a  Auth callbacks *
20620 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
20630 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
20640 4c 45 0a 20 20 54 6f 6b 65 6e 20 73 41 72 67 3b  LE.  Token sArg;
20650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
20660 2a 20 43 6f 6d 70 6c 65 74 65 20 74 65 78 74 20  * Complete text 
20670 6f 66 20 61 20 6d 6f 64 75 6c 65 20 61 72 67 75  of a module argu
20680 6d 65 6e 74 20 2a 2f 0a 20 20 54 61 62 6c 65 20  ment */.  Table 
20690 2a 2a 61 70 56 74 61 62 4c 6f 63 6b 3b 20 20 20  **apVtabLock;   
206a0 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
206b0 6f 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73  o virtual tables
206c0 20 6e 65 65 64 69 6e 67 20 6c 6f 63 6b 69 6e 67   needing locking
206d0 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54 61 62   */.#endif.  Tab
206e0 6c 65 20 2a 70 5a 6f 6d 62 69 65 54 61 62 3b 20  le *pZombieTab; 
206f0 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f         /* List o
20700 66 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20  f Table objects 
20710 74 6f 20 64 65 6c 65 74 65 20 61 66 74 65 72 20  to delete after 
20720 63 6f 64 65 20 67 65 6e 20 2a 2f 0a 20 20 54 72  code gen */.  Tr
20730 69 67 67 65 72 50 72 67 20 2a 70 54 72 69 67 67  iggerPrg *pTrigg
20740 65 72 50 72 67 3b 20 20 2f 2a 20 4c 69 6e 6b 65  erPrg;  /* Linke
20750 64 20 6c 69 73 74 20 6f 66 20 63 6f 64 65 64 20  d list of coded 
20760 74 72 69 67 67 65 72 73 20 2a 2f 0a 20 20 57 69  triggers */.  Wi
20770 74 68 20 2a 70 57 69 74 68 3b 20 20 20 20 20 20  th *pWith;      
20780 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65          /* Curre
20790 6e 74 20 57 49 54 48 20 63 6c 61 75 73 65 2c 20  nt WITH clause, 
207a0 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 57 69 74  or NULL */.  Wit
207b0 68 20 2a 70 57 69 74 68 54 6f 46 72 65 65 3b 20  h *pWithToFree; 
207c0 20 20 20 20 20 20 20 2f 2a 20 46 72 65 65 20 74         /* Free t
207d0 68 69 73 20 57 49 54 48 20 6f 62 6a 65 63 74 20  his WITH object 
207e0 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  at the end of th
207f0 65 20 70 61 72 73 65 20 2a 2f 0a 7d 3b 0a 0a 2f  e parse */.};../
20800 2a 0a 2a 2a 20 53 69 7a 65 73 20 61 6e 64 20 70  *.** Sizes and p
20810 6f 69 6e 74 65 72 73 20 6f 66 20 76 61 72 69 6f  ointers of vario
20820 75 73 20 70 61 72 74 73 20 6f 66 20 74 68 65 20  us parts of the 
20830 50 61 72 73 65 20 6f 62 6a 65 63 74 2e 0a 2a 2f  Parse object..*/
20840 0a 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f 48  .#define PARSE_H
20850 44 52 5f 53 5a 20 6f 66 66 73 65 74 6f 66 28 50  DR_SZ offsetof(P
20860 61 72 73 65 2c 61 43 6f 6c 43 61 63 68 65 29 20  arse,aColCache) 
20870 2f 2a 20 52 65 63 75 72 73 69 76 65 20 70 61 72  /* Recursive par
20880 74 20 77 2f 6f 20 61 43 6f 6c 43 61 63 68 65 2a  t w/o aColCache*
20890 2f 0a 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f  /.#define PARSE_
208a0 52 45 43 55 52 53 45 5f 53 5a 20 6f 66 66 73 65  RECURSE_SZ offse
208b0 74 6f 66 28 50 61 72 73 65 2c 73 4c 61 73 74 54  tof(Parse,sLastT
208c0 6f 6b 65 6e 29 20 20 20 20 2f 2a 20 52 65 63 75  oken)    /* Recu
208d0 72 73 69 76 65 20 70 61 72 74 20 2a 2f 0a 23 64  rsive part */.#d
208e0 65 66 69 6e 65 20 50 41 52 53 45 5f 54 41 49 4c  efine PARSE_TAIL
208f0 5f 53 5a 20 28 73 69 7a 65 6f 66 28 50 61 72 73  _SZ (sizeof(Pars
20900 65 29 2d 50 41 52 53 45 5f 52 45 43 55 52 53 45  e)-PARSE_RECURSE
20910 5f 53 5a 29 20 2f 2a 20 4e 6f 6e 2d 72 65 63 75  _SZ) /* Non-recu
20920 72 73 69 76 65 20 70 61 72 74 20 2a 2f 0a 23 64  rsive part */.#d
20930 65 66 69 6e 65 20 50 41 52 53 45 5f 54 41 49 4c  efine PARSE_TAIL
20940 28 58 29 20 28 28 28 63 68 61 72 2a 29 28 58 29  (X) (((char*)(X)
20950 29 2b 50 41 52 53 45 5f 52 45 43 55 52 53 45 5f  )+PARSE_RECURSE_
20960 53 5a 29 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20  SZ)  /* Pointer 
20970 74 6f 20 74 61 69 6c 20 2a 2f 0a 0a 2f 2a 0a 2a  to tail */../*.*
20980 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66  * Return true if
20990 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 73 69 64   currently insid
209a0 65 20 61 6e 20 73 71 6c 69 74 65 33 5f 64 65 63  e an sqlite3_dec
209b0 6c 61 72 65 5f 76 74 61 62 28 29 20 63 61 6c 6c  lare_vtab() call
209c0 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
209d0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
209e0 41 42 4c 45 0a 20 20 23 64 65 66 69 6e 65 20 49  ABLE.  #define I
209f0 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41 42 20 30  N_DECLARE_VTAB 0
20a00 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
20a10 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41 42   IN_DECLARE_VTAB
20a20 20 28 70 50 61 72 73 65 2d 3e 64 65 63 6c 61 72   (pParse->declar
20a30 65 56 74 61 62 29 0a 23 65 6e 64 69 66 0a 0a 2f  eVtab).#endif../
20a40 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
20a50 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
20a60 67 20 73 74 72 75 63 74 75 72 65 20 63 61 6e 20  g structure can 
20a70 62 65 20 64 65 63 6c 61 72 65 64 20 6f 6e 20 61  be declared on a
20a80 20 73 74 61 63 6b 20 61 6e 64 20 75 73 65 64 0a   stack and used.
20a90 2a 2a 20 74 6f 20 73 61 76 65 20 74 68 65 20 50  ** to save the P
20aa0 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78  arse.zAuthContex
20ab0 74 20 76 61 6c 75 65 20 73 6f 20 74 68 61 74 20  t value so that 
20ac0 69 74 20 63 61 6e 20 62 65 20 72 65 73 74 6f 72  it can be restor
20ad0 65 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a 73 74 72  ed later..*/.str
20ae0 75 63 74 20 41 75 74 68 43 6f 6e 74 65 78 74 20  uct AuthContext 
20af0 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  {.  const char *
20b00 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20 20 20  zAuthContext;   
20b10 2f 2a 20 50 75 74 20 73 61 76 65 64 20 50 61 72  /* Put saved Par
20b20 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74 20  se.zAuthContext 
20b30 68 65 72 65 20 2a 2f 0a 20 20 50 61 72 73 65 20  here */.  Parse 
20b40 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20 20  *pParse;        
20b50 20 20 20 20 20 20 2f 2a 20 54 68 65 20 50 61 72        /* The Par
20b60 73 65 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a  se structure */.
20b70 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 66 69 65  };../*.** Bitfie
20b80 6c 64 20 66 6c 61 67 73 20 66 6f 72 20 50 35 20  ld flags for P5 
20b90 76 61 6c 75 65 20 69 6e 20 76 61 72 69 6f 75 73  value in various
20ba0 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 0a 2a 2a 20   opcodes..**.** 
20bb0 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74  Value constraint
20bc0 73 20 28 65 6e 66 6f 72 63 65 64 20 76 69 61 20  s (enforced via 
20bd0 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20  assert()):.**   
20be0 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52   OPFLAG_LENGTHAR
20bf0 47 20 20 20 20 3d 3d 20 53 51 4c 49 54 45 5f 46  G    == SQLITE_F
20c00 55 4e 43 5f 4c 45 4e 47 54 48 0a 2a 2a 20 20 20  UNC_LENGTH.**   
20c10 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52   OPFLAG_TYPEOFAR
20c20 47 20 20 20 20 3d 3d 20 53 51 4c 49 54 45 5f 46  G    == SQLITE_F
20c30 55 4e 43 5f 54 59 50 45 4f 46 0a 2a 2a 20 20 20  UNC_TYPEOF.**   
20c40 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20   OPFLAG_BULKCSR 
20c50 20 20 20 20 20 3d 3d 20 42 54 52 45 45 5f 42 55       == BTREE_BU
20c60 4c 4b 4c 4f 41 44 0a 2a 2a 20 20 20 20 4f 50 46  LKLOAD.**    OPF
20c70 4c 41 47 5f 53 45 45 4b 45 51 20 20 20 20 20 20  LAG_SEEKEQ      
20c80 20 3d 3d 20 42 54 52 45 45 5f 53 45 45 4b 5f 45   == BTREE_SEEK_E
20c90 51 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 46  Q.**    OPFLAG_F
20ca0 4f 52 44 45 4c 45 54 45 20 20 20 20 3d 3d 20 42  ORDELETE    == B
20cb0 54 52 45 45 5f 46 4f 52 44 45 4c 45 54 45 0a 2a  TREE_FORDELETE.*
20cc0 2a 20 20 20 20 4f 50 46 4c 41 47 5f 53 41 56 45  *    OPFLAG_SAVE
20cd0 50 4f 53 49 54 49 4f 4e 20 3d 3d 20 42 54 52 45  POSITION == BTRE
20ce0 45 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 0a 2a  E_SAVEPOSITION.*
20cf0 2a 20 20 20 20 4f 50 46 4c 41 47 5f 41 55 58 44  *    OPFLAG_AUXD
20d00 45 4c 45 54 45 20 20 20 20 3d 3d 20 42 54 52 45  ELETE    == BTRE
20d10 45 5f 41 55 58 44 45 4c 45 54 45 0a 2a 2f 0a 23  E_AUXDELETE.*/.#
20d20 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4e 43  define OPFLAG_NC
20d30 48 41 4e 47 45 20 20 20 20 20 20 20 30 78 30 31  HANGE       0x01
20d40 20 20 20 20 2f 2a 20 4f 50 5f 49 6e 73 65 72 74      /* OP_Insert
20d50 3a 20 53 65 74 20 74 6f 20 75 70 64 61 74 65 20  : Set to update 
20d60 64 62 2d 3e 6e 43 68 61 6e 67 65 20 2a 2f 0a 20  db->nChange */. 
20d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20d90 20 20 20 20 2f 2a 20 41 6c 73 6f 20 75 73 65 64      /* Also used
20da0 20 69 6e 20 50 32 20 28 6e 6f 74 20 50 35 29 20   in P2 (not P5) 
20db0 6f 66 20 4f 50 5f 44 65 6c 65 74 65 20 2a 2f 0a  of OP_Delete */.
20dc0 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 45  #define OPFLAG_E
20dd0 50 48 45 4d 20 20 20 20 20 20 20 20 20 30 78 30  PHEM         0x0
20de0 31 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d  1    /* OP_Colum
20df0 6e 3a 20 45 70 68 65 6d 65 72 61 6c 20 6f 75 74  n: Ephemeral out
20e00 70 75 74 20 69 73 20 6f 6b 20 2a 2f 0a 23 64 65  put is ok */.#de
20e10 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54  fine OPFLAG_LAST
20e20 52 4f 57 49 44 20 20 20 20 20 30 78 32 30 20 20  ROWID     0x20  
20e30 20 20 2f 2a 20 53 65 74 20 74 6f 20 75 70 64 61    /* Set to upda
20e40 74 65 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64  te db->lastRowid
20e50 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
20e60 41 47 5f 49 53 55 50 44 41 54 45 20 20 20 20 20  AG_ISUPDATE     
20e70 20 30 78 30 34 20 20 20 20 2f 2a 20 54 68 69 73   0x04    /* This
20e80 20 4f 50 5f 49 6e 73 65 72 74 20 69 73 20 61 6e   OP_Insert is an
20e90 20 73 71 6c 20 55 50 44 41 54 45 20 2a 2f 0a 23   sql UPDATE */.#
20ea0 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 41 50  define OPFLAG_AP
20eb0 50 45 4e 44 20 20 20 20 20 20 20 20 30 78 30 38  PEND        0x08
20ec0 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20 6c      /* This is l
20ed0 69 6b 65 6c 79 20 74 6f 20 62 65 20 61 6e 20 61  ikely to be an a
20ee0 70 70 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65  ppend */.#define
20ef0 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52   OPFLAG_USESEEKR
20f00 45 53 55 4c 54 20 30 78 31 30 20 20 20 20 2f 2a  ESULT 0x10    /*
20f10 20 54 72 79 20 74 6f 20 61 76 6f 69 64 20 61 20   Try to avoid a 
20f20 73 65 65 6b 20 69 6e 20 42 74 72 65 65 49 6e 73  seek in BtreeIns
20f30 65 72 74 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65  ert() */.#define
20f40 20 4f 50 46 4c 41 47 5f 49 53 4e 4f 4f 50 20 20   OPFLAG_ISNOOP  
20f50 20 20 20 20 20 20 30 78 34 30 20 20 20 20 2f 2a        0x40    /*
20f60 20 4f 50 5f 44 65 6c 65 74 65 20 64 6f 65 73 20   OP_Delete does 
20f70 70 72 65 2d 75 70 64 61 74 65 2d 68 6f 6f 6b 20  pre-update-hook 
20f80 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  only */.#define 
20f90 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47  OPFLAG_LENGTHARG
20fa0 20 20 20 20 20 30 78 34 30 20 20 20 20 2f 2a 20       0x40    /* 
20fb0 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75  OP_Column only u
20fc0 73 65 64 20 66 6f 72 20 6c 65 6e 67 74 68 28 29  sed for length()
20fd0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
20fe0 41 47 5f 54 59 50 45 4f 46 41 52 47 20 20 20 20  AG_TYPEOFARG    
20ff0 20 30 78 38 30 20 20 20 20 2f 2a 20 4f 50 5f 43   0x80    /* OP_C
21000 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20  olumn only used 
21010 66 6f 72 20 74 79 70 65 6f 66 28 29 20 2a 2f 0a  for typeof() */.
21020 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 42  #define OPFLAG_B
21030 55 4c 4b 43 53 52 20 20 20 20 20 20 20 30 78 30  ULKCSR       0x0
21040 31 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a  1    /* OP_Open*
21050 2a 20 75 73 65 64 20 74 6f 20 6f 70 65 6e 20 62  * used to open b
21060 75 6c 6b 20 63 75 72 73 6f 72 20 2a 2f 0a 23 64  ulk cursor */.#d
21070 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 53 45 45  efine OPFLAG_SEE
21080 4b 45 51 20 20 20 20 20 20 20 20 30 78 30 32 20  KEQ        0x02 
21090 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20     /* OP_Open** 
210a0 63 75 72 73 6f 72 20 75 73 65 73 20 45 51 20 73  cursor uses EQ s
210b0 65 65 6b 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66  eek only */.#def
210c0 69 6e 65 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45  ine OPFLAG_FORDE
210d0 4c 45 54 45 20 20 20 20 20 30 78 30 38 20 20 20  LETE     0x08   
210e0 20 2f 2a 20 4f 50 5f 4f 70 65 6e 20 73 68 6f 75   /* OP_Open shou
210f0 6c 64 20 75 73 65 20 42 54 52 45 45 5f 46 4f 52  ld use BTREE_FOR
21100 44 45 4c 45 54 45 20 2a 2f 0a 23 64 65 66 69 6e  DELETE */.#defin
21110 65 20 4f 50 46 4c 41 47 5f 50 32 49 53 52 45 47  e OPFLAG_P2ISREG
21120 20 20 20 20 20 20 20 30 78 31 30 20 20 20 20 2f         0x10    /
21130 2a 20 50 32 20 74 6f 20 4f 50 5f 4f 70 65 6e 2a  * P2 to OP_Open*
21140 2a 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20  * is a register 
21150 6e 75 6d 62 65 72 20 2a 2f 0a 23 64 65 66 69 6e  number */.#defin
21160 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45  e OPFLAG_PERMUTE
21170 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f         0x01    /
21180 2a 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 75 73  * OP_Compare: us
21190 65 20 74 68 65 20 70 65 72 6d 75 74 61 74 69 6f  e the permutatio
211a0 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  n */.#define OPF
211b0 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e  LAG_SAVEPOSITION
211c0 20 20 30 78 30 32 20 20 20 20 2f 2a 20 4f 50 5f    0x02    /* OP_
211d0 44 65 6c 65 74 65 2f 49 6e 73 65 72 74 3a 20 73  Delete/Insert: s
211e0 61 76 65 20 63 75 72 73 6f 72 20 70 6f 73 20 2a  ave cursor pos *
211f0 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
21200 5f 41 55 58 44 45 4c 45 54 45 20 20 20 20 20 30  _AUXDELETE     0
21210 78 30 34 20 20 20 20 2f 2a 20 4f 50 5f 44 65 6c  x04    /* OP_Del
21220 65 74 65 3a 20 69 6e 64 65 78 20 69 6e 20 61 20  ete: index in a 
21230 44 45 4c 45 54 45 20 6f 70 20 2a 2f 0a 0a 2f 2a  DELETE op */../*
21240 0a 20 2a 20 45 61 63 68 20 74 72 69 67 67 65 72  . * Each trigger
21250 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20   present in the 
21260 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
21270 69 73 20 73 74 6f 72 65 64 20 61 73 20 61 6e 20  is stored as an 
21280 69 6e 73 74 61 6e 63 65 20 6f 66 0a 20 2a 20 73  instance of. * s
21290 74 72 75 63 74 20 54 72 69 67 67 65 72 2e 0a 20  truct Trigger.. 
212a0 2a 0a 20 2a 20 50 6f 69 6e 74 65 72 73 20 74 6f  *. * Pointers to
212b0 20 69 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 74   instances of st
212c0 72 75 63 74 20 54 72 69 67 67 65 72 20 61 72 65  ruct Trigger are
212d0 20 73 74 6f 72 65 64 20 69 6e 20 74 77 6f 20 77   stored in two w
212e0 61 79 73 2e 0a 20 2a 20 31 2e 20 49 6e 20 74 68  ays.. * 1. In th
212f0 65 20 22 74 72 69 67 48 61 73 68 22 20 68 61 73  e "trigHash" has
21300 68 20 74 61 62 6c 65 20 28 70 61 72 74 20 6f 66  h table (part of
21310 20 74 68 65 20 73 71 6c 69 74 65 33 2a 20 74 68   the sqlite3* th
21320 61 74 20 72 65 70 72 65 73 65 6e 74 73 20 74 68  at represents th
21330 65 0a 20 2a 20 20 20 20 64 61 74 61 62 61 73 65  e. *    database
21340 29 2e 20 54 68 69 73 20 61 6c 6c 6f 77 73 20 54  ). This allows T
21350 72 69 67 67 65 72 20 73 74 72 75 63 74 75 72 65  rigger structure
21360 73 20 74 6f 20 62 65 20 72 65 74 72 69 65 76 65  s to be retrieve
21370 64 20 62 79 20 6e 61 6d 65 2e 0a 20 2a 20 32 2e  d by name.. * 2.
21380 20 41 6c 6c 20 74 72 69 67 67 65 72 73 20 61 73   All triggers as
21390 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20  sociated with a 
213a0 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 66 6f 72  single table for
213b0 6d 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 2c  m a linked list,
213c0 20 75 73 69 6e 67 20 74 68 65 0a 20 2a 20 20 20   using the. *   
213d0 20 70 4e 65 78 74 20 6d 65 6d 62 65 72 20 6f 66   pNext member of
213e0 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 2e   struct Trigger.
213f0 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   A pointer to th
21400 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20  e first element 
21410 6f 66 20 74 68 65 0a 20 2a 20 20 20 20 6c 69 6e  of the. *    lin
21420 6b 65 64 20 6c 69 73 74 20 69 73 20 73 74 6f 72  ked list is stor
21430 65 64 20 61 73 20 74 68 65 20 22 70 54 72 69 67  ed as the "pTrig
21440 67 65 72 22 20 6d 65 6d 62 65 72 20 6f 66 20 74  ger" member of t
21450 68 65 20 61 73 73 6f 63 69 61 74 65 64 0a 20 2a  he associated. *
21460 20 20 20 20 73 74 72 75 63 74 20 54 61 62 6c 65      struct Table
21470 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22 73 74 65  .. *. * The "ste
21480 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72 20 70  p_list" member p
21490 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66 69 72  oints to the fir
214a0 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 61 20  st element of a 
214b0 6c 69 6e 6b 65 64 20 6c 69 73 74 0a 20 2a 20 63  linked list. * c
214c0 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 53 51  ontaining the SQ
214d0 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 73 70 65  L statements spe
214e0 63 69 66 69 65 64 20 61 73 20 74 68 65 20 74 72  cified as the tr
214f0 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 0a 20  igger program.. 
21500 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67 65  */.struct Trigge
21510 72 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  r {.  char *zNam
21520 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
21530 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   The name of the
21540 20 74 72 69 67 67 65 72 20 20 20 20 20 20 20 20   trigger        
21550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21560 2a 2f 0a 20 20 63 68 61 72 20 2a 74 61 62 6c 65  */.  char *table
21570 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
21580 54 68 65 20 74 61 62 6c 65 20 6f 72 20 76 69 65  The table or vie
21590 77 20 74 6f 20 77 68 69 63 68 20 74 68 65 20 74  w to which the t
215a0 72 69 67 67 65 72 20 61 70 70 6c 69 65 73 20 2a  rigger applies *
215b0 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20  /.  u8 op;      
215c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
215d0 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c  ne of TK_DELETE,
215e0 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49   TK_UPDATE, TK_I
215f0 4e 53 45 52 54 20 20 20 20 20 20 20 20 20 2a 2f  NSERT         */
21600 0a 20 20 75 38 20 74 72 5f 74 6d 3b 20 20 20 20  .  u8 tr_tm;    
21610 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e             /* On
21620 65 20 6f 66 20 54 52 49 47 47 45 52 5f 42 45 46  e of TRIGGER_BEF
21630 4f 52 45 2c 20 54 52 49 47 47 45 52 5f 41 46 54  ORE, TRIGGER_AFT
21640 45 52 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57  ER */.  Expr *pW
21650 68 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  hen;            
21660 2f 2a 20 54 68 65 20 57 48 45 4e 20 63 6c 61 75  /* The WHEN clau
21670 73 65 20 6f 66 20 74 68 65 20 65 78 70 72 65 73  se of the expres
21680 73 69 6f 6e 20 28 6d 61 79 20 62 65 20 4e 55 4c  sion (may be NUL
21690 4c 29 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a  L) */.  IdList *
216a0 70 43 6f 6c 75 6d 6e 73 3b 20 20 20 20 20 20 20  pColumns;       
216b0 2f 2a 20 49 66 20 74 68 69 73 20 69 73 20 61 6e  /* If this is an
216c0 20 55 50 44 41 54 45 20 4f 46 20 3c 63 6f 6c 75   UPDATE OF <colu
216d0 6d 6e 2d 6c 69 73 74 3e 20 74 72 69 67 67 65 72  mn-list> trigger
216e0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
216f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
21700 68 65 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e  he <column-list>
21710 20 69 73 20 73 74 6f 72 65 64 20 68 65 72 65 20   is stored here 
21720 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63  */.  Schema *pSc
21730 68 65 6d 61 3b 20 20 20 20 20 20 20 20 2f 2a 20  hema;        /* 
21740 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e  Schema containin
21750 67 20 74 68 65 20 74 72 69 67 67 65 72 20 2a 2f  g the trigger */
21760 0a 20 20 53 63 68 65 6d 61 20 2a 70 54 61 62 53  .  Schema *pTabS
21770 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63  chema;     /* Sc
21780 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20  hema containing 
21790 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54  the table */.  T
217a0 72 69 67 67 65 72 53 74 65 70 20 2a 73 74 65 70  riggerStep *step
217b0 5f 6c 69 73 74 3b 20 2f 2a 20 4c 69 6e 6b 20 6c  _list; /* Link l
217c0 69 73 74 20 6f 66 20 74 72 69 67 67 65 72 20 70  ist of trigger p
217d0 72 6f 67 72 61 6d 20 73 74 65 70 73 20 20 20 20  rogram steps    
217e0 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 54 72           */.  Tr
217f0 69 67 67 65 72 20 2a 70 4e 65 78 74 3b 20 20 20  igger *pNext;   
21800 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 74 72        /* Next tr
21810 69 67 67 65 72 20 61 73 73 6f 63 69 61 74 65 64  igger associated
21820 20 77 69 74 68 20 74 68 65 20 74 61 62 6c 65 20   with the table 
21830 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 74  */.};../*.** A t
21840 72 69 67 67 65 72 20 69 73 20 65 69 74 68 65 72  rigger is either
21850 20 61 20 42 45 46 4f 52 45 20 6f 72 20 61 6e 20   a BEFORE or an 
21860 41 46 54 45 52 20 74 72 69 67 67 65 72 2e 20 20  AFTER trigger.  
21870 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f  The following co
21880 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65 74 65 72  nstants.** deter
21890 6d 69 6e 65 20 77 68 69 63 68 2e 0a 2a 2a 0a 2a  mine which..**.*
218a0 2a 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6d  * If there are m
218b0 75 6c 74 69 70 6c 65 20 74 72 69 67 67 65 72 73  ultiple triggers
218c0 2c 20 79 6f 75 20 6d 69 67 68 74 20 6f 66 20 73  , you might of s
218d0 6f 6d 65 20 42 45 46 4f 52 45 20 61 6e 64 20 73  ome BEFORE and s
218e0 6f 6d 65 20 41 46 54 45 52 2e 0a 2a 2a 20 49 6e  ome AFTER..** In
218f0 20 74 68 61 74 20 63 61 73 65 73 2c 20 74 68 65   that cases, the
21900 20 63 6f 6e 73 74 61 6e 74 73 20 62 65 6c 6f 77   constants below
21910 20 63 61 6e 20 62 65 20 4f 52 65 64 20 74 6f 67   can be ORed tog
21920 65 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e  ether..*/.#defin
21930 65 20 54 52 49 47 47 45 52 5f 42 45 46 4f 52 45  e TRIGGER_BEFORE
21940 20 20 31 0a 23 64 65 66 69 6e 65 20 54 52 49 47    1.#define TRIG
21950 47 45 52 5f 41 46 54 45 52 20 20 20 32 0a 0a 2f  GER_AFTER   2../
21960 2a 0a 20 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *. * An instance
21970 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67   of struct Trigg
21980 65 72 53 74 65 70 20 69 73 20 75 73 65 64 20 74  erStep is used t
21990 6f 20 73 74 6f 72 65 20 61 20 73 69 6e 67 6c 65  o store a single
219a0 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 0a 20   SQL statement. 
219b0 2a 20 74 68 61 74 20 69 73 20 61 20 70 61 72 74  * that is a part
219c0 20 6f 66 20 61 20 74 72 69 67 67 65 72 2d 70 72   of a trigger-pr
219d0 6f 67 72 61 6d 2e 0a 20 2a 0a 20 2a 20 49 6e 73  ogram.. *. * Ins
219e0 74 61 6e 63 65 73 20 6f 66 20 73 74 72 75 63 74  tances of struct
219f0 20 54 72 69 67 67 65 72 53 74 65 70 20 61 72 65   TriggerStep are
21a00 20 73 74 6f 72 65 64 20 69 6e 20 61 20 73 69 6e   stored in a sin
21a10 67 6c 79 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  gly linked list 
21a20 28 6c 69 6e 6b 65 64 0a 20 2a 20 75 73 69 6e 67  (linked. * using
21a30 20 74 68 65 20 22 70 4e 65 78 74 22 20 6d 65 6d   the "pNext" mem
21a40 62 65 72 29 20 72 65 66 65 72 65 6e 63 65 64 20  ber) referenced 
21a50 62 79 20 74 68 65 20 22 73 74 65 70 5f 6c 69 73  by the "step_lis
21a60 74 22 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65  t" member of the
21a70 0a 20 2a 20 61 73 73 6f 63 69 61 74 65 64 20 73  . * associated s
21a80 74 72 75 63 74 20 54 72 69 67 67 65 72 20 69 6e  truct Trigger in
21a90 73 74 61 6e 63 65 2e 20 54 68 65 20 66 69 72 73  stance. The firs
21aa0 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65  t element of the
21ab0 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69 73 0a   linked list is.
21ac0 20 2a 20 74 68 65 20 66 69 72 73 74 20 73 74 65   * the first ste
21ad0 70 20 6f 66 20 74 68 65 20 74 72 69 67 67 65 72  p of the trigger
21ae0 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a 0a 20 2a 20  -program.. *. * 
21af0 54 68 65 20 22 6f 70 22 20 6d 65 6d 62 65 72 20  The "op" member 
21b00 69 6e 64 69 63 61 74 65 73 20 77 68 65 74 68 65  indicates whethe
21b10 72 20 74 68 69 73 20 69 73 20 61 20 22 44 45 4c  r this is a "DEL
21b20 45 54 45 22 2c 20 22 49 4e 53 45 52 54 22 2c 20  ETE", "INSERT", 
21b30 22 55 50 44 41 54 45 22 20 6f 72 0a 20 2a 20 22  "UPDATE" or. * "
21b40 53 45 4c 45 43 54 22 20 73 74 61 74 65 6d 65 6e  SELECT" statemen
21b50 74 2e 20 54 68 65 20 6d 65 61 6e 69 6e 67 73 20  t. The meanings 
21b60 6f 66 20 74 68 65 20 6f 74 68 65 72 20 6d 65 6d  of the other mem
21b70 62 65 72 73 20 69 73 20 64 65 74 65 72 6d 69 6e  bers is determin
21b80 65 64 20 62 79 20 74 68 65 0a 20 2a 20 76 61 6c  ed by the. * val
21b90 75 65 20 6f 66 20 22 6f 70 22 20 61 73 20 66 6f  ue of "op" as fo
21ba0 6c 6c 6f 77 73 3a 0a 20 2a 0a 20 2a 20 28 6f 70  llows:. *. * (op
21bb0 20 3d 3d 20 54 4b 5f 49 4e 53 45 52 54 29 0a 20   == TK_INSERT). 
21bc0 2a 20 6f 72 63 6f 6e 66 20 20 20 20 2d 3e 20 73  * orconf    -> s
21bd0 74 6f 72 65 73 20 74 68 65 20 4f 4e 20 43 4f 4e  tores the ON CON
21be0 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68 6d 0a  FLICT algorithm.
21bf0 20 2a 20 70 53 65 6c 65 63 74 20 20 20 2d 3e 20   * pSelect   -> 
21c00 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e  If this is an IN
21c10 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 53 45  SERT INTO ... SE
21c20 4c 45 43 54 20 2e 2e 2e 20 73 74 61 74 65 6d 65  LECT ... stateme
21c30 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20 20  nt, then. *     
21c40 20 20 20 20 20 20 20 20 20 74 68 69 73 20 73 74           this st
21c50 6f 72 65 73 20 61 20 70 6f 69 6e 74 65 72 20 74  ores a pointer t
21c60 6f 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61  o the SELECT sta
21c70 74 65 6d 65 6e 74 2e 20 4f 74 68 65 72 77 69 73  tement. Otherwis
21c80 65 20 4e 55 4c 4c 2e 0a 20 2a 20 7a 54 61 72 67  e NULL.. * zTarg
21c90 65 74 20 20 20 2d 3e 20 44 65 71 75 6f 74 65 64  et   -> Dequoted
21ca0 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
21cb0 6c 65 20 74 6f 20 69 6e 73 65 72 74 20 69 6e 74  le to insert int
21cc0 6f 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73 74 20  o.. * pExprList 
21cd0 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20 61 6e  -> If this is an
21ce0 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e   INSERT INTO ...
21cf0 20 56 41 4c 55 45 53 20 2e 2e 2e 20 73 74 61 74   VALUES ... stat
21d00 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20  ement, then. *  
21d10 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
21d20 20 73 74 6f 72 65 73 20 76 61 6c 75 65 73 20 74   stores values t
21d30 6f 20 62 65 20 69 6e 73 65 72 74 65 64 2e 20 4f  o be inserted. O
21d40 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20  therwise NULL.. 
21d50 2a 20 70 49 64 4c 69 73 74 20 20 20 2d 3e 20 49  * pIdList   -> I
21d60 66 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53  f this is an INS
21d70 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 28 3c 63  ERT INTO ... (<c
21d80 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 3e 29 20 56 41  olumn-names>) VA
21d90 4c 55 45 53 20 2e 2e 2e 0a 20 2a 20 20 20 20 20  LUES .... *     
21da0 20 20 20 20 20 20 20 20 20 73 74 61 74 65 6d 65           stateme
21db0 6e 74 2c 20 74 68 65 6e 20 74 68 69 73 20 73 74  nt, then this st
21dc0 6f 72 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 2d  ores the column-
21dd0 6e 61 6d 65 73 20 74 6f 20 62 65 0a 20 2a 20 20  names to be. *  
21de0 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 73 65              inse
21df0 72 74 65 64 20 69 6e 74 6f 2e 0a 20 2a 0a 20 2a  rted into.. *. *
21e00 20 28 6f 70 20 3d 3d 20 54 4b 5f 44 45 4c 45 54   (op == TK_DELET
21e10 45 29 0a 20 2a 20 7a 54 61 72 67 65 74 20 20 20  E). * zTarget   
21e20 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e 61 6d 65  -> Dequoted name
21e30 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f   of the table to
21e40 20 64 65 6c 65 74 65 20 66 72 6f 6d 2e 0a 20 2a   delete from.. *
21e50 20 70 57 68 65 72 65 20 20 20 20 2d 3e 20 54 68   pWhere    -> Th
21e60 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f  e WHERE clause o
21e70 66 20 74 68 65 20 44 45 4c 45 54 45 20 73 74 61  f the DELETE sta
21e80 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69 73  tement if one is
21e90 20 73 70 65 63 69 66 69 65 64 2e 0a 20 2a 20 20   specified.. *  
21ea0 20 20 20 20 20 20 20 20 20 20 20 20 4f 74 68 65              Othe
21eb0 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 0a 20  rwise NULL.. *. 
21ec0 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 55 50 44 41  * (op == TK_UPDA
21ed0 54 45 29 0a 20 2a 20 7a 54 61 72 67 65 74 20 20  TE). * zTarget  
21ee0 20 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e 61 6d   -> Dequoted nam
21ef0 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  e of the table t
21f00 6f 20 75 70 64 61 74 65 2e 0a 20 2a 20 70 57 68  o update.. * pWh
21f10 65 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57 48  ere    -> The WH
21f20 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68  ERE clause of th
21f30 65 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65  e UPDATE stateme
21f40 6e 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70 65  nt if one is spe
21f50 63 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20 20  cified.. *      
21f60 20 20 20 20 20 20 20 20 4f 74 68 65 72 77 69 73          Otherwis
21f70 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 45 78 70 72  e NULL.. * pExpr
21f80 4c 69 73 74 20 2d 3e 20 41 20 6c 69 73 74 20 6f  List -> A list o
21f90 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 74 6f  f the columns to
21fa0 20 75 70 64 61 74 65 20 61 6e 64 20 74 68 65 20   update and the 
21fb0 65 78 70 72 65 73 73 69 6f 6e 73 20 74 6f 20 75  expressions to u
21fc0 70 64 61 74 65 0a 20 2a 20 20 20 20 20 20 20 20  pdate. *        
21fd0 20 20 20 20 20 20 74 68 65 6d 20 74 6f 2e 20 53        them to. S
21fe0 65 65 20 73 71 6c 69 74 65 33 55 70 64 61 74 65  ee sqlite3Update
21ff0 28 29 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e  () documentation
22000 20 6f 66 20 22 70 43 68 61 6e 67 65 73 22 0a 20   of "pChanges". 
22010 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61  *              a
22020 72 67 75 6d 65 6e 74 2e 0a 20 2a 0a 20 2a 2f 0a  rgument.. *. */.
22030 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74  struct TriggerSt
22040 65 70 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20  ep {.  u8 op;   
22050 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
22060 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c  ne of TK_DELETE,
22070 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49   TK_UPDATE, TK_I
22080 4e 53 45 52 54 2c 20 54 4b 5f 53 45 4c 45 43 54  NSERT, TK_SELECT
22090 20 2a 2f 0a 20 20 75 38 20 6f 72 63 6f 6e 66 3b   */.  u8 orconf;
220a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 45             /* OE
220b0 5f 52 6f 6c 6c 62 61 63 6b 20 65 74 63 2e 20 2a  _Rollback etc. *
220c0 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54 72  /.  Trigger *pTr
220d0 69 67 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ig;      /* The 
220e0 74 72 69 67 67 65 72 20 74 68 61 74 20 74 68 69  trigger that thi
220f0 73 20 73 74 65 70 20 69 73 20 61 20 70 61 72 74  s step is a part
22100 20 6f 66 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20   of */.  Select 
22110 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a  *pSelect;     /*
22120 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
22130 74 20 6f 72 20 52 48 53 20 6f 66 20 49 4e 53 45  t or RHS of INSE
22140 52 54 20 49 4e 54 4f 20 53 45 4c 45 43 54 20 2e  RT INTO SELECT .
22150 2e 2e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54  .. */.  char *zT
22160 61 72 67 65 74 3b 20 20 20 20 20 20 20 2f 2a 20  arget;       /* 
22170 54 61 72 67 65 74 20 74 61 62 6c 65 20 66 6f 72  Target table for
22180 20 44 45 4c 45 54 45 2c 20 55 50 44 41 54 45 2c   DELETE, UPDATE,
22190 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 45 78 70   INSERT */.  Exp
221a0 72 20 2a 70 57 68 65 72 65 3b 20 20 20 20 20 20  r *pWhere;      
221b0 20 20 2f 2a 20 54 68 65 20 57 48 45 52 45 20 63    /* The WHERE c
221c0 6c 61 75 73 65 20 66 6f 72 20 44 45 4c 45 54 45  lause for DELETE
221d0 20 6f 72 20 55 50 44 41 54 45 20 73 74 65 70 73   or UPDATE steps
221e0 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
221f0 70 45 78 70 72 4c 69 73 74 3b 20 2f 2a 20 53 45  pExprList; /* SE
22200 54 20 63 6c 61 75 73 65 20 66 6f 72 20 55 50 44  T clause for UPD
22210 41 54 45 2e 20 2a 2f 0a 20 20 49 64 4c 69 73 74  ATE. */.  IdList
22220 20 2a 70 49 64 4c 69 73 74 3b 20 20 20 20 20 2f   *pIdList;     /
22230 2a 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 66  * Column names f
22240 6f 72 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 54  or INSERT */.  T
22250 72 69 67 67 65 72 53 74 65 70 20 2a 70 4e 65 78  riggerStep *pNex
22260 74 3b 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 74  t;  /* Next in t
22270 68 65 20 6c 69 6e 6b 2d 6c 69 73 74 20 2a 2f 0a  he link-list */.
22280 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 70    TriggerStep *p
22290 4c 61 73 74 3b 20 20 2f 2a 20 4c 61 73 74 20 65  Last;  /* Last e
222a0 6c 65 6d 65 6e 74 20 69 6e 20 6c 69 6e 6b 2d 6c  lement in link-l
222b0 69 73 74 2e 20 56 61 6c 69 64 20 66 6f 72 20 31  ist. Valid for 1
222c0 73 74 20 65 6c 65 6d 20 6f 6e 6c 79 20 2a 2f 0a  st elem only */.
222d0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  };../*.** The fo
222e0 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
222f0 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72  e contains infor
22300 6d 61 74 69 6f 6e 20 75 73 65 64 20 62 79 20 74  mation used by t
22310 68 65 20 73 71 6c 69 74 65 46 69 78 2e 2e 2e 0a  he sqliteFix....
22320 2a 2a 20 72 6f 75 74 69 6e 65 73 20 61 73 20 74  ** routines as t
22330 68 65 79 20 77 61 6c 6b 20 74 68 65 20 70 61 72  hey walk the par
22340 73 65 20 74 72 65 65 20 74 6f 20 6d 61 6b 65 20  se tree to make 
22350 64 61 74 61 62 61 73 65 20 72 65 66 65 72 65 6e  database referen
22360 63 65 73 0a 2a 2a 20 65 78 70 6c 69 63 69 74 2e  ces.** explicit.
22370 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75  .*/.typedef stru
22380 63 74 20 44 62 46 69 78 65 72 20 44 62 46 69 78  ct DbFixer DbFix
22390 65 72 3b 0a 73 74 72 75 63 74 20 44 62 46 69 78  er;.struct DbFix
223a0 65 72 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50  er {.  Parse *pP
223b0 61 72 73 65 3b 20 20 20 20 20 20 2f 2a 20 54 68  arse;      /* Th
223c0 65 20 70 61 72 73 69 6e 67 20 63 6f 6e 74 65 78  e parsing contex
223d0 74 2e 20 20 45 72 72 6f 72 20 6d 65 73 73 61 67  t.  Error messag
223e0 65 73 20 77 72 69 74 74 65 6e 20 68 65 72 65 20  es written here 
223f0 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63  */.  Schema *pSc
22400 68 65 6d 61 3b 20 20 20 20 2f 2a 20 46 69 78 20  hema;    /* Fix 
22410 69 74 65 6d 73 20 74 6f 20 74 68 69 73 20 73 63  items to this sc
22420 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 62 56  hema */.  int bV
22430 61 72 4f 6e 6c 79 3b 20 20 20 20 20 20 20 2f 2a  arOnly;       /*
22440 20 43 68 65 63 6b 20 66 6f 72 20 76 61 72 69 61   Check for varia
22450 62 6c 65 20 72 65 66 65 72 65 6e 63 65 73 20 6f  ble references o
22460 6e 6c 79 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  nly */.  const c
22470 68 61 72 20 2a 7a 44 62 3b 20 20 20 20 2f 2a 20  har *zDb;    /* 
22480 4d 61 6b 65 20 73 75 72 65 20 61 6c 6c 20 6f 62  Make sure all ob
22490 6a 65 63 74 73 20 61 72 65 20 63 6f 6e 74 61 69  jects are contai
224a0 6e 65 64 20 69 6e 20 74 68 69 73 20 64 61 74 61  ned in this data
224b0 62 61 73 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  base */.  const 
224c0 63 68 61 72 20 2a 7a 54 79 70 65 3b 20 20 2f 2a  char *zType;  /*
224d0 20 54 79 70 65 20 6f 66 20 74 68 65 20 63 6f 6e   Type of the con
224e0 74 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f  tainer - used fo
224f0 72 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73  r error messages
22500 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 54 6f 6b 65   */.  const Toke
22510 6e 20 2a 70 4e 61 6d 65 3b 20 2f 2a 20 4e 61 6d  n *pName; /* Nam
22520 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e  e of the contain
22530 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72  er - used for er
22540 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a  ror messages */.
22550 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a  };../*.** An obj
22560 65 63 74 65 64 20 75 73 65 64 20 74 6f 20 61 63  ected used to ac
22570 63 75 6d 75 6c 61 74 65 20 74 68 65 20 74 65 78  cumulate the tex
22580 74 20 6f 66 20 61 20 73 74 72 69 6e 67 20 77 68  t of a string wh
22590 65 72 65 20 77 65 0a 2a 2a 20 64 6f 20 6e 6f 74  ere we.** do not
225a0 20 6e 65 63 65 73 73 61 72 69 6c 79 20 6b 6e 6f   necessarily kno
225b0 77 20 68 6f 77 20 62 69 67 20 74 68 65 20 73 74  w how big the st
225c0 72 69 6e 67 20 77 69 6c 6c 20 62 65 20 69 6e 20  ring will be in 
225d0 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75  the end..*/.stru
225e0 63 74 20 53 74 72 41 63 63 75 6d 20 7b 0a 20 20  ct StrAccum {.  
225f0 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20  sqlite3 *db;    
22600 20 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c       /* Optional
22610 20 64 61 74 61 62 61 73 65 20 66 6f 72 20 6c 6f   database for lo
22620 6f 6b 61 73 69 64 65 2e 20 20 43 61 6e 20 62 65  okaside.  Can be
22630 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63 68 61 72 20   NULL */.  char 
22640 2a 7a 54 65 78 74 3b 20 20 20 20 20 20 20 20 20  *zText;         
22650 2f 2a 20 54 68 65 20 73 74 72 69 6e 67 20 63 6f  /* The string co
22660 6c 6c 65 63 74 65 64 20 73 6f 20 66 61 72 20 2a  llected so far *
22670 2f 0a 20 20 75 33 32 20 20 6e 41 6c 6c 6f 63 3b  /.  u32  nAlloc;
22680 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6d 6f 75           /* Amou
22690 6e 74 20 6f 66 20 73 70 61 63 65 20 61 6c 6c 6f  nt of space allo
226a0 63 61 74 65 64 20 69 6e 20 7a 54 65 78 74 20 2a  cated in zText *
226b0 2f 0a 20 20 75 33 32 20 20 6d 78 41 6c 6c 6f 63  /.  u32  mxAlloc
226c0 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69  ;        /* Maxi
226d0 6d 75 6d 20 61 6c 6c 6f 77 65 64 20 61 6c 6c 6f  mum allowed allo
226e0 63 61 74 69 6f 6e 2e 20 20 30 20 66 6f 72 20 6e  cation.  0 for n
226f0 6f 20 6d 61 6c 6c 6f 63 20 75 73 61 67 65 20 2a  o malloc usage *
22700 2f 0a 20 20 75 33 32 20 20 6e 43 68 61 72 3b 20  /.  u32  nChar; 
22710 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67           /* Leng
22720 74 68 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67  th of the string
22730 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 75 38 20   so far */.  u8 
22740 20 20 61 63 63 45 72 72 6f 72 3b 20 20 20 20 20    accError;     
22750 20 20 2f 2a 20 53 54 52 41 43 43 55 4d 5f 4e 4f    /* STRACCUM_NO
22760 4d 45 4d 20 6f 72 20 53 54 52 41 43 43 55 4d 5f  MEM or STRACCUM_
22770 54 4f 4f 42 49 47 20 2a 2f 0a 20 20 75 38 20 20  TOOBIG */.  u8  
22780 20 70 72 69 6e 74 66 46 6c 61 67 73 3b 20 20 20   printfFlags;   
22790 20 2f 2a 20 53 51 4c 49 54 45 5f 50 52 49 4e 54   /* SQLITE_PRINT
227a0 46 20 66 6c 61 67 73 20 62 65 6c 6f 77 20 2a 2f  F flags below */
227b0 0a 7d 3b 0a 23 64 65 66 69 6e 65 20 53 54 52 41  .};.#define STRA
227c0 43 43 55 4d 5f 4e 4f 4d 45 4d 20 20 20 31 0a 23  CCUM_NOMEM   1.#
227d0 64 65 66 69 6e 65 20 53 54 52 41 43 43 55 4d 5f  define STRACCUM_
227e0 54 4f 4f 42 49 47 20 20 32 0a 23 64 65 66 69 6e  TOOBIG  2.#defin
227f0 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f  e SQLITE_PRINTF_
22800 49 4e 54 45 52 4e 41 4c 20 30 78 30 31 20 20 2f  INTERNAL 0x01  /
22810 2a 20 49 6e 74 65 72 6e 61 6c 2d 75 73 65 2d 6f  * Internal-use-o
22820 6e 6c 79 20 63 6f 6e 76 65 72 74 65 72 73 20 61  nly converters a
22830 6c 6c 6f 77 65 64 20 2a 2f 0a 23 64 65 66 69 6e  llowed */.#defin
22840 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f  e SQLITE_PRINTF_
22850 53 51 4c 46 55 4e 43 20 20 30 78 30 32 20 20 2f  SQLFUNC  0x02  /
22860 2a 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 61  * SQL function a
22870 72 67 75 6d 65 6e 74 73 20 74 6f 20 56 58 50 72  rguments to VXPr
22880 69 6e 74 66 20 2a 2f 0a 23 64 65 66 69 6e 65 20  intf */.#define 
22890 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 4d 41  SQLITE_PRINTF_MA
228a0 4c 4c 4f 43 45 44 20 30 78 30 34 20 20 2f 2a 20  LLOCED 0x04  /* 
228b0 54 72 75 65 20 69 66 20 78 54 65 78 74 20 69 73  True if xText is
228c0 20 61 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65   allocated space
228d0 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 69 73 4d   */..#define isM
228e0 61 6c 6c 6f 63 65 64 28 58 29 20 20 28 28 28 58  alloced(X)  (((X
228f0 29 2d 3e 70 72 69 6e 74 66 46 6c 61 67 73 20 26  )->printfFlags &
22900 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 4d   SQLITE_PRINTF_M
22910 41 4c 4c 4f 43 45 44 29 21 3d 30 29 0a 0a 0a 2f  ALLOCED)!=0).../
22920 2a 0a 2a 2a 20 41 20 70 6f 69 6e 74 65 72 20 74  *.** A pointer t
22930 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  o this structure
22940 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 6d   is used to comm
22950 75 6e 69 63 61 74 65 20 69 6e 66 6f 72 6d 61 74  unicate informat
22960 69 6f 6e 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c 69  ion.** from sqli
22970 74 65 33 49 6e 69 74 20 61 6e 64 20 4f 50 5f 50  te3Init and OP_P
22980 61 72 73 65 53 63 68 65 6d 61 20 69 6e 74 6f 20  arseSchema into 
22990 74 68 65 20 73 71 6c 69 74 65 33 49 6e 69 74 43  the sqlite3InitC
229a0 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 74 79 70 65  allback..*/.type
229b0 64 65 66 20 73 74 72 75 63 74 20 7b 0a 20 20 73  def struct {.  s
229c0 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
229d0 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
229e0 73 65 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c  se being initial
229f0 69 7a 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a  ized */.  char *
22a00 2a 70 7a 45 72 72 4d 73 67 3b 20 20 20 20 2f 2a  *pzErrMsg;    /*
22a10 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73   Error message s
22a20 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20  tored here */.  
22a30 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20 20  int iDb;        
22a40 20 20 20 20 2f 2a 20 30 20 66 6f 72 20 6d 61 69      /* 0 for mai
22a50 6e 20 64 61 74 61 62 61 73 65 2e 20 20 31 20 66  n database.  1 f
22a60 6f 72 20 54 45 4d 50 2c 20 32 2e 2e 20 66 6f 72  or TEMP, 2.. for
22a70 20 41 54 54 41 43 48 65 64 20 2a 2f 0a 20 20 69   ATTACHed */.  i
22a80 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20 20 20  nt rc;          
22a90 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 63 6f 64     /* Result cod
22aa0 65 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f  e stored here */
22ab0 0a 7d 20 49 6e 69 74 44 61 74 61 3b 0a 0a 2f 2a  .} InitData;../*
22ac0 0a 2a 2a 20 53 74 72 75 63 74 75 72 65 20 63 6f  .** Structure co
22ad0 6e 74 61 69 6e 69 6e 67 20 67 6c 6f 62 61 6c 20  ntaining global 
22ae0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 64 61  configuration da
22af0 74 61 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74  ta for the SQLit
22b00 65 20 6c 69 62 72 61 72 79 2e 0a 2a 2a 0a 2a 2a  e library..**.**
22b10 20 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20   This structure 
22b20 61 6c 73 6f 20 63 6f 6e 74 61 69 6e 73 20 73 6f  also contains so
22b30 6d 65 20 73 74 61 74 65 20 69 6e 66 6f 72 6d 61  me state informa
22b40 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tion..*/.struct 
22b50 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 20 7b 0a  Sqlite3Config {.
22b60 20 20 69 6e 74 20 62 4d 65 6d 73 74 61 74 3b 20    int bMemstat; 
22b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b80 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65      /* True to e
22b90 6e 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73 74 61  nable memory sta
22ba0 74 75 73 20 2a 2f 0a 20 20 69 6e 74 20 62 43 6f  tus */.  int bCo
22bb0 72 65 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20  reMutex;        
22bc0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
22bd0 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 63 6f 72  ue to enable cor
22be0 65 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20  e mutexing */.  
22bf0 69 6e 74 20 62 46 75 6c 6c 4d 75 74 65 78 3b 20  int bFullMutex; 
22c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22c10 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61    /* True to ena
22c20 62 6c 65 20 66 75 6c 6c 20 6d 75 74 65 78 69 6e  ble full mutexin
22c30 67 20 2a 2f 0a 20 20 69 6e 74 20 62 4f 70 65 6e  g */.  int bOpen
22c40 55 72 69 3b 20 20 20 20 20 20 20 20 20 20 20 20  Uri;            
22c50 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
22c60 20 74 6f 20 69 6e 74 65 72 70 72 65 74 20 66 69   to interpret fi
22c70 6c 65 6e 61 6d 65 73 20 61 73 20 55 52 49 73 20  lenames as URIs 
22c80 2a 2f 0a 20 20 69 6e 74 20 62 55 73 65 43 69 73  */.  int bUseCis
22c90 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
22ca0 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 63 6f         /* Use co
22cb0 76 65 72 69 6e 67 20 69 6e 64 69 63 65 73 20 66  vering indices f
22cc0 6f 72 20 66 75 6c 6c 2d 73 63 61 6e 73 20 2a 2f  or full-scans */
22cd0 0a 20 20 69 6e 74 20 62 53 6d 61 6c 6c 4d 61 6c  .  int bSmallMal
22ce0 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  loc;            
22cf0 20 20 20 20 20 2f 2a 20 41 76 6f 69 64 20 6c 61       /* Avoid la
22d00 72 67 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  rge memory alloc
22d10 61 74 69 6f 6e 73 20 69 66 20 74 72 75 65 20 2a  ations if true *
22d20 2f 0a 20 20 69 6e 74 20 6d 78 53 74 72 6c 65 6e  /.  int mxStrlen
22d30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
22d40 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d        /* Maximum
22d50 20 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 2a   string length *
22d60 2f 0a 20 20 69 6e 74 20 6e 65 76 65 72 43 6f 72  /.  int neverCor
22d70 72 75 70 74 3b 20 20 20 20 20 20 20 20 20 20 20  rupt;           
22d80 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73        /* Databas
22d90 65 20 69 73 20 61 6c 77 61 79 73 20 77 65 6c 6c  e is always well
22da0 2d 66 6f 72 6d 65 64 20 2a 2f 0a 20 20 69 6e 74  -formed */.  int
22db0 20 73 7a 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20   szLookaside;   
22dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
22dd0 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73  * Default lookas
22de0 69 64 65 20 62 75 66 66 65 72 20 73 69 7a 65 20  ide buffer size 
22df0 2a 2f 0a 20 20 69 6e 74 20 6e 4c 6f 6f 6b 61 73  */.  int nLookas
22e00 69 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ide;            
22e10 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c         /* Defaul
22e20 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66 66  t lookaside buff
22e30 65 72 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 69 6e  er count */.  in
22e40 74 20 6e 53 74 6d 74 53 70 69 6c 6c 3b 20 20 20  t nStmtSpill;   
22e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e60 2f 2a 20 53 74 6d 74 2d 6a 6f 75 72 6e 61 6c 20  /* Stmt-journal 
22e70 73 70 69 6c 6c 2d 74 6f 2d 64 69 73 6b 20 74 68  spill-to-disk th
22e80 72 65 73 68 6f 6c 64 20 2a 2f 0a 20 20 73 71 6c  reshold */.  sql
22e90 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73  ite3_mem_methods
22ea0 20 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f   m;            /
22eb0 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 65 6d 6f  * Low-level memo
22ec0 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e  ry allocation in
22ed0 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c  terface */.  sql
22ee0 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f  ite3_mutex_metho
22ef0 64 73 20 6d 75 74 65 78 3b 20 20 20 20 20 20 2f  ds mutex;      /
22f00 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 75 74 65  * Low-level mute
22f10 78 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20  x interface */. 
22f20 20 73 71 6c 69 74 65 33 5f 70 63 61 63 68 65 5f   sqlite3_pcache_
22f30 6d 65 74 68 6f 64 73 32 20 70 63 61 63 68 65 32  methods2 pcache2
22f40 3b 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20  ;  /* Low-level 
22f50 70 61 67 65 2d 63 61 63 68 65 20 69 6e 74 65 72  page-cache inter
22f60 66 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  face */.  void *
22f70 70 48 65 61 70 3b 20 20 20 20 20 20 20 20 20 20  pHeap;          
22f80 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48              /* H
22f90 65 61 70 20 73 74 6f 72 61 67 65 20 73 70 61 63  eap storage spac
22fa0 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 61 70  e */.  int nHeap
22fb0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
22fc0 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
22fd0 20 6f 66 20 70 48 65 61 70 5b 5d 20 2a 2f 0a 20   of pHeap[] */. 
22fe0 20 69 6e 74 20 6d 6e 52 65 71 2c 20 6d 78 52 65   int mnReq, mxRe
22ff0 71 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  q;              
23000 20 20 20 2f 2a 20 4d 69 6e 20 61 6e 64 20 6d 61     /* Min and ma
23010 78 20 68 65 61 70 20 72 65 71 75 65 73 74 73 20  x heap requests 
23020 73 69 7a 65 73 20 2a 2f 0a 20 20 73 71 6c 69 74  sizes */.  sqlit
23030 65 33 5f 69 6e 74 36 34 20 73 7a 4d 6d 61 70 3b  e3_int64 szMmap;
23040 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
23050 6d 6d 61 70 28 29 20 73 70 61 63 65 20 70 65 72  mmap() space per
23060 20 6f 70 65 6e 20 66 69 6c 65 20 2a 2f 0a 20 20   open file */.  
23070 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 6d 78  sqlite3_int64 mx
23080 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20  Mmap;           
23090 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 76 61 6c    /* Maximum val
230a0 75 65 20 66 6f 72 20 73 7a 4d 6d 61 70 20 2a 2f  ue for szMmap */
230b0 0a 20 20 76 6f 69 64 20 2a 70 50 61 67 65 3b 20  .  void *pPage; 
230c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
230d0 20 20 20 20 20 2f 2a 20 50 61 67 65 20 63 61 63       /* Page cac
230e0 68 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69  he memory */.  i
230f0 6e 74 20 73 7a 50 61 67 65 3b 20 20 20 20 20 20  nt szPage;      
23100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23110 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68   /* Size of each
23120 20 70 61 67 65 20 69 6e 20 70 50 61 67 65 5b 5d   page in pPage[]
23130 20 2a 2f 0a 20 20 69 6e 74 20 6e 50 61 67 65 3b   */.  int nPage;
23140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23150 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
23160 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 70 50  r of pages in pP
23170 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d  age[] */.  int m
23180 78 50 61 72 73 65 72 53 74 61 63 6b 3b 20 20 20  xParserStack;   
23190 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
231a0 6d 61 78 69 6d 75 6d 20 64 65 70 74 68 20 6f 66  maximum depth of
231b0 20 74 68 65 20 70 61 72 73 65 72 20 73 74 61 63   the parser stac
231c0 6b 20 2a 2f 0a 20 20 69 6e 74 20 73 68 61 72 65  k */.  int share
231d0 64 43 61 63 68 65 45 6e 61 62 6c 65 64 3b 20 20  dCacheEnabled;  
231e0 20 20 20 20 20 20 20 20 20 2f 2a 20 74 72 75 65           /* true
231f0 20 69 66 20 73 68 61 72 65 64 2d 63 61 63 68 65   if shared-cache
23200 20 6d 6f 64 65 20 65 6e 61 62 6c 65 64 20 2a 2f   mode enabled */
23210 0a 20 20 75 33 32 20 73 7a 50 6d 61 3b 20 20 20  .  u32 szPma;   
23220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23230 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20       /* Maximum 
23240 53 6f 72 74 65 72 20 50 4d 41 20 73 69 7a 65 20  Sorter PMA size 
23250 2a 2f 0a 20 20 2f 2a 20 54 68 65 20 61 62 6f 76  */.  /* The abov
23260 65 20 6d 69 67 68 74 20 62 65 20 69 6e 69 74 69  e might be initi
23270 61 6c 69 7a 65 64 20 74 6f 20 6e 6f 6e 2d 7a 65  alized to non-ze
23280 72 6f 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69  ro.  The followi
23290 6e 67 20 6e 65 65 64 20 74 6f 20 61 6c 77 61 79  ng need to alway
232a0 73 0a 20 20 2a 2a 20 69 6e 69 74 69 61 6c 6c 79  s.  ** initially
232b0 20 62 65 20 7a 65 72 6f 2c 20 68 6f 77 65 76 65   be zero, howeve
232c0 72 2e 20 2a 2f 0a 20 20 69 6e 74 20 69 73 49 6e  r. */.  int isIn
232d0 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  it;             
232e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
232f0 65 20 61 66 74 65 72 20 69 6e 69 74 69 61 6c 69  e after initiali
23300 7a 61 74 69 6f 6e 20 68 61 73 20 66 69 6e 69 73  zation has finis
23310 68 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 6e 50  hed */.  int inP
23320 72 6f 67 72 65 73 73 3b 20 20 20 20 20 20 20 20  rogress;        
23330 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
23340 75 65 20 77 68 69 6c 65 20 69 6e 69 74 69 61 6c  ue while initial
23350 69 7a 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72  ization in progr
23360 65 73 73 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d  ess */.  int isM
23370 75 74 65 78 49 6e 69 74 3b 20 20 20 20 20 20 20  utexInit;       
23380 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
23390 75 65 20 61 66 74 65 72 20 6d 75 74 65 78 65 73  ue after mutexes
233a0 20 61 72 65 20 69 6e 69 74 69 61 6c 69 7a 65 64   are initialized
233b0 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 61 6c 6c   */.  int isMall
233c0 6f 63 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20  ocInit;         
233d0 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
233e0 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20  after malloc is 
233f0 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20  initialized */. 
23400 20 69 6e 74 20 69 73 50 43 61 63 68 65 49 6e 69   int isPCacheIni
23410 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
23420 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72     /* True after
23430 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69   malloc is initi
23440 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20  alized */.  int 
23450 6e 52 65 66 49 6e 69 74 4d 75 74 65 78 3b 20 20  nRefInitMutex;  
23460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
23470 20 4e 75 6d 62 65 72 20 6f 66 20 75 73 65 72 73   Number of users
23480 20 6f 66 20 70 49 6e 69 74 4d 75 74 65 78 20 2a   of pInitMutex *
23490 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  /.  sqlite3_mute
234a0 78 20 2a 70 49 6e 69 74 4d 75 74 65 78 3b 20 20  x *pInitMutex;  
234b0 20 20 20 20 20 20 2f 2a 20 4d 75 74 65 78 20 75        /* Mutex u
234c0 73 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 69  sed by sqlite3_i
234d0 6e 69 74 69 61 6c 69 7a 65 28 29 20 2a 2f 0a 20  nitialize() */. 
234e0 20 76 6f 69 64 20 28 2a 78 4c 6f 67 29 28 76 6f   void (*xLog)(vo
234f0 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  id*,int,const ch
23500 61 72 2a 29 3b 20 2f 2a 20 46 75 6e 63 74 69 6f  ar*); /* Functio
23510 6e 20 66 6f 72 20 6c 6f 67 67 69 6e 67 20 2a 2f  n for logging */
23520 0a 20 20 76 6f 69 64 20 2a 70 4c 6f 67 41 72 67  .  void *pLogArg
23530 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
23540 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
23550 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 4c 6f   argument to xLo
23560 67 28 29 20 2a 2f 0a 23 69 66 64 65 66 20 53 51  g() */.#ifdef SQ
23570 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 51 4c 4c  LITE_ENABLE_SQLL
23580 4f 47 0a 20 20 76 6f 69 64 28 2a 78 53 71 6c 6c  OG.  void(*xSqll
23590 6f 67 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65  og)(void*,sqlite
235a0 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  3*,const char*, 
235b0 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70 53  int);.  void *pS
235c0 71 6c 6c 6f 67 41 72 67 3b 0a 23 65 6e 64 69 66  qllogArg;.#endif
235d0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 56  .#ifdef SQLITE_V
235e0 44 42 45 5f 43 4f 56 45 52 41 47 45 0a 20 20 2f  DBE_COVERAGE.  /
235f0 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
23600 63 61 6c 6c 62 61 63 6b 20 28 69 66 20 6e 6f 74  callback (if not
23610 20 4e 55 4c 4c 29 20 69 73 20 69 6e 76 6f 6b 65   NULL) is invoke
23620 64 20 6f 6e 20 65 76 65 72 79 20 56 44 42 45 20  d on every VDBE 
23630 62 72 61 6e 63 68 0a 20 20 2a 2a 20 6f 70 65 72  branch.  ** oper
23640 61 74 69 6f 6e 2e 20 20 53 65 74 20 74 68 65 20  ation.  Set the 
23650 63 61 6c 6c 62 61 63 6b 20 75 73 69 6e 67 20 53  callback using S
23660 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 56  QLITE_TESTCTRL_V
23670 44 42 45 5f 43 4f 56 45 52 41 47 45 2e 0a 20 20  DBE_COVERAGE..  
23680 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 56 64 62  */.  void (*xVdb
23690 65 42 72 61 6e 63 68 29 28 76 6f 69 64 2a 2c 69  eBranch)(void*,i
236a0 6e 74 20 69 53 72 63 4c 69 6e 65 2c 75 38 20 65  nt iSrcLine,u8 e
236b0 54 68 69 73 2c 75 38 20 65 4d 78 29 3b 20 20 2f  This,u8 eMx);  /
236c0 2a 20 43 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  * Callback */.  
236d0 76 6f 69 64 20 2a 70 56 64 62 65 42 72 61 6e 63  void *pVdbeBranc
236e0 68 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  hArg;           
236f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23700 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74            /* 1st
23710 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 23 65 6e   argument */.#en
23720 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
23730 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 20 20  TE_UNTESTABLE.  
23740 69 6e 74 20 28 2a 78 54 65 73 74 43 61 6c 6c 62  int (*xTestCallb
23750 61 63 6b 29 28 69 6e 74 29 3b 20 20 20 20 20 20  ack)(int);      
23760 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 62 79 20    /* Invoked by 
23770 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28  sqlite3FaultSim(
23780 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e  ) */.#endif.  in
23790 74 20 62 4c 6f 63 61 6c 74 69 6d 65 46 61 75 6c  t bLocaltimeFaul
237a0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
237b0 2f 2a 20 54 72 75 65 20 74 6f 20 66 61 69 6c 20  /* True to fail 
237c0 6c 6f 63 61 6c 74 69 6d 65 28 29 20 63 61 6c 6c  localtime() call
237d0 73 20 2a 2f 0a 20 20 69 6e 74 20 69 4f 6e 63 65  s */.  int iOnce
237e0 52 65 73 65 74 54 68 72 65 73 68 6f 6c 64 3b 20  ResetThreshold; 
237f0 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 65 6e           /* When
23800 20 74 6f 20 72 65 73 65 74 20 4f 50 5f 4f 6e 63   to reset OP_Onc
23810 65 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 7d 3b  e counters */.};
23820 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6d 61 63  ../*.** This mac
23830 72 6f 20 69 73 20 75 73 65 64 20 69 6e 73 69 64  ro is used insid
23840 65 20 6f 66 20 61 73 73 65 72 74 28 29 20 73 74  e of assert() st
23850 61 74 65 6d 65 6e 74 73 20 74 6f 20 69 6e 64 69  atements to indi
23860 63 61 74 65 20 74 68 61 74 0a 2a 2a 20 74 68 65  cate that.** the
23870 20 61 73 73 65 72 74 20 69 73 20 6f 6e 6c 79 20   assert is only 
23880 76 61 6c 69 64 20 6f 6e 20 61 20 77 65 6c 6c 2d  valid on a well-
23890 66 6f 72 6d 65 64 20 64 61 74 61 62 61 73 65 2e  formed database.
238a0 20 20 49 6e 73 74 65 61 64 20 6f 66 3a 0a 2a 2a    Instead of:.**
238b0 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28 20  .**     assert( 
238c0 58 20 29 3b 0a 2a 2a 0a 2a 2a 20 4f 6e 65 20 77  X );.**.** One w
238d0 72 69 74 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  rites:.**.**    
238e0 20 61 73 73 65 72 74 28 20 58 20 7c 7c 20 43 4f   assert( X || CO
238f0 52 52 55 50 54 5f 44 42 20 29 3b 0a 2a 2a 0a 2a  RRUPT_DB );.**.*
23900 2a 20 43 4f 52 52 55 50 54 5f 44 42 20 69 73 20  * CORRUPT_DB is 
23910 74 72 75 65 20 64 75 72 69 6e 67 20 6e 6f 72 6d  true during norm
23920 61 6c 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 43  al operation.  C
23930 4f 52 52 55 50 54 5f 44 42 20 64 6f 65 73 20 6e  ORRUPT_DB does n
23940 6f 74 20 69 6e 64 69 63 61 74 65 0a 2a 2a 20 74  ot indicate.** t
23950 68 61 74 20 74 68 65 20 64 61 74 61 62 61 73 65  hat the database
23960 20 69 73 20 64 65 66 69 6e 69 74 65 6c 79 20 63   is definitely c
23970 6f 72 72 75 70 74 2c 20 6f 6e 6c 79 20 74 68 61  orrupt, only tha
23980 74 20 69 74 20 6d 69 67 68 74 20 62 65 20 63 6f  t it might be co
23990 72 72 75 70 74 2e 0a 2a 2a 20 46 6f 72 20 6d 6f  rrupt..** For mo
239a0 73 74 20 74 65 73 74 20 63 61 73 65 73 2c 20 43  st test cases, C
239b0 4f 52 52 55 50 54 5f 44 42 20 69 73 20 73 65 74  ORRUPT_DB is set
239c0 20 74 6f 20 66 61 6c 73 65 20 75 73 69 6e 67 20   to false using 
239d0 61 20 73 70 65 63 69 61 6c 0a 2a 2a 20 73 71 6c  a special.** sql
239e0 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f  ite3_test_contro
239f0 6c 28 29 2e 20 20 54 68 69 73 20 65 6e 61 62 6c  l().  This enabl
23a00 65 73 20 61 73 73 65 72 74 28 29 20 73 74 61 74  es assert() stat
23a10 65 6d 65 6e 74 73 20 74 6f 20 70 72 6f 76 65 0a  ements to prove.
23a20 2a 2a 20 74 68 69 6e 67 73 20 74 68 61 74 20 61  ** things that a
23a30 72 65 20 61 6c 77 61 79 73 20 74 72 75 65 20 66  re always true f
23a40 6f 72 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 64  or well-formed d
23a50 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 64 65  atabases..*/.#de
23a60 66 69 6e 65 20 43 4f 52 52 55 50 54 5f 44 42 20  fine CORRUPT_DB 
23a70 20 28 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 2e   (sqlite3Config.
23a80 6e 65 76 65 72 43 6f 72 72 75 70 74 3d 3d 30 29  neverCorrupt==0)
23a90 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74 65 78 74 20  ../*.** Context 
23aa0 70 6f 69 6e 74 65 72 20 70 61 73 73 65 64 20 64  pointer passed d
23ab0 6f 77 6e 20 74 68 72 6f 75 67 68 20 74 68 65 20  own through the 
23ac0 74 72 65 65 2d 77 61 6c 6b 2e 0a 2a 2f 0a 73 74  tree-walk..*/.st
23ad0 72 75 63 74 20 57 61 6c 6b 65 72 20 7b 0a 20 20  ruct Walker {.  
23ae0 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20  Parse *pParse;  
23af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b00 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72            /* Par
23b10 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 2a 2f  ser context.  */
23b20 0a 20 20 69 6e 74 20 28 2a 78 45 78 70 72 43 61  .  int (*xExprCa
23b30 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c  llback)(Walker*,
23b40 20 45 78 70 72 2a 29 3b 20 20 20 20 20 2f 2a 20   Expr*);     /* 
23b50 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20 65 78 70  Callback for exp
23b60 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e  ressions */.  in
23b70 74 20 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62  t (*xSelectCallb
23b80 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c  ack)(Walker*,Sel
23b90 65 63 74 2a 29 3b 20 20 2f 2a 20 43 61 6c 6c 62  ect*);  /* Callb
23ba0 61 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20  ack for SELECTs 
23bb0 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 65 6c  */.  void (*xSel
23bc0 65 63 74 43 61 6c 6c 62 61 63 6b 32 29 28 57 61  ectCallback2)(Wa
23bd0 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 2f  lker*,Select*);/
23be0 2a 20 53 65 63 6f 6e 64 20 63 61 6c 6c 62 61 63  * Second callbac
23bf0 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f  k for SELECTs */
23c00 0a 20 20 69 6e 74 20 77 61 6c 6b 65 72 44 65 70  .  int walkerDep
23c10 74 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  th;             
23c20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
23c30 4e 75 6d 62 65 72 20 6f 66 20 73 75 62 71 75 65  Number of subque
23c40 72 69 65 73 20 2a 2f 0a 20 20 75 38 20 65 43 6f  ries */.  u8 eCo
23c50 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  de;             
23c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23c70 20 20 20 20 2f 2a 20 41 20 73 6d 61 6c 6c 20 70      /* A small p
23c80 72 6f 63 65 73 73 69 6e 67 20 63 6f 64 65 20 2a  rocessing code *
23c90 2f 0a 20 20 75 6e 69 6f 6e 20 7b 20 20 20 20 20  /.  union {     
23ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
23cc0 20 45 78 74 72 61 20 64 61 74 61 20 66 6f 72 20   Extra data for 
23cd0 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 20 20  callback */.    
23ce0 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e 43  NameContext *pNC
23cf0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
23d00 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
23d10 69 6e 67 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20  ing context */. 
23d20 20 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20     int n;       
23d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d40 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
23d50 41 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 20  A counter */.   
23d60 20 69 6e 74 20 69 43 75 72 3b 20 20 20 20 20 20   int iCur;      
23d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d80 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20             /* A 
23d90 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 2a 2f  cursor number */
23da0 0a 20 20 20 20 53 72 63 4c 69 73 74 20 2a 70 53  .    SrcList *pS
23db0 72 63 4c 69 73 74 3b 20 20 20 20 20 20 20 20 20  rcList;         
23dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
23dd0 2a 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f  * FROM clause */
23de0 0a 20 20 20 20 73 74 72 75 63 74 20 53 72 63 43  .    struct SrcC
23df0 6f 75 6e 74 20 2a 70 53 72 63 43 6f 75 6e 74 3b  ount *pSrcCount;
23e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
23e10 2a 20 43 6f 75 6e 74 69 6e 67 20 63 6f 6c 75 6d  * Counting colum
23e20 6e 20 72 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a  n references */.
23e30 20 20 20 20 73 74 72 75 63 74 20 43 43 75 72 48      struct CCurH
23e40 69 6e 74 20 2a 70 43 43 75 72 48 69 6e 74 3b 20  int *pCCurHint; 
23e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
23e60 20 55 73 65 64 20 62 79 20 63 6f 64 65 43 75 72   Used by codeCur
23e70 73 6f 72 48 69 6e 74 28 29 20 2a 2f 0a 20 20 20  sorHint() */.   
23e80 20 69 6e 74 20 2a 61 69 43 6f 6c 3b 20 20 20 20   int *aiCol;    
23e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ea0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 61 72             /* ar
23eb0 72 61 79 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e  ray of column in
23ec0 64 65 78 65 73 20 2a 2f 0a 20 20 20 20 73 74 72  dexes */.    str
23ed0 75 63 74 20 49 64 78 43 6f 76 65 72 20 2a 70 49  uct IdxCover *pI
23ee0 64 78 43 6f 76 65 72 3b 20 20 20 20 20 20 20 20  dxCover;        
23ef0 20 20 20 20 20 20 20 2f 2a 20 43 68 65 63 6b 20         /* Check 
23f00 66 6f 72 20 69 6e 64 65 78 20 63 6f 76 65 72 61  for index covera
23f10 67 65 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74  ge */.    struct
23f20 20 49 64 78 45 78 70 72 54 72 61 6e 73 20 2a 70   IdxExprTrans *p
23f30 49 64 78 54 72 61 6e 73 3b 20 20 20 20 20 20 20  IdxTrans;       
23f40 20 20 20 20 2f 2a 20 43 6f 6e 76 65 72 74 20 69      /* Convert i
23f50 6e 64 65 78 65 64 20 65 78 70 72 20 74 6f 20 63  ndexed expr to c
23f60 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 20 20 45 78 70  olumn */.    Exp
23f70 72 4c 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b  rList *pGroupBy;
23f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f90 20 20 20 20 20 20 20 2f 2a 20 47 52 4f 55 50 20         /* GROUP 
23fa0 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20  BY clause */.   
23fb0 20 73 74 72 75 63 74 20 48 61 76 69 6e 67 54 6f   struct HavingTo
23fc0 57 68 65 72 65 43 74 78 20 2a 70 48 61 76 69 6e  WhereCtx *pHavin
23fd0 67 43 74 78 3b 20 20 20 20 20 20 2f 2a 20 48 41  gCtx;      /* HA
23fe0 56 49 4e 47 20 74 6f 20 57 48 45 52 45 20 63 6c  VING to WHERE cl
23ff0 61 75 73 65 20 63 74 78 20 2a 2f 0a 20 20 7d 20  ause ctx */.  } 
24000 75 3b 0a 7d 3b 0a 0a 2f 2a 20 46 6f 72 77 61 72  u;.};../* Forwar
24010 64 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 2a  d declarations *
24020 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c  /.int sqlite3Wal
24030 6b 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 45  kExpr(Walker*, E
24040 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
24050 65 33 57 61 6c 6b 45 78 70 72 4c 69 73 74 28 57  e3WalkExprList(W
24060 61 6c 6b 65 72 2a 2c 20 45 78 70 72 4c 69 73 74  alker*, ExprList
24070 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
24080 61 6c 6b 53 65 6c 65 63 74 28 57 61 6c 6b 65 72  alkSelect(Walker
24090 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74  *, Select*);.int
240a0 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65   sqlite3WalkSele
240b0 63 74 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20  ctExpr(Walker*, 
240c0 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71  Select*);.int sq
240d0 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 46  lite3WalkSelectF
240e0 72 6f 6d 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c  rom(Walker*, Sel
240f0 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ect*);.int sqlit
24100 65 33 45 78 70 72 57 61 6c 6b 4e 6f 6f 70 28 57  e3ExprWalkNoop(W
24110 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a  alker*, Expr*);.
24120 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63  int sqlite3Selec
24130 74 57 61 6c 6b 4e 6f 6f 70 28 57 61 6c 6b 65 72  tWalkNoop(Walker
24140 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74  *, Select*);.int
24150 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 57 61   sqlite3SelectWa
24160 6c 6b 46 61 69 6c 28 57 61 6c 6b 65 72 2a 2c 20  lkFail(Walker*, 
24170 53 65 6c 65 63 74 2a 29 3b 0a 23 69 66 64 65 66  Select*);.#ifdef
24180 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 76 6f   SQLITE_DEBUG.vo
24190 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  id sqlite3Select
241a0 57 61 6c 6b 41 73 73 65 72 74 32 28 57 61 6c 6b  WalkAssert2(Walk
241b0 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 23  er*, Select*);.#
241c0 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  endif../*.** Ret
241d0 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20 74 68  urn code from th
241e0 65 20 70 61 72 73 65 2d 74 72 65 65 20 77 61 6c  e parse-tree wal
241f0 6b 69 6e 67 20 70 72 69 6d 69 74 69 76 65 73 20  king primitives 
24200 61 6e 64 20 74 68 65 69 72 0a 2a 2a 20 63 61 6c  and their.** cal
24210 6c 62 61 63 6b 73 2e 0a 2a 2f 0a 23 64 65 66 69  lbacks..*/.#defi
24220 6e 65 20 57 52 43 5f 43 6f 6e 74 69 6e 75 65 20  ne WRC_Continue 
24230 20 20 20 30 20 20 20 2f 2a 20 43 6f 6e 74 69 6e     0   /* Contin
24240 75 65 20 64 6f 77 6e 20 69 6e 74 6f 20 63 68 69  ue down into chi
24250 6c 64 72 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ldren */.#define
24260 20 57 52 43 5f 50 72 75 6e 65 20 20 20 20 20 20   WRC_Prune      
24270 20 31 20 20 20 2f 2a 20 4f 6d 69 74 20 63 68 69   1   /* Omit chi
24280 6c 64 72 65 6e 20 62 75 74 20 63 6f 6e 74 69 6e  ldren but contin
24290 75 65 20 77 61 6c 6b 69 6e 67 20 73 69 62 6c 69  ue walking sibli
242a0 6e 67 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  ngs */.#define W
242b0 52 43 5f 41 62 6f 72 74 20 20 20 20 20 20 20 32  RC_Abort       2
242c0 20 20 20 2f 2a 20 41 62 61 6e 64 6f 6e 20 74 68     /* Abandon th
242d0 65 20 74 72 65 65 20 77 61 6c 6b 20 2a 2f 0a 0a  e tree walk */..
242e0 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
242f0 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  e of this struct
24300 75 72 65 20 72 65 70 72 65 73 65 6e 74 73 20 61  ure represents a
24310 20 73 65 74 20 6f 66 20 6f 6e 65 20 6f 72 20 6d   set of one or m
24320 6f 72 65 20 43 54 45 73 0a 2a 2a 20 28 63 6f 6d  ore CTEs.** (com
24330 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73  mon table expres
24340 73 69 6f 6e 73 29 20 63 72 65 61 74 65 64 20 62  sions) created b
24350 79 20 61 20 73 69 6e 67 6c 65 20 57 49 54 48 20  y a single WITH 
24360 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63  clause..*/.struc
24370 74 20 57 69 74 68 20 7b 0a 20 20 69 6e 74 20 6e  t With {.  int n
24380 43 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  Cte;            
24390 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
243a0 6d 62 65 72 20 6f 66 20 43 54 45 73 20 69 6e 20  mber of CTEs in 
243b0 74 68 65 20 57 49 54 48 20 63 6c 61 75 73 65 20  the WITH clause 
243c0 2a 2f 0a 20 20 57 69 74 68 20 2a 70 4f 75 74 65  */.  With *pOute
243d0 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
243e0 20 20 20 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 69       /* Containi
243f0 6e 67 20 57 49 54 48 20 63 6c 61 75 73 65 2c 20  ng WITH clause, 
24400 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 73 74 72  or NULL */.  str
24410 75 63 74 20 43 74 65 20 7b 20 20 20 20 20 20 20  uct Cte {       
24420 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
24430 46 6f 72 20 65 61 63 68 20 43 54 45 20 69 6e 20  For each CTE in 
24440 74 68 65 20 57 49 54 48 20 63 6c 61 75 73 65 2e  the WITH clause.
24450 2e 2e 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  ... */.    char 
24460 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
24470 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61             /* Na
24480 6d 65 20 6f 66 20 74 68 69 73 20 43 54 45 20 2a  me of this CTE *
24490 2f 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a  /.    ExprList *
244a0 70 43 6f 6c 73 3b 20 20 20 20 20 20 20 20 20 20  pCols;          
244b0 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66        /* List of
244c0 20 65 78 70 6c 69 63 69 74 20 63 6f 6c 75 6d 6e   explicit column
244d0 20 6e 61 6d 65 73 2c 20 6f 72 20 4e 55 4c 4c 20   names, or NULL 
244e0 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70  */.    Select *p
244f0 53 65 6c 65 63 74 3b 20 20 20 20 20 20 20 20 20  Select;         
24500 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65         /* The de
24510 66 69 6e 69 74 69 6f 6e 20 6f 66 20 74 68 69 73  finition of this
24520 20 43 54 45 20 2a 2f 0a 20 20 20 20 63 6f 6e 73   CTE */.    cons
24530 74 20 63 68 61 72 20 2a 7a 43 74 65 45 72 72 3b  t char *zCteErr;
24540 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45              /* E
24550 72 72 6f 72 20 6d 65 73 73 61 67 65 20 66 6f 72  rror message for
24560 20 63 69 72 63 75 6c 61 72 20 72 65 66 65 72 65   circular refere
24570 6e 63 65 73 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d  nces */.  } a[1]
24580 3b 0a 7d 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c  ;.};..#ifdef SQL
24590 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20  ITE_DEBUG./*.** 
245a0 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
245b0 68 65 20 54 72 65 65 56 69 65 77 20 6f 62 6a 65  he TreeView obje
245c0 63 74 20 69 73 20 75 73 65 64 20 66 6f 72 20 70  ct is used for p
245d0 72 69 6e 74 69 6e 67 20 74 68 65 20 63 6f 6e 74  rinting the cont
245e0 65 6e 74 20 6f 66 0a 2a 2a 20 64 61 74 61 20 73  ent of.** data s
245f0 74 72 75 63 74 75 72 65 73 20 6f 6e 20 73 71 6c  tructures on sql
24600 69 74 65 33 44 65 62 75 67 50 72 69 6e 74 66 28  ite3DebugPrintf(
24610 29 20 75 73 69 6e 67 20 61 20 74 72 65 65 2d 6c  ) using a tree-l
24620 69 6b 65 20 76 69 65 77 2e 0a 2a 2f 0a 73 74 72  ike view..*/.str
24630 75 63 74 20 54 72 65 65 56 69 65 77 20 7b 0a 20  uct TreeView {. 
24640 20 69 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20 20   int iLevel;    
24650 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63           /* Whic
24660 68 20 6c 65 76 65 6c 20 6f 66 20 74 68 65 20 74  h level of the t
24670 72 65 65 20 77 65 20 61 72 65 20 6f 6e 20 2a 2f  ree we are on */
24680 0a 20 20 75 38 20 20 62 4c 69 6e 65 5b 31 30 30  .  u8  bLine[100
24690 5d 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 44 72  ];         /* Dr
246a0 61 77 20 76 65 72 74 69 63 61 6c 20 69 6e 20 63  aw vertical in c
246b0 6f 6c 75 6d 6e 20 69 20 69 66 20 62 4c 69 6e 65  olumn i if bLine
246c0 5b 69 5d 20 69 73 20 74 72 75 65 20 2a 2f 0a 7d  [i] is true */.}
246d0 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  ;.#endif /* SQLI
246e0 54 45 5f 44 45 42 55 47 20 2a 2f 0a 0a 2f 2a 0a  TE_DEBUG */../*.
246f0 2a 2a 20 41 73 73 75 6d 69 6e 67 20 7a 49 6e 20  ** Assuming zIn 
24700 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66 69  points to the fi
24710 72 73 74 20 62 79 74 65 20 6f 66 20 61 20 55 54  rst byte of a UT
24720 46 2d 38 20 63 68 61 72 61 63 74 65 72 2c 0a 2a  F-8 character,.*
24730 2a 20 61 64 76 61 6e 63 65 20 7a 49 6e 20 74 6f  * advance zIn to
24740 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 66 69   point to the fi
24750 72 73 74 20 62 79 74 65 20 6f 66 20 74 68 65 20  rst byte of the 
24760 6e 65 78 74 20 55 54 46 2d 38 20 63 68 61 72 61  next UTF-8 chara
24770 63 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  cter..*/.#define
24780 20 53 51 4c 49 54 45 5f 53 4b 49 50 5f 55 54 46   SQLITE_SKIP_UTF
24790 38 28 7a 49 6e 29 20 7b 20 20 20 20 20 20 20 20  8(zIn) {        
247a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
247b0 5c 0a 20 20 69 66 28 20 28 2a 28 7a 49 6e 2b 2b  \.  if( (*(zIn++
247c0 29 29 3e 3d 30 78 63 30 20 29 7b 20 20 20 20 20  ))>=0xc0 ){     
247d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
247e0 20 20 20 20 20 20 20 20 20 5c 0a 20 20 20 20 77           \.    w
247f0 68 69 6c 65 28 20 28 2a 7a 49 6e 20 26 20 30 78  hile( (*zIn & 0x
24800 63 30 29 3d 3d 30 78 38 30 20 29 7b 20 7a 49 6e  c0)==0x80 ){ zIn
24810 2b 2b 3b 20 7d 20 20 20 20 20 20 20 20 20 20 20  ++; }           
24820 20 20 5c 0a 20 20 7d 20 20 20 20 20 20 20 20 20    \.  }         
24830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24850 20 20 20 20 20 20 20 20 20 20 20 5c 0a 7d 0a 0a             \.}..
24860 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45  /*.** The SQLITE
24870 5f 2a 5f 42 4b 50 54 20 6d 61 63 72 6f 73 20 61  _*_BKPT macros a
24880 72 65 20 73 75 62 73 74 69 74 75 74 65 73 20 66  re substitutes f
24890 6f 72 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64  or the error cod
248a0 65 73 20 77 69 74 68 0a 2a 2a 20 74 68 65 20 73  es with.** the s
248b0 61 6d 65 20 6e 61 6d 65 20 62 75 74 20 77 69 74  ame name but wit
248c0 68 6f 75 74 20 74 68 65 20 5f 42 4b 50 54 20 73  hout the _BKPT s
248d0 75 66 66 69 78 2e 20 20 54 68 65 73 65 20 6d 61  uffix.  These ma
248e0 63 72 6f 73 20 69 6e 76 6f 6b 65 0a 2a 2a 20 72  cros invoke.** r
248f0 6f 75 74 69 6e 65 73 20 74 68 61 74 20 72 65 70  outines that rep
24900 6f 72 74 20 74 68 65 20 6c 69 6e 65 2d 6e 75 6d  ort the line-num
24910 62 65 72 20 6f 6e 20 77 68 69 63 68 20 74 68 65  ber on which the
24920 20 65 72 72 6f 72 20 6f 72 69 67 69 6e 61 74 65   error originate
24930 64 0a 2a 2a 20 75 73 69 6e 67 20 73 71 6c 69 74  d.** using sqlit
24940 65 33 5f 6c 6f 67 28 29 2e 20 20 54 68 65 20 72  e3_log().  The r
24950 6f 75 74 69 6e 65 73 20 61 6c 73 6f 20 70 72 6f  outines also pro
24960 76 69 64 65 20 61 20 63 6f 6e 76 65 6e 69 65 6e  vide a convenien
24970 74 20 70 6c 61 63 65 0a 2a 2a 20 74 6f 20 73 65  t place.** to se
24980 74 20 61 20 64 65 62 75 67 67 65 72 20 62 72 65  t a debugger bre
24990 61 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a 69 6e 74 20  akpoint..*/.int 
249a0 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72  sqlite3CorruptEr
249b0 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71  ror(int);.int sq
249c0 6c 69 74 65 33 4d 69 73 75 73 65 45 72 72 6f 72  lite3MisuseError
249d0 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74  (int);.int sqlit
249e0 65 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28  e3CantopenError(
249f0 69 6e 74 29 3b 0a 23 64 65 66 69 6e 65 20 53 51  int);.#define SQ
24a00 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50  LITE_CORRUPT_BKP
24a10 54 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74  T sqlite3Corrupt
24a20 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a  Error(__LINE__).
24a30 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
24a40 49 53 55 53 45 5f 42 4b 50 54 20 73 71 6c 69 74  ISUSE_BKPT sqlit
24a50 65 33 4d 69 73 75 73 65 45 72 72 6f 72 28 5f 5f  e3MisuseError(__
24a60 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20  LINE__).#define 
24a70 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e 5f  SQLITE_CANTOPEN_
24a80 42 4b 50 54 20 73 71 6c 69 74 65 33 43 61 6e 74  BKPT sqlite3Cant
24a90 6f 70 65 6e 45 72 72 6f 72 28 5f 5f 4c 49 4e 45  openError(__LINE
24aa0 5f 5f 29 0a 23 69 66 64 65 66 20 53 51 4c 49 54  __).#ifdef SQLIT
24ab0 45 5f 44 45 42 55 47 0a 20 20 69 6e 74 20 73 71  E_DEBUG.  int sq
24ac0 6c 69 74 65 33 4e 6f 6d 65 6d 45 72 72 6f 72 28  lite3NomemError(
24ad0 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  int);.  int sqli
24ae0 74 65 33 49 6f 65 72 72 6e 6f 6d 65 6d 45 72 72  te3IoerrnomemErr
24af0 6f 72 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73  or(int);.  int s
24b00 71 6c 69 74 65 33 43 6f 72 72 75 70 74 50 67 6e  qlite3CorruptPgn
24b10 6f 45 72 72 6f 72 28 69 6e 74 2c 50 67 6e 6f 29  oError(int,Pgno)
24b20 3b 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ;.# define SQLIT
24b30 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20 73 71 6c  E_NOMEM_BKPT sql
24b40 69 74 65 33 4e 6f 6d 65 6d 45 72 72 6f 72 28 5f  ite3NomemError(_
24b50 5f 4c 49 4e 45 5f 5f 29 0a 23 20 64 65 66 69 6e  _LINE__).# defin
24b60 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e  e SQLITE_IOERR_N
24b70 4f 4d 45 4d 5f 42 4b 50 54 20 73 71 6c 69 74 65  OMEM_BKPT sqlite
24b80 33 49 6f 65 72 72 6e 6f 6d 65 6d 45 72 72 6f 72  3IoerrnomemError
24b90 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 20 64 65 66  (__LINE__).# def
24ba0 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55  ine SQLITE_CORRU
24bb0 50 54 5f 50 47 4e 4f 28 50 29 20 73 71 6c 69 74  PT_PGNO(P) sqlit
24bc0 65 33 43 6f 72 72 75 70 74 50 67 6e 6f 45 72 72  e3CorruptPgnoErr
24bd0 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 2c 28 50 29 29  or(__LINE__,(P))
24be0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
24bf0 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50  SQLITE_NOMEM_BKP
24c00 54 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 0a 23  T SQLITE_NOMEM.#
24c10 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49   define SQLITE_I
24c20 4f 45 52 52 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20  OERR_NOMEM_BKPT 
24c30 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d  SQLITE_IOERR_NOM
24c40 45 4d 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  EM.# define SQLI
24c50 54 45 5f 43 4f 52 52 55 50 54 5f 50 47 4e 4f 28  TE_CORRUPT_PGNO(
24c60 50 29 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70  P) sqlite3Corrup
24c70 74 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29  tError(__LINE__)
24c80 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46  .#endif../*.** F
24c90 54 53 33 20 61 6e 64 20 46 54 53 34 20 62 6f 74  TS3 and FTS4 bot
24ca0 68 20 72 65 71 75 69 72 65 20 76 69 72 74 75 61  h require virtua
24cb0 6c 20 74 61 62 6c 65 20 73 75 70 70 6f 72 74 0a  l table support.
24cc0 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  */.#if defined(S
24cd0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
24ce0 41 4c 54 41 42 4c 45 29 0a 23 20 75 6e 64 65 66  ALTABLE).# undef
24cf0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46   SQLITE_ENABLE_F
24d00 54 53 33 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  TS3.# undef SQLI
24d10 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 0a 23  TE_ENABLE_FTS4.#
24d20 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 54 53  endif../*.** FTS
24d30 34 20 69 73 20 72 65 61 6c 6c 79 20 61 6e 20 65  4 is really an e
24d40 78 74 65 6e 73 69 6f 6e 20 66 6f 72 20 46 54 53  xtension for FTS
24d50 33 2e 20 20 49 74 20 69 73 20 65 6e 61 62 6c 65  3.  It is enable
24d60 64 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 53  d using the.** S
24d70 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
24d80 33 20 6d 61 63 72 6f 2e 20 20 42 75 74 20 74 6f  3 macro.  But to
24d90 20 61 76 6f 69 64 20 63 6f 6e 66 75 73 69 6f 6e   avoid confusion
24da0 20 77 65 20 61 6c 73 6f 20 63 61 6c 6c 0a 2a 2a   we also call.**
24db0 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e 41 42   the SQLITE_ENAB
24dc0 4c 45 5f 46 54 53 34 20 6d 61 63 72 6f 20 74 6f  LE_FTS4 macro to
24dd0 20 73 65 72 76 65 20 61 73 20 61 6e 20 61 6c 69   serve as an ali
24de0 61 73 20 66 6f 72 20 53 51 4c 49 54 45 5f 45 4e  as for SQLITE_EN
24df0 41 42 4c 45 5f 46 54 53 33 2e 0a 2a 2f 0a 23 69  ABLE_FTS3..*/.#i
24e00 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
24e10 5f 45 4e 41 42 4c 45 5f 46 54 53 34 29 20 26 26  _ENABLE_FTS4) &&
24e20 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
24e30 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29 0a 23 20  _ENABLE_FTS3).# 
24e40 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e  define SQLITE_EN
24e50 41 42 4c 45 5f 46 54 53 33 20 31 0a 23 65 6e 64  ABLE_FTS3 1.#end
24e60 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 74  if../*.** The ct
24e70 79 70 65 2e 68 20 68 65 61 64 65 72 20 69 73 20  ype.h header is 
24e80 6e 65 65 64 65 64 20 66 6f 72 20 6e 6f 6e 2d 41  needed for non-A
24e90 53 43 49 49 20 73 79 73 74 65 6d 73 2e 20 20 49  SCII systems.  I
24ea0 74 20 69 73 20 61 6c 73 6f 0a 2a 2a 20 6e 65 65  t is also.** nee
24eb0 64 65 64 20 62 79 20 46 54 53 33 20 77 68 65 6e  ded by FTS3 when
24ec0 20 46 54 53 33 20 69 73 20 69 6e 63 6c 75 64 65   FTS3 is include
24ed0 64 20 69 6e 20 74 68 65 20 61 6d 61 6c 67 61 6d  d in the amalgam
24ee0 61 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 21 64  ation..*/.#if !d
24ef0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 41 53  efined(SQLITE_AS
24f00 43 49 49 29 20 7c 7c 20 5c 0a 20 20 20 20 28 64  CII) || \.    (d
24f10 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
24f20 41 42 4c 45 5f 46 54 53 33 29 20 26 26 20 64 65  ABLE_FTS3) && de
24f30 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 41 4d 41  fined(SQLITE_AMA
24f40 4c 47 41 4d 41 54 49 4f 4e 29 29 0a 23 20 69 6e  LGAMATION)).# in
24f50 63 6c 75 64 65 20 3c 63 74 79 70 65 2e 68 3e 0a  clude <ctype.h>.
24f60 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
24f70 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72  e following macr
24f80 6f 73 20 6d 69 6d 69 63 20 74 68 65 20 73 74 61  os mimic the sta
24f90 6e 64 61 72 64 20 6c 69 62 72 61 72 79 20 66 75  ndard library fu
24fa0 6e 63 74 69 6f 6e 73 20 74 6f 75 70 70 65 72 28  nctions toupper(
24fb0 29 2c 0a 2a 2a 20 69 73 73 70 61 63 65 28 29 2c  ),.** isspace(),
24fc0 20 69 73 61 6c 6e 75 6d 28 29 2c 20 69 73 64 69   isalnum(), isdi
24fd0 67 69 74 28 29 20 61 6e 64 20 69 73 78 64 69 67  git() and isxdig
24fe0 69 74 28 29 2c 20 72 65 73 70 65 63 74 69 76 65  it(), respective
24ff0 6c 79 2e 20 54 68 65 0a 2a 2a 20 73 71 6c 69 74  ly. The.** sqlit
25000 65 20 76 65 72 73 69 6f 6e 73 20 6f 6e 6c 79 20  e versions only 
25010 77 6f 72 6b 20 66 6f 72 20 41 53 43 49 49 20 63  work for ASCII c
25020 68 61 72 61 63 74 65 72 73 2c 20 72 65 67 61 72  haracters, regar
25030 64 6c 65 73 73 20 6f 66 20 6c 6f 63 61 6c 65 2e  dless of locale.
25040 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
25050 45 5f 41 53 43 49 49 0a 23 20 64 65 66 69 6e 65  E_ASCII.# define
25060 20 73 71 6c 69 74 65 33 54 6f 75 70 70 65 72 28   sqlite3Toupper(
25070 78 29 20 20 28 28 78 29 26 7e 28 73 71 6c 69 74  x)  ((x)&~(sqlit
25080 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
25090 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
250a0 78 32 30 29 29 0a 23 20 64 65 66 69 6e 65 20 73  x20)).# define s
250b0 71 6c 69 74 65 33 49 73 73 70 61 63 65 28 78 29  qlite3Isspace(x)
250c0 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65     (sqlite3Ctype
250d0 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
250e0 61 72 29 28 78 29 5d 26 30 78 30 31 29 0a 23 20  ar)(x)]&0x01).# 
250f0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
25100 61 6c 6e 75 6d 28 78 29 20 20 20 28 73 71 6c 69  alnum(x)   (sqli
25110 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
25120 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
25130 30 78 30 36 29 0a 23 20 64 65 66 69 6e 65 20 73  0x06).# define s
25140 71 6c 69 74 65 33 49 73 61 6c 70 68 61 28 78 29  qlite3Isalpha(x)
25150 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65     (sqlite3Ctype
25160 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
25170 61 72 29 28 78 29 5d 26 30 78 30 32 29 0a 23 20  ar)(x)]&0x02).# 
25180 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
25190 64 69 67 69 74 28 78 29 20 20 20 28 73 71 6c 69  digit(x)   (sqli
251a0 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
251b0 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
251c0 30 78 30 34 29 0a 23 20 64 65 66 69 6e 65 20 73  0x04).# define s
251d0 71 6c 69 74 65 33 49 73 78 64 69 67 69 74 28 78  qlite3Isxdigit(x
251e0 29 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65  )  (sqlite3Ctype
251f0 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
25200 61 72 29 28 78 29 5d 26 30 78 30 38 29 0a 23 20  ar)(x)]&0x08).# 
25210 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f  define sqlite3To
25220 6c 6f 77 65 72 28 78 29 20 20 20 28 73 71 6c 69  lower(x)   (sqli
25230 74 65 33 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b  te3UpperToLower[
25240 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
25250 78 29 5d 29 0a 23 20 64 65 66 69 6e 65 20 73 71  x)]).# define sq
25260 6c 69 74 65 33 49 73 71 75 6f 74 65 28 78 29 20  lite3Isquote(x) 
25270 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d    (sqlite3CtypeM
25280 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ap[(unsigned cha
25290 72 29 28 78 29 5d 26 30 78 38 30 29 0a 23 65 6c  r)(x)]&0x80).#el
252a0 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
252b0 74 65 33 54 6f 75 70 70 65 72 28 78 29 20 20 20  te3Toupper(x)   
252c0 74 6f 75 70 70 65 72 28 28 75 6e 73 69 67 6e 65  toupper((unsigne
252d0 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65  d char)(x)).# de
252e0 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70  fine sqlite3Issp
252f0 61 63 65 28 78 29 20 20 20 69 73 73 70 61 63 65  ace(x)   isspace
25300 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
25310 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (x)).# define sq
25320 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20  lite3Isalnum(x) 
25330 20 20 69 73 61 6c 6e 75 6d 28 28 75 6e 73 69 67    isalnum((unsig
25340 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
25350 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
25360 61 6c 70 68 61 28 78 29 20 20 20 69 73 61 6c 70  alpha(x)   isalp
25370 68 61 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ha((unsigned cha
25380 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
25390 73 71 6c 69 74 65 33 49 73 64 69 67 69 74 28 78  sqlite3Isdigit(x
253a0 29 20 20 20 69 73 64 69 67 69 74 28 28 75 6e 73  )   isdigit((uns
253b0 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
253c0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
253d0 49 73 78 64 69 67 69 74 28 78 29 20 20 69 73 78  Isxdigit(x)  isx
253e0 64 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64 20  digit((unsigned 
253f0 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69  char)(x)).# defi
25400 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65  ne sqlite3Tolowe
25410 72 28 78 29 20 20 20 74 6f 6c 6f 77 65 72 28 28  r(x)   tolower((
25420 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
25430 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
25440 74 65 33 49 73 71 75 6f 74 65 28 78 29 20 20 20  te3Isquote(x)   
25450 28 28 78 29 3d 3d 27 22 27 7c 7c 28 78 29 3d 3d  ((x)=='"'||(x)==
25460 27 5c 27 27 7c 7c 28 78 29 3d 3d 27 5b 27 7c 7c  '\''||(x)=='['||
25470 28 78 29 3d 3d 27 60 27 29 0a 23 65 6e 64 69 66  (x)=='`').#endif
25480 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
25490 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f 50 54 49  OMIT_COMPILEOPTI
254a0 4f 4e 5f 44 49 41 47 53 0a 69 6e 74 20 73 71 6c  ON_DIAGS.int sql
254b0 69 74 65 33 49 73 49 64 43 68 61 72 28 75 38 29  ite3IsIdChar(u8)
254c0 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ;.#endif../*.** 
254d0 49 6e 74 65 72 6e 61 6c 20 66 75 6e 63 74 69 6f  Internal functio
254e0 6e 20 70 72 6f 74 6f 74 79 70 65 73 0a 2a 2f 0a  n prototypes.*/.
254f0 69 6e 74 20 73 71 6c 69 74 65 33 53 74 72 49 43  int sqlite3StrIC
25500 6d 70 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  mp(const char*,c
25510 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74  onst char*);.int
25520 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
25530 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63  (const char*);.c
25540 68 61 72 20 2a 73 71 6c 69 74 65 33 43 6f 6c 75  har *sqlite3Colu
25550 6d 6e 54 79 70 65 28 43 6f 6c 75 6d 6e 2a 2c 63  mnType(Column*,c
25560 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65 20 73  har*);.#define s
25570 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70 20 73  qlite3StrNICmp s
25580 71 6c 69 74 65 33 5f 73 74 72 6e 69 63 6d 70 0a  qlite3_strnicmp.
25590 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c  .int sqlite3Mall
255a0 6f 63 49 6e 69 74 28 76 6f 69 64 29 3b 0a 76 6f  ocInit(void);.vo
255b0 69 64 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  id sqlite3Malloc
255c0 45 6e 64 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20  End(void);.void 
255d0 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 28 75  *sqlite3Malloc(u
255e0 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  64);.void *sqlit
255f0 65 33 4d 61 6c 6c 6f 63 5a 65 72 6f 28 75 36 34  e3MallocZero(u64
25600 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
25610 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 73 71 6c  DbMallocZero(sql
25620 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a 76 6f 69  ite3*, u64);.voi
25630 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c  d *sqlite3DbMall
25640 6f 63 52 61 77 28 73 71 6c 69 74 65 33 2a 2c 20  ocRaw(sqlite3*, 
25650 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  u64);.void *sqli
25660 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 4e 4e  te3DbMallocRawNN
25670 28 73 71 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b  (sqlite3*, u64);
25680 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 44 62  .char *sqlite3Db
25690 53 74 72 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  StrDup(sqlite3*,
256a0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68  const char*);.ch
256b0 61 72 20 2a 73 71 6c 69 74 65 33 44 62 53 74 72  ar *sqlite3DbStr
256c0 4e 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f  NDup(sqlite3*,co
256d0 6e 73 74 20 63 68 61 72 2a 2c 20 75 36 34 29 3b  nst char*, u64);
256e0 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 52 65  .void *sqlite3Re
256f0 61 6c 6c 6f 63 28 76 6f 69 64 2a 2c 20 75 36 34  alloc(void*, u64
25700 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
25710 44 62 52 65 61 6c 6c 6f 63 4f 72 46 72 65 65 28  DbReallocOrFree(
25720 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64 20  sqlite3 *, void 
25730 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73  *, u64);.void *s
25740 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 28  qlite3DbRealloc(
25750 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64 20  sqlite3 *, void 
25760 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 73 71  *, u64);.void sq
25770 6c 69 74 65 33 44 62 46 72 65 65 28 73 71 6c 69  lite3DbFree(sqli
25780 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f  te3*, void*);.vo
25790 69 64 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  id sqlite3DbFree
257a0 4e 4e 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69  NN(sqlite3*, voi
257b0 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  d*);.int sqlite3
257c0 4d 61 6c 6c 6f 63 53 69 7a 65 28 76 6f 69 64 2a  MallocSize(void*
257d0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 62  );.int sqlite3Db
257e0 4d 61 6c 6c 6f 63 53 69 7a 65 28 73 71 6c 69 74  MallocSize(sqlit
257f0 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69  e3*, void*);.voi
25800 64 20 2a 73 71 6c 69 74 65 33 50 61 67 65 4d 61  d *sqlite3PageMa
25810 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20  lloc(int);.void 
25820 73 71 6c 69 74 65 33 50 61 67 65 46 72 65 65 28  sqlite3PageFree(
25830 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  void*);.void sql
25840 69 74 65 33 4d 65 6d 53 65 74 44 65 66 61 75 6c  ite3MemSetDefaul
25850 74 28 76 6f 69 64 29 3b 0a 23 69 66 6e 64 65 66  t(void);.#ifndef
25860 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42   SQLITE_UNTESTAB
25870 4c 45 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  LE.void sqlite3B
25880 65 6e 69 67 6e 4d 61 6c 6c 6f 63 48 6f 6f 6b 73  enignMallocHooks
25890 28 76 6f 69 64 20 28 2a 29 28 76 6f 69 64 29 2c  (void (*)(void),
258a0 20 76 6f 69 64 20 28 2a 29 28 76 6f 69 64 29 29   void (*)(void))
258b0 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c  ;.#endif.int sql
258c0 69 74 65 33 48 65 61 70 4e 65 61 72 6c 79 46 75  ite3HeapNearlyFu
258d0 6c 6c 28 76 6f 69 64 29 3b 0a 0a 2f 2a 0a 2a 2a  ll(void);../*.**
258e0 20 4f 6e 20 73 79 73 74 65 6d 73 20 77 69 74 68   On systems with
258f0 20 61 6d 70 6c 65 20 73 74 61 63 6b 20 73 70 61   ample stack spa
25900 63 65 20 61 6e 64 20 74 68 61 74 20 73 75 70 70  ce and that supp
25910 6f 72 74 20 61 6c 6c 6f 63 61 28 29 2c 20 6d 61  ort alloca(), ma
25920 6b 65 0a 2a 2a 20 75 73 65 20 6f 66 20 61 6c 6c  ke.** use of all
25930 6f 63 61 28 29 20 74 6f 20 6f 62 74 61 69 6e 20  oca() to obtain 
25940 73 70 61 63 65 20 66 6f 72 20 6c 61 72 67 65 20  space for large 
25950 61 75 74 6f 6d 61 74 69 63 20 6f 62 6a 65 63 74  automatic object
25960 73 2e 20 20 42 79 20 64 65 66 61 75 6c 74 2c 0a  s.  By default,.
25970 2a 2a 20 6f 62 74 61 69 6e 20 73 70 61 63 65 20  ** obtain space 
25980 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 2e 0a 2a  from malloc()..*
25990 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c 6f 63 61 28  *.** The alloca(
259a0 29 20 72 6f 75 74 69 6e 65 20 6e 65 76 65 72 20  ) routine never 
259b0 72 65 74 75 72 6e 73 20 4e 55 4c 4c 2e 20 20 54  returns NULL.  T
259c0 68 69 73 20 77 69 6c 6c 20 63 61 75 73 65 20 63  his will cause c
259d0 6f 64 65 20 70 61 74 68 73 0a 2a 2a 20 74 68 61  ode paths.** tha
259e0 74 20 64 65 61 6c 20 77 69 74 68 20 73 71 6c 69  t deal with sqli
259f0 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 28 29 20  te3StackAlloc() 
25a00 66 61 69 6c 75 72 65 73 20 74 6f 20 62 65 20 75  failures to be u
25a10 6e 72 65 61 63 68 61 62 6c 65 2e 0a 2a 2f 0a 23  nreachable..*/.#
25a20 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45  ifdef SQLITE_USE
25a30 5f 41 4c 4c 4f 43 41 0a 23 20 64 65 66 69 6e 65  _ALLOCA.# define
25a40 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c   sqlite3StackAll
25a50 6f 63 52 61 77 28 44 2c 4e 29 20 20 20 61 6c 6c  ocRaw(D,N)   all
25a60 6f 63 61 28 4e 29 0a 23 20 64 65 66 69 6e 65 20  oca(N).# define 
25a70 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f  sqlite3StackAllo
25a80 63 5a 65 72 6f 28 44 2c 4e 29 20 20 6d 65 6d 73  cZero(D,N)  mems
25a90 65 74 28 61 6c 6c 6f 63 61 28 4e 29 2c 20 30 2c  et(alloca(N), 0,
25aa0 20 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c   N).# define sql
25ab0 69 74 65 33 53 74 61 63 6b 46 72 65 65 28 44 2c  ite3StackFree(D,
25ac0 50 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  P).#else.# defin
25ad0 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c  e sqlite3StackAl
25ae0 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20 73 71  locRaw(D,N)   sq
25af0 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77  lite3DbMallocRaw
25b00 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20 73  (D,N).# define s
25b10 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63  qlite3StackAlloc
25b20 5a 65 72 6f 28 44 2c 4e 29 20 20 73 71 6c 69 74  Zero(D,N)  sqlit
25b30 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 44  e3DbMallocZero(D
25b40 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,N).# define sql
25b50 69 74 65 33 53 74 61 63 6b 46 72 65 65 28 44 2c  ite3StackFree(D,
25b60 50 29 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  P)       sqlite3
25b70 44 62 46 72 65 65 28 44 2c 50 29 0a 23 65 6e 64  DbFree(D,P).#end
25b80 69 66 0a 0a 2f 2a 20 44 6f 20 6e 6f 74 20 61 6c  if../* Do not al
25b90 6c 6f 77 20 62 6f 74 68 20 4d 45 4d 53 59 53 35  low both MEMSYS5
25ba0 20 61 6e 64 20 4d 45 4d 53 59 53 33 20 74 6f 20   and MEMSYS3 to 
25bb0 62 65 20 64 65 66 69 6e 65 64 20 74 6f 67 65 74  be defined toget
25bc0 68 65 72 2e 20 20 49 66 20 74 68 65 79 0a 2a 2a  her.  If they.**
25bd0 20 61 72 65 2c 20 64 69 73 61 62 6c 65 20 4d 45   are, disable ME
25be0 4d 53 59 53 33 0a 2a 2f 0a 23 69 66 64 65 66 20  MSYS3.*/.#ifdef 
25bf0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45  SQLITE_ENABLE_ME
25c00 4d 53 59 53 35 0a 63 6f 6e 73 74 20 73 71 6c 69  MSYS5.const sqli
25c10 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20  te3_mem_methods 
25c20 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65  *sqlite3MemGetMe
25c30 6d 73 79 73 35 28 76 6f 69 64 29 3b 0a 23 75 6e  msys5(void);.#un
25c40 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
25c50 45 5f 4d 45 4d 53 59 53 33 0a 23 65 6e 64 69 66  E_MEMSYS3.#endif
25c60 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
25c70 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a 63 6f  NABLE_MEMSYS3.co
25c80 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f  nst sqlite3_mem_
25c90 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69 74 65 33  methods *sqlite3
25ca0 4d 65 6d 47 65 74 4d 65 6d 73 79 73 33 28 76 6f  MemGetMemsys3(vo
25cb0 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 23 69  id);.#endif...#i
25cc0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 55 54  fndef SQLITE_MUT
25cd0 45 58 5f 4f 4d 49 54 0a 20 20 73 71 6c 69 74 65  EX_OMIT.  sqlite
25ce0 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20  3_mutex_methods 
25cf0 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33 44 65  const *sqlite3De
25d00 66 61 75 6c 74 4d 75 74 65 78 28 76 6f 69 64 29  faultMutex(void)
25d10 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  ;.  sqlite3_mute
25d20 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74 20  x_methods const 
25d30 2a 73 71 6c 69 74 65 33 4e 6f 6f 70 4d 75 74 65  *sqlite3NoopMute
25d40 78 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74  x(void);.  sqlit
25d50 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65  e3_mutex *sqlite
25d60 33 4d 75 74 65 78 41 6c 6c 6f 63 28 69 6e 74 29  3MutexAlloc(int)
25d70 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d  ;.  int sqlite3M
25d80 75 74 65 78 49 6e 69 74 28 76 6f 69 64 29 3b 0a  utexInit(void);.
25d90 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 74    int sqlite3Mut
25da0 65 78 45 6e 64 28 76 6f 69 64 29 3b 0a 23 65 6e  exEnd(void);.#en
25db0 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64  dif.#if !defined
25dc0 28 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d  (SQLITE_MUTEX_OM
25dd0 49 54 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  IT) && !defined(
25de0 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4e 4f 4f  SQLITE_MUTEX_NOO
25df0 50 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  P).  void sqlite
25e00 33 4d 65 6d 6f 72 79 42 61 72 72 69 65 72 28 76  3MemoryBarrier(v
25e10 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  oid);.#else.# de
25e20 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 6f  fine sqlite3Memo
25e30 72 79 42 61 72 72 69 65 72 28 29 0a 23 65 6e 64  ryBarrier().#end
25e40 69 66 0a 0a 73 71 6c 69 74 65 33 5f 69 6e 74 36  if..sqlite3_int6
25e50 34 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 56  4 sqlite3StatusV
25e60 61 6c 75 65 28 69 6e 74 29 3b 0a 76 6f 69 64 20  alue(int);.void 
25e70 73 71 6c 69 74 65 33 53 74 61 74 75 73 55 70 28  sqlite3StatusUp(
25e80 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
25e90 73 71 6c 69 74 65 33 53 74 61 74 75 73 44 6f 77  sqlite3StatusDow
25ea0 6e 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  n(int, int);.voi
25eb0 64 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 48  d sqlite3StatusH
25ec0 69 67 68 77 61 74 65 72 28 69 6e 74 2c 20 69 6e  ighwater(int, in
25ed0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4c  t);.int sqlite3L
25ee0 6f 6f 6b 61 73 69 64 65 55 73 65 64 28 73 71 6c  ookasideUsed(sql
25ef0 69 74 65 33 2a 2c 69 6e 74 2a 29 3b 0a 0a 2f 2a  ite3*,int*);../*
25f00 20 41 63 63 65 73 73 20 74 6f 20 6d 75 74 65 78   Access to mutex
25f10 65 73 20 75 73 65 64 20 62 79 20 73 71 6c 69 74  es used by sqlit
25f20 65 33 5f 73 74 61 74 75 73 28 29 20 2a 2f 0a 73  e3_status() */.s
25f30 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71  qlite3_mutex *sq
25f40 6c 69 74 65 33 50 63 61 63 68 65 31 4d 75 74 65  lite3Pcache1Mute
25f50 78 28 76 6f 69 64 29 3b 0a 73 71 6c 69 74 65 33  x(void);.sqlite3
25f60 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65 33 4d  _mutex *sqlite3M
25f70 61 6c 6c 6f 63 4d 75 74 65 78 28 76 6f 69 64 29  allocMutex(void)
25f80 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ;..#ifndef SQLIT
25f90 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
25fa0 50 4f 49 4e 54 0a 20 20 69 6e 74 20 73 71 6c 69  POINT.  int sqli
25fb0 74 65 33 49 73 4e 61 4e 28 64 6f 75 62 6c 65 29  te3IsNaN(double)
25fc0 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
25fd0 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 58 29   sqlite3IsNaN(X)
25fe0 20 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a    0.#endif../*.*
25ff0 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
26000 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
26010 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20 69  tructure holds i
26020 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
26030 20 53 51 4c 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e   SQL.** function
26040 73 20 61 72 67 75 6d 65 6e 74 73 20 74 68 61 74  s arguments that
26050 20 61 72 65 20 74 68 65 20 70 61 72 61 6d 65 74   are the paramet
26060 65 72 73 20 74 6f 20 74 68 65 20 70 72 69 6e 74  ers to the print
26070 66 28 29 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f  f() function..*/
26080 0a 73 74 72 75 63 74 20 50 72 69 6e 74 66 41 72  .struct PrintfAr
26090 67 75 6d 65 6e 74 73 20 7b 0a 20 20 69 6e 74 20  guments {.  int 
260a0 6e 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  nArg;           
260b0 20 20 20 20 20 2f 2a 20 54 6f 74 61 6c 20 6e 75       /* Total nu
260c0 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
260d0 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 55 73 65 64  s */.  int nUsed
260e0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
260f0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
26100 75 6d 65 6e 74 73 20 75 73 65 64 20 73 6f 20 66  uments used so f
26110 61 72 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  ar */.  sqlite3_
26120 76 61 6c 75 65 20 2a 2a 61 70 41 72 67 3b 20 20  value **apArg;  
26130 20 2f 2a 20 54 68 65 20 61 72 67 75 6d 65 6e 74   /* The argument
26140 20 76 61 6c 75 65 73 20 2a 2f 0a 7d 3b 0a 0a 76   values */.};..v
26150 6f 69 64 20 73 71 6c 69 74 65 33 56 58 50 72 69  oid sqlite3VXPri
26160 6e 74 66 28 53 74 72 41 63 63 75 6d 2a 2c 20 63  ntf(StrAccum*, c
26170 6f 6e 73 74 20 63 68 61 72 2a 2c 20 76 61 5f 6c  onst char*, va_l
26180 69 73 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ist);.void sqlit
26190 65 33 58 50 72 69 6e 74 66 28 53 74 72 41 63 63  e3XPrintf(StrAcc
261a0 75 6d 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  um*, const char*
261b0 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71  , ...);.char *sq
261c0 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 73 71 6c  lite3MPrintf(sql
261d0 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
261e0 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73  *, ...);.char *s
261f0 71 6c 69 74 65 33 56 4d 50 72 69 6e 74 66 28 73  qlite3VMPrintf(s
26200 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
26210 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 23  ar*, va_list);.#
26220 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
26230 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69  E_DEBUG) || defi
26240 6e 65 64 28 53 51 4c 49 54 45 5f 48 41 56 45 5f  ned(SQLITE_HAVE_
26250 4f 53 5f 54 52 41 43 45 29 0a 20 20 76 6f 69 64  OS_TRACE).  void
26260 20 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69   sqlite3DebugPri
26270 6e 74 66 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ntf(const char*,
26280 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69 66 0a 23 69   ...);.#endif.#i
26290 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
262a0 5f 54 45 53 54 29 0a 20 20 76 6f 69 64 20 2a 73  _TEST).  void *s
262b0 71 6c 69 74 65 33 54 65 73 74 54 65 78 74 54 6f  qlite3TestTextTo
262c0 50 74 72 28 63 6f 6e 73 74 20 63 68 61 72 2a 29  Ptr(const char*)
262d0 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 65  ;.#endif..#if de
262e0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
262f0 55 47 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  UG).  void sqlit
26300 65 33 54 72 65 65 56 69 65 77 45 78 70 72 28 54  e3TreeViewExpr(T
26310 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20  reeView*, const 
26320 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20 20 76 6f  Expr*, u8);.  vo
26330 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69  id sqlite3TreeVi
26340 65 77 42 61 72 65 45 78 70 72 4c 69 73 74 28 54  ewBareExprList(T
26350 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20  reeView*, const 
26360 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74  ExprList*, const
26370 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20   char*);.  void 
26380 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 45  sqlite3TreeViewE
26390 78 70 72 4c 69 73 74 28 54 72 65 65 56 69 65 77  xprList(TreeView
263a0 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72 4c 69 73  *, const ExprLis
263b0 74 2a 2c 20 75 38 2c 20 63 6f 6e 73 74 20 63 68  t*, u8, const ch
263c0 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  ar*);.  void sql
263d0 69 74 65 33 54 72 65 65 56 69 65 77 53 65 6c 65  ite3TreeViewSele
263e0 63 74 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f  ct(TreeView*, co
263f0 6e 73 74 20 53 65 6c 65 63 74 2a 2c 20 75 38 29  nst Select*, u8)
26400 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
26410 54 72 65 65 56 69 65 77 57 69 74 68 28 54 72 65  TreeViewWith(Tre
26420 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 57 69  eView*, const Wi
26430 74 68 2a 2c 20 75 38 29 3b 0a 23 65 6e 64 69 66  th*, u8);.#endif
26440 0a 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  ...void sqlite3S
26450 65 74 53 74 72 69 6e 67 28 63 68 61 72 20 2a 2a  etString(char **
26460 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73  , sqlite3*, cons
26470 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
26480 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28 50  qlite3ErrorMsg(P
26490 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61  arse*, const cha
264a0 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73  r*, ...);.void s
264b0 71 6c 69 74 65 33 44 65 71 75 6f 74 65 28 63 68  qlite3Dequote(ch
264c0 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
264d0 65 33 54 6f 6b 65 6e 49 6e 69 74 28 54 6f 6b 65  e3TokenInit(Toke
264e0 6e 2a 2c 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73  n*,char*);.int s
264f0 71 6c 69 74 65 33 4b 65 79 77 6f 72 64 43 6f 64  qlite3KeywordCod
26500 65 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  e(const unsigned
26510 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e   char*, int);.in
26520 74 20 73 71 6c 69 74 65 33 52 75 6e 50 61 72 73  t sqlite3RunPars
26530 65 72 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74  er(Parse*, const
26540 20 63 68 61 72 2a 2c 20 63 68 61 72 20 2a 2a 29   char*, char **)
26550 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69  ;.void sqlite3Fi
26560 6e 69 73 68 43 6f 64 69 6e 67 28 50 61 72 73 65  nishCoding(Parse
26570 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47  *);.int sqlite3G
26580 65 74 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a  etTempReg(Parse*
26590 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
265a0 65 6c 65 61 73 65 54 65 6d 70 52 65 67 28 50 61  eleaseTempReg(Pa
265b0 72 73 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73  rse*,int);.int s
265c0 71 6c 69 74 65 33 47 65 74 54 65 6d 70 52 61 6e  qlite3GetTempRan
265d0 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a  ge(Parse*,int);.
265e0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65  void sqlite3Rele
265f0 61 73 65 54 65 6d 70 52 61 6e 67 65 28 50 61 72  aseTempRange(Par
26600 73 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f  se*,int,int);.vo
26610 69 64 20 73 71 6c 69 74 65 33 43 6c 65 61 72 54  id sqlite3ClearT
26620 65 6d 70 52 65 67 43 61 63 68 65 28 50 61 72 73  empRegCache(Pars
26630 65 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  e*);.#ifdef SQLI
26640 54 45 5f 44 45 42 55 47 0a 69 6e 74 20 73 71 6c  TE_DEBUG.int sql
26650 69 74 65 33 4e 6f 54 65 6d 70 73 49 6e 52 61 6e  ite3NoTempsInRan
26660 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 2c 69 6e  ge(Parse*,int,in
26670 74 29 3b 0a 23 65 6e 64 69 66 0a 45 78 70 72 20  t);.#endif.Expr 
26680 2a 73 71 6c 69 74 65 33 45 78 70 72 41 6c 6c 6f  *sqlite3ExprAllo
26690 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63  c(sqlite3*,int,c
266a0 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c 69 6e 74 29  onst Token*,int)
266b0 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
266c0 78 70 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  xpr(sqlite3*,int
266d0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76  ,const char*);.v
266e0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41  oid sqlite3ExprA
266f0 74 74 61 63 68 53 75 62 74 72 65 65 73 28 73 71  ttachSubtrees(sq
26700 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 45 78 70  lite3*,Expr*,Exp
26710 72 2a 2c 45 78 70 72 2a 29 3b 0a 45 78 70 72 20  r*,Expr*);.Expr 
26720 2a 73 71 6c 69 74 65 33 50 45 78 70 72 28 50 61  *sqlite3PExpr(Pa
26730 72 73 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72 2a  rse*, int, Expr*
26740 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
26750 71 6c 69 74 65 33 50 45 78 70 72 41 64 64 53 65  qlite3PExprAddSe
26760 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 45 78 70  lect(Parse*, Exp
26770 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 45 78  r*, Select*);.Ex
26780 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41  pr *sqlite3ExprA
26790 6e 64 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72  nd(sqlite3*,Expr
267a0 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 20  *, Expr*);.Expr 
267b0 2a 73 71 6c 69 74 65 33 45 78 70 72 46 75 6e 63  *sqlite3ExprFunc
267c0 74 69 6f 6e 28 50 61 72 73 65 2a 2c 45 78 70 72  tion(Parse*,Expr
267d0 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  List*, Token*);.
267e0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
267f0 41 73 73 69 67 6e 56 61 72 4e 75 6d 62 65 72 28  AssignVarNumber(
26800 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 75  Parse*, Expr*, u
26810 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  32);.void sqlite
26820 33 45 78 70 72 44 65 6c 65 74 65 28 73 71 6c 69  3ExprDelete(sqli
26830 74 65 33 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78  te3*, Expr*);.Ex
26840 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45  prList *sqlite3E
26850 78 70 72 4c 69 73 74 41 70 70 65 6e 64 28 50 61  xprListAppend(Pa
26860 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45  rse*,ExprList*,E
26870 78 70 72 2a 29 3b 0a 45 78 70 72 4c 69 73 74 20  xpr*);.ExprList 
26880 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74  *sqlite3ExprList
26890 41 70 70 65 6e 64 56 65 63 74 6f 72 28 50 61 72  AppendVector(Par
268a0 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 49 64  se*,ExprList*,Id
268b0 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f  List*,Expr*);.vo
268c0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  id sqlite3ExprLi
268d0 73 74 53 65 74 53 6f 72 74 4f 72 64 65 72 28 45  stSetSortOrder(E
268e0 78 70 72 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 76  xprList*,int);.v
268f0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c  oid sqlite3ExprL
26900 69 73 74 53 65 74 4e 61 6d 65 28 50 61 72 73 65  istSetName(Parse
26910 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 54 6f 6b 65  *,ExprList*,Toke
26920 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  n*,int);.void sq
26930 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53 65 74  lite3ExprListSet
26940 53 70 61 6e 28 50 61 72 73 65 2a 2c 45 78 70 72  Span(Parse*,Expr
26950 4c 69 73 74 2a 2c 45 78 70 72 53 70 61 6e 2a 29  List*,ExprSpan*)
26960 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
26970 70 72 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c  prListDelete(sql
26980 69 74 65 33 2a 2c 20 45 78 70 72 4c 69 73 74 2a  ite3*, ExprList*
26990 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 45 78  );.u32 sqlite3Ex
269a0 70 72 4c 69 73 74 46 6c 61 67 73 28 63 6f 6e 73  prListFlags(cons
269b0 74 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e  t ExprList*);.in
269c0 74 20 73 71 6c 69 74 65 33 49 6e 69 74 28 73 71  t sqlite3Init(sq
269d0 6c 69 74 65 33 2a 2c 20 63 68 61 72 2a 2a 29 3b  lite3*, char**);
269e0 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74  .int sqlite3Init
269f0 43 61 6c 6c 62 61 63 6b 28 76 6f 69 64 2a 2c 20  Callback(void*, 
26a00 69 6e 74 2c 20 63 68 61 72 2a 2a 2c 20 63 68 61  int, char**, cha
26a10 72 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  r**);.void sqlit
26a20 65 33 50 72 61 67 6d 61 28 50 61 72 73 65 2a 2c  e3Pragma(Parse*,
26a30 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Token*,Token*,To
26a40 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 23 69 66 6e 64  ken*,int);.#ifnd
26a50 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
26a60 49 52 54 55 41 4c 54 41 42 4c 45 0a 4d 6f 64 75  IRTUALTABLE.Modu
26a70 6c 65 20 2a 73 71 6c 69 74 65 33 50 72 61 67 6d  le *sqlite3Pragm
26a80 61 56 74 61 62 52 65 67 69 73 74 65 72 28 73 71  aVtabRegister(sq
26a90 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
26aa0 72 20 2a 7a 4e 61 6d 65 29 3b 0a 23 65 6e 64 69  r *zName);.#endi
26ab0 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  f.void sqlite3Re
26ac0 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43  setAllSchemasOfC
26ad0 6f 6e 6e 65 63 74 69 6f 6e 28 73 71 6c 69 74 65  onnection(sqlite
26ae0 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  3*);.void sqlite
26af0 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d 61 28  3ResetOneSchema(
26b00 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76  sqlite3*,int);.v
26b10 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 6c 61  oid sqlite3Colla
26b20 70 73 65 44 61 74 61 62 61 73 65 41 72 72 61 79  pseDatabaseArray
26b30 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64  (sqlite3*);.void
26b40 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74 49 6e   sqlite3CommitIn
26b50 74 65 72 6e 61 6c 43 68 61 6e 67 65 73 28 73 71  ternalChanges(sq
26b60 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71  lite3*);.void sq
26b70 6c 69 74 65 33 44 65 6c 65 74 65 43 6f 6c 75 6d  lite3DeleteColum
26b80 6e 4e 61 6d 65 73 28 73 71 6c 69 74 65 33 2a 2c  nNames(sqlite3*,
26b90 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c  Table*);.int sql
26ba0 69 74 65 33 43 6f 6c 75 6d 6e 73 46 72 6f 6d 45  ite3ColumnsFromE
26bb0 78 70 72 4c 69 73 74 28 50 61 72 73 65 2a 2c 45  xprList(Parse*,E
26bc0 78 70 72 4c 69 73 74 2a 2c 69 31 36 2a 2c 43 6f  xprList*,i16*,Co
26bd0 6c 75 6d 6e 2a 2a 29 3b 0a 76 6f 69 64 20 73 71  lumn**);.void sq
26be0 6c 69 74 65 33 53 65 6c 65 63 74 41 64 64 43 6f  lite3SelectAddCo
26bf0 6c 75 6d 6e 54 79 70 65 41 6e 64 43 6f 6c 6c 61  lumnTypeAndColla
26c00 74 69 6f 6e 28 50 61 72 73 65 2a 2c 54 61 62 6c  tion(Parse*,Tabl
26c10 65 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 54 61 62  e*,Select*);.Tab
26c20 6c 65 20 2a 73 71 6c 69 74 65 33 52 65 73 75 6c  le *sqlite3Resul
26c30 74 53 65 74 4f 66 53 65 6c 65 63 74 28 50 61 72  tSetOfSelect(Par
26c40 73 65 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 76 6f  se*,Select*);.vo
26c50 69 64 20 73 71 6c 69 74 65 33 4f 70 65 6e 4d 61  id sqlite3OpenMa
26c60 73 74 65 72 54 61 62 6c 65 28 50 61 72 73 65 20  sterTable(Parse 
26c70 2a 2c 20 69 6e 74 29 3b 0a 49 6e 64 65 78 20 2a  *, int);.Index *
26c80 73 71 6c 69 74 65 33 50 72 69 6d 61 72 79 4b 65  sqlite3PrimaryKe
26c90 79 49 6e 64 65 78 28 54 61 62 6c 65 2a 29 3b 0a  yIndex(Table*);.
26ca0 69 31 36 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d  i16 sqlite3Colum
26cb0 6e 4f 66 49 6e 64 65 78 28 49 6e 64 65 78 2a 2c  nOfIndex(Index*,
26cc0 20 69 31 36 29 3b 0a 76 6f 69 64 20 73 71 6c 69   i16);.void sqli
26cd0 74 65 33 53 74 61 72 74 54 61 62 6c 65 28 50 61  te3StartTable(Pa
26ce0 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  rse*,Token*,Toke
26cf0 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69  n*,int,int,int,i
26d00 6e 74 29 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f  nt);.#if SQLITE_
26d10 45 4e 41 42 4c 45 5f 48 49 44 44 45 4e 5f 43 4f  ENABLE_HIDDEN_CO
26d20 4c 55 4d 4e 53 0a 20 20 76 6f 69 64 20 73 71 6c  LUMNS.  void sql
26d30 69 74 65 33 43 6f 6c 75 6d 6e 50 72 6f 70 65 72  ite3ColumnProper
26d40 74 69 65 73 46 72 6f 6d 4e 61 6d 65 28 54 61 62  tiesFromName(Tab
26d50 6c 65 2a 2c 20 43 6f 6c 75 6d 6e 2a 29 3b 0a 23  le*, Column*);.#
26d60 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
26d70 6c 69 74 65 33 43 6f 6c 75 6d 6e 50 72 6f 70 65  lite3ColumnPrope
26d80 72 74 69 65 73 46 72 6f 6d 4e 61 6d 65 28 54 2c  rtiesFromName(T,
26d90 43 29 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23  C) /* no-op */.#
26da0 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
26db0 65 33 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73  e3AddColumn(Pars
26dc0 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  e*,Token*,Token*
26dd0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
26de0 64 64 4e 6f 74 4e 75 6c 6c 28 50 61 72 73 65 2a  ddNotNull(Parse*
26df0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
26e00 69 74 65 33 41 64 64 50 72 69 6d 61 72 79 4b 65  ite3AddPrimaryKe
26e10 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69  y(Parse*, ExprLi
26e20 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  st*, int, int, i
26e30 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
26e40 33 41 64 64 43 68 65 63 6b 43 6f 6e 73 74 72 61  3AddCheckConstra
26e50 69 6e 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72  int(Parse*, Expr
26e60 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
26e70 41 64 64 44 65 66 61 75 6c 74 56 61 6c 75 65 28  AddDefaultValue(
26e80 50 61 72 73 65 2a 2c 45 78 70 72 53 70 61 6e 2a  Parse*,ExprSpan*
26e90 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
26ea0 64 64 43 6f 6c 6c 61 74 65 54 79 70 65 28 50 61  ddCollateType(Pa
26eb0 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76  rse*, Token*);.v
26ec0 6f 69 64 20 73 71 6c 69 74 65 33 45 6e 64 54 61  oid sqlite3EndTa
26ed0 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  ble(Parse*,Token
26ee0 2a 2c 54 6f 6b 65 6e 2a 2c 75 38 2c 53 65 6c 65  *,Token*,u8,Sele
26ef0 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ct*);.int sqlite
26f00 33 50 61 72 73 65 55 72 69 28 63 6f 6e 73 74 20  3ParseUri(const 
26f10 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
26f20 2a 2c 75 6e 73 69 67 6e 65 64 20 69 6e 74 2a 2c  *,unsigned int*,
26f30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26f40 20 20 20 20 20 73 71 6c 69 74 65 33 5f 76 66 73       sqlite3_vfs
26f50 2a 2a 2c 63 68 61 72 2a 2a 2c 63 68 61 72 20 2a  **,char**,char *
26f60 2a 29 3b 0a 42 74 72 65 65 20 2a 73 71 6c 69 74  *);.Btree *sqlit
26f70 65 33 44 62 4e 61 6d 65 54 6f 42 74 72 65 65 28  e3DbNameToBtree(
26f80 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
26f90 68 61 72 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53  har*);..#ifdef S
26fa0 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45  QLITE_UNTESTABLE
26fb0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
26fc0 33 46 61 75 6c 74 53 69 6d 28 58 29 20 53 51 4c  3FaultSim(X) SQL
26fd0 49 54 45 5f 4f 4b 0a 23 65 6c 73 65 0a 20 20 69  ITE_OK.#else.  i
26fe0 6e 74 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53  nt sqlite3FaultS
26ff0 69 6d 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a  im(int);.#endif.
27000 0a 42 69 74 76 65 63 20 2a 73 71 6c 69 74 65 33  .Bitvec *sqlite3
27010 42 69 74 76 65 63 43 72 65 61 74 65 28 75 33 32  BitvecCreate(u32
27020 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69  );.int sqlite3Bi
27030 74 76 65 63 54 65 73 74 28 42 69 74 76 65 63 2a  tvecTest(Bitvec*
27040 2c 20 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69  , u32);.int sqli
27050 74 65 33 42 69 74 76 65 63 54 65 73 74 4e 6f 74  te3BitvecTestNot
27060 4e 75 6c 6c 28 42 69 74 76 65 63 2a 2c 20 75 33  Null(Bitvec*, u3
27070 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42  2);.int sqlite3B
27080 69 74 76 65 63 53 65 74 28 42 69 74 76 65 63 2a  itvecSet(Bitvec*
27090 2c 20 75 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c  , u32);.void sql
270a0 69 74 65 33 42 69 74 76 65 63 43 6c 65 61 72 28  ite3BitvecClear(
270b0 42 69 74 76 65 63 2a 2c 20 75 33 32 2c 20 76 6f  Bitvec*, u32, vo
270c0 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  id*);.void sqlit
270d0 65 33 42 69 74 76 65 63 44 65 73 74 72 6f 79 28  e3BitvecDestroy(
270e0 42 69 74 76 65 63 2a 29 3b 0a 75 33 32 20 73 71  Bitvec*);.u32 sq
270f0 6c 69 74 65 33 42 69 74 76 65 63 53 69 7a 65 28  lite3BitvecSize(
27100 42 69 74 76 65 63 2a 29 3b 0a 23 69 66 6e 64 65  Bitvec*);.#ifnde
27110 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41  f SQLITE_UNTESTA
27120 42 4c 45 0a 69 6e 74 20 73 71 6c 69 74 65 33 42  BLE.int sqlite3B
27130 69 74 76 65 63 42 75 69 6c 74 69 6e 54 65 73 74  itvecBuiltinTest
27140 28 69 6e 74 2c 69 6e 74 2a 29 3b 0a 23 65 6e 64  (int,int*);.#end
27150 69 66 0a 0a 52 6f 77 53 65 74 20 2a 73 71 6c 69  if..RowSet *sqli
27160 74 65 33 52 6f 77 53 65 74 49 6e 69 74 28 73 71  te3RowSetInit(sq
27170 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 2c 20 75  lite3*, void*, u
27180 6e 73 69 67 6e 65 64 20 69 6e 74 29 3b 0a 76 6f  nsigned int);.vo
27190 69 64 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74  id sqlite3RowSet
271a0 43 6c 65 61 72 28 52 6f 77 53 65 74 2a 29 3b 0a  Clear(RowSet*);.
271b0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77 53  void sqlite3RowS
271c0 65 74 49 6e 73 65 72 74 28 52 6f 77 53 65 74 2a  etInsert(RowSet*
271d0 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69  , i64);.int sqli
271e0 74 65 33 52 6f 77 53 65 74 54 65 73 74 28 52 6f  te3RowSetTest(Ro
271f0 77 53 65 74 2a 2c 20 69 6e 74 20 69 42 61 74 63  wSet*, int iBatc
27200 68 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c  h, i64);.int sql
27210 69 74 65 33 52 6f 77 53 65 74 4e 65 78 74 28 52  ite3RowSetNext(R
27220 6f 77 53 65 74 2a 2c 20 69 36 34 2a 29 3b 0a 0a  owSet*, i64*);..
27230 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65 61  void sqlite3Crea
27240 74 65 56 69 65 77 28 50 61 72 73 65 2a 2c 54 6f  teView(Parse*,To
27250 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  ken*,Token*,Toke
27260 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53 65 6c  n*,ExprList*,Sel
27270 65 63 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 0a  ect*,int,int);..
27280 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
27290 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20 7c  ITE_OMIT_VIEW) |
272a0 7c 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  | !defined(SQLIT
272b0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
272c0 42 4c 45 29 0a 20 20 69 6e 74 20 73 71 6c 69 74  BLE).  int sqlit
272d0 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e  e3ViewGetColumnN
272e0 61 6d 65 73 28 50 61 72 73 65 2a 2c 54 61 62 6c  ames(Parse*,Tabl
272f0 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  e*);.#else.# def
27300 69 6e 65 20 73 71 6c 69 74 65 33 56 69 65 77 47  ine sqlite3ViewG
27310 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 41 2c  etColumnNames(A,
27320 42 29 20 30 0a 23 65 6e 64 69 66 0a 0a 23 69 66  B) 0.#endif..#if
27330 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41   SQLITE_MAX_ATTA
27340 43 48 45 44 3e 33 30 0a 20 20 69 6e 74 20 73 71  CHED>30.  int sq
27350 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65  lite3DbMaskAllZe
27360 72 6f 28 79 44 62 4d 61 73 6b 29 3b 0a 23 65 6e  ro(yDbMask);.#en
27370 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
27380 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a  DropTable(Parse*
27390 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c  , SrcList*, int,
273a0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
273b0 74 65 33 43 6f 64 65 44 72 6f 70 54 61 62 6c 65  te3CodeDropTable
273c0 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
273d0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
273e0 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 61   sqlite3DeleteTa
273f0 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20 54 61  ble(sqlite3*, Ta
27400 62 6c 65 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53  ble*);.#ifndef S
27410 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49  QLITE_OMIT_AUTOI
27420 4e 43 52 45 4d 45 4e 54 0a 20 20 76 6f 69 64 20  NCREMENT.  void 
27430 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65  sqlite3Autoincre
27440 6d 65 6e 74 42 65 67 69 6e 28 50 61 72 73 65 20  mentBegin(Parse 
27450 2a 70 50 61 72 73 65 29 3b 0a 20 20 76 6f 69 64  *pParse);.  void
27460 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72   sqlite3Autoincr
27470 65 6d 65 6e 74 45 6e 64 28 50 61 72 73 65 20 2a  ementEnd(Parse *
27480 70 50 61 72 73 65 29 3b 0a 23 65 6c 73 65 0a 23  pParse);.#else.#
27490 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41   define sqlite3A
274a0 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67 69  utoincrementBegi
274b0 6e 28 58 29 0a 23 20 64 65 66 69 6e 65 20 73 71  n(X).# define sq
274c0 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65  lite3Autoincreme
274d0 6e 74 45 6e 64 28 58 29 0a 23 65 6e 64 69 66 0a  ntEnd(X).#endif.
274e0 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 73 65  void sqlite3Inse
274f0 72 74 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  rt(Parse*, SrcLi
27500 73 74 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 49 64  st*, Select*, Id
27510 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  List*, int);.voi
27520 64 20 2a 73 71 6c 69 74 65 33 41 72 72 61 79 41  d *sqlite3ArrayA
27530 6c 6c 6f 63 61 74 65 28 73 71 6c 69 74 65 33 2a  llocate(sqlite3*
27540 2c 76 6f 69 64 2a 2c 69 6e 74 2c 69 6e 74 2a 2c  ,void*,int,int*,
27550 69 6e 74 2a 29 3b 0a 49 64 4c 69 73 74 20 2a 73  int*);.IdList *s
27560 71 6c 69 74 65 33 49 64 4c 69 73 74 41 70 70 65  qlite3IdListAppe
27570 6e 64 28 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c  nd(sqlite3*, IdL
27580 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69  ist*, Token*);.i
27590 6e 74 20 73 71 6c 69 74 65 33 49 64 4c 69 73 74  nt sqlite3IdList
275a0 49 6e 64 65 78 28 49 64 4c 69 73 74 2a 2c 63 6f  Index(IdList*,co
275b0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 53 72 63 4c  nst char*);.SrcL
275c0 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c  ist *sqlite3SrcL
275d0 69 73 74 45 6e 6c 61 72 67 65 28 73 71 6c 69 74  istEnlarge(sqlit
275e0 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69  e3*, SrcList*, i
275f0 6e 74 2c 20 69 6e 74 29 3b 0a 53 72 63 4c 69 73  nt, int);.SrcLis
27600 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73  t *sqlite3SrcLis
27610 74 41 70 70 65 6e 64 28 73 71 6c 69 74 65 33 2a  tAppend(sqlite3*
27620 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65  , SrcList*, Toke
27630 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 53 72 63  n*, Token*);.Src
27640 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63  List *sqlite3Src
27650 4c 69 73 74 41 70 70 65 6e 64 46 72 6f 6d 54 65  ListAppendFromTe
27660 72 6d 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  rm(Parse*, SrcLi
27670 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  st*, Token*, Tok
27680 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  en*,.           
27690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
276a0 20 20 20 20 20 20 20 20 20 20 20 54 6f 6b 65 6e             Token
276b0 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78 70 72  *, Select*, Expr
276c0 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69  *, IdList*);.voi
276d0 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74  d sqlite3SrcList
276e0 49 6e 64 65 78 65 64 42 79 28 50 61 72 73 65 20  IndexedBy(Parse 
276f0 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 54 6f  *, SrcList *, To
27700 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ken *);.void sql
27710 69 74 65 33 53 72 63 4c 69 73 74 46 75 6e 63 41  ite3SrcListFuncA
27720 72 67 73 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  rgs(Parse*, SrcL
27730 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29  ist*, ExprList*)
27740 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 64  ;.int sqlite3Ind
27750 65 78 65 64 42 79 4c 6f 6f 6b 75 70 28 50 61 72  exedByLookup(Par
27760 73 65 20 2a 2c 20 73 74 72 75 63 74 20 53 72 63  se *, struct Src
27770 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 76 6f  List_item *);.vo
27780 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  id sqlite3SrcLis
27790 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 53  tShiftJoinType(S
277a0 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73  rcList*);.void s
277b0 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41 73 73  qlite3SrcListAss
277c0 69 67 6e 43 75 72 73 6f 72 73 28 50 61 72 73 65  ignCursors(Parse
277d0 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f  *, SrcList*);.vo
277e0 69 64 20 73 71 6c 69 74 65 33 49 64 4c 69 73 74  id sqlite3IdList
277f0 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c  Delete(sqlite3*,
27800 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20   IdList*);.void 
27810 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 44 65  sqlite3SrcListDe
27820 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53  lete(sqlite3*, S
27830 72 63 4c 69 73 74 2a 29 3b 0a 49 6e 64 65 78 20  rcList*);.Index 
27840 2a 73 71 6c 69 74 65 33 41 6c 6c 6f 63 61 74 65  *sqlite3Allocate
27850 49 6e 64 65 78 4f 62 6a 65 63 74 28 73 71 6c 69  IndexObject(sqli
27860 74 65 33 2a 2c 69 31 36 2c 69 6e 74 2c 63 68 61  te3*,i16,int,cha
27870 72 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  r**);.void sqlit
27880 65 33 43 72 65 61 74 65 49 6e 64 65 78 28 50 61  e3CreateIndex(Pa
27890 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  rse*,Token*,Toke
278a0 6e 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72  n*,SrcList*,Expr
278b0 4c 69 73 74 2a 2c 69 6e 74 2c 54 6f 6b 65 6e 2a  List*,int,Token*
278c0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
278d0 20 20 20 20 20 20 20 20 20 20 20 20 45 78 70 72              Expr
278e0 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29  *, int, int, u8)
278f0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72  ;.void sqlite3Dr
27900 6f 70 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 20  opIndex(Parse*, 
27910 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a  SrcList*, int);.
27920 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63  int sqlite3Selec
27930 74 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74  t(Parse*, Select
27940 2a 2c 20 53 65 6c 65 63 74 44 65 73 74 2a 29 3b  *, SelectDest*);
27950 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69 74 65 33  .Select *sqlite3
27960 53 65 6c 65 63 74 4e 65 77 28 50 61 72 73 65 2a  SelectNew(Parse*
27970 2c 45 78 70 72 4c 69 73 74 2a 2c 53 72 63 4c 69  ,ExprList*,SrcLi
27980 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69  st*,Expr*,ExprLi
27990 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  st*,.           
279a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45 78                Ex
279b0 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75 33  pr*,ExprList*,u3
279c0 32 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a  2,Expr*,Expr*);.
279d0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65  void sqlite3Sele
279e0 63 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  ctDelete(sqlite3
279f0 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 54 61 62  *, Select*);.Tab
27a00 6c 65 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69  le *sqlite3SrcLi
27a10 73 74 4c 6f 6f 6b 75 70 28 50 61 72 73 65 2a 2c  stLookup(Parse*,
27a20 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20   SrcList*);.int 
27a30 73 71 6c 69 74 65 33 49 73 52 65 61 64 4f 6e 6c  sqlite3IsReadOnl
27a40 79 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  y(Parse*, Table*
27a50 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
27a60 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 28 50 61  ite3OpenTable(Pa
27a70 72 73 65 2a 2c 20 69 6e 74 20 69 43 75 72 2c 20  rse*, int iCur, 
27a80 69 6e 74 20 69 44 62 2c 20 54 61 62 6c 65 2a 2c  int iDb, Table*,
27a90 20 69 6e 74 29 3b 0a 23 69 66 20 64 65 66 69 6e   int);.#if defin
27aa0 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
27ab0 5f 55 50 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c  _UPDATE_DELETE_L
27ac0 49 4d 49 54 29 20 26 26 20 21 64 65 66 69 6e 65  IMIT) && !define
27ad0 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 55  d(SQLITE_OMIT_SU
27ae0 42 51 55 45 52 59 29 0a 45 78 70 72 20 2a 73 71  BQUERY).Expr *sq
27af0 6c 69 74 65 33 4c 69 6d 69 74 57 68 65 72 65 28  lite3LimitWhere(
27b00 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c  Parse*,SrcList*,
27b10 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  Expr*,ExprList*,
27b20 45 78 70 72 2a 2c 45 78 70 72 2a 2c 63 68 61 72  Expr*,Expr*,char
27b30 2a 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  *);.#endif.void 
27b40 73 71 6c 69 74 65 33 44 65 6c 65 74 65 46 72 6f  sqlite3DeleteFro
27b50 6d 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  m(Parse*, SrcLis
27b60 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  t*, Expr*);.void
27b70 20 73 71 6c 69 74 65 33 55 70 64 61 74 65 28 50   sqlite3Update(P
27b80 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
27b90 20 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72   ExprList*, Expr
27ba0 2a 2c 20 69 6e 74 29 3b 0a 57 68 65 72 65 49 6e  *, int);.WhereIn
27bb0 66 6f 20 2a 73 71 6c 69 74 65 33 57 68 65 72 65  fo *sqlite3Where
27bc0 42 65 67 69 6e 28 50 61 72 73 65 2a 2c 53 72 63  Begin(Parse*,Src
27bd0 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72  List*,Expr*,Expr
27be0 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  List*,ExprList*,
27bf0 75 31 36 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  u16,int);.void s
27c00 71 6c 69 74 65 33 57 68 65 72 65 45 6e 64 28 57  qlite3WhereEnd(W
27c10 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 4c 6f 67 45  hereInfo*);.LogE
27c20 73 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 4f  st sqlite3WhereO
27c30 75 74 70 75 74 52 6f 77 43 6f 75 6e 74 28 57 68  utputRowCount(Wh
27c40 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73  ereInfo*);.int s
27c50 71 6c 69 74 65 33 57 68 65 72 65 49 73 44 69 73  qlite3WhereIsDis
27c60 74 69 6e 63 74 28 57 68 65 72 65 49 6e 66 6f 2a  tinct(WhereInfo*
27c70 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68  );.int sqlite3Wh
27c80 65 72 65 49 73 4f 72 64 65 72 65 64 28 57 68 65  ereIsOrdered(Whe
27c90 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
27ca0 6c 69 74 65 33 57 68 65 72 65 4f 72 64 65 72 65  lite3WhereOrdere
27cb0 64 49 6e 6e 65 72 4c 6f 6f 70 28 57 68 65 72 65  dInnerLoop(Where
27cc0 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Info*);.int sqli
27cd0 74 65 33 57 68 65 72 65 49 73 53 6f 72 74 65 64  te3WhereIsSorted
27ce0 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e  (WhereInfo*);.in
27cf0 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 43 6f  t sqlite3WhereCo
27d00 6e 74 69 6e 75 65 4c 61 62 65 6c 28 57 68 65 72  ntinueLabel(Wher
27d10 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c  eInfo*);.int sql
27d20 69 74 65 33 57 68 65 72 65 42 72 65 61 6b 4c 61  ite3WhereBreakLa
27d30 62 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b  bel(WhereInfo*);
27d40 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72  .int sqlite3Wher
27d50 65 4f 6b 4f 6e 65 50 61 73 73 28 57 68 65 72 65  eOkOnePass(Where
27d60 49 6e 66 6f 2a 2c 20 69 6e 74 2a 29 3b 0a 23 64  Info*, int*);.#d
27d70 65 66 69 6e 65 20 4f 4e 45 50 41 53 53 5f 4f 46  efine ONEPASS_OF
27d80 46 20 20 20 20 20 20 30 20 20 20 20 20 20 20 20  F      0        
27d90 2f 2a 20 55 73 65 20 6f 66 20 4f 4e 45 50 41 53  /* Use of ONEPAS
27da0 53 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 2a 2f  S not allowed */
27db0 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50 41 53 53  .#define ONEPASS
27dc0 5f 53 49 4e 47 4c 45 20 20 20 31 20 20 20 20 20  _SINGLE   1     
27dd0 20 20 20 2f 2a 20 4f 4e 45 50 41 53 53 20 76 61     /* ONEPASS va
27de0 6c 69 64 20 66 6f 72 20 61 20 73 69 6e 67 6c 65  lid for a single
27df0 20 72 6f 77 20 75 70 64 61 74 65 20 2a 2f 0a 23   row update */.#
27e00 64 65 66 69 6e 65 20 4f 4e 45 50 41 53 53 5f 4d  define ONEPASS_M
27e10 55 4c 54 49 20 20 20 20 32 20 20 20 20 20 20 20  ULTI    2       
27e20 20 2f 2a 20 4f 4e 45 50 41 53 53 20 69 73 20 76   /* ONEPASS is v
27e30 61 6c 69 64 20 66 6f 72 20 6d 75 6c 74 69 70 6c  alid for multipl
27e40 65 20 72 6f 77 73 20 2a 2f 0a 76 6f 69 64 20 73  e rows */.void s
27e50 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 4c 6f  qlite3ExprCodeLo
27e60 61 64 49 6e 64 65 78 43 6f 6c 75 6d 6e 28 50 61  adIndexColumn(Pa
27e70 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e  rse*, Index*, in
27e80 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e  t, int, int);.in
27e90 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  t sqlite3ExprCod
27ea0 65 47 65 74 43 6f 6c 75 6d 6e 28 50 61 72 73 65  eGetColumn(Parse
27eb0 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
27ec0 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 76  int, int, u8);.v
27ed0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
27ee0 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 54 6f 52 65  odeGetColumnToRe
27ef0 67 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  g(Parse*, Table*
27f00 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
27f10 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
27f20 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 4f  prCodeGetColumnO
27f30 66 54 61 62 6c 65 28 56 64 62 65 2a 2c 20 54 61  fTable(Vdbe*, Ta
27f40 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ble*, int, int, 
27f50 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
27f60 65 33 45 78 70 72 43 6f 64 65 4d 6f 76 65 28 50  e3ExprCodeMove(P
27f70 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  arse*, int, int,
27f80 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
27f90 74 65 33 45 78 70 72 43 61 63 68 65 53 74 6f 72  te3ExprCacheStor
27fa0 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69  e(Parse*, int, i
27fb0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
27fc0 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 50  qlite3ExprCacheP
27fd0 75 73 68 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  ush(Parse*);.voi
27fe0 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63  d sqlite3ExprCac
27ff0 68 65 50 6f 70 28 50 61 72 73 65 2a 29 3b 0a 76  hePop(Parse*);.v
28000 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
28010 61 63 68 65 52 65 6d 6f 76 65 28 50 61 72 73 65  acheRemove(Parse
28020 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
28030 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61  id sqlite3ExprCa
28040 63 68 65 43 6c 65 61 72 28 50 61 72 73 65 2a 29  cheClear(Parse*)
28050 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
28060 70 72 43 61 63 68 65 41 66 66 69 6e 69 74 79 43  prCacheAffinityC
28070 68 61 6e 67 65 28 50 61 72 73 65 2a 2c 20 69 6e  hange(Parse*, in
28080 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
28090 6c 69 74 65 33 45 78 70 72 43 6f 64 65 28 50 61  lite3ExprCode(Pa
280a0 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
280b0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
280c0 78 70 72 43 6f 64 65 43 6f 70 79 28 50 61 72 73  xprCodeCopy(Pars
280d0 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  e*, Expr*, int);
280e0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
280f0 72 43 6f 64 65 46 61 63 74 6f 72 61 62 6c 65 28  rCodeFactorable(
28100 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
28110 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
28120 45 78 70 72 43 6f 64 65 41 74 49 6e 69 74 28 50  ExprCodeAtInit(P
28130 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
28140 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  t);.int sqlite3E
28150 78 70 72 43 6f 64 65 54 65 6d 70 28 50 61 72 73  xprCodeTemp(Pars
28160 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2a 29  e*, Expr*, int*)
28170 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
28180 72 43 6f 64 65 54 61 72 67 65 74 28 50 61 72 73  rCodeTarget(Pars
28190 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  e*, Expr*, int);
281a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
281b0 72 43 6f 64 65 41 6e 64 43 61 63 68 65 28 50 61  rCodeAndCache(Pa
281c0 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
281d0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
281e0 70 72 43 6f 64 65 45 78 70 72 4c 69 73 74 28 50  prCodeExprList(P
281f0 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a  arse*, ExprList*
28200 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b  , int, int, u8);
28210 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
28220 45 43 45 4c 5f 44 55 50 20 20 20 20 20 20 30 78  ECEL_DUP      0x
28230 30 31 20 20 2f 2a 20 44 65 65 70 2c 20 6e 6f 74  01  /* Deep, not
28240 20 73 68 61 6c 6c 6f 77 20 63 6f 70 69 65 73 20   shallow copies 
28250 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
28260 45 5f 45 43 45 4c 5f 46 41 43 54 4f 52 20 20 20  E_ECEL_FACTOR   
28270 30 78 30 32 20 20 2f 2a 20 46 61 63 74 6f 72 20  0x02  /* Factor 
28280 6f 75 74 20 63 6f 6e 73 74 61 6e 74 20 74 65 72  out constant ter
28290 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ms */.#define SQ
282a0 4c 49 54 45 5f 45 43 45 4c 5f 52 45 46 20 20 20  LITE_ECEL_REF   
282b0 20 20 20 30 78 30 34 20 20 2f 2a 20 55 73 65 20     0x04  /* Use 
282c0 45 78 70 72 4c 69 73 74 2e 75 2e 78 2e 69 4f 72  ExprList.u.x.iOr
282d0 64 65 72 42 79 43 6f 6c 20 2a 2f 0a 23 64 65 66  derByCol */.#def
282e0 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f  ine SQLITE_ECEL_
282f0 4f 4d 49 54 52 45 46 20 20 30 78 30 38 20 20 2f  OMITREF  0x08  /
28300 2a 20 4f 6d 69 74 20 69 66 20 45 78 70 72 4c 69  * Omit if ExprLi
28310 73 74 2e 75 2e 78 2e 69 4f 72 64 65 72 42 79 43  st.u.x.iOrderByC
28320 6f 6c 20 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74  ol */.void sqlit
28330 65 33 45 78 70 72 49 66 54 72 75 65 28 50 61 72  e3ExprIfTrue(Par
28340 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c  se*, Expr*, int,
28350 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
28360 74 65 33 45 78 70 72 49 66 46 61 6c 73 65 28 50  te3ExprIfFalse(P
28370 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
28380 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
28390 6c 69 74 65 33 45 78 70 72 49 66 46 61 6c 73 65  lite3ExprIfFalse
283a0 44 75 70 28 50 61 72 73 65 2a 2c 20 45 78 70 72  Dup(Parse*, Expr
283b0 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 54 61  *, int, int);.Ta
283c0 62 6c 65 20 2a 73 71 6c 69 74 65 33 46 69 6e 64  ble *sqlite3Find
283d0 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 63  Table(sqlite3*,c
283e0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
283f0 74 20 63 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e  t char*);.#defin
28400 65 20 4c 4f 43 41 54 45 5f 56 49 45 57 20 20 20  e LOCATE_VIEW   
28410 20 30 78 30 31 0a 23 64 65 66 69 6e 65 20 4c 4f   0x01.#define LO
28420 43 41 54 45 5f 4e 4f 45 52 52 20 20 20 30 78 30  CATE_NOERR   0x0
28430 32 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33  2.Table *sqlite3
28440 4c 6f 63 61 74 65 54 61 62 6c 65 28 50 61 72 73  LocateTable(Pars
28450 65 2a 2c 75 33 32 20 66 6c 61 67 73 2c 63 6f 6e  e*,u32 flags,con
28460 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
28470 63 68 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73  char*);.Table *s
28480 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c  qlite3LocateTabl
28490 65 49 74 65 6d 28 50 61 72 73 65 2a 2c 75 33 32  eItem(Parse*,u32
284a0 20 66 6c 61 67 73 2c 73 74 72 75 63 74 20 53 72   flags,struct Sr
284b0 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 49  cList_item *);.I
284c0 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 46 69 6e  ndex *sqlite3Fin
284d0 64 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c  dIndex(sqlite3*,
284e0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
284f0 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
28500 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64  sqlite3UnlinkAnd
28510 44 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69  DeleteTable(sqli
28520 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  te3*,int,const c
28530 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
28540 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
28550 74 65 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a  teIndex(sqlite3*
28560 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
28570 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
28580 61 63 75 75 6d 28 50 61 72 73 65 2a 2c 54 6f 6b  acuum(Parse*,Tok
28590 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
285a0 33 52 75 6e 56 61 63 75 75 6d 28 63 68 61 72 2a  3RunVacuum(char*
285b0 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  *, sqlite3*, int
285c0 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
285d0 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 73 71  NameFromToken(sq
285e0 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  lite3*, Token*);
285f0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
28600 43 6f 6d 70 61 72 65 28 50 61 72 73 65 2a 2c 45  Compare(Parse*,E
28610 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  xpr*, Expr*, int
28620 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
28630 70 72 43 6f 6d 70 61 72 65 53 6b 69 70 28 45 78  prCompareSkip(Ex
28640 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  pr*, Expr*, int)
28650 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
28660 72 4c 69 73 74 43 6f 6d 70 61 72 65 28 45 78 70  rListCompare(Exp
28670 72 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74  rList*, ExprList
28680 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
28690 69 74 65 33 45 78 70 72 49 6d 70 6c 69 65 73 45  ite3ExprImpliesE
286a0 78 70 72 28 50 61 72 73 65 2a 2c 45 78 70 72 2a  xpr(Parse*,Expr*
286b0 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76  , Expr*, int);.v
286c0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41  oid sqlite3ExprA
286d0 6e 61 6c 79 7a 65 41 67 67 72 65 67 61 74 65 73  nalyzeAggregates
286e0 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45  (NameContext*, E
286f0 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
28700 74 65 33 45 78 70 72 41 6e 61 6c 79 7a 65 41 67  te3ExprAnalyzeAg
28710 67 4c 69 73 74 28 4e 61 6d 65 43 6f 6e 74 65 78  gList(NameContex
28720 74 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69  t*,ExprList*);.i
28730 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
28740 76 65 72 65 64 42 79 49 6e 64 65 78 28 45 78 70  veredByIndex(Exp
28750 72 2a 2c 20 69 6e 74 20 69 43 75 72 2c 20 49 6e  r*, int iCur, In
28760 64 65 78 20 2a 70 49 64 78 29 3b 0a 69 6e 74 20  dex *pIdx);.int 
28770 73 71 6c 69 74 65 33 46 75 6e 63 74 69 6f 6e 55  sqlite3FunctionU
28780 73 65 73 54 68 69 73 53 72 63 28 45 78 70 72 2a  sesThisSrc(Expr*
28790 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 56 64 62  , SrcList*);.Vdb
287a0 65 20 2a 73 71 6c 69 74 65 33 47 65 74 56 64 62  e *sqlite3GetVdb
287b0 65 28 50 61 72 73 65 2a 29 3b 0a 23 69 66 6e 64  e(Parse*);.#ifnd
287c0 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54  ef SQLITE_UNTEST
287d0 41 42 4c 45 0a 76 6f 69 64 20 73 71 6c 69 74 65  ABLE.void sqlite
287e0 33 50 72 6e 67 53 61 76 65 53 74 61 74 65 28 76  3PrngSaveState(v
287f0 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  oid);.void sqlit
28800 65 33 50 72 6e 67 52 65 73 74 6f 72 65 53 74 61  e3PrngRestoreSta
28810 74 65 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66  te(void);.#endif
28820 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6c  .void sqlite3Rol
28830 6c 62 61 63 6b 41 6c 6c 28 73 71 6c 69 74 65 33  lbackAll(sqlite3
28840 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
28850 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63  ite3CodeVerifySc
28860 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 69 6e 74  hema(Parse*, int
28870 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
28880 6f 64 65 56 65 72 69 66 79 4e 61 6d 65 64 53 63  odeVerifyNamedSc
28890 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 63 6f 6e  hema(Parse*, con
288a0 73 74 20 63 68 61 72 20 2a 7a 44 62 29 3b 0a 76  st char *zDb);.v
288b0 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e  oid sqlite3Begin
288c0 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73  Transaction(Pars
288d0 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e*, int);.void s
288e0 71 6c 69 74 65 33 45 6e 64 54 72 61 6e 73 61 63  qlite3EndTransac
288f0 74 69 6f 6e 28 50 61 72 73 65 2a 2c 69 6e 74 29  tion(Parse*,int)
28900 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 61  ;.void sqlite3Sa
28910 76 65 70 6f 69 6e 74 28 50 61 72 73 65 2a 2c 20  vepoint(Parse*, 
28920 69 6e 74 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  int, Token*);.vo
28930 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 53  id sqlite3CloseS
28940 61 76 65 70 6f 69 6e 74 73 28 73 71 6c 69 74 65  avepoints(sqlite
28950 33 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  3 *);.void sqlit
28960 65 33 4c 65 61 76 65 4d 75 74 65 78 41 6e 64 43  e3LeaveMutexAndC
28970 6c 6f 73 65 5a 6f 6d 62 69 65 28 73 71 6c 69 74  loseZombie(sqlit
28980 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  e3*);.int sqlite
28990 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 28  3ExprIsConstant(
289a0 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
289b0 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e  te3ExprIsConstan
289c0 74 4e 6f 74 4a 6f 69 6e 28 45 78 70 72 2a 29 3b  tNotJoin(Expr*);
289d0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
289e0 49 73 43 6f 6e 73 74 61 6e 74 4f 72 46 75 6e 63  IsConstantOrFunc
289f0 74 69 6f 6e 28 45 78 70 72 2a 2c 20 75 38 29 3b  tion(Expr*, u8);
28a00 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
28a10 49 73 43 6f 6e 73 74 61 6e 74 4f 72 47 72 6f 75  IsConstantOrGrou
28a20 70 42 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72  pBy(Parse*, Expr
28a30 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69  *, ExprList*);.i
28a40 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73  nt sqlite3ExprIs
28a50 54 61 62 6c 65 43 6f 6e 73 74 61 6e 74 28 45 78  TableConstant(Ex
28a60 70 72 2a 2c 69 6e 74 29 3b 0a 23 69 66 64 65 66  pr*,int);.#ifdef
28a70 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43   SQLITE_ENABLE_C
28a80 55 52 53 4f 52 5f 48 49 4e 54 53 0a 69 6e 74 20  URSOR_HINTS.int 
28a90 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6e 74 61  sqlite3ExprConta
28aa0 69 6e 73 53 75 62 71 75 65 72 79 28 45 78 70 72  insSubquery(Expr
28ab0 2a 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73  *);.#endif.int s
28ac0 71 6c 69 74 65 33 45 78 70 72 49 73 49 6e 74 65  qlite3ExprIsInte
28ad0 67 65 72 28 45 78 70 72 2a 2c 20 69 6e 74 2a 29  ger(Expr*, int*)
28ae0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
28af0 72 43 61 6e 42 65 4e 75 6c 6c 28 63 6f 6e 73 74  rCanBeNull(const
28b00 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   Expr*);.int sql
28b10 69 74 65 33 45 78 70 72 4e 65 65 64 73 4e 6f 41  ite3ExprNeedsNoA
28b20 66 66 69 6e 69 74 79 43 68 61 6e 67 65 28 63 6f  ffinityChange(co
28b30 6e 73 74 20 45 78 70 72 2a 2c 20 63 68 61 72 29  nst Expr*, char)
28b40 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52  ;.int sqlite3IsR
28b50 6f 77 69 64 28 63 6f 6e 73 74 20 63 68 61 72 2a  owid(const char*
28b60 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47  );.void sqlite3G
28b70 65 6e 65 72 61 74 65 52 6f 77 44 65 6c 65 74 65  enerateRowDelete
28b80 28 0a 20 20 20 20 50 61 72 73 65 2a 2c 54 61 62  (.    Parse*,Tab
28b90 6c 65 2a 2c 54 72 69 67 67 65 72 2a 2c 69 6e 74  le*,Trigger*,int
28ba0 2c 69 6e 74 2c 69 6e 74 2c 69 31 36 2c 75 38 2c  ,int,int,i16,u8,
28bb0 75 38 2c 75 38 2c 69 6e 74 29 3b 0a 76 6f 69 64  u8,u8,int);.void
28bc0 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65   sqlite3Generate
28bd0 52 6f 77 49 6e 64 65 78 44 65 6c 65 74 65 28 50  RowIndexDelete(P
28be0 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
28bf0 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69  nt, int, int*, i
28c00 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
28c10 47 65 6e 65 72 61 74 65 49 6e 64 65 78 4b 65 79  GenerateIndexKey
28c20 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c  (Parse*, Index*,
28c30 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20   int, int, int, 
28c40 69 6e 74 2a 2c 49 6e 64 65 78 2a 2c 69 6e 74 29  int*,Index*,int)
28c50 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
28c60 73 6f 6c 76 65 50 61 72 74 49 64 78 4c 61 62 65  solvePartIdxLabe
28c70 6c 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76  l(Parse*,int);.v
28c80 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72  oid sqlite3Gener
28c90 61 74 65 43 6f 6e 73 74 72 61 69 6e 74 43 68 65  ateConstraintChe
28ca0 63 6b 73 28 50 61 72 73 65 2a 2c 54 61 62 6c 65  cks(Parse*,Table
28cb0 2a 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69  *,int*,int,int,i
28cc0 6e 74 2c 69 6e 74 2c 0a 20 20 20 20 20 20 20 20  nt,int,.        
28cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 75 38 2c               u8,
28cf0 75 38 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a  u8,int,int*,int*
28d00 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
28d10 5f 45 4e 41 42 4c 45 5f 4e 55 4c 4c 5f 54 52 49  _ENABLE_NULL_TRI
28d20 4d 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  M.  void sqlite3
28d30 53 65 74 4d 61 6b 65 52 65 63 6f 72 64 50 35 28  SetMakeRecordP5(
28d40 56 64 62 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23  Vdbe*,Table*);.#
28d50 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
28d60 6c 69 74 65 33 53 65 74 4d 61 6b 65 52 65 63 6f  lite3SetMakeReco
28d70 72 64 50 35 28 41 2c 42 29 0a 23 65 6e 64 69 66  rdP5(A,B).#endif
28d80 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d  .void sqlite3Com
28d90 70 6c 65 74 65 49 6e 73 65 72 74 69 6f 6e 28 50  pleteInsertion(P
28da0 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74  arse*,Table*,int
28db0 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e  ,int,int,int*,in
28dc0 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a 69 6e 74 20  t,int,int);.int 
28dd0 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65  sqlite3OpenTable
28de0 41 6e 64 49 6e 64 69 63 65 73 28 50 61 72 73 65  AndIndices(Parse
28df0 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
28e00 75 38 2c 20 69 6e 74 2c 20 75 38 2a 2c 20 69 6e  u8, int, u8*, in
28e10 74 2a 2c 20 69 6e 74 2a 29 3b 0a 76 6f 69 64 20  t*, int*);.void 
28e20 73 71 6c 69 74 65 33 42 65 67 69 6e 57 72 69 74  sqlite3BeginWrit
28e30 65 4f 70 65 72 61 74 69 6f 6e 28 50 61 72 73 65  eOperation(Parse
28e40 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
28e50 69 64 20 73 71 6c 69 74 65 33 4d 75 6c 74 69 57  id sqlite3MultiW
28e60 72 69 74 65 28 50 61 72 73 65 2a 29 3b 0a 76 6f  rite(Parse*);.vo
28e70 69 64 20 73 71 6c 69 74 65 33 4d 61 79 41 62 6f  id sqlite3MayAbo
28e80 72 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64  rt(Parse*);.void
28e90 20 73 71 6c 69 74 65 33 48 61 6c 74 43 6f 6e 73   sqlite3HaltCons
28ea0 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69  traint(Parse*, i
28eb0 6e 74 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2c 20  nt, int, char*, 
28ec0 69 38 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71  i8, u8);.void sq
28ed0 6c 69 74 65 33 55 6e 69 71 75 65 43 6f 6e 73 74  lite3UniqueConst
28ee0 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e  raint(Parse*, in
28ef0 74 2c 20 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64  t, Index*);.void
28f00 20 73 71 6c 69 74 65 33 52 6f 77 69 64 43 6f 6e   sqlite3RowidCon
28f10 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20  straint(Parse*, 
28f20 69 6e 74 2c 20 54 61 62 6c 65 2a 29 3b 0a 45 78  int, Table*);.Ex
28f30 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 44  pr *sqlite3ExprD
28f40 75 70 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72  up(sqlite3*,Expr
28f50 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 4c 69 73 74  *,int);.ExprList
28f60 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73   *sqlite3ExprLis
28f70 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 45 78  tDup(sqlite3*,Ex
28f80 70 72 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 53 72  prList*,int);.Sr
28f90 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72  cList *sqlite3Sr
28fa0 63 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65 33  cListDup(sqlite3
28fb0 2a 2c 53 72 63 4c 69 73 74 2a 2c 69 6e 74 29 3b  *,SrcList*,int);
28fc0 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  .IdList *sqlite3
28fd0 49 64 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65  IdListDup(sqlite
28fe0 33 2a 2c 49 64 4c 69 73 74 2a 29 3b 0a 53 65 6c  3*,IdList*);.Sel
28ff0 65 63 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65  ect *sqlite3Sele
29000 63 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 53  ctDup(sqlite3*,S
29010 65 6c 65 63 74 2a 2c 69 6e 74 29 3b 0a 23 69 66  elect*,int);.#if
29020 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41   SELECTTRACE_ENA
29030 42 4c 45 44 0a 76 6f 69 64 20 73 71 6c 69 74 65  BLED.void sqlite
29040 33 53 65 6c 65 63 74 53 65 74 4e 61 6d 65 28 53  3SelectSetName(S
29050 65 6c 65 63 74 2a 2c 63 6f 6e 73 74 20 63 68 61  elect*,const cha
29060 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  r*);.#else.# def
29070 69 6e 65 20 73 71 6c 69 74 65 33 53 65 6c 65 63  ine sqlite3Selec
29080 74 53 65 74 4e 61 6d 65 28 41 2c 42 29 0a 23 65  tSetName(A,B).#e
29090 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
290a0 33 49 6e 73 65 72 74 42 75 69 6c 74 69 6e 46 75  3InsertBuiltinFu
290b0 6e 63 73 28 46 75 6e 63 44 65 66 2a 2c 69 6e 74  ncs(FuncDef*,int
290c0 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c 69  );.FuncDef *sqli
290d0 74 65 33 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28  te3FindFunction(
290e0 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
290f0 68 61 72 2a 2c 69 6e 74 2c 75 38 2c 75 38 29 3b  har*,int,u8,u8);
29100 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67  .void sqlite3Reg
29110 69 73 74 65 72 42 75 69 6c 74 69 6e 46 75 6e 63  isterBuiltinFunc
29120 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69  tions(void);.voi
29130 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65  d sqlite3Registe
29140 72 44 61 74 65 54 69 6d 65 46 75 6e 63 74 69 6f  rDateTimeFunctio
29150 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73  ns(void);.void s
29160 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 50 65  qlite3RegisterPe
29170 72 43 6f 6e 6e 65 63 74 69 6f 6e 42 75 69 6c 74  rConnectionBuilt
29180 69 6e 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69  inFunctions(sqli
29190 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  te3*);.int sqlit
291a0 65 33 53 61 66 65 74 79 43 68 65 63 6b 4f 6b 28  e3SafetyCheckOk(
291b0 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73  sqlite3*);.int s
291c0 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63  qlite3SafetyChec
291d0 6b 53 69 63 6b 4f 72 4f 6b 28 73 71 6c 69 74 65  kSickOrOk(sqlite
291e0 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  3*);.void sqlite
291f0 33 43 68 61 6e 67 65 43 6f 6f 6b 69 65 28 50 61  3ChangeCookie(Pa
29200 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 0a 23 69 66  rse*, int);..#if
29210 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
29220 5f 4f 4d 49 54 5f 56 49 45 57 29 20 26 26 20 21  _OMIT_VIEW) && !
29230 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
29240 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 76 6f 69  MIT_TRIGGER).voi
29250 64 20 73 71 6c 69 74 65 33 4d 61 74 65 72 69 61  d sqlite3Materia
29260 6c 69 7a 65 56 69 65 77 28 50 61 72 73 65 2a 2c  lizeView(Parse*,
29270 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20   Table*, Expr*, 
29280 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  int);.#endif..#i
29290 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
292a0 54 5f 54 52 49 47 47 45 52 0a 20 20 76 6f 69 64  T_TRIGGER.  void
292b0 20 73 71 6c 69 74 65 33 42 65 67 69 6e 54 72 69   sqlite3BeginTri
292c0 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54 6f 6b  gger(Parse*, Tok
292d0 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69  en*,Token*,int,i
292e0 6e 74 2c 49 64 4c 69 73 74 2a 2c 53 72 63 4c 69  nt,IdList*,SrcLi
292f0 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  st*,.           
29300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29310 45 78 70 72 2a 2c 69 6e 74 2c 20 69 6e 74 29 3b  Expr*,int, int);
29320 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46  .  void sqlite3F
29330 69 6e 69 73 68 54 72 69 67 67 65 72 28 50 61 72  inishTrigger(Par
29340 73 65 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70  se*, TriggerStep
29350 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 20 20 76 6f  *, Token*);.  vo
29360 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72  id sqlite3DropTr
29370 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 53 72  igger(Parse*, Sr
29380 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 20 20  cList*, int);.  
29390 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70  void sqlite3Drop
293a0 54 72 69 67 67 65 72 50 74 72 28 50 61 72 73 65  TriggerPtr(Parse
293b0 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20  *, Trigger*);.  
293c0 54 72 69 67 67 65 72 20 2a 73 71 6c 69 74 65 33  Trigger *sqlite3
293d0 54 72 69 67 67 65 72 73 45 78 69 73 74 28 50 61  TriggersExist(Pa
293e0 72 73 65 20 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  rse *, Table*, i
293f0 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  nt, ExprList*, i
29400 6e 74 20 2a 70 4d 61 73 6b 29 3b 0a 20 20 54 72  nt *pMask);.  Tr
29410 69 67 67 65 72 20 2a 73 71 6c 69 74 65 33 54 72  igger *sqlite3Tr
29420 69 67 67 65 72 4c 69 73 74 28 50 61 72 73 65 20  iggerList(Parse 
29430 2a 2c 20 54 61 62 6c 65 20 2a 29 3b 0a 20 20 76  *, Table *);.  v
29440 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52  oid sqlite3CodeR
29450 6f 77 54 72 69 67 67 65 72 28 50 61 72 73 65 2a  owTrigger(Parse*
29460 2c 20 54 72 69 67 67 65 72 20 2a 2c 20 69 6e 74  , Trigger *, int
29470 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
29480 2c 20 54 61 62 6c 65 20 2a 2c 0a 20 20 20 20 20  , Table *,.     
29490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
294a0 20 20 20 20 20 20 20 69 6e 74 2c 20 69 6e 74 2c         int, int,
294b0 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71   int);.  void sq
294c0 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67  lite3CodeRowTrig
294d0 67 65 72 44 69 72 65 63 74 28 50 61 72 73 65 20  gerDirect(Parse 
294e0 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c 20 54 61  *, Trigger *, Ta
294f0 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  ble *, int, int,
29500 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71   int);.  void sq
29510 6c 69 74 65 56 69 65 77 54 72 69 67 67 65 72 73  liteViewTriggers
29520 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
29530 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 45 78 70   Expr*, int, Exp
29540 72 4c 69 73 74 2a 29 3b 0a 20 20 76 6f 69 64 20  rList*);.  void 
29550 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69  sqlite3DeleteTri
29560 67 67 65 72 53 74 65 70 28 73 71 6c 69 74 65 33  ggerStep(sqlite3
29570 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a 29  *, TriggerStep*)
29580 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  ;.  TriggerStep 
29590 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 53  *sqlite3TriggerS
295a0 65 6c 65 63 74 53 74 65 70 28 73 71 6c 69 74 65  electStep(sqlite
295b0 33 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 20 20 54  3*,Select*);.  T
295c0 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69  riggerStep *sqli
295d0 74 65 33 54 72 69 67 67 65 72 49 6e 73 65 72 74  te3TriggerInsert
295e0 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f  Step(sqlite3*,To
295f0 6b 65 6e 2a 2c 20 49 64 4c 69 73 74 2a 2c 0a 20  ken*, IdList*,. 
29600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29620 20 20 20 20 20 20 20 53 65 6c 65 63 74 2a 2c 75         Select*,u
29630 38 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65  8);.  TriggerSte
29640 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65  p *sqlite3Trigge
29650 72 55 70 64 61 74 65 53 74 65 70 28 73 71 6c 69  rUpdateStep(sqli
29660 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72  te3*,Token*,Expr
29670 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20 75 38  List*, Expr*, u8
29680 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70  );.  TriggerStep
29690 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72   *sqlite3Trigger
296a0 44 65 6c 65 74 65 53 74 65 70 28 73 71 6c 69 74  DeleteStep(sqlit
296b0 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 45 78 70 72  e3*,Token*, Expr
296c0 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
296d0 65 33 44 65 6c 65 74 65 54 72 69 67 67 65 72 28  e3DeleteTrigger(
296e0 73 71 6c 69 74 65 33 2a 2c 20 54 72 69 67 67 65  sqlite3*, Trigge
296f0 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  r*);.  void sqli
29700 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
29710 74 65 54 72 69 67 67 65 72 28 73 71 6c 69 74 65  teTrigger(sqlite
29720 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61  3*,int,const cha
29730 72 2a 29 3b 0a 20 20 75 33 32 20 73 71 6c 69 74  r*);.  u32 sqlit
29740 65 33 54 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b  e3TriggerColmask
29750 28 50 61 72 73 65 2a 2c 54 72 69 67 67 65 72 2a  (Parse*,Trigger*
29760 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 69  ,ExprList*,int,i
29770 6e 74 2c 54 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a  nt,Table*,int);.
29780 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
29790 50 61 72 73 65 54 6f 70 6c 65 76 65 6c 28 70 29  ParseToplevel(p)
297a0 20 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c   ((p)->pToplevel
297b0 20 3f 20 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65   ? (p)->pTopleve
297c0 6c 20 3a 20 28 70 29 29 0a 23 20 64 65 66 69 6e  l : (p)).# defin
297d0 65 20 73 71 6c 69 74 65 33 49 73 54 6f 70 6c 65  e sqlite3IsTople
297e0 76 65 6c 28 70 29 20 28 28 70 29 2d 3e 70 54 6f  vel(p) ((p)->pTo
297f0 70 6c 65 76 65 6c 3d 3d 30 29 0a 23 65 6c 73 65  plevel==0).#else
29800 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
29810 33 54 72 69 67 67 65 72 73 45 78 69 73 74 28 42  3TriggersExist(B
29820 2c 43 2c 44 2c 45 2c 46 29 20 30 0a 23 20 64 65  ,C,D,E,F) 0.# de
29830 66 69 6e 65 20 73 71 6c 69 74 65 33 44 65 6c 65  fine sqlite3Dele
29840 74 65 54 72 69 67 67 65 72 28 41 2c 42 29 0a 23  teTrigger(A,B).#
29850 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 44   define sqlite3D
29860 72 6f 70 54 72 69 67 67 65 72 50 74 72 28 41 2c  ropTriggerPtr(A,
29870 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  B).# define sqli
29880 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
29890 74 65 54 72 69 67 67 65 72 28 41 2c 42 2c 43 29  teTrigger(A,B,C)
298a0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
298b0 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 28  3CodeRowTrigger(
298c0 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 2c 48 2c  A,B,C,D,E,F,G,H,
298d0 49 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  I).# define sqli
298e0 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65  te3CodeRowTrigge
298f0 72 44 69 72 65 63 74 28 41 2c 42 2c 43 2c 44 2c  rDirect(A,B,C,D,
29900 45 2c 46 29 0a 23 20 64 65 66 69 6e 65 20 73 71  E,F).# define sq
29910 6c 69 74 65 33 54 72 69 67 67 65 72 4c 69 73 74  lite3TriggerList
29920 28 58 2c 20 59 29 20 30 0a 23 20 64 65 66 69 6e  (X, Y) 0.# defin
29930 65 20 73 71 6c 69 74 65 33 50 61 72 73 65 54 6f  e sqlite3ParseTo
29940 70 6c 65 76 65 6c 28 70 29 20 70 0a 23 20 64 65  plevel(p) p.# de
29950 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 54 6f  fine sqlite3IsTo
29960 70 6c 65 76 65 6c 28 70 29 20 31 0a 23 20 64 65  plevel(p) 1.# de
29970 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67  fine sqlite3Trig
29980 67 65 72 43 6f 6c 6d 61 73 6b 28 41 2c 42 2c 43  gerColmask(A,B,C
29990 2c 44 2c 45 2c 46 2c 47 29 20 30 0a 23 65 6e 64  ,D,E,F,G) 0.#end
299a0 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a  if..int sqlite3J
299b0 6f 69 6e 54 79 70 65 28 50 61 72 73 65 2a 2c 20  oinType(Parse*, 
299c0 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Token*, Token*, 
299d0 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
299e0 6c 69 74 65 33 43 72 65 61 74 65 46 6f 72 65 69  lite3CreateForei
299f0 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20 45 78  gnKey(Parse*, Ex
29a00 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c  prList*, Token*,
29a10 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29   ExprList*, int)
29a20 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  ;.void sqlite3De
29a30 66 65 72 46 6f 72 65 69 67 6e 4b 65 79 28 50 61  ferForeignKey(Pa
29a40 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 6e  rse*, int);.#ifn
29a50 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
29a60 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20  AUTHORIZATION.  
29a70 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68  void sqlite3Auth
29a80 52 65 61 64 28 50 61 72 73 65 2a 2c 45 78 70 72  Read(Parse*,Expr
29a90 2a 2c 53 63 68 65 6d 61 2a 2c 53 72 63 4c 69 73  *,Schema*,SrcLis
29aa0 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  t*);.  int sqlit
29ab0 65 33 41 75 74 68 43 68 65 63 6b 28 50 61 72 73  e3AuthCheck(Pars
29ac0 65 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68  e*,int, const ch
29ad0 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
29ae0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
29af0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75    void sqlite3Au
29b00 74 68 43 6f 6e 74 65 78 74 50 75 73 68 28 50 61  thContextPush(Pa
29b10 72 73 65 2a 2c 20 41 75 74 68 43 6f 6e 74 65 78  rse*, AuthContex
29b20 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  t*, const char*)
29b30 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
29b40 41 75 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 41  AuthContextPop(A
29b50 75 74 68 43 6f 6e 74 65 78 74 2a 29 3b 0a 20 20  uthContext*);.  
29b60 69 6e 74 20 73 71 6c 69 74 65 33 41 75 74 68 52  int sqlite3AuthR
29b70 65 61 64 43 6f 6c 28 50 61 72 73 65 2a 2c 20 63  eadCol(Parse*, c
29b80 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 63 6f 6e  onst char *, con
29b90 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b  st char *, int);
29ba0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
29bb0 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 28  sqlite3AuthRead(
29bc0 61 2c 62 2c 63 2c 64 29 0a 23 20 64 65 66 69 6e  a,b,c,d).# defin
29bd0 65 20 73 71 6c 69 74 65 33 41 75 74 68 43 68 65  e sqlite3AuthChe
29be0 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 29 20 20 20  ck(a,b,c,d,e)   
29bf0 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 64 65 66   SQLITE_OK.# def
29c00 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 43  ine sqlite3AuthC
29c10 6f 6e 74 65 78 74 50 75 73 68 28 61 2c 62 2c 63  ontextPush(a,b,c
29c20 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
29c30 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 6f 70  e3AuthContextPop
29c40 28 61 29 20 20 28 28 76 6f 69 64 29 28 61 29 29  (a)  ((void)(a))
29c50 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
29c60 69 74 65 33 41 74 74 61 63 68 28 50 61 72 73 65  ite3Attach(Parse
29c70 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c  *, Expr*, Expr*,
29c80 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
29c90 6c 69 74 65 33 44 65 74 61 63 68 28 50 61 72 73  lite3Detach(Pars
29ca0 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  e*, Expr*);.void
29cb0 20 73 71 6c 69 74 65 33 46 69 78 49 6e 69 74 28   sqlite3FixInit(
29cc0 44 62 46 69 78 65 72 2a 2c 20 50 61 72 73 65 2a  DbFixer*, Parse*
29cd0 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61  , int, const cha
29ce0 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a  r*, const Token*
29cf0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
29d00 78 53 72 63 4c 69 73 74 28 44 62 46 69 78 65 72  xSrcList(DbFixer
29d10 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e  *, SrcList*);.in
29d20 74 20 73 71 6c 69 74 65 33 46 69 78 53 65 6c 65  t sqlite3FixSele
29d30 63 74 28 44 62 46 69 78 65 72 2a 2c 20 53 65 6c  ct(DbFixer*, Sel
29d40 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ect*);.int sqlit
29d50 65 33 46 69 78 45 78 70 72 28 44 62 46 69 78 65  e3FixExpr(DbFixe
29d60 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20  r*, Expr*);.int 
29d70 73 71 6c 69 74 65 33 46 69 78 45 78 70 72 4c 69  sqlite3FixExprLi
29d80 73 74 28 44 62 46 69 78 65 72 2a 2c 20 45 78 70  st(DbFixer*, Exp
29d90 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  rList*);.int sql
29da0 69 74 65 33 46 69 78 54 72 69 67 67 65 72 53 74  ite3FixTriggerSt
29db0 65 70 28 44 62 46 69 78 65 72 2a 2c 20 54 72 69  ep(DbFixer*, Tri
29dc0 67 67 65 72 53 74 65 70 2a 29 3b 0a 69 6e 74 20  ggerStep*);.int 
29dd0 73 71 6c 69 74 65 33 41 74 6f 46 28 63 6f 6e 73  sqlite3AtoF(cons
29de0 74 20 63 68 61 72 20 2a 7a 2c 20 64 6f 75 62 6c  t char *z, doubl
29df0 65 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e  e*, int, u8);.in
29e00 74 20 73 71 6c 69 74 65 33 47 65 74 49 6e 74 33  t sqlite3GetInt3
29e10 32 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  2(const char *, 
29e20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  int*);.int sqlit
29e30 65 33 41 74 6f 69 28 63 6f 6e 73 74 20 63 68 61  e3Atoi(const cha
29e40 72 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  r*);.#ifndef SQL
29e50 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 69  ITE_OMIT_UTF16.i
29e60 6e 74 20 73 71 6c 69 74 65 33 55 74 66 31 36 42  nt sqlite3Utf16B
29e70 79 74 65 4c 65 6e 28 63 6f 6e 73 74 20 76 6f 69  yteLen(const voi
29e80 64 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e 43  d *pData, int nC
29e90 68 61 72 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74  har);.#endif.int
29ea0 20 73 71 6c 69 74 65 33 55 74 66 38 43 68 61 72   sqlite3Utf8Char
29eb0 4c 65 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  Len(const char *
29ec0 70 44 61 74 61 2c 20 69 6e 74 20 6e 42 79 74 65  pData, int nByte
29ed0 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 55 74  );.u32 sqlite3Ut
29ee0 66 38 52 65 61 64 28 63 6f 6e 73 74 20 75 38 2a  f8Read(const u8*
29ef0 2a 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74  *);.LogEst sqlit
29f00 65 33 4c 6f 67 45 73 74 28 75 36 34 29 3b 0a 4c  e3LogEst(u64);.L
29f10 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67  ogEst sqlite3Log
29f20 45 73 74 41 64 64 28 4c 6f 67 45 73 74 2c 4c 6f  EstAdd(LogEst,Lo
29f30 67 45 73 74 29 3b 0a 23 69 66 6e 64 65 66 20 53  gEst);.#ifndef S
29f40 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
29f50 41 4c 54 41 42 4c 45 0a 4c 6f 67 45 73 74 20 73  ALTABLE.LogEst s
29f60 71 6c 69 74 65 33 4c 6f 67 45 73 74 46 72 6f 6d  qlite3LogEstFrom
29f70 44 6f 75 62 6c 65 28 64 6f 75 62 6c 65 29 3b 0a  Double(double);.
29f80 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e  #endif.#if defin
29f90 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
29fa0 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41 54 55 53  _STMT_SCANSTATUS
29fb0 29 20 7c 7c 20 5c 0a 20 20 20 20 64 65 66 69 6e  ) || \.    defin
29fc0 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
29fd0 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 29  _STAT3_OR_STAT4)
29fe0 20 7c 7c 20 5c 0a 20 20 20 20 64 65 66 69 6e 65   || \.    define
29ff0 64 28 53 51 4c 49 54 45 5f 45 58 50 4c 41 49 4e  d(SQLITE_EXPLAIN
2a000 5f 45 53 54 49 4d 41 54 45 44 5f 52 4f 57 53 29  _ESTIMATED_ROWS)
2a010 0a 75 36 34 20 73 71 6c 69 74 65 33 4c 6f 67 45  .u64 sqlite3LogE
2a020 73 74 54 6f 49 6e 74 28 4c 6f 67 45 73 74 29 3b  stToInt(LogEst);
2a030 0a 23 65 6e 64 69 66 0a 56 4c 69 73 74 20 2a 73  .#endif.VList *s
2a040 71 6c 69 74 65 33 56 4c 69 73 74 41 64 64 28 73  qlite3VListAdd(s
2a050 71 6c 69 74 65 33 2a 2c 56 4c 69 73 74 2a 2c 63  qlite3*,VList*,c
2a060 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 2c 69  onst char*,int,i
2a070 6e 74 29 3b 0a 63 6f 6e 73 74 20 63 68 61 72 20  nt);.const char 
2a080 2a 73 71 6c 69 74 65 33 56 4c 69 73 74 4e 75 6d  *sqlite3VListNum
2a090 54 6f 4e 61 6d 65 28 56 4c 69 73 74 2a 2c 69 6e  ToName(VList*,in
2a0a0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  t);.int sqlite3V
2a0b0 4c 69 73 74 4e 61 6d 65 54 6f 4e 75 6d 28 56 4c  ListNameToNum(VL
2a0c0 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ist*,const char*
2a0d0 2c 69 6e 74 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 6f  ,int);../*.** Ro
2a0e0 75 74 69 6e 65 73 20 74 6f 20 72 65 61 64 20 61  utines to read a
2a0f0 6e 64 20 77 72 69 74 65 20 76 61 72 69 61 62 6c  nd write variabl
2a100 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72  e-length integer
2a110 73 2e 20 20 54 68 65 73 65 20 75 73 65 64 20 74  s.  These used t
2a120 6f 0a 2a 2a 20 62 65 20 64 65 66 69 6e 65 64 20  o.** be defined 
2a130 6c 6f 63 61 6c 6c 79 2c 20 62 75 74 20 6e 6f 77  locally, but now
2a140 20 77 65 20 75 73 65 20 74 68 65 20 76 61 72 69   we use the vari
2a150 6e 74 20 72 6f 75 74 69 6e 65 73 20 69 6e 20 74  nt routines in t
2a160 68 65 20 75 74 69 6c 2e 63 0a 2a 2a 20 66 69 6c  he util.c.** fil
2a170 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  e..*/.int sqlite
2a180 33 50 75 74 56 61 72 69 6e 74 28 75 6e 73 69 67  3PutVarint(unsig
2a190 6e 65 64 20 63 68 61 72 2a 2c 20 75 36 34 29 3b  ned char*, u64);
2a1a0 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74 56 61  .u8 sqlite3GetVa
2a1b0 72 69 6e 74 28 63 6f 6e 73 74 20 75 6e 73 69 67  rint(const unsig
2a1c0 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 36 34 20  ned char *, u64 
2a1d0 2a 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 47 65  *);.u8 sqlite3Ge
2a1e0 74 56 61 72 69 6e 74 33 32 28 63 6f 6e 73 74 20  tVarint32(const 
2a1f0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c  unsigned char *,
2a200 20 75 33 32 20 2a 29 3b 0a 69 6e 74 20 73 71 6c   u32 *);.int sql
2a210 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 75 36  ite3VarintLen(u6
2a220 34 20 76 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  4 v);../*.** The
2a230 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 69 73 20   common case is 
2a240 66 6f 72 20 61 20 76 61 72 69 6e 74 20 74 6f 20  for a varint to 
2a250 62 65 20 61 20 73 69 6e 67 6c 65 20 62 79 74 65  be a single byte
2a260 2e 20 20 54 68 65 79 20 66 6f 6c 6c 6f 77 69 6e  .  They followin
2a270 67 0a 2a 2a 20 6d 61 63 72 6f 73 20 68 61 6e 64  g.** macros hand
2a280 6c 65 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 63 61  le the common ca
2a290 73 65 20 77 69 74 68 6f 75 74 20 61 20 70 72 6f  se without a pro
2a2a0 63 65 64 75 72 65 20 63 61 6c 6c 2c 20 62 75 74  cedure call, but
2a2b0 20 74 68 65 6e 20 63 61 6c 6c 0a 2a 2a 20 74 68   then call.** th
2a2c0 65 20 70 72 6f 63 65 64 75 72 65 20 66 6f 72 20  e procedure for 
2a2d0 6c 61 72 67 65 72 20 76 61 72 69 6e 74 73 2e 0a  larger varints..
2a2e0 2a 2f 0a 23 64 65 66 69 6e 65 20 67 65 74 56 61  */.#define getVa
2a2f0 72 69 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a 20  rint32(A,B)  \. 
2a300 20 28 75 38 29 28 28 2a 28 41 29 3c 28 75 38 29   (u8)((*(A)<(u8)
2a310 30 78 38 30 29 3f 28 28 42 29 3d 28 75 33 32 29  0x80)?((B)=(u32)
2a320 2a 28 41 29 29 2c 31 3a 73 71 6c 69 74 65 33 47  *(A)),1:sqlite3G
2a330 65 74 56 61 72 69 6e 74 33 32 28 28 41 29 2c 28  etVarint32((A),(
2a340 75 33 32 20 2a 29 26 28 42 29 29 29 0a 23 64 65  u32 *)&(B))).#de
2a350 66 69 6e 65 20 70 75 74 56 61 72 69 6e 74 33 32  fine putVarint32
2a360 28 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29 28  (A,B)  \.  (u8)(
2a370 28 28 75 33 32 29 28 42 29 3c 28 75 33 32 29 30  ((u32)(B)<(u32)0
2a380 78 38 30 29 3f 28 2a 28 41 29 3d 28 75 6e 73 69  x80)?(*(A)=(unsi
2a390 67 6e 65 64 20 63 68 61 72 29 28 42 29 29 2c 31  gned char)(B)),1
2a3a0 3a 5c 0a 20 20 73 71 6c 69 74 65 33 50 75 74 56  :\.  sqlite3PutV
2a3b0 61 72 69 6e 74 28 28 41 29 2c 28 42 29 29 29 0a  arint((A),(B))).
2a3c0 23 64 65 66 69 6e 65 20 67 65 74 56 61 72 69 6e  #define getVarin
2a3d0 74 20 20 20 20 73 71 6c 69 74 65 33 47 65 74 56  t    sqlite3GetV
2a3e0 61 72 69 6e 74 0a 23 64 65 66 69 6e 65 20 70 75  arint.#define pu
2a3f0 74 56 61 72 69 6e 74 20 20 20 20 73 71 6c 69 74  tVarint    sqlit
2a400 65 33 50 75 74 56 61 72 69 6e 74 0a 0a 0a 63 6f  e3PutVarint...co
2a410 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
2a420 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79 53 74  3IndexAffinitySt
2a430 72 28 73 71 6c 69 74 65 33 2a 2c 20 49 6e 64 65  r(sqlite3*, Inde
2a440 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  x*);.void sqlite
2a450 33 54 61 62 6c 65 41 66 66 69 6e 69 74 79 28 56  3TableAffinity(V
2a460 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  dbe*, Table*, in
2a470 74 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33  t);.char sqlite3
2a480 43 6f 6d 70 61 72 65 41 66 66 69 6e 69 74 79 28  CompareAffinity(
2a490 45 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61  Expr *pExpr, cha
2a4a0 72 20 61 66 66 32 29 3b 0a 69 6e 74 20 73 71 6c  r aff2);.int sql
2a4b0 69 74 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74  ite3IndexAffinit
2a4c0 79 4f 6b 28 45 78 70 72 20 2a 70 45 78 70 72 2c  yOk(Expr *pExpr,
2a4d0 20 63 68 61 72 20 69 64 78 5f 61 66 66 69 6e 69   char idx_affini
2a4e0 74 79 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65  ty);.char sqlite
2a4f0 33 54 61 62 6c 65 43 6f 6c 75 6d 6e 41 66 66 69  3TableColumnAffi
2a500 6e 69 74 79 28 54 61 62 6c 65 2a 2c 69 6e 74 29  nity(Table*,int)
2a510 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33 45 78  ;.char sqlite3Ex
2a520 70 72 41 66 66 69 6e 69 74 79 28 45 78 70 72 20  prAffinity(Expr 
2a530 2a 70 45 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c  *pExpr);.int sql
2a540 69 74 65 33 41 74 6f 69 36 34 28 63 6f 6e 73 74  ite3Atoi64(const
2a550 20 63 68 61 72 2a 2c 20 69 36 34 2a 2c 20 69 6e   char*, i64*, in
2a560 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69  t, u8);.int sqli
2a570 74 65 33 44 65 63 4f 72 48 65 78 54 6f 49 36 34  te3DecOrHexToI64
2a580 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 36  (const char*, i6
2a590 34 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  4*);.void sqlite
2a5a0 33 45 72 72 6f 72 57 69 74 68 4d 73 67 28 73 71  3ErrorWithMsg(sq
2a5b0 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e  lite3*, int, con
2a5c0 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 76  st char*,...);.v
2a5d0 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72  oid sqlite3Error
2a5e0 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a  (sqlite3*,int);.
2a5f0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 79 73 74  void sqlite3Syst
2a600 65 6d 45 72 72 6f 72 28 73 71 6c 69 74 65 33 2a  emError(sqlite3*
2a610 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  ,int);.void *sql
2a620 69 74 65 33 48 65 78 54 6f 42 6c 6f 62 28 73 71  ite3HexToBlob(sq
2a630 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68  lite3*, const ch
2a640 61 72 20 2a 7a 2c 20 69 6e 74 20 6e 29 3b 0a 75  ar *z, int n);.u
2a650 38 20 73 71 6c 69 74 65 33 48 65 78 54 6f 49 6e  8 sqlite3HexToIn
2a660 74 28 69 6e 74 20 68 29 3b 0a 69 6e 74 20 73 71  t(int h);.int sq
2a670 6c 69 74 65 33 54 77 6f 50 61 72 74 4e 61 6d 65  lite3TwoPartName
2a680 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20  (Parse *, Token 
2a690 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65  *, Token *, Toke
2a6a0 6e 20 2a 2a 29 3b 0a 0a 23 69 66 20 64 65 66 69  n **);..#if defi
2a6b0 6e 65 64 28 53 51 4c 49 54 45 5f 4e 45 45 44 5f  ned(SQLITE_NEED_
2a6c0 45 52 52 5f 4e 41 4d 45 29 0a 63 6f 6e 73 74 20  ERR_NAME).const 
2a6d0 63 68 61 72 20 2a 73 71 6c 69 74 65 33 45 72 72  char *sqlite3Err
2a6e0 4e 61 6d 65 28 69 6e 74 29 3b 0a 23 65 6e 64 69  Name(int);.#endi
2a6f0 66 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73  f..const char *s
2a700 71 6c 69 74 65 33 45 72 72 53 74 72 28 69 6e 74  qlite3ErrStr(int
2a710 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65  );.int sqlite3Re
2a720 61 64 53 63 68 65 6d 61 28 50 61 72 73 65 20 2a  adSchema(Parse *
2a730 70 50 61 72 73 65 29 3b 0a 43 6f 6c 6c 53 65 71  pParse);.CollSeq
2a740 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c   *sqlite3FindCol
2a750 6c 53 65 71 28 73 71 6c 69 74 65 33 2a 2c 75 38  lSeq(sqlite3*,u8
2a760 20 65 6e 63 2c 20 63 6f 6e 73 74 20 63 68 61 72   enc, const char
2a770 2a 2c 69 6e 74 29 3b 0a 43 6f 6c 6c 53 65 71 20  *,int);.CollSeq 
2a780 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 43 6f  *sqlite3LocateCo
2a790 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70 50 61  llSeq(Parse *pPa
2a7a0 72 73 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  rse, const char*
2a7b0 7a 4e 61 6d 65 29 3b 0a 43 6f 6c 6c 53 65 71 20  zName);.CollSeq 
2a7c0 2a 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6c 6c  *sqlite3ExprColl
2a7d0 53 65 71 28 50 61 72 73 65 20 2a 70 50 61 72 73  Seq(Parse *pPars
2a7e0 65 2c 20 45 78 70 72 20 2a 70 45 78 70 72 29 3b  e, Expr *pExpr);
2a7f0 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65  .CollSeq *sqlite
2a800 33 45 78 70 72 4e 4e 43 6f 6c 6c 53 65 71 28 50  3ExprNNCollSeq(P
2a810 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78  arse *pParse, Ex
2a820 70 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74 20  pr *pExpr);.int 
2a830 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6c 6c 53  sqlite3ExprCollS
2a840 65 71 4d 61 74 63 68 28 50 61 72 73 65 2a 2c 45  eqMatch(Parse*,E
2a850 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 45 78 70  xpr*,Expr*);.Exp
2a860 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 64  r *sqlite3ExprAd
2a870 64 43 6f 6c 6c 61 74 65 54 6f 6b 65 6e 28 50 61  dCollateToken(Pa
2a880 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70  rse *pParse, Exp
2a890 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a  r*, const Token*
2a8a0 2c 20 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71  , int);.Expr *sq
2a8b0 6c 69 74 65 33 45 78 70 72 41 64 64 43 6f 6c 6c  lite3ExprAddColl
2a8c0 61 74 65 53 74 72 69 6e 67 28 50 61 72 73 65 2a  ateString(Parse*
2a8d0 2c 45 78 70 72 2a 2c 63 6f 6e 73 74 20 63 68 61  ,Expr*,const cha
2a8e0 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  r*);.Expr *sqlit
2a8f0 65 33 45 78 70 72 53 6b 69 70 43 6f 6c 6c 61 74  e3ExprSkipCollat
2a900 65 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  e(Expr*);.int sq
2a910 6c 69 74 65 33 43 68 65 63 6b 43 6f 6c 6c 53 65  lite3CheckCollSe
2a920 71 28 50 61 72 73 65 20 2a 2c 20 43 6f 6c 6c 53  q(Parse *, CollS
2a930 65 71 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  eq *);.int sqlit
2a940 65 33 43 68 65 63 6b 4f 62 6a 65 63 74 4e 61 6d  e3CheckObjectNam
2a950 65 28 50 61 72 73 65 20 2a 2c 20 63 6f 6e 73 74  e(Parse *, const
2a960 20 63 68 61 72 20 2a 29 3b 0a 76 6f 69 64 20 73   char *);.void s
2a970 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 68 61  qlite3VdbeSetCha
2a980 6e 67 65 73 28 73 71 6c 69 74 65 33 20 2a 2c 20  nges(sqlite3 *, 
2a990 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
2a9a0 33 41 64 64 49 6e 74 36 34 28 69 36 34 2a 2c 69  3AddInt64(i64*,i
2a9b0 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  64);.int sqlite3
2a9c0 53 75 62 49 6e 74 36 34 28 69 36 34 2a 2c 69 36  SubInt64(i64*,i6
2a9d0 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d  4);.int sqlite3M
2a9e0 75 6c 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34  ulInt64(i64*,i64
2a9f0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 62  );.int sqlite3Ab
2aa00 73 49 6e 74 33 32 28 69 6e 74 29 3b 0a 23 69 66  sInt32(int);.#if
2aa10 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
2aa20 45 5f 38 5f 33 5f 4e 41 4d 45 53 0a 76 6f 69 64  E_8_3_NAMES.void
2aa30 20 73 71 6c 69 74 65 33 46 69 6c 65 53 75 66 66   sqlite3FileSuff
2aa40 69 78 33 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ix3(const char*,
2aa50 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 23   char*);.#else.#
2aa60 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46   define sqlite3F
2aa70 69 6c 65 53 75 66 66 69 78 33 28 58 2c 59 29 0a  ileSuffix3(X,Y).
2aa80 23 65 6e 64 69 66 0a 75 38 20 73 71 6c 69 74 65  #endif.u8 sqlite
2aa90 33 47 65 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73  3GetBoolean(cons
2aaa0 74 20 63 68 61 72 20 2a 7a 2c 75 38 29 3b 0a 0a  t char *z,u8);..
2aab0 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c 69  const void *sqli
2aac0 74 65 33 56 61 6c 75 65 54 65 78 74 28 73 71 6c  te3ValueText(sql
2aad0 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29  ite3_value*, u8)
2aae0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61 6c  ;.int sqlite3Val
2aaf0 75 65 42 79 74 65 73 28 73 71 6c 69 74 65 33 5f  ueBytes(sqlite3_
2ab00 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 76 6f 69  value*, u8);.voi
2ab10 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65  d sqlite3ValueSe
2ab20 74 53 74 72 28 73 71 6c 69 74 65 33 5f 76 61 6c  tStr(sqlite3_val
2ab30 75 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20  ue*, int, const 
2ab40 76 6f 69 64 20 2a 2c 75 38 2c 0a 20 20 20 20 20  void *,u8,.     
2ab50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ab60 20 20 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a     void(*)(void*
2ab70 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  ));.void sqlite3
2ab80 56 61 6c 75 65 53 65 74 4e 75 6c 6c 28 73 71 6c  ValueSetNull(sql
2ab90 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 76 6f  ite3_value*);.vo
2aba0 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46  id sqlite3ValueF
2abb0 72 65 65 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  ree(sqlite3_valu
2abc0 65 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 76 61 6c  e*);.sqlite3_val
2abd0 75 65 20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65  ue *sqlite3Value
2abe0 4e 65 77 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a  New(sqlite3 *);.
2abf0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2ac00 4d 49 54 5f 55 54 46 31 36 0a 63 68 61 72 20 2a  MIT_UTF16.char *
2ac10 73 71 6c 69 74 65 33 55 74 66 31 36 74 6f 38 28  sqlite3Utf16to8(
2ac20 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74  sqlite3 *, const
2ac30 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 75 38 29   void*, int, u8)
2ac40 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c  ;.#endif.int sql
2ac50 69 74 65 33 56 61 6c 75 65 46 72 6f 6d 45 78 70  ite3ValueFromExp
2ac60 72 28 73 71 6c 69 74 65 33 20 2a 2c 20 45 78 70  r(sqlite3 *, Exp
2ac70 72 20 2a 2c 20 75 38 2c 20 75 38 2c 20 73 71 6c  r *, u8, u8, sql
2ac80 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 3b 0a  ite3_value **);.
2ac90 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75  void sqlite3Valu
2aca0 65 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28 73  eApplyAffinity(s
2acb0 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2c 20  qlite3_value *, 
2acc0 75 38 2c 20 75 38 29 3b 0a 23 69 66 6e 64 65 66  u8, u8);.#ifndef
2acd0 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41   SQLITE_AMALGAMA
2ace0 54 49 4f 4e 0a 65 78 74 65 72 6e 20 63 6f 6e 73  TION.extern cons
2acf0 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
2ad00 73 71 6c 69 74 65 33 4f 70 63 6f 64 65 50 72 6f  sqlite3OpcodePro
2ad10 70 65 72 74 79 5b 5d 3b 0a 65 78 74 65 72 6e 20  perty[];.extern 
2ad20 63 6f 6e 73 74 20 63 68 61 72 20 73 71 6c 69 74  const char sqlit
2ad30 65 33 53 74 72 42 49 4e 41 52 59 5b 5d 3b 0a 65  e3StrBINARY[];.e
2ad40 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69  xtern const unsi
2ad50 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74 65  gned char sqlite
2ad60 33 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 5d 3b  3UpperToLower[];
2ad70 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e  .extern const un
2ad80 73 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69  signed char sqli
2ad90 74 65 33 43 74 79 70 65 4d 61 70 5b 5d 3b 0a 65  te3CtypeMap[];.e
2ada0 78 74 65 72 6e 20 63 6f 6e 73 74 20 54 6f 6b 65  xtern const Toke
2adb0 6e 20 73 71 6c 69 74 65 33 49 6e 74 54 6f 6b 65  n sqlite3IntToke
2adc0 6e 73 5b 5d 3b 0a 65 78 74 65 72 6e 20 53 51 4c  ns[];.extern SQL
2add0 49 54 45 5f 57 53 44 20 73 74 72 75 63 74 20 53  ITE_WSD struct S
2ade0 71 6c 69 74 65 33 43 6f 6e 66 69 67 20 73 71 6c  qlite3Config sql
2adf0 69 74 65 33 43 6f 6e 66 69 67 3b 0a 65 78 74 65  ite3Config;.exte
2ae00 72 6e 20 46 75 6e 63 44 65 66 48 61 73 68 20 73  rn FuncDefHash s
2ae10 71 6c 69 74 65 33 42 75 69 6c 74 69 6e 46 75 6e  qlite3BuiltinFun
2ae20 63 74 69 6f 6e 73 3b 0a 23 69 66 6e 64 65 66 20  ctions;.#ifndef 
2ae30 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a  SQLITE_OMIT_WSD.
2ae40 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74  extern int sqlit
2ae50 65 33 50 65 6e 64 69 6e 67 42 79 74 65 3b 0a 23  e3PendingByte;.#
2ae60 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 76 6f 69  endif.#endif.voi
2ae70 64 20 73 71 6c 69 74 65 33 52 6f 6f 74 50 61 67  d sqlite3RootPag
2ae80 65 4d 6f 76 65 64 28 73 71 6c 69 74 65 33 2a 2c  eMoved(sqlite3*,
2ae90 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
2aea0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 69  .void sqlite3Rei
2aeb0 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 54 6f 6b  ndex(Parse*, Tok
2aec0 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  en*, Token*);.vo
2aed0 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 46  id sqlite3AlterF
2aee0 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a  unctions(void);.
2aef0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65  void sqlite3Alte
2af00 72 52 65 6e 61 6d 65 54 61 62 6c 65 28 50 61 72  rRenameTable(Par
2af10 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54  se*, SrcList*, T
2af20 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
2af30 74 65 33 47 65 74 54 6f 6b 65 6e 28 63 6f 6e 73  te3GetToken(cons
2af40 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
2af50 2a 2c 20 69 6e 74 20 2a 29 3b 0a 76 6f 69 64 20  *, int *);.void 
2af60 73 71 6c 69 74 65 33 4e 65 73 74 65 64 50 61 72  sqlite3NestedPar
2af70 73 65 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74  se(Parse*, const
2af80 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f   char*, ...);.vo
2af90 69 64 20 73 71 6c 69 74 65 33 45 78 70 69 72 65  id sqlite3Expire
2afa0 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e  PreparedStatemen
2afb0 74 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e  ts(sqlite3*);.in
2afc0 74 20 73 71 6c 69 74 65 33 43 6f 64 65 53 75 62  t sqlite3CodeSub
2afd0 73 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 45  select(Parse*, E
2afe0 78 70 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  xpr *, int, int)
2aff0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  ;.void sqlite3Se
2b000 6c 65 63 74 50 72 65 70 28 50 61 72 73 65 2a 2c  lectPrep(Parse*,
2b010 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f   Select*, NameCo
2b020 6e 74 65 78 74 2a 29 3b 0a 76 6f 69 64 20 73 71  ntext*);.void sq
2b030 6c 69 74 65 33 53 65 6c 65 63 74 57 72 6f 6e 67  lite3SelectWrong
2b040 4e 75 6d 54 65 72 6d 73 45 72 72 6f 72 28 50 61  NumTermsError(Pa
2b050 72 73 65 20 2a 70 50 61 72 73 65 2c 20 53 65 6c  rse *pParse, Sel
2b060 65 63 74 20 2a 70 29 3b 0a 69 6e 74 20 73 71 6c  ect *p);.int sql
2b070 69 74 65 33 4d 61 74 63 68 53 70 61 6e 4e 61 6d  ite3MatchSpanNam
2b080 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  e(const char*, c
2b090 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
2b0a0 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
2b0b0 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  har*);.int sqlit
2b0c0 65 33 52 65 73 6f 6c 76 65 45 78 70 72 4e 61 6d  e3ResolveExprNam
2b0d0 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c  es(NameContext*,
2b0e0 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   Expr*);.int sql
2b0f0 69 74 65 33 52 65 73 6f 6c 76 65 45 78 70 72 4c  ite3ResolveExprL
2b100 69 73 74 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e  istNames(NameCon
2b110 74 65 78 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a  text*, ExprList*
2b120 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
2b130 65 73 6f 6c 76 65 53 65 6c 65 63 74 4e 61 6d 65  esolveSelectName
2b140 73 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74  s(Parse*, Select
2b150 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29  *, NameContext*)
2b160 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
2b170 73 6f 6c 76 65 53 65 6c 66 52 65 66 65 72 65 6e  solveSelfReferen
2b180 63 65 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a  ce(Parse*,Table*
2b190 2c 69 6e 74 2c 45 78 70 72 2a 2c 45 78 70 72 4c  ,int,Expr*,ExprL
2b1a0 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
2b1b0 65 33 52 65 73 6f 6c 76 65 4f 72 64 65 72 47 72  e3ResolveOrderGr
2b1c0 6f 75 70 42 79 28 50 61 72 73 65 2a 2c 20 53 65  oupBy(Parse*, Se
2b1d0 6c 65 63 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a  lect*, ExprList*
2b1e0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
2b1f0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 75  void sqlite3Colu
2b200 6d 6e 44 65 66 61 75 6c 74 28 56 64 62 65 20 2a  mnDefault(Vdbe *
2b210 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20  , Table *, int, 
2b220 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2b230 65 33 41 6c 74 65 72 46 69 6e 69 73 68 41 64 64  e3AlterFinishAdd
2b240 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20  Column(Parse *, 
2b250 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73  Token *);.void s
2b260 71 6c 69 74 65 33 41 6c 74 65 72 42 65 67 69 6e  qlite3AlterBegin
2b270 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20  AddColumn(Parse 
2b280 2a 2c 20 53 72 63 4c 69 73 74 20 2a 29 3b 0a 43  *, SrcList *);.C
2b290 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 47  ollSeq *sqlite3G
2b2a0 65 74 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 2a  etCollSeq(Parse*
2b2b0 2c 20 75 38 2c 20 43 6f 6c 6c 53 65 71 20 2a 2c  , u8, CollSeq *,
2b2c0 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63   const char*);.c
2b2d0 68 61 72 20 73 71 6c 69 74 65 33 41 66 66 69 6e  har sqlite3Affin
2b2e0 69 74 79 54 79 70 65 28 63 6f 6e 73 74 20 63 68  ityType(const ch
2b2f0 61 72 2a 2c 20 75 38 2a 29 3b 0a 76 6f 69 64 20  ar*, u8*);.void 
2b300 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65 28 50  sqlite3Analyze(P
2b310 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  arse*, Token*, T
2b320 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
2b330 74 65 33 49 6e 76 6f 6b 65 42 75 73 79 48 61 6e  te3InvokeBusyHan
2b340 64 6c 65 72 28 42 75 73 79 48 61 6e 64 6c 65 72  dler(BusyHandler
2b350 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
2b360 69 6e 64 44 62 28 73 71 6c 69 74 65 33 2a 2c 20  indDb(sqlite3*, 
2b370 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
2b380 69 74 65 33 46 69 6e 64 44 62 4e 61 6d 65 28 73  ite3FindDbName(s
2b390 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20  qlite3 *, const 
2b3a0 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c  char *);.int sql
2b3b0 69 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64  ite3AnalysisLoad
2b3c0 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 69 44  (sqlite3*,int iD
2b3d0 42 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  B);.void sqlite3
2b3e0 44 65 6c 65 74 65 49 6e 64 65 78 53 61 6d 70 6c  DeleteIndexSampl
2b3f0 65 73 28 73 71 6c 69 74 65 33 2a 2c 49 6e 64 65  es(sqlite3*,Inde
2b400 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  x*);.void sqlite
2b410 33 44 65 66 61 75 6c 74 52 6f 77 45 73 74 28 49  3DefaultRowEst(I
2b420 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ndex*);.void sql
2b430 69 74 65 33 52 65 67 69 73 74 65 72 4c 69 6b 65  ite3RegisterLike
2b440 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65  Functions(sqlite
2b450 33 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  3*, int);.int sq
2b460 6c 69 74 65 33 49 73 4c 69 6b 65 46 75 6e 63 74  lite3IsLikeFunct
2b470 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 45 78 70  ion(sqlite3*,Exp
2b480 72 2a 2c 69 6e 74 2a 2c 63 68 61 72 2a 29 3b 0a  r*,int*,char*);.
2b490 76 6f 69 64 20 73 71 6c 69 74 65 33 53 63 68 65  void sqlite3Sche
2b4a0 6d 61 43 6c 65 61 72 28 76 6f 69 64 20 2a 29 3b  maClear(void *);
2b4b0 0a 53 63 68 65 6d 61 20 2a 73 71 6c 69 74 65 33  .Schema *sqlite3
2b4c0 53 63 68 65 6d 61 47 65 74 28 73 71 6c 69 74 65  SchemaGet(sqlite
2b4d0 33 20 2a 2c 20 42 74 72 65 65 20 2a 29 3b 0a 69  3 *, Btree *);.i
2b4e0 6e 74 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61  nt sqlite3Schema
2b4f0 54 6f 49 6e 64 65 78 28 73 71 6c 69 74 65 33 20  ToIndex(sqlite3 
2b500 2a 64 62 2c 20 53 63 68 65 6d 61 20 2a 29 3b 0a  *db, Schema *);.
2b510 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33  KeyInfo *sqlite3
2b520 4b 65 79 49 6e 66 6f 41 6c 6c 6f 63 28 73 71 6c  KeyInfoAlloc(sql
2b530 69 74 65 33 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a  ite3*,int,int);.
2b540 76 6f 69 64 20 73 71 6c 69 74 65 33 4b 65 79 49  void sqlite3KeyI
2b550 6e 66 6f 55 6e 72 65 66 28 4b 65 79 49 6e 66 6f  nfoUnref(KeyInfo
2b560 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c  *);.KeyInfo *sql
2b570 69 74 65 33 4b 65 79 49 6e 66 6f 52 65 66 28 4b  ite3KeyInfoRef(K
2b580 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66  eyInfo*);.KeyInf
2b590 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66  o *sqlite3KeyInf
2b5a0 6f 4f 66 49 6e 64 65 78 28 50 61 72 73 65 2a 2c  oOfIndex(Parse*,
2b5b0 20 49 6e 64 65 78 2a 29 3b 0a 23 69 66 64 65 66   Index*);.#ifdef
2b5c0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 69 6e   SQLITE_DEBUG.in
2b5d0 74 20 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f  t sqlite3KeyInfo
2b5e0 49 73 57 72 69 74 65 61 62 6c 65 28 4b 65 79 49  IsWriteable(KeyI
2b5f0 6e 66 6f 2a 29 3b 0a 23 65 6e 64 69 66 0a 69 6e  nfo*);.#endif.in
2b600 74 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 46  t sqlite3CreateF
2b610 75 6e 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 63  unc(sqlite3 *, c
2b620 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74  onst char *, int
2b630 2c 20 69 6e 74 2c 20 76 6f 69 64 20 2a 2c 0a 20  , int, void *,. 
2b640 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65   void (*)(sqlite
2b650 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
2b660 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29  qlite3_value **)
2b670 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c  ,.  void (*)(sql
2b680 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e  ite3_context*,in
2b690 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  t,sqlite3_value 
2b6a0 2a 2a 29 2c 20 76 6f 69 64 20 28 2a 29 28 73 71  **), void (*)(sq
2b6b0 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 2c  lite3_context*),
2b6c0 0a 20 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  .  FuncDestructo
2b6d0 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72 0a 29  r *pDestructor.)
2b6e0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 6f  ;.void sqlite3Oo
2b6f0 6d 46 61 75 6c 74 28 73 71 6c 69 74 65 33 2a 29  mFault(sqlite3*)
2b700 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 6f  ;.void sqlite3Oo
2b710 6d 43 6c 65 61 72 28 73 71 6c 69 74 65 33 2a 29  mClear(sqlite3*)
2b720 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 70 69  ;.int sqlite3Api
2b730 45 78 69 74 28 73 71 6c 69 74 65 33 20 2a 64 62  Exit(sqlite3 *db
2b740 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
2b750 74 65 33 4f 70 65 6e 54 65 6d 70 44 61 74 61 62  te3OpenTempDatab
2b760 61 73 65 28 50 61 72 73 65 20 2a 29 3b 0a 0a 76  ase(Parse *);..v
2b770 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41 63  oid sqlite3StrAc
2b780 63 75 6d 49 6e 69 74 28 53 74 72 41 63 63 75 6d  cumInit(StrAccum
2b790 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63 68 61  *, sqlite3*, cha
2b7a0 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  r*, int, int);.v
2b7b0 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41 63  oid sqlite3StrAc
2b7c0 63 75 6d 41 70 70 65 6e 64 28 53 74 72 41 63 63  cumAppend(StrAcc
2b7d0 75 6d 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  um*,const char*,
2b7e0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2b7f0 65 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64  e3StrAccumAppend
2b800 41 6c 6c 28 53 74 72 41 63 63 75 6d 2a 2c 63 6f  All(StrAccum*,co
2b810 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
2b820 20 73 71 6c 69 74 65 33 41 70 70 65 6e 64 43 68   sqlite3AppendCh
2b830 61 72 28 53 74 72 41 63 63 75 6d 2a 2c 69 6e 74  ar(StrAccum*,int
2b840 2c 63 68 61 72 29 3b 0a 63 68 61 72 20 2a 73 71  ,char);.char *sq
2b850 6c 69 74 65 33 53 74 72 41 63 63 75 6d 46 69 6e  lite3StrAccumFin
2b860 69 73 68 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a  ish(StrAccum*);.
2b870 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41  void sqlite3StrA
2b880 63 63 75 6d 52 65 73 65 74 28 53 74 72 41 63 63  ccumReset(StrAcc
2b890 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  um*);.void sqlit
2b8a0 65 33 53 65 6c 65 63 74 44 65 73 74 49 6e 69 74  e3SelectDestInit
2b8b0 28 53 65 6c 65 63 74 44 65 73 74 2a 2c 69 6e 74  (SelectDest*,int
2b8c0 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c  ,int);.Expr *sql
2b8d0 69 74 65 33 43 72 65 61 74 65 43 6f 6c 75 6d 6e  ite3CreateColumn
2b8e0 45 78 70 72 28 73 71 6c 69 74 65 33 20 2a 2c 20  Expr(sqlite3 *, 
2b8f0 53 72 63 4c 69 73 74 20 2a 2c 20 69 6e 74 2c 20  SrcList *, int, 
2b900 69 6e 74 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69  int);..void sqli
2b910 74 65 33 42 61 63 6b 75 70 52 65 73 74 61 72 74  te3BackupRestart
2b920 28 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 20  (sqlite3_backup 
2b930 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2b940 42 61 63 6b 75 70 55 70 64 61 74 65 28 73 71 6c  BackupUpdate(sql
2b950 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 2c 20 50  ite3_backup *, P
2b960 67 6e 6f 2c 20 63 6f 6e 73 74 20 75 38 20 2a 29  gno, const u8 *)
2b970 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ;..#ifndef SQLIT
2b980 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52 59 0a  E_OMIT_SUBQUERY.
2b990 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
2b9a0 68 65 63 6b 49 4e 28 50 61 72 73 65 2a 2c 20 45  heckIN(Parse*, E
2b9b0 78 70 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64  xpr*);.#else.# d
2b9c0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70  efine sqlite3Exp
2b9d0 72 43 68 65 63 6b 49 4e 28 78 2c 79 29 20 53 51  rCheckIN(x,y) SQ
2b9e0 4c 49 54 45 5f 4f 4b 0a 23 65 6e 64 69 66 0a 0a  LITE_OK.#endif..
2b9f0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
2ba00 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54  ABLE_STAT3_OR_ST
2ba10 41 54 34 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  AT4.void sqlite3
2ba20 41 6e 61 6c 79 7a 65 46 75 6e 63 74 69 6f 6e 73  AnalyzeFunctions
2ba30 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69  (void);.int sqli
2ba40 74 65 33 53 74 61 74 34 50 72 6f 62 65 53 65 74  te3Stat4ProbeSet
2ba50 56 61 6c 75 65 28 0a 20 20 20 20 50 61 72 73 65  Value(.    Parse
2ba60 2a 2c 49 6e 64 65 78 2a 2c 55 6e 70 61 63 6b 65  *,Index*,Unpacke
2ba70 64 52 65 63 6f 72 64 2a 2a 2c 45 78 70 72 2a 2c  dRecord**,Expr*,
2ba80 69 6e 74 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 69  int,int,int*);.i
2ba90 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74 34 56  nt sqlite3Stat4V
2baa0 61 6c 75 65 46 72 6f 6d 45 78 70 72 28 50 61 72  alueFromExpr(Par
2bab0 73 65 2a 2c 20 45 78 70 72 2a 2c 20 75 38 2c 20  se*, Expr*, u8, 
2bac0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29  sqlite3_value**)
2bad0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ;.void sqlite3St
2bae0 61 74 34 50 72 6f 62 65 46 72 65 65 28 55 6e 70  at4ProbeFree(Unp
2baf0 61 63 6b 65 64 52 65 63 6f 72 64 2a 29 3b 0a 69  ackedRecord*);.i
2bb00 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74 34 43  nt sqlite3Stat4C
2bb10 6f 6c 75 6d 6e 28 73 71 6c 69 74 65 33 2a 2c 20  olumn(sqlite3*, 
2bb20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74  const void*, int
2bb30 2c 20 69 6e 74 2c 20 73 71 6c 69 74 65 33 5f 76  , int, sqlite3_v
2bb40 61 6c 75 65 2a 2a 29 3b 0a 63 68 61 72 20 73 71  alue**);.char sq
2bb50 6c 69 74 65 33 49 6e 64 65 78 43 6f 6c 75 6d 6e  lite3IndexColumn
2bb60 41 66 66 69 6e 69 74 79 28 73 71 6c 69 74 65 33  Affinity(sqlite3
2bb70 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74 29 3b  *, Index*, int);
2bb80 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
2bb90 68 65 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20  he interface to 
2bba0 74 68 65 20 4c 45 4d 4f 4e 2d 67 65 6e 65 72 61  the LEMON-genera
2bbb0 74 65 64 20 70 61 72 73 65 72 0a 2a 2f 0a 23 69  ted parser.*/.#i
2bbc0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41  fndef SQLITE_AMA
2bbd0 4c 47 41 4d 41 54 49 4f 4e 0a 20 20 76 6f 69 64  LGAMATION.  void
2bbe0 20 2a 73 71 6c 69 74 65 33 50 61 72 73 65 72 41   *sqlite3ParserA
2bbf0 6c 6c 6f 63 28 76 6f 69 64 2a 28 2a 29 28 75 36  lloc(void*(*)(u6
2bc00 34 29 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  4));.  void sqli
2bc10 74 65 33 50 61 72 73 65 72 46 72 65 65 28 76 6f  te3ParserFree(vo
2bc20 69 64 2a 2c 20 76 6f 69 64 28 2a 29 28 76 6f 69  id*, void(*)(voi
2bc30 64 2a 29 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69  d*));.#endif.voi
2bc40 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 28  d sqlite3Parser(
2bc50 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65  void*, int, Toke
2bc60 6e 2c 20 50 61 72 73 65 2a 29 3b 0a 23 69 66 64  n, Parse*);.#ifd
2bc70 65 66 20 59 59 54 52 41 43 4b 4d 41 58 53 54 41  ef YYTRACKMAXSTA
2bc80 43 4b 44 45 50 54 48 0a 20 20 69 6e 74 20 73 71  CKDEPTH.  int sq
2bc90 6c 69 74 65 33 50 61 72 73 65 72 53 74 61 63 6b  lite3ParserStack
2bca0 50 65 61 6b 28 76 6f 69 64 2a 29 3b 0a 23 65 6e  Peak(void*);.#en
2bcb0 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  dif..void sqlite
2bcc0 33 41 75 74 6f 4c 6f 61 64 45 78 74 65 6e 73 69  3AutoLoadExtensi
2bcd0 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23  ons(sqlite3*);.#
2bce0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2bcf0 49 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f  IT_LOAD_EXTENSIO
2bd00 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  N.  void sqlite3
2bd10 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28  CloseExtensions(
2bd20 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6c 73 65  sqlite3*);.#else
2bd30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2bd40 33 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73  3CloseExtensions
2bd50 28 58 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e  (X).#endif..#ifn
2bd60 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2bd70 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20 76  SHARED_CACHE.  v
2bd80 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65  oid sqlite3Table
2bd90 4c 6f 63 6b 28 50 61 72 73 65 20 2a 2c 20 69 6e  Lock(Parse *, in
2bda0 74 2c 20 69 6e 74 2c 20 75 38 2c 20 63 6f 6e 73  t, int, u8, cons
2bdb0 74 20 63 68 61 72 20 2a 29 3b 0a 23 65 6c 73 65  t char *);.#else
2bdc0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
2bdd0 65 33 54 61 62 6c 65 4c 6f 63 6b 28 76 2c 77 2c  e3TableLock(v,w,
2bde0 78 2c 79 2c 7a 29 0a 23 65 6e 64 69 66 0a 0a 23  x,y,z).#endif..#
2bdf0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
2be00 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 55  T.  int sqlite3U
2be10 74 66 38 54 6f 38 28 75 6e 73 69 67 6e 65 64 20  tf8To8(unsigned 
2be20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  char*);.#endif..
2be30 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
2be40 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
2be50 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
2be60 33 56 74 61 62 43 6c 65 61 72 28 59 29 0a 23 20  3VtabClear(Y).# 
2be70 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
2be80 74 61 62 53 79 6e 63 28 58 2c 59 29 20 53 51 4c  tabSync(X,Y) SQL
2be90 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65  ITE_OK.#  define
2bea0 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c   sqlite3VtabRoll
2beb0 62 61 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e  back(X).#  defin
2bec0 65 20 73 71 6c 69 74 65 33 56 74 61 62 43 6f 6d  e sqlite3VtabCom
2bed0 6d 69 74 28 58 29 0a 23 20 20 64 65 66 69 6e 65  mit(X).#  define
2bee0 20 73 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79   sqlite3VtabInSy
2bef0 6e 63 28 64 62 29 20 30 0a 23 20 20 64 65 66 69  nc(db) 0.#  defi
2bf00 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f  ne sqlite3VtabLo
2bf10 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20  ck(X).#  define 
2bf20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63  sqlite3VtabUnloc
2bf30 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73  k(X).#  define s
2bf40 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b  qlite3VtabUnlock
2bf50 4c 69 73 74 28 58 29 0a 23 20 20 64 65 66 69 6e  List(X).#  defin
2bf60 65 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76  e sqlite3VtabSav
2bf70 65 70 6f 69 6e 74 28 58 2c 20 59 2c 20 5a 29 20  epoint(X, Y, Z) 
2bf80 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66  SQLITE_OK.#  def
2bf90 69 6e 65 20 73 71 6c 69 74 65 33 47 65 74 56 54  ine sqlite3GetVT
2bfa0 61 62 6c 65 28 58 2c 59 29 20 20 28 28 56 54 61  able(X,Y)  ((VTa
2bfb0 62 6c 65 2a 29 30 29 0a 23 65 6c 73 65 0a 20 20  ble*)0).#else.  
2bfc0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61   void sqlite3Vta
2bfd0 62 43 6c 65 61 72 28 73 71 6c 69 74 65 33 20 2a  bClear(sqlite3 *
2bfe0 64 62 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 20  db, Table*);.   
2bff0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
2c000 44 69 73 63 6f 6e 6e 65 63 74 28 73 71 6c 69 74  Disconnect(sqlit
2c010 65 33 20 2a 64 62 2c 20 54 61 62 6c 65 20 2a 70  e3 *db, Table *p
2c020 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65  );.   int sqlite
2c030 33 56 74 61 62 53 79 6e 63 28 73 71 6c 69 74 65  3VtabSync(sqlite
2c040 33 20 2a 64 62 2c 20 56 64 62 65 2a 29 3b 0a 20  3 *db, Vdbe*);. 
2c050 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61    int sqlite3Vta
2c060 62 52 6f 6c 6c 62 61 63 6b 28 73 71 6c 69 74 65  bRollback(sqlite
2c070 33 20 2a 64 62 29 3b 0a 20 20 20 69 6e 74 20 73  3 *db);.   int s
2c080 71 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d 69 74  qlite3VtabCommit
2c090 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20  (sqlite3 *db);. 
2c0a0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74    void sqlite3Vt
2c0b0 61 62 4c 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29  abLock(VTable *)
2c0c0 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ;.   void sqlite
2c0d0 33 56 74 61 62 55 6e 6c 6f 63 6b 28 56 54 61 62  3VtabUnlock(VTab
2c0e0 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73  le *);.   void s
2c0f0 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b  qlite3VtabUnlock
2c100 4c 69 73 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a  List(sqlite3*);.
2c110 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74     int sqlite3Vt
2c120 61 62 53 61 76 65 70 6f 69 6e 74 28 73 71 6c 69  abSavepoint(sqli
2c130 74 65 33 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  te3 *, int, int)
2c140 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ;.   void sqlite
2c150 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73  3VtabImportErrms
2c160 67 28 56 64 62 65 2a 2c 20 73 71 6c 69 74 65 33  g(Vdbe*, sqlite3
2c170 5f 76 74 61 62 2a 29 3b 0a 20 20 20 56 54 61 62  _vtab*);.   VTab
2c180 6c 65 20 2a 73 71 6c 69 74 65 33 47 65 74 56 54  le *sqlite3GetVT
2c190 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20 54  able(sqlite3*, T
2c1a0 61 62 6c 65 2a 29 3b 0a 20 20 20 4d 6f 64 75 6c  able*);.   Modul
2c1b0 65 20 2a 73 71 6c 69 74 65 33 56 74 61 62 43 72  e *sqlite3VtabCr
2c1c0 65 61 74 65 4d 6f 64 75 6c 65 28 0a 20 20 20 20  eateModule(.    
2c1d0 20 73 71 6c 69 74 65 33 2a 2c 0a 20 20 20 20 20   sqlite3*,.     
2c1e0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 0a 20 20 20  const char*,.   
2c1f0 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f    const sqlite3_
2c200 6d 6f 64 75 6c 65 2a 2c 0a 20 20 20 20 20 76 6f  module*,.     vo
2c210 69 64 2a 2c 0a 20 20 20 20 20 76 6f 69 64 28 2a  id*,.     void(*
2c220 29 28 76 6f 69 64 2a 29 0a 20 20 20 29 3b 0a 23  )(void*).   );.#
2c230 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
2c240 56 74 61 62 49 6e 53 79 6e 63 28 64 62 29 20 28  VtabInSync(db) (
2c250 28 64 62 29 2d 3e 6e 56 54 72 61 6e 73 3e 30 20  (db)->nVTrans>0 
2c260 26 26 20 28 64 62 29 2d 3e 61 56 54 72 61 6e 73  && (db)->aVTrans
2c270 3d 3d 30 29 0a 23 65 6e 64 69 66 0a 69 6e 74 20  ==0).#endif.int 
2c280 73 71 6c 69 74 65 33 56 74 61 62 45 70 6f 6e 79  sqlite3VtabEpony
2c290 6d 6f 75 73 54 61 62 6c 65 49 6e 69 74 28 50 61  mousTableInit(Pa
2c2a0 72 73 65 2a 2c 4d 6f 64 75 6c 65 2a 29 3b 0a 76  rse*,Module*);.v
2c2b0 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 45  oid sqlite3VtabE
2c2c0 70 6f 6e 79 6d 6f 75 73 54 61 62 6c 65 43 6c 65  ponymousTableCle
2c2d0 61 72 28 73 71 6c 69 74 65 33 2a 2c 4d 6f 64 75  ar(sqlite3*,Modu
2c2e0 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  le*);.void sqlit
2c2f0 65 33 56 74 61 62 4d 61 6b 65 57 72 69 74 61 62  e3VtabMakeWritab
2c300 6c 65 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a  le(Parse*,Table*
2c310 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
2c320 74 61 62 42 65 67 69 6e 50 61 72 73 65 28 50 61  tabBeginParse(Pa
2c330 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  rse*, Token*, To
2c340 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e  ken*, Token*, in
2c350 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2c360 56 74 61 62 46 69 6e 69 73 68 50 61 72 73 65 28  VtabFinishParse(
2c370 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Parse*, Token*);
2c380 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61  .void sqlite3Vta
2c390 62 41 72 67 49 6e 69 74 28 50 61 72 73 65 2a 29  bArgInit(Parse*)
2c3a0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74  ;.void sqlite3Vt
2c3b0 61 62 41 72 67 45 78 74 65 6e 64 28 50 61 72 73  abArgExtend(Pars
2c3c0 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  e*, Token*);.int
2c3d0 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c   sqlite3VtabCall
2c3e0 43 72 65 61 74 65 28 73 71 6c 69 74 65 33 2a 2c  Create(sqlite3*,
2c3f0 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72   int, const char
2c400 20 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 69 6e   *, char **);.in
2c410 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c  t sqlite3VtabCal
2c420 6c 43 6f 6e 6e 65 63 74 28 50 61 72 73 65 2a 2c  lConnect(Parse*,
2c430 20 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71   Table*);.int sq
2c440 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 44 65 73  lite3VtabCallDes
2c450 74 72 6f 79 28 73 71 6c 69 74 65 33 2a 2c 20 69  troy(sqlite3*, i
2c460 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  nt, const char *
2c470 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74  );.int sqlite3Vt
2c480 61 62 42 65 67 69 6e 28 73 71 6c 69 74 65 33 20  abBegin(sqlite3 
2c490 2a 2c 20 56 54 61 62 6c 65 20 2a 29 3b 0a 46 75  *, VTable *);.Fu
2c4a0 6e 63 44 65 66 20 2a 73 71 6c 69 74 65 33 56 74  ncDef *sqlite3Vt
2c4b0 61 62 4f 76 65 72 6c 6f 61 64 46 75 6e 63 74 69  abOverloadFuncti
2c4c0 6f 6e 28 73 71 6c 69 74 65 33 20 2a 2c 46 75 6e  on(sqlite3 *,Fun
2c4d0 63 44 65 66 2a 2c 20 69 6e 74 20 6e 41 72 67 2c  cDef*, int nArg,
2c4e0 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
2c4f0 6c 69 74 65 33 49 6e 76 61 6c 69 64 46 75 6e 63  lite3InvalidFunc
2c500 74 69 6f 6e 28 73 71 6c 69 74 65 33 5f 63 6f 6e  tion(sqlite3_con
2c510 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
2c520 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 73 71 6c 69  3_value**);.sqli
2c530 74 65 33 5f 69 6e 74 36 34 20 73 71 6c 69 74 65  te3_int64 sqlite
2c540 33 53 74 6d 74 43 75 72 72 65 6e 74 54 69 6d 65  3StmtCurrentTime
2c550 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
2c560 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
2c570 64 62 65 50 61 72 61 6d 65 74 65 72 49 6e 64 65  dbeParameterInde
2c580 78 28 56 64 62 65 2a 2c 20 63 6f 6e 73 74 20 63  x(Vdbe*, const c
2c590 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  har*, int);.int 
2c5a0 73 71 6c 69 74 65 33 54 72 61 6e 73 66 65 72 42  sqlite3TransferB
2c5b0 69 6e 64 69 6e 67 73 28 73 71 6c 69 74 65 33 5f  indings(sqlite3_
2c5c0 73 74 6d 74 20 2a 2c 20 73 71 6c 69 74 65 33 5f  stmt *, sqlite3_
2c5d0 73 74 6d 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71  stmt *);.void sq
2c5e0 6c 69 74 65 33 50 61 72 73 65 72 52 65 73 65 74  lite3ParserReset
2c5f0 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71  (Parse*);.int sq
2c600 6c 69 74 65 33 52 65 70 72 65 70 61 72 65 28 56  lite3Reprepare(V
2c610 64 62 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  dbe*);.void sqli
2c620 74 65 33 45 78 70 72 4c 69 73 74 43 68 65 63 6b  te3ExprListCheck
2c630 4c 65 6e 67 74 68 28 50 61 72 73 65 2a 2c 20 45  Length(Parse*, E
2c640 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20  xprList*, const 
2c650 63 68 61 72 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20  char*);.CollSeq 
2c660 2a 73 71 6c 69 74 65 33 42 69 6e 61 72 79 43 6f  *sqlite3BinaryCo
2c670 6d 70 61 72 65 43 6f 6c 6c 53 65 71 28 50 61 72  mpareCollSeq(Par
2c680 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 45 78  se *, Expr *, Ex
2c690 70 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  pr *);.int sqlit
2c6a0 65 33 54 65 6d 70 49 6e 4d 65 6d 6f 72 79 28 63  e3TempInMemory(c
2c6b0 6f 6e 73 74 20 73 71 6c 69 74 65 33 2a 29 3b 0a  onst sqlite3*);.
2c6c0 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69  const char *sqli
2c6d0 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61  te3JournalModena
2c6e0 6d 65 28 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66  me(int);.#ifndef
2c6f0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c   SQLITE_OMIT_WAL
2c700 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 43 68  .  int sqlite3Ch
2c710 65 63 6b 70 6f 69 6e 74 28 73 71 6c 69 74 65 33  eckpoint(sqlite3
2c720 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
2c730 2a 2c 20 69 6e 74 2a 29 3b 0a 20 20 69 6e 74 20  *, int*);.  int 
2c740 73 71 6c 69 74 65 33 57 61 6c 44 65 66 61 75 6c  sqlite3WalDefaul
2c750 74 48 6f 6f 6b 28 76 6f 69 64 2a 2c 73 71 6c 69  tHook(void*,sqli
2c760 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
2c770 2c 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 23 69  ,int);.#endif.#i
2c780 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2c790 54 5f 43 54 45 0a 20 20 57 69 74 68 20 2a 73 71  T_CTE.  With *sq
2c7a0 6c 69 74 65 33 57 69 74 68 41 64 64 28 50 61 72  lite3WithAdd(Par
2c7b0 73 65 2a 2c 57 69 74 68 2a 2c 54 6f 6b 65 6e 2a  se*,With*,Token*
2c7c0 2c 45 78 70 72 4c 69 73 74 2a 2c 53 65 6c 65 63  ,ExprList*,Selec
2c7d0 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  t*);.  void sqli
2c7e0 74 65 33 57 69 74 68 44 65 6c 65 74 65 28 73 71  te3WithDelete(sq
2c7f0 6c 69 74 65 33 2a 2c 57 69 74 68 2a 29 3b 0a 20  lite3*,With*);. 
2c800 20 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 74   void sqlite3Wit
2c810 68 50 75 73 68 28 50 61 72 73 65 2a 2c 20 57 69  hPush(Parse*, Wi
2c820 74 68 2a 2c 20 75 38 29 3b 0a 23 65 6c 73 65 0a  th*, u8);.#else.
2c830 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 57  #define sqlite3W
2c840 69 74 68 50 75 73 68 28 78 2c 79 2c 7a 29 0a 23  ithPush(x,y,z).#
2c850 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 57 69  define sqlite3Wi
2c860 74 68 44 65 6c 65 74 65 28 78 2c 79 29 0a 23 65  thDelete(x,y).#e
2c870 6e 64 69 66 0a 0a 2f 2a 20 44 65 63 6c 61 72 61  ndif../* Declara
2c880 74 69 6f 6e 73 20 66 6f 72 20 66 75 6e 63 74 69  tions for functi
2c890 6f 6e 73 20 69 6e 20 66 6b 65 79 2e 63 2e 20 41  ons in fkey.c. A
2c8a0 6c 6c 20 6f 66 20 74 68 65 73 65 20 61 72 65 20  ll of these are 
2c8b0 72 65 70 6c 61 63 65 64 20 62 79 0a 2a 2a 20 6e  replaced by.** n
2c8c0 6f 2d 6f 70 20 6d 61 63 72 6f 73 20 69 66 20 4f  o-op macros if O
2c8d0 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20  MIT_FOREIGN_KEY 
2c8e0 69 73 20 64 65 66 69 6e 65 64 2e 20 49 6e 20 74  is defined. In t
2c8f0 68 69 73 20 63 61 73 65 20 6e 6f 20 66 6f 72 65  his case no fore
2c900 69 67 6e 0a 2a 2a 20 6b 65 79 20 66 75 6e 63 74  ign.** key funct
2c910 69 6f 6e 61 6c 69 74 79 20 69 73 20 61 76 61 69  ionality is avai
2c920 6c 61 62 6c 65 2e 20 49 66 20 4f 4d 49 54 5f 54  lable. If OMIT_T
2c930 52 49 47 47 45 52 20 69 73 20 64 65 66 69 6e 65  RIGGER is define
2c940 64 20 62 75 74 0a 2a 2a 20 4f 4d 49 54 5f 46 4f  d but.** OMIT_FO
2c950 52 45 49 47 4e 5f 4b 45 59 20 69 73 20 6e 6f 74  REIGN_KEY is not
2c960 2c 20 6f 6e 6c 79 20 73 6f 6d 65 20 6f 66 20 74  , only some of t
2c970 68 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65  he functions are
2c980 20 6e 6f 2d 6f 70 65 64 2e 20 49 6e 0a 2a 2a 20   no-oped. In.** 
2c990 74 68 69 73 20 63 61 73 65 20 66 6f 72 65 69 67  this case foreig
2c9a0 6e 20 6b 65 79 73 20 61 72 65 20 70 61 72 73 65  n keys are parse
2c9b0 64 2c 20 62 75 74 20 6e 6f 20 6f 74 68 65 72 20  d, but no other 
2c9c0 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73  functionality is
2c9d0 0a 2a 2a 20 70 72 6f 76 69 64 65 64 20 28 65 6e  .** provided (en
2c9e0 66 6f 72 63 65 6d 65 6e 74 20 6f 66 20 46 4b 20  forcement of FK 
2c9f0 63 6f 6e 73 74 72 61 69 6e 74 73 20 72 65 71 75  constraints requ
2ca00 69 72 65 73 20 74 68 65 20 74 72 69 67 67 65 72  ires the trigger
2ca10 73 20 73 75 62 2d 73 79 73 74 65 6d 29 2e 0a 2a  s sub-system)..*
2ca20 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  /.#if !defined(S
2ca30 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
2ca40 47 4e 5f 4b 45 59 29 20 26 26 20 21 64 65 66 69  GN_KEY) && !defi
2ca50 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
2ca60 54 52 49 47 47 45 52 29 0a 20 20 76 6f 69 64 20  TRIGGER).  void 
2ca70 73 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 50  sqlite3FkCheck(P
2ca80 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
2ca90 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69  nt, int, int*, i
2caa0 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  nt);.  void sqli
2cab0 74 65 33 46 6b 44 72 6f 70 54 61 62 6c 65 28 50  te3FkDropTable(P
2cac0 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 20 2a  arse*, SrcList *
2cad0 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 76 6f 69  , Table*);.  voi
2cae0 64 20 73 71 6c 69 74 65 33 46 6b 41 63 74 69 6f  d sqlite3FkActio
2caf0 6e 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  ns(Parse*, Table
2cb00 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e  *, ExprList*, in
2cb10 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20  t, int*, int);. 
2cb20 20 69 6e 74 20 73 71 6c 69 74 65 33 46 6b 52 65   int sqlite3FkRe
2cb30 71 75 69 72 65 64 28 50 61 72 73 65 2a 2c 20 54  quired(Parse*, T
2cb40 61 62 6c 65 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74  able*, int*, int
2cb50 29 3b 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33  );.  u32 sqlite3
2cb60 46 6b 4f 6c 64 6d 61 73 6b 28 50 61 72 73 65 2a  FkOldmask(Parse*
2cb70 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 46 4b 65  , Table*);.  FKe
2cb80 79 20 2a 73 71 6c 69 74 65 33 46 6b 52 65 66 65  y *sqlite3FkRefe
2cb90 72 65 6e 63 65 73 28 54 61 62 6c 65 20 2a 29 3b  rences(Table *);
2cba0 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
2cbb0 20 73 71 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e   sqlite3FkAction
2cbc0 73 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20  s(a,b,c,d,e,f). 
2cbd0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
2cbe0 46 6b 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c  FkCheck(a,b,c,d,
2cbf0 65 2c 66 29 0a 20 20 23 64 65 66 69 6e 65 20 73  e,f).  #define s
2cc00 71 6c 69 74 65 33 46 6b 44 72 6f 70 54 61 62 6c  qlite3FkDropTabl
2cc10 65 28 61 2c 62 2c 63 29 0a 20 20 23 64 65 66 69  e(a,b,c).  #defi
2cc20 6e 65 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d  ne sqlite3FkOldm
2cc30 61 73 6b 28 61 2c 62 29 20 20 20 20 20 20 20 20  ask(a,b)        
2cc40 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c   0.  #define sql
2cc50 69 74 65 33 46 6b 52 65 71 75 69 72 65 64 28 61  ite3FkRequired(a
2cc60 2c 62 2c 63 2c 64 29 20 20 20 20 30 0a 20 20 23  ,b,c,d)    0.  #
2cc70 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
2cc80 52 65 66 65 72 65 6e 63 65 73 28 61 29 20 20 20  References(a)   
2cc90 20 20 20 20 20 30 0a 23 65 6e 64 69 66 0a 23 69       0.#endif.#i
2cca0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2ccb0 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 20 20  T_FOREIGN_KEY.  
2ccc0 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 44 65  void sqlite3FkDe
2ccd0 6c 65 74 65 28 73 71 6c 69 74 65 33 20 2a 2c 20  lete(sqlite3 *, 
2cce0 54 61 62 6c 65 2a 29 3b 0a 20 20 69 6e 74 20 73  Table*);.  int s
2ccf0 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e  qlite3FkLocateIn
2cd00 64 65 78 28 50 61 72 73 65 2a 2c 54 61 62 6c 65  dex(Parse*,Table
2cd10 2a 2c 46 4b 65 79 2a 2c 49 6e 64 65 78 2a 2a 2c  *,FKey*,Index**,
2cd20 69 6e 74 2a 2a 29 3b 0a 23 65 6c 73 65 0a 20 20  int**);.#else.  
2cd30 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
2cd40 6b 44 65 6c 65 74 65 28 61 2c 62 29 0a 20 20 23  kDelete(a,b).  #
2cd50 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
2cd60 4c 6f 63 61 74 65 49 6e 64 65 78 28 61 2c 62 2c  LocateIndex(a,b,
2cd70 63 2c 64 2c 65 29 0a 23 65 6e 64 69 66 0a 0a 0a  c,d,e).#endif...
2cd80 2f 2a 0a 2a 2a 20 41 76 61 69 6c 61 62 6c 65 20  /*.** Available 
2cd90 66 61 75 6c 74 20 69 6e 6a 65 63 74 6f 72 73 2e  fault injectors.
2cda0 20 20 53 68 6f 75 6c 64 20 62 65 20 6e 75 6d 62    Should be numb
2cdb0 65 72 65 64 20 62 65 67 69 6e 6e 69 6e 67 20 77  ered beginning w
2cdc0 69 74 68 20 30 2e 0a 2a 2f 0a 23 64 65 66 69 6e  ith 0..*/.#defin
2cdd0 65 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e  e SQLITE_FAULTIN
2cde0 4a 45 43 54 4f 52 5f 4d 41 4c 4c 4f 43 20 20 20  JECTOR_MALLOC   
2cdf0 20 20 30 0a 23 64 65 66 69 6e 65 20 53 51 4c 49    0.#define SQLI
2ce00 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52  TE_FAULTINJECTOR
2ce10 5f 43 4f 55 4e 54 20 20 20 20 20 20 31 0a 0a 2f  _COUNT      1../
2ce20 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61  *.** The interfa
2ce30 63 65 20 74 6f 20 74 68 65 20 63 6f 64 65 20 69  ce to the code i
2ce40 6e 20 66 61 75 6c 74 2e 63 20 75 73 65 64 20 66  n fault.c used f
2ce50 6f 72 20 69 64 65 6e 74 69 66 79 69 6e 67 20 22  or identifying "
2ce60 62 65 6e 69 67 6e 22 0a 2a 2a 20 6d 61 6c 6c 6f  benign".** mallo
2ce70 63 20 66 61 69 6c 75 72 65 73 2e 20 54 68 69 73  c failures. This
2ce80 20 69 73 20 6f 6e 6c 79 20 70 72 65 73 65 6e 74   is only present
2ce90 20 69 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53   if SQLITE_UNTES
2cea0 54 41 42 4c 45 0a 2a 2a 20 69 73 20 6e 6f 74 20  TABLE.** is not 
2ceb0 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 6e  defined..*/.#ifn
2cec0 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53  def SQLITE_UNTES
2ced0 54 41 42 4c 45 0a 20 20 76 6f 69 64 20 73 71 6c  TABLE.  void sql
2cee0 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d  ite3BeginBenignM
2cef0 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 20 20 76  alloc(void);.  v
2cf00 6f 69 64 20 73 71 6c 69 74 65 33 45 6e 64 42 65  oid sqlite3EndBe
2cf10 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29  nignMalloc(void)
2cf20 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
2cf30 65 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65  e sqlite3BeginBe
2cf40 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 20 20 23  nignMalloc().  #
2cf50 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 6e  define sqlite3En
2cf60 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a  dBenignMalloc().
2cf70 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c  #endif../*.** Al
2cf80 6c 6f 77 65 64 20 72 65 74 75 72 6e 20 76 61 6c  lowed return val
2cf90 75 65 73 20 66 72 6f 6d 20 73 71 6c 69 74 65 33  ues from sqlite3
2cfa0 46 69 6e 64 49 6e 49 6e 64 65 78 28 29 0a 2a 2f  FindInIndex().*/
2cfb0 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
2cfc0 58 5f 52 4f 57 49 44 20 20 20 20 20 20 20 20 31  X_ROWID        1
2cfd0 20 20 20 2f 2a 20 53 65 61 72 63 68 20 74 68 65     /* Search the
2cfe0 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20 74 61   rowid of the ta
2cff0 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  ble */.#define I
2d000 4e 5f 49 4e 44 45 58 5f 45 50 48 20 20 20 20 20  N_INDEX_EPH     
2d010 20 20 20 20 20 32 20 20 20 2f 2a 20 53 65 61 72       2   /* Sear
2d020 63 68 20 61 6e 20 65 70 68 65 6d 65 72 61 6c 20  ch an ephemeral 
2d030 62 2d 74 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e  b-tree */.#defin
2d040 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58  e IN_INDEX_INDEX
2d050 5f 41 53 43 20 20 20 20 33 20 20 20 2f 2a 20 45  _ASC    3   /* E
2d060 78 69 73 74 69 6e 67 20 69 6e 64 65 78 20 41 53  xisting index AS
2d070 43 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69  CENDING */.#defi
2d080 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45  ne IN_INDEX_INDE
2d090 58 5f 44 45 53 43 20 20 20 34 20 20 20 2f 2a 20  X_DESC   4   /* 
2d0a0 45 78 69 73 74 69 6e 67 20 69 6e 64 65 78 20 44  Existing index D
2d0b0 45 53 43 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65  ESCENDING */.#de
2d0c0 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f  fine IN_INDEX_NO
2d0d0 4f 50 20 20 20 20 20 20 20 20 20 35 20 20 20 2f  OP         5   /
2d0e0 2a 20 4e 6f 20 74 61 62 6c 65 20 61 76 61 69 6c  * No table avail
2d0f0 61 62 6c 65 2e 20 55 73 65 20 63 6f 6d 70 61 72  able. Use compar
2d100 69 73 6f 6e 73 20 2a 2f 0a 2f 2a 0a 2a 2a 20 41  isons */./*.** A
2d110 6c 6c 6f 77 65 64 20 66 6c 61 67 73 20 66 6f 72  llowed flags for
2d120 20 74 68 65 20 33 72 64 20 70 61 72 61 6d 65 74   the 3rd paramet
2d130 65 72 20 74 6f 20 73 71 6c 69 74 65 33 46 69 6e  er to sqlite3Fin
2d140 64 49 6e 49 6e 64 65 78 28 29 2e 0a 2a 2f 0a 23  dInIndex()..*/.#
2d150 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
2d160 4e 4f 4f 50 5f 4f 4b 20 20 20 20 20 30 78 30 30  NOOP_OK     0x00
2d170 30 31 20 20 2f 2a 20 4f 4b 20 74 6f 20 72 65 74  01  /* OK to ret
2d180 75 72 6e 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f  urn IN_INDEX_NOO
2d190 50 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f  P */.#define IN_
2d1a0 49 4e 44 45 58 5f 4d 45 4d 42 45 52 53 48 49 50  INDEX_MEMBERSHIP
2d1b0 20 20 30 78 30 30 30 32 20 20 2f 2a 20 49 4e 20    0x0002  /* IN 
2d1c0 6f 70 65 72 61 74 6f 72 20 75 73 65 64 20 66 6f  operator used fo
2d1d0 72 20 6d 65 6d 62 65 72 73 68 69 70 20 74 65 73  r membership tes
2d1e0 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f  t */.#define IN_
2d1f0 49 4e 44 45 58 5f 4c 4f 4f 50 20 20 20 20 20 20  INDEX_LOOP      
2d200 20 20 30 78 30 30 30 34 20 20 2f 2a 20 49 4e 20    0x0004  /* IN 
2d210 6f 70 65 72 61 74 6f 72 20 75 73 65 64 20 61 73  operator used as
2d220 20 61 20 6c 6f 6f 70 20 2a 2f 0a 69 6e 74 20 73   a loop */.int s
2d230 71 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65  qlite3FindInInde
2d240 78 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20  x(Parse *, Expr 
2d250 2a 2c 20 75 33 32 2c 20 69 6e 74 2a 2c 20 69 6e  *, u32, int*, in
2d260 74 2a 29 3b 0a 0a 69 6e 74 20 73 71 6c 69 74 65  t*);..int sqlite
2d270 33 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c  3JournalOpen(sql
2d280 69 74 65 33 5f 76 66 73 20 2a 2c 20 63 6f 6e 73  ite3_vfs *, cons
2d290 74 20 63 68 61 72 20 2a 2c 20 73 71 6c 69 74 65  t char *, sqlite
2d2a0 33 5f 66 69 6c 65 20 2a 2c 20 69 6e 74 2c 20 69  3_file *, int, i
2d2b0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
2d2c0 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 73 71 6c 69  JournalSize(sqli
2d2d0 74 65 33 5f 76 66 73 20 2a 29 3b 0a 23 69 66 20  te3_vfs *);.#if 
2d2e0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
2d2f0 4e 41 42 4c 45 5f 41 54 4f 4d 49 43 5f 57 52 49  NABLE_ATOMIC_WRI
2d300 54 45 29 20 5c 0a 20 7c 7c 20 64 65 66 69 6e 65  TE) \. || define
2d310 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
2d320 42 41 54 43 48 5f 41 54 4f 4d 49 43 5f 57 52 49  BATCH_ATOMIC_WRI
2d330 54 45 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  TE).  int sqlite
2d340 33 4a 6f 75 72 6e 61 6c 43 72 65 61 74 65 28 73  3JournalCreate(s
2d350 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a  qlite3_file *);.
2d360 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69  #endif..int sqli
2d370 74 65 33 4a 6f 75 72 6e 61 6c 49 73 49 6e 4d 65  te3JournalIsInMe
2d380 6d 6f 72 79 28 73 71 6c 69 74 65 33 5f 66 69 6c  mory(sqlite3_fil
2d390 65 20 2a 70 29 3b 0a 76 6f 69 64 20 73 71 6c 69  e *p);.void sqli
2d3a0 74 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c 4f 70 65  te3MemJournalOpe
2d3b0 6e 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a  n(sqlite3_file *
2d3c0 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  );..void sqlite3
2d3d0 45 78 70 72 53 65 74 48 65 69 67 68 74 41 6e 64  ExprSetHeightAnd
2d3e0 46 6c 61 67 73 28 50 61 72 73 65 20 2a 70 50 61  Flags(Parse *pPa
2d3f0 72 73 65 2c 20 45 78 70 72 20 2a 70 29 3b 0a 23  rse, Expr *p);.#
2d400 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58  if SQLITE_MAX_EX
2d410 50 52 5f 44 45 50 54 48 3e 30 0a 20 20 69 6e 74  PR_DEPTH>0.  int
2d420 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78   sqlite3SelectEx
2d430 70 72 48 65 69 67 68 74 28 53 65 6c 65 63 74 20  prHeight(Select 
2d440 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  *);.  int sqlite
2d450 33 45 78 70 72 43 68 65 63 6b 48 65 69 67 68 74  3ExprCheckHeight
2d460 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23  (Parse*, int);.#
2d470 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
2d480 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 72  qlite3SelectExpr
2d490 48 65 69 67 68 74 28 78 29 20 30 0a 20 20 23 64  Height(x) 0.  #d
2d4a0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70  efine sqlite3Exp
2d4b0 72 43 68 65 63 6b 48 65 69 67 68 74 28 78 2c 79  rCheckHeight(x,y
2d4c0 29 0a 23 65 6e 64 69 66 0a 0a 75 33 32 20 73 71  ).#endif..u32 sq
2d4d0 6c 69 74 65 33 47 65 74 34 62 79 74 65 28 63 6f  lite3Get4byte(co
2d4e0 6e 73 74 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73  nst u8*);.void s
2d4f0 71 6c 69 74 65 33 50 75 74 34 62 79 74 65 28 75  qlite3Put4byte(u
2d500 38 2a 2c 20 75 33 32 29 3b 0a 0a 23 69 66 64 65  8*, u32);..#ifde
2d510 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
2d520 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20  UNLOCK_NOTIFY.  
2d530 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e  void sqlite3Conn
2d540 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 73 71  ectionBlocked(sq
2d550 6c 69 74 65 33 20 2a 2c 20 73 71 6c 69 74 65 33  lite3 *, sqlite3
2d560 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69   *);.  void sqli
2d570 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c  te3ConnectionUnl
2d580 6f 63 6b 65 64 28 73 71 6c 69 74 65 33 20 2a 64  ocked(sqlite3 *d
2d590 62 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  b);.  void sqlit
2d5a0 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73  e3ConnectionClos
2d5b0 65 64 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b  ed(sqlite3 *db);
2d5c0 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
2d5d0 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69   sqlite3Connecti
2d5e0 6f 6e 42 6c 6f 63 6b 65 64 28 78 2c 79 29 0a 20  onBlocked(x,y). 
2d5f0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
2d600 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b  ConnectionUnlock
2d610 65 64 28 78 29 0a 20 20 23 64 65 66 69 6e 65 20  ed(x).  #define 
2d620 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f  sqlite3Connectio
2d630 6e 43 6c 6f 73 65 64 28 78 29 0a 23 65 6e 64 69  nClosed(x).#endi
2d640 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
2d650 5f 44 45 42 55 47 0a 20 20 76 6f 69 64 20 73 71  _DEBUG.  void sq
2d660 6c 69 74 65 33 50 61 72 73 65 72 54 72 61 63 65  lite3ParserTrace
2d670 28 46 49 4c 45 2a 2c 20 63 68 61 72 20 2a 29 3b  (FILE*, char *);
2d680 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49  .#endif../*.** I
2d690 66 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e 41  f the SQLITE_ENA
2d6a0 42 4c 45 20 49 4f 54 52 41 43 45 20 65 78 69 73  BLE IOTRACE exis
2d6b0 74 73 20 74 68 65 6e 20 74 68 65 20 67 6c 6f 62  ts then the glob
2d6c0 61 6c 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 73  al variable.** s
2d6d0 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 69 73  qlite3IoTrace is
2d6e0 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
2d6f0 70 72 69 6e 74 66 2d 6c 69 6b 65 20 72 6f 75 74  printf-like rout
2d700 69 6e 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 70  ine used to.** p
2d710 72 69 6e 74 20 49 2f 4f 20 74 72 61 63 69 6e 67  rint I/O tracing
2d720 20 6d 65 73 73 61 67 65 73 2e 0a 2a 2f 0a 23 69   messages..*/.#i
2d730 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
2d740 4c 45 5f 49 4f 54 52 41 43 45 0a 23 20 64 65 66  LE_IOTRACE.# def
2d750 69 6e 65 20 49 4f 54 52 41 43 45 28 41 29 20 20  ine IOTRACE(A)  
2d760 69 66 28 20 73 71 6c 69 74 65 33 49 6f 54 72 61  if( sqlite3IoTra
2d770 63 65 20 29 7b 20 73 71 6c 69 74 65 33 49 6f 54  ce ){ sqlite3IoT
2d780 72 61 63 65 20 41 3b 20 7d 0a 20 20 76 6f 69 64  race A; }.  void
2d790 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72   sqlite3VdbeIOTr
2d7a0 61 63 65 53 71 6c 28 56 64 62 65 2a 29 3b 0a 53  aceSql(Vdbe*);.S
2d7b0 51 4c 49 54 45 5f 41 50 49 20 53 51 4c 49 54 45  QLITE_API SQLITE
2d7c0 5f 45 58 54 45 52 4e 20 76 6f 69 64 20 28 53 51  _EXTERN void (SQ
2d7d0 4c 49 54 45 5f 43 44 45 43 4c 20 2a 73 71 6c 69  LITE_CDECL *sqli
2d7e0 74 65 33 49 6f 54 72 61 63 65 29 28 63 6f 6e 73  te3IoTrace)(cons
2d7f0 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23 65  t char*,...);.#e
2d800 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 49 4f 54  lse.# define IOT
2d810 52 41 43 45 28 41 29 0a 23 20 64 65 66 69 6e 65  RACE(A).# define
2d820 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72   sqlite3VdbeIOTr
2d830 61 63 65 53 71 6c 28 58 29 0a 23 65 6e 64 69 66  aceSql(X).#endif
2d840 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 72 6f  ../*.** These ro
2d850 75 74 69 6e 65 73 20 61 72 65 20 61 76 61 69 6c  utines are avail
2d860 61 62 6c 65 20 66 6f 72 20 74 68 65 20 6d 65 6d  able for the mem
2d870 32 2e 63 20 64 65 62 75 67 67 69 6e 67 20 6d 65  2.c debugging me
2d880 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72 0a 2a  mory allocator.*
2d890 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 79 20 61 72  * only.  They ar
2d8a0 65 20 75 73 65 64 20 74 6f 20 76 65 72 69 66 79  e used to verify
2d8b0 20 74 68 61 74 20 64 69 66 66 65 72 65 6e 74 20   that different 
2d8c0 22 74 79 70 65 73 22 20 6f 66 20 6d 65 6d 6f 72  "types" of memor
2d8d0 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  y.** allocations
2d8e0 20 61 72 65 20 70 72 6f 70 65 72 6c 79 20 74 72   are properly tr
2d8f0 61 63 6b 65 64 20 62 79 20 74 68 65 20 73 79 73  acked by the sys
2d900 74 65 6d 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74  tem..**.** sqlit
2d910 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70  e3MemdebugSetTyp
2d920 65 28 29 20 73 65 74 73 20 74 68 65 20 22 74 79  e() sets the "ty
2d930 70 65 22 20 6f 66 20 61 6e 20 61 6c 6c 6f 63 61  pe" of an alloca
2d940 74 69 6f 6e 20 74 6f 20 6f 6e 65 20 6f 66 0a 2a  tion to one of.*
2d950 2a 20 74 68 65 20 4d 45 4d 54 59 50 45 5f 2a 20  * the MEMTYPE_* 
2d960 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 64 20 62  macros defined b
2d970 65 6c 6f 77 2e 20 20 54 68 65 20 74 79 70 65 20  elow.  The type 
2d980 6d 75 73 74 20 62 65 20 61 20 62 69 74 6d 61 73  must be a bitmas
2d990 6b 20 77 69 74 68 0a 2a 2a 20 61 20 73 69 6e 67  k with.** a sing
2d9a0 6c 65 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a  le bit set..**.*
2d9b0 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  * sqlite3Memdebu
2d9c0 67 48 61 73 54 79 70 65 28 29 20 72 65 74 75 72  gHasType() retur
2d9d0 6e 73 20 74 72 75 65 20 69 66 20 61 6e 79 20 6f  ns true if any o
2d9e0 66 20 74 68 65 20 62 69 74 73 20 69 6e 20 69 74  f the bits in it
2d9f0 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75  s second.** argu
2da00 6d 65 6e 74 20 6d 61 74 63 68 20 74 68 65 20 74  ment match the t
2da10 79 70 65 20 73 65 74 20 62 79 20 74 68 65 20 70  ype set by the p
2da20 72 65 76 69 6f 75 73 20 73 71 6c 69 74 65 33 4d  revious sqlite3M
2da30 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 29  emdebugSetType()
2da40 2e 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64  ..** sqlite3Memd
2da50 65 62 75 67 48 61 73 54 79 70 65 28 29 20 69 73  ebugHasType() is
2da60 20 69 6e 74 65 6e 64 65 64 20 66 6f 72 20 75 73   intended for us
2da70 65 20 69 6e 73 69 64 65 20 61 73 73 65 72 74 28  e inside assert(
2da80 29 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a  ) statements..**
2da90 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  .** sqlite3Memde
2daa0 62 75 67 4e 6f 54 79 70 65 28 29 20 72 65 74 75  bugNoType() retu
2dab0 72 6e 73 20 74 72 75 65 20 69 66 20 6e 6f 6e 65  rns true if none
2dac0 20 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e 20   of the bits in 
2dad0 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72  its second.** ar
2dae0 67 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68 65  gument match the
2daf0 20 74 79 70 65 20 73 65 74 20 62 79 20 74 68 65   type set by the
2db00 20 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74 65   previous sqlite
2db10 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65  3MemdebugSetType
2db20 28 29 2e 0a 2a 2a 0a 2a 2a 20 50 65 72 68 61 70  ()..**.** Perhap
2db30 73 20 74 68 65 20 6d 6f 73 74 20 69 6d 70 6f 72  s the most impor
2db40 74 61 6e 74 20 70 6f 69 6e 74 20 69 73 20 74 68  tant point is th
2db50 65 20 64 69 66 66 65 72 65 6e 63 65 20 62 65 74  e difference bet
2db60 77 65 65 6e 20 4d 45 4d 54 59 50 45 5f 48 45 41  ween MEMTYPE_HEA
2db70 50 0a 2a 2a 20 61 6e 64 20 4d 45 4d 54 59 50 45  P.** and MEMTYPE
2db80 5f 4c 4f 4f 4b 41 53 49 44 45 2e 20 20 49 66 20  _LOOKASIDE.  If 
2db90 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 73  an allocation is
2dba0 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49   MEMTYPE_LOOKASI
2dbb0 44 45 2c 20 74 68 61 74 20 6d 65 61 6e 73 0a 2a  DE, that means.*
2dbc0 2a 20 69 74 20 6d 69 67 68 74 20 68 61 76 65 20  * it might have 
2dbd0 62 65 65 6e 20 61 6c 6c 6f 63 61 74 65 64 20 62  been allocated b
2dbe0 79 20 6c 6f 6f 6b 61 73 69 64 65 2c 20 65 78 63  y lookaside, exc
2dbf0 65 70 74 20 74 68 65 20 61 6c 6c 6f 63 61 74 69  ept the allocati
2dc00 6f 6e 20 77 61 73 0a 2a 2a 20 74 6f 6f 20 6c 61  on was.** too la
2dc10 72 67 65 20 6f 72 20 6c 6f 6f 6b 61 73 69 64 65  rge or lookaside
2dc20 20 77 61 73 20 61 6c 72 65 61 64 79 20 66 75 6c   was already ful
2dc30 6c 2e 20 20 49 74 20 69 73 20 69 6d 70 6f 72 74  l.  It is import
2dc40 61 6e 74 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a  ant to verify.**
2dc50 20 74 68 61 74 20 61 6c 6c 6f 63 61 74 69 6f 6e   that allocation
2dc60 73 20 74 68 61 74 20 6d 69 67 68 74 20 68 61 76  s that might hav
2dc70 65 20 62 65 65 6e 20 73 61 74 69 73 66 69 65 64  e been satisfied
2dc80 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65 20 61 72   by lookaside ar
2dc90 65 20 6e 6f 74 0a 2a 2a 20 70 61 73 73 65 64 20  e not.** passed 
2dca0 62 61 63 6b 20 74 6f 20 6e 6f 6e 2d 6c 6f 6f 6b  back to non-look
2dcb0 61 73 69 64 65 20 66 72 65 65 28 29 20 72 6f 75  aside free() rou
2dcc0 74 69 6e 65 73 2e 20 20 41 73 73 65 72 74 73 20  tines.  Asserts 
2dcd0 73 75 63 68 20 61 73 20 74 68 65 0a 2a 2a 20 65  such as the.** e
2dce0 78 61 6d 70 6c 65 20 61 62 6f 76 65 20 61 72 65  xample above are
2dcf0 20 70 6c 61 63 65 64 20 6f 6e 20 74 68 65 20 6e   placed on the n
2dd00 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65  on-lookaside fre
2dd10 65 28 29 20 72 6f 75 74 69 6e 65 73 20 74 6f 20  e() routines to 
2dd20 76 65 72 69 66 79 0a 2a 2a 20 74 68 69 73 20 63  verify.** this c
2dd30 6f 6e 73 74 72 61 69 6e 74 2e 0a 2a 2a 0a 2a 2a  onstraint..**.**
2dd40 20 41 6c 6c 20 6f 66 20 74 68 69 73 20 69 73 20   All of this is 
2dd50 6e 6f 2d 6f 70 20 66 6f 72 20 61 20 70 72 6f 64  no-op for a prod
2dd60 75 63 74 69 6f 6e 20 62 75 69 6c 64 2e 20 20 49  uction build.  I
2dd70 74 20 6f 6e 6c 79 20 63 6f 6d 65 73 20 69 6e 74  t only comes int
2dd80 6f 0a 2a 2a 20 70 6c 61 79 20 77 68 65 6e 20 74  o.** play when t
2dd90 68 65 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42  he SQLITE_MEMDEB
2dda0 55 47 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  UG compile-time 
2ddb0 6f 70 74 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a  option is used..
2ddc0 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
2ddd0 5f 4d 45 4d 44 45 42 55 47 0a 20 20 76 6f 69 64  _MEMDEBUG.  void
2dde0 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
2ddf0 53 65 74 54 79 70 65 28 76 6f 69 64 2a 2c 75 38  SetType(void*,u8
2de00 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
2de10 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28  MemdebugHasType(
2de20 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74  void*,u8);.  int
2de30 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
2de40 4e 6f 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29  NoType(void*,u8)
2de50 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
2de60 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
2de70 53 65 74 54 79 70 65 28 58 2c 59 29 20 20 2f 2a  SetType(X,Y)  /*
2de80 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 20 64 65 66 69   no-op */.# defi
2de90 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ne sqlite3Memdeb
2dea0 75 67 48 61 73 54 79 70 65 28 58 2c 59 29 20 20  ugHasType(X,Y)  
2deb0 31 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  1.# define sqlit
2dec0 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65  e3MemdebugNoType
2ded0 28 58 2c 59 29 20 20 20 31 0a 23 65 6e 64 69 66  (X,Y)   1.#endif
2dee0 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45  .#define MEMTYPE
2def0 5f 48 45 41 50 20 20 20 20 20 20 20 30 78 30 31  _HEAP       0x01
2df00 20 20 2f 2a 20 47 65 6e 65 72 61 6c 20 68 65 61    /* General hea
2df10 70 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f  p allocations */
2df20 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45  .#define MEMTYPE
2df30 5f 4c 4f 4f 4b 41 53 49 44 45 20 20 30 78 30 32  _LOOKASIDE  0x02
2df40 20 20 2f 2a 20 48 65 61 70 20 74 68 61 74 20 6d    /* Heap that m
2df50 69 67 68 74 20 68 61 76 65 20 62 65 65 6e 20 6c  ight have been l
2df60 6f 6f 6b 61 73 69 64 65 20 2a 2f 0a 23 64 65 66  ookaside */.#def
2df70 69 6e 65 20 4d 45 4d 54 59 50 45 5f 50 43 41 43  ine MEMTYPE_PCAC
2df80 48 45 20 20 20 20 20 30 78 30 34 20 20 2f 2a 20  HE     0x04  /* 
2df90 50 61 67 65 20 63 61 63 68 65 20 61 6c 6c 6f 63  Page cache alloc
2dfa0 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  ations */../*.**
2dfb0 20 54 68 72 65 61 64 69 6e 67 20 69 6e 74 65 72   Threading inter
2dfc0 66 61 63 65 0a 2a 2f 0a 23 69 66 20 53 51 4c 49  face.*/.#if SQLI
2dfd0 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48  TE_MAX_WORKER_TH
2dfe0 52 45 41 44 53 3e 30 0a 69 6e 74 20 73 71 6c 69  READS>0.int sqli
2dff0 74 65 33 54 68 72 65 61 64 43 72 65 61 74 65 28  te3ThreadCreate(
2e000 53 51 4c 69 74 65 54 68 72 65 61 64 2a 2a 2c 76  SQLiteThread**,v
2e010 6f 69 64 2a 28 2a 29 28 76 6f 69 64 2a 29 2c 76  oid*(*)(void*),v
2e020 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  oid*);.int sqlit
2e030 65 33 54 68 72 65 61 64 4a 6f 69 6e 28 53 51 4c  e3ThreadJoin(SQL
2e040 69 74 65 54 68 72 65 61 64 2a 2c 20 76 6f 69 64  iteThread*, void
2e050 2a 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  **);.#endif..#if
2e060 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
2e070 45 4e 41 42 4c 45 5f 44 42 53 54 41 54 5f 56 54  ENABLE_DBSTAT_VT
2e080 41 42 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53  AB) || defined(S
2e090 51 4c 49 54 45 5f 54 45 53 54 29 0a 69 6e 74 20  QLITE_TEST).int 
2e0a0 73 71 6c 69 74 65 33 44 62 73 74 61 74 52 65 67  sqlite3DbstatReg
2e0b0 69 73 74 65 72 28 73 71 6c 69 74 65 33 2a 29 3b  ister(sqlite3*);
2e0c0 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c  .#endif..int sql
2e0d0 69 74 65 33 45 78 70 72 56 65 63 74 6f 72 53 69  ite3ExprVectorSi
2e0e0 7a 65 28 45 78 70 72 20 2a 70 45 78 70 72 29 3b  ze(Expr *pExpr);
2e0f0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
2e100 49 73 56 65 63 74 6f 72 28 45 78 70 72 20 2a 70  IsVector(Expr *p
2e110 45 78 70 72 29 3b 0a 45 78 70 72 20 2a 73 71 6c  Expr);.Expr *sql
2e120 69 74 65 33 56 65 63 74 6f 72 46 69 65 6c 64 53  ite3VectorFieldS
2e130 75 62 65 78 70 72 28 45 78 70 72 2a 2c 20 69 6e  ubexpr(Expr*, in
2e140 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  t);.Expr *sqlite
2e150 33 45 78 70 72 46 6f 72 56 65 63 74 6f 72 46 69  3ExprForVectorFi
2e160 65 6c 64 28 50 61 72 73 65 2a 2c 45 78 70 72 2a  eld(Parse*,Expr*
2e170 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
2e180 74 65 33 56 65 63 74 6f 72 45 72 72 6f 72 4d 73  te3VectorErrorMs
2e190 67 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29  g(Parse*, Expr*)
2e1a0 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ;..#ifndef SQLIT
2e1b0 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f 50  E_OMIT_COMPILEOP
2e1c0 54 49 4f 4e 5f 44 49 41 47 53 0a 63 6f 6e 73 74  TION_DIAGS.const
2e1d0 20 63 68 61 72 20 2a 2a 73 71 6c 69 74 65 33 43   char **sqlite3C
2e1e0 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 28 69 6e  ompileOptions(in
2e1f0 74 20 2a 70 6e 4f 70 74 29 3b 0a 23 65 6e 64 69  t *pnOpt);.#endi
2e200 66 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  f..#endif /* SQL
2e210 49 54 45 49 4e 54 5f 48 20 2a 2f 0a              ITEINT_H */.