/ Hex Artifact Content
Login

Artifact ce6d2c08df3216a69d3f7fb740e8ddb7ef94169277776778e7cfce05ab245d10:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 53 51 4c 49 54 45 49 4e 54 5f 48 0a 23  ef SQLITEINT_H.#
01c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 49 4e 54  define SQLITEINT
01d0: 5f 48 0a 0a 2f 2a 20 53 70 65 63 69 61 6c 20 43  _H../* Special C
01e0: 6f 6d 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 53  omments:.**.** S
01f0: 6f 6d 65 20 63 6f 6d 6d 65 6e 74 73 20 68 61 76  ome comments hav
0200: 65 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e  e special meanin
0210: 67 20 74 6f 20 74 68 65 20 74 6f 6f 6c 73 20 74  g to the tools t
0220: 68 61 74 20 6d 65 61 73 75 72 65 20 74 65 73 74  hat measure test
0230: 0a 2a 2a 20 63 6f 76 65 72 61 67 65 3a 0a 2a 2a  .** coverage:.**
0240: 0a 2a 2a 20 20 20 20 4e 4f 5f 54 45 53 54 20 20  .**    NO_TEST  
0250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0260: 20 20 20 2d 20 54 68 65 20 62 72 61 6e 63 68 65     - The branche
0270: 73 20 6f 6e 20 74 68 69 73 20 6c 69 6e 65 20 61  s on this line a
0280: 72 65 20 6e 6f 74 0a 2a 2a 20 20 20 20 20 20 20  re not.**       
0290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02a0: 20 20 20 20 20 20 20 20 20 20 20 6d 65 61 73 75             measu
02b0: 72 65 64 20 62 79 20 62 72 61 6e 63 68 20 63 6f  red by branch co
02c0: 76 65 72 61 67 65 2e 20 20 54 68 69 73 20 69 73  verage.  This is
02d0: 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
02e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02f0: 20 20 20 20 20 75 73 65 64 20 6f 6e 20 6c 69 6e       used on lin
0300: 65 73 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20  es of code that 
0310: 61 63 74 75 61 6c 6c 79 0a 2a 2a 20 20 20 20 20  actually.**     
0320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0330: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6d 70               imp
0340: 6c 65 6d 65 6e 74 20 70 61 72 74 73 20 6f 66 20  lement parts of 
0350: 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e 67  coverage testing
0360: 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d  ..**.**    OPTIM
0370: 49 5a 41 54 49 4f 4e 2d 49 46 2d 54 52 55 45 20  IZATION-IF-TRUE 
0380: 20 20 20 20 20 20 20 2d 20 54 68 69 73 20 62 72         - This br
0390: 61 6e 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20  anch is allowed 
03a0: 74 6f 20 61 6c 77 61 79 20 62 65 20 66 61 6c 73  to alway be fals
03b0: 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
03c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
03d0: 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 63 6f        and the co
03e0: 72 72 65 63 74 20 61 6e 73 77 65 72 20 69 73 20  rrect answer is 
03f0: 73 74 69 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a  still obtained,.
0400: 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
0410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0420: 20 20 20 20 74 68 6f 75 67 68 20 70 65 72 68 61      though perha
0430: 70 73 20 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a  ps more slowly..
0440: 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d 49 5a  **.**    OPTIMIZ
0450: 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 20 20  ATION-IF-FALSE  
0460: 20 20 20 20 20 2d 20 54 68 69 73 20 62 72 61 6e       - This bran
0470: 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f  ch is allowed to
0480: 20 61 6c 77 61 79 20 62 65 20 74 72 75 65 0a 2a   alway be true.*
0490: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
04a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04b0: 20 20 20 61 6e 64 20 74 68 65 20 63 6f 72 72 65     and the corre
04c0: 63 74 20 61 6e 73 77 65 72 20 69 73 20 73 74 69  ct answer is sti
04d0: 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a 2a 2a 20  ll obtained,.** 
04e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0500: 20 74 68 6f 75 67 68 20 70 65 72 68 61 70 73 20   though perhaps 
0510: 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a 2a 2a 0a  more slowly..**.
0520: 2a 2a 20 20 20 20 50 52 45 56 45 4e 54 53 2d 48  **    PREVENTS-H
0530: 41 52 4d 4c 45 53 53 2d 4f 56 45 52 52 45 41 44  ARMLESS-OVERREAD
0540: 20 20 2d 20 54 68 69 73 20 62 72 61 6e 63 68 20    - This branch 
0550: 70 72 65 76 65 6e 74 73 20 61 20 62 75 66 66 65  prevents a buffe
0560: 72 20 6f 76 65 72 72 65 61 64 0a 2a 2a 20 20 20  r overread.**   
0570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
0590: 68 61 74 20 77 6f 75 6c 64 20 62 65 20 68 61 72  hat would be har
05a0: 6d 6c 65 73 73 20 61 6e 64 20 75 6e 64 65 74 65  mless and undete
05b0: 63 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20  ctable.**       
05c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
05d0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 69 74             if it
05e0: 20 64 69 64 20 6f 63 63 75 72 2e 20 20 0a 2a 2a   did occur.  .**
05f0: 0a 2a 2a 20 49 6e 20 61 6c 6c 20 63 61 73 65 73  .** In all cases
0600: 2c 20 74 68 65 20 73 70 65 63 69 61 6c 20 63 6f  , the special co
0610: 6d 6d 65 6e 74 20 6d 75 73 74 20 62 65 20 65 6e  mment must be en
0620: 63 6c 6f 73 65 64 20 69 6e 20 74 68 65 20 75 73  closed in the us
0630: 75 61 6c 0a 2a 2a 20 73 6c 61 73 68 2d 61 73 74  ual.** slash-ast
0640: 65 72 69 73 6b 2e 2e 2e 61 73 74 65 72 69 73 6b  erisk...asterisk
0650: 2d 73 6c 61 73 68 20 63 6f 6d 6d 65 6e 74 20 6d  -slash comment m
0660: 61 72 6b 73 2c 20 77 69 74 68 20 6e 6f 20 73 70  arks, with no sp
0670: 61 63 65 73 20 62 65 74 77 65 65 6e 20 74 68 65  aces between the
0680: 20 0a 2a 2a 20 61 73 74 65 72 69 73 6b 73 20 61   .** asterisks a
0690: 6e 64 20 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74  nd the comment t
06a0: 65 78 74 2e 0a 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d  ext..*/../*.** M
06b0: 61 6b 65 20 73 75 72 65 20 74 68 65 20 54 63 6c  ake sure the Tcl
06c0: 20 63 61 6c 6c 69 6e 67 20 63 6f 6e 76 65 6e 74   calling convent
06d0: 69 6f 6e 20 6d 61 63 72 6f 20 69 73 20 64 65 66  ion macro is def
06e0: 69 6e 65 64 2e 20 20 54 68 69 73 20 6d 61 63 72  ined.  This macr
06f0: 6f 20 69 73 0a 2a 2a 20 6f 6e 6c 79 20 75 73 65  o is.** only use
0700: 64 20 62 79 20 74 65 73 74 20 63 6f 64 65 20 61  d by test code a
0710: 6e 64 20 54 63 6c 20 69 6e 74 65 67 72 61 74 69  nd Tcl integrati
0720: 6f 6e 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 6e  on code..*/.#ifn
0730: 64 65 66 20 53 51 4c 49 54 45 5f 54 43 4c 41 50  def SQLITE_TCLAP
0740: 49 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49  I.#  define SQLI
0750: 54 45 5f 54 43 4c 41 50 49 0a 23 65 6e 64 69 66  TE_TCLAPI.#endif
0760: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c 75 64 65 20  ../*.** Include 
0770: 74 68 65 20 68 65 61 64 65 72 20 66 69 6c 65 20  the header file 
0780: 75 73 65 64 20 74 6f 20 63 75 73 74 6f 6d 69 7a  used to customiz
0790: 65 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 6f  e the compiler o
07a0: 70 74 69 6f 6e 73 20 66 6f 72 20 4d 53 56 43 2e  ptions for MSVC.
07b0: 0a 2a 2a 20 54 68 69 73 20 73 68 6f 75 6c 64 20  .** This should 
07c0: 62 65 20 64 6f 6e 65 20 66 69 72 73 74 20 73 6f  be done first so
07d0: 20 74 68 61 74 20 69 74 20 63 61 6e 20 73 75 63   that it can suc
07e0: 63 65 73 73 66 75 6c 6c 79 20 70 72 65 76 65 6e  cessfully preven
07f0: 74 20 73 70 75 72 69 6f 75 73 0a 2a 2a 20 63 6f  t spurious.** co
0800: 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 73 20  mpiler warnings 
0810: 64 75 65 20 74 6f 20 73 75 62 73 65 71 75 65 6e  due to subsequen
0820: 74 20 63 6f 6e 74 65 6e 74 20 69 6e 20 74 68 69  t content in thi
0830: 73 20 66 69 6c 65 20 61 6e 64 20 6f 74 68 65 72  s file and other
0840: 20 66 69 6c 65 73 0a 2a 2a 20 74 68 61 74 20 61   files.** that a
0850: 72 65 20 69 6e 63 6c 75 64 65 64 20 62 79 20 74  re included by t
0860: 68 69 73 20 66 69 6c 65 2e 0a 2a 2f 0a 23 69 6e  his file..*/.#in
0870: 63 6c 75 64 65 20 22 6d 73 76 63 2e 68 22 0a 0a  clude "msvc.h"..
0880: 2f 2a 0a 2a 2a 20 53 70 65 63 69 61 6c 20 73 65  /*.** Special se
0890: 74 75 70 20 66 6f 72 20 56 78 57 6f 72 6b 73 0a  tup for VxWorks.
08a0: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 76 78 77  */.#include "vxw
08b0: 6f 72 6b 73 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 54  orks.h"../*.** T
08c0: 68 65 73 65 20 23 64 65 66 69 6e 65 73 20 73 68  hese #defines sh
08d0: 6f 75 6c 64 20 65 6e 61 62 6c 65 20 3e 32 47 42  ould enable >2GB
08e0: 20 66 69 6c 65 20 73 75 70 70 6f 72 74 20 6f 6e   file support on
08f0: 20 50 4f 53 49 58 20 69 66 20 74 68 65 0a 2a 2a   POSIX if the.**
0900: 20 75 6e 64 65 72 6c 79 69 6e 67 20 6f 70 65 72   underlying oper
0910: 61 74 69 6e 67 20 73 79 73 74 65 6d 20 73 75 70  ating system sup
0920: 70 6f 72 74 73 20 69 74 2e 20 20 49 66 20 74 68  ports it.  If th
0930: 65 20 4f 53 20 6c 61 63 6b 73 0a 2a 2a 20 6c 61  e OS lacks.** la
0940: 72 67 65 20 66 69 6c 65 20 73 75 70 70 6f 72 74  rge file support
0950: 2c 20 6f 72 20 69 66 20 74 68 65 20 4f 53 20 69  , or if the OS i
0960: 73 20 77 69 6e 64 6f 77 73 2c 20 74 68 65 73 65  s windows, these
0970: 20 73 68 6f 75 6c 64 20 62 65 20 6e 6f 2d 6f 70   should be no-op
0980: 73 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20  s..**.** Ticket 
0990: 23 32 37 33 39 3a 20 20 54 68 65 20 5f 4c 41 52  #2739:  The _LAR
09a0: 47 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 6d 61  GEFILE_SOURCE ma
09b0: 63 72 6f 20 6d 75 73 74 20 61 70 70 65 61 72 20  cro must appear 
09c0: 62 65 66 6f 72 65 20 61 6e 79 0a 2a 2a 20 73 79  before any.** sy
09d0: 73 74 65 6d 20 23 69 6e 63 6c 75 64 65 73 2e 20  stem #includes. 
09e0: 20 48 65 6e 63 65 2c 20 74 68 69 73 20 62 6c 6f   Hence, this blo
09f0: 63 6b 20 6f 66 20 63 6f 64 65 20 6d 75 73 74 20  ck of code must 
0a00: 62 65 20 74 68 65 20 76 65 72 79 20 66 69 72 73  be the very firs
0a10: 74 0a 2a 2a 20 63 6f 64 65 20 69 6e 20 61 6c 6c  t.** code in all
0a20: 20 73 6f 75 72 63 65 20 66 69 6c 65 73 2e 0a 2a   source files..*
0a30: 2a 0a 2a 2a 20 4c 61 72 67 65 20 66 69 6c 65 20  *.** Large file 
0a40: 73 75 70 70 6f 72 74 20 63 61 6e 20 62 65 20 64  support can be d
0a50: 69 73 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68  isabled using th
0a60: 65 20 2d 44 53 51 4c 49 54 45 5f 44 49 53 41 42  e -DSQLITE_DISAB
0a70: 4c 45 5f 4c 46 53 20 73 77 69 74 63 68 0a 2a 2a  LE_LFS switch.**
0a80: 20 6f 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 72   on the compiler
0a90: 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2e 20 20   command line.  
0aa0: 54 68 69 73 20 69 73 20 6e 65 63 65 73 73 61 72  This is necessar
0ab0: 79 20 69 66 20 79 6f 75 20 61 72 65 20 63 6f 6d  y if you are com
0ac0: 70 69 6c 69 6e 67 0a 2a 2a 20 6f 6e 20 61 20 72  piling.** on a r
0ad0: 65 63 65 6e 74 20 6d 61 63 68 69 6e 65 20 28 65  ecent machine (e
0ae0: 78 3a 20 52 65 64 20 48 61 74 20 37 2e 32 29 20  x: Red Hat 7.2) 
0af0: 62 75 74 20 79 6f 75 20 77 61 6e 74 20 79 6f 75  but you want you
0b00: 72 20 63 6f 64 65 20 74 6f 20 77 6f 72 6b 0a 2a  r code to work.*
0b10: 2a 20 6f 6e 20 61 6e 20 6f 6c 64 65 72 20 6d 61  * on an older ma
0b20: 63 68 69 6e 65 20 28 65 78 3a 20 52 65 64 20 48  chine (ex: Red H
0b30: 61 74 20 36 2e 30 29 2e 20 20 49 66 20 79 6f 75  at 6.0).  If you
0b40: 20 63 6f 6d 70 69 6c 65 20 6f 6e 20 52 65 64 20   compile on Red 
0b50: 48 61 74 20 37 2e 32 0a 2a 2a 20 77 69 74 68 6f  Hat 7.2.** witho
0b60: 75 74 20 74 68 69 73 20 6f 70 74 69 6f 6e 2c 20  ut this option, 
0b70: 4c 46 53 20 69 73 20 65 6e 61 62 6c 65 2e 20 20  LFS is enable.  
0b80: 42 75 74 20 4c 46 53 20 64 6f 65 73 20 6e 6f 74  But LFS does not
0b90: 20 65 78 69 73 74 20 69 6e 20 74 68 65 20 6b 65   exist in the ke
0ba0: 72 6e 65 6c 0a 2a 2a 20 69 6e 20 52 65 64 20 48  rnel.** in Red H
0bb0: 61 74 20 36 2e 30 2c 20 73 6f 20 74 68 65 20 63  at 6.0, so the c
0bc0: 6f 64 65 20 77 6f 6e 27 74 20 77 6f 72 6b 2e 20  ode won't work. 
0bd0: 20 48 65 6e 63 65 2c 20 66 6f 72 20 6d 61 78 69   Hence, for maxi
0be0: 6d 75 6d 20 62 69 6e 61 72 79 0a 2a 2a 20 70 6f  mum binary.** po
0bf0: 72 74 61 62 69 6c 69 74 79 20 79 6f 75 20 73 68  rtability you sh
0c00: 6f 75 6c 64 20 6f 6d 69 74 20 4c 46 53 2e 0a 2a  ould omit LFS..*
0c10: 2a 0a 2a 2a 20 54 68 65 20 70 72 65 76 69 6f 75  *.** The previou
0c20: 73 20 70 61 72 61 67 72 61 70 68 20 77 61 73 20  s paragraph was 
0c30: 77 72 69 74 74 65 6e 20 69 6e 20 32 30 30 35 2e  written in 2005.
0c40: 20 20 28 54 68 69 73 20 70 61 72 61 67 72 61 70    (This paragrap
0c50: 68 20 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20  h is written.** 
0c60: 6f 6e 20 32 30 30 38 2d 31 31 2d 32 38 2e 29 20  on 2008-11-28.) 
0c70: 54 68 65 73 65 20 64 61 79 73 2c 20 61 6c 6c 20  These days, all 
0c80: 4c 69 6e 75 78 20 6b 65 72 6e 65 6c 73 20 73 75  Linux kernels su
0c90: 70 70 6f 72 74 20 6c 61 72 67 65 20 66 69 6c 65  pport large file
0ca0: 73 2c 20 73 6f 0a 2a 2a 20 79 6f 75 20 73 68 6f  s, so.** you sho
0cb0: 75 6c 64 20 70 72 6f 62 61 62 6c 79 20 6c 65 61  uld probably lea
0cc0: 76 65 20 4c 46 53 20 65 6e 61 62 6c 65 64 2e 20  ve LFS enabled. 
0cd0: 20 42 75 74 20 73 6f 6d 65 20 65 6d 62 65 64 64   But some embedd
0ce0: 65 64 20 70 6c 61 74 66 6f 72 6d 73 20 6d 69 67  ed platforms mig
0cf0: 68 74 0a 2a 2a 20 6c 61 63 6b 20 4c 46 53 20 69  ht.** lack LFS i
0d00: 6e 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65  n which case the
0d10: 20 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f   SQLITE_DISABLE_
0d20: 4c 46 53 20 6d 61 63 72 6f 20 6d 69 67 68 74 20  LFS macro might 
0d30: 73 74 69 6c 6c 20 62 65 20 75 73 65 66 75 6c 2e  still be useful.
0d40: 0a 2a 2a 0a 2a 2a 20 53 69 6d 69 6c 61 72 20 69  .**.** Similar i
0d50: 73 20 74 72 75 65 20 66 6f 72 20 4d 61 63 20 4f  s true for Mac O
0d60: 53 20 58 2e 20 20 4c 46 53 20 69 73 20 6f 6e 6c  S X.  LFS is onl
0d70: 79 20 73 75 70 70 6f 72 74 65 64 20 6f 6e 20 4d  y supported on M
0d80: 61 63 20 4f 53 20 58 20 39 20 61 6e 64 20 6c 61  ac OS X 9 and la
0d90: 74 65 72 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ter..*/.#ifndef 
0da0: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c  SQLITE_DISABLE_L
0db0: 46 53 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52  FS.# define _LAR
0dc0: 47 45 5f 46 49 4c 45 20 20 20 20 20 20 20 31 0a  GE_FILE       1.
0dd0: 23 20 69 66 6e 64 65 66 20 5f 46 49 4c 45 5f 4f  # ifndef _FILE_O
0de0: 46 46 53 45 54 5f 42 49 54 53 0a 23 20 20 20 64  FFSET_BITS.#   d
0df0: 65 66 69 6e 65 20 5f 46 49 4c 45 5f 4f 46 46 53  efine _FILE_OFFS
0e00: 45 54 5f 42 49 54 53 20 36 34 0a 23 20 65 6e 64  ET_BITS 64.# end
0e10: 69 66 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52  if.# define _LAR
0e20: 47 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 31 0a  GEFILE_SOURCE 1.
0e30: 23 65 6e 64 69 66 0a 0a 2f 2a 20 54 68 65 20 47  #endif../* The G
0e40: 43 43 5f 56 45 52 53 49 4f 4e 20 61 6e 64 20 4d  CC_VERSION and M
0e50: 53 56 43 5f 56 45 52 53 49 4f 4e 20 6d 61 63 72  SVC_VERSION macr
0e60: 6f 73 20 61 72 65 20 75 73 65 64 20 74 6f 0a 2a  os are used to.*
0e70: 2a 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 6c 79 20  * conditionally 
0e80: 69 6e 63 6c 75 64 65 20 6f 70 74 69 6d 69 7a 61  include optimiza
0e90: 74 69 6f 6e 73 20 66 6f 72 20 65 61 63 68 20 6f  tions for each o
0ea0: 66 20 74 68 65 73 65 20 63 6f 6d 70 69 6c 65 72  f these compiler
0eb0: 73 2e 20 20 41 0a 2a 2a 20 76 61 6c 75 65 20 6f  s.  A.** value o
0ec0: 66 20 30 20 6d 65 61 6e 73 20 74 68 61 74 20 63  f 0 means that c
0ed0: 6f 6d 70 69 6c 65 72 20 69 73 20 6e 6f 74 20 62  ompiler is not b
0ee0: 65 69 6e 67 20 75 73 65 64 2e 20 20 54 68 65 0a  eing used.  The.
0ef0: 2a 2a 20 53 51 4c 49 54 45 5f 44 49 53 41 42 4c  ** SQLITE_DISABL
0f00: 45 5f 49 4e 54 52 49 4e 53 49 43 20 6d 61 63 72  E_INTRINSIC macr
0f10: 6f 20 6d 65 61 6e 73 20 64 6f 20 6e 6f 74 20 75  o means do not u
0f20: 73 65 20 61 6e 79 20 63 6f 6d 70 69 6c 65 72 2d  se any compiler-
0f30: 73 70 65 63 69 66 69 63 0a 2a 2a 20 6f 70 74 69  specific.** opti
0f40: 6d 69 7a 61 74 69 6f 6e 73 2c 20 61 6e 64 20 68  mizations, and h
0f50: 65 6e 63 65 20 73 65 74 20 61 6c 6c 20 63 6f 6d  ence set all com
0f60: 70 69 6c 65 72 20 6d 61 63 72 6f 73 20 74 6f 20  piler macros to 
0f70: 30 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 77 61  0.**.** There wa
0f80: 73 20 6f 6e 63 65 20 61 6c 73 6f 20 61 20 43 4c  s once also a CL
0f90: 41 4e 47 5f 56 45 52 53 49 4f 4e 20 6d 61 63 72  ANG_VERSION macr
0fa0: 6f 2e 20 20 48 6f 77 65 76 65 72 2c 20 77 65 20  o.  However, we 
0fb0: 6c 65 61 72 6e 20 74 68 61 74 20 74 68 65 0a 2a  learn that the.*
0fc0: 2a 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72  * version number
0fd0: 73 20 69 6e 20 63 6c 61 6e 67 20 61 72 65 20 66  s in clang are f
0fe0: 6f 72 20 22 6d 61 72 6b 65 74 69 6e 67 22 20 6f  or "marketing" o
0ff0: 6e 6c 79 20 61 6e 64 20 61 72 65 20 69 6e 63 6f  nly and are inco
1000: 6e 73 69 73 74 65 6e 74 0a 2a 2a 20 61 6e 64 20  nsistent.** and 
1010: 75 6e 72 65 6c 69 61 62 6c 65 2e 20 20 46 6f 72  unreliable.  For
1020: 74 75 6e 61 74 65 6c 79 2c 20 61 6c 6c 20 76 65  tunately, all ve
1030: 72 73 69 6f 6e 73 20 6f 66 20 63 6c 61 6e 67 20  rsions of clang 
1040: 61 6c 73 6f 20 72 65 63 6f 67 6e 69 7a 65 20 74  also recognize t
1050: 68 65 0a 2a 2a 20 67 63 63 20 76 65 72 73 69 6f  he.** gcc versio
1060: 6e 20 6e 75 6d 62 65 72 73 20 61 6e 64 20 68 61  n numbers and ha
1070: 76 65 20 72 65 61 73 6f 6e 61 62 6c 65 20 73 65  ve reasonable se
1080: 74 74 69 6e 67 73 20 66 6f 72 20 67 63 63 20 76  ttings for gcc v
1090: 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 73 2c 0a  ersion numbers,.
10a0: 2a 2a 20 73 6f 20 74 68 65 20 47 43 43 5f 56 45  ** so the GCC_VE
10b0: 52 53 49 4f 4e 20 6d 61 63 72 6f 20 77 69 6c 6c  RSION macro will
10c0: 20 62 65 20 73 65 74 20 74 6f 20 61 20 63 6f 72   be set to a cor
10d0: 72 65 63 74 20 6e 6f 6e 2d 7a 65 72 6f 20 76 61  rect non-zero va
10e0: 6c 75 65 20 65 76 65 6e 0a 2a 2a 20 77 68 65 6e  lue even.** when
10f0: 20 63 6f 6d 70 69 6c 69 6e 67 20 77 69 74 68 20   compiling with 
1100: 63 6c 61 6e 67 2e 0a 2a 2f 0a 23 69 66 20 64 65  clang..*/.#if de
1110: 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20  fined(__GNUC__) 
1120: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
1130: 54 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52 49  TE_DISABLE_INTRI
1140: 4e 53 49 43 29 0a 23 20 64 65 66 69 6e 65 20 47  NSIC).# define G
1150: 43 43 5f 56 45 52 53 49 4f 4e 20 28 5f 5f 47 4e  CC_VERSION (__GN
1160: 55 43 5f 5f 2a 31 30 30 30 30 30 30 2b 5f 5f 47  UC__*1000000+__G
1170: 4e 55 43 5f 4d 49 4e 4f 52 5f 5f 2a 31 30 30 30  NUC_MINOR__*1000
1180: 2b 5f 5f 47 4e 55 43 5f 50 41 54 43 48 4c 45 56  +__GNUC_PATCHLEV
1190: 45 4c 5f 5f 29 0a 23 65 6c 73 65 0a 23 20 64 65  EL__).#else.# de
11a0: 66 69 6e 65 20 47 43 43 5f 56 45 52 53 49 4f 4e  fine GCC_VERSION
11b0: 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65   0.#endif.#if de
11c0: 66 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52 29 20  fined(_MSC_VER) 
11d0: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
11e0: 54 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52 49  TE_DISABLE_INTRI
11f0: 4e 53 49 43 29 0a 23 20 64 65 66 69 6e 65 20 4d  NSIC).# define M
1200: 53 56 43 5f 56 45 52 53 49 4f 4e 20 5f 4d 53 43  SVC_VERSION _MSC
1210: 5f 56 45 52 0a 23 65 6c 73 65 0a 23 20 64 65 66  _VER.#else.# def
1220: 69 6e 65 20 4d 53 56 43 5f 56 45 52 53 49 4f 4e  ine MSVC_VERSION
1230: 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4e 65   0.#endif../* Ne
1240: 65 64 65 64 20 66 6f 72 20 76 61 72 69 6f 75 73  eded for various
1250: 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e 2e 2e 20   definitions... 
1260: 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f  */.#if defined(_
1270: 5f 47 4e 55 43 5f 5f 29 20 26 26 20 21 64 65 66  _GNUC__) && !def
1280: 69 6e 65 64 28 5f 47 4e 55 5f 53 4f 55 52 43 45  ined(_GNU_SOURCE
1290: 29 0a 23 20 64 65 66 69 6e 65 20 5f 47 4e 55 5f  ).# define _GNU_
12a0: 53 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a 23  SOURCE.#endif..#
12b0: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 4f 70 65  if defined(__Ope
12c0: 6e 42 53 44 5f 5f 29 20 26 26 20 21 64 65 66 69  nBSD__) && !defi
12d0: 6e 65 64 28 5f 42 53 44 5f 53 4f 55 52 43 45 29  ned(_BSD_SOURCE)
12e0: 0a 23 20 64 65 66 69 6e 65 20 5f 42 53 44 5f 53  .# define _BSD_S
12f0: 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a  OURCE.#endif../*
1300: 0a 2a 2a 20 46 6f 72 20 4d 69 6e 47 57 2c 20 63  .** For MinGW, c
1310: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 77  heck to see if w
1320: 65 20 63 61 6e 20 69 6e 63 6c 75 64 65 20 74 68  e can include th
1330: 65 20 68 65 61 64 65 72 20 66 69 6c 65 20 63 6f  e header file co
1340: 6e 74 61 69 6e 69 6e 67 20 69 74 73 0a 2a 2a 20  ntaining its.** 
1350: 76 65 72 73 69 6f 6e 20 69 6e 66 6f 72 6d 61 74  version informat
1360: 69 6f 6e 2c 20 61 6d 6f 6e 67 20 6f 74 68 65 72  ion, among other
1370: 20 74 68 69 6e 67 73 2e 20 20 4e 6f 72 6d 61 6c   things.  Normal
1380: 6c 79 2c 20 74 68 69 73 20 69 6e 74 65 72 6e 61  ly, this interna
1390: 6c 20 4d 69 6e 47 57 0a 2a 2a 20 68 65 61 64 65  l MinGW.** heade
13a0: 72 20 66 69 6c 65 20 77 6f 75 6c 64 20 5b 6f 6e  r file would [on
13b0: 6c 79 5d 20 62 65 20 69 6e 63 6c 75 64 65 64 20  ly] be included 
13c0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 62 79  automatically by
13d0: 20 6f 74 68 65 72 20 4d 69 6e 47 57 20 68 65 61   other MinGW hea
13e0: 64 65 72 0a 2a 2a 20 66 69 6c 65 73 3b 20 68 6f  der.** files; ho
13f0: 77 65 76 65 72 2c 20 74 68 65 20 63 6f 6e 74 61  wever, the conta
1400: 69 6e 65 64 20 76 65 72 73 69 6f 6e 20 69 6e 66  ined version inf
1410: 6f 72 6d 61 74 69 6f 6e 20 69 73 20 6e 6f 77 20  ormation is now 
1420: 72 65 71 75 69 72 65 64 20 62 79 20 74 68 69 73  required by this
1430: 0a 2a 2a 20 68 65 61 64 65 72 20 66 69 6c 65 20  .** header file 
1440: 74 6f 20 77 6f 72 6b 20 61 72 6f 75 6e 64 20 62  to work around b
1450: 69 6e 61 72 79 20 63 6f 6d 70 61 74 69 62 69 6c  inary compatibil
1460: 69 74 79 20 69 73 73 75 65 73 20 28 73 65 65 20  ity issues (see 
1470: 62 65 6c 6f 77 29 20 61 6e 64 0a 2a 2a 20 74 68  below) and.** th
1480: 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 6b  is is the only k
1490: 6e 6f 77 6e 20 77 61 79 20 74 6f 20 72 65 6c 69  nown way to reli
14a0: 61 62 6c 79 20 6f 62 74 61 69 6e 20 69 74 2e 20  ably obtain it. 
14b0: 20 54 68 69 73 20 65 6e 74 69 72 65 20 23 69 66   This entire #if
14c0: 20 62 6c 6f 63 6b 0a 2a 2a 20 77 6f 75 6c 64 20   block.** would 
14d0: 62 65 20 63 6f 6d 70 6c 65 74 65 6c 79 20 75 6e  be completely un
14e0: 6e 65 63 65 73 73 61 72 79 20 69 66 20 74 68 65  necessary if the
14f0: 72 65 20 77 61 73 20 61 6e 79 20 6f 74 68 65 72  re was any other
1500: 20 77 61 79 20 6f 66 20 64 65 74 65 63 74 69 6e   way of detectin
1510: 67 0a 2a 2a 20 4d 69 6e 47 57 20 76 69 61 20 74  g.** MinGW via t
1520: 68 65 69 72 20 70 72 65 70 72 6f 63 65 73 73 6f  heir preprocesso
1530: 72 20 28 65 2e 67 2e 20 69 66 20 74 68 65 79 20  r (e.g. if they 
1540: 63 75 73 74 6f 6d 69 7a 65 64 20 74 68 65 69 72  customized their
1550: 20 47 43 43 20 74 6f 20 64 65 66 69 6e 65 0a 2a   GCC to define.*
1560: 2a 20 73 6f 6d 65 20 4d 69 6e 47 57 2d 73 70 65  * some MinGW-spe
1570: 63 69 66 69 63 20 6d 61 63 72 6f 73 29 2e 20 20  cific macros).  
1580: 57 68 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 66  When compiling f
1590: 6f 72 20 4d 69 6e 47 57 2c 20 65 69 74 68 65 72  or MinGW, either
15a0: 20 74 68 65 0a 2a 2a 20 5f 48 41 56 45 5f 4d 49   the.** _HAVE_MI
15b0: 4e 47 57 5f 48 20 6f 72 20 5f 48 41 56 45 5f 5f  NGW_H or _HAVE__
15c0: 4d 49 4e 47 57 5f 48 20 28 6e 6f 74 65 20 74 68  MINGW_H (note th
15d0: 65 20 65 78 74 72 61 20 75 6e 64 65 72 73 63 6f  e extra undersco
15e0: 72 65 29 20 6d 61 63 72 6f 20 6d 75 73 74 20 62  re) macro must b
15f0: 65 0a 2a 2a 20 64 65 66 69 6e 65 64 3b 20 6f 74  e.** defined; ot
1600: 68 65 72 77 69 73 65 2c 20 64 65 74 65 63 74 69  herwise, detecti
1610: 6f 6e 20 6f 66 20 63 6f 6e 64 69 74 69 6f 6e 73  on of conditions
1620: 20 73 70 65 63 69 66 69 63 20 74 6f 20 4d 69 6e   specific to Min
1630: 47 57 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 64 69  GW will be.** di
1640: 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66 20 64  sabled..*/.#if d
1650: 65 66 69 6e 65 64 28 5f 48 41 56 45 5f 4d 49 4e  efined(_HAVE_MIN
1660: 47 57 5f 48 29 0a 23 20 69 6e 63 6c 75 64 65 20  GW_H).# include 
1670: 22 6d 69 6e 67 77 2e 68 22 0a 23 65 6c 69 66 20  "mingw.h".#elif 
1680: 64 65 66 69 6e 65 64 28 5f 48 41 56 45 5f 5f 4d  defined(_HAVE__M
1690: 49 4e 47 57 5f 48 29 0a 23 20 69 6e 63 6c 75 64  INGW_H).# includ
16a0: 65 20 22 5f 6d 69 6e 67 77 2e 68 22 0a 23 65 6e  e "_mingw.h".#en
16b0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 4d  dif../*.** For M
16c0: 69 6e 47 57 20 76 65 72 73 69 6f 6e 20 34 2e 78  inGW version 4.x
16d0: 20 28 61 6e 64 20 68 69 67 68 65 72 29 2c 20 63   (and higher), c
16e0: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74  heck to see if t
16f0: 68 65 20 5f 55 53 45 5f 33 32 42 49 54 5f 54 49  he _USE_32BIT_TI
1700: 4d 45 5f 54 0a 2a 2a 20 64 65 66 69 6e 65 20 69  ME_T.** define i
1710: 73 20 72 65 71 75 69 72 65 64 20 74 6f 20 6d 61  s required to ma
1720: 69 6e 74 61 69 6e 20 62 69 6e 61 72 79 20 63 6f  intain binary co
1730: 6d 70 61 74 69 62 69 6c 69 74 79 20 77 69 74 68  mpatibility with
1740: 20 74 68 65 20 4d 53 56 43 20 72 75 6e 74 69 6d   the MSVC runtim
1750: 65 0a 2a 2a 20 6c 69 62 72 61 72 79 20 69 6e 20  e.** library in 
1760: 75 73 65 20 28 65 2e 67 2e 20 66 6f 72 20 57 69  use (e.g. for Wi
1770: 6e 64 6f 77 73 20 58 50 29 2e 0a 2a 2f 0a 23 69  ndows XP)..*/.#i
1780: 66 20 21 64 65 66 69 6e 65 64 28 5f 55 53 45 5f  f !defined(_USE_
1790: 33 32 42 49 54 5f 54 49 4d 45 5f 54 29 20 26 26  32BIT_TIME_T) &&
17a0: 20 21 64 65 66 69 6e 65 64 28 5f 55 53 45 5f 36   !defined(_USE_6
17b0: 34 42 49 54 5f 54 49 4d 45 5f 54 29 20 26 26 20  4BIT_TIME_T) && 
17c0: 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 5f 57  \.    defined(_W
17d0: 49 4e 33 32 29 20 26 26 20 21 64 65 66 69 6e 65  IN32) && !define
17e0: 64 28 5f 57 49 4e 36 34 29 20 26 26 20 5c 0a 20  d(_WIN64) && \. 
17f0: 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 4d 49 4e     defined(__MIN
1800: 47 57 5f 4d 41 4a 4f 52 5f 56 45 52 53 49 4f 4e  GW_MAJOR_VERSION
1810: 29 20 26 26 20 5f 5f 4d 49 4e 47 57 5f 4d 41 4a  ) && __MINGW_MAJ
1820: 4f 52 5f 56 45 52 53 49 4f 4e 20 3e 3d 20 34 20  OR_VERSION >= 4 
1830: 26 26 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64  && \.    defined
1840: 28 5f 5f 4d 53 56 43 52 54 5f 5f 29 0a 23 20 64  (__MSVCRT__).# d
1850: 65 66 69 6e 65 20 5f 55 53 45 5f 33 32 42 49 54  efine _USE_32BIT
1860: 5f 54 49 4d 45 5f 54 0a 23 65 6e 64 69 66 0a 0a  _TIME_T.#endif..
1870: 2f 2a 20 54 68 65 20 70 75 62 6c 69 63 20 53 51  /* The public SQ
1880: 4c 69 74 65 20 69 6e 74 65 72 66 61 63 65 2e 20  Lite interface. 
1890: 20 54 68 65 20 5f 46 49 4c 45 5f 4f 46 46 53 45   The _FILE_OFFSE
18a0: 54 5f 42 49 54 53 20 6d 61 63 72 6f 20 6d 75 73  T_BITS macro mus
18b0: 74 20 61 70 70 65 61 72 0a 2a 2a 20 66 69 72 73  t appear.** firs
18c0: 74 20 69 6e 20 51 4e 58 2e 20 20 41 6c 73 6f 2c  t in QNX.  Also,
18d0: 20 74 68 65 20 5f 55 53 45 5f 33 32 42 49 54 5f   the _USE_32BIT_
18e0: 54 49 4d 45 5f 54 20 6d 61 63 72 6f 20 6d 75 73  TIME_T macro mus
18f0: 74 20 61 70 70 65 61 72 20 66 69 72 73 74 20 66  t appear first f
1900: 6f 72 0a 2a 2a 20 4d 69 6e 47 57 2e 0a 2a 2f 0a  or.** MinGW..*/.
1910: 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65  #include "sqlite
1920: 33 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c  3.h"../*.** Incl
1930: 75 64 65 20 74 68 65 20 63 6f 6e 66 69 67 75 72  ude the configur
1940: 61 74 69 6f 6e 20 68 65 61 64 65 72 20 6f 75 74  ation header out
1950: 70 75 74 20 62 79 20 27 63 6f 6e 66 69 67 75 72  put by 'configur
1960: 65 27 20 69 66 20 77 65 27 72 65 20 75 73 69 6e  e' if we're usin
1970: 67 20 74 68 65 0a 2a 2a 20 61 75 74 6f 63 6f 6e  g the.** autocon
1980: 66 2d 62 61 73 65 64 20 62 75 69 6c 64 0a 2a 2f  f-based build.*/
1990: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 48 41  .#if defined(_HA
19a0: 56 45 5f 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47  VE_SQLITE_CONFIG
19b0: 5f 48 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  _H) && !defined(
19c0: 53 51 4c 49 54 45 43 4f 4e 46 49 47 5f 48 29 0a  SQLITECONFIG_H).
19d0: 23 69 6e 63 6c 75 64 65 20 22 63 6f 6e 66 69 67  #include "config
19e0: 2e 68 22 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .h".#define SQLI
19f0: 54 45 43 4f 4e 46 49 47 5f 48 20 31 0a 23 65 6e  TECONFIG_H 1.#en
1a00: 64 69 66 0a 0a 23 69 6e 63 6c 75 64 65 20 22 73  dif..#include "s
1a10: 71 6c 69 74 65 4c 69 6d 69 74 2e 68 22 0a 0a 2f  qliteLimit.h"../
1a20: 2a 20 44 69 73 61 62 6c 65 20 6e 75 69 73 61 6e  * Disable nuisan
1a30: 63 65 20 77 61 72 6e 69 6e 67 73 20 6f 6e 20 42  ce warnings on B
1a40: 6f 72 6c 61 6e 64 20 63 6f 6d 70 69 6c 65 72 73  orland compilers
1a50: 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28   */.#if defined(
1a60: 5f 5f 42 4f 52 4c 41 4e 44 43 5f 5f 29 0a 23 70  __BORLANDC__).#p
1a70: 72 61 67 6d 61 20 77 61 72 6e 20 2d 72 63 68 20  ragma warn -rch 
1a80: 2f 2a 20 75 6e 72 65 61 63 68 61 62 6c 65 20 63  /* unreachable c
1a90: 6f 64 65 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77  ode */.#pragma w
1aa0: 61 72 6e 20 2d 63 63 63 20 2f 2a 20 43 6f 6e 64  arn -ccc /* Cond
1ab0: 69 74 69 6f 6e 20 69 73 20 61 6c 77 61 79 73 20  ition is always 
1ac0: 74 72 75 65 20 6f 72 20 66 61 6c 73 65 20 2a 2f  true or false */
1ad0: 0a 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 61  .#pragma warn -a
1ae0: 75 73 20 2f 2a 20 41 73 73 69 67 6e 65 64 20 76  us /* Assigned v
1af0: 61 6c 75 65 20 69 73 20 6e 65 76 65 72 20 75 73  alue is never us
1b00: 65 64 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61  ed */.#pragma wa
1b10: 72 6e 20 2d 63 73 75 20 2f 2a 20 43 6f 6d 70 61  rn -csu /* Compa
1b20: 72 69 6e 67 20 73 69 67 6e 65 64 20 61 6e 64 20  ring signed and 
1b30: 75 6e 73 69 67 6e 65 64 20 2a 2f 0a 23 70 72 61  unsigned */.#pra
1b40: 67 6d 61 20 77 61 72 6e 20 2d 73 70 61 20 2f 2a  gma warn -spa /*
1b50: 20 53 75 73 70 69 63 69 6f 75 73 20 70 6f 69 6e   Suspicious poin
1b60: 74 65 72 20 61 72 69 74 68 6d 65 74 69 63 20 2a  ter arithmetic *
1b70: 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  /.#endif../*.** 
1b80: 49 6e 63 6c 75 64 65 20 73 74 61 6e 64 61 72 64  Include standard
1b90: 20 68 65 61 64 65 72 20 66 69 6c 65 73 20 61 73   header files as
1ba0: 20 6e 65 63 65 73 73 61 72 79 0a 2a 2f 0a 23 69   necessary.*/.#i
1bb0: 66 64 65 66 20 48 41 56 45 5f 53 54 44 49 4e 54  fdef HAVE_STDINT
1bc0: 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64  _H.#include <std
1bd0: 69 6e 74 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 69  int.h>.#endif.#i
1be0: 66 64 65 66 20 48 41 56 45 5f 49 4e 54 54 59 50  fdef HAVE_INTTYP
1bf0: 45 53 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c 69  ES_H.#include <i
1c00: 6e 74 74 79 70 65 73 2e 68 3e 0a 23 65 6e 64 69  nttypes.h>.#endi
1c10: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  f../*.** The fol
1c20: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 61 72  lowing macros ar
1c30: 65 20 75 73 65 64 20 74 6f 20 63 61 73 74 20 70  e used to cast p
1c40: 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e 74 65 67  ointers to integ
1c50: 65 72 73 20 61 6e 64 0a 2a 2a 20 69 6e 74 65 67  ers and.** integ
1c60: 65 72 73 20 74 6f 20 70 6f 69 6e 74 65 72 73 2e  ers to pointers.
1c70: 20 20 54 68 65 20 77 61 79 20 79 6f 75 20 64 6f    The way you do
1c80: 20 74 68 69 73 20 76 61 72 69 65 73 20 66 72 6f   this varies fro
1c90: 6d 20 6f 6e 65 20 63 6f 6d 70 69 6c 65 72 0a 2a  m one compiler.*
1ca0: 2a 20 74 6f 20 74 68 65 20 6e 65 78 74 2c 20 73  * to the next, s
1cb0: 6f 20 77 65 20 68 61 76 65 20 64 65 76 65 6c 6f  o we have develo
1cc0: 70 65 64 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  ped the followin
1cd0: 67 20 73 65 74 20 6f 66 20 23 69 66 20 73 74 61  g set of #if sta
1ce0: 74 65 6d 65 6e 74 73 0a 2a 2a 20 74 6f 20 67 65  tements.** to ge
1cf0: 6e 65 72 61 74 65 20 61 70 70 72 6f 70 72 69 61  nerate appropria
1d00: 74 65 20 6d 61 63 72 6f 73 20 66 6f 72 20 61 20  te macros for a 
1d10: 77 69 64 65 20 72 61 6e 67 65 20 6f 66 20 63 6f  wide range of co
1d20: 6d 70 69 6c 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 54  mpilers..**.** T
1d30: 68 65 20 63 6f 72 72 65 63 74 20 22 41 4e 53 49  he correct "ANSI
1d40: 22 20 77 61 79 20 74 6f 20 64 6f 20 74 68 69 73  " way to do this
1d50: 20 69 73 20 74 6f 20 75 73 65 20 74 68 65 20 69   is to use the i
1d60: 6e 74 70 74 72 5f 74 20 74 79 70 65 2e 0a 2a 2a  ntptr_t type..**
1d70: 20 55 6e 66 6f 72 74 75 6e 61 74 65 6c 79 2c 20   Unfortunately, 
1d80: 74 68 61 74 20 74 79 70 65 64 65 66 20 69 73 20  that typedef is 
1d90: 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 20 6f 6e  not available on
1da0: 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73 2c 20   all compilers, 
1db0: 6f 72 0a 2a 2a 20 69 66 20 69 74 20 69 73 20 61  or.** if it is a
1dc0: 76 61 69 6c 61 62 6c 65 2c 20 69 74 20 72 65 71  vailable, it req
1dd0: 75 69 72 65 73 20 61 6e 20 23 69 6e 63 6c 75 64  uires an #includ
1de0: 65 20 6f 66 20 73 70 65 63 69 66 69 63 20 68 65  e of specific he
1df0: 61 64 65 72 73 0a 2a 2a 20 74 68 61 74 20 76 61  aders.** that va
1e00: 72 79 20 66 72 6f 6d 20 6f 6e 65 20 6d 61 63 68  ry from one mach
1e10: 69 6e 65 20 74 6f 20 74 68 65 20 6e 65 78 74 2e  ine to the next.
1e20: 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20 23 33  .**.** Ticket #3
1e30: 38 36 30 3a 20 20 54 68 65 20 6c 6c 76 6d 2d 67  860:  The llvm-g
1e40: 63 63 2d 34 2e 32 20 63 6f 6d 70 69 6c 65 72 20  cc-4.2 compiler 
1e50: 66 72 6f 6d 20 41 70 70 6c 65 20 63 68 6f 6b 65  from Apple choke
1e60: 73 20 6f 6e 0a 2a 2a 20 74 68 65 20 28 28 76 6f  s on.** the ((vo
1e70: 69 64 2a 29 26 28 28 63 68 61 72 2a 29 30 29 5b  id*)&((char*)0)[
1e80: 58 5d 29 20 63 6f 6e 73 74 72 75 63 74 2e 20 20  X]) construct.  
1e90: 42 75 74 20 4d 53 56 43 20 63 68 6f 6b 65 73 20  But MSVC chokes 
1ea0: 6f 6e 20 28 28 76 6f 69 64 2a 29 28 58 29 29 2e  on ((void*)(X)).
1eb0: 0a 2a 2a 20 53 6f 20 77 65 20 68 61 76 65 20 74  .** So we have t
1ec0: 6f 20 64 65 66 69 6e 65 20 74 68 65 20 6d 61 63  o define the mac
1ed0: 72 6f 73 20 69 6e 20 64 69 66 66 65 72 65 6e 74  ros in different
1ee0: 20 77 61 79 73 20 64 65 70 65 6e 64 69 6e 67 20   ways depending 
1ef0: 6f 6e 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 69 6c  on the.** compil
1f00: 65 72 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  er..*/.#if defin
1f10: 65 64 28 5f 5f 50 54 52 44 49 46 46 5f 54 59 50  ed(__PTRDIFF_TYP
1f20: 45 5f 5f 29 20 20 2f 2a 20 54 68 69 73 20 63 61  E__)  /* This ca
1f30: 73 65 20 73 68 6f 75 6c 64 20 77 6f 72 6b 20 66  se should work f
1f40: 6f 72 20 47 43 43 20 2a 2f 0a 23 20 64 65 66 69  or GCC */.# defi
1f50: 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f  ne SQLITE_INT_TO
1f60: 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69 64 2a  _PTR(X)  ((void*
1f70: 29 28 5f 5f 50 54 52 44 49 46 46 5f 54 59 50 45  )(__PTRDIFF_TYPE
1f80: 5f 5f 29 28 58 29 29 0a 23 20 64 65 66 69 6e 65  __)(X)).# define
1f90: 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49   SQLITE_PTR_TO_I
1fa0: 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28 5f 5f  NT(X)  ((int)(__
1fb0: 50 54 52 44 49 46 46 5f 54 59 50 45 5f 5f 29 28  PTRDIFF_TYPE__)(
1fc0: 58 29 29 0a 23 65 6c 69 66 20 21 64 65 66 69 6e  X)).#elif !defin
1fd0: 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20 20 20 20  ed(__GNUC__)    
1fe0: 20 20 20 2f 2a 20 57 6f 72 6b 73 20 66 6f 72 20     /* Works for 
1ff0: 63 6f 6d 70 69 6c 65 72 73 20 6f 74 68 65 72 20  compilers other 
2000: 74 68 61 6e 20 4c 4c 56 4d 20 2a 2f 0a 23 20 64  than LLVM */.# d
2010: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54  efine SQLITE_INT
2020: 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f  _TO_PTR(X)  ((vo
2030: 69 64 2a 29 26 28 28 63 68 61 72 2a 29 30 29 5b  id*)&((char*)0)[
2040: 58 5d 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  X]).# define SQL
2050: 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58  ITE_PTR_TO_INT(X
2060: 29 20 20 28 28 69 6e 74 29 28 28 28 63 68 61 72  )  ((int)(((char
2070: 2a 29 58 29 2d 28 63 68 61 72 2a 29 30 29 29 0a  *)X)-(char*)0)).
2080: 23 65 6c 69 66 20 64 65 66 69 6e 65 64 28 48 41  #elif defined(HA
2090: 56 45 5f 53 54 44 49 4e 54 5f 48 29 20 20 20 2f  VE_STDINT_H)   /
20a0: 2a 20 55 73 65 20 74 68 69 73 20 63 61 73 65 20  * Use this case 
20b0: 69 66 20 77 65 20 68 61 76 65 20 41 4e 53 49 20  if we have ANSI 
20c0: 68 65 61 64 65 72 73 20 2a 2f 0a 23 20 64 65 66  headers */.# def
20d0: 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  ine SQLITE_INT_T
20e0: 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69 64  O_PTR(X)  ((void
20f0: 2a 29 28 69 6e 74 70 74 72 5f 74 29 28 58 29 29  *)(intptr_t)(X))
2100: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
2110: 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20  _PTR_TO_INT(X)  
2120: 28 28 69 6e 74 29 28 69 6e 74 70 74 72 5f 74 29  ((int)(intptr_t)
2130: 28 58 29 29 0a 23 65 6c 73 65 20 20 20 20 20 20  (X)).#else      
2140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2150: 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 73      /* Generates
2160: 20 61 20 77 61 72 6e 69 6e 67 20 2d 20 62 75 74   a warning - but
2170: 20 69 74 20 61 6c 77 61 79 73 20 77 6f 72 6b 73   it always works
2180: 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c   */.# define SQL
2190: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58  ITE_INT_TO_PTR(X
21a0: 29 20 20 28 28 76 6f 69 64 2a 29 28 58 29 29 0a  )  ((void*)(X)).
21b0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
21c0: 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28  PTR_TO_INT(X)  (
21d0: 28 69 6e 74 29 28 58 29 29 0a 23 65 6e 64 69 66  (int)(X)).#endif
21e0: 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63 72 6f 20  ../*.** A macro 
21f0: 74 6f 20 68 69 6e 74 20 74 6f 20 74 68 65 20 63  to hint to the c
2200: 6f 6d 70 69 6c 65 72 20 74 68 61 74 20 61 20 66  ompiler that a f
2210: 75 6e 63 74 69 6f 6e 20 73 68 6f 75 6c 64 20 6e  unction should n
2220: 6f 74 20 62 65 0a 2a 2a 20 69 6e 6c 69 6e 65 64  ot be.** inlined
2230: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
2240: 28 5f 5f 47 4e 55 43 5f 5f 29 0a 23 20 20 64 65  (__GNUC__).#  de
2250: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e  fine SQLITE_NOIN
2260: 4c 49 4e 45 20 20 5f 5f 61 74 74 72 69 62 75 74  LINE  __attribut
2270: 65 5f 5f 28 28 6e 6f 69 6e 6c 69 6e 65 29 29 0a  e__((noinline)).
2280: 23 65 6c 69 66 20 64 65 66 69 6e 65 64 28 5f 4d  #elif defined(_M
2290: 53 43 5f 56 45 52 29 20 26 26 20 5f 4d 53 43 5f  SC_VER) && _MSC_
22a0: 56 45 52 3e 3d 31 33 31 30 0a 23 20 20 64 65 66  VER>=1310.#  def
22b0: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c  ine SQLITE_NOINL
22c0: 49 4e 45 20 20 5f 5f 64 65 63 6c 73 70 65 63 28  INE  __declspec(
22d0: 6e 6f 69 6e 6c 69 6e 65 29 0a 23 65 6c 73 65 0a  noinline).#else.
22e0: 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  #  define SQLITE
22f0: 5f 4e 4f 49 4e 4c 49 4e 45 0a 23 65 6e 64 69 66  _NOINLINE.#endif
2300: 0a 0a 2f 2a 0a 2a 2a 20 4d 61 6b 65 20 73 75 72  ../*.** Make sur
2310: 65 20 74 68 61 74 20 74 68 65 20 63 6f 6d 70 69  e that the compi
2320: 6c 65 72 20 69 6e 74 72 69 6e 73 69 63 73 20 77  ler intrinsics w
2330: 65 20 64 65 73 69 72 65 20 61 72 65 20 65 6e 61  e desire are ena
2340: 62 6c 65 64 20 77 68 65 6e 0a 2a 2a 20 63 6f 6d  bled when.** com
2350: 70 69 6c 69 6e 67 20 77 69 74 68 20 61 6e 20 61  piling with an a
2360: 70 70 72 6f 70 72 69 61 74 65 20 76 65 72 73 69  ppropriate versi
2370: 6f 6e 20 6f 66 20 4d 53 56 43 20 75 6e 6c 65 73  on of MSVC unles
2380: 73 20 70 72 65 76 65 6e 74 65 64 20 62 79 0a 2a  s prevented by.*
2390: 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 44 49 53  * the SQLITE_DIS
23a0: 41 42 4c 45 5f 49 4e 54 52 49 4e 53 49 43 20 64  ABLE_INTRINSIC d
23b0: 65 66 69 6e 65 2e 0a 2a 2f 0a 23 69 66 20 21 64  efine..*/.#if !d
23c0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 49  efined(SQLITE_DI
23d0: 53 41 42 4c 45 5f 49 4e 54 52 49 4e 53 49 43 29  SABLE_INTRINSIC)
23e0: 0a 23 20 20 69 66 20 64 65 66 69 6e 65 64 28 5f  .#  if defined(_
23f0: 4d 53 43 5f 56 45 52 29 20 26 26 20 5f 4d 53 43  MSC_VER) && _MSC
2400: 5f 56 45 52 3e 3d 31 34 30 30 0a 23 20 20 20 20  _VER>=1400.#    
2410: 69 66 20 21 64 65 66 69 6e 65 64 28 5f 57 49 4e  if !defined(_WIN
2420: 33 32 5f 57 43 45 29 0a 23 20 20 20 20 20 20 69  32_WCE).#      i
2430: 6e 63 6c 75 64 65 20 3c 69 6e 74 72 69 6e 2e 68  nclude <intrin.h
2440: 3e 0a 23 20 20 20 20 20 20 70 72 61 67 6d 61 20  >.#      pragma 
2450: 69 6e 74 72 69 6e 73 69 63 28 5f 62 79 74 65 73  intrinsic(_bytes
2460: 77 61 70 5f 75 73 68 6f 72 74 29 0a 23 20 20 20  wap_ushort).#   
2470: 20 20 20 70 72 61 67 6d 61 20 69 6e 74 72 69 6e     pragma intrin
2480: 73 69 63 28 5f 62 79 74 65 73 77 61 70 5f 75 6c  sic(_byteswap_ul
2490: 6f 6e 67 29 0a 23 20 20 20 20 20 20 70 72 61 67  ong).#      prag
24a0: 6d 61 20 69 6e 74 72 69 6e 73 69 63 28 5f 62 79  ma intrinsic(_by
24b0: 74 65 73 77 61 70 5f 75 69 6e 74 36 34 29 0a 23  teswap_uint64).#
24c0: 20 20 20 20 20 20 70 72 61 67 6d 61 20 69 6e 74        pragma int
24d0: 72 69 6e 73 69 63 28 5f 52 65 61 64 57 72 69 74  rinsic(_ReadWrit
24e0: 65 42 61 72 72 69 65 72 29 0a 23 20 20 20 20 65  eBarrier).#    e
24f0: 6c 73 65 0a 23 20 20 20 20 20 20 69 6e 63 6c 75  lse.#      inclu
2500: 64 65 20 3c 63 6d 6e 69 6e 74 72 69 6e 2e 68 3e  de <cmnintrin.h>
2510: 0a 23 20 20 20 20 65 6e 64 69 66 0a 23 20 20 65  .#    endif.#  e
2520: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ndif.#endif../*.
2530: 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 54 48  ** The SQLITE_TH
2540: 52 45 41 44 53 41 46 45 20 6d 61 63 72 6f 20 6d  READSAFE macro m
2550: 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20 61  ust be defined a
2560: 73 20 30 2c 20 31 2c 20 6f 72 20 32 2e 0a 2a 2a  s 0, 1, or 2..**
2570: 20 30 20 6d 65 61 6e 73 20 6d 75 74 65 78 65 73   0 means mutexes
2580: 20 61 72 65 20 70 65 72 6d 61 6e 65 6e 74 6c 79   are permanently
2590: 20 64 69 73 61 62 6c 65 20 61 6e 64 20 74 68 65   disable and the
25a0: 20 6c 69 62 72 61 72 79 20 69 73 20 6e 65 76 65   library is neve
25b0: 72 0a 2a 2a 20 74 68 72 65 61 64 73 61 66 65 2e  r.** threadsafe.
25c0: 20 20 31 20 6d 65 61 6e 73 20 74 68 65 20 6c 69    1 means the li
25d0: 62 72 61 72 79 20 69 73 20 73 65 72 69 61 6c 69  brary is seriali
25e0: 7a 65 64 20 77 68 69 63 68 20 69 73 20 74 68 65  zed which is the
25f0: 20 68 69 67 68 65 73 74 0a 2a 2a 20 6c 65 76 65   highest.** leve
2600: 6c 20 6f 66 20 74 68 72 65 61 64 73 61 66 65 74  l of threadsafet
2610: 79 2e 20 20 32 20 6d 65 61 6e 73 20 74 68 65 20  y.  2 means the 
2620: 6c 69 62 72 61 72 79 20 69 73 20 6d 75 6c 74 69  library is multi
2630: 74 68 72 65 61 64 65 64 20 2d 20 6d 75 6c 74 69  threaded - multi
2640: 70 6c 65 0a 2a 2a 20 74 68 72 65 61 64 73 20 63  ple.** threads c
2650: 61 6e 20 75 73 65 20 53 51 4c 69 74 65 20 61 73  an use SQLite as
2660: 20 6c 6f 6e 67 20 61 73 20 6e 6f 20 74 77 6f 20   long as no two 
2670: 74 68 72 65 61 64 73 20 74 72 79 20 74 6f 20 75  threads try to u
2680: 73 65 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 64  se the same.** d
2690: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
26a0: 6f 6e 20 61 74 20 74 68 65 20 73 61 6d 65 20 74  on at the same t
26b0: 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 4f 6c 64 65 72  ime..**.** Older
26c0: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
26d0: 69 74 65 20 75 73 65 64 20 61 6e 20 6f 70 74 69  ite used an opti
26e0: 6f 6e 61 6c 20 54 48 52 45 41 44 53 41 46 45 20  onal THREADSAFE 
26f0: 6d 61 63 72 6f 2e 0a 2a 2a 20 57 65 20 73 75 70  macro..** We sup
2700: 70 6f 72 74 20 74 68 61 74 20 66 6f 72 20 6c 65  port that for le
2710: 67 61 63 79 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 65  gacy..**.** To e
2720: 6e 73 75 72 65 20 74 68 61 74 20 74 68 65 20 63  nsure that the c
2730: 6f 72 72 65 63 74 20 76 61 6c 75 65 20 6f 66 20  orrect value of 
2740: 22 54 48 52 45 41 44 53 41 46 45 22 20 69 73 20  "THREADSAFE" is 
2750: 72 65 70 6f 72 74 65 64 20 77 68 65 6e 20 71 75  reported when qu
2760: 65 72 79 69 6e 67 0a 2a 2a 20 66 6f 72 20 63 6f  erying.** for co
2770: 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
2780: 6e 73 20 61 74 20 72 75 6e 74 69 6d 65 20 28 65  ns at runtime (e
2790: 2e 67 2e 20 22 50 52 41 47 4d 41 20 63 6f 6d 70  .g. "PRAGMA comp
27a0: 69 6c 65 5f 6f 70 74 69 6f 6e 73 22 29 2c 20 74  ile_options"), t
27b0: 68 69 73 0a 2a 2a 20 6c 6f 67 69 63 20 69 73 20  his.** logic is 
27c0: 70 61 72 74 69 61 6c 6c 79 20 72 65 70 6c 69 63  partially replic
27d0: 61 74 65 64 20 69 6e 20 63 74 69 6d 65 2e 63 2e  ated in ctime.c.
27e0: 20 49 66 20 69 74 20 69 73 20 75 70 64 61 74 65   If it is update
27f0: 64 20 68 65 72 65 2c 20 69 74 20 73 68 6f 75 6c  d here, it shoul
2800: 64 0a 2a 2a 20 61 6c 73 6f 20 62 65 20 75 70 64  d.** also be upd
2810: 61 74 65 64 20 74 68 65 72 65 2e 0a 2a 2f 0a 23  ated there..*/.#
2820: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
2830: 54 45 5f 54 48 52 45 41 44 53 41 46 45 29 0a 23  TE_THREADSAFE).#
2840: 20 69 66 20 64 65 66 69 6e 65 64 28 54 48 52 45   if defined(THRE
2850: 41 44 53 41 46 45 29 0a 23 20 20 20 64 65 66 69  ADSAFE).#   defi
2860: 6e 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44  ne SQLITE_THREAD
2870: 53 41 46 45 20 54 48 52 45 41 44 53 41 46 45 0a  SAFE THREADSAFE.
2880: 23 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e  # else.#   defin
2890: 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53  e SQLITE_THREADS
28a0: 41 46 45 20 31 20 2f 2a 20 49 4d 50 3a 20 52 2d  AFE 1 /* IMP: R-
28b0: 30 37 32 37 32 2d 32 32 33 30 39 20 2a 2f 0a 23  07272-22309 */.#
28c0: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f   endif.#endif../
28d0: 2a 0a 2a 2a 20 50 6f 77 65 72 73 61 66 65 20 6f  *.** Powersafe o
28e0: 76 65 72 77 72 69 74 65 20 69 73 20 6f 6e 20 62  verwrite is on b
28f0: 79 20 64 65 66 61 75 6c 74 2e 20 20 42 75 74 20  y default.  But 
2900: 63 61 6e 20 62 65 20 74 75 72 6e 65 64 20 6f 66  can be turned of
2910: 66 20 75 73 69 6e 67 0a 2a 2a 20 74 68 65 20 2d  f using.** the -
2920: 44 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41 46  DSQLITE_POWERSAF
2930: 45 5f 4f 56 45 52 57 52 49 54 45 3d 30 20 63 6f  E_OVERWRITE=0 co
2940: 6d 6d 61 6e 64 2d 6c 69 6e 65 20 6f 70 74 69 6f  mmand-line optio
2950: 6e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  n..*/.#ifndef SQ
2960: 4c 49 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f  LITE_POWERSAFE_O
2970: 56 45 52 57 52 49 54 45 0a 23 20 64 65 66 69 6e  VERWRITE.# defin
2980: 65 20 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41  e SQLITE_POWERSA
2990: 46 45 5f 4f 56 45 52 57 52 49 54 45 20 31 0a 23  FE_OVERWRITE 1.#
29a0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 56 49  endif../*.** EVI
29b0: 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 32 35 37 31  DENCE-OF: R-2571
29c0: 35 2d 33 37 30 37 32 20 4d 65 6d 6f 72 79 20 61  5-37072 Memory a
29d0: 6c 6c 6f 63 61 74 69 6f 6e 20 73 74 61 74 69 73  llocation statis
29e0: 74 69 63 73 20 61 72 65 20 65 6e 61 62 6c 65 64  tics are enabled
29f0: 20 62 79 0a 2a 2a 20 64 65 66 61 75 6c 74 20 75   by.** default u
2a00: 6e 6c 65 73 73 20 53 51 4c 69 74 65 20 69 73 20  nless SQLite is 
2a10: 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 53 51  compiled with SQ
2a20: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d  LITE_DEFAULT_MEM
2a30: 53 54 41 54 55 53 3d 30 20 69 6e 0a 2a 2a 20 77  STATUS=0 in.** w
2a40: 68 69 63 68 20 63 61 73 65 20 6d 65 6d 6f 72 79  hich case memory
2a50: 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 74 61 74   allocation stat
2a60: 69 73 74 69 63 73 20 61 72 65 20 64 69 73 61 62  istics are disab
2a70: 6c 65 64 20 62 79 20 64 65 66 61 75 6c 74 2e 0a  led by default..
2a80: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
2a90: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
2aa0: 45 4d 53 54 41 54 55 53 29 0a 23 20 64 65 66 69  EMSTATUS).# defi
2ab0: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
2ac0: 54 5f 4d 45 4d 53 54 41 54 55 53 20 31 0a 23 65  T_MEMSTATUS 1.#e
2ad0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 78 61 63  ndif../*.** Exac
2ae0: 74 6c 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 66  tly one of the f
2af0: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20  ollowing macros 
2b00: 6d 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20  must be defined 
2b10: 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 73  in order to.** s
2b20: 70 65 63 69 66 79 20 77 68 69 63 68 20 6d 65 6d  pecify which mem
2b30: 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73  ory allocation s
2b40: 75 62 73 79 73 74 65 6d 20 74 6f 20 75 73 65 2e  ubsystem to use.
2b50: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54  .**.**     SQLIT
2b60: 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20  E_SYSTEM_MALLOC 
2b70: 20 20 20 20 20 20 20 20 20 2f 2f 20 55 73 65 20           // Use 
2b80: 6e 6f 72 6d 61 6c 20 73 79 73 74 65 6d 20 6d 61  normal system ma
2b90: 6c 6c 6f 63 28 29 0a 2a 2a 20 20 20 20 20 53 51  lloc().**     SQ
2ba0: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
2bb0: 43 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55  C           // U
2bc0: 73 65 20 57 69 6e 33 32 20 6e 61 74 69 76 65 20  se Win32 native 
2bd0: 68 65 61 70 20 41 50 49 0a 2a 2a 20 20 20 20 20  heap API.**     
2be0: 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c  SQLITE_ZERO_MALL
2bf0: 4f 43 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  OC            //
2c00: 20 55 73 65 20 61 20 73 74 75 62 20 61 6c 6c 6f   Use a stub allo
2c10: 63 61 74 6f 72 20 74 68 61 74 20 61 6c 77 61 79  cator that alway
2c20: 73 20 66 61 69 6c 73 0a 2a 2a 20 20 20 20 20 53  s fails.**     S
2c30: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 20  QLITE_MEMDEBUG  
2c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2c50: 44 65 62 75 67 67 69 6e 67 20 76 65 72 73 69 6f  Debugging versio
2c60: 6e 20 6f 66 20 73 79 73 74 65 6d 20 6d 61 6c 6c  n of system mall
2c70: 6f 63 28 29 0a 2a 2a 0a 2a 2a 20 4f 6e 20 57 69  oc().**.** On Wi
2c80: 6e 64 6f 77 73 2c 20 69 66 20 74 68 65 20 53 51  ndows, if the SQ
2c90: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
2ca0: 43 5f 56 41 4c 49 44 41 54 45 20 6d 61 63 72 6f  C_VALIDATE macro
2cb0: 20 69 73 20 64 65 66 69 6e 65 64 20 61 6e 64 20   is defined and 
2cc0: 74 68 65 0a 2a 2a 20 61 73 73 65 72 74 28 29 20  the.** assert() 
2cd0: 6d 61 63 72 6f 20 69 73 20 65 6e 61 62 6c 65 64  macro is enabled
2ce0: 2c 20 65 61 63 68 20 63 61 6c 6c 20 69 6e 74 6f  , each call into
2cf0: 20 74 68 65 20 57 69 6e 33 32 20 6e 61 74 69 76   the Win32 nativ
2d00: 65 20 68 65 61 70 20 73 75 62 73 79 73 74 65 6d  e heap subsystem
2d10: 0a 2a 2a 20 77 69 6c 6c 20 63 61 75 73 65 20 48  .** will cause H
2d20: 65 61 70 56 61 6c 69 64 61 74 65 20 74 6f 20 62  eapValidate to b
2d30: 65 20 63 61 6c 6c 65 64 2e 20 20 49 66 20 68 65  e called.  If he
2d40: 61 70 20 76 61 6c 69 64 61 74 69 6f 6e 20 73 68  ap validation sh
2d50: 6f 75 6c 64 20 66 61 69 6c 2c 20 61 6e 0a 2a 2a  ould fail, an.**
2d60: 20 61 73 73 65 72 74 69 6f 6e 20 77 69 6c 6c 20   assertion will 
2d70: 62 65 20 74 72 69 67 67 65 72 65 64 2e 0a 2a 2a  be triggered..**
2d80: 0a 2a 2a 20 49 66 20 6e 6f 6e 65 20 6f 66 20 74  .** If none of t
2d90: 68 65 20 61 62 6f 76 65 20 61 72 65 20 64 65 66  he above are def
2da0: 69 6e 65 64 2c 20 74 68 65 6e 20 73 65 74 20 53  ined, then set S
2db0: 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c  QLITE_SYSTEM_MAL
2dc0: 4c 4f 43 20 61 73 0a 2a 2a 20 74 68 65 20 64 65  LOC as.** the de
2dd0: 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66 20 64 65  fault..*/.#if de
2de0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 53 59 53  fined(SQLITE_SYS
2df0: 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20  TEM_MALLOC) \.  
2e00: 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  + defined(SQLITE
2e10: 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c  _WIN32_MALLOC) \
2e20: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
2e30: 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29  ITE_ZERO_MALLOC)
2e40: 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53   \.  + defined(S
2e50: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 3e  QLITE_MEMDEBUG)>
2e60: 31 0a 23 20 65 72 72 6f 72 20 22 54 77 6f 20 6f  1.# error "Two o
2e70: 72 20 6d 6f 72 65 20 6f 66 20 74 68 65 20 66 6f  r more of the fo
2e80: 6c 6c 6f 77 69 6e 67 20 63 6f 6d 70 69 6c 65 2d  llowing compile-
2e90: 74 69 6d 65 20 63 6f 6e 66 69 67 75 72 61 74 69  time configurati
2ea0: 6f 6e 20 6f 70 74 69 6f 6e 73 5c 0a 20 61 72 65  on options\. are
2eb0: 20 64 65 66 69 6e 65 64 20 62 75 74 20 61 74 20   defined but at 
2ec0: 6d 6f 73 74 20 6f 6e 65 20 69 73 20 61 6c 6c 6f  most one is allo
2ed0: 77 65 64 3a 5c 0a 20 53 51 4c 49 54 45 5f 53 59  wed:\. SQLITE_SY
2ee0: 53 54 45 4d 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c  STEM_MALLOC, SQL
2ef0: 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43  ITE_WIN32_MALLOC
2f00: 2c 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  , SQLITE_MEMDEBU
2f10: 47 2c 5c 0a 20 53 51 4c 49 54 45 5f 5a 45 52 4f  G,\. SQLITE_ZERO
2f20: 5f 4d 41 4c 4c 4f 43 22 0a 23 65 6e 64 69 66 0a  _MALLOC".#endif.
2f30: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
2f40: 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43  TE_SYSTEM_MALLOC
2f50: 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28  ) \.  + defined(
2f60: 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c  SQLITE_WIN32_MAL
2f70: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
2f80: 65 64 28 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d  ed(SQLITE_ZERO_M
2f90: 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66  ALLOC) \.  + def
2fa0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44  ined(SQLITE_MEMD
2fb0: 45 42 55 47 29 3d 3d 30 0a 23 20 64 65 66 69 6e  EBUG)==0.# defin
2fc0: 65 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f  e SQLITE_SYSTEM_
2fd0: 4d 41 4c 4c 4f 43 20 31 0a 23 65 6e 64 69 66 0a  MALLOC 1.#endif.
2fe0: 0a 2f 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45  ./*.** If SQLITE
2ff0: 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d  _MALLOC_SOFT_LIM
3000: 49 54 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  IT is not zero, 
3010: 74 68 65 6e 20 74 72 79 20 74 6f 20 6b 65 65 70  then try to keep
3020: 20 74 68 65 0a 2a 2a 20 73 69 7a 65 73 20 6f 66   the.** sizes of
3030: 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
3040: 6f 6e 73 20 62 65 6c 6f 77 20 74 68 69 73 20 76  ons below this v
3050: 61 6c 75 65 20 77 68 65 72 65 20 70 6f 73 73 69  alue where possi
3060: 62 6c 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66  ble..*/.#if !def
3070: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 41 4c 4c  ined(SQLITE_MALL
3080: 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54 29 0a 23  OC_SOFT_LIMIT).#
3090: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
30a0: 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54  ALLOC_SOFT_LIMIT
30b0: 20 31 30 32 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a   1024.#endif../*
30c0: 0a 2a 2a 20 57 65 20 6e 65 65 64 20 74 6f 20 64  .** We need to d
30d0: 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55  efine _XOPEN_SOU
30e0: 52 43 45 20 61 73 20 66 6f 6c 6c 6f 77 73 20 69  RCE as follows i
30f0: 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e 61 62 6c  n order to enabl
3100: 65 0a 2a 2a 20 72 65 63 75 72 73 69 76 65 20 6d  e.** recursive m
3110: 75 74 65 78 65 73 20 6f 6e 20 6d 6f 73 74 20 55  utexes on most U
3120: 6e 69 78 20 73 79 73 74 65 6d 73 20 61 6e 64 20  nix systems and 
3130: 66 63 68 6d 6f 64 28 29 20 6f 6e 20 4f 70 65 6e  fchmod() on Open
3140: 42 53 44 2e 0a 2a 2a 20 42 75 74 20 5f 58 4f 50  BSD..** But _XOP
3150: 45 4e 5f 53 4f 55 52 43 45 20 64 65 66 69 6e 65  EN_SOURCE define
3160: 20 63 61 75 73 65 73 20 70 72 6f 62 6c 65 6d 73   causes problems
3170: 20 66 6f 72 20 4d 61 63 20 4f 53 20 58 2c 20 73   for Mac OS X, s
3180: 6f 20 6f 6d 69 74 0a 2a 2a 20 69 74 2e 0a 2a 2f  o omit.** it..*/
3190: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f 58  .#if !defined(_X
31a0: 4f 50 45 4e 5f 53 4f 55 52 43 45 29 20 26 26 20  OPEN_SOURCE) && 
31b0: 21 64 65 66 69 6e 65 64 28 5f 5f 44 41 52 57 49  !defined(__DARWI
31c0: 4e 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64  N__) && !defined
31d0: 28 5f 5f 41 50 50 4c 45 5f 5f 29 0a 23 20 20 64  (__APPLE__).#  d
31e0: 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55  efine _XOPEN_SOU
31f0: 52 43 45 20 36 30 30 0a 23 65 6e 64 69 66 0a 0a  RCE 600.#endif..
3200: 2f 2a 0a 2a 2a 20 4e 44 45 42 55 47 20 61 6e 64  /*.** NDEBUG and
3210: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 61 72   SQLITE_DEBUG ar
3220: 65 20 6f 70 70 6f 73 69 74 65 73 2e 20 20 49 74  e opposites.  It
3230: 20 73 68 6f 75 6c 64 20 61 6c 77 61 79 73 20 62   should always b
3240: 65 20 74 72 75 65 20 74 68 61 74 0a 2a 2a 20 64  e true that.** d
3250: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 3d 3d  efined(NDEBUG)==
3260: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
3270: 44 45 42 55 47 29 2e 20 20 49 66 20 74 68 69 73  DEBUG).  If this
3280: 20 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c   is not currentl
3290: 79 20 74 72 75 65 2c 0a 2a 2a 20 6d 61 6b 65 20  y true,.** make 
32a0: 69 74 20 74 72 75 65 20 62 79 20 64 65 66 69 6e  it true by defin
32b0: 69 6e 67 20 6f 72 20 75 6e 64 65 66 69 6e 69 6e  ing or undefinin
32c0: 67 20 4e 44 45 42 55 47 2e 0a 2a 2a 0a 2a 2a 20  g NDEBUG..**.** 
32d0: 53 65 74 74 69 6e 67 20 4e 44 45 42 55 47 20 6d  Setting NDEBUG m
32e0: 61 6b 65 73 20 74 68 65 20 63 6f 64 65 20 73 6d  akes the code sm
32f0: 61 6c 6c 65 72 20 61 6e 64 20 66 61 73 74 65 72  aller and faster
3300: 20 62 79 20 64 69 73 61 62 6c 69 6e 67 20 74 68   by disabling th
3310: 65 0a 2a 2a 20 61 73 73 65 72 74 28 29 20 73 74  e.** assert() st
3320: 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20  atements in the 
3330: 63 6f 64 65 2e 20 20 53 6f 20 77 65 20 77 61 6e  code.  So we wan
3340: 74 20 74 68 65 20 64 65 66 61 75 6c 74 20 61 63  t the default ac
3350: 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 66 6f  tion.** to be fo
3360: 72 20 4e 44 45 42 55 47 20 74 6f 20 62 65 20 73  r NDEBUG to be s
3370: 65 74 20 61 6e 64 20 4e 44 45 42 55 47 20 74 6f  et and NDEBUG to
3380: 20 62 65 20 75 6e 64 65 66 69 6e 65 64 20 6f 6e   be undefined on
3390: 6c 79 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42  ly if SQLITE_DEB
33a0: 55 47 0a 2a 2a 20 69 73 20 73 65 74 2e 20 20 54  UG.** is set.  T
33b0: 68 75 73 20 4e 44 45 42 55 47 20 62 65 63 6f 6d  hus NDEBUG becom
33c0: 65 73 20 61 6e 20 6f 70 74 2d 69 6e 20 72 61 74  es an opt-in rat
33d0: 68 65 72 20 74 68 61 6e 20 61 6e 20 6f 70 74 2d  her than an opt-
33e0: 6f 75 74 0a 2a 2a 20 66 65 61 74 75 72 65 2e 0a  out.** feature..
33f0: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
3400: 4e 44 45 42 55 47 29 20 26 26 20 21 64 65 66 69  NDEBUG) && !defi
3410: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
3420: 29 0a 23 20 64 65 66 69 6e 65 20 4e 44 45 42 55  ).# define NDEBU
3430: 47 20 31 0a 23 65 6e 64 69 66 0a 23 69 66 20 64  G 1.#endif.#if d
3440: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20 26  efined(NDEBUG) &
3450: 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  & defined(SQLITE
3460: 5f 44 45 42 55 47 29 0a 23 20 75 6e 64 65 66 20  _DEBUG).# undef 
3470: 4e 44 45 42 55 47 0a 23 65 6e 64 69 66 0a 0a 2f  NDEBUG.#endif../
3480: 2a 0a 2a 2a 20 45 6e 61 62 6c 65 20 53 51 4c 49  *.** Enable SQLI
3490: 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49  TE_ENABLE_EXPLAI
34a0: 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69 66 20 53 51  N_COMMENTS if SQ
34b0: 4c 49 54 45 5f 44 45 42 55 47 20 69 73 20 74 75  LITE_DEBUG is tu
34c0: 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66 20  rned on..*/.#if 
34d0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
34e0: 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e 5f 43  ENABLE_EXPLAIN_C
34f0: 4f 4d 4d 45 4e 54 53 29 20 26 26 20 64 65 66 69  OMMENTS) && defi
3500: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
3510: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
3520: 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e  E_ENABLE_EXPLAIN
3530: 5f 43 4f 4d 4d 45 4e 54 53 20 31 0a 23 65 6e 64  _COMMENTS 1.#end
3540: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 74 65  if../*.** The te
3550: 73 74 63 61 73 65 28 29 20 6d 61 63 72 6f 20 69  stcase() macro i
3560: 73 20 75 73 65 64 20 74 6f 20 61 69 64 20 69 6e  s used to aid in
3570: 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e   coverage testin
3580: 67 2e 20 20 57 68 65 6e 0a 2a 2a 20 64 6f 69 6e  g.  When.** doin
3590: 67 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69  g coverage testi
35a0: 6e 67 2c 20 74 68 65 20 63 6f 6e 64 69 74 69 6f  ng, the conditio
35b0: 6e 20 69 6e 73 69 64 65 20 74 68 65 20 61 72 67  n inside the arg
35c0: 75 6d 65 6e 74 20 74 6f 0a 2a 2a 20 74 65 73 74  ument to.** test
35d0: 63 61 73 65 28 29 20 6d 75 73 74 20 62 65 20 65  case() must be e
35e0: 76 61 6c 75 61 74 65 64 20 62 6f 74 68 20 74 72  valuated both tr
35f0: 75 65 20 61 6e 64 20 66 61 6c 73 65 20 69 6e 20  ue and false in 
3600: 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67 65 74 20  order to.** get 
3610: 66 75 6c 6c 20 62 72 61 6e 63 68 20 63 6f 76 65  full branch cove
3620: 72 61 67 65 2e 20 20 54 68 65 20 74 65 73 74 63  rage.  The testc
3630: 61 73 65 28 29 20 6d 61 63 72 6f 20 69 73 20 69  ase() macro is i
3640: 6e 73 65 72 74 65 64 0a 2a 2a 20 74 6f 20 68 65  nserted.** to he
3650: 6c 70 20 65 6e 73 75 72 65 20 61 64 65 71 75 61  lp ensure adequa
3660: 74 65 20 74 65 73 74 20 63 6f 76 65 72 61 67 65  te test coverage
3670: 20 69 6e 20 70 6c 61 63 65 73 20 77 68 65 72 65   in places where
3680: 20 73 69 6d 70 6c 65 0a 2a 2a 20 63 6f 6e 64 69   simple.** condi
3690: 74 69 6f 6e 2f 64 65 63 69 73 69 6f 6e 20 63 6f  tion/decision co
36a0: 76 65 72 61 67 65 20 69 73 20 69 6e 61 64 65 71  verage is inadeq
36b0: 75 61 74 65 2e 20 20 46 6f 72 20 65 78 61 6d 70  uate.  For examp
36c0: 6c 65 2c 20 74 65 73 74 63 61 73 65 28 29 0a 2a  le, testcase().*
36d0: 2a 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  * can be used to
36e0: 20 6d 61 6b 65 20 73 75 72 65 20 62 6f 75 6e 64   make sure bound
36f0: 61 72 79 20 76 61 6c 75 65 73 20 61 72 65 20 74  ary values are t
3700: 65 73 74 65 64 2e 20 20 46 6f 72 0a 2a 2a 20 62  ested.  For.** b
3710: 69 74 6d 61 73 6b 20 74 65 73 74 73 2c 20 74 65  itmask tests, te
3720: 73 74 63 61 73 65 28 29 20 63 61 6e 20 62 65 20  stcase() can be 
3730: 75 73 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 72  used to make sur
3740: 65 20 65 61 63 68 20 62 69 74 0a 2a 2a 20 69 73  e each bit.** is
3750: 20 73 69 67 6e 69 66 69 63 61 6e 74 20 61 6e 64   significant and
3760: 20 75 73 65 64 20 61 74 20 6c 65 61 73 74 20 6f   used at least o
3770: 6e 63 65 2e 20 20 4f 6e 20 73 77 69 74 63 68 20  nce.  On switch 
3780: 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a 20 77 68  statements.** wh
3790: 65 72 65 20 6d 75 6c 74 69 70 6c 65 20 63 61 73  ere multiple cas
37a0: 65 73 20 67 6f 20 74 6f 20 74 68 65 20 73 61 6d  es go to the sam
37b0: 65 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 2c  e block of code,
37c0: 20 74 65 73 74 63 61 73 65 28 29 0a 2a 2a 20 63   testcase().** c
37d0: 61 6e 20 69 6e 73 75 72 65 20 74 68 61 74 20 61  an insure that a
37e0: 6c 6c 20 63 61 73 65 73 20 61 72 65 20 65 76 61  ll cases are eva
37f0: 6c 75 61 74 65 64 2e 0a 2a 2a 0a 2a 2f 0a 23 69  luated..**.*/.#i
3800: 66 64 65 66 20 53 51 4c 49 54 45 5f 43 4f 56 45  fdef SQLITE_COVE
3810: 52 41 47 45 5f 54 45 53 54 0a 20 20 76 6f 69 64  RAGE_TEST.  void
3820: 20 73 71 6c 69 74 65 33 43 6f 76 65 72 61 67 65   sqlite3Coverage
3830: 28 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65 20  (int);.# define 
3840: 74 65 73 74 63 61 73 65 28 58 29 20 20 69 66 28  testcase(X)  if(
3850: 20 58 20 29 7b 20 73 71 6c 69 74 65 33 43 6f 76   X ){ sqlite3Cov
3860: 65 72 61 67 65 28 5f 5f 4c 49 4e 45 5f 5f 29 3b  erage(__LINE__);
3870: 20 7d 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   }.#else.# defin
3880: 65 20 74 65 73 74 63 61 73 65 28 58 29 0a 23 65  e testcase(X).#e
3890: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
38a0: 54 45 53 54 4f 4e 4c 59 20 6d 61 63 72 6f 20 69  TESTONLY macro i
38b0: 73 20 75 73 65 64 20 74 6f 20 65 6e 63 6c 6f 73  s used to enclos
38c0: 65 20 76 61 72 69 61 62 6c 65 20 64 65 63 6c 61  e variable decla
38d0: 72 61 74 69 6f 6e 73 20 6f 72 0a 2a 2a 20 6f 74  rations or.** ot
38e0: 68 65 72 20 62 69 74 73 20 6f 66 20 63 6f 64 65  her bits of code
38f0: 20 74 68 61 74 20 61 72 65 20 6e 65 65 64 65 64   that are needed
3900: 20 74 6f 20 73 75 70 70 6f 72 74 20 74 68 65 20   to support the 
3910: 61 72 67 75 6d 65 6e 74 73 0a 2a 2a 20 77 69 74  arguments.** wit
3920: 68 69 6e 20 74 65 73 74 63 61 73 65 28 29 20 61  hin testcase() a
3930: 6e 64 20 61 73 73 65 72 74 28 29 20 6d 61 63 72  nd assert() macr
3940: 6f 73 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  os..*/.#if !defi
3950: 6e 65 64 28 4e 44 45 42 55 47 29 20 7c 7c 20 64  ned(NDEBUG) || d
3960: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 43 4f  efined(SQLITE_CO
3970: 56 45 52 41 47 45 5f 54 45 53 54 29 0a 23 20 64  VERAGE_TEST).# d
3980: 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28 58  efine TESTONLY(X
3990: 29 20 20 58 0a 23 65 6c 73 65 0a 23 20 64 65 66  )  X.#else.# def
39a0: 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28 58 29 0a  ine TESTONLY(X).
39b0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f  #endif../*.** So
39c0: 6d 65 74 69 6d 65 73 20 77 65 20 6e 65 65 64 20  metimes we need 
39d0: 61 20 73 6d 61 6c 6c 20 61 6d 6f 75 6e 74 20 6f  a small amount o
39e0: 66 20 63 6f 64 65 20 73 75 63 68 20 61 73 20 61  f code such as a
39f0: 20 76 61 72 69 61 62 6c 65 20 69 6e 69 74 69 61   variable initia
3a00: 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74 6f 20 73  lization.** to s
3a10: 65 74 75 70 20 66 6f 72 20 61 20 6c 61 74 65 72  etup for a later
3a20: 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
3a30: 65 6e 74 2e 20 20 57 65 20 64 6f 20 6e 6f 74 20  ent.  We do not 
3a40: 77 61 6e 74 20 74 68 69 73 20 63 6f 64 65 20 74  want this code t
3a50: 6f 0a 2a 2a 20 61 70 70 65 61 72 20 77 68 65 6e  o.** appear when
3a60: 20 61 73 73 65 72 74 28 29 20 69 73 20 64 69 73   assert() is dis
3a70: 61 62 6c 65 64 2e 20 20 54 68 65 20 66 6f 6c 6c  abled.  The foll
3a80: 6f 77 69 6e 67 20 6d 61 63 72 6f 20 69 73 20 74  owing macro is t
3a90: 68 65 72 65 66 6f 72 65 0a 2a 2a 20 75 73 65 64  herefore.** used
3aa0: 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74 68 61 74   to contain that
3ab0: 20 73 65 74 75 70 20 63 6f 64 65 2e 20 20 54 68   setup code.  Th
3ac0: 65 20 22 56 56 41 22 20 61 63 72 6f 6e 79 6d 20  e "VVA" acronym 
3ad0: 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 56  stands for.** "V
3ae0: 65 72 69 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c  erification, Val
3af0: 69 64 61 74 69 6f 6e 2c 20 61 6e 64 20 41 63 63  idation, and Acc
3b00: 72 65 64 69 74 61 74 69 6f 6e 22 2e 20 20 49 6e  reditation".  In
3b10: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
3b20: 65 0a 2a 2a 20 63 6f 64 65 20 77 69 74 68 69 6e  e.** code within
3b30: 20 56 56 41 5f 4f 4e 4c 59 28 29 20 77 69 6c 6c   VVA_ONLY() will
3b40: 20 6f 6e 6c 79 20 72 75 6e 20 64 75 72 69 6e 67   only run during
3b50: 20 76 65 72 69 66 69 63 61 74 69 6f 6e 20 70 72   verification pr
3b60: 6f 63 65 73 73 65 73 2e 0a 2a 2f 0a 23 69 66 6e  ocesses..*/.#ifn
3b70: 64 65 66 20 4e 44 45 42 55 47 0a 23 20 64 65 66  def NDEBUG.# def
3b80: 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29 20  ine VVA_ONLY(X) 
3b90: 20 58 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   X.#else.# defin
3ba0: 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29 0a 23 65  e VVA_ONLY(X).#e
3bb0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
3bc0: 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56 45 52  ALWAYS and NEVER
3bd0: 20 6d 61 63 72 6f 73 20 73 75 72 72 6f 75 6e 64   macros surround
3be0: 20 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73   boolean express
3bf0: 69 6f 6e 73 20 77 68 69 63 68 0a 2a 2a 20 61 72  ions which.** ar
3c00: 65 20 69 6e 74 65 6e 64 65 64 20 74 6f 20 61 6c  e intended to al
3c10: 77 61 79 73 20 62 65 20 74 72 75 65 20 6f 72 20  ways be true or 
3c20: 66 61 6c 73 65 2c 20 72 65 73 70 65 63 74 69 76  false, respectiv
3c30: 65 6c 79 2e 20 20 53 75 63 68 0a 2a 2a 20 65 78  ely.  Such.** ex
3c40: 70 72 65 73 73 69 6f 6e 73 20 63 6f 75 6c 64 20  pressions could 
3c50: 62 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  be omitted from 
3c60: 74 68 65 20 63 6f 64 65 20 63 6f 6d 70 6c 65 74  the code complet
3c70: 65 6c 79 2e 20 20 42 75 74 20 74 68 65 79 0a 2a  ely.  But they.*
3c80: 2a 20 61 72 65 20 69 6e 63 6c 75 64 65 64 20 69  * are included i
3c90: 6e 20 61 20 66 65 77 20 63 61 73 65 73 20 69 6e  n a few cases in
3ca0: 20 6f 72 64 65 72 20 74 6f 20 65 6e 68 61 6e 63   order to enhanc
3cb0: 65 20 74 68 65 20 72 65 73 69 6c 69 65 6e 63 65  e the resilience
3cc0: 0a 2a 2a 20 6f 66 20 53 51 4c 69 74 65 20 74 6f  .** of SQLite to
3cd0: 20 75 6e 65 78 70 65 63 74 65 64 20 62 65 68 61   unexpected beha
3ce0: 76 69 6f 72 20 2d 20 74 6f 20 6d 61 6b 65 20 74  vior - to make t
3cf0: 68 65 20 63 6f 64 65 20 22 73 65 6c 66 2d 68 65  he code "self-he
3d00: 61 6c 69 6e 67 22 0a 2a 2a 20 6f 72 20 22 64 75  aling".** or "du
3d10: 63 74 69 6c 65 22 20 72 61 74 68 65 72 20 74 68  ctile" rather th
3d20: 61 6e 20 62 65 69 6e 67 20 22 62 72 69 74 74 6c  an being "brittl
3d30: 65 22 20 61 6e 64 20 63 72 61 73 68 69 6e 67 20  e" and crashing 
3d40: 61 74 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20  at the first.** 
3d50: 68 69 6e 74 20 6f 66 20 75 6e 70 6c 61 6e 6e 65  hint of unplanne
3d60: 64 20 62 65 68 61 76 69 6f 72 2e 0a 2a 2a 0a 2a  d behavior..**.*
3d70: 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  * In other words
3d80: 2c 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56  , ALWAYS and NEV
3d90: 45 52 20 61 72 65 20 61 64 64 65 64 20 66 6f 72  ER are added for
3da0: 20 64 65 66 65 6e 73 69 76 65 20 63 6f 64 65 2e   defensive code.
3db0: 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 64 6f 69 6e  .**.** When doin
3dc0: 67 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69  g coverage testi
3dd0: 6e 67 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45  ng ALWAYS and NE
3de0: 56 45 52 20 61 72 65 20 68 61 72 64 2d 63 6f 64  VER are hard-cod
3df0: 65 64 20 74 6f 0a 2a 2a 20 62 65 20 74 72 75 65  ed to.** be true
3e00: 20 61 6e 64 20 66 61 6c 73 65 20 73 6f 20 74 68   and false so th
3e10: 61 74 20 74 68 65 20 75 6e 72 65 61 63 68 61 62  at the unreachab
3e20: 6c 65 20 63 6f 64 65 20 74 68 65 79 20 73 70 65  le code they spe
3e30: 63 69 66 79 20 77 69 6c 6c 0a 2a 2a 20 6e 6f 74  cify will.** not
3e40: 20 62 65 20 63 6f 75 6e 74 65 64 20 61 73 20 75   be counted as u
3e50: 6e 74 65 73 74 65 64 20 63 6f 64 65 2e 0a 2a 2f  ntested code..*/
3e60: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
3e70: 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53  ITE_COVERAGE_TES
3e80: 54 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51  T) || defined(SQ
3e90: 4c 49 54 45 5f 4d 55 54 41 54 49 4f 4e 5f 54 45  LITE_MUTATION_TE
3ea0: 53 54 29 0a 23 20 64 65 66 69 6e 65 20 41 4c 57  ST).# define ALW
3eb0: 41 59 53 28 58 29 20 20 20 20 20 20 28 31 29 0a  AYS(X)      (1).
3ec0: 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28 58  # define NEVER(X
3ed0: 29 20 20 20 20 20 20 20 28 30 29 0a 23 65 6c 69  )       (0).#eli
3ee0: 66 20 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55  f !defined(NDEBU
3ef0: 47 29 0a 23 20 64 65 66 69 6e 65 20 41 4c 57 41  G).# define ALWA
3f00: 59 53 28 58 29 20 20 20 20 20 20 28 28 58 29 3f  YS(X)      ((X)?
3f10: 31 3a 28 61 73 73 65 72 74 28 30 29 2c 30 29 29  1:(assert(0),0))
3f20: 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28  .# define NEVER(
3f30: 58 29 20 20 20 20 20 20 20 28 28 58 29 3f 28 61  X)       ((X)?(a
3f40: 73 73 65 72 74 28 30 29 2c 31 29 3a 30 29 0a 23  ssert(0),1):0).#
3f50: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 41 4c  else.# define AL
3f60: 57 41 59 53 28 58 29 20 20 20 20 20 20 28 58 29  WAYS(X)      (X)
3f70: 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28  .# define NEVER(
3f80: 58 29 20 20 20 20 20 20 20 28 58 29 0a 23 65 6e  X)       (X).#en
3f90: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65 20  dif../*.** Some 
3fa0: 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 20 61 72 65  conditionals are
3fb0: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 6f   optimizations o
3fc0: 6e 6c 79 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  nly.  In other w
3fd0: 6f 72 64 73 2c 20 69 66 20 74 68 65 0a 2a 2a 20  ords, if the.** 
3fe0: 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 20 61 72 65  conditionals are
3ff0: 20 72 65 70 6c 61 63 65 64 20 77 69 74 68 20 61   replaced with a
4000: 20 63 6f 6e 73 74 61 6e 74 20 31 20 28 74 72 75   constant 1 (tru
4010: 65 29 20 6f 72 20 30 20 28 66 61 6c 73 65 29 20  e) or 0 (false) 
4020: 74 68 65 6e 0a 2a 2a 20 74 68 65 20 63 6f 72 72  then.** the corr
4030: 65 63 74 20 61 6e 73 77 65 72 20 69 73 20 73 74  ect answer is st
4040: 69 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 20 74 68  ill obtained, th
4050: 6f 75 67 68 20 70 65 72 68 61 70 73 20 6e 6f 74  ough perhaps not
4060: 20 61 73 20 71 75 69 63 6b 6c 79 2e 0a 2a 2a 0a   as quickly..**.
4070: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
4080: 20 6d 61 63 72 6f 73 20 6d 61 72 6b 20 74 68 65   macros mark the
4090: 73 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  se optimizations
40a0: 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 2e 0a 2a   conditionals..*
40b0: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
40c0: 4c 49 54 45 5f 4d 55 54 41 54 49 4f 4e 5f 54 45  LITE_MUTATION_TE
40d0: 53 54 29 0a 23 20 64 65 66 69 6e 65 20 4f 4b 5f  ST).# define OK_
40e0: 49 46 5f 41 4c 57 41 59 53 5f 54 52 55 45 28 58  IF_ALWAYS_TRUE(X
40f0: 29 20 20 28 31 29 0a 23 20 64 65 66 69 6e 65 20  )  (1).# define 
4100: 4f 4b 5f 49 46 5f 41 4c 57 41 59 53 5f 46 41 4c  OK_IF_ALWAYS_FAL
4110: 53 45 28 58 29 20 28 30 29 0a 23 65 6c 73 65 0a  SE(X) (0).#else.
4120: 23 20 64 65 66 69 6e 65 20 4f 4b 5f 49 46 5f 41  # define OK_IF_A
4130: 4c 57 41 59 53 5f 54 52 55 45 28 58 29 20 20 28  LWAYS_TRUE(X)  (
4140: 58 29 0a 23 20 64 65 66 69 6e 65 20 4f 4b 5f 49  X).# define OK_I
4150: 46 5f 41 4c 57 41 59 53 5f 46 41 4c 53 45 28 58  F_ALWAYS_FALSE(X
4160: 29 20 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ) (X).#endif../*
4170: 0a 2a 2a 20 53 6f 6d 65 20 6d 61 6c 6c 6f 63 20  .** Some malloc 
4180: 66 61 69 6c 75 72 65 73 20 61 72 65 20 6f 6e 6c  failures are onl
4190: 79 20 70 6f 73 73 69 62 6c 65 20 69 66 20 53 51  y possible if SQ
41a0: 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c 4f  LITE_TEST_REALLO
41b0: 43 5f 53 54 52 45 53 53 20 69 73 0a 2a 2a 20 64  C_STRESS is.** d
41c0: 65 66 69 6e 65 64 2e 20 20 57 65 20 6e 65 65 64  efined.  We need
41d0: 20 74 6f 20 64 65 66 65 6e 64 20 61 67 61 69 6e   to defend again
41e0: 73 74 20 74 68 6f 73 65 20 66 61 69 6c 75 72 65  st those failure
41f0: 73 20 77 68 65 6e 20 74 65 73 74 69 6e 67 20 77  s when testing w
4200: 69 74 68 0a 2a 2a 20 53 51 4c 49 54 45 5f 54 45  ith.** SQLITE_TE
4210: 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53  ST_REALLOC_STRES
4220: 53 2c 20 62 75 74 20 77 65 20 64 6f 6e 27 74 20  S, but we don't 
4230: 77 61 6e 74 20 74 68 65 20 75 6e 72 65 61 63 68  want the unreach
4240: 61 62 6c 65 20 62 72 61 6e 63 68 65 73 0a 2a 2a  able branches.**
4250: 20 64 75 72 69 6e 67 20 61 20 6e 6f 72 6d 61 6c   during a normal
4260: 20 62 75 69 6c 64 2e 20 20 54 68 65 20 66 6f 6c   build.  The fol
4270: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 63 61 6e  lowing macro can
4280: 20 62 65 20 75 73 65 64 20 74 6f 20 64 69 73 61   be used to disa
4290: 62 6c 65 20 74 65 73 74 73 0a 2a 2a 20 74 68 61  ble tests.** tha
42a0: 74 20 61 72 65 20 61 6c 77 61 79 73 20 66 61 6c  t are always fal
42b0: 73 65 20 65 78 63 65 70 74 20 77 68 65 6e 20 53  se except when S
42c0: 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c  QLITE_TEST_REALL
42d0: 4f 43 5f 53 54 52 45 53 53 20 69 73 20 73 65 74  OC_STRESS is set
42e0: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
42f0: 28 53 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41  (SQLITE_TEST_REA
4300: 4c 4c 4f 43 5f 53 54 52 45 53 53 29 0a 23 20 64  LLOC_STRESS).# d
4310: 65 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45  efine ONLY_IF_RE
4320: 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20  ALLOC_STRESS(X) 
4330: 20 28 58 29 0a 23 65 6c 69 66 20 21 64 65 66 69   (X).#elif !defi
4340: 6e 65 64 28 4e 44 45 42 55 47 29 0a 23 20 64 65  ned(NDEBUG).# de
4350: 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45 41  fine ONLY_IF_REA
4360: 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20 20  LLOC_STRESS(X)  
4370: 28 28 58 29 3f 28 61 73 73 65 72 74 28 30 29 2c  ((X)?(assert(0),
4380: 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23 20 64 65  1):0).#else.# de
4390: 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45 41  fine ONLY_IF_REA
43a0: 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20 20  LLOC_STRESS(X)  
43b0: 28 30 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  (0).#endif../*.*
43c0: 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73 20 75  * Declarations u
43d0: 73 65 64 20 66 6f 72 20 74 72 61 63 69 6e 67 20  sed for tracing 
43e0: 74 68 65 20 6f 70 65 72 61 74 69 6e 67 20 73 79  the operating sy
43f0: 73 74 65 6d 20 69 6e 74 65 72 66 61 63 65 73 2e  stem interfaces.
4400: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
4410: 53 51 4c 49 54 45 5f 46 4f 52 43 45 5f 4f 53 5f  SQLITE_FORCE_OS_
4420: 54 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e 65  TRACE) || define
4430: 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c  d(SQLITE_TEST) |
4440: 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64  | \.    (defined
4450: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26  (SQLITE_DEBUG) &
4460: 26 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29  & SQLITE_OS_WIN)
4470: 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71  .  extern int sq
4480: 6c 69 74 65 33 4f 53 54 72 61 63 65 3b 0a 23 20  lite3OSTrace;.# 
4490: 64 65 66 69 6e 65 20 4f 53 54 52 41 43 45 28 58  define OSTRACE(X
44a0: 29 20 20 20 20 20 20 20 20 20 20 69 66 28 20 73  )          if( s
44b0: 71 6c 69 74 65 33 4f 53 54 72 61 63 65 20 29 20  qlite3OSTrace ) 
44c0: 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e  sqlite3DebugPrin
44d0: 74 66 20 58 0a 23 20 64 65 66 69 6e 65 20 53 51  tf X.# define SQ
44e0: 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41  LITE_HAVE_OS_TRA
44f0: 43 45 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  CE.#else.# defin
4500: 65 20 4f 53 54 52 41 43 45 28 58 29 0a 23 20 75  e OSTRACE(X).# u
4510: 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 48 41 56  ndef  SQLITE_HAV
4520: 45 5f 4f 53 5f 54 52 41 43 45 0a 23 65 6e 64 69  E_OS_TRACE.#endi
4530: 66 0a 0a 2f 2a 0a 2a 2a 20 49 73 20 74 68 65 20  f../*.** Is the 
4540: 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28 29  sqlite3ErrName()
4550: 20 66 75 6e 63 74 69 6f 6e 20 6e 65 65 64 65 64   function needed
4560: 20 69 6e 20 74 68 65 20 62 75 69 6c 64 3f 20 20   in the build?  
4570: 43 75 72 72 65 6e 74 6c 79 2c 0a 2a 2a 20 69 74  Currently,.** it
4580: 20 69 73 20 6e 65 65 64 65 64 20 62 79 20 22 6d   is needed by "m
4590: 75 74 65 78 5f 77 33 32 2e 63 22 20 28 77 68 65  utex_w32.c" (whe
45a0: 6e 20 64 65 62 75 67 67 69 6e 67 29 2c 20 22 6f  n debugging), "o
45b0: 73 5f 77 69 6e 2e 63 22 20 28 77 68 65 6e 0a 2a  s_win.c" (when.*
45c0: 2a 20 4f 53 54 52 41 43 45 20 69 73 20 65 6e 61  * OSTRACE is ena
45d0: 62 6c 65 64 29 2c 20 61 6e 64 20 62 79 20 73 65  bled), and by se
45e0: 76 65 72 61 6c 20 22 74 65 73 74 2a 2e 63 22 20  veral "test*.c" 
45f0: 66 69 6c 65 73 20 28 77 68 69 63 68 20 61 72 65  files (which are
4600: 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 20 75 73 69  .** compiled usi
4610: 6e 67 20 53 51 4c 49 54 45 5f 54 45 53 54 29 2e  ng SQLITE_TEST).
4620: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
4630: 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54  SQLITE_HAVE_OS_T
4640: 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e 65 64  RACE) || defined
4650: 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c 7c  (SQLITE_TEST) ||
4660: 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28   \.    (defined(
4670: 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26  SQLITE_DEBUG) &&
4680: 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29 0a   SQLITE_OS_WIN).
4690: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
46a0: 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45 0a 23 65  NEED_ERR_NAME.#e
46b0: 6c 73 65 0a 23 20 75 6e 64 65 66 20 20 53 51 4c  lse.# undef  SQL
46c0: 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d  ITE_NEED_ERR_NAM
46d0: 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  E.#endif../*.** 
46e0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58  SQLITE_ENABLE_EX
46f0: 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69  PLAIN_COMMENTS i
4700: 73 20 69 6e 63 6f 6d 70 61 74 69 62 6c 65 20 77  s incompatible w
4710: 69 74 68 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ith SQLITE_OMIT_
4720: 45 58 50 4c 41 49 4e 0a 2a 2f 0a 23 69 66 64 65  EXPLAIN.*/.#ifde
4730: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58  f SQLITE_OMIT_EX
4740: 50 4c 41 49 4e 0a 23 20 75 6e 64 65 66 20 53 51  PLAIN.# undef SQ
4750: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c  LITE_ENABLE_EXPL
4760: 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 0a 23 65 6e  AIN_COMMENTS.#en
4770: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  dif../*.** Retur
4780: 6e 20 74 72 75 65 20 28 6e 6f 6e 2d 7a 65 72 6f  n true (non-zero
4790: 29 20 69 66 20 74 68 65 20 69 6e 70 75 74 20 69  ) if the input i
47a0: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61  s an integer tha
47b0: 74 20 69 73 20 74 6f 6f 20 6c 61 72 67 65 0a 2a  t is too large.*
47c0: 2a 20 74 6f 20 66 69 74 20 69 6e 20 33 32 2d 62  * to fit in 32-b
47d0: 69 74 73 2e 20 20 54 68 69 73 20 6d 61 63 72 6f  its.  This macro
47e0: 20 69 73 20 75 73 65 64 20 69 6e 73 69 64 65 20   is used inside 
47f0: 6f 66 20 76 61 72 69 6f 75 73 20 74 65 73 74 63  of various testc
4800: 61 73 65 28 29 0a 2a 2a 20 6d 61 63 72 6f 73 20  ase().** macros 
4810: 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 77  to verify that w
4820: 65 20 68 61 76 65 20 74 65 73 74 65 64 20 53 51  e have tested SQ
4830: 4c 69 74 65 20 66 6f 72 20 6c 61 72 67 65 2d 66  Lite for large-f
4840: 69 6c 65 20 73 75 70 70 6f 72 74 2e 0a 2a 2f 0a  ile support..*/.
4850: 23 64 65 66 69 6e 65 20 49 53 5f 42 49 47 5f 49  #define IS_BIG_I
4860: 4e 54 28 58 29 20 20 28 28 28 58 29 26 7e 28 69  NT(X)  (((X)&~(i
4870: 36 34 29 30 78 66 66 66 66 66 66 66 66 29 21 3d  64)0xffffffff)!=
4880: 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61  0)../*.** The ma
4890: 63 72 6f 20 75 6e 6c 69 6b 65 6c 79 28 29 20 69  cro unlikely() i
48a0: 73 20 61 20 68 69 6e 74 20 74 68 61 74 20 73 75  s a hint that su
48b0: 72 72 6f 75 6e 64 73 20 61 20 62 6f 6f 6c 65 61  rrounds a boolea
48c0: 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 20  n.** expression 
48d0: 74 68 61 74 20 69 73 20 75 73 75 61 6c 6c 79 20  that is usually 
48e0: 66 61 6c 73 65 2e 20 20 4d 61 63 72 6f 20 6c 69  false.  Macro li
48f0: 6b 65 6c 79 28 29 20 73 75 72 72 6f 75 6e 64 73  kely() surrounds
4900: 0a 2a 2a 20 61 20 62 6f 6f 6c 65 61 6e 20 65 78  .** a boolean ex
4910: 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73  pression that is
4920: 20 75 73 75 61 6c 6c 79 20 74 72 75 65 2e 20 20   usually true.  
4930: 54 68 65 73 65 20 68 69 6e 74 73 20 63 6f 75 6c  These hints coul
4940: 64 2c 0a 2a 2a 20 69 6e 20 74 68 65 6f 72 79 2c  d,.** in theory,
4950: 20 62 65 20 75 73 65 64 20 62 79 20 74 68 65 20   be used by the 
4960: 63 6f 6d 70 69 6c 65 72 20 74 6f 20 67 65 6e 65  compiler to gene
4970: 72 61 74 65 20 62 65 74 74 65 72 20 63 6f 64 65  rate better code
4980: 2c 20 62 75 74 0a 2a 2a 20 63 75 72 72 65 6e 74  , but.** current
4990: 6c 79 20 74 68 65 79 20 61 72 65 20 6a 75 73 74  ly they are just
49a0: 20 63 6f 6d 6d 65 6e 74 73 20 66 6f 72 20 68 75   comments for hu
49b0: 6d 61 6e 20 72 65 61 64 65 72 73 2e 0a 2a 2f 0a  man readers..*/.
49c0: 23 64 65 66 69 6e 65 20 6c 69 6b 65 6c 79 28 58  #define likely(X
49d0: 29 20 20 20 20 28 58 29 0a 23 64 65 66 69 6e 65  )    (X).#define
49e0: 20 75 6e 6c 69 6b 65 6c 79 28 58 29 20 20 28 58   unlikely(X)  (X
49f0: 29 0a 0a 23 69 6e 63 6c 75 64 65 20 22 68 61 73  )..#include "has
4a00: 68 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70  h.h".#include "p
4a10: 61 72 73 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65  arse.h".#include
4a20: 20 3c 73 74 64 69 6f 2e 68 3e 0a 23 69 6e 63 6c   <stdio.h>.#incl
4a30: 75 64 65 20 3c 73 74 64 6c 69 62 2e 68 3e 0a 23  ude <stdlib.h>.#
4a40: 69 6e 63 6c 75 64 65 20 3c 73 74 72 69 6e 67 2e  include <string.
4a50: 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 61 73 73  h>.#include <ass
4a60: 65 72 74 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20  ert.h>.#include 
4a70: 3c 73 74 64 64 65 66 2e 68 3e 0a 0a 2f 2a 0a 2a  <stddef.h>../*.*
4a80: 2a 20 55 73 65 20 61 20 6d 61 63 72 6f 20 74 6f  * Use a macro to
4a90: 20 72 65 70 6c 61 63 65 20 6d 65 6d 63 70 79 28   replace memcpy(
4aa0: 29 20 69 66 20 63 6f 6d 70 69 6c 65 64 20 77 69  ) if compiled wi
4ab0: 74 68 20 53 51 4c 49 54 45 5f 49 4e 4c 49 4e 45  th SQLITE_INLINE
4ac0: 5f 4d 45 4d 43 50 59 2e 0a 2a 2a 20 54 68 69 73  _MEMCPY..** This
4ad0: 20 61 6c 6c 6f 77 73 20 62 65 74 74 65 72 20 6d   allows better m
4ae0: 65 61 73 75 72 65 6d 65 6e 74 73 20 6f 66 20 77  easurements of w
4af0: 68 65 72 65 20 6d 65 6d 63 70 79 28 29 20 69 73  here memcpy() is
4b00: 20 75 73 65 64 20 77 68 65 6e 20 72 75 6e 6e 69   used when runni
4b10: 6e 67 0a 2a 2a 20 63 61 63 68 65 67 72 69 6e 64  ng.** cachegrind
4b20: 2e 20 20 42 75 74 20 74 68 69 73 20 6d 61 63 72  .  But this macr
4b30: 6f 20 76 65 72 73 69 6f 6e 20 6f 66 20 6d 65 6d  o version of mem
4b40: 63 70 79 28 29 20 69 73 20 76 65 72 79 20 73 6c  cpy() is very sl
4b50: 6f 77 20 73 6f 20 69 74 0a 2a 2a 20 73 68 6f 75  ow so it.** shou
4b60: 6c 64 20 6e 6f 74 20 62 65 20 75 73 65 64 20 69  ld not be used i
4b70: 6e 20 70 72 6f 64 75 63 74 69 6f 6e 2e 20 20 54  n production.  T
4b80: 68 69 73 20 69 73 20 61 20 70 65 72 66 6f 72 6d  his is a perform
4b90: 61 6e 63 65 20 6d 65 61 73 75 72 65 6d 65 6e 74  ance measurement
4ba0: 0a 2a 2a 20 68 61 63 6b 20 6f 6e 6c 79 2e 0a 2a  .** hack only..*
4bb0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
4bc0: 49 4e 4c 49 4e 45 5f 4d 45 4d 43 50 59 0a 23 20  INLINE_MEMCPY.# 
4bd0: 64 65 66 69 6e 65 20 6d 65 6d 63 70 79 28 44 2c  define memcpy(D,
4be0: 53 2c 4e 29 20 7b 63 68 61 72 2a 78 78 64 3d 28  S,N) {char*xxd=(
4bf0: 63 68 61 72 2a 29 28 44 29 3b 63 6f 6e 73 74 20  char*)(D);const 
4c00: 63 68 61 72 2a 78 78 73 3d 28 63 6f 6e 73 74 20  char*xxs=(const 
4c10: 63 68 61 72 2a 29 28 53 29 3b 5c 0a 20 20 20 20  char*)(S);\.    
4c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4c30: 20 20 20 20 69 6e 74 20 78 78 6e 3d 28 4e 29 3b      int xxn=(N);
4c40: 77 68 69 6c 65 28 78 78 6e 2d 2d 3e 30 29 2a 28  while(xxn-->0)*(
4c50: 78 78 64 2b 2b 29 3d 2a 28 78 78 73 2b 2b 29 3b  xxd++)=*(xxs++);
4c60: 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  }.#endif../*.** 
4c70: 49 66 20 63 6f 6d 70 69 6c 69 6e 67 20 66 6f 72  If compiling for
4c80: 20 61 20 70 72 6f 63 65 73 73 6f 72 20 74 68 61   a processor tha
4c90: 74 20 6c 61 63 6b 73 20 66 6c 6f 61 74 69 6e 67  t lacks floating
4ca0: 20 70 6f 69 6e 74 20 73 75 70 70 6f 72 74 2c 0a   point support,.
4cb0: 2a 2a 20 73 75 62 73 74 69 74 75 74 65 20 69 6e  ** substitute in
4cc0: 74 65 67 65 72 20 66 6f 72 20 66 6c 6f 61 74 69  teger for floati
4cd0: 6e 67 2d 70 6f 69 6e 74 0a 2a 2f 0a 23 69 66 64  ng-point.*/.#ifd
4ce0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
4cf0: 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 23 20  LOATING_POINT.# 
4d00: 64 65 66 69 6e 65 20 64 6f 75 62 6c 65 20 73 71  define double sq
4d10: 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 64 65 66  lite_int64.# def
4d20: 69 6e 65 20 66 6c 6f 61 74 20 73 71 6c 69 74 65  ine float sqlite
4d30: 5f 69 6e 74 36 34 0a 23 20 64 65 66 69 6e 65 20  _int64.# define 
4d40: 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 20  LONGDOUBLE_TYPE 
4d50: 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 69  sqlite_int64.# i
4d60: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47  fndef SQLITE_BIG
4d70: 5f 44 42 4c 0a 23 20 20 20 64 65 66 69 6e 65 20  _DBL.#   define 
4d80: 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 20 28  SQLITE_BIG_DBL (
4d90: 28 28 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 29  ((sqlite3_int64)
4da0: 31 29 3c 3c 35 30 29 0a 23 20 65 6e 64 69 66 0a  1)<<50).# endif.
4db0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
4dc0: 4f 4d 49 54 5f 44 41 54 45 54 49 4d 45 5f 46 55  OMIT_DATETIME_FU
4dd0: 4e 43 53 20 31 0a 23 20 64 65 66 69 6e 65 20 53  NCS 1.# define S
4de0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45  QLITE_OMIT_TRACE
4df0: 20 31 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54   1.# undef SQLIT
4e00: 45 5f 4d 49 58 45 44 5f 45 4e 44 49 41 4e 5f 36  E_MIXED_ENDIAN_6
4e10: 34 42 49 54 5f 46 4c 4f 41 54 0a 23 20 75 6e 64  4BIT_FLOAT.# und
4e20: 65 66 20 53 51 4c 49 54 45 5f 48 41 56 45 5f 49  ef SQLITE_HAVE_I
4e30: 53 4e 41 4e 0a 23 65 6e 64 69 66 0a 23 69 66 6e  SNAN.#endif.#ifn
4e40: 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47 5f 44  def SQLITE_BIG_D
4e50: 42 4c 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  BL.# define SQLI
4e60: 54 45 5f 42 49 47 5f 44 42 4c 20 28 31 65 39 39  TE_BIG_DBL (1e99
4e70: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
4e80: 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69 73 20 73  OMIT_TEMPDB is s
4e90: 65 74 20 74 6f 20 31 20 69 66 20 53 51 4c 49 54  et to 1 if SQLIT
4ea0: 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69 73  E_OMIT_TEMPDB is
4eb0: 20 64 65 66 69 6e 65 64 2c 20 6f 72 20 30 0a 2a   defined, or 0.*
4ec0: 2a 20 61 66 74 65 72 77 61 72 64 2e 20 48 61 76  * afterward. Hav
4ed0: 69 6e 67 20 74 68 69 73 20 6d 61 63 72 6f 20 61  ing this macro a
4ee0: 6c 6c 6f 77 73 20 75 73 20 74 6f 20 63 61 75 73  llows us to caus
4ef0: 65 20 74 68 65 20 43 20 63 6f 6d 70 69 6c 65 72  e the C compiler
4f00: 0a 2a 2a 20 74 6f 20 6f 6d 69 74 20 63 6f 64 65  .** to omit code
4f10: 20 75 73 65 64 20 62 79 20 54 45 4d 50 20 74 61   used by TEMP ta
4f20: 62 6c 65 73 20 77 69 74 68 6f 75 74 20 6d 65 73  bles without mes
4f30: 73 79 20 23 69 66 6e 64 65 66 20 73 74 61 74 65  sy #ifndef state
4f40: 6d 65 6e 74 73 2e 0a 2a 2f 0a 23 69 66 64 65 66  ments..*/.#ifdef
4f50: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 4d   SQLITE_OMIT_TEM
4f60: 50 44 42 0a 23 64 65 66 69 6e 65 20 4f 4d 49 54  PDB.#define OMIT
4f70: 5f 54 45 4d 50 44 42 20 31 0a 23 65 6c 73 65 0a  _TEMPDB 1.#else.
4f80: 23 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d  #define OMIT_TEM
4f90: 50 44 42 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  PDB 0.#endif../*
4fa0: 0a 2a 2a 20 54 68 65 20 22 66 69 6c 65 20 66 6f  .** The "file fo
4fb0: 72 6d 61 74 22 20 6e 75 6d 62 65 72 20 69 73 20  rmat" number is 
4fc0: 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61 74 20  an integer that 
4fd0: 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 77  is incremented w
4fe0: 68 65 6e 65 76 65 72 0a 2a 2a 20 74 68 65 20 56  henever.** the V
4ff0: 44 42 45 2d 6c 65 76 65 6c 20 66 69 6c 65 20 66  DBE-level file f
5000: 6f 72 6d 61 74 20 63 68 61 6e 67 65 73 2e 20 20  ormat changes.  
5010: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
5020: 63 72 6f 73 20 64 65 66 69 6e 65 20 74 68 65 0a  cros define the.
5030: 2a 2a 20 74 68 65 20 64 65 66 61 75 6c 74 20 66  ** the default f
5040: 69 6c 65 20 66 6f 72 6d 61 74 20 66 6f 72 20 6e  ile format for n
5050: 65 77 20 64 61 74 61 62 61 73 65 73 20 61 6e 64  ew databases and
5060: 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 66 69 6c   the maximum fil
5070: 65 20 66 6f 72 6d 61 74 0a 2a 2a 20 74 68 61 74  e format.** that
5080: 20 74 68 65 20 6c 69 62 72 61 72 79 20 63 61 6e   the library can
5090: 20 72 65 61 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e   read..*/.#defin
50a0: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 46 49 4c  e SQLITE_MAX_FIL
50b0: 45 5f 46 4f 52 4d 41 54 20 34 0a 23 69 66 6e 64  E_FORMAT 4.#ifnd
50c0: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
50d0: 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 0a 23 20  T_FILE_FORMAT.# 
50e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
50f0: 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41  FAULT_FILE_FORMA
5100: 54 20 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  T 4.#endif../*.*
5110: 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68 65 74  * Determine whet
5120: 68 65 72 20 74 72 69 67 67 65 72 73 20 61 72 65  her triggers are
5130: 20 72 65 63 75 72 73 69 76 65 20 62 79 20 64 65   recursive by de
5140: 66 61 75 6c 74 2e 20 20 54 68 69 73 20 63 61 6e  fault.  This can
5150: 20 62 65 0a 2a 2a 20 63 68 61 6e 67 65 64 20 61   be.** changed a
5160: 74 20 72 75 6e 2d 74 69 6d 65 20 75 73 69 6e 67  t run-time using
5170: 20 61 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 23 69   a pragma..*/.#i
5180: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46  fndef SQLITE_DEF
5190: 41 55 4c 54 5f 52 45 43 55 52 53 49 56 45 5f 54  AULT_RECURSIVE_T
51a0: 52 49 47 47 45 52 53 0a 23 20 64 65 66 69 6e 65  RIGGERS.# define
51b0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
51c0: 52 45 43 55 52 53 49 56 45 5f 54 52 49 47 47 45  RECURSIVE_TRIGGE
51d0: 52 53 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  RS 0.#endif../*.
51e0: 2a 2a 20 50 72 6f 76 69 64 65 20 61 20 64 65 66  ** Provide a def
51f0: 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72 20 53  ault value for S
5200: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
5210: 20 69 6e 20 63 61 73 65 20 69 74 20 69 73 20 6e   in case it is n
5220: 6f 74 20 73 70 65 63 69 66 69 65 64 0a 2a 2a 20  ot specified.** 
5230: 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c  on the command-l
5240: 69 6e 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ine.*/.#ifndef S
5250: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
5260: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
5270: 5f 54 45 4d 50 5f 53 54 4f 52 45 20 31 0a 23 65  _TEMP_STORE 1.#e
5280: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 6e  ndif../*.** If n
5290: 6f 20 76 61 6c 75 65 20 68 61 73 20 62 65 65 6e  o value has been
52a0: 20 70 72 6f 76 69 64 65 64 20 66 6f 72 20 53 51   provided for SQ
52b0: 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f  LITE_MAX_WORKER_
52c0: 54 48 52 45 41 44 53 2c 20 6f 72 20 69 66 0a 2a  THREADS, or if.*
52d0: 2a 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54  * SQLITE_TEMP_ST
52e0: 4f 52 45 20 69 73 20 73 65 74 20 74 6f 20 33 20  ORE is set to 3 
52f0: 28 6e 65 76 65 72 20 75 73 65 20 74 65 6d 70 6f  (never use tempo
5300: 72 61 72 79 20 66 69 6c 65 73 29 2c 20 73 65 74  rary files), set
5310: 20 69 74 0a 2a 2a 20 74 6f 20 7a 65 72 6f 2e 0a   it.** to zero..
5320: 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 54 45  */.#if SQLITE_TE
5330: 4d 50 5f 53 54 4f 52 45 3d 3d 33 20 7c 7c 20 53  MP_STORE==3 || S
5340: 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45  QLITE_THREADSAFE
5350: 3d 3d 30 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  ==0.# undef SQLI
5360: 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48  TE_MAX_WORKER_TH
5370: 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53  READS.# define S
5380: 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52  QLITE_MAX_WORKER
5390: 5f 54 48 52 45 41 44 53 20 30 0a 23 65 6e 64 69  _THREADS 0.#endi
53a0: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
53b0: 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
53c0: 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ADS.# define SQL
53d0: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
53e0: 48 52 45 41 44 53 20 38 0a 23 65 6e 64 69 66 0a  HREADS 8.#endif.
53f0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44  #ifndef SQLITE_D
5400: 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48  EFAULT_WORKER_TH
5410: 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53  READS.# define S
5420: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f  QLITE_DEFAULT_WO
5430: 52 4b 45 52 5f 54 48 52 45 41 44 53 20 30 0a 23  RKER_THREADS 0.#
5440: 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49 54 45  endif.#if SQLITE
5450: 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f  _DEFAULT_WORKER_
5460: 54 48 52 45 41 44 53 3e 53 51 4c 49 54 45 5f 4d  THREADS>SQLITE_M
5470: 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  AX_WORKER_THREAD
5480: 53 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  S.# undef SQLITE
5490: 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
54a0: 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ADS.# define SQL
54b0: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
54c0: 48 52 45 41 44 53 20 53 51 4c 49 54 45 5f 44 45  HREADS SQLITE_DE
54d0: 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52  FAULT_WORKER_THR
54e0: 45 41 44 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  EADS.#endif../*.
54f0: 2a 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20 69  ** The default i
5500: 6e 69 74 69 61 6c 20 61 6c 6c 6f 63 61 74 69 6f  nitial allocatio
5510: 6e 20 66 6f 72 20 74 68 65 20 70 61 67 65 63 61  n for the pageca
5520: 63 68 65 20 77 68 65 6e 20 75 73 69 6e 67 20 73  che when using s
5530: 65 70 61 72 61 74 65 0a 2a 2a 20 70 61 67 65 63  eparate.** pagec
5540: 61 63 68 65 73 20 66 6f 72 20 65 61 63 68 20 64  aches for each d
5550: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
5560: 6f 6e 2e 20 20 41 20 70 6f 73 69 74 69 76 65 20  on.  A positive 
5570: 6e 75 6d 62 65 72 20 69 73 20 74 68 65 0a 2a 2a  number is the.**
5580: 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
5590: 2e 20 20 41 20 6e 65 67 61 74 69 76 65 20 6e 75  .  A negative nu
55a0: 6d 62 65 72 20 4e 20 74 72 61 6e 73 6c 61 74 69  mber N translati
55b0: 6f 6e 73 20 6d 65 61 6e 73 20 74 68 61 74 20 61  ons means that a
55c0: 20 62 75 66 66 65 72 0a 2a 2a 20 6f 66 20 2d 31   buffer.** of -1
55d0: 30 32 34 2a 4e 20 62 79 74 65 73 20 69 73 20 61  024*N bytes is a
55e0: 6c 6c 6f 63 61 74 65 64 20 61 6e 64 20 75 73 65  llocated and use
55f0: 64 20 66 6f 72 20 61 73 20 6d 61 6e 79 20 70 61  d for as many pa
5600: 67 65 73 20 61 73 20 69 74 20 77 69 6c 6c 20 68  ges as it will h
5610: 6f 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64  old..**.** The d
5620: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20  efault value of 
5630: 22 32 30 22 20 77 61 73 20 63 68 6f 6f 73 65 6e  "20" was choosen
5640: 20 74 6f 20 6d 69 6e 69 6d 69 7a 65 20 74 68 65   to minimize the
5650: 20 72 75 6e 2d 74 69 6d 65 20 6f 66 20 74 68 65   run-time of the
5660: 0a 2a 2a 20 73 70 65 65 64 74 65 73 74 31 20 74  .** speedtest1 t
5670: 65 73 74 20 70 72 6f 67 72 61 6d 20 77 69 74 68  est program with
5680: 20 6f 70 74 69 6f 6e 73 3a 20 2d 2d 73 68 72 69   options: --shri
5690: 6e 6b 2d 6d 65 6d 6f 72 79 20 2d 2d 72 65 70 72  nk-memory --repr
56a0: 65 70 61 72 65 0a 2a 2f 0a 23 69 66 6e 64 65 66  epare.*/.#ifndef
56b0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
56c0: 50 43 41 43 48 45 5f 49 4e 49 54 53 5a 0a 23 20  PCACHE_INITSZ.# 
56d0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
56e0: 46 41 55 4c 54 5f 50 43 41 43 48 45 5f 49 4e 49  FAULT_PCACHE_INI
56f0: 54 53 5a 20 32 30 0a 23 65 6e 64 69 66 0a 0a 2f  TSZ 20.#endif../
5700: 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 70 69 6c 65  *.** The compile
5710: 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 53 51  -time options SQ
5720: 4c 49 54 45 5f 4d 4d 41 50 5f 52 45 41 44 57 52  LITE_MMAP_READWR
5730: 49 54 45 20 61 6e 64 20 0a 2a 2a 20 53 51 4c 49  ITE and .** SQLI
5740: 54 45 5f 45 4e 41 42 4c 45 5f 42 41 54 43 48 5f  TE_ENABLE_BATCH_
5750: 41 54 4f 4d 49 43 5f 57 52 49 54 45 20 61 72 65  ATOMIC_WRITE are
5760: 20 6e 6f 74 20 63 6f 6d 70 61 74 69 62 6c 65 20   not compatible 
5770: 77 69 74 68 20 6f 6e 65 20 61 6e 6f 74 68 65 72  with one another
5780: 2e 0a 2a 2a 20 59 6f 75 20 6d 75 73 74 20 63 68  ..** You must ch
5790: 6f 6f 73 65 20 6f 6e 65 20 6f 72 20 74 68 65 20  oose one or the 
57a0: 6f 74 68 65 72 20 28 6f 72 20 6e 65 69 74 68 65  other (or neithe
57b0: 72 29 20 62 75 74 20 6e 6f 74 20 62 6f 74 68 2e  r) but not both.
57c0: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
57d0: 53 51 4c 49 54 45 5f 4d 4d 41 50 5f 52 45 41 44  SQLITE_MMAP_READ
57e0: 57 52 49 54 45 29 20 26 26 20 64 65 66 69 6e 65  WRITE) && define
57f0: 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
5800: 42 41 54 43 48 5f 41 54 4f 4d 49 43 5f 57 52 49  BATCH_ATOMIC_WRI
5810: 54 45 29 0a 23 65 72 72 6f 72 20 43 61 6e 6e 6f  TE).#error Canno
5820: 74 20 75 73 65 20 62 6f 74 68 20 53 51 4c 49 54  t use both SQLIT
5830: 45 5f 4d 4d 41 50 5f 52 45 41 44 57 52 49 54 45  E_MMAP_READWRITE
5840: 20 61 6e 64 20 53 51 4c 49 54 45 5f 45 4e 41 42   and SQLITE_ENAB
5850: 4c 45 5f 42 41 54 43 48 5f 41 54 4f 4d 49 43 5f  LE_BATCH_ATOMIC_
5860: 57 52 49 54 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a  WRITE.#endif../*
5870: 0a 2a 2a 20 47 43 43 20 64 6f 65 73 20 6e 6f 74  .** GCC does not
5880: 20 64 65 66 69 6e 65 20 74 68 65 20 6f 66 66 73   define the offs
5890: 65 74 6f 66 28 29 20 6d 61 63 72 6f 20 73 6f 20  etof() macro so 
58a0: 77 65 27 6c 6c 20 68 61 76 65 20 74 6f 20 64 6f  we'll have to do
58b0: 20 69 74 0a 2a 2a 20 6f 75 72 73 65 6c 76 65 73   it.** ourselves
58c0: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 6f 66 66  ..*/.#ifndef off
58d0: 73 65 74 6f 66 0a 23 64 65 66 69 6e 65 20 6f 66  setof.#define of
58e0: 66 73 65 74 6f 66 28 53 54 52 55 43 54 55 52 45  fsetof(STRUCTURE
58f0: 2c 46 49 45 4c 44 29 20 28 28 69 6e 74 29 28 28  ,FIELD) ((int)((
5900: 63 68 61 72 2a 29 26 28 28 53 54 52 55 43 54 55  char*)&((STRUCTU
5910: 52 45 2a 29 30 29 2d 3e 46 49 45 4c 44 29 29 0a  RE*)0)->FIELD)).
5920: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61  #endif../*.** Ma
5930: 63 72 6f 73 20 74 6f 20 63 6f 6d 70 75 74 65 20  cros to compute 
5940: 6d 69 6e 69 6d 75 6d 20 61 6e 64 20 6d 61 78 69  minimum and maxi
5950: 6d 75 6d 20 6f 66 20 74 77 6f 20 6e 75 6d 62 65  mum of two numbe
5960: 72 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 4d  rs..*/.#ifndef M
5970: 49 4e 0a 23 20 64 65 66 69 6e 65 20 4d 49 4e 28  IN.# define MIN(
5980: 41 2c 42 29 20 28 28 41 29 3c 28 42 29 3f 28 41  A,B) ((A)<(B)?(A
5990: 29 3a 28 42 29 29 0a 23 65 6e 64 69 66 0a 23 69  ):(B)).#endif.#i
59a0: 66 6e 64 65 66 20 4d 41 58 0a 23 20 64 65 66 69  fndef MAX.# defi
59b0: 6e 65 20 4d 41 58 28 41 2c 42 29 20 28 28 41 29  ne MAX(A,B) ((A)
59c0: 3e 28 42 29 3f 28 41 29 3a 28 42 29 29 0a 23 65  >(B)?(A):(B)).#e
59d0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 77 61 70  ndif../*.** Swap
59e0: 20 74 77 6f 20 6f 62 6a 65 63 74 73 20 6f 66 20   two objects of 
59f0: 74 79 70 65 20 54 59 50 45 2e 0a 2a 2f 0a 23 64  type TYPE..*/.#d
5a00: 65 66 69 6e 65 20 53 57 41 50 28 54 59 50 45 2c  efine SWAP(TYPE,
5a10: 41 2c 42 29 20 7b 54 59 50 45 20 74 3d 41 3b 20  A,B) {TYPE t=A; 
5a20: 41 3d 42 3b 20 42 3d 74 3b 7d 0a 0a 2f 2a 0a 2a  A=B; B=t;}../*.*
5a30: 2a 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69  * Check to see i
5a40: 66 20 74 68 69 73 20 6d 61 63 68 69 6e 65 20 75  f this machine u
5a50: 73 65 73 20 45 42 43 44 49 43 2e 20 20 28 59 65  ses EBCDIC.  (Ye
5a60: 73 2c 20 62 65 6c 69 65 76 65 20 69 74 20 6f 72  s, believe it or
5a70: 0a 2a 2a 20 6e 6f 74 2c 20 74 68 65 72 65 20 61  .** not, there a
5a80: 72 65 20 73 74 69 6c 6c 20 6d 61 63 68 69 6e 65  re still machine
5a90: 73 20 6f 75 74 20 74 68 65 72 65 20 74 68 61 74  s out there that
5aa0: 20 75 73 65 20 45 42 43 44 49 43 2e 29 0a 2a 2f   use EBCDIC.).*/
5ab0: 0a 23 69 66 20 27 41 27 20 3d 3d 20 27 5c 33 30  .#if 'A' == '\30
5ac0: 31 27 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  1'.# define SQLI
5ad0: 54 45 5f 45 42 43 44 49 43 20 31 0a 23 65 6c 73  TE_EBCDIC 1.#els
5ae0: 65 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  e.# define SQLIT
5af0: 45 5f 41 53 43 49 49 20 31 0a 23 65 6e 64 69 66  E_ASCII 1.#endif
5b00: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 67 65 72 73  ../*.** Integers
5b10: 20 6f 66 20 6b 6e 6f 77 6e 20 73 69 7a 65 73 2e   of known sizes.
5b20: 20 20 54 68 65 73 65 20 74 79 70 65 64 65 66 73    These typedefs
5b30: 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20 66 6f   might change fo
5b40: 72 20 61 72 63 68 69 74 65 63 74 75 72 65 73 0a  r architectures.
5b50: 2a 2a 20 77 68 65 72 65 20 74 68 65 20 73 69 7a  ** where the siz
5b60: 65 73 20 76 65 72 79 2e 20 20 50 72 65 70 72 6f  es very.  Prepro
5b70: 63 65 73 73 6f 72 20 6d 61 63 72 6f 73 20 61 72  cessor macros ar
5b80: 65 20 61 76 61 69 6c 61 62 6c 65 20 73 6f 20 74  e available so t
5b90: 68 61 74 20 74 68 65 0a 2a 2a 20 74 79 70 65 73  hat the.** types
5ba0: 20 63 61 6e 20 62 65 20 63 6f 6e 76 65 6e 69 65   can be convenie
5bb0: 6e 74 6c 79 20 72 65 64 65 66 69 6e 65 64 20 61  ntly redefined a
5bc0: 74 20 63 6f 6d 70 69 6c 65 2d 74 79 70 65 2e 20  t compile-type. 
5bd0: 20 4c 69 6b 65 20 74 68 69 73 3a 0a 2a 2a 0a 2a   Like this:.**.*
5be0: 2a 20 20 20 20 20 20 20 20 20 63 63 20 27 2d 44  *         cc '-D
5bf0: 55 49 4e 54 50 54 52 5f 54 59 50 45 3d 6c 6f 6e  UINTPTR_TYPE=lon
5c00: 67 20 6c 6f 6e 67 20 69 6e 74 27 20 2e 2e 2e 0a  g long int' ....
5c10: 2a 2f 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 33  */.#ifndef UINT3
5c20: 32 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48  2_TYPE.# ifdef H
5c30: 41 56 45 5f 55 49 4e 54 33 32 5f 54 0a 23 20 20  AVE_UINT32_T.#  
5c40: 64 65 66 69 6e 65 20 55 49 4e 54 33 32 5f 54 59  define UINT32_TY
5c50: 50 45 20 75 69 6e 74 33 32 5f 74 0a 23 20 65 6c  PE uint32_t.# el
5c60: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  se.#  define UIN
5c70: 54 33 32 5f 54 59 50 45 20 75 6e 73 69 67 6e 65  T32_TYPE unsigne
5c80: 64 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65  d int.# endif.#e
5c90: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 55 49 4e  ndif.#ifndef UIN
5ca0: 54 31 36 5f 54 59 50 45 0a 23 20 69 66 64 65 66  T16_TYPE.# ifdef
5cb0: 20 48 41 56 45 5f 55 49 4e 54 31 36 5f 54 0a 23   HAVE_UINT16_T.#
5cc0: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 31 36 5f    define UINT16_
5cd0: 54 59 50 45 20 75 69 6e 74 31 36 5f 74 0a 23 20  TYPE uint16_t.# 
5ce0: 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55  else.#  define U
5cf0: 49 4e 54 31 36 5f 54 59 50 45 20 75 6e 73 69 67  INT16_TYPE unsig
5d00: 6e 65 64 20 73 68 6f 72 74 20 69 6e 74 0a 23 20  ned short int.# 
5d10: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66  endif.#endif.#if
5d20: 6e 64 65 66 20 49 4e 54 31 36 5f 54 59 50 45 0a  ndef INT16_TYPE.
5d30: 23 20 69 66 64 65 66 20 48 41 56 45 5f 49 4e 54  # ifdef HAVE_INT
5d40: 31 36 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 49  16_T.#  define I
5d50: 4e 54 31 36 5f 54 59 50 45 20 69 6e 74 31 36 5f  NT16_TYPE int16_
5d60: 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  t.# else.#  defi
5d70: 6e 65 20 49 4e 54 31 36 5f 54 59 50 45 20 73 68  ne INT16_TYPE sh
5d80: 6f 72 74 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a  ort int.# endif.
5d90: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 55  #endif.#ifndef U
5da0: 49 4e 54 38 5f 54 59 50 45 0a 23 20 69 66 64 65  INT8_TYPE.# ifde
5db0: 66 20 48 41 56 45 5f 55 49 4e 54 38 5f 54 0a 23  f HAVE_UINT8_T.#
5dc0: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 38 5f 54    define UINT8_T
5dd0: 59 50 45 20 75 69 6e 74 38 5f 74 0a 23 20 65 6c  YPE uint8_t.# el
5de0: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  se.#  define UIN
5df0: 54 38 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64  T8_TYPE unsigned
5e00: 20 63 68 61 72 0a 23 20 65 6e 64 69 66 0a 23 65   char.# endif.#e
5e10: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 49 4e 54  ndif.#ifndef INT
5e20: 38 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48  8_TYPE.# ifdef H
5e30: 41 56 45 5f 49 4e 54 38 5f 54 0a 23 20 20 64 65  AVE_INT8_T.#  de
5e40: 66 69 6e 65 20 49 4e 54 38 5f 54 59 50 45 20 69  fine INT8_TYPE i
5e50: 6e 74 38 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20  nt8_t.# else.#  
5e60: 64 65 66 69 6e 65 20 49 4e 54 38 5f 54 59 50 45  define INT8_TYPE
5e70: 20 73 69 67 6e 65 64 20 63 68 61 72 0a 23 20 65   signed char.# e
5e80: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e  ndif.#endif.#ifn
5e90: 64 65 66 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54  def LONGDOUBLE_T
5ea0: 59 50 45 0a 23 20 64 65 66 69 6e 65 20 4c 4f 4e  YPE.# define LON
5eb0: 47 44 4f 55 42 4c 45 5f 54 59 50 45 20 6c 6f 6e  GDOUBLE_TYPE lon
5ec0: 67 20 64 6f 75 62 6c 65 0a 23 65 6e 64 69 66 0a  g double.#endif.
5ed0: 74 79 70 65 64 65 66 20 73 71 6c 69 74 65 5f 69  typedef sqlite_i
5ee0: 6e 74 36 34 20 69 36 34 3b 20 20 20 20 20 20 20  nt64 i64;       
5ef0: 20 20 20 2f 2a 20 38 2d 62 79 74 65 20 73 69 67     /* 8-byte sig
5f00: 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74  ned integer */.t
5f10: 79 70 65 64 65 66 20 73 71 6c 69 74 65 5f 75 69  ypedef sqlite_ui
5f20: 6e 74 36 34 20 75 36 34 3b 20 20 20 20 20 20 20  nt64 u64;       
5f30: 20 20 2f 2a 20 38 2d 62 79 74 65 20 75 6e 73 69    /* 8-byte unsi
5f40: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a  gned integer */.
5f50: 74 79 70 65 64 65 66 20 55 49 4e 54 33 32 5f 54  typedef UINT32_T
5f60: 59 50 45 20 75 33 32 3b 20 20 20 20 20 20 20 20  YPE u32;        
5f70: 20 20 20 2f 2a 20 34 2d 62 79 74 65 20 75 6e 73     /* 4-byte uns
5f80: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
5f90: 0a 74 79 70 65 64 65 66 20 55 49 4e 54 31 36 5f  .typedef UINT16_
5fa0: 54 59 50 45 20 75 31 36 3b 20 20 20 20 20 20 20  TYPE u16;       
5fb0: 20 20 20 20 2f 2a 20 32 2d 62 79 74 65 20 75 6e      /* 2-byte un
5fc0: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a  signed integer *
5fd0: 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 31 36 5f  /.typedef INT16_
5fe0: 54 59 50 45 20 69 31 36 3b 20 20 20 20 20 20 20  TYPE i16;       
5ff0: 20 20 20 20 20 2f 2a 20 32 2d 62 79 74 65 20 73       /* 2-byte s
6000: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
6010: 0a 74 79 70 65 64 65 66 20 55 49 4e 54 38 5f 54  .typedef UINT8_T
6020: 59 50 45 20 75 38 3b 20 20 20 20 20 20 20 20 20  YPE u8;         
6030: 20 20 20 20 2f 2a 20 31 2d 62 79 74 65 20 75 6e      /* 1-byte un
6040: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a  signed integer *
6050: 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 38 5f 54  /.typedef INT8_T
6060: 59 50 45 20 69 38 3b 20 20 20 20 20 20 20 20 20  YPE i8;         
6070: 20 20 20 20 20 2f 2a 20 31 2d 62 79 74 65 20 73       /* 1-byte s
6080: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
6090: 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 4d  ../*.** SQLITE_M
60a0: 41 58 5f 55 33 32 20 69 73 20 61 20 75 36 34 20  AX_U32 is a u64 
60b0: 63 6f 6e 73 74 61 6e 74 20 74 68 61 74 20 69 73  constant that is
60c0: 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 75 36 34   the maximum u64
60d0: 20 76 61 6c 75 65 0a 2a 2a 20 74 68 61 74 20 63   value.** that c
60e0: 61 6e 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20  an be stored in 
60f0: 61 20 75 33 32 20 77 69 74 68 6f 75 74 20 6c 6f  a u32 without lo
6100: 73 73 20 6f 66 20 64 61 74 61 2e 20 20 54 68 65  ss of data.  The
6110: 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 30 78 30   value.** is 0x0
6120: 30 30 30 30 30 30 30 66 66 66 66 66 66 66 66 2e  0000000ffffffff.
6130: 20 20 42 75 74 20 62 65 63 61 75 73 65 20 6f 66    But because of
6140: 20 71 75 69 72 6b 73 20 6f 66 20 73 6f 6d 65 20   quirks of some 
6150: 63 6f 6d 70 69 6c 65 72 73 2c 20 77 65 0a 2a 2a  compilers, we.**
6160: 20 68 61 76 65 20 74 6f 20 73 70 65 63 69 66 79   have to specify
6170: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 74 68   the value in th
6180: 65 20 6c 65 73 73 20 69 6e 74 75 69 74 69 76 65  e less intuitive
6190: 20 6d 61 6e 6e 65 72 20 73 68 6f 77 6e 3a 0a 2a   manner shown:.*
61a0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
61b0: 5f 4d 41 58 5f 55 33 32 20 20 28 28 28 28 75 36  _MAX_U32  ((((u6
61c0: 34 29 31 29 3c 3c 33 32 29 2d 31 29 0a 0a 2f 2a  4)1)<<32)-1)../*
61d0: 0a 2a 2a 20 54 68 65 20 64 61 74 61 74 79 70 65  .** The datatype
61e0: 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 65   used to store e
61f0: 73 74 69 6d 61 74 65 73 20 6f 66 20 74 68 65 20  stimates of the 
6200: 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69  number of rows i
6210: 6e 20 61 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20  n a.** table or 
6220: 69 6e 64 65 78 2e 20 20 54 68 69 73 20 69 73 20  index.  This is 
6230: 61 6e 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65  an unsigned inte
6240: 67 65 72 20 74 79 70 65 2e 20 20 46 6f 72 20 39  ger type.  For 9
6250: 39 2e 39 25 20 6f 66 0a 2a 2a 20 74 68 65 20 77  9.9% of.** the w
6260: 6f 72 6c 64 2c 20 61 20 33 32 2d 62 69 74 20 69  orld, a 32-bit i
6270: 6e 74 65 67 65 72 20 69 73 20 73 75 66 66 69 63  nteger is suffic
6280: 69 65 6e 74 2e 20 20 42 75 74 20 61 20 36 34 2d  ient.  But a 64-
6290: 62 69 74 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63  bit integer.** c
62a0: 61 6e 20 62 65 20 75 73 65 64 20 61 74 20 63 6f  an be used at co
62b0: 6d 70 69 6c 65 2d 74 69 6d 65 20 69 66 20 64 65  mpile-time if de
62c0: 73 69 72 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66  sired..*/.#ifdef
62d0: 20 53 51 4c 49 54 45 5f 36 34 42 49 54 5f 53 54   SQLITE_64BIT_ST
62e0: 41 54 53 0a 20 74 79 70 65 64 65 66 20 75 36 34  ATS. typedef u64
62f0: 20 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f 2a 20   tRowcnt;    /* 
6300: 36 34 2d 62 69 74 20 6f 6e 6c 79 20 69 66 20 72  64-bit only if r
6310: 65 71 75 65 73 74 65 64 20 61 74 20 63 6f 6d 70  equested at comp
6320: 69 6c 65 2d 74 69 6d 65 20 2a 2f 0a 23 65 6c 73  ile-time */.#els
6330: 65 0a 20 74 79 70 65 64 65 66 20 75 33 32 20 74  e. typedef u32 t
6340: 52 6f 77 63 6e 74 3b 20 20 20 20 2f 2a 20 33 32  Rowcnt;    /* 32
6350: 2d 62 69 74 20 69 73 20 74 68 65 20 64 65 66 61  -bit is the defa
6360: 75 6c 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f  ult */.#endif../
6370: 2a 0a 2a 2a 20 45 73 74 69 6d 61 74 65 64 20 71  *.** Estimated q
6380: 75 61 6e 74 69 74 69 65 73 20 75 73 65 64 20 66  uantities used f
6390: 6f 72 20 71 75 65 72 79 20 70 6c 61 6e 6e 69 6e  or query plannin
63a0: 67 20 61 72 65 20 73 74 6f 72 65 64 20 61 73 20  g are stored as 
63b0: 31 36 2d 62 69 74 0a 2a 2a 20 6c 6f 67 61 72 69  16-bit.** logari
63c0: 74 68 6d 73 2e 20 20 46 6f 72 20 71 75 61 6e 74  thms.  For quant
63d0: 69 74 79 20 58 2c 20 74 68 65 20 76 61 6c 75 65  ity X, the value
63e0: 20 73 74 6f 72 65 64 20 69 73 20 31 30 2a 6c 6f   stored is 10*lo
63f0: 67 32 28 58 29 2e 20 20 54 68 69 73 0a 2a 2a 20  g2(X).  This.** 
6400: 67 69 76 65 73 20 61 20 70 6f 73 73 69 62 6c 65  gives a possible
6410: 20 72 61 6e 67 65 20 6f 66 20 76 61 6c 75 65 73   range of values
6420: 20 6f 66 20 61 70 70 72 6f 78 69 6d 61 74 65 6c   of approximatel
6430: 79 20 31 2e 30 65 39 38 36 20 74 6f 20 31 65 2d  y 1.0e986 to 1e-
6440: 39 38 36 2e 0a 2a 2a 20 42 75 74 20 74 68 65 20  986..** But the 
6450: 61 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 61  allowed values a
6460: 72 65 20 22 67 72 61 69 6e 79 22 2e 20 20 4e 6f  re "grainy".  No
6470: 74 20 65 76 65 72 79 20 76 61 6c 75 65 20 69 73  t every value is
6480: 20 72 65 70 72 65 73 65 6e 74 61 62 6c 65 2e 0a   representable..
6490: 2a 2a 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20  ** For example, 
64a0: 71 75 61 6e 74 69 74 69 65 73 20 31 36 20 61 6e  quantities 16 an
64b0: 64 20 31 37 20 61 72 65 20 62 6f 74 68 20 72 65  d 17 are both re
64c0: 70 72 65 73 65 6e 74 65 64 20 62 79 20 61 20 4c  presented by a L
64d0: 6f 67 45 73 74 0a 2a 2a 20 6f 66 20 34 30 2e 20  ogEst.** of 40. 
64e0: 20 48 6f 77 65 76 65 72 2c 20 73 69 6e 63 65 20   However, since 
64f0: 4c 6f 67 45 73 74 20 71 75 61 6e 74 69 74 69 65  LogEst quantitie
6500: 73 20 61 72 65 20 73 75 70 70 6f 73 65 20 74 6f  s are suppose to
6510: 20 62 65 20 65 73 74 69 6d 61 74 65 73 2c 0a 2a   be estimates,.*
6520: 2a 20 6e 6f 74 20 65 78 61 63 74 20 76 61 6c 75  * not exact valu
6530: 65 73 2c 20 74 68 69 73 20 69 6d 70 72 65 63 69  es, this impreci
6540: 73 69 6f 6e 20 69 73 20 6e 6f 74 20 61 20 70 72  sion is not a pr
6550: 6f 62 6c 65 6d 2e 0a 2a 2a 0a 2a 2a 20 22 4c 6f  oblem..**.** "Lo
6560: 67 45 73 74 22 20 69 73 20 73 68 6f 72 74 20 66  gEst" is short f
6570: 6f 72 20 22 4c 6f 67 61 72 69 74 68 6d 69 63 20  or "Logarithmic 
6580: 45 73 74 69 6d 61 74 65 22 2e 0a 2a 2a 0a 2a 2a  Estimate"..**.**
6590: 20 45 78 61 6d 70 6c 65 73 3a 0a 2a 2a 20 20 20   Examples:.**   
65a0: 20 20 20 31 20 2d 3e 20 30 20 20 20 20 20 20 20     1 -> 0       
65b0: 20 20 20 20 20 20 20 32 30 20 2d 3e 20 34 33 20         20 -> 43 
65c0: 20 20 20 20 20 20 20 20 20 31 30 30 30 30 20 2d           10000 -
65d0: 3e 20 31 33 32 0a 2a 2a 20 20 20 20 20 20 32 20  > 132.**      2 
65e0: 2d 3e 20 31 30 20 20 20 20 20 20 20 20 20 20 20  -> 10           
65f0: 20 20 32 35 20 2d 3e 20 34 36 20 20 20 20 20 20    25 -> 46      
6600: 20 20 20 20 32 35 30 30 30 20 2d 3e 20 31 34 36      25000 -> 146
6610: 0a 2a 2a 20 20 20 20 20 20 33 20 2d 3e 20 31 36  .**      3 -> 16
6620: 20 20 20 20 20 20 20 20 20 20 20 20 31 30 30 20              100 
6630: 2d 3e 20 36 36 20 20 20 20 20 20 20 20 31 30 30  -> 66        100
6640: 30 30 30 30 20 2d 3e 20 31 39 39 0a 2a 2a 20 20  0000 -> 199.**  
6650: 20 20 20 20 34 20 2d 3e 20 32 30 20 20 20 20 20      4 -> 20     
6660: 20 20 20 20 20 20 31 30 30 30 20 2d 3e 20 39 39        1000 -> 99
6670: 20 20 20 20 20 20 20 20 31 30 34 38 35 37 36 20          1048576 
6680: 2d 3e 20 32 30 30 0a 2a 2a 20 20 20 20 20 31 30  -> 200.**     10
6690: 20 2d 3e 20 33 33 20 20 20 20 20 20 20 20 20 20   -> 33          
66a0: 20 31 30 32 34 20 2d 3e 20 31 30 30 20 20 20 20   1024 -> 100    
66b0: 34 32 39 34 39 36 37 32 39 36 20 2d 3e 20 33 32  4294967296 -> 32
66c0: 30 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f 67 45  0.**.** The LogE
66d0: 73 74 20 63 61 6e 20 62 65 20 6e 65 67 61 74 69  st can be negati
66e0: 76 65 20 74 6f 20 69 6e 64 69 63 61 74 65 20 66  ve to indicate f
66f0: 72 61 63 74 69 6f 6e 61 6c 20 76 61 6c 75 65 73  ractional values
6700: 2e 0a 2a 2a 20 45 78 61 6d 70 6c 65 73 3a 0a 2a  ..** Examples:.*
6710: 2a 0a 2a 2a 20 20 20 20 30 2e 35 20 2d 3e 20 2d  *.**    0.5 -> -
6720: 31 30 20 20 20 20 20 20 20 20 20 20 20 30 2e 31  10           0.1
6730: 20 2d 3e 20 2d 33 33 20 20 20 20 20 20 20 20 30   -> -33        0
6740: 2e 30 36 32 35 20 2d 3e 20 2d 34 30 0a 2a 2f 0a  .0625 -> -40.*/.
6750: 74 79 70 65 64 65 66 20 49 4e 54 31 36 5f 54 59  typedef INT16_TY
6760: 50 45 20 4c 6f 67 45 73 74 3b 0a 0a 2f 2a 0a 2a  PE LogEst;../*.*
6770: 2a 20 53 65 74 20 74 68 65 20 53 51 4c 49 54 45  * Set the SQLITE
6780: 5f 50 54 52 53 49 5a 45 20 6d 61 63 72 6f 20 74  _PTRSIZE macro t
6790: 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  o the number of 
67a0: 62 79 74 65 73 20 69 6e 20 61 20 70 6f 69 6e 74  bytes in a point
67b0: 65 72 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  er.*/.#ifndef SQ
67c0: 4c 49 54 45 5f 50 54 52 53 49 5a 45 0a 23 20 69  LITE_PTRSIZE.# i
67d0: 66 20 64 65 66 69 6e 65 64 28 5f 5f 53 49 5a 45  f defined(__SIZE
67e0: 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f 29 0a 23 20  OF_POINTER__).# 
67f0: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
6800: 50 54 52 53 49 5a 45 20 5f 5f 53 49 5a 45 4f 46  PTRSIZE __SIZEOF
6810: 5f 50 4f 49 4e 54 45 52 5f 5f 0a 23 20 65 6c 69  _POINTER__.# eli
6820: 66 20 64 65 66 69 6e 65 64 28 69 33 38 36 29 20  f defined(i386) 
6830: 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f      || defined(_
6840: 5f 69 33 38 36 5f 5f 29 20 20 20 7c 7c 20 64 65  _i386__)   || de
6850: 66 69 6e 65 64 28 5f 4d 5f 49 58 38 36 29 20 7c  fined(_M_IX86) |
6860: 7c 20 20 20 20 5c 0a 20 20 20 20 20 20 20 64 65  |    \.       de
6870: 66 69 6e 65 64 28 5f 4d 5f 41 52 4d 29 20 20 20  fined(_M_ARM)   
6880: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 61 72 6d  || defined(__arm
6890: 5f 5f 29 20 20 20 20 7c 7c 20 64 65 66 69 6e 65  __)    || define
68a0: 64 28 5f 5f 78 38 36 29 0a 23 20 20 20 64 65 66  d(__x86).#   def
68b0: 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 53 49  ine SQLITE_PTRSI
68c0: 5a 45 20 34 0a 23 20 65 6c 73 65 0a 23 20 20 20  ZE 4.# else.#   
68d0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54  define SQLITE_PT
68e0: 52 53 49 5a 45 20 38 0a 23 20 65 6e 64 69 66 0a  RSIZE 8.# endif.
68f0: 23 65 6e 64 69 66 0a 0a 2f 2a 20 54 68 65 20 75  #endif../* The u
6900: 70 74 72 20 74 79 70 65 20 69 73 20 61 6e 20 75  ptr type is an u
6910: 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20  nsigned integer 
6920: 6c 61 72 67 65 20 65 6e 6f 75 67 68 20 74 6f 20  large enough to 
6930: 68 6f 6c 64 20 61 20 70 6f 69 6e 74 65 72 0a 2a  hold a pointer.*
6940: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 48 41  /.#if defined(HA
6950: 56 45 5f 53 54 44 49 4e 54 5f 48 29 0a 20 20 74  VE_STDINT_H).  t
6960: 79 70 65 64 65 66 20 75 69 6e 74 70 74 72 5f 74  ypedef uintptr_t
6970: 20 75 70 74 72 3b 0a 23 65 6c 69 66 20 53 51 4c   uptr;.#elif SQL
6980: 49 54 45 5f 50 54 52 53 49 5a 45 3d 3d 34 0a 20  ITE_PTRSIZE==4. 
6990: 20 74 79 70 65 64 65 66 20 75 33 32 20 75 70 74   typedef u32 upt
69a0: 72 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70 65 64  r;.#else.  typed
69b0: 65 66 20 75 36 34 20 75 70 74 72 3b 0a 23 65 6e  ef u64 uptr;.#en
69c0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53  dif../*.** The S
69d0: 51 4c 49 54 45 5f 57 49 54 48 49 4e 28 50 2c 53  QLITE_WITHIN(P,S
69e0: 2c 45 29 20 6d 61 63 72 6f 20 63 68 65 63 6b 73  ,E) macro checks
69f0: 20 74 6f 20 73 65 65 20 69 66 20 70 6f 69 6e 74   to see if point
6a00: 65 72 20 50 20 70 6f 69 6e 74 73 20 74 6f 0a 2a  er P points to.*
6a10: 2a 20 73 6f 6d 65 74 68 69 6e 67 20 62 65 74 77  * something betw
6a20: 65 65 6e 20 53 20 28 69 6e 63 6c 75 73 69 76 65  een S (inclusive
6a30: 29 20 61 6e 64 20 45 20 28 65 78 63 6c 75 73 69  ) and E (exclusi
6a40: 76 65 29 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 6f 74  ve)..**.** In ot
6a50: 68 65 72 20 77 6f 72 64 73 2c 20 53 20 69 73 20  her words, S is 
6a60: 61 20 62 75 66 66 65 72 20 61 6e 64 20 45 20 69  a buffer and E i
6a70: 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  s a pointer to t
6a80: 68 65 20 66 69 72 73 74 20 62 79 74 65 20 61 66  he first byte af
6a90: 74 65 72 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f  ter.** the end o
6aa0: 66 20 62 75 66 66 65 72 20 53 2e 20 20 54 68 69  f buffer S.  Thi
6ab0: 73 20 6d 61 63 72 6f 20 72 65 74 75 72 6e 73 20  s macro returns 
6ac0: 74 72 75 65 20 69 66 20 50 20 70 6f 69 6e 74 73  true if P points
6ad0: 20 74 6f 20 73 6f 6d 65 74 68 69 6e 67 0a 2a 2a   to something.**
6ae0: 20 63 6f 6e 74 61 69 6e 65 64 20 77 69 74 68 69   contained withi
6af0: 6e 20 74 68 65 20 62 75 66 66 65 72 20 53 2e 0a  n the buffer S..
6b00: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
6b10: 45 5f 57 49 54 48 49 4e 28 50 2c 53 2c 45 29 20  E_WITHIN(P,S,E) 
6b20: 28 28 28 75 70 74 72 29 28 50 29 3e 3d 28 75 70  (((uptr)(P)>=(up
6b30: 74 72 29 28 53 29 29 26 26 28 28 75 70 74 72 29  tr)(S))&&((uptr)
6b40: 28 50 29 3c 28 75 70 74 72 29 28 45 29 29 29 0a  (P)<(uptr)(E))).
6b50: 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74  ../*.** Macros t
6b60: 6f 20 64 65 74 65 72 6d 69 6e 65 20 77 68 65 74  o determine whet
6b70: 68 65 72 20 74 68 65 20 6d 61 63 68 69 6e 65 20  her the machine 
6b80: 69 73 20 62 69 67 20 6f 72 20 6c 69 74 74 6c 65  is big or little
6b90: 20 65 6e 64 69 61 6e 2c 0a 2a 2a 20 61 6e 64 20   endian,.** and 
6ba0: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
6bb0: 68 61 74 20 64 65 74 65 72 6d 69 6e 61 74 69 6f  hat determinatio
6bc0: 6e 20 69 73 20 72 75 6e 2d 74 69 6d 65 20 6f 72  n is run-time or
6bd0: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2e 0a 2a   compile-time..*
6be0: 2a 0a 2a 2a 20 46 6f 72 20 62 65 73 74 20 70 65  *.** For best pe
6bf0: 72 66 6f 72 6d 61 6e 63 65 2c 20 61 6e 20 61 74  rformance, an at
6c00: 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74 6f  tempt is made to
6c10: 20 67 75 65 73 73 20 61 74 20 74 68 65 20 62 79   guess at the by
6c20: 74 65 2d 6f 72 64 65 72 0a 2a 2a 20 75 73 69 6e  te-order.** usin
6c30: 67 20 43 2d 70 72 65 70 72 6f 63 65 73 73 6f 72  g C-preprocessor
6c40: 20 6d 61 63 72 6f 73 2e 20 20 49 66 20 74 68 61   macros.  If tha
6c50: 74 20 69 73 20 75 6e 73 75 63 63 65 73 73 66 75  t is unsuccessfu
6c60: 6c 2c 20 6f 72 20 69 66 0a 2a 2a 20 2d 44 53 51  l, or if.** -DSQ
6c70: 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52 3d 30  LITE_BYTEORDER=0
6c80: 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 62 79   is set, then by
6c90: 74 65 2d 6f 72 64 65 72 20 69 73 20 64 65 74 65  te-order is dete
6ca0: 72 6d 69 6e 65 64 0a 2a 2a 20 61 74 20 72 75 6e  rmined.** at run
6cb0: 2d 74 69 6d 65 2e 0a 2a 2f 0a 23 69 66 6e 64 65  -time..*/.#ifnde
6cc0: 66 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44  f SQLITE_BYTEORD
6cd0: 45 52 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28  ER.# if defined(
6ce0: 69 33 38 36 29 20 20 20 20 20 7c 7c 20 64 65 66  i386)     || def
6cf0: 69 6e 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20 20  ined(__i386__)  
6d00: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 49   || defined(_M_I
6d10: 58 38 36 29 20 7c 7c 20 20 20 20 5c 0a 20 20 20  X86) ||    \.   
6d20: 20 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 5f    defined(__x86_
6d30: 36 34 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  64) || defined(_
6d40: 5f 78 38 36 5f 36 34 5f 5f 29 20 7c 7c 20 64 65  _x86_64__) || de
6d50: 66 69 6e 65 64 28 5f 4d 5f 58 36 34 29 20 20 7c  fined(_M_X64)  |
6d60: 7c 20 20 20 20 5c 0a 20 20 20 20 20 64 65 66 69  |    \.     defi
6d70: 6e 65 64 28 5f 4d 5f 41 4d 44 36 34 29 20 7c 7c  ned(_M_AMD64) ||
6d80: 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41 52 4d 29   defined(_M_ARM)
6d90: 20 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28       || defined(
6da0: 5f 5f 78 38 36 29 20 20 20 7c 7c 20 20 20 20 5c  __x86)   ||    \
6db0: 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28 5f 5f  .     defined(__
6dc0: 61 72 6d 5f 5f 29 0a 23 20 20 20 64 65 66 69 6e  arm__).#   defin
6dd0: 65 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44  e SQLITE_BYTEORD
6de0: 45 52 20 20 20 20 31 32 33 34 0a 23 20 65 6c 69  ER    1234.# eli
6df0: 66 20 64 65 66 69 6e 65 64 28 73 70 61 72 63 29  f defined(sparc)
6e00: 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f      || defined(_
6e10: 5f 70 70 63 5f 5f 29 0a 23 20 20 20 64 65 66 69  _ppc__).#   defi
6e20: 6e 65 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52  ne SQLITE_BYTEOR
6e30: 44 45 52 20 20 20 20 34 33 32 31 0a 23 20 65 6c  DER    4321.# el
6e40: 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51  se.#   define SQ
6e50: 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52 20 30  LITE_BYTEORDER 0
6e60: 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  .# endif.#endif.
6e70: 23 69 66 20 53 51 4c 49 54 45 5f 42 59 54 45 4f  #if SQLITE_BYTEO
6e80: 52 44 45 52 3d 3d 34 33 32 31 0a 23 20 64 65 66  RDER==4321.# def
6e90: 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e  ine SQLITE_BIGEN
6ea0: 44 49 41 4e 20 20 20 20 31 0a 23 20 64 65 66 69  DIAN    1.# defi
6eb0: 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45  ne SQLITE_LITTLE
6ec0: 45 4e 44 49 41 4e 20 30 0a 23 20 64 65 66 69 6e  ENDIAN 0.# defin
6ed0: 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41  e SQLITE_UTF16NA
6ee0: 54 49 56 45 20 20 53 51 4c 49 54 45 5f 55 54 46  TIVE  SQLITE_UTF
6ef0: 31 36 42 45 0a 23 65 6c 69 66 20 53 51 4c 49 54  16BE.#elif SQLIT
6f00: 45 5f 42 59 54 45 4f 52 44 45 52 3d 3d 31 32 33  E_BYTEORDER==123
6f10: 34 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  4.# define SQLIT
6f20: 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20 30  E_BIGENDIAN    0
6f30: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
6f40: 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 31 0a  _LITTLEENDIAN 1.
6f50: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
6f60: 55 54 46 31 36 4e 41 54 49 56 45 20 20 53 51 4c  UTF16NATIVE  SQL
6f70: 49 54 45 5f 55 54 46 31 36 4c 45 0a 23 65 6c 73  ITE_UTF16LE.#els
6f80: 65 0a 23 20 69 66 64 65 66 20 53 51 4c 49 54 45  e.# ifdef SQLITE
6f90: 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 20 20  _AMALGAMATION.  
6fa0: 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69 74 65  const int sqlite
6fb0: 33 6f 6e 65 20 3d 20 31 3b 0a 23 20 65 6c 73 65  3one = 1;.# else
6fc0: 0a 20 20 65 78 74 65 72 6e 20 63 6f 6e 73 74 20  .  extern const 
6fd0: 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65 3b 0a  int sqlite3one;.
6fe0: 23 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e 65  # endif.# define
6ff0: 20 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41   SQLITE_BIGENDIA
7000: 4e 20 20 20 20 28 2a 28 63 68 61 72 20 2a 29 28  N    (*(char *)(
7010: 26 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d 30 29  &sqlite3one)==0)
7020: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
7030: 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 28 2a  _LITTLEENDIAN (*
7040: 28 63 68 61 72 20 2a 29 28 26 73 71 6c 69 74 65  (char *)(&sqlite
7050: 33 6f 6e 65 29 3d 3d 31 29 0a 23 20 64 65 66 69  3one)==1).# defi
7060: 6e 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e  ne SQLITE_UTF16N
7070: 41 54 49 56 45 20 20 28 53 51 4c 49 54 45 5f 42  ATIVE  (SQLITE_B
7080: 49 47 45 4e 44 49 41 4e 3f 53 51 4c 49 54 45 5f  IGENDIAN?SQLITE_
7090: 55 54 46 31 36 42 45 3a 53 51 4c 49 54 45 5f 55  UTF16BE:SQLITE_U
70a0: 54 46 31 36 4c 45 29 0a 23 65 6e 64 69 66 0a 0a  TF16LE).#endif..
70b0: 2f 2a 0a 2a 2a 20 43 6f 6e 73 74 61 6e 74 73 20  /*.** Constants 
70c0: 66 6f 72 20 74 68 65 20 6c 61 72 67 65 73 74 20  for the largest 
70d0: 61 6e 64 20 73 6d 61 6c 6c 65 73 74 20 70 6f 73  and smallest pos
70e0: 73 69 62 6c 65 20 36 34 2d 62 69 74 20 73 69 67  sible 64-bit sig
70f0: 6e 65 64 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a  ned integers..**
7100: 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 61 72   These macros ar
7110: 65 20 64 65 73 69 67 6e 65 64 20 74 6f 20 77 6f  e designed to wo
7120: 72 6b 20 63 6f 72 72 65 63 74 6c 79 20 6f 6e 20  rk correctly on 
7130: 62 6f 74 68 20 33 32 2d 62 69 74 20 61 6e 64 20  both 32-bit and 
7140: 36 34 2d 62 69 74 0a 2a 2a 20 63 6f 6d 70 69 6c  64-bit.** compil
7150: 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ers..*/.#define 
7160: 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 20 20 28  LARGEST_INT64  (
7170: 30 78 66 66 66 66 66 66 66 66 7c 28 28 28 69 36  0xffffffff|(((i6
7180: 34 29 30 78 37 66 66 66 66 66 66 66 29 3c 3c 33  4)0x7fffffff)<<3
7190: 32 29 29 0a 23 64 65 66 69 6e 65 20 53 4d 41 4c  2)).#define SMAL
71a0: 4c 45 53 54 5f 49 4e 54 36 34 20 28 28 28 69 36  LEST_INT64 (((i6
71b0: 34 29 2d 31 29 20 2d 20 4c 41 52 47 45 53 54 5f  4)-1) - LARGEST_
71c0: 49 4e 54 36 34 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f  INT64)../*.** Ro
71d0: 75 6e 64 20 75 70 20 61 20 6e 75 6d 62 65 72 20  und up a number 
71e0: 74 6f 20 74 68 65 20 6e 65 78 74 20 6c 61 72 67  to the next larg
71f0: 65 72 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 38  er multiple of 8
7200: 2e 20 20 54 68 69 73 20 69 73 20 75 73 65 64 0a  .  This is used.
7210: 2a 2a 20 74 6f 20 66 6f 72 63 65 20 38 2d 62 79  ** to force 8-by
7220: 74 65 20 61 6c 69 67 6e 6d 65 6e 74 20 6f 6e 20  te alignment on 
7230: 36 34 2d 62 69 74 20 61 72 63 68 69 74 65 63 74  64-bit architect
7240: 75 72 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ures..*/.#define
7250: 20 52 4f 55 4e 44 38 28 78 29 20 20 20 20 20 28   ROUND8(x)     (
7260: 28 28 78 29 2b 37 29 26 7e 37 29 0a 0a 2f 2a 0a  ((x)+7)&~7)../*.
7270: 2a 2a 20 52 6f 75 6e 64 20 64 6f 77 6e 20 74 6f  ** Round down to
7280: 20 74 68 65 20 6e 65 61 72 65 73 74 20 6d 75 6c   the nearest mul
7290: 74 69 70 6c 65 20 6f 66 20 38 0a 2a 2f 0a 23 64  tiple of 8.*/.#d
72a0: 65 66 69 6e 65 20 52 4f 55 4e 44 44 4f 57 4e 38  efine ROUNDDOWN8
72b0: 28 78 29 20 28 28 78 29 26 7e 37 29 0a 0a 2f 2a  (x) ((x)&~7)../*
72c0: 0a 2a 2a 20 41 73 73 65 72 74 20 74 68 61 74 20  .** Assert that 
72d0: 74 68 65 20 70 6f 69 6e 74 65 72 20 58 20 69 73  the pointer X is
72e0: 20 61 6c 69 67 6e 65 64 20 74 6f 20 61 6e 20 38   aligned to an 8
72f0: 2d 62 79 74 65 20 62 6f 75 6e 64 61 72 79 2e 20  -byte boundary. 
7300: 20 54 68 69 73 0a 2a 2a 20 6d 61 63 72 6f 20 69   This.** macro i
7310: 73 20 75 73 65 64 20 6f 6e 6c 79 20 77 69 74 68  s used only with
7320: 69 6e 20 61 73 73 65 72 74 28 29 20 74 6f 20 76  in assert() to v
7330: 65 72 69 66 79 20 74 68 61 74 20 74 68 65 20 63  erify that the c
7340: 6f 64 65 20 67 65 74 73 0a 2a 2a 20 61 6c 6c 20  ode gets.** all 
7350: 61 6c 69 67 6e 6d 65 6e 74 20 72 65 73 74 72 69  alignment restri
7360: 63 74 69 6f 6e 73 20 63 6f 72 72 65 63 74 2e 0a  ctions correct..
7370: 2a 2a 0a 2a 2a 20 45 78 63 65 70 74 2c 20 69 66  **.** Except, if
7380: 20 53 51 4c 49 54 45 5f 34 5f 42 59 54 45 5f 41   SQLITE_4_BYTE_A
7390: 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43 20 69 73  LIGNED_MALLOC is
73a0: 20 64 65 66 69 6e 65 64 2c 20 74 68 65 6e 20 74   defined, then t
73b0: 68 65 0a 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67  he.** underlying
73c0: 20 6d 61 6c 6c 6f 63 28 29 20 69 6d 70 6c 65 6d   malloc() implem
73d0: 65 6e 74 61 74 69 6f 6e 20 6d 69 67 68 74 20 72  entation might r
73e0: 65 74 75 72 6e 20 75 73 20 34 2d 62 79 74 65 20  eturn us 4-byte 
73f0: 61 6c 69 67 6e 65 64 0a 2a 2a 20 70 6f 69 6e 74  aligned.** point
7400: 65 72 73 2e 20 20 49 6e 20 74 68 61 74 20 63 61  ers.  In that ca
7410: 73 65 2c 20 6f 6e 6c 79 20 76 65 72 69 66 79 20  se, only verify 
7420: 34 2d 62 79 74 65 20 61 6c 69 67 6e 6d 65 6e 74  4-byte alignment
7430: 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
7440: 54 45 5f 34 5f 42 59 54 45 5f 41 4c 49 47 4e 45  TE_4_BYTE_ALIGNE
7450: 44 5f 4d 41 4c 4c 4f 43 0a 23 20 64 65 66 69 6e  D_MALLOC.# defin
7460: 65 20 45 49 47 48 54 5f 42 59 54 45 5f 41 4c 49  e EIGHT_BYTE_ALI
7470: 47 4e 4d 45 4e 54 28 58 29 20 20 20 28 28 28 28  GNMENT(X)   ((((
7480: 63 68 61 72 2a 29 28 58 29 20 2d 20 28 63 68 61  char*)(X) - (cha
7490: 72 2a 29 30 29 26 33 29 3d 3d 30 29 0a 23 65 6c  r*)0)&3)==0).#el
74a0: 73 65 0a 23 20 64 65 66 69 6e 65 20 45 49 47 48  se.# define EIGH
74b0: 54 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54  T_BYTE_ALIGNMENT
74c0: 28 58 29 20 20 20 28 28 28 28 63 68 61 72 2a 29  (X)   ((((char*)
74d0: 28 58 29 20 2d 20 28 63 68 61 72 2a 29 30 29 26  (X) - (char*)0)&
74e0: 37 29 3d 3d 30 29 0a 23 65 6e 64 69 66 0a 0a 2f  7)==0).#endif../
74f0: 2a 0a 2a 2a 20 44 69 73 61 62 6c 65 20 4d 4d 41  *.** Disable MMA
7500: 50 20 6f 6e 20 70 6c 61 74 66 6f 72 6d 73 20 77  P on platforms w
7510: 68 65 72 65 20 69 74 20 69 73 20 6b 6e 6f 77 6e  here it is known
7520: 20 74 6f 20 6e 6f 74 20 77 6f 72 6b 0a 2a 2f 0a   to not work.*/.
7530: 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 4f 70  #if defined(__Op
7540: 65 6e 42 53 44 5f 5f 29 20 7c 7c 20 64 65 66 69  enBSD__) || defi
7550: 6e 65 64 28 5f 5f 51 4e 58 4e 54 4f 5f 5f 29 0a  ned(__QNXNTO__).
7560: 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d  # undef SQLITE_M
7570: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 64  AX_MMAP_SIZE.# d
7580: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58  efine SQLITE_MAX
7590: 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23 65 6e  _MMAP_SIZE 0.#en
75a0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 61 75  dif../*.** Defau
75b0: 6c 74 20 6d 61 78 69 6d 75 6d 20 73 69 7a 65 20  lt maximum size 
75c0: 6f 66 20 6d 65 6d 6f 72 79 20 75 73 65 64 20 62  of memory used b
75d0: 79 20 6d 65 6d 6f 72 79 2d 6d 61 70 70 65 64 20  y memory-mapped 
75e0: 49 2f 4f 20 69 6e 20 74 68 65 20 56 46 53 0a 2a  I/O in the VFS.*
75f0: 2f 0a 23 69 66 64 65 66 20 5f 5f 41 50 50 4c 45  /.#ifdef __APPLE
7600: 5f 5f 0a 23 20 69 6e 63 6c 75 64 65 20 3c 54 61  __.# include <Ta
7610: 72 67 65 74 43 6f 6e 64 69 74 69 6f 6e 61 6c 73  rgetConditionals
7620: 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  .h>.#endif.#ifnd
7630: 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d  ef SQLITE_MAX_MM
7640: 41 50 5f 53 49 5a 45 0a 23 20 69 66 20 64 65 66  AP_SIZE.# if def
7650: 69 6e 65 64 28 5f 5f 6c 69 6e 75 78 5f 5f 29 20  ined(__linux__) 
7660: 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  \.  || defined(_
7670: 57 49 4e 33 32 29 20 5c 0a 20 20 7c 7c 20 28 64  WIN32) \.  || (d
7680: 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f  efined(__APPLE__
7690: 29 20 26 26 20 64 65 66 69 6e 65 64 28 5f 5f 4d  ) && defined(__M
76a0: 41 43 48 5f 5f 29 29 20 5c 0a 20 20 7c 7c 20 64  ACH__)) \.  || d
76b0: 65 66 69 6e 65 64 28 5f 5f 73 75 6e 29 20 5c 0a  efined(__sun) \.
76c0: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 46    || defined(__F
76d0: 72 65 65 42 53 44 5f 5f 29 20 5c 0a 20 20 7c 7c  reeBSD__) \.  ||
76e0: 20 64 65 66 69 6e 65 64 28 5f 5f 44 72 61 67 6f   defined(__Drago
76f0: 6e 46 6c 79 5f 5f 29 0a 23 20 20 20 64 65 66 69  nFly__).#   defi
7700: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d  ne SQLITE_MAX_MM
7710: 41 50 5f 53 49 5a 45 20 30 78 37 66 66 66 30 30  AP_SIZE 0x7fff00
7720: 30 30 20 20 2f 2a 20 32 31 34 37 34 31 38 31 31  00  /* 214741811
7730: 32 20 2a 2f 0a 23 20 65 6c 73 65 0a 23 20 20 20  2 */.# else.#   
7740: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
7750: 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23 20  X_MMAP_SIZE 0.# 
7760: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a  endif.#endif../*
7770: 0a 2a 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20  .** The default 
7780: 4d 4d 41 50 5f 53 49 5a 45 20 69 73 20 7a 65 72  MMAP_SIZE is zer
7790: 6f 20 6f 6e 20 61 6c 6c 20 70 6c 61 74 66 6f 72  o on all platfor
77a0: 6d 73 2e 20 20 4f 72 2c 20 65 76 65 6e 20 69 66  ms.  Or, even if
77b0: 20 61 20 6c 61 72 67 65 72 0a 2a 2a 20 64 65 66   a larger.** def
77c0: 61 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45 20 69  ault MMAP_SIZE i
77d0: 73 20 73 70 65 63 69 66 69 65 64 20 61 74 20 63  s specified at c
77e0: 6f 6d 70 69 6c 65 2d 74 69 6d 65 2c 20 6d 61 6b  ompile-time, mak
77f0: 65 20 73 75 72 65 20 74 68 61 74 20 69 74 20 64  e sure that it d
7800: 6f 65 73 0a 2a 2a 20 6e 6f 74 20 65 78 63 65 65  oes.** not excee
7810: 64 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6d 6d  d the maximum mm
7820: 61 70 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66 6e  ap size..*/.#ifn
7830: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55  def SQLITE_DEFAU
7840: 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 64  LT_MMAP_SIZE.# d
7850: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46  efine SQLITE_DEF
7860: 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 20 30  AULT_MMAP_SIZE 0
7870: 0a 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49  .#endif.#if SQLI
7880: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f  TE_DEFAULT_MMAP_
7890: 53 49 5a 45 3e 53 51 4c 49 54 45 5f 4d 41 58 5f  SIZE>SQLITE_MAX_
78a0: 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 75 6e 64 65  MMAP_SIZE.# unde
78b0: 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  f SQLITE_DEFAULT
78c0: 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 64 65 66  _MMAP_SIZE.# def
78d0: 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  ine SQLITE_DEFAU
78e0: 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 20 53 51 4c  LT_MMAP_SIZE SQL
78f0: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
7900: 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  E.#endif../*.** 
7910: 4f 6e 6c 79 20 6f 6e 65 20 6f 66 20 53 51 4c 49  Only one of SQLI
7920: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 20  TE_ENABLE_STAT3 
7930: 6f 72 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  or SQLITE_ENABLE
7940: 5f 53 54 41 54 34 20 63 61 6e 20 62 65 20 64 65  _STAT4 can be de
7950: 66 69 6e 65 64 2e 0a 2a 2a 20 50 72 69 6f 72 69  fined..** Priori
7960: 74 79 20 69 73 20 67 69 76 65 6e 20 74 6f 20 53  ty is given to S
7970: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
7980: 54 34 2e 20 20 49 66 20 65 69 74 68 65 72 20 61  T4.  If either a
7990: 72 65 20 64 65 66 69 6e 65 64 2c 20 61 6c 73 6f  re defined, also
79a0: 0a 2a 2a 20 64 65 66 69 6e 65 20 53 51 4c 49 54  .** define SQLIT
79b0: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f  E_ENABLE_STAT3_O
79c0: 52 5f 53 54 41 54 34 0a 2a 2f 0a 23 69 66 64 65  R_STAT4.*/.#ifde
79d0: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
79e0: 53 54 41 54 34 0a 23 20 75 6e 64 65 66 20 53 51  STAT4.# undef SQ
79f0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
7a00: 33 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  3.# define SQLIT
7a10: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f  E_ENABLE_STAT3_O
7a20: 52 5f 53 54 41 54 34 20 31 0a 23 65 6c 69 66 20  R_STAT4 1.#elif 
7a30: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
7a40: 41 54 33 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  AT3.# define SQL
7a50: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
7a60: 5f 4f 52 5f 53 54 41 54 34 20 31 0a 23 65 6c 69  _OR_STAT4 1.#eli
7a70: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
7a80: 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 23  STAT3_OR_STAT4.#
7a90: 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e   undef SQLITE_EN
7aa0: 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54  ABLE_STAT3_OR_ST
7ab0: 41 54 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  AT4.#endif../*.*
7ac0: 2a 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e  * SELECTTRACE_EN
7ad0: 41 42 4c 45 44 20 77 69 6c 6c 20 62 65 20 65 69  ABLED will be ei
7ae0: 74 68 65 72 20 31 20 6f 72 20 30 20 64 65 70 65  ther 1 or 0 depe
7af0: 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72  nding on whether
7b00: 20 6f 72 20 6e 6f 74 0a 2a 2a 20 74 68 65 20 53   or not.** the S
7b10: 65 6c 65 63 74 20 71 75 65 72 79 20 67 65 6e 65  elect query gene
7b20: 72 61 74 6f 72 20 74 72 61 63 69 6e 67 20 6c 6f  rator tracing lo
7b30: 67 69 63 20 69 73 20 74 75 72 6e 65 64 20 6f 6e  gic is turned on
7b40: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
7b50: 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53  (SQLITE_ENABLE_S
7b60: 45 4c 45 43 54 54 52 41 43 45 29 0a 23 20 64 65  ELECTTRACE).# de
7b70: 66 69 6e 65 20 53 45 4c 45 43 54 54 52 41 43 45  fine SELECTTRACE
7b80: 5f 45 4e 41 42 4c 45 44 20 31 0a 23 65 6c 73 65  _ENABLED 1.#else
7b90: 0a 23 20 64 65 66 69 6e 65 20 53 45 4c 45 43 54  .# define SELECT
7ba0: 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 30 0a  TRACE_ENABLED 0.
7bb0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e  #endif../*.** An
7bc0: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
7bd0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
7be0: 74 75 72 65 20 69 73 20 75 73 65 64 20 74 6f 20  ture is used to 
7bf0: 73 74 6f 72 65 20 74 68 65 20 62 75 73 79 2d 68  store the busy-h
7c00: 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62 61  andler.** callba
7c10: 63 6b 20 66 6f 72 20 61 20 67 69 76 65 6e 20 73  ck for a given s
7c20: 71 6c 69 74 65 20 68 61 6e 64 6c 65 2e 0a 2a 2a  qlite handle..**
7c30: 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74 65 2e 62  .** The sqlite.b
7c40: 75 73 79 48 61 6e 64 6c 65 72 20 6d 65 6d 62 65  usyHandler membe
7c50: 72 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 20  r of the sqlite 
7c60: 73 74 72 75 63 74 20 63 6f 6e 74 61 69 6e 73 20  struct contains 
7c70: 74 68 65 20 62 75 73 79 0a 2a 2a 20 63 61 6c 6c  the busy.** call
7c80: 62 61 63 6b 20 66 6f 72 20 74 68 65 20 64 61 74  back for the dat
7c90: 61 62 61 73 65 20 68 61 6e 64 6c 65 2e 20 45 61  abase handle. Ea
7ca0: 63 68 20 70 61 67 65 72 20 6f 70 65 6e 65 64 20  ch pager opened 
7cb0: 76 69 61 20 74 68 65 20 73 71 6c 69 74 65 0a 2a  via the sqlite.*
7cc0: 2a 20 68 61 6e 64 6c 65 20 69 73 20 70 61 73 73  * handle is pass
7cd0: 65 64 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  ed a pointer to 
7ce0: 73 71 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c  sqlite.busyHandl
7cf0: 65 72 2e 20 54 68 65 20 62 75 73 79 2d 68 61 6e  er. The busy-han
7d00: 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b  dler.** callback
7d10: 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e   is currently in
7d20: 76 6f 6b 65 64 20 6f 6e 6c 79 20 66 72 6f 6d 20  voked only from 
7d30: 77 69 74 68 69 6e 20 70 61 67 65 72 2e 63 2e 0a  within pager.c..
7d40: 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
7d50: 74 20 42 75 73 79 48 61 6e 64 6c 65 72 20 42 75  t BusyHandler Bu
7d60: 73 79 48 61 6e 64 6c 65 72 3b 0a 73 74 72 75 63  syHandler;.struc
7d70: 74 20 42 75 73 79 48 61 6e 64 6c 65 72 20 7b 0a  t BusyHandler {.
7d80: 20 20 69 6e 74 20 28 2a 78 46 75 6e 63 29 28 76    int (*xFunc)(v
7d90: 6f 69 64 20 2a 2c 69 6e 74 29 3b 20 20 2f 2a 20  oid *,int);  /* 
7da0: 54 68 65 20 62 75 73 79 20 63 61 6c 6c 62 61 63  The busy callbac
7db0: 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 72  k */.  void *pAr
7dc0: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
7dd0: 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67 20 74    /* First arg t
7de0: 6f 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20  o busy callback 
7df0: 2a 2f 0a 20 20 69 6e 74 20 6e 42 75 73 79 3b 20  */.  int nBusy; 
7e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e10: 2f 2a 20 49 6e 63 72 65 6d 65 6e 74 65 64 20 77  /* Incremented w
7e20: 69 74 68 20 65 61 63 68 20 62 75 73 79 20 63 61  ith each busy ca
7e30: 6c 6c 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ll */.};../*.** 
7e40: 4e 61 6d 65 20 6f 66 20 74 68 65 20 6d 61 73 74  Name of the mast
7e50: 65 72 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  er database tabl
7e60: 65 2e 20 20 54 68 65 20 6d 61 73 74 65 72 20 64  e.  The master d
7e70: 61 74 61 62 61 73 65 20 74 61 62 6c 65 0a 2a 2a  atabase table.**
7e80: 20 69 73 20 61 20 73 70 65 63 69 61 6c 20 74 61   is a special ta
7e90: 62 6c 65 20 74 68 61 74 20 68 6f 6c 64 73 20 74  ble that holds t
7ea0: 68 65 20 6e 61 6d 65 73 20 61 6e 64 20 61 74 74  he names and att
7eb0: 72 69 62 75 74 65 73 20 6f 66 20 61 6c 6c 0a 2a  ributes of all.*
7ec0: 2a 20 75 73 65 72 20 74 61 62 6c 65 73 20 61 6e  * user tables an
7ed0: 64 20 69 6e 64 69 63 65 73 2e 0a 2a 2f 0a 23 64  d indices..*/.#d
7ee0: 65 66 69 6e 65 20 4d 41 53 54 45 52 5f 4e 41 4d  efine MASTER_NAM
7ef0: 45 20 20 20 20 20 20 20 22 73 71 6c 69 74 65 5f  E       "sqlite_
7f00: 6d 61 73 74 65 72 22 0a 23 64 65 66 69 6e 65 20  master".#define 
7f10: 54 45 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45  TEMP_MASTER_NAME
7f20: 20 20 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d    "sqlite_temp_m
7f30: 61 73 74 65 72 22 0a 0a 2f 2a 0a 2a 2a 20 54 68  aster"../*.** Th
7f40: 65 20 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74  e root-page of t
7f50: 68 65 20 6d 61 73 74 65 72 20 64 61 74 61 62 61  he master databa
7f60: 73 65 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65  se table..*/.#de
7f70: 66 69 6e 65 20 4d 41 53 54 45 52 5f 52 4f 4f 54  fine MASTER_ROOT
7f80: 20 20 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20         1../*.** 
7f90: 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  The name of the 
7fa0: 73 63 68 65 6d 61 20 74 61 62 6c 65 2e 0a 2a 2f  schema table..*/
7fb0: 0a 23 64 65 66 69 6e 65 20 53 43 48 45 4d 41 5f  .#define SCHEMA_
7fc0: 54 41 42 4c 45 28 78 29 20 20 28 28 21 4f 4d 49  TABLE(x)  ((!OMI
7fd0: 54 5f 54 45 4d 50 44 42 29 26 26 28 78 3d 3d 31  T_TEMPDB)&&(x==1
7fe0: 29 3f 54 45 4d 50 5f 4d 41 53 54 45 52 5f 4e 41  )?TEMP_MASTER_NA
7ff0: 4d 45 3a 4d 41 53 54 45 52 5f 4e 41 4d 45 29 0a  ME:MASTER_NAME).
8000: 0a 2f 2a 0a 2a 2a 20 41 20 63 6f 6e 76 65 6e 69  ./*.** A conveni
8010: 65 6e 63 65 20 6d 61 63 72 6f 20 74 68 61 74 20  ence macro that 
8020: 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62  returns the numb
8030: 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69  er of elements i
8040: 6e 0a 2a 2a 20 61 6e 20 61 72 72 61 79 2e 0a 2a  n.** an array..*
8050: 2f 0a 23 64 65 66 69 6e 65 20 41 72 72 61 79 53  /.#define ArrayS
8060: 69 7a 65 28 58 29 20 20 20 20 28 28 69 6e 74 29  ize(X)    ((int)
8070: 28 73 69 7a 65 6f 66 28 58 29 2f 73 69 7a 65 6f  (sizeof(X)/sizeo
8080: 66 28 58 5b 30 5d 29 29 29 0a 0a 2f 2a 0a 2a 2a  f(X[0])))../*.**
8090: 20 44 65 74 65 72 6d 69 6e 65 20 69 66 20 74 68   Determine if th
80a0: 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20  e argument is a 
80b0: 70 6f 77 65 72 20 6f 66 20 74 77 6f 0a 2a 2f 0a  power of two.*/.
80c0: 23 64 65 66 69 6e 65 20 49 73 50 6f 77 65 72 4f  #define IsPowerO
80d0: 66 54 77 6f 28 58 29 20 28 28 28 58 29 26 28 28  fTwo(X) (((X)&((
80e0: 58 29 2d 31 29 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a  X)-1))==0)../*.*
80f0: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
8100: 76 61 6c 75 65 20 61 73 20 61 20 64 65 73 74 72  value as a destr
8110: 75 63 74 6f 72 20 6d 65 61 6e 73 20 74 6f 20 75  uctor means to u
8120: 73 65 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  se sqlite3DbFree
8130: 28 29 2e 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74  ()..** The sqlit
8140: 65 33 44 62 46 72 65 65 28 29 20 72 6f 75 74 69  e3DbFree() routi
8150: 6e 65 20 72 65 71 75 69 72 65 73 20 74 77 6f 20  ne requires two 
8160: 70 61 72 61 6d 65 74 65 72 73 20 69 6e 73 74 65  parameters inste
8170: 61 64 20 6f 66 20 74 68 65 0a 2a 2a 20 6f 6e 65  ad of the.** one
8180: 20 70 61 72 61 6d 65 74 65 72 20 74 68 61 74 20   parameter that 
8190: 64 65 73 74 72 75 63 74 6f 72 73 20 6e 6f 72 6d  destructors norm
81a0: 61 6c 6c 79 20 77 61 6e 74 2e 20 20 53 6f 20 77  ally want.  So w
81b0: 65 20 68 61 76 65 20 74 6f 20 69 6e 74 72 6f 64  e have to introd
81c0: 75 63 65 0a 2a 2a 20 74 68 69 73 20 6d 61 67 69  uce.** this magi
81d0: 63 20 76 61 6c 75 65 20 74 68 61 74 20 74 68 65  c value that the
81e0: 20 63 6f 64 65 20 6b 6e 6f 77 73 20 74 6f 20 68   code knows to h
81f0: 61 6e 64 6c 65 20 64 69 66 66 65 72 65 6e 74 6c  andle differentl
8200: 79 2e 20 20 41 6e 79 0a 2a 2a 20 70 6f 69 6e 74  y.  Any.** point
8210: 65 72 20 77 69 6c 6c 20 77 6f 72 6b 20 68 65 72  er will work her
8220: 65 20 61 73 20 6c 6f 6e 67 20 61 73 20 69 74 20  e as long as it 
8230: 69 73 20 64 69 73 74 69 6e 63 74 20 66 72 6f 6d  is distinct from
8240: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 0a 2a   SQLITE_STATIC.*
8250: 2a 20 61 6e 64 20 53 51 4c 49 54 45 5f 54 52 41  * and SQLITE_TRA
8260: 4e 53 49 45 4e 54 2e 0a 2a 2f 0a 23 64 65 66 69  NSIENT..*/.#defi
8270: 6e 65 20 53 51 4c 49 54 45 5f 44 59 4e 41 4d 49  ne SQLITE_DYNAMI
8280: 43 20 20 20 28 28 73 71 6c 69 74 65 33 5f 64 65  C   ((sqlite3_de
8290: 73 74 72 75 63 74 6f 72 5f 74 79 70 65 29 73 71  structor_type)sq
82a0: 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 29  lite3MallocSize)
82b0: 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 53 51 4c  ../*.** When SQL
82c0: 49 54 45 5f 4f 4d 49 54 5f 57 53 44 20 69 73 20  ITE_OMIT_WSD is 
82d0: 64 65 66 69 6e 65 64 2c 20 69 74 20 6d 65 61 6e  defined, it mean
82e0: 73 20 74 68 61 74 20 74 68 65 20 74 61 72 67 65  s that the targe
82f0: 74 20 70 6c 61 74 66 6f 72 6d 20 64 6f 65 73 0a  t platform does.
8300: 2a 2a 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 57  ** not support W
8310: 72 69 74 61 62 6c 65 20 53 74 61 74 69 63 20 44  ritable Static D
8320: 61 74 61 20 28 57 53 44 29 20 73 75 63 68 20 61  ata (WSD) such a
8330: 73 20 67 6c 6f 62 61 6c 20 61 6e 64 20 73 74 61  s global and sta
8340: 74 69 63 20 76 61 72 69 61 62 6c 65 73 2e 0a 2a  tic variables..*
8350: 2a 20 41 6c 6c 20 76 61 72 69 61 62 6c 65 73 20  * All variables 
8360: 6d 75 73 74 20 65 69 74 68 65 72 20 62 65 20 6f  must either be o
8370: 6e 20 74 68 65 20 73 74 61 63 6b 20 6f 72 20 64  n the stack or d
8380: 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63  ynamically alloc
8390: 61 74 65 64 20 66 72 6f 6d 0a 2a 2a 20 74 68 65  ated from.** the
83a0: 20 68 65 61 70 2e 20 20 57 68 65 6e 20 57 53 44   heap.  When WSD
83b0: 20 69 73 20 75 6e 73 75 70 70 6f 72 74 65 64 2c   is unsupported,
83c0: 20 74 68 65 20 76 61 72 69 61 62 6c 65 20 64 65   the variable de
83d0: 63 6c 61 72 61 74 69 6f 6e 73 20 73 63 61 74 74  clarations scatt
83e0: 65 72 65 64 0a 2a 2a 20 74 68 72 6f 75 67 68 6f  ered.** througho
83f0: 75 74 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  ut the SQLite co
8400: 64 65 20 6d 75 73 74 20 62 65 63 6f 6d 65 20 63  de must become c
8410: 6f 6e 73 74 61 6e 74 73 20 69 6e 73 74 65 61 64  onstants instead
8420: 2e 20 20 54 68 65 20 53 51 4c 49 54 45 5f 57 53  .  The SQLITE_WS
8430: 44 0a 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75 73  D.** macro is us
8440: 65 64 20 66 6f 72 20 74 68 69 73 20 70 75 72 70  ed for this purp
8450: 6f 73 65 2e 20 20 41 6e 64 20 69 6e 73 74 65 61  ose.  And instea
8460: 64 20 6f 66 20 72 65 66 65 72 65 6e 63 69 6e 67  d of referencing
8470: 20 74 68 65 20 76 61 72 69 61 62 6c 65 0a 2a 2a   the variable.**
8480: 20 64 69 72 65 63 74 6c 79 2c 20 77 65 20 75 73   directly, we us
8490: 65 20 69 74 73 20 63 6f 6e 73 74 61 6e 74 20 61  e its constant a
84a0: 73 20 61 20 6b 65 79 20 74 6f 20 6c 6f 6f 6b 75  s a key to looku
84b0: 70 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20 61  p the run-time a
84c0: 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 62 75 66 66  llocated.** buff
84d0: 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20 72 65  er that holds re
84e0: 61 6c 20 76 61 72 69 61 62 6c 65 2e 20 20 54 68  al variable.  Th
84f0: 65 20 63 6f 6e 73 74 61 6e 74 20 69 73 20 61 6c  e constant is al
8500: 73 6f 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a  so the initializ
8510: 65 72 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 75  er.** for the ru
8520: 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65 64  n-time allocated
8530: 20 62 75 66 66 65 72 2e 0a 2a 2a 0a 2a 2a 20 49   buffer..**.** I
8540: 6e 20 74 68 65 20 75 73 75 61 6c 20 63 61 73 65  n the usual case
8550: 20 77 68 65 72 65 20 57 53 44 20 69 73 20 73 75   where WSD is su
8560: 70 70 6f 72 74 65 64 2c 20 74 68 65 20 53 51 4c  pported, the SQL
8570: 49 54 45 5f 57 53 44 20 61 6e 64 20 47 4c 4f 42  ITE_WSD and GLOB
8580: 41 4c 0a 2a 2a 20 6d 61 63 72 6f 73 20 62 65 63  AL.** macros bec
8590: 6f 6d 65 20 6e 6f 2d 6f 70 73 20 61 6e 64 20 68  ome no-ops and h
85a0: 61 76 65 20 7a 65 72 6f 20 70 65 72 66 6f 72 6d  ave zero perform
85b0: 61 6e 63 65 20 69 6d 70 61 63 74 2e 0a 2a 2f 0a  ance impact..*/.
85c0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
85d0: 49 54 5f 57 53 44 0a 20 20 23 64 65 66 69 6e 65  IT_WSD.  #define
85e0: 20 53 51 4c 49 54 45 5f 57 53 44 20 63 6f 6e 73   SQLITE_WSD cons
85f0: 74 0a 20 20 23 64 65 66 69 6e 65 20 47 4c 4f 42  t.  #define GLOB
8600: 41 4c 28 74 2c 76 29 20 28 2a 28 74 2a 29 73 71  AL(t,v) (*(t*)sq
8610: 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e 64 28 28  lite3_wsd_find((
8620: 76 6f 69 64 2a 29 26 28 76 29 2c 20 73 69 7a 65  void*)&(v), size
8630: 6f 66 28 76 29 29 29 0a 20 20 23 64 65 66 69 6e  of(v))).  #defin
8640: 65 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43  e sqlite3GlobalC
8650: 6f 6e 66 69 67 20 47 4c 4f 42 41 4c 28 73 74 72  onfig GLOBAL(str
8660: 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69  uct Sqlite3Confi
8670: 67 2c 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67  g, sqlite3Config
8680: 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 5f  ).  int sqlite3_
8690: 77 73 64 5f 69 6e 69 74 28 69 6e 74 20 4e 2c 20  wsd_init(int N, 
86a0: 69 6e 74 20 4a 29 3b 0a 20 20 76 6f 69 64 20 2a  int J);.  void *
86b0: 73 71 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e 64  sqlite3_wsd_find
86c0: 28 76 6f 69 64 20 2a 4b 2c 20 69 6e 74 20 4c 29  (void *K, int L)
86d0: 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
86e0: 65 20 53 51 4c 49 54 45 5f 57 53 44 0a 20 20 23  e SQLITE_WSD.  #
86f0: 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28 74 2c  define GLOBAL(t,
8700: 76 29 20 76 0a 20 20 23 64 65 66 69 6e 65 20 73  v) v.  #define s
8710: 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66  qlite3GlobalConf
8720: 69 67 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67  ig sqlite3Config
8730: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
8740: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63  he following mac
8750: 72 6f 73 20 61 72 65 20 75 73 65 64 20 74 6f 20  ros are used to 
8760: 73 75 70 70 72 65 73 73 20 63 6f 6d 70 69 6c 65  suppress compile
8770: 72 20 77 61 72 6e 69 6e 67 73 20 61 6e 64 20 74  r warnings and t
8780: 6f 0a 2a 2a 20 6d 61 6b 65 20 69 74 20 63 6c 65  o.** make it cle
8790: 61 72 20 74 6f 20 68 75 6d 61 6e 20 72 65 61 64  ar to human read
87a0: 65 72 73 20 77 68 65 6e 20 61 20 66 75 6e 63 74  ers when a funct
87b0: 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69 73  ion parameter is
87c0: 20 64 65 6c 69 62 65 72 61 74 65 6c 79 0a 2a 2a   deliberately.**
87d0: 20 6c 65 66 74 20 75 6e 75 73 65 64 20 77 69 74   left unused wit
87e0: 68 69 6e 20 74 68 65 20 62 6f 64 79 20 6f 66 20  hin the body of 
87f0: 61 20 66 75 6e 63 74 69 6f 6e 2e 20 54 68 69 73  a function. This
8800: 20 75 73 75 61 6c 6c 79 20 68 61 70 70 65 6e 73   usually happens
8810: 20 77 68 65 6e 0a 2a 2a 20 61 20 66 75 6e 63 74   when.** a funct
8820: 69 6f 6e 20 69 73 20 63 61 6c 6c 65 64 20 76 69  ion is called vi
8830: 61 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69  a a function poi
8840: 6e 74 65 72 2e 20 46 6f 72 20 65 78 61 6d 70 6c  nter. For exampl
8850: 65 20 74 68 65 0a 2a 2a 20 69 6d 70 6c 65 6d 65  e the.** impleme
8860: 6e 74 61 74 69 6f 6e 20 6f 66 20 61 6e 20 53 51  ntation of an SQ
8870: 4c 20 61 67 67 72 65 67 61 74 65 20 73 74 65 70  L aggregate step
8880: 20 63 61 6c 6c 62 61 63 6b 20 6d 61 79 20 6e 6f   callback may no
8890: 74 20 75 73 65 20 74 68 65 0a 2a 2a 20 70 61 72  t use the.** par
88a0: 61 6d 65 74 65 72 20 69 6e 64 69 63 61 74 69 6e  ameter indicatin
88b0: 67 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  g the number of 
88c0: 61 72 67 75 6d 65 6e 74 73 20 70 61 73 73 65 64  arguments passed
88d0: 20 74 6f 20 74 68 65 20 61 67 67 72 65 67 61 74   to the aggregat
88e0: 65 2c 0a 2a 2a 20 69 66 20 69 74 20 6b 6e 6f 77  e,.** if it know
88f0: 73 20 74 68 61 74 20 74 68 69 73 20 69 73 20 65  s that this is e
8900: 6e 66 6f 72 63 65 64 20 65 6c 73 65 77 68 65 72  nforced elsewher
8910: 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61 20  e..**.** When a 
8920: 66 75 6e 63 74 69 6f 6e 20 70 61 72 61 6d 65 74  function paramet
8930: 65 72 20 69 73 20 6e 6f 74 20 75 73 65 64 20 61  er is not used a
8940: 74 20 61 6c 6c 20 77 69 74 68 69 6e 20 74 68 65  t all within the
8950: 20 62 6f 64 79 20 6f 66 20 61 20 66 75 6e 63 74   body of a funct
8960: 69 6f 6e 2c 0a 2a 2a 20 69 74 20 69 73 20 67 65  ion,.** it is ge
8970: 6e 65 72 61 6c 6c 79 20 6e 61 6d 65 64 20 22 4e  nerally named "N
8980: 6f 74 55 73 65 64 22 20 6f 72 20 22 4e 6f 74 55  otUsed" or "NotU
8990: 73 65 64 32 22 20 74 6f 20 6d 61 6b 65 20 74 68  sed2" to make th
89a0: 69 6e 67 73 20 65 76 65 6e 20 63 6c 65 61 72 65  ings even cleare
89b0: 72 2e 0a 2a 2a 20 48 6f 77 65 76 65 72 2c 20 74  r..** However, t
89c0: 68 65 73 65 20 6d 61 63 72 6f 73 20 6d 61 79 20  hese macros may 
89d0: 61 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f 20  also be used to 
89e0: 73 75 70 70 72 65 73 73 20 77 61 72 6e 69 6e 67  suppress warning
89f0: 73 20 72 65 6c 61 74 65 64 20 74 6f 0a 2a 2a 20  s related to.** 
8a00: 70 61 72 61 6d 65 74 65 72 73 20 74 68 61 74 20  parameters that 
8a10: 6d 61 79 20 6f 72 20 6d 61 79 20 6e 6f 74 20 62  may or may not b
8a20: 65 20 75 73 65 64 20 64 65 70 65 6e 64 69 6e 67  e used depending
8a30: 20 6f 6e 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20   on compilation 
8a40: 6f 70 74 69 6f 6e 73 2e 0a 2a 2a 20 46 6f 72 20  options..** For 
8a50: 65 78 61 6d 70 6c 65 20 74 68 6f 73 65 20 70 61  example those pa
8a60: 72 61 6d 65 74 65 72 73 20 6f 6e 6c 79 20 75 73  rameters only us
8a70: 65 64 20 69 6e 20 61 73 73 65 72 74 28 29 20 73  ed in assert() s
8a80: 74 61 74 65 6d 65 6e 74 73 2e 20 49 6e 20 74 68  tatements. In th
8a90: 65 73 65 0a 2a 2a 20 63 61 73 65 73 20 74 68 65  ese.** cases the
8aa0: 20 70 61 72 61 6d 65 74 65 72 73 20 61 72 65 20   parameters are 
8ab0: 6e 61 6d 65 64 20 61 73 20 70 65 72 20 74 68 65  named as per the
8ac0: 20 75 73 75 61 6c 20 63 6f 6e 76 65 6e 74 69 6f   usual conventio
8ad0: 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 55  ns..*/.#define U
8ae0: 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28  NUSED_PARAMETER(
8af0: 78 29 20 28 76 6f 69 64 29 28 78 29 0a 23 64 65  x) (void)(x).#de
8b00: 66 69 6e 65 20 55 4e 55 53 45 44 5f 50 41 52 41  fine UNUSED_PARA
8b10: 4d 45 54 45 52 32 28 78 2c 79 29 20 55 4e 55 53  METER2(x,y) UNUS
8b20: 45 44 5f 50 41 52 41 4d 45 54 45 52 28 78 29 2c  ED_PARAMETER(x),
8b30: 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
8b40: 28 79 29 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 77 61  (y)../*.** Forwa
8b50: 72 64 20 72 65 66 65 72 65 6e 63 65 73 20 74 6f  rd references to
8b60: 20 73 74 72 75 63 74 75 72 65 73 0a 2a 2f 0a 74   structures.*/.t
8b70: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 41 67  ypedef struct Ag
8b80: 67 49 6e 66 6f 20 41 67 67 49 6e 66 6f 3b 0a 74  gInfo AggInfo;.t
8b90: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 41 75  ypedef struct Au
8ba0: 74 68 43 6f 6e 74 65 78 74 20 41 75 74 68 43 6f  thContext AuthCo
8bb0: 6e 74 65 78 74 3b 0a 74 79 70 65 64 65 66 20 73  ntext;.typedef s
8bc0: 74 72 75 63 74 20 41 75 74 6f 69 6e 63 49 6e 66  truct AutoincInf
8bd0: 6f 20 41 75 74 6f 69 6e 63 49 6e 66 6f 3b 0a 74  o AutoincInfo;.t
8be0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 42 69  ypedef struct Bi
8bf0: 74 76 65 63 20 42 69 74 76 65 63 3b 0a 74 79 70  tvec Bitvec;.typ
8c00: 65 64 65 66 20 73 74 72 75 63 74 20 43 6f 6c 6c  edef struct Coll
8c10: 53 65 71 20 43 6f 6c 6c 53 65 71 3b 0a 74 79 70  Seq CollSeq;.typ
8c20: 65 64 65 66 20 73 74 72 75 63 74 20 43 6f 6c 75  edef struct Colu
8c30: 6d 6e 20 43 6f 6c 75 6d 6e 3b 0a 74 79 70 65 64  mn Column;.typed
8c40: 65 66 20 73 74 72 75 63 74 20 44 62 20 44 62 3b  ef struct Db Db;
8c50: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8c60: 53 63 68 65 6d 61 20 53 63 68 65 6d 61 3b 0a 74  Schema Schema;.t
8c70: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 45 78  ypedef struct Ex
8c80: 70 72 20 45 78 70 72 3b 0a 74 79 70 65 64 65 66  pr Expr;.typedef
8c90: 20 73 74 72 75 63 74 20 45 78 70 72 4c 69 73 74   struct ExprList
8ca0: 20 45 78 70 72 4c 69 73 74 3b 0a 74 79 70 65 64   ExprList;.typed
8cb0: 65 66 20 73 74 72 75 63 74 20 46 4b 65 79 20 46  ef struct FKey F
8cc0: 4b 65 79 3b 0a 74 79 70 65 64 65 66 20 73 74 72  Key;.typedef str
8cd0: 75 63 74 20 46 75 6e 63 44 65 73 74 72 75 63 74  uct FuncDestruct
8ce0: 6f 72 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  or FuncDestructo
8cf0: 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  r;.typedef struc
8d00: 74 20 46 75 6e 63 44 65 66 20 46 75 6e 63 44 65  t FuncDef FuncDe
8d10: 66 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  f;.typedef struc
8d20: 74 20 46 75 6e 63 44 65 66 48 61 73 68 20 46 75  t FuncDefHash Fu
8d30: 6e 63 44 65 66 48 61 73 68 3b 0a 74 79 70 65 64  ncDefHash;.typed
8d40: 65 66 20 73 74 72 75 63 74 20 49 64 4c 69 73 74  ef struct IdList
8d50: 20 49 64 4c 69 73 74 3b 0a 74 79 70 65 64 65 66   IdList;.typedef
8d60: 20 73 74 72 75 63 74 20 49 6e 64 65 78 20 49 6e   struct Index In
8d70: 64 65 78 3b 0a 74 79 70 65 64 65 66 20 73 74 72  dex;.typedef str
8d80: 75 63 74 20 49 6e 64 65 78 53 61 6d 70 6c 65 20  uct IndexSample 
8d90: 49 6e 64 65 78 53 61 6d 70 6c 65 3b 0a 74 79 70  IndexSample;.typ
8da0: 65 64 65 66 20 73 74 72 75 63 74 20 4b 65 79 43  edef struct KeyC
8db0: 6c 61 73 73 20 4b 65 79 43 6c 61 73 73 3b 0a 74  lass KeyClass;.t
8dc0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4b 65  ypedef struct Ke
8dd0: 79 49 6e 66 6f 20 4b 65 79 49 6e 66 6f 3b 0a 74  yInfo KeyInfo;.t
8de0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4c 6f  ypedef struct Lo
8df0: 6f 6b 61 73 69 64 65 20 4c 6f 6f 6b 61 73 69 64  okaside Lookasid
8e00: 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  e;.typedef struc
8e10: 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20  t LookasideSlot 
8e20: 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 3b 0a 74  LookasideSlot;.t
8e30: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4d 6f  ypedef struct Mo
8e40: 64 75 6c 65 20 4d 6f 64 75 6c 65 3b 0a 74 79 70  dule Module;.typ
8e50: 65 64 65 66 20 73 74 72 75 63 74 20 4e 61 6d 65  edef struct Name
8e60: 43 6f 6e 74 65 78 74 20 4e 61 6d 65 43 6f 6e 74  Context NameCont
8e70: 65 78 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ext;.typedef str
8e80: 75 63 74 20 50 61 72 73 65 20 50 61 72 73 65 3b  uct Parse Parse;
8e90: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8ea0: 50 72 65 55 70 64 61 74 65 20 50 72 65 55 70 64  PreUpdate PreUpd
8eb0: 61 74 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ate;.typedef str
8ec0: 75 63 74 20 50 72 69 6e 74 66 41 72 67 75 6d 65  uct PrintfArgume
8ed0: 6e 74 73 20 50 72 69 6e 74 66 41 72 67 75 6d 65  nts PrintfArgume
8ee0: 6e 74 73 3b 0a 74 79 70 65 64 65 66 20 73 74 72  nts;.typedef str
8ef0: 75 63 74 20 52 6f 77 53 65 74 20 52 6f 77 53 65  uct RowSet RowSe
8f00: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
8f10: 74 20 53 61 76 65 70 6f 69 6e 74 20 53 61 76 65  t Savepoint Save
8f20: 70 6f 69 6e 74 3b 0a 74 79 70 65 64 65 66 20 73  point;.typedef s
8f30: 74 72 75 63 74 20 53 65 6c 65 63 74 20 53 65 6c  truct Select Sel
8f40: 65 63 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ect;.typedef str
8f50: 75 63 74 20 53 51 4c 69 74 65 54 68 72 65 61 64  uct SQLiteThread
8f60: 20 53 51 4c 69 74 65 54 68 72 65 61 64 3b 0a 74   SQLiteThread;.t
8f70: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 65  ypedef struct Se
8f80: 6c 65 63 74 44 65 73 74 20 53 65 6c 65 63 74 44  lectDest SelectD
8f90: 65 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  est;.typedef str
8fa0: 75 63 74 20 53 72 63 4c 69 73 74 20 53 72 63 4c  uct SrcList SrcL
8fb0: 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ist;.typedef str
8fc0: 75 63 74 20 53 74 72 41 63 63 75 6d 20 53 74 72  uct StrAccum Str
8fd0: 41 63 63 75 6d 3b 0a 74 79 70 65 64 65 66 20 73  Accum;.typedef s
8fe0: 74 72 75 63 74 20 54 61 62 6c 65 20 54 61 62 6c  truct Table Tabl
8ff0: 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  e;.typedef struc
9000: 74 20 54 61 62 6c 65 4c 6f 63 6b 20 54 61 62 6c  t TableLock Tabl
9010: 65 4c 6f 63 6b 3b 0a 74 79 70 65 64 65 66 20 73  eLock;.typedef s
9020: 74 72 75 63 74 20 54 6f 6b 65 6e 20 54 6f 6b 65  truct Token Toke
9030: 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  n;.typedef struc
9040: 74 20 54 72 65 65 56 69 65 77 20 54 72 65 65 56  t TreeView TreeV
9050: 69 65 77 3b 0a 74 79 70 65 64 65 66 20 73 74 72  iew;.typedef str
9060: 75 63 74 20 54 72 69 67 67 65 72 20 54 72 69 67  uct Trigger Trig
9070: 67 65 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ger;.typedef str
9080: 75 63 74 20 54 72 69 67 67 65 72 50 72 67 20 54  uct TriggerPrg T
9090: 72 69 67 67 65 72 50 72 67 3b 0a 74 79 70 65 64  riggerPrg;.typed
90a0: 65 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65  ef struct Trigge
90b0: 72 53 74 65 70 20 54 72 69 67 67 65 72 53 74 65  rStep TriggerSte
90c0: 70 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  p;.typedef struc
90d0: 74 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64  t UnpackedRecord
90e0: 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 3b   UnpackedRecord;
90f0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9100: 56 54 61 62 6c 65 20 56 54 61 62 6c 65 3b 0a 74  VTable VTable;.t
9110: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 56 74  ypedef struct Vt
9120: 61 62 43 74 78 20 56 74 61 62 43 74 78 3b 0a 74  abCtx VtabCtx;.t
9130: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 57 61  ypedef struct Wa
9140: 6c 6b 65 72 20 57 61 6c 6b 65 72 3b 0a 74 79 70  lker Walker;.typ
9150: 65 64 65 66 20 73 74 72 75 63 74 20 57 68 65 72  edef struct Wher
9160: 65 49 6e 66 6f 20 57 68 65 72 65 49 6e 66 6f 3b  eInfo WhereInfo;
9170: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9180: 57 69 74 68 20 57 69 74 68 3b 0a 0a 2f 2a 20 41  With With;../* A
9190: 20 56 4c 69 73 74 20 6f 62 6a 65 63 74 20 72 65   VList object re
91a0: 63 6f 72 64 73 20 61 20 6d 61 70 70 69 6e 67 20  cords a mapping 
91b0: 62 65 74 77 65 65 6e 20 70 61 72 61 6d 65 74 65  between paramete
91c0: 72 73 2f 76 61 72 69 61 62 6c 65 73 2f 77 69 6c  rs/variables/wil
91d0: 64 63 61 72 64 73 0a 2a 2a 20 69 6e 20 74 68 65  dcards.** in the
91e0: 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 28   SQL statement (
91f0: 73 75 63 68 20 61 73 20 24 61 62 63 2c 20 40 70  such as $abc, @p
9200: 71 72 2c 20 6f 72 20 3a 78 79 7a 29 20 61 6e 64  qr, or :xyz) and
9210: 20 74 68 65 20 69 6e 74 65 67 65 72 0a 2a 2a 20   the integer.** 
9220: 76 61 72 69 61 62 6c 65 20 6e 75 6d 62 65 72 20  variable number 
9230: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
9240: 74 68 61 74 20 70 61 72 61 6d 65 74 65 72 2e 20  that parameter. 
9250: 20 53 65 65 20 74 68 65 20 66 6f 72 6d 61 74 20   See the format 
9260: 64 65 73 63 72 69 70 74 69 6f 6e 0a 2a 2a 20 6f  description.** o
9270: 6e 20 74 68 65 20 73 71 6c 69 74 65 33 56 4c 69  n the sqlite3VLi
9280: 73 74 41 64 64 28 29 20 72 6f 75 74 69 6e 65 20  stAdd() routine 
9290: 66 6f 72 20 6d 6f 72 65 20 69 6e 66 6f 72 6d 61  for more informa
92a0: 74 69 6f 6e 2e 20 20 41 20 56 4c 69 73 74 20 69  tion.  A VList i
92b0: 73 20 72 65 61 6c 6c 79 0a 2a 2a 20 6a 75 73 74  s really.** just
92c0: 20 61 6e 20 61 72 72 61 79 20 6f 66 20 69 6e 74   an array of int
92d0: 65 67 65 72 73 2e 0a 2a 2f 0a 74 79 70 65 64 65  egers..*/.typede
92e0: 66 20 69 6e 74 20 56 4c 69 73 74 3b 0a 0a 2f 2a  f int VList;../*
92f0: 0a 2a 2a 20 44 65 66 65 72 20 73 6f 75 72 63 69  .** Defer sourci
9300: 6e 67 20 76 64 62 65 2e 68 20 61 6e 64 20 62 74  ng vdbe.h and bt
9310: 72 65 65 2e 68 20 75 6e 74 69 6c 20 61 66 74 65  ree.h until afte
9320: 72 20 74 68 65 20 22 75 38 22 20 61 6e 64 0a 2a  r the "u8" and.*
9330: 2a 20 22 42 75 73 79 48 61 6e 64 6c 65 72 22 20  * "BusyHandler" 
9340: 74 79 70 65 64 65 66 73 2e 20 76 64 62 65 2e 68  typedefs. vdbe.h
9350: 20 61 6c 73 6f 20 72 65 71 75 69 72 65 73 20 61   also requires a
9360: 20 66 65 77 20 6f 66 20 74 68 65 20 6f 70 61 71   few of the opaq
9370: 75 65 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 79  ue.** pointer ty
9380: 70 65 73 20 28 69 2e 65 2e 20 46 75 6e 63 44 65  pes (i.e. FuncDe
9390: 66 29 20 64 65 66 69 6e 65 64 20 61 62 6f 76 65  f) defined above
93a0: 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 62  ..*/.#include "b
93b0: 74 72 65 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65  tree.h".#include
93c0: 20 22 76 64 62 65 2e 68 22 0a 23 69 6e 63 6c 75   "vdbe.h".#inclu
93d0: 64 65 20 22 70 61 67 65 72 2e 68 22 0a 23 69 6e  de "pager.h".#in
93e0: 63 6c 75 64 65 20 22 70 63 61 63 68 65 2e 68 22  clude "pcache.h"
93f0: 0a 23 69 6e 63 6c 75 64 65 20 22 6f 73 2e 68 22  .#include "os.h"
9400: 0a 23 69 6e 63 6c 75 64 65 20 22 6d 75 74 65 78  .#include "mutex
9410: 2e 68 22 0a 0a 2f 2a 20 54 68 65 20 53 51 4c 49  .h"../* The SQLI
9420: 54 45 5f 45 58 54 52 41 5f 44 55 52 41 42 4c 45  TE_EXTRA_DURABLE
9430: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70   compile-time op
9440: 74 69 6f 6e 20 75 73 65 64 20 74 6f 20 73 65 74  tion used to set
9450: 20 74 68 65 20 64 65 66 61 75 6c 74 0a 2a 2a 20   the default.** 
9460: 73 79 6e 63 68 72 6f 6e 6f 75 73 20 73 65 74 74  synchronous sett
9470: 69 6e 67 20 74 6f 20 45 58 54 52 41 2e 20 20 49  ing to EXTRA.  I
9480: 74 20 69 73 20 6e 6f 20 6c 6f 6e 67 65 72 20 73  t is no longer s
9490: 75 70 70 6f 72 74 65 64 2e 0a 2a 2f 0a 23 69 66  upported..*/.#if
94a0: 64 65 66 20 53 51 4c 49 54 45 5f 45 58 54 52 41  def SQLITE_EXTRA
94b0: 5f 44 55 52 41 42 4c 45 0a 23 20 77 61 72 6e 69  _DURABLE.# warni
94c0: 6e 67 20 55 73 65 20 53 51 4c 49 54 45 5f 44 45  ng Use SQLITE_DE
94d0: 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55  FAULT_SYNCHRONOU
94e0: 53 3d 33 20 69 6e 73 74 65 61 64 20 6f 66 20 53  S=3 instead of S
94f0: 51 4c 49 54 45 5f 45 58 54 52 41 5f 44 55 52 41  QLITE_EXTRA_DURA
9500: 42 4c 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  BLE.# define SQL
9510: 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43  ITE_DEFAULT_SYNC
9520: 48 52 4f 4e 4f 55 53 20 33 0a 23 65 6e 64 69 66  HRONOUS 3.#endif
9530: 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 61 75 6c 74 20  ../*.** Default 
9540: 73 79 6e 63 68 72 6f 6e 6f 75 73 20 6c 65 76 65  synchronous leve
9550: 6c 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74  ls..**.** Note t
9560: 68 61 74 20 28 66 6f 72 20 68 69 73 74 6f 72 63  hat (for historc
9570: 61 6c 20 72 65 61 73 6f 6e 73 29 20 74 68 65 20  al reasons) the 
9580: 50 41 47 45 52 5f 53 59 4e 43 48 52 4f 4e 4f 55  PAGER_SYNCHRONOU
9590: 53 5f 2a 20 6d 61 63 72 6f 73 20 64 69 66 66 65  S_* macros diffe
95a0: 72 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 53 51  r.** from the SQ
95b0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e  LITE_DEFAULT_SYN
95c0: 43 48 52 4f 4e 4f 55 53 20 76 61 6c 75 65 20 62  CHRONOUS value b
95d0: 79 20 31 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20  y 1..**.**      
95e0: 20 20 20 20 20 50 41 47 45 52 5f 53 59 4e 43 48       PAGER_SYNCH
95f0: 52 4f 4e 4f 55 53 20 20 20 20 20 20 20 44 45 46  RONOUS       DEF
9600: 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53  AULT_SYNCHRONOUS
9610: 0a 2a 2a 20 20 20 4f 46 46 20 20 20 20 20 20 20  .**   OFF       
9620: 20 20 20 20 31 20 20 20 20 20 20 20 20 20 20 20      1           
9630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30 0a                0.
9640: 2a 2a 20 20 20 4e 4f 52 4d 41 4c 20 20 20 20 20  **   NORMAL     
9650: 20 20 20 32 20 20 20 20 20 20 20 20 20 20 20 20     2            
9660: 20 20 20 20 20 20 20 20 20 20 20 20 20 31 0a 2a               1.*
9670: 2a 20 20 20 46 55 4c 4c 20 20 20 20 20 20 20 20  *   FULL        
9680: 20 20 33 20 20 20 20 20 20 20 20 20 20 20 20 20    3             
9690: 20 20 20 20 20 20 20 20 20 20 20 20 32 0a 2a 2a              2.**
96a0: 20 20 20 45 58 54 52 41 20 20 20 20 20 20 20 20     EXTRA        
96b0: 20 34 20 20 20 20 20 20 20 20 20 20 20 20 20 20   4              
96c0: 20 20 20 20 20 20 20 20 20 20 20 33 0a 2a 2a 0a             3.**.
96d0: 2a 2a 20 54 68 65 20 22 50 52 41 47 4d 41 20 73  ** The "PRAGMA s
96e0: 79 6e 63 68 72 6f 6e 6f 75 73 22 20 73 74 61 74  ynchronous" stat
96f0: 65 6d 65 6e 74 20 61 6c 73 6f 20 75 73 65 73 20  ement also uses 
9700: 74 68 65 20 7a 65 72 6f 2d 62 61 73 65 64 20 6e  the zero-based n
9710: 75 6d 62 65 72 73 2e 0a 2a 2a 20 49 6e 20 6f 74  umbers..** In ot
9720: 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 7a  her words, the z
9730: 65 72 6f 2d 62 61 73 65 64 20 6e 75 6d 62 65 72  ero-based number
9740: 73 20 61 72 65 20 75 73 65 64 20 66 6f 72 20 61  s are used for a
9750: 6c 6c 20 65 78 74 65 72 6e 61 6c 20 69 6e 74 65  ll external inte
9760: 72 66 61 63 65 73 0a 2a 2a 20 61 6e 64 20 74 68  rfaces.** and th
9770: 65 20 6f 6e 65 2d 62 61 73 65 64 20 76 61 6c 75  e one-based valu
9780: 65 73 20 61 72 65 20 75 73 65 64 20 69 6e 74 65  es are used inte
9790: 72 6e 61 6c 6c 79 2e 0a 2a 2f 0a 23 69 66 6e 64  rnally..*/.#ifnd
97a0: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
97b0: 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 23 20  T_SYNCHRONOUS.# 
97c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
97d0: 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55  FAULT_SYNCHRONOU
97e0: 53 20 32 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  S 2.#endif.#ifnd
97f0: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
9800: 54 5f 57 41 4c 5f 53 59 4e 43 48 52 4f 4e 4f 55  T_WAL_SYNCHRONOU
9810: 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  S.# define SQLIT
9820: 45 5f 44 45 46 41 55 4c 54 5f 57 41 4c 5f 53 59  E_DEFAULT_WAL_SY
9830: 4e 43 48 52 4f 4e 4f 55 53 20 53 51 4c 49 54 45  NCHRONOUS SQLITE
9840: 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f  _DEFAULT_SYNCHRO
9850: 4e 4f 55 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  NOUS.#endif../*.
9860: 2a 2a 20 45 61 63 68 20 64 61 74 61 62 61 73 65  ** Each database
9870: 20 66 69 6c 65 20 74 6f 20 62 65 20 61 63 63 65   file to be acce
9880: 73 73 65 64 20 62 79 20 74 68 65 20 73 79 73 74  ssed by the syst
9890: 65 6d 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63  em is an instanc
98a0: 65 0a 2a 2a 20 6f 66 20 74 68 65 20 66 6f 6c 6c  e.** of the foll
98b0: 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e  owing structure.
98c0: 20 20 54 68 65 72 65 20 61 72 65 20 6e 6f 72 6d    There are norm
98d0: 61 6c 6c 79 20 74 77 6f 20 6f 66 20 74 68 65 73  ally two of thes
98e0: 65 20 73 74 72 75 63 74 75 72 65 73 0a 2a 2a 20  e structures.** 
98f0: 69 6e 20 74 68 65 20 73 71 6c 69 74 65 2e 61 44  in the sqlite.aD
9900: 62 5b 5d 20 61 72 72 61 79 2e 20 20 61 44 62 5b  b[] array.  aDb[
9910: 30 5d 20 69 73 20 74 68 65 20 6d 61 69 6e 20 64  0] is the main d
9920: 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64  atabase file and
9930: 0a 2a 2a 20 61 44 62 5b 31 5d 20 69 73 20 74 68  .** aDb[1] is th
9940: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
9950: 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 74 65 6d  used to hold tem
9960: 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 20 20  porary tables.  
9970: 41 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20 64 61  Additional.** da
9980: 74 61 62 61 73 65 73 20 6d 61 79 20 62 65 20 61  tabases may be a
9990: 74 74 61 63 68 65 64 2e 0a 2a 2f 0a 73 74 72 75  ttached..*/.stru
99a0: 63 74 20 44 62 20 7b 0a 20 20 63 68 61 72 20 2a  ct Db {.  char *
99b0: 7a 44 62 53 4e 61 6d 65 3b 20 20 20 20 20 20 2f  zDbSName;      /
99c0: 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 64  * Name of this d
99d0: 61 74 61 62 61 73 65 2e 20 28 73 63 68 65 6d 61  atabase. (schema
99e0: 20 6e 61 6d 65 2c 20 6e 6f 74 20 66 69 6c 65 6e   name, not filen
99f0: 61 6d 65 29 20 2a 2f 0a 20 20 42 74 72 65 65 20  ame) */.  Btree 
9a00: 2a 70 42 74 3b 20 20 20 20 20 20 20 20 20 20 2f  *pBt;          /
9a10: 2a 20 54 68 65 20 42 2a 54 72 65 65 20 73 74 72  * The B*Tree str
9a20: 75 63 74 75 72 65 20 66 6f 72 20 74 68 69 73 20  ucture for this 
9a30: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 2a 2f  database file */
9a40: 0a 20 20 75 38 20 73 61 66 65 74 79 5f 6c 65 76  .  u8 safety_lev
9a50: 65 6c 3b 20 20 20 20 20 2f 2a 20 48 6f 77 20 61  el;     /* How a
9a60: 67 67 72 65 73 73 69 76 65 20 61 74 20 73 79 6e  ggressive at syn
9a70: 63 69 6e 67 20 64 61 74 61 20 74 6f 20 64 69 73  cing data to dis
9a80: 6b 20 2a 2f 0a 20 20 75 38 20 62 53 79 6e 63 53  k */.  u8 bSyncS
9a90: 65 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  et;         /* T
9aa0: 72 75 65 20 69 66 20 22 50 52 41 47 4d 41 20 73  rue if "PRAGMA s
9ab0: 79 6e 63 68 72 6f 6e 6f 75 73 3d 4e 22 20 68 61  ynchronous=N" ha
9ac0: 73 20 62 65 65 6e 20 72 75 6e 20 2a 2f 0a 20 20  s been run */.  
9ad0: 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
9ae0: 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20       /* Pointer 
9af0: 74 6f 20 64 61 74 61 62 61 73 65 20 73 63 68 65  to database sche
9b00: 6d 61 20 28 70 6f 73 73 69 62 6c 79 20 73 68 61  ma (possibly sha
9b10: 72 65 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  red) */.};../*.*
9b20: 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
9b30: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
9b40: 74 72 75 63 74 75 72 65 20 73 74 6f 72 65 73 20  tructure stores 
9b50: 61 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  a database schem
9b60: 61 2e 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63  a..**.** Most Sc
9b70: 68 65 6d 61 20 6f 62 6a 65 63 74 73 20 61 72 65  hema objects are
9b80: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
9b90: 20 61 20 42 74 72 65 65 2e 20 20 54 68 65 20 65   a Btree.  The e
9ba0: 78 63 65 70 74 69 6f 6e 20 69 73 0a 2a 2a 20 74  xception is.** t
9bb0: 68 65 20 53 63 68 65 6d 61 20 66 6f 72 20 74 68  he Schema for th
9bc0: 65 20 54 45 4d 50 20 64 61 74 61 62 61 65 73 20  e TEMP databaes 
9bd0: 28 73 71 6c 69 74 65 33 2e 61 44 62 5b 31 5d 29  (sqlite3.aDb[1])
9be0: 20 77 68 69 63 68 20 69 73 20 66 72 65 65 2d 73   which is free-s
9bf0: 74 61 6e 64 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73  tanding..** In s
9c00: 68 61 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65  hared cache mode
9c10: 2c 20 61 20 73 69 6e 67 6c 65 20 53 63 68 65 6d  , a single Schem
9c20: 61 20 6f 62 6a 65 63 74 20 63 61 6e 20 62 65 20  a object can be 
9c30: 73 68 61 72 65 64 20 62 79 20 6d 75 6c 74 69 70  shared by multip
9c40: 6c 65 0a 2a 2a 20 42 74 72 65 65 73 20 74 68 61  le.** Btrees tha
9c50: 74 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 73  t refer to the s
9c60: 61 6d 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 42  ame underlying B
9c70: 74 53 68 61 72 65 64 20 6f 62 6a 65 63 74 2e 0a  tShared object..
9c80: 2a 2a 0a 2a 2a 20 53 63 68 65 6d 61 20 6f 62 6a  **.** Schema obj
9c90: 65 63 74 73 20 61 72 65 20 61 75 74 6f 6d 61 74  ects are automat
9ca0: 69 63 61 6c 6c 79 20 64 65 61 6c 6c 6f 63 61 74  ically deallocat
9cb0: 65 64 20 77 68 65 6e 20 74 68 65 20 6c 61 73 74  ed when the last
9cc0: 20 42 74 72 65 65 20 74 68 61 74 0a 2a 2a 20 72   Btree that.** r
9cd0: 65 66 65 72 65 6e 63 65 73 20 74 68 65 6d 20 69  eferences them i
9ce0: 73 20 64 65 73 74 72 6f 79 65 64 2e 20 20 20 54  s destroyed.   T
9cf0: 68 65 20 54 45 4d 50 20 53 63 68 65 6d 61 20 69  he TEMP Schema i
9d00: 73 20 6d 61 6e 75 61 6c 6c 79 20 66 72 65 65 64  s manually freed
9d10: 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63   by.** sqlite3_c
9d20: 6c 6f 73 65 28 29 2e 0a 2a 0a 2a 2a 20 41 20 74  lose()..*.** A t
9d30: 68 72 65 61 64 20 6d 75 73 74 20 62 65 20 68 6f  hread must be ho
9d40: 6c 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e  lding a mutex on
9d50: 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
9d60: 6e 67 20 42 74 72 65 65 20 69 6e 20 6f 72 64 65  ng Btree in orde
9d70: 72 0a 2a 2a 20 74 6f 20 61 63 63 65 73 73 20 53  r.** to access S
9d80: 63 68 65 6d 61 20 63 6f 6e 74 65 6e 74 2e 20 20  chema content.  
9d90: 54 68 69 73 20 69 6d 70 6c 69 65 73 20 74 68 61  This implies tha
9da0: 74 20 74 68 65 20 74 68 72 65 61 64 20 6d 75 73  t the thread mus
9db0: 74 20 61 6c 73 6f 20 62 65 0a 2a 2a 20 68 6f 6c  t also be.** hol
9dc0: 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20  ding a mutex on 
9dd0: 74 68 65 20 73 71 6c 69 74 65 33 20 63 6f 6e 6e  the sqlite3 conn
9de0: 65 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 74  ection pointer t
9df0: 68 61 74 20 6f 77 6e 73 20 74 68 65 20 42 74 72  hat owns the Btr
9e00: 65 65 2e 0a 2a 2a 20 46 6f 72 20 61 20 54 45 4d  ee..** For a TEM
9e10: 50 20 53 63 68 65 6d 61 2c 20 6f 6e 6c 79 20 74  P Schema, only t
9e20: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75  he connection mu
9e30: 74 65 78 20 69 73 20 72 65 71 75 69 72 65 64 2e  tex is required.
9e40: 0a 2a 2f 0a 73 74 72 75 63 74 20 53 63 68 65 6d  .*/.struct Schem
9e50: 61 20 7b 0a 20 20 69 6e 74 20 73 63 68 65 6d 61  a {.  int schema
9e60: 5f 63 6f 6f 6b 69 65 3b 20 20 20 2f 2a 20 44 61  _cookie;   /* Da
9e70: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 76 65  tabase schema ve
9e80: 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72  rsion number for
9e90: 20 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20   this file */.  
9ea0: 69 6e 74 20 69 47 65 6e 65 72 61 74 69 6f 6e 3b  int iGeneration;
9eb0: 20 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74 69       /* Generati
9ec0: 6f 6e 20 63 6f 75 6e 74 65 72 2e 20 20 49 6e 63  on counter.  Inc
9ed0: 72 65 6d 65 6e 74 65 64 20 77 69 74 68 20 65 61  remented with ea
9ee0: 63 68 20 63 68 61 6e 67 65 20 2a 2f 0a 20 20 48  ch change */.  H
9ef0: 61 73 68 20 74 62 6c 48 61 73 68 3b 20 20 20 20  ash tblHash;    
9f00: 20 20 20 20 2f 2a 20 41 6c 6c 20 74 61 62 6c 65      /* All table
9f10: 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d  s indexed by nam
9f20: 65 20 2a 2f 0a 20 20 48 61 73 68 20 69 64 78 48  e */.  Hash idxH
9f30: 61 73 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 41  ash;        /* A
9f40: 6c 6c 20 28 6e 61 6d 65 64 29 20 69 6e 64 69 63  ll (named) indic
9f50: 65 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61  es indexed by na
9f60: 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 74 72 69  me */.  Hash tri
9f70: 67 48 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20  gHash;       /* 
9f80: 41 6c 6c 20 74 72 69 67 67 65 72 73 20 69 6e 64  All triggers ind
9f90: 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a  exed by name */.
9fa0: 20 20 48 61 73 68 20 66 6b 65 79 48 61 73 68 3b    Hash fkeyHash;
9fb0: 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 66 6f         /* All fo
9fc0: 72 65 69 67 6e 20 6b 65 79 73 20 62 79 20 72 65  reign keys by re
9fd0: 66 65 72 65 6e 63 65 64 20 74 61 62 6c 65 20 6e  ferenced table n
9fe0: 61 6d 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  ame */.  Table *
9ff0: 70 53 65 71 54 61 62 3b 20 20 20 20 20 20 2f 2a  pSeqTab;      /*
a000: 20 54 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75   The sqlite_sequ
a010: 65 6e 63 65 20 74 61 62 6c 65 20 75 73 65 64 20  ence table used 
a020: 62 79 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  by AUTOINCREMENT
a030: 20 2a 2f 0a 20 20 75 38 20 66 69 6c 65 5f 66 6f   */.  u8 file_fo
a040: 72 6d 61 74 3b 20 20 20 20 20 20 2f 2a 20 53 63  rmat;      /* Sc
a050: 68 65 6d 61 20 66 6f 72 6d 61 74 20 76 65 72 73  hema format vers
a060: 69 6f 6e 20 66 6f 72 20 74 68 69 73 20 66 69 6c  ion for this fil
a070: 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20  e */.  u8 enc;  
a080: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
a090: 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 75 73 65  ext encoding use
a0a0: 64 20 62 79 20 74 68 69 73 20 64 61 74 61 62 61  d by this databa
a0b0: 73 65 20 2a 2f 0a 20 20 75 31 36 20 73 63 68 65  se */.  u16 sche
a0c0: 6d 61 46 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20  maFlags;     /* 
a0d0: 46 6c 61 67 73 20 61 73 73 6f 63 69 61 74 65 64  Flags associated
a0e0: 20 77 69 74 68 20 74 68 69 73 20 73 63 68 65 6d   with this schem
a0f0: 61 20 2a 2f 0a 20 20 69 6e 74 20 63 61 63 68 65  a */.  int cache
a100: 5f 73 69 7a 65 3b 20 20 20 20 20 20 2f 2a 20 4e  _size;      /* N
a110: 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 74  umber of pages t
a120: 6f 20 75 73 65 20 69 6e 20 74 68 65 20 63 61 63  o use in the cac
a130: 68 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  he */.};../*.** 
a140: 54 68 65 73 65 20 6d 61 63 72 6f 73 20 63 61 6e  These macros can
a150: 20 62 65 20 75 73 65 64 20 74 6f 20 74 65 73 74   be used to test
a160: 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65 61 72 20  , set, or clear 
a170: 62 69 74 73 20 69 6e 20 74 68 65 0a 2a 2a 20 44  bits in the.** D
a180: 62 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73  b.pSchema->flags
a190: 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69   field..*/.#defi
a1a0: 6e 65 20 44 62 48 61 73 50 72 6f 70 65 72 74 79  ne DbHasProperty
a1b0: 28 44 2c 49 2c 50 29 20 20 20 20 20 28 28 28 44  (D,I,P)     (((D
a1c0: 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d  )->aDb[I].pSchem
a1d0: 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 28  a->schemaFlags&(
a1e0: 50 29 29 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e  P))==(P)).#defin
a1f0: 65 20 44 62 48 61 73 41 6e 79 50 72 6f 70 65 72  e DbHasAnyProper
a200: 74 79 28 44 2c 49 2c 50 29 20 20 28 28 28 44 29  ty(D,I,P)  (((D)
a210: 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61  ->aDb[I].pSchema
a220: 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 28 50  ->schemaFlags&(P
a230: 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 44  ))!=0).#define D
a240: 62 53 65 74 50 72 6f 70 65 72 74 79 28 44 2c 49  bSetProperty(D,I
a250: 2c 50 29 20 20 20 20 20 28 44 29 2d 3e 61 44 62  ,P)     (D)->aDb
a260: 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68  [I].pSchema->sch
a270: 65 6d 61 46 6c 61 67 73 7c 3d 28 50 29 0a 23 64  emaFlags|=(P).#d
a280: 65 66 69 6e 65 20 44 62 43 6c 65 61 72 50 72 6f  efine DbClearPro
a290: 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 28  perty(D,I,P)   (
a2a0: 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65  D)->aDb[I].pSche
a2b0: 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 26  ma->schemaFlags&
a2c0: 3d 7e 28 50 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  =~(P)../*.** All
a2d0: 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
a2e0: 74 68 65 20 44 42 2e 70 53 63 68 65 6d 61 2d 3e  the DB.pSchema->
a2f0: 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a  flags field..**.
a300: 2a 2a 20 54 68 65 20 44 42 5f 53 63 68 65 6d 61  ** The DB_Schema
a310: 4c 6f 61 64 65 64 20 66 6c 61 67 20 69 73 20 73  Loaded flag is s
a320: 65 74 20 61 66 74 65 72 20 74 68 65 20 64 61 74  et after the dat
a330: 61 62 61 73 65 20 73 63 68 65 6d 61 20 68 61 73  abase schema has
a340: 20 62 65 65 6e 0a 2a 2a 20 72 65 61 64 20 69 6e   been.** read in
a350: 74 6f 20 69 6e 74 65 72 6e 61 6c 20 68 61 73 68  to internal hash
a360: 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 44   tables..**.** D
a370: 42 5f 55 6e 72 65 73 65 74 56 69 65 77 73 20 6d  B_UnresetViews m
a380: 65 61 6e 73 20 74 68 61 74 20 6f 6e 65 20 6f 72  eans that one or
a390: 20 6d 6f 72 65 20 76 69 65 77 73 20 68 61 76 65   more views have
a3a0: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68   column names th
a3b0: 61 74 0a 2a 2a 20 68 61 76 65 20 62 65 65 6e 20  at.** have been 
a3c0: 66 69 6c 6c 65 64 20 6f 75 74 2e 20 20 49 66 20  filled out.  If 
a3d0: 74 68 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67  the schema chang
a3e0: 65 73 2c 20 74 68 65 73 65 20 63 6f 6c 75 6d 6e  es, these column
a3f0: 20 6e 61 6d 65 73 20 6d 69 67 68 74 0a 2a 2a 20   names might.** 
a400: 63 68 61 6e 67 65 73 20 61 6e 64 20 73 6f 20 74  changes and so t
a410: 68 65 20 76 69 65 77 20 77 69 6c 6c 20 6e 65 65  he view will nee
a420: 64 20 74 6f 20 62 65 20 72 65 73 65 74 2e 0a 2a  d to be reset..*
a430: 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 53 63 68  /.#define DB_Sch
a440: 65 6d 61 4c 6f 61 64 65 64 20 20 20 20 30 78 30  emaLoaded    0x0
a450: 30 30 31 20 20 2f 2a 20 54 68 65 20 73 63 68 65  001  /* The sche
a460: 6d 61 20 68 61 73 20 62 65 65 6e 20 6c 6f 61 64  ma has been load
a470: 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42  ed */.#define DB
a480: 5f 55 6e 72 65 73 65 74 56 69 65 77 73 20 20 20  _UnresetViews   
a490: 20 30 78 30 30 30 32 20 20 2f 2a 20 53 6f 6d 65   0x0002  /* Some
a4a0: 20 76 69 65 77 73 20 68 61 76 65 20 64 65 66 69   views have defi
a4b0: 6e 65 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  ned column names
a4c0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 45   */.#define DB_E
a4d0: 6d 70 74 79 20 20 20 20 20 20 20 20 20 20 20 30  mpty           0
a4e0: 78 30 30 30 34 20 20 2f 2a 20 54 68 65 20 66 69  x0004  /* The fi
a4f0: 6c 65 20 69 73 20 65 6d 70 74 79 20 28 6c 65 6e  le is empty (len
a500: 67 74 68 20 30 20 62 79 74 65 73 29 20 2a 2f 0a  gth 0 bytes) */.
a510: 23 64 65 66 69 6e 65 20 44 42 5f 52 65 73 65 74  #define DB_Reset
a520: 57 61 6e 74 65 64 20 20 20 20 20 30 78 30 30 30  Wanted     0x000
a530: 38 20 20 2f 2a 20 52 65 73 65 74 20 74 68 65 20  8  /* Reset the 
a540: 73 63 68 65 6d 61 20 77 68 65 6e 20 6e 53 63 68  schema when nSch
a550: 65 6d 61 4c 6f 63 6b 3d 3d 30 20 2a 2f 0a 0a 2f  emaLock==0 */../
a560: 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 20  *.** The number 
a570: 6f 66 20 64 69 66 66 65 72 65 6e 74 20 6b 69 6e  of different kin
a580: 64 73 20 6f 66 20 74 68 69 6e 67 73 20 74 68 61  ds of things tha
a590: 74 20 63 61 6e 20 62 65 20 6c 69 6d 69 74 65 64  t can be limited
a5a0: 0a 2a 2a 20 75 73 69 6e 67 20 74 68 65 20 73 71  .** using the sq
a5b0: 6c 69 74 65 33 5f 6c 69 6d 69 74 28 29 20 69 6e  lite3_limit() in
a5c0: 74 65 72 66 61 63 65 2e 0a 2a 2f 0a 23 64 65 66  terface..*/.#def
a5d0: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d  ine SQLITE_N_LIM
a5e0: 49 54 20 28 53 51 4c 49 54 45 5f 4c 49 4d 49 54  IT (SQLITE_LIMIT
a5f0: 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 2b  _WORKER_THREADS+
a600: 31 29 0a 0a 2f 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73  1)../*.** Lookas
a610: 69 64 65 20 6d 61 6c 6c 6f 63 20 69 73 20 61 20  ide malloc is a 
a620: 73 65 74 20 6f 66 20 66 69 78 65 64 2d 73 69 7a  set of fixed-siz
a630: 65 20 62 75 66 66 65 72 73 20 74 68 61 74 20 63  e buffers that c
a640: 61 6e 20 62 65 20 75 73 65 64 0a 2a 2a 20 74 6f  an be used.** to
a650: 20 73 61 74 69 73 66 79 20 73 6d 61 6c 6c 20 74   satisfy small t
a660: 72 61 6e 73 69 65 6e 74 20 6d 65 6d 6f 72 79 20  ransient memory 
a670: 61 6c 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75 65  allocation reque
a680: 73 74 73 20 66 6f 72 20 6f 62 6a 65 63 74 73 0a  sts for objects.
a690: 2a 2a 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ** associated wi
a6a0: 74 68 20 61 20 70 61 72 74 69 63 75 6c 61 72 20  th a particular 
a6b0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
a6c0: 69 6f 6e 2e 20 20 54 68 65 20 75 73 65 20 6f 66  ion.  The use of
a6d0: 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61  .** lookaside ma
a6e0: 6c 6c 6f 63 20 70 72 6f 76 69 64 65 73 20 61 20  lloc provides a 
a6f0: 73 69 67 6e 69 66 69 63 61 6e 74 20 70 65 72 66  significant perf
a700: 6f 72 6d 61 6e 63 65 20 65 6e 68 61 6e 63 65 6d  ormance enhancem
a710: 65 6e 74 0a 2a 2a 20 28 61 70 70 72 6f 78 20 31  ent.** (approx 1
a720: 30 25 29 20 62 79 20 61 76 6f 69 64 69 6e 67 20  0%) by avoiding 
a730: 6e 75 6d 65 72 6f 75 73 20 6d 61 6c 6c 6f 63 2f  numerous malloc/
a740: 66 72 65 65 20 72 65 71 75 65 73 74 73 20 77 68  free requests wh
a750: 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20 53  ile parsing.** S
a760: 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a  QL statements..*
a770: 2a 0a 2a 2a 20 54 68 65 20 4c 6f 6f 6b 61 73 69  *.** The Lookasi
a780: 64 65 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c  de structure hol
a790: 64 73 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  ds configuration
a7a0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
a7b0: 75 74 20 74 68 65 0a 2a 2a 20 6c 6f 6f 6b 61 73  ut the.** lookas
a7c0: 69 64 65 20 6d 61 6c 6c 6f 63 20 73 75 62 73 79  ide malloc subsy
a7d0: 73 74 65 6d 2e 20 20 45 61 63 68 20 61 76 61 69  stem.  Each avai
a7e0: 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c  lable memory all
a7f0: 6f 63 61 74 69 6f 6e 20 69 6e 0a 2a 2a 20 74 68  ocation in.** th
a800: 65 20 6c 6f 6f 6b 61 73 69 64 65 20 73 75 62 73  e lookaside subs
a810: 79 73 74 65 6d 20 69 73 20 73 74 6f 72 65 64 20  ystem is stored 
a820: 6f 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74  on a linked list
a830: 20 6f 66 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f   of LookasideSlo
a840: 74 0a 2a 2a 20 6f 62 6a 65 63 74 73 2e 0a 2a 2a  t.** objects..**
a850: 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 61 6c  .** Lookaside al
a860: 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 6f 6e  locations are on
a870: 6c 79 20 61 6c 6c 6f 77 65 64 20 66 6f 72 20 6f  ly allowed for o
a880: 62 6a 65 63 74 73 20 74 68 61 74 20 61 72 65 20  bjects that are 
a890: 61 73 73 6f 63 69 61 74 65 64 0a 2a 2a 20 77 69  associated.** wi
a8a0: 74 68 20 61 20 70 61 72 74 69 63 75 6c 61 72 20  th a particular 
a8b0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
a8c0: 69 6f 6e 2e 20 20 48 65 6e 63 65 2c 20 73 63 68  ion.  Hence, sch
a8d0: 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ema information 
a8e0: 63 61 6e 6e 6f 74 0a 2a 2a 20 62 65 20 73 74 6f  cannot.** be sto
a8f0: 72 65 64 20 69 6e 20 6c 6f 6f 6b 61 73 69 64 65  red in lookaside
a900: 20 62 65 63 61 75 73 65 20 69 6e 20 73 68 61 72   because in shar
a910: 65 64 20 63 61 63 68 65 20 6d 6f 64 65 20 74 68  ed cache mode th
a920: 65 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61  e schema informa
a930: 74 69 6f 6e 0a 2a 2a 20 69 73 20 73 68 61 72 65  tion.** is share
a940: 64 20 62 79 20 6d 75 6c 74 69 70 6c 65 20 64 61  d by multiple da
a950: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
a960: 6e 73 2e 20 20 54 68 65 72 65 66 6f 72 65 2c 20  ns.  Therefore, 
a970: 77 68 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a  while parsing.**
a980: 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74   schema informat
a990: 69 6f 6e 2c 20 74 68 65 20 4c 6f 6f 6b 61 73 69  ion, the Lookasi
a9a0: 64 65 2e 62 45 6e 61 62 6c 65 64 20 66 6c 61 67  de.bEnabled flag
a9b0: 20 69 73 20 63 6c 65 61 72 65 64 20 73 6f 20 74   is cleared so t
a9c0: 68 61 74 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65  hat.** lookaside
a9d0: 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65   allocations are
a9e0: 20 6e 6f 74 20 75 73 65 64 20 74 6f 20 63 6f 6e   not used to con
a9f0: 73 74 72 75 63 74 20 74 68 65 20 73 63 68 65 6d  struct the schem
aa00: 61 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a 73 74  a objects..*/.st
aa10: 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 20 7b  ruct Lookaside {
aa20: 0a 20 20 75 33 32 20 62 44 69 73 61 62 6c 65 3b  .  u32 bDisable;
aa30: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e             /* On
aa40: 6c 79 20 6f 70 65 72 61 74 65 20 74 68 65 20 6c  ly operate the l
aa50: 6f 6f 6b 61 73 69 64 65 20 77 68 65 6e 20 7a 65  ookaside when ze
aa60: 72 6f 20 2a 2f 0a 20 20 75 31 36 20 73 7a 3b 20  ro */.  u16 sz; 
aa70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aa80: 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20  /* Size of each 
aa90: 62 75 66 66 65 72 20 69 6e 20 62 79 74 65 73 20  buffer in bytes 
aaa0: 2a 2f 0a 20 20 75 38 20 62 4d 61 6c 6c 6f 63 65  */.  u8 bMalloce
aab0: 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  d;           /* 
aac0: 54 72 75 65 20 69 66 20 70 53 74 61 72 74 20 6f  True if pStart o
aad0: 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c  btained from sql
aae0: 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20 2a 2f  ite3_malloc() */
aaf0: 0a 20 20 75 33 32 20 6e 53 6c 6f 74 3b 20 20 20  .  u32 nSlot;   
ab00: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
ab10: 6d 62 65 72 20 6f 66 20 6c 6f 6f 6b 61 73 69 64  mber of lookasid
ab20: 65 20 73 6c 6f 74 73 20 61 6c 6c 6f 63 61 74 65  e slots allocate
ab30: 64 20 2a 2f 0a 20 20 75 33 32 20 61 6e 53 74 61  d */.  u32 anSta
ab40: 74 5b 33 5d 3b 20 20 20 20 20 20 20 20 20 20 2f  t[3];          /
ab50: 2a 20 30 3a 20 68 69 74 73 2e 20 20 31 3a 20 73  * 0: hits.  1: s
ab60: 69 7a 65 20 6d 69 73 73 65 73 2e 20 20 32 3a 20  ize misses.  2: 
ab70: 66 75 6c 6c 20 6d 69 73 73 65 73 20 2a 2f 0a 20  full misses */. 
ab80: 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a   LookasideSlot *
ab90: 70 49 6e 69 74 3b 20 20 20 2f 2a 20 4c 69 73 74  pInit;   /* List
aba0: 20 6f 66 20 62 75 66 66 65 72 73 20 6e 6f 74 20   of buffers not 
abb0: 70 72 65 76 69 6f 75 73 6c 79 20 75 73 65 64 20  previously used 
abc0: 2a 2f 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c  */.  LookasideSl
abd0: 6f 74 20 2a 70 46 72 65 65 3b 20 20 20 2f 2a 20  ot *pFree;   /* 
abe0: 4c 69 73 74 20 6f 66 20 61 76 61 69 6c 61 62 6c  List of availabl
abf0: 65 20 62 75 66 66 65 72 73 20 2a 2f 0a 20 20 76  e buffers */.  v
ac00: 6f 69 64 20 2a 70 53 74 61 72 74 3b 20 20 20 20  oid *pStart;    
ac10: 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
ac20: 62 79 74 65 20 6f 66 20 61 76 61 69 6c 61 62 6c  byte of availabl
ac30: 65 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 2a  e memory space *
ac40: 2f 0a 20 20 76 6f 69 64 20 2a 70 45 6e 64 3b 20  /.  void *pEnd; 
ac50: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46              /* F
ac60: 69 72 73 74 20 62 79 74 65 20 70 61 73 74 20 65  irst byte past e
ac70: 6e 64 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20  nd of available 
ac80: 73 70 61 63 65 20 2a 2f 0a 7d 3b 0a 73 74 72 75  space */.};.stru
ac90: 63 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74  ct LookasideSlot
aca0: 20 7b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c   {.  LookasideSl
acb0: 6f 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 2f 2a  ot *pNext;    /*
acc0: 20 4e 65 78 74 20 62 75 66 66 65 72 20 69 6e 20   Next buffer in 
acd0: 74 68 65 20 6c 69 73 74 20 6f 66 20 66 72 65 65  the list of free
ace0: 20 62 75 66 66 65 72 73 20 2a 2f 0a 7d 3b 0a 0a   buffers */.};..
acf0: 2f 2a 0a 2a 2a 20 41 20 68 61 73 68 20 74 61 62  /*.** A hash tab
ad00: 6c 65 20 66 6f 72 20 62 75 69 6c 74 2d 69 6e 20  le for built-in 
ad10: 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74  function definit
ad20: 69 6f 6e 73 2e 20 20 28 41 70 70 6c 69 63 61 74  ions.  (Applicat
ad30: 69 6f 6e 2d 64 65 66 69 6e 65 64 0a 2a 2a 20 66  ion-defined.** f
ad40: 75 6e 63 74 69 6f 6e 73 20 75 73 65 20 61 20 72  unctions use a r
ad50: 65 67 75 6c 61 72 20 74 61 62 6c 65 20 74 61 62  egular table tab
ad60: 6c 65 20 66 72 6f 6d 20 68 61 73 68 2e 68 2e 29  le from hash.h.)
ad70: 0a 2a 2a 0a 2a 2a 20 48 61 73 68 20 65 61 63 68  .**.** Hash each
ad80: 20 46 75 6e 63 44 65 66 20 73 74 72 75 63 74 75   FuncDef structu
ad90: 72 65 20 69 6e 74 6f 20 6f 6e 65 20 6f 66 20 74  re into one of t
ada0: 68 65 20 46 75 6e 63 44 65 66 48 61 73 68 2e 61  he FuncDefHash.a
adb0: 5b 5d 20 73 6c 6f 74 73 2e 0a 2a 2a 20 43 6f 6c  [] slots..** Col
adc0: 6c 69 73 69 6f 6e 73 20 61 72 65 20 6f 6e 20 74  lisions are on t
add0: 68 65 20 46 75 6e 63 44 65 66 2e 75 2e 70 48 61  he FuncDef.u.pHa
ade0: 73 68 20 63 68 61 69 6e 2e 0a 2a 2f 0a 23 64 65  sh chain..*/.#de
adf0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
ae00: 5f 48 41 53 48 5f 53 5a 20 32 33 0a 73 74 72 75  _HASH_SZ 23.stru
ae10: 63 74 20 46 75 6e 63 44 65 66 48 61 73 68 20 7b  ct FuncDefHash {
ae20: 0a 20 20 46 75 6e 63 44 65 66 20 2a 61 5b 53 51  .  FuncDef *a[SQ
ae30: 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48 5f 53  LITE_FUNC_HASH_S
ae40: 5a 5d 3b 20 20 20 20 20 20 20 2f 2a 20 48 61 73  Z];       /* Has
ae50: 68 20 74 61 62 6c 65 20 66 6f 72 20 66 75 6e 63  h table for func
ae60: 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a 23 69 66  tions */.};..#if
ae70: 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45 52 5f  def SQLITE_USER_
ae80: 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a 2f  AUTHENTICATION./
ae90: 2a 0a 2a 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e  *.** Information
aea0: 20 68 65 6c 64 20 69 6e 20 74 68 65 20 22 73 71   held in the "sq
aeb0: 6c 69 74 65 33 22 20 64 61 74 61 62 61 73 65 20  lite3" database 
aec0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63  connection objec
aed0: 74 20 61 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f  t and used.** to
aee0: 20 6d 61 6e 61 67 65 20 75 73 65 72 20 61 75 74   manage user aut
aef0: 68 65 6e 74 69 63 61 74 69 6f 6e 2e 0a 2a 2f 0a  hentication..*/.
af00: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 73  typedef struct s
af10: 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68 20  qlite3_userauth 
af20: 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68  sqlite3_userauth
af30: 3b 0a 73 74 72 75 63 74 20 73 71 6c 69 74 65 33  ;.struct sqlite3
af40: 5f 75 73 65 72 61 75 74 68 20 7b 0a 20 20 75 38  _userauth {.  u8
af50: 20 61 75 74 68 4c 65 76 65 6c 3b 20 20 20 20 20   authLevel;     
af60: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
af70: 75 72 72 65 6e 74 20 61 75 74 68 65 6e 74 69 63  urrent authentic
af80: 61 74 69 6f 6e 20 6c 65 76 65 6c 20 2a 2f 0a 20  ation level */. 
af90: 20 69 6e 74 20 6e 41 75 74 68 50 57 3b 20 20 20   int nAuthPW;   
afa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
afb0: 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20 7a 41  * Size of the zA
afc0: 75 74 68 50 57 20 69 6e 20 62 79 74 65 73 20 2a  uthPW in bytes *
afd0: 2f 0a 20 20 63 68 61 72 20 2a 7a 41 75 74 68 50  /.  char *zAuthP
afe0: 57 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  W;              
aff0: 20 20 2f 2a 20 50 61 73 73 77 6f 72 64 20 75 73    /* Password us
b000: 65 64 20 74 6f 20 61 75 74 68 65 6e 74 69 63 61  ed to authentica
b010: 74 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41  te */.  char *zA
b020: 75 74 68 55 73 65 72 3b 20 20 20 20 20 20 20 20  uthUser;        
b030: 20 20 20 20 20 20 2f 2a 20 55 73 65 72 20 6e 61        /* User na
b040: 6d 65 20 75 73 65 64 20 74 6f 20 61 75 74 68 65  me used to authe
b050: 6e 74 69 63 61 74 65 20 2a 2f 0a 7d 3b 0a 0a 2f  nticate */.};../
b060: 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
b070: 20 66 6f 72 20 73 71 6c 69 74 65 33 5f 75 73 65   for sqlite3_use
b080: 72 61 75 74 68 2e 61 75 74 68 4c 65 76 65 6c 20  rauth.authLevel 
b090: 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48  */.#define UAUTH
b0a0: 5f 55 6e 6b 6e 6f 77 6e 20 20 20 20 20 30 20 20  _Unknown     0  
b0b0: 20 20 20 2f 2a 20 41 75 74 68 65 6e 74 69 63 61     /* Authentica
b0c0: 74 69 6f 6e 20 6e 6f 74 20 79 65 74 20 63 68 65  tion not yet che
b0d0: 63 6b 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  cked */.#define 
b0e0: 55 41 55 54 48 5f 46 61 69 6c 20 20 20 20 20 20  UAUTH_Fail      
b0f0: 20 20 31 20 20 20 20 20 2f 2a 20 55 73 65 72 20    1     /* User 
b100: 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 66  authentication f
b110: 61 69 6c 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  ailed */.#define
b120: 20 55 41 55 54 48 5f 55 73 65 72 20 20 20 20 20   UAUTH_User     
b130: 20 20 20 32 20 20 20 20 20 2f 2a 20 41 75 74 68     2     /* Auth
b140: 65 6e 74 69 63 61 74 65 64 20 61 73 20 61 20 6e  enticated as a n
b150: 6f 72 6d 61 6c 20 75 73 65 72 20 2a 2f 0a 23 64  ormal user */.#d
b160: 65 66 69 6e 65 20 55 41 55 54 48 5f 41 64 6d 69  efine UAUTH_Admi
b170: 6e 20 20 20 20 20 20 20 33 20 20 20 20 20 2f 2a  n       3     /*
b180: 20 41 75 74 68 65 6e 74 69 63 61 74 65 64 20 61   Authenticated a
b190: 73 20 61 6e 20 61 64 6d 69 6e 69 73 74 72 61 74  s an administrat
b1a0: 6f 72 20 2a 2f 0a 0a 2f 2a 20 46 75 6e 63 74 69  or */../* Functi
b1b0: 6f 6e 73 20 75 73 65 64 20 6f 6e 6c 79 20 62 79  ons used only by
b1c0: 20 75 73 65 72 20 61 75 74 68 6f 72 69 7a 61 74   user authorizat
b1d0: 69 6f 6e 20 6c 6f 67 69 63 20 2a 2f 0a 69 6e 74  ion logic */.int
b1e0: 20 73 71 6c 69 74 65 33 55 73 65 72 41 75 74 68   sqlite3UserAuth
b1f0: 54 61 62 6c 65 28 63 6f 6e 73 74 20 63 68 61 72  Table(const char
b200: 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 55  *);.int sqlite3U
b210: 73 65 72 41 75 74 68 43 68 65 63 6b 4c 6f 67 69  serAuthCheckLogi
b220: 6e 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  n(sqlite3*,const
b230: 20 63 68 61 72 2a 2c 75 38 2a 29 3b 0a 76 6f 69   char*,u8*);.voi
b240: 64 20 73 71 6c 69 74 65 33 55 73 65 72 41 75 74  d sqlite3UserAut
b250: 68 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 29 3b  hInit(sqlite3*);
b260: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72 79  .void sqlite3Cry
b270: 70 74 46 75 6e 63 28 73 71 6c 69 74 65 33 5f 63  ptFunc(sqlite3_c
b280: 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69  ontext*,int,sqli
b290: 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 0a 23  te3_value**);..#
b2a0: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
b2b0: 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54  USER_AUTHENTICAT
b2c0: 49 4f 4e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 74 79  ION */../*.** ty
b2d0: 70 65 64 65 66 20 66 6f 72 20 74 68 65 20 61 75  pedef for the au
b2e0: 74 68 6f 72 69 7a 61 74 69 6f 6e 20 63 61 6c 6c  thorization call
b2f0: 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a  back function..*
b300: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
b310: 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54  USER_AUTHENTICAT
b320: 49 4f 4e 0a 20 20 74 79 70 65 64 65 66 20 69 6e  ION.  typedef in
b330: 74 20 28 2a 73 71 6c 69 74 65 33 5f 78 61 75 74  t (*sqlite3_xaut
b340: 68 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e  h)(void*,int,con
b350: 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
b360: 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
b370: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
b380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b390: 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f   const char*, co
b3a0: 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73  nst char*);.#els
b3b0: 65 0a 20 20 74 79 70 65 64 65 66 20 69 6e 74 20  e.  typedef int 
b3c0: 28 2a 73 71 6c 69 74 65 33 5f 78 61 75 74 68 29  (*sqlite3_xauth)
b3d0: 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74  (void*,int,const
b3e0: 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
b3f0: 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 0a  r*,const char*,.
b400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
b420: 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e  onst char*);.#en
b430: 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  dif..#ifndef SQL
b440: 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41  ITE_OMIT_DEPRECA
b450: 54 45 44 0a 2f 2a 20 54 68 69 73 20 69 73 20 61  TED./* This is a
b460: 6e 20 65 78 74 72 61 20 53 51 4c 49 54 45 5f 54  n extra SQLITE_T
b470: 52 41 43 45 20 6d 61 63 72 6f 20 74 68 61 74 20  RACE macro that 
b480: 69 6e 64 69 63 61 74 65 73 20 22 6c 65 67 61 63  indicates "legac
b490: 79 22 20 74 72 61 63 69 6e 67 0a 2a 2a 20 69 6e  y" tracing.** in
b4a0: 20 74 68 65 20 73 74 79 6c 65 20 6f 66 20 73 71   the style of sq
b4b0: 6c 69 74 65 33 5f 74 72 61 63 65 28 29 0a 2a 2f  lite3_trace().*/
b4c0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b4d0: 54 52 41 43 45 5f 4c 45 47 41 43 59 20 20 30 78  TRACE_LEGACY  0x
b4e0: 38 30 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65  80.#else.#define
b4f0: 20 53 51 4c 49 54 45 5f 54 52 41 43 45 5f 4c 45   SQLITE_TRACE_LE
b500: 47 41 43 59 20 20 30 0a 23 65 6e 64 69 66 20 2f  GACY  0.#endif /
b510: 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45  * SQLITE_OMIT_DE
b520: 50 52 45 43 41 54 45 44 20 2a 2f 0a 0a 0a 2f 2a  PRECATED */.../*
b530: 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62 61 73  .** Each databas
b540: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20  e connection is 
b550: 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
b560: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
b570: 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63  ucture..*/.struc
b580: 74 20 73 71 6c 69 74 65 33 20 7b 0a 20 20 73 71  t sqlite3 {.  sq
b590: 6c 69 74 65 33 5f 76 66 73 20 2a 70 56 66 73 3b  lite3_vfs *pVfs;
b5a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
b5b0: 53 20 49 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20  S Interface */. 
b5c0: 20 73 74 72 75 63 74 20 56 64 62 65 20 2a 70 56   struct Vdbe *pV
b5d0: 64 62 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f  dbe;           /
b5e0: 2a 20 4c 69 73 74 20 6f 66 20 61 63 74 69 76 65  * List of active
b5f0: 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
b600: 73 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a  s */.  CollSeq *
b610: 70 44 66 6c 74 43 6f 6c 6c 3b 20 20 20 20 20 20  pDfltColl;      
b620: 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65 66 61       /* The defa
b630: 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  ult collating se
b640: 71 75 65 6e 63 65 20 28 42 49 4e 41 52 59 29 20  quence (BINARY) 
b650: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  */.  sqlite3_mut
b660: 65 78 20 2a 6d 75 74 65 78 3b 20 20 20 20 20 20  ex *mutex;      
b670: 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e     /* Connection
b680: 20 6d 75 74 65 78 20 2a 2f 0a 20 20 44 62 20 2a   mutex */.  Db *
b690: 61 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  aDb;            
b6a0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c            /* All
b6b0: 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 69   backends */.  i
b6c0: 6e 74 20 6e 44 62 3b 20 20 20 20 20 20 20 20 20  nt nDb;         
b6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b6e0: 4e 75 6d 62 65 72 20 6f 66 20 62 61 63 6b 65 6e  Number of backen
b6f0: 64 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20  ds currently in 
b700: 75 73 65 20 2a 2f 0a 20 20 75 33 32 20 6d 44 62  use */.  u32 mDb
b710: 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20  Flags;          
b720: 20 20 20 20 20 20 20 2f 2a 20 66 6c 61 67 73 20         /* flags 
b730: 72 65 63 6f 72 64 69 6e 67 20 69 6e 74 65 72 6e  recording intern
b740: 61 6c 20 73 74 61 74 65 20 2a 2f 0a 20 20 75 33  al state */.  u3
b750: 32 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20  2 flags;        
b760: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 66              /* f
b770: 6c 61 67 73 20 73 65 74 74 61 62 6c 65 20 62 79  lags settable by
b780: 20 70 72 61 67 6d 61 73 2e 20 53 65 65 20 62 65   pragmas. See be
b790: 6c 6f 77 20 2a 2f 0a 20 20 69 36 34 20 6c 61 73  low */.  i64 las
b7a0: 74 52 6f 77 69 64 3b 20 20 20 20 20 20 20 20 20  tRowid;         
b7b0: 20 20 20 20 20 20 20 2f 2a 20 52 4f 57 49 44 20         /* ROWID 
b7c0: 6f 66 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 69  of most recent i
b7d0: 6e 73 65 72 74 20 28 73 65 65 20 61 62 6f 76 65  nsert (see above
b7e0: 29 20 2a 2f 0a 20 20 69 36 34 20 73 7a 4d 6d 61  ) */.  i64 szMma
b7f0: 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
b800: 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
b810: 6d 6d 61 70 5f 73 69 7a 65 20 73 65 74 74 69 6e  mmap_size settin
b820: 67 20 2a 2f 0a 20 20 75 33 32 20 6e 53 63 68 65  g */.  u32 nSche
b830: 6d 61 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 20  maLock;         
b840: 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 72       /* Do not r
b850: 65 73 65 74 20 74 68 65 20 73 63 68 65 6d 61 20  eset the schema 
b860: 77 68 65 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 2a 2f  when non-zero */
b870: 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20  .  unsigned int 
b880: 6f 70 65 6e 46 6c 61 67 73 3b 20 20 20 20 20 20  openFlags;      
b890: 20 2f 2a 20 46 6c 61 67 73 20 70 61 73 73 65 64   /* Flags passed
b8a0: 20 74 6f 20 73 71 6c 69 74 65 33 5f 76 66 73 2e   to sqlite3_vfs.
b8b0: 78 4f 70 65 6e 28 29 20 2a 2f 0a 20 20 69 6e 74  xOpen() */.  int
b8c0: 20 65 72 72 43 6f 64 65 3b 20 20 20 20 20 20 20   errCode;       
b8d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f             /* Mo
b8e0: 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20  st recent error 
b8f0: 63 6f 64 65 20 28 53 51 4c 49 54 45 5f 2a 29 20  code (SQLITE_*) 
b900: 2a 2f 0a 20 20 69 6e 74 20 65 72 72 4d 61 73 6b  */.  int errMask
b910: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
b920: 20 20 20 2f 2a 20 26 20 72 65 73 75 6c 74 20 63     /* & result c
b930: 6f 64 65 73 20 77 69 74 68 20 74 68 69 73 20 62  odes with this b
b940: 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 20  efore returning 
b950: 2a 2f 0a 20 20 69 6e 74 20 69 53 79 73 45 72 72  */.  int iSysErr
b960: 6e 6f 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  no;             
b970: 20 20 20 2f 2a 20 45 72 72 6e 6f 20 76 61 6c 75     /* Errno valu
b980: 65 20 66 72 6f 6d 20 6c 61 73 74 20 73 79 73 74  e from last syst
b990: 65 6d 20 65 72 72 6f 72 20 2a 2f 0a 20 20 75 31  em error */.  u1
b9a0: 36 20 64 62 4f 70 74 46 6c 61 67 73 3b 20 20 20  6 dbOptFlags;   
b9b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46              /* F
b9c0: 6c 61 67 73 20 74 6f 20 65 6e 61 62 6c 65 2f 64  lags to enable/d
b9d0: 69 73 61 62 6c 65 20 6f 70 74 69 6d 69 7a 61 74  isable optimizat
b9e0: 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 65 6e 63  ions */.  u8 enc
b9f0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
ba00: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
ba10: 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 75 38  encoding */.  u8
ba20: 20 61 75 74 6f 43 6f 6d 6d 69 74 3b 20 20 20 20   autoCommit;    
ba30: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
ba40: 68 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66  he auto-commit f
ba50: 6c 61 67 2e 20 2a 2f 0a 20 20 75 38 20 74 65 6d  lag. */.  u8 tem
ba60: 70 5f 73 74 6f 72 65 3b 20 20 20 20 20 20 20 20  p_store;        
ba70: 20 20 20 20 20 20 20 20 2f 2a 20 31 3a 20 66 69          /* 1: fi
ba80: 6c 65 20 32 3a 20 6d 65 6d 6f 72 79 20 30 3a 20  le 2: memory 0: 
ba90: 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20  default */.  u8 
baa0: 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3b 20 20 20  mallocFailed;   
bab0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
bac0: 75 65 20 69 66 20 77 65 20 68 61 76 65 20 73 65  ue if we have se
bad0: 65 6e 20 61 20 6d 61 6c 6c 6f 63 20 66 61 69 6c  en a malloc fail
bae0: 75 72 65 20 2a 2f 0a 20 20 75 38 20 62 42 65 6e  ure */.  u8 bBen
baf0: 69 67 6e 4d 61 6c 6c 6f 63 3b 20 20 20 20 20 20  ignMalloc;      
bb00: 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74         /* Do not
bb10: 20 72 65 71 75 69 72 65 20 4f 4f 4d 73 20 69 66   require OOMs if
bb20: 20 74 72 75 65 20 2a 2f 0a 20 20 75 38 20 64 66   true */.  u8 df
bb30: 6c 74 4c 6f 63 6b 4d 6f 64 65 3b 20 20 20 20 20  ltLockMode;     
bb40: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61           /* Defa
bb50: 75 6c 74 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65  ult locking-mode
bb60: 20 66 6f 72 20 61 74 74 61 63 68 65 64 20 64 62   for attached db
bb70: 73 20 2a 2f 0a 20 20 73 69 67 6e 65 64 20 63 68  s */.  signed ch
bb80: 61 72 20 6e 65 78 74 41 75 74 6f 76 61 63 3b 20  ar nextAutovac; 
bb90: 20 20 20 20 20 2f 2a 20 41 75 74 6f 76 61 63 20       /* Autovac 
bba0: 73 65 74 74 69 6e 67 20 61 66 74 65 72 20 56 41  setting after VA
bbb0: 43 55 55 4d 20 69 66 20 3e 3d 30 20 2a 2f 0a 20  CUUM if >=0 */. 
bbc0: 20 75 38 20 73 75 70 70 72 65 73 73 45 72 72 3b   u8 suppressErr;
bbd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
bbe0: 2a 20 44 6f 20 6e 6f 74 20 69 73 73 75 65 20 65  * Do not issue e
bbf0: 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 69 66  rror messages if
bc00: 20 74 72 75 65 20 2a 2f 0a 20 20 75 38 20 76 74   true */.  u8 vt
bc10: 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 20 20 20  abOnConflict;   
bc20: 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
bc30: 65 20 74 6f 20 72 65 74 75 72 6e 20 66 6f 72 20  e to return for 
bc40: 73 33 5f 76 74 61 62 5f 6f 6e 5f 63 6f 6e 66 6c  s3_vtab_on_confl
bc50: 69 63 74 28 29 20 2a 2f 0a 20 20 75 38 20 69 73  ict() */.  u8 is
bc60: 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70  TransactionSavep
bc70: 6f 69 6e 74 3b 20 20 20 20 2f 2a 20 54 72 75 65  oint;    /* True
bc80: 20 69 66 20 74 68 65 20 6f 75 74 65 72 6d 6f 73   if the outermos
bc90: 74 20 73 61 76 65 70 6f 69 6e 74 20 69 73 20 61  t savepoint is a
bca0: 20 54 53 20 2a 2f 0a 20 20 75 38 20 6d 54 72 61   TS */.  u8 mTra
bcb0: 63 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ce;             
bcc0: 20 20 20 20 20 20 20 2f 2a 20 7a 65 72 6f 20 6f         /* zero o
bcd0: 72 20 6d 6f 72 65 20 53 51 4c 49 54 45 5f 54 52  r more SQLITE_TR
bce0: 41 43 45 20 66 6c 61 67 73 20 2a 2f 0a 20 20 75  ACE flags */.  u
bcf0: 38 20 73 6b 69 70 42 74 72 65 65 4d 75 74 65 78  8 skipBtreeMutex
bd00: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
bd10: 54 72 75 65 20 69 66 20 6e 6f 20 73 68 61 72 65  True if no share
bd20: 64 2d 63 61 63 68 65 20 62 61 63 6b 65 6e 64 73  d-cache backends
bd30: 20 2a 2f 0a 20 20 75 38 20 6e 53 71 6c 45 78 65   */.  u8 nSqlExe
bd40: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
bd50: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
bd60: 20 70 65 6e 64 69 6e 67 20 4f 50 5f 53 71 6c 45   pending OP_SqlE
bd70: 78 65 63 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 20  xec opcodes */. 
bd80: 20 69 6e 74 20 6e 65 78 74 50 61 67 65 73 69 7a   int nextPagesiz
bd90: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  e;             /
bda0: 2a 20 50 61 67 65 73 69 7a 65 20 61 66 74 65 72  * Pagesize after
bdb0: 20 56 41 43 55 55 4d 20 69 66 20 3e 30 20 2a 2f   VACUUM if >0 */
bdc0: 0a 20 20 75 33 32 20 6d 61 67 69 63 3b 20 20 20  .  u32 magic;   
bdd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bde0: 20 2f 2a 20 4d 61 67 69 63 20 6e 75 6d 62 65 72   /* Magic number
bdf0: 20 66 6f 72 20 64 65 74 65 63 74 20 6c 69 62 72   for detect libr
be00: 61 72 79 20 6d 69 73 75 73 65 20 2a 2f 0a 20 20  ary misuse */.  
be10: 69 6e 74 20 6e 43 68 61 6e 67 65 3b 20 20 20 20  int nChange;    
be20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
be30: 20 56 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20   Value returned 
be40: 62 79 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67  by sqlite3_chang
be50: 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 54  es() */.  int nT
be60: 6f 74 61 6c 43 68 61 6e 67 65 3b 20 20 20 20 20  otalChange;     
be70: 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
be80: 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c   returned by sql
be90: 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61 6e 67  ite3_total_chang
bea0: 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20 61 4c  es() */.  int aL
beb0: 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4e 5f 4c 49  imit[SQLITE_N_LI
bec0: 4d 49 54 5d 3b 20 20 20 2f 2a 20 4c 69 6d 69 74  MIT];   /* Limit
bed0: 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61 78 53  s */.  int nMaxS
bee0: 6f 72 74 65 72 4d 6d 61 70 3b 20 20 20 20 20 20  orterMmap;      
bef0: 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20       /* Maximum 
bf00: 73 69 7a 65 20 6f 66 20 72 65 67 69 6f 6e 73 20  size of regions 
bf10: 6d 61 70 70 65 64 20 62 79 20 73 6f 72 74 65 72  mapped by sorter
bf20: 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 73 71 6c   */.  struct sql
bf30: 69 74 65 33 49 6e 69 74 49 6e 66 6f 20 7b 20 20  ite3InitInfo {  
bf40: 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69      /* Informati
bf50: 6f 6e 20 75 73 65 64 20 64 75 72 69 6e 67 20 69  on used during i
bf60: 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 2a 2f  nitialization */
bf70: 0a 20 20 20 20 69 6e 74 20 6e 65 77 54 6e 75 6d  .    int newTnum
bf80: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
bf90: 20 2f 2a 20 52 6f 6f 74 70 61 67 65 20 6f 66 20   /* Rootpage of 
bfa0: 74 61 62 6c 65 20 62 65 69 6e 67 20 69 6e 69 74  table being init
bfb0: 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75  ialized */.    u
bfc0: 38 20 69 44 62 3b 20 20 20 20 20 20 20 20 20 20  8 iDb;          
bfd0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68             /* Wh
bfe0: 69 63 68 20 64 62 20 66 69 6c 65 20 69 73 20 62  ich db file is b
bff0: 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64  eing initialized
c000: 20 2a 2f 0a 20 20 20 20 75 38 20 62 75 73 79 3b   */.    u8 busy;
c010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c020: 20 20 20 20 2f 2a 20 54 52 55 45 20 69 66 20 63      /* TRUE if c
c030: 75 72 72 65 6e 74 6c 79 20 69 6e 69 74 69 61 6c  urrently initial
c040: 69 7a 69 6e 67 20 2a 2f 0a 20 20 20 20 75 38 20  izing */.    u8 
c050: 6f 72 70 68 61 6e 54 72 69 67 67 65 72 3b 20 20  orphanTrigger;  
c060: 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73 74           /* Last
c070: 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 6f 72   statement is or
c080: 70 68 61 6e 65 64 20 54 45 4d 50 20 74 72 69 67  phaned TEMP trig
c090: 67 65 72 20 2a 2f 0a 20 20 20 20 75 38 20 69 6d  ger */.    u8 im
c0a0: 70 6f 73 74 65 72 54 61 62 6c 65 3b 20 20 20 20  posterTable;    
c0b0: 20 20 20 20 20 20 20 2f 2a 20 42 75 69 6c 64 69         /* Buildi
c0c0: 6e 67 20 61 6e 20 69 6d 70 6f 73 74 65 72 20 74  ng an imposter t
c0d0: 61 62 6c 65 20 2a 2f 0a 20 20 7d 20 69 6e 69 74  able */.  } init
c0e0: 3b 0a 20 20 69 6e 74 20 6e 56 64 62 65 41 63 74  ;.  int nVdbeAct
c0f0: 69 76 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ive;            
c100: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 56    /* Number of V
c110: 44 42 45 73 20 63 75 72 72 65 6e 74 6c 79 20 72  DBEs currently r
c120: 75 6e 6e 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20  unning */.  int 
c130: 6e 56 64 62 65 52 65 61 64 3b 20 20 20 20 20 20  nVdbeRead;      
c140: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
c150: 62 65 72 20 6f 66 20 61 63 74 69 76 65 20 56 44  ber of active VD
c160: 42 45 73 20 74 68 61 74 20 72 65 61 64 20 6f 72  BEs that read or
c170: 20 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e 74 20   write */.  int 
c180: 6e 56 64 62 65 57 72 69 74 65 3b 20 20 20 20 20  nVdbeWrite;     
c190: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
c1a0: 62 65 72 20 6f 66 20 61 63 74 69 76 65 20 56 44  ber of active VD
c1b0: 42 45 73 20 74 68 61 74 20 72 65 61 64 20 61 6e  BEs that read an
c1c0: 64 20 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e 74  d write */.  int
c1d0: 20 6e 56 64 62 65 45 78 65 63 3b 20 20 20 20 20   nVdbeExec;     
c1e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
c1f0: 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20 63  mber of nested c
c200: 61 6c 6c 73 20 74 6f 20 56 64 62 65 45 78 65 63  alls to VdbeExec
c210: 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 44 65  () */.  int nVDe
c220: 73 74 72 6f 79 3b 20 20 20 20 20 20 20 20 20 20  stroy;          
c230: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
c240: 6f 66 20 61 63 74 69 76 65 20 4f 50 5f 56 44 65  of active OP_VDe
c250: 73 74 72 6f 79 20 6f 70 65 72 61 74 69 6f 6e 73  stroy operations
c260: 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 78 74 65 6e   */.  int nExten
c270: 73 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20  sion;           
c280: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
c290: 20 6c 6f 61 64 65 64 20 65 78 74 65 6e 73 69 6f   loaded extensio
c2a0: 6e 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 2a 61  ns */.  void **a
c2b0: 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20  Extension;      
c2c0: 20 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f        /* Array o
c2d0: 66 20 73 68 61 72 65 64 20 6c 69 62 72 61 72 79  f shared library
c2e0: 20 68 61 6e 64 6c 65 73 20 2a 2f 0a 20 20 69 6e   handles */.  in
c2f0: 74 20 28 2a 78 54 72 61 63 65 29 28 75 33 32 2c  t (*xTrace)(u32,
c300: 76 6f 69 64 2a 2c 76 6f 69 64 2a 2c 76 6f 69 64  void*,void*,void
c310: 2a 29 3b 20 20 20 20 20 2f 2a 20 54 72 61 63 65  *);     /* Trace
c320: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76   function */.  v
c330: 6f 69 64 20 2a 70 54 72 61 63 65 41 72 67 3b 20  oid *pTraceArg; 
c340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c350: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75           /* Argu
c360: 6d 65 6e 74 20 74 6f 20 74 68 65 20 74 72 61 63  ment to the trac
c370: 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  e function */.  
c380: 76 6f 69 64 20 28 2a 78 50 72 6f 66 69 6c 65 29  void (*xProfile)
c390: 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61  (void*,const cha
c3a0: 72 2a 2c 75 36 34 29 3b 20 20 2f 2a 20 50 72 6f  r*,u64);  /* Pro
c3b0: 66 69 6c 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20  filing function 
c3c0: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f 66  */.  void *pProf
c3d0: 69 6c 65 41 72 67 3b 20 20 20 20 20 20 20 20 20  ileArg;         
c3e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c3f0: 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 70 72  * Argument to pr
c400: 6f 66 69 6c 65 20 66 75 6e 63 74 69 6f 6e 20 2a  ofile function *
c410: 2f 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6d 6d 69  /.  void *pCommi
c420: 74 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  tArg;           
c430: 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e        /* Argumen
c440: 74 20 74 6f 20 78 43 6f 6d 6d 69 74 43 61 6c 6c  t to xCommitCall
c450: 62 61 63 6b 28 29 20 2a 2f 0a 20 20 69 6e 74 20  back() */.  int 
c460: 28 2a 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63  (*xCommitCallbac
c470: 6b 29 28 76 6f 69 64 2a 29 3b 20 20 20 20 2f 2a  k)(void*);    /*
c480: 20 49 6e 76 6f 6b 65 64 20 61 74 20 65 76 65 72   Invoked at ever
c490: 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76  y commit. */.  v
c4a0: 6f 69 64 20 2a 70 52 6f 6c 6c 62 61 63 6b 41 72  oid *pRollbackAr
c4b0: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
c4c0: 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20   /* Argument to 
c4d0: 78 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63  xRollbackCallbac
c4e0: 6b 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  k() */.  void (*
c4f0: 78 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63  xRollbackCallbac
c500: 6b 29 28 76 6f 69 64 2a 29 3b 20 2f 2a 20 49 6e  k)(void*); /* In
c510: 76 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20 63  voked at every c
c520: 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64  ommit. */.  void
c530: 20 2a 70 55 70 64 61 74 65 41 72 67 3b 0a 20 20   *pUpdateArg;.  
c540: 76 6f 69 64 20 28 2a 78 55 70 64 61 74 65 43 61  void (*xUpdateCa
c550: 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 2c 69 6e  llback)(void*,in
c560: 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  t, const char*,c
c570: 6f 6e 73 74 20 63 68 61 72 2a 2c 73 71 6c 69 74  onst char*,sqlit
c580: 65 5f 69 6e 74 36 34 29 3b 0a 23 69 66 64 65 66  e_int64);.#ifdef
c590: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50   SQLITE_ENABLE_P
c5a0: 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b 0a 20 20  REUPDATE_HOOK.  
c5b0: 76 6f 69 64 20 2a 70 50 72 65 55 70 64 61 74 65  void *pPreUpdate
c5c0: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  Arg;          /*
c5d0: 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20   First argument 
c5e0: 74 6f 20 78 50 72 65 55 70 64 61 74 65 43 61 6c  to xPreUpdateCal
c5f0: 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20  lback */.  void 
c600: 28 2a 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c  (*xPreUpdateCall
c610: 62 61 63 6b 29 28 20 20 20 2f 2a 20 52 65 67 69  back)(   /* Regi
c620: 73 74 65 72 65 64 20 75 73 69 6e 67 20 73 71 6c  stered using sql
c630: 69 74 65 33 5f 70 72 65 75 70 64 61 74 65 5f 68  ite3_preupdate_h
c640: 6f 6f 6b 28 29 20 2a 2f 0a 20 20 20 20 76 6f 69  ook() */.    voi
c650: 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  d*,sqlite3*,int,
c660: 63 68 61 72 20 63 6f 6e 73 74 2a 2c 63 68 61 72  char const*,char
c670: 20 63 6f 6e 73 74 2a 2c 73 71 6c 69 74 65 33 5f   const*,sqlite3_
c680: 69 6e 74 36 34 2c 73 71 6c 69 74 65 33 5f 69 6e  int64,sqlite3_in
c690: 74 36 34 0a 20 20 29 3b 0a 20 20 50 72 65 55 70  t64.  );.  PreUp
c6a0: 64 61 74 65 20 2a 70 50 72 65 55 70 64 61 74 65  date *pPreUpdate
c6b0: 3b 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74  ;        /* Cont
c6c0: 65 78 74 20 66 6f 72 20 61 63 74 69 76 65 20 70  ext for active p
c6d0: 72 65 2d 75 70 64 61 74 65 20 63 61 6c 6c 62 61  re-update callba
c6e0: 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a 20  ck */.#endif /* 
c6f0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52  SQLITE_ENABLE_PR
c700: 45 55 50 44 41 54 45 5f 48 4f 4f 4b 20 2a 2f 0a  EUPDATE_HOOK */.
c710: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
c720: 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20 28 2a  MIT_WAL.  int (*
c730: 78 57 61 6c 43 61 6c 6c 62 61 63 6b 29 28 76 6f  xWalCallback)(vo
c740: 69 64 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a 2c  id *, sqlite3 *,
c750: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69   const char *, i
c760: 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70 57 61  nt);.  void *pWa
c770: 6c 41 72 67 3b 0a 23 65 6e 64 69 66 0a 20 20 76  lArg;.#endif.  v
c780: 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64  oid(*xCollNeeded
c790: 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a  )(void*,sqlite3*
c7a0: 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f  ,int eTextRep,co
c7b0: 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f  nst char*);.  vo
c7c0: 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 31  id(*xCollNeeded1
c7d0: 36 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33  6)(void*,sqlite3
c7e0: 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63  *,int eTextRep,c
c7f0: 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76  onst void*);.  v
c800: 6f 69 64 20 2a 70 43 6f 6c 6c 4e 65 65 64 65 64  oid *pCollNeeded
c810: 41 72 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76  Arg;.  sqlite3_v
c820: 61 6c 75 65 20 2a 70 45 72 72 3b 20 20 20 20 20  alue *pErr;     
c830: 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63       /* Most rec
c840: 65 6e 74 20 65 72 72 6f 72 20 6d 65 73 73 61 67  ent error messag
c850: 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20  e */.  union {. 
c860: 20 20 20 76 6f 6c 61 74 69 6c 65 20 69 6e 74 20     volatile int 
c870: 69 73 49 6e 74 65 72 72 75 70 74 65 64 3b 20 2f  isInterrupted; /
c880: 2a 20 54 72 75 65 20 69 66 20 73 71 6c 69 74 65  * True if sqlite
c890: 33 5f 69 6e 74 65 72 72 75 70 74 20 68 61 73 20  3_interrupt has 
c8a0: 62 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a 20  been called */. 
c8b0: 20 20 20 64 6f 75 62 6c 65 20 6e 6f 74 55 73 65     double notUse
c8c0: 64 31 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  d1;            /
c8d0: 2a 20 53 70 61 63 65 72 20 2a 2f 0a 20 20 7d 20  * Spacer */.  } 
c8e0: 75 31 3b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 20  u1;.  Lookaside 
c8f0: 6c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20  lookaside;      
c900: 20 20 20 20 2f 2a 20 4c 6f 6f 6b 61 73 69 64 65      /* Lookaside
c910: 20 6d 61 6c 6c 6f 63 20 63 6f 6e 66 69 67 75 72   malloc configur
c920: 61 74 69 6f 6e 20 2a 2f 0a 23 69 66 6e 64 65 66  ation */.#ifndef
c930: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
c940: 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 73 71 6c  HORIZATION.  sql
c950: 69 74 65 33 5f 78 61 75 74 68 20 78 41 75 74 68  ite3_xauth xAuth
c960: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 63  ;          /* Ac
c970: 63 65 73 73 20 61 75 74 68 6f 72 69 7a 61 74 69  cess authorizati
c980: 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  on function */. 
c990: 20 76 6f 69 64 20 2a 70 41 75 74 68 41 72 67 3b   void *pAuthArg;
c9a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c9b0: 2a 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20 74  * 1st argument t
c9c0: 6f 20 74 68 65 20 61 63 63 65 73 73 20 61 75 74  o the access aut
c9d0: 68 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 65  h function */.#e
c9e0: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
c9f0: 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53  ITE_OMIT_PROGRES
ca00: 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e 74  S_CALLBACK.  int
ca10: 20 28 2a 78 50 72 6f 67 72 65 73 73 29 28 76 6f   (*xProgress)(vo
ca20: 69 64 20 2a 29 3b 20 20 20 20 20 2f 2a 20 54 68  id *);     /* Th
ca30: 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  e progress callb
ca40: 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ack */.  void *p
ca50: 50 72 6f 67 72 65 73 73 41 72 67 3b 20 20 20 20  ProgressArg;    
ca60: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
ca70: 6e 74 20 74 6f 20 74 68 65 20 70 72 6f 67 72 65  nt to the progre
ca80: 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  ss callback */. 
ca90: 20 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67 72   unsigned nProgr
caa0: 65 73 73 4f 70 73 3b 20 20 20 20 20 20 20 20 2f  essOps;        /
cab0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6f 70 63 6f  * Number of opco
cac0: 64 65 73 20 66 6f 72 20 70 72 6f 67 72 65 73 73  des for progress
cad0: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e   callback */.#en
cae0: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
caf0: 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
cb00: 41 42 4c 45 0a 20 20 69 6e 74 20 6e 56 54 72 61  ABLE.  int nVTra
cb10: 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ns;             
cb20: 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65       /* Allocate
cb30: 64 20 73 69 7a 65 20 6f 66 20 61 56 54 72 61 6e  d size of aVTran
cb40: 73 20 2a 2f 0a 20 20 48 61 73 68 20 61 4d 6f 64  s */.  Hash aMod
cb50: 75 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ule;            
cb60: 20 20 20 20 20 2f 2a 20 70 6f 70 75 6c 61 74 65       /* populate
cb70: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63 72 65  d by sqlite3_cre
cb80: 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a  ate_module() */.
cb90: 20 20 56 74 61 62 43 74 78 20 2a 70 56 74 61 62    VtabCtx *pVtab
cba0: 43 74 78 3b 20 20 20 20 20 20 20 20 20 20 20 20  Ctx;            
cbb0: 2f 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72 20 61  /* Context for a
cbc0: 63 74 69 76 65 20 76 74 61 62 20 63 6f 6e 6e 65  ctive vtab conne
cbd0: 63 74 2f 63 72 65 61 74 65 20 2a 2f 0a 20 20 56  ct/create */.  V
cbe0: 54 61 62 6c 65 20 2a 2a 61 56 54 72 61 6e 73 3b  Table **aVTrans;
cbf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
cc00: 56 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 77  Virtual tables w
cc10: 69 74 68 20 6f 70 65 6e 20 74 72 61 6e 73 61 63  ith open transac
cc20: 74 69 6f 6e 73 20 2a 2f 0a 20 20 56 54 61 62 6c  tions */.  VTabl
cc30: 65 20 2a 70 44 69 73 63 6f 6e 6e 65 63 74 3b 20  e *pDisconnect; 
cc40: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 69 73 63           /* Disc
cc50: 6f 6e 6e 65 63 74 20 74 68 65 73 65 20 69 6e 20  onnect these in 
cc60: 6e 65 78 74 20 73 71 6c 69 74 65 33 5f 70 72 65  next sqlite3_pre
cc70: 70 61 72 65 28 29 20 2a 2f 0a 23 65 6e 64 69 66  pare() */.#endif
cc80: 0a 20 20 48 61 73 68 20 61 46 75 6e 63 3b 20 20  .  Hash aFunc;  
cc90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cca0: 20 2f 2a 20 48 61 73 68 20 74 61 62 6c 65 20 6f   /* Hash table o
ccb0: 66 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 75 6e  f connection fun
ccc0: 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 48 61 73 68  ctions */.  Hash
ccd0: 20 61 43 6f 6c 6c 53 65 71 3b 20 20 20 20 20 20   aCollSeq;      
cce0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c            /* All
ccf0: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
cd00: 6e 63 65 73 20 2a 2f 0a 20 20 42 75 73 79 48 61  nces */.  BusyHa
cd10: 6e 64 6c 65 72 20 62 75 73 79 48 61 6e 64 6c 65  ndler busyHandle
cd20: 72 3b 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20  r;      /* Busy 
cd30: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 44 62  callback */.  Db
cd40: 20 61 44 62 53 74 61 74 69 63 5b 32 5d 3b 20 20   aDbStatic[2];  
cd50: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
cd60: 74 61 74 69 63 20 73 70 61 63 65 20 66 6f 72 20  tatic space for 
cd70: 74 68 65 20 32 20 64 65 66 61 75 6c 74 20 62 61  the 2 default ba
cd80: 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 53 61 76 65  ckends */.  Save
cd90: 70 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e  point *pSavepoin
cda0: 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73  t;        /* Lis
cdb0: 74 20 6f 66 20 61 63 74 69 76 65 20 73 61 76 65  t of active save
cdc0: 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20  points */.  int 
cdd0: 62 75 73 79 54 69 6d 65 6f 75 74 3b 20 20 20 20  busyTimeout;    
cde0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 75 73            /* Bus
cdf0: 79 20 68 61 6e 64 6c 65 72 20 74 69 6d 65 6f 75  y handler timeou
ce00: 74 2c 20 69 6e 20 6d 73 65 63 20 2a 2f 0a 20 20  t, in msec */.  
ce10: 69 6e 74 20 6e 53 61 76 65 70 6f 69 6e 74 3b 20  int nSavepoint; 
ce20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
ce30: 20 4e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74   Number of non-t
ce40: 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70  ransaction savep
ce50: 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  oints */.  int n
ce60: 53 74 61 74 65 6d 65 6e 74 3b 20 20 20 20 20 20  Statement;      
ce70: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
ce80: 65 72 20 6f 66 20 6e 65 73 74 65 64 20 73 74 61  er of nested sta
ce90: 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69  tement-transacti
cea0: 6f 6e 73 20 20 2a 2f 0a 20 20 69 36 34 20 6e 44  ons  */.  i64 nD
ceb0: 65 66 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20  eferredCons;    
cec0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64          /* Net d
ced0: 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69  eferred constrai
cee0: 6e 74 73 20 74 68 69 73 20 74 72 61 6e 73 61 63  nts this transac
cef0: 74 69 6f 6e 2e 20 2a 2f 0a 20 20 69 36 34 20 6e  tion. */.  i64 n
cf00: 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b  DeferredImmCons;
cf10: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20           /* Net 
cf20: 64 65 66 65 72 72 65 64 20 69 6d 6d 65 64 69 61  deferred immedia
cf30: 74 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  te constraints *
cf40: 2f 0a 20 20 69 6e 74 20 2a 70 6e 42 79 74 65 73  /.  int *pnBytes
cf50: 46 72 65 65 64 3b 20 20 20 20 20 20 20 20 20 20  Freed;          
cf60: 20 20 2f 2a 20 49 66 20 6e 6f 74 20 4e 55 4c 4c    /* If not NULL
cf70: 2c 20 69 6e 63 72 65 6d 65 6e 74 20 74 68 69 73  , increment this
cf80: 20 69 6e 20 44 62 46 72 65 65 28 29 20 2a 2f 0a   in DbFree() */.
cf90: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
cfa0: 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49  ABLE_UNLOCK_NOTI
cfb0: 46 59 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c  FY.  /* The foll
cfc0: 6f 77 69 6e 67 20 76 61 72 69 61 62 6c 65 73 20  owing variables 
cfd0: 61 72 65 20 61 6c 6c 20 70 72 6f 74 65 63 74 65  are all protecte
cfe0: 64 20 62 79 20 74 68 65 20 53 54 41 54 49 43 5f  d by the STATIC_
cff0: 4d 41 53 54 45 52 0a 20 20 2a 2a 20 6d 75 74 65  MASTER.  ** mute
d000: 78 2c 20 6e 6f 74 20 62 79 20 73 71 6c 69 74 65  x, not by sqlite
d010: 33 2e 6d 75 74 65 78 2e 20 54 68 65 79 20 61 72  3.mutex. They ar
d020: 65 20 75 73 65 64 20 62 79 20 63 6f 64 65 20 69  e used by code i
d030: 6e 20 6e 6f 74 69 66 79 2e 63 2e 0a 20 20 2a 2a  n notify.c..  **
d040: 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70 55 6e  .  ** When X.pUn
d050: 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d  lockConnection==
d060: 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68  Y, that means th
d070: 61 74 20 58 20 69 73 20 77 61 69 74 69 6e 67 20  at X is waiting 
d080: 66 6f 72 20 59 20 74 6f 0a 20 20 2a 2a 20 75 6e  for Y to.  ** un
d090: 6c 6f 63 6b 20 73 6f 20 74 68 61 74 20 69 74 20  lock so that it 
d0a0: 63 61 6e 20 70 72 6f 63 65 65 64 2e 0a 20 20 2a  can proceed..  *
d0b0: 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70 42  *.  ** When X.pB
d0c0: 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f  lockingConnectio
d0d0: 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73  n==Y, that means
d0e0: 20 74 68 61 74 20 73 6f 6d 65 74 68 69 6e 67 20   that something 
d0f0: 74 68 61 74 20 58 20 74 72 69 65 64 0a 20 20 2a  that X tried.  *
d100: 2a 20 74 72 69 65 64 20 74 6f 20 64 6f 20 72 65  * tried to do re
d110: 63 65 6e 74 6c 79 20 66 61 69 6c 65 64 20 77 69  cently failed wi
d120: 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 4c 4f 43  th an SQLITE_LOC
d130: 4b 45 44 20 65 72 72 6f 72 20 64 75 65 20 74 6f  KED error due to
d140: 20 6c 6f 63 6b 73 0a 20 20 2a 2a 20 68 65 6c 64   locks.  ** held
d150: 20 62 79 20 59 2e 0a 20 20 2a 2f 0a 20 20 73 71   by Y..  */.  sq
d160: 6c 69 74 65 33 20 2a 70 42 6c 6f 63 6b 69 6e 67  lite3 *pBlocking
d170: 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 2f 2a 20 43  Connection; /* C
d180: 6f 6e 6e 65 63 74 69 6f 6e 20 74 68 61 74 20 63  onnection that c
d190: 61 75 73 65 64 20 53 51 4c 49 54 45 5f 4c 4f 43  aused SQLITE_LOC
d1a0: 4b 45 44 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  KED */.  sqlite3
d1b0: 20 2a 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74   *pUnlockConnect
d1c0: 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ion;           /
d1d0: 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20  * Connection to 
d1e0: 77 61 74 63 68 20 66 6f 72 20 75 6e 6c 6f 63 6b  watch for unlock
d1f0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 6e 6c   */.  void *pUnl
d200: 6f 63 6b 41 72 67 3b 20 20 20 20 20 20 20 20 20  ockArg;         
d210: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
d220: 72 67 75 6d 65 6e 74 20 74 6f 20 78 55 6e 6c 6f  rgument to xUnlo
d230: 63 6b 4e 6f 74 69 66 79 20 2a 2f 0a 20 20 76 6f  ckNotify */.  vo
d240: 69 64 20 28 2a 78 55 6e 6c 6f 63 6b 4e 6f 74 69  id (*xUnlockNoti
d250: 66 79 29 28 76 6f 69 64 20 2a 2a 2c 20 69 6e 74  fy)(void **, int
d260: 29 3b 20 20 2f 2a 20 55 6e 6c 6f 63 6b 20 6e 6f  );  /* Unlock no
d270: 74 69 66 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  tify callback */
d280: 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 4e 65 78  .  sqlite3 *pNex
d290: 74 42 6c 6f 63 6b 65 64 3b 20 20 20 20 20 20 20  tBlocked;       
d2a0: 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69 73 74   /* Next in list
d2b0: 20 6f 66 20 61 6c 6c 20 62 6c 6f 63 6b 65 64 20   of all blocked 
d2c0: 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f 0a 23  connections */.#
d2d0: 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c  endif.#ifdef SQL
d2e0: 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54  ITE_USER_AUTHENT
d2f0: 49 43 41 54 49 4f 4e 0a 20 20 73 71 6c 69 74 65  ICATION.  sqlite
d300: 33 5f 75 73 65 72 61 75 74 68 20 61 75 74 68 3b  3_userauth auth;
d310: 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 72 20          /* User 
d320: 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 69  authentication i
d330: 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 23 65  nformation */.#e
d340: 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  ndif.};../*.** A
d350: 20 6d 61 63 72 6f 20 74 6f 20 64 69 73 63 6f 76   macro to discov
d360: 65 72 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20  er the encoding 
d370: 6f 66 20 61 20 64 61 74 61 62 61 73 65 2e 0a 2a  of a database..*
d380: 2f 0a 23 64 65 66 69 6e 65 20 53 43 48 45 4d 41  /.#define SCHEMA
d390: 5f 45 4e 43 28 64 62 29 20 28 28 64 62 29 2d 3e  _ENC(db) ((db)->
d3a0: 61 44 62 5b 30 5d 2e 70 53 63 68 65 6d 61 2d 3e  aDb[0].pSchema->
d3b0: 65 6e 63 29 0a 23 64 65 66 69 6e 65 20 45 4e 43  enc).#define ENC
d3c0: 28 64 62 29 20 20 20 20 20 20 20 20 28 28 64 62  (db)        ((db
d3d0: 29 2d 3e 65 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20 50  )->enc)../*.** P
d3e0: 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66  ossible values f
d3f0: 6f 72 20 74 68 65 20 73 71 6c 69 74 65 33 2e 66  or the sqlite3.f
d400: 6c 61 67 73 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75  lags..**.** Valu
d410: 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 65  e constraints (e
d420: 6e 66 6f 72 63 65 64 20 76 69 61 20 61 73 73 65  nforced via asse
d430: 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20 20 20 53  rt()):.**      S
d440: 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79 6e 63 20  QLITE_FullFSync 
d450: 20 20 20 20 3d 3d 20 50 41 47 45 52 5f 46 55 4c      == PAGER_FUL
d460: 4c 46 53 59 4e 43 0a 2a 2a 20 20 20 20 20 20 53  LFSYNC.**      S
d470: 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53  QLITE_CkptFullFS
d480: 79 6e 63 20 3d 3d 20 50 41 47 45 52 5f 43 4b 50  ync == PAGER_CKP
d490: 54 5f 46 55 4c 4c 46 53 59 4e 43 0a 2a 2a 20 20  T_FULLFSYNC.**  
d4a0: 20 20 20 20 53 51 4c 49 54 45 5f 43 61 63 68 65      SQLITE_Cache
d4b0: 53 70 69 6c 6c 20 20 20 20 3d 3d 20 50 41 47 45  Spill    == PAGE
d4c0: 52 5f 43 41 43 48 45 5f 53 50 49 4c 4c 0a 2a 2f  R_CACHE_SPILL.*/
d4d0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
d4e0: 57 72 69 74 65 53 63 68 65 6d 61 20 20 20 20 30  WriteSchema    0
d4f0: 78 30 30 30 30 30 30 30 31 20 20 2f 2a 20 4f 4b  x00000001  /* OK
d500: 20 74 6f 20 75 70 64 61 74 65 20 53 51 4c 49 54   to update SQLIT
d510: 45 5f 4d 41 53 54 45 52 20 2a 2f 0a 23 64 65 66  E_MASTER */.#def
d520: 69 6e 65 20 53 51 4c 49 54 45 5f 4c 65 67 61 63  ine SQLITE_Legac
d530: 79 46 69 6c 65 46 6d 74 20 20 30 78 30 30 30 30  yFileFmt  0x0000
d540: 30 30 30 32 20 20 2f 2a 20 43 72 65 61 74 65 20  0002  /* Create 
d550: 6e 65 77 20 64 61 74 61 62 61 73 65 73 20 69 6e  new databases in
d560: 20 66 6f 72 6d 61 74 20 31 20 2a 2f 0a 23 64 65   format 1 */.#de
d570: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c  fine SQLITE_Full
d580: 43 6f 6c 4e 61 6d 65 73 20 20 20 30 78 30 30 30  ColNames   0x000
d590: 30 30 30 30 34 20 20 2f 2a 20 53 68 6f 77 20 66  00004  /* Show f
d5a0: 75 6c 6c 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  ull column names
d5b0: 20 6f 6e 20 53 45 4c 45 43 54 20 2a 2f 0a 23 64   on SELECT */.#d
d5c0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c  efine SQLITE_Ful
d5d0: 6c 46 53 79 6e 63 20 20 20 20 20 20 30 78 30 30  lFSync      0x00
d5e0: 30 30 30 30 30 38 20 20 2f 2a 20 55 73 65 20 66  000008  /* Use f
d5f0: 75 6c 6c 20 66 73 79 6e 63 20 6f 6e 20 74 68 65  ull fsync on the
d600: 20 62 61 63 6b 65 6e 64 20 2a 2f 0a 23 64 65 66   backend */.#def
d610: 69 6e 65 20 53 51 4c 49 54 45 5f 43 6b 70 74 46  ine SQLITE_CkptF
d620: 75 6c 6c 46 53 79 6e 63 20 20 30 78 30 30 30 30  ullFSync  0x0000
d630: 30 30 31 30 20 20 2f 2a 20 55 73 65 20 66 75 6c  0010  /* Use ful
d640: 6c 20 66 73 79 6e 63 20 66 6f 72 20 63 68 65 63  l fsync for chec
d650: 6b 70 6f 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  kpoint */.#defin
d660: 65 20 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70  e SQLITE_CacheSp
d670: 69 6c 6c 20 20 20 20 20 30 78 30 30 30 30 30 30  ill     0x000000
d680: 32 30 20 20 2f 2a 20 4f 4b 20 74 6f 20 73 70 69  20  /* OK to spi
d690: 6c 6c 20 70 61 67 65 72 20 63 61 63 68 65 20 2a  ll pager cache *
d6a0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
d6b0: 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d 65 73 20 20  _ShortColNames  
d6c0: 30 78 30 30 30 30 30 30 34 30 20 20 2f 2a 20 53  0x00000040  /* S
d6d0: 68 6f 77 20 73 68 6f 72 74 20 63 6f 6c 75 6d 6e  how short column
d6e0: 73 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69  s names */.#defi
d6f0: 6e 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52  ne SQLITE_CountR
d700: 6f 77 73 20 20 20 20 20 20 30 78 30 30 30 30 30  ows      0x00000
d710: 30 38 30 20 20 2f 2a 20 43 6f 75 6e 74 20 72 6f  080  /* Count ro
d720: 77 73 20 63 68 61 6e 67 65 64 20 62 79 20 49 4e  ws changed by IN
d730: 53 45 52 54 2c 20 2a 2f 0a 20 20 20 20 20 20 20  SERT, */.       
d740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d760: 20 20 20 2f 2a 20 20 20 44 45 4c 45 54 45 2c 20     /*   DELETE, 
d770: 6f 72 20 55 50 44 41 54 45 20 61 6e 64 20 72 65  or UPDATE and re
d780: 74 75 72 6e 20 2a 2f 0a 20 20 20 20 20 20 20 20  turn */.        
d790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d7b0: 20 20 2f 2a 20 20 20 74 68 65 20 63 6f 75 6e 74    /*   the count
d7c0: 20 75 73 69 6e 67 20 61 20 63 61 6c 6c 62 61 63   using a callbac
d7d0: 6b 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  k. */.#define SQ
d7e0: 4c 49 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62 61 63  LITE_NullCallbac
d7f0: 6b 20 20 20 30 78 30 30 30 30 30 31 30 30 20 20  k   0x00000100  
d800: 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 63 61  /* Invoke the ca
d810: 6c 6c 62 61 63 6b 20 6f 6e 63 65 20 69 66 20 74  llback once if t
d820: 68 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  he */.          
d830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d850: 2f 2a 20 20 20 72 65 73 75 6c 74 20 73 65 74 20  /*   result set 
d860: 69 73 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66  is empty */.#def
d870: 69 6e 65 20 53 51 4c 49 54 45 5f 49 67 6e 6f 72  ine SQLITE_Ignor
d880: 65 43 68 65 63 6b 73 20 20 20 30 78 30 30 30 30  eChecks   0x0000
d890: 30 32 30 30 20 20 2f 2a 20 44 6f 20 6e 6f 74 20  0200  /* Do not 
d8a0: 65 6e 66 6f 72 63 65 20 63 68 65 63 6b 20 63 6f  enforce check co
d8b0: 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65  nstraints */.#de
d8c0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 61 64  fine SQLITE_Read
d8d0: 55 6e 63 6f 6d 6d 69 74 20 20 20 30 78 30 30 30  Uncommit   0x000
d8e0: 30 30 34 30 30 20 20 2f 2a 20 52 45 41 44 20 55  00400  /* READ U
d8f0: 4e 43 4f 4d 4d 49 54 54 45 44 20 69 6e 20 73 68  NCOMMITTED in sh
d900: 61 72 65 64 2d 63 61 63 68 65 20 2a 2f 0a 23 64  ared-cache */.#d
d910: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 6f 43  efine SQLITE_NoC
d920: 6b 70 74 4f 6e 43 6c 6f 73 65 20 20 30 78 30 30  kptOnClose  0x00
d930: 30 30 30 38 30 30 20 20 2f 2a 20 4e 6f 20 63 68  000800  /* No ch
d940: 65 63 6b 70 6f 69 6e 74 20 6f 6e 20 63 6c 6f 73  eckpoint on clos
d950: 65 28 29 2f 44 45 54 41 43 48 20 2a 2f 0a 23 64  e()/DETACH */.#d
d960: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 76  efine SQLITE_Rev
d970: 65 72 73 65 4f 72 64 65 72 20 20 20 30 78 30 30  erseOrder   0x00
d980: 30 30 31 30 30 30 20 20 2f 2a 20 52 65 76 65 72  001000  /* Rever
d990: 73 65 20 75 6e 6f 72 64 65 72 65 64 20 53 45 4c  se unordered SEL
d9a0: 45 43 54 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ECTs */.#define 
d9b0: 53 51 4c 49 54 45 5f 52 65 63 54 72 69 67 67 65  SQLITE_RecTrigge
d9c0: 72 73 20 20 20 20 30 78 30 30 30 30 32 30 30 30  rs    0x00002000
d9d0: 20 20 2f 2a 20 45 6e 61 62 6c 65 20 72 65 63 75    /* Enable recu
d9e0: 72 73 69 76 65 20 74 72 69 67 67 65 72 73 20 2a  rsive triggers *
d9f0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
da00: 5f 46 6f 72 65 69 67 6e 4b 65 79 73 20 20 20 20  _ForeignKeys    
da10: 30 78 30 30 30 30 34 30 30 30 20 20 2f 2a 20 45  0x00004000  /* E
da20: 6e 66 6f 72 63 65 20 66 6f 72 65 69 67 6e 20 6b  nforce foreign k
da30: 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 20  ey constraints  
da40: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
da50: 45 5f 41 75 74 6f 49 6e 64 65 78 20 20 20 20 20  E_AutoIndex     
da60: 20 30 78 30 30 30 30 38 30 30 30 20 20 2f 2a 20   0x00008000  /* 
da70: 45 6e 61 62 6c 65 20 61 75 74 6f 6d 61 74 69 63  Enable automatic
da80: 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65 66   indexes */.#def
da90: 69 6e 65 20 53 51 4c 49 54 45 5f 4c 6f 61 64 45  ine SQLITE_LoadE
daa0: 78 74 65 6e 73 69 6f 6e 20 20 30 78 30 30 30 31  xtension  0x0001
dab0: 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20  0000  /* Enable 
dac0: 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 20 2a  load_extension *
dad0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
dae0: 5f 4c 6f 61 64 45 78 74 46 75 6e 63 20 20 20 20  _LoadExtFunc    
daf0: 30 78 30 30 30 32 30 30 30 30 20 20 2f 2a 20 45  0x00020000  /* E
db00: 6e 61 62 6c 65 20 6c 6f 61 64 5f 65 78 74 65 6e  nable load_exten
db10: 73 69 6f 6e 28 29 20 53 51 4c 20 66 75 6e 63 20  sion() SQL func 
db20: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
db30: 45 5f 45 6e 61 62 6c 65 54 72 69 67 67 65 72 20  E_EnableTrigger 
db40: 20 30 78 30 30 30 34 30 30 30 30 20 20 2f 2a 20   0x00040000  /* 
db50: 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 74  True to enable t
db60: 72 69 67 67 65 72 73 20 2a 2f 0a 23 64 65 66 69  riggers */.#defi
db70: 6e 65 20 53 51 4c 49 54 45 5f 44 65 66 65 72 46  ne SQLITE_DeferF
db80: 4b 73 20 20 20 20 20 20 20 30 78 30 30 30 38 30  Ks       0x00080
db90: 30 30 30 20 20 2f 2a 20 44 65 66 65 72 20 61 6c  000  /* Defer al
dba0: 6c 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73  l FK constraints
dbb0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
dbc0: 54 45 5f 51 75 65 72 79 4f 6e 6c 79 20 20 20 20  TE_QueryOnly    
dbd0: 20 20 30 78 30 30 31 30 30 30 30 30 20 20 2f 2a    0x00100000  /*
dbe0: 20 44 69 73 61 62 6c 65 20 64 61 74 61 62 61 73   Disable databas
dbf0: 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65  e changes */.#de
dc00: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 65 6c 6c  fine SQLITE_Cell
dc10: 53 69 7a 65 43 6b 20 20 20 20 20 30 78 30 30 32  SizeCk     0x002
dc20: 30 30 30 30 30 20 20 2f 2a 20 43 68 65 63 6b 20  00000  /* Check 
dc30: 62 74 72 65 65 20 63 65 6c 6c 20 73 69 7a 65 73  btree cell sizes
dc40: 20 6f 6e 20 6c 6f 61 64 20 2a 2f 0a 23 64 65 66   on load */.#def
dc50: 69 6e 65 20 53 51 4c 49 54 45 5f 46 74 73 33 54  ine SQLITE_Fts3T
dc60: 6f 6b 65 6e 69 7a 65 72 20 20 30 78 30 30 34 30  okenizer  0x0040
dc70: 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20  0000  /* Enable 
dc80: 66 74 73 33 5f 74 6f 6b 65 6e 69 7a 65 72 28 32  fts3_tokenizer(2
dc90: 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ) */.#define SQL
dca0: 49 54 45 5f 45 6e 61 62 6c 65 51 50 53 47 20 20  ITE_EnableQPSG  
dcb0: 20 20 20 30 78 30 30 38 30 30 30 30 30 20 20 2f     0x00800000  /
dcc0: 2a 20 51 75 65 72 79 20 50 6c 61 6e 6e 65 72 20  * Query Planner 
dcd0: 53 74 61 62 69 6c 69 74 79 20 47 75 61 72 61 6e  Stability Guaran
dce0: 74 65 65 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  tee*/.#define SQ
dcf0: 4c 49 54 45 5f 54 72 69 67 67 65 72 45 51 50 20  LITE_TriggerEQP 
dd00: 20 20 20 20 30 78 30 31 30 30 30 30 30 30 20 20      0x01000000  
dd10: 2f 2a 20 53 68 6f 77 20 74 72 69 67 67 65 72 20  /* Show trigger 
dd20: 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c  EXPLAIN QUERY PL
dd30: 41 4e 20 2a 2f 0a 0a 2f 2a 20 46 6c 61 67 73 20  AN */../* Flags 
dd40: 75 73 65 64 20 6f 6e 6c 79 20 69 66 20 64 65 62  used only if deb
dd50: 75 67 67 69 6e 67 20 2a 2f 0a 23 69 66 64 65 66  ugging */.#ifdef
dd60: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 64   SQLITE_DEBUG.#d
dd70: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 71 6c  efine SQLITE_Sql
dd80: 54 72 61 63 65 20 20 20 20 20 20 20 30 78 30 38  Trace       0x08
dd90: 30 30 30 30 30 30 20 20 2f 2a 20 44 65 62 75 67  000000  /* Debug
dda0: 20 70 72 69 6e 74 20 53 51 4c 20 61 73 20 69 74   print SQL as it
ddb0: 20 65 78 65 63 75 74 65 73 20 2a 2f 0a 23 64 65   executes */.#de
ddc0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65  fine SQLITE_Vdbe
ddd0: 4c 69 73 74 69 6e 67 20 20 20 20 30 78 31 30 30  Listing    0x100
dde0: 30 30 30 30 30 20 20 2f 2a 20 44 65 62 75 67 20  00000  /* Debug 
ddf0: 6c 69 73 74 69 6e 67 73 20 6f 66 20 56 44 42 45  listings of VDBE
de00: 20 70 72 6f 67 72 61 6d 73 20 2a 2f 0a 23 64 65   programs */.#de
de10: 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65  fine SQLITE_Vdbe
de20: 54 72 61 63 65 20 20 20 20 20 20 30 78 32 30 30  Trace      0x200
de30: 30 30 30 30 30 20 20 2f 2a 20 54 72 75 65 20 74  00000  /* True t
de40: 6f 20 74 72 61 63 65 20 56 44 42 45 20 65 78 65  o trace VDBE exe
de50: 63 75 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  cution */.#defin
de60: 65 20 53 51 4c 49 54 45 5f 56 64 62 65 41 64 64  e SQLITE_VdbeAdd
de70: 6f 70 54 72 61 63 65 20 30 78 34 30 30 30 30 30  opTrace 0x400000
de80: 30 30 20 20 2f 2a 20 54 72 61 63 65 20 73 71 6c  00  /* Trace sql
de90: 69 74 65 33 56 64 62 65 41 64 64 4f 70 28 29 20  ite3VdbeAddOp() 
dea0: 63 61 6c 6c 73 20 2a 2f 0a 23 64 65 66 69 6e 65  calls */.#define
deb0: 20 53 51 4c 49 54 45 5f 56 64 62 65 45 51 50 20   SQLITE_VdbeEQP 
dec0: 20 20 20 20 20 20 20 30 78 38 30 30 30 30 30 30         0x8000000
ded0: 30 20 20 2f 2a 20 44 65 62 75 67 20 45 58 50 4c  0  /* Debug EXPL
dee0: 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 2a  AIN QUERY PLAN *
def0: 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  /.#endif../*.** 
df00: 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
df10: 6f 72 20 73 71 6c 69 74 65 33 2e 6d 44 62 46 6c  or sqlite3.mDbFl
df20: 61 67 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44  ags.*/.#define D
df30: 42 46 4c 41 47 5f 53 63 68 65 6d 61 43 68 61 6e  BFLAG_SchemaChan
df40: 67 65 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20  ge   0x0001  /* 
df50: 55 6e 63 6f 6d 6d 69 74 74 65 64 20 48 61 73 68  Uncommitted Hash
df60: 20 74 61 62 6c 65 20 63 68 61 6e 67 65 73 20 2a   table changes *
df70: 2f 0a 23 64 65 66 69 6e 65 20 44 42 46 4c 41 47  /.#define DBFLAG
df80: 5f 50 72 65 66 65 72 42 75 69 6c 74 69 6e 20 20  _PreferBuiltin  
df90: 30 78 30 30 30 32 20 20 2f 2a 20 50 72 65 66 65  0x0002  /* Prefe
dfa0: 72 65 6e 63 65 20 74 6f 20 62 75 69 6c 74 2d 69  rence to built-i
dfb0: 6e 20 66 75 6e 63 73 20 2a 2f 0a 23 64 65 66 69  n funcs */.#defi
dfc0: 6e 65 20 44 42 46 4c 41 47 5f 56 61 63 75 75 6d  ne DBFLAG_Vacuum
dfd0: 20 20 20 20 20 20 20 20 20 30 78 30 30 30 34 20           0x0004 
dfe0: 20 2f 2a 20 43 75 72 72 65 6e 74 6c 79 20 69 6e   /* Currently in
dff0: 20 61 20 56 41 43 55 55 4d 20 2a 2f 0a 0a 2f 2a   a VACUUM */../*
e000: 0a 2a 2a 20 42 69 74 73 20 6f 66 20 74 68 65 20  .** Bits of the 
e010: 73 71 6c 69 74 65 33 2e 64 62 4f 70 74 46 6c 61  sqlite3.dbOptFla
e020: 67 73 20 66 69 65 6c 64 20 74 68 61 74 20 61 72  gs field that ar
e030: 65 20 75 73 65 64 20 62 79 20 74 68 65 0a 2a 2a  e used by the.**
e040: 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f   sqlite3_test_co
e050: 6e 74 72 6f 6c 28 53 51 4c 49 54 45 5f 54 45 53  ntrol(SQLITE_TES
e060: 54 43 54 52 4c 5f 4f 50 54 49 4d 49 5a 41 54 49  TCTRL_OPTIMIZATI
e070: 4f 4e 53 2c 2e 2e 2e 29 20 69 6e 74 65 72 66 61  ONS,...) interfa
e080: 63 65 20 74 6f 0a 2a 2a 20 73 65 6c 65 63 74 69  ce to.** selecti
e090: 76 65 6c 79 20 64 69 73 61 62 6c 65 20 76 61 72  vely disable var
e0a0: 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f  ious optimizatio
e0b0: 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ns..*/.#define S
e0c0: 51 4c 49 54 45 5f 51 75 65 72 79 46 6c 61 74 74  QLITE_QueryFlatt
e0d0: 65 6e 65 72 20 30 78 30 30 30 31 20 20 20 2f 2a  ener 0x0001   /*
e0e0: 20 51 75 65 72 79 20 66 6c 61 74 74 65 6e 69 6e   Query flattenin
e0f0: 67 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  g */.#define SQL
e100: 49 54 45 5f 43 6f 6c 75 6d 6e 43 61 63 68 65 20  ITE_ColumnCache 
e110: 20 20 20 30 78 30 30 30 32 20 20 20 2f 2a 20 43     0x0002   /* C
e120: 6f 6c 75 6d 6e 20 63 61 63 68 65 20 2a 2f 0a 23  olumn cache */.#
e130: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 47 72  define SQLITE_Gr
e140: 6f 75 70 42 79 4f 72 64 65 72 20 20 20 30 78 30  oupByOrder   0x0
e150: 30 30 34 20 20 20 2f 2a 20 47 52 4f 55 50 42 59  004   /* GROUPBY
e160: 20 63 6f 76 65 72 20 6f 66 20 4f 52 44 45 52 42   cover of ORDERB
e170: 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  Y */.#define SQL
e180: 49 54 45 5f 46 61 63 74 6f 72 4f 75 74 43 6f 6e  ITE_FactorOutCon
e190: 73 74 20 30 78 30 30 30 38 20 20 20 2f 2a 20 43  st 0x0008   /* C
e1a0: 6f 6e 73 74 61 6e 74 20 66 61 63 74 6f 72 69 6e  onstant factorin
e1b0: 67 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  g */.#define SQL
e1c0: 49 54 45 5f 44 69 73 74 69 6e 63 74 4f 70 74 20  ITE_DistinctOpt 
e1d0: 20 20 20 30 78 30 30 31 30 20 20 20 2f 2a 20 44     0x0010   /* D
e1e0: 49 53 54 49 4e 43 54 20 75 73 69 6e 67 20 69 6e  ISTINCT using in
e1f0: 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  dexes */.#define
e200: 20 53 51 4c 49 54 45 5f 43 6f 76 65 72 49 64 78   SQLITE_CoverIdx
e210: 53 63 61 6e 20 20 20 30 78 30 30 32 30 20 20 20  Scan   0x0020   
e220: 2f 2a 20 43 6f 76 65 72 69 6e 67 20 69 6e 64 65  /* Covering inde
e230: 78 20 73 63 61 6e 73 20 2a 2f 0a 23 64 65 66 69  x scans */.#defi
e240: 6e 65 20 53 51 4c 49 54 45 5f 4f 72 64 65 72 42  ne SQLITE_OrderB
e250: 79 49 64 78 4a 6f 69 6e 20 30 78 30 30 34 30 20  yIdxJoin 0x0040 
e260: 20 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 6f 66    /* ORDER BY of
e270: 20 6a 6f 69 6e 73 20 76 69 61 20 69 6e 64 65 78   joins via index
e280: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e290: 54 45 5f 54 72 61 6e 73 69 74 69 76 65 20 20 20  TE_Transitive   
e2a0: 20 20 30 78 30 30 38 30 20 20 20 2f 2a 20 54 72    0x0080   /* Tr
e2b0: 61 6e 73 69 74 69 76 65 20 63 6f 6e 73 74 72 61  ansitive constra
e2c0: 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ints */.#define 
e2d0: 53 51 4c 49 54 45 5f 4f 6d 69 74 4e 6f 6f 70 4a  SQLITE_OmitNoopJ
e2e0: 6f 69 6e 20 20 20 30 78 30 31 30 30 20 20 20 2f  oin   0x0100   /
e2f0: 2a 20 4f 6d 69 74 20 75 6e 75 73 65 64 20 74 61  * Omit unused ta
e300: 62 6c 65 73 20 69 6e 20 6a 6f 69 6e 73 20 2a 2f  bles in joins */
e310: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e320: 43 6f 75 6e 74 4f 66 56 69 65 77 20 20 20 20 30  CountOfView    0
e330: 78 30 32 30 30 20 20 20 2f 2a 20 54 68 65 20 63  x0200   /* The c
e340: 6f 75 6e 74 2d 6f 66 2d 76 69 65 77 20 6f 70 74  ount-of-view opt
e350: 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64 65  imization */.#de
e360: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 75 72 73  fine SQLITE_Curs
e370: 6f 72 48 69 6e 74 73 20 20 20 20 30 78 30 34 30  orHints    0x040
e380: 30 20 20 20 2f 2a 20 41 64 64 20 4f 50 5f 43 75  0   /* Add OP_Cu
e390: 72 73 6f 72 48 69 6e 74 20 6f 70 63 6f 64 65 73  rsorHint opcodes
e3a0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e3b0: 54 45 5f 53 74 61 74 33 34 20 20 20 20 20 20 20  TE_Stat34       
e3c0: 20 20 30 78 30 38 30 30 20 20 20 2f 2a 20 55 73    0x0800   /* Us
e3d0: 65 20 53 54 41 54 33 20 6f 72 20 53 54 41 54 34  e STAT3 or STAT4
e3e0: 20 64 61 74 61 20 2a 2f 0a 20 20 20 2f 2a 20 54   data */.   /* T
e3f0: 48 33 20 65 78 70 65 63 74 73 20 74 68 65 20 53  H3 expects the S
e400: 74 61 74 33 34 20 20 5e 5e 5e 5e 5e 5e 20 76 61  tat34  ^^^^^^ va
e410: 6c 75 65 20 74 6f 20 62 65 20 30 78 30 38 30 30  lue to be 0x0800
e420: 2e 20 20 44 6f 6e 27 74 20 63 68 61 6e 67 65 20  .  Don't change 
e430: 69 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  it */.#define SQ
e440: 4c 49 54 45 5f 41 6c 6c 4f 70 74 73 20 20 20 20  LITE_AllOpts    
e450: 20 20 20 20 30 78 66 66 66 66 20 20 20 2f 2a 20      0xffff   /* 
e460: 41 6c 6c 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  All optimization
e470: 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72  s */../*.** Macr
e480: 6f 73 20 66 6f 72 20 74 65 73 74 69 6e 67 20 77  os for testing w
e490: 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 6f 70  hether or not op
e4a0: 74 69 6d 69 7a 61 74 69 6f 6e 73 20 61 72 65 20  timizations are 
e4b0: 65 6e 61 62 6c 65 64 20 6f 72 20 64 69 73 61 62  enabled or disab
e4c0: 6c 65 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  led..*/.#define 
e4d0: 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 44 69 73 61  OptimizationDisa
e4e0: 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20  bled(db, mask)  
e4f0: 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61  (((db)->dbOptFla
e500: 67 73 26 28 6d 61 73 6b 29 29 21 3d 30 29 0a 23  gs&(mask))!=0).#
e510: 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74  define Optimizat
e520: 69 6f 6e 45 6e 61 62 6c 65 64 28 64 62 2c 20 6d  ionEnabled(db, m
e530: 61 73 6b 29 20 20 20 28 28 28 64 62 29 2d 3e 64  ask)   (((db)->d
e540: 62 4f 70 74 46 6c 61 67 73 26 28 6d 61 73 6b 29  bOptFlags&(mask)
e550: 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  )==0)../*.** Ret
e560: 75 72 6e 20 74 72 75 65 20 69 66 20 69 74 20 4f  urn true if it O
e570: 4b 20 74 6f 20 66 61 63 74 6f 72 20 63 6f 6e 73  K to factor cons
e580: 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 73  tant expressions
e590: 20 69 6e 74 6f 20 74 68 65 20 69 6e 69 74 69 61   into the initia
e5a0: 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 63 6f 64 65  lization.** code
e5b0: 2e 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20 69  . The argument i
e5c0: 73 20 61 20 50 61 72 73 65 20 6f 62 6a 65 63 74  s a Parse object
e5d0: 20 66 6f 72 20 74 68 65 20 63 6f 64 65 20 67 65   for the code ge
e5e0: 6e 65 72 61 74 6f 72 2e 0a 2a 2f 0a 23 64 65 66  nerator..*/.#def
e5f0: 69 6e 65 20 43 6f 6e 73 74 46 61 63 74 6f 72 4f  ine ConstFactorO
e600: 6b 28 50 29 20 28 28 50 29 2d 3e 6f 6b 43 6f 6e  k(P) ((P)->okCon
e610: 73 74 46 61 63 74 6f 72 29 0a 0a 2f 2a 0a 2a 2a  stFactor)../*.**
e620: 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73   Possible values
e630: 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 2e   for the sqlite.
e640: 6d 61 67 69 63 20 66 69 65 6c 64 2e 0a 2a 2a 20  magic field..** 
e650: 54 68 65 20 6e 75 6d 62 65 72 73 20 61 72 65 20  The numbers are 
e660: 6f 62 74 61 69 6e 65 64 20 61 74 20 72 61 6e 64  obtained at rand
e670: 6f 6d 20 61 6e 64 20 68 61 76 65 20 6e 6f 20 73  om and have no s
e680: 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67 2c 20  pecial meaning, 
e690: 6f 74 68 65 72 0a 2a 2a 20 74 68 61 6e 20 62 65  other.** than be
e6a0: 69 6e 67 20 64 69 73 74 69 6e 63 74 20 66 72 6f  ing distinct fro
e6b0: 6d 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2e 0a 2a  m one another..*
e6c0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e6d0: 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 20 20 20 20  _MAGIC_OPEN     
e6e0: 30 78 61 30 32 39 61 36 39 37 20 20 2f 2a 20 44  0xa029a697  /* D
e6f0: 61 74 61 62 61 73 65 20 69 73 20 6f 70 65 6e 20  atabase is open 
e700: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e710: 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44 20 20  E_MAGIC_CLOSED  
e720: 20 30 78 39 66 33 63 32 64 33 33 20 20 2f 2a 20   0x9f3c2d33  /* 
e730: 44 61 74 61 62 61 73 65 20 69 73 20 63 6c 6f 73  Database is clos
e740: 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ed */.#define SQ
e750: 4c 49 54 45 5f 4d 41 47 49 43 5f 53 49 43 4b 20  LITE_MAGIC_SICK 
e760: 20 20 20 20 30 78 34 62 37 37 31 32 39 30 20 20      0x4b771290  
e770: 2f 2a 20 45 72 72 6f 72 20 61 6e 64 20 61 77 61  /* Error and awa
e780: 69 74 69 6e 67 20 63 6c 6f 73 65 20 2a 2f 0a 23  iting close */.#
e790: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
e7a0: 47 49 43 5f 42 55 53 59 20 20 20 20 20 30 78 66  GIC_BUSY     0xf
e7b0: 30 33 62 37 39 30 36 20 20 2f 2a 20 44 61 74 61  03b7906  /* Data
e7c0: 62 61 73 65 20 63 75 72 72 65 6e 74 6c 79 20 69  base currently i
e7d0: 6e 20 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65  n use */.#define
e7e0: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 45 52   SQLITE_MAGIC_ER
e7f0: 52 4f 52 20 20 20 20 30 78 62 35 33 35 37 39 33  ROR    0xb535793
e800: 30 20 20 2f 2a 20 41 6e 20 53 51 4c 49 54 45 5f  0  /* An SQLITE_
e810: 4d 49 53 55 53 45 20 65 72 72 6f 72 20 6f 63 63  MISUSE error occ
e820: 75 72 72 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  urred */.#define
e830: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 5a 4f   SQLITE_MAGIC_ZO
e840: 4d 42 49 45 20 20 20 30 78 36 34 63 66 66 63 37  MBIE   0x64cffc7
e850: 66 20 20 2f 2a 20 43 6c 6f 73 65 20 77 69 74 68  f  /* Close with
e860: 20 6c 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20   last statement 
e870: 63 6c 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  close */../*.** 
e880: 45 61 63 68 20 53 51 4c 20 66 75 6e 63 74 69 6f  Each SQL functio
e890: 6e 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20  n is defined by 
e8a0: 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
e8b0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20  he following.** 
e8c0: 73 74 72 75 63 74 75 72 65 2e 20 20 46 6f 72 20  structure.  For 
e8d0: 67 6c 6f 62 61 6c 20 62 75 69 6c 74 2d 69 6e 20  global built-in 
e8e0: 66 75 6e 63 74 69 6f 6e 73 20 28 65 78 3a 20 73  functions (ex: s
e8f0: 75 62 73 74 72 28 29 2c 20 6d 61 78 28 29 2c 20  ubstr(), max(), 
e900: 63 6f 75 6e 74 28 29 29 0a 2a 2a 20 61 20 70 6f  count()).** a po
e910: 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73 74  inter to this st
e920: 72 75 63 74 75 72 65 20 69 73 20 68 65 6c 64 20  ructure is held 
e930: 69 6e 20 74 68 65 20 73 71 6c 69 74 65 33 42 75  in the sqlite3Bu
e940: 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 20 6f  iltinFunctions o
e950: 62 6a 65 63 74 2e 0a 2a 2a 20 46 6f 72 20 70 65  bject..** For pe
e960: 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 70 70  r-connection app
e970: 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64  lication-defined
e980: 20 66 75 6e 63 74 69 6f 6e 73 2c 20 61 20 70 6f   functions, a po
e990: 69 6e 74 65 72 20 74 6f 20 74 68 69 73 0a 2a 2a  inter to this.**
e9a0: 20 73 74 72 75 63 74 75 72 65 20 69 73 20 68 65   structure is he
e9b0: 6c 64 20 69 6e 20 74 68 65 20 64 62 2d 3e 61 48  ld in the db->aH
e9c0: 61 73 68 20 68 61 73 68 20 74 61 62 6c 65 2e 0a  ash hash table..
e9d0: 2a 2a 0a 2a 2a 20 54 68 65 20 75 2e 70 48 61 73  **.** The u.pHas
e9e0: 68 20 66 69 65 6c 64 20 69 73 20 75 73 65 64 20  h field is used 
e9f0: 62 79 20 74 68 65 20 67 6c 6f 62 61 6c 20 62 75  by the global bu
ea00: 69 6c 74 2d 69 6e 73 2e 20 20 54 68 65 20 75 2e  ilt-ins.  The u.
ea10: 70 44 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 66  pDestructor.** f
ea20: 69 65 6c 64 20 69 73 20 75 73 65 64 20 62 79 20  ield is used by 
ea30: 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20 61  per-connection a
ea40: 70 70 2d 64 65 66 20 66 75 6e 63 74 69 6f 6e 73  pp-def functions
ea50: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63  ..*/.struct Func
ea60: 44 65 66 20 7b 0a 20 20 69 38 20 6e 41 72 67 3b  Def {.  i8 nArg;
ea70: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
ea80: 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
ea90: 6e 74 73 2e 20 20 2d 31 20 6d 65 61 6e 73 20 75  nts.  -1 means u
eaa0: 6e 6c 69 6d 69 74 65 64 20 2a 2f 0a 20 20 75 31  nlimited */.  u1
eab0: 36 20 66 75 6e 63 46 6c 61 67 73 3b 20 20 20 20  6 funcFlags;    
eac0: 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 62 69     /* Some combi
ead0: 6e 61 74 69 6f 6e 20 6f 66 20 53 51 4c 49 54 45  nation of SQLITE
eae0: 5f 46 55 4e 43 5f 2a 20 2a 2f 0a 20 20 76 6f 69  _FUNC_* */.  voi
eaf0: 64 20 2a 70 55 73 65 72 44 61 74 61 3b 20 20 20  d *pUserData;   
eb00: 20 20 2f 2a 20 55 73 65 72 20 64 61 74 61 20 70    /* User data p
eb10: 61 72 61 6d 65 74 65 72 20 2a 2f 0a 20 20 46 75  arameter */.  Fu
eb20: 6e 63 44 65 66 20 2a 70 4e 65 78 74 3b 20 20 20  ncDef *pNext;   
eb30: 20 20 20 2f 2a 20 4e 65 78 74 20 66 75 6e 63 74     /* Next funct
eb40: 69 6f 6e 20 77 69 74 68 20 73 61 6d 65 20 6e 61  ion with same na
eb50: 6d 65 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  me */.  void (*x
eb60: 53 46 75 6e 63 29 28 73 71 6c 69 74 65 33 5f 63  SFunc)(sqlite3_c
eb70: 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69  ontext*,int,sqli
eb80: 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a  te3_value**); /*
eb90: 20 66 75 6e 63 20 6f 72 20 61 67 67 2d 73 74 65   func or agg-ste
eba0: 70 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 46  p */.  void (*xF
ebb0: 69 6e 61 6c 69 7a 65 29 28 73 71 6c 69 74 65 33  inalize)(sqlite3
ebc0: 5f 63 6f 6e 74 65 78 74 2a 29 3b 20 20 20 20 20  _context*);     
ebd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
ebe0: 41 67 67 20 66 69 6e 61 6c 69 7a 65 72 20 2a 2f  Agg finalizer */
ebf0: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
ec00: 4e 61 6d 65 3b 20 20 20 2f 2a 20 53 51 4c 20 6e  Name;   /* SQL n
ec10: 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74  ame of the funct
ec20: 69 6f 6e 2e 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20  ion. */.  union 
ec30: 7b 0a 20 20 20 20 46 75 6e 63 44 65 66 20 2a 70  {.    FuncDef *p
ec40: 48 61 73 68 3b 20 20 20 20 20 20 2f 2a 20 4e 65  Hash;      /* Ne
ec50: 78 74 20 77 69 74 68 20 61 20 64 69 66 66 65 72  xt with a differ
ec60: 65 6e 74 20 6e 61 6d 65 20 62 75 74 20 74 68 65  ent name but the
ec70: 20 73 61 6d 65 20 68 61 73 68 20 2a 2f 0a 20 20   same hash */.  
ec80: 20 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72    FuncDestructor
ec90: 20 2a 70 44 65 73 74 72 75 63 74 6f 72 3b 20 20   *pDestructor;  
eca0: 20 2f 2a 20 52 65 66 65 72 65 6e 63 65 20 63 6f   /* Reference co
ecb0: 75 6e 74 65 64 20 64 65 73 74 72 75 63 74 6f 72  unted destructor
ecc0: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 7d   function */.  }
ecd0: 20 75 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   u;.};../*.** Th
ece0: 69 73 20 73 74 72 75 63 74 75 72 65 20 65 6e 63  is structure enc
ecf0: 61 70 73 75 6c 61 74 65 73 20 61 20 75 73 65 72  apsulates a user
ed00: 2d 66 75 6e 63 74 69 6f 6e 20 64 65 73 74 72 75  -function destru
ed10: 63 74 6f 72 20 63 61 6c 6c 62 61 63 6b 20 28 61  ctor callback (a
ed20: 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20  s.** configured 
ed30: 75 73 69 6e 67 20 63 72 65 61 74 65 5f 66 75 6e  using create_fun
ed40: 63 74 69 6f 6e 5f 76 32 28 29 29 20 61 6e 64 20  ction_v2()) and 
ed50: 61 20 72 65 66 65 72 65 6e 63 65 20 63 6f 75 6e  a reference coun
ed60: 74 65 72 2e 20 57 68 65 6e 0a 2a 2a 20 63 72 65  ter. When.** cre
ed70: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28  ate_function_v2(
ed80: 29 20 69 73 20 63 61 6c 6c 65 64 20 74 6f 20 63  ) is called to c
ed90: 72 65 61 74 65 20 61 20 66 75 6e 63 74 69 6f 6e  reate a function
eda0: 20 77 69 74 68 20 61 20 64 65 73 74 72 75 63 74   with a destruct
edb0: 6f 72 2c 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20  or,.** a single 
edc0: 6f 62 6a 65 63 74 20 6f 66 20 74 68 69 73 20 74  object of this t
edd0: 79 70 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64  ype is allocated
ede0: 2e 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72  . FuncDestructor
edf0: 2e 6e 52 65 66 20 69 73 20 73 65 74 20 74 6f 0a  .nRef is set to.
ee00: 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ** the number of
ee10: 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73   FuncDef objects
ee20: 20 63 72 65 61 74 65 64 20 28 65 69 74 68 65 72   created (either
ee30: 20 31 20 6f 72 20 33 2c 20 64 65 70 65 6e 64 69   1 or 3, dependi
ee40: 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a  ng on whether.**
ee50: 20 6f 72 20 6e 6f 74 20 74 68 65 20 73 70 65 63   or not the spec
ee60: 69 66 69 65 64 20 65 6e 63 6f 64 69 6e 67 20 69  ified encoding i
ee70: 73 20 53 51 4c 49 54 45 5f 41 4e 59 29 2e 20 54  s SQLITE_ANY). T
ee80: 68 65 20 46 75 6e 63 44 65 66 2e 70 44 65 73 74  he FuncDef.pDest
ee90: 72 75 63 74 6f 72 0a 2a 2a 20 6d 65 6d 62 65 72  ructor.** member
eea0: 20 6f 66 20 65 61 63 68 20 6f 66 20 74 68 65 20   of each of the 
eeb0: 6e 65 77 20 46 75 6e 63 44 65 66 20 6f 62 6a 65  new FuncDef obje
eec0: 63 74 73 20 69 73 20 73 65 74 20 74 6f 20 70 6f  cts is set to po
eed0: 69 6e 74 20 74 6f 20 74 68 65 20 61 6c 6c 6f 63  int to the alloc
eee0: 61 74 65 64 0a 2a 2a 20 46 75 6e 63 44 65 73 74  ated.** FuncDest
eef0: 72 75 63 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68  ructor..**.** Th
ef00: 65 72 65 61 66 74 65 72 2c 20 77 68 65 6e 20 6f  ereafter, when o
ef10: 6e 65 20 6f 66 20 74 68 65 20 46 75 6e 63 44 65  ne of the FuncDe
ef20: 66 20 6f 62 6a 65 63 74 73 20 69 73 20 64 65 6c  f objects is del
ef30: 65 74 65 64 2c 20 74 68 65 20 72 65 66 65 72 65  eted, the refere
ef40: 6e 63 65 0a 2a 2a 20 63 6f 75 6e 74 20 6f 6e 20  nce.** count on 
ef50: 74 68 69 73 20 6f 62 6a 65 63 74 20 69 73 20 64  this object is d
ef60: 65 63 72 65 6d 65 6e 74 65 64 2e 20 57 68 65 6e  ecremented. When
ef70: 20 69 74 20 72 65 61 63 68 65 73 20 30 2c 20 74   it reaches 0, t
ef80: 68 65 20 64 65 73 74 72 75 63 74 6f 72 0a 2a 2a  he destructor.**
ef90: 20 69 73 20 69 6e 76 6f 6b 65 64 20 61 6e 64 20   is invoked and 
efa0: 74 68 65 20 46 75 6e 63 44 65 73 74 72 75 63 74  the FuncDestruct
efb0: 6f 72 20 73 74 72 75 63 74 75 72 65 20 66 72 65  or structure fre
efc0: 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75  ed..*/.struct Fu
efd0: 6e 63 44 65 73 74 72 75 63 74 6f 72 20 7b 0a 20  ncDestructor {. 
efe0: 20 69 6e 74 20 6e 52 65 66 3b 0a 20 20 76 6f 69   int nRef;.  voi
eff0: 64 20 28 2a 78 44 65 73 74 72 6f 79 29 28 76 6f  d (*xDestroy)(vo
f000: 69 64 20 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70  id *);.  void *p
f010: 55 73 65 72 44 61 74 61 3b 0a 7d 3b 0a 0a 2f 2a  UserData;.};../*
f020: 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c  .** Possible val
f030: 75 65 73 20 66 6f 72 20 46 75 6e 63 44 65 66 2e  ues for FuncDef.
f040: 66 6c 61 67 73 2e 20 20 4e 6f 74 65 20 74 68 61  flags.  Note tha
f050: 74 20 74 68 65 20 5f 4c 45 4e 47 54 48 20 61 6e  t the _LENGTH an
f060: 64 20 5f 54 59 50 45 4f 46 0a 2a 2a 20 76 61 6c  d _TYPEOF.** val
f070: 75 65 73 20 6d 75 73 74 20 63 6f 72 72 65 73 70  ues must corresp
f080: 6f 6e 64 20 74 6f 20 4f 50 46 4c 41 47 5f 4c 45  ond to OPFLAG_LE
f090: 4e 47 54 48 41 52 47 20 61 6e 64 20 4f 50 46 4c  NGTHARG and OPFL
f0a0: 41 47 5f 54 59 50 45 4f 46 41 52 47 2e 20 20 41  AG_TYPEOFARG.  A
f0b0: 6e 64 0a 2a 2a 20 53 51 4c 49 54 45 5f 46 55 4e  nd.** SQLITE_FUN
f0c0: 43 5f 43 4f 4e 53 54 41 4e 54 20 6d 75 73 74 20  C_CONSTANT must 
f0d0: 62 65 20 74 68 65 20 73 61 6d 65 20 61 73 20 53  be the same as S
f0e0: 51 4c 49 54 45 5f 44 45 54 45 52 4d 49 4e 49 53  QLITE_DETERMINIS
f0f0: 54 49 43 2e 20 20 54 68 65 72 65 0a 2a 2a 20 61  TIC.  There.** a
f100: 72 65 20 61 73 73 65 72 74 28 29 20 73 74 61 74  re assert() stat
f110: 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 63 6f  ements in the co
f120: 64 65 20 74 6f 20 76 65 72 69 66 79 20 74 68 69  de to verify thi
f130: 73 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63  s..**.** Value c
f140: 6f 6e 73 74 72 61 69 6e 74 73 20 28 65 6e 66 6f  onstraints (enfo
f150: 72 63 65 64 20 76 69 61 20 61 73 73 65 72 74 28  rced via assert(
f160: 29 29 3a 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54  )):.**     SQLIT
f170: 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 20 20 20  E_FUNC_MINMAX   
f180: 20 3d 3d 20 20 4e 43 5f 4d 69 6e 4d 61 78 41 67   ==  NC_MinMaxAg
f190: 67 20 20 20 20 20 20 3d 3d 20 53 46 5f 4d 69 6e  g      == SF_Min
f1a0: 4d 61 78 41 67 67 0a 2a 2a 20 20 20 20 20 53 51  MaxAgg.**     SQ
f1b0: 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48  LITE_FUNC_LENGTH
f1c0: 20 20 20 20 3d 3d 20 20 4f 50 46 4c 41 47 5f 4c      ==  OPFLAG_L
f1d0: 45 4e 47 54 48 41 52 47 0a 2a 2a 20 20 20 20 20  ENGTHARG.**     
f1e0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59 50 45  SQLITE_FUNC_TYPE
f1f0: 4f 46 20 20 20 20 3d 3d 20 20 4f 50 46 4c 41 47  OF    ==  OPFLAG
f200: 5f 54 59 50 45 4f 46 41 52 47 0a 2a 2a 20 20 20  _TYPEOFARG.**   
f210: 20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f    SQLITE_FUNC_CO
f220: 4e 53 54 41 4e 54 20 20 3d 3d 20 20 53 51 4c 49  NSTANT  ==  SQLI
f230: 54 45 5f 44 45 54 45 52 4d 49 4e 49 53 54 49 43  TE_DETERMINISTIC
f240: 20 66 72 6f 6d 20 74 68 65 20 41 50 49 0a 2a 2a   from the API.**
f250: 20 20 20 20 20 53 51 4c 49 54 45 5f 46 55 4e 43       SQLITE_FUNC
f260: 5f 45 4e 43 4d 41 53 4b 20 20 20 64 65 70 65 6e  _ENCMASK   depen
f270: 64 73 20 6f 6e 20 53 51 4c 49 54 45 5f 55 54 46  ds on SQLITE_UTF
f280: 2a 20 6d 61 63 72 6f 73 20 69 6e 20 74 68 65 20  * macros in the 
f290: 41 50 49 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  API.*/.#define S
f2a0: 51 4c 49 54 45 5f 46 55 4e 43 5f 45 4e 43 4d 41  QLITE_FUNC_ENCMA
f2b0: 53 4b 20 20 30 78 30 30 30 33 20 2f 2a 20 53 51  SK  0x0003 /* SQ
f2c0: 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54  LITE_UTF8, SQLIT
f2d0: 45 5f 55 54 46 31 36 42 45 20 6f 72 20 55 54 46  E_UTF16BE or UTF
f2e0: 31 36 4c 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  16LE */.#define 
f2f0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 49 4b 45  SQLITE_FUNC_LIKE
f300: 20 20 20 20 20 30 78 30 30 30 34 20 2f 2a 20 43       0x0004 /* C
f310: 61 6e 64 69 64 61 74 65 20 66 6f 72 20 74 68 65  andidate for the
f320: 20 4c 49 4b 45 20 6f 70 74 69 6d 69 7a 61 74 69   LIKE optimizati
f330: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
f340: 4c 49 54 45 5f 46 55 4e 43 5f 43 41 53 45 20 20  LITE_FUNC_CASE  
f350: 20 20 20 30 78 30 30 30 38 20 2f 2a 20 43 61 73     0x0008 /* Cas
f360: 65 2d 73 65 6e 73 69 74 69 76 65 20 4c 49 4b 45  e-sensitive LIKE
f370: 2d 74 79 70 65 20 66 75 6e 63 74 69 6f 6e 20 2a  -type function *
f380: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
f390: 5f 46 55 4e 43 5f 45 50 48 45 4d 20 20 20 20 30  _FUNC_EPHEM    0
f3a0: 78 30 30 31 30 20 2f 2a 20 45 70 68 65 6d 65 72  x0010 /* Ephemer
f3b0: 61 6c 2e 20 20 44 65 6c 65 74 65 20 77 69 74 68  al.  Delete with
f3c0: 20 56 44 42 45 20 2a 2f 0a 23 64 65 66 69 6e 65   VDBE */.#define
f3d0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45   SQLITE_FUNC_NEE
f3e0: 44 43 4f 4c 4c 20 30 78 30 30 32 30 20 2f 2a 20  DCOLL 0x0020 /* 
f3f0: 73 71 6c 69 74 65 33 47 65 74 46 75 6e 63 43 6f  sqlite3GetFuncCo
f400: 6c 6c 53 65 71 28 29 20 6d 69 67 68 74 20 62 65  llSeq() might be
f410: 20 63 61 6c 6c 65 64 2a 2f 0a 23 64 65 66 69 6e   called*/.#defin
f420: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45  e SQLITE_FUNC_LE
f430: 4e 47 54 48 20 20 20 30 78 30 30 34 30 20 2f 2a  NGTH   0x0040 /*
f440: 20 42 75 69 6c 74 2d 69 6e 20 6c 65 6e 67 74 68   Built-in length
f450: 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  () function */.#
f460: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
f470: 4e 43 5f 54 59 50 45 4f 46 20 20 20 30 78 30 30  NC_TYPEOF   0x00
f480: 38 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 74  80 /* Built-in t
f490: 79 70 65 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e  ypeof() function
f4a0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
f4b0: 54 45 5f 46 55 4e 43 5f 43 4f 55 4e 54 20 20 20  TE_FUNC_COUNT   
f4c0: 20 30 78 30 31 30 30 20 2f 2a 20 42 75 69 6c 74   0x0100 /* Built
f4d0: 2d 69 6e 20 63 6f 75 6e 74 28 2a 29 20 61 67 67  -in count(*) agg
f4e0: 72 65 67 61 74 65 20 2a 2f 0a 23 64 65 66 69 6e  regate */.#defin
f4f0: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  e SQLITE_FUNC_CO
f500: 41 4c 45 53 43 45 20 30 78 30 32 30 30 20 2f 2a  ALESCE 0x0200 /*
f510: 20 42 75 69 6c 74 2d 69 6e 20 63 6f 61 6c 65 73   Built-in coales
f520: 63 65 28 29 20 6f 72 20 69 66 6e 75 6c 6c 28 29  ce() or ifnull()
f530: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
f540: 54 45 5f 46 55 4e 43 5f 55 4e 4c 49 4b 45 4c 59  TE_FUNC_UNLIKELY
f550: 20 30 78 30 34 30 30 20 2f 2a 20 42 75 69 6c 74   0x0400 /* Built
f560: 2d 69 6e 20 75 6e 6c 69 6b 65 6c 79 28 29 20 66  -in unlikely() f
f570: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  unction */.#defi
f580: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  ne SQLITE_FUNC_C
f590: 4f 4e 53 54 41 4e 54 20 30 78 30 38 30 30 20 2f  ONSTANT 0x0800 /
f5a0: 2a 20 43 6f 6e 73 74 61 6e 74 20 69 6e 70 75 74  * Constant input
f5b0: 73 20 67 69 76 65 20 61 20 63 6f 6e 73 74 61 6e  s give a constan
f5c0: 74 20 6f 75 74 70 75 74 20 2a 2f 0a 23 64 65 66  t output */.#def
f5d0: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
f5e0: 4d 49 4e 4d 41 58 20 20 20 30 78 31 30 30 30 20  MINMAX   0x1000 
f5f0: 2f 2a 20 54 72 75 65 20 66 6f 72 20 6d 69 6e 28  /* True for min(
f600: 29 20 61 6e 64 20 6d 61 78 28 29 20 61 67 67 72  ) and max() aggr
f610: 65 67 61 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e  egates */.#defin
f620: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c  e SQLITE_FUNC_SL
f630: 4f 43 48 4e 47 20 20 30 78 32 30 30 30 20 2f 2a  OCHNG  0x2000 /*
f640: 20 22 53 6c 6f 77 20 43 68 61 6e 67 65 22 2e 20   "Slow Change". 
f650: 56 61 6c 75 65 20 63 6f 6e 73 74 61 6e 74 20 64  Value constant d
f660: 75 72 69 6e 67 20 61 0a 20 20 20 20 20 20 20 20  uring a.        
f670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f680: 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 73              ** s
f690: 69 6e 67 6c 65 20 71 75 65 72 79 20 2d 20 6d 69  ingle query - mi
f6a0: 67 68 74 20 63 68 61 6e 67 65 20 6f 76 65 72 20  ght change over 
f6b0: 74 69 6d 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  time */.#define 
f6c0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 41 46 46 49  SQLITE_FUNC_AFFI
f6d0: 4e 49 54 59 20 30 78 34 30 30 30 20 2f 2a 20 42  NITY 0x4000 /* B
f6e0: 75 69 6c 74 2d 69 6e 20 61 66 66 69 6e 69 74 79  uilt-in affinity
f6f0: 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  () function */.#
f700: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
f710: 4e 43 5f 4f 46 46 53 45 54 20 20 20 30 78 38 30  NC_OFFSET   0x80
f720: 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 73  00 /* Built-in s
f730: 71 6c 69 74 65 5f 6f 66 66 73 65 74 28 29 20 66  qlite_offset() f
f740: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a  unction */../*.*
f750: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
f760: 74 68 72 65 65 20 6d 61 63 72 6f 73 2c 20 46 55  three macros, FU
f770: 4e 43 54 49 4f 4e 28 29 2c 20 4c 49 4b 45 46 55  NCTION(), LIKEFU
f780: 4e 43 28 29 20 61 6e 64 20 41 47 47 52 45 47 41  NC() and AGGREGA
f790: 54 45 28 29 20 61 72 65 0a 2a 2a 20 75 73 65 64  TE() are.** used
f7a0: 20 74 6f 20 63 72 65 61 74 65 20 74 68 65 20 69   to create the i
f7b0: 6e 69 74 69 61 6c 69 7a 65 72 73 20 66 6f 72 20  nitializers for 
f7c0: 74 68 65 20 46 75 6e 63 44 65 66 20 73 74 72 75  the FuncDef stru
f7d0: 63 74 75 72 65 73 2e 0a 2a 2a 0a 2a 2a 20 20 20  ctures..**.**   
f7e0: 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
f7f0: 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
f800: 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 55   xFunc).**     U
f810: 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20  sed to create a 
f820: 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20  scalar function 
f830: 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20  definition of a 
f840: 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 0a 2a  function zName.*
f850: 2a 20 20 20 20 20 69 6d 70 6c 65 6d 65 6e 74 65  *     implemente
f860: 64 20 62 79 20 43 20 66 75 6e 63 74 69 6f 6e 20  d by C function 
f870: 78 46 75 6e 63 20 74 68 61 74 20 61 63 63 65 70  xFunc that accep
f880: 74 73 20 6e 41 72 67 20 61 72 67 75 6d 65 6e 74  ts nArg argument
f890: 73 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20 76 61  s. The.**     va
f8a0: 6c 75 65 20 70 61 73 73 65 64 20 61 73 20 69 41  lue passed as iA
f8b0: 72 67 20 69 73 20 63 61 73 74 20 74 6f 20 61 20  rg is cast to a 
f8c0: 28 76 6f 69 64 2a 29 20 61 6e 64 20 6d 61 64 65  (void*) and made
f8d0: 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 20 20   available.**   
f8e0: 20 20 61 73 20 74 68 65 20 75 73 65 72 2d 64 61    as the user-da
f8f0: 74 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72  ta (sqlite3_user
f900: 5f 64 61 74 61 28 29 29 20 66 6f 72 20 74 68 65  _data()) for the
f910: 20 66 75 6e 63 74 69 6f 6e 2e 20 49 66 0a 2a 2a   function. If.**
f920: 20 20 20 20 20 61 72 67 75 6d 65 6e 74 20 62 4e       argument bN
f930: 43 20 69 73 20 74 72 75 65 2c 20 74 68 65 6e 20  C is true, then 
f940: 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  the SQLITE_FUNC_
f950: 4e 45 45 44 43 4f 4c 4c 20 66 6c 61 67 20 69 73  NEEDCOLL flag is
f960: 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 56 46   set..**.**   VF
f970: 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
f980: 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
f990: 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 4c 69  xFunc).**     Li
f9a0: 6b 65 20 46 55 4e 43 54 49 4f 4e 20 65 78 63 65  ke FUNCTION exce
f9b0: 70 74 20 69 74 20 6f 6d 69 74 73 20 74 68 65 20  pt it omits the 
f9c0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
f9d0: 54 41 4e 54 20 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a  TANT flag..**.**
f9e0: 20 20 20 44 46 55 4e 43 54 49 4f 4e 28 7a 4e 61     DFUNCTION(zNa
f9f0: 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
fa00: 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20  bNC, xFunc).**  
fa10: 20 20 20 4c 69 6b 65 20 46 55 4e 43 54 49 4f 4e     Like FUNCTION
fa20: 20 65 78 63 65 70 74 20 69 74 20 6f 6d 69 74 73   except it omits
fa30: 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43   the SQLITE_FUNC
fa40: 5f 43 4f 4e 53 54 41 4e 54 20 66 6c 61 67 20 61  _CONSTANT flag a
fa50: 6e 64 0a 2a 2a 20 20 20 20 20 61 64 64 73 20 74  nd.**     adds t
fa60: 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53  he SQLITE_FUNC_S
fa70: 4c 4f 43 48 4e 47 20 66 6c 61 67 2e 20 20 55 73  LOCHNG flag.  Us
fa80: 65 64 20 66 6f 72 20 64 61 74 65 20 26 20 74 69  ed for date & ti
fa90: 6d 65 20 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20  me functions.** 
faa0: 20 20 20 20 61 6e 64 20 66 75 6e 63 74 69 6f 6e      and function
fab0: 73 20 6c 69 6b 65 20 73 71 6c 69 74 65 5f 76 65  s like sqlite_ve
fac0: 72 73 69 6f 6e 28 29 20 74 68 61 74 20 63 61 6e  rsion() that can
fad0: 20 63 68 61 6e 67 65 2c 20 62 75 74 20 6e 6f 74   change, but not
fae0: 20 64 75 72 69 6e 67 0a 2a 2a 20 20 20 20 20 61   during.**     a
faf0: 20 73 69 6e 67 6c 65 20 71 75 65 72 79 2e 20 20   single query.  
fb00: 54 68 65 20 69 41 72 67 20 69 73 20 69 67 6e 6f  The iArg is igno
fb10: 72 65 64 2e 20 20 54 68 65 20 75 73 65 72 2d 64  red.  The user-d
fb20: 61 74 61 20 69 73 20 61 6c 77 61 79 73 20 73 65  ata is always se
fb30: 74 0a 2a 2a 20 20 20 20 20 74 6f 20 61 20 4e 55  t.**     to a NU
fb40: 4c 4c 20 70 6f 69 6e 74 65 72 2e 20 20 54 68 65  LL pointer.  The
fb50: 20 62 4e 43 20 70 61 72 61 6d 65 74 65 72 20 69   bNC parameter i
fb60: 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a  s not used..**.*
fb70: 2a 20 20 20 50 55 52 45 5f 44 41 54 45 28 7a 4e  *   PURE_DATE(zN
fb80: 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c  ame, nArg, iArg,
fb90: 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20   bNC, xFunc).** 
fba0: 20 20 20 20 55 73 65 64 20 66 6f 72 20 22 70 75      Used for "pu
fbb0: 72 65 22 20 64 61 74 65 2f 74 69 6d 65 20 66 75  re" date/time fu
fbc0: 6e 63 74 69 6f 6e 73 2c 20 74 68 69 73 20 6d 61  nctions, this ma
fbd0: 63 72 6f 20 69 73 20 6c 69 6b 65 20 44 46 55 4e  cro is like DFUN
fbe0: 43 54 49 4f 4e 0a 2a 2a 20 20 20 20 20 65 78 63  CTION.**     exc
fbf0: 65 70 74 20 74 68 61 74 20 69 74 20 64 6f 65 73  ept that it does
fc00: 20 73 65 74 20 74 68 65 20 53 51 4c 49 54 45 5f   set the SQLITE_
fc10: 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66 6c  FUNC_CONSTANT fl
fc20: 61 67 73 2e 20 20 69 41 72 67 20 69 73 0a 2a 2a  ags.  iArg is.**
fc30: 20 20 20 20 20 69 67 6e 6f 72 65 64 20 61 6e 64       ignored and
fc40: 20 74 68 65 20 75 73 65 72 2d 64 61 74 61 20 66   the user-data f
fc50: 6f 72 20 74 68 65 73 65 20 66 75 6e 63 74 69 6f  or these functio
fc60: 6e 73 20 69 73 20 73 65 74 20 74 6f 20 61 6e 20  ns is set to an 
fc70: 0a 2a 2a 20 20 20 20 20 61 72 62 69 74 72 61 72  .**     arbitrar
fc80: 79 20 6e 6f 6e 2d 4e 55 4c 4c 20 70 6f 69 6e 74  y non-NULL point
fc90: 65 72 2e 20 20 54 68 65 20 62 4e 43 20 70 61 72  er.  The bNC par
fca0: 61 6d 65 74 65 72 20 69 73 20 6e 6f 74 20 75 73  ameter is not us
fcb0: 65 64 2e 0a 2a 2a 0a 2a 2a 20 20 20 41 47 47 52  ed..**.**   AGGR
fcc0: 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72  EGATE(zName, nAr
fcd0: 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 53  g, iArg, bNC, xS
fce0: 74 65 70 2c 20 78 46 69 6e 61 6c 29 0a 2a 2a 20  tep, xFinal).** 
fcf0: 20 20 20 20 55 73 65 64 20 74 6f 20 63 72 65 61      Used to crea
fd00: 74 65 20 61 6e 20 61 67 67 72 65 67 61 74 65 20  te an aggregate 
fd10: 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74  function definit
fd20: 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20  ion implemented 
fd30: 62 79 0a 2a 2a 20 20 20 20 20 74 68 65 20 43 20  by.**     the C 
fd40: 66 75 6e 63 74 69 6f 6e 73 20 78 53 74 65 70 20  functions xStep 
fd50: 61 6e 64 20 78 46 69 6e 61 6c 2e 20 54 68 65 20  and xFinal. The 
fd60: 66 69 72 73 74 20 66 6f 75 72 20 70 61 72 61 6d  first four param
fd70: 65 74 65 72 73 0a 2a 2a 20 20 20 20 20 61 72 65  eters.**     are
fd80: 20 69 6e 74 65 72 70 72 65 74 65 64 20 69 6e 20   interpreted in 
fd90: 74 68 65 20 73 61 6d 65 20 77 61 79 20 61 73 20  the same way as 
fda0: 74 68 65 20 66 69 72 73 74 20 34 20 70 61 72 61  the first 4 para
fdb0: 6d 65 74 65 72 73 20 74 6f 0a 2a 2a 20 20 20 20  meters to.**    
fdc0: 20 46 55 4e 43 54 49 4f 4e 28 29 2e 0a 2a 2a 0a   FUNCTION()..**.
fdd0: 2a 2a 20 20 20 4c 49 4b 45 46 55 4e 43 28 7a 4e  **   LIKEFUNC(zN
fde0: 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c  ame, nArg, pArg,
fdf0: 20 66 6c 61 67 73 29 0a 2a 2a 20 20 20 20 20 55   flags).**     U
fe00: 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20  sed to create a 
fe10: 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20  scalar function 
fe20: 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20  definition of a 
fe30: 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 0a 2a  function zName.*
fe40: 2a 20 20 20 20 20 74 68 61 74 20 61 63 63 65 70  *     that accep
fe50: 74 73 20 6e 41 72 67 20 61 72 67 75 6d 65 6e 74  ts nArg argument
fe60: 73 20 61 6e 64 20 69 73 20 69 6d 70 6c 65 6d 65  s and is impleme
fe70: 6e 74 65 64 20 62 79 20 61 20 63 61 6c 6c 20 74  nted by a call t
fe80: 6f 20 43 0a 2a 2a 20 20 20 20 20 66 75 6e 63 74  o C.**     funct
fe90: 69 6f 6e 20 6c 69 6b 65 46 75 6e 63 2e 20 41 72  ion likeFunc. Ar
fea0: 67 75 6d 65 6e 74 20 70 41 72 67 20 69 73 20 63  gument pArg is c
feb0: 61 73 74 20 74 6f 20 61 20 28 76 6f 69 64 20 2a  ast to a (void *
fec0: 29 20 61 6e 64 20 6d 61 64 65 0a 2a 2a 20 20 20  ) and made.**   
fed0: 20 20 61 76 61 69 6c 61 62 6c 65 20 61 73 20 74    available as t
fee0: 68 65 20 66 75 6e 63 74 69 6f 6e 20 75 73 65 72  he function user
fef0: 2d 64 61 74 61 20 28 73 71 6c 69 74 65 33 5f 75  -data (sqlite3_u
ff00: 73 65 72 5f 64 61 74 61 28 29 29 2e 20 54 68 65  ser_data()). The
ff10: 0a 2a 2a 20 20 20 20 20 46 75 6e 63 44 65 66 2e  .**     FuncDef.
ff20: 66 6c 61 67 73 20 76 61 72 69 61 62 6c 65 20 69  flags variable i
ff30: 73 20 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c  s set to the val
ff40: 75 65 20 70 61 73 73 65 64 20 61 73 20 74 68 65  ue passed as the
ff50: 20 66 6c 61 67 73 0a 2a 2a 20 20 20 20 20 70 61   flags.**     pa
ff60: 72 61 6d 65 74 65 72 2e 0a 2a 2f 0a 23 64 65 66  rameter..*/.#def
ff70: 69 6e 65 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61  ine FUNCTION(zNa
ff80: 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
ff90: 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20  bNC, xFunc) \.  
ffa0: 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55  {nArg, SQLITE_FU
ffb0: 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49  NC_CONSTANT|SQLI
ffc0: 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c  TE_UTF8|(bNC*SQL
ffd0: 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
ffe0: 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f  L), \.   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 56 46 55 4e 43 54 49 4f 4e 28 7a  fine VFUNCTION(z
10030 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67  Name, nArg, iArg
10040 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a  , bNC, xFunc) \.
10050 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
10060 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45  UTF8|(bNC*SQLITE
10070 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c  _FUNC_NEEDCOLL),
10080 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54   \.   SQLITE_INT
10090 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30  _TO_PTR(iArg), 0
100a0 2c 20 78 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61  , xFunc, 0, #zNa
100b0 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e  me, {0} }.#defin
100c0 65 20 44 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d  e DFUNCTION(zNam
100d0 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
100e0 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b  NC, xFunc) \.  {
100f0 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e  nArg, SQLITE_FUN
10100 43 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c 49 54 45  C_SLOCHNG|SQLITE
10110 5f 55 54 46 38 2c 20 5c 0a 20 20 20 30 2c 20 30  _UTF8, \.   0, 0
10120 2c 20 78 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61  , xFunc, 0, #zNa
10130 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e  me, {0} }.#defin
10140 65 20 50 55 52 45 5f 44 41 54 45 28 7a 4e 61 6d  e PURE_DATE(zNam
10150 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
10160 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b  NC, xFunc) \.  {
10170 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e  nArg, SQLITE_FUN
10180 43 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c 49 54 45  C_SLOCHNG|SQLITE
10190 5f 55 54 46 38 7c 53 51 4c 49 54 45 5f 46 55 4e  _UTF8|SQLITE_FUN
101a0 43 5f 43 4f 4e 53 54 41 4e 54 2c 20 5c 0a 20 20  C_CONSTANT, \.  
101b0 20 28 76 6f 69 64 2a 29 26 73 71 6c 69 74 65 33   (void*)&sqlite3
101c0 43 6f 6e 66 69 67 2c 20 30 2c 20 78 46 75 6e 63  Config, 0, xFunc
101d0 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d  , 0, #zName, {0}
101e0 20 7d 0a 23 64 65 66 69 6e 65 20 46 55 4e 43 54   }.#define FUNCT
101f0 49 4f 4e 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  ION2(zName, nArg
10200 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
10210 6e 63 2c 20 65 78 74 72 61 46 6c 61 67 73 29 20  nc, extraFlags) 
10220 5c 0a 20 20 7b 6e 41 72 67 2c 53 51 4c 49 54 45  \.  {nArg,SQLITE
10230 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53  _FUNC_CONSTANT|S
10240 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a  QLITE_UTF8|(bNC*
10250 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
10260 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67 73  COLL)|extraFlags
10270 2c 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54  ,\.   SQLITE_INT
10280 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30  _TO_PTR(iArg), 0
10290 2c 20 78 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61  , xFunc, 0, #zNa
102a0 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e  me, {0} }.#defin
102b0 65 20 53 54 52 5f 46 55 4e 43 54 49 4f 4e 28 7a  e STR_FUNCTION(z
102c0 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41 72 67  Name, nArg, pArg
102d0 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a  , bNC, xFunc) \.
102e0 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
102f0 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c  FUNC_SLOCHNG|SQL
10300 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51  ITE_UTF8|(bNC*SQ
10310 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
10320 4c 4c 29 2c 20 5c 0a 20 20 20 70 41 72 67 2c 20  LL), \.   pArg, 
10330 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 23 7a 4e  0, xFunc, 0, #zN
10340 61 6d 65 2c 20 7d 0a 23 64 65 66 69 6e 65 20 4c  ame, }.#define L
10350 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e  IKEFUNC(zName, n
10360 41 72 67 2c 20 61 72 67 2c 20 66 6c 61 67 73 29  Arg, arg, flags)
10370 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
10380 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
10390 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 66 6c 61  |SQLITE_UTF8|fla
103a0 67 73 2c 20 5c 0a 20 20 20 28 76 6f 69 64 20 2a  gs, \.   (void *
103b0 29 61 72 67 2c 20 30 2c 20 6c 69 6b 65 46 75 6e  )arg, 0, likeFun
103c0 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30  c, 0, #zName, {0
103d0 7d 20 7d 0a 23 64 65 66 69 6e 65 20 41 47 47 52  } }.#define AGGR
103e0 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72  EGATE(zName, nAr
103f0 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53 74 65  g, arg, nc, xSte
10400 70 2c 20 78 46 69 6e 61 6c 29 20 5c 0a 20 20 7b  p, xFinal) \.  {
10410 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46  nArg, SQLITE_UTF
10420 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e  8|(nc*SQLITE_FUN
10430 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20  C_NEEDCOLL), \. 
10440 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f    SQLITE_INT_TO_
10450 50 54 52 28 61 72 67 29 2c 20 30 2c 20 78 53 74  PTR(arg), 0, xSt
10460 65 70 2c 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65  ep,xFinal,#zName
10470 2c 20 7b 30 7d 7d 0a 23 64 65 66 69 6e 65 20 41  , {0}}.#define A
10480 47 47 52 45 47 41 54 45 32 28 7a 4e 61 6d 65 2c  GGREGATE2(zName,
10490 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20   nArg, arg, nc, 
104a0 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 2c 20 65  xStep, xFinal, e
104b0 78 74 72 61 46 6c 61 67 73 29 20 5c 0a 20 20 7b  xtraFlags) \.  {
104c0 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46  nArg, SQLITE_UTF
104d0 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e  8|(nc*SQLITE_FUN
104e0 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78 74 72  C_NEEDCOLL)|extr
104f0 61 46 6c 61 67 73 2c 20 5c 0a 20 20 20 53 51 4c  aFlags, \.   SQL
10500 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61  ITE_INT_TO_PTR(a
10510 72 67 29 2c 20 30 2c 20 78 53 74 65 70 2c 78 46  rg), 0, xStep,xF
10520 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c 20 7b 30 7d  inal,#zName, {0}
10530 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 20 63 75 72  }../*.** All cur
10540 72 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 73 20  rent savepoints 
10550 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20  are stored in a 
10560 6c 69 6e 6b 65 64 20 6c 69 73 74 20 73 74 61 72  linked list star
10570 74 69 6e 67 20 61 74 0a 2a 2a 20 73 71 6c 69 74  ting at.** sqlit
10580 65 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e 20 54  e3.pSavepoint. T
10590 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74  he first element
105a0 20 69 6e 20 74 68 65 20 6c 69 73 74 20 69 73 20   in the list is 
105b0 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 6c  the most recentl
105c0 79 0a 2a 2a 20 6f 70 65 6e 65 64 20 73 61 76 65  y.** opened save
105d0 70 6f 69 6e 74 2e 20 53 61 76 65 70 6f 69 6e 74  point. Savepoint
105e0 73 20 61 72 65 20 61 64 64 65 64 20 74 6f 20 74  s are added to t
105f0 68 65 20 6c 69 73 74 20 62 79 20 74 68 65 20 76  he list by the v
10600 64 62 65 0a 2a 2a 20 4f 50 5f 53 61 76 65 70 6f  dbe.** OP_Savepo
10610 69 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  int instruction.
10620 0a 2a 2f 0a 73 74 72 75 63 74 20 53 61 76 65 70  .*/.struct Savep
10630 6f 69 6e 74 20 7b 0a 20 20 63 68 61 72 20 2a 7a  oint {.  char *z
10640 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20  Name;           
10650 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
10660 53 61 76 65 70 6f 69 6e 74 20 6e 61 6d 65 20 28  Savepoint name (
10670 6e 75 6c 2d 74 65 72 6d 69 6e 61 74 65 64 29 20  nul-terminated) 
10680 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72  */.  i64 nDeferr
10690 65 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20  edCons;         
106a0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
106b0 65 72 20 6f 66 20 64 65 66 65 72 72 65 64 20 66  er of deferred f
106c0 6b 20 76 69 6f 6c 61 74 69 6f 6e 73 20 2a 2f 0a  k violations */.
106d0 20 20 69 36 34 20 6e 44 65 66 65 72 72 65 64 49    i64 nDeferredI
106e0 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20  mmCons;         
106f0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
10700 6f 66 20 64 65 66 65 72 72 65 64 20 69 6d 6d 20  of deferred imm 
10710 66 6b 2e 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69  fk. */.  Savepoi
10720 6e 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  nt *pNext;      
10730 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
10740 50 61 72 65 6e 74 20 73 61 76 65 70 6f 69 6e 74  Parent savepoint
10750 20 28 69 66 20 61 6e 79 29 20 2a 2f 0a 7d 3b 0a   (if any) */.};.
10760 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
10770 77 69 6e 67 20 61 72 65 20 75 73 65 64 20 61 73  wing are used as
10780 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61 72 61   the second para
10790 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74 65 33  meter to sqlite3
107a0 53 61 76 65 70 6f 69 6e 74 28 29 2c 0a 2a 2a 20  Savepoint(),.** 
107b0 61 6e 64 20 61 73 20 74 68 65 20 50 31 20 61 72  and as the P1 ar
107c0 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 4f 50  gument to the OP
107d0 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74 72  _Savepoint instr
107e0 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69  uction..*/.#defi
107f0 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 42 45 47  ne SAVEPOINT_BEG
10800 49 4e 20 20 20 20 20 20 30 0a 23 64 65 66 69 6e  IN      0.#defin
10810 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45  e SAVEPOINT_RELE
10820 41 53 45 20 20 20 20 31 0a 23 64 65 66 69 6e 65  ASE    1.#define
10830 20 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42   SAVEPOINT_ROLLB
10840 41 43 4b 20 20 20 32 0a 0a 0a 2f 2a 0a 2a 2a 20  ACK   2.../*.** 
10850 45 61 63 68 20 53 51 4c 69 74 65 20 6d 6f 64 75  Each SQLite modu
10860 6c 65 20 28 76 69 72 74 75 61 6c 20 74 61 62 6c  le (virtual tabl
10870 65 20 64 65 66 69 6e 69 74 69 6f 6e 29 20 69 73  e definition) is
10880 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e 0a 2a   defined by an.*
10890 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  * instance of th
108a0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
108b0 63 74 75 72 65 2c 20 73 74 6f 72 65 64 20 69 6e  cture, stored in
108c0 20 74 68 65 20 73 71 6c 69 74 65 33 2e 61 4d 6f   the sqlite3.aMo
108d0 64 75 6c 65 0a 2a 2a 20 68 61 73 68 20 74 61 62  dule.** hash tab
108e0 6c 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4d 6f  le..*/.struct Mo
108f0 64 75 6c 65 20 7b 0a 20 20 63 6f 6e 73 74 20 73  dule {.  const s
10900 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70  qlite3_module *p
10910 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20 20 2f 2a  Module;       /*
10920 20 43 61 6c 6c 62 61 63 6b 20 70 6f 69 6e 74 65   Callback pointe
10930 72 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  rs */.  const ch
10940 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
10950 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
10960 4e 61 6d 65 20 70 61 73 73 65 64 20 74 6f 20 63  Name passed to c
10970 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a  reate_module() *
10980 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75 78 3b 20  /.  void *pAux; 
10990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
109a0 20 20 20 20 20 20 20 20 20 2f 2a 20 70 41 75 78           /* pAux
109b0 20 70 61 73 73 65 64 20 74 6f 20 63 72 65 61 74   passed to creat
109c0 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20  e_module() */.  
109d0 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79 29  void (*xDestroy)
109e0 28 76 6f 69 64 20 2a 29 3b 20 20 20 20 20 20 20  (void *);       
109f0 20 20 20 20 20 2f 2a 20 4d 6f 64 75 6c 65 20 64       /* Module d
10a00 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74 69  estructor functi
10a10 6f 6e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  on */.  Table *p
10a20 45 70 6f 54 61 62 3b 20 20 20 20 20 20 20 20 20  EpoTab;         
10a30 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
10a40 45 70 6f 6e 79 6d 6f 75 73 20 74 61 62 6c 65 20  Eponymous table 
10a50 66 6f 72 20 74 68 69 73 20 6d 6f 64 75 6c 65 20  for this module 
10a60 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 69 6e 66  */.};../*.** inf
10a70 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65  ormation about e
10a80 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e  ach column of an
10a90 20 53 51 4c 20 74 61 62 6c 65 20 69 73 20 68 65   SQL table is he
10aa0 6c 64 20 69 6e 20 61 6e 20 69 6e 73 74 61 6e 63  ld in an instanc
10ab0 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72  e.** of this str
10ac0 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63  ucture..*/.struc
10ad0 74 20 43 6f 6c 75 6d 6e 20 7b 0a 20 20 63 68 61  t Column {.  cha
10ae0 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 2f 2a  r *zName;     /*
10af0 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 63 6f   Name of this co
10b00 6c 75 6d 6e 2c 20 5c 30 30 30 2c 20 74 68 65 6e  lumn, \000, then
10b10 20 74 68 65 20 74 79 70 65 20 2a 2f 0a 20 20 45   the type */.  E
10b20 78 70 72 20 2a 70 44 66 6c 74 3b 20 20 20 20 20  xpr *pDflt;     
10b30 2f 2a 20 44 65 66 61 75 6c 74 20 76 61 6c 75 65  /* Default value
10b40 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20   of this column 
10b50 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 6c  */.  char *zColl
10b60 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69  ;     /* Collati
10b70 6e 67 20 73 65 71 75 65 6e 63 65 2e 20 20 49 66  ng sequence.  If
10b80 20 4e 55 4c 4c 2c 20 75 73 65 20 74 68 65 20 64   NULL, use the d
10b90 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6e  efault */.  u8 n
10ba0 6f 74 4e 75 6c 6c 3b 20 20 20 20 20 20 2f 2a 20  otNull;      /* 
10bb0 41 6e 20 4f 45 5f 20 63 6f 64 65 20 66 6f 72 20  An OE_ code for 
10bc0 68 61 6e 64 6c 69 6e 67 20 61 20 4e 4f 54 20 4e  handling a NOT N
10bd0 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a  ULL constraint *
10be0 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69 74  /.  char affinit
10bf0 79 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74  y;   /* One of t
10c00 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 2e 2e  he SQLITE_AFF_..
10c10 2e 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 38  . values */.  u8
10c20 20 73 7a 45 73 74 3b 20 20 20 20 20 20 20 20 2f   szEst;        /
10c30 2a 20 45 73 74 69 6d 61 74 65 64 20 73 69 7a 65  * Estimated size
10c40 20 6f 66 20 76 61 6c 75 65 20 69 6e 20 74 68 69   of value in thi
10c50 73 20 63 6f 6c 75 6d 6e 2e 20 73 69 7a 65 6f 66  s column. sizeof
10c60 28 49 4e 54 29 3d 3d 31 20 2a 2f 0a 20 20 75 38  (INT)==1 */.  u8
10c70 20 63 6f 6c 46 6c 61 67 73 3b 20 20 20 20 20 2f   colFlags;     /
10c80 2a 20 42 6f 6f 6c 65 61 6e 20 70 72 6f 70 65 72  * Boolean proper
10c90 74 69 65 73 2e 20 20 53 65 65 20 43 4f 4c 46 4c  ties.  See COLFL
10ca0 41 47 5f 20 64 65 66 69 6e 65 73 20 62 65 6c 6f  AG_ defines belo
10cb0 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f  w */.};../* Allo
10cc0 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 43  wed values for C
10cd0 6f 6c 75 6d 6e 2e 63 6f 6c 46 6c 61 67 73 3a 0a  olumn.colFlags:.
10ce0 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c  */.#define COLFL
10cf0 41 47 5f 50 52 49 4d 4b 45 59 20 20 30 78 30 30  AG_PRIMKEY  0x00
10d00 30 31 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20  01    /* Column 
10d10 69 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 70  is part of the p
10d20 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64  rimary key */.#d
10d30 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 48 49  efine COLFLAG_HI
10d40 44 44 45 4e 20 20 20 30 78 30 30 30 32 20 20 20  DDEN   0x0002   
10d50 20 2f 2a 20 41 20 68 69 64 64 65 6e 20 63 6f 6c   /* A hidden col
10d60 75 6d 6e 20 69 6e 20 61 20 76 69 72 74 75 61 6c  umn in a virtual
10d70 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e   table */.#defin
10d80 65 20 43 4f 4c 46 4c 41 47 5f 48 41 53 54 59 50  e COLFLAG_HASTYP
10d90 45 20 20 30 78 30 30 30 34 20 20 20 20 2f 2a 20  E  0x0004    /* 
10da0 54 79 70 65 20 6e 61 6d 65 20 66 6f 6c 6c 6f 77  Type name follow
10db0 73 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 2a 2f  s column name */
10dc0 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47  .#define COLFLAG
10dd0 5f 55 4e 49 51 55 45 20 20 20 30 78 30 30 30 38  _UNIQUE   0x0008
10de0 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 64 65      /* Column de
10df0 66 20 63 6f 6e 74 61 69 6e 73 20 22 55 4e 49 51  f contains "UNIQ
10e00 55 45 22 20 6f 72 20 22 50 4b 22 20 2a 2f 0a 0a  UE" or "PK" */..
10e10 2f 2a 0a 2a 2a 20 41 20 22 43 6f 6c 6c 61 74 69  /*.** A "Collati
10e20 6e 67 20 53 65 71 75 65 6e 63 65 22 20 69 73 20  ng Sequence" is 
10e30 64 65 66 69 6e 65 64 20 62 79 20 61 6e 20 69 6e  defined by an in
10e40 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
10e50 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63  llowing.** struc
10e60 74 75 72 65 2e 20 43 6f 6e 63 65 70 74 75 61 6c  ture. Conceptual
10e70 6c 79 2c 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20  ly, a collating 
10e80 73 65 71 75 65 6e 63 65 20 63 6f 6e 73 69 73 74  sequence consist
10e90 73 20 6f 66 20 61 20 6e 61 6d 65 20 61 6e 64 0a  s of a name and.
10ea0 2a 2a 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 20  ** a comparison 
10eb0 72 6f 75 74 69 6e 65 20 74 68 61 74 20 64 65 66  routine that def
10ec0 69 6e 65 73 20 74 68 65 20 6f 72 64 65 72 20 6f  ines the order o
10ed0 66 20 74 68 61 74 20 73 65 71 75 65 6e 63 65 2e  f that sequence.
10ee0 0a 2a 2a 0a 2a 2a 20 49 66 20 43 6f 6c 6c 53 65  .**.** If CollSe
10ef0 71 2e 78 43 6d 70 20 69 73 20 4e 55 4c 4c 2c 20  q.xCmp is NULL, 
10f00 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  it means that th
10f10 65 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73  e.** collating s
10f20 65 71 75 65 6e 63 65 20 69 73 20 75 6e 64 65 66  equence is undef
10f30 69 6e 65 64 2e 20 20 49 6e 64 69 63 65 73 20 62  ined.  Indices b
10f40 75 69 6c 74 20 6f 6e 20 61 6e 20 75 6e 64 65 66  uilt on an undef
10f50 69 6e 65 64 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e  ined.** collatin
10f60 67 20 73 65 71 75 65 6e 63 65 20 6d 61 79 20 6e  g sequence may n
10f70 6f 74 20 62 65 20 72 65 61 64 20 6f 72 20 77 72  ot be read or wr
10f80 69 74 74 65 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  itten..*/.struct
10f90 20 43 6f 6c 6c 53 65 71 20 7b 0a 20 20 63 68 61   CollSeq {.  cha
10fa0 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
10fb0 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
10fc0 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  e collating sequ
10fd0 65 6e 63 65 2c 20 55 54 46 2d 38 20 65 6e 63 6f  ence, UTF-8 enco
10fe0 64 65 64 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b  ded */.  u8 enc;
10ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
11000 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20  * Text encoding 
11010 68 61 6e 64 6c 65 64 20 62 79 20 78 43 6d 70 28  handled by xCmp(
11020 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73  ) */.  void *pUs
11030 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  er;          /* 
11040 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74  First argument t
11050 6f 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20 69 6e  o xCmp() */.  in
11060 74 20 28 2a 78 43 6d 70 29 28 76 6f 69 64 2a 2c  t (*xCmp)(void*,
11070 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a  int, const void*
11080 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69  , int, const voi
11090 64 2a 29 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44  d*);.  void (*xD
110a0 65 6c 29 28 76 6f 69 64 2a 29 3b 20 20 2f 2a 20  el)(void*);  /* 
110b0 44 65 73 74 72 75 63 74 6f 72 20 66 6f 72 20 70  Destructor for p
110c0 55 73 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  User */.};../*.*
110d0 2a 20 41 20 73 6f 72 74 20 6f 72 64 65 72 20 63  * A sort order c
110e0 61 6e 20 62 65 20 65 69 74 68 65 72 20 41 53 43  an be either ASC
110f0 20 6f 72 20 44 45 53 43 2e 0a 2a 2f 0a 23 64 65   or DESC..*/.#de
11100 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 41  fine SQLITE_SO_A
11110 53 43 20 20 20 20 20 20 20 30 20 20 2f 2a 20 53  SC       0  /* S
11120 6f 72 74 20 69 6e 20 61 73 63 65 6e 64 69 6e 67  ort in ascending
11130 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66 69 6e   order */.#defin
11140 65 20 53 51 4c 49 54 45 5f 53 4f 5f 44 45 53 43  e SQLITE_SO_DESC
11150 20 20 20 20 20 20 31 20 20 2f 2a 20 53 6f 72 74        1  /* Sort
11160 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72   in ascending or
11170 64 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  der */.#define S
11180 51 4c 49 54 45 5f 53 4f 5f 55 4e 44 45 46 49 4e  QLITE_SO_UNDEFIN
11190 45 44 20 2d 31 20 2f 2a 20 4e 6f 20 73 6f 72 74  ED -1 /* No sort
111a0 20 6f 72 64 65 72 20 73 70 65 63 69 66 69 65 64   order specified
111b0 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d   */../*.** Colum
111c0 6e 20 61 66 66 69 6e 69 74 79 20 74 79 70 65 73  n affinity types
111d0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 73 65 20 75 73  ..**.** These us
111e0 65 64 20 74 6f 20 68 61 76 65 20 6d 6e 65 6d 6f  ed to have mnemo
111f0 6e 69 63 20 6e 61 6d 65 20 6c 69 6b 65 20 27 69  nic name like 'i
11200 27 20 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46  ' for SQLITE_AFF
11210 5f 49 4e 54 45 47 45 52 20 61 6e 64 0a 2a 2a 20  _INTEGER and.** 
11220 27 74 27 20 66 6f 72 20 53 51 4c 49 54 45 5f 41  't' for SQLITE_A
11230 46 46 5f 54 45 58 54 2e 20 20 42 75 74 20 77 65  FF_TEXT.  But we
11240 20 63 61 6e 20 73 61 76 65 20 61 20 6c 69 74 74   can save a litt
11250 6c 65 20 73 70 61 63 65 20 61 6e 64 20 69 6d 70  le space and imp
11260 72 6f 76 65 0a 2a 2a 20 74 68 65 20 73 70 65 65  rove.** the spee
11270 64 20 61 20 6c 69 74 74 6c 65 20 62 79 20 6e 75  d a little by nu
11280 6d 62 65 72 69 6e 67 20 74 68 65 20 76 61 6c 75  mbering the valu
11290 65 73 20 63 6f 6e 73 65 63 75 74 69 76 65 6c 79  es consecutively
112a0 2e 0a 2a 2a 0a 2a 2a 20 42 75 74 20 72 61 74 68  ..**.** But rath
112b0 65 72 20 74 68 61 6e 20 73 74 61 72 74 20 77 69  er than start wi
112c0 74 68 20 30 20 6f 72 20 31 2c 20 77 65 20 62 65  th 0 or 1, we be
112d0 67 69 6e 20 77 69 74 68 20 27 41 27 2e 20 20 54  gin with 'A'.  T
112e0 68 61 74 20 77 61 79 2c 0a 2a 2a 20 77 68 65 6e  hat way,.** when
112f0 20 6d 75 6c 74 69 70 6c 65 20 61 66 66 69 6e 69   multiple affini
11300 74 79 20 74 79 70 65 73 20 61 72 65 20 63 6f 6e  ty types are con
11310 63 61 74 65 6e 61 74 65 64 20 69 6e 74 6f 20 61  catenated into a
11320 20 73 74 72 69 6e 67 20 61 6e 64 0a 2a 2a 20 75   string and.** u
11330 73 65 64 20 61 73 20 74 68 65 20 50 34 20 6f 70  sed as the P4 op
11340 65 72 61 6e 64 2c 20 74 68 65 79 20 77 69 6c 6c  erand, they will
11350 20 62 65 20 6d 6f 72 65 20 72 65 61 64 61 62 6c   be more readabl
11360 65 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 61 6c  e..**.** Note al
11370 73 6f 20 74 68 61 74 20 74 68 65 20 6e 75 6d 65  so that the nume
11380 72 69 63 20 74 79 70 65 73 20 61 72 65 20 67 72  ric types are gr
11390 6f 75 70 65 64 20 74 6f 67 65 74 68 65 72 20 73  ouped together s
113a0 6f 20 74 68 61 74 20 74 65 73 74 69 6e 67 0a 2a  o that testing.*
113b0 2a 20 66 6f 72 20 61 20 6e 75 6d 65 72 69 63 20  * for a numeric 
113c0 74 79 70 65 20 69 73 20 61 20 73 69 6e 67 6c 65  type is a single
113d0 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 41 6e   comparison.  An
113e0 64 20 74 68 65 20 42 4c 4f 42 20 74 79 70 65 20  d the BLOB type 
113f0 69 73 20 66 69 72 73 74 2e 0a 2a 2f 0a 23 64 65  is first..*/.#de
11400 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
11410 42 4c 4f 42 20 20 20 20 20 27 41 27 0a 23 64 65  BLOB     'A'.#de
11420 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
11430 54 45 58 54 20 20 20 20 20 27 42 27 0a 23 64 65  TEXT     'B'.#de
11440 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
11450 4e 55 4d 45 52 49 43 20 20 27 43 27 0a 23 64 65  NUMERIC  'C'.#de
11460 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
11470 49 4e 54 45 47 45 52 20 20 27 44 27 0a 23 64 65  INTEGER  'D'.#de
11480 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
11490 52 45 41 4c 20 20 20 20 20 27 45 27 0a 0a 23 64  REAL     'E'..#d
114a0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 4e  efine sqlite3IsN
114b0 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 58  umericAffinity(X
114c0 29 20 20 28 28 58 29 3e 3d 53 51 4c 49 54 45 5f  )  ((X)>=SQLITE_
114d0 41 46 46 5f 4e 55 4d 45 52 49 43 29 0a 0a 2f 2a  AFF_NUMERIC)../*
114e0 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41  .** The SQLITE_A
114f0 46 46 5f 4d 41 53 4b 20 76 61 6c 75 65 73 20 6d  FF_MASK values m
11500 61 73 6b 73 20 6f 66 66 20 74 68 65 20 73 69 67  asks off the sig
11510 6e 69 66 69 63 61 6e 74 20 62 69 74 73 20 6f 66  nificant bits of
11520 20 61 6e 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20   an.** affinity 
11530 76 61 6c 75 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e  value..*/.#defin
11540 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53  e SQLITE_AFF_MAS
11550 4b 20 20 20 20 20 30 78 34 37 0a 0a 2f 2a 0a 2a  K     0x47../*.*
11560 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20 62 69 74  * Additional bit
11570 20 76 61 6c 75 65 73 20 74 68 61 74 20 63 61 6e   values that can
11580 20 62 65 20 4f 52 65 64 20 77 69 74 68 20 61 6e   be ORed with an
11590 20 61 66 66 69 6e 69 74 79 20 77 69 74 68 6f 75   affinity withou
115a0 74 0a 2a 2a 20 63 68 61 6e 67 69 6e 67 20 74 68  t.** changing th
115b0 65 20 61 66 66 69 6e 69 74 79 2e 0a 2a 2a 0a 2a  e affinity..**.*
115c0 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 4e 4f 54  * The SQLITE_NOT
115d0 4e 55 4c 4c 20 66 6c 61 67 20 69 73 20 61 20 63  NULL flag is a c
115e0 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 4e 55  ombination of NU
115f0 4c 4c 45 51 20 61 6e 64 20 4a 55 4d 50 49 46 4e  LLEQ and JUMPIFN
11600 55 4c 4c 2e 0a 2a 2a 20 49 74 20 63 61 75 73 65  ULL..** It cause
11610 73 20 61 6e 20 61 73 73 65 72 74 28 29 20 74 6f  s an assert() to
11620 20 66 69 72 65 20 69 66 20 65 69 74 68 65 72 20   fire if either 
11630 6f 70 65 72 61 6e 64 20 74 6f 20 61 20 63 6f 6d  operand to a com
11640 70 61 72 69 73 6f 6e 0a 2a 2a 20 6f 70 65 72 61  parison.** opera
11650 74 6f 72 20 69 73 20 4e 55 4c 4c 2e 20 20 49 74  tor is NULL.  It
11660 20 69 73 20 61 64 64 65 64 20 74 6f 20 63 65 72   is added to cer
11670 74 61 69 6e 20 63 6f 6d 70 61 72 69 73 6f 6e 20  tain comparison 
11680 6f 70 65 72 61 74 6f 72 73 20 74 6f 0a 2a 2a 20  operators to.** 
11690 70 72 6f 76 65 20 74 68 61 74 20 74 68 65 20 6f  prove that the o
116a0 70 65 72 61 6e 64 73 20 61 72 65 20 61 6c 77 61  perands are alwa
116b0 79 73 20 4e 4f 54 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ys NOT NULL..*/.
116c0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4b  #define SQLITE_K
116d0 45 45 50 4e 55 4c 4c 20 20 20 20 20 30 78 30 38  EEPNULL     0x08
116e0 20 20 2f 2a 20 55 73 65 64 20 62 79 20 76 65 63    /* Used by vec
116f0 74 6f 72 20 3d 3d 20 6f 72 20 3c 3e 20 2a 2f 0a  tor == or <> */.
11700 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4a  #define SQLITE_J
11710 55 4d 50 49 46 4e 55 4c 4c 20 20 20 30 78 31 30  UMPIFNULL   0x10
11720 20 20 2f 2a 20 6a 75 6d 70 73 20 69 66 20 65 69    /* jumps if ei
11730 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20  ther operand is 
11740 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20  NULL */.#define 
11750 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 20  SQLITE_STOREP2  
11760 20 20 20 20 30 78 32 30 20 20 2f 2a 20 53 74 6f      0x20  /* Sto
11770 72 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  re result in reg
11780 5b 50 32 5d 20 72 61 74 68 65 72 20 74 68 61 6e  [P2] rather than
11790 20 6a 75 6d 70 20 2a 2f 0a 23 64 65 66 69 6e 65   jump */.#define
117a0 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 20   SQLITE_NULLEQ  
117b0 20 20 20 20 20 30 78 38 30 20 20 2f 2a 20 4e 55       0x80  /* NU
117c0 4c 4c 3d 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69  LL=NULL */.#defi
117d0 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c  ne SQLITE_NOTNUL
117e0 4c 20 20 20 20 20 20 30 78 39 30 20 20 2f 2a 20  L      0x90  /* 
117f0 41 73 73 65 72 74 20 74 68 61 74 20 6f 70 65 72  Assert that oper
11800 61 6e 64 73 20 61 72 65 20 6e 65 76 65 72 20 4e  ands are never N
11810 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e  ULL */../*.** An
11820 20 6f 62 6a 65 63 74 20 6f 66 20 74 68 69 73 20   object of this 
11830 74 79 70 65 20 69 73 20 63 72 65 61 74 65 64 20  type is created 
11840 66 6f 72 20 65 61 63 68 20 76 69 72 74 75 61 6c  for each virtual
11850 20 74 61 62 6c 65 20 70 72 65 73 65 6e 74 20 69   table present i
11860 6e 0a 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73  n.** the databas
11870 65 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20  e schema..**.** 
11880 49 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  If the database 
11890 73 63 68 65 6d 61 20 69 73 20 73 68 61 72 65 64  schema is shared
118a0 2c 20 74 68 65 6e 20 74 68 65 72 65 20 69 73 20  , then there is 
118b0 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  one instance of 
118c0 74 68 69 73 0a 2a 2a 20 73 74 72 75 63 74 75 72  this.** structur
118d0 65 20 66 6f 72 20 65 61 63 68 20 64 61 74 61 62  e for each datab
118e0 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 28  ase connection (
118f0 73 71 6c 69 74 65 33 2a 29 20 74 68 61 74 20 75  sqlite3*) that u
11900 73 65 73 20 74 68 65 20 73 68 61 72 65 64 0a 2a  ses the shared.*
11910 2a 20 73 63 68 65 6d 61 2e 20 54 68 69 73 20 69  * schema. This i
11920 73 20 62 65 63 61 75 73 65 20 65 61 63 68 20 64  s because each d
11930 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
11940 6f 6e 20 72 65 71 75 69 72 65 73 20 69 74 73 20  on requires its 
11950 6f 77 6e 20 75 6e 69 71 75 65 0a 2a 2a 20 69 6e  own unique.** in
11960 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 73 71  stance of the sq
11970 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64  lite3_vtab* hand
11980 6c 65 20 75 73 65 64 20 74 6f 20 61 63 63 65 73  le used to acces
11990 73 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  s the virtual ta
119a0 62 6c 65 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74  ble.** implement
119b0 61 74 69 6f 6e 2e 20 73 71 6c 69 74 65 33 5f 76  ation. sqlite3_v
119c0 74 61 62 2a 20 68 61 6e 64 6c 65 73 20 63 61 6e  tab* handles can
119d0 20 6e 6f 74 20 62 65 20 73 68 61 72 65 64 20 62   not be shared b
119e0 65 74 77 65 65 6e 0a 2a 2a 20 64 61 74 61 62 61  etween.** databa
119f0 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2c 20  se connections, 
11a00 65 76 65 6e 20 77 68 65 6e 20 74 68 65 20 72 65  even when the re
11a10 73 74 20 6f 66 20 74 68 65 20 69 6e 2d 6d 65 6d  st of the in-mem
11a20 6f 72 79 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  ory database.** 
11a30 73 63 68 65 6d 61 20 69 73 20 73 68 61 72 65 64  schema is shared
11a40 2c 20 61 73 20 74 68 65 20 69 6d 70 6c 65 6d 65  , as the impleme
11a50 6e 74 61 74 69 6f 6e 20 6f 66 74 65 6e 20 73 74  ntation often st
11a60 6f 72 65 73 20 74 68 65 20 64 61 74 61 62 61 73  ores the databas
11a70 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  e.** connection 
11a80 68 61 6e 64 6c 65 20 70 61 73 73 65 64 20 74 6f  handle passed to
11a90 20 69 74 20 76 69 61 20 74 68 65 20 78 43 6f 6e   it via the xCon
11aa0 6e 65 63 74 28 29 20 6f 72 20 78 43 72 65 61 74  nect() or xCreat
11ab0 65 28 29 20 6d 65 74 68 6f 64 0a 2a 2a 20 64 75  e() method.** du
11ac0 72 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74  ring initializat
11ad0 69 6f 6e 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 20  ion internally. 
11ae0 54 68 69 73 20 64 61 74 61 62 61 73 65 20 63 6f  This database co
11af0 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20  nnection handle 
11b00 6d 61 79 0a 2a 2a 20 74 68 65 6e 20 62 65 20 75  may.** then be u
11b10 73 65 64 20 62 79 20 74 68 65 20 76 69 72 74 75  sed by the virtu
11b20 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65  al table impleme
11b30 6e 74 61 74 69 6f 6e 20 74 6f 20 61 63 63 65 73  ntation to acces
11b40 73 20 72 65 61 6c 20 74 61 62 6c 65 73 0a 2a 2a  s real tables.**
11b50 20 77 69 74 68 69 6e 20 74 68 65 20 64 61 74 61   within the data
11b60 62 61 73 65 2e 20 53 6f 20 74 68 61 74 20 74 68  base. So that th
11b70 65 79 20 61 70 70 65 61 72 20 61 73 20 70 61 72  ey appear as par
11b80 74 20 6f 66 20 74 68 65 20 63 61 6c 6c 65 72 73  t of the callers
11b90 0a 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c  .** transaction,
11ba0 20 74 68 65 73 65 20 61 63 63 65 73 73 65 73 20   these accesses 
11bb0 6e 65 65 64 20 74 6f 20 62 65 20 6d 61 64 65 20  need to be made 
11bc0 76 69 61 20 74 68 65 20 73 61 6d 65 20 64 61 74  via the same dat
11bd0 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74  abase.** connect
11be0 69 6f 6e 20 61 73 20 74 68 61 74 20 75 73 65 64  ion as that used
11bf0 20 74 6f 20 65 78 65 63 75 74 65 20 53 51 4c 20   to execute SQL 
11c00 6f 70 65 72 61 74 69 6f 6e 73 20 6f 6e 20 74 68  operations on th
11c10 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  e virtual table.
11c20 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 56 54 61 62 6c  .**.** All VTabl
11c30 65 20 6f 62 6a 65 63 74 73 20 74 68 61 74 20 63  e objects that c
11c40 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 61 20 73  orrespond to a s
11c50 69 6e 67 6c 65 20 74 61 62 6c 65 20 69 6e 20 61  ingle table in a
11c60 20 73 68 61 72 65 64 0a 2a 2a 20 64 61 74 61 62   shared.** datab
11c70 61 73 65 20 73 63 68 65 6d 61 20 61 72 65 20 69  ase schema are i
11c80 6e 69 74 69 61 6c 6c 79 20 73 74 6f 72 65 64 20  nitially stored 
11c90 69 6e 20 61 20 6c 69 6e 6b 65 64 2d 6c 69 73 74  in a linked-list
11ca0 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 0a 2a   pointed to by.*
11cb0 2a 20 74 68 65 20 54 61 62 6c 65 2e 70 56 54 61  * the Table.pVTa
11cc0 62 6c 65 20 6d 65 6d 62 65 72 20 76 61 72 69 61  ble member varia
11cd0 62 6c 65 20 6f 66 20 74 68 65 20 63 6f 72 72 65  ble of the corre
11ce0 73 70 6f 6e 64 69 6e 67 20 54 61 62 6c 65 20 6f  sponding Table o
11cf0 62 6a 65 63 74 2e 0a 2a 2a 20 57 68 65 6e 20 61  bject..** When a
11d00 6e 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  n sqlite3_prepar
11d10 65 28 29 20 6f 70 65 72 61 74 69 6f 6e 20 69 73  e() operation is
11d20 20 72 65 71 75 69 72 65 64 20 74 6f 20 61 63 63   required to acc
11d30 65 73 73 20 74 68 65 20 76 69 72 74 75 61 6c 0a  ess the virtual.
11d40 2a 2a 20 74 61 62 6c 65 2c 20 69 74 20 73 65 61  ** table, it sea
11d50 72 63 68 65 73 20 74 68 65 20 6c 69 73 74 20 66  rches the list f
11d60 6f 72 20 74 68 65 20 56 54 61 62 6c 65 20 74 68  or the VTable th
11d70 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  at corresponds t
11d80 6f 20 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73  o the.** databas
11d90 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 64 6f 69  e connection doi
11da0 6e 67 20 74 68 65 20 70 72 65 70 61 72 69 6e 67  ng the preparing
11db0 20 73 6f 20 61 73 20 74 6f 20 75 73 65 20 74 68   so as to use th
11dc0 65 20 63 6f 72 72 65 63 74 0a 2a 2a 20 73 71 6c  e correct.** sql
11dd0 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c  ite3_vtab* handl
11de0 65 20 69 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65  e in the compile
11df0 64 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 57  d query..**.** W
11e00 68 65 6e 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79  hen an in-memory
11e10 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 20 69 73   Table object is
11e20 20 64 65 6c 65 74 65 64 20 28 66 6f 72 20 65 78   deleted (for ex
11e30 61 6d 70 6c 65 20 77 68 65 6e 20 74 68 65 0a 2a  ample when the.*
11e40 2a 20 73 63 68 65 6d 61 20 69 73 20 62 65 69 6e  * schema is bein
11e50 67 20 72 65 6c 6f 61 64 65 64 20 66 6f 72 20 73  g reloaded for s
11e60 6f 6d 65 20 72 65 61 73 6f 6e 29 2c 20 74 68 65  ome reason), the
11e70 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20   VTable objects 
11e80 61 72 65 20 6e 6f 74 0a 2a 2a 20 64 65 6c 65 74  are not.** delet
11e90 65 64 20 61 6e 64 20 74 68 65 20 73 71 6c 69 74  ed and the sqlit
11ea0 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73  e3_vtab* handles
11eb0 20 61 72 65 20 6e 6f 74 20 78 44 69 73 63 6f 6e   are not xDiscon
11ec0 6e 65 63 74 28 29 65 64 0a 2a 2a 20 69 6d 6d 65  nect()ed.** imme
11ed0 64 69 61 74 65 6c 79 2e 20 49 6e 73 74 65 61 64  diately. Instead
11ee0 2c 20 74 68 65 79 20 61 72 65 20 6d 6f 76 65 64  , they are moved
11ef0 20 66 72 6f 6d 20 74 68 65 20 54 61 62 6c 65 2e   from the Table.
11f00 70 56 54 61 62 6c 65 20 6c 69 73 74 20 74 6f 0a  pVTable list to.
11f10 2a 2a 20 61 6e 6f 74 68 65 72 20 6c 69 6e 6b 65  ** another linke
11f20 64 20 6c 69 73 74 20 68 65 61 64 65 64 20 62 79  d list headed by
11f30 20 74 68 65 20 73 71 6c 69 74 65 33 2e 70 44 69   the sqlite3.pDi
11f40 73 63 6f 6e 6e 65 63 74 20 6d 65 6d 62 65 72 20  sconnect member 
11f50 6f 66 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73  of the.** corres
11f60 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 20  ponding sqlite3 
11f70 73 74 72 75 63 74 75 72 65 2e 20 54 68 65 79 20  structure. They 
11f80 61 72 65 20 74 68 65 6e 20 64 65 6c 65 74 65 64  are then deleted
11f90 2f 78 44 69 73 63 6f 6e 6e 65 63 74 65 64 0a 2a  /xDisconnected.*
11fa0 2a 20 6e 65 78 74 20 74 69 6d 65 20 61 20 73 74  * next time a st
11fb0 61 74 65 6d 65 6e 74 20 69 73 20 70 72 65 70 61  atement is prepa
11fc0 72 65 64 20 75 73 69 6e 67 20 73 61 69 64 20 73  red using said s
11fd0 71 6c 69 74 65 33 2a 2e 20 54 68 69 73 20 69 73  qlite3*. This is
11fe0 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20 61 76 6f 69   done.** to avoi
11ff0 64 20 64 65 61 64 6c 6f 63 6b 20 69 73 73 75 65  d deadlock issue
12000 73 20 69 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c 74  s involving mult
12010 69 70 6c 65 20 73 71 6c 69 74 65 33 2e 6d 75 74  iple sqlite3.mut
12020 65 78 20 6d 75 74 65 78 65 73 2e 0a 2a 2a 20 52  ex mutexes..** R
12030 65 66 65 72 20 74 6f 20 63 6f 6d 6d 65 6e 74 73  efer to comments
12040 20 61 62 6f 76 65 20 66 75 6e 63 74 69 6f 6e 20   above function 
12050 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63  sqlite3VtabUnloc
12060 6b 4c 69 73 74 28 29 20 66 6f 72 20 61 6e 0a 2a  kList() for an.*
12070 2a 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20 61 73  * explanation as
12080 20 74 6f 20 77 68 79 20 69 74 20 69 73 20 73 61   to why it is sa
12090 66 65 20 74 6f 20 61 64 64 20 61 6e 20 65 6e 74  fe to add an ent
120a0 72 79 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33  ry to an sqlite3
120b0 2e 70 44 69 73 63 6f 6e 6e 65 63 74 0a 2a 2a 20  .pDisconnect.** 
120c0 6c 69 73 74 20 77 69 74 68 6f 75 74 20 68 6f 6c  list without hol
120d0 64 69 6e 67 20 74 68 65 20 63 6f 72 72 65 73 70  ding the corresp
120e0 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 2e 6d  onding sqlite3.m
120f0 75 74 65 78 20 6d 75 74 65 78 2e 0a 2a 2a 0a 2a  utex mutex..**.*
12100 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 66 6f 72  * The memory for
12110 20 6f 62 6a 65 63 74 73 20 6f 66 20 74 68 69 73   objects of this
12120 20 74 79 70 65 20 69 73 20 61 6c 77 61 79 73 20   type is always 
12130 61 6c 6c 6f 63 61 74 65 64 20 62 79 0a 2a 2a 20  allocated by.** 
12140 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 28  sqlite3DbMalloc(
12150 29 2c 20 75 73 69 6e 67 20 74 68 65 20 63 6f 6e  ), using the con
12160 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 73  nection handle s
12170 74 6f 72 65 64 20 69 6e 20 56 54 61 62 6c 65 2e  tored in VTable.
12180 64 62 20 61 73 0a 2a 2a 20 74 68 65 20 66 69 72  db as.** the fir
12190 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a  st argument..*/.
121a0 73 74 72 75 63 74 20 56 54 61 62 6c 65 20 7b 0a  struct VTable {.
121b0 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20    sqlite3 *db;  
121c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
121d0 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
121e0 6f 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  on associated wi
121f0 74 68 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  th this table */
12200 0a 20 20 4d 6f 64 75 6c 65 20 2a 70 4d 6f 64 3b  .  Module *pMod;
12210 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
12220 50 6f 69 6e 74 65 72 20 74 6f 20 6d 6f 64 75 6c  Pointer to modul
12230 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
12240 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 74   */.  sqlite3_vt
12250 61 62 20 2a 70 56 74 61 62 3b 20 20 20 20 20 20  ab *pVtab;      
12260 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 76 74  /* Pointer to vt
12270 61 62 20 69 6e 73 74 61 6e 63 65 20 2a 2f 0a 20  ab instance */. 
12280 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20   int nRef;      
12290 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
122a0 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73  mber of pointers
122b0 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75   to this structu
122c0 72 65 20 2a 2f 0a 20 20 75 38 20 62 43 6f 6e 73  re */.  u8 bCons
122d0 74 72 61 69 6e 74 3b 20 20 20 20 20 20 20 20 20  traint;         
122e0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63 6f 6e    /* True if con
122f0 73 74 72 61 69 6e 74 73 20 61 72 65 20 73 75 70  straints are sup
12300 70 6f 72 74 65 64 20 2a 2f 0a 20 20 69 6e 74 20  ported */.  int 
12310 69 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20  iSavepoint;     
12320 20 20 20 20 20 20 2f 2a 20 44 65 70 74 68 20 6f        /* Depth o
12330 66 20 74 68 65 20 53 41 56 45 50 4f 49 4e 54 20  f the SAVEPOINT 
12340 73 74 61 63 6b 20 2a 2f 0a 20 20 56 54 61 62 6c  stack */.  VTabl
12350 65 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20  e *pNext;       
12360 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20       /* Next in 
12370 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28 73 65 65  linked list (see
12380 20 61 62 6f 76 65 29 20 2a 2f 0a 7d 3b 0a 0a 2f   above) */.};../
12390 2a 0a 2a 2a 20 54 68 65 20 73 63 68 65 6d 61 20  *.** The schema 
123a0 66 6f 72 20 65 61 63 68 20 53 51 4c 20 74 61 62  for each SQL tab
123b0 6c 65 20 61 6e 64 20 76 69 65 77 20 69 73 20 72  le and view is r
123c0 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65  epresented in me
123d0 6d 6f 72 79 0a 2a 2a 20 62 79 20 61 6e 20 69 6e  mory.** by an in
123e0 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
123f0 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
12400 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 61 62  e..*/.struct Tab
12410 6c 65 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  le {.  char *zNa
12420 6d 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  me;         /* N
12430 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
12440 20 6f 72 20 76 69 65 77 20 2a 2f 0a 20 20 43 6f   or view */.  Co
12450 6c 75 6d 6e 20 2a 61 43 6f 6c 3b 20 20 20 20 20  lumn *aCol;     
12460 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f     /* Informatio
12470 6e 20 61 62 6f 75 74 20 65 61 63 68 20 63 6f 6c  n about each col
12480 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a  umn */.  Index *
12490 70 49 6e 64 65 78 3b 20 20 20 20 20 20 20 2f 2a  pIndex;       /*
124a0 20 4c 69 73 74 20 6f 66 20 53 51 4c 20 69 6e 64   List of SQL ind
124b0 65 78 65 73 20 6f 6e 20 74 68 69 73 20 74 61 62  exes on this tab
124c0 6c 65 2e 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20  le. */.  Select 
124d0 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a  *pSelect;     /*
124e0 20 4e 55 4c 4c 20 66 6f 72 20 74 61 62 6c 65 73   NULL for tables
124f0 2e 20 20 50 6f 69 6e 74 73 20 74 6f 20 64 65 66  .  Points to def
12500 69 6e 69 74 69 6f 6e 20 69 66 20 61 20 76 69 65  inition if a vie
12510 77 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 46  w. */.  FKey *pF
12520 4b 65 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Key;         /* 
12530 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 61  Linked list of a
12540 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20  ll foreign keys 
12550 69 6e 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  in this table */
12560 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66  .  char *zColAff
12570 3b 20 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e  ;       /* Strin
12580 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61  g defining the a
12590 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20  ffinity of each 
125a0 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 45 78 70 72  column */.  Expr
125b0 4c 69 73 74 20 2a 70 43 68 65 63 6b 3b 20 20 20  List *pCheck;   
125c0 20 2f 2a 20 41 6c 6c 20 43 48 45 43 4b 20 63 6f   /* All CHECK co
125d0 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 20  nstraints */.   
125e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
125f0 20 20 20 20 2f 2a 20 20 20 2e 2e 2e 20 61 6c 73      /*   ... als
12600 6f 20 75 73 65 64 20 61 73 20 63 6f 6c 75 6d 6e  o used as column
12610 20 6e 61 6d 65 20 6c 69 73 74 20 69 6e 20 61 20   name list in a 
12620 56 49 45 57 20 2a 2f 0a 20 20 69 6e 74 20 74 6e  VIEW */.  int tn
12630 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  um;            /
12640 2a 20 52 6f 6f 74 20 42 54 72 65 65 20 70 61 67  * Root BTree pag
12650 65 20 66 6f 72 20 74 68 69 73 20 74 61 62 6c 65  e for this table
12660 20 2a 2f 0a 20 20 75 33 32 20 6e 54 61 62 52 65   */.  u32 nTabRe
12670 66 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  f;         /* Nu
12680 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73  mber of pointers
12690 20 74 6f 20 74 68 69 73 20 54 61 62 6c 65 20 2a   to this Table *
126a0 2f 0a 20 20 75 33 32 20 74 61 62 46 6c 61 67 73  /.  u32 tabFlags
126b0 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b  ;        /* Mask
126c0 20 6f 66 20 54 46 5f 2a 20 76 61 6c 75 65 73 20   of TF_* values 
126d0 2a 2f 0a 20 20 69 31 36 20 69 50 4b 65 79 3b 20  */.  i16 iPKey; 
126e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20            /* If 
126f0 6e 6f 74 20 6e 65 67 61 74 69 76 65 2c 20 75 73  not negative, us
12700 65 20 61 43 6f 6c 5b 69 50 4b 65 79 5d 20 61 73  e aCol[iPKey] as
12710 20 74 68 65 20 72 6f 77 69 64 20 2a 2f 0a 20 20   the rowid */.  
12720 69 31 36 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20  i16 nCol;       
12730 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
12740 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69  f columns in thi
12750 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67  s table */.  Log
12760 45 73 74 20 6e 52 6f 77 4c 6f 67 45 73 74 3b 20  Est nRowLogEst; 
12770 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 72    /* Estimated r
12780 6f 77 73 20 69 6e 20 74 61 62 6c 65 20 2d 20 66  ows in table - f
12790 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61 74 31  rom sqlite_stat1
127a0 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45   table */.  LogE
127b0 73 74 20 73 7a 54 61 62 52 6f 77 3b 20 20 20 20  st szTabRow;    
127c0 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 73 69   /* Estimated si
127d0 7a 65 20 6f 66 20 65 61 63 68 20 74 61 62 6c 65  ze of each table
127e0 20 72 6f 77 20 69 6e 20 62 79 74 65 73 20 2a 2f   row in bytes */
127f0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
12800 4e 41 42 4c 45 5f 43 4f 53 54 4d 55 4c 54 0a 20  NABLE_COSTMULT. 
12810 20 4c 6f 67 45 73 74 20 63 6f 73 74 4d 75 6c 74   LogEst costMult
12820 3b 20 20 20 20 20 2f 2a 20 43 6f 73 74 20 6d 75  ;     /* Cost mu
12830 6c 74 69 70 6c 69 65 72 20 66 6f 72 20 75 73 69  ltiplier for usi
12840 6e 67 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  ng this table */
12850 0a 23 65 6e 64 69 66 0a 20 20 75 38 20 6b 65 79  .#endif.  u8 key
12860 43 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f  Conf;          /
12870 2a 20 57 68 61 74 20 74 6f 20 64 6f 20 69 6e 20  * What to do in 
12880 63 61 73 65 20 6f 66 20 75 6e 69 71 75 65 6e 65  case of uniquene
12890 73 73 20 63 6f 6e 66 6c 69 63 74 20 6f 6e 20 69  ss conflict on i
128a0 50 4b 65 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20  PKey */.#ifndef 
128b0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45  SQLITE_OMIT_ALTE
128c0 52 54 41 42 4c 45 0a 20 20 69 6e 74 20 61 64 64  RTABLE.  int add
128d0 43 6f 6c 4f 66 66 73 65 74 3b 20 20 20 20 2f 2a  ColOffset;    /*
128e0 20 4f 66 66 73 65 74 20 69 6e 20 43 52 45 41 54   Offset in CREAT
128f0 45 20 54 41 42 4c 45 20 73 74 6d 74 20 74 6f 20  E TABLE stmt to 
12900 61 64 64 20 61 20 6e 65 77 20 63 6f 6c 75 6d 6e  add a new column
12910 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64   */.#endif.#ifnd
12920 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
12930 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e  IRTUALTABLE.  in
12940 74 20 6e 4d 6f 64 75 6c 65 41 72 67 3b 20 20 20  t nModuleArg;   
12950 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
12960 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 68 65  arguments to the
12970 20 6d 6f 64 75 6c 65 20 2a 2f 0a 20 20 63 68 61   module */.  cha
12980 72 20 2a 2a 61 7a 4d 6f 64 75 6c 65 41 72 67 3b  r **azModuleArg;
12990 20 20 2f 2a 20 30 3a 20 6d 6f 64 75 6c 65 20 31    /* 0: module 1
129a0 3a 20 73 63 68 65 6d 61 20 32 3a 20 76 74 61 62  : schema 2: vtab
129b0 20 6e 61 6d 65 20 33 2e 2e 2e 3a 20 61 72 67 73   name 3...: args
129c0 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 56   */.  VTable *pV
129d0 54 61 62 6c 65 3b 20 20 20 20 20 2f 2a 20 4c 69  Table;     /* Li
129e0 73 74 20 6f 66 20 56 54 61 62 6c 65 20 6f 62 6a  st of VTable obj
129f0 65 63 74 73 2e 20 2a 2f 0a 23 65 6e 64 69 66 0a  ects. */.#endif.
12a00 20 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67    Trigger *pTrig
12a10 67 65 72 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f  ger;   /* List o
12a20 66 20 74 72 69 67 67 65 72 73 20 73 74 6f 72 65  f triggers store
12a30 64 20 69 6e 20 70 53 63 68 65 6d 61 20 2a 2f 0a  d in pSchema */.
12a40 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d    Schema *pSchem
12a50 61 3b 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61  a;     /* Schema
12a60 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74   that contains t
12a70 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54  his table */.  T
12a80 61 62 6c 65 20 2a 70 4e 65 78 74 5a 6f 6d 62 69  able *pNextZombi
12a90 65 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 6e 20 74  e;  /* Next on t
12aa0 68 65 20 50 61 72 73 65 2e 70 5a 6f 6d 62 69 65  he Parse.pZombie
12ab0 54 61 62 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a  Tab list */.};..
12ac0 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61  /*.** Allowed va
12ad0 6c 75 65 73 20 66 6f 72 20 54 61 62 6c 65 2e 74  lues for Table.t
12ae0 61 62 46 6c 61 67 73 2e 0a 2a 2a 0a 2a 2a 20 54  abFlags..**.** T
12af0 46 5f 4f 4f 4f 48 69 64 64 65 6e 20 61 70 70 6c  F_OOOHidden appl
12b00 69 65 73 20 74 6f 20 74 61 62 6c 65 73 20 6f 72  ies to tables or
12b10 20 76 69 65 77 20 74 68 61 74 20 68 61 76 65 20   view that have 
12b20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 74  hidden columns t
12b30 68 61 74 20 61 72 65 0a 2a 2a 20 66 6f 6c 6c 6f  hat are.** follo
12b40 77 65 64 20 62 79 20 6e 6f 6e 2d 68 69 64 64 65  wed by non-hidde
12b50 6e 20 63 6f 6c 75 6d 6e 73 2e 20 20 45 78 61 6d  n columns.  Exam
12b60 70 6c 65 3a 20 20 22 43 52 45 41 54 45 20 56 49  ple:  "CREATE VI
12b70 52 54 55 41 4c 20 54 41 42 4c 45 20 78 20 55 53  RTUAL TABLE x US
12b80 49 4e 47 0a 2a 2a 20 76 74 61 62 31 28 61 20 48  ING.** vtab1(a H
12b90 49 44 44 45 4e 2c 20 62 29 3b 22 2e 20 20 53 69  IDDEN, b);".  Si
12ba0 6e 63 65 20 22 62 22 20 69 73 20 61 20 6e 6f 6e  nce "b" is a non
12bb0 2d 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 62  -hidden column b
12bc0 75 74 20 22 61 22 20 69 73 20 68 69 64 64 65 6e  ut "a" is hidden
12bd0 2c 0a 2a 2a 20 74 68 65 20 54 46 5f 4f 4f 4f 48  ,.** the TF_OOOH
12be0 69 64 64 65 6e 20 61 74 74 72 69 62 75 74 65 20  idden attribute 
12bf0 77 6f 75 6c 64 20 61 70 70 6c 79 20 69 6e 20 74  would apply in t
12c00 68 69 73 20 63 61 73 65 2e 20 20 53 75 63 68 20  his case.  Such 
12c10 74 61 62 6c 65 73 20 72 65 71 75 69 72 65 0a 2a  tables require.*
12c20 2a 20 73 70 65 63 69 61 6c 20 68 61 6e 64 6c 69  * special handli
12c30 6e 67 20 64 75 72 69 6e 67 20 49 4e 53 45 52 54  ng during INSERT
12c40 20 70 72 6f 63 65 73 73 69 6e 67 2e 0a 2a 2f 0a   processing..*/.
12c50 23 64 65 66 69 6e 65 20 54 46 5f 52 65 61 64 6f  #define TF_Reado
12c60 6e 6c 79 20 20 20 20 20 20 20 20 30 78 30 30 30  nly        0x000
12c70 31 20 20 20 20 2f 2a 20 52 65 61 64 2d 6f 6e 6c  1    /* Read-onl
12c80 79 20 73 79 73 74 65 6d 20 74 61 62 6c 65 20 2a  y system table *
12c90 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 45 70 68  /.#define TF_Eph
12ca0 65 6d 65 72 61 6c 20 20 20 20 20 20 20 30 78 30  emeral       0x0
12cb0 30 30 32 20 20 20 20 2f 2a 20 41 6e 20 65 70 68  002    /* An eph
12cc0 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 2a 2f 0a  emeral table */.
12cd0 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73 50 72  #define TF_HasPr
12ce0 69 6d 61 72 79 4b 65 79 20 20 20 30 78 30 30 30  imaryKey   0x000
12cf0 34 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 68 61  4    /* Table ha
12d00 73 20 61 20 70 72 69 6d 61 72 79 20 6b 65 79 20  s a primary key 
12d10 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 41 75  */.#define TF_Au
12d20 74 6f 69 6e 63 72 65 6d 65 6e 74 20 20 20 30 78  toincrement   0x
12d30 30 30 30 38 20 20 20 20 2f 2a 20 49 6e 74 65 67  0008    /* Integ
12d40 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20 69  er primary key i
12d50 73 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20  s autoincrement 
12d60 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61  */.#define TF_Ha
12d70 73 53 74 61 74 31 20 20 20 20 20 20 20 20 30 78  sStat1        0x
12d80 30 30 31 30 20 20 20 20 2f 2a 20 6e 52 6f 77 4c  0010    /* nRowL
12d90 6f 67 45 73 74 20 73 65 74 20 66 72 6f 6d 20 73  ogEst set from s
12da0 71 6c 69 74 65 5f 73 74 61 74 31 20 2a 2f 0a 23  qlite_stat1 */.#
12db0 64 65 66 69 6e 65 20 54 46 5f 57 69 74 68 6f 75  define TF_Withou
12dc0 74 52 6f 77 69 64 20 20 20 20 30 78 30 30 32 30  tRowid    0x0020
12dd0 20 20 20 20 2f 2a 20 4e 6f 20 72 6f 77 69 64 2e      /* No rowid.
12de0 20 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69 73    PRIMARY KEY is
12df0 20 74 68 65 20 6b 65 79 20 2a 2f 0a 23 64 65 66   the key */.#def
12e00 69 6e 65 20 54 46 5f 4e 6f 56 69 73 69 62 6c 65  ine TF_NoVisible
12e10 52 6f 77 69 64 20 20 30 78 30 30 34 30 20 20 20  Rowid  0x0040   
12e20 20 2f 2a 20 4e 6f 20 75 73 65 72 2d 76 69 73 69   /* No user-visi
12e30 62 6c 65 20 22 72 6f 77 69 64 22 20 63 6f 6c 75  ble "rowid" colu
12e40 6d 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  mn */.#define TF
12e50 5f 4f 4f 4f 48 69 64 64 65 6e 20 20 20 20 20 20  _OOOHidden      
12e60 20 30 78 30 30 38 30 20 20 20 20 2f 2a 20 4f 75   0x0080    /* Ou
12e70 74 2d 6f 66 2d 4f 72 64 65 72 20 68 69 64 64 65  t-of-Order hidde
12e80 6e 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 23 64 65  n columns */.#de
12e90 66 69 6e 65 20 54 46 5f 53 74 61 74 73 55 73 65  fine TF_StatsUse
12ea0 64 20 20 20 20 20 20 20 30 78 30 31 30 30 20 20  d       0x0100  
12eb0 20 20 2f 2a 20 51 75 65 72 79 20 70 6c 61 6e 6e    /* Query plann
12ec0 65 72 20 64 65 63 69 73 69 6f 6e 73 20 61 66 66  er decisions aff
12ed0 65 63 74 65 64 20 62 79 0a 20 20 20 20 20 20 20  ected by.       
12ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
12f00 20 49 6e 64 65 78 2e 61 69 52 6f 77 4c 6f 67 45   Index.aiRowLogE
12f10 73 74 5b 5d 20 76 61 6c 75 65 73 20 2a 2f 0a 23  st[] values */.#
12f20 64 65 66 69 6e 65 20 54 46 5f 48 61 73 4e 6f 74  define TF_HasNot
12f30 4e 75 6c 6c 20 20 20 20 20 20 30 78 30 32 30 30  Null      0x0200
12f40 20 20 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20      /* Contains 
12f50 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61  NOT NULL constra
12f60 69 6e 74 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54  ints */../*.** T
12f70 65 73 74 20 74 6f 20 73 65 65 20 77 68 65 74 68  est to see wheth
12f80 65 72 20 6f 72 20 6e 6f 74 20 61 20 74 61 62 6c  er or not a tabl
12f90 65 20 69 73 20 61 20 76 69 72 74 75 61 6c 20 74  e is a virtual t
12fa0 61 62 6c 65 2e 20 20 54 68 69 73 20 69 73 0a 2a  able.  This is.*
12fb0 2a 20 64 6f 6e 65 20 61 73 20 61 20 6d 61 63 72  * done as a macr
12fc0 6f 20 73 6f 20 74 68 61 74 20 69 74 20 77 69 6c  o so that it wil
12fd0 6c 20 62 65 20 6f 70 74 69 6d 69 7a 65 64 20 6f  l be optimized o
12fe0 75 74 20 77 68 65 6e 20 76 69 72 74 75 61 6c 0a  ut when virtual.
12ff0 2a 2a 20 74 61 62 6c 65 20 73 75 70 70 6f 72 74  ** table support
13000 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d   is omitted from
13010 20 74 68 65 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23   the build..*/.#
13020 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
13030 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
13040 23 20 20 64 65 66 69 6e 65 20 49 73 56 69 72 74  #  define IsVirt
13050 75 61 6c 28 58 29 20 20 20 20 20 20 28 28 58 29  ual(X)      ((X)
13060 2d 3e 6e 4d 6f 64 75 6c 65 41 72 67 29 0a 23 65  ->nModuleArg).#e
13070 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49 73  lse.#  define Is
13080 56 69 72 74 75 61 6c 28 58 29 20 20 20 20 20 20  Virtual(X)      
13090 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
130a0 4d 61 63 72 6f 73 20 74 6f 20 64 65 74 65 72 6d  Macros to determ
130b0 69 6e 65 20 69 66 20 61 20 63 6f 6c 75 6d 6e 20  ine if a column 
130c0 69 73 20 68 69 64 64 65 6e 2e 20 20 49 73 4f 72  is hidden.  IsOr
130d0 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75  dinaryHiddenColu
130e0 6d 6e 28 29 0a 2a 2a 20 6f 6e 6c 79 20 77 6f 72  mn().** only wor
130f0 6b 73 20 66 6f 72 20 6e 6f 6e 2d 76 69 72 74 75  ks for non-virtu
13100 61 6c 20 74 61 62 6c 65 73 20 28 6f 72 64 69 6e  al tables (ordin
13110 61 72 79 20 74 61 62 6c 65 73 20 61 6e 64 20 76  ary tables and v
13120 69 65 77 73 29 20 61 6e 64 20 69 73 0a 2a 2a 20  iews) and is.** 
13130 61 6c 77 61 79 73 20 66 61 6c 73 65 20 75 6e 6c  always false unl
13140 65 73 73 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ess SQLITE_ENABL
13150 45 5f 48 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53  E_HIDDEN_COLUMNS
13160 20 69 73 20 64 65 66 69 6e 65 64 2e 20 20 54 68   is defined.  Th
13170 65 0a 2a 2a 20 49 73 48 69 64 64 65 6e 43 6f 6c  e.** IsHiddenCol
13180 75 6d 6e 28 29 20 6d 61 63 72 6f 20 69 73 20 67  umn() macro is g
13190 65 6e 65 72 61 6c 20 70 75 72 70 6f 73 65 2e 0a  eneral purpose..
131a0 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  */.#if defined(S
131b0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49 44  QLITE_ENABLE_HID
131c0 44 45 4e 5f 43 4f 4c 55 4d 4e 53 29 0a 23 20 20  DEN_COLUMNS).#  
131d0 64 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43  define IsHiddenC
131e0 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20 20 20 20  olumn(X)        
131f0 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73   (((X)->colFlags
13200 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45   & COLFLAG_HIDDE
13210 4e 29 21 3d 30 29 0a 23 20 20 64 65 66 69 6e 65  N)!=0).#  define
13220 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65   IsOrdinaryHidde
13230 6e 43 6f 6c 75 6d 6e 28 58 29 20 28 28 28 58 29  nColumn(X) (((X)
13240 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c  ->colFlags & COL
13250 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d 30 29  FLAG_HIDDEN)!=0)
13260 0a 23 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28  .#elif !defined(
13270 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
13280 55 41 4c 54 41 42 4c 45 29 0a 23 20 20 64 65 66  UALTABLE).#  def
13290 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75  ine IsHiddenColu
132a0 6d 6e 28 58 29 20 20 20 20 20 20 20 20 20 28 28  mn(X)         ((
132b0 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20  (X)->colFlags & 
132c0 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21  COLFLAG_HIDDEN)!
132d0 3d 30 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73  =0).#  define Is
132e0 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f  OrdinaryHiddenCo
132f0 6c 75 6d 6e 28 58 29 20 30 0a 23 65 6c 73 65 0a  lumn(X) 0.#else.
13300 23 20 20 64 65 66 69 6e 65 20 49 73 48 69 64 64  #  define IsHidd
13310 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20  enColumn(X)     
13320 20 20 20 20 30 0a 23 20 20 64 65 66 69 6e 65 20      0.#  define 
13330 49 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e  IsOrdinaryHidden
13340 43 6f 6c 75 6d 6e 28 58 29 20 30 0a 23 65 6e 64  Column(X) 0.#end
13350 69 66 0a 0a 0a 2f 2a 20 44 6f 65 73 20 74 68 65  if.../* Does the
13360 20 74 61 62 6c 65 20 68 61 76 65 20 61 20 72 6f   table have a ro
13370 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 48  wid */.#define H
13380 61 73 52 6f 77 69 64 28 58 29 20 20 20 20 20 28  asRowid(X)     (
13390 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26  ((X)->tabFlags &
133a0 20 54 46 5f 57 69 74 68 6f 75 74 52 6f 77 69 64   TF_WithoutRowid
133b0 29 3d 3d 30 29 0a 23 64 65 66 69 6e 65 20 56 69  )==0).#define Vi
133c0 73 69 62 6c 65 52 6f 77 69 64 28 58 29 20 28 28  sibleRowid(X) ((
133d0 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20  (X)->tabFlags & 
133e0 54 46 5f 4e 6f 56 69 73 69 62 6c 65 52 6f 77 69  TF_NoVisibleRowi
133f0 64 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 45 61  d)==0)../*.** Ea
13400 63 68 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  ch foreign key c
13410 6f 6e 73 74 72 61 69 6e 74 20 69 73 20 61 6e 20  onstraint is an 
13420 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
13430 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
13440 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 66 6f 72  ure..**.** A for
13450 65 69 67 6e 20 6b 65 79 20 69 73 20 61 73 73 6f  eign key is asso
13460 63 69 61 74 65 64 20 77 69 74 68 20 74 77 6f 20  ciated with two 
13470 74 61 62 6c 65 73 2e 20 20 54 68 65 20 22 66 72  tables.  The "fr
13480 6f 6d 22 20 74 61 62 6c 65 20 69 73 0a 2a 2a 20  om" table is.** 
13490 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 63  the table that c
134a0 6f 6e 74 61 69 6e 73 20 74 68 65 20 52 45 46 45  ontains the REFE
134b0 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 74 68  RENCES clause th
134c0 61 74 20 63 72 65 61 74 65 73 20 74 68 65 20 66  at creates the f
134d0 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 2e 20 20  oreign.** key.  
134e0 54 68 65 20 22 74 6f 22 20 74 61 62 6c 65 20 69  The "to" table i
134f0 73 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  s the table that
13500 20 69 73 20 6e 61 6d 65 64 20 69 6e 20 74 68 65   is named in the
13510 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75   REFERENCES clau
13520 73 65 2e 0a 2a 2a 20 43 6f 6e 73 69 64 65 72 20  se..** Consider 
13530 74 68 69 73 20 65 78 61 6d 70 6c 65 3a 0a 2a 2a  this example:.**
13540 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20 54  .**     CREATE T
13550 41 42 4c 45 20 65 78 31 28 0a 2a 2a 20 20 20 20  ABLE ex1(.**    
13560 20 20 20 61 20 49 4e 54 45 47 45 52 20 50 52 49     a INTEGER PRI
13570 4d 41 52 59 20 4b 45 59 2c 0a 2a 2a 20 20 20 20  MARY KEY,.**    
13580 20 20 20 62 20 49 4e 54 45 47 45 52 20 43 4f 4e     b INTEGER CON
13590 53 54 52 41 49 4e 54 20 66 6b 31 20 52 45 46 45  STRAINT fk1 REFE
135a0 52 45 4e 43 45 53 20 65 78 32 28 78 29 0a 2a 2a  RENCES ex2(x).**
135b0 20 20 20 20 20 29 3b 0a 2a 2a 0a 2a 2a 20 46 6f       );.**.** Fo
135c0 72 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 22 66  r foreign key "f
135d0 6b 31 22 2c 20 74 68 65 20 66 72 6f 6d 2d 74 61  k1", the from-ta
135e0 62 6c 65 20 69 73 20 22 65 78 31 22 20 61 6e 64  ble is "ex1" and
135f0 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69 73   the to-table is
13600 20 22 65 78 32 22 2e 0a 2a 2a 20 45 71 75 69 76   "ex2"..** Equiv
13610 61 6c 65 6e 74 20 6e 61 6d 65 73 3a 0a 2a 2a 0a  alent names:.**.
13620 2a 2a 20 20 20 20 20 66 72 6f 6d 2d 74 61 62 6c  **     from-tabl
13630 65 20 3d 3d 20 63 68 69 6c 64 2d 74 61 62 6c 65  e == child-table
13640 0a 2a 2a 20 20 20 20 20 20 20 74 6f 2d 74 61 62  .**       to-tab
13650 6c 65 20 3d 3d 20 70 61 72 65 6e 74 2d 74 61 62  le == parent-tab
13660 6c 65 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 52 45  le.**.** Each RE
13670 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20  FERENCES clause 
13680 67 65 6e 65 72 61 74 65 73 20 61 6e 20 69 6e 73  generates an ins
13690 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
136a0 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
136b0 0a 2a 2a 20 77 68 69 63 68 20 69 73 20 61 74 74  .** which is att
136c0 61 63 68 65 64 20 74 6f 20 74 68 65 20 66 72 6f  ached to the fro
136d0 6d 2d 74 61 62 6c 65 2e 20 20 54 68 65 20 74 6f  m-table.  The to
136e0 2d 74 61 62 6c 65 20 6e 65 65 64 20 6e 6f 74 20  -table need not 
136f0 65 78 69 73 74 20 77 68 65 6e 0a 2a 2a 20 74 68  exist when.** th
13700 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20  e from-table is 
13710 63 72 65 61 74 65 64 2e 20 20 54 68 65 20 65 78  created.  The ex
13720 69 73 74 65 6e 63 65 20 6f 66 20 74 68 65 20 74  istence of the t
13730 6f 2d 74 61 62 6c 65 20 69 73 20 6e 6f 74 20 63  o-table is not c
13740 68 65 63 6b 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  hecked..**.** Th
13750 65 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 70 61  e list of all pa
13760 72 65 6e 74 73 20 66 6f 72 20 63 68 69 6c 64 20  rents for child 
13770 54 61 62 6c 65 20 58 20 69 73 20 68 65 6c 64 20  Table X is held 
13780 61 74 20 58 2e 70 46 4b 65 79 2e 0a 2a 2a 0a 2a  at X.pFKey..**.*
13790 2a 20 41 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20  * A list of all 
137a0 63 68 69 6c 64 72 65 6e 20 66 6f 72 20 61 20 74  children for a t
137b0 61 62 6c 65 20 6e 61 6d 65 64 20 5a 20 28 77 68  able named Z (wh
137c0 69 63 68 20 6d 69 67 68 74 20 6e 6f 74 20 65 76  ich might not ev
137d0 65 6e 20 65 78 69 73 74 29 0a 2a 2a 20 69 73 20  en exist).** is 
137e0 68 65 6c 64 20 69 6e 20 53 63 68 65 6d 61 2e 66  held in Schema.f
137f0 6b 65 79 48 61 73 68 20 77 69 74 68 20 61 20 68  keyHash with a h
13800 61 73 68 20 6b 65 79 20 6f 66 20 5a 2e 0a 2a 2f  ash key of Z..*/
13810 0a 73 74 72 75 63 74 20 46 4b 65 79 20 7b 0a 20  .struct FKey {. 
13820 20 54 61 62 6c 65 20 2a 70 46 72 6f 6d 3b 20 20   Table *pFrom;  
13830 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6e 74     /* Table cont
13840 61 69 6e 69 6e 67 20 74 68 65 20 52 45 46 45 52  aining the REFER
13850 45 4e 43 45 53 20 63 6c 61 75 73 65 20 28 61 6b  ENCES clause (ak
13860 61 3a 20 43 68 69 6c 64 29 20 2a 2f 0a 20 20 46  a: Child) */.  F
13870 4b 65 79 20 2a 70 4e 65 78 74 46 72 6f 6d 3b 20  Key *pNextFrom; 
13880 20 2f 2a 20 4e 65 78 74 20 46 4b 65 79 20 77 69   /* Next FKey wi
13890 74 68 20 74 68 65 20 73 61 6d 65 20 69 6e 20 70  th the same in p
138a0 46 72 6f 6d 2e 20 4e 65 78 74 20 70 61 72 65 6e  From. Next paren
138b0 74 20 6f 66 20 70 46 72 6f 6d 20 2a 2f 0a 20 20  t of pFrom */.  
138c0 63 68 61 72 20 2a 7a 54 6f 3b 20 20 20 20 20 20  char *zTo;      
138d0 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 61 62    /* Name of tab
138e0 6c 65 20 74 68 61 74 20 74 68 65 20 6b 65 79 20  le that the key 
138f0 70 6f 69 6e 74 73 20 74 6f 20 28 61 6b 61 3a 20  points to (aka: 
13900 50 61 72 65 6e 74 29 20 2a 2f 0a 20 20 46 4b 65  Parent) */.  FKe
13910 79 20 2a 70 4e 65 78 74 54 6f 3b 20 20 20 20 2f  y *pNextTo;    /
13920 2a 20 4e 65 78 74 20 77 69 74 68 20 74 68 65 20  * Next with the 
13930 73 61 6d 65 20 7a 54 6f 2e 20 4e 65 78 74 20 63  same zTo. Next c
13940 68 69 6c 64 20 6f 66 20 7a 54 6f 2e 20 2a 2f 0a  hild of zTo. */.
13950 20 20 46 4b 65 79 20 2a 70 50 72 65 76 54 6f 3b    FKey *pPrevTo;
13960 20 20 20 20 2f 2a 20 50 72 65 76 69 6f 75 73 20      /* Previous 
13970 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 7a 54  with the same zT
13980 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c 3b  o */.  int nCol;
13990 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
139a0 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
139b0 20 74 68 69 73 20 6b 65 79 20 2a 2f 0a 20 20 2f   this key */.  /
139c0 2a 20 45 56 3a 20 52 2d 33 30 33 32 33 2d 32 31  * EV: R-30323-21
139d0 39 31 37 20 2a 2f 0a 20 20 75 38 20 69 73 44 65  917 */.  u8 isDe
139e0 66 65 72 72 65 64 3b 20 20 20 20 20 20 20 2f 2a  ferred;       /*
139f0 20 54 72 75 65 20 69 66 20 63 6f 6e 73 74 72 61   True if constra
13a00 69 6e 74 20 63 68 65 63 6b 69 6e 67 20 69 73 20  int checking is 
13a10 64 65 66 65 72 72 65 64 20 74 69 6c 6c 20 43 4f  deferred till CO
13a20 4d 4d 49 54 20 2a 2f 0a 20 20 75 38 20 61 41 63  MMIT */.  u8 aAc
13a30 74 69 6f 6e 5b 32 5d 3b 20 20 20 20 20 20 20 20  tion[2];        
13a40 2f 2a 20 4f 4e 20 44 45 4c 45 54 45 20 61 6e 64  /* ON DELETE and
13a50 20 4f 4e 20 55 50 44 41 54 45 20 61 63 74 69 6f   ON UPDATE actio
13a60 6e 73 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79  ns, respectively
13a70 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 61   */.  Trigger *a
13a80 70 54 72 69 67 67 65 72 5b 32 5d 3b 2f 2a 20 54  pTrigger[2];/* T
13a90 72 69 67 67 65 72 73 20 66 6f 72 20 61 41 63 74  riggers for aAct
13aa0 69 6f 6e 5b 5d 20 61 63 74 69 6f 6e 73 20 2a 2f  ion[] actions */
13ab0 0a 20 20 73 74 72 75 63 74 20 73 43 6f 6c 4d 61  .  struct sColMa
13ac0 70 20 7b 20 20 20 20 20 20 2f 2a 20 4d 61 70 70  p {      /* Mapp
13ad0 69 6e 67 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ing of columns i
13ae0 6e 20 70 46 72 6f 6d 20 74 6f 20 63 6f 6c 75 6d  n pFrom to colum
13af0 6e 73 20 69 6e 20 7a 54 6f 20 2a 2f 0a 20 20 20  ns in zTo */.   
13b00 20 69 6e 74 20 69 46 72 6f 6d 3b 20 20 20 20 20   int iFrom;     
13b10 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20         /* Index 
13b20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 70 46 72  of column in pFr
13b30 6f 6d 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  om */.    char *
13b40 7a 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20  zCol;           
13b50 2f 2a 20 4e 61 6d 65 20 6f 66 20 63 6f 6c 75 6d  /* Name of colum
13b60 6e 20 69 6e 20 7a 54 6f 2e 20 20 49 66 20 4e 55  n in zTo.  If NU
13b70 4c 4c 20 75 73 65 20 50 52 49 4d 41 52 59 20 4b  LL use PRIMARY K
13b80 45 59 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 5b 31  EY */.  } aCol[1
13b90 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ];            /*
13ba0 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65   One entry for e
13bb0 61 63 68 20 6f 66 20 6e 43 6f 6c 20 63 6f 6c 75  ach of nCol colu
13bc0 6d 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  mns */.};../*.**
13bd0 20 53 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73   SQLite supports
13be0 20 6d 61 6e 79 20 64 69 66 66 65 72 65 6e 74 20   many different 
13bf0 77 61 79 73 20 74 6f 20 72 65 73 6f 6c 76 65 20  ways to resolve 
13c00 61 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20  a constraint.** 
13c10 65 72 72 6f 72 2e 20 20 52 4f 4c 4c 42 41 43 4b  error.  ROLLBACK
13c20 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e   processing mean
13c30 73 20 74 68 61 74 20 61 20 63 6f 6e 73 74 72 61  s that a constra
13c40 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 2a 2a  int violation.**
13c50 20 63 61 75 73 65 73 20 74 68 65 20 6f 70 65 72   causes the oper
13c60 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73  ation in process
13c70 20 74 6f 20 66 61 69 6c 20 61 6e 64 20 66 6f 72   to fail and for
13c80 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72 61   the current tra
13c90 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62  nsaction.** to b
13ca0 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20  e rolled back.  
13cb0 41 42 4f 52 54 20 70 72 6f 63 65 73 73 69 6e 67  ABORT processing
13cc0 20 6d 65 61 6e 73 20 74 68 65 20 6f 70 65 72 61   means the opera
13cd0 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 0a  tion in process.
13ce0 2a 2a 20 66 61 69 6c 73 20 61 6e 64 20 61 6e 79  ** fails and any
13cf0 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20 66   prior changes f
13d00 72 6f 6d 20 74 68 61 74 20 6f 6e 65 20 6f 70 65  rom that one ope
13d10 72 61 74 69 6f 6e 20 61 72 65 20 62 61 63 6b 65  ration are backe
13d20 64 20 6f 75 74 2c 0a 2a 2a 20 62 75 74 20 74 68  d out,.** but th
13d30 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  e transaction is
13d40 20 6e 6f 74 20 72 6f 6c 6c 65 64 20 62 61 63 6b   not rolled back
13d50 2e 20 20 46 41 49 4c 20 70 72 6f 63 65 73 73 69  .  FAIL processi
13d60 6e 67 20 6d 65 61 6e 73 20 74 68 61 74 0a 2a 2a  ng means that.**
13d70 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69   the operation i
13d80 6e 20 70 72 6f 67 72 65 73 73 20 73 74 6f 70 73  n progress stops
13d90 20 61 6e 64 20 72 65 74 75 72 6e 73 20 61 6e 20   and returns an 
13da0 65 72 72 6f 72 20 63 6f 64 65 2e 20 20 42 75 74  error code.  But
13db0 20 70 72 69 6f 72 0a 2a 2a 20 63 68 61 6e 67 65   prior.** change
13dc0 73 20 64 75 65 20 74 6f 20 74 68 65 20 73 61 6d  s due to the sam
13dd0 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65 20  e operation are 
13de0 6e 6f 74 20 62 61 63 6b 65 64 20 6f 75 74 20 61  not backed out a
13df0 6e 64 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 0a 2a  nd no rollback.*
13e00 2a 20 6f 63 63 75 72 73 2e 20 20 49 47 4e 4f 52  * occurs.  IGNOR
13e10 45 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65  E means that the
13e20 20 70 61 72 74 69 63 75 6c 61 72 20 72 6f 77 20   particular row 
13e30 74 68 61 74 20 63 61 75 73 65 64 20 74 68 65 20  that caused the 
13e40 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72  constraint.** er
13e50 72 6f 72 20 69 73 20 6e 6f 74 20 69 6e 73 65 72  ror is not inser
13e60 74 65 64 20 6f 72 20 75 70 64 61 74 65 64 2e 20  ted or updated. 
13e70 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74   Processing cont
13e80 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72 72  inues and no err
13e90 6f 72 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e 65  or.** is returne
13ea0 64 2e 20 20 52 45 50 4c 41 43 45 20 6d 65 61 6e  d.  REPLACE mean
13eb0 73 20 74 68 61 74 20 70 72 65 65 78 69 73 74 69  s that preexisti
13ec0 6e 67 20 64 61 74 61 62 61 73 65 20 72 6f 77 73  ng database rows
13ed0 20 74 68 61 74 20 63 61 75 73 65 64 0a 2a 2a 20   that caused.** 
13ee0 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61  a UNIQUE constra
13ef0 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61 72  int violation ar
13f00 65 20 72 65 6d 6f 76 65 64 20 73 6f 20 74 68 61  e removed so tha
13f10 74 20 74 68 65 20 6e 65 77 20 69 6e 73 65 72 74  t the new insert
13f20 20 6f 72 0a 2a 2a 20 75 70 64 61 74 65 20 63 61   or.** update ca
13f30 6e 20 70 72 6f 63 65 65 64 2e 20 20 50 72 6f 63  n proceed.  Proc
13f40 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73  essing continues
13f50 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72 20 69 73   and no error is
13f60 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a   reported..**.**
13f70 20 52 45 53 54 52 49 43 54 2c 20 53 45 54 4e 55   RESTRICT, SETNU
13f80 4c 4c 2c 20 61 6e 64 20 43 41 53 43 41 44 45 20  LL, and CASCADE 
13f90 61 63 74 69 6f 6e 73 20 61 70 70 6c 79 20 6f 6e  actions apply on
13fa0 6c 79 20 74 6f 20 66 6f 72 65 69 67 6e 20 6b 65  ly to foreign ke
13fb0 79 73 2e 0a 2a 2a 20 52 45 53 54 52 49 43 54 20  ys..** RESTRICT 
13fc0 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 41  is the same as A
13fd0 42 4f 52 54 20 66 6f 72 20 49 4d 4d 45 44 49 41  BORT for IMMEDIA
13fe0 54 45 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20  TE foreign keys 
13ff0 61 6e 64 20 74 68 65 0a 2a 2a 20 73 61 6d 65 20  and the.** same 
14000 61 73 20 52 4f 4c 4c 42 41 43 4b 20 66 6f 72 20  as ROLLBACK for 
14010 44 45 46 45 52 52 45 44 20 6b 65 79 73 2e 20 20  DEFERRED keys.  
14020 53 45 54 4e 55 4c 4c 20 6d 65 61 6e 73 20 74 68  SETNULL means th
14030 61 74 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a  at the foreign.*
14040 2a 20 6b 65 79 20 69 73 20 73 65 74 20 74 6f 20  * key is set to 
14050 4e 55 4c 4c 2e 20 20 43 41 53 43 41 44 45 20 6d  NULL.  CASCADE m
14060 65 61 6e 73 20 74 68 61 74 20 61 20 44 45 4c 45  eans that a DELE
14070 54 45 20 6f 72 20 55 50 44 41 54 45 20 6f 66 20  TE or UPDATE of 
14080 74 68 65 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65  the.** reference
14090 64 20 74 61 62 6c 65 20 72 6f 77 20 69 73 20 70  d table row is p
140a0 72 6f 70 61 67 61 74 65 64 20 69 6e 74 6f 20 74  ropagated into t
140b0 68 65 20 72 6f 77 20 74 68 61 74 20 68 6f 6c 64  he row that hold
140c0 73 20 74 68 65 0a 2a 2a 20 66 6f 72 65 69 67 6e  s the.** foreign
140d0 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20   key..**.** The 
140e0 66 6f 6c 6c 6f 77 69 6e 67 20 73 79 6d 62 6f 6c  following symbol
140f0 69 63 20 76 61 6c 75 65 73 20 61 72 65 20 75 73  ic values are us
14100 65 64 20 74 6f 20 72 65 63 6f 72 64 20 77 68 69  ed to record whi
14110 63 68 20 74 79 70 65 0a 2a 2a 20 6f 66 20 61 63  ch type.** of ac
14120 74 69 6f 6e 20 74 6f 20 74 61 6b 65 2e 0a 2a 2f  tion to take..*/
14130 0a 23 64 65 66 69 6e 65 20 4f 45 5f 4e 6f 6e 65  .#define OE_None
14140 20 20 20 20 20 30 20 20 20 2f 2a 20 54 68 65 72       0   /* Ther
14150 65 20 69 73 20 6e 6f 20 63 6f 6e 73 74 72 61 69  e is no constrai
14160 6e 74 20 74 6f 20 63 68 65 63 6b 20 2a 2f 0a 23  nt to check */.#
14170 64 65 66 69 6e 65 20 4f 45 5f 52 6f 6c 6c 62 61  define OE_Rollba
14180 63 6b 20 31 20 20 20 2f 2a 20 46 61 69 6c 20 74  ck 1   /* Fail t
14190 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 6e 64  he operation and
141a0 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74 72   rollback the tr
141b0 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65  ansaction */.#de
141c0 66 69 6e 65 20 4f 45 5f 41 62 6f 72 74 20 20 20  fine OE_Abort   
141d0 20 32 20 20 20 2f 2a 20 42 61 63 6b 20 6f 75 74   2   /* Back out
141e0 20 63 68 61 6e 67 65 73 20 62 75 74 20 64 6f 20   changes but do 
141f0 6e 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61 6e  no rollback tran
14200 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  saction */.#defi
14210 6e 65 20 4f 45 5f 46 61 69 6c 20 20 20 20 20 33  ne OE_Fail     3
14220 20 20 20 2f 2a 20 53 74 6f 70 20 74 68 65 20 6f     /* Stop the o
14230 70 65 72 61 74 69 6f 6e 20 62 75 74 20 6c 65 61  peration but lea
14240 76 65 20 61 6c 6c 20 70 72 69 6f 72 20 63 68 61  ve all prior cha
14250 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  nges */.#define 
14260 4f 45 5f 49 67 6e 6f 72 65 20 20 20 34 20 20 20  OE_Ignore   4   
14270 2f 2a 20 49 67 6e 6f 72 65 20 74 68 65 20 65 72  /* Ignore the er
14280 72 6f 72 2e 20 44 6f 20 6e 6f 74 20 64 6f 20 74  ror. Do not do t
14290 68 65 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44  he INSERT or UPD
142a0 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ATE */.#define O
142b0 45 5f 52 65 70 6c 61 63 65 20 20 35 20 20 20 2f  E_Replace  5   /
142c0 2a 20 44 65 6c 65 74 65 20 65 78 69 73 74 69 6e  * Delete existin
142d0 67 20 72 65 63 6f 72 64 2c 20 74 68 65 6e 20 64  g record, then d
142e0 6f 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41  o INSERT or UPDA
142f0 54 45 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 4f  TE */..#define O
14300 45 5f 52 65 73 74 72 69 63 74 20 36 20 20 20 2f  E_Restrict 6   /
14310 2a 20 4f 45 5f 41 62 6f 72 74 20 66 6f 72 20 49  * OE_Abort for I
14320 4d 4d 45 44 49 41 54 45 2c 20 4f 45 5f 52 6f 6c  MMEDIATE, OE_Rol
14330 6c 62 61 63 6b 20 66 6f 72 20 44 45 46 45 52 52  lback for DEFERR
14340 45 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  ED */.#define OE
14350 5f 53 65 74 4e 75 6c 6c 20 20 37 20 20 20 2f 2a  _SetNull  7   /*
14360 20 53 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e   Set the foreign
14370 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 4e 55   key value to NU
14380 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  LL */.#define OE
14390 5f 53 65 74 44 66 6c 74 20 20 38 20 20 20 2f 2a  _SetDflt  8   /*
143a0 20 53 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e   Set the foreign
143b0 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 69 74   key value to it
143c0 73 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23 64 65  s default */.#de
143d0 66 69 6e 65 20 4f 45 5f 43 61 73 63 61 64 65 20  fine OE_Cascade 
143e0 20 39 20 20 20 2f 2a 20 43 61 73 63 61 64 65 20   9   /* Cascade 
143f0 74 68 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 0a  the changes */..
14400 23 64 65 66 69 6e 65 20 4f 45 5f 44 65 66 61 75  #define OE_Defau
14410 6c 74 20 20 31 30 20 20 2f 2a 20 44 6f 20 77 68  lt  10  /* Do wh
14420 61 74 65 76 65 72 20 74 68 65 20 64 65 66 61 75  atever the defau
14430 6c 74 20 61 63 74 69 6f 6e 20 69 73 20 2a 2f 0a  lt action is */.
14440 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
14450 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
14460 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 69  wing structure i
14470 73 20 70 61 73 73 65 64 20 61 73 20 74 68 65 20  s passed as the 
14480 66 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e  first.** argumen
14490 74 20 74 6f 20 73 71 6c 69 74 65 33 56 64 62 65  t to sqlite3Vdbe
144a0 4b 65 79 43 6f 6d 70 61 72 65 20 61 6e 64 20 69  KeyCompare and i
144b0 73 20 75 73 65 64 20 74 6f 20 63 6f 6e 74 72 6f  s used to contro
144c0 6c 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69  l the.** compari
144d0 73 6f 6e 20 6f 66 20 74 68 65 20 74 77 6f 20 69  son of the two i
144e0 6e 64 65 78 20 6b 65 79 73 2e 0a 2a 2a 0a 2a 2a  ndex keys..**.**
144f0 20 4e 6f 74 65 20 74 68 61 74 20 61 53 6f 72 74   Note that aSort
14500 4f 72 64 65 72 5b 5d 20 61 6e 64 20 61 43 6f 6c  Order[] and aCol
14510 6c 5b 5d 20 68 61 76 65 20 6e 46 69 65 6c 64 2b  l[] have nField+
14520 31 20 73 6c 6f 74 73 2e 20 20 54 68 65 72 65 0a  1 slots.  There.
14530 2a 2a 20 61 72 65 20 6e 46 69 65 6c 64 20 73 6c  ** are nField sl
14540 6f 74 73 20 66 6f 72 20 74 68 65 20 63 6f 6c 75  ots for the colu
14550 6d 6e 73 20 6f 66 20 61 6e 20 69 6e 64 65 78 20  mns of an index 
14560 74 68 65 6e 20 6f 6e 65 20 65 78 74 72 61 20 73  then one extra s
14570 6c 6f 74 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72  lot.** for the r
14580 6f 77 69 64 20 61 74 20 74 68 65 20 65 6e 64 2e  owid at the end.
14590 0a 2a 2f 0a 73 74 72 75 63 74 20 4b 65 79 49 6e  .*/.struct KeyIn
145a0 66 6f 20 7b 0a 20 20 75 33 32 20 6e 52 65 66 3b  fo {.  u32 nRef;
145b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
145c0 6d 62 65 72 20 6f 66 20 72 65 66 65 72 65 6e 63  mber of referenc
145d0 65 73 20 74 6f 20 74 68 69 73 20 4b 65 79 49 6e  es to this KeyIn
145e0 66 6f 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 75  fo object */.  u
145f0 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20  8 enc;          
14600 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64     /* Text encod
14610 69 6e 67 20 2d 20 6f 6e 65 20 6f 66 20 74 68 65  ing - one of the
14620 20 53 51 4c 49 54 45 5f 55 54 46 2a 20 76 61 6c   SQLITE_UTF* val
14630 75 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 4b 65  ues */.  u16 nKe
14640 79 46 69 65 6c 64 3b 20 20 20 20 20 20 2f 2a 20  yField;      /* 
14650 4e 75 6d 62 65 72 20 6f 66 20 6b 65 79 20 63 6f  Number of key co
14660 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 69 6e 64  lumns in the ind
14670 65 78 20 2a 2f 0a 20 20 75 31 36 20 6e 41 6c 6c  ex */.  u16 nAll
14680 46 69 65 6c 64 3b 20 20 20 20 20 20 2f 2a 20 54  Field;      /* T
14690 6f 74 61 6c 20 63 6f 6c 75 6d 6e 73 2c 20 69 6e  otal columns, in
146a0 63 6c 75 64 69 6e 67 20 6b 65 79 20 70 6c 75 73  cluding key plus
146b0 20 6f 74 68 65 72 73 20 2a 2f 0a 20 20 73 71 6c   others */.  sql
146c0 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20  ite3 *db;       
146d0 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65   /* The database
146e0 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20   connection */. 
146f0 20 75 38 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b   u8 *aSortOrder;
14700 20 20 20 20 20 2f 2a 20 53 6f 72 74 20 6f 72 64       /* Sort ord
14710 65 72 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75  er for each colu
14720 6d 6e 2e 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71  mn. */.  CollSeq
14730 20 2a 61 43 6f 6c 6c 5b 31 5d 3b 20 20 2f 2a 20   *aColl[1];  /* 
14740 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  Collating sequen
14750 63 65 20 66 6f 72 20 65 61 63 68 20 74 65 72 6d  ce for each term
14760 20 6f 66 20 74 68 65 20 6b 65 79 20 2a 2f 0a 7d   of the key */.}
14770 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6f 62  ;../*.** This ob
14780 6a 65 63 74 20 68 6f 6c 64 73 20 61 20 72 65 63  ject holds a rec
14790 6f 72 64 20 77 68 69 63 68 20 68 61 73 20 62 65  ord which has be
147a0 65 6e 20 70 61 72 73 65 64 20 6f 75 74 20 69 6e  en parsed out in
147b0 74 6f 20 69 6e 64 69 76 69 64 75 61 6c 0a 2a 2a  to individual.**
147c0 20 66 69 65 6c 64 73 2c 20 66 6f 72 20 74 68 65   fields, for the
147d0 20 70 75 72 70 6f 73 65 73 20 6f 66 20 64 6f 69   purposes of doi
147e0 6e 67 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 2e  ng a comparison.
147f0 0a 2a 2a 0a 2a 2a 20 41 20 72 65 63 6f 72 64 20  .**.** A record 
14800 69 73 20 61 6e 20 6f 62 6a 65 63 74 20 74 68 61  is an object tha
14810 74 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f  t contains one o
14820 72 20 6d 6f 72 65 20 66 69 65 6c 64 73 20 6f 66  r more fields of
14830 20 64 61 74 61 2e 0a 2a 2a 20 52 65 63 6f 72 64   data..** Record
14840 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 73 74  s are used to st
14850 6f 72 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  ore the content 
14860 6f 66 20 61 20 74 61 62 6c 65 20 72 6f 77 20 61  of a table row a
14870 6e 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74  nd to store.** t
14880 68 65 20 6b 65 79 20 6f 66 20 61 6e 20 69 6e 64  he key of an ind
14890 65 78 2e 20 20 41 20 62 6c 6f 62 20 65 6e 63 6f  ex.  A blob enco
148a0 64 69 6e 67 20 6f 66 20 61 20 72 65 63 6f 72 64  ding of a record
148b0 20 69 73 20 63 72 65 61 74 65 64 20 62 79 0a 2a   is created by.*
148c0 2a 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63  * the OP_MakeRec
148d0 6f 72 64 20 6f 70 63 6f 64 65 20 6f 66 20 74 68  ord opcode of th
148e0 65 20 56 44 42 45 20 61 6e 64 20 69 73 20 64 69  e VDBE and is di
148f0 73 61 73 73 65 6d 62 6c 65 64 20 62 79 20 74 68  sassembled by th
14900 65 0a 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f  e.** OP_Column o
14910 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20  pcode..**.** An 
14920 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
14930 20 6f 62 6a 65 63 74 20 73 65 72 76 65 73 20 61   object serves a
14940 73 20 61 20 22 6b 65 79 22 20 66 6f 72 20 64 6f  s a "key" for do
14950 69 6e 67 20 61 20 73 65 61 72 63 68 20 6f 6e 0a  ing a search on.
14960 2a 2a 20 61 6e 20 69 6e 64 65 78 20 62 2b 74 72  ** an index b+tr
14970 65 65 2e 20 54 68 65 20 67 6f 61 6c 20 6f 66 20  ee. The goal of 
14980 74 68 65 20 73 65 61 72 63 68 20 69 73 20 74 6f  the search is to
14990 20 66 69 6e 64 20 74 68 65 20 65 6e 74 72 79 20   find the entry 
149a0 74 68 61 74 0a 2a 2a 20 69 73 20 63 6c 6f 73 65  that.** is close
149b0 64 20 74 6f 20 74 68 65 20 6b 65 79 20 64 65 73  d to the key des
149c0 63 72 69 62 65 64 20 62 79 20 74 68 69 73 20 6f  cribed by this o
149d0 62 6a 65 63 74 2e 20 20 54 68 69 73 20 6f 62 6a  bject.  This obj
149e0 65 63 74 20 6d 69 67 68 74 20 68 6f 6c 64 0a 2a  ect might hold.*
149f0 2a 20 6a 75 73 74 20 61 20 70 72 65 66 69 78 20  * just a prefix 
14a00 6f 66 20 74 68 65 20 6b 65 79 2e 20 20 54 68 65  of the key.  The
14a10 20 6e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64   number of field
14a20 73 20 69 73 20 67 69 76 65 6e 20 62 79 0a 2a 2a  s is given by.**
14a30 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c   pKeyInfo->nFiel
14a40 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 31 20  d..**.** The r1 
14a50 61 6e 64 20 72 32 20 66 69 65 6c 64 73 20 61 72  and r2 fields ar
14a60 65 20 74 68 65 20 76 61 6c 75 65 73 20 74 6f 20  e the values to 
14a70 72 65 74 75 72 6e 20 69 66 20 74 68 69 73 20 6b  return if this k
14a80 65 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 0a  ey is less than.
14a90 2a 2a 20 6f 72 20 67 72 65 61 74 65 72 20 74 68  ** or greater th
14aa0 61 6e 20 61 20 6b 65 79 20 69 6e 20 74 68 65 20  an a key in the 
14ab0 62 74 72 65 65 2c 20 72 65 73 70 65 63 74 69 76  btree, respectiv
14ac0 65 6c 79 2e 20 20 54 68 65 73 65 20 61 72 65 20  ely.  These are 
14ad0 6e 6f 72 6d 61 6c 6c 79 0a 2a 2a 20 2d 31 20 61  normally.** -1 a
14ae0 6e 64 20 2b 31 20 72 65 73 70 65 63 74 69 76 65  nd +1 respective
14af0 6c 79 2c 20 62 75 74 20 6d 69 67 68 74 20 62 65  ly, but might be
14b00 20 69 6e 76 65 72 74 65 64 20 74 6f 20 2b 31 20   inverted to +1 
14b10 61 6e 64 20 2d 31 20 69 66 20 74 68 65 20 62 2d  and -1 if the b-
14b20 74 72 65 65 0a 2a 2a 20 69 73 20 69 6e 20 44 45  tree.** is in DE
14b30 53 43 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20  SC order..**.** 
14b40 54 68 65 20 6b 65 79 20 63 6f 6d 70 61 72 69 73  The key comparis
14b50 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20 61 63 74  on functions act
14b60 75 61 6c 6c 79 20 72 65 74 75 72 6e 20 64 65 66  ually return def
14b70 61 75 6c 74 5f 72 63 20 77 68 65 6e 20 74 68 65  ault_rc when the
14b80 79 20 66 69 6e 64 0a 2a 2a 20 61 6e 20 65 71 75  y find.** an equ
14b90 61 6c 73 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  als comparison. 
14ba0 20 64 65 66 61 75 6c 74 5f 72 63 20 63 61 6e 20   default_rc can 
14bb0 62 65 20 2d 31 2c 20 30 2c 20 6f 72 20 2b 31 2e  be -1, 0, or +1.
14bc0 20 20 49 66 20 74 68 65 72 65 20 61 72 65 0a 2a    If there are.*
14bd0 2a 20 6d 75 6c 74 69 70 6c 65 20 65 6e 74 72 69  * multiple entri
14be0 65 73 20 69 6e 20 74 68 65 20 62 2d 74 72 65 65  es in the b-tree
14bf0 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 6b   with the same k
14c00 65 79 20 28 77 68 65 6e 20 6f 6e 6c 79 20 6c 6f  ey (when only lo
14c10 6f 6b 69 6e 67 0a 2a 2a 20 61 74 20 74 68 65 20  oking.** at the 
14c20 66 69 72 73 74 20 70 4b 65 79 49 6e 66 6f 2d 3e  first pKeyInfo->
14c30 6e 46 69 65 6c 64 73 2c 29 20 74 68 65 6e 20 64  nFields,) then d
14c40 65 66 61 75 6c 74 5f 72 63 20 63 61 6e 20 62 65  efault_rc can be
14c50 20 73 65 74 20 74 6f 20 2d 31 20 74 6f 0a 2a 2a   set to -1 to.**
14c60 20 63 61 75 73 65 20 74 68 65 20 73 65 61 72 63   cause the searc
14c70 68 20 74 6f 20 66 69 6e 64 20 74 68 65 20 6c 61  h to find the la
14c80 73 74 20 6d 61 74 63 68 2c 20 6f 72 20 2b 31 20  st match, or +1 
14c90 74 6f 20 63 61 75 73 65 20 74 68 65 20 73 65 61  to cause the sea
14ca0 72 63 68 20 74 6f 0a 2a 2a 20 66 69 6e 64 20 74  rch to.** find t
14cb0 68 65 20 66 69 72 73 74 20 6d 61 74 63 68 2e 0a  he first match..
14cc0 2a 2a 0a 2a 2a 20 54 68 65 20 6b 65 79 20 63 6f  **.** The key co
14cd0 6d 70 61 72 69 73 6f 6e 20 66 75 6e 63 74 69 6f  mparison functio
14ce0 6e 73 20 77 69 6c 6c 20 73 65 74 20 65 71 53 65  ns will set eqSe
14cf0 65 6e 20 74 6f 20 74 72 75 65 20 69 66 20 74 68  en to true if th
14d00 65 79 20 65 76 65 72 0a 2a 2a 20 67 65 74 20 61  ey ever.** get a
14d10 6e 64 20 65 71 75 61 6c 20 72 65 73 75 6c 74 73  nd equal results
14d20 20 77 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67 20   when comparing 
14d30 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 74  this structure t
14d40 6f 20 61 20 62 2d 74 72 65 65 20 72 65 63 6f 72  o a b-tree recor
14d50 64 2e 0a 2a 2a 20 57 68 65 6e 20 64 65 66 61 75  d..** When defau
14d60 6c 74 5f 72 63 21 3d 30 2c 20 74 68 65 20 73 65  lt_rc!=0, the se
14d70 61 72 63 68 20 6d 69 67 68 74 20 65 6e 64 20 75  arch might end u
14d80 70 20 6f 6e 20 74 68 65 20 72 65 63 6f 72 64 20  p on the record 
14d90 69 6d 6d 65 64 69 61 74 65 6c 79 0a 2a 2a 20 62  immediately.** b
14da0 65 66 6f 72 65 20 74 68 65 20 66 69 72 73 74 20  efore the first 
14db0 6d 61 74 63 68 20 6f 72 20 69 6d 6d 65 64 69 61  match or immedia
14dc0 74 65 6c 79 20 61 66 74 65 72 20 74 68 65 20 6c  tely after the l
14dd0 61 73 74 20 6d 61 74 63 68 2e 20 20 54 68 65 0a  ast match.  The.
14de0 2a 2a 20 65 71 53 65 65 6e 20 66 69 65 6c 64 20  ** eqSeen field 
14df0 77 69 6c 6c 20 69 6e 64 69 63 61 74 65 20 77 68  will indicate wh
14e00 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 6e 20  ether or not an 
14e10 65 78 61 63 74 20 6d 61 74 63 68 20 65 78 69 73  exact match exis
14e20 74 73 20 69 6e 20 74 68 65 0a 2a 2a 20 62 2d 74  ts in the.** b-t
14e30 72 65 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 55  ree..*/.struct U
14e40 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 7b 0a  npackedRecord {.
14e50 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49    KeyInfo *pKeyI
14e60 6e 66 6f 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69  nfo;  /* Collati
14e70 6f 6e 20 61 6e 64 20 73 6f 72 74 2d 6f 72 64 65  on and sort-orde
14e80 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f  r information */
14e90 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d 3b 20 20 20  .  Mem *aMem;   
14ea0 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 73         /* Values
14eb0 20 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c 64   */.  u16 nField
14ec0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
14ed0 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69  ber of entries i
14ee0 6e 20 61 70 4d 65 6d 5b 5d 20 2a 2f 0a 20 20 69  n apMem[] */.  i
14ef0 38 20 64 65 66 61 75 6c 74 5f 72 63 3b 20 20 20  8 default_rc;   
14f00 20 20 20 2f 2a 20 43 6f 6d 70 61 72 69 73 6f 6e     /* Comparison
14f10 20 72 65 73 75 6c 74 20 69 66 20 6b 65 79 73 20   result if keys 
14f20 61 72 65 20 65 71 75 61 6c 20 2a 2f 0a 20 20 75  are equal */.  u
14f30 38 20 65 72 72 43 6f 64 65 3b 20 20 20 20 20 20  8 errCode;      
14f40 20 20 20 2f 2a 20 45 72 72 6f 72 20 64 65 74 65     /* Error dete
14f50 63 74 65 64 20 62 79 20 78 52 65 63 6f 72 64 43  cted by xRecordC
14f60 6f 6d 70 61 72 65 20 28 43 4f 52 52 55 50 54 20  ompare (CORRUPT 
14f70 6f 72 20 4e 4f 4d 45 4d 29 20 2a 2f 0a 20 20 69  or NOMEM) */.  i
14f80 38 20 72 31 3b 20 20 20 20 20 20 20 20 20 20 20  8 r1;           
14f90 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72     /* Value to r
14fa0 65 74 75 72 6e 20 69 66 20 28 6c 68 73 20 3c 20  eturn if (lhs < 
14fb0 72 68 73 29 20 2a 2f 0a 20 20 69 38 20 72 32 3b  rhs) */.  i8 r2;
14fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
14fd0 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e   Value to return
14fe0 20 69 66 20 28 6c 68 73 20 3e 20 72 68 73 29 20   if (lhs > rhs) 
14ff0 2a 2f 0a 20 20 75 38 20 65 71 53 65 65 6e 3b 20  */.  u8 eqSeen; 
15000 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
15010 20 69 66 20 61 6e 20 65 71 75 61 6c 69 74 79 20   if an equality 
15020 63 6f 6d 70 61 72 69 73 6f 6e 20 68 61 73 20 62  comparison has b
15030 65 65 6e 20 73 65 65 6e 20 2a 2f 0a 7d 3b 0a 0a  een seen */.};..
15040 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20  ./*.** Each SQL 
15050 69 6e 64 65 78 20 69 73 20 72 65 70 72 65 73 65  index is represe
15060 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 62  nted in memory b
15070 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65  y an.** instance
15080 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
15090 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a  g structure..**.
150a0 2a 2a 20 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f  ** The columns o
150b0 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  f the table that
150c0 20 61 72 65 20 74 6f 20 62 65 20 69 6e 64 65 78   are to be index
150d0 65 64 20 61 72 65 20 64 65 73 63 72 69 62 65 64  ed are described
150e0 0a 2a 2a 20 62 79 20 74 68 65 20 61 69 43 6f 6c  .** by the aiCol
150f0 75 6d 6e 5b 5d 20 66 69 65 6c 64 20 6f 66 20 74  umn[] field of t
15100 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20  his structure.  
15110 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 73 75 70  For example, sup
15120 70 6f 73 65 0a 2a 2a 20 77 65 20 68 61 76 65 20  pose.** we have 
15130 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 61  the following ta
15140 62 6c 65 20 61 6e 64 20 69 6e 64 65 78 3a 0a 2a  ble and index:.*
15150 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20  *.**     CREATE 
15160 54 41 42 4c 45 20 45 78 31 28 63 31 20 69 6e 74  TABLE Ex1(c1 int
15170 2c 20 63 32 20 69 6e 74 2c 20 63 33 20 74 65 78  , c2 int, c3 tex
15180 74 29 3b 0a 2a 2a 20 20 20 20 20 43 52 45 41 54  t);.**     CREAT
15190 45 20 49 4e 44 45 58 20 45 78 32 20 4f 4e 20 45  E INDEX Ex2 ON E
151a0 78 31 28 63 33 2c 63 31 29 3b 0a 2a 2a 0a 2a 2a  x1(c3,c1);.**.**
151b0 20 49 6e 20 74 68 65 20 54 61 62 6c 65 20 73 74   In the Table st
151c0 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62 69  ructure describi
151d0 6e 67 20 45 78 31 2c 20 6e 43 6f 6c 3d 3d 33 20  ng Ex1, nCol==3 
151e0 62 65 63 61 75 73 65 20 74 68 65 72 65 20 61 72  because there ar
151f0 65 0a 2a 2a 20 74 68 72 65 65 20 63 6f 6c 75 6d  e.** three colum
15200 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e  ns in the table.
15210 20 20 49 6e 20 74 68 65 20 49 6e 64 65 78 20 73    In the Index s
15220 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62  tructure describ
15230 69 6e 67 0a 2a 2a 20 45 78 32 2c 20 6e 43 6f 6c  ing.** Ex2, nCol
15240 75 6d 6e 3d 3d 32 20 73 69 6e 63 65 20 32 20 6f  umn==2 since 2 o
15250 66 20 74 68 65 20 33 20 63 6f 6c 75 6d 6e 73 20  f the 3 columns 
15260 6f 66 20 45 78 31 20 61 72 65 20 69 6e 64 65 78  of Ex1 are index
15270 65 64 2e 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65  ed..** The value
15280 20 6f 66 20 61 69 43 6f 6c 75 6d 6e 20 69 73 20   of aiColumn is 
15290 7b 32 2c 20 30 7d 2e 20 20 61 69 43 6f 6c 75 6d  {2, 0}.  aiColum
152a0 6e 5b 30 5d 3d 3d 32 20 62 65 63 61 75 73 65 20  n[0]==2 because 
152b0 74 68 65 0a 2a 2a 20 66 69 72 73 74 20 63 6f 6c  the.** first col
152c0 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65  umn to be indexe
152d0 64 20 28 63 33 29 20 68 61 73 20 61 6e 20 69 6e  d (c3) has an in
152e0 64 65 78 20 6f 66 20 32 20 69 6e 20 45 78 31 2e  dex of 2 in Ex1.
152f0 61 43 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68 65 20 73  aCol[]..** The s
15300 65 63 6f 6e 64 20 63 6f 6c 75 6d 6e 20 74 6f 20  econd column to 
15310 62 65 20 69 6e 64 65 78 65 64 20 28 63 31 29 20  be indexed (c1) 
15320 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20  has an index of 
15330 30 20 69 6e 0a 2a 2a 20 45 78 31 2e 61 43 6f 6c  0 in.** Ex1.aCol
15340 5b 5d 2c 20 68 65 6e 63 65 20 45 78 32 2e 61 69  [], hence Ex2.ai
15350 43 6f 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a 2a  Column[1]==0..**
15360 0a 2a 2a 20 54 68 65 20 49 6e 64 65 78 2e 6f 6e  .** The Index.on
15370 45 72 72 6f 72 20 66 69 65 6c 64 20 64 65 74 65  Error field dete
15380 72 6d 69 6e 65 73 20 77 68 65 74 68 65 72 20 6f  rmines whether o
15390 72 20 6e 6f 74 20 74 68 65 20 69 6e 64 65 78 65  r not the indexe
153a0 64 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d 75 73  d columns.** mus
153b0 74 20 62 65 20 75 6e 69 71 75 65 20 61 6e 64 20  t be unique and 
153c0 77 68 61 74 20 74 6f 20 64 6f 20 69 66 20 74 68  what to do if th
153d0 65 79 20 61 72 65 20 6e 6f 74 2e 20 20 57 68 65  ey are not.  Whe
153e0 6e 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 3d  n Index.onError=
153f0 4f 45 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69 74 20 6d  OE_None,.** it m
15400 65 61 6e 73 20 74 68 69 73 20 69 73 20 6e 6f 74  eans this is not
15410 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78 2e   a unique index.
15420 20 20 4f 74 68 65 72 77 69 73 65 20 69 74 20 69    Otherwise it i
15430 73 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78  s a unique index
15440 0a 2a 2a 20 61 6e 64 20 74 68 65 20 76 61 6c 75  .** and the valu
15450 65 20 6f 66 20 49 6e 64 65 78 2e 6f 6e 45 72 72  e of Index.onErr
15460 6f 72 20 69 6e 64 69 63 61 74 65 20 74 68 65 20  or indicate the 
15470 77 68 69 63 68 20 63 6f 6e 66 6c 69 63 74 20 72  which conflict r
15480 65 73 6f 6c 75 74 69 6f 6e 0a 2a 2a 20 61 6c 67  esolution.** alg
15490 6f 72 69 74 68 6d 20 74 6f 20 65 6d 70 6c 6f 79  orithm to employ
154a0 20 77 68 65 6e 65 76 65 72 20 61 6e 20 61 74 74   whenever an att
154b0 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74 6f 20  empt is made to 
154c0 69 6e 73 65 72 74 20 61 20 6e 6f 6e 2d 75 6e 69  insert a non-uni
154d0 71 75 65 0a 2a 2a 20 65 6c 65 6d 65 6e 74 2e 0a  que.** element..
154e0 2a 2a 0a 2a 2a 20 57 68 69 6c 65 20 70 61 72 73  **.** While pars
154f0 69 6e 67 20 61 20 43 52 45 41 54 45 20 54 41 42  ing a CREATE TAB
15500 4c 45 20 6f 72 20 43 52 45 41 54 45 20 49 4e 44  LE or CREATE IND
15510 45 58 20 73 74 61 74 65 6d 65 6e 74 20 69 6e 20  EX statement in 
15520 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67 65 6e 65  order to.** gene
15530 72 61 74 65 20 56 44 42 45 20 63 6f 64 65 20 28  rate VDBE code (
15540 61 73 20 6f 70 70 6f 73 65 64 20 74 6f 20 70 61  as opposed to pa
15550 72 73 69 6e 67 20 6f 6e 65 20 72 65 61 64 20 66  rsing one read f
15560 72 6f 6d 20 61 6e 20 73 71 6c 69 74 65 5f 6d 61  rom an sqlite_ma
15570 73 74 65 72 0a 2a 2a 20 74 61 62 6c 65 20 61 73  ster.** table as
15580 20 70 61 72 74 20 6f 66 20 70 61 72 73 69 6e 67   part of parsing
15590 20 61 6e 20 65 78 69 73 74 69 6e 67 20 64 61 74   an existing dat
155a0 61 62 61 73 65 20 73 63 68 65 6d 61 29 2c 20 74  abase schema), t
155b0 72 61 6e 73 69 65 6e 74 20 69 6e 73 74 61 6e 63  ransient instanc
155c0 65 73 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74  es.** of this st
155d0 72 75 63 74 75 72 65 20 6d 61 79 20 62 65 20 63  ructure may be c
155e0 72 65 61 74 65 64 2e 20 49 6e 20 74 68 69 73 20  reated. In this 
155f0 63 61 73 65 20 74 68 65 20 49 6e 64 65 78 2e 74  case the Index.t
15600 6e 75 6d 20 76 61 72 69 61 62 6c 65 20 69 73 0a  num variable is.
15610 2a 2a 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  ** used to store
15620 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20   the address of 
15630 61 20 56 44 42 45 20 69 6e 73 74 72 75 63 74 69  a VDBE instructi
15640 6f 6e 2c 20 6e 6f 74 20 61 20 64 61 74 61 62 61  on, not a databa
15650 73 65 20 70 61 67 65 0a 2a 2a 20 6e 75 6d 62 65  se page.** numbe
15660 72 20 28 69 74 20 63 61 6e 6e 6f 74 20 2d 20 74  r (it cannot - t
15670 68 65 20 64 61 74 61 62 61 73 65 20 70 61 67 65  he database page
15680 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 63 61 74 65   is not allocate
15690 64 20 75 6e 74 69 6c 20 74 68 65 20 56 44 42 45  d until the VDBE
156a0 0a 2a 2a 20 70 72 6f 67 72 61 6d 20 69 73 20 65  .** program is e
156b0 78 65 63 75 74 65 64 29 2e 20 53 65 65 20 63 6f  xecuted). See co
156c0 6e 76 65 72 74 54 6f 57 69 74 68 6f 75 74 52 6f  nvertToWithoutRo
156d0 77 69 64 54 61 62 6c 65 28 29 20 66 6f 72 20 64  widTable() for d
156e0 65 74 61 69 6c 73 2e 0a 2a 2f 0a 73 74 72 75 63  etails..*/.struc
156f0 74 20 49 6e 64 65 78 20 7b 0a 20 20 63 68 61 72  t Index {.  char
15700 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
15710 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
15720 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20  this index */.  
15730 69 31 36 20 2a 61 69 43 6f 6c 75 6d 6e 3b 20 20  i16 *aiColumn;  
15740 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63           /* Whic
15750 68 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73  h columns are us
15760 65 64 20 62 79 20 74 68 69 73 20 69 6e 64 65 78  ed by this index
15770 2e 20 20 31 73 74 20 69 73 20 30 20 2a 2f 0a 20  .  1st is 0 */. 
15780 20 4c 6f 67 45 73 74 20 2a 61 69 52 6f 77 4c 6f   LogEst *aiRowLo
15790 67 45 73 74 3b 20 20 20 20 20 2f 2a 20 46 72 6f  gEst;     /* Fro
157a0 6d 20 41 4e 41 4c 59 5a 45 3a 20 45 73 74 2e 20  m ANALYZE: Est. 
157b0 72 6f 77 73 20 73 65 6c 65 63 74 65 64 20 62 79  rows selected by
157c0 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   each column */.
157d0 20 20 54 61 62 6c 65 20 2a 70 54 61 62 6c 65 3b    Table *pTable;
157e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
157f0 65 20 53 51 4c 20 74 61 62 6c 65 20 62 65 69 6e  e SQL table bein
15800 67 20 69 6e 64 65 78 65 64 20 2a 2f 0a 20 20 63  g indexed */.  c
15810 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20  har *zColAff;   
15820 20 20 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e          /* Strin
15830 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61  g defining the a
15840 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20  ffinity of each 
15850 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65  column */.  Inde
15860 78 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20  x *pNext;       
15870 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74       /* The next
15880 20 69 6e 64 65 78 20 61 73 73 6f 63 69 61 74 65   index associate
15890 64 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  d with the same 
158a0 74 61 62 6c 65 20 2a 2f 0a 20 20 53 63 68 65 6d  table */.  Schem
158b0 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20  a *pSchema;     
158c0 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f      /* Schema co
158d0 6e 74 61 69 6e 69 6e 67 20 74 68 69 73 20 69 6e  ntaining this in
158e0 64 65 78 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f  dex */.  u8 *aSo
158f0 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20  rtOrder;        
15900 20 20 2f 2a 20 66 6f 72 20 65 61 63 68 20 63 6f    /* for each co
15910 6c 75 6d 6e 3a 20 54 72 75 65 3d 3d 44 45 53 43  lumn: True==DESC
15920 2c 20 46 61 6c 73 65 3d 3d 41 53 43 20 2a 2f 0a  , False==ASC */.
15930 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2a 61    const char **a
15940 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 41 72  zColl;     /* Ar
15950 72 61 79 20 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e  ray of collation
15960 20 73 65 71 75 65 6e 63 65 20 6e 61 6d 65 73 20   sequence names 
15970 66 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20 45  for index */.  E
15980 78 70 72 20 2a 70 50 61 72 74 49 64 78 57 68 65  xpr *pPartIdxWhe
15990 72 65 3b 20 20 20 20 20 2f 2a 20 57 48 45 52 45  re;     /* WHERE
159a0 20 63 6c 61 75 73 65 20 66 6f 72 20 70 61 72 74   clause for part
159b0 69 61 6c 20 69 6e 64 69 63 65 73 20 2a 2f 0a 20  ial indices */. 
159c0 20 45 78 70 72 4c 69 73 74 20 2a 61 43 6f 6c 45   ExprList *aColE
159d0 78 70 72 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6c  xpr;      /* Col
159e0 75 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e 73 20  umn expressions 
159f0 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20  */.  int tnum;  
15a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
15a10 20 44 42 20 50 61 67 65 20 63 6f 6e 74 61 69 6e   DB Page contain
15a20 69 6e 67 20 72 6f 6f 74 20 6f 66 20 74 68 69 73  ing root of this
15a30 20 69 6e 64 65 78 20 2a 2f 0a 20 20 4c 6f 67 45   index */.  LogE
15a40 73 74 20 73 7a 49 64 78 52 6f 77 3b 20 20 20 20  st szIdxRow;    
15a50 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65       /* Estimate
15a60 64 20 61 76 65 72 61 67 65 20 72 6f 77 20 73 69  d average row si
15a70 7a 65 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20  ze in bytes */. 
15a80 20 75 31 36 20 6e 4b 65 79 43 6f 6c 3b 20 20 20   u16 nKeyCol;   
15a90 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
15aa0 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 66  ber of columns f
15ab0 6f 72 6d 69 6e 67 20 74 68 65 20 6b 65 79 20 2a  orming the key *
15ac0 2f 0a 20 20 75 31 36 20 6e 43 6f 6c 75 6d 6e 3b  /.  u16 nColumn;
15ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
15ae0 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  Number of column
15af0 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  s stored in the 
15b00 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20 6f 6e  index */.  u8 on
15b10 45 72 72 6f 72 3b 20 20 20 20 20 20 20 20 20 20  Error;          
15b20 20 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 2c      /* OE_Abort,
15b30 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 4f 45 5f 52   OE_Ignore, OE_R
15b40 65 70 6c 61 63 65 2c 20 6f 72 20 4f 45 5f 4e 6f  eplace, or OE_No
15b50 6e 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  ne */.  unsigned
15b60 20 69 64 78 54 79 70 65 3a 32 3b 20 20 20 20 20   idxType:2;     
15b70 20 2f 2a 20 31 3d 3d 55 4e 49 51 55 45 2c 20 32   /* 1==UNIQUE, 2
15b80 3d 3d 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 30  ==PRIMARY KEY, 0
15b90 3d 3d 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a  ==CREATE INDEX *
15ba0 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 62 55 6e  /.  unsigned bUn
15bb0 6f 72 64 65 72 65 64 3a 31 3b 20 20 20 2f 2a 20  ordered:1;   /* 
15bc0 55 73 65 20 74 68 69 73 20 69 6e 64 65 78 20 66  Use this index f
15bd0 6f 72 20 3d 3d 20 6f 72 20 49 4e 20 71 75 65 72  or == or IN quer
15be0 69 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 75 6e  ies only */.  un
15bf0 73 69 67 6e 65 64 20 75 6e 69 71 4e 6f 74 4e 75  signed uniqNotNu
15c00 6c 6c 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69  ll:1;  /* True i
15c10 66 20 55 4e 49 51 55 45 20 61 6e 64 20 4e 4f 54  f UNIQUE and NOT
15c20 20 4e 55 4c 4c 20 66 6f 72 20 61 6c 6c 20 63 6f   NULL for all co
15c30 6c 75 6d 6e 73 20 2a 2f 0a 20 20 75 6e 73 69 67  lumns */.  unsig
15c40 6e 65 64 20 69 73 52 65 73 69 7a 65 64 3a 31 3b  ned isResized:1;
15c50 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72      /* True if r
15c60 65 73 69 7a 65 49 6e 64 65 78 4f 62 6a 65 63 74  esizeIndexObject
15c70 28 29 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c  () has been call
15c80 65 64 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  ed */.  unsigned
15c90 20 69 73 43 6f 76 65 72 69 6e 67 3a 31 3b 20 20   isCovering:1;  
15ca0 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 69 73   /* True if this
15cb0 20 69 73 20 61 20 63 6f 76 65 72 69 6e 67 20 69   is a covering i
15cc0 6e 64 65 78 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  ndex */.  unsign
15cd0 65 64 20 6e 6f 53 6b 69 70 53 63 61 6e 3a 31 3b  ed noSkipScan:1;
15ce0 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 74 72 79     /* Do not try
15cf0 20 74 6f 20 75 73 65 20 73 6b 69 70 2d 73 63 61   to use skip-sca
15d00 6e 20 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75  n if true */.  u
15d10 6e 73 69 67 6e 65 64 20 68 61 73 53 74 61 74 31  nsigned hasStat1
15d20 3a 31 3b 20 20 20 20 20 2f 2a 20 61 69 52 6f 77  :1;     /* aiRow
15d30 4c 6f 67 45 73 74 20 76 61 6c 75 65 73 20 63 6f  LogEst values co
15d40 6d 65 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73  me from sqlite_s
15d50 74 61 74 31 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  tat1 */.  unsign
15d60 65 64 20 62 4e 6f 51 75 65 72 79 3a 31 3b 20 20  ed bNoQuery:1;  
15d70 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 75 73 65     /* Do not use
15d80 20 74 68 69 73 20 69 6e 64 65 78 20 74 6f 20 6f   this index to o
15d90 70 74 69 6d 69 7a 65 20 71 75 65 72 69 65 73 20  ptimize queries 
15da0 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
15db0 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52  _ENABLE_STAT3_OR
15dc0 5f 53 54 41 54 34 0a 20 20 69 6e 74 20 6e 53 61  _STAT4.  int nSa
15dd0 6d 70 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  mple;           
15de0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
15df0 6c 65 6d 65 6e 74 73 20 69 6e 20 61 53 61 6d 70  lements in aSamp
15e00 6c 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  le[] */.  int nS
15e10 61 6d 70 6c 65 43 6f 6c 3b 20 20 20 20 20 20 20  ampleCol;       
15e20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 49 6e     /* Size of In
15e30 64 65 78 53 61 6d 70 6c 65 2e 61 6e 45 71 5b 5d  dexSample.anEq[]
15e40 20 61 6e 64 20 73 6f 20 6f 6e 20 2a 2f 0a 20 20   and so on */.  
15e50 74 52 6f 77 63 6e 74 20 2a 61 41 76 67 45 71 3b  tRowcnt *aAvgEq;
15e60 20 20 20 20 20 20 20 20 20 2f 2a 20 41 76 65 72           /* Aver
15e70 61 67 65 20 6e 45 71 20 76 61 6c 75 65 73 20 66  age nEq values f
15e80 6f 72 20 6b 65 79 73 20 6e 6f 74 20 69 6e 20 61  or keys not in a
15e90 53 61 6d 70 6c 65 20 2a 2f 0a 20 20 49 6e 64 65  Sample */.  Inde
15ea0 78 53 61 6d 70 6c 65 20 2a 61 53 61 6d 70 6c 65  xSample *aSample
15eb0 3b 20 20 20 20 2f 2a 20 53 61 6d 70 6c 65 73 20  ;    /* Samples 
15ec0 6f 66 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74  of the left-most
15ed0 20 6b 65 79 20 2a 2f 0a 20 20 74 52 6f 77 63 6e   key */.  tRowcn
15ee0 74 20 2a 61 69 52 6f 77 45 73 74 3b 20 20 20 20  t *aiRowEst;    
15ef0 20 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61 72 69     /* Non-logari
15f00 74 68 6d 69 63 20 73 74 61 74 31 20 64 61 74 61  thmic stat1 data
15f10 20 66 6f 72 20 74 68 69 73 20 69 6e 64 65 78 20   for this index 
15f20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 6e 52 6f  */.  tRowcnt nRo
15f30 77 45 73 74 30 3b 20 20 20 20 20 20 20 20 2f 2a  wEst0;        /*
15f40 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d 69 63   Non-logarithmic
15f50 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
15f60 69 6e 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a  in the index */.
15f70 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  #endif.};../*.**
15f80 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
15f90 66 6f 72 20 49 6e 64 65 78 2e 69 64 78 54 79 70  for Index.idxTyp
15fa0 65 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e.*/.#define SQL
15fb0 49 54 45 5f 49 44 58 54 59 50 45 5f 41 50 50 44  ITE_IDXTYPE_APPD
15fc0 45 46 20 20 20 20 20 20 30 20 20 20 2f 2a 20 43  EF      0   /* C
15fd0 72 65 61 74 65 64 20 75 73 69 6e 67 20 43 52 45  reated using CRE
15fe0 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a 23 64 65  ATE INDEX */.#de
15ff0 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54  fine SQLITE_IDXT
16000 59 50 45 5f 55 4e 49 51 55 45 20 20 20 20 20 20  YPE_UNIQUE      
16010 31 20 20 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74  1   /* Implement
16020 73 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74  s a UNIQUE const
16030 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  raint */.#define
16040 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f   SQLITE_IDXTYPE_
16050 50 52 49 4d 41 52 59 4b 45 59 20 20 32 20 20 20  PRIMARYKEY  2   
16060 2f 2a 20 49 73 20 74 68 65 20 50 52 49 4d 41 52  /* Is the PRIMAR
16070 59 20 4b 45 59 20 66 6f 72 20 74 68 65 20 74 61  Y KEY for the ta
16080 62 6c 65 20 2a 2f 0a 0a 2f 2a 20 52 65 74 75 72  ble */../* Retur
16090 6e 20 74 72 75 65 20 69 66 20 69 6e 64 65 78 20  n true if index 
160a0 58 20 69 73 20 61 20 50 52 49 4d 41 52 59 20 4b  X is a PRIMARY K
160b0 45 59 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66  EY index */.#def
160c0 69 6e 65 20 49 73 50 72 69 6d 61 72 79 4b 65 79  ine IsPrimaryKey
160d0 49 6e 64 65 78 28 58 29 20 20 28 28 58 29 2d 3e  Index(X)  ((X)->
160e0 69 64 78 54 79 70 65 3d 3d 53 51 4c 49 54 45 5f  idxType==SQLITE_
160f0 49 44 58 54 59 50 45 5f 50 52 49 4d 41 52 59 4b  IDXTYPE_PRIMARYK
16100 45 59 29 0a 0a 2f 2a 20 52 65 74 75 72 6e 20 74  EY)../* Return t
16110 72 75 65 20 69 66 20 69 6e 64 65 78 20 58 20 69  rue if index X i
16120 73 20 61 20 55 4e 49 51 55 45 20 69 6e 64 65 78  s a UNIQUE index
16130 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 55 6e   */.#define IsUn
16140 69 71 75 65 49 6e 64 65 78 28 58 29 20 20 20 20  iqueIndex(X)    
16150 20 20 28 28 58 29 2d 3e 6f 6e 45 72 72 6f 72 21    ((X)->onError!
16160 3d 4f 45 5f 4e 6f 6e 65 29 0a 0a 2f 2a 20 54 68  =OE_None)../* Th
16170 65 20 49 6e 64 65 78 2e 61 69 43 6f 6c 75 6d 6e  e Index.aiColumn
16180 5b 5d 20 76 61 6c 75 65 73 20 61 72 65 20 6e 6f  [] values are no
16190 72 6d 61 6c 6c 79 20 70 6f 73 69 74 69 76 65 20  rmally positive 
161a0 69 6e 74 65 67 65 72 2e 20 20 42 75 74 0a 2a 2a  integer.  But.**
161b0 20 74 68 65 72 65 20 61 72 65 20 73 6f 6d 65 20   there are some 
161c0 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65 73 20  negative values 
161d0 74 68 61 74 20 68 61 76 65 20 73 70 65 63 69 61  that have specia
161e0 6c 20 6d 65 61 6e 69 6e 67 3a 0a 2a 2f 0a 23 64  l meaning:.*/.#d
161f0 65 66 69 6e 65 20 58 4e 5f 52 4f 57 49 44 20 20  efine XN_ROWID  
16200 20 20 20 28 2d 31 29 20 20 20 20 20 2f 2a 20 49     (-1)     /* I
16210 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 20 69 73  ndexed column is
16220 20 74 68 65 20 72 6f 77 69 64 20 2a 2f 0a 23 64   the rowid */.#d
16230 65 66 69 6e 65 20 58 4e 5f 45 58 50 52 20 20 20  efine XN_EXPR   
16240 20 20 20 28 2d 32 29 20 20 20 20 20 2f 2a 20 49     (-2)     /* I
16250 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 20 69 73  ndexed column is
16260 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 2a   an expression *
16270 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 73 61  /../*.** Each sa
16280 6d 70 6c 65 20 73 74 6f 72 65 64 20 69 6e 20 74  mple stored in t
16290 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20  he sqlite_stat3 
162a0 74 61 62 6c 65 20 69 73 20 72 65 70 72 65 73 65  table is represe
162b0 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 0a 2a  nted in memory.*
162c0 2a 20 75 73 69 6e 67 20 61 20 73 74 72 75 63 74  * using a struct
162d0 75 72 65 20 6f 66 20 74 68 69 73 20 74 79 70 65  ure of this type
162e0 2e 20 20 53 65 65 20 64 6f 63 75 6d 65 6e 74 61  .  See documenta
162f0 74 69 6f 6e 20 61 74 20 74 68 65 20 74 6f 70 20  tion at the top 
16300 6f 66 20 74 68 65 0a 2a 2a 20 61 6e 61 6c 79 7a  of the.** analyz
16310 65 2e 63 20 73 6f 75 72 63 65 20 66 69 6c 65 20  e.c source file 
16320 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
16330 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73  nformation..*/.s
16340 74 72 75 63 74 20 49 6e 64 65 78 53 61 6d 70 6c  truct IndexSampl
16350 65 20 7b 0a 20 20 76 6f 69 64 20 2a 70 3b 20 20  e {.  void *p;  
16360 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74          /* Point
16370 65 72 20 74 6f 20 73 61 6d 70 6c 65 64 20 72 65  er to sampled re
16380 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b  cord */.  int n;
16390 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
163a0 69 7a 65 20 6f 66 20 72 65 63 6f 72 64 20 69 6e  ize of record in
163b0 20 62 79 74 65 73 20 2a 2f 0a 20 20 74 52 6f 77   bytes */.  tRow
163c0 63 6e 74 20 2a 61 6e 45 71 3b 20 20 20 20 2f 2a  cnt *anEq;    /*
163d0 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20   Est. number of 
163e0 72 6f 77 73 20 77 68 65 72 65 20 74 68 65 20 6b  rows where the k
163f0 65 79 20 65 71 75 61 6c 73 20 74 68 69 73 20 73  ey equals this s
16400 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63  ample */.  tRowc
16410 6e 74 20 2a 61 6e 4c 74 3b 20 20 20 20 2f 2a 20  nt *anLt;    /* 
16420 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72  Est. number of r
16430 6f 77 73 20 77 68 65 72 65 20 6b 65 79 20 69 73  ows where key is
16440 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73 20   less than this 
16450 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77  sample */.  tRow
16460 63 6e 74 20 2a 61 6e 44 4c 74 3b 20 20 20 2f 2a  cnt *anDLt;   /*
16470 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20   Est. number of 
16480 64 69 73 74 69 6e 63 74 20 6b 65 79 73 20 6c 65  distinct keys le
16490 73 73 20 74 68 61 6e 20 74 68 69 73 20 73 61 6d  ss than this sam
164a0 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ple */.};../*.**
164b0 20 45 61 63 68 20 74 6f 6b 65 6e 20 63 6f 6d 69   Each token comi
164c0 6e 67 20 6f 75 74 20 6f 66 20 74 68 65 20 6c 65  ng out of the le
164d0 78 65 72 20 69 73 20 61 6e 20 69 6e 73 74 61 6e  xer is an instan
164e0 63 65 20 6f 66 0a 2a 2a 20 74 68 69 73 20 73 74  ce of.** this st
164f0 72 75 63 74 75 72 65 2e 20 20 54 6f 6b 65 6e 73  ructure.  Tokens
16500 20 61 72 65 20 61 6c 73 6f 20 75 73 65 64 20 61   are also used a
16510 73 20 70 61 72 74 20 6f 66 20 61 6e 20 65 78 70  s part of an exp
16520 72 65 73 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 4e  ression..**.** N
16530 6f 74 65 20 69 66 20 54 6f 6b 65 6e 2e 7a 3d 3d  ote if Token.z==
16540 30 20 74 68 65 6e 20 54 6f 6b 65 6e 2e 64 79 6e  0 then Token.dyn
16550 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 61 72 65   and Token.n are
16560 20 75 6e 64 65 66 69 6e 65 64 20 61 6e 64 0a 2a   undefined and.*
16570 2a 20 6d 61 79 20 63 6f 6e 74 61 69 6e 20 72 61  * may contain ra
16580 6e 64 6f 6d 20 76 61 6c 75 65 73 2e 20 20 44 6f  ndom values.  Do
16590 20 6e 6f 74 20 6d 61 6b 65 20 61 6e 79 20 61 73   not make any as
165a0 73 75 6d 70 74 69 6f 6e 73 20 61 62 6f 75 74 20  sumptions about 
165b0 54 6f 6b 65 6e 2e 64 79 6e 0a 2a 2a 20 61 6e 64  Token.dyn.** and
165c0 20 54 6f 6b 65 6e 2e 6e 20 77 68 65 6e 20 54 6f   Token.n when To
165d0 6b 65 6e 2e 7a 3d 3d 30 2e 0a 2a 2f 0a 73 74 72  ken.z==0..*/.str
165e0 75 63 74 20 54 6f 6b 65 6e 20 7b 0a 20 20 63 6f  uct Token {.  co
165f0 6e 73 74 20 63 68 61 72 20 2a 7a 3b 20 20 20 20  nst char *z;    
16600 20 2f 2a 20 54 65 78 74 20 6f 66 20 74 68 65 20   /* Text of the 
16610 74 6f 6b 65 6e 2e 20 20 4e 6f 74 20 4e 55 4c 4c  token.  Not NULL
16620 2d 74 65 72 6d 69 6e 61 74 65 64 21 20 2a 2f 0a  -terminated! */.
16630 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6e    unsigned int n
16640 3b 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f  ;    /* Number o
16650 66 20 63 68 61 72 61 63 74 65 72 73 20 69 6e 20  f characters in 
16660 74 68 69 73 20 74 6f 6b 65 6e 20 2a 2f 0a 7d 3b  this token */.};
16670 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
16680 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75  nce of this stru
16690 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 69  cture contains i
166a0 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65  nformation neede
166b0 64 20 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a  d to generate.**
166c0 20 63 6f 64 65 20 66 6f 72 20 61 20 53 45 4c 45   code for a SELE
166d0 43 54 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  CT that contains
166e0 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
166f0 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 45  ions..**.** If E
16700 78 70 72 2e 6f 70 3d 3d 54 4b 5f 41 47 47 5f 43  xpr.op==TK_AGG_C
16710 4f 4c 55 4d 4e 20 6f 72 20 54 4b 5f 41 47 47 5f  OLUMN or TK_AGG_
16720 46 55 4e 43 54 49 4f 4e 20 74 68 65 6e 20 45 78  FUNCTION then Ex
16730 70 72 2e 70 41 67 67 49 6e 66 6f 20 69 73 20 61  pr.pAggInfo is a
16740 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  .** pointer to t
16750 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20  his structure.  
16760 54 68 65 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e  The Expr.iColumn
16770 20 66 69 65 6c 64 20 69 73 20 74 68 65 20 69 6e   field is the in
16780 64 65 78 20 69 6e 0a 2a 2a 20 41 67 67 49 6e 66  dex in.** AggInf
16790 6f 2e 61 43 6f 6c 5b 5d 20 6f 72 20 41 67 67 49  o.aCol[] or AggI
167a0 6e 66 6f 2e 61 46 75 6e 63 5b 5d 20 6f 66 20 69  nfo.aFunc[] of i
167b0 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65  nformation neede
167c0 64 20 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a  d to generate.**
167d0 20 63 6f 64 65 20 66 6f 72 20 74 68 61 74 20 6e   code for that n
167e0 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 67 67 49 6e  ode..**.** AggIn
167f0 66 6f 2e 70 47 72 6f 75 70 42 79 20 61 6e 64 20  fo.pGroupBy and 
16800 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63 2e 70 45  AggInfo.aFunc.pE
16810 78 70 72 20 70 6f 69 6e 74 20 74 6f 20 66 69 65  xpr point to fie
16820 6c 64 73 20 77 69 74 68 69 6e 20 74 68 65 0a 2a  lds within the.*
16830 2a 20 6f 72 69 67 69 6e 61 6c 20 53 65 6c 65 63  * original Selec
16840 74 20 73 74 72 75 63 74 75 72 65 20 74 68 61 74  t structure that
16850 20 64 65 73 63 72 69 62 65 73 20 74 68 65 20 53   describes the S
16860 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
16870 20 20 54 68 65 73 65 0a 2a 2a 20 66 69 65 6c 64    These.** field
16880 73 20 64 6f 20 6e 6f 74 20 6e 65 65 64 20 74 6f  s do not need to
16890 20 62 65 20 66 72 65 65 64 20 77 68 65 6e 20 64   be freed when d
168a0 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74 68 65 20  eallocating the 
168b0 41 67 67 49 6e 66 6f 20 73 74 72 75 63 74 75 72  AggInfo structur
168c0 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 67 67  e..*/.struct Agg
168d0 49 6e 66 6f 20 7b 0a 20 20 75 38 20 64 69 72 65  Info {.  u8 dire
168e0 63 74 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20  ctMode;         
168f0 20 2f 2a 20 44 69 72 65 63 74 20 72 65 6e 64 65   /* Direct rende
16900 72 69 6e 67 20 6d 6f 64 65 20 6d 65 61 6e 73 20  ring mode means 
16910 74 61 6b 65 20 64 61 74 61 20 64 69 72 65 63 74  take data direct
16920 6c 79 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ly.             
16930 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
16940 66 72 6f 6d 20 73 6f 75 72 63 65 20 74 61 62 6c  from source tabl
16950 65 73 20 72 61 74 68 65 72 20 74 68 61 6e 20 66  es rather than f
16960 72 6f 6d 20 61 63 63 75 6d 75 6c 61 74 6f 72 73  rom accumulators
16970 20 2a 2f 0a 20 20 75 38 20 75 73 65 53 6f 72 74   */.  u8 useSort
16980 69 6e 67 49 64 78 3b 20 20 20 20 20 20 20 2f 2a  ingIdx;       /*
16990 20 49 6e 20 64 69 72 65 63 74 20 6d 6f 64 65 2c   In direct mode,
169a0 20 72 65 66 65 72 65 6e 63 65 20 74 68 65 20 73   reference the s
169b0 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 72 61 74  orting index rat
169c0 68 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 20  her.            
169d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
169e0 20 74 68 61 6e 20 74 68 65 20 73 6f 75 72 63 65   than the source
169f0 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20   table */.  int 
16a00 73 6f 72 74 69 6e 67 49 64 78 3b 20 20 20 20 20  sortingIdx;     
16a10 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75      /* Cursor nu
16a20 6d 62 65 72 20 6f 66 20 74 68 65 20 73 6f 72 74  mber of the sort
16a30 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69  ing index */.  i
16a40 6e 74 20 73 6f 72 74 69 6e 67 49 64 78 50 54 61  nt sortingIdxPTa
16a50 62 3b 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72  b;     /* Cursor
16a60 20 6e 75 6d 62 65 72 20 6f 66 20 70 73 65 75 64   number of pseud
16a70 6f 2d 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74  o-table */.  int
16a80 20 6e 53 6f 72 74 69 6e 67 43 6f 6c 75 6d 6e 3b   nSortingColumn;
16a90 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
16aa0 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
16ab0 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a   sorting index *
16ac0 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 67 2c 20 6d  /.  int mnReg, m
16ad0 78 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 52  xReg;       /* R
16ae0 61 6e 67 65 20 6f 66 20 72 65 67 69 73 74 65 72  ange of register
16af0 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20  s allocated for 
16b00 61 43 6f 6c 20 61 6e 64 20 61 46 75 6e 63 20 2a  aCol and aFunc *
16b10 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47  /.  ExprList *pG
16b20 72 6f 75 70 42 79 3b 20 20 20 20 20 2f 2a 20 54  roupBy;     /* T
16b30 68 65 20 67 72 6f 75 70 20 62 79 20 63 6c 61 75  he group by clau
16b40 73 65 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 41  se */.  struct A
16b50 67 67 49 6e 66 6f 5f 63 6f 6c 20 7b 20 20 20 20  ggInfo_col {    
16b60 2f 2a 20 46 6f 72 20 65 61 63 68 20 63 6f 6c 75  /* For each colu
16b70 6d 6e 20 75 73 65 64 20 69 6e 20 73 6f 75 72 63  mn used in sourc
16b80 65 20 74 61 62 6c 65 73 20 2a 2f 0a 20 20 20 20  e tables */.    
16b90 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20  Table *pTab;    
16ba0 20 20 20 20 20 20 20 20 20 2f 2a 20 53 6f 75 72           /* Sour
16bb0 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  ce table */.    
16bc0 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20  int iTable;     
16bd0 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73           /* Curs
16be0 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65  or number of the
16bf0 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f   source table */
16c00 0a 20 20 20 20 69 6e 74 20 69 43 6f 6c 75 6d 6e  .    int iColumn
16c10 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
16c20 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 77   Column number w
16c30 69 74 68 69 6e 20 74 68 65 20 73 6f 75 72 63 65  ithin the source
16c40 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e   table */.    in
16c50 74 20 69 53 6f 72 74 65 72 43 6f 6c 75 6d 6e 3b  t iSorterColumn;
16c60 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e         /* Column
16c70 20 6e 75 6d 62 65 72 20 69 6e 20 74 68 65 20 73   number in the s
16c80 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a  orting index */.
16c90 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20      int iMem;   
16ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
16cb0 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20  Memory location 
16cc0 74 68 61 74 20 61 63 74 73 20 61 73 20 61 63 63  that acts as acc
16cd0 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20  umulator */.    
16ce0 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20  Expr *pExpr;    
16cf0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
16d00 6f 72 69 67 69 6e 61 6c 20 65 78 70 72 65 73 73  original express
16d10 69 6f 6e 20 2a 2f 0a 20 20 7d 20 2a 61 43 6f 6c  ion */.  } *aCol
16d20 3b 0a 20 20 69 6e 74 20 6e 43 6f 6c 75 6d 6e 3b  ;.  int nColumn;
16d30 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
16d40 75 6d 62 65 72 20 6f 66 20 75 73 65 64 20 65 6e  umber of used en
16d50 74 72 69 65 73 20 69 6e 20 61 43 6f 6c 5b 5d 20  tries in aCol[] 
16d60 2a 2f 0a 20 20 69 6e 74 20 6e 41 63 63 75 6d 75  */.  int nAccumu
16d70 6c 61 74 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20  lator;       /* 
16d80 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  Number of column
16d90 73 20 74 68 61 74 20 73 68 6f 77 20 74 68 72 6f  s that show thro
16da0 75 67 68 20 74 6f 20 74 68 65 20 6f 75 74 70 75  ugh to the outpu
16db0 74 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t..             
16dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
16dd0 41 64 64 69 74 69 6f 6e 61 6c 20 63 6f 6c 75 6d  Additional colum
16de0 6e 73 20 61 72 65 20 75 73 65 64 20 6f 6e 6c 79  ns are used only
16df0 20 61 73 20 70 61 72 61 6d 65 74 65 72 73 20 74   as parameters t
16e00 6f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  o.              
16e10 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 61              ** a
16e20 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
16e30 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 41  ns */.  struct A
16e40 67 67 49 6e 66 6f 5f 66 75 6e 63 20 7b 20 20 20  ggInfo_func {   
16e50 2f 2a 20 46 6f 72 20 65 61 63 68 20 61 67 67 72  /* For each aggr
16e60 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 2a  egate function *
16e70 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70  /.    Expr *pExp
16e80 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  r;             /
16e90 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 65 6e 63  * Expression enc
16ea0 6f 64 69 6e 67 20 74 68 65 20 66 75 6e 63 74 69  oding the functi
16eb0 6f 6e 20 2a 2f 0a 20 20 20 20 46 75 6e 63 44 65  on */.    FuncDe
16ec0 66 20 2a 70 46 75 6e 63 3b 20 20 20 20 20 20 20  f *pFunc;       
16ed0 20 20 20 2f 2a 20 54 68 65 20 61 67 67 72 65 67     /* The aggreg
16ee0 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 69 6d 70  ate function imp
16ef0 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20  lementation */. 
16f00 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20     int iMem;    
16f10 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
16f20 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74  emory location t
16f30 68 61 74 20 61 63 74 73 20 61 73 20 61 63 63 75  hat acts as accu
16f40 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 69  mulator */.    i
16f50 6e 74 20 69 44 69 73 74 69 6e 63 74 3b 20 20 20  nt iDistinct;   
16f60 20 20 20 20 20 20 20 20 2f 2a 20 45 70 68 65 6d          /* Ephem
16f70 65 72 61 6c 20 74 61 62 6c 65 20 75 73 65 64 20  eral table used 
16f80 74 6f 20 65 6e 66 6f 72 63 65 20 44 49 53 54 49  to enforce DISTI
16f90 4e 43 54 20 2a 2f 0a 20 20 7d 20 2a 61 46 75 6e  NCT */.  } *aFun
16fa0 63 3b 0a 20 20 69 6e 74 20 6e 46 75 6e 63 3b 20  c;.  int nFunc; 
16fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
16fc0 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65  Number of entrie
16fd0 73 20 69 6e 20 61 46 75 6e 63 5b 5d 20 2a 2f 0a  s in aFunc[] */.
16fe0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61  };../*.** The da
16ff0 74 61 74 79 70 65 20 79 6e 56 61 72 20 69 73 20  tatype ynVar is 
17000 61 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  a signed integer
17010 2c 20 65 69 74 68 65 72 20 31 36 2d 62 69 74 20  , either 16-bit 
17020 6f 72 20 33 32 2d 62 69 74 2e 0a 2a 2a 20 55 73  or 32-bit..** Us
17030 75 61 6c 6c 79 20 69 74 20 69 73 20 31 36 2d 62  ually it is 16-b
17040 69 74 73 2e 20 20 42 75 74 20 69 66 20 53 51 4c  its.  But if SQL
17050 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45  ITE_MAX_VARIABLE
17060 5f 4e 55 4d 42 45 52 20 69 73 20 67 72 65 61 74  _NUMBER is great
17070 65 72 0a 2a 2a 20 74 68 61 6e 20 33 32 37 36 37  er.** than 32767
17080 20 77 65 20 68 61 76 65 20 74 6f 20 6d 61 6b 65   we have to make
17090 20 69 74 20 33 32 2d 62 69 74 2e 20 20 31 36 2d   it 32-bit.  16-
170a0 62 69 74 20 69 73 20 70 72 65 66 65 72 72 65 64  bit is preferred
170b0 20 62 65 63 61 75 73 65 0a 2a 2a 20 69 74 20 75   because.** it u
170c0 73 65 73 20 6c 65 73 73 20 6d 65 6d 6f 72 79 20  ses less memory 
170d0 69 6e 20 74 68 65 20 45 78 70 72 20 6f 62 6a 65  in the Expr obje
170e0 63 74 2c 20 77 68 69 63 68 20 69 73 20 61 20 62  ct, which is a b
170f0 69 67 20 6d 65 6d 6f 72 79 20 75 73 65 72 0a 2a  ig memory user.*
17100 2a 20 69 6e 20 73 79 73 74 65 6d 73 20 77 69 74  * in systems wit
17110 68 20 6c 6f 74 73 20 6f 66 20 70 72 65 70 61 72  h lots of prepar
17120 65 64 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 20  ed statements.  
17130 41 6e 64 20 66 65 77 20 61 70 70 6c 69 63 61 74  And few applicat
17140 69 6f 6e 73 0a 2a 2a 20 6e 65 65 64 20 6d 6f 72  ions.** need mor
17150 65 20 74 68 61 6e 20 61 62 6f 75 74 20 31 30 20  e than about 10 
17160 6f 72 20 32 30 20 76 61 72 69 61 62 6c 65 73 2e  or 20 variables.
17170 20 20 42 75 74 20 73 6f 6d 65 20 65 78 74 72 65    But some extre
17180 6d 65 20 75 73 65 72 73 20 77 61 6e 74 0a 2a 2a  me users want.**
17190 20 74 6f 20 68 61 76 65 20 70 72 65 70 61 72 65   to have prepare
171a0 64 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74  d statements wit
171b0 68 20 6f 76 65 72 20 33 32 37 36 37 20 76 61 72  h over 32767 var
171c0 69 61 62 6c 65 73 2c 20 61 6e 64 20 66 6f 72 20  iables, and for 
171d0 74 68 65 6d 0a 2a 2a 20 74 68 65 20 6f 70 74 69  them.** the opti
171e0 6f 6e 20 69 73 20 61 76 61 69 6c 61 62 6c 65 20  on is available 
171f0 28 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  (at compile-time
17200 29 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45  )..*/.#if SQLITE
17210 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55  _MAX_VARIABLE_NU
17220 4d 42 45 52 3c 3d 33 32 37 36 37 0a 74 79 70 65  MBER<=32767.type
17230 64 65 66 20 69 31 36 20 79 6e 56 61 72 3b 0a 23  def i16 ynVar;.#
17240 65 6c 73 65 0a 74 79 70 65 64 65 66 20 69 6e 74  else.typedef int
17250 20 79 6e 56 61 72 3b 0a 23 65 6e 64 69 66 0a 0a   ynVar;.#endif..
17260 2f 2a 0a 2a 2a 20 45 61 63 68 20 6e 6f 64 65 20  /*.** Each node 
17270 6f 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  of an expression
17280 20 69 6e 20 74 68 65 20 70 61 72 73 65 20 74 72   in the parse tr
17290 65 65 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63  ee is an instanc
172a0 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72  e.** of this str
172b0 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 45 78  ucture..**.** Ex
172c0 70 72 2e 6f 70 20 69 73 20 74 68 65 20 6f 70 63  pr.op is the opc
172d0 6f 64 65 2e 20 54 68 65 20 69 6e 74 65 67 65 72  ode. The integer
172e0 20 70 61 72 73 65 72 20 74 6f 6b 65 6e 20 63 6f   parser token co
172f0 64 65 73 20 61 72 65 20 72 65 75 73 65 64 0a 2a  des are reused.*
17300 2a 20 61 73 20 6f 70 63 6f 64 65 73 20 68 65 72  * as opcodes her
17310 65 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20  e. For example, 
17320 74 68 65 20 70 61 72 73 65 72 20 64 65 66 69 6e  the parser defin
17330 65 73 20 54 4b 5f 47 45 20 74 6f 20 62 65 20 61  es TK_GE to be a
17340 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63 6f 64  n integer.** cod
17350 65 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74  e representing t
17360 68 65 20 22 3e 3d 22 20 6f 70 65 72 61 74 6f 72  he ">=" operator
17370 2e 20 54 68 69 73 20 73 61 6d 65 20 69 6e 74 65  . This same inte
17380 67 65 72 20 63 6f 64 65 20 69 73 20 72 65 75 73  ger code is reus
17390 65 64 0a 2a 2a 20 74 6f 20 72 65 70 72 65 73 65  ed.** to represe
173a0 6e 74 20 74 68 65 20 67 72 65 61 74 65 72 2d 74  nt the greater-t
173b0 68 61 6e 2d 6f 72 2d 65 71 75 61 6c 2d 74 6f 20  han-or-equal-to 
173c0 6f 70 65 72 61 74 6f 72 20 69 6e 20 74 68 65 20  operator in the 
173d0 65 78 70 72 65 73 73 69 6f 6e 0a 2a 2a 20 74 72  expression.** tr
173e0 65 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ee..**.** If the
173f0 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
17400 6e 20 53 51 4c 20 6c 69 74 65 72 61 6c 20 28 54  n SQL literal (T
17410 4b 5f 49 4e 54 45 47 45 52 2c 20 54 4b 5f 46 4c  K_INTEGER, TK_FL
17420 4f 41 54 2c 20 54 4b 5f 42 4c 4f 42 2c 0a 2a 2a  OAT, TK_BLOB,.**
17430 20 6f 72 20 54 4b 5f 53 54 52 49 4e 47 29 2c 20   or TK_STRING), 
17440 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20  then Expr.token 
17450 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 74 65 78  contains the tex
17460 74 20 6f 66 20 74 68 65 20 53 51 4c 20 6c 69 74  t of the SQL lit
17470 65 72 61 6c 2e 20 49 66 0a 2a 2a 20 74 68 65 20  eral. If.** the 
17480 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20  expression is a 
17490 76 61 72 69 61 62 6c 65 20 28 54 4b 5f 56 41 52  variable (TK_VAR
174a0 49 41 42 4c 45 29 2c 20 74 68 65 6e 20 45 78 70  IABLE), then Exp
174b0 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73  r.token contains
174c0 20 74 68 65 0a 2a 2a 20 76 61 72 69 61 62 6c 65   the.** variable
174d0 20 6e 61 6d 65 2e 20 46 69 6e 61 6c 6c 79 2c 20   name. Finally, 
174e0 69 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  if the expressio
174f0 6e 20 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63  n is an SQL func
17500 74 69 6f 6e 20 28 54 4b 5f 46 55 4e 43 54 49 4f  tion (TK_FUNCTIO
17510 4e 29 2c 0a 2a 2a 20 74 68 65 6e 20 45 78 70 72  N),.** then Expr
17520 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20  .token contains 
17530 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
17540 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  function..**.** 
17550 45 78 70 72 2e 70 52 69 67 68 74 20 61 6e 64 20  Expr.pRight and 
17560 45 78 70 72 2e 70 4c 65 66 74 20 61 72 65 20 74  Expr.pLeft are t
17570 68 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68  he left and righ
17580 74 20 73 75 62 65 78 70 72 65 73 73 69 6f 6e 73  t subexpressions
17590 20 6f 66 20 61 0a 2a 2a 20 62 69 6e 61 72 79 20   of a.** binary 
175a0 6f 70 65 72 61 74 6f 72 2e 20 45 69 74 68 65 72  operator. Either
175b0 20 6f 72 20 62 6f 74 68 20 6d 61 79 20 62 65 20   or both may be 
175c0 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72  NULL..**.** Expr
175d0 2e 78 2e 70 4c 69 73 74 20 69 73 20 61 20 6c 69  .x.pList is a li
175e0 73 74 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  st of arguments 
175f0 69 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  if the expressio
17600 6e 20 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63  n is an SQL func
17610 74 69 6f 6e 2c 0a 2a 2a 20 61 20 43 41 53 45 20  tion,.** a CASE 
17620 65 78 70 72 65 73 73 69 6f 6e 20 6f 72 20 61 6e  expression or an
17630 20 49 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f   IN expression o
17640 66 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73  f the form "<lhs
17650 3e 20 49 4e 20 28 3c 79 3e 2c 20 3c 7a 3e 2e 2e  > IN (<y>, <z>..
17660 2e 29 22 2e 0a 2a 2a 20 45 78 70 72 2e 78 2e 70  .)"..** Expr.x.p
17670 53 65 6c 65 63 74 20 69 73 20 75 73 65 64 20 69  Select is used i
17680 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
17690 20 69 73 20 61 20 73 75 62 2d 73 65 6c 65 63 74   is a sub-select
176a0 20 6f 72 20 61 6e 20 65 78 70 72 65 73 73 69 6f   or an expressio
176b0 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 66 6f 72 6d  n of.** the form
176c0 20 22 3c 6c 68 73 3e 20 49 4e 20 28 53 45 4c 45   "<lhs> IN (SELE
176d0 43 54 20 2e 2e 2e 29 22 2e 20 49 66 20 74 68 65  CT ...)". If the
176e0 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20 62 69   EP_xIsSelect bi
176f0 74 20 69 73 20 73 65 74 20 69 6e 20 74 68 65 0a  t is set in the.
17700 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61  ** Expr.flags ma
17710 73 6b 2c 20 74 68 65 6e 20 45 78 70 72 2e 78 2e  sk, then Expr.x.
17720 70 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69 64  pSelect is valid
17730 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 45 78 70  . Otherwise, Exp
17740 72 2e 78 2e 70 4c 69 73 74 20 69 73 0a 2a 2a 20  r.x.pList is.** 
17750 76 61 6c 69 64 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20  valid..**.** An 
17760 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74 68  expression of th
17770 65 20 66 6f 72 6d 20 49 44 20 6f 72 20 49 44 2e  e form ID or ID.
17780 49 44 20 72 65 66 65 72 73 20 74 6f 20 61 20 63  ID refers to a c
17790 6f 6c 75 6d 6e 20 69 6e 20 61 20 74 61 62 6c 65  olumn in a table
177a0 2e 0a 2a 2a 20 46 6f 72 20 73 75 63 68 20 65 78  ..** For such ex
177b0 70 72 65 73 73 69 6f 6e 73 2c 20 45 78 70 72 2e  pressions, Expr.
177c0 6f 70 20 69 73 20 73 65 74 20 74 6f 20 54 4b 5f  op is set to TK_
177d0 43 4f 4c 55 4d 4e 20 61 6e 64 20 45 78 70 72 2e  COLUMN and Expr.
177e0 69 54 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65  iTable is.** the
177f0 20 69 6e 74 65 67 65 72 20 63 75 72 73 6f 72 20   integer cursor 
17800 6e 75 6d 62 65 72 20 6f 66 20 61 20 56 44 42 45  number of a VDBE
17810 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67   cursor pointing
17820 20 74 6f 20 74 68 61 74 20 74 61 62 6c 65 20 61   to that table a
17830 6e 64 0a 2a 2a 20 45 78 70 72 2e 69 43 6f 6c 75  nd.** Expr.iColu
17840 6d 6e 20 69 73 20 74 68 65 20 63 6f 6c 75 6d 6e  mn is the column
17850 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 65 20   number for the 
17860 73 70 65 63 69 66 69 63 20 63 6f 6c 75 6d 6e 2e  specific column.
17870 20 20 49 66 20 74 68 65 0a 2a 2a 20 65 78 70 72    If the.** expr
17880 65 73 73 69 6f 6e 20 69 73 20 75 73 65 64 20 61  ession is used a
17890 73 20 61 20 72 65 73 75 6c 74 20 69 6e 20 61 6e  s a result in an
178a0 20 61 67 67 72 65 67 61 74 65 20 53 45 4c 45 43   aggregate SELEC
178b0 54 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 76  T, then the.** v
178c0 61 6c 75 65 20 69 73 20 61 6c 73 6f 20 73 74 6f  alue is also sto
178d0 72 65 64 20 69 6e 20 74 68 65 20 45 78 70 72 2e  red in the Expr.
178e0 69 41 67 67 20 63 6f 6c 75 6d 6e 20 69 6e 20 74  iAgg column in t
178f0 68 65 20 61 67 67 72 65 67 61 74 65 20 73 6f 20  he aggregate so 
17900 74 68 61 74 0a 2a 2a 20 69 74 20 63 61 6e 20 62  that.** it can b
17910 65 20 61 63 63 65 73 73 65 64 20 61 66 74 65 72  e accessed after
17920 20 61 6c 6c 20 61 67 67 72 65 67 61 74 65 73 20   all aggregates 
17930 61 72 65 20 63 6f 6d 70 75 74 65 64 2e 0a 2a 2a  are computed..**
17940 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72 65  .** If the expre
17950 73 73 69 6f 6e 20 69 73 20 61 6e 20 75 6e 62 6f  ssion is an unbo
17960 75 6e 64 20 76 61 72 69 61 62 6c 65 20 6d 61 72  und variable mar
17970 6b 65 72 20 28 61 20 71 75 65 73 74 69 6f 6e 20  ker (a question 
17980 6d 61 72 6b 0a 2a 2a 20 63 68 61 72 61 63 74 65  mark.** characte
17990 72 20 27 3f 27 20 69 6e 20 74 68 65 20 6f 72 69  r '?' in the ori
179a0 67 69 6e 61 6c 20 53 51 4c 29 20 74 68 65 6e 20  ginal SQL) then 
179b0 74 68 65 20 45 78 70 72 2e 69 54 61 62 6c 65 20  the Expr.iTable 
179c0 68 6f 6c 64 73 20 74 68 65 20 69 6e 64 65 78 0a  holds the index.
179d0 2a 2a 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68  ** number for th
179e0 61 74 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 0a  at variable..**.
179f0 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72 65 73  ** If the expres
17a00 73 69 6f 6e 20 69 73 20 61 20 73 75 62 71 75 65  sion is a subque
17a10 72 79 20 74 68 65 6e 20 45 78 70 72 2e 69 43 6f  ry then Expr.iCo
17a20 6c 75 6d 6e 20 68 6f 6c 64 73 20 61 6e 20 69 6e  lumn holds an in
17a30 74 65 67 65 72 0a 2a 2a 20 72 65 67 69 73 74 65  teger.** registe
17a40 72 20 6e 75 6d 62 65 72 20 63 6f 6e 74 61 69 6e  r number contain
17a50 69 6e 67 20 74 68 65 20 72 65 73 75 6c 74 20 6f  ing the result o
17a60 66 20 74 68 65 20 73 75 62 71 75 65 72 79 2e 20  f the subquery. 
17a70 20 49 66 20 74 68 65 0a 2a 2a 20 73 75 62 71 75   If the.** subqu
17a80 65 72 79 20 67 69 76 65 73 20 61 20 63 6f 6e 73  ery gives a cons
17a90 74 61 6e 74 20 72 65 73 75 6c 74 2c 20 74 68 65  tant result, the
17aa0 6e 20 69 54 61 62 6c 65 20 69 73 20 2d 31 2e 20  n iTable is -1. 
17ab0 20 49 66 20 74 68 65 20 73 75 62 71 75 65 72 79   If the subquery
17ac0 0a 2a 2a 20 67 69 76 65 73 20 61 20 64 69 66 66  .** gives a diff
17ad0 65 72 65 6e 74 20 61 6e 73 77 65 72 20 61 74 20  erent answer at 
17ae0 64 69 66 66 65 72 65 6e 74 20 74 69 6d 65 73 20  different times 
17af0 64 75 72 69 6e 67 20 73 74 61 74 65 6d 65 6e 74  during statement
17b00 20 70 72 6f 63 65 73 73 69 6e 67 0a 2a 2a 20 74   processing.** t
17b10 68 65 6e 20 69 54 61 62 6c 65 20 69 73 20 74 68  hen iTable is th
17b20 65 20 61 64 64 72 65 73 73 20 6f 66 20 61 20 73  e address of a s
17b30 75 62 72 6f 75 74 69 6e 65 20 74 68 61 74 20 63  ubroutine that c
17b40 6f 6d 70 75 74 65 73 20 74 68 65 20 73 75 62 71  omputes the subq
17b50 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  uery..**.** If t
17b60 68 65 20 45 78 70 72 20 69 73 20 6f 66 20 74 79  he Expr is of ty
17b70 70 65 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 61 6e  pe OP_Column, an
17b80 64 20 74 68 65 20 74 61 62 6c 65 20 69 74 20 69  d the table it i
17b90 73 20 73 65 6c 65 63 74 69 6e 67 20 66 72 6f 6d  s selecting from
17ba0 0a 2a 2a 20 69 73 20 61 20 64 69 73 6b 20 74 61  .** is a disk ta
17bb0 62 6c 65 20 6f 72 20 74 68 65 20 22 6f 6c 64 2e  ble or the "old.
17bc0 2a 22 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2c  *" pseudo-table,
17bd0 20 74 68 65 6e 20 70 54 61 62 20 70 6f 69 6e 74   then pTab point
17be0 73 20 74 6f 20 74 68 65 0a 2a 2a 20 63 6f 72 72  s to the.** corr
17bf0 65 73 70 6f 6e 64 69 6e 67 20 74 61 62 6c 65 20  esponding table 
17c00 64 65 66 69 6e 69 74 69 6f 6e 2e 0a 2a 2a 0a 2a  definition..**.*
17c10 2a 20 41 4c 4c 4f 43 41 54 49 4f 4e 20 4e 4f 54  * ALLOCATION NOT
17c20 45 53 3a 0a 2a 2a 0a 2a 2a 20 45 78 70 72 20 6f  ES:.**.** Expr o
17c30 62 6a 65 63 74 73 20 63 61 6e 20 75 73 65 20 61  bjects can use a
17c40 20 6c 6f 74 20 6f 66 20 6d 65 6d 6f 72 79 20 73   lot of memory s
17c50 70 61 63 65 20 69 6e 20 64 61 74 61 62 61 73 65  pace in database
17c60 20 73 63 68 65 6d 61 2e 20 20 54 6f 0a 2a 2a 20   schema.  To.** 
17c70 68 65 6c 70 20 72 65 64 75 63 65 20 6d 65 6d 6f  help reduce memo
17c80 72 79 20 72 65 71 75 69 72 65 6d 65 6e 74 73 2c  ry requirements,
17c90 20 73 6f 6d 65 74 69 6d 65 73 20 61 6e 20 45 78   sometimes an Ex
17ca0 70 72 20 6f 62 6a 65 63 74 20 77 69 6c 6c 20 62  pr object will b
17cb0 65 0a 2a 2a 20 74 72 75 6e 63 61 74 65 64 2e 20  e.** truncated. 
17cc0 20 41 6e 64 20 74 6f 20 72 65 64 75 63 65 20 74   And to reduce t
17cd0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d  he number of mem
17ce0 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2c  ory allocations,
17cf0 20 73 6f 6d 65 74 69 6d 65 73 0a 2a 2a 20 74 77   sometimes.** tw
17d00 6f 20 6f 72 20 6d 6f 72 65 20 45 78 70 72 20 6f  o or more Expr o
17d10 62 6a 65 63 74 73 20 77 69 6c 6c 20 62 65 20 73  bjects will be s
17d20 74 6f 72 65 64 20 69 6e 20 61 20 73 69 6e 67 6c  tored in a singl
17d30 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  e memory allocat
17d40 69 6f 6e 2c 0a 2a 2a 20 74 6f 67 65 74 68 65 72  ion,.** together
17d50 20 77 69 74 68 20 45 78 70 72 2e 7a 54 6f 6b 65   with Expr.zToke
17d60 6e 20 73 74 72 69 6e 67 73 2e 0a 2a 2a 0a 2a 2a  n strings..**.**
17d70 20 49 66 20 74 68 65 20 45 50 5f 52 65 64 75 63   If the EP_Reduc
17d80 65 64 20 61 6e 64 20 45 50 5f 54 6f 6b 65 6e 4f  ed and EP_TokenO
17d90 6e 6c 79 20 66 6c 61 67 73 20 61 72 65 20 73 65  nly flags are se
17da0 74 20 77 68 65 6e 0a 2a 2a 20 61 6e 20 45 78 70  t when.** an Exp
17db0 72 20 6f 62 6a 65 63 74 20 69 73 20 74 72 75 6e  r object is trun
17dc0 63 61 74 65 64 2e 20 20 57 68 65 6e 20 45 50 5f  cated.  When EP_
17dd0 52 65 64 75 63 65 64 20 69 73 20 73 65 74 2c 20  Reduced is set, 
17de0 74 68 65 6e 20 61 6c 6c 0a 2a 2a 20 74 68 65 20  then all.** the 
17df0 63 68 69 6c 64 20 45 78 70 72 20 6f 62 6a 65 63  child Expr objec
17e00 74 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e 70  ts in the Expr.p
17e10 4c 65 66 74 20 61 6e 64 20 45 78 70 72 2e 70 52  Left and Expr.pR
17e20 69 67 68 74 20 73 75 62 74 72 65 65 73 0a 2a 2a  ight subtrees.**
17e30 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20 77   are contained w
17e40 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20 6d  ithin the same m
17e50 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
17e60 2e 20 20 4e 6f 74 65 2c 20 68 6f 77 65 76 65 72  .  Note, however
17e70 2c 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 73 75  , that.** the su
17e80 62 74 72 65 65 73 20 69 6e 20 45 78 70 72 2e 78  btrees in Expr.x
17e90 2e 70 4c 69 73 74 20 6f 72 20 45 78 70 72 2e 78  .pList or Expr.x
17ea0 2e 70 53 65 6c 65 63 74 20 61 72 65 20 61 6c 77  .pSelect are alw
17eb0 61 79 73 20 73 65 70 61 72 61 74 65 6c 79 0a 2a  ays separately.*
17ec0 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20 72 65 67  * allocated, reg
17ed0 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68  ardless of wheth
17ee0 65 72 20 6f 72 20 6e 6f 74 20 45 50 5f 52 65 64  er or not EP_Red
17ef0 75 63 65 64 20 69 73 20 73 65 74 2e 0a 2a 2f 0a  uced is set..*/.
17f00 73 74 72 75 63 74 20 45 78 70 72 20 7b 0a 20 20  struct Expr {.  
17f10 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20  u8 op;          
17f20 20 20 20 20 20 20 20 2f 2a 20 4f 70 65 72 61 74         /* Operat
17f30 69 6f 6e 20 70 65 72 66 6f 72 6d 65 64 20 62 79  ion performed by
17f40 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 20 20   this node */.  
17f50 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20  char affinity;  
17f60 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 66         /* The af
17f70 66 69 6e 69 74 79 20 6f 66 20 74 68 65 20 63 6f  finity of the co
17f80 6c 75 6d 6e 20 6f 72 20 30 20 69 66 20 6e 6f 74  lumn or 0 if not
17f90 20 61 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75   a column */.  u
17fa0 33 32 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20  32 flags;       
17fb0 20 20 20 20 20 20 2f 2a 20 56 61 72 69 6f 75 73        /* Various
17fc0 20 66 6c 61 67 73 2e 20 20 45 50 5f 2a 20 53 65   flags.  EP_* Se
17fd0 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 75 6e 69  e below */.  uni
17fe0 6f 6e 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a  on {.    char *z
17ff0 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20 20 20  Token;          
18000 2f 2a 20 54 6f 6b 65 6e 20 76 61 6c 75 65 2e 20  /* Token value. 
18010 5a 65 72 6f 20 74 65 72 6d 69 6e 61 74 65 64 20  Zero terminated 
18020 61 6e 64 20 64 65 71 75 6f 74 65 64 20 2a 2f 0a  and dequoted */.
18030 20 20 20 20 69 6e 74 20 69 56 61 6c 75 65 3b 20      int iValue; 
18040 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f             /* No
18050 6e 2d 6e 65 67 61 74 69 76 65 20 69 6e 74 65 67  n-negative integ
18060 65 72 20 76 61 6c 75 65 20 69 66 20 45 50 5f 49  er value if EP_I
18070 6e 74 56 61 6c 75 65 20 2a 2f 0a 20 20 7d 20 75  ntValue */.  } u
18080 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 45  ;..  /* If the E
18090 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67  P_TokenOnly flag
180a0 20 69 73 20 73 65 74 20 69 6e 20 74 68 65 20 45   is set in the E
180b0 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20  xpr.flags mask, 
180c0 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61  then no.  ** spa
180d0 63 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20  ce is allocated 
180e0 66 6f 72 20 74 68 65 20 66 69 65 6c 64 73 20 62  for the fields b
180f0 65 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e 74 2e  elow this point.
18100 20 41 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a 20   An attempt to. 
18110 20 2a 2a 20 61 63 63 65 73 73 20 74 68 65 6d 20   ** access them 
18120 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20 61  will result in a
18130 20 73 65 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c   segfault or mal
18140 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a  function..  ****
18150 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18160 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18170 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18180 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18190 2a 2f 0a 0a 20 20 45 78 70 72 20 2a 70 4c 65 66  */..  Expr *pLef
181a0 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
181b0 4c 65 66 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a  Left subnode */.
181c0 20 20 45 78 70 72 20 2a 70 52 69 67 68 74 3b 20    Expr *pRight; 
181d0 20 20 20 20 20 20 20 20 20 2f 2a 20 52 69 67 68           /* Righ
181e0 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 75  t subnode */.  u
181f0 6e 69 6f 6e 20 7b 0a 20 20 20 20 45 78 70 72 4c  nion {.    ExprL
18200 69 73 74 20 2a 70 4c 69 73 74 3b 20 20 20 20 20  ist *pList;     
18210 2f 2a 20 6f 70 20 3d 20 49 4e 2c 20 45 58 49 53  /* op = IN, EXIS
18220 54 53 2c 20 53 45 4c 45 43 54 2c 20 43 41 53 45  TS, SELECT, CASE
18230 2c 20 46 55 4e 43 54 49 4f 4e 2c 20 42 45 54 57  , FUNCTION, BETW
18240 45 45 4e 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63  EEN */.    Selec
18250 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20  t *pSelect;     
18260 2f 2a 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20  /* EP_xIsSelect 
18270 61 6e 64 20 6f 70 20 3d 20 49 4e 2c 20 45 58 49  and op = IN, EXI
18280 53 54 53 2c 20 53 45 4c 45 43 54 20 2a 2f 0a 20  STS, SELECT */. 
18290 20 7d 20 78 3b 0a 0a 20 20 2f 2a 20 49 66 20 74   } x;..  /* If t
182a0 68 65 20 45 50 5f 52 65 64 75 63 65 64 20 66 6c  he EP_Reduced fl
182b0 61 67 20 69 73 20 73 65 74 20 69 6e 20 74 68 65  ag is set in the
182c0 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b   Expr.flags mask
182d0 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73  , then no.  ** s
182e0 70 61 63 65 20 69 73 20 61 6c 6c 6f 63 61 74 65  pace is allocate
182f0 64 20 66 6f 72 20 74 68 65 20 66 69 65 6c 64 73  d for the fields
18300 20 62 65 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e   below this poin
18310 74 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 74 6f  t. An attempt to
18320 0a 20 20 2a 2a 20 61 63 63 65 73 73 20 74 68 65  .  ** access the
18330 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e  m will result in
18340 20 61 20 73 65 67 66 61 75 6c 74 20 6f 72 20 6d   a segfault or m
18350 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a  alfunction..  **
18360 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18370 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18380 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18390 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
183a0 2a 2a 2a 2f 0a 0a 23 69 66 20 53 51 4c 49 54 45  ***/..#if SQLITE
183b0 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50 54 48 3e  _MAX_EXPR_DEPTH>
183c0 30 0a 20 20 69 6e 74 20 6e 48 65 69 67 68 74 3b  0.  int nHeight;
183d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 65             /* He
183e0 69 67 68 74 20 6f 66 20 74 68 65 20 74 72 65 65  ight of the tree
183f0 20 68 65 61 64 65 64 20 62 79 20 74 68 69 73 20   headed by this 
18400 6e 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  node */.#endif. 
18410 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20   int iTable;    
18420 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f          /* TK_CO
18430 4c 55 4d 4e 3a 20 63 75 72 73 6f 72 20 6e 75 6d  LUMN: cursor num
18440 62 65 72 20 6f 66 20 74 61 62 6c 65 20 68 6f 6c  ber of table hol
18450 64 69 6e 67 20 63 6f 6c 75 6d 6e 0a 20 20 20 20  ding column.    
18460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18470 20 20 20 20 20 2a 2a 20 54 4b 5f 52 45 47 49 53       ** TK_REGIS
18480 54 45 52 3a 20 72 65 67 69 73 74 65 72 20 6e 75  TER: register nu
18490 6d 62 65 72 0a 20 20 20 20 20 20 20 20 20 20 20  mber.           
184a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
184b0 20 54 4b 5f 54 52 49 47 47 45 52 3a 20 31 20 2d   TK_TRIGGER: 1 -
184c0 3e 20 6e 65 77 2c 20 30 20 2d 3e 20 6f 6c 64 0a  > new, 0 -> old.
184d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
184e0 20 20 20 20 20 20 20 20 20 2a 2a 20 45 50 5f 55           ** EP_U
184f0 6e 6c 69 6b 65 6c 79 3a 20 20 31 33 34 32 31 37  nlikely:  134217
18500 37 32 38 20 74 69 6d 65 73 20 6c 69 6b 65 6c 69  728 times likeli
18510 68 6f 6f 64 0a 20 20 20 20 20 20 20 20 20 20 20  hood.           
18520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
18530 20 54 4b 5f 53 45 4c 45 43 54 3a 20 31 73 74 20   TK_SELECT: 1st 
18540 72 65 67 69 73 74 65 72 20 6f 66 20 72 65 73 75  register of resu
18550 6c 74 20 76 65 63 74 6f 72 20 2a 2f 0a 20 20 79  lt vector */.  y
18560 6e 56 61 72 20 69 43 6f 6c 75 6d 6e 3b 20 20 20  nVar iColumn;   
18570 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55        /* TK_COLU
18580 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78  MN: column index
18590 2e 20 20 2d 31 20 66 6f 72 20 72 6f 77 69 64 2e  .  -1 for rowid.
185a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
185b0 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f            ** TK_
185c0 56 41 52 49 41 42 4c 45 3a 20 76 61 72 69 61 62  VARIABLE: variab
185d0 6c 65 20 6e 75 6d 62 65 72 20 28 61 6c 77 61 79  le number (alway
185e0 73 20 3e 3d 20 31 29 2e 0a 20 20 20 20 20 20 20  s >= 1)..       
185f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18600 20 20 2a 2a 20 54 4b 5f 53 45 4c 45 43 54 5f 43    ** TK_SELECT_C
18610 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 6f 66  OLUMN: column of
18620 20 74 68 65 20 72 65 73 75 6c 74 20 76 65 63 74   the result vect
18630 6f 72 20 2a 2f 0a 20 20 69 31 36 20 69 41 67 67  or */.  i16 iAgg
18640 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
18650 2a 20 57 68 69 63 68 20 65 6e 74 72 79 20 69 6e  * Which entry in
18660 20 70 41 67 67 49 6e 66 6f 2d 3e 61 43 6f 6c 5b   pAggInfo->aCol[
18670 5d 20 6f 72 20 2d 3e 61 46 75 6e 63 5b 5d 20 2a  ] or ->aFunc[] *
18680 2f 0a 20 20 69 31 36 20 69 52 69 67 68 74 4a 6f  /.  i16 iRightJo
18690 69 6e 54 61 62 6c 65 3b 20 20 20 2f 2a 20 49 66  inTable;   /* If
186a0 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 2c 20 74 68   EP_FromJoin, th
186b0 65 20 72 69 67 68 74 20 74 61 62 6c 65 20 6f 66  e right table of
186c0 20 74 68 65 20 6a 6f 69 6e 20 2a 2f 0a 20 20 75   the join */.  u
186d0 38 20 6f 70 32 3b 20 20 20 20 20 20 20 20 20 20  8 op2;          
186e0 20 20 20 20 20 20 2f 2a 20 54 4b 5f 52 45 47 49        /* TK_REGI
186f0 53 54 45 52 3a 20 6f 72 69 67 69 6e 61 6c 20 76  STER: original v
18700 61 6c 75 65 20 6f 66 20 45 78 70 72 2e 6f 70 0a  alue of Expr.op.
18710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18720 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 43           ** TK_C
18730 4f 4c 55 4d 4e 3a 20 74 68 65 20 76 61 6c 75 65  OLUMN: the value
18740 20 6f 66 20 70 35 20 66 6f 72 20 4f 50 5f 43 6f   of p5 for OP_Co
18750 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20 20 20 20  lumn.           
18760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
18770 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e   TK_AGG_FUNCTION
18780 3a 20 6e 65 73 74 69 6e 67 20 64 65 70 74 68 20  : nesting depth 
18790 2a 2f 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70 41  */.  AggInfo *pA
187a0 67 67 49 6e 66 6f 3b 20 20 20 20 20 2f 2a 20 55  ggInfo;     /* U
187b0 73 65 64 20 62 79 20 54 4b 5f 41 47 47 5f 43 4f  sed by TK_AGG_CO
187c0 4c 55 4d 4e 20 61 6e 64 20 54 4b 5f 41 47 47 5f  LUMN and TK_AGG_
187d0 46 55 4e 43 54 49 4f 4e 20 2a 2f 0a 20 20 54 61  FUNCTION */.  Ta
187e0 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20  ble *pTab;      
187f0 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 66 6f       /* Table fo
18800 72 20 54 4b 5f 43 4f 4c 55 4d 4e 20 65 78 70 72  r TK_COLUMN expr
18810 65 73 73 69 6f 6e 73 2e 20 20 43 61 6e 20 62 65  essions.  Can be
18820 20 4e 55 4c 4c 0a 20 20 20 20 20 20 20 20 20 20   NULL.          
18830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
18840 2a 20 66 6f 72 20 61 20 63 6f 6c 75 6d 6e 20 6f  * for a column o
18850 66 20 61 6e 20 69 6e 64 65 78 20 6f 6e 20 61 6e  f an index on an
18860 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 7d   expression */.}
18870 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  ;../*.** The fol
18880 6c 6f 77 69 6e 67 20 61 72 65 20 74 68 65 20 6d  lowing are the m
18890 65 61 6e 69 6e 67 73 20 6f 66 20 62 69 74 73 20  eanings of bits 
188a0 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67  in the Expr.flag
188b0 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66  s field..*/.#def
188c0 69 6e 65 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 20  ine EP_FromJoin 
188d0 20 30 78 30 30 30 30 30 31 20 2f 2a 20 4f 72 69   0x000001 /* Ori
188e0 67 69 6e 61 74 65 73 20 69 6e 20 4f 4e 2f 55 53  ginates in ON/US
188f0 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 6f 75  ING clause of ou
18900 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66  ter join */.#def
18910 69 6e 65 20 45 50 5f 41 67 67 20 20 20 20 20 20  ine EP_Agg      
18920 20 30 78 30 30 30 30 30 32 20 2f 2a 20 43 6f 6e   0x000002 /* Con
18930 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72  tains one or mor
18940 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  e aggregate func
18950 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tions */.#define
18960 20 45 50 5f 48 61 73 46 75 6e 63 20 20 20 30 78   EP_HasFunc   0x
18970 30 30 30 30 30 34 20 2f 2a 20 43 6f 6e 74 61 69  000004 /* Contai
18980 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 66  ns one or more f
18990 75 6e 63 74 69 6f 6e 73 20 6f 66 20 61 6e 79 20  unctions of any 
189a0 6b 69 6e 64 20 2a 2f 0a 20 20 20 20 20 20 20 20  kind */.        
189b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30 78 30            /* 0x0
189c0 30 30 30 30 38 20 2f 2f 20 61 76 61 69 6c 61 62  00008 // availab
189d0 6c 65 20 66 6f 72 20 75 73 65 20 2a 2f 0a 23 64  le for use */.#d
189e0 65 66 69 6e 65 20 45 50 5f 44 69 73 74 69 6e 63  efine EP_Distinc
189f0 74 20 20 30 78 30 30 30 30 31 30 20 2f 2a 20 41  t  0x000010 /* A
18a00 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
18a10 6e 20 77 69 74 68 20 44 49 53 54 49 4e 43 54 20  n with DISTINCT 
18a20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69  keyword */.#defi
18a30 6e 65 20 45 50 5f 56 61 72 53 65 6c 65 63 74 20  ne EP_VarSelect 
18a40 30 78 30 30 30 30 32 30 20 2f 2a 20 70 53 65 6c  0x000020 /* pSel
18a50 65 63 74 20 69 73 20 63 6f 72 72 65 6c 61 74 65  ect is correlate
18a60 64 2c 20 6e 6f 74 20 63 6f 6e 73 74 61 6e 74 20  d, not constant 
18a70 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 44 62  */.#define EP_Db
18a80 6c 51 75 6f 74 65 64 20 30 78 30 30 30 30 34 30  lQuoted 0x000040
18a90 20 2f 2a 20 74 6f 6b 65 6e 2e 7a 20 77 61 73 20   /* token.z was 
18aa0 6f 72 69 67 69 6e 61 6c 6c 79 20 69 6e 20 22 2e  originally in ".
18ab0 2e 2e 22 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  .." */.#define E
18ac0 50 5f 49 6e 66 69 78 46 75 6e 63 20 30 78 30 30  P_InfixFunc 0x00
18ad0 30 30 38 30 20 2f 2a 20 54 72 75 65 20 66 6f 72  0080 /* True for
18ae0 20 61 6e 20 69 6e 66 69 78 20 66 75 6e 63 74 69   an infix functi
18af0 6f 6e 3a 20 4c 49 4b 45 2c 20 47 4c 4f 42 2c 20  on: LIKE, GLOB, 
18b00 65 74 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  etc */.#define E
18b10 50 5f 43 6f 6c 6c 61 74 65 20 20 20 30 78 30 30  P_Collate   0x00
18b20 30 31 30 30 20 2f 2a 20 54 72 65 65 20 63 6f 6e  0100 /* Tree con
18b30 74 61 69 6e 73 20 61 20 54 4b 5f 43 4f 4c 4c 41  tains a TK_COLLA
18b40 54 45 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 23  TE operator */.#
18b50 64 65 66 69 6e 65 20 45 50 5f 47 65 6e 65 72 69  define EP_Generi
18b60 63 20 20 20 30 78 30 30 30 32 30 30 20 2f 2a 20  c   0x000200 /* 
18b70 49 67 6e 6f 72 65 20 43 4f 4c 4c 41 54 45 20 6f  Ignore COLLATE o
18b80 72 20 61 66 66 69 6e 69 74 79 20 6f 6e 20 74 68  r affinity on th
18b90 69 73 20 74 72 65 65 20 2a 2f 0a 23 64 65 66 69  is tree */.#defi
18ba0 6e 65 20 45 50 5f 49 6e 74 56 61 6c 75 65 20 20  ne EP_IntValue  
18bb0 30 78 30 30 30 34 30 30 20 2f 2a 20 49 6e 74 65  0x000400 /* Inte
18bc0 67 65 72 20 76 61 6c 75 65 20 63 6f 6e 74 61 69  ger value contai
18bd0 6e 65 64 20 69 6e 20 75 2e 69 56 61 6c 75 65 20  ned in u.iValue 
18be0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 78 49  */.#define EP_xI
18bf0 73 53 65 6c 65 63 74 20 30 78 30 30 30 38 30 30  sSelect 0x000800
18c00 20 2f 2a 20 78 2e 70 53 65 6c 65 63 74 20 69 73   /* x.pSelect is
18c10 20 76 61 6c 69 64 20 28 6f 74 68 65 72 77 69 73   valid (otherwis
18c20 65 20 78 2e 70 4c 69 73 74 20 69 73 29 20 2a 2f  e x.pList is) */
18c30 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 6b 69 70  .#define EP_Skip
18c40 20 20 20 20 20 20 30 78 30 30 31 30 30 30 20 2f        0x001000 /
18c50 2a 20 43 4f 4c 4c 41 54 45 2c 20 41 53 2c 20 6f  * COLLATE, AS, o
18c60 72 20 55 4e 4c 49 4b 45 4c 59 20 2a 2f 0a 23 64  r UNLIKELY */.#d
18c70 65 66 69 6e 65 20 45 50 5f 52 65 64 75 63 65 64  efine EP_Reduced
18c80 20 20 20 30 78 30 30 32 30 30 30 20 2f 2a 20 45     0x002000 /* E
18c90 78 70 72 20 73 74 72 75 63 74 20 45 58 50 52 5f  xpr struct EXPR_
18ca0 52 45 44 55 43 45 44 53 49 5a 45 20 62 79 74 65  REDUCEDSIZE byte
18cb0 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e  s only */.#defin
18cc0 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 30  e EP_TokenOnly 0
18cd0 78 30 30 34 30 30 30 20 2f 2a 20 45 78 70 72 20  x004000 /* Expr 
18ce0 73 74 72 75 63 74 20 45 58 50 52 5f 54 4f 4b 45  struct EXPR_TOKE
18cf0 4e 4f 4e 4c 59 53 49 5a 45 20 62 79 74 65 73 20  NONLYSIZE bytes 
18d00 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  only */.#define 
18d10 45 50 5f 53 74 61 74 69 63 20 20 20 20 30 78 30  EP_Static    0x0
18d20 30 38 30 30 30 20 2f 2a 20 48 65 6c 64 20 69 6e  08000 /* Held in
18d30 20 6d 65 6d 6f 72 79 20 6e 6f 74 20 6f 62 74 61   memory not obta
18d40 69 6e 65 64 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63  ined from malloc
18d50 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  () */.#define EP
18d60 5f 4d 65 6d 54 6f 6b 65 6e 20 20 30 78 30 31 30  _MemToken  0x010
18d70 30 30 30 20 2f 2a 20 4e 65 65 64 20 74 6f 20 73  000 /* Need to s
18d80 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 20 45  qlite3DbFree() E
18d90 78 70 72 2e 7a 54 6f 6b 65 6e 20 2a 2f 0a 23 64  xpr.zToken */.#d
18da0 65 66 69 6e 65 20 45 50 5f 4e 6f 52 65 64 75 63  efine EP_NoReduc
18db0 65 20 20 30 78 30 32 30 30 30 30 20 2f 2a 20 43  e  0x020000 /* C
18dc0 61 6e 6e 6f 74 20 45 58 50 52 44 55 50 5f 52 45  annot EXPRDUP_RE
18dd0 44 55 43 45 20 74 68 69 73 20 45 78 70 72 20 2a  DUCE this Expr *
18de0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 55 6e 6c  /.#define EP_Unl
18df0 69 6b 65 6c 79 20 20 30 78 30 34 30 30 30 30 20  ikely  0x040000 
18e00 2f 2a 20 75 6e 6c 69 6b 65 6c 79 28 29 20 6f 72  /* unlikely() or
18e10 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 29 20 66 75   likelihood() fu
18e20 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
18e30 65 20 45 50 5f 43 6f 6e 73 74 46 75 6e 63 20 30  e EP_ConstFunc 0
18e40 78 30 38 30 30 30 30 20 2f 2a 20 41 20 53 51 4c  x080000 /* A SQL
18e50 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
18e60 54 20 6f 72 20 5f 53 4c 4f 43 48 4e 47 20 66 75  T or _SLOCHNG fu
18e70 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
18e80 65 20 45 50 5f 43 61 6e 42 65 4e 75 6c 6c 20 30  e EP_CanBeNull 0
18e90 78 31 30 30 30 30 30 20 2f 2a 20 43 61 6e 20 62  x100000 /* Can b
18ea0 65 20 6e 75 6c 6c 20 64 65 73 70 69 74 65 20 4e  e null despite N
18eb0 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69  OT NULL constrai
18ec0 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  nt */.#define EP
18ed0 5f 53 75 62 71 75 65 72 79 20 20 30 78 32 30 30  _Subquery  0x200
18ee0 30 30 30 20 2f 2a 20 54 72 65 65 20 63 6f 6e 74  000 /* Tree cont
18ef0 61 69 6e 73 20 61 20 54 4b 5f 53 45 4c 45 43 54  ains a TK_SELECT
18f00 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 23 64 65   operator */.#de
18f10 66 69 6e 65 20 45 50 5f 41 6c 69 61 73 20 20 20  fine EP_Alias   
18f20 20 20 30 78 34 30 30 30 30 30 20 2f 2a 20 49 73    0x400000 /* Is
18f30 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 61 20   an alias for a 
18f40 72 65 73 75 6c 74 20 73 65 74 20 63 6f 6c 75 6d  result set colum
18f50 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  n */.#define EP_
18f60 4c 65 61 66 20 20 20 20 20 20 30 78 38 30 30 30  Leaf      0x8000
18f70 30 30 20 2f 2a 20 45 78 70 72 2e 70 4c 65 66 74  00 /* Expr.pLeft
18f80 2c 20 2e 70 52 69 67 68 74 2c 20 2e 75 2e 70 53  , .pRight, .u.pS
18f90 65 6c 65 63 74 20 61 6c 6c 20 4e 55 4c 4c 20 2a  elect all NULL *
18fa0 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 45 50 5f  /../*.** The EP_
18fb0 50 72 6f 70 61 67 61 74 65 20 6d 61 73 6b 20 69  Propagate mask i
18fc0 73 20 61 20 73 65 74 20 6f 66 20 70 72 6f 70 65  s a set of prope
18fd0 72 74 69 65 73 20 74 68 61 74 20 61 75 74 6f 6d  rties that autom
18fe0 61 74 69 63 61 6c 6c 79 20 70 72 6f 70 61 67 61  atically propaga
18ff0 74 65 0a 2a 2a 20 75 70 77 61 72 64 73 20 69 6e  te.** upwards in
19000 74 6f 20 70 61 72 65 6e 74 20 6e 6f 64 65 73 2e  to parent nodes.
19010 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 50  .*/.#define EP_P
19020 72 6f 70 61 67 61 74 65 20 28 45 50 5f 43 6f 6c  ropagate (EP_Col
19030 6c 61 74 65 7c 45 50 5f 53 75 62 71 75 65 72 79  late|EP_Subquery
19040 7c 45 50 5f 48 61 73 46 75 6e 63 29 0a 0a 2f 2a  |EP_HasFunc)../*
19050 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73  .** These macros
19060 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20   can be used to 
19070 74 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c  test, set, or cl
19080 65 61 72 20 62 69 74 73 20 69 6e 20 74 68 65 0a  ear bits in the.
19090 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73 20 66 69  ** Expr.flags fi
190a0 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  eld..*/.#define 
190b0 45 78 70 72 48 61 73 50 72 6f 70 65 72 74 79 28  ExprHasProperty(
190c0 45 2c 50 29 20 20 20 20 20 28 28 28 45 29 2d 3e  E,P)     (((E)->
190d0 66 6c 61 67 73 26 28 50 29 29 21 3d 30 29 0a 23  flags&(P))!=0).#
190e0 64 65 66 69 6e 65 20 45 78 70 72 48 61 73 41 6c  define ExprHasAl
190f0 6c 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20  lProperty(E,P)  
19100 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 50 29  (((E)->flags&(P)
19110 29 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20  )==(P)).#define 
19120 45 78 70 72 53 65 74 50 72 6f 70 65 72 74 79 28  ExprSetProperty(
19130 45 2c 50 29 20 20 20 20 20 28 45 29 2d 3e 66 6c  E,P)     (E)->fl
19140 61 67 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e 65  ags|=(P).#define
19150 20 45 78 70 72 43 6c 65 61 72 50 72 6f 70 65 72   ExprClearProper
19160 74 79 28 45 2c 50 29 20 20 20 28 45 29 2d 3e 66  ty(E,P)   (E)->f
19170 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 20 54  lags&=~(P)../* T
19180 68 65 20 45 78 70 72 53 65 74 56 56 41 50 72 6f  he ExprSetVVAPro
19190 70 65 72 74 79 28 29 20 6d 61 63 72 6f 20 69 73  perty() macro is
191a0 20 75 73 65 64 20 66 6f 72 20 56 65 72 69 66 69   used for Verifi
191b0 63 61 74 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69  cation, Validati
191c0 6f 6e 2c 0a 2a 2a 20 61 6e 64 20 41 63 63 72 65  on,.** and Accre
191d0 64 69 74 61 74 69 6f 6e 20 6f 6e 6c 79 2e 20 20  ditation only.  
191e0 49 74 20 77 6f 72 6b 73 20 6c 69 6b 65 20 45 78  It works like Ex
191f0 70 72 53 65 74 50 72 6f 70 65 72 74 79 28 29 20  prSetProperty() 
19200 64 75 72 69 6e 67 20 56 56 41 0a 2a 2a 20 70 72  during VVA.** pr
19210 6f 63 65 73 73 65 73 20 62 75 74 20 69 73 20 61  ocesses but is a
19220 20 6e 6f 2d 6f 70 20 66 6f 72 20 64 65 6c 69 76   no-op for deliv
19230 65 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ery..*/.#ifdef S
19240 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 20 64 65  QLITE_DEBUG.# de
19250 66 69 6e 65 20 45 78 70 72 53 65 74 56 56 41 50  fine ExprSetVVAP
19260 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 28 45  roperty(E,P)  (E
19270 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 65  )->flags|=(P).#e
19280 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 45 78 70  lse.# define Exp
19290 72 53 65 74 56 56 41 50 72 6f 70 65 72 74 79 28  rSetVVAProperty(
192a0 45 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  E,P).#endif../*.
192b0 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74  ** Macros to det
192c0 65 72 6d 69 6e 65 20 74 68 65 20 6e 75 6d 62 65  ermine the numbe
192d0 72 20 6f 66 20 62 79 74 65 73 20 72 65 71 75 69  r of bytes requi
192e0 72 65 64 20 62 79 20 61 20 6e 6f 72 6d 61 6c 20  red by a normal 
192f0 45 78 70 72 0a 2a 2a 20 73 74 72 75 63 74 2c 20  Expr.** struct, 
19300 61 6e 20 45 78 70 72 20 73 74 72 75 63 74 20 77  an Expr struct w
19310 69 74 68 20 74 68 65 20 45 50 5f 52 65 64 75 63  ith the EP_Reduc
19320 65 64 20 66 6c 61 67 20 73 65 74 20 69 6e 20 45  ed flag set in E
19330 78 70 72 2e 66 6c 61 67 73 0a 2a 2a 20 61 6e 64  xpr.flags.** and
19340 20 61 6e 20 45 78 70 72 20 73 74 72 75 63 74 20   an Expr struct 
19350 77 69 74 68 20 74 68 65 20 45 50 5f 54 6f 6b 65  with the EP_Toke
19360 6e 4f 6e 6c 79 20 66 6c 61 67 20 73 65 74 2e 0a  nOnly flag set..
19370 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f  */.#define EXPR_
19380 46 55 4c 4c 53 49 5a 45 20 20 20 20 20 20 20 20  FULLSIZE        
19390 20 20 20 73 69 7a 65 6f 66 28 45 78 70 72 29 20     sizeof(Expr) 
193a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 75 6c            /* Ful
193b0 6c 20 73 69 7a 65 20 2a 2f 0a 23 64 65 66 69 6e  l size */.#defin
193c0 65 20 45 58 50 52 5f 52 45 44 55 43 45 44 53 49  e EXPR_REDUCEDSI
193d0 5a 45 20 20 20 20 20 20 20 20 6f 66 66 73 65 74  ZE        offset
193e0 6f 66 28 45 78 70 72 2c 69 54 61 62 6c 65 29 20  of(Expr,iTable) 
193f0 20 2f 2a 20 43 6f 6d 6d 6f 6e 20 66 65 61 74 75   /* Common featu
19400 72 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  res */.#define E
19410 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a  XPR_TOKENONLYSIZ
19420 45 20 20 20 20 20 20 6f 66 66 73 65 74 6f 66 28  E      offsetof(
19430 45 78 70 72 2c 70 4c 65 66 74 29 20 20 20 2f 2a  Expr,pLeft)   /*
19440 20 46 65 77 65 72 20 66 65 61 74 75 72 65 73 20   Fewer features 
19450 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20  */../*.** Flags 
19460 70 61 73 73 65 64 20 74 6f 20 74 68 65 20 73 71  passed to the sq
19470 6c 69 74 65 33 45 78 70 72 44 75 70 28 29 20 66  lite3ExprDup() f
19480 75 6e 63 74 69 6f 6e 2e 20 53 65 65 20 74 68 65  unction. See the
19490 20 68 65 61 64 65 72 20 63 6f 6d 6d 65 6e 74 0a   header comment.
194a0 2a 2a 20 61 62 6f 76 65 20 73 71 6c 69 74 65 33  ** above sqlite3
194b0 45 78 70 72 44 75 70 28 29 20 66 6f 72 20 64 65  ExprDup() for de
194c0 74 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  tails..*/.#defin
194d0 65 20 45 58 50 52 44 55 50 5f 52 45 44 55 43 45  e EXPRDUP_REDUCE
194e0 20 20 20 20 20 20 20 20 20 30 78 30 30 30 31 20           0x0001 
194f0 20 2f 2a 20 55 73 65 64 20 72 65 64 75 63 65 64   /* Used reduced
19500 2d 73 69 7a 65 20 45 78 70 72 20 6e 6f 64 65 73  -size Expr nodes
19510 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 6c 69 73   */../*.** A lis
19520 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73  t of expressions
19530 2e 20 20 45 61 63 68 20 65 78 70 72 65 73 73 69  .  Each expressi
19540 6f 6e 20 6d 61 79 20 6f 70 74 69 6f 6e 61 6c 6c  on may optionall
19550 79 20 68 61 76 65 20 61 0a 2a 2a 20 6e 61 6d 65  y have a.** name
19560 2e 20 20 41 6e 20 65 78 70 72 2f 6e 61 6d 65 20  .  An expr/name 
19570 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 63 61 6e 20  combination can 
19580 62 65 20 75 73 65 64 20 69 6e 20 73 65 76 65 72  be used in sever
19590 61 6c 20 77 61 79 73 2c 20 73 75 63 68 0a 2a 2a  al ways, such.**
195a0 20 61 73 20 74 68 65 20 6c 69 73 74 20 6f 66 20   as the list of 
195b0 22 65 78 70 72 20 41 53 20 49 44 22 20 66 69 65  "expr AS ID" fie
195c0 6c 64 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20  lds following a 
195d0 22 53 45 4c 45 43 54 22 20 6f 72 20 69 6e 20 74  "SELECT" or in t
195e0 68 65 0a 2a 2a 20 6c 69 73 74 20 6f 66 20 22 49  he.** list of "I
195f0 44 20 3d 20 65 78 70 72 22 20 69 74 65 6d 73 20  D = expr" items 
19600 69 6e 20 61 6e 20 55 50 44 41 54 45 2e 20 20 41  in an UPDATE.  A
19610 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73 73   list of express
19620 69 6f 6e 73 20 63 61 6e 0a 2a 2a 20 61 6c 73 6f  ions can.** also
19630 20 62 65 20 75 73 65 64 20 61 73 20 74 68 65 20   be used as the 
19640 61 72 67 75 6d 65 6e 74 20 74 6f 20 61 20 66 75  argument to a fu
19650 6e 63 74 69 6f 6e 2c 20 69 6e 20 77 68 69 63 68  nction, in which
19660 20 63 61 73 65 20 74 68 65 20 61 2e 7a 4e 61 6d   case the a.zNam
19670 65 0a 2a 2a 20 66 69 65 6c 64 20 69 73 20 6e 6f  e.** field is no
19680 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 42 79  t used..**.** By
19690 20 64 65 66 61 75 6c 74 20 74 68 65 20 45 78 70   default the Exp
196a0 72 2e 7a 53 70 61 6e 20 66 69 65 6c 64 20 68 6f  r.zSpan field ho
196b0 6c 64 73 20 61 20 68 75 6d 61 6e 2d 72 65 61 64  lds a human-read
196c0 61 62 6c 65 20 64 65 73 63 72 69 70 74 69 6f 6e  able description
196d0 20 6f 66 0a 2a 2a 20 74 68 65 20 65 78 70 72 65   of.** the expre
196e0 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20 75 73  ssion that is us
196f0 65 64 20 69 6e 20 74 68 65 20 67 65 6e 65 72 61  ed in the genera
19700 74 69 6f 6e 20 6f 66 20 65 72 72 6f 72 20 6d 65  tion of error me
19710 73 73 61 67 65 73 20 61 6e 64 0a 2a 2a 20 63 6f  ssages and.** co
19720 6c 75 6d 6e 20 6c 61 62 65 6c 73 2e 20 20 49 6e  lumn labels.  In
19730 20 74 68 69 73 20 63 61 73 65 2c 20 45 78 70 72   this case, Expr
19740 2e 7a 53 70 61 6e 20 69 73 20 74 79 70 69 63 61  .zSpan is typica
19750 6c 6c 79 20 74 68 65 20 74 65 78 74 20 6f 66 20  lly the text of 
19760 61 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 65 78 70 72  a.** column expr
19770 65 73 73 69 6f 6e 20 61 73 20 69 74 20 65 78 69  ession as it exi
19780 73 74 73 20 69 6e 20 61 20 53 45 4c 45 43 54 20  sts in a SELECT 
19790 73 74 61 74 65 6d 65 6e 74 2e 20 20 48 6f 77 65  statement.  Howe
197a0 76 65 72 2c 20 69 66 0a 2a 2a 20 74 68 65 20 62  ver, if.** the b
197b0 53 70 61 6e 49 73 54 61 62 20 66 6c 61 67 20 69  SpanIsTab flag i
197c0 73 20 73 65 74 2c 20 74 68 65 6e 20 7a 53 70 61  s set, then zSpa
197d0 6e 20 69 73 20 6f 76 65 72 6c 6f 61 64 65 64 20  n is overloaded 
197e0 74 6f 20 6d 65 61 6e 20 74 68 65 20 6e 61 6d 65  to mean the name
197f0 0a 2a 2a 20 6f 66 20 74 68 65 20 72 65 73 75 6c  .** of the resul
19800 74 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20  t column in the 
19810 66 6f 72 6d 3a 20 44 41 54 41 42 41 53 45 2e 54  form: DATABASE.T
19820 41 42 4c 45 2e 43 4f 4c 55 4d 4e 2e 20 20 54 68  ABLE.COLUMN.  Th
19830 69 73 20 6c 61 74 65 72 0a 2a 2a 20 66 6f 72 6d  is later.** form
19840 20 69 73 20 75 73 65 64 20 66 6f 72 20 6e 61 6d   is used for nam
19850 65 20 72 65 73 6f 6c 75 74 69 6f 6e 20 77 69 74  e resolution wit
19860 68 20 6e 65 73 74 65 64 20 46 52 4f 4d 20 63 6c  h nested FROM cl
19870 61 75 73 65 73 2e 0a 2a 2f 0a 73 74 72 75 63 74  auses..*/.struct
19880 20 45 78 70 72 4c 69 73 74 20 7b 0a 20 20 69 6e   ExprList {.  in
19890 74 20 6e 45 78 70 72 3b 20 20 20 20 20 20 20 20  t nExpr;        
198a0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
198b0 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20 6f 6e  f expressions on
198c0 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20 73   the list */.  s
198d0 74 72 75 63 74 20 45 78 70 72 4c 69 73 74 5f 69  truct ExprList_i
198e0 74 65 6d 20 7b 20 2f 2a 20 46 6f 72 20 65 61 63  tem { /* For eac
198f0 68 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20  h expression in 
19900 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20 20 20  the list */.    
19910 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20  Expr *pExpr;    
19920 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70          /* The p
19930 61 72 73 65 20 74 72 65 65 20 66 6f 72 20 74 68  arse tree for th
19940 69 73 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f  is expression */
19950 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65  .    char *zName
19960 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
19970 54 6f 6b 65 6e 20 61 73 73 6f 63 69 61 74 65 64  Token associated
19980 20 77 69 74 68 20 74 68 69 73 20 65 78 70 72 65   with this expre
19990 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 63 68 61  ssion */.    cha
199a0 72 20 2a 7a 53 70 61 6e 3b 20 20 20 20 20 20 20  r *zSpan;       
199b0 20 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c       /* Original
199c0 20 74 65 78 74 20 6f 66 20 74 68 65 20 65 78 70   text of the exp
199d0 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 75  ression */.    u
199e0 38 20 73 6f 72 74 4f 72 64 65 72 3b 20 20 20 20  8 sortOrder;    
199f0 20 20 20 20 20 20 20 2f 2a 20 31 20 66 6f 72 20         /* 1 for 
19a00 44 45 53 43 20 6f 72 20 30 20 66 6f 72 20 41 53  DESC or 0 for AS
19a10 43 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65  C */.    unsigne
19a20 64 20 64 6f 6e 65 20 3a 31 3b 20 20 20 20 20 20  d done :1;      
19a30 20 2f 2a 20 41 20 66 6c 61 67 20 74 6f 20 69 6e   /* A flag to in
19a40 64 69 63 61 74 65 20 77 68 65 6e 20 70 72 6f 63  dicate when proc
19a50 65 73 73 69 6e 67 20 69 73 20 66 69 6e 69 73 68  essing is finish
19a60 65 64 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e  ed */.    unsign
19a70 65 64 20 62 53 70 61 6e 49 73 54 61 62 20 3a 31  ed bSpanIsTab :1
19a80 3b 20 2f 2a 20 7a 53 70 61 6e 20 68 6f 6c 64 73  ; /* zSpan holds
19a90 20 44 42 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e   DB.TABLE.COLUMN
19aa0 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64   */.    unsigned
19ab0 20 72 65 75 73 61 62 6c 65 20 3a 31 3b 20 20 20   reusable :1;   
19ac0 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 65 78 70 72  /* Constant expr
19ad0 65 73 73 69 6f 6e 20 69 73 20 72 65 75 73 61 62  ession is reusab
19ae0 6c 65 20 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20  le */.    union 
19af0 7b 0a 20 20 20 20 20 20 73 74 72 75 63 74 20 7b  {.      struct {
19b00 0a 20 20 20 20 20 20 20 20 75 31 36 20 69 4f 72  .        u16 iOr
19b10 64 65 72 42 79 43 6f 6c 3b 20 20 20 20 20 20 2f  derByCol;      /
19b20 2a 20 46 6f 72 20 4f 52 44 45 52 20 42 59 2c 20  * For ORDER BY, 
19b30 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e  column number in
19b40 20 72 65 73 75 6c 74 20 73 65 74 20 2a 2f 0a 20   result set */. 
19b50 20 20 20 20 20 20 20 75 31 36 20 69 41 6c 69 61         u16 iAlia
19b60 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  s;           /* 
19b70 49 6e 64 65 78 20 69 6e 74 6f 20 50 61 72 73 65  Index into Parse
19b80 2e 61 41 6c 69 61 73 5b 5d 20 66 6f 72 20 7a 4e  .aAlias[] for zN
19b90 61 6d 65 20 2a 2f 0a 20 20 20 20 20 20 7d 20 78  ame */.      } x
19ba0 3b 0a 20 20 20 20 20 20 69 6e 74 20 69 43 6f 6e  ;.      int iCon
19bb0 73 74 45 78 70 72 52 65 67 3b 20 20 20 20 20 20  stExprReg;      
19bc0 2f 2a 20 52 65 67 69 73 74 65 72 20 69 6e 20 77  /* Register in w
19bd0 68 69 63 68 20 45 78 70 72 20 76 61 6c 75 65 20  hich Expr value 
19be0 69 73 20 63 61 63 68 65 64 20 2a 2f 0a 20 20 20  is cached */.   
19bf0 20 7d 20 75 3b 0a 20 20 7d 20 61 5b 31 5d 3b 20   } u;.  } a[1]; 
19c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c10 20 2f 2a 20 4f 6e 65 20 73 6c 6f 74 20 66 6f 72   /* One slot for
19c20 20 65 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e   each expression
19c30 20 69 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a   in the list */.
19c40 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  };../*.** An ins
19c50 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74  tance of this st
19c60 72 75 63 74 75 72 65 20 63 61 6e 20 68 6f 6c 64  ructure can hold
19c70 20 61 20 73 69 6d 70 6c 65 20 6c 69 73 74 20 6f   a simple list o
19c80 66 20 69 64 65 6e 74 69 66 69 65 72 73 2c 0a 2a  f identifiers,.*
19c90 2a 20 73 75 63 68 20 61 73 20 74 68 65 20 6c 69  * such as the li
19ca0 73 74 20 22 61 2c 62 2c 63 22 20 69 6e 20 74 68  st "a,b,c" in th
19cb0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74  e following stat
19cc0 65 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 20 20  ements:.**.**   
19cd0 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
19ce0 28 61 2c 62 2c 63 29 20 56 41 4c 55 45 53 20 2e  (a,b,c) VALUES .
19cf0 2e 2e 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45 41  ..;.**      CREA
19d00 54 45 20 49 4e 44 45 58 20 69 64 78 20 4f 4e 20  TE INDEX idx ON 
19d10 74 28 61 2c 62 2c 63 29 3b 0a 2a 2a 20 20 20 20  t(a,b,c);.**    
19d20 20 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52    CREATE TRIGGER
19d30 20 74 72 69 67 20 42 45 46 4f 52 45 20 55 50 44   trig BEFORE UPD
19d40 41 54 45 20 4f 4e 20 74 28 61 2c 62 2c 63 29 20  ATE ON t(a,b,c) 
19d50 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49  ...;.**.** The I
19d60 64 4c 69 73 74 2e 61 2e 69 64 78 20 66 69 65 6c  dList.a.idx fiel
19d70 64 20 69 73 20 75 73 65 64 20 77 68 65 6e 20 74  d is used when t
19d80 68 65 20 49 64 4c 69 73 74 20 72 65 70 72 65 73  he IdList repres
19d90 65 6e 74 73 20 74 68 65 20 6c 69 73 74 20 6f 66  ents the list of
19da0 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  .** column names
19db0 20 61 66 74 65 72 20 61 20 74 61 62 6c 65 20 6e   after a table n
19dc0 61 6d 65 20 69 6e 20 61 6e 20 49 4e 53 45 52 54  ame in an INSERT
19dd0 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20   statement.  In 
19de0 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a  the statement.**
19df0 0a 2a 2a 20 20 20 20 20 49 4e 53 45 52 54 20 49  .**     INSERT I
19e00 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e  NTO t(a,b,c) ...
19e10 0a 2a 2a 0a 2a 2a 20 49 66 20 22 61 22 20 69 73  .**.** If "a" is
19e20 20 74 68 65 20 6b 2d 74 68 20 63 6f 6c 75 6d 6e   the k-th column
19e30 20 6f 66 20 74 61 62 6c 65 20 22 74 22 2c 20 74   of table "t", t
19e40 68 65 6e 20 49 64 4c 69 73 74 2e 61 5b 30 5d 2e  hen IdList.a[0].
19e50 69 64 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72 75 63  idx==k..*/.struc
19e60 74 20 49 64 4c 69 73 74 20 7b 0a 20 20 73 74 72  t IdList {.  str
19e70 75 63 74 20 49 64 4c 69 73 74 5f 69 74 65 6d 20  uct IdList_item 
19e80 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d  {.    char *zNam
19e90 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20  e;      /* Name 
19ea0 6f 66 20 74 68 65 20 69 64 65 6e 74 69 66 69 65  of the identifie
19eb0 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 64 78  r */.    int idx
19ec0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e  ;          /* In
19ed0 64 65 78 20 69 6e 20 73 6f 6d 65 20 54 61 62 6c  dex in some Tabl
19ee0 65 2e 61 43 6f 6c 5b 5d 20 6f 66 20 61 20 63 6f  e.aCol[] of a co
19ef0 6c 75 6d 6e 20 6e 61 6d 65 64 20 7a 4e 61 6d 65  lumn named zName
19f00 20 2a 2f 0a 20 20 7d 20 2a 61 3b 0a 20 20 69 6e   */.  } *a;.  in
19f10 74 20 6e 49 64 3b 20 20 20 20 20 20 20 20 20 2f  t nId;         /
19f20 2a 20 4e 75 6d 62 65 72 20 6f 66 20 69 64 65 6e  * Number of iden
19f30 74 69 66 69 65 72 73 20 6f 6e 20 74 68 65 20 6c  tifiers on the l
19f40 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ist */.};../*.**
19f50 20 54 68 65 20 62 69 74 6d 61 73 6b 20 64 61 74   The bitmask dat
19f60 61 74 79 70 65 20 64 65 66 69 6e 65 64 20 62 65  atype defined be
19f70 6c 6f 77 20 69 73 20 75 73 65 64 20 66 6f 72 20  low is used for 
19f80 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61  various optimiza
19f90 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 43 68 61  tions..**.** Cha
19fa0 6e 67 69 6e 67 20 74 68 69 73 20 66 72 6f 6d 20  nging this from 
19fb0 61 20 36 34 2d 62 69 74 20 74 6f 20 61 20 33 32  a 64-bit to a 32
19fc0 2d 62 69 74 20 74 79 70 65 20 6c 69 6d 69 74 73  -bit type limits
19fd0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a 2a   the number of.*
19fe0 2a 20 74 61 62 6c 65 73 20 69 6e 20 61 20 6a 6f  * tables in a jo
19ff0 69 6e 20 74 6f 20 33 32 20 69 6e 73 74 65 61 64  in to 32 instead
1a000 20 6f 66 20 36 34 2e 20 20 42 75 74 20 69 74 20   of 64.  But it 
1a010 61 6c 73 6f 20 72 65 64 75 63 65 73 20 74 68 65  also reduces the
1a020 20 73 69 7a 65 0a 2a 2a 20 6f 66 20 74 68 65 20   size.** of the 
1a030 6c 69 62 72 61 72 79 20 62 79 20 37 33 38 20 62  library by 738 b
1a040 79 74 65 73 20 6f 6e 20 69 78 38 36 2e 0a 2a 2f  ytes on ix86..*/
1a050 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 42  .#ifdef SQLITE_B
1a060 49 54 4d 41 53 4b 5f 54 59 50 45 0a 20 20 74 79  ITMASK_TYPE.  ty
1a070 70 65 64 65 66 20 53 51 4c 49 54 45 5f 42 49 54  pedef SQLITE_BIT
1a080 4d 41 53 4b 5f 54 59 50 45 20 42 69 74 6d 61 73  MASK_TYPE Bitmas
1a090 6b 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70 65 64  k;.#else.  typed
1a0a0 65 66 20 75 36 34 20 42 69 74 6d 61 73 6b 3b 0a  ef u64 Bitmask;.
1a0b0 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
1a0c0 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73  e number of bits
1a0d0 20 69 6e 20 61 20 42 69 74 6d 61 73 6b 2e 20 20   in a Bitmask.  
1a0e0 22 42 4d 53 22 20 6d 65 61 6e 73 20 22 42 69 74  "BMS" means "Bit
1a0f0 4d 61 73 6b 20 53 69 7a 65 22 2e 0a 2a 2f 0a 23  Mask Size"..*/.#
1a100 64 65 66 69 6e 65 20 42 4d 53 20 20 28 28 69 6e  define BMS  ((in
1a110 74 29 28 73 69 7a 65 6f 66 28 42 69 74 6d 61 73  t)(sizeof(Bitmas
1a120 6b 29 2a 38 29 29 0a 0a 2f 2a 0a 2a 2a 20 41 20  k)*8))../*.** A 
1a130 62 69 74 20 69 6e 20 61 20 42 69 74 6d 61 73 6b  bit in a Bitmask
1a140 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 4b  .*/.#define MASK
1a150 42 49 54 28 6e 29 20 20 20 28 28 28 42 69 74 6d  BIT(n)   (((Bitm
1a160 61 73 6b 29 31 29 3c 3c 28 6e 29 29 0a 23 64 65  ask)1)<<(n)).#de
1a170 66 69 6e 65 20 4d 41 53 4b 42 49 54 33 32 28 6e  fine MASKBIT32(n
1a180 29 20 28 28 28 75 6e 73 69 67 6e 65 64 20 69 6e  ) (((unsigned in
1a190 74 29 31 29 3c 3c 28 6e 29 29 0a 23 64 65 66 69  t)1)<<(n)).#defi
1a1a0 6e 65 20 41 4c 4c 42 49 54 53 20 20 20 20 20 20  ne ALLBITS      
1a1b0 28 28 42 69 74 6d 61 73 6b 29 2d 31 29 0a 0a 2f  ((Bitmask)-1)../
1a1c0 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
1a1d0 6e 67 20 73 74 72 75 63 74 75 72 65 20 64 65 73  ng structure des
1a1e0 63 72 69 62 65 73 20 74 68 65 20 46 52 4f 4d 20  cribes the FROM 
1a1f0 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45  clause of a SELE
1a200 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a  CT statement..**
1a210 20 45 61 63 68 20 74 61 62 6c 65 20 6f 72 20 73   Each table or s
1a220 75 62 71 75 65 72 79 20 69 6e 20 74 68 65 20 46  ubquery in the F
1a230 52 4f 4d 20 63 6c 61 75 73 65 20 69 73 20 61 20  ROM clause is a 
1a240 73 65 70 61 72 61 74 65 20 65 6c 65 6d 65 6e 74  separate element
1a250 20 6f 66 0a 2a 2a 20 74 68 65 20 53 72 63 4c 69   of.** the SrcLi
1a260 73 74 2e 61 5b 5d 20 61 72 72 61 79 2e 0a 2a 2a  st.a[] array..**
1a270 0a 2a 2a 20 57 69 74 68 20 74 68 65 20 61 64 64  .** With the add
1a280 69 74 69 6f 6e 20 6f 66 20 6d 75 6c 74 69 70 6c  ition of multipl
1a290 65 20 64 61 74 61 62 61 73 65 20 73 75 70 70 6f  e database suppo
1a2a0 72 74 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  rt, the followin
1a2b0 67 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 63  g structure.** c
1a2c0 61 6e 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20  an also be used 
1a2d0 74 6f 20 64 65 73 63 72 69 62 65 20 61 20 70 61  to describe a pa
1a2e0 72 74 69 63 75 6c 61 72 20 74 61 62 6c 65 20 73  rticular table s
1a2f0 75 63 68 20 61 73 20 74 68 65 20 74 61 62 6c 65  uch as the table
1a300 20 74 68 61 74 0a 2a 2a 20 69 73 20 6d 6f 64 69   that.** is modi
1a310 66 69 65 64 20 62 79 20 61 6e 20 49 4e 53 45 52  fied by an INSER
1a320 54 2c 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50  T, DELETE, or UP
1a330 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 2e 20  DATE statement. 
1a340 20 49 6e 20 73 74 61 6e 64 61 72 64 20 53 51 4c   In standard SQL
1a350 2c 0a 2a 2a 20 73 75 63 68 20 61 20 74 61 62 6c  ,.** such a tabl
1a360 65 20 6d 75 73 74 20 62 65 20 61 20 73 69 6d 70  e must be a simp
1a370 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 20 20 42 75  le name: ID.  Bu
1a380 74 20 69 6e 20 53 51 4c 69 74 65 2c 20 74 68 65  t in SQLite, the
1a390 20 74 61 62 6c 65 20 63 61 6e 0a 2a 2a 20 6e 6f   table can.** no
1a3a0 77 20 62 65 20 69 64 65 6e 74 69 66 69 65 64 20  w be identified 
1a3b0 62 79 20 61 20 64 61 74 61 62 61 73 65 20 6e 61  by a database na
1a3c0 6d 65 2c 20 61 20 64 6f 74 2c 20 74 68 65 6e 20  me, a dot, then 
1a3d0 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 3a 20  the table name: 
1a3e0 49 44 2e 49 44 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ID.ID..**.** The
1a3f0 20 6a 6f 69 6e 74 79 70 65 20 73 74 61 72 74 73   jointype starts
1a400 20 6f 75 74 20 73 68 6f 77 69 6e 67 20 74 68 65   out showing the
1a410 20 6a 6f 69 6e 20 74 79 70 65 20 62 65 74 77 65   join type betwe
1a420 65 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  en the current t
1a430 61 62 6c 65 0a 2a 2a 20 61 6e 64 20 74 68 65 20  able.** and the 
1a440 6e 65 78 74 20 74 61 62 6c 65 20 6f 6e 20 74 68  next table on th
1a450 65 20 6c 69 73 74 2e 20 20 54 68 65 20 70 61 72  e list.  The par
1a460 73 65 72 20 62 75 69 6c 64 73 20 74 68 65 20 6c  ser builds the l
1a470 69 73 74 20 74 68 69 73 20 77 61 79 2e 0a 2a 2a  ist this way..**
1a480 20 42 75 74 20 73 71 6c 69 74 65 33 53 72 63 4c   But sqlite3SrcL
1a490 69 73 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65  istShiftJoinType
1a4a0 28 29 20 6c 61 74 65 72 20 73 68 69 66 74 73 20  () later shifts 
1a4b0 74 68 65 20 6a 6f 69 6e 74 79 70 65 73 20 73 6f  the jointypes so
1a4c0 20 74 68 61 74 20 65 61 63 68 0a 2a 2a 20 6a 6f   that each.** jo
1a4d0 69 6e 74 79 70 65 20 65 78 70 72 65 73 73 65 73  intype expresses
1a4e0 20 74 68 65 20 6a 6f 69 6e 20 62 65 74 77 65 65   the join betwee
1a4f0 6e 20 74 68 65 20 74 61 62 6c 65 20 61 6e 64 20  n the table and 
1a500 74 68 65 20 70 72 65 76 69 6f 75 73 20 74 61 62  the previous tab
1a510 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65  le..**.** In the
1a520 20 63 6f 6c 55 73 65 64 20 66 69 65 6c 64 2c 20   colUsed field, 
1a530 74 68 65 20 68 69 67 68 2d 6f 72 64 65 72 20 62  the high-order b
1a540 69 74 20 28 62 69 74 20 36 33 29 20 69 73 20 73  it (bit 63) is s
1a550 65 74 20 69 66 20 74 68 65 20 74 61 62 6c 65 0a  et if the table.
1a560 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 6d 6f 72 65  ** contains more
1a570 20 74 68 61 6e 20 36 33 20 63 6f 6c 75 6d 6e 73   than 63 columns
1a580 20 61 6e 64 20 74 68 65 20 36 34 2d 74 68 20 6f   and the 64-th o
1a590 72 20 6c 61 74 65 72 20 63 6f 6c 75 6d 6e 20 69  r later column i
1a5a0 73 20 75 73 65 64 2e 0a 2a 2f 0a 73 74 72 75 63  s used..*/.struc
1a5b0 74 20 53 72 63 4c 69 73 74 20 7b 0a 20 20 69 6e  t SrcList {.  in
1a5c0 74 20 6e 53 72 63 3b 20 20 20 20 20 20 20 20 2f  t nSrc;        /
1a5d0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c  * Number of tabl
1a5e0 65 73 20 6f 72 20 73 75 62 71 75 65 72 69 65 73  es or subqueries
1a5f0 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61   in the FROM cla
1a600 75 73 65 20 2a 2f 0a 20 20 75 33 32 20 6e 41 6c  use */.  u32 nAl
1a610 6c 6f 63 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d  loc;      /* Num
1a620 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 61  ber of entries a
1a630 6c 6c 6f 63 61 74 65 64 20 69 6e 20 61 5b 5d 20  llocated in a[] 
1a640 62 65 6c 6f 77 20 2a 2f 0a 20 20 73 74 72 75 63  below */.  struc
1a650 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 7b  t SrcList_item {
1a660 0a 20 20 20 20 53 63 68 65 6d 61 20 2a 70 53 63  .    Schema *pSc
1a670 68 65 6d 61 3b 20 20 2f 2a 20 53 63 68 65 6d 61  hema;  /* Schema
1a680 20 74 6f 20 77 68 69 63 68 20 74 68 69 73 20 69   to which this i
1a690 74 65 6d 20 69 73 20 66 69 78 65 64 20 2a 2f 0a  tem is fixed */.
1a6a0 20 20 20 20 63 68 61 72 20 2a 7a 44 61 74 61 62      char *zDatab
1a6b0 61 73 65 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f 66  ase;  /* Name of
1a6c0 20 64 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e   database holdin
1a6d0 67 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  g this table */.
1a6e0 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b      char *zName;
1a6f0 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
1a700 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20   the table */.  
1a710 20 20 63 68 61 72 20 2a 7a 41 6c 69 61 73 3b 20    char *zAlias; 
1a720 20 20 20 20 2f 2a 20 54 68 65 20 22 42 22 20 70      /* The "B" p
1a730 61 72 74 20 6f 66 20 61 20 22 41 20 41 53 20 42  art of a "A AS B
1a740 22 20 70 68 72 61 73 65 2e 20 20 7a 4e 61 6d 65  " phrase.  zName
1a750 20 69 73 20 74 68 65 20 22 41 22 20 2a 2f 0a 20   is the "A" */. 
1a760 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20     Table *pTab; 
1a770 20 20 20 20 20 2f 2a 20 41 6e 20 53 51 4c 20 74       /* An SQL t
1a780 61 62 6c 65 20 63 6f 72 72 65 73 70 6f 6e 64 69  able correspondi
1a790 6e 67 20 74 6f 20 7a 4e 61 6d 65 20 2a 2f 0a 20  ng to zName */. 
1a7a0 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65     Select *pSele
1a7b0 63 74 3b 20 20 2f 2a 20 41 20 53 45 4c 45 43 54  ct;  /* A SELECT
1a7c0 20 73 74 61 74 65 6d 65 6e 74 20 75 73 65 64 20   statement used 
1a7d0 69 6e 20 70 6c 61 63 65 20 6f 66 20 61 20 74 61  in place of a ta
1a7e0 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 20 20  ble name */.    
1a7f0 69 6e 74 20 61 64 64 72 46 69 6c 6c 53 75 62 3b  int addrFillSub;
1a800 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20    /* Address of 
1a810 73 75 62 72 6f 75 74 69 6e 65 20 74 6f 20 6d 61  subroutine to ma
1a820 6e 69 66 65 73 74 20 61 20 73 75 62 71 75 65 72  nifest a subquer
1a830 79 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67  y */.    int reg
1a840 52 65 74 75 72 6e 3b 20 20 20 20 2f 2a 20 52 65  Return;    /* Re
1a850 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72  gister holding r
1a860 65 74 75 72 6e 20 61 64 64 72 65 73 73 20 6f 66  eturn address of
1a870 20 61 64 64 72 46 69 6c 6c 53 75 62 20 2a 2f 0a   addrFillSub */.
1a880 20 20 20 20 69 6e 74 20 72 65 67 52 65 73 75 6c      int regResul
1a890 74 3b 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65  t;    /* Registe
1a8a0 72 73 20 68 6f 6c 64 69 6e 67 20 72 65 73 75 6c  rs holding resul
1a8b0 74 73 20 6f 66 20 61 20 63 6f 2d 72 6f 75 74 69  ts of a co-routi
1a8c0 6e 65 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74  ne */.    struct
1a8d0 20 7b 0a 20 20 20 20 20 20 75 38 20 6a 6f 69 6e   {.      u8 join
1a8e0 74 79 70 65 3b 20 20 20 20 20 20 2f 2a 20 54 79  type;      /* Ty
1a8f0 70 65 20 6f 66 20 6a 6f 69 6e 20 62 65 74 77 65  pe of join betwe
1a900 65 6e 20 74 68 69 73 20 74 61 62 6c 65 20 61 6e  en this table an
1a910 64 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 2a  d the previous *
1a920 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64  /.      unsigned
1a930 20 6e 6f 74 49 6e 64 65 78 65 64 20 3a 31 3b 20   notIndexed :1; 
1a940 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68     /* True if th
1a950 65 72 65 20 69 73 20 61 20 4e 4f 54 20 49 4e 44  ere is a NOT IND
1a960 45 58 45 44 20 63 6c 61 75 73 65 20 2a 2f 0a 20  EXED clause */. 
1a970 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73       unsigned is
1a980 49 6e 64 65 78 65 64 42 79 20 3a 31 3b 20 20 20  IndexedBy :1;   
1a990 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 72 65  /* True if there
1a9a0 20 69 73 20 61 6e 20 49 4e 44 45 58 45 44 20 42   is an INDEXED B
1a9b0 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20  Y clause */.    
1a9c0 20 20 75 6e 73 69 67 6e 65 64 20 69 73 54 61 62    unsigned isTab
1a9d0 46 75 6e 63 20 3a 31 3b 20 20 20 20 20 2f 2a 20  Func :1;     /* 
1a9e0 54 72 75 65 20 69 66 20 74 61 62 6c 65 2d 76 61  True if table-va
1a9f0 6c 75 65 64 2d 66 75 6e 63 74 69 6f 6e 20 73 79  lued-function sy
1aa00 6e 74 61 78 20 2a 2f 0a 20 20 20 20 20 20 75 6e  ntax */.      un
1aa10 73 69 67 6e 65 64 20 69 73 43 6f 72 72 65 6c 61  signed isCorrela
1aa20 74 65 64 20 3a 31 3b 20 20 2f 2a 20 54 72 75 65  ted :1;  /* True
1aa30 20 69 66 20 73 75 62 2d 71 75 65 72 79 20 69 73   if sub-query is
1aa40 20 63 6f 72 72 65 6c 61 74 65 64 20 2a 2f 0a 20   correlated */. 
1aa50 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 76 69       unsigned vi
1aa60 61 43 6f 72 6f 75 74 69 6e 65 20 3a 31 3b 20 20  aCoroutine :1;  
1aa70 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 65 64 20 61  /* Implemented a
1aa80 73 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a  s a co-routine *
1aa90 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64  /.      unsigned
1aaa0 20 69 73 52 65 63 75 72 73 69 76 65 20 3a 31 3b   isRecursive :1;
1aab0 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 72     /* True for r
1aac0 65 63 75 72 73 69 76 65 20 72 65 66 65 72 65 6e  ecursive referen
1aad0 63 65 20 69 6e 20 57 49 54 48 20 2a 2f 0a 20 20  ce in WITH */.  
1aae0 20 20 7d 20 66 67 3b 0a 23 69 66 6e 64 65 66 20    } fg;.#ifndef 
1aaf0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c  SQLITE_OMIT_EXPL
1ab00 41 49 4e 0a 20 20 20 20 75 38 20 69 53 65 6c 65  AIN.    u8 iSele
1ab10 63 74 49 64 3b 20 20 20 20 20 2f 2a 20 49 66 20  ctId;     /* If 
1ab20 70 53 65 6c 65 63 74 21 3d 30 2c 20 74 68 65 20  pSelect!=0, the 
1ab30 69 64 20 6f 66 20 74 68 65 20 73 75 62 2d 73 65  id of the sub-se
1ab40 6c 65 63 74 20 69 6e 20 45 51 50 20 2a 2f 0a 23  lect in EQP */.#
1ab50 65 6e 64 69 66 0a 20 20 20 20 69 6e 74 20 69 43  endif.    int iC
1ab60 75 72 73 6f 72 3b 20 20 20 20 20 20 2f 2a 20 54  ursor;      /* T
1ab70 68 65 20 56 44 42 45 20 63 75 72 73 6f 72 20 6e  he VDBE cursor n
1ab80 75 6d 62 65 72 20 75 73 65 64 20 74 6f 20 61 63  umber used to ac
1ab90 63 65 73 73 20 74 68 69 73 20 74 61 62 6c 65 20  cess this table 
1aba0 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 4f 6e  */.    Expr *pOn
1abb0 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ;        /* The 
1abc0 4f 4e 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a  ON clause of a j
1abd0 6f 69 6e 20 2a 2f 0a 20 20 20 20 49 64 4c 69 73  oin */.    IdLis
1abe0 74 20 2a 70 55 73 69 6e 67 3b 20 20 20 2f 2a 20  t *pUsing;   /* 
1abf0 54 68 65 20 55 53 49 4e 47 20 63 6c 61 75 73 65  The USING clause
1ac00 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20   of a join */.  
1ac10 20 20 42 69 74 6d 61 73 6b 20 63 6f 6c 55 73 65    Bitmask colUse
1ac20 64 3b 20 20 2f 2a 20 42 69 74 20 4e 20 28 31 3c  d;  /* Bit N (1<
1ac30 3c 4e 29 20 73 65 74 20 69 66 20 63 6f 6c 75 6d  <N) set if colum
1ac40 6e 20 4e 20 6f 66 20 70 54 61 62 20 69 73 20 75  n N of pTab is u
1ac50 73 65 64 20 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e  sed */.    union
1ac60 20 7b 0a 20 20 20 20 20 20 63 68 61 72 20 2a 7a   {.      char *z
1ac70 49 6e 64 65 78 65 64 42 79 3b 20 20 20 20 2f 2a  IndexedBy;    /*
1ac80 20 49 64 65 6e 74 69 66 69 65 72 20 66 72 6f 6d   Identifier from
1ac90 20 22 49 4e 44 45 58 45 44 20 42 59 20 3c 7a 49   "INDEXED BY <zI
1aca0 6e 64 65 78 3e 22 20 63 6c 61 75 73 65 20 2a 2f  ndex>" clause */
1acb0 0a 20 20 20 20 20 20 45 78 70 72 4c 69 73 74 20  .      ExprList 
1acc0 2a 70 46 75 6e 63 41 72 67 3b 20 20 2f 2a 20 41  *pFuncArg;  /* A
1acd0 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 61 62 6c  rguments to tabl
1ace0 65 2d 76 61 6c 75 65 64 2d 66 75 6e 63 74 69 6f  e-valued-functio
1acf0 6e 20 2a 2f 0a 20 20 20 20 7d 20 75 31 3b 0a 20  n */.    } u1;. 
1ad00 20 20 20 49 6e 64 65 78 20 2a 70 49 42 49 6e 64     Index *pIBInd
1ad10 65 78 3b 20 20 2f 2a 20 49 6e 64 65 78 20 73 74  ex;  /* Index st
1ad20 72 75 63 74 75 72 65 20 63 6f 72 72 65 73 70 6f  ructure correspo
1ad30 6e 64 69 6e 67 20 74 6f 20 75 31 2e 7a 49 6e 64  nding to u1.zInd
1ad40 65 78 65 64 42 79 20 2a 2f 0a 20 20 7d 20 61 5b  exedBy */.  } a[
1ad50 31 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  1];             
1ad60 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72  /* One entry for
1ad70 20 65 61 63 68 20 69 64 65 6e 74 69 66 69 65 72   each identifier
1ad80 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a   on the list */.
1ad90 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 65 72 6d 69 74  };../*.** Permit
1ada0 74 65 64 20 76 61 6c 75 65 73 20 6f 66 20 74 68  ted values of th
1adb0 65 20 53 72 63 4c 69 73 74 2e 61 2e 6a 6f 69 6e  e SrcList.a.join
1adc0 74 79 70 65 20 66 69 65 6c 64 0a 2a 2f 0a 23 64  type field.*/.#d
1add0 65 66 69 6e 65 20 4a 54 5f 49 4e 4e 45 52 20 20  efine JT_INNER  
1ade0 20 20 20 30 78 30 30 30 31 20 20 20 20 2f 2a 20     0x0001    /* 
1adf0 41 6e 79 20 6b 69 6e 64 20 6f 66 20 69 6e 6e 65  Any kind of inne
1ae00 72 20 6f 72 20 63 72 6f 73 73 20 6a 6f 69 6e 20  r or cross join 
1ae10 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 43 52  */.#define JT_CR
1ae20 4f 53 53 20 20 20 20 20 30 78 30 30 30 32 20 20  OSS     0x0002  
1ae30 20 20 2f 2a 20 45 78 70 6c 69 63 69 74 20 75 73    /* Explicit us
1ae40 65 20 6f 66 20 74 68 65 20 43 52 4f 53 53 20 6b  e of the CROSS k
1ae50 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e  eyword */.#defin
1ae60 65 20 4a 54 5f 4e 41 54 55 52 41 4c 20 20 20 30  e JT_NATURAL   0
1ae70 78 30 30 30 34 20 20 20 20 2f 2a 20 54 72 75 65  x0004    /* True
1ae80 20 66 6f 72 20 61 20 22 6e 61 74 75 72 61 6c 22   for a "natural"
1ae90 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   join */.#define
1aea0 20 4a 54 5f 4c 45 46 54 20 20 20 20 20 20 30 78   JT_LEFT      0x
1aeb0 30 30 30 38 20 20 20 20 2f 2a 20 4c 65 66 74 20  0008    /* Left 
1aec0 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64  outer join */.#d
1aed0 65 66 69 6e 65 20 4a 54 5f 52 49 47 48 54 20 20  efine JT_RIGHT  
1aee0 20 20 20 30 78 30 30 31 30 20 20 20 20 2f 2a 20     0x0010    /* 
1aef0 52 69 67 68 74 20 6f 75 74 65 72 20 6a 6f 69 6e  Right outer join
1af00 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4f   */.#define JT_O
1af10 55 54 45 52 20 20 20 20 20 30 78 30 30 32 30 20  UTER     0x0020 
1af20 20 20 20 2f 2a 20 54 68 65 20 22 4f 55 54 45 52     /* The "OUTER
1af30 22 20 6b 65 79 77 6f 72 64 20 69 73 20 70 72 65  " keyword is pre
1af40 73 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  sent */.#define 
1af50 4a 54 5f 45 52 52 4f 52 20 20 20 20 20 30 78 30  JT_ERROR     0x0
1af60 30 34 30 20 20 20 20 2f 2a 20 75 6e 6b 6e 6f 77  040    /* unknow
1af70 6e 20 6f 72 20 75 6e 73 75 70 70 6f 72 74 65 64  n or unsupported
1af80 20 6a 6f 69 6e 20 74 79 70 65 20 2a 2f 0a 0a 0a   join type */...
1af90 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 61 70 70 72  /*.** Flags appr
1afa0 6f 70 72 69 61 74 65 20 66 6f 72 20 74 68 65 20  opriate for the 
1afb0 77 63 74 72 6c 46 6c 61 67 73 20 70 61 72 61 6d  wctrlFlags param
1afc0 65 74 65 72 20 6f 66 20 73 71 6c 69 74 65 33 57  eter of sqlite3W
1afd0 68 65 72 65 42 65 67 69 6e 28 29 0a 2a 2a 20 61  hereBegin().** a
1afe0 6e 64 20 74 68 65 20 57 68 65 72 65 49 6e 66 6f  nd the WhereInfo
1aff0 2e 77 63 74 72 6c 46 6c 61 67 73 20 6d 65 6d 62  .wctrlFlags memb
1b000 65 72 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20  er..**.** Value 
1b010 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 65 6e 66  constraints (enf
1b020 6f 72 63 65 64 20 76 69 61 20 61 73 73 65 72 74  orced via assert
1b030 28 29 29 3a 0a 2a 2a 20 20 20 20 20 57 48 45 52  ()):.**     WHER
1b040 45 5f 55 53 45 5f 4c 49 4d 49 54 20 20 3d 3d 20  E_USE_LIMIT  == 
1b050 53 46 5f 46 69 78 65 64 4c 69 6d 69 74 0a 2a 2f  SF_FixedLimit.*/
1b060 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
1b070 52 44 45 52 42 59 5f 4e 4f 52 4d 41 4c 20 20 20  RDERBY_NORMAL   
1b080 30 78 30 30 30 30 20 2f 2a 20 4e 6f 2d 6f 70 20  0x0000 /* No-op 
1b090 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1b0a0 5f 4f 52 44 45 52 42 59 5f 4d 49 4e 20 20 20 20  _ORDERBY_MIN    
1b0b0 20 20 30 78 30 30 30 31 20 2f 2a 20 4f 52 44 45    0x0001 /* ORDE
1b0c0 52 20 42 59 20 70 72 6f 63 65 73 73 69 6e 67 20  R BY processing 
1b0d0 66 6f 72 20 6d 69 6e 28 29 20 66 75 6e 63 20 2a  for min() func *
1b0e0 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1b0f0 4f 52 44 45 52 42 59 5f 4d 41 58 20 20 20 20 20  ORDERBY_MAX     
1b100 20 30 78 30 30 30 32 20 2f 2a 20 4f 52 44 45 52   0x0002 /* ORDER
1b110 20 42 59 20 70 72 6f 63 65 73 73 69 6e 67 20 66   BY processing f
1b120 6f 72 20 6d 61 78 28 29 20 66 75 6e 63 20 2a 2f  or max() func */
1b130 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
1b140 4e 45 50 41 53 53 5f 44 45 53 49 52 45 44 20 20  NEPASS_DESIRED  
1b150 30 78 30 30 30 34 20 2f 2a 20 57 61 6e 74 20 74  0x0004 /* Want t
1b160 6f 20 64 6f 20 6f 6e 65 2d 70 61 73 73 20 55 50  o do one-pass UP
1b170 44 41 54 45 2f 44 45 4c 45 54 45 20 2a 2f 0a 23  DATE/DELETE */.#
1b180 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45  define WHERE_ONE
1b190 50 41 53 53 5f 4d 55 4c 54 49 52 4f 57 20 30 78  PASS_MULTIROW 0x
1b1a0 30 30 30 38 20 2f 2a 20 4f 4e 45 50 41 53 53 20  0008 /* ONEPASS 
1b1b0 69 73 20 6f 6b 20 77 69 74 68 20 6d 75 6c 74 69  is ok with multi
1b1c0 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 23 64 65 66  ple rows */.#def
1b1d0 69 6e 65 20 57 48 45 52 45 5f 44 55 50 4c 49 43  ine WHERE_DUPLIC
1b1e0 41 54 45 53 5f 4f 4b 20 20 20 20 30 78 30 30 31  ATES_OK    0x001
1b1f0 30 20 2f 2a 20 4f 6b 20 74 6f 20 72 65 74 75 72  0 /* Ok to retur
1b200 6e 20 61 20 72 6f 77 20 6d 6f 72 65 20 74 68 61  n a row more tha
1b210 6e 20 6f 6e 63 65 20 2a 2f 0a 23 64 65 66 69 6e  n once */.#defin
1b220 65 20 57 48 45 52 45 5f 4f 52 5f 53 55 42 43 4c  e WHERE_OR_SUBCL
1b230 41 55 53 45 20 20 20 20 20 30 78 30 30 32 30 20  AUSE     0x0020 
1b240 2f 2a 20 50 72 6f 63 65 73 73 69 6e 67 20 61 20  /* Processing a 
1b250 73 75 62 2d 57 48 45 52 45 20 61 73 20 70 61 72  sub-WHERE as par
1b260 74 20 6f 66 0a 20 20 20 20 20 20 20 20 20 20 20  t of.           
1b270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b280 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68             ** th
1b290 65 20 4f 52 20 6f 70 74 69 6d 69 7a 61 74 69 6f  e OR optimizatio
1b2a0 6e 20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  n  */.#define WH
1b2b0 45 52 45 5f 47 52 4f 55 50 42 59 20 20 20 20 20  ERE_GROUPBY     
1b2c0 20 20 20 20 20 30 78 30 30 34 30 20 2f 2a 20 70       0x0040 /* p
1b2d0 4f 72 64 65 72 42 79 20 69 73 20 72 65 61 6c 6c  OrderBy is reall
1b2e0 79 20 61 20 47 52 4f 55 50 20 42 59 20 2a 2f 0a  y a GROUP BY */.
1b2f0 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49  #define WHERE_DI
1b300 53 54 49 4e 43 54 42 59 20 20 20 20 20 20 20 30  STINCTBY       0
1b310 78 30 30 38 30 20 2f 2a 20 70 4f 72 64 65 72 62  x0080 /* pOrderb
1b320 79 20 69 73 20 72 65 61 6c 6c 79 20 61 20 44 49  y is really a DI
1b330 53 54 49 4e 43 54 20 63 6c 61 75 73 65 20 2a 2f  STINCT clause */
1b340 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 57  .#define WHERE_W
1b350 41 4e 54 5f 44 49 53 54 49 4e 43 54 20 20 20 20  ANT_DISTINCT    
1b360 30 78 30 31 30 30 20 2f 2a 20 41 6c 6c 20 6f 75  0x0100 /* All ou
1b370 74 70 75 74 20 6e 65 65 64 73 20 74 6f 20 62 65  tput needs to be
1b380 20 64 69 73 74 69 6e 63 74 20 2a 2f 0a 23 64 65   distinct */.#de
1b390 66 69 6e 65 20 57 48 45 52 45 5f 53 4f 52 54 42  fine WHERE_SORTB
1b3a0 59 47 52 4f 55 50 20 20 20 20 20 20 30 78 30 32  YGROUP      0x02
1b3b0 30 30 20 2f 2a 20 53 75 70 70 6f 72 74 20 73 71  00 /* Support sq
1b3c0 6c 69 74 65 33 57 68 65 72 65 49 73 53 6f 72 74  lite3WhereIsSort
1b3d0 65 64 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ed() */.#define 
1b3e0 57 48 45 52 45 5f 53 45 45 4b 5f 54 41 42 4c 45  WHERE_SEEK_TABLE
1b3f0 20 20 20 20 20 20 20 30 78 30 34 30 30 20 2f 2a         0x0400 /*
1b400 20 44 6f 20 6e 6f 74 20 64 65 66 65 72 20 73 65   Do not defer se
1b410 65 6b 73 20 6f 6e 20 6d 61 69 6e 20 74 61 62 6c  eks on main tabl
1b420 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  e */.#define WHE
1b430 52 45 5f 4f 52 44 45 52 42 59 5f 4c 49 4d 49 54  RE_ORDERBY_LIMIT
1b440 20 20 20 20 30 78 30 38 30 30 20 2f 2a 20 4f 52      0x0800 /* OR
1b450 44 45 52 42 59 2b 4c 49 4d 49 54 20 6f 6e 20 74  DERBY+LIMIT on t
1b460 68 65 20 69 6e 6e 65 72 20 6c 6f 6f 70 20 2a 2f  he inner loop */
1b470 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 53  .#define WHERE_S
1b480 45 45 4b 5f 55 4e 49 51 5f 54 41 42 4c 45 20 20  EEK_UNIQ_TABLE  
1b490 30 78 31 30 30 30 20 2f 2a 20 44 6f 20 6e 6f 74  0x1000 /* Do not
1b4a0 20 64 65 66 65 72 20 73 65 65 6b 73 20 69 66 20   defer seeks if 
1b4b0 75 6e 69 71 75 65 20 2a 2f 0a 20 20 20 20 20 20  unique */.      
1b4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b4d0 20 20 2f 2a 20 20 20 20 20 30 78 32 30 30 30 20    /*     0x2000 
1b4e0 20 20 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79     not currently
1b4f0 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65   used */.#define
1b500 20 57 48 45 52 45 5f 55 53 45 5f 4c 49 4d 49 54   WHERE_USE_LIMIT
1b510 20 20 20 20 20 20 20 20 30 78 34 30 30 30 20 2f          0x4000 /
1b520 2a 20 55 73 65 20 74 68 65 20 4c 49 4d 49 54 20  * Use the LIMIT 
1b530 69 6e 20 63 6f 73 74 20 65 73 74 69 6d 61 74 65  in cost estimate
1b540 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  s */.           
1b550 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1b560 20 20 20 20 30 78 38 30 30 30 20 20 20 20 6e 6f      0x8000    no
1b570 74 20 63 75 72 72 65 6e 74 6c 79 20 75 73 65 64  t currently used
1b580 20 2a 2f 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20   */../* Allowed 
1b590 72 65 74 75 72 6e 20 76 61 6c 75 65 73 20 66 72  return values fr
1b5a0 6f 6d 20 73 71 6c 69 74 65 33 57 68 65 72 65 49  om sqlite3WhereI
1b5b0 73 44 69 73 74 69 6e 63 74 28 29 0a 2a 2f 0a 23  sDistinct().*/.#
1b5c0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53  define WHERE_DIS
1b5d0 54 49 4e 43 54 5f 4e 4f 4f 50 20 20 20 20 20 20  TINCT_NOOP      
1b5e0 30 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20 6b  0  /* DISTINCT k
1b5f0 65 79 77 6f 72 64 20 6e 6f 74 20 75 73 65 64 20  eyword not used 
1b600 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1b610 5f 44 49 53 54 49 4e 43 54 5f 55 4e 49 51 55 45  _DISTINCT_UNIQUE
1b620 20 20 20 20 31 20 20 2f 2a 20 4e 6f 20 64 75 70      1  /* No dup
1b630 6c 69 63 61 74 65 73 20 2a 2f 0a 23 64 65 66 69  licates */.#defi
1b640 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43  ne WHERE_DISTINC
1b650 54 5f 4f 52 44 45 52 45 44 20 20 20 32 20 20 2f  T_ORDERED   2  /
1b660 2a 20 41 6c 6c 20 64 75 70 6c 69 63 61 74 65 73  * All duplicates
1b670 20 61 72 65 20 61 64 6a 61 63 65 6e 74 20 2a 2f   are adjacent */
1b680 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44  .#define WHERE_D
1b690 49 53 54 49 4e 43 54 5f 55 4e 4f 52 44 45 52 45  ISTINCT_UNORDERE
1b6a0 44 20 33 20 20 2f 2a 20 44 75 70 6c 69 63 61 74  D 3  /* Duplicat
1b6b0 65 73 20 61 72 65 20 73 63 61 74 74 65 72 65 64  es are scattered
1b6c0 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e 61 6d   */../*.** A Nam
1b6d0 65 43 6f 6e 74 65 78 74 20 64 65 66 69 6e 65 73  eContext defines
1b6e0 20 61 20 63 6f 6e 74 65 78 74 20 69 6e 20 77 68   a context in wh
1b6f0 69 63 68 20 74 6f 20 72 65 73 6f 6c 76 65 20 74  ich to resolve t
1b700 61 62 6c 65 20 61 6e 64 20 63 6f 6c 75 6d 6e 0a  able and column.
1b710 2a 2a 20 6e 61 6d 65 73 2e 20 20 54 68 65 20 63  ** names.  The c
1b720 6f 6e 74 65 78 74 20 63 6f 6e 73 69 73 74 73 20  ontext consists 
1b730 6f 66 20 61 20 6c 69 73 74 20 6f 66 20 74 61 62  of a list of tab
1b740 6c 65 73 20 28 74 68 65 20 70 53 72 63 4c 69 73  les (the pSrcLis
1b750 74 29 20 66 69 65 6c 64 20 61 6e 64 0a 2a 2a 20  t) field and.** 
1b760 61 20 6c 69 73 74 20 6f 66 20 6e 61 6d 65 64 20  a list of named 
1b770 65 78 70 72 65 73 73 69 6f 6e 20 28 70 45 4c 69  expression (pELi
1b780 73 74 29 2e 20 20 54 68 65 20 6e 61 6d 65 64 20  st).  The named 
1b790 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 20  expression list 
1b7a0 6d 61 79 0a 2a 2a 20 62 65 20 4e 55 4c 4c 2e 20  may.** be NULL. 
1b7b0 20 54 68 65 20 70 53 72 63 20 63 6f 72 72 65 73   The pSrc corres
1b7c0 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 46 52 4f  ponds to the FRO
1b7d0 4d 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45  M clause of a SE
1b7e0 4c 45 43 54 20 6f 72 0a 2a 2a 20 74 6f 20 74 68  LECT or.** to th
1b7f0 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6f 70  e table being op
1b800 65 72 61 74 65 64 20 6f 6e 20 62 79 20 49 4e 53  erated on by INS
1b810 45 52 54 2c 20 55 50 44 41 54 45 2c 20 6f 72 20  ERT, UPDATE, or 
1b820 44 45 4c 45 54 45 2e 20 20 54 68 65 0a 2a 2a 20  DELETE.  The.** 
1b830 70 45 4c 69 73 74 20 63 6f 72 72 65 73 70 6f 6e  pEList correspon
1b840 64 73 20 74 6f 20 74 68 65 20 72 65 73 75 6c 74  ds to the result
1b850 20 73 65 74 20 6f 66 20 61 20 53 45 4c 45 43 54   set of a SELECT
1b860 20 61 6e 64 20 69 73 20 4e 55 4c 4c 20 66 6f 72   and is NULL for
1b870 0a 2a 2a 20 6f 74 68 65 72 20 73 74 61 74 65 6d  .** other statem
1b880 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65  ents..**.** Name
1b890 43 6f 6e 74 65 78 74 73 20 63 61 6e 20 62 65 20  Contexts can be 
1b8a0 6e 65 73 74 65 64 2e 20 20 57 68 65 6e 20 72 65  nested.  When re
1b8b0 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 2c 20 74  solving names, t
1b8c0 68 65 20 69 6e 6e 65 72 2d 6d 6f 73 74 0a 2a 2a  he inner-most.**
1b8d0 20 63 6f 6e 74 65 78 74 20 69 73 20 73 65 61 72   context is sear
1b8e0 63 68 65 64 20 66 69 72 73 74 2e 20 20 49 66 20  ched first.  If 
1b8f0 6e 6f 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e  no match is foun
1b900 64 2c 20 74 68 65 20 6e 65 78 74 20 6f 75 74 65  d, the next oute
1b910 72 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73 20  r.** context is 
1b920 63 68 65 63 6b 65 64 2e 20 20 49 66 20 74 68 65  checked.  If the
1b930 72 65 20 69 73 20 73 74 69 6c 6c 20 6e 6f 20 6d  re is still no m
1b940 61 74 63 68 2c 20 74 68 65 20 6e 65 78 74 20 63  atch, the next c
1b950 6f 6e 74 65 78 74 0a 2a 2a 20 69 73 20 63 68 65  ontext.** is che
1b960 63 6b 65 64 2e 20 20 54 68 69 73 20 70 72 6f 63  cked.  This proc
1b970 65 73 73 20 63 6f 6e 74 69 6e 75 65 73 20 75 6e  ess continues un
1b980 74 69 6c 20 65 69 74 68 65 72 20 61 20 6d 61 74  til either a mat
1b990 63 68 20 69 73 20 66 6f 75 6e 64 0a 2a 2a 20 6f  ch is found.** o
1b9a0 72 20 61 6c 6c 20 63 6f 6e 74 65 78 74 73 20 61  r all contexts a
1b9b0 72 65 20 63 68 65 63 6b 2e 20 20 57 68 65 6e 20  re check.  When 
1b9c0 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64  a match is found
1b9d0 2c 20 74 68 65 20 6e 52 65 66 20 6d 65 6d 62 65  , the nRef membe
1b9e0 72 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74  r of.** the cont
1b9f0 65 78 74 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ext containing t
1ba00 68 65 20 6d 61 74 63 68 20 69 73 20 69 6e 63 72  he match is incr
1ba10 65 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 45  emented..**.** E
1ba20 61 63 68 20 73 75 62 71 75 65 72 79 20 67 65 74  ach subquery get
1ba30 73 20 61 20 6e 65 77 20 4e 61 6d 65 43 6f 6e 74  s a new NameCont
1ba40 65 78 74 2e 20 20 54 68 65 20 70 4e 65 78 74 20  ext.  The pNext 
1ba50 66 69 65 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20  field points to 
1ba60 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65  the.** NameConte
1ba70 78 74 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74  xt in the parent
1ba80 20 71 75 65 72 79 2e 20 20 54 68 75 73 20 74 68   query.  Thus th
1ba90 65 20 70 72 6f 63 65 73 73 20 6f 66 20 73 63 61  e process of sca
1baa0 6e 6e 69 6e 67 20 74 68 65 0a 2a 2a 20 4e 61 6d  nning the.** Nam
1bab0 65 43 6f 6e 74 65 78 74 20 6c 69 73 74 20 63 6f  eContext list co
1bac0 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 73 65 61  rresponds to sea
1bad0 72 63 68 69 6e 67 20 74 68 72 6f 75 67 68 20 73  rching through s
1bae0 75 63 63 65 73 73 69 76 65 6c 79 20 6f 75 74 65  uccessively oute
1baf0 72 0a 2a 2a 20 73 75 62 71 75 65 72 69 65 73 20  r.** subqueries 
1bb00 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 61 20 6d 61  looking for a ma
1bb10 74 63 68 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4e  tch..*/.struct N
1bb20 61 6d 65 43 6f 6e 74 65 78 74 20 7b 0a 20 20 50  ameContext {.  P
1bb30 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20  arse *pParse;   
1bb40 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73 65      /* The parse
1bb50 72 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a  r */.  SrcList *
1bb60 70 53 72 63 4c 69 73 74 3b 20 20 20 2f 2a 20 4f  pSrcList;   /* O
1bb70 6e 65 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65  ne or more table
1bb80 73 20 75 73 65 64 20 74 6f 20 72 65 73 6f 6c 76  s used to resolv
1bb90 65 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 45 78 70  e names */.  Exp
1bba0 72 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b 20 20  rList *pEList;  
1bbb0 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 6c 69    /* Optional li
1bbc0 73 74 20 6f 66 20 72 65 73 75 6c 74 2d 73 65 74  st of result-set
1bbd0 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 41 67   columns */.  Ag
1bbe0 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b  gInfo *pAggInfo;
1bbf0 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f     /* Informatio
1bc00 6e 20 61 62 6f 75 74 20 61 67 67 72 65 67 61 74  n about aggregat
1bc10 65 73 20 61 74 20 74 68 69 73 20 6c 65 76 65 6c  es at this level
1bc20 20 2a 2f 0a 20 20 4e 61 6d 65 43 6f 6e 74 65 78   */.  NameContex
1bc30 74 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65  t *pNext;  /* Ne
1bc40 78 74 20 6f 75 74 65 72 20 6e 61 6d 65 20 63 6f  xt outer name co
1bc50 6e 74 65 78 74 2e 20 20 4e 55 4c 4c 20 66 6f 72  ntext.  NULL for
1bc60 20 6f 75 74 65 72 6d 6f 73 74 20 2a 2f 0a 20 20   outermost */.  
1bc70 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20 20  int nRef;       
1bc80 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1bc90 66 20 6e 61 6d 65 73 20 72 65 73 6f 6c 76 65 64  f names resolved
1bca0 20 62 79 20 74 68 69 73 20 63 6f 6e 74 65 78 74   by this context
1bcb0 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20   */.  int nErr; 
1bcc0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1bcd0 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 65  mber of errors e
1bce0 6e 63 6f 75 6e 74 65 72 65 64 20 77 68 69 6c 65  ncountered while
1bcf0 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73   resolving names
1bd00 20 2a 2f 0a 20 20 75 31 36 20 6e 63 46 6c 61 67   */.  u16 ncFlag
1bd10 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 5a 65  s;         /* Ze
1bd20 72 6f 20 6f 72 20 6d 6f 72 65 20 4e 43 5f 2a 20  ro or more NC_* 
1bd30 66 6c 61 67 73 20 64 65 66 69 6e 65 64 20 62 65  flags defined be
1bd40 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  low */.};../*.**
1bd50 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
1bd60 66 6f 72 20 74 68 65 20 4e 61 6d 65 43 6f 6e 74  for the NameCont
1bd70 65 78 74 2c 20 6e 63 46 6c 61 67 73 20 66 69 65  ext, ncFlags fie
1bd80 6c 64 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20  ld..**.** Value 
1bd90 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 61 6c 6c  constraints (all
1bda0 20 63 68 65 63 6b 65 64 20 76 69 61 20 61 73 73   checked via ass
1bdb0 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20 4e 43  ert()):.**    NC
1bdc0 5f 48 61 73 41 67 67 20 20 20 20 3d 3d 20 53 46  _HasAgg    == SF
1bdd0 5f 48 61 73 41 67 67 0a 2a 2a 20 20 20 20 4e 43  _HasAgg.**    NC
1bde0 5f 4d 69 6e 4d 61 78 41 67 67 20 3d 3d 20 53 46  _MinMaxAgg == SF
1bdf0 5f 4d 69 6e 4d 61 78 41 67 67 20 3d 3d 20 53 51  _MinMaxAgg == SQ
1be00 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58  LITE_FUNC_MINMAX
1be10 0a 2a 2a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  .**.*/.#define N
1be20 43 5f 41 6c 6c 6f 77 41 67 67 20 20 30 78 30 30  C_AllowAgg  0x00
1be30 30 31 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65  01  /* Aggregate
1be40 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 61   functions are a
1be50 6c 6c 6f 77 65 64 20 68 65 72 65 20 2a 2f 0a 23  llowed here */.#
1be60 64 65 66 69 6e 65 20 4e 43 5f 50 61 72 74 49 64  define NC_PartId
1be70 78 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20 54  x   0x0002  /* T
1be80 72 75 65 20 69 66 20 72 65 73 6f 6c 76 69 6e 67  rue if resolving
1be90 20 61 20 70 61 72 74 69 61 6c 20 69 6e 64 65 78   a partial index
1bea0 20 57 48 45 52 45 20 2a 2f 0a 23 64 65 66 69 6e   WHERE */.#defin
1beb0 65 20 4e 43 5f 49 73 43 68 65 63 6b 20 20 20 30  e NC_IsCheck   0
1bec0 78 30 30 30 34 20 20 2f 2a 20 54 72 75 65 20 69  x0004  /* True i
1bed0 66 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65  f resolving name
1bee0 73 20 69 6e 20 61 20 43 48 45 43 4b 20 63 6f 6e  s in a CHECK con
1bef0 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69  straint */.#defi
1bf00 6e 65 20 4e 43 5f 49 6e 41 67 67 46 75 6e 63 20  ne NC_InAggFunc 
1bf10 30 78 30 30 30 38 20 20 2f 2a 20 54 72 75 65 20  0x0008  /* True 
1bf20 69 66 20 61 6e 61 6c 79 7a 69 6e 67 20 61 72 67  if analyzing arg
1bf30 75 6d 65 6e 74 73 20 74 6f 20 61 6e 20 61 67 67  uments to an agg
1bf40 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65   func */.#define
1bf50 20 4e 43 5f 48 61 73 41 67 67 20 20 20 20 30 78   NC_HasAgg    0x
1bf60 30 30 31 30 20 20 2f 2a 20 4f 6e 65 20 6f 72 20  0010  /* One or 
1bf70 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65 20 66  more aggregate f
1bf80 75 6e 63 74 69 6f 6e 73 20 73 65 65 6e 20 2a 2f  unctions seen */
1bf90 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 64 78 45  .#define NC_IdxE
1bfa0 78 70 72 20 20 20 30 78 30 30 32 30 20 20 2f 2a  xpr   0x0020  /*
1bfb0 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76 69   True if resolvi
1bfc0 6e 67 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 43 52  ng columns of CR
1bfd0 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a 23 64  EATE INDEX */.#d
1bfe0 65 66 69 6e 65 20 4e 43 5f 56 61 72 53 65 6c 65  efine NC_VarSele
1bff0 63 74 20 30 78 30 30 34 30 20 20 2f 2a 20 41 20  ct 0x0040  /* A 
1c000 63 6f 72 72 65 6c 61 74 65 64 20 73 75 62 71 75  correlated subqu
1c010 65 72 79 20 68 61 73 20 62 65 65 6e 20 73 65 65  ery has been see
1c020 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  n */.#define NC_
1c030 4d 69 6e 4d 61 78 41 67 67 20 30 78 31 30 30 30  MinMaxAgg 0x1000
1c040 20 20 2f 2a 20 6d 69 6e 2f 6d 61 78 20 61 67 67    /* min/max agg
1c050 72 65 67 61 74 65 73 20 73 65 65 6e 2e 20 20 53  regates seen.  S
1c060 65 65 20 6e 6f 74 65 20 61 62 6f 76 65 20 2a 2f  ee note above */
1c070 0a 23 64 65 66 69 6e 65 20 4e 43 5f 43 6f 6d 70  .#define NC_Comp
1c080 6c 65 78 20 20 20 30 78 32 30 30 30 20 20 2f 2a  lex   0x2000  /*
1c090 20 54 72 75 65 20 69 66 20 61 20 66 75 6e 63 74   True if a funct
1c0a0 69 6f 6e 20 6f 72 20 73 75 62 71 75 65 72 79 20  ion or subquery 
1c0b0 73 65 65 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  seen */../*.** A
1c0c0 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
1c0d0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
1c0e0 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 61  cture contains a
1c0f0 6c 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a  ll information.*
1c100 2a 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65  * needed to gene
1c110 72 61 74 65 20 63 6f 64 65 20 66 6f 72 20 61 20  rate code for a 
1c120 73 69 6e 67 6c 65 20 53 45 4c 45 43 54 20 73 74  single SELECT st
1c130 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 6e  atement..**.** n
1c140 4c 69 6d 69 74 20 69 73 20 73 65 74 20 74 6f 20  Limit is set to 
1c150 2d 31 20 69 66 20 74 68 65 72 65 20 69 73 20 6e  -1 if there is n
1c160 6f 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2e 20  o LIMIT clause. 
1c170 20 6e 4f 66 66 73 65 74 20 69 73 20 73 65 74 20   nOffset is set 
1c180 74 6f 20 30 2e 0a 2a 2a 20 49 66 20 74 68 65 72  to 0..** If ther
1c190 65 20 69 73 20 61 20 4c 49 4d 49 54 20 63 6c 61  e is a LIMIT cla
1c1a0 75 73 65 2c 20 74 68 65 20 70 61 72 73 65 72 20  use, the parser 
1c1b0 73 65 74 73 20 6e 4c 69 6d 69 74 20 74 6f 20 74  sets nLimit to t
1c1c0 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 0a  he value of the.
1c1d0 2a 2a 20 6c 69 6d 69 74 20 61 6e 64 20 6e 4f 66  ** limit and nOf
1c1e0 66 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75  fset to the valu
1c1f0 65 20 6f 66 20 74 68 65 20 6f 66 66 73 65 74 20  e of the offset 
1c200 28 6f 72 20 30 20 69 66 20 74 68 65 72 65 20 69  (or 0 if there i
1c210 73 20 6e 6f 74 0a 2a 2a 20 6f 66 66 73 65 74 29  s not.** offset)
1c220 2e 20 20 42 75 74 20 6c 61 74 65 72 20 6f 6e 2c  .  But later on,
1c230 20 6e 4c 69 6d 69 74 20 61 6e 64 20 6e 4f 66 66   nLimit and nOff
1c240 73 65 74 20 62 65 63 6f 6d 65 20 74 68 65 20 6d  set become the m
1c250 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 73 0a  emory locations.
1c260 2a 2a 20 69 6e 20 74 68 65 20 56 44 42 45 20 74  ** in the VDBE t
1c270 68 61 74 20 72 65 63 6f 72 64 20 74 68 65 20 6c  hat record the l
1c280 69 6d 69 74 20 61 6e 64 20 6f 66 66 73 65 74 20  imit and offset 
1c290 63 6f 75 6e 74 65 72 73 2e 0a 2a 2a 0a 2a 2a 20  counters..**.** 
1c2a0 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 5d 20 65  addrOpenEphm[] e
1c2b0 6e 74 72 69 65 73 20 63 6f 6e 74 61 69 6e 20 74  ntries contain t
1c2c0 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 4f 50  he address of OP
1c2d0 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f  _OpenEphemeral o
1c2e0 70 63 6f 64 65 73 2e 0a 2a 2a 20 54 68 65 73 65  pcodes..** These
1c2f0 20 61 64 64 72 65 73 73 65 73 20 6d 75 73 74 20   addresses must 
1c300 62 65 20 73 74 6f 72 65 64 20 73 6f 20 74 68 61  be stored so tha
1c310 74 20 77 65 20 63 61 6e 20 67 6f 20 62 61 63 6b  t we can go back
1c320 20 61 6e 64 20 66 69 6c 6c 20 69 6e 0a 2a 2a 20   and fill in.** 
1c330 74 68 65 20 50 34 5f 4b 45 59 49 4e 46 4f 20 61  the P4_KEYINFO a
1c340 6e 64 20 50 32 20 70 61 72 61 6d 65 74 65 72 73  nd P2 parameters
1c350 20 6c 61 74 65 72 2e 20 20 4e 65 69 74 68 65 72   later.  Neither
1c360 20 74 68 65 20 4b 65 79 49 6e 66 6f 20 6e 6f 72   the KeyInfo nor
1c370 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  .** the number o
1c380 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 50 32 20  f columns in P2 
1c390 63 61 6e 20 62 65 20 63 6f 6d 70 75 74 65 64 20  can be computed 
1c3a0 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d 65  at the same time
1c3b0 0a 2a 2a 20 61 73 20 74 68 65 20 4f 50 5f 4f 70  .** as the OP_Op
1c3c0 65 6e 45 70 68 6d 20 69 6e 73 74 72 75 63 74 69  enEphm instructi
1c3d0 6f 6e 20 69 73 20 63 6f 64 65 64 20 62 65 63 61  on is coded beca
1c3e0 75 73 65 20 6e 6f 74 0a 2a 2a 20 65 6e 6f 75 67  use not.** enoug
1c3f0 68 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  h information ab
1c400 6f 75 74 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64  out the compound
1c410 20 71 75 65 72 79 20 69 73 20 6b 6e 6f 77 6e 20   query is known 
1c420 61 74 20 74 68 61 74 20 70 6f 69 6e 74 2e 0a 2a  at that point..*
1c430 2a 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f  * The KeyInfo fo
1c440 72 20 61 64 64 72 4f 70 65 6e 54 72 61 6e 5b 30  r addrOpenTran[0
1c450 5d 20 61 6e 64 20 5b 31 5d 20 63 6f 6e 74 61 69  ] and [1] contai
1c460 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  ns collating seq
1c470 75 65 6e 63 65 73 0a 2a 2a 20 66 6f 72 20 74 68  uences.** for th
1c480 65 20 72 65 73 75 6c 74 20 73 65 74 2e 20 20 54  e result set.  T
1c490 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61  he KeyInfo for a
1c4a0 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 20 63  ddrOpenEphm[2] c
1c4b0 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e  ontains collatin
1c4c0 67 0a 2a 2a 20 73 65 71 75 65 6e 63 65 73 20 66  g.** sequences f
1c4d0 6f 72 20 74 68 65 20 4f 52 44 45 52 20 42 59 20  or the ORDER BY 
1c4e0 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63  clause..*/.struc
1c4f0 74 20 53 65 6c 65 63 74 20 7b 0a 20 20 45 78 70  t Select {.  Exp
1c500 72 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b 20 20  rList *pEList;  
1c510 20 20 20 20 2f 2a 20 54 68 65 20 66 69 65 6c 64      /* The field
1c520 73 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20  s of the result 
1c530 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20  */.  u8 op;     
1c540 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
1c550 6e 65 20 6f 66 3a 20 54 4b 5f 55 4e 49 4f 4e 20  ne of: TK_UNION 
1c560 54 4b 5f 41 4c 4c 20 54 4b 5f 49 4e 54 45 52 53  TK_ALL TK_INTERS
1c570 45 43 54 20 54 4b 5f 45 58 43 45 50 54 20 2a 2f  ECT TK_EXCEPT */
1c580 0a 20 20 4c 6f 67 45 73 74 20 6e 53 65 6c 65 63  .  LogEst nSelec
1c590 74 52 6f 77 3b 20 20 20 20 20 2f 2a 20 45 73 74  tRow;     /* Est
1c5a0 69 6d 61 74 65 64 20 6e 75 6d 62 65 72 20 6f 66  imated number of
1c5b0 20 72 65 73 75 6c 74 20 72 6f 77 73 20 2a 2f 0a   result rows */.
1c5c0 20 20 75 33 32 20 73 65 6c 46 6c 61 67 73 3b 20    u32 selFlags; 
1c5d0 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 72 69           /* Vari
1c5e0 6f 75 73 20 53 46 5f 2a 20 76 61 6c 75 65 73 20  ous SF_* values 
1c5f0 2a 2f 0a 20 20 69 6e 74 20 69 4c 69 6d 69 74 2c  */.  int iLimit,
1c600 20 69 4f 66 66 73 65 74 3b 20 20 20 2f 2a 20 4d   iOffset;   /* M
1c610 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72 73 20  emory registers 
1c620 68 6f 6c 64 69 6e 67 20 4c 49 4d 49 54 20 26 20  holding LIMIT & 
1c630 4f 46 46 53 45 54 20 63 6f 75 6e 74 65 72 73 20  OFFSET counters 
1c640 2a 2f 0a 23 69 66 20 53 45 4c 45 43 54 54 52 41  */.#if SELECTTRA
1c650 43 45 5f 45 4e 41 42 4c 45 44 0a 20 20 63 68 61  CE_ENABLED.  cha
1c660 72 20 7a 53 65 6c 4e 61 6d 65 5b 31 32 5d 3b 20  r zSelName[12]; 
1c670 20 20 20 20 2f 2a 20 53 79 6d 62 6f 6c 69 63 20      /* Symbolic 
1c680 6e 61 6d 65 20 6f 66 20 74 68 69 73 20 53 45 4c  name of this SEL
1c690 45 43 54 20 75 73 65 20 66 6f 72 20 64 65 62 75  ECT use for debu
1c6a0 67 67 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a  gging */.#endif.
1c6b0 20 20 69 6e 74 20 61 64 64 72 4f 70 65 6e 45 70    int addrOpenEp
1c6c0 68 6d 5b 32 5d 3b 20 20 20 2f 2a 20 4f 50 5f 4f  hm[2];   /* OP_O
1c6d0 70 65 6e 45 70 68 65 6d 20 6f 70 63 6f 64 65 73  penEphem opcodes
1c6e0 20 72 65 6c 61 74 65 64 20 74 6f 20 74 68 69 73   related to this
1c6f0 20 73 65 6c 65 63 74 20 2a 2f 0a 20 20 53 72 63   select */.  Src
1c700 4c 69 73 74 20 2a 70 53 72 63 3b 20 20 20 20 20  List *pSrc;     
1c710 20 20 20 20 2f 2a 20 54 68 65 20 46 52 4f 4d 20      /* The FROM 
1c720 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72  clause */.  Expr
1c730 20 2a 70 57 68 65 72 65 3b 20 20 20 20 20 20 20   *pWhere;       
1c740 20 20 20 2f 2a 20 54 68 65 20 57 48 45 52 45 20     /* The WHERE 
1c750 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72  clause */.  Expr
1c760 4c 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20  List *pGroupBy; 
1c770 20 20 20 2f 2a 20 54 68 65 20 47 52 4f 55 50 20     /* The GROUP 
1c780 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45  BY clause */.  E
1c790 78 70 72 20 2a 70 48 61 76 69 6e 67 3b 20 20 20  xpr *pHaving;   
1c7a0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 48 41 56        /* The HAV
1c7b0 49 4e 47 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  ING clause */.  
1c7c0 45 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72  ExprList *pOrder
1c7d0 42 79 3b 20 20 20 20 2f 2a 20 54 68 65 20 4f 52  By;    /* The OR
1c7e0 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 2a 2f  DER BY clause */
1c7f0 0a 20 20 53 65 6c 65 63 74 20 2a 70 50 72 69 6f  .  Select *pPrio
1c800 72 3b 20 20 20 20 20 20 20 20 2f 2a 20 50 72 69  r;        /* Pri
1c810 6f 72 20 73 65 6c 65 63 74 20 69 6e 20 61 20 63  or select in a c
1c820 6f 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74 20 73  ompound select s
1c830 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 53 65  tatement */.  Se
1c840 6c 65 63 74 20 2a 70 4e 65 78 74 3b 20 20 20 20  lect *pNext;    
1c850 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 73 65 6c       /* Next sel
1c860 65 63 74 20 74 6f 20 74 68 65 20 6c 65 66 74 20  ect to the left 
1c870 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 2a 2f  in a compound */
1c880 0a 20 20 45 78 70 72 20 2a 70 4c 69 6d 69 74 3b  .  Expr *pLimit;
1c890 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 49 4d            /* LIM
1c8a0 49 54 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e  IT expression. N
1c8b0 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73  ULL means not us
1c8c0 65 64 2e 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70  ed. */.  With *p
1c8d0 57 69 74 68 3b 20 20 20 20 20 20 20 20 20 20 20  With;           
1c8e0 2f 2a 20 57 49 54 48 20 63 6c 61 75 73 65 20 61  /* WITH clause a
1c8f0 74 74 61 63 68 65 64 20 74 6f 20 74 68 69 73 20  ttached to this 
1c900 73 65 6c 65 63 74 2e 20 4f 72 20 4e 55 4c 4c 2e  select. Or NULL.
1c910 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c   */.};../*.** Al
1c920 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72  lowed values for
1c930 20 53 65 6c 65 63 74 2e 73 65 6c 46 6c 61 67 73   Select.selFlags
1c940 2e 20 20 54 68 65 20 22 53 46 22 20 70 72 65 66  .  The "SF" pref
1c950 69 78 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a  ix stands for.**
1c960 20 22 53 65 6c 65 63 74 20 46 6c 61 67 22 2e 0a   "Select Flag"..
1c970 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73  **.** Value cons
1c980 74 72 61 69 6e 74 73 20 28 61 6c 6c 20 63 68 65  traints (all che
1c990 63 6b 65 64 20 76 69 61 20 61 73 73 65 72 74 28  cked via assert(
1c9a0 29 29 0a 2a 2a 20 20 20 20 20 53 46 5f 48 61 73  )).**     SF_Has
1c9b0 41 67 67 20 20 20 20 20 3d 3d 20 4e 43 5f 48 61  Agg     == NC_Ha
1c9c0 73 41 67 67 0a 2a 2a 20 20 20 20 20 53 46 5f 4d  sAgg.**     SF_M
1c9d0 69 6e 4d 61 78 41 67 67 20 20 3d 3d 20 4e 43 5f  inMaxAgg  == NC_
1c9e0 4d 69 6e 4d 61 78 41 67 67 20 20 20 20 20 3d 3d  MinMaxAgg     ==
1c9f0 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e   SQLITE_FUNC_MIN
1ca00 4d 41 58 0a 2a 2a 20 20 20 20 20 53 46 5f 46 69  MAX.**     SF_Fi
1ca10 78 65 64 4c 69 6d 69 74 20 3d 3d 20 57 48 45 52  xedLimit == WHER
1ca20 45 5f 55 53 45 5f 4c 49 4d 49 54 0a 2a 2f 0a 23  E_USE_LIMIT.*/.#
1ca30 64 65 66 69 6e 65 20 53 46 5f 44 69 73 74 69 6e  define SF_Distin
1ca40 63 74 20 20 20 20 20 20 20 30 78 30 30 30 30 31  ct       0x00001
1ca50 20 20 2f 2a 20 4f 75 74 70 75 74 20 73 68 6f 75    /* Output shou
1ca60 6c 64 20 62 65 20 44 49 53 54 49 4e 43 54 20 2a  ld be DISTINCT *
1ca70 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 41 6c 6c  /.#define SF_All
1ca80 20 20 20 20 20 20 20 20 20 20 20 20 30 78 30 30              0x00
1ca90 30 30 32 20 20 2f 2a 20 49 6e 63 6c 75 64 65 73  002  /* Includes
1caa0 20 74 68 65 20 41 4c 4c 20 6b 65 79 77 6f 72 64   the ALL keyword
1cab0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 52   */.#define SF_R
1cac0 65 73 6f 6c 76 65 64 20 20 20 20 20 20 20 30 78  esolved       0x
1cad0 30 30 30 30 34 20 20 2f 2a 20 49 64 65 6e 74 69  00004  /* Identi
1cae0 66 69 65 72 73 20 68 61 76 65 20 62 65 65 6e 20  fiers have been 
1caf0 72 65 73 6f 6c 76 65 64 20 2a 2f 0a 23 64 65 66  resolved */.#def
1cb00 69 6e 65 20 53 46 5f 41 67 67 72 65 67 61 74 65  ine SF_Aggregate
1cb10 20 20 20 20 20 20 30 78 30 30 30 30 38 20 20 2f        0x00008  /
1cb20 2a 20 43 6f 6e 74 61 69 6e 73 20 61 67 67 20 66  * Contains agg f
1cb30 75 6e 63 74 69 6f 6e 73 20 6f 72 20 61 20 47 52  unctions or a GR
1cb40 4f 55 50 20 42 59 20 2a 2f 0a 23 64 65 66 69 6e  OUP BY */.#defin
1cb50 65 20 53 46 5f 48 61 73 41 67 67 20 20 20 20 20  e SF_HasAgg     
1cb60 20 20 20 20 30 78 30 30 30 31 30 20 20 2f 2a 20      0x00010  /* 
1cb70 43 6f 6e 74 61 69 6e 73 20 61 67 67 72 65 67 61  Contains aggrega
1cb80 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a  te functions */.
1cb90 23 64 65 66 69 6e 65 20 53 46 5f 55 73 65 73 45  #define SF_UsesE
1cba0 70 68 65 6d 65 72 61 6c 20 20 30 78 30 30 30 32  phemeral  0x0002
1cbb0 30 20 20 2f 2a 20 55 73 65 73 20 74 68 65 20 4f  0  /* Uses the O
1cbc0 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 70 63  penEphemeral opc
1cbd0 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ode */.#define S
1cbe0 46 5f 45 78 70 61 6e 64 65 64 20 20 20 20 20 20  F_Expanded      
1cbf0 20 30 78 30 30 30 34 30 20 20 2f 2a 20 73 71 6c   0x00040  /* sql
1cc00 69 74 65 33 53 65 6c 65 63 74 45 78 70 61 6e 64  ite3SelectExpand
1cc10 28 29 20 63 61 6c 6c 65 64 20 6f 6e 20 74 68 69  () called on thi
1cc20 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  s */.#define SF_
1cc30 48 61 73 54 79 70 65 49 6e 66 6f 20 20 20 20 30  HasTypeInfo    0
1cc40 78 30 30 30 38 30 20 20 2f 2a 20 46 52 4f 4d 20  x00080  /* FROM 
1cc50 73 75 62 71 75 65 72 69 65 73 20 68 61 76 65 20  subqueries have 
1cc60 54 61 62 6c 65 20 6d 65 74 61 64 61 74 61 20 2a  Table metadata *
1cc70 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 43 6f 6d  /.#define SF_Com
1cc80 70 6f 75 6e 64 20 20 20 20 20 20 20 30 78 30 30  pound       0x00
1cc90 31 30 30 20 20 2f 2a 20 50 61 72 74 20 6f 66 20  100  /* Part of 
1cca0 61 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79  a compound query
1ccb0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 56   */.#define SF_V
1ccc0 61 6c 75 65 73 20 20 20 20 20 20 20 20 20 30 78  alues         0x
1ccd0 30 30 32 30 30 20 20 2f 2a 20 53 79 6e 74 68 65  00200  /* Synthe
1cce0 73 69 7a 65 64 20 66 72 6f 6d 20 56 41 4c 55 45  sized from VALUE
1ccf0 53 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66  S clause */.#def
1cd00 69 6e 65 20 53 46 5f 4d 75 6c 74 69 56 61 6c 75  ine SF_MultiValu
1cd10 65 20 20 20 20 20 30 78 30 30 34 30 30 20 20 2f  e     0x00400  /
1cd20 2a 20 53 69 6e 67 6c 65 20 56 41 4c 55 45 53 20  * Single VALUES 
1cd30 74 65 72 6d 20 77 69 74 68 20 6d 75 6c 74 69 70  term with multip
1cd40 6c 65 20 72 6f 77 73 20 2a 2f 0a 23 64 65 66 69  le rows */.#defi
1cd50 6e 65 20 53 46 5f 4e 65 73 74 65 64 46 72 6f 6d  ne SF_NestedFrom
1cd60 20 20 20 20 20 30 78 30 30 38 30 30 20 20 2f 2a       0x00800  /*
1cd70 20 50 61 72 74 20 6f 66 20 61 20 70 61 72 65 6e   Part of a paren
1cd80 74 68 65 73 69 7a 65 64 20 46 52 4f 4d 20 63 6c  thesized FROM cl
1cd90 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ause */.#define 
1cda0 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20 20 20 20  SF_MinMaxAgg    
1cdb0 20 20 30 78 30 31 30 30 30 20 20 2f 2a 20 41 67    0x01000  /* Ag
1cdc0 67 72 65 67 61 74 65 20 63 6f 6e 74 61 69 6e 69  gregate containi
1cdd0 6e 67 20 6d 69 6e 28 29 20 6f 72 20 6d 61 78 28  ng min() or max(
1cde0 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  ) */.#define SF_
1cdf0 52 65 63 75 72 73 69 76 65 20 20 20 20 20 20 30  Recursive      0
1ce00 78 30 32 30 30 30 20 20 2f 2a 20 54 68 65 20 72  x02000  /* The r
1ce10 65 63 75 72 73 69 76 65 20 70 61 72 74 20 6f 66  ecursive part of
1ce20 20 61 20 72 65 63 75 72 73 69 76 65 20 43 54 45   a recursive CTE
1ce30 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 46   */.#define SF_F
1ce40 69 78 65 64 4c 69 6d 69 74 20 20 20 20 20 30 78  ixedLimit     0x
1ce50 30 34 30 30 30 20 20 2f 2a 20 6e 53 65 6c 65 63  04000  /* nSelec
1ce60 74 52 6f 77 20 73 65 74 20 62 79 20 61 20 63 6f  tRow set by a co
1ce70 6e 73 74 61 6e 74 20 4c 49 4d 49 54 20 2a 2f 0a  nstant LIMIT */.
1ce80 23 64 65 66 69 6e 65 20 53 46 5f 4d 61 79 62 65  #define SF_Maybe
1ce90 43 6f 6e 76 65 72 74 20 20 20 30 78 30 38 30 30  Convert   0x0800
1cea0 30 20 20 2f 2a 20 4e 65 65 64 20 63 6f 6e 76 65  0  /* Need conve
1ceb0 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74  rtCompoundSelect
1cec0 54 6f 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a  ToSubquery() */.
1ced0 23 64 65 66 69 6e 65 20 53 46 5f 43 6f 6e 76 65  #define SF_Conve
1cee0 72 74 65 64 20 20 20 20 20 20 30 78 31 30 30 30  rted      0x1000
1cef0 30 20 20 2f 2a 20 42 79 20 63 6f 6e 76 65 72 74  0  /* By convert
1cf00 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f  CompoundSelectTo
1cf10 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 23 64  Subquery() */.#d
1cf20 65 66 69 6e 65 20 53 46 5f 49 6e 63 6c 75 64 65  efine SF_Include
1cf30 48 69 64 64 65 6e 20 20 30 78 32 30 30 30 30 20  Hidden  0x20000 
1cf40 20 2f 2a 20 49 6e 63 6c 75 64 65 20 68 69 64 64   /* Include hidd
1cf50 65 6e 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 6f 75  en columns in ou
1cf60 74 70 75 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tput */.#define 
1cf70 53 46 5f 43 6f 6d 70 6c 65 78 52 65 73 75 6c 74  SF_ComplexResult
1cf80 20 20 30 78 34 30 30 30 30 20 20 2f 2a 20 52 65    0x40000  /* Re
1cf90 73 75 6c 74 20 73 65 74 20 63 6f 6e 74 61 69 6e  sult set contain
1cfa0 73 20 73 75 62 71 75 65 72 79 20 6f 72 20 66 75  s subquery or fu
1cfb0 6e 63 74 69 6f 6e 20 2a 2f 0a 0a 0a 2f 2a 0a 2a  nction */.../*.*
1cfc0 2a 20 54 68 65 20 72 65 73 75 6c 74 73 20 6f 66  * The results of
1cfd0 20 61 20 53 45 4c 45 43 54 20 63 61 6e 20 62 65   a SELECT can be
1cfe0 20 64 69 73 74 72 69 62 75 74 65 64 20 69 6e 20   distributed in 
1cff0 73 65 76 65 72 61 6c 20 77 61 79 73 2c 20 61 73  several ways, as
1d000 20 64 65 66 69 6e 65 64 0a 2a 2a 20 62 79 20 6f   defined.** by o
1d010 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ne of the follow
1d020 69 6e 67 20 6d 61 63 72 6f 73 2e 20 20 54 68 65  ing macros.  The
1d030 20 22 53 52 54 22 20 70 72 65 66 69 78 20 6d 65   "SRT" prefix me
1d040 61 6e 73 20 22 53 45 4c 45 43 54 20 52 65 73 75  ans "SELECT Resu
1d050 6c 74 0a 2a 2a 20 54 79 70 65 22 2e 0a 2a 2a 0a  lt.** Type"..**.
1d060 2a 2a 20 20 20 20 20 53 52 54 5f 55 6e 69 6f 6e  **     SRT_Union
1d070 20 20 20 20 20 20 20 53 74 6f 72 65 20 72 65 73         Store res
1d080 75 6c 74 73 20 61 73 20 61 20 6b 65 79 20 69 6e  ults as a key in
1d090 20 61 20 74 65 6d 70 6f 72 61 72 79 20 69 6e 64   a temporary ind
1d0a0 65 78 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  ex.**           
1d0b0 20 20 20 20 20 20 20 20 20 20 69 64 65 6e 74 69            identi
1d0c0 66 69 65 64 20 62 79 20 70 44 65 73 74 2d 3e 69  fied by pDest->i
1d0d0 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20  SDParm..**.**   
1d0e0 20 20 53 52 54 5f 45 78 63 65 70 74 20 20 20 20    SRT_Except    
1d0f0 20 20 52 65 6d 6f 76 65 20 72 65 73 75 6c 74 73    Remove results
1d100 20 66 72 6f 6d 20 74 68 65 20 74 65 6d 70 6f 72   from the tempor
1d110 61 72 79 20 69 6e 64 65 78 20 70 44 65 73 74 2d  ary index pDest-
1d120 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20  >iSDParm..**.** 
1d130 20 20 20 20 53 52 54 5f 45 78 69 73 74 73 20 20      SRT_Exists  
1d140 20 20 20 20 53 74 6f 72 65 20 61 20 31 20 69 6e      Store a 1 in
1d150 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 70 44 65   memory cell pDe
1d160 73 74 2d 3e 69 53 44 50 61 72 6d 20 69 66 20 74  st->iSDParm if t
1d170 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 20 20 20  he result.**    
1d180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d190 20 73 65 74 20 69 73 20 6e 6f 74 20 65 6d 70 74   set is not empt
1d1a0 79 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  y..**.**     SRT
1d1b0 5f 44 69 73 63 61 72 64 20 20 20 20 20 54 68 72  _Discard     Thr
1d1c0 6f 77 20 74 68 65 20 72 65 73 75 6c 74 73 20 61  ow the results a
1d1d0 77 61 79 2e 20 20 54 68 69 73 20 69 73 20 75 73  way.  This is us
1d1e0 65 64 20 62 79 20 53 45 4c 45 43 54 0a 2a 2a 20  ed by SELECT.** 
1d1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d200 20 20 20 20 73 74 61 74 65 6d 65 6e 74 73 20 77      statements w
1d210 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 20 77  ithin triggers w
1d220 68 6f 73 65 20 6f 6e 6c 79 20 70 75 72 70 6f 73  hose only purpos
1d230 65 20 69 73 0a 2a 2a 20 20 20 20 20 20 20 20 20  e is.**         
1d240 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20              the 
1d250 73 69 64 65 2d 65 66 66 65 63 74 73 20 6f 66 20  side-effects of 
1d260 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a  functions..**.**
1d270 20 41 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f 76   All of the abov
1d280 65 20 61 72 65 20 66 72 65 65 20 74 6f 20 69 67  e are free to ig
1d290 6e 6f 72 65 20 74 68 65 69 72 20 4f 52 44 45 52  nore their ORDER
1d2a0 20 42 59 20 63 6c 61 75 73 65 2e 20 54 68 6f 73   BY clause. Thos
1d2b0 65 20 74 68 61 74 0a 2a 2a 20 66 6f 6c 6c 6f 77  e that.** follow
1d2c0 20 6d 75 73 74 20 68 6f 6e 6f 72 20 74 68 65 20   must honor the 
1d2d0 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e  ORDER BY clause.
1d2e0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4f  .**.**     SRT_O
1d2f0 75 74 70 75 74 20 20 20 20 20 20 47 65 6e 65 72  utput      Gener
1d300 61 74 65 20 61 20 72 6f 77 20 6f 66 20 6f 75 74  ate a row of out
1d310 70 75 74 20 28 75 73 69 6e 67 20 74 68 65 20 4f  put (using the O
1d320 50 5f 52 65 73 75 6c 74 52 6f 77 0a 2a 2a 20 20  P_ResultRow.**  
1d330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d340 20 20 20 6f 70 63 6f 64 65 29 20 66 6f 72 20 65     opcode) for e
1d350 61 63 68 20 72 6f 77 20 69 6e 20 74 68 65 20 72  ach row in the r
1d360 65 73 75 6c 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a  esult set..**.**
1d370 20 20 20 20 20 53 52 54 5f 4d 65 6d 20 20 20 20       SRT_Mem    
1d380 20 20 20 20 20 4f 6e 6c 79 20 76 61 6c 69 64 20       Only valid 
1d390 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  if the result is
1d3a0 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e   a single column
1d3b0 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  ..**            
1d3c0 20 20 20 20 20 20 20 20 20 53 74 6f 72 65 20 74           Store t
1d3d0 68 65 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20  he first column 
1d3e0 6f 66 20 74 68 65 20 66 69 72 73 74 20 72 65 73  of the first res
1d3f0 75 6c 74 20 72 6f 77 0a 2a 2a 20 20 20 20 20 20  ult row.**      
1d400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1d410 6e 20 72 65 67 69 73 74 65 72 20 70 44 65 73 74  n register pDest
1d420 2d 3e 69 53 44 50 61 72 6d 20 74 68 65 6e 20 61  ->iSDParm then a
1d430 62 61 6e 64 6f 6e 20 74 68 65 20 72 65 73 74 0a  bandon the rest.
1d440 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1d450 20 20 20 20 20 20 20 6f 66 20 74 68 65 20 71 75         of the qu
1d460 65 72 79 2e 20 20 54 68 69 73 20 64 65 73 74 69  ery.  This desti
1d470 6e 61 74 69 6f 6e 20 69 6d 70 6c 69 65 73 20 22  nation implies "
1d480 4c 49 4d 49 54 20 31 22 2e 0a 2a 2a 0a 2a 2a 20  LIMIT 1"..**.** 
1d490 20 20 20 20 53 52 54 5f 53 65 74 20 20 20 20 20      SRT_Set     
1d4a0 20 20 20 20 54 68 65 20 72 65 73 75 6c 74 20 6d      The result m
1d4b0 75 73 74 20 62 65 20 61 20 73 69 6e 67 6c 65 20  ust be a single 
1d4c0 63 6f 6c 75 6d 6e 2e 20 20 53 74 6f 72 65 20 65  column.  Store e
1d4d0 61 63 68 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ach.**          
1d4e0 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 20 6f             row o
1d4f0 66 20 72 65 73 75 6c 74 20 61 73 20 74 68 65 20  f result as the 
1d500 6b 65 79 20 69 6e 20 74 61 62 6c 65 20 70 44 65  key in table pDe
1d510 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20  st->iSDParm..** 
1d520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d530 20 20 20 20 41 70 70 6c 79 20 74 68 65 20 61 66      Apply the af
1d540 66 69 6e 69 74 79 20 70 44 65 73 74 2d 3e 61 66  finity pDest->af
1d550 66 53 64 73 74 20 62 65 66 6f 72 65 20 73 74 6f  fSdst before sto
1d560 72 69 6e 67 0a 2a 2a 20 20 20 20 20 20 20 20 20  ring.**         
1d570 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
1d580 6c 74 73 2e 20 20 55 73 65 64 20 74 6f 20 69 6d  lts.  Used to im
1d590 70 6c 65 6d 65 6e 74 20 22 49 4e 20 28 53 45 4c  plement "IN (SEL
1d5a0 45 43 54 20 2e 2e 2e 29 22 2e 0a 2a 2a 0a 2a 2a  ECT ...)"..**.**
1d5b0 20 20 20 20 20 53 52 54 5f 45 70 68 65 6d 54 61       SRT_EphemTa
1d5c0 62 20 20 20 20 43 72 65 61 74 65 20 61 6e 20 74  b    Create an t
1d5d0 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70  emporary table p
1d5e0 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 61 6e  Dest->iSDParm an
1d5f0 64 20 73 74 6f 72 65 0a 2a 2a 20 20 20 20 20 20  d store.**      
1d600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1d610 68 65 20 72 65 73 75 6c 74 20 74 68 65 72 65 2e  he result there.
1d620 20 54 68 65 20 63 75 72 73 6f 72 20 69 73 20 6c   The cursor is l
1d630 65 66 74 20 6f 70 65 6e 20 61 66 74 65 72 0a 2a  eft open after.*
1d640 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1d650 20 20 20 20 20 20 72 65 74 75 72 6e 69 6e 67 2e        returning.
1d660 20 20 54 68 69 73 20 69 73 20 6c 69 6b 65 20 53    This is like S
1d670 52 54 5f 54 61 62 6c 65 20 65 78 63 65 70 74 20  RT_Table except 
1d680 74 68 61 74 0a 2a 2a 20 20 20 20 20 20 20 20 20  that.**         
1d690 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
1d6a0 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 75 73 65   destination use
1d6b0 73 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72  s OP_OpenEphemer
1d6c0 61 6c 20 74 6f 20 63 72 65 61 74 65 0a 2a 2a 20  al to create.** 
1d6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d6e0 20 20 20 20 74 68 65 20 74 61 62 6c 65 20 66 69      the table fi
1d6f0 72 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  rst..**.**     S
1d700 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20 47  RT_Coroutine   G
1d710 65 6e 65 72 61 74 65 20 61 20 63 6f 2d 72 6f 75  enerate a co-rou
1d720 74 69 6e 65 20 74 68 61 74 20 72 65 74 75 72 6e  tine that return
1d730 73 20 61 20 6e 65 77 20 72 6f 77 20 6f 66 0a 2a  s a new row of.*
1d740 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1d750 20 20 20 20 20 20 72 65 73 75 6c 74 73 20 65 61        results ea
1d760 63 68 20 74 69 6d 65 20 69 74 20 69 73 20 69 6e  ch time it is in
1d770 76 6f 6b 65 64 2e 20 20 54 68 65 20 65 6e 74 72  voked.  The entr
1d780 79 20 70 6f 69 6e 74 0a 2a 2a 20 20 20 20 20 20  y point.**      
1d790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
1d7a0 66 20 74 68 65 20 63 6f 2d 72 6f 75 74 69 6e 65  f the co-routine
1d7b0 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
1d7c0 67 69 73 74 65 72 20 70 44 65 73 74 2d 3e 69 53  gister pDest->iS
1d7d0 44 50 61 72 6d 0a 2a 2a 20 20 20 20 20 20 20 20  DParm.**        
1d7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 61 6e 64               and
1d7f0 20 74 68 65 20 72 65 73 75 6c 74 20 72 6f 77 20   the result row 
1d800 69 73 20 73 74 6f 72 65 64 20 69 6e 20 70 44 65  is stored in pDe
1d810 73 74 2d 3e 6e 44 65 73 74 20 72 65 67 69 73 74  st->nDest regist
1d820 65 72 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ers.**          
1d830 20 20 20 20 20 20 20 20 20 20 20 73 74 61 72 74             start
1d840 69 6e 67 20 77 69 74 68 20 70 44 65 73 74 2d 3e  ing with pDest->
1d850 69 53 64 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  iSdst..**.**    
1d860 20 53 52 54 5f 54 61 62 6c 65 20 20 20 20 20 20   SRT_Table      
1d870 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69   Store results i
1d880 6e 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  n temporary tabl
1d890 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  e pDest->iSDParm
1d8a0 2e 0a 2a 2a 20 20 20 20 20 53 52 54 5f 46 69 66  ..**     SRT_Fif
1d8b0 6f 20 20 20 20 20 20 20 20 54 68 69 73 20 69 73  o        This is
1d8c0 20 6c 69 6b 65 20 53 52 54 5f 45 70 68 65 6d 54   like SRT_EphemT
1d8d0 61 62 20 65 78 63 65 70 74 20 74 68 61 74 20 74  ab except that t
1d8e0 68 65 20 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20  he table.**     
1d8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d900 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20 61 6c  is assumed to al
1d910 72 65 61 64 79 20 62 65 20 6f 70 65 6e 2e 20 20  ready be open.  
1d920 53 52 54 5f 46 69 66 6f 20 68 61 73 0a 2a 2a 20  SRT_Fifo has.** 
1d930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d940 20 20 20 20 74 68 65 20 61 64 64 69 74 69 6f 6e      the addition
1d950 61 6c 20 70 72 6f 70 65 72 74 79 20 6f 66 20 62  al property of b
1d960 65 69 6e 67 20 61 62 6c 65 20 74 6f 20 69 67 6e  eing able to ign
1d970 6f 72 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ore.**          
1d980 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20 4f             the O
1d990 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a  RDER BY clause..
1d9a0 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69  **.**     SRT_Di
1d9b0 73 74 46 69 66 6f 20 20 20 20 53 74 6f 72 65 20  stFifo    Store 
1d9c0 72 65 73 75 6c 74 73 20 69 6e 20 61 20 74 65 6d  results in a tem
1d9d0 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44 65  porary table pDe
1d9e0 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20  st->iSDParm..** 
1d9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da00 20 20 20 20 42 75 74 20 61 6c 73 6f 20 75 73 65      But also use
1da10 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
1da20 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b   pDest->iSDParm+
1da30 31 20 61 73 0a 2a 2a 20 20 20 20 20 20 20 20 20  1 as.**         
1da40 20 20 20 20 20 20 20 20 20 20 20 20 61 20 72 65              a re
1da50 63 6f 72 64 20 6f 66 20 61 6c 6c 20 70 72 69 6f  cord of all prio
1da60 72 20 72 65 73 75 6c 74 73 20 61 6e 64 20 69 67  r results and ig
1da70 6e 6f 72 65 20 61 6e 79 20 64 75 70 6c 69 63 61  nore any duplica
1da80 74 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  te.**           
1da90 20 20 20 20 20 20 20 20 20 20 72 6f 77 73 2e 20            rows. 
1daa0 20 4e 61 6d 65 20 6d 65 61 6e 73 3a 20 20 22 44   Name means:  "D
1dab0 69 73 74 69 6e 63 74 20 46 69 66 6f 22 2e 0a 2a  istinct Fifo"..*
1dac0 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 51 75 65  *.**     SRT_Que
1dad0 75 65 20 20 20 20 20 20 20 53 74 6f 72 65 20 72  ue       Store r
1dae0 65 73 75 6c 74 73 20 69 6e 20 70 72 69 6f 72 69  esults in priori
1daf0 74 79 20 71 75 65 75 65 20 70 44 65 73 74 2d 3e  ty queue pDest->
1db00 69 53 44 50 61 72 6d 20 28 72 65 61 6c 6c 79 0a  iSDParm (really.
1db10 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1db20 20 20 20 20 20 20 20 61 6e 20 69 6e 64 65 78 29         an index)
1db30 2e 20 20 41 70 70 65 6e 64 20 61 20 73 65 71 75  .  Append a sequ
1db40 65 6e 63 65 20 6e 75 6d 62 65 72 20 73 6f 20 74  ence number so t
1db50 68 61 74 20 61 6c 6c 20 65 6e 74 72 69 65 73 0a  hat all entries.
1db60 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1db70 20 20 20 20 20 20 20 61 72 65 20 64 69 73 74 69         are disti
1db80 6e 63 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  nct..**.**     S
1db90 52 54 5f 44 69 73 74 51 75 65 75 65 20 20 20 53  RT_DistQueue   S
1dba0 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20  tore results in 
1dbb0 70 72 69 6f 72 69 74 79 20 71 75 65 75 65 20 70  priority queue p
1dbc0 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 6f 6e  Dest->iSDParm on
1dbd0 6c 79 20 69 66 0a 2a 2a 20 20 20 20 20 20 20 20  ly if.**        
1dbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
1dbf0 20 73 61 6d 65 20 72 65 63 6f 72 64 20 68 61 73   same record has
1dc00 20 6e 65 76 65 72 20 62 65 65 6e 20 73 74 6f 72   never been stor
1dc10 65 64 20 62 65 66 6f 72 65 2e 20 20 54 68 65 0a  ed before.  The.
1dc20 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1dc30 20 20 20 20 20 20 20 69 6e 64 65 78 20 61 74 20         index at 
1dc40 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31  pDest->iSDParm+1
1dc50 20 68 6f 6c 64 20 61 6c 6c 20 70 72 69 6f 72 20   hold all prior 
1dc60 73 74 6f 72 65 73 2e 0a 2a 2f 0a 23 64 65 66 69  stores..*/.#defi
1dc70 6e 65 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20  ne SRT_Union    
1dc80 20 20 20 20 31 20 20 2f 2a 20 53 74 6f 72 65 20      1  /* Store 
1dc90 72 65 73 75 6c 74 20 61 73 20 6b 65 79 73 20 69  result as keys i
1dca0 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64  n an index */.#d
1dcb0 65 66 69 6e 65 20 53 52 54 5f 45 78 63 65 70 74  efine SRT_Except
1dcc0 20 20 20 20 20 20 20 32 20 20 2f 2a 20 52 65 6d         2  /* Rem
1dcd0 6f 76 65 20 72 65 73 75 6c 74 20 66 72 6f 6d 20  ove result from 
1dce0 61 20 55 4e 49 4f 4e 20 69 6e 64 65 78 20 2a 2f  a UNION index */
1dcf0 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45 78 69  .#define SRT_Exi
1dd00 73 74 73 20 20 20 20 20 20 20 33 20 20 2f 2a 20  sts       3  /* 
1dd10 53 74 6f 72 65 20 31 20 69 66 20 74 68 65 20 72  Store 1 if the r
1dd20 65 73 75 6c 74 20 69 73 20 6e 6f 74 20 65 6d 70  esult is not emp
1dd30 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ty */.#define SR
1dd40 54 5f 44 69 73 63 61 72 64 20 20 20 20 20 20 34  T_Discard      4
1dd50 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 73 61 76 65    /* Do not save
1dd60 20 74 68 65 20 72 65 73 75 6c 74 73 20 61 6e 79   the results any
1dd70 77 68 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65  where */.#define
1dd80 20 53 52 54 5f 46 69 66 6f 20 20 20 20 20 20 20   SRT_Fifo       
1dd90 20 20 35 20 20 2f 2a 20 53 74 6f 72 65 20 72 65    5  /* Store re
1dda0 73 75 6c 74 20 61 73 20 64 61 74 61 20 77 69 74  sult as data wit
1ddb0 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72  h an automatic r
1ddc0 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  owid */.#define 
1ddd0 53 52 54 5f 44 69 73 74 46 69 66 6f 20 20 20 20  SRT_DistFifo    
1dde0 20 36 20 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f   6  /* Like SRT_
1ddf0 46 69 66 6f 2c 20 62 75 74 20 75 6e 69 71 75 65  Fifo, but unique
1de00 20 72 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f   results only */
1de10 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 51 75 65  .#define SRT_Que
1de20 75 65 20 20 20 20 20 20 20 20 37 20 20 2f 2a 20  ue        7  /* 
1de30 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20  Store result in 
1de40 61 6e 20 71 75 65 75 65 20 2a 2f 0a 23 64 65 66  an queue */.#def
1de50 69 6e 65 20 53 52 54 5f 44 69 73 74 51 75 65 75  ine SRT_DistQueu
1de60 65 20 20 20 20 38 20 20 2f 2a 20 4c 69 6b 65 20  e    8  /* Like 
1de70 53 52 54 5f 51 75 65 75 65 2c 20 62 75 74 20 75  SRT_Queue, but u
1de80 6e 69 71 75 65 20 72 65 73 75 6c 74 73 20 6f 6e  nique results on
1de90 6c 79 20 2a 2f 0a 0a 2f 2a 20 54 68 65 20 4f 52  ly */../* The OR
1dea0 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 69 73  DER BY clause is
1deb0 20 69 67 6e 6f 72 65 64 20 66 6f 72 20 61 6c 6c   ignored for all
1dec0 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20 2a 2f   of the above */
1ded0 0a 23 64 65 66 69 6e 65 20 49 67 6e 6f 72 61 62  .#define Ignorab
1dee0 6c 65 4f 72 64 65 72 62 79 28 58 29 20 28 28 58  leOrderby(X) ((X
1def0 2d 3e 65 44 65 73 74 29 3c 3d 53 52 54 5f 44 69  ->eDest)<=SRT_Di
1df00 73 74 51 75 65 75 65 29 0a 0a 23 64 65 66 69 6e  stQueue)..#defin
1df10 65 20 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20  e SRT_Output    
1df20 20 20 20 39 20 20 2f 2a 20 4f 75 74 70 75 74 20     9  /* Output 
1df30 65 61 63 68 20 72 6f 77 20 6f 66 20 72 65 73 75  each row of resu
1df40 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  lt */.#define SR
1df50 54 5f 4d 65 6d 20 20 20 20 20 20 20 20 20 31 30  T_Mem         10
1df60 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
1df70 74 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20 63 65  t in a memory ce
1df80 6c 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ll */.#define SR
1df90 54 5f 53 65 74 20 20 20 20 20 20 20 20 20 31 31  T_Set         11
1dfa0 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
1dfb0 74 73 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e  ts as keys in an
1dfc0 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e   index */.#defin
1dfd0 65 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20 20  e SRT_EphemTab  
1dfe0 20 20 31 32 20 20 2f 2a 20 43 72 65 61 74 65 20    12  /* Create 
1dff0 74 72 61 6e 73 69 65 6e 74 20 74 61 62 20 61 6e  transient tab an
1e000 64 20 73 74 6f 72 65 20 6c 69 6b 65 20 53 52 54  d store like SRT
1e010 5f 54 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e  _Table */.#defin
1e020 65 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20  e SRT_Coroutine 
1e030 20 20 31 33 20 20 2f 2a 20 47 65 6e 65 72 61 74    13  /* Generat
1e040 65 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f  e a single row o
1e050 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66  f result */.#def
1e060 69 6e 65 20 53 52 54 5f 54 61 62 6c 65 20 20 20  ine SRT_Table   
1e070 20 20 20 20 31 34 20 20 2f 2a 20 53 74 6f 72 65      14  /* Store
1e080 20 72 65 73 75 6c 74 20 61 73 20 64 61 74 61 20   result as data 
1e090 77 69 74 68 20 61 6e 20 61 75 74 6f 6d 61 74 69  with an automati
1e0a0 63 20 72 6f 77 69 64 20 2a 2f 0a 0a 2f 2a 0a 2a  c rowid */../*.*
1e0b0 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
1e0c0 20 74 68 69 73 20 6f 62 6a 65 63 74 20 64 65 73   this object des
1e0d0 63 72 69 62 65 73 20 77 68 65 72 65 20 74 6f 20  cribes where to 
1e0e0 70 75 74 20 6f 66 20 74 68 65 20 72 65 73 75 6c  put of the resul
1e0f0 74 73 20 6f 66 0a 2a 2a 20 61 20 53 45 4c 45 43  ts of.** a SELEC
1e100 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a  T statement..*/.
1e110 73 74 72 75 63 74 20 53 65 6c 65 63 74 44 65 73  struct SelectDes
1e120 74 20 7b 0a 20 20 75 38 20 65 44 65 73 74 3b 20  t {.  u8 eDest; 
1e130 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 6f             /* Ho
1e140 77 20 74 6f 20 64 69 73 70 6f 73 65 20 6f 66 20  w to dispose of 
1e150 74 68 65 20 72 65 73 75 6c 74 73 2e 20 20 4f 6e  the results.  On
1e160 20 6f 66 20 53 52 54 5f 2a 20 61 62 6f 76 65 2e   of SRT_* above.
1e170 20 2a 2f 0a 20 20 69 6e 74 20 69 53 44 50 61 72   */.  int iSDPar
1e180 6d 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20  m;         /* A 
1e190 70 61 72 61 6d 65 74 65 72 20 75 73 65 64 20 62  parameter used b
1e1a0 79 20 74 68 65 20 65 44 65 73 74 20 64 69 73 70  y the eDest disp
1e1b0 6f 73 61 6c 20 6d 65 74 68 6f 64 20 2a 2f 0a 20  osal method */. 
1e1c0 20 69 6e 74 20 69 53 64 73 74 3b 20 20 20 20 20   int iSdst;     
1e1d0 20 20 20 20 20 20 2f 2a 20 42 61 73 65 20 72 65        /* Base re
1e1e0 67 69 73 74 65 72 20 77 68 65 72 65 20 72 65 73  gister where res
1e1f0 75 6c 74 73 20 61 72 65 20 77 72 69 74 74 65 6e  ults are written
1e200 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 64 73 74 3b   */.  int nSdst;
1e210 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1e220 6d 62 65 72 20 6f 66 20 72 65 67 69 73 74 65 72  mber of register
1e230 73 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 20  s allocated */. 
1e240 20 63 68 61 72 20 2a 7a 41 66 66 53 64 73 74 3b   char *zAffSdst;
1e250 20 20 20 20 20 20 2f 2a 20 41 66 66 69 6e 69 74        /* Affinit
1e260 79 20 75 73 65 64 20 77 68 65 6e 20 65 44 65 73  y used when eDes
1e270 74 3d 3d 53 52 54 5f 53 65 74 20 2a 2f 0a 20 20  t==SRT_Set */.  
1e280 45 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72  ExprList *pOrder
1e290 42 79 3b 20 20 2f 2a 20 4b 65 79 20 63 6f 6c 75  By;  /* Key colu
1e2a0 6d 6e 73 20 66 6f 72 20 53 52 54 5f 51 75 65 75  mns for SRT_Queu
1e2b0 65 20 61 6e 64 20 53 52 54 5f 44 69 73 74 51 75  e and SRT_DistQu
1e2c0 65 75 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  eue */.};../*.**
1e2d0 20 44 75 72 69 6e 67 20 63 6f 64 65 20 67 65 6e   During code gen
1e2e0 65 72 61 74 69 6f 6e 20 6f 66 20 73 74 61 74 65  eration of state
1e2f0 6d 65 6e 74 73 20 74 68 61 74 20 64 6f 20 69 6e  ments that do in
1e300 73 65 72 74 73 20 69 6e 74 6f 20 41 55 54 4f 49  serts into AUTOI
1e310 4e 43 52 45 4d 45 4e 54 0a 2a 2a 20 74 61 62 6c  NCREMENT.** tabl
1e320 65 73 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  es, the followin
1e330 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73  g information is
1e340 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65   attached to the
1e350 20 54 61 62 6c 65 2e 75 2e 61 75 74 6f 49 6e 63   Table.u.autoInc
1e360 2e 70 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 6f 66  .p.** pointer of
1e370 20 65 61 63 68 20 61 75 74 6f 69 6e 63 72 65 6d   each autoincrem
1e380 65 6e 74 20 74 61 62 6c 65 20 74 6f 20 72 65 63  ent table to rec
1e390 6f 72 64 20 73 6f 6d 65 20 73 69 64 65 20 69 6e  ord some side in
1e3a0 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 0a 2a  formation that.*
1e3b0 2a 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72  * the code gener
1e3c0 61 74 6f 72 20 6e 65 65 64 73 2e 20 20 57 65 20  ator needs.  We 
1e3d0 68 61 76 65 20 74 6f 20 6b 65 65 70 20 70 65 72  have to keep per
1e3e0 2d 74 61 62 6c 65 20 61 75 74 6f 69 6e 63 72 65  -table autoincre
1e3f0 6d 65 6e 74 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74  ment.** informat
1e400 69 6f 6e 20 69 6e 20 63 61 73 65 20 69 6e 73 65  ion in case inse
1e410 72 74 73 20 61 72 65 20 64 6f 6e 65 20 77 69 74  rts are done wit
1e420 68 69 6e 20 74 72 69 67 67 65 72 73 2e 20 20 54  hin triggers.  T
1e430 72 69 67 67 65 72 73 20 64 6f 20 6e 6f 74 0a 2a  riggers do not.*
1e440 2a 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6f 72 64  * normally coord
1e450 69 6e 61 74 65 20 74 68 65 69 72 20 61 63 74 69  inate their acti
1e460 76 69 74 69 65 73 2c 20 62 75 74 20 77 65 20 64  vities, but we d
1e470 6f 20 6e 65 65 64 20 74 6f 20 63 6f 6f 72 64 69  o need to coordi
1e480 6e 61 74 65 20 74 68 65 0a 2a 2a 20 6c 6f 61 64  nate the.** load
1e490 69 6e 67 20 61 6e 64 20 73 61 76 69 6e 67 20 6f  ing and saving o
1e4a0 66 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20  f autoincrement 
1e4b0 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
1e4c0 73 74 72 75 63 74 20 41 75 74 6f 69 6e 63 49 6e  struct AutoincIn
1e4d0 66 6f 20 7b 0a 20 20 41 75 74 6f 69 6e 63 49 6e  fo {.  AutoincIn
1e4e0 66 6f 20 2a 70 4e 65 78 74 3b 20 20 20 2f 2a 20  fo *pNext;   /* 
1e4f0 4e 65 78 74 20 69 6e 66 6f 20 62 6c 6f 63 6b 20  Next info block 
1e500 69 6e 20 61 20 6c 69 73 74 20 6f 66 20 74 68 65  in a list of the
1e510 6d 20 61 6c 6c 20 2a 2f 0a 20 20 54 61 62 6c 65  m all */.  Table
1e520 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20   *pTab;         
1e530 20 2f 2a 20 54 61 62 6c 65 20 74 68 69 73 20 69   /* Table this i
1e540 6e 66 6f 20 62 6c 6f 63 6b 20 72 65 66 65 72 73  nfo block refers
1e550 20 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62   to */.  int iDb
1e560 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
1e570 2a 20 49 6e 64 65 78 20 69 6e 20 73 71 6c 69 74  * Index in sqlit
1e580 65 33 2e 61 44 62 5b 5d 20 6f 66 20 64 61 74 61  e3.aDb[] of data
1e590 62 61 73 65 20 68 6f 6c 64 69 6e 67 20 70 54 61  base holding pTa
1e5a0 62 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 43 74  b */.  int regCt
1e5b0 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  r;           /* 
1e5c0 4d 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72 20  Memory register 
1e5d0 68 6f 6c 64 69 6e 67 20 74 68 65 20 72 6f 77 69  holding the rowi
1e5e0 64 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 7d 3b 0a  d counter */.};.
1e5f0 0a 2f 2a 0a 2a 2a 20 53 69 7a 65 20 6f 66 20 74  ./*.** Size of t
1e600 68 65 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 0a  he column cache.
1e610 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
1e620 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 0a 23 20 64  E_N_COLCACHE.# d
1e630 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 43  efine SQLITE_N_C
1e640 4f 4c 43 41 43 48 45 20 31 30 0a 23 65 6e 64 69  OLCACHE 10.#endi
1e650 66 0a 0a 2f 2a 0a 2a 2a 20 41 74 20 6c 65 61 73  f../*.** At leas
1e660 74 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f  t one instance o
1e670 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
1e680 73 74 72 75 63 74 75 72 65 20 69 73 20 63 72 65  structure is cre
1e690 61 74 65 64 20 66 6f 72 20 65 61 63 68 0a 2a 2a  ated for each.**
1e6a0 20 74 72 69 67 67 65 72 20 74 68 61 74 20 6d 61   trigger that ma
1e6b0 79 20 62 65 20 66 69 72 65 64 20 77 68 69 6c 65  y be fired while
1e6c0 20 70 61 72 73 69 6e 67 20 61 6e 20 49 4e 53 45   parsing an INSE
1e6d0 52 54 2c 20 55 50 44 41 54 45 20 6f 72 20 44 45  RT, UPDATE or DE
1e6e0 4c 45 54 45 0a 2a 2a 20 73 74 61 74 65 6d 65 6e  LETE.** statemen
1e6f0 74 2e 20 41 6c 6c 20 73 75 63 68 20 6f 62 6a 65  t. All such obje
1e700 63 74 73 20 61 72 65 20 73 74 6f 72 65 64 20 69  cts are stored i
1e710 6e 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73  n the linked lis
1e720 74 20 68 65 61 64 65 64 20 61 74 0a 2a 2a 20 50  t headed at.** P
1e730 61 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67  arse.pTriggerPrg
1e740 20 61 6e 64 20 64 65 6c 65 74 65 64 20 6f 6e 63   and deleted onc
1e750 65 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6d 70  e statement comp
1e760 69 6c 61 74 69 6f 6e 20 68 61 73 20 62 65 65 6e  ilation has been
1e770 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65 64 2e 0a 2a  .** completed..*
1e780 2a 0a 2a 2a 20 41 20 56 64 62 65 20 73 75 62 2d  *.** A Vdbe sub-
1e790 70 72 6f 67 72 61 6d 20 74 68 61 74 20 69 6d 70  program that imp
1e7a0 6c 65 6d 65 6e 74 73 20 74 68 65 20 62 6f 64 79  lements the body
1e7b0 20 61 6e 64 20 57 48 45 4e 20 63 6c 61 75 73 65   and WHEN clause
1e7c0 20 6f 66 20 74 72 69 67 67 65 72 0a 2a 2a 20 54   of trigger.** T
1e7d0 72 69 67 67 65 72 50 72 67 2e 70 54 72 69 67 67  riggerPrg.pTrigg
1e7e0 65 72 2c 20 61 73 73 75 6d 69 6e 67 20 61 20 64  er, assuming a d
1e7f0 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49  efault ON CONFLI
1e800 43 54 20 63 6c 61 75 73 65 20 6f 66 0a 2a 2a 20  CT clause of.** 
1e810 54 72 69 67 67 65 72 50 72 67 2e 6f 72 63 6f 6e  TriggerPrg.orcon
1e820 66 2c 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  f, is stored in 
1e830 74 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 70  the TriggerPrg.p
1e840 50 72 6f 67 72 61 6d 20 76 61 72 69 61 62 6c 65  Program variable
1e850 2e 0a 2a 2a 20 54 68 65 20 50 61 72 73 65 2e 70  ..** The Parse.p
1e860 54 72 69 67 67 65 72 50 72 67 20 6c 69 73 74 20  TriggerPrg list 
1e870 6e 65 76 65 72 20 63 6f 6e 74 61 69 6e 73 20 74  never contains t
1e880 77 6f 20 65 6e 74 72 69 65 73 20 77 69 74 68 20  wo entries with 
1e890 74 68 65 20 73 61 6d 65 0a 2a 2a 20 76 61 6c 75  the same.** valu
1e8a0 65 73 20 66 6f 72 20 62 6f 74 68 20 70 54 72 69  es for both pTri
1e8b0 67 67 65 72 20 61 6e 64 20 6f 72 63 6f 6e 66 2e  gger and orconf.
1e8c0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 54 72 69 67 67  .**.** The Trigg
1e8d0 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 30  erPrg.aColmask[0
1e8e0 5d 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65  ] variable is se
1e8f0 74 20 74 6f 20 61 20 6d 61 73 6b 20 6f 66 20 6f  t to a mask of o
1e900 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20  ld.* columns.** 
1e910 61 63 63 65 73 73 65 64 20 28 6f 72 20 73 65 74  accessed (or set
1e920 20 74 6f 20 30 20 66 6f 72 20 74 72 69 67 67 65   to 0 for trigge
1e930 72 73 20 66 69 72 65 64 20 61 73 20 61 20 72 65  rs fired as a re
1e940 73 75 6c 74 20 6f 66 20 49 4e 53 45 52 54 0a 2a  sult of INSERT.*
1e950 2a 20 73 74 61 74 65 6d 65 6e 74 73 29 2e 20 53  * statements). S
1e960 69 6d 69 6c 61 72 6c 79 2c 20 74 68 65 20 54 72  imilarly, the Tr
1e970 69 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73  iggerPrg.aColmas
1e980 6b 5b 31 5d 20 76 61 72 69 61 62 6c 65 20 69 73  k[1] variable is
1e990 20 73 65 74 20 74 6f 0a 2a 2a 20 61 20 6d 61 73   set to.** a mas
1e9a0 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d  k of new.* colum
1e9b0 6e 73 20 75 73 65 64 20 62 79 20 74 68 65 20 70  ns used by the p
1e9c0 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 73 74 72 75 63  rogram..*/.struc
1e9d0 74 20 54 72 69 67 67 65 72 50 72 67 20 7b 0a 20  t TriggerPrg {. 
1e9e0 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67 67   Trigger *pTrigg
1e9f0 65 72 3b 20 20 20 20 20 20 2f 2a 20 54 72 69 67  er;      /* Trig
1ea00 67 65 72 20 74 68 69 73 20 70 72 6f 67 72 61 6d  ger this program
1ea10 20 77 61 73 20 63 6f 64 65 64 20 66 72 6f 6d 20   was coded from 
1ea20 2a 2f 0a 20 20 54 72 69 67 67 65 72 50 72 67 20  */.  TriggerPrg 
1ea30 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a 20  *pNext;      /* 
1ea40 4e 65 78 74 20 65 6e 74 72 79 20 69 6e 20 50 61  Next entry in Pa
1ea50 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67 20  rse.pTriggerPrg 
1ea60 6c 69 73 74 20 2a 2f 0a 20 20 53 75 62 50 72 6f  list */.  SubPro
1ea70 67 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20  gram *pProgram; 
1ea80 20 20 2f 2a 20 50 72 6f 67 72 61 6d 20 69 6d 70    /* Program imp
1ea90 6c 65 6d 65 6e 74 69 6e 67 20 70 54 72 69 67 67  lementing pTrigg
1eaa0 65 72 2f 6f 72 63 6f 6e 66 20 2a 2f 0a 20 20 69  er/orconf */.  i
1eab0 6e 74 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20  nt orconf;      
1eac0 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c         /* Defaul
1ead0 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f  t ON CONFLICT po
1eae0 6c 69 63 79 20 2a 2f 0a 20 20 75 33 32 20 61 43  licy */.  u32 aC
1eaf0 6f 6c 6d 61 73 6b 5b 32 5d 3b 20 20 20 20 20 20  olmask[2];      
1eb00 20 20 2f 2a 20 4d 61 73 6b 73 20 6f 66 20 6f 6c    /* Masks of ol
1eb10 64 2e 2a 2c 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d  d.*, new.* colum
1eb20 6e 73 20 61 63 63 65 73 73 65 64 20 2a 2f 0a 7d  ns accessed */.}
1eb30 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 79 44 62  ;../*.** The yDb
1eb40 4d 61 73 6b 20 64 61 74 61 74 79 70 65 20 66 6f  Mask datatype fo
1eb50 72 20 74 68 65 20 62 69 74 6d 61 73 6b 20 6f 66  r the bitmask of
1eb60 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61   all attached da
1eb70 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 69 66 20  tabases..*/.#if 
1eb80 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43  SQLITE_MAX_ATTAC
1eb90 48 45 44 3e 33 30 0a 20 20 74 79 70 65 64 65 66  HED>30.  typedef
1eba0 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 79   unsigned char y
1ebb0 44 62 4d 61 73 6b 5b 28 53 51 4c 49 54 45 5f 4d  DbMask[(SQLITE_M
1ebc0 41 58 5f 41 54 54 41 43 48 45 44 2b 39 29 2f 38  AX_ATTACHED+9)/8
1ebd0 5d 3b 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  ];.# define DbMa
1ebe0 73 6b 54 65 73 74 28 4d 2c 49 29 20 20 20 20 28  skTest(M,I)    (
1ebf0 28 28 4d 29 5b 28 49 29 2f 38 5d 26 28 31 3c 3c  ((M)[(I)/8]&(1<<
1ec00 28 28 49 29 26 37 29 29 29 21 3d 30 29 0a 23 20  ((I)&7)))!=0).# 
1ec10 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a 65 72  define DbMaskZer
1ec20 6f 28 4d 29 20 20 20 20 20 20 6d 65 6d 73 65 74  o(M)      memset
1ec30 28 28 4d 29 2c 30 2c 73 69 7a 65 6f 66 28 4d 29  ((M),0,sizeof(M)
1ec40 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  ).# define DbMas
1ec50 6b 53 65 74 28 4d 2c 49 29 20 20 20 20 20 28 4d  kSet(M,I)     (M
1ec60 29 5b 28 49 29 2f 38 5d 7c 3d 28 31 3c 3c 28 28  )[(I)/8]|=(1<<((
1ec70 49 29 26 37 29 29 0a 23 20 64 65 66 69 6e 65 20  I)&7)).# define 
1ec80 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29  DbMaskAllZero(M)
1ec90 20 20 20 73 71 6c 69 74 65 33 44 62 4d 61 73 6b     sqlite3DbMask
1eca0 41 6c 6c 5a 65 72 6f 28 4d 29 0a 23 20 64 65 66  AllZero(M).# def
1ecb0 69 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72  ine DbMaskNonZer
1ecc0 6f 28 4d 29 20 20 20 28 73 71 6c 69 74 65 33 44  o(M)   (sqlite3D
1ecd0 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 3d  bMaskAllZero(M)=
1ece0 3d 30 29 0a 23 65 6c 73 65 0a 20 20 74 79 70 65  =0).#else.  type
1ecf0 64 65 66 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  def unsigned int
1ed00 20 79 44 62 4d 61 73 6b 3b 0a 23 20 64 65 66 69   yDbMask;.# defi
1ed10 6e 65 20 44 62 4d 61 73 6b 54 65 73 74 28 4d 2c  ne DbMaskTest(M,
1ed20 49 29 20 20 20 20 28 28 28 4d 29 26 28 28 28 79  I)    (((M)&(((y
1ed30 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29 29  DbMask)1)<<(I)))
1ed40 21 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 44 62  !=0).# define Db
1ed50 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20 20  MaskZero(M)     
1ed60 20 28 4d 29 3d 30 0a 23 20 64 65 66 69 6e 65 20   (M)=0.# define 
1ed70 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20 20  DbMaskSet(M,I)  
1ed80 20 20 20 28 4d 29 7c 3d 28 28 28 79 44 62 4d 61     (M)|=(((yDbMa
1ed90 73 6b 29 31 29 3c 3c 28 49 29 29 0a 23 20 64 65  sk)1)<<(I)).# de
1eda0 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a 65  fine DbMaskAllZe
1edb0 72 6f 28 4d 29 20 20 20 28 4d 29 3d 3d 30 0a 23  ro(M)   (M)==0.#
1edc0 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e 6f   define DbMaskNo
1edd0 6e 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29 21 3d  nZero(M)   (M)!=
1ede0 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
1edf0 41 6e 20 53 51 4c 20 70 61 72 73 65 72 20 63 6f  An SQL parser co
1ee00 6e 74 65 78 74 2e 20 20 41 20 63 6f 70 79 20 6f  ntext.  A copy o
1ee10 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
1ee20 20 69 73 20 70 61 73 73 65 64 20 74 68 72 6f 75   is passed throu
1ee30 67 68 0a 2a 2a 20 74 68 65 20 70 61 72 73 65 72  gh.** the parser
1ee40 20 61 6e 64 20 64 6f 77 6e 20 69 6e 74 6f 20 61   and down into a
1ee50 6c 6c 20 74 68 65 20 70 61 72 73 65 72 20 61 63  ll the parser ac
1ee60 74 69 6f 6e 20 72 6f 75 74 69 6e 65 20 69 6e 20  tion routine in 
1ee70 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 63 61 72 72  order to.** carr
1ee80 79 20 61 72 6f 75 6e 64 20 69 6e 66 6f 72 6d 61  y around informa
1ee90 74 69 6f 6e 20 74 68 61 74 20 69 73 20 67 6c 6f  tion that is glo
1eea0 62 61 6c 20 74 6f 20 74 68 65 20 65 6e 74 69 72  bal to the entir
1eeb0 65 20 70 61 72 73 65 2e 0a 2a 2a 0a 2a 2a 20 54  e parse..**.** T
1eec0 68 65 20 73 74 72 75 63 74 75 72 65 20 69 73 20  he structure is 
1eed0 64 69 76 69 64 65 64 20 69 6e 74 6f 20 74 77 6f  divided into two
1eee0 20 70 61 72 74 73 2e 20 20 57 68 65 6e 20 74 68   parts.  When th
1eef0 65 20 70 61 72 73 65 72 20 61 6e 64 20 63 6f 64  e parser and cod
1ef00 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20 63 61  e.** generate ca
1ef10 6c 6c 20 74 68 65 6d 73 65 6c 76 65 73 20 72 65  ll themselves re
1ef20 63 75 72 73 69 76 65 6c 79 2c 20 74 68 65 20 66  cursively, the f
1ef30 69 72 73 74 20 70 61 72 74 20 6f 66 20 74 68 65  irst part of the
1ef40 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 69 73   structure.** is
1ef50 20 63 6f 6e 73 74 61 6e 74 20 62 75 74 20 74 68   constant but th
1ef60 65 20 73 65 63 6f 6e 64 20 70 61 72 74 20 69 73  e second part is
1ef70 20 72 65 73 65 74 20 61 74 20 74 68 65 20 62 65   reset at the be
1ef80 67 69 6e 6e 69 6e 67 20 61 6e 64 20 65 6e 64 20  ginning and end 
1ef90 6f 66 0a 2a 2a 20 65 61 63 68 20 72 65 63 75 72  of.** each recur
1efa0 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  sion..**.** The 
1efb0 6e 54 61 62 6c 65 4c 6f 63 6b 20 61 6e 64 20 61  nTableLock and a
1efc0 54 61 62 6c 65 4c 6f 63 6b 20 76 61 72 69 61 62  TableLock variab
1efd0 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20 75 73 65  les are only use
1efe0 64 20 69 66 20 74 68 65 20 73 68 61 72 65 64 2d  d if the shared-
1eff0 63 61 63 68 65 0a 2a 2a 20 66 65 61 74 75 72 65  cache.** feature
1f000 20 69 73 20 65 6e 61 62 6c 65 64 20 28 69 66 20   is enabled (if 
1f010 73 71 6c 69 74 65 33 54 73 64 28 29 2d 3e 75 73  sqlite3Tsd()->us
1f020 65 53 68 61 72 65 64 44 61 74 61 20 69 73 20 74  eSharedData is t
1f030 72 75 65 29 2e 20 54 68 65 79 20 61 72 65 0a 2a  rue). They are.*
1f040 2a 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  * used to store 
1f050 74 68 65 20 73 65 74 20 6f 66 20 74 61 62 6c 65  the set of table
1f060 2d 6c 6f 63 6b 73 20 72 65 71 75 69 72 65 64 20  -locks required 
1f070 62 79 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  by the statement
1f080 20 62 65 69 6e 67 0a 2a 2a 20 63 6f 6d 70 69 6c   being.** compil
1f090 65 64 2e 20 46 75 6e 63 74 69 6f 6e 20 73 71 6c  ed. Function sql
1f0a0 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 29 20  ite3TableLock() 
1f0b0 69 73 20 75 73 65 64 20 74 6f 20 61 64 64 20 65  is used to add e
1f0c0 6e 74 72 69 65 73 20 74 6f 20 74 68 65 0a 2a 2a  ntries to the.**
1f0d0 20 6c 69 73 74 2e 0a 2a 2f 0a 73 74 72 75 63 74   list..*/.struct
1f0e0 20 50 61 72 73 65 20 7b 0a 20 20 73 71 6c 69 74   Parse {.  sqlit
1f0f0 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20  e3 *db;         
1f100 2f 2a 20 54 68 65 20 6d 61 69 6e 20 64 61 74 61  /* The main data
1f110 62 61 73 65 20 73 74 72 75 63 74 75 72 65 20 2a  base structure *
1f120 2f 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d 73  /.  char *zErrMs
1f130 67 3b 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 65  g;       /* An e
1f140 72 72 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a  rror message */.
1f150 20 20 56 64 62 65 20 2a 70 56 64 62 65 3b 20 20    Vdbe *pVdbe;  
1f160 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 65 6e 67         /* An eng
1f170 69 6e 65 20 66 6f 72 20 65 78 65 63 75 74 69 6e  ine for executin
1f180 67 20 64 61 74 61 62 61 73 65 20 62 79 74 65 63  g database bytec
1f190 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b  ode */.  int rc;
1f1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1f1b0 20 52 65 74 75 72 6e 20 63 6f 64 65 20 66 72 6f   Return code fro
1f1c0 6d 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 20  m execution */. 
1f1d0 20 75 38 20 63 6f 6c 4e 61 6d 65 73 53 65 74 3b   u8 colNamesSet;
1f1e0 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20 61 66        /* TRUE af
1f1f0 74 65 72 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d  ter OP_ColumnNam
1f200 65 20 68 61 73 20 62 65 65 6e 20 69 73 73 75 65  e has been issue
1f210 64 20 74 6f 20 70 56 64 62 65 20 2a 2f 0a 20 20  d to pVdbe */.  
1f220 75 38 20 63 68 65 63 6b 53 63 68 65 6d 61 3b 20  u8 checkSchema; 
1f230 20 20 20 20 20 2f 2a 20 43 61 75 73 65 73 20 73       /* Causes s
1f240 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68 65  chema cookie che
1f250 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f  ck after an erro
1f260 72 20 2a 2f 0a 20 20 75 38 20 6e 65 73 74 65 64  r */.  u8 nested
1f270 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ;           /* N
1f280 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20  umber of nested 
1f290 63 61 6c 6c 73 20 74 6f 20 74 68 65 20 70 61 72  calls to the par
1f2a0 73 65 72 2f 63 6f 64 65 20 67 65 6e 65 72 61 74  ser/code generat
1f2b0 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 54 65 6d 70  or */.  u8 nTemp
1f2c0 52 65 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Reg;         /* 
1f2d0 4e 75 6d 62 65 72 20 6f 66 20 74 65 6d 70 6f 72  Number of tempor
1f2e0 61 72 79 20 72 65 67 69 73 74 65 72 73 20 69 6e  ary registers in
1f2f0 20 61 54 65 6d 70 52 65 67 5b 5d 20 2a 2f 0a 20   aTempReg[] */. 
1f300 20 75 38 20 69 73 4d 75 6c 74 69 57 72 69 74 65   u8 isMultiWrite
1f310 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  ;     /* True if
1f320 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 6d   statement may m
1f330 6f 64 69 66 79 2f 69 6e 73 65 72 74 20 6d 75 6c  odify/insert mul
1f340 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 20 20  tiple rows */.  
1f350 75 38 20 6d 61 79 41 62 6f 72 74 3b 20 20 20 20  u8 mayAbort;    
1f360 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
1f370 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 74 68  statement may th
1f380 72 6f 77 20 61 6e 20 41 42 4f 52 54 20 65 78 63  row an ABORT exc
1f390 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 68  eption */.  u8 h
1f3a0 61 73 43 6f 6d 70 6f 75 6e 64 3b 20 20 20 20 20  asCompound;     
1f3b0 20 2f 2a 20 4e 65 65 64 20 74 6f 20 69 6e 76 6f   /* Need to invo
1f3c0 6b 65 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75  ke convertCompou
1f3d0 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65  ndSelectToSubque
1f3e0 72 79 28 29 20 2a 2f 0a 20 20 75 38 20 6f 6b 43  ry() */.  u8 okC
1f3f0 6f 6e 73 74 46 61 63 74 6f 72 3b 20 20 20 20 2f  onstFactor;    /
1f400 2a 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20 6f  * OK to factor o
1f410 75 74 20 63 6f 6e 73 74 61 6e 74 73 20 2a 2f 0a  ut constants */.
1f420 20 20 75 38 20 64 69 73 61 62 6c 65 4c 6f 6f 6b    u8 disableLook
1f430 61 73 69 64 65 3b 20 2f 2a 20 4e 75 6d 62 65 72  aside; /* Number
1f440 20 6f 66 20 74 69 6d 65 73 20 6c 6f 6f 6b 61 73   of times lookas
1f450 69 64 65 20 68 61 73 20 62 65 65 6e 20 64 69 73  ide has been dis
1f460 61 62 6c 65 64 20 2a 2f 0a 20 20 75 38 20 6e 43  abled */.  u8 nC
1f470 6f 6c 43 61 63 68 65 3b 20 20 20 20 20 20 20 20  olCache;        
1f480 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74  /* Number of ent
1f490 72 69 65 73 20 69 6e 20 61 43 6f 6c 43 61 63 68  ries in aColCach
1f4a0 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 61  e[] */.  int nRa
1f4b0 6e 67 65 52 65 67 3b 20 20 20 20 20 20 20 2f 2a  ngeReg;       /*
1f4c0 20 53 69 7a 65 20 6f 66 20 74 68 65 20 74 65 6d   Size of the tem
1f4d0 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 20  porary register 
1f4e0 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 69  block */.  int i
1f4f0 52 61 6e 67 65 52 65 67 3b 20 20 20 20 20 20 20  RangeReg;       
1f500 2f 2a 20 46 69 72 73 74 20 72 65 67 69 73 74 65  /* First registe
1f510 72 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 72  r in temporary r
1f520 65 67 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f  egister block */
1f530 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20  .  int nErr;    
1f540 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1f550 72 20 6f 66 20 65 72 72 6f 72 73 20 73 65 65 6e  r of errors seen
1f560 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 61 62 3b 20   */.  int nTab; 
1f570 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1f580 6d 62 65 72 20 6f 66 20 70 72 65 76 69 6f 75 73  mber of previous
1f590 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 56 44 42  ly allocated VDB
1f5a0 45 20 63 75 72 73 6f 72 73 20 2a 2f 0a 20 20 69  E cursors */.  i
1f5b0 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20  nt nMem;        
1f5c0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1f5d0 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73   memory cells us
1f5e0 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69  ed so far */.  i
1f5f0 6e 74 20 6e 4f 70 41 6c 6c 6f 63 3b 20 20 20 20  nt nOpAlloc;    
1f600 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1f610 20 73 6c 6f 74 73 20 61 6c 6c 6f 63 61 74 65 64   slots allocated
1f620 20 66 6f 72 20 56 64 62 65 2e 61 4f 70 5b 5d 20   for Vdbe.aOp[] 
1f630 2a 2f 0a 20 20 69 6e 74 20 73 7a 4f 70 41 6c 6c  */.  int szOpAll
1f640 6f 63 3b 20 20 20 20 20 20 20 2f 2a 20 42 79 74  oc;       /* Byt
1f650 65 73 20 6f 66 20 6d 65 6d 6f 72 79 20 73 70 61  es of memory spa
1f660 63 65 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72  ce allocated for
1f670 20 56 64 62 65 2e 61 4f 70 5b 5d 20 2a 2f 0a 20   Vdbe.aOp[] */. 
1f680 20 69 6e 74 20 69 53 65 6c 66 54 61 62 3b 20 20   int iSelfTab;  
1f690 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 61        /* Table a
1f6a0 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
1f6b0 6e 20 69 6e 64 65 78 20 6f 6e 20 65 78 70 72 2c  n index on expr,
1f6c0 20 6f 72 20 6e 65 67 61 74 69 76 65 0a 20 20 20   or negative.   
1f6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f6e0 20 20 20 20 2a 2a 20 6f 66 20 74 68 65 20 62 61      ** of the ba
1f6f0 73 65 20 72 65 67 69 73 74 65 72 20 64 75 72 69  se register duri
1f700 6e 67 20 63 68 65 63 6b 2d 63 6f 6e 73 74 72 61  ng check-constra
1f710 69 6e 74 20 65 76 61 6c 20 2a 2f 0a 20 20 69 6e  int eval */.  in
1f720 74 20 69 43 61 63 68 65 4c 65 76 65 6c 3b 20 20  t iCacheLevel;  
1f730 20 20 20 2f 2a 20 43 6f 6c 43 61 63 68 65 20 76     /* ColCache v
1f740 61 6c 69 64 20 77 68 65 6e 20 61 43 6f 6c 43 61  alid when aColCa
1f750 63 68 65 5b 5d 2e 69 4c 65 76 65 6c 3c 3d 69 43  che[].iLevel<=iC
1f760 61 63 68 65 4c 65 76 65 6c 20 2a 2f 0a 20 20 69  acheLevel */.  i
1f770 6e 74 20 69 43 61 63 68 65 43 6e 74 3b 20 20 20  nt iCacheCnt;   
1f780 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72 20 75      /* Counter u
1f790 73 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20  sed to generate 
1f7a0 61 43 6f 6c 43 61 63 68 65 5b 5d 2e 6c 72 75 20  aColCache[].lru 
1f7b0 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20  values */.  int 
1f7c0 6e 4c 61 62 65 6c 3b 20 20 20 20 20 20 20 20 20  nLabel;         
1f7d0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 61   /* Number of la
1f7e0 62 65 6c 73 20 75 73 65 64 20 2a 2f 0a 20 20 69  bels used */.  i
1f7f0 6e 74 20 2a 61 4c 61 62 65 6c 3b 20 20 20 20 20  nt *aLabel;     
1f800 20 20 20 20 2f 2a 20 53 70 61 63 65 20 74 6f 20      /* Space to 
1f810 68 6f 6c 64 20 74 68 65 20 6c 61 62 65 6c 73 20  hold the labels 
1f820 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  */.  ExprList *p
1f830 43 6f 6e 73 74 45 78 70 72 3b 2f 2a 20 43 6f 6e  ConstExpr;/* Con
1f840 73 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e  stant expression
1f850 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 63 6f 6e  s */.  Token con
1f860 73 74 72 61 69 6e 74 4e 61 6d 65 3b 2f 2a 20 4e  straintName;/* N
1f870 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e 73 74  ame of the const
1f880 72 61 69 6e 74 20 63 75 72 72 65 6e 74 6c 79 20  raint currently 
1f890 62 65 69 6e 67 20 70 61 72 73 65 64 20 2a 2f 0a  being parsed */.
1f8a0 20 20 79 44 62 4d 61 73 6b 20 77 72 69 74 65 4d    yDbMask writeM
1f8b0 61 73 6b 3b 20 20 20 2f 2a 20 53 74 61 72 74 20  ask;   /* Start 
1f8c0 61 20 77 72 69 74 65 20 74 72 61 6e 73 61 63 74  a write transact
1f8d0 69 6f 6e 20 6f 6e 20 74 68 65 73 65 20 64 61 74  ion on these dat
1f8e0 61 62 61 73 65 73 20 2a 2f 0a 20 20 79 44 62 4d  abases */.  yDbM
1f8f0 61 73 6b 20 63 6f 6f 6b 69 65 4d 61 73 6b 3b 20  ask cookieMask; 
1f900 20 2f 2a 20 42 69 74 6d 61 73 6b 20 6f 66 20 73   /* Bitmask of s
1f910 63 68 65 6d 61 20 76 65 72 69 66 69 65 64 20 64  chema verified d
1f920 61 74 61 62 61 73 65 73 20 2a 2f 0a 20 20 69 6e  atabases */.  in
1f930 74 20 72 65 67 52 6f 77 69 64 3b 20 20 20 20 20  t regRowid;     
1f940 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68     /* Register h
1f950 6f 6c 64 69 6e 67 20 72 6f 77 69 64 20 6f 66 20  olding rowid of 
1f960 43 52 45 41 54 45 20 54 41 42 4c 45 20 65 6e 74  CREATE TABLE ent
1f970 72 79 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52  ry */.  int regR
1f980 6f 6f 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  oot;         /* 
1f990 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67  Register holding
1f9a0 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65   root page numbe
1f9b0 72 20 66 6f 72 20 6e 65 77 20 6f 62 6a 65 63 74  r for new object
1f9c0 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61 78 41  s */.  int nMaxA
1f9d0 72 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d  rg;         /* M
1f9e0 61 78 20 61 72 67 73 20 70 61 73 73 65 64 20 74  ax args passed t
1f9f0 6f 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20  o user function 
1fa00 62 79 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a  by sub-program *
1fa10 2f 0a 23 69 66 20 53 45 4c 45 43 54 54 52 41 43  /.#if SELECTTRAC
1fa20 45 5f 45 4e 41 42 4c 45 44 0a 20 20 69 6e 74 20  E_ENABLED.  int 
1fa30 6e 53 65 6c 65 63 74 3b 20 20 20 20 20 20 20 20  nSelect;        
1fa40 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 53 45   /* Number of SE
1fa50 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20  LECT statements 
1fa60 73 65 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  seen */.  int nS
1fa70 65 6c 65 63 74 49 6e 64 65 6e 74 3b 20 20 20 2f  electIndent;   /
1fa80 2a 20 48 6f 77 20 66 61 72 20 74 6f 20 69 6e 64  * How far to ind
1fa90 65 6e 74 20 53 45 4c 45 43 54 54 52 41 43 45 28  ent SELECTTRACE(
1faa0 29 20 6f 75 74 70 75 74 20 2a 2f 0a 23 65 6e 64  ) output */.#end
1fab0 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
1fac0 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41  E_OMIT_SHARED_CA
1fad0 43 48 45 0a 20 20 69 6e 74 20 6e 54 61 62 6c 65  CHE.  int nTable
1fae0 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 2f 2a 20  Lock;        /* 
1faf0 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 63 6b 73 20  Number of locks 
1fb00 69 6e 20 61 54 61 62 6c 65 4c 6f 63 6b 20 2a 2f  in aTableLock */
1fb10 0a 20 20 54 61 62 6c 65 4c 6f 63 6b 20 2a 61 54  .  TableLock *aT
1fb20 61 62 6c 65 4c 6f 63 6b 3b 20 2f 2a 20 52 65 71  ableLock; /* Req
1fb30 75 69 72 65 64 20 74 61 62 6c 65 20 6c 6f 63 6b  uired table lock
1fb40 73 20 66 6f 72 20 73 68 61 72 65 64 2d 63 61 63  s for shared-cac
1fb50 68 65 20 6d 6f 64 65 20 2a 2f 0a 23 65 6e 64 69  he mode */.#endi
1fb60 66 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20  f.  AutoincInfo 
1fb70 2a 70 41 69 6e 63 3b 20 20 2f 2a 20 49 6e 66 6f  *pAinc;  /* Info
1fb80 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 41 55  rmation about AU
1fb90 54 4f 49 4e 43 52 45 4d 45 4e 54 20 63 6f 75 6e  TOINCREMENT coun
1fba0 74 65 72 73 20 2a 2f 0a 20 20 50 61 72 73 65 20  ters */.  Parse 
1fbb0 2a 70 54 6f 70 6c 65 76 65 6c 3b 20 20 20 20 2f  *pToplevel;    /
1fbc0 2a 20 50 61 72 73 65 20 73 74 72 75 63 74 75 72  * Parse structur
1fbd0 65 20 66 6f 72 20 6d 61 69 6e 20 70 72 6f 67 72  e for main progr
1fbe0 61 6d 20 28 6f 72 20 4e 55 4c 4c 29 20 2a 2f 0a  am (or NULL) */.
1fbf0 20 20 54 61 62 6c 65 20 2a 70 54 72 69 67 67 65    Table *pTrigge
1fc00 72 54 61 62 3b 20 20 2f 2a 20 54 61 62 6c 65 20  rTab;  /* Table 
1fc10 74 72 69 67 67 65 72 73 20 61 72 65 20 62 65 69  triggers are bei
1fc20 6e 67 20 63 6f 64 65 64 20 66 6f 72 20 2a 2f 0a  ng coded for */.
1fc30 20 20 69 6e 74 20 61 64 64 72 43 72 54 61 62 3b    int addrCrTab;
1fc40 20 20 20 20 20 20 20 2f 2a 20 41 64 64 72 65 73         /* Addres
1fc50 73 20 6f 66 20 4f 50 5f 43 72 65 61 74 65 42 74  s of OP_CreateBt
1fc60 72 65 65 20 6f 70 63 6f 64 65 20 6f 6e 20 43 52  ree opcode on CR
1fc70 45 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20  EATE TABLE */.  
1fc80 75 33 32 20 6e 51 75 65 72 79 4c 6f 6f 70 3b 20  u32 nQueryLoop; 
1fc90 20 20 20 20 20 2f 2a 20 45 73 74 20 6e 75 6d 62       /* Est numb
1fca0 65 72 20 6f 66 20 69 74 65 72 61 74 69 6f 6e 73  er of iterations
1fcb0 20 6f 66 20 61 20 71 75 65 72 79 20 28 31 30 2a   of a query (10*
1fcc0 6c 6f 67 32 28 4e 29 29 20 2a 2f 0a 20 20 75 33  log2(N)) */.  u3
1fcd0 32 20 6f 6c 64 6d 61 73 6b 3b 20 20 20 20 20 20  2 oldmask;      
1fce0 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6f 6c     /* Mask of ol
1fcf0 64 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65  d.* columns refe
1fd00 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 33 32 20  renced */.  u32 
1fd10 6e 65 77 6d 61 73 6b 3b 20 20 20 20 20 20 20 20  newmask;        
1fd20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6e 65 77 2e   /* Mask of new.
1fd30 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65  * columns refere
1fd40 6e 63 65 64 20 2a 2f 0a 20 20 75 38 20 65 54 72  nced */.  u8 eTr
1fd50 69 67 67 65 72 4f 70 3b 20 20 20 20 20 20 20 2f  iggerOp;       /
1fd60 2a 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f  * TK_UPDATE, TK_
1fd70 49 4e 53 45 52 54 20 6f 72 20 54 4b 5f 44 45 4c  INSERT or TK_DEL
1fd80 45 54 45 20 2a 2f 0a 20 20 75 38 20 65 4f 72 63  ETE */.  u8 eOrc
1fd90 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  onf;          /*
1fda0 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46   Default ON CONF
1fdb0 4c 49 43 54 20 70 6f 6c 69 63 79 20 66 6f 72 20  LICT policy for 
1fdc0 74 72 69 67 67 65 72 20 73 74 65 70 73 20 2a 2f  trigger steps */
1fdd0 0a 20 20 75 38 20 64 69 73 61 62 6c 65 54 72 69  .  u8 disableTri
1fde0 67 67 65 72 73 3b 20 20 2f 2a 20 54 72 75 65 20  ggers;  /* True 
1fdf0 74 6f 20 64 69 73 61 62 6c 65 20 74 72 69 67 67  to disable trigg
1fe00 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a  ers */..  /*****
1fe10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fe20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fe30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fe40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fe50 2a 2a 2a 2a 2a 0a 20 20 2a 2a 20 46 69 65 6c 64  *****.  ** Field
1fe60 73 20 61 62 6f 76 65 20 6d 75 73 74 20 62 65 20  s above must be 
1fe70 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 7a  initialized to z
1fe80 65 72 6f 2e 20 20 54 68 65 20 66 69 65 6c 64 73  ero.  The fields
1fe90 20 74 68 61 74 20 66 6f 6c 6c 6f 77 2c 0a 20 20   that follow,.  
1fea0 2a 2a 20 64 6f 77 6e 20 74 6f 20 74 68 65 20 62  ** down to the b
1feb0 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20  eginning of the 
1fec0 72 65 63 75 72 73 69 76 65 20 73 65 63 74 69 6f  recursive sectio
1fed0 6e 2c 20 64 6f 20 6e 6f 74 20 6e 65 65 64 20 74  n, do not need t
1fee0 6f 20 62 65 0a 20 20 2a 2a 20 69 6e 69 74 69 61  o be.  ** initia
1fef0 6c 69 7a 65 64 20 61 73 20 74 68 65 79 20 77 69  lized as they wi
1ff00 6c 6c 20 62 65 20 73 65 74 20 62 65 66 6f 72 65  ll be set before
1ff10 20 62 65 69 6e 67 20 75 73 65 64 2e 20 20 54 68   being used.  Th
1ff20 65 20 62 6f 75 6e 64 61 72 79 20 69 73 0a 20 20  e boundary is.  
1ff30 2a 2a 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79  ** determined by
1ff40 20 6f 66 66 73 65 74 6f 66 28 50 61 72 73 65 2c   offsetof(Parse,
1ff50 61 43 6f 6c 43 61 63 68 65 29 2e 0a 20 20 2a 2a  aColCache)..  **
1ff60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1ff70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1ff80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1ff90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1ffa0 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 73 74 72  ********/..  str
1ffb0 75 63 74 20 79 43 6f 6c 43 61 63 68 65 20 7b 0a  uct yColCache {.
1ffc0 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20      int iTable; 
1ffd0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62            /* Tab
1ffe0 6c 65 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72  le cursor number
1fff0 20 2a 2f 0a 20 20 20 20 69 31 36 20 69 43 6f 6c   */.    i16 iCol
20000 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  umn;          /*
20010 20 54 61 62 6c 65 20 63 6f 6c 75 6d 6e 20 6e 75   Table column nu
20020 6d 62 65 72 20 2a 2f 0a 20 20 20 20 75 38 20 74  mber */.    u8 t
20030 65 6d 70 52 65 67 3b 20 20 20 20 20 20 20 20 20  empReg;         
20040 20 20 2f 2a 20 69 52 65 67 20 69 73 20 61 20 74    /* iReg is a t
20050 65 6d 70 20 72 65 67 69 73 74 65 72 20 74 68 61  emp register tha
20060 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 66 72  t needs to be fr
20070 65 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  eed */.    int i
20080 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20  Level;          
20090 20 2f 2a 20 4e 65 73 74 69 6e 67 20 6c 65 76 65   /* Nesting leve
200a0 6c 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 52 65  l */.    int iRe
200b0 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  g;             /
200c0 2a 20 52 65 67 20 77 69 74 68 20 76 61 6c 75 65  * Reg with value
200d0 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e   of this column.
200e0 20 30 20 6d 65 61 6e 73 20 6e 6f 6e 65 2e 20 2a   0 means none. *
200f0 2f 0a 20 20 20 20 69 6e 74 20 6c 72 75 3b 20 20  /.    int lru;  
20100 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
20110 65 61 73 74 20 72 65 63 65 6e 74 6c 79 20 75 73  east recently us
20120 65 64 20 65 6e 74 72 79 20 68 61 73 20 74 68 65  ed entry has the
20130 20 73 6d 61 6c 6c 65 73 74 20 76 61 6c 75 65 20   smallest value 
20140 2a 2f 0a 20 20 7d 20 61 43 6f 6c 43 61 63 68 65  */.  } aColCache
20150 5b 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43  [SQLITE_N_COLCAC
20160 48 45 5d 3b 20 20 2f 2a 20 4f 6e 65 20 66 6f 72  HE];  /* One for
20170 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 63 61 63   each column cac
20180 68 65 20 65 6e 74 72 79 20 2a 2f 0a 20 20 69 6e  he entry */.  in
20190 74 20 61 54 65 6d 70 52 65 67 5b 38 5d 3b 20 20  t aTempReg[8];  
201a0 20 20 20 20 20 20 2f 2a 20 48 6f 6c 64 69 6e 67        /* Holding
201b0 20 61 72 65 61 20 66 6f 72 20 74 65 6d 70 6f 72   area for tempor
201c0 61 72 79 20 72 65 67 69 73 74 65 72 73 20 2a 2f  ary registers */
201d0 0a 20 20 54 6f 6b 65 6e 20 73 4e 61 6d 65 54 6f  .  Token sNameTo
201e0 6b 65 6e 3b 20 20 20 20 20 20 20 2f 2a 20 54 6f  ken;       /* To
201f0 6b 65 6e 20 77 69 74 68 20 75 6e 71 75 61 6c 69  ken with unquali
20200 66 69 65 64 20 73 63 68 65 6d 61 20 6f 62 6a 65  fied schema obje
20210 63 74 20 6e 61 6d 65 20 2a 2f 0a 0a 20 20 2f 2a  ct name */..  /*
20220 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20230 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20240 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20250 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20260 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a 20 41 62 6f  *******.  ** Abo
20270 76 65 20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62  ve is constant b
20280 65 74 77 65 65 6e 20 72 65 63 75 72 73 69 6f 6e  etween recursion
20290 73 2e 20 20 42 65 6c 6f 77 20 69 73 20 72 65 73  s.  Below is res
202a0 65 74 20 62 65 66 6f 72 65 20 61 6e 64 20 61 66  et before and af
202b0 74 65 72 0a 20 20 2a 2a 20 65 61 63 68 20 72 65  ter.  ** each re
202c0 63 75 72 73 69 6f 6e 2e 20 20 54 68 65 20 62 6f  cursion.  The bo
202d0 75 6e 64 61 72 79 20 62 65 74 77 65 65 6e 20 74  undary between t
202e0 68 65 73 65 20 74 77 6f 20 72 65 67 69 6f 6e 73  hese two regions
202f0 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 0a 20   is determined. 
20300 20 2a 2a 20 75 73 69 6e 67 20 6f 66 66 73 65 74   ** using offset
20310 6f 66 28 50 61 72 73 65 2c 73 4c 61 73 74 54 6f  of(Parse,sLastTo
20320 6b 65 6e 29 20 73 6f 20 74 68 65 20 73 4c 61 73  ken) so the sLas
20330 74 54 6f 6b 65 6e 20 66 69 65 6c 64 20 6d 75 73  tToken field mus
20340 74 20 62 65 20 74 68 65 0a 20 20 2a 2a 20 66 69  t be the.  ** fi
20350 72 73 74 20 66 69 65 6c 64 20 69 6e 20 74 68 65  rst field in the
20360 20 72 65 63 75 72 73 69 76 65 20 72 65 67 69 6f   recursive regio
20370 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  n..  ***********
20380 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20390 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
203a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
203b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a  *************/..
203c0 20 20 54 6f 6b 65 6e 20 73 4c 61 73 74 54 6f 6b    Token sLastTok
203d0 65 6e 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65  en;       /* The
203e0 20 6c 61 73 74 20 74 6f 6b 65 6e 20 70 61 72 73   last token pars
203f0 65 64 20 2a 2f 0a 20 20 79 6e 56 61 72 20 6e 56  ed */.  ynVar nV
20400 61 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ar;             
20410 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 27    /* Number of '
20420 3f 27 20 76 61 72 69 61 62 6c 65 73 20 73 65 65  ?' variables see
20430 6e 20 69 6e 20 74 68 65 20 53 51 4c 20 73 6f 20  n in the SQL so 
20440 66 61 72 20 2a 2f 0a 20 20 75 38 20 69 50 6b 53  far */.  u8 iPkS
20450 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20  ortOrder;       
20460 20 20 20 2f 2a 20 41 53 43 20 6f 72 20 44 45 53     /* ASC or DES
20470 43 20 66 6f 72 20 49 4e 54 45 47 45 52 20 50 52  C for INTEGER PR
20480 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 75  IMARY KEY */.  u
20490 38 20 65 78 70 6c 61 69 6e 3b 20 20 20 20 20 20  8 explain;      
204a0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
204b0 20 69 66 20 74 68 65 20 45 58 50 4c 41 49 4e 20   if the EXPLAIN 
204c0 66 6c 61 67 20 69 73 20 66 6f 75 6e 64 20 6f 6e  flag is found on
204d0 20 74 68 65 20 71 75 65 72 79 20 2a 2f 0a 23 69   the query */.#i
204e0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
204f0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
20500 20 75 38 20 64 65 63 6c 61 72 65 56 74 61 62 3b   u8 declareVtab;
20510 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
20520 75 65 20 69 66 20 69 6e 73 69 64 65 20 73 71 6c  ue if inside sql
20530 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61  ite3_declare_vta
20540 62 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 74  b() */.  int nVt
20550 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 20  abLock;         
20560 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
20570 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 74  virtual tables t
20580 6f 20 6c 6f 63 6b 20 2a 2f 0a 23 65 6e 64 69 66  o lock */.#endif
20590 0a 20 20 69 6e 74 20 6e 48 65 69 67 68 74 3b 20  .  int nHeight; 
205a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
205b0 45 78 70 72 65 73 73 69 6f 6e 20 74 72 65 65 20  Expression tree 
205c0 68 65 69 67 68 74 20 6f 66 20 63 75 72 72 65 6e  height of curren
205d0 74 20 73 75 62 2d 73 65 6c 65 63 74 20 2a 2f 0a  t sub-select */.
205e0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
205f0 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20 69 6e  MIT_EXPLAIN.  in
20600 74 20 69 53 65 6c 65 63 74 49 64 3b 20 20 20 20  t iSelectId;    
20610 20 20 20 20 20 20 20 20 2f 2a 20 49 44 20 6f 66          /* ID of
20620 20 63 75 72 72 65 6e 74 20 73 65 6c 65 63 74 20   current select 
20630 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75 74 70  for EXPLAIN outp
20640 75 74 20 2a 2f 0a 20 20 69 6e 74 20 69 4e 65 78  ut */.  int iNex
20650 74 53 65 6c 65 63 74 49 64 3b 20 20 20 20 20 20  tSelectId;      
20660 20 20 2f 2a 20 4e 65 78 74 20 61 76 61 69 6c 61    /* Next availa
20670 62 6c 65 20 73 65 6c 65 63 74 20 49 44 20 66 6f  ble select ID fo
20680 72 20 45 58 50 4c 41 49 4e 20 6f 75 74 70 75 74  r EXPLAIN output
20690 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 56 4c 69   */.#endif.  VLi
206a0 73 74 20 2a 70 56 4c 69 73 74 3b 20 20 20 20 20  st *pVList;     
206b0 20 20 20 20 20 20 20 2f 2a 20 4d 61 70 70 69 6e         /* Mappin
206c0 67 20 62 65 74 77 65 65 6e 20 76 61 72 69 61 62  g between variab
206d0 6c 65 20 6e 61 6d 65 73 20 61 6e 64 20 6e 75 6d  le names and num
206e0 62 65 72 73 20 2a 2f 0a 20 20 56 64 62 65 20 2a  bers */.  Vdbe *
206f0 70 52 65 70 72 65 70 61 72 65 3b 20 20 20 20 20  pReprepare;     
20700 20 20 20 20 2f 2a 20 56 4d 20 62 65 69 6e 67 20      /* VM being 
20710 72 65 70 72 65 70 61 72 65 64 20 28 73 71 6c 69  reprepared (sqli
20720 74 65 33 52 65 70 72 65 70 61 72 65 28 29 29 20  te3Reprepare()) 
20730 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
20740 2a 7a 54 61 69 6c 3b 20 20 20 20 20 20 20 20 2f  *zTail;        /
20750 2a 20 41 6c 6c 20 53 51 4c 20 74 65 78 74 20 70  * All SQL text p
20760 61 73 74 20 74 68 65 20 6c 61 73 74 20 73 65 6d  ast the last sem
20770 69 63 6f 6c 6f 6e 20 70 61 72 73 65 64 20 2a 2f  icolon parsed */
20780 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65 77 54 61  .  Table *pNewTa
20790 62 6c 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ble;         /* 
207a0 41 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6f  A table being co
207b0 6e 73 74 72 75 63 74 65 64 20 62 79 20 43 52 45  nstructed by CRE
207c0 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20 54  ATE TABLE */.  T
207d0 72 69 67 67 65 72 20 2a 70 4e 65 77 54 72 69 67  rigger *pNewTrig
207e0 67 65 72 3b 20 20 20 20 20 2f 2a 20 54 72 69 67  ger;     /* Trig
207f0 67 65 72 20 75 6e 64 65 72 20 63 6f 6e 73 74 72  ger under constr
20800 75 63 74 20 62 79 20 61 20 43 52 45 41 54 45 20  uct by a CREATE 
20810 54 52 49 47 47 45 52 20 2a 2f 0a 20 20 63 6f 6e  TRIGGER */.  con
20820 73 74 20 63 68 61 72 20 2a 7a 41 75 74 68 43 6f  st char *zAuthCo
20830 6e 74 65 78 74 3b 20 2f 2a 20 54 68 65 20 36 74  ntext; /* The 6t
20840 68 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 64  h parameter to d
20850 62 2d 3e 78 41 75 74 68 20 63 61 6c 6c 62 61 63  b->xAuth callbac
20860 6b 73 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  ks */.#ifndef SQ
20870 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
20880 4c 54 41 42 4c 45 0a 20 20 54 6f 6b 65 6e 20 73  LTABLE.  Token s
20890 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
208a0 20 20 20 2f 2a 20 43 6f 6d 70 6c 65 74 65 20 74     /* Complete t
208b0 65 78 74 20 6f 66 20 61 20 6d 6f 64 75 6c 65 20  ext of a module 
208c0 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 20 20 54 61  argument */.  Ta
208d0 62 6c 65 20 2a 2a 61 70 56 74 61 62 4c 6f 63 6b  ble **apVtabLock
208e0 3b 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74  ;       /* Point
208f0 65 72 20 74 6f 20 76 69 72 74 75 61 6c 20 74 61  er to virtual ta
20900 62 6c 65 73 20 6e 65 65 64 69 6e 67 20 6c 6f 63  bles needing loc
20910 6b 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  king */.#endif. 
20920 20 54 61 62 6c 65 20 2a 70 5a 6f 6d 62 69 65 54   Table *pZombieT
20930 61 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69  ab;        /* Li
20940 73 74 20 6f 66 20 54 61 62 6c 65 20 6f 62 6a 65  st of Table obje
20950 63 74 73 20 74 6f 20 64 65 6c 65 74 65 20 61 66  cts to delete af
20960 74 65 72 20 63 6f 64 65 20 67 65 6e 20 2a 2f 0a  ter code gen */.
20970 20 20 54 72 69 67 67 65 72 50 72 67 20 2a 70 54    TriggerPrg *pT
20980 72 69 67 67 65 72 50 72 67 3b 20 20 2f 2a 20 4c  riggerPrg;  /* L
20990 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 63 6f  inked list of co
209a0 64 65 64 20 74 72 69 67 67 65 72 73 20 2a 2f 0a  ded triggers */.
209b0 20 20 57 69 74 68 20 2a 70 57 69 74 68 3b 20 20    With *pWith;  
209c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
209d0 75 72 72 65 6e 74 20 57 49 54 48 20 63 6c 61 75  urrent WITH clau
209e0 73 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20  se, or NULL */. 
209f0 20 57 69 74 68 20 2a 70 57 69 74 68 54 6f 46 72   With *pWithToFr
20a00 65 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 46 72  ee;        /* Fr
20a10 65 65 20 74 68 69 73 20 57 49 54 48 20 6f 62 6a  ee this WITH obj
20a20 65 63 74 20 61 74 20 74 68 65 20 65 6e 64 20 6f  ect at the end o
20a30 66 20 74 68 65 20 70 61 72 73 65 20 2a 2f 0a 7d  f the parse */.}
20a40 3b 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a 65 73 20 61  ;../*.** Sizes a
20a50 6e 64 20 70 6f 69 6e 74 65 72 73 20 6f 66 20 76  nd pointers of v
20a60 61 72 69 6f 75 73 20 70 61 72 74 73 20 6f 66 20  arious parts of 
20a70 74 68 65 20 50 61 72 73 65 20 6f 62 6a 65 63 74  the Parse object
20a80 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 50 41 52  ..*/.#define PAR
20a90 53 45 5f 48 44 52 5f 53 5a 20 6f 66 66 73 65 74  SE_HDR_SZ offset
20aa0 6f 66 28 50 61 72 73 65 2c 61 43 6f 6c 43 61 63  of(Parse,aColCac
20ab0 68 65 29 20 2f 2a 20 52 65 63 75 72 73 69 76 65  he) /* Recursive
20ac0 20 70 61 72 74 20 77 2f 6f 20 61 43 6f 6c 43 61   part w/o aColCa
20ad0 63 68 65 2a 2f 0a 23 64 65 66 69 6e 65 20 50 41  che*/.#define PA
20ae0 52 53 45 5f 52 45 43 55 52 53 45 5f 53 5a 20 6f  RSE_RECURSE_SZ o
20af0 66 66 73 65 74 6f 66 28 50 61 72 73 65 2c 73 4c  ffsetof(Parse,sL
20b00 61 73 74 54 6f 6b 65 6e 29 20 20 20 20 2f 2a 20  astToken)    /* 
20b10 52 65 63 75 72 73 69 76 65 20 70 61 72 74 20 2a  Recursive part *
20b20 2f 0a 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f  /.#define PARSE_
20b30 54 41 49 4c 5f 53 5a 20 28 73 69 7a 65 6f 66 28  TAIL_SZ (sizeof(
20b40 50 61 72 73 65 29 2d 50 41 52 53 45 5f 52 45 43  Parse)-PARSE_REC
20b50 55 52 53 45 5f 53 5a 29 20 2f 2a 20 4e 6f 6e 2d  URSE_SZ) /* Non-
20b60 72 65 63 75 72 73 69 76 65 20 70 61 72 74 20 2a  recursive part *
20b70 2f 0a 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f  /.#define PARSE_
20b80 54 41 49 4c 28 58 29 20 28 28 28 63 68 61 72 2a  TAIL(X) (((char*
20b90 29 28 58 29 29 2b 50 41 52 53 45 5f 52 45 43 55  )(X))+PARSE_RECU
20ba0 52 53 45 5f 53 5a 29 20 20 2f 2a 20 50 6f 69 6e  RSE_SZ)  /* Poin
20bb0 74 65 72 20 74 6f 20 74 61 69 6c 20 2a 2f 0a 0a  ter to tail */..
20bc0 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75  /*.** Return tru
20bd0 65 20 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69  e if currently i
20be0 6e 73 69 64 65 20 61 6e 20 73 71 6c 69 74 65 33  nside an sqlite3
20bf0 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20  _declare_vtab() 
20c00 63 61 6c 6c 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  call..*/.#ifdef 
20c10 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
20c20 55 41 4c 54 41 42 4c 45 0a 20 20 23 64 65 66 69  UALTABLE.  #defi
20c30 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54  ne IN_DECLARE_VT
20c40 41 42 20 30 0a 23 65 6c 73 65 0a 20 20 23 64 65  AB 0.#else.  #de
20c50 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f  fine IN_DECLARE_
20c60 56 54 41 42 20 28 70 50 61 72 73 65 2d 3e 64 65  VTAB (pParse->de
20c70 63 6c 61 72 65 56 74 61 62 29 0a 23 65 6e 64 69  clareVtab).#endi
20c80 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  f../*.** An inst
20c90 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
20ca0 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
20cb0 63 61 6e 20 62 65 20 64 65 63 6c 61 72 65 64 20  can be declared 
20cc0 6f 6e 20 61 20 73 74 61 63 6b 20 61 6e 64 20 75  on a stack and u
20cd0 73 65 64 0a 2a 2a 20 74 6f 20 73 61 76 65 20 74  sed.** to save t
20ce0 68 65 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f  he Parse.zAuthCo
20cf0 6e 74 65 78 74 20 76 61 6c 75 65 20 73 6f 20 74  ntext value so t
20d00 68 61 74 20 69 74 20 63 61 6e 20 62 65 20 72 65  hat it can be re
20d10 73 74 6f 72 65 64 20 6c 61 74 65 72 2e 0a 2a 2f  stored later..*/
20d20 0a 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74  .struct AuthCont
20d30 65 78 74 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68  ext {.  const ch
20d40 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74  ar *zAuthContext
20d50 3b 20 20 20 2f 2a 20 50 75 74 20 73 61 76 65 64  ;   /* Put saved
20d60 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74   Parse.zAuthCont
20d70 65 78 74 20 68 65 72 65 20 2a 2f 0a 20 20 50 61  ext here */.  Pa
20d80 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20  rse *pParse;    
20d90 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
20da0 20 50 61 72 73 65 20 73 74 72 75 63 74 75 72 65   Parse structure
20db0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42 69   */.};../*.** Bi
20dc0 74 66 69 65 6c 64 20 66 6c 61 67 73 20 66 6f 72  tfield flags for
20dd0 20 50 35 20 76 61 6c 75 65 20 69 6e 20 76 61 72   P5 value in var
20de0 69 6f 75 73 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a  ious opcodes..**
20df0 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72  .** Value constr
20e00 61 69 6e 74 73 20 28 65 6e 66 6f 72 63 65 64 20  aints (enforced 
20e10 76 69 61 20 61 73 73 65 72 74 28 29 29 3a 0a 2a  via assert()):.*
20e20 2a 20 20 20 20 4f 50 46 4c 41 47 5f 4c 45 4e 47  *    OPFLAG_LENG
20e30 54 48 41 52 47 20 20 20 20 3d 3d 20 53 51 4c 49  THARG    == SQLI
20e40 54 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 0a 2a  TE_FUNC_LENGTH.*
20e50 2a 20 20 20 20 4f 50 46 4c 41 47 5f 54 59 50 45  *    OPFLAG_TYPE
20e60 4f 46 41 52 47 20 20 20 20 3d 3d 20 53 51 4c 49  OFARG    == SQLI
20e70 54 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46 0a 2a  TE_FUNC_TYPEOF.*
20e80 2a 20 20 20 20 4f 50 46 4c 41 47 5f 42 55 4c 4b  *    OPFLAG_BULK
20e90 43 53 52 20 20 20 20 20 20 3d 3d 20 42 54 52 45  CSR      == BTRE
20ea0 45 5f 42 55 4c 4b 4c 4f 41 44 0a 2a 2a 20 20 20  E_BULKLOAD.**   
20eb0 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 20   OPFLAG_SEEKEQ  
20ec0 20 20 20 20 20 3d 3d 20 42 54 52 45 45 5f 53 45       == BTREE_SE
20ed0 45 4b 5f 45 51 0a 2a 2a 20 20 20 20 4f 50 46 4c  EK_EQ.**    OPFL
20ee0 41 47 5f 46 4f 52 44 45 4c 45 54 45 20 20 20 20  AG_FORDELETE    
20ef0 3d 3d 20 42 54 52 45 45 5f 46 4f 52 44 45 4c 45  == BTREE_FORDELE
20f00 54 45 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f  TE.**    OPFLAG_
20f10 53 41 56 45 50 4f 53 49 54 49 4f 4e 20 3d 3d 20  SAVEPOSITION == 
20f20 42 54 52 45 45 5f 53 41 56 45 50 4f 53 49 54 49  BTREE_SAVEPOSITI
20f30 4f 4e 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f  ON.**    OPFLAG_
20f40 41 55 58 44 45 4c 45 54 45 20 20 20 20 3d 3d 20  AUXDELETE    == 
20f50 42 54 52 45 45 5f 41 55 58 44 45 4c 45 54 45 0a  BTREE_AUXDELETE.
20f60 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
20f70 47 5f 4e 43 48 41 4e 47 45 20 20 20 20 20 20 20  G_NCHANGE       
20f80 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 49 6e  0x01    /* OP_In
20f90 73 65 72 74 3a 20 53 65 74 20 74 6f 20 75 70 64  sert: Set to upd
20fa0 61 74 65 20 64 62 2d 3e 6e 43 68 61 6e 67 65 20  ate db->nChange 
20fb0 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  */.             
20fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20fd0 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 73 6f 20          /* Also 
20fe0 75 73 65 64 20 69 6e 20 50 32 20 28 6e 6f 74 20  used in P2 (not 
20ff0 50 35 29 20 6f 66 20 4f 50 5f 44 65 6c 65 74 65  P5) of OP_Delete
21000 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
21010 41 47 5f 45 50 48 45 4d 20 20 20 20 20 20 20 20  AG_EPHEM        
21020 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43   0x01    /* OP_C
21030 6f 6c 75 6d 6e 3a 20 45 70 68 65 6d 65 72 61 6c  olumn: Ephemeral
21040 20 6f 75 74 70 75 74 20 69 73 20 6f 6b 20 2a 2f   output is ok */
21050 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
21060 4c 41 53 54 52 4f 57 49 44 20 20 20 20 20 30 78  LASTROWID     0x
21070 32 30 20 20 20 20 2f 2a 20 53 65 74 20 74 6f 20  20    /* Set to 
21080 75 70 64 61 74 65 20 64 62 2d 3e 6c 61 73 74 52  update db->lastR
21090 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  owid */.#define 
210a0 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20  OPFLAG_ISUPDATE 
210b0 20 20 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20       0x04    /* 
210c0 54 68 69 73 20 4f 50 5f 49 6e 73 65 72 74 20 69  This OP_Insert i
210d0 73 20 61 6e 20 73 71 6c 20 55 50 44 41 54 45 20  s an sql UPDATE 
210e0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
210f0 47 5f 41 50 50 45 4e 44 20 20 20 20 20 20 20 20  G_APPEND        
21100 30 78 30 38 20 20 20 20 2f 2a 20 54 68 69 73 20  0x08    /* This 
21110 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20  is likely to be 
21120 61 6e 20 61 70 70 65 6e 64 20 2a 2f 0a 23 64 65  an append */.#de
21130 66 69 6e 65 20 4f 50 46 4c 41 47 5f 55 53 45 53  fine OPFLAG_USES
21140 45 45 4b 52 45 53 55 4c 54 20 30 78 31 30 20 20  EEKRESULT 0x10  
21150 20 20 2f 2a 20 54 72 79 20 74 6f 20 61 76 6f 69    /* Try to avoi
21160 64 20 61 20 73 65 65 6b 20 69 6e 20 42 74 72 65  d a seek in Btre
21170 65 49 6e 73 65 72 74 28 29 20 2a 2f 0a 23 64 65  eInsert() */.#de
21180 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53 4e 4f  fine OPFLAG_ISNO
21190 4f 50 20 20 20 20 20 20 20 20 30 78 34 30 20 20  OP        0x40  
211a0 20 20 2f 2a 20 4f 50 5f 44 65 6c 65 74 65 20 64    /* OP_Delete d
211b0 6f 65 73 20 70 72 65 2d 75 70 64 61 74 65 2d 68  oes pre-update-h
211c0 6f 6f 6b 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66  ook only */.#def
211d0 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54  ine OPFLAG_LENGT
211e0 48 41 52 47 20 20 20 20 20 30 78 34 30 20 20 20  HARG     0x40   
211f0 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e   /* OP_Column on
21200 6c 79 20 75 73 65 64 20 66 6f 72 20 6c 65 6e 67  ly used for leng
21210 74 68 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  th() */.#define 
21220 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47  OPFLAG_TYPEOFARG
21230 20 20 20 20 20 30 78 38 30 20 20 20 20 2f 2a 20       0x80    /* 
21240 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75  OP_Column only u
21250 73 65 64 20 66 6f 72 20 74 79 70 65 6f 66 28 29  sed for typeof()
21260 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
21270 41 47 5f 42 55 4c 4b 43 53 52 20 20 20 20 20 20  AG_BULKCSR      
21280 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 4f   0x01    /* OP_O
21290 70 65 6e 2a 2a 20 75 73 65 64 20 74 6f 20 6f 70  pen** used to op
212a0 65 6e 20 62 75 6c 6b 20 63 75 72 73 6f 72 20 2a  en bulk cursor *
212b0 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
212c0 5f 53 45 45 4b 45 51 20 20 20 20 20 20 20 20 30  _SEEKEQ        0
212d0 78 30 32 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65  x02    /* OP_Ope
212e0 6e 2a 2a 20 63 75 72 73 6f 72 20 75 73 65 73 20  n** cursor uses 
212f0 45 51 20 73 65 65 6b 20 6f 6e 6c 79 20 2a 2f 0a  EQ seek only */.
21300 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 46  #define OPFLAG_F
21310 4f 52 44 45 4c 45 54 45 20 20 20 20 20 30 78 30  ORDELETE     0x0
21320 38 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 20  8    /* OP_Open 
21330 73 68 6f 75 6c 64 20 75 73 65 20 42 54 52 45 45  should use BTREE
21340 5f 46 4f 52 44 45 4c 45 54 45 20 2a 2f 0a 23 64  _FORDELETE */.#d
21350 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50 32 49  efine OPFLAG_P2I
21360 53 52 45 47 20 20 20 20 20 20 20 30 78 31 30 20  SREG       0x10 
21370 20 20 20 2f 2a 20 50 32 20 74 6f 20 4f 50 5f 4f     /* P2 to OP_O
21380 70 65 6e 2a 2a 20 69 73 20 61 20 72 65 67 69 73  pen** is a regis
21390 74 65 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 23 64  ter number */.#d
213a0 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50 45 52  efine OPFLAG_PER
213b0 4d 55 54 45 20 20 20 20 20 20 20 30 78 30 31 20  MUTE       0x01 
213c0 20 20 20 2f 2a 20 4f 50 5f 43 6f 6d 70 61 72 65     /* OP_Compare
213d0 3a 20 75 73 65 20 74 68 65 20 70 65 72 6d 75 74  : use the permut
213e0 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ation */.#define
213f0 20 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49   OPFLAG_SAVEPOSI
21400 54 49 4f 4e 20 20 30 78 30 32 20 20 20 20 2f 2a  TION  0x02    /*
21410 20 4f 50 5f 44 65 6c 65 74 65 2f 49 6e 73 65 72   OP_Delete/Inser
21420 74 3a 20 73 61 76 65 20 63 75 72 73 6f 72 20 70  t: save cursor p
21430 6f 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  os */.#define OP
21440 46 4c 41 47 5f 41 55 58 44 45 4c 45 54 45 20 20  FLAG_AUXDELETE  
21450 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20 4f 50     0x04    /* OP
21460 5f 44 65 6c 65 74 65 3a 20 69 6e 64 65 78 20 69  _Delete: index i
21470 6e 20 61 20 44 45 4c 45 54 45 20 6f 70 20 2a 2f  n a DELETE op */
21480 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
21490 4e 4f 43 48 4e 47 5f 4d 41 47 49 43 20 20 30 78  NOCHNG_MAGIC  0x
214a0 36 64 20 20 20 20 2f 2a 20 4f 50 5f 4d 61 6b 65  6d    /* OP_Make
214b0 52 65 63 6f 72 64 3a 20 73 65 72 69 61 6c 74 79  Record: serialty
214c0 70 65 20 31 30 20 69 73 20 6f 6b 20 2a 2f 0a 0a  pe 10 is ok */..
214d0 2f 2a 0a 20 2a 20 45 61 63 68 20 74 72 69 67 67  /*. * Each trigg
214e0 65 72 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68  er present in th
214f0 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
21500 61 20 69 73 20 73 74 6f 72 65 64 20 61 73 20 61  a is stored as a
21510 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 20 2a  n instance of. *
21520 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 2e   struct Trigger.
21530 0a 20 2a 0a 20 2a 20 50 6f 69 6e 74 65 72 73 20  . *. * Pointers 
21540 74 6f 20 69 6e 73 74 61 6e 63 65 73 20 6f 66 20  to instances of 
21550 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20 61  struct Trigger a
21560 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74 77 6f  re stored in two
21570 20 77 61 79 73 2e 0a 20 2a 20 31 2e 20 49 6e 20   ways.. * 1. In 
21580 74 68 65 20 22 74 72 69 67 48 61 73 68 22 20 68  the "trigHash" h
21590 61 73 68 20 74 61 62 6c 65 20 28 70 61 72 74 20  ash table (part 
215a0 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 2a 20  of the sqlite3* 
215b0 74 68 61 74 20 72 65 70 72 65 73 65 6e 74 73 20  that represents 
215c0 74 68 65 0a 20 2a 20 20 20 20 64 61 74 61 62 61  the. *    databa
215d0 73 65 29 2e 20 54 68 69 73 20 61 6c 6c 6f 77 73  se). This allows
215e0 20 54 72 69 67 67 65 72 20 73 74 72 75 63 74 75   Trigger structu
215f0 72 65 73 20 74 6f 20 62 65 20 72 65 74 72 69 65  res to be retrie
21600 76 65 64 20 62 79 20 6e 61 6d 65 2e 0a 20 2a 20  ved by name.. * 
21610 32 2e 20 41 6c 6c 20 74 72 69 67 67 65 72 73 20  2. All triggers 
21620 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
21630 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 66  a single table f
21640 6f 72 6d 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73  orm a linked lis
21650 74 2c 20 75 73 69 6e 67 20 74 68 65 0a 20 2a 20  t, using the. * 
21660 20 20 20 70 4e 65 78 74 20 6d 65 6d 62 65 72 20     pNext member 
21670 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65  of struct Trigge
21680 72 2e 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20  r. A pointer to 
21690 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e  the first elemen
216a0 74 20 6f 66 20 74 68 65 0a 20 2a 20 20 20 20 6c  t of the. *    l
216b0 69 6e 6b 65 64 20 6c 69 73 74 20 69 73 20 73 74  inked list is st
216c0 6f 72 65 64 20 61 73 20 74 68 65 20 22 70 54 72  ored as the "pTr
216d0 69 67 67 65 72 22 20 6d 65 6d 62 65 72 20 6f 66  igger" member of
216e0 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 0a   the associated.
216f0 20 2a 20 20 20 20 73 74 72 75 63 74 20 54 61 62   *    struct Tab
21700 6c 65 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22 73  le.. *. * The "s
21710 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72  tep_list" member
21720 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66   points to the f
21730 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20  irst element of 
21740 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 0a 20 2a  a linked list. *
21750 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
21760 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 73  SQL statements s
21770 70 65 63 69 66 69 65 64 20 61 73 20 74 68 65 20  pecified as the 
21780 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e  trigger program.
21790 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67  . */.struct Trig
217a0 67 65 72 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e  ger {.  char *zN
217b0 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
217c0 2f 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74  /* The name of t
217d0 68 65 20 74 72 69 67 67 65 72 20 20 20 20 20 20  he trigger      
217e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
217f0 20 20 2a 2f 0a 20 20 63 68 61 72 20 2a 74 61 62    */.  char *tab
21800 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  le;            /
21810 2a 20 54 68 65 20 74 61 62 6c 65 20 6f 72 20 76  * The table or v
21820 69 65 77 20 74 6f 20 77 68 69 63 68 20 74 68 65  iew to which the
21830 20 74 72 69 67 67 65 72 20 61 70 70 6c 69 65 73   trigger applies
21840 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20 20   */.  u8 op;    
21850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
21860 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54   One of TK_DELET
21870 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b  E, TK_UPDATE, TK
21880 5f 49 4e 53 45 52 54 20 20 20 20 20 20 20 20 20  _INSERT         
21890 2a 2f 0a 20 20 75 38 20 74 72 5f 74 6d 3b 20 20  */.  u8 tr_tm;  
218a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
218b0 4f 6e 65 20 6f 66 20 54 52 49 47 47 45 52 5f 42  One of TRIGGER_B
218c0 45 46 4f 52 45 2c 20 54 52 49 47 47 45 52 5f 41  EFORE, TRIGGER_A
218d0 46 54 45 52 20 2a 2f 0a 20 20 45 78 70 72 20 2a  FTER */.  Expr *
218e0 70 57 68 65 6e 3b 20 20 20 20 20 20 20 20 20 20  pWhen;          
218f0 20 20 2f 2a 20 54 68 65 20 57 48 45 4e 20 63 6c    /* The WHEN cl
21900 61 75 73 65 20 6f 66 20 74 68 65 20 65 78 70 72  ause of the expr
21910 65 73 73 69 6f 6e 20 28 6d 61 79 20 62 65 20 4e  ession (may be N
21920 55 4c 4c 29 20 2a 2f 0a 20 20 49 64 4c 69 73 74  ULL) */.  IdList
21930 20 2a 70 43 6f 6c 75 6d 6e 73 3b 20 20 20 20 20   *pColumns;     
21940 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69 73 20    /* If this is 
21950 61 6e 20 55 50 44 41 54 45 20 4f 46 20 3c 63 6f  an UPDATE OF <co
21960 6c 75 6d 6e 2d 6c 69 73 74 3e 20 74 72 69 67 67  lumn-list> trigg
21970 65 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  er,.            
21980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21990 20 74 68 65 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73   the <column-lis
219a0 74 3e 20 69 73 20 73 74 6f 72 65 64 20 68 65 72  t> is stored her
219b0 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70  e */.  Schema *p
219c0 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20 2f  Schema;        /
219d0 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e  * Schema contain
219e0 69 6e 67 20 74 68 65 20 74 72 69 67 67 65 72 20  ing the trigger 
219f0 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 54 61  */.  Schema *pTa
21a00 62 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20  bSchema;     /* 
21a10 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e  Schema containin
21a20 67 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20  g the table */. 
21a30 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 74   TriggerStep *st
21a40 65 70 5f 6c 69 73 74 3b 20 2f 2a 20 4c 69 6e 6b  ep_list; /* Link
21a50 20 6c 69 73 74 20 6f 66 20 74 72 69 67 67 65 72   list of trigger
21a60 20 70 72 6f 67 72 61 6d 20 73 74 65 70 73 20 20   program steps  
21a70 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20             */.  
21a80 54 72 69 67 67 65 72 20 2a 70 4e 65 78 74 3b 20  Trigger *pNext; 
21a90 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20          /* Next 
21aa0 74 72 69 67 67 65 72 20 61 73 73 6f 63 69 61 74  trigger associat
21ab0 65 64 20 77 69 74 68 20 74 68 65 20 74 61 62 6c  ed with the tabl
21ac0 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  e */.};../*.** A
21ad0 20 74 72 69 67 67 65 72 20 69 73 20 65 69 74 68   trigger is eith
21ae0 65 72 20 61 20 42 45 46 4f 52 45 20 6f 72 20 61  er a BEFORE or a
21af0 6e 20 41 46 54 45 52 20 74 72 69 67 67 65 72 2e  n AFTER trigger.
21b00 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
21b10 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65 74  constants.** det
21b20 65 72 6d 69 6e 65 20 77 68 69 63 68 2e 0a 2a 2a  ermine which..**
21b30 0a 2a 2a 20 49 66 20 74 68 65 72 65 20 61 72 65  .** If there are
21b40 20 6d 75 6c 74 69 70 6c 65 20 74 72 69 67 67 65   multiple trigge
21b50 72 73 2c 20 79 6f 75 20 6d 69 67 68 74 20 6f 66  rs, you might of
21b60 20 73 6f 6d 65 20 42 45 46 4f 52 45 20 61 6e 64   some BEFORE and
21b70 20 73 6f 6d 65 20 41 46 54 45 52 2e 0a 2a 2a 20   some AFTER..** 
21b80 49 6e 20 74 68 61 74 20 63 61 73 65 73 2c 20 74  In that cases, t
21b90 68 65 20 63 6f 6e 73 74 61 6e 74 73 20 62 65 6c  he constants bel
21ba0 6f 77 20 63 61 6e 20 62 65 20 4f 52 65 64 20 74  ow can be ORed t
21bb0 6f 67 65 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66  ogether..*/.#def
21bc0 69 6e 65 20 54 52 49 47 47 45 52 5f 42 45 46 4f  ine TRIGGER_BEFO
21bd0 52 45 20 20 31 0a 23 64 65 66 69 6e 65 20 54 52  RE  1.#define TR
21be0 49 47 47 45 52 5f 41 46 54 45 52 20 20 20 32 0a  IGGER_AFTER   2.
21bf0 0a 2f 2a 0a 20 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*. * An instan
21c00 63 65 20 6f 66 20 73 74 72 75 63 74 20 54 72 69  ce of struct Tri
21c10 67 67 65 72 53 74 65 70 20 69 73 20 75 73 65 64  ggerStep is used
21c20 20 74 6f 20 73 74 6f 72 65 20 61 20 73 69 6e 67   to store a sing
21c30 6c 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  le SQL statement
21c40 0a 20 2a 20 74 68 61 74 20 69 73 20 61 20 70 61  . * that is a pa
21c50 72 74 20 6f 66 20 61 20 74 72 69 67 67 65 72 2d  rt of a trigger-
21c60 70 72 6f 67 72 61 6d 2e 0a 20 2a 0a 20 2a 20 49  program.. *. * I
21c70 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 74 72 75  nstances of stru
21c80 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20 61  ct TriggerStep a
21c90 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 73  re stored in a s
21ca0 69 6e 67 6c 79 20 6c 69 6e 6b 65 64 20 6c 69 73  ingly linked lis
21cb0 74 20 28 6c 69 6e 6b 65 64 0a 20 2a 20 75 73 69  t (linked. * usi
21cc0 6e 67 20 74 68 65 20 22 70 4e 65 78 74 22 20 6d  ng the "pNext" m
21cd0 65 6d 62 65 72 29 20 72 65 66 65 72 65 6e 63 65  ember) reference
21ce0 64 20 62 79 20 74 68 65 20 22 73 74 65 70 5f 6c  d by the "step_l
21cf0 69 73 74 22 20 6d 65 6d 62 65 72 20 6f 66 20 74  ist" member of t
21d00 68 65 0a 20 2a 20 61 73 73 6f 63 69 61 74 65 64  he. * associated
21d10 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20   struct Trigger 
21d20 69 6e 73 74 61 6e 63 65 2e 20 54 68 65 20 66 69  instance. The fi
21d30 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74  rst element of t
21d40 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69  he linked list i
21d50 73 0a 20 2a 20 74 68 65 20 66 69 72 73 74 20 73  s. * the first s
21d60 74 65 70 20 6f 66 20 74 68 65 20 74 72 69 67 67  tep of the trigg
21d70 65 72 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a 0a 20  er-program.. *. 
21d80 2a 20 54 68 65 20 22 6f 70 22 20 6d 65 6d 62 65  * The "op" membe
21d90 72 20 69 6e 64 69 63 61 74 65 73 20 77 68 65 74  r indicates whet
21da0 68 65 72 20 74 68 69 73 20 69 73 20 61 20 22 44  her this is a "D
21db0 45 4c 45 54 45 22 2c 20 22 49 4e 53 45 52 54 22  ELETE", "INSERT"
21dc0 2c 20 22 55 50 44 41 54 45 22 20 6f 72 0a 20 2a  , "UPDATE" or. *
21dd0 20 22 53 45 4c 45 43 54 22 20 73 74 61 74 65 6d   "SELECT" statem
21de0 65 6e 74 2e 20 54 68 65 20 6d 65 61 6e 69 6e 67  ent. The meaning
21df0 73 20 6f 66 20 74 68 65 20 6f 74 68 65 72 20 6d  s of the other m
21e00 65 6d 62 65 72 73 20 69 73 20 64 65 74 65 72 6d  embers is determ
21e10 69 6e 65 64 20 62 79 20 74 68 65 0a 20 2a 20 76  ined by the. * v
21e20 61 6c 75 65 20 6f 66 20 22 6f 70 22 20 61 73 20  alue of "op" as 
21e30 66 6f 6c 6c 6f 77 73 3a 0a 20 2a 0a 20 2a 20 28  follows:. *. * (
21e40 6f 70 20 3d 3d 20 54 4b 5f 49 4e 53 45 52 54 29  op == TK_INSERT)
21e50 0a 20 2a 20 6f 72 63 6f 6e 66 20 20 20 20 2d 3e  . * orconf    ->
21e60 20 73 74 6f 72 65 73 20 74 68 65 20 4f 4e 20 43   stores the ON C
21e70 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68  ONFLICT algorith
21e80 6d 0a 20 2a 20 70 53 65 6c 65 63 74 20 20 20 2d  m. * pSelect   -
21e90 3e 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20  > If this is an 
21ea0 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20  INSERT INTO ... 
21eb0 53 45 4c 45 43 54 20 2e 2e 2e 20 73 74 61 74 65  SELECT ... state
21ec0 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20  ment, then. *   
21ed0 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 20             this 
21ee0 73 74 6f 72 65 73 20 61 20 70 6f 69 6e 74 65 72  stores a pointer
21ef0 20 74 6f 20 74 68 65 20 53 45 4c 45 43 54 20 73   to the SELECT s
21f00 74 61 74 65 6d 65 6e 74 2e 20 4f 74 68 65 72 77  tatement. Otherw
21f10 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 7a 54 61  ise NULL.. * zTa
21f20 72 67 65 74 20 20 20 2d 3e 20 44 65 71 75 6f 74  rget   -> Dequot
21f30 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  ed name of the t
21f40 61 62 6c 65 20 74 6f 20 69 6e 73 65 72 74 20 69  able to insert i
21f50 6e 74 6f 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73  nto.. * pExprLis
21f60 74 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20  t -> If this is 
21f70 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e  an INSERT INTO .
21f80 2e 2e 20 56 41 4c 55 45 53 20 2e 2e 2e 20 73 74  .. VALUES ... st
21f90 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a  atement, then. *
21fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
21fb0 69 73 20 73 74 6f 72 65 73 20 76 61 6c 75 65 73  is stores values
21fc0 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64 2e   to be inserted.
21fd0 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e   Otherwise NULL.
21fe0 0a 20 2a 20 70 49 64 4c 69 73 74 20 20 20 2d 3e  . * pIdList   ->
21ff0 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 49   If this is an I
22000 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 28  NSERT INTO ... (
22010 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 3e 29 20  <column-names>) 
22020 56 41 4c 55 45 53 20 2e 2e 2e 0a 20 2a 20 20 20  VALUES .... *   
22030 20 20 20 20 20 20 20 20 20 20 20 73 74 61 74 65             state
22040 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68 69 73 20  ment, then this 
22050 73 74 6f 72 65 73 20 74 68 65 20 63 6f 6c 75 6d  stores the colum
22060 6e 2d 6e 61 6d 65 73 20 74 6f 20 62 65 0a 20 2a  n-names to be. *
22070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
22080 73 65 72 74 65 64 20 69 6e 74 6f 2e 0a 20 2a 0a  serted into.. *.
22090 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 44 45 4c   * (op == TK_DEL
220a0 45 54 45 29 0a 20 2a 20 7a 54 61 72 67 65 74 20  ETE). * zTarget 
220b0 20 20 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e 61    -> Dequoted na
220c0 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
220d0 74 6f 20 64 65 6c 65 74 65 20 66 72 6f 6d 2e 0a  to delete from..
220e0 20 2a 20 70 57 68 65 72 65 20 20 20 20 2d 3e 20   * pWhere    -> 
220f0 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  The WHERE clause
22100 20 6f 66 20 74 68 65 20 44 45 4c 45 54 45 20 73   of the DELETE s
22110 74 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20  tatement if one 
22120 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a 20 2a  is specified.. *
22130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 74                Ot
22140 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a  herwise NULL.. *
22150 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 55 50  . * (op == TK_UP
22160 44 41 54 45 29 0a 20 2a 20 7a 54 61 72 67 65 74  DATE). * zTarget
22170 20 20 20 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e     -> Dequoted n
22180 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
22190 20 74 6f 20 75 70 64 61 74 65 2e 0a 20 2a 20 70   to update.. * p
221a0 57 68 65 72 65 20 20 20 20 2d 3e 20 54 68 65 20  Where    -> The 
221b0 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20  WHERE clause of 
221c0 74 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65  the UPDATE state
221d0 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69 73 20 73  ment if one is s
221e0 70 65 63 69 66 69 65 64 2e 0a 20 2a 20 20 20 20  pecified.. *    
221f0 20 20 20 20 20 20 20 20 20 20 4f 74 68 65 72 77            Otherw
22200 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 45 78  ise NULL.. * pEx
22210 70 72 4c 69 73 74 20 2d 3e 20 41 20 6c 69 73 74  prList -> A list
22220 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20   of the columns 
22230 74 6f 20 75 70 64 61 74 65 20 61 6e 64 20 74 68  to update and th
22240 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74 6f  e expressions to
22250 20 75 70 64 61 74 65 0a 20 2a 20 20 20 20 20 20   update. *      
22260 20 20 20 20 20 20 20 20 74 68 65 6d 20 74 6f 2e          them to.
22270 20 53 65 65 20 73 71 6c 69 74 65 33 55 70 64 61   See sqlite3Upda
22280 74 65 28 29 20 64 6f 63 75 6d 65 6e 74 61 74 69  te() documentati
22290 6f 6e 20 6f 66 20 22 70 43 68 61 6e 67 65 73 22  on of "pChanges"
222a0 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
222b0 20 61 72 67 75 6d 65 6e 74 2e 0a 20 2a 0a 20 2a   argument.. *. *
222c0 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72  /.struct Trigger
222d0 53 74 65 70 20 7b 0a 20 20 75 38 20 6f 70 3b 20  Step {.  u8 op; 
222e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
222f0 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54   One of TK_DELET
22300 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b  E, TK_UPDATE, TK
22310 5f 49 4e 53 45 52 54 2c 20 54 4b 5f 53 45 4c 45  _INSERT, TK_SELE
22320 43 54 20 2a 2f 0a 20 20 75 38 20 6f 72 63 6f 6e  CT */.  u8 orcon
22330 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  f;           /* 
22340 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 65 74 63 2e  OE_Rollback etc.
22350 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70   */.  Trigger *p
22360 54 72 69 67 3b 20 20 20 20 20 20 2f 2a 20 54 68  Trig;      /* Th
22370 65 20 74 72 69 67 67 65 72 20 74 68 61 74 20 74  e trigger that t
22380 68 69 73 20 73 74 65 70 20 69 73 20 61 20 70 61  his step is a pa
22390 72 74 20 6f 66 20 2a 2f 0a 20 20 53 65 6c 65 63  rt of */.  Selec
223a0 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20  t *pSelect;     
223b0 2f 2a 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  /* SELECT statem
223c0 65 6e 74 20 6f 72 20 52 48 53 20 6f 66 20 49 4e  ent or RHS of IN
223d0 53 45 52 54 20 49 4e 54 4f 20 53 45 4c 45 43 54  SERT INTO SELECT
223e0 20 2e 2e 2e 20 2a 2f 0a 20 20 63 68 61 72 20 2a   ... */.  char *
223f0 7a 54 61 72 67 65 74 3b 20 20 20 20 20 20 20 2f  zTarget;       /
22400 2a 20 54 61 72 67 65 74 20 74 61 62 6c 65 20 66  * Target table f
22410 6f 72 20 44 45 4c 45 54 45 2c 20 55 50 44 41 54  or DELETE, UPDAT
22420 45 2c 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 45  E, INSERT */.  E
22430 78 70 72 20 2a 70 57 68 65 72 65 3b 20 20 20 20  xpr *pWhere;    
22440 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45 52 45      /* The WHERE
22450 20 63 6c 61 75 73 65 20 66 6f 72 20 44 45 4c 45   clause for DELE
22460 54 45 20 6f 72 20 55 50 44 41 54 45 20 73 74 65  TE or UPDATE ste
22470 70 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  ps */.  ExprList
22480 20 2a 70 45 78 70 72 4c 69 73 74 3b 20 2f 2a 20   *pExprList; /* 
22490 53 45 54 20 63 6c 61 75 73 65 20 66 6f 72 20 55  SET clause for U
224a0 50 44 41 54 45 2e 20 2a 2f 0a 20 20 49 64 4c 69  PDATE. */.  IdLi
224b0 73 74 20 2a 70 49 64 4c 69 73 74 3b 20 20 20 20  st *pIdList;    
224c0 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73   /* Column names
224d0 20 66 6f 72 20 49 4e 53 45 52 54 20 2a 2f 0a 20   for INSERT */. 
224e0 20 63 68 61 72 20 2a 7a 53 70 61 6e 3b 20 20 20   char *zSpan;   
224f0 20 20 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61        /* Origina
22500 6c 20 53 51 4c 20 74 65 78 74 20 6f 66 20 74 68  l SQL text of th
22510 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20  is command */.  
22520 54 72 69 67 67 65 72 53 74 65 70 20 2a 70 4e 65  TriggerStep *pNe
22530 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20  xt;  /* Next in 
22540 74 68 65 20 6c 69 6e 6b 2d 6c 69 73 74 20 2a 2f  the link-list */
22550 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
22560 70 4c 61 73 74 3b 20 20 2f 2a 20 4c 61 73 74 20  pLast;  /* Last 
22570 65 6c 65 6d 65 6e 74 20 69 6e 20 6c 69 6e 6b 2d  element in link-
22580 6c 69 73 74 2e 20 56 61 6c 69 64 20 66 6f 72 20  list. Valid for 
22590 31 73 74 20 65 6c 65 6d 20 6f 6e 6c 79 20 2a 2f  1st elem only */
225a0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  .};../*.** The f
225b0 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
225c0 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f  re contains info
225d0 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 62 79 20  rmation used by 
225e0 74 68 65 20 73 71 6c 69 74 65 46 69 78 2e 2e 2e  the sqliteFix...
225f0 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20 61 73 20  .** routines as 
22600 74 68 65 79 20 77 61 6c 6b 20 74 68 65 20 70 61  they walk the pa
22610 72 73 65 20 74 72 65 65 20 74 6f 20 6d 61 6b 65  rse tree to make
22620 20 64 61 74 61 62 61 73 65 20 72 65 66 65 72 65   database refere
22630 6e 63 65 73 0a 2a 2a 20 65 78 70 6c 69 63 69 74  nces.** explicit
22640 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72  ..*/.typedef str
22650 75 63 74 20 44 62 46 69 78 65 72 20 44 62 46 69  uct DbFixer DbFi
22660 78 65 72 3b 0a 73 74 72 75 63 74 20 44 62 46 69  xer;.struct DbFi
22670 78 65 72 20 7b 0a 20 20 50 61 72 73 65 20 2a 70  xer {.  Parse *p
22680 50 61 72 73 65 3b 20 20 20 20 20 20 2f 2a 20 54  Parse;      /* T
22690 68 65 20 70 61 72 73 69 6e 67 20 63 6f 6e 74 65  he parsing conte
226a0 78 74 2e 20 20 45 72 72 6f 72 20 6d 65 73 73 61  xt.  Error messa
226b0 67 65 73 20 77 72 69 74 74 65 6e 20 68 65 72 65  ges written here
226c0 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53   */.  Schema *pS
226d0 63 68 65 6d 61 3b 20 20 20 20 2f 2a 20 46 69 78  chema;    /* Fix
226e0 20 69 74 65 6d 73 20 74 6f 20 74 68 69 73 20 73   items to this s
226f0 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 62  chema */.  int b
22700 56 61 72 4f 6e 6c 79 3b 20 20 20 20 20 20 20 2f  VarOnly;       /
22710 2a 20 43 68 65 63 6b 20 66 6f 72 20 76 61 72 69  * Check for vari
22720 61 62 6c 65 20 72 65 66 65 72 65 6e 63 65 73 20  able references 
22730 6f 6e 6c 79 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  only */.  const 
22740 63 68 61 72 20 2a 7a 44 62 3b 20 20 20 20 2f 2a  char *zDb;    /*
22750 20 4d 61 6b 65 20 73 75 72 65 20 61 6c 6c 20 6f   Make sure all o
22760 62 6a 65 63 74 73 20 61 72 65 20 63 6f 6e 74 61  bjects are conta
22770 69 6e 65 64 20 69 6e 20 74 68 69 73 20 64 61 74  ined in this dat
22780 61 62 61 73 65 20 2a 2f 0a 20 20 63 6f 6e 73 74  abase */.  const
22790 20 63 68 61 72 20 2a 7a 54 79 70 65 3b 20 20 2f   char *zType;  /
227a0 2a 20 54 79 70 65 20 6f 66 20 74 68 65 20 63 6f  * Type of the co
227b0 6e 74 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66  ntainer - used f
227c0 6f 72 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  or error message
227d0 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 54 6f 6b  s */.  const Tok
227e0 65 6e 20 2a 70 4e 61 6d 65 3b 20 2f 2a 20 4e 61  en *pName; /* Na
227f0 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69  me of the contai
22800 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65  ner - used for e
22810 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f  rror messages */
22820 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62  .};../*.** An ob
22830 6a 65 63 74 65 64 20 75 73 65 64 20 74 6f 20 61  jected used to a
22840 63 63 75 6d 75 6c 61 74 65 20 74 68 65 20 74 65  ccumulate the te
22850 78 74 20 6f 66 20 61 20 73 74 72 69 6e 67 20 77  xt of a string w
22860 68 65 72 65 20 77 65 0a 2a 2a 20 64 6f 20 6e 6f  here we.** do no
22870 74 20 6e 65 63 65 73 73 61 72 69 6c 79 20 6b 6e  t necessarily kn
22880 6f 77 20 68 6f 77 20 62 69 67 20 74 68 65 20 73  ow how big the s
22890 74 72 69 6e 67 20 77 69 6c 6c 20 62 65 20 69 6e  tring will be in
228a0 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72   the end..*/.str
228b0 75 63 74 20 53 74 72 41 63 63 75 6d 20 7b 0a 20  uct StrAccum {. 
228c0 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20   sqlite3 *db;   
228d0 20 20 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61        /* Optiona
228e0 6c 20 64 61 74 61 62 61 73 65 20 66 6f 72 20 6c  l database for l
228f0 6f 6f 6b 61 73 69 64 65 2e 20 20 43 61 6e 20 62  ookaside.  Can b
22900 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63 68 61 72  e NULL */.  char
22910 20 2a 7a 54 65 78 74 3b 20 20 20 20 20 20 20 20   *zText;        
22920 20 2f 2a 20 54 68 65 20 73 74 72 69 6e 67 20 63   /* The string c
22930 6f 6c 6c 65 63 74 65 64 20 73 6f 20 66 61 72 20  ollected so far 
22940 2a 2f 0a 20 20 75 33 32 20 20 6e 41 6c 6c 6f 63  */.  u32  nAlloc
22950 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6d 6f  ;         /* Amo
22960 75 6e 74 20 6f 66 20 73 70 61 63 65 20 61 6c 6c  unt of space all
22970 6f 63 61 74 65 64 20 69 6e 20 7a 54 65 78 74 20  ocated in zText 
22980 2a 2f 0a 20 20 75 33 32 20 20 6d 78 41 6c 6c 6f  */.  u32  mxAllo
22990 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78  c;        /* Max
229a0 69 6d 75 6d 20 61 6c 6c 6f 77 65 64 20 61 6c 6c  imum allowed all
229b0 6f 63 61 74 69 6f 6e 2e 20 20 30 20 66 6f 72 20  ocation.  0 for 
229c0 6e 6f 20 6d 61 6c 6c 6f 63 20 75 73 61 67 65 20  no malloc usage 
229d0 2a 2f 0a 20 20 75 33 32 20 20 6e 43 68 61 72 3b  */.  u32  nChar;
229e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e            /* Len
229f0 67 74 68 20 6f 66 20 74 68 65 20 73 74 72 69 6e  gth of the strin
22a00 67 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 75 38  g so far */.  u8
22a10 20 20 20 61 63 63 45 72 72 6f 72 3b 20 20 20 20     accError;    
22a20 20 20 20 2f 2a 20 53 54 52 41 43 43 55 4d 5f 4e     /* STRACCUM_N
22a30 4f 4d 45 4d 20 6f 72 20 53 54 52 41 43 43 55 4d  OMEM or STRACCUM
22a40 5f 54 4f 4f 42 49 47 20 2a 2f 0a 20 20 75 38 20  _TOOBIG */.  u8 
22a50 20 20 70 72 69 6e 74 66 46 6c 61 67 73 3b 20 20    printfFlags;  
22a60 20 20 2f 2a 20 53 51 4c 49 54 45 5f 50 52 49 4e    /* SQLITE_PRIN
22a70 54 46 20 66 6c 61 67 73 20 62 65 6c 6f 77 20 2a  TF flags below *
22a80 2f 0a 7d 3b 0a 23 64 65 66 69 6e 65 20 53 54 52  /.};.#define STR
22a90 41 43 43 55 4d 5f 4e 4f 4d 45 4d 20 20 20 31 0a  ACCUM_NOMEM   1.
22aa0 23 64 65 66 69 6e 65 20 53 54 52 41 43 43 55 4d  #define STRACCUM
22ab0 5f 54 4f 4f 42 49 47 20 20 32 0a 23 64 65 66 69  _TOOBIG  2.#defi
22ac0 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46  ne SQLITE_PRINTF
22ad0 5f 49 4e 54 45 52 4e 41 4c 20 30 78 30 31 20 20  _INTERNAL 0x01  
22ae0 2f 2a 20 49 6e 74 65 72 6e 61 6c 2d 75 73 65 2d  /* Internal-use-
22af0 6f 6e 6c 79 20 63 6f 6e 76 65 72 74 65 72 73 20  only converters 
22b00 61 6c 6c 6f 77 65 64 20 2a 2f 0a 23 64 65 66 69  allowed */.#defi
22b10 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46  ne SQLITE_PRINTF
22b20 5f 53 51 4c 46 55 4e 43 20 20 30 78 30 32 20 20  _SQLFUNC  0x02  
22b30 2f 2a 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20  /* SQL function 
22b40 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 56 58 50  arguments to VXP
22b50 72 69 6e 74 66 20 2a 2f 0a 23 64 65 66 69 6e 65  rintf */.#define
22b60 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 4d   SQLITE_PRINTF_M
22b70 41 4c 4c 4f 43 45 44 20 30 78 30 34 20 20 2f 2a  ALLOCED 0x04  /*
22b80 20 54 72 75 65 20 69 66 20 78 54 65 78 74 20 69   True if xText i
22b90 73 20 61 6c 6c 6f 63 61 74 65 64 20 73 70 61 63  s allocated spac
22ba0 65 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 69 73  e */..#define is
22bb0 4d 61 6c 6c 6f 63 65 64 28 58 29 20 20 28 28 28  Malloced(X)  (((
22bc0 58 29 2d 3e 70 72 69 6e 74 66 46 6c 61 67 73 20  X)->printfFlags 
22bd0 26 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f  & SQLITE_PRINTF_
22be0 4d 41 4c 4c 4f 43 45 44 29 21 3d 30 29 0a 0a 0a  MALLOCED)!=0)...
22bf0 2f 2a 0a 2a 2a 20 41 20 70 6f 69 6e 74 65 72 20  /*.** A pointer 
22c00 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72  to this structur
22c10 65 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d  e is used to com
22c20 6d 75 6e 69 63 61 74 65 20 69 6e 66 6f 72 6d 61  municate informa
22c30 74 69 6f 6e 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c  tion.** from sql
22c40 69 74 65 33 49 6e 69 74 20 61 6e 64 20 4f 50 5f  ite3Init and OP_
22c50 50 61 72 73 65 53 63 68 65 6d 61 20 69 6e 74 6f  ParseSchema into
22c60 20 74 68 65 20 73 71 6c 69 74 65 33 49 6e 69 74   the sqlite3Init
22c70 43 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 74 79 70  Callback..*/.typ
22c80 65 64 65 66 20 73 74 72 75 63 74 20 7b 0a 20 20  edef struct {.  
22c90 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20  sqlite3 *db;    
22ca0 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62      /* The datab
22cb0 61 73 65 20 62 65 69 6e 67 20 69 6e 69 74 69 61  ase being initia
22cc0 6c 69 7a 65 64 20 2a 2f 0a 20 20 63 68 61 72 20  lized */.  char 
22cd0 2a 2a 70 7a 45 72 72 4d 73 67 3b 20 20 20 20 2f  **pzErrMsg;    /
22ce0 2a 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20  * Error message 
22cf0 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20  stored here */. 
22d00 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20   int iDb;       
22d10 20 20 20 20 20 2f 2a 20 30 20 66 6f 72 20 6d 61       /* 0 for ma
22d20 69 6e 20 64 61 74 61 62 61 73 65 2e 20 20 31 20  in database.  1 
22d30 66 6f 72 20 54 45 4d 50 2c 20 32 2e 2e 20 66 6f  for TEMP, 2.. fo
22d40 72 20 41 54 54 41 43 48 65 64 20 2a 2f 0a 20 20  r ATTACHed */.  
22d50 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20 20  int rc;         
22d60 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 63 6f      /* Result co
22d70 64 65 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a  de stored here *
22d80 2f 0a 7d 20 49 6e 69 74 44 61 74 61 3b 0a 0a 2f  /.} InitData;../
22d90 2a 0a 2a 2a 20 53 74 72 75 63 74 75 72 65 20 63  *.** Structure c
22da0 6f 6e 74 61 69 6e 69 6e 67 20 67 6c 6f 62 61 6c  ontaining global
22db0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 64   configuration d
22dc0 61 74 61 20 66 6f 72 20 74 68 65 20 53 51 4c 69  ata for the SQLi
22dd0 74 65 20 6c 69 62 72 61 72 79 2e 0a 2a 2a 0a 2a  te library..**.*
22de0 2a 20 54 68 69 73 20 73 74 72 75 63 74 75 72 65  * This structure
22df0 20 61 6c 73 6f 20 63 6f 6e 74 61 69 6e 73 20 73   also contains s
22e00 6f 6d 65 20 73 74 61 74 65 20 69 6e 66 6f 72 6d  ome state inform
22e10 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  ation..*/.struct
22e20 20 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 20 7b   Sqlite3Config {
22e30 0a 20 20 69 6e 74 20 62 4d 65 6d 73 74 61 74 3b  .  int bMemstat;
22e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e50 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20       /* True to 
22e60 65 6e 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73 74  enable memory st
22e70 61 74 75 73 20 2a 2f 0a 20 20 69 6e 74 20 62 43  atus */.  int bC
22e80 6f 72 65 4d 75 74 65 78 3b 20 20 20 20 20 20 20  oreMutex;       
22e90 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
22ea0 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 63 6f  rue to enable co
22eb0 72 65 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20  re mutexing */. 
22ec0 20 69 6e 74 20 62 46 75 6c 6c 4d 75 74 65 78 3b   int bFullMutex;
22ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ee0 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e     /* True to en
22ef0 61 62 6c 65 20 66 75 6c 6c 20 6d 75 74 65 78 69  able full mutexi
22f00 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62 4f 70 65  ng */.  int bOpe
22f10 6e 55 72 69 3b 20 20 20 20 20 20 20 20 20 20 20  nUri;           
22f20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
22f30 65 20 74 6f 20 69 6e 74 65 72 70 72 65 74 20 66  e to interpret f
22f40 69 6c 65 6e 61 6d 65 73 20 61 73 20 55 52 49 73  ilenames as URIs
22f50 20 2a 2f 0a 20 20 69 6e 74 20 62 55 73 65 43 69   */.  int bUseCi
22f60 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
22f70 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 63          /* Use c
22f80 6f 76 65 72 69 6e 67 20 69 6e 64 69 63 65 73 20  overing indices 
22f90 66 6f 72 20 66 75 6c 6c 2d 73 63 61 6e 73 20 2a  for full-scans *
22fa0 2f 0a 20 20 69 6e 74 20 62 53 6d 61 6c 6c 4d 61  /.  int bSmallMa
22fb0 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 20 20  lloc;           
22fc0 20 20 20 20 20 20 2f 2a 20 41 76 6f 69 64 20 6c        /* Avoid l
22fd0 61 72 67 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  arge memory allo
22fe0 63 61 74 69 6f 6e 73 20 69 66 20 74 72 75 65 20  cations if true 
22ff0 2a 2f 0a 20 20 69 6e 74 20 6d 78 53 74 72 6c 65  */.  int mxStrle
23000 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n;              
23010 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75         /* Maximu
23020 6d 20 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  m string length 
23030 2a 2f 0a 20 20 69 6e 74 20 6e 65 76 65 72 43 6f  */.  int neverCo
23040 72 72 75 70 74 3b 20 20 20 20 20 20 20 20 20 20  rrupt;          
23050 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61         /* Databa
23060 73 65 20 69 73 20 61 6c 77 61 79 73 20 77 65 6c  se is always wel
23070 6c 2d 66 6f 72 6d 65 64 20 2a 2f 0a 20 20 69 6e  l-formed */.  in
23080 74 20 73 7a 4c 6f 6f 6b 61 73 69 64 65 3b 20 20  t szLookaside;  
23090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
230a0 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61  /* Default looka
230b0 73 69 64 65 20 62 75 66 66 65 72 20 73 69 7a 65  side buffer size
230c0 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 6f 6f 6b 61   */.  int nLooka
230d0 73 69 64 65 3b 20 20 20 20 20 20 20 20 20 20 20  side;           
230e0 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
230f0 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66  lt lookaside buf
23100 66 65 72 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 69  fer count */.  i
23110 6e 74 20 6e 53 74 6d 74 53 70 69 6c 6c 3b 20 20  nt nStmtSpill;  
23120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23130 20 2f 2a 20 53 74 6d 74 2d 6a 6f 75 72 6e 61 6c   /* Stmt-journal
23140 20 73 70 69 6c 6c 2d 74 6f 2d 64 69 73 6b 20 74   spill-to-disk t
23150 68 72 65 73 68 6f 6c 64 20 2a 2f 0a 20 20 73 71  hreshold */.  sq
23160 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64  lite3_mem_method
23170 73 20 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  s m;            
23180 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 65 6d  /* Low-level mem
23190 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69  ory allocation i
231a0 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 71  nterface */.  sq
231b0 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68  lite3_mutex_meth
231c0 6f 64 73 20 6d 75 74 65 78 3b 20 20 20 20 20 20  ods mutex;      
231d0 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 75 74  /* Low-level mut
231e0 65 78 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a  ex interface */.
231f0 20 20 73 71 6c 69 74 65 33 5f 70 63 61 63 68 65    sqlite3_pcache
23200 5f 6d 65 74 68 6f 64 73 32 20 70 63 61 63 68 65  _methods2 pcache
23210 32 3b 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c  2;  /* Low-level
23220 20 70 61 67 65 2d 63 61 63 68 65 20 69 6e 74 65   page-cache inte
23230 72 66 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20  rface */.  void 
23240 2a 70 48 65 61 70 3b 20 20 20 20 20 20 20 20 20  *pHeap;         
23250 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
23260 48 65 61 70 20 73 74 6f 72 61 67 65 20 73 70 61  Heap storage spa
23270 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 61  ce */.  int nHea
23280 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
23290 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a            /* Siz
232a0 65 20 6f 66 20 70 48 65 61 70 5b 5d 20 2a 2f 0a  e of pHeap[] */.
232b0 20 20 69 6e 74 20 6d 6e 52 65 71 2c 20 6d 78 52    int mnReq, mxR
232c0 65 71 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  eq;             
232d0 20 20 20 20 2f 2a 20 4d 69 6e 20 61 6e 64 20 6d      /* Min and m
232e0 61 78 20 68 65 61 70 20 72 65 71 75 65 73 74 73  ax heap requests
232f0 20 73 69 7a 65 73 20 2a 2f 0a 20 20 73 71 6c 69   sizes */.  sqli
23300 74 65 33 5f 69 6e 74 36 34 20 73 7a 4d 6d 61 70  te3_int64 szMmap
23310 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
23320 20 6d 6d 61 70 28 29 20 73 70 61 63 65 20 70 65   mmap() space pe
23330 72 20 6f 70 65 6e 20 66 69 6c 65 20 2a 2f 0a 20  r open file */. 
23340 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 6d   sqlite3_int64 m
23350 78 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20  xMmap;          
23360 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 76 61     /* Maximum va
23370 6c 75 65 20 66 6f 72 20 73 7a 4d 6d 61 70 20 2a  lue for szMmap *
23380 2f 0a 20 20 76 6f 69 64 20 2a 70 50 61 67 65 3b  /.  void *pPage;
23390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
233a0 20 20 20 20 20 20 2f 2a 20 50 61 67 65 20 63 61        /* Page ca
233b0 63 68 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20  che memory */.  
233c0 69 6e 74 20 73 7a 50 61 67 65 3b 20 20 20 20 20  int szPage;     
233d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
233e0 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63    /* Size of eac
233f0 68 20 70 61 67 65 20 69 6e 20 70 50 61 67 65 5b  h page in pPage[
23400 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 50 61 67 65  ] */.  int nPage
23410 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
23420 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
23430 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 70  er of pages in p
23440 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  Page[] */.  int 
23450 6d 78 50 61 72 73 65 72 53 74 61 63 6b 3b 20 20  mxParserStack;  
23460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
23470 20 6d 61 78 69 6d 75 6d 20 64 65 70 74 68 20 6f   maximum depth o
23480 66 20 74 68 65 20 70 61 72 73 65 72 20 73 74 61  f the parser sta
23490 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 73 68 61 72  ck */.  int shar
234a0 65 64 43 61 63 68 65 45 6e 61 62 6c 65 64 3b 20  edCacheEnabled; 
234b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74 72 75            /* tru
234c0 65 20 69 66 20 73 68 61 72 65 64 2d 63 61 63 68  e if shared-cach
234d0 65 20 6d 6f 64 65 20 65 6e 61 62 6c 65 64 20 2a  e mode enabled *
234e0 2f 0a 20 20 75 33 32 20 73 7a 50 6d 61 3b 20 20  /.  u32 szPma;  
234f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23500 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d        /* Maximum
23510 20 53 6f 72 74 65 72 20 50 4d 41 20 73 69 7a 65   Sorter PMA size
23520 20 2a 2f 0a 20 20 2f 2a 20 54 68 65 20 61 62 6f   */.  /* The abo
23530 76 65 20 6d 69 67 68 74 20 62 65 20 69 6e 69 74  ve might be init
23540 69 61 6c 69 7a 65 64 20 74 6f 20 6e 6f 6e 2d 7a  ialized to non-z
23550 65 72 6f 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77  ero.  The follow
23560 69 6e 67 20 6e 65 65 64 20 74 6f 20 61 6c 77 61  ing need to alwa
23570 79 73 0a 20 20 2a 2a 20 69 6e 69 74 69 61 6c 6c  ys.  ** initiall
23580 79 20 62 65 20 7a 65 72 6f 2c 20 68 6f 77 65 76  y be zero, howev
23590 65 72 2e 20 2a 2f 0a 20 20 69 6e 74 20 69 73 49  er. */.  int isI
235a0 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  nit;            
235b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
235c0 75 65 20 61 66 74 65 72 20 69 6e 69 74 69 61 6c  ue after initial
235d0 69 7a 61 74 69 6f 6e 20 68 61 73 20 66 69 6e 69  ization has fini
235e0 73 68 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 6e  shed */.  int in
235f0 50 72 6f 67 72 65 73 73 3b 20 20 20 20 20 20 20  Progress;       
23600 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
23610 72 75 65 20 77 68 69 6c 65 20 69 6e 69 74 69 61  rue while initia
23620 6c 69 7a 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67  lization in prog
23630 72 65 73 73 20 2a 2f 0a 20 20 69 6e 74 20 69 73  ress */.  int is
23640 4d 75 74 65 78 49 6e 69 74 3b 20 20 20 20 20 20  MutexInit;      
23650 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
23660 72 75 65 20 61 66 74 65 72 20 6d 75 74 65 78 65  rue after mutexe
23670 73 20 61 72 65 20 69 6e 69 74 69 61 6c 69 7a 65  s are initialize
23680 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 61 6c  d */.  int isMal
23690 6c 6f 63 49 6e 69 74 3b 20 20 20 20 20 20 20 20  locInit;        
236a0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
236b0 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73   after malloc is
236c0 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a   initialized */.
236d0 20 20 69 6e 74 20 69 73 50 43 61 63 68 65 49 6e    int isPCacheIn
236e0 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  it;             
236f0 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65      /* True afte
23700 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74  r malloc is init
23710 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74  ialized */.  int
23720 20 6e 52 65 66 49 6e 69 74 4d 75 74 65 78 3b 20   nRefInitMutex; 
23730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
23740 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73 65 72  * Number of user
23750 73 20 6f 66 20 70 49 6e 69 74 4d 75 74 65 78 20  s of pInitMutex 
23760 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  */.  sqlite3_mut
23770 65 78 20 2a 70 49 6e 69 74 4d 75 74 65 78 3b 20  ex *pInitMutex; 
23780 20 20 20 20 20 20 20 2f 2a 20 4d 75 74 65 78 20         /* Mutex 
23790 75 73 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  used by sqlite3_
237a0 69 6e 69 74 69 61 6c 69 7a 65 28 29 20 2a 2f 0a  initialize() */.
237b0 20 20 76 6f 69 64 20 28 2a 78 4c 6f 67 29 28 76    void (*xLog)(v
237c0 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  oid*,int,const c
237d0 68 61 72 2a 29 3b 20 2f 2a 20 46 75 6e 63 74 69  har*); /* Functi
237e0 6f 6e 20 66 6f 72 20 6c 6f 67 67 69 6e 67 20 2a  on for logging *
237f0 2f 0a 20 20 76 6f 69 64 20 2a 70 4c 6f 67 41 72  /.  void *pLogAr
23800 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
23810 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
23820 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 4c  t argument to xL
23830 6f 67 28 29 20 2a 2f 0a 23 69 66 64 65 66 20 53  og() */.#ifdef S
23840 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 51 4c  QLITE_ENABLE_SQL
23850 4c 4f 47 0a 20 20 76 6f 69 64 28 2a 78 53 71 6c  LOG.  void(*xSql
23860 6c 6f 67 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74  log)(void*,sqlit
23870 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
23880 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70   int);.  void *p
23890 53 71 6c 6c 6f 67 41 72 67 3b 0a 23 65 6e 64 69  SqllogArg;.#endi
238a0 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  f.#ifdef SQLITE_
238b0 56 44 42 45 5f 43 4f 56 45 52 41 47 45 0a 20 20  VDBE_COVERAGE.  
238c0 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  /* The following
238d0 20 63 61 6c 6c 62 61 63 6b 20 28 69 66 20 6e 6f   callback (if no
238e0 74 20 4e 55 4c 4c 29 20 69 73 20 69 6e 76 6f 6b  t NULL) is invok
238f0 65 64 20 6f 6e 20 65 76 65 72 79 20 56 44 42 45  ed on every VDBE
23900 20 62 72 61 6e 63 68 0a 20 20 2a 2a 20 6f 70 65   branch.  ** ope
23910 72 61 74 69 6f 6e 2e 20 20 53 65 74 20 74 68 65  ration.  Set the
23920 20 63 61 6c 6c 62 61 63 6b 20 75 73 69 6e 67 20   callback using 
23930 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f  SQLITE_TESTCTRL_
23940 56 44 42 45 5f 43 4f 56 45 52 41 47 45 2e 0a 20  VDBE_COVERAGE.. 
23950 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 56 64   */.  void (*xVd
23960 62 65 42 72 61 6e 63 68 29 28 76 6f 69 64 2a 2c  beBranch)(void*,
23970 69 6e 74 20 69 53 72 63 4c 69 6e 65 2c 75 38 20  int iSrcLine,u8 
23980 65 54 68 69 73 2c 75 38 20 65 4d 78 29 3b 20 20  eThis,u8 eMx);  
23990 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  /* Callback */. 
239a0 20 76 6f 69 64 20 2a 70 56 64 62 65 42 72 61 6e   void *pVdbeBran
239b0 63 68 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  chArg;          
239c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
239d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73             /* 1s
239e0 74 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 23 65  t argument */.#e
239f0 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
23a00 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 20  ITE_UNTESTABLE. 
23a10 20 69 6e 74 20 28 2a 78 54 65 73 74 43 61 6c 6c   int (*xTestCall
23a20 62 61 63 6b 29 28 69 6e 74 29 3b 20 20 20 20 20  back)(int);     
23a30 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 62 79     /* Invoked by
23a40 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d   sqlite3FaultSim
23a50 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69  () */.#endif.  i
23a60 6e 74 20 62 4c 6f 63 61 6c 74 69 6d 65 46 61 75  nt bLocaltimeFau
23a70 6c 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  lt;             
23a80 20 2f 2a 20 54 72 75 65 20 74 6f 20 66 61 69 6c   /* True to fail
23a90 20 6c 6f 63 61 6c 74 69 6d 65 28 29 20 63 61 6c   localtime() cal
23aa0 6c 73 20 2a 2f 0a 20 20 69 6e 74 20 69 4f 6e 63  ls */.  int iOnc
23ab0 65 52 65 73 65 74 54 68 72 65 73 68 6f 6c 64 3b  eResetThreshold;
23ac0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 65            /* Whe
23ad0 6e 20 74 6f 20 72 65 73 65 74 20 4f 50 5f 4f 6e  n to reset OP_On
23ae0 63 65 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 7d  ce counters */.}
23af0 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6d 61  ;../*.** This ma
23b00 63 72 6f 20 69 73 20 75 73 65 64 20 69 6e 73 69  cro is used insi
23b10 64 65 20 6f 66 20 61 73 73 65 72 74 28 29 20 73  de of assert() s
23b20 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 69 6e 64  tatements to ind
23b30 69 63 61 74 65 20 74 68 61 74 0a 2a 2a 20 74 68  icate that.** th
23b40 65 20 61 73 73 65 72 74 20 69 73 20 6f 6e 6c 79  e assert is only
23b50 20 76 61 6c 69 64 20 6f 6e 20 61 20 77 65 6c 6c   valid on a well
23b60 2d 66 6f 72 6d 65 64 20 64 61 74 61 62 61 73 65  -formed database
23b70 2e 20 20 49 6e 73 74 65 61 64 20 6f 66 3a 0a 2a  .  Instead of:.*
23b80 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28  *.**     assert(
23b90 20 58 20 29 3b 0a 2a 2a 0a 2a 2a 20 4f 6e 65 20   X );.**.** One 
23ba0 77 72 69 74 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20  writes:.**.**   
23bb0 20 20 61 73 73 65 72 74 28 20 58 20 7c 7c 20 43    assert( X || C
23bc0 4f 52 52 55 50 54 5f 44 42 20 29 3b 0a 2a 2a 0a  ORRUPT_DB );.**.
23bd0 2a 2a 20 43 4f 52 52 55 50 54 5f 44 42 20 69 73  ** CORRUPT_DB is
23be0 20 74 72 75 65 20 64 75 72 69 6e 67 20 6e 6f 72   true during nor
23bf0 6d 61 6c 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20  mal operation.  
23c00 43 4f 52 52 55 50 54 5f 44 42 20 64 6f 65 73 20  CORRUPT_DB does 
23c10 6e 6f 74 20 69 6e 64 69 63 61 74 65 0a 2a 2a 20  not indicate.** 
23c20 74 68 61 74 20 74 68 65 20 64 61 74 61 62 61 73  that the databas
23c30 65 20 69 73 20 64 65 66 69 6e 69 74 65 6c 79 20  e is definitely 
23c40 63 6f 72 72 75 70 74 2c 20 6f 6e 6c 79 20 74 68  corrupt, only th
23c50 61 74 20 69 74 20 6d 69 67 68 74 20 62 65 20 63  at it might be c
23c60 6f 72 72 75 70 74 2e 0a 2a 2a 20 46 6f 72 20 6d  orrupt..** For m
23c70 6f 73 74 20 74 65 73 74 20 63 61 73 65 73 2c 20  ost test cases, 
23c80 43 4f 52 52 55 50 54 5f 44 42 20 69 73 20 73 65  CORRUPT_DB is se
23c90 74 20 74 6f 20 66 61 6c 73 65 20 75 73 69 6e 67  t to false using
23ca0 20 61 20 73 70 65 63 69 61 6c 0a 2a 2a 20 73 71   a special.** sq
23cb0 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72  lite3_test_contr
23cc0 6f 6c 28 29 2e 20 20 54 68 69 73 20 65 6e 61 62  ol().  This enab
23cd0 6c 65 73 20 61 73 73 65 72 74 28 29 20 73 74 61  les assert() sta
23ce0 74 65 6d 65 6e 74 73 20 74 6f 20 70 72 6f 76 65  tements to prove
23cf0 0a 2a 2a 20 74 68 69 6e 67 73 20 74 68 61 74 20  .** things that 
23d00 61 72 65 20 61 6c 77 61 79 73 20 74 72 75 65 20  are always true 
23d10 66 6f 72 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20  for well-formed 
23d20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 64  databases..*/.#d
23d30 65 66 69 6e 65 20 43 4f 52 52 55 50 54 5f 44 42  efine CORRUPT_DB
23d40 20 20 28 73 71 6c 69 74 65 33 43 6f 6e 66 69 67    (sqlite3Config
23d50 2e 6e 65 76 65 72 43 6f 72 72 75 70 74 3d 3d 30  .neverCorrupt==0
23d60 29 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74 65 78 74  )../*.** Context
23d70 20 70 6f 69 6e 74 65 72 20 70 61 73 73 65 64 20   pointer passed 
23d80 64 6f 77 6e 20 74 68 72 6f 75 67 68 20 74 68 65  down through the
23d90 20 74 72 65 65 2d 77 61 6c 6b 2e 0a 2a 2f 0a 73   tree-walk..*/.s
23da0 74 72 75 63 74 20 57 61 6c 6b 65 72 20 7b 0a 20  truct Walker {. 
23db0 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20   Parse *pParse; 
23dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23dd0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61             /* Pa
23de0 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 2a  rser context.  *
23df0 2f 0a 20 20 69 6e 74 20 28 2a 78 45 78 70 72 43  /.  int (*xExprC
23e00 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a  allback)(Walker*
23e10 2c 20 45 78 70 72 2a 29 3b 20 20 20 20 20 2f 2a  , Expr*);     /*
23e20 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20 65 78   Callback for ex
23e30 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69  pressions */.  i
23e40 6e 74 20 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c  nt (*xSelectCall
23e50 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 53 65  back)(Walker*,Se
23e60 6c 65 63 74 2a 29 3b 20 20 2f 2a 20 43 61 6c 6c  lect*);  /* Call
23e70 62 61 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73  back for SELECTs
23e80 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 65   */.  void (*xSe
23e90 6c 65 63 74 43 61 6c 6c 62 61 63 6b 32 29 28 57  lectCallback2)(W
23ea0 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b  alker*,Select*);
23eb0 2f 2a 20 53 65 63 6f 6e 64 20 63 61 6c 6c 62 61  /* Second callba
23ec0 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20 2a  ck for SELECTs *
23ed0 2f 0a 20 20 69 6e 74 20 77 61 6c 6b 65 72 44 65  /.  int walkerDe
23ee0 70 74 68 3b 20 20 20 20 20 20 20 20 20 20 20 20  pth;            
23ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
23f00 20 4e 75 6d 62 65 72 20 6f 66 20 73 75 62 71 75   Number of subqu
23f10 65 72 69 65 73 20 2a 2f 0a 20 20 75 38 20 65 43  eries */.  u8 eC
23f20 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ode;            
23f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f40 20 20 20 20 20 2f 2a 20 41 20 73 6d 61 6c 6c 20       /* A small 
23f50 70 72 6f 63 65 73 73 69 6e 67 20 63 6f 64 65 20  processing code 
23f60 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 20 20 20 20  */.  union {    
23f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
23f90 2a 20 45 78 74 72 61 20 64 61 74 61 20 66 6f 72  * Extra data for
23fa0 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 20   callback */.   
23fb0 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e   NameContext *pN
23fc0 43 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  C;              
23fd0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61             /* Na
23fe0 6d 69 6e 67 20 63 6f 6e 74 65 78 74 20 2a 2f 0a  ming context */.
23ff0 20 20 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20      int n;      
24000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
24020 20 41 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20   A counter */.  
24030 20 20 69 6e 74 20 69 43 75 72 3b 20 20 20 20 20    int iCur;     
24040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24050 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
24060 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 2a   cursor number *
24070 2f 0a 20 20 20 20 53 72 63 4c 69 73 74 20 2a 70  /.    SrcList *p
24080 53 72 63 4c 69 73 74 3b 20 20 20 20 20 20 20 20  SrcList;        
24090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
240a0 2f 2a 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a  /* FROM clause *
240b0 2f 0a 20 20 20 20 73 74 72 75 63 74 20 53 72 63  /.    struct Src
240c0 43 6f 75 6e 74 20 2a 70 53 72 63 43 6f 75 6e 74  Count *pSrcCount
240d0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
240e0 2f 2a 20 43 6f 75 6e 74 69 6e 67 20 63 6f 6c 75  /* Counting colu
240f0 6d 6e 20 72 65 66 65 72 65 6e 63 65 73 20 2a 2f  mn references */
24100 0a 20 20 20 20 73 74 72 75 63 74 20 43 43 75 72  .    struct CCur
24110 48 69 6e 74 20 2a 70 43 43 75 72 48 69 6e 74 3b  Hint *pCCurHint;
24120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
24130 2a 20 55 73 65 64 20 62 79 20 63 6f 64 65 43 75  * Used by codeCu
24140 72 73 6f 72 48 69 6e 74 28 29 20 2a 2f 0a 20 20  rsorHint() */.  
24150 20 20 69 6e 74 20 2a 61 69 43 6f 6c 3b 20 20 20    int *aiCol;   
24160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24170 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 61              /* a
24180 72 72 61 79 20 6f 66 20 63 6f 6c 75 6d 6e 20 69  rray of column i
24190 6e 64 65 78 65 73 20 2a 2f 0a 20 20 20 20 73 74  ndexes */.    st
241a0 72 75 63 74 20 49 64 78 43 6f 76 65 72 20 2a 70  ruct IdxCover *p
241b0 49 64 78 43 6f 76 65 72 3b 20 20 20 20 20 20 20  IdxCover;       
241c0 20 20 20 20 20 20 20 20 2f 2a 20 43 68 65 63 6b          /* Check
241d0 20 66 6f 72 20 69 6e 64 65 78 20 63 6f 76 65 72   for index cover
241e0 61 67 65 20 2a 2f 0a 20 20 20 20 73 74 72 75 63  age */.    struc
241f0 74 20 49 64 78 45 78 70 72 54 72 61 6e 73 20 2a  t IdxExprTrans *
24200 70 49 64 78 54 72 61 6e 73 3b 20 20 20 20 20 20  pIdxTrans;      
24210 20 20 20 20 20 2f 2a 20 43 6f 6e 76 65 72 74 20       /* Convert 
24220 69 6e 64 65 78 65 64 20 65 78 70 72 20 74 6f 20  indexed expr to 
24230 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 20 20 45 78  column */.    Ex
24240 70 72 4c 69 73 74 20 2a 70 47 72 6f 75 70 42 79  prList *pGroupBy
24250 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
24260 20 20 20 20 20 20 20 20 2f 2a 20 47 52 4f 55 50          /* GROUP
24270 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20   BY clause */.  
24280 20 20 73 74 72 75 63 74 20 48 61 76 69 6e 67 54    struct HavingT
24290 6f 57 68 65 72 65 43 74 78 20 2a 70 48 61 76 69  oWhereCtx *pHavi
242a0 6e 67 43 74 78 3b 20 20 20 20 20 20 2f 2a 20 48  ngCtx;      /* H
242b0 41 56 49 4e 47 20 74 6f 20 57 48 45 52 45 20 63  AVING to WHERE c
242c0 6c 61 75 73 65 20 63 74 78 20 2a 2f 0a 20 20 7d  lause ctx */.  }
242d0 20 75 3b 0a 7d 3b 0a 0a 2f 2a 20 46 6f 72 77 61   u;.};../* Forwa
242e0 72 64 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20  rd declarations 
242f0 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61  */.int sqlite3Wa
24300 6c 6b 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20  lkExpr(Walker*, 
24310 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
24320 74 65 33 57 61 6c 6b 45 78 70 72 4c 69 73 74 28  te3WalkExprList(
24330 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 4c 69 73  Walker*, ExprLis
24340 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
24350 57 61 6c 6b 53 65 6c 65 63 74 28 57 61 6c 6b 65  WalkSelect(Walke
24360 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e  r*, Select*);.in
24370 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c  t sqlite3WalkSel
24380 65 63 74 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c  ectExpr(Walker*,
24390 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73   Select*);.int s
243a0 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74  qlite3WalkSelect
243b0 46 72 6f 6d 28 57 61 6c 6b 65 72 2a 2c 20 53 65  From(Walker*, Se
243c0 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  lect*);.int sqli
243d0 74 65 33 45 78 70 72 57 61 6c 6b 4e 6f 6f 70 28  te3ExprWalkNoop(
243e0 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b  Walker*, Expr*);
243f0 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65  .int sqlite3Sele
24400 63 74 57 61 6c 6b 4e 6f 6f 70 28 57 61 6c 6b 65  ctWalkNoop(Walke
24410 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e  r*, Select*);.in
24420 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 57  t sqlite3SelectW
24430 61 6c 6b 46 61 69 6c 28 57 61 6c 6b 65 72 2a 2c  alkFail(Walker*,
24440 20 53 65 6c 65 63 74 2a 29 3b 0a 23 69 66 64 65   Select*);.#ifde
24450 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 76  f SQLITE_DEBUG.v
24460 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63  oid sqlite3Selec
24470 74 57 61 6c 6b 41 73 73 65 72 74 32 28 57 61 6c  tWalkAssert2(Wal
24480 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  ker*, Select*);.
24490 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65  #endif../*.** Re
244a0 74 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20 74  turn code from t
244b0 68 65 20 70 61 72 73 65 2d 74 72 65 65 20 77 61  he parse-tree wa
244c0 6c 6b 69 6e 67 20 70 72 69 6d 69 74 69 76 65 73  lking primitives
244d0 20 61 6e 64 20 74 68 65 69 72 0a 2a 2a 20 63 61   and their.** ca
244e0 6c 6c 62 61 63 6b 73 2e 0a 2a 2f 0a 23 64 65 66  llbacks..*/.#def
244f0 69 6e 65 20 57 52 43 5f 43 6f 6e 74 69 6e 75 65  ine WRC_Continue
24500 20 20 20 20 30 20 20 20 2f 2a 20 43 6f 6e 74 69      0   /* Conti
24510 6e 75 65 20 64 6f 77 6e 20 69 6e 74 6f 20 63 68  nue down into ch
24520 69 6c 64 72 65 6e 20 2a 2f 0a 23 64 65 66 69 6e  ildren */.#defin
24530 65 20 57 52 43 5f 50 72 75 6e 65 20 20 20 20 20  e WRC_Prune     
24540 20 20 31 20 20 20 2f 2a 20 4f 6d 69 74 20 63 68    1   /* Omit ch
24550 69 6c 64 72 65 6e 20 62 75 74 20 63 6f 6e 74 69  ildren but conti
24560 6e 75 65 20 77 61 6c 6b 69 6e 67 20 73 69 62 6c  nue walking sibl
24570 69 6e 67 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ings */.#define 
24580 57 52 43 5f 41 62 6f 72 74 20 20 20 20 20 20 20  WRC_Abort       
24590 32 20 20 20 2f 2a 20 41 62 61 6e 64 6f 6e 20 74  2   /* Abandon t
245a0 68 65 20 74 72 65 65 20 77 61 6c 6b 20 2a 2f 0a  he tree walk */.
245b0 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
245c0 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ce of this struc
245d0 74 75 72 65 20 72 65 70 72 65 73 65 6e 74 73 20  ture represents 
245e0 61 20 73 65 74 20 6f 66 20 6f 6e 65 20 6f 72 20  a set of one or 
245f0 6d 6f 72 65 20 43 54 45 73 0a 2a 2a 20 28 63 6f  more CTEs.** (co
24600 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65  mmon table expre
24610 73 73 69 6f 6e 73 29 20 63 72 65 61 74 65 64 20  ssions) created 
24620 62 79 20 61 20 73 69 6e 67 6c 65 20 57 49 54 48  by a single WITH
24630 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75   clause..*/.stru
24640 63 74 20 57 69 74 68 20 7b 0a 20 20 69 6e 74 20  ct With {.  int 
24650 6e 43 74 65 3b 20 20 20 20 20 20 20 20 20 20 20  nCte;           
24660 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
24670 75 6d 62 65 72 20 6f 66 20 43 54 45 73 20 69 6e  umber of CTEs in
24680 20 74 68 65 20 57 49 54 48 20 63 6c 61 75 73 65   the WITH clause
24690 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 4f 75 74   */.  With *pOut
246a0 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  er;             
246b0 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 61 69 6e        /* Contain
246c0 69 6e 67 20 57 49 54 48 20 63 6c 61 75 73 65 2c  ing WITH clause,
246d0 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 73 74   or NULL */.  st
246e0 72 75 63 74 20 43 74 65 20 7b 20 20 20 20 20 20  ruct Cte {      
246f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
24700 20 46 6f 72 20 65 61 63 68 20 43 54 45 20 69 6e   For each CTE in
24710 20 74 68 65 20 57 49 54 48 20 63 6c 61 75 73 65   the WITH clause
24720 2e 2e 2e 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72  .... */.    char
24730 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
24740 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
24750 61 6d 65 20 6f 66 20 74 68 69 73 20 43 54 45 20  ame of this CTE 
24760 2a 2f 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20  */.    ExprList 
24770 2a 70 43 6f 6c 73 3b 20 20 20 20 20 20 20 20 20  *pCols;         
24780 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f         /* List o
24790 66 20 65 78 70 6c 69 63 69 74 20 63 6f 6c 75 6d  f explicit colum
247a0 6e 20 6e 61 6d 65 73 2c 20 6f 72 20 4e 55 4c 4c  n names, or NULL
247b0 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a   */.    Select *
247c0 70 53 65 6c 65 63 74 3b 20 20 20 20 20 20 20 20  pSelect;        
247d0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64          /* The d
247e0 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 74 68 69  efinition of thi
247f0 73 20 43 54 45 20 2a 2f 0a 20 20 20 20 63 6f 6e  s CTE */.    con
24800 73 74 20 63 68 61 72 20 2a 7a 43 74 65 45 72 72  st char *zCteErr
24810 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
24820 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20 66 6f  Error message fo
24830 72 20 63 69 72 63 75 6c 61 72 20 72 65 66 65 72  r circular refer
24840 65 6e 63 65 73 20 2a 2f 0a 20 20 7d 20 61 5b 31  ences */.  } a[1
24850 5d 3b 0a 7d 3b 0a 0a 23 69 66 64 65 66 20 53 51  ];.};..#ifdef SQ
24860 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a  LITE_DEBUG./*.**
24870 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
24880 74 68 65 20 54 72 65 65 56 69 65 77 20 6f 62 6a  the TreeView obj
24890 65 63 74 20 69 73 20 75 73 65 64 20 66 6f 72 20  ect is used for 
248a0 70 72 69 6e 74 69 6e 67 20 74 68 65 20 63 6f 6e  printing the con
248b0 74 65 6e 74 20 6f 66 0a 2a 2a 20 64 61 74 61 20  tent of.** data 
248c0 73 74 72 75 63 74 75 72 65 73 20 6f 6e 20 73 71  structures on sq
248d0 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e 74 66  lite3DebugPrintf
248e0 28 29 20 75 73 69 6e 67 20 61 20 74 72 65 65 2d  () using a tree-
248f0 6c 69 6b 65 20 76 69 65 77 2e 0a 2a 2f 0a 73 74  like view..*/.st
24900 72 75 63 74 20 54 72 65 65 56 69 65 77 20 7b 0a  ruct TreeView {.
24910 20 20 69 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20    int iLevel;   
24920 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69            /* Whi
24930 63 68 20 6c 65 76 65 6c 20 6f 66 20 74 68 65 20  ch level of the 
24940 74 72 65 65 20 77 65 20 61 72 65 20 6f 6e 20 2a  tree we are on *
24950 2f 0a 20 20 75 38 20 20 62 4c 69 6e 65 5b 31 30  /.  u8  bLine[10
24960 30 5d 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 44  0];         /* D
24970 72 61 77 20 76 65 72 74 69 63 61 6c 20 69 6e 20  raw vertical in 
24980 63 6f 6c 75 6d 6e 20 69 20 69 66 20 62 4c 69 6e  column i if bLin
24990 65 5b 69 5d 20 69 73 20 74 72 75 65 20 2a 2f 0a  e[i] is true */.
249a0 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  };.#endif /* SQL
249b0 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 0a 2f 2a  ITE_DEBUG */../*
249c0 0a 2a 2a 20 41 73 73 75 6d 69 6e 67 20 7a 49 6e  .** Assuming zIn
249d0 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66   points to the f
249e0 69 72 73 74 20 62 79 74 65 20 6f 66 20 61 20 55  irst byte of a U
249f0 54 46 2d 38 20 63 68 61 72 61 63 74 65 72 2c 0a  TF-8 character,.
24a00 2a 2a 20 61 64 76 61 6e 63 65 20 7a 49 6e 20 74  ** advance zIn t
24a10 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 66  o point to the f
24a20 69 72 73 74 20 62 79 74 65 20 6f 66 20 74 68 65  irst byte of the
24a30 20 6e 65 78 74 20 55 54 46 2d 38 20 63 68 61 72   next UTF-8 char
24a40 61 63 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e  acter..*/.#defin
24a50 65 20 53 51 4c 49 54 45 5f 53 4b 49 50 5f 55 54  e SQLITE_SKIP_UT
24a60 46 38 28 7a 49 6e 29 20 7b 20 20 20 20 20 20 20  F8(zIn) {       
24a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a80 20 5c 0a 20 20 69 66 28 20 28 2a 28 7a 49 6e 2b   \.  if( (*(zIn+
24a90 2b 29 29 3e 3d 30 78 63 30 20 29 7b 20 20 20 20  +))>=0xc0 ){    
24aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ab0 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 20 20            \.    
24ac0 77 68 69 6c 65 28 20 28 2a 7a 49 6e 20 26 20 30  while( (*zIn & 0
24ad0 78 63 30 29 3d 3d 30 78 38 30 20 29 7b 20 7a 49  xc0)==0x80 ){ zI
24ae0 6e 2b 2b 3b 20 7d 20 20 20 20 20 20 20 20 20 20  n++; }          
24af0 20 20 20 5c 0a 20 20 7d 20 20 20 20 20 20 20 20     \.  }        
24b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 7d 0a              \.}.
24b30 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54  ./*.** The SQLIT
24b40 45 5f 2a 5f 42 4b 50 54 20 6d 61 63 72 6f 73 20  E_*_BKPT macros 
24b50 61 72 65 20 73 75 62 73 74 69 74 75 74 65 73 20  are substitutes 
24b60 66 6f 72 20 74 68 65 20 65 72 72 6f 72 20 63 6f  for the error co
24b70 64 65 73 20 77 69 74 68 0a 2a 2a 20 74 68 65 20  des with.** the 
24b80 73 61 6d 65 20 6e 61 6d 65 20 62 75 74 20 77 69  same name but wi
24b90 74 68 6f 75 74 20 74 68 65 20 5f 42 4b 50 54 20  thout the _BKPT 
24ba0 73 75 66 66 69 78 2e 20 20 54 68 65 73 65 20 6d  suffix.  These m
24bb0 61 63 72 6f 73 20 69 6e 76 6f 6b 65 0a 2a 2a 20  acros invoke.** 
24bc0 72 6f 75 74 69 6e 65 73 20 74 68 61 74 20 72 65  routines that re
24bd0 70 6f 72 74 20 74 68 65 20 6c 69 6e 65 2d 6e 75  port the line-nu
24be0 6d 62 65 72 20 6f 6e 20 77 68 69 63 68 20 74 68  mber on which th
24bf0 65 20 65 72 72 6f 72 20 6f 72 69 67 69 6e 61 74  e error originat
24c00 65 64 0a 2a 2a 20 75 73 69 6e 67 20 73 71 6c 69  ed.** using sqli
24c10 74 65 33 5f 6c 6f 67 28 29 2e 20 20 54 68 65 20  te3_log().  The 
24c20 72 6f 75 74 69 6e 65 73 20 61 6c 73 6f 20 70 72  routines also pr
24c30 6f 76 69 64 65 20 61 20 63 6f 6e 76 65 6e 69 65  ovide a convenie
24c40 6e 74 20 70 6c 61 63 65 0a 2a 2a 20 74 6f 20 73  nt place.** to s
24c50 65 74 20 61 20 64 65 62 75 67 67 65 72 20 62 72  et a debugger br
24c60 65 61 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a 69 6e 74  eakpoint..*/.int
24c70 20 73 71 6c 69 74 65 33 52 65 70 6f 72 74 45 72   sqlite3ReportEr
24c80 72 6f 72 28 69 6e 74 20 69 45 72 72 2c 20 69 6e  ror(int iErr, in
24c90 74 20 6c 69 6e 65 6e 6f 2c 20 63 6f 6e 73 74 20  t lineno, const 
24ca0 63 68 61 72 20 2a 7a 54 79 70 65 29 3b 0a 69 6e  char *zType);.in
24cb0 74 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74  t sqlite3Corrupt
24cc0 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20  Error(int);.int 
24cd0 73 71 6c 69 74 65 33 4d 69 73 75 73 65 45 72 72  sqlite3MisuseErr
24ce0 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  or(int);.int sql
24cf0 69 74 65 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f  ite3CantopenErro
24d00 72 28 69 6e 74 29 3b 0a 23 64 65 66 69 6e 65 20  r(int);.#define 
24d10 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42  SQLITE_CORRUPT_B
24d20 4b 50 54 20 73 71 6c 69 74 65 33 43 6f 72 72 75  KPT sqlite3Corru
24d30 70 74 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f  ptError(__LINE__
24d40 29 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  ).#define SQLITE
24d50 5f 4d 49 53 55 53 45 5f 42 4b 50 54 20 73 71 6c  _MISUSE_BKPT sql
24d60 69 74 65 33 4d 69 73 75 73 65 45 72 72 6f 72 28  ite3MisuseError(
24d70 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e  __LINE__).#defin
24d80 65 20 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45  e SQLITE_CANTOPE
24d90 4e 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 43 61  N_BKPT sqlite3Ca
24da0 6e 74 6f 70 65 6e 45 72 72 6f 72 28 5f 5f 4c 49  ntopenError(__LI
24db0 4e 45 5f 5f 29 0a 23 69 66 64 65 66 20 53 51 4c  NE__).#ifdef SQL
24dc0 49 54 45 5f 44 45 42 55 47 0a 20 20 69 6e 74 20  ITE_DEBUG.  int 
24dd0 73 71 6c 69 74 65 33 4e 6f 6d 65 6d 45 72 72 6f  sqlite3NomemErro
24de0 72 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71  r(int);.  int sq
24df0 6c 69 74 65 33 49 6f 65 72 72 6e 6f 6d 65 6d 45  lite3IoerrnomemE
24e00 72 72 6f 72 28 69 6e 74 29 3b 0a 20 20 69 6e 74  rror(int);.  int
24e10 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74 50   sqlite3CorruptP
24e20 67 6e 6f 45 72 72 6f 72 28 69 6e 74 2c 50 67 6e  gnoError(int,Pgn
24e30 6f 29 3b 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  o);.# define SQL
24e40 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20 73  ITE_NOMEM_BKPT s
24e50 71 6c 69 74 65 33 4e 6f 6d 65 6d 45 72 72 6f 72  qlite3NomemError
24e60 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 20 64 65 66  (__LINE__).# def
24e70 69 6e 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52  ine SQLITE_IOERR
24e80 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20 73 71 6c 69  _NOMEM_BKPT sqli
24e90 74 65 33 49 6f 65 72 72 6e 6f 6d 65 6d 45 72 72  te3IoerrnomemErr
24ea0 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 20 64  or(__LINE__).# d
24eb0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52  efine SQLITE_COR
24ec0 52 55 50 54 5f 50 47 4e 4f 28 50 29 20 73 71 6c  RUPT_PGNO(P) sql
24ed0 69 74 65 33 43 6f 72 72 75 70 74 50 67 6e 6f 45  ite3CorruptPgnoE
24ee0 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 2c 28 50  rror(__LINE__,(P
24ef0 29 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  )).#else.# defin
24f00 65 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42  e SQLITE_NOMEM_B
24f10 4b 50 54 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  KPT SQLITE_NOMEM
24f20 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
24f30 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 5f 42 4b 50  _IOERR_NOMEM_BKP
24f40 54 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e  T SQLITE_IOERR_N
24f50 4f 4d 45 4d 0a 23 20 64 65 66 69 6e 65 20 53 51  OMEM.# define SQ
24f60 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 50 47 4e  LITE_CORRUPT_PGN
24f70 4f 28 50 29 20 73 71 6c 69 74 65 33 43 6f 72 72  O(P) sqlite3Corr
24f80 75 70 74 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f  uptError(__LINE_
24f90 5f 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  _).#endif../*.**
24fa0 20 46 54 53 33 20 61 6e 64 20 46 54 53 34 20 62   FTS3 and FTS4 b
24fb0 6f 74 68 20 72 65 71 75 69 72 65 20 76 69 72 74  oth require virt
24fc0 75 61 6c 20 74 61 62 6c 65 20 73 75 70 70 6f 72  ual table suppor
24fd0 74 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  t.*/.#if defined
24fe0 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52  (SQLITE_OMIT_VIR
24ff0 54 55 41 4c 54 41 42 4c 45 29 0a 23 20 75 6e 64  TUALTABLE).# und
25000 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
25010 5f 46 54 53 33 0a 23 20 75 6e 64 65 66 20 53 51  _FTS3.# undef SQ
25020 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34  LITE_ENABLE_FTS4
25030 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46  .#endif../*.** F
25040 54 53 34 20 69 73 20 72 65 61 6c 6c 79 20 61 6e  TS4 is really an
25050 20 65 78 74 65 6e 73 69 6f 6e 20 66 6f 72 20 46   extension for F
25060 54 53 33 2e 20 20 49 74 20 69 73 20 65 6e 61 62  TS3.  It is enab
25070 6c 65 64 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a  led using the.**
25080 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46   SQLITE_ENABLE_F
25090 54 53 33 20 6d 61 63 72 6f 2e 20 20 42 75 74 20  TS3 macro.  But 
250a0 74 6f 20 61 76 6f 69 64 20 63 6f 6e 66 75 73 69  to avoid confusi
250b0 6f 6e 20 77 65 20 61 6c 73 6f 20 63 61 6c 6c 0a  on we also call.
250c0 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e  ** the SQLITE_EN
250d0 41 42 4c 45 5f 46 54 53 34 20 6d 61 63 72 6f 20  ABLE_FTS4 macro 
250e0 74 6f 20 73 65 72 76 65 20 61 73 20 61 6e 20 61  to serve as an a
250f0 6c 69 61 73 20 66 6f 72 20 53 51 4c 49 54 45 5f  lias for SQLITE_
25100 45 4e 41 42 4c 45 5f 46 54 53 33 2e 0a 2a 2f 0a  ENABLE_FTS3..*/.
25110 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
25120 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 29 20  TE_ENABLE_FTS4) 
25130 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
25140 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29 0a  TE_ENABLE_FTS3).
25150 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
25160 45 4e 41 42 4c 45 5f 46 54 53 33 20 31 0a 23 65  ENABLE_FTS3 1.#e
25170 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
25180 63 74 79 70 65 2e 68 20 68 65 61 64 65 72 20 69  ctype.h header i
25190 73 20 6e 65 65 64 65 64 20 66 6f 72 20 6e 6f 6e  s needed for non
251a0 2d 41 53 43 49 49 20 73 79 73 74 65 6d 73 2e 20  -ASCII systems. 
251b0 20 49 74 20 69 73 20 61 6c 73 6f 0a 2a 2a 20 6e   It is also.** n
251c0 65 65 64 65 64 20 62 79 20 46 54 53 33 20 77 68  eeded by FTS3 wh
251d0 65 6e 20 46 54 53 33 20 69 73 20 69 6e 63 6c 75  en FTS3 is inclu
251e0 64 65 64 20 69 6e 20 74 68 65 20 61 6d 61 6c 67  ded in the amalg
251f0 61 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 20  amation..*/.#if 
25200 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
25210 41 53 43 49 49 29 20 7c 7c 20 5c 0a 20 20 20 20  ASCII) || \.    
25220 28 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  (defined(SQLITE_
25230 45 4e 41 42 4c 45 5f 46 54 53 33 29 20 26 26 20  ENABLE_FTS3) && 
25240 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 41  defined(SQLITE_A
25250 4d 41 4c 47 41 4d 41 54 49 4f 4e 29 29 0a 23 20  MALGAMATION)).# 
25260 69 6e 63 6c 75 64 65 20 3c 63 74 79 70 65 2e 68  include <ctype.h
25270 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  >.#endif../*.** 
25280 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
25290 63 72 6f 73 20 6d 69 6d 69 63 20 74 68 65 20 73  cros mimic the s
252a0 74 61 6e 64 61 72 64 20 6c 69 62 72 61 72 79 20  tandard library 
252b0 66 75 6e 63 74 69 6f 6e 73 20 74 6f 75 70 70 65  functions touppe
252c0 72 28 29 2c 0a 2a 2a 20 69 73 73 70 61 63 65 28  r(),.** isspace(
252d0 29 2c 20 69 73 61 6c 6e 75 6d 28 29 2c 20 69 73  ), isalnum(), is
252e0 64 69 67 69 74 28 29 20 61 6e 64 20 69 73 78 64  digit() and isxd
252f0 69 67 69 74 28 29 2c 20 72 65 73 70 65 63 74 69  igit(), respecti
25300 76 65 6c 79 2e 20 54 68 65 0a 2a 2a 20 73 71 6c  vely. The.** sql
25310 69 74 65 20 76 65 72 73 69 6f 6e 73 20 6f 6e 6c  ite versions onl
25320 79 20 77 6f 72 6b 20 66 6f 72 20 41 53 43 49 49  y work for ASCII
25330 20 63 68 61 72 61 63 74 65 72 73 2c 20 72 65 67   characters, reg
25340 61 72 64 6c 65 73 73 20 6f 66 20 6c 6f 63 61 6c  ardless of local
25350 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  e..*/.#ifdef SQL
25360 49 54 45 5f 41 53 43 49 49 0a 23 20 64 65 66 69  ITE_ASCII.# defi
25370 6e 65 20 73 71 6c 69 74 65 33 54 6f 75 70 70 65  ne sqlite3Touppe
25380 72 28 78 29 20 20 28 28 78 29 26 7e 28 73 71 6c  r(x)  ((x)&~(sql
25390 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
253a0 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
253b0 26 30 78 32 30 29 29 0a 23 20 64 65 66 69 6e 65  &0x20)).# define
253c0 20 73 71 6c 69 74 65 33 49 73 73 70 61 63 65 28   sqlite3Isspace(
253d0 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79  x)   (sqlite3Cty
253e0 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20  peMap[(unsigned 
253f0 63 68 61 72 29 28 78 29 5d 26 30 78 30 31 29 0a  char)(x)]&0x01).
25400 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
25410 49 73 61 6c 6e 75 6d 28 78 29 20 20 20 28 73 71  Isalnum(x)   (sq
25420 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75  lite3CtypeMap[(u
25430 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
25440 5d 26 30 78 30 36 29 0a 23 20 64 65 66 69 6e 65  ]&0x06).# define
25450 20 73 71 6c 69 74 65 33 49 73 61 6c 70 68 61 28   sqlite3Isalpha(
25460 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79  x)   (sqlite3Cty
25470 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20  peMap[(unsigned 
25480 63 68 61 72 29 28 78 29 5d 26 30 78 30 32 29 0a  char)(x)]&0x02).
25490 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
254a0 49 73 64 69 67 69 74 28 78 29 20 20 20 28 73 71  Isdigit(x)   (sq
254b0 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75  lite3CtypeMap[(u
254c0 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
254d0 5d 26 30 78 30 34 29 0a 23 20 64 65 66 69 6e 65  ]&0x04).# define
254e0 20 73 71 6c 69 74 65 33 49 73 78 64 69 67 69 74   sqlite3Isxdigit
254f0 28 78 29 20 20 28 73 71 6c 69 74 65 33 43 74 79  (x)  (sqlite3Cty
25500 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20  peMap[(unsigned 
25510 63 68 61 72 29 28 78 29 5d 26 30 78 30 38 29 0a  char)(x)]&0x08).
25520 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
25530 54 6f 6c 6f 77 65 72 28 78 29 20 20 20 28 73 71  Tolower(x)   (sq
25540 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f 77 65  lite3UpperToLowe
25550 72 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  r[(unsigned char
25560 29 28 78 29 5d 29 0a 23 20 64 65 66 69 6e 65 20  )(x)]).# define 
25570 73 71 6c 69 74 65 33 49 73 71 75 6f 74 65 28 78  sqlite3Isquote(x
25580 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  )   (sqlite3Ctyp
25590 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
255a0 68 61 72 29 28 78 29 5d 26 30 78 38 30 29 0a 23  har)(x)]&0x80).#
255b0 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
255c0 6c 69 74 65 33 54 6f 75 70 70 65 72 28 78 29 20  lite3Toupper(x) 
255d0 20 20 74 6f 75 70 70 65 72 28 28 75 6e 73 69 67    toupper((unsig
255e0 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
255f0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
25600 73 70 61 63 65 28 78 29 20 20 20 69 73 73 70 61  space(x)   isspa
25610 63 65 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ce((unsigned cha
25620 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
25630 73 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78  sqlite3Isalnum(x
25640 29 20 20 20 69 73 61 6c 6e 75 6d 28 28 75 6e 73  )   isalnum((uns
25650 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
25660 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
25670 49 73 61 6c 70 68 61 28 78 29 20 20 20 69 73 61  Isalpha(x)   isa
25680 6c 70 68 61 28 28 75 6e 73 69 67 6e 65 64 20 63  lpha((unsigned c
25690 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
256a0 65 20 73 71 6c 69 74 65 33 49 73 64 69 67 69 74  e sqlite3Isdigit
256b0 28 78 29 20 20 20 69 73 64 69 67 69 74 28 28 75  (x)   isdigit((u
256c0 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
256d0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
256e0 65 33 49 73 78 64 69 67 69 74 28 78 29 20 20 69  e3Isxdigit(x)  i
256f0 73 78 64 69 67 69 74 28 28 75 6e 73 69 67 6e 65  sxdigit((unsigne
25700 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65  d char)(x)).# de
25710 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f  fine sqlite3Tolo
25720 77 65 72 28 78 29 20 20 20 74 6f 6c 6f 77 65 72  wer(x)   tolower
25730 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
25740 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (x)).# define sq
25750 6c 69 74 65 33 49 73 71 75 6f 74 65 28 78 29 20  lite3Isquote(x) 
25760 20 20 28 28 78 29 3d 3d 27 22 27 7c 7c 28 78 29    ((x)=='"'||(x)
25770 3d 3d 27 5c 27 27 7c 7c 28 78 29 3d 3d 27 5b 27  =='\''||(x)=='['
25780 7c 7c 28 78 29 3d 3d 27 60 27 29 0a 23 65 6e 64  ||(x)=='`').#end
25790 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
257a0 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f 50  E_OMIT_COMPILEOP
257b0 54 49 4f 4e 5f 44 49 41 47 53 0a 69 6e 74 20 73  TION_DIAGS.int s
257c0 71 6c 69 74 65 33 49 73 49 64 43 68 61 72 28 75  qlite3IsIdChar(u
257d0 38 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  8);.#endif../*.*
257e0 2a 20 49 6e 74 65 72 6e 61 6c 20 66 75 6e 63 74  * Internal funct
257f0 69 6f 6e 20 70 72 6f 74 6f 74 79 70 65 73 0a 2a  ion prototypes.*
25800 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 72  /.int sqlite3Str
25810 49 43 6d 70 28 63 6f 6e 73 74 20 63 68 61 72 2a  ICmp(const char*
25820 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69  ,const char*);.i
25830 6e 74 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  nt sqlite3Strlen
25840 33 30 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  30(const char*);
25850 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 43 6f  .char *sqlite3Co
25860 6c 75 6d 6e 54 79 70 65 28 43 6f 6c 75 6d 6e 2a  lumnType(Column*
25870 2c 63 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65  ,char*);.#define
25880 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70   sqlite3StrNICmp
25890 20 73 71 6c 69 74 65 33 5f 73 74 72 6e 69 63 6d   sqlite3_strnicm
258a0 70 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61  p..int sqlite3Ma
258b0 6c 6c 6f 63 49 6e 69 74 28 76 6f 69 64 29 3b 0a  llocInit(void);.
258c0 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 6c 6c  void sqlite3Mall
258d0 6f 63 45 6e 64 28 76 6f 69 64 29 3b 0a 76 6f 69  ocEnd(void);.voi
258e0 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  d *sqlite3Malloc
258f0 28 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  (u64);.void *sql
25900 69 74 65 33 4d 61 6c 6c 6f 63 5a 65 72 6f 28 75  ite3MallocZero(u
25910 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  64);.void *sqlit
25920 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 73  e3DbMallocZero(s
25930 71 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a 76  qlite3*, u64);.v
25940 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61  oid *sqlite3DbMa
25950 6c 6c 6f 63 52 61 77 28 73 71 6c 69 74 65 33 2a  llocRaw(sqlite3*
25960 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71  , u64);.void *sq
25970 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77  lite3DbMallocRaw
25980 4e 4e 28 73 71 6c 69 74 65 33 2a 2c 20 75 36 34  NN(sqlite3*, u64
25990 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
259a0 44 62 53 74 72 44 75 70 28 73 71 6c 69 74 65 33  DbStrDup(sqlite3
259b0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
259c0 63 68 61 72 20 2a 73 71 6c 69 74 65 33 44 62 53  char *sqlite3DbS
259d0 74 72 4e 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  trNDup(sqlite3*,
259e0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 75 36 34  const char*, u64
259f0 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
25a00 44 62 53 70 61 6e 44 75 70 28 73 71 6c 69 74 65  DbSpanDup(sqlite
25a10 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  3*,const char*,c
25a20 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
25a30 64 20 2a 73 71 6c 69 74 65 33 52 65 61 6c 6c 6f  d *sqlite3Reallo
25a40 63 28 76 6f 69 64 2a 2c 20 75 36 34 29 3b 0a 76  c(void*, u64);.v
25a50 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 52 65  oid *sqlite3DbRe
25a60 61 6c 6c 6f 63 4f 72 46 72 65 65 28 73 71 6c 69  allocOrFree(sqli
25a70 74 65 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 75  te3 *, void *, u
25a80 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  64);.void *sqlit
25a90 65 33 44 62 52 65 61 6c 6c 6f 63 28 73 71 6c 69  e3DbRealloc(sqli
25aa0 74 65 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 75  te3 *, void *, u
25ab0 36 34 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  64);.void sqlite
25ac0 33 44 62 46 72 65 65 28 73 71 6c 69 74 65 33 2a  3DbFree(sqlite3*
25ad0 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73  , void*);.void s
25ae0 71 6c 69 74 65 33 44 62 46 72 65 65 4e 4e 28 73  qlite3DbFreeNN(s
25af0 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b  qlite3*, void*);
25b00 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c  .int sqlite3Mall
25b10 6f 63 53 69 7a 65 28 76 6f 69 64 2a 29 3b 0a 69  ocSize(void*);.i
25b20 6e 74 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c  nt sqlite3DbMall
25b30 6f 63 53 69 7a 65 28 73 71 6c 69 74 65 33 2a 2c  ocSize(sqlite3*,
25b40 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 2a 73   void*);.void *s
25b50 71 6c 69 74 65 33 50 61 67 65 4d 61 6c 6c 6f 63  qlite3PageMalloc
25b60 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  (int);.void sqli
25b70 74 65 33 50 61 67 65 46 72 65 65 28 76 6f 69 64  te3PageFree(void
25b80 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
25b90 4d 65 6d 53 65 74 44 65 66 61 75 6c 74 28 76 6f  MemSetDefault(vo
25ba0 69 64 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  id);.#ifndef SQL
25bb0 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 76  ITE_UNTESTABLE.v
25bc0 6f 69 64 20 73 71 6c 69 74 65 33 42 65 6e 69 67  oid sqlite3Benig
25bd0 6e 4d 61 6c 6c 6f 63 48 6f 6f 6b 73 28 76 6f 69  nMallocHooks(voi
25be0 64 20 28 2a 29 28 76 6f 69 64 29 2c 20 76 6f 69  d (*)(void), voi
25bf0 64 20 28 2a 29 28 76 6f 69 64 29 29 3b 0a 23 65  d (*)(void));.#e
25c00 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33  ndif.int sqlite3
25c10 48 65 61 70 4e 65 61 72 6c 79 46 75 6c 6c 28 76  HeapNearlyFull(v
25c20 6f 69 64 29 3b 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 20  oid);../*.** On 
25c30 73 79 73 74 65 6d 73 20 77 69 74 68 20 61 6d 70  systems with amp
25c40 6c 65 20 73 74 61 63 6b 20 73 70 61 63 65 20 61  le stack space a
25c50 6e 64 20 74 68 61 74 20 73 75 70 70 6f 72 74 20  nd that support 
25c60 61 6c 6c 6f 63 61 28 29 2c 20 6d 61 6b 65 0a 2a  alloca(), make.*
25c70 2a 20 75 73 65 20 6f 66 20 61 6c 6c 6f 63 61 28  * use of alloca(
25c80 29 20 74 6f 20 6f 62 74 61 69 6e 20 73 70 61 63  ) to obtain spac
25c90 65 20 66 6f 72 20 6c 61 72 67 65 20 61 75 74 6f  e for large auto
25ca0 6d 61 74 69 63 20 6f 62 6a 65 63 74 73 2e 20 20  matic objects.  
25cb0 42 79 20 64 65 66 61 75 6c 74 2c 0a 2a 2a 20 6f  By default,.** o
25cc0 62 74 61 69 6e 20 73 70 61 63 65 20 66 72 6f 6d  btain space from
25cd0 20 6d 61 6c 6c 6f 63 28 29 2e 0a 2a 2a 0a 2a 2a   malloc()..**.**
25ce0 20 54 68 65 20 61 6c 6c 6f 63 61 28 29 20 72 6f   The alloca() ro
25cf0 75 74 69 6e 65 20 6e 65 76 65 72 20 72 65 74 75  utine never retu
25d00 72 6e 73 20 4e 55 4c 4c 2e 20 20 54 68 69 73 20  rns NULL.  This 
25d10 77 69 6c 6c 20 63 61 75 73 65 20 63 6f 64 65 20  will cause code 
25d20 70 61 74 68 73 0a 2a 2a 20 74 68 61 74 20 64 65  paths.** that de
25d30 61 6c 20 77 69 74 68 20 73 71 6c 69 74 65 33 53  al with sqlite3S
25d40 74 61 63 6b 41 6c 6c 6f 63 28 29 20 66 61 69 6c  tackAlloc() fail
25d50 75 72 65 73 20 74 6f 20 62 65 20 75 6e 72 65 61  ures to be unrea
25d60 63 68 61 62 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65  chable..*/.#ifde
25d70 66 20 53 51 4c 49 54 45 5f 55 53 45 5f 41 4c 4c  f SQLITE_USE_ALL
25d80 4f 43 41 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  OCA.# define sql
25d90 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61  ite3StackAllocRa
25da0 77 28 44 2c 4e 29 20 20 20 61 6c 6c 6f 63 61 28  w(D,N)   alloca(
25db0 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  N).# define sqli
25dc0 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72  te3StackAllocZer
25dd0 6f 28 44 2c 4e 29 20 20 6d 65 6d 73 65 74 28 61  o(D,N)  memset(a
25de0 6c 6c 6f 63 61 28 4e 29 2c 20 30 2c 20 4e 29 0a  lloca(N), 0, N).
25df0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
25e00 53 74 61 63 6b 46 72 65 65 28 44 2c 50 29 0a 23  StackFree(D,P).#
25e10 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
25e20 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52  lite3StackAllocR
25e30 61 77 28 44 2c 4e 29 20 20 20 73 71 6c 69 74 65  aw(D,N)   sqlite
25e40 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 44 2c 4e  3DbMallocRaw(D,N
25e50 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
25e60 65 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f  e3StackAllocZero
25e70 28 44 2c 4e 29 20 20 73 71 6c 69 74 65 33 44 62  (D,N)  sqlite3Db
25e80 4d 61 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 0a  MallocZero(D,N).
25e90 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
25ea0 53 74 61 63 6b 46 72 65 65 28 44 2c 50 29 20 20  StackFree(D,P)  
25eb0 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72       sqlite3DbFr
25ec0 65 65 28 44 2c 50 29 0a 23 65 6e 64 69 66 0a 0a  ee(D,P).#endif..
25ed0 2f 2a 20 44 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20  /* Do not allow 
25ee0 62 6f 74 68 20 4d 45 4d 53 59 53 35 20 61 6e 64  both MEMSYS5 and
25ef0 20 4d 45 4d 53 59 53 33 20 74 6f 20 62 65 20 64   MEMSYS3 to be d
25f00 65 66 69 6e 65 64 20 74 6f 67 65 74 68 65 72 2e  efined together.
25f10 20 20 49 66 20 74 68 65 79 0a 2a 2a 20 61 72 65    If they.** are
25f20 2c 20 64 69 73 61 62 6c 65 20 4d 45 4d 53 59 53  , disable MEMSYS
25f30 33 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  3.*/.#ifdef SQLI
25f40 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53  TE_ENABLE_MEMSYS
25f50 35 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f  5.const sqlite3_
25f60 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c  mem_methods *sql
25f70 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73  ite3MemGetMemsys
25f80 35 28 76 6f 69 64 29 3b 0a 23 75 6e 64 65 66 20  5(void);.#undef 
25f90 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45  SQLITE_ENABLE_ME
25fa0 4d 53 59 53 33 0a 23 65 6e 64 69 66 0a 23 69 66  MSYS3.#endif.#if
25fb0 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
25fc0 45 5f 4d 45 4d 53 59 53 33 0a 63 6f 6e 73 74 20  E_MEMSYS3.const 
25fd0 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68  sqlite3_mem_meth
25fe0 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47  ods *sqlite3MemG
25ff0 65 74 4d 65 6d 73 79 73 33 28 76 6f 69 64 29 3b  etMemsys3(void);
26000 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65  .#endif...#ifnde
26010 66 20 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f  f SQLITE_MUTEX_O
26020 4d 49 54 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75  MIT.  sqlite3_mu
26030 74 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73  tex_methods cons
26040 74 20 2a 73 71 6c 69 74 65 33 44 65 66 61 75 6c  t *sqlite3Defaul
26050 74 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 20 20  tMutex(void);.  
26060 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65  sqlite3_mutex_me
26070 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c  thods const *sql
26080 69 74 65 33 4e 6f 6f 70 4d 75 74 65 78 28 76 6f  ite3NoopMutex(vo
26090 69 64 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d  id);.  sqlite3_m
260a0 75 74 65 78 20 2a 73 71 6c 69 74 65 33 4d 75 74  utex *sqlite3Mut
260b0 65 78 41 6c 6c 6f 63 28 69 6e 74 29 3b 0a 20 20  exAlloc(int);.  
260c0 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 74 65 78  int sqlite3Mutex
260d0 49 6e 69 74 28 76 6f 69 64 29 3b 0a 20 20 69 6e  Init(void);.  in
260e0 74 20 73 71 6c 69 74 65 33 4d 75 74 65 78 45 6e  t sqlite3MutexEn
260f0 64 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a  d(void);.#endif.
26100 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
26110 49 54 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 29 20  ITE_MUTEX_OMIT) 
26120 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
26130 54 45 5f 4d 55 54 45 58 5f 4e 4f 4f 50 29 0a 20  TE_MUTEX_NOOP). 
26140 20 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d   void sqlite3Mem
26150 6f 72 79 42 61 72 72 69 65 72 28 76 6f 69 64 29  oryBarrier(void)
26160 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
26170 20 73 71 6c 69 74 65 33 4d 65 6d 6f 72 79 42 61   sqlite3MemoryBa
26180 72 72 69 65 72 28 29 0a 23 65 6e 64 69 66 0a 0a  rrier().#endif..
26190 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 71  sqlite3_int64 sq
261a0 6c 69 74 65 33 53 74 61 74 75 73 56 61 6c 75 65  lite3StatusValue
261b0 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  (int);.void sqli
261c0 74 65 33 53 74 61 74 75 73 55 70 28 69 6e 74 2c  te3StatusUp(int,
261d0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
261e0 74 65 33 53 74 61 74 75 73 44 6f 77 6e 28 69 6e  te3StatusDown(in
261f0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
26200 6c 69 74 65 33 53 74 61 74 75 73 48 69 67 68 77  lite3StatusHighw
26210 61 74 65 72 28 69 6e 74 2c 20 69 6e 74 29 3b 0a  ater(int, int);.
26220 69 6e 74 20 73 71 6c 69 74 65 33 4c 6f 6f 6b 61  int sqlite3Looka
26230 73 69 64 65 55 73 65 64 28 73 71 6c 69 74 65 33  sideUsed(sqlite3
26240 2a 2c 69 6e 74 2a 29 3b 0a 0a 2f 2a 20 41 63 63  *,int*);../* Acc
26250 65 73 73 20 74 6f 20 6d 75 74 65 78 65 73 20 75  ess to mutexes u
26260 73 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 73  sed by sqlite3_s
26270 74 61 74 75 73 28 29 20 2a 2f 0a 73 71 6c 69 74  tatus() */.sqlit
26280 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65  e3_mutex *sqlite
26290 33 50 63 61 63 68 65 31 4d 75 74 65 78 28 76 6f  3Pcache1Mutex(vo
262a0 69 64 29 3b 0a 73 71 6c 69 74 65 33 5f 6d 75 74  id);.sqlite3_mut
262b0 65 78 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  ex *sqlite3Mallo
262c0 63 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 0a 23  cMutex(void);..#
262d0 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
262e0 45 5f 45 4e 41 42 4c 45 5f 4d 55 4c 54 49 54 48  E_ENABLE_MULTITH
262f0 52 45 41 44 45 44 5f 43 48 45 43 4b 53 29 20 26  READED_CHECKS) &
26300 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
26310 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 29 0a 76 6f  E_MUTEX_OMIT).vo
26320 69 64 20 73 71 6c 69 74 65 33 4d 75 74 65 78 57  id sqlite3MutexW
26330 61 72 6e 4f 6e 43 6f 6e 74 65 6e 74 69 6f 6e 28  arnOnContention(
26340 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 2a 29 3b  sqlite3_mutex*);
26350 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
26360 73 71 6c 69 74 65 33 4d 75 74 65 78 57 61 72 6e  sqlite3MutexWarn
26370 4f 6e 43 6f 6e 74 65 6e 74 69 6f 6e 28 78 29 0a  OnContention(x).
26380 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20  #endif..#ifndef 
26390 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
263a0 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 69 6e 74  TING_POINT.  int
263b0 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 64 6f   sqlite3IsNaN(do
263c0 75 62 6c 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64  uble);.#else.# d
263d0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 4e  efine sqlite3IsN
263e0 61 4e 28 58 29 20 20 30 0a 23 65 6e 64 69 66 0a  aN(X)  0.#endif.
263f0 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
26400 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
26410 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 68 6f  ing structure ho
26420 6c 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  lds information 
26430 61 62 6f 75 74 20 53 51 4c 0a 2a 2a 20 66 75 6e  about SQL.** fun
26440 63 74 69 6f 6e 73 20 61 72 67 75 6d 65 6e 74 73  ctions arguments
26450 20 74 68 61 74 20 61 72 65 20 74 68 65 20 70 61   that are the pa
26460 72 61 6d 65 74 65 72 73 20 74 6f 20 74 68 65 20  rameters to the 
26470 70 72 69 6e 74 66 28 29 20 66 75 6e 63 74 69 6f  printf() functio
26480 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 50 72 69  n..*/.struct Pri
26490 6e 74 66 41 72 67 75 6d 65 6e 74 73 20 7b 0a 20  ntfArguments {. 
264a0 20 69 6e 74 20 6e 41 72 67 3b 20 20 20 20 20 20   int nArg;      
264b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 74            /* Tot
264c0 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67  al number of arg
264d0 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20  uments */.  int 
264e0 6e 55 73 65 64 3b 20 20 20 20 20 20 20 20 20 20  nUsed;          
264f0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
26500 66 20 61 72 67 75 6d 65 6e 74 73 20 75 73 65 64  f arguments used
26510 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 73 71 6c   so far */.  sql
26520 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 70 41  ite3_value **apA
26530 72 67 3b 20 20 20 2f 2a 20 54 68 65 20 61 72 67  rg;   /* The arg
26540 75 6d 65 6e 74 20 76 61 6c 75 65 73 20 2a 2f 0a  ument values */.
26550 7d 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  };..void sqlite3
26560 56 58 50 72 69 6e 74 66 28 53 74 72 41 63 63 75  VXPrintf(StrAccu
26570 6d 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  m*, const char*,
26580 20 76 61 5f 6c 69 73 74 29 3b 0a 76 6f 69 64 20   va_list);.void 
26590 73 71 6c 69 74 65 33 58 50 72 69 6e 74 66 28 53  sqlite3XPrintf(S
265a0 74 72 41 63 63 75 6d 2a 2c 20 63 6f 6e 73 74 20  trAccum*, const 
265b0 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61  char*, ...);.cha
265c0 72 20 2a 73 71 6c 69 74 65 33 4d 50 72 69 6e 74  r *sqlite3MPrint
265d0 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  f(sqlite3*,const
265e0 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68   char*, ...);.ch
265f0 61 72 20 2a 73 71 6c 69 74 65 33 56 4d 50 72 69  ar *sqlite3VMPri
26600 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  ntf(sqlite3*,con
26610 73 74 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73  st char*, va_lis
26620 74 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28  t);.#if defined(
26630 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 7c 7c  SQLITE_DEBUG) ||
26640 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
26650 48 41 56 45 5f 4f 53 5f 54 52 41 43 45 29 0a 20  HAVE_OS_TRACE). 
26660 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 62   void sqlite3Deb
26670 75 67 50 72 69 6e 74 66 28 63 6f 6e 73 74 20 63  ugPrintf(const c
26680 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 23 65 6e 64  har*, ...);.#end
26690 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  if.#if defined(S
266a0 51 4c 49 54 45 5f 54 45 53 54 29 0a 20 20 76 6f  QLITE_TEST).  vo
266b0 69 64 20 2a 73 71 6c 69 74 65 33 54 65 73 74 54  id *sqlite3TestT
266c0 65 78 74 54 6f 50 74 72 28 63 6f 6e 73 74 20 63  extToPtr(const c
266d0 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  har*);.#endif..#
266e0 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
266f0 45 5f 44 45 42 55 47 29 0a 20 20 76 6f 69 64 20  E_DEBUG).  void 
26700 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 45  sqlite3TreeViewE
26710 78 70 72 28 54 72 65 65 56 69 65 77 2a 2c 20 63  xpr(TreeView*, c
26720 6f 6e 73 74 20 45 78 70 72 2a 2c 20 75 38 29 3b  onst Expr*, u8);
26730 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54  .  void sqlite3T
26740 72 65 65 56 69 65 77 42 61 72 65 45 78 70 72 4c  reeViewBareExprL
26750 69 73 74 28 54 72 65 65 56 69 65 77 2a 2c 20 63  ist(TreeView*, c
26760 6f 6e 73 74 20 45 78 70 72 4c 69 73 74 2a 2c 20  onst ExprList*, 
26770 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
26780 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65  void sqlite3Tree
26790 56 69 65 77 45 78 70 72 4c 69 73 74 28 54 72 65  ViewExprList(Tre
267a0 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78  eView*, const Ex
267b0 70 72 4c 69 73 74 2a 2c 20 75 38 2c 20 63 6f 6e  prList*, u8, con
267c0 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69  st char*);.  voi
267d0 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65  d sqlite3TreeVie
267e0 77 53 65 6c 65 63 74 28 54 72 65 65 56 69 65 77  wSelect(TreeView
267f0 2a 2c 20 63 6f 6e 73 74 20 53 65 6c 65 63 74 2a  *, const Select*
26800 2c 20 75 38 29 3b 0a 20 20 76 6f 69 64 20 73 71  , u8);.  void sq
26810 6c 69 74 65 33 54 72 65 65 56 69 65 77 57 69 74  lite3TreeViewWit
26820 68 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e  h(TreeView*, con
26830 73 74 20 57 69 74 68 2a 2c 20 75 38 29 3b 0a 23  st With*, u8);.#
26840 65 6e 64 69 66 0a 0a 0a 76 6f 69 64 20 73 71 6c  endif...void sql
26850 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 63 68  ite3SetString(ch
26860 61 72 20 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 2c  ar **, sqlite3*,
26870 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76   const char*);.v
26880 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72  oid sqlite3Error
26890 4d 73 67 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73  Msg(Parse*, cons
268a0 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76  t char*, ...);.v
268b0 6f 69 64 20 73 71 6c 69 74 65 33 44 65 71 75 6f  oid sqlite3Dequo
268c0 74 65 28 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  te(char*);.void 
268d0 73 71 6c 69 74 65 33 54 6f 6b 65 6e 49 6e 69 74  sqlite3TokenInit
268e0 28 54 6f 6b 65 6e 2a 2c 63 68 61 72 2a 29 3b 0a  (Token*,char*);.
268f0 69 6e 74 20 73 71 6c 69 74 65 33 4b 65 79 77 6f  int sqlite3Keywo
26900 72 64 43 6f 64 65 28 63 6f 6e 73 74 20 75 6e 73  rdCode(const uns
26910 69 67 6e 65 64 20 63 68 61 72 2a 2c 20 69 6e 74  igned char*, int
26920 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 75  );.int sqlite3Ru
26930 6e 50 61 72 73 65 72 28 50 61 72 73 65 2a 2c 20  nParser(Parse*, 
26940 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 68 61  const char*, cha
26950 72 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  r **);.void sqli
26960 74 65 33 46 69 6e 69 73 68 43 6f 64 69 6e 67 28  te3FinishCoding(
26970 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c  Parse*);.int sql
26980 69 74 65 33 47 65 74 54 65 6d 70 52 65 67 28 50  ite3GetTempReg(P
26990 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
269a0 69 74 65 33 52 65 6c 65 61 73 65 54 65 6d 70 52  ite3ReleaseTempR
269b0 65 67 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a  eg(Parse*,int);.
269c0 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 65  int sqlite3GetTe
269d0 6d 70 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69  mpRange(Parse*,i
269e0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
269f0 33 52 65 6c 65 61 73 65 54 65 6d 70 52 61 6e 67  3ReleaseTempRang
26a00 65 28 50 61 72 73 65 2a 2c 69 6e 74 2c 69 6e 74  e(Parse*,int,int
26a10 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
26a20 6c 65 61 72 54 65 6d 70 52 65 67 43 61 63 68 65  learTempRegCache
26a30 28 50 61 72 73 65 2a 29 3b 0a 23 69 66 64 65 66  (Parse*);.#ifdef
26a40 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 69 6e   SQLITE_DEBUG.in
26a50 74 20 73 71 6c 69 74 65 33 4e 6f 54 65 6d 70 73  t sqlite3NoTemps
26a60 49 6e 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69  InRange(Parse*,i
26a70 6e 74 2c 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a  nt,int);.#endif.
26a80 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
26a90 72 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c  rAlloc(sqlite3*,
26aa0 69 6e 74 2c 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a  int,const Token*
26ab0 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c  ,int);.Expr *sql
26ac0 69 74 65 33 45 78 70 72 28 73 71 6c 69 74 65 33  ite3Expr(sqlite3
26ad0 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
26ae0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
26af0 45 78 70 72 41 74 74 61 63 68 53 75 62 74 72 65  ExprAttachSubtre
26b00 65 73 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72  es(sqlite3*,Expr
26b10 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a  *,Expr*,Expr*);.
26b20 45 78 70 72 20 2a 73 71 6c 69 74 65 33 50 45 78  Expr *sqlite3PEx
26b30 70 72 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  pr(Parse*, int, 
26b40 45 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  Expr*, Expr*);.v
26b50 6f 69 64 20 73 71 6c 69 74 65 33 50 45 78 70 72  oid sqlite3PExpr
26b60 41 64 64 53 65 6c 65 63 74 28 50 61 72 73 65 2a  AddSelect(Parse*
26b70 2c 20 45 78 70 72 2a 2c 20 53 65 6c 65 63 74 2a  , Expr*, Select*
26b80 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
26b90 45 78 70 72 41 6e 64 28 73 71 6c 69 74 65 33 2a  ExprAnd(sqlite3*
26ba0 2c 45 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a  ,Expr*, Expr*);.
26bb0 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
26bc0 72 46 75 6e 63 74 69 6f 6e 28 50 61 72 73 65 2a  rFunction(Parse*
26bd0 2c 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65  ,ExprList*, Toke
26be0 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
26bf0 33 45 78 70 72 41 73 73 69 67 6e 56 61 72 4e 75  3ExprAssignVarNu
26c00 6d 62 65 72 28 50 61 72 73 65 2a 2c 20 45 78 70  mber(Parse*, Exp
26c10 72 2a 2c 20 75 33 32 29 3b 0a 76 6f 69 64 20 73  r*, u32);.void s
26c20 71 6c 69 74 65 33 45 78 70 72 44 65 6c 65 74 65  qlite3ExprDelete
26c30 28 73 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 2a  (sqlite3*, Expr*
26c40 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c  );.ExprList *sql
26c50 69 74 65 33 45 78 70 72 4c 69 73 74 41 70 70 65  ite3ExprListAppe
26c60 6e 64 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69  nd(Parse*,ExprLi
26c70 73 74 2a 2c 45 78 70 72 2a 29 3b 0a 45 78 70 72  st*,Expr*);.Expr
26c80 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70  List *sqlite3Exp
26c90 72 4c 69 73 74 41 70 70 65 6e 64 56 65 63 74 6f  rListAppendVecto
26ca0 72 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73  r(Parse*,ExprLis
26cb0 74 2a 2c 49 64 4c 69 73 74 2a 2c 45 78 70 72 2a  t*,IdList*,Expr*
26cc0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
26cd0 78 70 72 4c 69 73 74 53 65 74 53 6f 72 74 4f 72  xprListSetSortOr
26ce0 64 65 72 28 45 78 70 72 4c 69 73 74 2a 2c 69 6e  der(ExprList*,in
26cf0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
26d00 45 78 70 72 4c 69 73 74 53 65 74 4e 61 6d 65 28  ExprListSetName(
26d10 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a  Parse*,ExprList*
26d20 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f  ,Token*,int);.vo
26d30 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  id sqlite3ExprLi
26d40 73 74 53 65 74 53 70 61 6e 28 50 61 72 73 65 2a  stSetSpan(Parse*
26d50 2c 45 78 70 72 4c 69 73 74 2a 2c 63 6f 6e 73 74  ,ExprList*,const
26d60 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
26d70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
26d80 33 45 78 70 72 4c 69 73 74 44 65 6c 65 74 65 28  3ExprListDelete(
26d90 73 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 4c 69  sqlite3*, ExprLi
26da0 73 74 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74 65  st*);.u32 sqlite
26db0 33 45 78 70 72 4c 69 73 74 46 6c 61 67 73 28 63  3ExprListFlags(c
26dc0 6f 6e 73 74 20 45 78 70 72 4c 69 73 74 2a 29 3b  onst ExprList*);
26dd0 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74  .int sqlite3Init
26de0 28 73 71 6c 69 74 65 33 2a 2c 20 63 68 61 72 2a  (sqlite3*, char*
26df0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  *);.int sqlite3I
26e00 6e 69 74 43 61 6c 6c 62 61 63 6b 28 76 6f 69 64  nitCallback(void
26e10 2a 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2a 2c 20  *, int, char**, 
26e20 63 68 61 72 2a 2a 29 3b 0a 76 6f 69 64 20 73 71  char**);.void sq
26e30 6c 69 74 65 33 50 72 61 67 6d 61 28 50 61 72 73  lite3Pragma(Pars
26e40 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  e*,Token*,Token*
26e50 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 23 69  ,Token*,int);.#i
26e60 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
26e70 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 4d  T_VIRTUALTABLE.M
26e80 6f 64 75 6c 65 20 2a 73 71 6c 69 74 65 33 50 72  odule *sqlite3Pr
26e90 61 67 6d 61 56 74 61 62 52 65 67 69 73 74 65 72  agmaVtabRegister
26ea0 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
26eb0 63 68 61 72 20 2a 7a 4e 61 6d 65 29 3b 0a 23 65  char *zName);.#e
26ec0 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
26ed0 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73  3ResetAllSchemas
26ee0 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 73 71 6c  OfConnection(sql
26ef0 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
26f00 69 74 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65  ite3ResetOneSche
26f10 6d 61 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29  ma(sqlite3*,int)
26f20 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
26f30 6c 6c 61 70 73 65 44 61 74 61 62 61 73 65 41 72  llapseDatabaseAr
26f40 72 61 79 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76  ray(sqlite3*);.v
26f50 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69  oid sqlite3Commi
26f60 74 49 6e 74 65 72 6e 61 6c 43 68 61 6e 67 65 73  tInternalChanges
26f70 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64  (sqlite3*);.void
26f80 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 43 6f   sqlite3DeleteCo
26f90 6c 75 6d 6e 4e 61 6d 65 73 28 73 71 6c 69 74 65  lumnNames(sqlite
26fa0 33 2a 2c 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20  3*,Table*);.int 
26fb0 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 73 46 72  sqlite3ColumnsFr
26fc0 6f 6d 45 78 70 72 4c 69 73 74 28 50 61 72 73 65  omExprList(Parse
26fd0 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 31 36 2a  *,ExprList*,i16*
26fe0 2c 43 6f 6c 75 6d 6e 2a 2a 29 3b 0a 76 6f 69 64  ,Column**);.void
26ff0 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 41 64   sqlite3SelectAd
27000 64 43 6f 6c 75 6d 6e 54 79 70 65 41 6e 64 43 6f  dColumnTypeAndCo
27010 6c 6c 61 74 69 6f 6e 28 50 61 72 73 65 2a 2c 54  llation(Parse*,T
27020 61 62 6c 65 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a  able*,Select*);.
27030 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 52 65  Table *sqlite3Re
27040 73 75 6c 74 53 65 74 4f 66 53 65 6c 65 63 74 28  sultSetOfSelect(
27050 50 61 72 73 65 2a 2c 53 65 6c 65 63 74 2a 29 3b  Parse*,Select*);
27060 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65  .void sqlite3Ope
27070 6e 4d 61 73 74 65 72 54 61 62 6c 65 28 50 61 72  nMasterTable(Par
27080 73 65 20 2a 2c 20 69 6e 74 29 3b 0a 49 6e 64 65  se *, int);.Inde
27090 78 20 2a 73 71 6c 69 74 65 33 50 72 69 6d 61 72  x *sqlite3Primar
270a0 79 4b 65 79 49 6e 64 65 78 28 54 61 62 6c 65 2a  yKeyIndex(Table*
270b0 29 3b 0a 69 31 36 20 73 71 6c 69 74 65 33 43 6f  );.i16 sqlite3Co
270c0 6c 75 6d 6e 4f 66 49 6e 64 65 78 28 49 6e 64 65  lumnOfIndex(Inde
270d0 78 2a 2c 20 69 31 36 29 3b 0a 76 6f 69 64 20 73  x*, i16);.void s
270e0 71 6c 69 74 65 33 53 74 61 72 74 54 61 62 6c 65  qlite3StartTable
270f0 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54  (Parse*,Token*,T
27100 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  oken*,int,int,in
27110 74 2c 69 6e 74 29 3b 0a 23 69 66 20 53 51 4c 49  t,int);.#if SQLI
27120 54 45 5f 45 4e 41 42 4c 45 5f 48 49 44 44 45 4e  TE_ENABLE_HIDDEN
27130 5f 43 4f 4c 55 4d 4e 53 0a 20 20 76 6f 69 64 20  _COLUMNS.  void 
27140 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 50 72 6f  sqlite3ColumnPro
27150 70 65 72 74 69 65 73 46 72 6f 6d 4e 61 6d 65 28  pertiesFromName(
27160 54 61 62 6c 65 2a 2c 20 43 6f 6c 75 6d 6e 2a 29  Table*, Column*)
27170 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
27180 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 50 72   sqlite3ColumnPr
27190 6f 70 65 72 74 69 65 73 46 72 6f 6d 4e 61 6d 65  opertiesFromName
271a0 28 54 2c 43 29 20 2f 2a 20 6e 6f 2d 6f 70 20 2a  (T,C) /* no-op *
271b0 2f 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  /.#endif.void sq
271c0 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e 28 50  lite3AddColumn(P
271d0 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  arse*,Token*,Tok
271e0 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
271f0 65 33 41 64 64 4e 6f 74 4e 75 6c 6c 28 50 61 72  e3AddNotNull(Par
27200 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  se*, int);.void 
27210 73 71 6c 69 74 65 33 41 64 64 50 72 69 6d 61 72  sqlite3AddPrimar
27220 79 4b 65 79 28 50 61 72 73 65 2a 2c 20 45 78 70  yKey(Parse*, Exp
27230 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74  rList*, int, int
27240 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
27250 69 74 65 33 41 64 64 43 68 65 63 6b 43 6f 6e 73  ite3AddCheckCons
27260 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 45  traint(Parse*, E
27270 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
27280 74 65 33 41 64 64 44 65 66 61 75 6c 74 56 61 6c  te3AddDefaultVal
27290 75 65 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c  ue(Parse*,Expr*,
272a0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
272b0 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
272c0 71 6c 69 74 65 33 41 64 64 43 6f 6c 6c 61 74 65  qlite3AddCollate
272d0 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  Type(Parse*, Tok
272e0 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
272f0 65 33 45 6e 64 54 61 62 6c 65 28 50 61 72 73 65  e3EndTable(Parse
27300 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
27310 75 38 2c 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74  u8,Select*);.int
27320 20 73 71 6c 69 74 65 33 50 61 72 73 65 55 72 69   sqlite3ParseUri
27330 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e  (const char*,con
27340 73 74 20 63 68 61 72 2a 2c 75 6e 73 69 67 6e 65  st char*,unsigne
27350 64 20 69 6e 74 2a 2c 0a 20 20 20 20 20 20 20 20  d int*,.        
27360 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
27370 74 65 33 5f 76 66 73 2a 2a 2c 63 68 61 72 2a 2a  te3_vfs**,char**
27380 2c 63 68 61 72 20 2a 2a 29 3b 0a 42 74 72 65 65  ,char **);.Btree
27390 20 2a 73 71 6c 69 74 65 33 44 62 4e 61 6d 65 54   *sqlite3DbNameT
273a0 6f 42 74 72 65 65 28 73 71 6c 69 74 65 33 2a 2c  oBtree(sqlite3*,
273b0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 0a 23  const char*);..#
273c0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54  ifdef SQLITE_UNT
273d0 45 53 54 41 42 4c 45 0a 23 20 64 65 66 69 6e 65  ESTABLE.# define
273e0 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d   sqlite3FaultSim
273f0 28 58 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 65  (X) SQLITE_OK.#e
27400 6c 73 65 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  lse.  int sqlite
27410 33 46 61 75 6c 74 53 69 6d 28 69 6e 74 29 3b 0a  3FaultSim(int);.
27420 23 65 6e 64 69 66 0a 0a 42 69 74 76 65 63 20 2a  #endif..Bitvec *
27430 73 71 6c 69 74 65 33 42 69 74 76 65 63 43 72 65  sqlite3BitvecCre
27440 61 74 65 28 75 33 32 29 3b 0a 69 6e 74 20 73 71  ate(u32);.int sq
27450 6c 69 74 65 33 42 69 74 76 65 63 54 65 73 74 28  lite3BitvecTest(
27460 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69  Bitvec*, u32);.i
27470 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  nt sqlite3Bitvec
27480 54 65 73 74 4e 6f 74 4e 75 6c 6c 28 42 69 74 76  TestNotNull(Bitv
27490 65 63 2a 2c 20 75 33 32 29 3b 0a 69 6e 74 20 73  ec*, u32);.int s
274a0 71 6c 69 74 65 33 42 69 74 76 65 63 53 65 74 28  qlite3BitvecSet(
274b0 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 76  Bitvec*, u32);.v
274c0 6f 69 64 20 73 71 6c 69 74 65 33 42 69 74 76 65  oid sqlite3Bitve
274d0 63 43 6c 65 61 72 28 42 69 74 76 65 63 2a 2c 20  cClear(Bitvec*, 
274e0 75 33 32 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69  u32, void*);.voi
274f0 64 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 44  d sqlite3BitvecD
27500 65 73 74 72 6f 79 28 42 69 74 76 65 63 2a 29 3b  estroy(Bitvec*);
27510 0a 75 33 32 20 73 71 6c 69 74 65 33 42 69 74 76  .u32 sqlite3Bitv
27520 65 63 53 69 7a 65 28 42 69 74 76 65 63 2a 29 3b  ecSize(Bitvec*);
27530 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
27540 55 4e 54 45 53 54 41 42 4c 45 0a 69 6e 74 20 73  UNTESTABLE.int s
27550 71 6c 69 74 65 33 42 69 74 76 65 63 42 75 69 6c  qlite3BitvecBuil
27560 74 69 6e 54 65 73 74 28 69 6e 74 2c 69 6e 74 2a  tinTest(int,int*
27570 29 3b 0a 23 65 6e 64 69 66 0a 0a 52 6f 77 53 65  );.#endif..RowSe
27580 74 20 2a 73 71 6c 69 74 65 33 52 6f 77 53 65 74  t *sqlite3RowSet
27590 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c 20 76  Init(sqlite3*, v
275a0 6f 69 64 2a 2c 20 75 6e 73 69 67 6e 65 64 20 69  oid*, unsigned i
275b0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
275c0 33 52 6f 77 53 65 74 43 6c 65 61 72 28 52 6f 77  3RowSetClear(Row
275d0 53 65 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  Set*);.void sqli
275e0 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28  te3RowSetInsert(
275f0 52 6f 77 53 65 74 2a 2c 20 69 36 34 29 3b 0a 69  RowSet*, i64);.i
27600 6e 74 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74  nt sqlite3RowSet
27610 54 65 73 74 28 52 6f 77 53 65 74 2a 2c 20 69 6e  Test(RowSet*, in
27620 74 20 69 42 61 74 63 68 2c 20 69 36 34 29 3b 0a  t iBatch, i64);.
27630 69 6e 74 20 73 71 6c 69 74 65 33 52 6f 77 53 65  int sqlite3RowSe
27640 74 4e 65 78 74 28 52 6f 77 53 65 74 2a 2c 20 69  tNext(RowSet*, i
27650 36 34 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69  64*);..void sqli
27660 74 65 33 43 72 65 61 74 65 56 69 65 77 28 50 61  te3CreateView(Pa
27670 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  rse*,Token*,Toke
27680 6e 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69  n*,Token*,ExprLi
27690 73 74 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 2c  st*,Select*,int,
276a0 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65 66 69  int);..#if !defi
276b0 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
276c0 56 49 45 57 29 20 7c 7c 20 21 64 65 66 69 6e 65  VIEW) || !define
276d0 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  d(SQLITE_OMIT_VI
276e0 52 54 55 41 4c 54 41 42 4c 45 29 0a 20 20 69 6e  RTUALTABLE).  in
276f0 74 20 73 71 6c 69 74 65 33 56 69 65 77 47 65 74  t sqlite3ViewGet
27700 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 50 61 72 73  ColumnNames(Pars
27710 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23 65 6c 73  e*,Table*);.#els
27720 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
27730 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e  e3ViewGetColumnN
27740 61 6d 65 73 28 41 2c 42 29 20 30 0a 23 65 6e 64  ames(A,B) 0.#end
27750 69 66 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d  if..#if SQLITE_M
27760 41 58 5f 41 54 54 41 43 48 45 44 3e 33 30 0a 20  AX_ATTACHED>30. 
27770 20 69 6e 74 20 73 71 6c 69 74 65 33 44 62 4d 61   int sqlite3DbMa
27780 73 6b 41 6c 6c 5a 65 72 6f 28 79 44 62 4d 61 73  skAllZero(yDbMas
27790 6b 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  k);.#endif.void 
277a0 73 71 6c 69 74 65 33 44 72 6f 70 54 61 62 6c 65  sqlite3DropTable
277b0 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
277c0 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
277d0 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 44 72  id sqlite3CodeDr
277e0 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20  opTable(Parse*, 
277f0 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Table*, int, int
27800 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
27810 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69 74  eleteTable(sqlit
27820 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 23 69  e3*, Table*);.#i
27830 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
27840 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a  T_AUTOINCREMENT.
27850 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75    void sqlite3Au
27860 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e  toincrementBegin
27870 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b  (Parse *pParse);
27880 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41  .  void sqlite3A
27890 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28  utoincrementEnd(
278a0 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a  Parse *pParse);.
278b0 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
278c0 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d  qlite3Autoincrem
278d0 65 6e 74 42 65 67 69 6e 28 58 29 0a 23 20 64 65  entBegin(X).# de
278e0 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 6f  fine sqlite3Auto
278f0 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28 58 29 0a  incrementEnd(X).
27900 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
27910 74 65 33 49 6e 73 65 72 74 28 50 61 72 73 65 2a  te3Insert(Parse*
27920 2c 20 53 72 63 4c 69 73 74 2a 2c 20 53 65 6c 65  , SrcList*, Sele
27930 63 74 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 69 6e  ct*, IdList*, in
27940 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  t);.void *sqlite
27950 33 41 72 72 61 79 41 6c 6c 6f 63 61 74 65 28 73  3ArrayAllocate(s
27960 71 6c 69 74 65 33 2a 2c 76 6f 69 64 2a 2c 69 6e  qlite3*,void*,in
27970 74 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 49 64  t,int*,int*);.Id
27980 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c  List *sqlite3IdL
27990 69 73 74 41 70 70 65 6e 64 28 73 71 6c 69 74 65  istAppend(sqlite
279a0 33 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 54 6f 6b  3*, IdList*, Tok
279b0 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
279c0 33 49 64 4c 69 73 74 49 6e 64 65 78 28 49 64 4c  3IdListIndex(IdL
279d0 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ist*,const char*
279e0 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69  );.SrcList *sqli
279f0 74 65 33 53 72 63 4c 69 73 74 45 6e 6c 61 72 67  te3SrcListEnlarg
27a00 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c  e(sqlite3*, SrcL
27a10 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  ist*, int, int);
27a20 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65  .SrcList *sqlite
27a30 33 53 72 63 4c 69 73 74 41 70 70 65 6e 64 28 73  3SrcListAppend(s
27a40 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74  qlite3*, SrcList
27a50 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
27a60 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c  *);.SrcList *sql
27a70 69 74 65 33 53 72 63 4c 69 73 74 41 70 70 65 6e  ite3SrcListAppen
27a80 64 46 72 6f 6d 54 65 72 6d 28 50 61 72 73 65 2a  dFromTerm(Parse*
27a90 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65  , SrcList*, Toke
27aa0 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20  n*, Token*,.    
27ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ad0 20 20 54 6f 6b 65 6e 2a 2c 20 53 65 6c 65 63 74    Token*, Select
27ae0 2a 2c 20 45 78 70 72 2a 2c 20 49 64 4c 69 73 74  *, Expr*, IdList
27af0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
27b00 53 72 63 4c 69 73 74 49 6e 64 65 78 65 64 42 79  SrcListIndexedBy
27b10 28 50 61 72 73 65 20 2a 2c 20 53 72 63 4c 69 73  (Parse *, SrcLis
27b20 74 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76  t *, Token *);.v
27b30 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69  oid sqlite3SrcLi
27b40 73 74 46 75 6e 63 41 72 67 73 28 50 61 72 73 65  stFuncArgs(Parse
27b50 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70  *, SrcList*, Exp
27b60 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  rList*);.int sql
27b70 69 74 65 33 49 6e 64 65 78 65 64 42 79 4c 6f 6f  ite3IndexedByLoo
27b80 6b 75 70 28 50 61 72 73 65 20 2a 2c 20 73 74 72  kup(Parse *, str
27b90 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d  uct SrcList_item
27ba0 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
27bb0 33 53 72 63 4c 69 73 74 53 68 69 66 74 4a 6f 69  3SrcListShiftJoi
27bc0 6e 54 79 70 65 28 53 72 63 4c 69 73 74 2a 29 3b  nType(SrcList*);
27bd0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63  .void sqlite3Src
27be0 4c 69 73 74 41 73 73 69 67 6e 43 75 72 73 6f 72  ListAssignCursor
27bf0 73 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  s(Parse*, SrcLis
27c00 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
27c10 33 49 64 4c 69 73 74 44 65 6c 65 74 65 28 73 71  3IdListDelete(sq
27c20 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a 29  lite3*, IdList*)
27c30 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72  ;.void sqlite3Sr
27c40 63 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69  cListDelete(sqli
27c50 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b  te3*, SrcList*);
27c60 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 41  .Index *sqlite3A
27c70 6c 6c 6f 63 61 74 65 49 6e 64 65 78 4f 62 6a 65  llocateIndexObje
27c80 63 74 28 73 71 6c 69 74 65 33 2a 2c 69 31 36 2c  ct(sqlite3*,i16,
27c90 69 6e 74 2c 63 68 61 72 2a 2a 29 3b 0a 76 6f 69  int,char**);.voi
27ca0 64 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 49  d sqlite3CreateI
27cb0 6e 64 65 78 28 50 61 72 73 65 2a 2c 54 6f 6b 65  ndex(Parse*,Toke
27cc0 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 72 63 4c 69 73  n*,Token*,SrcLis
27cd0 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74  t*,ExprList*,int
27ce0 2c 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20  ,Token*,.       
27cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27d00 20 20 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69     Expr*, int, i
27d10 6e 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71  nt, u8);.void sq
27d20 6c 69 74 65 33 44 72 6f 70 49 6e 64 65 78 28 50  lite3DropIndex(P
27d30 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
27d40 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
27d50 65 33 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c  e3Select(Parse*,
27d60 20 53 65 6c 65 63 74 2a 2c 20 53 65 6c 65 63 74   Select*, Select
27d70 44 65 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a  Dest*);.Select *
27d80 73 71 6c 69 74 65 33 53 65 6c 65 63 74 4e 65 77  sqlite3SelectNew
27d90 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74  (Parse*,ExprList
27da0 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a  *,SrcList*,Expr*
27db0 2c 45 78 70 72 4c 69 73 74 2a 2c 0a 20 20 20 20  ,ExprList*,.    
27dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27dd0 20 20 20 20 20 45 78 70 72 2a 2c 45 78 70 72 4c       Expr*,ExprL
27de0 69 73 74 2a 2c 75 33 32 2c 45 78 70 72 2a 29 3b  ist*,u32,Expr*);
27df0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c  .void sqlite3Sel
27e00 65 63 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65  ectDelete(sqlite
27e10 33 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 54 61  3*, Select*);.Ta
27e20 62 6c 65 20 2a 73 71 6c 69 74 65 33 53 72 63 4c  ble *sqlite3SrcL
27e30 69 73 74 4c 6f 6f 6b 75 70 28 50 61 72 73 65 2a  istLookup(Parse*
27e40 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74  , SrcList*);.int
27e50 20 73 71 6c 69 74 65 33 49 73 52 65 61 64 4f 6e   sqlite3IsReadOn
27e60 6c 79 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  ly(Parse*, Table
27e70 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
27e80 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 28 50  lite3OpenTable(P
27e90 61 72 73 65 2a 2c 20 69 6e 74 20 69 43 75 72 2c  arse*, int iCur,
27ea0 20 69 6e 74 20 69 44 62 2c 20 54 61 62 6c 65 2a   int iDb, Table*
27eb0 2c 20 69 6e 74 29 3b 0a 23 69 66 20 64 65 66 69  , int);.#if defi
27ec0 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
27ed0 45 5f 55 50 44 41 54 45 5f 44 45 4c 45 54 45 5f  E_UPDATE_DELETE_
27ee0 4c 49 4d 49 54 29 20 26 26 20 21 64 65 66 69 6e  LIMIT) && !defin
27ef0 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53  ed(SQLITE_OMIT_S
27f00 55 42 51 55 45 52 59 29 0a 45 78 70 72 20 2a 73  UBQUERY).Expr *s
27f10 71 6c 69 74 65 33 4c 69 6d 69 74 57 68 65 72 65  qlite3LimitWhere
27f20 28 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a  (Parse*,SrcList*
27f30 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a  ,Expr*,ExprList*
27f40 2c 45 78 70 72 2a 2c 63 68 61 72 2a 29 3b 0a 23  ,Expr*,char*);.#
27f50 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
27f60 65 33 44 65 6c 65 74 65 46 72 6f 6d 28 50 61 72  e3DeleteFrom(Par
27f70 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45  se*, SrcList*, E
27f80 78 70 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  xpr*, ExprList*,
27f90 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
27fa0 6c 69 74 65 33 55 70 64 61 74 65 28 50 61 72 73  lite3Update(Pars
27fb0 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78  e*, SrcList*, Ex
27fc0 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 69 6e  prList*,Expr*,in
27fd0 74 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72  t,ExprList*,Expr
27fe0 2a 29 3b 0a 57 68 65 72 65 49 6e 66 6f 20 2a 73  *);.WhereInfo *s
27ff0 71 6c 69 74 65 33 57 68 65 72 65 42 65 67 69 6e  qlite3WhereBegin
28000 28 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a  (Parse*,SrcList*
28010 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a  ,Expr*,ExprList*
28020 2c 45 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c 69  ,ExprList*,u16,i
28030 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
28040 33 57 68 65 72 65 45 6e 64 28 57 68 65 72 65 49  3WhereEnd(WhereI
28050 6e 66 6f 2a 29 3b 0a 4c 6f 67 45 73 74 20 73 71  nfo*);.LogEst sq
28060 6c 69 74 65 33 57 68 65 72 65 4f 75 74 70 75 74  lite3WhereOutput
28070 52 6f 77 43 6f 75 6e 74 28 57 68 65 72 65 49 6e  RowCount(WhereIn
28080 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  fo*);.int sqlite
28090 33 57 68 65 72 65 49 73 44 69 73 74 69 6e 63 74  3WhereIsDistinct
280a0 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e  (WhereInfo*);.in
280b0 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73  t sqlite3WhereIs
280c0 4f 72 64 65 72 65 64 28 57 68 65 72 65 49 6e 66  Ordered(WhereInf
280d0 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  o*);.int sqlite3
280e0 57 68 65 72 65 4f 72 64 65 72 65 64 49 6e 6e 65  WhereOrderedInne
280f0 72 4c 6f 6f 70 28 57 68 65 72 65 49 6e 66 6f 2a  rLoop(WhereInfo*
28100 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68  );.int sqlite3Wh
28110 65 72 65 49 73 53 6f 72 74 65 64 28 57 68 65 72  ereIsSorted(Wher
28120 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c  eInfo*);.int sql
28130 69 74 65 33 57 68 65 72 65 43 6f 6e 74 69 6e 75  ite3WhereContinu
28140 65 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66 6f  eLabel(WhereInfo
28150 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
28160 68 65 72 65 42 72 65 61 6b 4c 61 62 65 6c 28 57  hereBreakLabel(W
28170 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
28180 73 71 6c 69 74 65 33 57 68 65 72 65 4f 6b 4f 6e  sqlite3WhereOkOn
28190 65 50 61 73 73 28 57 68 65 72 65 49 6e 66 6f 2a  ePass(WhereInfo*
281a0 2c 20 69 6e 74 2a 29 3b 0a 23 64 65 66 69 6e 65  , int*);.#define
281b0 20 4f 4e 45 50 41 53 53 5f 4f 46 46 20 20 20 20   ONEPASS_OFF    
281c0 20 20 30 20 20 20 20 20 20 20 20 2f 2a 20 55 73    0        /* Us
281d0 65 20 6f 66 20 4f 4e 45 50 41 53 53 20 6e 6f 74  e of ONEPASS not
281e0 20 61 6c 6c 6f 77 65 64 20 2a 2f 0a 23 64 65 66   allowed */.#def
281f0 69 6e 65 20 4f 4e 45 50 41 53 53 5f 53 49 4e 47  ine ONEPASS_SING
28200 4c 45 20 20 20 31 20 20 20 20 20 20 20 20 2f 2a  LE   1        /*
28210 20 4f 4e 45 50 41 53 53 20 76 61 6c 69 64 20 66   ONEPASS valid f
28220 6f 72 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20  or a single row 
28230 75 70 64 61 74 65 20 2a 2f 0a 23 64 65 66 69 6e  update */.#defin
28240 65 20 4f 4e 45 50 41 53 53 5f 4d 55 4c 54 49 20  e ONEPASS_MULTI 
28250 20 20 20 32 20 20 20 20 20 20 20 20 2f 2a 20 4f     2        /* O
28260 4e 45 50 41 53 53 20 69 73 20 76 61 6c 69 64 20  NEPASS is valid 
28270 66 6f 72 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77  for multiple row
28280 73 20 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  s */.void sqlite
28290 33 45 78 70 72 43 6f 64 65 4c 6f 61 64 49 6e 64  3ExprCodeLoadInd
282a0 65 78 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c  exColumn(Parse*,
282b0 20 49 6e 64 65 78 2a 2c 20 69 6e 74 2c 20 69 6e   Index*, int, in
282c0 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  t, int);.int sql
282d0 69 74 65 33 45 78 70 72 43 6f 64 65 47 65 74 43  ite3ExprCodeGetC
282e0 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20 54 61  olumn(Parse*, Ta
282f0 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ble*, int, int, 
28300 69 6e 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73  int, u8);.void s
28310 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47 65  qlite3ExprCodeGe
28320 74 43 6f 6c 75 6d 6e 54 6f 52 65 67 28 50 61 72  tColumnToReg(Par
28330 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
28340 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
28350 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
28360 65 47 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c  eGetColumnOfTabl
28370 65 28 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c  e(Vdbe*, Table*,
28380 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
28390 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
283a0 72 43 6f 64 65 4d 6f 76 65 28 50 61 72 73 65 2a  rCodeMove(Parse*
283b0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
283c0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
283d0 70 72 43 61 63 68 65 53 74 6f 72 65 28 50 61 72  prCacheStore(Par
283e0 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  se*, int, int, i
283f0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
28400 33 45 78 70 72 43 61 63 68 65 50 75 73 68 28 50  3ExprCachePush(P
28410 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
28420 69 74 65 33 45 78 70 72 43 61 63 68 65 50 6f 70  ite3ExprCachePop
28430 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
28440 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 52  qlite3ExprCacheR
28450 65 6d 6f 76 65 28 50 61 72 73 65 2a 2c 20 69 6e  emove(Parse*, in
28460 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
28470 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 43 6c  lite3ExprCacheCl
28480 65 61 72 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  ear(Parse*);.voi
28490 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63  d sqlite3ExprCac
284a0 68 65 41 66 66 69 6e 69 74 79 43 68 61 6e 67 65  heAffinityChange
284b0 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e  (Parse*, int, in
284c0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
284d0 45 78 70 72 43 6f 64 65 28 50 61 72 73 65 2a 2c  ExprCode(Parse*,
284e0 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f   Expr*, int);.vo
284f0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
28500 64 65 43 6f 70 79 28 50 61 72 73 65 2a 2c 20 45  deCopy(Parse*, E
28510 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  xpr*, int);.void
28520 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
28530 46 61 63 74 6f 72 61 62 6c 65 28 50 61 72 73 65  Factorable(Parse
28540 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
28550 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
28560 6f 64 65 41 74 49 6e 69 74 28 50 61 72 73 65 2a  odeAtInit(Parse*
28570 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69  , Expr*, int);.i
28580 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
28590 64 65 54 65 6d 70 28 50 61 72 73 65 2a 2c 20 45  deTemp(Parse*, E
285a0 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74  xpr*, int*);.int
285b0 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
285c0 54 61 72 67 65 74 28 50 61 72 73 65 2a 2c 20 45  Target(Parse*, E
285d0 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  xpr*, int);.void
285e0 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
285f0 41 6e 64 43 61 63 68 65 28 50 61 72 73 65 2a 2c  AndCache(Parse*,
28600 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e   Expr*, int);.in
28610 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  t sqlite3ExprCod
28620 65 45 78 70 72 4c 69 73 74 28 50 61 72 73 65 2a  eExprList(Parse*
28630 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
28640 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 23 64 65 66  , int, u8);.#def
28650 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f  ine SQLITE_ECEL_
28660 44 55 50 20 20 20 20 20 20 30 78 30 31 20 20 2f  DUP      0x01  /
28670 2a 20 44 65 65 70 2c 20 6e 6f 74 20 73 68 61 6c  * Deep, not shal
28680 6c 6f 77 20 63 6f 70 69 65 73 20 2a 2f 0a 23 64  low copies */.#d
28690 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45  efine SQLITE_ECE
286a0 4c 5f 46 41 43 54 4f 52 20 20 20 30 78 30 32 20  L_FACTOR   0x02 
286b0 20 2f 2a 20 46 61 63 74 6f 72 20 6f 75 74 20 63   /* Factor out c
286c0 6f 6e 73 74 61 6e 74 20 74 65 72 6d 73 20 2a 2f  onstant terms */
286d0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
286e0 45 43 45 4c 5f 52 45 46 20 20 20 20 20 20 30 78  ECEL_REF      0x
286f0 30 34 20 20 2f 2a 20 55 73 65 20 45 78 70 72 4c  04  /* Use ExprL
28700 69 73 74 2e 75 2e 78 2e 69 4f 72 64 65 72 42 79  ist.u.x.iOrderBy
28710 43 6f 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  Col */.#define S
28720 51 4c 49 54 45 5f 45 43 45 4c 5f 4f 4d 49 54 52  QLITE_ECEL_OMITR
28730 45 46 20 20 30 78 30 38 20 20 2f 2a 20 4f 6d 69  EF  0x08  /* Omi
28740 74 20 69 66 20 45 78 70 72 4c 69 73 74 2e 75 2e  t if ExprList.u.
28750 78 2e 69 4f 72 64 65 72 42 79 43 6f 6c 20 2a 2f  x.iOrderByCol */
28760 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
28770 72 49 66 54 72 75 65 28 50 61 72 73 65 2a 2c 20  rIfTrue(Parse*, 
28780 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  Expr*, int, int)
28790 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
287a0 70 72 49 66 46 61 6c 73 65 28 50 61 72 73 65 2a  prIfFalse(Parse*
287b0 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e  , Expr*, int, in
287c0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
287d0 45 78 70 72 49 66 46 61 6c 73 65 44 75 70 28 50  ExprIfFalseDup(P
287e0 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
287f0 74 2c 20 69 6e 74 29 3b 0a 54 61 62 6c 65 20 2a  t, int);.Table *
28800 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65  sqlite3FindTable
28810 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
28820 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
28830 72 2a 29 3b 0a 23 64 65 66 69 6e 65 20 4c 4f 43  r*);.#define LOC
28840 41 54 45 5f 56 49 45 57 20 20 20 20 30 78 30 31  ATE_VIEW    0x01
28850 0a 23 64 65 66 69 6e 65 20 4c 4f 43 41 54 45 5f  .#define LOCATE_
28860 4e 4f 45 52 52 20 20 20 30 78 30 32 0a 54 61 62  NOERR   0x02.Tab
28870 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74  le *sqlite3Locat
28880 65 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 75 33  eTable(Parse*,u3
28890 32 20 66 6c 61 67 73 2c 63 6f 6e 73 74 20 63 68  2 flags,const ch
288a0 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
288b0 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65  );.Table *sqlite
288c0 33 4c 6f 63 61 74 65 54 61 62 6c 65 49 74 65 6d  3LocateTableItem
288d0 28 50 61 72 73 65 2a 2c 75 33 32 20 66 6c 61 67  (Parse*,u32 flag
288e0 73 2c 73 74 72 75 63 74 20 53 72 63 4c 69 73 74  s,struct SrcList
288f0 5f 69 74 65 6d 20 2a 29 3b 0a 49 6e 64 65 78 20  _item *);.Index 
28900 2a 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 64 65  *sqlite3FindInde
28910 78 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  x(sqlite3*,const
28920 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
28930 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
28940 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
28950 65 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c  eTable(sqlite3*,
28960 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  int,const char*)
28970 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e  ;.void sqlite3Un
28980 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64  linkAndDeleteInd
28990 65 78 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  ex(sqlite3*,int,
289a0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
289b0 69 64 20 73 71 6c 69 74 65 33 56 61 63 75 75 6d  id sqlite3Vacuum
289c0 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b  (Parse*,Token*);
289d0 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 75 6e 56  .int sqlite3RunV
289e0 61 63 75 75 6d 28 63 68 61 72 2a 2a 2c 20 73 71  acuum(char**, sq
289f0 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 63 68  lite3*, int);.ch
28a00 61 72 20 2a 73 71 6c 69 74 65 33 4e 61 6d 65 46  ar *sqlite3NameF
28a10 72 6f 6d 54 6f 6b 65 6e 28 73 71 6c 69 74 65 33  romToken(sqlite3
28a20 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  *, Token*);.int 
28a30 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6d 70 61  sqlite3ExprCompa
28a40 72 65 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c  re(Parse*,Expr*,
28a50 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e   Expr*, int);.in
28a60 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6d  t sqlite3ExprCom
28a70 70 61 72 65 53 6b 69 70 28 45 78 70 72 2a 2c 20  pareSkip(Expr*, 
28a80 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  Expr*, int);.int
28a90 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
28aa0 43 6f 6d 70 61 72 65 28 45 78 70 72 4c 69 73 74  Compare(ExprList
28ab0 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e  *, ExprList*, in
28ac0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  t);.int sqlite3E
28ad0 78 70 72 49 6d 70 6c 69 65 73 45 78 70 72 28 50  xprImpliesExpr(P
28ae0 61 72 73 65 2a 2c 45 78 70 72 2a 2c 20 45 78 70  arse*,Expr*, Exp
28af0 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  r*, int);.void s
28b00 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a  qlite3ExprAnalyz
28b10 65 41 67 67 72 65 67 61 74 65 73 28 4e 61 6d 65  eAggregates(Name
28b20 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a 29  Context*, Expr*)
28b30 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
28b40 70 72 41 6e 61 6c 79 7a 65 41 67 67 4c 69 73 74  prAnalyzeAggList
28b50 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 45 78  (NameContext*,Ex
28b60 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  prList*);.int sq
28b70 6c 69 74 65 33 45 78 70 72 43 6f 76 65 72 65 64  lite3ExprCovered
28b80 42 79 49 6e 64 65 78 28 45 78 70 72 2a 2c 20 69  ByIndex(Expr*, i
28b90 6e 74 20 69 43 75 72 2c 20 49 6e 64 65 78 20 2a  nt iCur, Index *
28ba0 70 49 64 78 29 3b 0a 69 6e 74 20 73 71 6c 69 74  pIdx);.int sqlit
28bb0 65 33 46 75 6e 63 74 69 6f 6e 55 73 65 73 54 68  e3FunctionUsesTh
28bc0 69 73 53 72 63 28 45 78 70 72 2a 2c 20 53 72 63  isSrc(Expr*, Src
28bd0 4c 69 73 74 2a 29 3b 0a 56 64 62 65 20 2a 73 71  List*);.Vdbe *sq
28be0 6c 69 74 65 33 47 65 74 56 64 62 65 28 50 61 72  lite3GetVdbe(Par
28bf0 73 65 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  se*);.#ifndef SQ
28c00 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a  LITE_UNTESTABLE.
28c10 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 6e 67  void sqlite3Prng
28c20 53 61 76 65 53 74 61 74 65 28 76 6f 69 64 29 3b  SaveState(void);
28c30 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 6e  .void sqlite3Prn
28c40 67 52 65 73 74 6f 72 65 53 74 61 74 65 28 76 6f  gRestoreState(vo
28c50 69 64 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64  id);.#endif.void
28c60 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b   sqlite3Rollback
28c70 41 6c 6c 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  All(sqlite3*,int
28c80 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
28c90 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d 61 28  odeVerifySchema(
28ca0 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f  Parse*, int);.vo
28cb0 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65  id sqlite3CodeVe
28cc0 72 69 66 79 4e 61 6d 65 64 53 63 68 65 6d 61 28  rifyNamedSchema(
28cd0 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68  Parse*, const ch
28ce0 61 72 20 2a 7a 44 62 29 3b 0a 76 6f 69 64 20 73  ar *zDb);.void s
28cf0 71 6c 69 74 65 33 42 65 67 69 6e 54 72 61 6e 73  qlite3BeginTrans
28d00 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69  action(Parse*, i
28d10 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
28d20 33 45 6e 64 54 72 61 6e 73 61 63 74 69 6f 6e 28  3EndTransaction(
28d30 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69  Parse*,int);.voi
28d40 64 20 73 71 6c 69 74 65 33 53 61 76 65 70 6f 69  d sqlite3Savepoi
28d50 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  nt(Parse*, int, 
28d60 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
28d70 6c 69 74 65 33 43 6c 6f 73 65 53 61 76 65 70 6f  lite3CloseSavepo
28d80 69 6e 74 73 28 73 71 6c 69 74 65 33 20 2a 29 3b  ints(sqlite3 *);
28d90 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4c 65 61  .void sqlite3Lea
28da0 76 65 4d 75 74 65 78 41 6e 64 43 6c 6f 73 65 5a  veMutexAndCloseZ
28db0 6f 6d 62 69 65 28 73 71 6c 69 74 65 33 2a 29 3b  ombie(sqlite3*);
28dc0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
28dd0 49 64 54 6f 54 72 75 65 46 61 6c 73 65 28 45 78  IdToTrueFalse(Ex
28de0 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
28df0 33 45 78 70 72 54 72 75 74 68 4f 70 65 72 61 6e  3ExprTruthOperan
28e00 64 28 63 6f 6e 73 74 20 45 78 70 72 2a 29 3b 0a  d(const Expr*);.
28e10 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49  int sqlite3ExprI
28e20 73 43 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a 29  sConstant(Expr*)
28e30 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
28e40 72 49 73 43 6f 6e 73 74 61 6e 74 4e 6f 74 4a 6f  rIsConstantNotJo
28e50 69 6e 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  in(Expr*);.int s
28e60 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73  qlite3ExprIsCons
28e70 74 61 6e 74 4f 72 46 75 6e 63 74 69 6f 6e 28 45  tantOrFunction(E
28e80 78 70 72 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73  xpr*, u8);.int s
28e90 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73  qlite3ExprIsCons
28ea0 74 61 6e 74 4f 72 47 72 6f 75 70 42 79 28 50 61  tantOrGroupBy(Pa
28eb0 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70  rse*, Expr*, Exp
28ec0 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  rList*);.int sql
28ed0 69 74 65 33 45 78 70 72 49 73 54 61 62 6c 65 43  ite3ExprIsTableC
28ee0 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a 2c 69 6e  onstant(Expr*,in
28ef0 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  t);.#ifdef SQLIT
28f00 45 5f 45 4e 41 42 4c 45 5f 43 55 52 53 4f 52 5f  E_ENABLE_CURSOR_
28f10 48 49 4e 54 53 0a 69 6e 74 20 73 71 6c 69 74 65  HINTS.int sqlite
28f20 33 45 78 70 72 43 6f 6e 74 61 69 6e 73 53 75 62  3ExprContainsSub
28f30 71 75 65 72 79 28 45 78 70 72 2a 29 3b 0a 23 65  query(Expr*);.#e
28f40 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33  ndif.int sqlite3
28f50 45 78 70 72 49 73 49 6e 74 65 67 65 72 28 45 78  ExprIsInteger(Ex
28f60 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20  pr*, int*);.int 
28f70 73 71 6c 69 74 65 33 45 78 70 72 43 61 6e 42 65  sqlite3ExprCanBe
28f80 4e 75 6c 6c 28 63 6f 6e 73 74 20 45 78 70 72 2a  Null(const Expr*
28f90 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
28fa0 70 72 4e 65 65 64 73 4e 6f 41 66 66 69 6e 69 74  prNeedsNoAffinit
28fb0 79 43 68 61 6e 67 65 28 63 6f 6e 73 74 20 45 78  yChange(const Ex
28fc0 70 72 2a 2c 20 63 68 61 72 29 3b 0a 69 6e 74 20  pr*, char);.int 
28fd0 73 71 6c 69 74 65 33 49 73 52 6f 77 69 64 28 63  sqlite3IsRowid(c
28fe0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
28ff0 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74  d sqlite3Generat
29000 65 52 6f 77 44 65 6c 65 74 65 28 0a 20 20 20 20  eRowDelete(.    
29010 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 54 72  Parse*,Table*,Tr
29020 69 67 67 65 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69  igger*,int,int,i
29030 6e 74 2c 69 31 36 2c 75 38 2c 75 38 2c 75 38 2c  nt,i16,u8,u8,u8,
29040 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
29050 65 33 47 65 6e 65 72 61 74 65 52 6f 77 49 6e 64  e3GenerateRowInd
29060 65 78 44 65 6c 65 74 65 28 50 61 72 73 65 2a 2c  exDelete(Parse*,
29070 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
29080 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 69  t, int*, int);.i
29090 6e 74 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61  nt sqlite3Genera
290a0 74 65 49 6e 64 65 78 4b 65 79 28 50 61 72 73 65  teIndexKey(Parse
290b0 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74 2c 20  *, Index*, int, 
290c0 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 49  int, int, int*,I
290d0 6e 64 65 78 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  ndex*,int);.void
290e0 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 50   sqlite3ResolveP
290f0 61 72 74 49 64 78 4c 61 62 65 6c 28 50 61 72 73  artIdxLabel(Pars
29100 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  e*,int);.void sq
29110 6c 69 74 65 33 47 65 6e 65 72 61 74 65 43 6f 6e  lite3GenerateCon
29120 73 74 72 61 69 6e 74 43 68 65 63 6b 73 28 50 61  straintChecks(Pa
29130 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2a  rse*,Table*,int*
29140 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  ,int,int,int,int
29150 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
29160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29170 20 20 20 20 20 20 20 75 38 2c 75 38 2c 69 6e 74         u8,u8,int
29180 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 23 69 66  ,int*,int*);.#if
29190 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
291a0 45 5f 4e 55 4c 4c 5f 54 52 49 4d 0a 20 20 76 6f  E_NULL_TRIM.  vo
291b0 69 64 20 73 71 6c 69 74 65 33 53 65 74 4d 61 6b  id sqlite3SetMak
291c0 65 52 65 63 6f 72 64 50 35 28 56 64 62 65 2a 2c  eRecordP5(Vdbe*,
291d0 54 61 62 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23  Table*);.#else.#
291e0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53   define sqlite3S
291f0 65 74 4d 61 6b 65 52 65 63 6f 72 64 50 35 28 41  etMakeRecordP5(A
29200 2c 42 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  ,B).#endif.void 
29210 73 71 6c 69 74 65 33 43 6f 6d 70 6c 65 74 65 49  sqlite3CompleteI
29220 6e 73 65 72 74 69 6f 6e 28 50 61 72 73 65 2a 2c  nsertion(Parse*,
29230 54 61 62 6c 65 2a 2c 69 6e 74 2c 69 6e 74 2c 69  Table*,int,int,i
29240 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c  nt,int*,int,int,
29250 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
29260 33 4f 70 65 6e 54 61 62 6c 65 41 6e 64 49 6e 64  3OpenTableAndInd
29270 69 63 65 73 28 50 61 72 73 65 2a 2c 20 54 61 62  ices(Parse*, Tab
29280 6c 65 2a 2c 20 69 6e 74 2c 20 75 38 2c 20 69 6e  le*, int, u8, in
29290 74 2c 20 75 38 2a 2c 20 69 6e 74 2a 2c 20 69 6e  t, u8*, int*, in
292a0 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
292b0 33 42 65 67 69 6e 57 72 69 74 65 4f 70 65 72 61  3BeginWriteOpera
292c0 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74  tion(Parse*, int
292d0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
292e0 69 74 65 33 4d 75 6c 74 69 57 72 69 74 65 28 50  ite3MultiWrite(P
292f0 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
29300 69 74 65 33 4d 61 79 41 62 6f 72 74 28 50 61 72  ite3MayAbort(Par
29310 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
29320 65 33 48 61 6c 74 43 6f 6e 73 74 72 61 69 6e 74  e3HaltConstraint
29330 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e  (Parse*, int, in
29340 74 2c 20 63 68 61 72 2a 2c 20 69 38 2c 20 75 38  t, char*, i8, u8
29350 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55  );.void sqlite3U
29360 6e 69 71 75 65 43 6f 6e 73 74 72 61 69 6e 74 28  niqueConstraint(
29370 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 49 6e 64  Parse*, int, Ind
29380 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ex*);.void sqlit
29390 65 33 52 6f 77 69 64 43 6f 6e 73 74 72 61 69 6e  e3RowidConstrain
293a0 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54  t(Parse*, int, T
293b0 61 62 6c 65 2a 29 3b 0a 45 78 70 72 20 2a 73 71  able*);.Expr *sq
293c0 6c 69 74 65 33 45 78 70 72 44 75 70 28 73 71 6c  lite3ExprDup(sql
293d0 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 29  ite3*,Expr*,int)
293e0 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69  ;.ExprList *sqli
293f0 74 65 33 45 78 70 72 4c 69 73 74 44 75 70 28 73  te3ExprListDup(s
29400 71 6c 69 74 65 33 2a 2c 45 78 70 72 4c 69 73 74  qlite3*,ExprList
29410 2a 2c 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20  *,int);.SrcList 
29420 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 44  *sqlite3SrcListD
29430 75 70 28 73 71 6c 69 74 65 33 2a 2c 53 72 63 4c  up(sqlite3*,SrcL
29440 69 73 74 2a 2c 69 6e 74 29 3b 0a 49 64 4c 69 73  ist*,int);.IdLis
29450 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69 73 74  t *sqlite3IdList
29460 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 49 64 4c  Dup(sqlite3*,IdL
29470 69 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73  ist*);.Select *s
29480 71 6c 69 74 65 33 53 65 6c 65 63 74 44 75 70 28  qlite3SelectDup(
29490 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a  sqlite3*,Select*
294a0 2c 69 6e 74 29 3b 0a 23 69 66 20 53 45 4c 45 43  ,int);.#if SELEC
294b0 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a 76  TTRACE_ENABLED.v
294c0 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63  oid sqlite3Selec
294d0 74 53 65 74 4e 61 6d 65 28 53 65 6c 65 63 74 2a  tSetName(Select*
294e0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23  ,const char*);.#
294f0 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
29500 6c 69 74 65 33 53 65 6c 65 63 74 53 65 74 4e 61  lite3SelectSetNa
29510 6d 65 28 41 2c 42 29 0a 23 65 6e 64 69 66 0a 76  me(A,B).#endif.v
29520 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 73 65 72  oid sqlite3Inser
29530 74 42 75 69 6c 74 69 6e 46 75 6e 63 73 28 46 75  tBuiltinFuncs(Fu
29540 6e 63 44 65 66 2a 2c 69 6e 74 29 3b 0a 46 75 6e  ncDef*,int);.Fun
29550 63 44 65 66 20 2a 73 71 6c 69 74 65 33 46 69 6e  cDef *sqlite3Fin
29560 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65  dFunction(sqlite
29570 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69  3*,const char*,i
29580 6e 74 2c 75 38 2c 75 38 29 3b 0a 76 6f 69 64 20  nt,u8,u8);.void 
29590 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 42  sqlite3RegisterB
295a0 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 28  uiltinFunctions(
295b0 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69  void);.void sqli
295c0 74 65 33 52 65 67 69 73 74 65 72 44 61 74 65 54  te3RegisterDateT
295d0 69 6d 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69  imeFunctions(voi
295e0 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  d);.void sqlite3
295f0 52 65 67 69 73 74 65 72 50 65 72 43 6f 6e 6e 65  RegisterPerConne
29600 63 74 69 6f 6e 42 75 69 6c 74 69 6e 46 75 6e 63  ctionBuiltinFunc
29610 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b  tions(sqlite3*);
29620 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65  .int sqlite3Safe
29630 74 79 43 68 65 63 6b 4f 6b 28 73 71 6c 69 74 65  tyCheckOk(sqlite
29640 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  3*);.int sqlite3
29650 53 61 66 65 74 79 43 68 65 63 6b 53 69 63 6b 4f  SafetyCheckSickO
29660 72 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76  rOk(sqlite3*);.v
29670 6f 69 64 20 73 71 6c 69 74 65 33 43 68 61 6e 67  oid sqlite3Chang
29680 65 43 6f 6f 6b 69 65 28 50 61 72 73 65 2a 2c 20  eCookie(Parse*, 
29690 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65 66 69  int);..#if !defi
296a0 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
296b0 56 49 45 57 29 20 26 26 20 21 64 65 66 69 6e 65  VIEW) && !define
296c0 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  d(SQLITE_OMIT_TR
296d0 49 47 47 45 52 29 0a 76 6f 69 64 20 73 71 6c 69  IGGER).void sqli
296e0 74 65 33 4d 61 74 65 72 69 61 6c 69 7a 65 56 69  te3MaterializeVi
296f0 65 77 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  ew(Parse*, Table
29700 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 4c 69  *, Expr*, ExprLi
29710 73 74 2a 2c 45 78 70 72 2a 2c 69 6e 74 29 3b 0a  st*,Expr*,int);.
29720 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20  #endif..#ifndef 
29730 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47  SQLITE_OMIT_TRIG
29740 47 45 52 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  GER.  void sqlit
29750 65 33 42 65 67 69 6e 54 72 69 67 67 65 72 28 50  e3BeginTrigger(P
29760 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 54 6f  arse*, Token*,To
29770 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 49 64 4c  ken*,int,int,IdL
29780 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 0a 20  ist*,SrcList*,. 
29790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
297a0 20 20 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c            Expr*,
297b0 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  int, int);.  voi
297c0 64 20 73 71 6c 69 74 65 33 46 69 6e 69 73 68 54  d sqlite3FinishT
297d0 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54  rigger(Parse*, T
297e0 72 69 67 67 65 72 53 74 65 70 2a 2c 20 54 6f 6b  riggerStep*, Tok
297f0 65 6e 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  en*);.  void sql
29800 69 74 65 33 44 72 6f 70 54 72 69 67 67 65 72 28  ite3DropTrigger(
29810 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
29820 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73  , int);.  void s
29830 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67 65  qlite3DropTrigge
29840 72 50 74 72 28 50 61 72 73 65 2a 2c 20 54 72 69  rPtr(Parse*, Tri
29850 67 67 65 72 2a 29 3b 0a 20 20 54 72 69 67 67 65  gger*);.  Trigge
29860 72 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65  r *sqlite3Trigge
29870 72 73 45 78 69 73 74 28 50 61 72 73 65 20 2a 2c  rsExist(Parse *,
29880 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 45 78   Table*, int, Ex
29890 70 72 4c 69 73 74 2a 2c 20 69 6e 74 20 2a 70 4d  prList*, int *pM
298a0 61 73 6b 29 3b 0a 20 20 54 72 69 67 67 65 72 20  ask);.  Trigger 
298b0 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 4c  *sqlite3TriggerL
298c0 69 73 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62  ist(Parse *, Tab
298d0 6c 65 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  le *);.  void sq
298e0 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67  lite3CodeRowTrig
298f0 67 65 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67  ger(Parse*, Trig
29900 67 65 72 20 2a 2c 20 69 6e 74 2c 20 45 78 70 72  ger *, int, Expr
29910 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 54 61 62 6c  List*, int, Tabl
29920 65 20 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  e *,.           
29930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29940 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
29950 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43  .  void sqlite3C
29960 6f 64 65 52 6f 77 54 72 69 67 67 65 72 44 69 72  odeRowTriggerDir
29970 65 63 74 28 50 61 72 73 65 20 2a 2c 20 54 72 69  ect(Parse *, Tri
29980 67 67 65 72 20 2a 2c 20 54 61 62 6c 65 20 2a 2c  gger *, Table *,
29990 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
299a0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 56 69  .  void sqliteVi
299b0 65 77 54 72 69 67 67 65 72 73 28 50 61 72 73 65  ewTriggers(Parse
299c0 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a  *, Table*, Expr*
299d0 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a  , int, ExprList*
299e0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
299f0 33 44 65 6c 65 74 65 54 72 69 67 67 65 72 53 74  3DeleteTriggerSt
29a00 65 70 28 73 71 6c 69 74 65 33 2a 2c 20 54 72 69  ep(sqlite3*, Tri
29a10 67 67 65 72 53 74 65 70 2a 29 3b 0a 20 20 54 72  ggerStep*);.  Tr
29a20 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74  iggerStep *sqlit
29a30 65 33 54 72 69 67 67 65 72 53 65 6c 65 63 74 53  e3TriggerSelectS
29a40 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c  tep(sqlite3*,Sel
29a50 65 63 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  ect*,.          
29a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
29a80 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
29a90 63 68 61 72 2a 29 3b 0a 20 20 54 72 69 67 67 65  char*);.  Trigge
29aa0 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72  rStep *sqlite3Tr
29ab0 69 67 67 65 72 49 6e 73 65 72 74 53 74 65 70 28  iggerInsertStep(
29ac0 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c  sqlite3*,Token*,
29ad0 20 49 64 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20   IdList*,.      
29ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29b00 20 20 53 65 6c 65 63 74 2a 2c 75 38 2c 63 6f 6e    Select*,u8,con
29b10 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
29b20 68 61 72 2a 29 3b 0a 20 20 54 72 69 67 67 65 72  har*);.  Trigger
29b30 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69  Step *sqlite3Tri
29b40 67 67 65 72 55 70 64 61 74 65 53 74 65 70 28 73  ggerUpdateStep(s
29b50 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 45  qlite3*,Token*,E
29b60 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c  xprList*, Expr*,
29b70 20 75 38 2c 0a 20 20 20 20 20 20 20 20 20 20 20   u8,.           
29b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29b90 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
29ba0 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
29bb0 68 61 72 2a 29 3b 0a 20 20 54 72 69 67 67 65 72  har*);.  Trigger
29bc0 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69  Step *sqlite3Tri
29bd0 67 67 65 72 44 65 6c 65 74 65 53 74 65 70 28 73  ggerDeleteStep(s
29be0 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20  qlite3*,Token*, 
29bf0 45 78 70 72 2a 2c 0a 20 20 20 20 20 20 20 20 20  Expr*,.         
29c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
29c20 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
29c30 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20   char*);.  void 
29c40 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69  sqlite3DeleteTri
29c50 67 67 65 72 28 73 71 6c 69 74 65 33 2a 2c 20 54  gger(sqlite3*, T
29c60 72 69 67 67 65 72 2a 29 3b 0a 20 20 76 6f 69 64  rigger*);.  void
29c70 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e   sqlite3UnlinkAn
29c80 64 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 73  dDeleteTrigger(s
29c90 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73  qlite3*,int,cons
29ca0 74 20 63 68 61 72 2a 29 3b 0a 20 20 75 33 32 20  t char*);.  u32 
29cb0 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 43 6f  sqlite3TriggerCo
29cc0 6c 6d 61 73 6b 28 50 61 72 73 65 2a 2c 54 72 69  lmask(Parse*,Tri
29cd0 67 67 65 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  gger*,ExprList*,
29ce0 69 6e 74 2c 69 6e 74 2c 54 61 62 6c 65 2a 2c 69  int,int,Table*,i
29cf0 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65 20 73 71  nt);.# define sq
29d00 6c 69 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76  lite3ParseToplev
29d10 65 6c 28 70 29 20 28 28 70 29 2d 3e 70 54 6f 70  el(p) ((p)->pTop
29d20 6c 65 76 65 6c 20 3f 20 28 70 29 2d 3e 70 54 6f  level ? (p)->pTo
29d30 70 6c 65 76 65 6c 20 3a 20 28 70 29 29 0a 23 20  plevel : (p)).# 
29d40 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
29d50 54 6f 70 6c 65 76 65 6c 28 70 29 20 28 28 70 29  Toplevel(p) ((p)
29d60 2d 3e 70 54 6f 70 6c 65 76 65 6c 3d 3d 30 29 0a  ->pToplevel==0).
29d70 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
29d80 71 6c 69 74 65 33 54 72 69 67 67 65 72 73 45 78  qlite3TriggersEx
29d90 69 73 74 28 42 2c 43 2c 44 2c 45 2c 46 29 20 30  ist(B,C,D,E,F) 0
29da0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
29db0 33 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 41  3DeleteTrigger(A
29dc0 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,B).# define sql
29dd0 69 74 65 33 44 72 6f 70 54 72 69 67 67 65 72 50  ite3DropTriggerP
29de0 74 72 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65  tr(A,B).# define
29df0 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e   sqlite3UnlinkAn
29e00 64 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 41  dDeleteTrigger(A
29e10 2c 42 2c 43 29 0a 23 20 64 65 66 69 6e 65 20 73  ,B,C).# define s
29e20 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69  qlite3CodeRowTri
29e30 67 67 65 72 28 41 2c 42 2c 43 2c 44 2c 45 2c 46  gger(A,B,C,D,E,F
29e40 2c 47 2c 48 2c 49 29 0a 23 20 64 65 66 69 6e 65  ,G,H,I).# define
29e50 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54   sqlite3CodeRowT
29e60 72 69 67 67 65 72 44 69 72 65 63 74 28 41 2c 42  riggerDirect(A,B
29e70 2c 43 2c 44 2c 45 2c 46 29 0a 23 20 64 65 66 69  ,C,D,E,F).# defi
29e80 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67 67 65  ne sqlite3Trigge
29e90 72 4c 69 73 74 28 58 2c 20 59 29 20 30 0a 23 20  rList(X, Y) 0.# 
29ea0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 50 61  define sqlite3Pa
29eb0 72 73 65 54 6f 70 6c 65 76 65 6c 28 70 29 20 70  rseToplevel(p) p
29ec0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
29ed0 33 49 73 54 6f 70 6c 65 76 65 6c 28 70 29 20 31  3IsToplevel(p) 1
29ee0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
29ef0 33 54 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28  3TriggerColmask(
29f00 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 29 20 30  A,B,C,D,E,F,G) 0
29f10 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c  .#endif..int sql
29f20 69 74 65 33 4a 6f 69 6e 54 79 70 65 28 50 61 72  ite3JoinType(Par
29f30 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  se*, Token*, Tok
29f40 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  en*, Token*);.vo
29f50 69 64 20 73 71 6c 69 74 65 33 43 72 65 61 74 65  id sqlite3Create
29f60 46 6f 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65  ForeignKey(Parse
29f70 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f  *, ExprList*, To
29f80 6b 65 6e 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  ken*, ExprList*,
29f90 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
29fa0 74 65 33 44 65 66 65 72 46 6f 72 65 69 67 6e 4b  te3DeferForeignK
29fb0 65 79 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b  ey(Parse*, int);
29fc0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
29fd0 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49  OMIT_AUTHORIZATI
29fe0 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ON.  void sqlite
29ff0 33 41 75 74 68 52 65 61 64 28 50 61 72 73 65 2a  3AuthRead(Parse*
2a000 2c 45 78 70 72 2a 2c 53 63 68 65 6d 61 2a 2c 53  ,Expr*,Schema*,S
2a010 72 63 4c 69 73 74 2a 29 3b 0a 20 20 69 6e 74 20  rcList*);.  int 
2a020 73 71 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b  sqlite3AuthCheck
2a030 28 50 61 72 73 65 2a 2c 69 6e 74 2c 20 63 6f 6e  (Parse*,int, con
2a040 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
2a050 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
2a060 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  r*);.  void sqli
2a070 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 75  te3AuthContextPu
2a080 73 68 28 50 61 72 73 65 2a 2c 20 41 75 74 68 43  sh(Parse*, AuthC
2a090 6f 6e 74 65 78 74 2a 2c 20 63 6f 6e 73 74 20 63  ontext*, const c
2a0a0 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  har*);.  void sq
2a0b0 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74  lite3AuthContext
2a0c0 50 6f 70 28 41 75 74 68 43 6f 6e 74 65 78 74 2a  Pop(AuthContext*
2a0d0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
2a0e0 41 75 74 68 52 65 61 64 43 6f 6c 28 50 61 72 73  AuthReadCol(Pars
2a0f0 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  e*, const char *
2a100 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  , const char *, 
2a110 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  int);.#else.# de
2a120 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68  fine sqlite3Auth
2a130 52 65 61 64 28 61 2c 62 2c 63 2c 64 29 0a 23 20  Read(a,b,c,d).# 
2a140 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
2a150 74 68 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c  thCheck(a,b,c,d,
2a160 65 29 20 20 20 20 53 51 4c 49 54 45 5f 4f 4b 0a  e)    SQLITE_OK.
2a170 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2a180 41 75 74 68 43 6f 6e 74 65 78 74 50 75 73 68 28  AuthContextPush(
2a190 61 2c 62 2c 63 29 0a 23 20 64 65 66 69 6e 65 20  a,b,c).# define 
2a1a0 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65  sqlite3AuthConte
2a1b0 78 74 50 6f 70 28 61 29 20 20 28 28 76 6f 69 64  xtPop(a)  ((void
2a1c0 29 28 61 29 29 0a 23 65 6e 64 69 66 0a 76 6f 69  )(a)).#endif.voi
2a1d0 64 20 73 71 6c 69 74 65 33 41 74 74 61 63 68 28  d sqlite3Attach(
2a1e0 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 45  Parse*, Expr*, E
2a1f0 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  xpr*, Expr*);.vo
2a200 69 64 20 73 71 6c 69 74 65 33 44 65 74 61 63 68  id sqlite3Detach
2a210 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b  (Parse*, Expr*);
2a220 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 78  .void sqlite3Fix
2a230 49 6e 69 74 28 44 62 46 69 78 65 72 2a 2c 20 50  Init(DbFixer*, P
2a240 61 72 73 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73  arse*, int, cons
2a250 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 54  t char*, const T
2a260 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
2a270 74 65 33 46 69 78 53 72 63 4c 69 73 74 28 44 62  te3FixSrcList(Db
2a280 46 69 78 65 72 2a 2c 20 53 72 63 4c 69 73 74 2a  Fixer*, SrcList*
2a290 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
2a2a0 78 53 65 6c 65 63 74 28 44 62 46 69 78 65 72 2a  xSelect(DbFixer*
2a2b0 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20  , Select*);.int 
2a2c0 73 71 6c 69 74 65 33 46 69 78 45 78 70 72 28 44  sqlite3FixExpr(D
2a2d0 62 46 69 78 65 72 2a 2c 20 45 78 70 72 2a 29 3b  bFixer*, Expr*);
2a2e0 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 45  .int sqlite3FixE
2a2f0 78 70 72 4c 69 73 74 28 44 62 46 69 78 65 72 2a  xprList(DbFixer*
2a300 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e  , ExprList*);.in
2a310 74 20 73 71 6c 69 74 65 33 46 69 78 54 72 69 67  t sqlite3FixTrig
2a320 67 65 72 53 74 65 70 28 44 62 46 69 78 65 72 2a  gerStep(DbFixer*
2a330 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a 29 3b  , TriggerStep*);
2a340 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 46  .int sqlite3AtoF
2a350 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20  (const char *z, 
2a360 64 6f 75 62 6c 65 2a 2c 20 69 6e 74 2c 20 75 38  double*, int, u8
2a370 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65  );.int sqlite3Ge
2a380 74 49 6e 74 33 32 28 63 6f 6e 73 74 20 63 68 61  tInt32(const cha
2a390 72 20 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20  r *, int*);.int 
2a3a0 73 71 6c 69 74 65 33 41 74 6f 69 28 63 6f 6e 73  sqlite3Atoi(cons
2a3b0 74 20 63 68 61 72 2a 29 3b 0a 23 69 66 6e 64 65  t char*);.#ifnde
2a3c0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  f SQLITE_OMIT_UT
2a3d0 46 31 36 0a 69 6e 74 20 73 71 6c 69 74 65 33 55  F16.int sqlite3U
2a3e0 74 66 31 36 42 79 74 65 4c 65 6e 28 63 6f 6e 73  tf16ByteLen(cons
2a3f0 74 20 76 6f 69 64 20 2a 70 44 61 74 61 2c 20 69  t void *pData, i
2a400 6e 74 20 6e 43 68 61 72 29 3b 0a 23 65 6e 64 69  nt nChar);.#endi
2a410 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66  f.int sqlite3Utf
2a420 38 43 68 61 72 4c 65 6e 28 63 6f 6e 73 74 20 63  8CharLen(const c
2a430 68 61 72 20 2a 70 44 61 74 61 2c 20 69 6e 74 20  har *pData, int 
2a440 6e 42 79 74 65 29 3b 0a 75 33 32 20 73 71 6c 69  nByte);.u32 sqli
2a450 74 65 33 55 74 66 38 52 65 61 64 28 63 6f 6e 73  te3Utf8Read(cons
2a460 74 20 75 38 2a 2a 29 3b 0a 4c 6f 67 45 73 74 20  t u8**);.LogEst 
2a470 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 28 75 36  sqlite3LogEst(u6
2a480 34 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74  4);.LogEst sqlit
2a490 65 33 4c 6f 67 45 73 74 41 64 64 28 4c 6f 67 45  e3LogEstAdd(LogE
2a4a0 73 74 2c 4c 6f 67 45 73 74 29 3b 0a 23 69 66 6e  st,LogEst);.#ifn
2a4b0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2a4c0 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 4c 6f 67  VIRTUALTABLE.Log
2a4d0 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73  Est sqlite3LogEs
2a4e0 74 46 72 6f 6d 44 6f 75 62 6c 65 28 64 6f 75 62  tFromDouble(doub
2a4f0 6c 65 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20  le);.#endif.#if 
2a500 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
2a510 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53  NABLE_STMT_SCANS
2a520 54 41 54 55 53 29 20 7c 7c 20 5c 0a 20 20 20 20  TATUS) || \.    
2a530 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
2a540 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53  NABLE_STAT3_OR_S
2a550 54 41 54 34 29 20 7c 7c 20 5c 0a 20 20 20 20 64  TAT4) || \.    d
2a560 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 58  efined(SQLITE_EX
2a570 50 4c 41 49 4e 5f 45 53 54 49 4d 41 54 45 44 5f  PLAIN_ESTIMATED_
2a580 52 4f 57 53 29 0a 75 36 34 20 73 71 6c 69 74 65  ROWS).u64 sqlite
2a590 33 4c 6f 67 45 73 74 54 6f 49 6e 74 28 4c 6f 67  3LogEstToInt(Log
2a5a0 45 73 74 29 3b 0a 23 65 6e 64 69 66 0a 56 4c 69  Est);.#endif.VLi
2a5b0 73 74 20 2a 73 71 6c 69 74 65 33 56 4c 69 73 74  st *sqlite3VList
2a5c0 41 64 64 28 73 71 6c 69 74 65 33 2a 2c 56 4c 69  Add(sqlite3*,VLi
2a5d0 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  st*,const char*,
2a5e0 69 6e 74 2c 69 6e 74 29 3b 0a 63 6f 6e 73 74 20  int,int);.const 
2a5f0 63 68 61 72 20 2a 73 71 6c 69 74 65 33 56 4c 69  char *sqlite3VLi
2a600 73 74 4e 75 6d 54 6f 4e 61 6d 65 28 56 4c 69 73  stNumToName(VLis
2a610 74 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  t*,int);.int sql
2a620 69 74 65 33 56 4c 69 73 74 4e 61 6d 65 54 6f 4e  ite3VListNameToN
2a630 75 6d 28 56 4c 69 73 74 2a 2c 63 6f 6e 73 74 20  um(VList*,const 
2a640 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 0a 2f 2a 0a  char*,int);../*.
2a650 2a 2a 20 52 6f 75 74 69 6e 65 73 20 74 6f 20 72  ** Routines to r
2a660 65 61 64 20 61 6e 64 20 77 72 69 74 65 20 76 61  ead and write va
2a670 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e  riable-length in
2a680 74 65 67 65 72 73 2e 20 20 54 68 65 73 65 20 75  tegers.  These u
2a690 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20 64 65 66  sed to.** be def
2a6a0 69 6e 65 64 20 6c 6f 63 61 6c 6c 79 2c 20 62 75  ined locally, bu
2a6b0 74 20 6e 6f 77 20 77 65 20 75 73 65 20 74 68 65  t now we use the
2a6c0 20 76 61 72 69 6e 74 20 72 6f 75 74 69 6e 65 73   varint routines
2a6d0 20 69 6e 20 74 68 65 20 75 74 69 6c 2e 63 0a 2a   in the util.c.*
2a6e0 2a 20 66 69 6c 65 2e 0a 2a 2f 0a 69 6e 74 20 73  * file..*/.int s
2a6f0 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 28  qlite3PutVarint(
2a700 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c 20  unsigned char*, 
2a710 75 36 34 29 3b 0a 75 38 20 73 71 6c 69 74 65 33  u64);.u8 sqlite3
2a720 47 65 74 56 61 72 69 6e 74 28 63 6f 6e 73 74 20  GetVarint(const 
2a730 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c  unsigned char *,
2a740 20 75 36 34 20 2a 29 3b 0a 75 38 20 73 71 6c 69   u64 *);.u8 sqli
2a750 74 65 33 47 65 74 56 61 72 69 6e 74 33 32 28 63  te3GetVarint32(c
2a760 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
2a770 61 72 20 2a 2c 20 75 33 32 20 2a 29 3b 0a 69 6e  ar *, u32 *);.in
2a780 74 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c  t sqlite3VarintL
2a790 65 6e 28 75 36 34 20 76 29 3b 0a 0a 2f 2a 0a 2a  en(u64 v);../*.*
2a7a0 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73  * The common cas
2a7b0 65 20 69 73 20 66 6f 72 20 61 20 76 61 72 69 6e  e is for a varin
2a7c0 74 20 74 6f 20 62 65 20 61 20 73 69 6e 67 6c 65  t to be a single
2a7d0 20 62 79 74 65 2e 20 20 54 68 65 79 20 66 6f 6c   byte.  They fol
2a7e0 6c 6f 77 69 6e 67 0a 2a 2a 20 6d 61 63 72 6f 73  lowing.** macros
2a7f0 20 68 61 6e 64 6c 65 20 74 68 65 20 63 6f 6d 6d   handle the comm
2a800 6f 6e 20 63 61 73 65 20 77 69 74 68 6f 75 74 20  on case without 
2a810 61 20 70 72 6f 63 65 64 75 72 65 20 63 61 6c 6c  a procedure call
2a820 2c 20 62 75 74 20 74 68 65 6e 20 63 61 6c 6c 0a  , but then call.
2a830 2a 2a 20 74 68 65 20 70 72 6f 63 65 64 75 72 65  ** the procedure
2a840 20 66 6f 72 20 6c 61 72 67 65 72 20 76 61 72 69   for larger vari
2a850 6e 74 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  nts..*/.#define 
2a860 67 65 74 56 61 72 69 6e 74 33 32 28 41 2c 42 29  getVarint32(A,B)
2a870 20 20 5c 0a 20 20 28 75 38 29 28 28 2a 28 41 29    \.  (u8)((*(A)
2a880 3c 28 75 38 29 30 78 38 30 29 3f 28 28 42 29 3d  <(u8)0x80)?((B)=
2a890 28 75 33 32 29 2a 28 41 29 29 2c 31 3a 73 71 6c  (u32)*(A)),1:sql
2a8a0 69 74 65 33 47 65 74 56 61 72 69 6e 74 33 32 28  ite3GetVarint32(
2a8b0 28 41 29 2c 28 75 33 32 20 2a 29 26 28 42 29 29  (A),(u32 *)&(B))
2a8c0 29 0a 23 64 65 66 69 6e 65 20 70 75 74 56 61 72  ).#define putVar
2a8d0 69 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a 20 20  int32(A,B)  \.  
2a8e0 28 75 38 29 28 28 28 75 33 32 29 28 42 29 3c 28  (u8)(((u32)(B)<(
2a8f0 75 33 32 29 30 78 38 30 29 3f 28 2a 28 41 29 3d  u32)0x80)?(*(A)=
2a900 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
2a910 42 29 29 2c 31 3a 5c 0a 20 20 73 71 6c 69 74 65  B)),1:\.  sqlite
2a920 33 50 75 74 56 61 72 69 6e 74 28 28 41 29 2c 28  3PutVarint((A),(
2a930 42 29 29 29 0a 23 64 65 66 69 6e 65 20 67 65 74  B))).#define get
2a940 56 61 72 69 6e 74 20 20 20 20 73 71 6c 69 74 65  Varint    sqlite
2a950 33 47 65 74 56 61 72 69 6e 74 0a 23 64 65 66 69  3GetVarint.#defi
2a960 6e 65 20 70 75 74 56 61 72 69 6e 74 20 20 20 20  ne putVarint    
2a970 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74  sqlite3PutVarint
2a980 0a 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73  ...const char *s
2a990 71 6c 69 74 65 33 49 6e 64 65 78 41 66 66 69 6e  qlite3IndexAffin
2a9a0 69 74 79 53 74 72 28 73 71 6c 69 74 65 33 2a 2c  ityStr(sqlite3*,
2a9b0 20 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73   Index*);.void s
2a9c0 71 6c 69 74 65 33 54 61 62 6c 65 41 66 66 69 6e  qlite3TableAffin
2a9d0 69 74 79 28 56 64 62 65 2a 2c 20 54 61 62 6c 65  ity(Vdbe*, Table
2a9e0 2a 2c 20 69 6e 74 29 3b 0a 63 68 61 72 20 73 71  *, int);.char sq
2a9f0 6c 69 74 65 33 43 6f 6d 70 61 72 65 41 66 66 69  lite3CompareAffi
2aa00 6e 69 74 79 28 45 78 70 72 20 2a 70 45 78 70 72  nity(Expr *pExpr
2aa10 2c 20 63 68 61 72 20 61 66 66 32 29 3b 0a 69 6e  , char aff2);.in
2aa20 74 20 73 71 6c 69 74 65 33 49 6e 64 65 78 41 66  t sqlite3IndexAf
2aa30 66 69 6e 69 74 79 4f 6b 28 45 78 70 72 20 2a 70  finityOk(Expr *p
2aa40 45 78 70 72 2c 20 63 68 61 72 20 69 64 78 5f 61  Expr, char idx_a
2aa50 66 66 69 6e 69 74 79 29 3b 0a 63 68 61 72 20 73  ffinity);.char s
2aa60 71 6c 69 74 65 33 54 61 62 6c 65 43 6f 6c 75 6d  qlite3TableColum
2aa70 6e 41 66 66 69 6e 69 74 79 28 54 61 62 6c 65 2a  nAffinity(Table*
2aa80 2c 69 6e 74 29 3b 0a 63 68 61 72 20 73 71 6c 69  ,int);.char sqli
2aa90 74 65 33 45 78 70 72 41 66 66 69 6e 69 74 79 28  te3ExprAffinity(
2aaa0 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e  Expr *pExpr);.in
2aab0 74 20 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28  t sqlite3Atoi64(
2aac0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 36 34  const char*, i64
2aad0 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74  *, int, u8);.int
2aae0 20 73 71 6c 69 74 65 33 44 65 63 4f 72 48 65 78   sqlite3DecOrHex
2aaf0 54 6f 49 36 34 28 63 6f 6e 73 74 20 63 68 61 72  ToI64(const char
2ab00 2a 2c 20 69 36 34 2a 29 3b 0a 76 6f 69 64 20 73  *, i64*);.void s
2ab10 71 6c 69 74 65 33 45 72 72 6f 72 57 69 74 68 4d  qlite3ErrorWithM
2ab20 73 67 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  sg(sqlite3*, int
2ab30 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e  , const char*,..
2ab40 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .);.void sqlite3
2ab50 45 72 72 6f 72 28 73 71 6c 69 74 65 33 2a 2c 69  Error(sqlite3*,i
2ab60 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2ab70 33 53 79 73 74 65 6d 45 72 72 6f 72 28 73 71 6c  3SystemError(sql
2ab80 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  ite3*,int);.void
2ab90 20 2a 73 71 6c 69 74 65 33 48 65 78 54 6f 42 6c   *sqlite3HexToBl
2aba0 6f 62 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e  ob(sqlite3*, con
2abb0 73 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20  st char *z, int 
2abc0 6e 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 48 65  n);.u8 sqlite3He
2abd0 78 54 6f 49 6e 74 28 69 6e 74 20 68 29 3b 0a 69  xToInt(int h);.i
2abe0 6e 74 20 73 71 6c 69 74 65 33 54 77 6f 50 61 72  nt sqlite3TwoPar
2abf0 74 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c 20 54  tName(Parse *, T
2ac00 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c  oken *, Token *,
2ac10 20 54 6f 6b 65 6e 20 2a 2a 29 3b 0a 0a 23 69 66   Token **);..#if
2ac20 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
2ac30 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45 29 0a 63  NEED_ERR_NAME).c
2ac40 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74  onst char *sqlit
2ac50 65 33 45 72 72 4e 61 6d 65 28 69 6e 74 29 3b 0a  e3ErrName(int);.
2ac60 23 65 6e 64 69 66 0a 0a 63 6f 6e 73 74 20 63 68  #endif..const ch
2ac70 61 72 20 2a 73 71 6c 69 74 65 33 45 72 72 53 74  ar *sqlite3ErrSt
2ac80 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  r(int);.int sqli
2ac90 74 65 33 52 65 61 64 53 63 68 65 6d 61 28 50 61  te3ReadSchema(Pa
2aca0 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 43 6f  rse *pParse);.Co
2acb0 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 46 69  llSeq *sqlite3Fi
2acc0 6e 64 43 6f 6c 6c 53 65 71 28 73 71 6c 69 74 65  ndCollSeq(sqlite
2acd0 33 2a 2c 75 38 20 65 6e 63 2c 20 63 6f 6e 73 74  3*,u8 enc, const
2ace0 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 43 6f 6c   char*,int);.Col
2acf0 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 4c 6f 63  lSeq *sqlite3Loc
2ad00 61 74 65 43 6f 6c 6c 53 65 71 28 50 61 72 73 65  ateCollSeq(Parse
2ad10 20 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73 74 20   *pParse, const 
2ad20 63 68 61 72 2a 7a 4e 61 6d 65 29 3b 0a 43 6f 6c  char*zName);.Col
2ad30 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 45 78 70  lSeq *sqlite3Exp
2ad40 72 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a  rCollSeq(Parse *
2ad50 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70 45  pParse, Expr *pE
2ad60 78 70 72 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73  xpr);.CollSeq *s
2ad70 71 6c 69 74 65 33 45 78 70 72 4e 4e 43 6f 6c 6c  qlite3ExprNNColl
2ad80 53 65 71 28 50 61 72 73 65 20 2a 70 50 61 72 73  Seq(Parse *pPars
2ad90 65 2c 20 45 78 70 72 20 2a 70 45 78 70 72 29 3b  e, Expr *pExpr);
2ada0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
2adb0 43 6f 6c 6c 53 65 71 4d 61 74 63 68 28 50 61 72  CollSeqMatch(Par
2adc0 73 65 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29  se*,Expr*,Expr*)
2add0 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
2ade0 78 70 72 41 64 64 43 6f 6c 6c 61 74 65 54 6f 6b  xprAddCollateTok
2adf0 65 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  en(Parse *pParse
2ae00 2c 20 45 78 70 72 2a 2c 20 63 6f 6e 73 74 20 54  , Expr*, const T
2ae10 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 45 78 70  oken*, int);.Exp
2ae20 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 64  r *sqlite3ExprAd
2ae30 64 43 6f 6c 6c 61 74 65 53 74 72 69 6e 67 28 50  dCollateString(P
2ae40 61 72 73 65 2a 2c 45 78 70 72 2a 2c 63 6f 6e 73  arse*,Expr*,cons
2ae50 74 20 63 68 61 72 2a 29 3b 0a 45 78 70 72 20 2a  t char*);.Expr *
2ae60 73 71 6c 69 74 65 33 45 78 70 72 53 6b 69 70 43  sqlite3ExprSkipC
2ae70 6f 6c 6c 61 74 65 28 45 78 70 72 2a 29 3b 0a 69  ollate(Expr*);.i
2ae80 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 43  nt sqlite3CheckC
2ae90 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c 20  ollSeq(Parse *, 
2aea0 43 6f 6c 6c 53 65 71 20 2a 29 3b 0a 69 6e 74 20  CollSeq *);.int 
2aeb0 73 71 6c 69 74 65 33 43 68 65 63 6b 4f 62 6a 65  sqlite3CheckObje
2aec0 63 74 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c 20  ctName(Parse *, 
2aed0 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 76  const char *);.v
2aee0 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 53  oid sqlite3VdbeS
2aef0 65 74 43 68 61 6e 67 65 73 28 73 71 6c 69 74 65  etChanges(sqlite
2af00 33 20 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  3 *, int);.int s
2af10 71 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28 69  qlite3AddInt64(i
2af20 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71  64*,i64);.int sq
2af30 6c 69 74 65 33 53 75 62 49 6e 74 36 34 28 69 36  lite3SubInt64(i6
2af40 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c  4*,i64);.int sql
2af50 69 74 65 33 4d 75 6c 49 6e 74 36 34 28 69 36 34  ite3MulInt64(i64
2af60 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69  *,i64);.int sqli
2af70 74 65 33 41 62 73 49 6e 74 33 32 28 69 6e 74 29  te3AbsInt32(int)
2af80 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
2af90 45 4e 41 42 4c 45 5f 38 5f 33 5f 4e 41 4d 45 53  ENABLE_8_3_NAMES
2afa0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6c  .void sqlite3Fil
2afb0 65 53 75 66 66 69 78 33 28 63 6f 6e 73 74 20 63  eSuffix3(const c
2afc0 68 61 72 2a 2c 20 63 68 61 72 2a 29 3b 0a 23 65  har*, char*);.#e
2afd0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
2afe0 69 74 65 33 46 69 6c 65 53 75 66 66 69 78 33 28  ite3FileSuffix3(
2aff0 58 2c 59 29 0a 23 65 6e 64 69 66 0a 75 38 20 73  X,Y).#endif.u8 s
2b000 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e  qlite3GetBoolean
2b010 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 75  (const char *z,u
2b020 38 29 3b 0a 0a 63 6f 6e 73 74 20 76 6f 69 64 20  8);..const void 
2b030 2a 73 71 6c 69 74 65 33 56 61 6c 75 65 54 65 78  *sqlite3ValueTex
2b040 74 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  t(sqlite3_value*
2b050 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74  , u8);.int sqlit
2b060 65 33 56 61 6c 75 65 42 79 74 65 73 28 73 71 6c  e3ValueBytes(sql
2b070 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29  ite3_value*, u8)
2b080 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61  ;.void sqlite3Va
2b090 6c 75 65 53 65 74 53 74 72 28 73 71 6c 69 74 65  lueSetStr(sqlite
2b0a0 33 5f 76 61 6c 75 65 2a 2c 20 69 6e 74 2c 20 63  3_value*, int, c
2b0b0 6f 6e 73 74 20 76 6f 69 64 20 2a 2c 75 38 2c 0a  onst void *,u8,.
2b0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b0d0 20 20 20 20 20 20 20 20 76 6f 69 64 28 2a 29 28          void(*)(
2b0e0 76 6f 69 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71  void*));.void sq
2b0f0 6c 69 74 65 33 56 61 6c 75 65 53 65 74 4e 75 6c  lite3ValueSetNul
2b100 6c 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  l(sqlite3_value*
2b110 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
2b120 61 6c 75 65 46 72 65 65 28 73 71 6c 69 74 65 33  alueFree(sqlite3
2b130 5f 76 61 6c 75 65 2a 29 3b 0a 73 71 6c 69 74 65  _value*);.sqlite
2b140 33 5f 76 61 6c 75 65 20 2a 73 71 6c 69 74 65 33  3_value *sqlite3
2b150 56 61 6c 75 65 4e 65 77 28 73 71 6c 69 74 65 33  ValueNew(sqlite3
2b160 20 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c   *);.#ifndef SQL
2b170 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 63  ITE_OMIT_UTF16.c
2b180 68 61 72 20 2a 73 71 6c 69 74 65 33 55 74 66 31  har *sqlite3Utf1
2b190 36 74 6f 38 28 73 71 6c 69 74 65 33 20 2a 2c 20  6to8(sqlite3 *, 
2b1a0 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74  const void*, int
2b1b0 2c 20 75 38 29 3b 0a 23 65 6e 64 69 66 0a 69 6e  , u8);.#endif.in
2b1c0 74 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72  t sqlite3ValueFr
2b1d0 6f 6d 45 78 70 72 28 73 71 6c 69 74 65 33 20 2a  omExpr(sqlite3 *
2b1e0 2c 20 45 78 70 72 20 2a 2c 20 75 38 2c 20 75 38  , Expr *, u8, u8
2b1f0 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  , sqlite3_value 
2b200 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  **);.void sqlite
2b210 33 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e  3ValueApplyAffin
2b220 69 74 79 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  ity(sqlite3_valu
2b230 65 20 2a 2c 20 75 38 2c 20 75 38 29 3b 0a 23 69  e *, u8, u8);.#i
2b240 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41  fndef SQLITE_AMA
2b250 4c 47 41 4d 41 54 49 4f 4e 0a 65 78 74 65 72 6e  LGAMATION.extern
2b260 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
2b270 63 68 61 72 20 73 71 6c 69 74 65 33 4f 70 63 6f  char sqlite3Opco
2b280 64 65 50 72 6f 70 65 72 74 79 5b 5d 3b 0a 65 78  deProperty[];.ex
2b290 74 65 72 6e 20 63 6f 6e 73 74 20 63 68 61 72 20  tern const char 
2b2a0 73 71 6c 69 74 65 33 53 74 72 42 49 4e 41 52 59  sqlite3StrBINARY
2b2b0 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74  [];.extern const
2b2c0 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73   unsigned char s
2b2d0 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f 77  qlite3UpperToLow
2b2e0 65 72 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e  er[];.extern con
2b2f0 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
2b300 20 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70   sqlite3CtypeMap
2b310 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74  [];.extern const
2b320 20 54 6f 6b 65 6e 20 73 71 6c 69 74 65 33 49 6e   Token sqlite3In
2b330 74 54 6f 6b 65 6e 73 5b 5d 3b 0a 65 78 74 65 72  tTokens[];.exter
2b340 6e 20 53 51 4c 49 54 45 5f 57 53 44 20 73 74 72  n SQLITE_WSD str
2b350 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69  uct Sqlite3Confi
2b360 67 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 3b  g sqlite3Config;
2b370 0a 65 78 74 65 72 6e 20 46 75 6e 63 44 65 66 48  .extern FuncDefH
2b380 61 73 68 20 73 71 6c 69 74 65 33 42 75 69 6c 74  ash sqlite3Built
2b390 69 6e 46 75 6e 63 74 69 6f 6e 73 3b 0a 23 69 66  inFunctions;.#if
2b3a0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2b3b0 5f 57 53 44 0a 65 78 74 65 72 6e 20 69 6e 74 20  _WSD.extern int 
2b3c0 73 71 6c 69 74 65 33 50 65 6e 64 69 6e 67 42 79  sqlite3PendingBy
2b3d0 74 65 3b 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69  te;.#endif.#endi
2b3e0 66 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52  f.#ifdef VDBE_PR
2b3f0 4f 46 49 4c 45 0a 65 78 74 65 72 6e 20 73 71 6c  OFILE.extern sql
2b400 69 74 65 33 5f 75 69 6e 74 36 34 20 73 71 6c 69  ite3_uint64 sqli
2b410 74 65 33 4e 50 72 6f 66 69 6c 65 43 6e 74 3b 0a  te3NProfileCnt;.
2b420 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
2b430 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64  te3RootPageMoved
2b440 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20  (sqlite3*, int, 
2b450 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
2b460 73 71 6c 69 74 65 33 52 65 69 6e 64 65 78 28 50  sqlite3Reindex(P
2b470 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  arse*, Token*, T
2b480 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
2b490 69 74 65 33 41 6c 74 65 72 46 75 6e 63 74 69 6f  ite3AlterFunctio
2b4a0 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73  ns(void);.void s
2b4b0 71 6c 69 74 65 33 41 6c 74 65 72 52 65 6e 61 6d  qlite3AlterRenam
2b4c0 65 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53  eTable(Parse*, S
2b4d0 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29  rcList*, Token*)
2b4e0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74  ;.int sqlite3Get
2b4f0 54 6f 6b 65 6e 28 63 6f 6e 73 74 20 75 6e 73 69  Token(const unsi
2b500 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 69 6e 74  gned char *, int
2b510 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
2b520 33 4e 65 73 74 65 64 50 61 72 73 65 28 50 61 72  3NestedParse(Par
2b530 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  se*, const char*
2b540 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c  , ...);.void sql
2b550 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61 72  ite3ExpirePrepar
2b560 65 64 53 74 61 74 65 6d 65 6e 74 73 28 73 71 6c  edStatements(sql
2b570 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ite3*);.int sqli
2b580 74 65 33 43 6f 64 65 53 75 62 73 65 6c 65 63 74  te3CodeSubselect
2b590 28 50 61 72 73 65 2a 2c 20 45 78 70 72 20 2a 2c  (Parse*, Expr *,
2b5a0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
2b5b0 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 50 72   sqlite3SelectPr
2b5c0 65 70 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63  ep(Parse*, Selec
2b5d0 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a  t*, NameContext*
2b5e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
2b5f0 65 6c 65 63 74 57 72 6f 6e 67 4e 75 6d 54 65 72  electWrongNumTer
2b600 6d 73 45 72 72 6f 72 28 50 61 72 73 65 20 2a 70  msError(Parse *p
2b610 50 61 72 73 65 2c 20 53 65 6c 65 63 74 20 2a 70  Parse, Select *p
2b620 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61  );.int sqlite3Ma
2b630 74 63 68 53 70 61 6e 4e 61 6d 65 28 63 6f 6e 73  tchSpanName(cons
2b640 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
2b650 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
2b660 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
2b670 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f  .int sqlite3Reso
2b680 6c 76 65 45 78 70 72 4e 61 6d 65 73 28 4e 61 6d  lveExprNames(Nam
2b690 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a  eContext*, Expr*
2b6a0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65  );.int sqlite3Re
2b6b0 73 6f 6c 76 65 45 78 70 72 4c 69 73 74 4e 61 6d  solveExprListNam
2b6c0 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c  es(NameContext*,
2b6d0 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 76 6f 69   ExprList*);.voi
2b6e0 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65  d sqlite3Resolve
2b6f0 53 65 6c 65 63 74 4e 61 6d 65 73 28 50 61 72 73  SelectNames(Pars
2b700 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d  e*, Select*, Nam
2b710 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f 69 64  eContext*);.void
2b720 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 53   sqlite3ResolveS
2b730 65 6c 66 52 65 66 65 72 65 6e 63 65 28 50 61 72  elfReference(Par
2b740 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 45  se*,Table*,int,E
2b750 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b  xpr*,ExprList*);
2b760 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f  .int sqlite3Reso
2b770 6c 76 65 4f 72 64 65 72 47 72 6f 75 70 42 79 28  lveOrderGroupBy(
2b780 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c  Parse*, Select*,
2b790 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73   ExprList*, cons
2b7a0 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
2b7b0 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 44 65 66 61  qlite3ColumnDefa
2b7c0 75 6c 74 28 56 64 62 65 20 2a 2c 20 54 61 62 6c  ult(Vdbe *, Tabl
2b7d0 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  e *, int, int);.
2b7e0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65  void sqlite3Alte
2b7f0 72 46 69 6e 69 73 68 41 64 64 43 6f 6c 75 6d 6e  rFinishAddColumn
2b800 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20  (Parse *, Token 
2b810 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2b820 41 6c 74 65 72 42 65 67 69 6e 41 64 64 43 6f 6c  AlterBeginAddCol
2b830 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 53 72 63  umn(Parse *, Src
2b840 4c 69 73 74 20 2a 29 3b 0a 43 6f 6c 6c 53 65 71  List *);.CollSeq
2b850 20 2a 73 71 6c 69 74 65 33 47 65 74 43 6f 6c 6c   *sqlite3GetColl
2b860 53 65 71 28 50 61 72 73 65 2a 2c 20 75 38 2c 20  Seq(Parse*, u8, 
2b870 43 6f 6c 6c 53 65 71 20 2a 2c 20 63 6f 6e 73 74  CollSeq *, const
2b880 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 73 71   char*);.char sq
2b890 6c 69 74 65 33 41 66 66 69 6e 69 74 79 54 79 70  lite3AffinityTyp
2b8a0 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 75  e(const char*, u
2b8b0 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  8*);.void sqlite
2b8c0 33 41 6e 61 6c 79 7a 65 28 50 61 72 73 65 2a 2c  3Analyze(Parse*,
2b8d0 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29   Token*, Token*)
2b8e0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 76  ;.int sqlite3Inv
2b8f0 6f 6b 65 42 75 73 79 48 61 6e 64 6c 65 72 28 42  okeBusyHandler(B
2b900 75 73 79 48 61 6e 64 6c 65 72 2a 29 3b 0a 69 6e  usyHandler*);.in
2b910 74 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62 28  t sqlite3FindDb(
2b920 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a  sqlite3*, Token*
2b930 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
2b940 6e 64 44 62 4e 61 6d 65 28 73 71 6c 69 74 65 33  ndDbName(sqlite3
2b950 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a   *, const char *
2b960 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 6e  );.int sqlite3An
2b970 61 6c 79 73 69 73 4c 6f 61 64 28 73 71 6c 69 74  alysisLoad(sqlit
2b980 65 33 2a 2c 69 6e 74 20 69 44 42 29 3b 0a 76 6f  e3*,int iDB);.vo
2b990 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  id sqlite3Delete
2b9a0 49 6e 64 65 78 53 61 6d 70 6c 65 73 28 73 71 6c  IndexSamples(sql
2b9b0 69 74 65 33 2a 2c 49 6e 64 65 78 2a 29 3b 0a 76  ite3*,Index*);.v
2b9c0 6f 69 64 20 73 71 6c 69 74 65 33 44 65 66 61 75  oid sqlite3Defau
2b9d0 6c 74 52 6f 77 45 73 74 28 49 6e 64 65 78 2a 29  ltRowEst(Index*)
2b9e0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
2b9f0 67 69 73 74 65 72 4c 69 6b 65 46 75 6e 63 74 69  gisterLikeFuncti
2ba00 6f 6e 73 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  ons(sqlite3*, in
2ba10 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  t);.int sqlite3I
2ba20 73 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 28 73 71  sLikeFunction(sq
2ba30 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74  lite3*,Expr*,int
2ba40 2a 2c 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  *,char*);.void s
2ba50 71 6c 69 74 65 33 53 63 68 65 6d 61 43 6c 65 61  qlite3SchemaClea
2ba60 72 28 76 6f 69 64 20 2a 29 3b 0a 53 63 68 65 6d  r(void *);.Schem
2ba70 61 20 2a 73 71 6c 69 74 65 33 53 63 68 65 6d 61  a *sqlite3Schema
2ba80 47 65 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 42  Get(sqlite3 *, B
2ba90 74 72 65 65 20 2a 29 3b 0a 69 6e 74 20 73 71 6c  tree *);.int sql
2baa0 69 74 65 33 53 63 68 65 6d 61 54 6f 49 6e 64 65  ite3SchemaToInde
2bab0 78 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 53  x(sqlite3 *db, S
2bac0 63 68 65 6d 61 20 2a 29 3b 0a 4b 65 79 49 6e 66  chema *);.KeyInf
2bad0 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66  o *sqlite3KeyInf
2bae0 6f 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c  oAlloc(sqlite3*,
2baf0 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  int,int);.void s
2bb00 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 55 6e 72  qlite3KeyInfoUnr
2bb10 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65  ef(KeyInfo*);.Ke
2bb20 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65  yInfo *sqlite3Ke
2bb30 79 49 6e 66 6f 52 65 66 28 4b 65 79 49 6e 66 6f  yInfoRef(KeyInfo
2bb40 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c  *);.KeyInfo *sql
2bb50 69 74 65 33 4b 65 79 49 6e 66 6f 4f 66 49 6e 64  ite3KeyInfoOfInd
2bb60 65 78 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78  ex(Parse*, Index
2bb70 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  *);.#ifdef SQLIT
2bb80 45 5f 44 45 42 55 47 0a 69 6e 74 20 73 71 6c 69  E_DEBUG.int sqli
2bb90 74 65 33 4b 65 79 49 6e 66 6f 49 73 57 72 69 74  te3KeyInfoIsWrit
2bba0 65 61 62 6c 65 28 4b 65 79 49 6e 66 6f 2a 29 3b  eable(KeyInfo*);
2bbb0 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69  .#endif.int sqli
2bbc0 74 65 33 43 72 65 61 74 65 46 75 6e 63 28 73 71  te3CreateFunc(sq
2bbd0 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63  lite3 *, const c
2bbe0 68 61 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  har *, int, int,
2bbf0 20 76 6f 69 64 20 2a 2c 0a 20 20 76 6f 69 64 20   void *,.  void 
2bc00 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  (*)(sqlite3_cont
2bc10 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33  ext*,int,sqlite3
2bc20 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a 20 20 76 6f  _value **),.  vo
2bc30 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63  id (*)(sqlite3_c
2bc40 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69  ontext*,int,sqli
2bc50 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 20 76  te3_value **), v
2bc60 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f  oid (*)(sqlite3_
2bc70 63 6f 6e 74 65 78 74 2a 29 2c 0a 20 20 46 75 6e  context*),.  Fun
2bc80 63 44 65 73 74 72 75 63 74 6f 72 20 2a 70 44 65  cDestructor *pDe
2bc90 73 74 72 75 63 74 6f 72 0a 29 3b 0a 76 6f 69 64  structor.);.void
2bca0 20 73 71 6c 69 74 65 33 4f 6f 6d 46 61 75 6c 74   sqlite3OomFault
2bcb0 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64  (sqlite3*);.void
2bcc0 20 73 71 6c 69 74 65 33 4f 6f 6d 43 6c 65 61 72   sqlite3OomClear
2bcd0 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20  (sqlite3*);.int 
2bce0 73 71 6c 69 74 65 33 41 70 69 45 78 69 74 28 73  sqlite3ApiExit(s
2bcf0 71 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e 74 29  qlite3 *db, int)
2bd00 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 70 65  ;.int sqlite3Ope
2bd10 6e 54 65 6d 70 44 61 74 61 62 61 73 65 28 50 61  nTempDatabase(Pa
2bd20 72 73 65 20 2a 29 3b 0a 0a 76 6f 69 64 20 73 71  rse *);..void sq
2bd30 6c 69 74 65 33 53 74 72 41 63 63 75 6d 49 6e 69  lite3StrAccumIni
2bd40 74 28 53 74 72 41 63 63 75 6d 2a 2c 20 73 71 6c  t(StrAccum*, sql
2bd50 69 74 65 33 2a 2c 20 63 68 61 72 2a 2c 20 69 6e  ite3*, char*, in
2bd60 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
2bd70 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41 70 70  lite3StrAccumApp
2bd80 65 6e 64 28 53 74 72 41 63 63 75 6d 2a 2c 63 6f  end(StrAccum*,co
2bd90 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a  nst char*,int);.
2bda0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41  void sqlite3StrA
2bdb0 63 63 75 6d 41 70 70 65 6e 64 41 6c 6c 28 53 74  ccumAppendAll(St
2bdc0 72 41 63 63 75 6d 2a 2c 63 6f 6e 73 74 20 63 68  rAccum*,const ch
2bdd0 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
2bde0 65 33 41 70 70 65 6e 64 43 68 61 72 28 53 74 72  e3AppendChar(Str
2bdf0 41 63 63 75 6d 2a 2c 69 6e 74 2c 63 68 61 72 29  Accum*,int,char)
2be00 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 53  ;.char *sqlite3S
2be10 74 72 41 63 63 75 6d 46 69 6e 69 73 68 28 53 74  trAccumFinish(St
2be20 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73  rAccum*);.void s
2be30 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 52 65  qlite3StrAccumRe
2be40 73 65 74 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a  set(StrAccum*);.
2be50 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65  void sqlite3Sele
2be60 63 74 44 65 73 74 49 6e 69 74 28 53 65 6c 65 63  ctDestInit(Selec
2be70 74 44 65 73 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b  tDest*,int,int);
2be80 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 43 72  .Expr *sqlite3Cr
2be90 65 61 74 65 43 6f 6c 75 6d 6e 45 78 70 72 28 73  eateColumnExpr(s
2bea0 71 6c 69 74 65 33 20 2a 2c 20 53 72 63 4c 69 73  qlite3 *, SrcLis
2beb0 74 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  t *, int, int);.
2bec0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 61 63  .void sqlite3Bac
2bed0 6b 75 70 52 65 73 74 61 72 74 28 73 71 6c 69 74  kupRestart(sqlit
2bee0 65 33 5f 62 61 63 6b 75 70 20 2a 29 3b 0a 76 6f  e3_backup *);.vo
2bef0 69 64 20 73 71 6c 69 74 65 33 42 61 63 6b 75 70  id sqlite3Backup
2bf00 55 70 64 61 74 65 28 73 71 6c 69 74 65 33 5f 62  Update(sqlite3_b
2bf10 61 63 6b 75 70 20 2a 2c 20 50 67 6e 6f 2c 20 63  ackup *, Pgno, c
2bf20 6f 6e 73 74 20 75 38 20 2a 29 3b 0a 0a 23 69 66  onst u8 *);..#if
2bf30 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2bf40 5f 53 55 42 51 55 45 52 59 0a 69 6e 74 20 73 71  _SUBQUERY.int sq
2bf50 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b 49 4e  lite3ExprCheckIN
2bf60 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b  (Parse*, Expr*);
2bf70 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
2bf80 73 71 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b  sqlite3ExprCheck
2bf90 49 4e 28 78 2c 79 29 20 53 51 4c 49 54 45 5f 4f  IN(x,y) SQLITE_O
2bfa0 4b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  K.#endif..#ifdef
2bfb0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
2bfc0 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 76 6f  TAT3_OR_STAT4.vo
2bfd0 69 64 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a  id sqlite3Analyz
2bfe0 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29  eFunctions(void)
2bff0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61  ;.int sqlite3Sta
2c000 74 34 50 72 6f 62 65 53 65 74 56 61 6c 75 65 28  t4ProbeSetValue(
2c010 0a 20 20 20 20 50 61 72 73 65 2a 2c 49 6e 64 65  .    Parse*,Inde
2c020 78 2a 2c 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  x*,UnpackedRecor
2c030 64 2a 2a 2c 45 78 70 72 2a 2c 69 6e 74 2c 69 6e  d**,Expr*,int,in
2c040 74 2c 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  t,int*);.int sql
2c050 69 74 65 33 53 74 61 74 34 56 61 6c 75 65 46 72  ite3Stat4ValueFr
2c060 6f 6d 45 78 70 72 28 50 61 72 73 65 2a 2c 20 45  omExpr(Parse*, E
2c070 78 70 72 2a 2c 20 75 38 2c 20 73 71 6c 69 74 65  xpr*, u8, sqlite
2c080 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 76 6f 69 64  3_value**);.void
2c090 20 73 71 6c 69 74 65 33 53 74 61 74 34 50 72 6f   sqlite3Stat4Pro
2c0a0 62 65 46 72 65 65 28 55 6e 70 61 63 6b 65 64 52  beFree(UnpackedR
2c0b0 65 63 6f 72 64 2a 29 3b 0a 69 6e 74 20 73 71 6c  ecord*);.int sql
2c0c0 69 74 65 33 53 74 61 74 34 43 6f 6c 75 6d 6e 28  ite3Stat4Column(
2c0d0 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20  sqlite3*, const 
2c0e0 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  void*, int, int,
2c0f0 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a   sqlite3_value**
2c100 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33 49  );.char sqlite3I
2c110 6e 64 65 78 43 6f 6c 75 6d 6e 41 66 66 69 6e 69  ndexColumnAffini
2c120 74 79 28 73 71 6c 69 74 65 33 2a 2c 20 49 6e 64  ty(sqlite3*, Ind
2c130 65 78 2a 2c 20 69 6e 74 29 3b 0a 23 65 6e 64 69  ex*, int);.#endi
2c140 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74  f../*.** The int
2c150 65 72 66 61 63 65 20 74 6f 20 74 68 65 20 4c 45  erface to the LE
2c160 4d 4f 4e 2d 67 65 6e 65 72 61 74 65 64 20 70 61  MON-generated pa
2c170 72 73 65 72 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  rser.*/.#ifndef 
2c180 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54  SQLITE_AMALGAMAT
2c190 49 4f 4e 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69  ION.  void *sqli
2c1a0 74 65 33 50 61 72 73 65 72 41 6c 6c 6f 63 28 76  te3ParserAlloc(v
2c1b0 6f 69 64 2a 28 2a 29 28 75 36 34 29 29 3b 0a 20  oid*(*)(u64));. 
2c1c0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72   void sqlite3Par
2c1d0 73 65 72 46 72 65 65 28 76 6f 69 64 2a 2c 20 76  serFree(void*, v
2c1e0 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a  oid(*)(void*));.
2c1f0 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
2c200 74 65 33 50 61 72 73 65 72 28 76 6f 69 64 2a 2c  te3Parser(void*,
2c210 20 69 6e 74 2c 20 54 6f 6b 65 6e 2c 20 50 61 72   int, Token, Par
2c220 73 65 2a 29 3b 0a 23 69 66 64 65 66 20 59 59 54  se*);.#ifdef YYT
2c230 52 41 43 4b 4d 41 58 53 54 41 43 4b 44 45 50 54  RACKMAXSTACKDEPT
2c240 48 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 50  H.  int sqlite3P
2c250 61 72 73 65 72 53 74 61 63 6b 50 65 61 6b 28 76  arserStackPeak(v
2c260 6f 69 64 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 76  oid*);.#endif..v
2c270 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f 4c  oid sqlite3AutoL
2c280 6f 61 64 45 78 74 65 6e 73 69 6f 6e 73 28 73 71  oadExtensions(sq
2c290 6c 69 74 65 33 2a 29 3b 0a 23 69 66 6e 64 65 66  lite3*);.#ifndef
2c2a0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41   SQLITE_OMIT_LOA
2c2b0 44 5f 45 58 54 45 4e 53 49 4f 4e 0a 20 20 76 6f  D_EXTENSION.  vo
2c2c0 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 45  id sqlite3CloseE
2c2d0 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65  xtensions(sqlite
2c2e0 33 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  3*);.#else.# def
2c2f0 69 6e 65 20 73 71 6c 69 74 65 33 43 6c 6f 73 65  ine sqlite3Close
2c300 45 78 74 65 6e 73 69 6f 6e 73 28 58 29 0a 23 65  Extensions(X).#e
2c310 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51  ndif..#ifndef SQ
2c320 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44  LITE_OMIT_SHARED
2c330 5f 43 41 43 48 45 0a 20 20 76 6f 69 64 20 73 71  _CACHE.  void sq
2c340 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 50  lite3TableLock(P
2c350 61 72 73 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  arse *, int, int
2c360 2c 20 75 38 2c 20 63 6f 6e 73 74 20 63 68 61 72  , u8, const char
2c370 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65   *);.#else.  #de
2c380 66 69 6e 65 20 73 71 6c 69 74 65 33 54 61 62 6c  fine sqlite3Tabl
2c390 65 4c 6f 63 6b 28 76 2c 77 2c 78 2c 79 2c 7a 29  eLock(v,w,x,y,z)
2c3a0 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
2c3b0 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 69 6e  SQLITE_TEST.  in
2c3c0 74 20 73 71 6c 69 74 65 33 55 74 66 38 54 6f 38  t sqlite3Utf8To8
2c3d0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 29  (unsigned char*)
2c3e0 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  ;.#endif..#ifdef
2c3f0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
2c400 54 55 41 4c 54 41 42 4c 45 0a 23 20 20 64 65 66  TUALTABLE.#  def
2c410 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 43  ine sqlite3VtabC
2c420 6c 65 61 72 28 59 29 0a 23 20 20 64 65 66 69 6e  lear(Y).#  defin
2c430 65 20 73 71 6c 69 74 65 33 56 74 61 62 53 79 6e  e sqlite3VtabSyn
2c440 63 28 58 2c 59 29 20 53 51 4c 49 54 45 5f 4f 4b  c(X,Y) SQLITE_OK
2c450 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
2c460 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28 58  e3VtabRollback(X
2c470 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  ).#  define sqli
2c480 74 65 33 56 74 61 62 43 6f 6d 6d 69 74 28 58 29  te3VtabCommit(X)
2c490 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
2c4a0 65 33 56 74 61 62 49 6e 53 79 6e 63 28 64 62 29  e3VtabInSync(db)
2c4b0 20 30 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c   0.#  define sql
2c4c0 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 58 29 0a  ite3VtabLock(X).
2c4d0 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
2c4e0 33 56 74 61 62 55 6e 6c 6f 63 6b 28 58 29 0a 23  3VtabUnlock(X).#
2c4f0 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
2c500 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 58  VtabUnlockList(X
2c510 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  ).#  define sqli
2c520 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74  te3VtabSavepoint
2c530 28 58 2c 20 59 2c 20 5a 29 20 53 51 4c 49 54 45  (X, Y, Z) SQLITE
2c540 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20 73 71  _OK.#  define sq
2c550 6c 69 74 65 33 47 65 74 56 54 61 62 6c 65 28 58  lite3GetVTable(X
2c560 2c 59 29 20 20 28 28 56 54 61 62 6c 65 2a 29 30  ,Y)  ((VTable*)0
2c570 29 0a 23 65 6c 73 65 0a 20 20 20 76 6f 69 64 20  ).#else.   void 
2c580 73 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61 72  sqlite3VtabClear
2c590 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 54 61  (sqlite3 *db, Ta
2c5a0 62 6c 65 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73  ble*);.   void s
2c5b0 71 6c 69 74 65 33 56 74 61 62 44 69 73 63 6f 6e  qlite3VtabDiscon
2c5c0 6e 65 63 74 28 73 71 6c 69 74 65 33 20 2a 64 62  nect(sqlite3 *db
2c5d0 2c 20 54 61 62 6c 65 20 2a 70 29 3b 0a 20 20 20  , Table *p);.   
2c5e0 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 53  int sqlite3VtabS
2c5f0 79 6e 63 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  ync(sqlite3 *db,
2c600 20 56 64 62 65 2a 29 3b 0a 20 20 20 69 6e 74 20   Vdbe*);.   int 
2c610 73 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c 62  sqlite3VtabRollb
2c620 61 63 6b 28 73 71 6c 69 74 65 33 20 2a 64 62 29  ack(sqlite3 *db)
2c630 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33  ;.   int sqlite3
2c640 56 74 61 62 43 6f 6d 6d 69 74 28 73 71 6c 69 74  VtabCommit(sqlit
2c650 65 33 20 2a 64 62 29 3b 0a 20 20 20 76 6f 69 64  e3 *db);.   void
2c660 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b   sqlite3VtabLock
2c670 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76  (VTable *);.   v
2c680 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 55  oid sqlite3VtabU
2c690 6e 6c 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b  nlock(VTable *);
2c6a0 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  .   void sqlite3
2c6b0 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 73  VtabUnlockList(s
2c6c0 71 6c 69 74 65 33 2a 29 3b 0a 20 20 20 69 6e 74  qlite3*);.   int
2c6d0 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65   sqlite3VtabSave
2c6e0 70 6f 69 6e 74 28 73 71 6c 69 74 65 33 20 2a 2c  point(sqlite3 *,
2c6f0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 20 76   int, int);.   v
2c700 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 49  oid sqlite3VtabI
2c710 6d 70 6f 72 74 45 72 72 6d 73 67 28 56 64 62 65  mportErrmsg(Vdbe
2c720 2a 2c 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a  *, sqlite3_vtab*
2c730 29 3b 0a 20 20 20 56 54 61 62 6c 65 20 2a 73 71  );.   VTable *sq
2c740 6c 69 74 65 33 47 65 74 56 54 61 62 6c 65 28 73  lite3GetVTable(s
2c750 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29  qlite3*, Table*)
2c760 3b 0a 20 20 20 4d 6f 64 75 6c 65 20 2a 73 71 6c  ;.   Module *sql
2c770 69 74 65 33 56 74 61 62 43 72 65 61 74 65 4d 6f  ite3VtabCreateMo
2c780 64 75 6c 65 28 0a 20 20 20 20 20 73 71 6c 69 74  dule(.     sqlit
2c790 65 33 2a 2c 0a 20 20 20 20 20 63 6f 6e 73 74 20  e3*,.     const 
2c7a0 63 68 61 72 2a 2c 0a 20 20 20 20 20 63 6f 6e 73  char*,.     cons
2c7b0 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  t sqlite3_module
2c7c0 2a 2c 0a 20 20 20 20 20 76 6f 69 64 2a 2c 0a 20  *,.     void*,. 
2c7d0 20 20 20 20 76 6f 69 64 28 2a 29 28 76 6f 69 64      void(*)(void
2c7e0 2a 29 0a 20 20 20 29 3b 0a 23 20 20 64 65 66 69  *).   );.#  defi
2c7f0 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 49 6e  ne sqlite3VtabIn
2c800 53 79 6e 63 28 64 62 29 20 28 28 64 62 29 2d 3e  Sync(db) ((db)->
2c810 6e 56 54 72 61 6e 73 3e 30 20 26 26 20 28 64 62  nVTrans>0 && (db
2c820 29 2d 3e 61 56 54 72 61 6e 73 3d 3d 30 29 0a 23  )->aVTrans==0).#
2c830 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65  endif.int sqlite
2c840 33 56 74 61 62 45 70 6f 6e 79 6d 6f 75 73 54 61  3VtabEponymousTa
2c850 62 6c 65 49 6e 69 74 28 50 61 72 73 65 2a 2c 4d  bleInit(Parse*,M
2c860 6f 64 75 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71  odule*);.void sq
2c870 6c 69 74 65 33 56 74 61 62 45 70 6f 6e 79 6d 6f  lite3VtabEponymo
2c880 75 73 54 61 62 6c 65 43 6c 65 61 72 28 73 71 6c  usTableClear(sql
2c890 69 74 65 33 2a 2c 4d 6f 64 75 6c 65 2a 29 3b 0a  ite3*,Module*);.
2c8a0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
2c8b0 4d 61 6b 65 57 72 69 74 61 62 6c 65 28 50 61 72  MakeWritable(Par
2c8c0 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 76 6f 69  se*,Table*);.voi
2c8d0 64 20 73 71 6c 69 74 65 33 56 74 61 62 42 65 67  d sqlite3VtabBeg
2c8e0 69 6e 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20  inParse(Parse*, 
2c8f0 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Token*, Token*, 
2c900 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 76 6f  Token*, int);.vo
2c910 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 46 69  id sqlite3VtabFi
2c920 6e 69 73 68 50 61 72 73 65 28 50 61 72 73 65 2a  nishParse(Parse*
2c930 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  , Token*);.void 
2c940 73 71 6c 69 74 65 33 56 74 61 62 41 72 67 49 6e  sqlite3VtabArgIn
2c950 69 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64  it(Parse*);.void
2c960 20 73 71 6c 69 74 65 33 56 74 61 62 41 72 67 45   sqlite3VtabArgE
2c970 78 74 65 6e 64 28 50 61 72 73 65 2a 2c 20 54 6f  xtend(Parse*, To
2c980 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
2c990 65 33 56 74 61 62 43 61 6c 6c 43 72 65 61 74 65  e3VtabCallCreate
2c9a0 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20  (sqlite3*, int, 
2c9b0 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 63 68  const char *, ch
2c9c0 61 72 20 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ar **);.int sqli
2c9d0 74 65 33 56 74 61 62 43 61 6c 6c 43 6f 6e 6e 65  te3VtabCallConne
2c9e0 63 74 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  ct(Parse*, Table
2c9f0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
2ca00 74 61 62 43 61 6c 6c 44 65 73 74 72 6f 79 28 73  tabCallDestroy(s
2ca10 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f  qlite3*, int, co
2ca20 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74  nst char *);.int
2ca30 20 73 71 6c 69 74 65 33 56 74 61 62 42 65 67 69   sqlite3VtabBegi
2ca40 6e 28 73 71 6c 69 74 65 33 20 2a 2c 20 56 54 61  n(sqlite3 *, VTa
2ca50 62 6c 65 20 2a 29 3b 0a 46 75 6e 63 44 65 66 20  ble *);.FuncDef 
2ca60 2a 73 71 6c 69 74 65 33 56 74 61 62 4f 76 65 72  *sqlite3VtabOver
2ca70 6c 6f 61 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c  loadFunction(sql
2ca80 69 74 65 33 20 2a 2c 46 75 6e 63 44 65 66 2a 2c  ite3 *,FuncDef*,
2ca90 20 69 6e 74 20 6e 41 72 67 2c 20 45 78 70 72 2a   int nArg, Expr*
2caa0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49  );.void sqlite3I
2cab0 6e 76 61 6c 69 64 46 75 6e 63 74 69 6f 6e 28 73  nvalidFunction(s
2cac0 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
2cad0 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
2cae0 65 2a 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 69 6e  e**);.sqlite3_in
2caf0 74 36 34 20 73 71 6c 69 74 65 33 53 74 6d 74 43  t64 sqlite3StmtC
2cb00 75 72 72 65 6e 74 54 69 6d 65 28 73 71 6c 69 74  urrentTime(sqlit
2cb10 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e  e3_context*);.in
2cb20 74 20 73 71 6c 69 74 65 33 56 64 62 65 50 61 72  t sqlite3VdbePar
2cb30 61 6d 65 74 65 72 49 6e 64 65 78 28 56 64 62 65  ameterIndex(Vdbe
2cb40 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
2cb50 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
2cb60 33 54 72 61 6e 73 66 65 72 42 69 6e 64 69 6e 67  3TransferBinding
2cb70 73 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  s(sqlite3_stmt *
2cb80 2c 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  , sqlite3_stmt *
2cb90 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
2cba0 61 72 73 65 72 52 65 73 65 74 28 50 61 72 73 65  arserReset(Parse
2cbb0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  *);.int sqlite3R
2cbc0 65 70 72 65 70 61 72 65 28 56 64 62 65 2a 29 3b  eprepare(Vdbe*);
2cbd0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
2cbe0 72 4c 69 73 74 43 68 65 63 6b 4c 65 6e 67 74 68  rListCheckLength
2cbf0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73  (Parse*, ExprLis
2cc00 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  t*, const char*)
2cc10 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74  ;.CollSeq *sqlit
2cc20 65 33 42 69 6e 61 72 79 43 6f 6d 70 61 72 65 43  e3BinaryCompareC
2cc30 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c 20  ollSeq(Parse *, 
2cc40 45 78 70 72 20 2a 2c 20 45 78 70 72 20 2a 29 3b  Expr *, Expr *);
2cc50 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 65 6d 70  .int sqlite3Temp
2cc60 49 6e 4d 65 6d 6f 72 79 28 63 6f 6e 73 74 20 73  InMemory(const s
2cc70 71 6c 69 74 65 33 2a 29 3b 0a 63 6f 6e 73 74 20  qlite3*);.const 
2cc80 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4a 6f 75  char *sqlite3Jou
2cc90 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e 74  rnalModename(int
2cca0 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
2ccb0 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74  E_OMIT_WAL.  int
2ccc0 20 73 71 6c 69 74 65 33 43 68 65 63 6b 70 6f 69   sqlite3Checkpoi
2ccd0 6e 74 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  nt(sqlite3*, int
2cce0 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74  , int, int*, int
2ccf0 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  *);.  int sqlite
2cd00 33 57 61 6c 44 65 66 61 75 6c 74 48 6f 6f 6b 28  3WalDefaultHook(
2cd10 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63  void*,sqlite3*,c
2cd20 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b  onst char*,int);
2cd30 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
2cd40 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 54 45 0a  SQLITE_OMIT_CTE.
2cd50 20 20 57 69 74 68 20 2a 73 71 6c 69 74 65 33 57    With *sqlite3W
2cd60 69 74 68 41 64 64 28 50 61 72 73 65 2a 2c 57 69  ithAdd(Parse*,Wi
2cd70 74 68 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c  th*,Token*,ExprL
2cd80 69 73 74 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 20  ist*,Select*);. 
2cd90 20 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 74   void sqlite3Wit
2cda0 68 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a  hDelete(sqlite3*
2cdb0 2c 57 69 74 68 2a 29 3b 0a 20 20 76 6f 69 64 20  ,With*);.  void 
2cdc0 73 71 6c 69 74 65 33 57 69 74 68 50 75 73 68 28  sqlite3WithPush(
2cdd0 50 61 72 73 65 2a 2c 20 57 69 74 68 2a 2c 20 75  Parse*, With*, u
2cde0 38 29 3b 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e  8);.#else.#defin
2cdf0 65 20 73 71 6c 69 74 65 33 57 69 74 68 50 75 73  e sqlite3WithPus
2ce00 68 28 78 2c 79 2c 7a 29 0a 23 64 65 66 69 6e 65  h(x,y,z).#define
2ce10 20 73 71 6c 69 74 65 33 57 69 74 68 44 65 6c 65   sqlite3WithDele
2ce20 74 65 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a  te(x,y).#endif..
2ce30 2f 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73 20  /* Declarations 
2ce40 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20 69 6e  for functions in
2ce50 20 66 6b 65 79 2e 63 2e 20 41 6c 6c 20 6f 66 20   fkey.c. All of 
2ce60 74 68 65 73 65 20 61 72 65 20 72 65 70 6c 61 63  these are replac
2ce70 65 64 20 62 79 0a 2a 2a 20 6e 6f 2d 6f 70 20 6d  ed by.** no-op m
2ce80 61 63 72 6f 73 20 69 66 20 4f 4d 49 54 5f 46 4f  acros if OMIT_FO
2ce90 52 45 49 47 4e 5f 4b 45 59 20 69 73 20 64 65 66  REIGN_KEY is def
2cea0 69 6e 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61  ined. In this ca
2ceb0 73 65 20 6e 6f 20 66 6f 72 65 69 67 6e 0a 2a 2a  se no foreign.**
2cec0 20 6b 65 79 20 66 75 6e 63 74 69 6f 6e 61 6c 69   key functionali
2ced0 74 79 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e  ty is available.
2cee0 20 49 66 20 4f 4d 49 54 5f 54 52 49 47 47 45 52   If OMIT_TRIGGER
2cef0 20 69 73 20 64 65 66 69 6e 65 64 20 62 75 74 0a   is defined but.
2cf00 2a 2a 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  ** OMIT_FOREIGN_
2cf10 4b 45 59 20 69 73 20 6e 6f 74 2c 20 6f 6e 6c 79  KEY is not, only
2cf20 20 73 6f 6d 65 20 6f 66 20 74 68 65 20 66 75 6e   some of the fun
2cf30 63 74 69 6f 6e 73 20 61 72 65 20 6e 6f 2d 6f 70  ctions are no-op
2cf40 65 64 2e 20 49 6e 0a 2a 2a 20 74 68 69 73 20 63  ed. In.** this c
2cf50 61 73 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 73  ase foreign keys
2cf60 20 61 72 65 20 70 61 72 73 65 64 2c 20 62 75 74   are parsed, but
2cf70 20 6e 6f 20 6f 74 68 65 72 20 66 75 6e 63 74 69   no other functi
2cf80 6f 6e 61 6c 69 74 79 20 69 73 0a 2a 2a 20 70 72  onality is.** pr
2cf90 6f 76 69 64 65 64 20 28 65 6e 66 6f 72 63 65 6d  ovided (enforcem
2cfa0 65 6e 74 20 6f 66 20 46 4b 20 63 6f 6e 73 74 72  ent of FK constr
2cfb0 61 69 6e 74 73 20 72 65 71 75 69 72 65 73 20 74  aints requires t
2cfc0 68 65 20 74 72 69 67 67 65 72 73 20 73 75 62 2d  he triggers sub-
2cfd0 73 79 73 74 65 6d 29 2e 0a 2a 2f 0a 23 69 66 20  system)..*/.#if 
2cfe0 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
2cff0 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
2d000 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
2d010 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45  LITE_OMIT_TRIGGE
2d020 52 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  R).  void sqlite
2d030 33 46 6b 43 68 65 63 6b 28 50 61 72 73 65 2a 2c  3FkCheck(Parse*,
2d040 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
2d050 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20  t, int*, int);. 
2d060 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 44   void sqlite3FkD
2d070 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  ropTable(Parse*,
2d080 20 53 72 63 4c 69 73 74 20 2a 2c 20 54 61 62 6c   SrcList *, Tabl
2d090 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  e*);.  void sqli
2d0a0 74 65 33 46 6b 41 63 74 69 6f 6e 73 28 50 61 72  te3FkActions(Par
2d0b0 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70  se*, Table*, Exp
2d0c0 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74  rList*, int, int
2d0d0 2a 2c 20 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73  *, int);.  int s
2d0e0 71 6c 69 74 65 33 46 6b 52 65 71 75 69 72 65 64  qlite3FkRequired
2d0f0 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
2d100 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 75   int*, int);.  u
2d110 33 32 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d  32 sqlite3FkOldm
2d120 61 73 6b 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ask(Parse*, Tabl
2d130 65 2a 29 3b 0a 20 20 46 4b 65 79 20 2a 73 71 6c  e*);.  FKey *sql
2d140 69 74 65 33 46 6b 52 65 66 65 72 65 6e 63 65 73  ite3FkReferences
2d150 28 54 61 62 6c 65 20 2a 29 3b 0a 23 65 6c 73 65  (Table *);.#else
2d160 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
2d170 65 33 46 6b 41 63 74 69 6f 6e 73 28 61 2c 62 2c  e3FkActions(a,b,
2d180 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64 65 66 69  c,d,e,f).  #defi
2d190 6e 65 20 73 71 6c 69 74 65 33 46 6b 43 68 65 63  ne sqlite3FkChec
2d1a0 6b 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20  k(a,b,c,d,e,f). 
2d1b0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
2d1c0 46 6b 44 72 6f 70 54 61 62 6c 65 28 61 2c 62 2c  FkDropTable(a,b,
2d1d0 63 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  c).  #define sql
2d1e0 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 61 2c  ite3FkOldmask(a,
2d1f0 62 29 20 20 20 20 20 20 20 20 20 30 0a 20 20 23  b)         0.  #
2d200 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
2d210 52 65 71 75 69 72 65 64 28 61 2c 62 2c 63 2c 64  Required(a,b,c,d
2d220 29 20 20 20 20 30 0a 20 20 23 64 65 66 69 6e 65  )    0.  #define
2d230 20 73 71 6c 69 74 65 33 46 6b 52 65 66 65 72 65   sqlite3FkRefere
2d240 6e 63 65 73 28 61 29 20 20 20 20 20 20 20 20 30  nces(a)        0
2d250 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
2d260 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45  SQLITE_OMIT_FORE
2d270 49 47 4e 5f 4b 45 59 0a 20 20 76 6f 69 64 20 73  IGN_KEY.  void s
2d280 71 6c 69 74 65 33 46 6b 44 65 6c 65 74 65 28 73  qlite3FkDelete(s
2d290 71 6c 69 74 65 33 20 2a 2c 20 54 61 62 6c 65 2a  qlite3 *, Table*
2d2a0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
2d2b0 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 50 61  FkLocateIndex(Pa
2d2c0 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 46 4b 65 79  rse*,Table*,FKey
2d2d0 2a 2c 49 6e 64 65 78 2a 2a 2c 69 6e 74 2a 2a 29  *,Index**,int**)
2d2e0 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
2d2f0 65 20 73 71 6c 69 74 65 33 46 6b 44 65 6c 65 74  e sqlite3FkDelet
2d300 65 28 61 2c 62 29 0a 20 20 23 64 65 66 69 6e 65  e(a,b).  #define
2d310 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65   sqlite3FkLocate
2d320 49 6e 64 65 78 28 61 2c 62 2c 63 2c 64 2c 65 29  Index(a,b,c,d,e)
2d330 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20  .#endif.../*.** 
2d340 41 76 61 69 6c 61 62 6c 65 20 66 61 75 6c 74 20  Available fault 
2d350 69 6e 6a 65 63 74 6f 72 73 2e 20 20 53 68 6f 75  injectors.  Shou
2d360 6c 64 20 62 65 20 6e 75 6d 62 65 72 65 64 20 62  ld be numbered b
2d370 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 30 2e  eginning with 0.
2d380 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
2d390 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52  TE_FAULTINJECTOR
2d3a0 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 30 0a 23 64  _MALLOC     0.#d
2d3b0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 41 55  efine SQLITE_FAU
2d3c0 4c 54 49 4e 4a 45 43 54 4f 52 5f 43 4f 55 4e 54  LTINJECTOR_COUNT
2d3d0 20 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54        1../*.** T
2d3e0 68 65 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20  he interface to 
2d3f0 74 68 65 20 63 6f 64 65 20 69 6e 20 66 61 75 6c  the code in faul
2d400 74 2e 63 20 75 73 65 64 20 66 6f 72 20 69 64 65  t.c used for ide
2d410 6e 74 69 66 79 69 6e 67 20 22 62 65 6e 69 67 6e  ntifying "benign
2d420 22 0a 2a 2a 20 6d 61 6c 6c 6f 63 20 66 61 69 6c  ".** malloc fail
2d430 75 72 65 73 2e 20 54 68 69 73 20 69 73 20 6f 6e  ures. This is on
2d440 6c 79 20 70 72 65 73 65 6e 74 20 69 66 20 53 51  ly present if SQ
2d450 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a  LITE_UNTESTABLE.
2d460 2a 2a 20 69 73 20 6e 6f 74 20 64 65 66 69 6e 65  ** is not define
2d470 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  d..*/.#ifndef SQ
2d480 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a  LITE_UNTESTABLE.
2d490 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65    void sqlite3Be
2d4a0 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28  ginBenignMalloc(
2d4b0 76 6f 69 64 29 3b 0a 20 20 76 6f 69 64 20 73 71  void);.  void sq
2d4c0 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61  lite3EndBenignMa
2d4d0 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 23 65 6c 73  lloc(void);.#els
2d4e0 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
2d4f0 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61  te3BeginBenignMa
2d500 6c 6c 6f 63 28 29 0a 20 20 23 64 65 66 69 6e 65  lloc().  #define
2d510 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67   sqlite3EndBenig
2d520 6e 4d 61 6c 6c 6f 63 28 29 0a 23 65 6e 64 69 66  nMalloc().#endif
2d530 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  ../*.** Allowed 
2d540 72 65 74 75 72 6e 20 76 61 6c 75 65 73 20 66 72  return values fr
2d550 6f 6d 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e  om sqlite3FindIn
2d560 49 6e 64 65 78 28 29 0a 2a 2f 0a 23 64 65 66 69  Index().*/.#defi
2d570 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 52 4f 57 49  ne IN_INDEX_ROWI
2d580 44 20 20 20 20 20 20 20 20 31 20 20 20 2f 2a 20  D        1   /* 
2d590 53 65 61 72 63 68 20 74 68 65 20 72 6f 77 69 64  Search the rowid
2d5a0 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 2a 2f   of the table */
2d5b0 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
2d5c0 58 5f 45 50 48 20 20 20 20 20 20 20 20 20 20 32  X_EPH          2
2d5d0 20 20 20 2f 2a 20 53 65 61 72 63 68 20 61 6e 20     /* Search an 
2d5e0 65 70 68 65 6d 65 72 61 6c 20 62 2d 74 72 65 65  ephemeral b-tree
2d5f0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49   */.#define IN_I
2d600 4e 44 45 58 5f 49 4e 44 45 58 5f 41 53 43 20 20  NDEX_INDEX_ASC  
2d610 20 20 33 20 20 20 2f 2a 20 45 78 69 73 74 69 6e    3   /* Existin
2d620 67 20 69 6e 64 65 78 20 41 53 43 45 4e 44 49 4e  g index ASCENDIN
2d630 47 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f  G */.#define IN_
2d640 49 4e 44 45 58 5f 49 4e 44 45 58 5f 44 45 53 43  INDEX_INDEX_DESC
2d650 20 20 20 34 20 20 20 2f 2a 20 45 78 69 73 74 69     4   /* Existi
2d660 6e 67 20 69 6e 64 65 78 20 44 45 53 43 45 4e 44  ng index DESCEND
2d670 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  ING */.#define I
2d680 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20 20 20 20  N_INDEX_NOOP    
2d690 20 20 20 20 20 35 20 20 20 2f 2a 20 4e 6f 20 74       5   /* No t
2d6a0 61 62 6c 65 20 61 76 61 69 6c 61 62 6c 65 2e 20  able available. 
2d6b0 55 73 65 20 63 6f 6d 70 61 72 69 73 6f 6e 73 20  Use comparisons 
2d6c0 2a 2f 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64  */./*.** Allowed
2d6d0 20 66 6c 61 67 73 20 66 6f 72 20 74 68 65 20 33   flags for the 3
2d6e0 72 64 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20  rd parameter to 
2d6f0 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64  sqlite3FindInInd
2d700 65 78 28 29 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ex()..*/.#define
2d710 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 5f 4f   IN_INDEX_NOOP_O
2d720 4b 20 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a  K     0x0001  /*
2d730 20 4f 4b 20 74 6f 20 72 65 74 75 72 6e 20 49 4e   OK to return IN
2d740 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20 2a 2f 0a 23  _INDEX_NOOP */.#
2d750 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
2d760 4d 45 4d 42 45 52 53 48 49 50 20 20 30 78 30 30  MEMBERSHIP  0x00
2d770 30 32 20 20 2f 2a 20 49 4e 20 6f 70 65 72 61 74  02  /* IN operat
2d780 6f 72 20 75 73 65 64 20 66 6f 72 20 6d 65 6d 62  or used for memb
2d790 65 72 73 68 69 70 20 74 65 73 74 20 2a 2f 0a 23  ership test */.#
2d7a0 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
2d7b0 4c 4f 4f 50 20 20 20 20 20 20 20 20 30 78 30 30  LOOP        0x00
2d7c0 30 34 20 20 2f 2a 20 49 4e 20 6f 70 65 72 61 74  04  /* IN operat
2d7d0 6f 72 20 75 73 65 64 20 61 73 20 61 20 6c 6f 6f  or used as a loo
2d7e0 70 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  p */.int sqlite3
2d7f0 46 69 6e 64 49 6e 49 6e 64 65 78 28 50 61 72 73  FindInIndex(Pars
2d800 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75 33 32  e *, Expr *, u32
2d810 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 0a  , int*, int*);..
2d820 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e  int sqlite3Journ
2d830 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f 76  alOpen(sqlite3_v
2d840 66 73 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  fs *, const char
2d850 20 2a 2c 20 73 71 6c 69 74 65 33 5f 66 69 6c 65   *, sqlite3_file
2d860 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69   *, int, int);.i
2d870 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  nt sqlite3Journa
2d880 6c 53 69 7a 65 28 73 71 6c 69 74 65 33 5f 76 66  lSize(sqlite3_vf
2d890 73 20 2a 29 3b 0a 23 69 66 20 64 65 66 69 6e 65  s *);.#if define
2d8a0 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
2d8b0 41 54 4f 4d 49 43 5f 57 52 49 54 45 29 20 5c 0a  ATOMIC_WRITE) \.
2d8c0 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49   || defined(SQLI
2d8d0 54 45 5f 45 4e 41 42 4c 45 5f 42 41 54 43 48 5f  TE_ENABLE_BATCH_
2d8e0 41 54 4f 4d 49 43 5f 57 52 49 54 45 29 0a 20 20  ATOMIC_WRITE).  
2d8f0 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e  int sqlite3Journ
2d900 61 6c 43 72 65 61 74 65 28 73 71 6c 69 74 65 33  alCreate(sqlite3
2d910 5f 66 69 6c 65 20 2a 29 3b 0a 23 65 6e 64 69 66  _file *);.#endif
2d920 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75  ..int sqlite3Jou
2d930 72 6e 61 6c 49 73 49 6e 4d 65 6d 6f 72 79 28 73  rnalIsInMemory(s
2d940 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 70 29 3b  qlite3_file *p);
2d950 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d  .void sqlite3Mem
2d960 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69  JournalOpen(sqli
2d970 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 0a 76 6f  te3_file *);..vo
2d980 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 53 65  id sqlite3ExprSe
2d990 74 48 65 69 67 68 74 41 6e 64 46 6c 61 67 73 28  tHeightAndFlags(
2d9a0 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45  Parse *pParse, E
2d9b0 78 70 72 20 2a 70 29 3b 0a 23 69 66 20 53 51 4c  xpr *p);.#if SQL
2d9c0 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50  ITE_MAX_EXPR_DEP
2d9d0 54 48 3e 30 0a 20 20 69 6e 74 20 73 71 6c 69 74  TH>0.  int sqlit
2d9e0 65 33 53 65 6c 65 63 74 45 78 70 72 48 65 69 67  e3SelectExprHeig
2d9f0 68 74 28 53 65 6c 65 63 74 20 2a 29 3b 0a 20 20  ht(Select *);.  
2da00 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
2da10 68 65 63 6b 48 65 69 67 68 74 28 50 61 72 73 65  heckHeight(Parse
2da20 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 20  *, int);.#else. 
2da30 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
2da40 53 65 6c 65 63 74 45 78 70 72 48 65 69 67 68 74  SelectExprHeight
2da50 28 78 29 20 30 0a 20 20 23 64 65 66 69 6e 65 20  (x) 0.  #define 
2da60 73 71 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b  sqlite3ExprCheck
2da70 48 65 69 67 68 74 28 78 2c 79 29 0a 23 65 6e 64  Height(x,y).#end
2da80 69 66 0a 0a 75 33 32 20 73 71 6c 69 74 65 33 47  if..u32 sqlite3G
2da90 65 74 34 62 79 74 65 28 63 6f 6e 73 74 20 75 38  et4byte(const u8
2daa0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2dab0 50 75 74 34 62 79 74 65 28 75 38 2a 2c 20 75 33  Put4byte(u8*, u3
2dac0 32 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  2);..#ifdef SQLI
2dad0 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b  TE_ENABLE_UNLOCK
2dae0 5f 4e 4f 54 49 46 59 0a 20 20 76 6f 69 64 20 73  _NOTIFY.  void s
2daf0 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e  qlite3Connection
2db00 42 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65 33 20  Blocked(sqlite3 
2db10 2a 2c 20 73 71 6c 69 74 65 33 20 2a 29 3b 0a 20  *, sqlite3 *);. 
2db20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e   void sqlite3Con
2db30 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28  nectionUnlocked(
2db40 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20  sqlite3 *db);.  
2db50 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e  void sqlite3Conn
2db60 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 73 71 6c  ectionClosed(sql
2db70 69 74 65 33 20 2a 64 62 29 3b 0a 23 65 6c 73 65  ite3 *db);.#else
2db80 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
2db90 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63  e3ConnectionBloc
2dba0 6b 65 64 28 78 2c 79 29 0a 20 20 23 64 65 66 69  ked(x,y).  #defi
2dbb0 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63  ne sqlite3Connec
2dbc0 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 78 29 0a  tionUnlocked(x).
2dbd0 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
2dbe0 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65  3ConnectionClose
2dbf0 64 28 78 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66  d(x).#endif..#if
2dc00 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
2dc10 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 50  .  void sqlite3P
2dc20 61 72 73 65 72 54 72 61 63 65 28 46 49 4c 45 2a  arserTrace(FILE*
2dc30 2c 20 63 68 61 72 20 2a 29 3b 0a 23 65 6e 64 69  , char *);.#endi
2dc40 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 59 59  f.#if defined(YY
2dc50 43 4f 56 45 52 41 47 45 29 0a 20 20 69 6e 74 20  COVERAGE).  int 
2dc60 73 71 6c 69 74 65 33 50 61 72 73 65 72 43 6f 76  sqlite3ParserCov
2dc70 65 72 61 67 65 28 46 49 4c 45 2a 29 3b 0a 23 65  erage(FILE*);.#e
2dc80 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 74  ndif../*.** If t
2dc90 68 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  he SQLITE_ENABLE
2dca0 20 49 4f 54 52 41 43 45 20 65 78 69 73 74 73 20   IOTRACE exists 
2dcb0 74 68 65 6e 20 74 68 65 20 67 6c 6f 62 61 6c 20  then the global 
2dcc0 76 61 72 69 61 62 6c 65 0a 2a 2a 20 73 71 6c 69  variable.** sqli
2dcd0 74 65 33 49 6f 54 72 61 63 65 20 69 73 20 61 20  te3IoTrace is a 
2dce0 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 70 72 69  pointer to a pri
2dcf0 6e 74 66 2d 6c 69 6b 65 20 72 6f 75 74 69 6e 65  ntf-like routine
2dd00 20 75 73 65 64 20 74 6f 0a 2a 2a 20 70 72 69 6e   used to.** prin
2dd10 74 20 49 2f 4f 20 74 72 61 63 69 6e 67 20 6d 65  t I/O tracing me
2dd20 73 73 61 67 65 73 2e 0a 2a 2f 0a 23 69 66 64 65  ssages..*/.#ifde
2dd30 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
2dd40 49 4f 54 52 41 43 45 0a 23 20 64 65 66 69 6e 65  IOTRACE.# define
2dd50 20 49 4f 54 52 41 43 45 28 41 29 20 20 69 66 28   IOTRACE(A)  if(
2dd60 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20   sqlite3IoTrace 
2dd70 29 7b 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63  ){ sqlite3IoTrac
2dd80 65 20 41 3b 20 7d 0a 20 20 76 6f 69 64 20 73 71  e A; }.  void sq
2dd90 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61 63 65  lite3VdbeIOTrace
2dda0 53 71 6c 28 56 64 62 65 2a 29 3b 0a 53 51 4c 49  Sql(Vdbe*);.SQLI
2ddb0 54 45 5f 41 50 49 20 53 51 4c 49 54 45 5f 45 58  TE_API SQLITE_EX
2ddc0 54 45 52 4e 20 76 6f 69 64 20 28 53 51 4c 49 54  TERN void (SQLIT
2ddd0 45 5f 43 44 45 43 4c 20 2a 73 71 6c 69 74 65 33  E_CDECL *sqlite3
2dde0 49 6f 54 72 61 63 65 29 28 63 6f 6e 73 74 20 63  IoTrace)(const c
2ddf0 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23 65 6c 73 65  har*,...);.#else
2de00 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41 43  .# define IOTRAC
2de10 45 28 41 29 0a 23 20 64 65 66 69 6e 65 20 73 71  E(A).# define sq
2de20 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61 63 65  lite3VdbeIOTrace
2de30 53 71 6c 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f  Sql(X).#endif../
2de40 2a 0a 2a 2a 20 54 68 65 73 65 20 72 6f 75 74 69  *.** These routi
2de50 6e 65 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c  nes are availabl
2de60 65 20 66 6f 72 20 74 68 65 20 6d 65 6d 32 2e 63  e for the mem2.c
2de70 20 64 65 62 75 67 67 69 6e 67 20 6d 65 6d 6f 72   debugging memor
2de80 79 20 61 6c 6c 6f 63 61 74 6f 72 0a 2a 2a 20 6f  y allocator.** o
2de90 6e 6c 79 2e 20 20 54 68 65 79 20 61 72 65 20 75  nly.  They are u
2dea0 73 65 64 20 74 6f 20 76 65 72 69 66 79 20 74 68  sed to verify th
2deb0 61 74 20 64 69 66 66 65 72 65 6e 74 20 22 74 79  at different "ty
2dec0 70 65 73 22 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a  pes" of memory.*
2ded0 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72  * allocations ar
2dee0 65 20 70 72 6f 70 65 72 6c 79 20 74 72 61 63 6b  e properly track
2def0 65 64 20 62 79 20 74 68 65 20 73 79 73 74 65 6d  ed by the system
2df00 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d  ..**.** sqlite3M
2df10 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 29  emdebugSetType()
2df20 20 73 65 74 73 20 74 68 65 20 22 74 79 70 65 22   sets the "type"
2df30 20 6f 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f   of an allocatio
2df40 6e 20 74 6f 20 6f 6e 65 20 6f 66 0a 2a 2a 20 74  n to one of.** t
2df50 68 65 20 4d 45 4d 54 59 50 45 5f 2a 20 6d 61 63  he MEMTYPE_* mac
2df60 72 6f 73 20 64 65 66 69 6e 65 64 20 62 65 6c 6f  ros defined belo
2df70 77 2e 20 20 54 68 65 20 74 79 70 65 20 6d 75 73  w.  The type mus
2df80 74 20 62 65 20 61 20 62 69 74 6d 61 73 6b 20 77  t be a bitmask w
2df90 69 74 68 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20  ith.** a single 
2dfa0 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 73  bit set..**.** s
2dfb0 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61  qlite3MemdebugHa
2dfc0 73 54 79 70 65 28 29 20 72 65 74 75 72 6e 73 20  sType() returns 
2dfd0 74 72 75 65 20 69 66 20 61 6e 79 20 6f 66 20 74  true if any of t
2dfe0 68 65 20 62 69 74 73 20 69 6e 20 69 74 73 20 73  he bits in its s
2dff0 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e  econd.** argumen
2e000 74 20 6d 61 74 63 68 20 74 68 65 20 74 79 70 65  t match the type
2e010 20 73 65 74 20 62 79 20 74 68 65 20 70 72 65 76   set by the prev
2e020 69 6f 75 73 20 73 71 6c 69 74 65 33 4d 65 6d 64  ious sqlite3Memd
2e030 65 62 75 67 53 65 74 54 79 70 65 28 29 2e 0a 2a  ebugSetType()..*
2e040 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  * sqlite3Memdebu
2e050 67 48 61 73 54 79 70 65 28 29 20 69 73 20 69 6e  gHasType() is in
2e060 74 65 6e 64 65 64 20 66 6f 72 20 75 73 65 20 69  tended for use i
2e070 6e 73 69 64 65 20 61 73 73 65 72 74 28 29 20 73  nside assert() s
2e080 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a  tatements..**.**
2e090 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
2e0a0 4e 6f 54 79 70 65 28 29 20 72 65 74 75 72 6e 73  NoType() returns
2e0b0 20 74 72 75 65 20 69 66 20 6e 6f 6e 65 20 6f 66   true if none of
2e0c0 20 74 68 65 20 62 69 74 73 20 69 6e 20 69 74 73   the bits in its
2e0d0 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d   second.** argum
2e0e0 65 6e 74 20 6d 61 74 63 68 20 74 68 65 20 74 79  ent match the ty
2e0f0 70 65 20 73 65 74 20 62 79 20 74 68 65 20 70 72  pe set by the pr
2e100 65 76 69 6f 75 73 20 73 71 6c 69 74 65 33 4d 65  evious sqlite3Me
2e110 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 29 2e  mdebugSetType().
2e120 0a 2a 2a 0a 2a 2a 20 50 65 72 68 61 70 73 20 74  .**.** Perhaps t
2e130 68 65 20 6d 6f 73 74 20 69 6d 70 6f 72 74 61 6e  he most importan
2e140 74 20 70 6f 69 6e 74 20 69 73 20 74 68 65 20 64  t point is the d
2e150 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65 65  ifference betwee
2e160 6e 20 4d 45 4d 54 59 50 45 5f 48 45 41 50 0a 2a  n MEMTYPE_HEAP.*
2e170 2a 20 61 6e 64 20 4d 45 4d 54 59 50 45 5f 4c 4f  * and MEMTYPE_LO
2e180 4f 4b 41 53 49 44 45 2e 20 20 49 66 20 61 6e 20  OKASIDE.  If an 
2e190 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 73 20 4d 45  allocation is ME
2e1a0 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2c  MTYPE_LOOKASIDE,
2e1b0 20 74 68 61 74 20 6d 65 61 6e 73 0a 2a 2a 20 69   that means.** i
2e1c0 74 20 6d 69 67 68 74 20 68 61 76 65 20 62 65 65  t might have bee
2e1d0 6e 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20 6c  n allocated by l
2e1e0 6f 6f 6b 61 73 69 64 65 2c 20 65 78 63 65 70 74  ookaside, except
2e1f0 20 74 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 20   the allocation 
2e200 77 61 73 0a 2a 2a 20 74 6f 6f 20 6c 61 72 67 65  was.** too large
2e210 20 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 20 77 61   or lookaside wa
2e220 73 20 61 6c 72 65 61 64 79 20 66 75 6c 6c 2e 20  s already full. 
2e230 20 49 74 20 69 73 20 69 6d 70 6f 72 74 61 6e 74   It is important
2e240 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74 68   to verify.** th
2e250 61 74 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 74  at allocations t
2e260 68 61 74 20 6d 69 67 68 74 20 68 61 76 65 20 62  hat might have b
2e270 65 65 6e 20 73 61 74 69 73 66 69 65 64 20 62 79  een satisfied by
2e280 20 6c 6f 6f 6b 61 73 69 64 65 20 61 72 65 20 6e   lookaside are n
2e290 6f 74 0a 2a 2a 20 70 61 73 73 65 64 20 62 61 63  ot.** passed bac
2e2a0 6b 20 74 6f 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69  k to non-lookasi
2e2b0 64 65 20 66 72 65 65 28 29 20 72 6f 75 74 69 6e  de free() routin
2e2c0 65 73 2e 20 20 41 73 73 65 72 74 73 20 73 75 63  es.  Asserts suc
2e2d0 68 20 61 73 20 74 68 65 0a 2a 2a 20 65 78 61 6d  h as the.** exam
2e2e0 70 6c 65 20 61 62 6f 76 65 20 61 72 65 20 70 6c  ple above are pl
2e2f0 61 63 65 64 20 6f 6e 20 74 68 65 20 6e 6f 6e 2d  aced on the non-
2e300 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65 65 28 29  lookaside free()
2e310 20 72 6f 75 74 69 6e 65 73 20 74 6f 20 76 65 72   routines to ver
2e320 69 66 79 0a 2a 2a 20 74 68 69 73 20 63 6f 6e 73  ify.** this cons
2e330 74 72 61 69 6e 74 2e 0a 2a 2a 0a 2a 2a 20 41 6c  traint..**.** Al
2e340 6c 20 6f 66 20 74 68 69 73 20 69 73 20 6e 6f 2d  l of this is no-
2e350 6f 70 20 66 6f 72 20 61 20 70 72 6f 64 75 63 74  op for a product
2e360 69 6f 6e 20 62 75 69 6c 64 2e 20 20 49 74 20 6f  ion build.  It o
2e370 6e 6c 79 20 63 6f 6d 65 73 20 69 6e 74 6f 0a 2a  nly comes into.*
2e380 2a 20 70 6c 61 79 20 77 68 65 6e 20 74 68 65 20  * play when the 
2e390 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 20  SQLITE_MEMDEBUG 
2e3a0 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74  compile-time opt
2e3b0 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a  ion is used..*/.
2e3c0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4d 45  #ifdef SQLITE_ME
2e3d0 4d 44 45 42 55 47 0a 20 20 76 6f 69 64 20 73 71  MDEBUG.  void sq
2e3e0 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74  lite3MemdebugSet
2e3f0 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a  Type(void*,u8);.
2e400 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d    int sqlite3Mem
2e410 64 65 62 75 67 48 61 73 54 79 70 65 28 76 6f 69  debugHasType(voi
2e420 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73 71  d*,u8);.  int sq
2e430 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54  lite3MemdebugNoT
2e440 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 23  ype(void*,u8);.#
2e450 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
2e460 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74  lite3MemdebugSet
2e470 54 79 70 65 28 58 2c 59 29 20 20 2f 2a 20 6e 6f  Type(X,Y)  /* no
2e480 2d 6f 70 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20  -op */.# define 
2e490 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48  sqlite3MemdebugH
2e4a0 61 73 54 79 70 65 28 58 2c 59 29 20 20 31 0a 23  asType(X,Y)  1.#
2e4b0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d   define sqlite3M
2e4c0 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 58 2c  emdebugNoType(X,
2e4d0 59 29 20 20 20 31 0a 23 65 6e 64 69 66 0a 23 64  Y)   1.#endif.#d
2e4e0 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 48 45  efine MEMTYPE_HE
2e4f0 41 50 20 20 20 20 20 20 20 30 78 30 31 20 20 2f  AP       0x01  /
2e500 2a 20 47 65 6e 65 72 61 6c 20 68 65 61 70 20 61  * General heap a
2e510 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64  llocations */.#d
2e520 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 4c 4f  efine MEMTYPE_LO
2e530 4f 4b 41 53 49 44 45 20 20 30 78 30 32 20 20 2f  OKASIDE  0x02  /
2e540 2a 20 48 65 61 70 20 74 68 61 74 20 6d 69 67 68  * Heap that migh
2e550 74 20 68 61 76 65 20 62 65 65 6e 20 6c 6f 6f 6b  t have been look
2e560 61 73 69 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65  aside */.#define
2e570 20 4d 45 4d 54 59 50 45 5f 50 43 41 43 48 45 20   MEMTYPE_PCACHE 
2e580 20 20 20 20 30 78 30 34 20 20 2f 2a 20 50 61 67      0x04  /* Pag
2e590 65 20 63 61 63 68 65 20 61 6c 6c 6f 63 61 74 69  e cache allocati
2e5a0 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68  ons */../*.** Th
2e5b0 72 65 61 64 69 6e 67 20 69 6e 74 65 72 66 61 63  reading interfac
2e5c0 65 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f  e.*/.#if SQLITE_
2e5d0 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41  MAX_WORKER_THREA
2e5e0 44 53 3e 30 0a 69 6e 74 20 73 71 6c 69 74 65 33  DS>0.int sqlite3
2e5f0 54 68 72 65 61 64 43 72 65 61 74 65 28 53 51 4c  ThreadCreate(SQL
2e600 69 74 65 54 68 72 65 61 64 2a 2a 2c 76 6f 69 64  iteThread**,void
2e610 2a 28 2a 29 28 76 6f 69 64 2a 29 2c 76 6f 69 64  *(*)(void*),void
2e620 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54  *);.int sqlite3T
2e630 68 72 65 61 64 4a 6f 69 6e 28 53 51 4c 69 74 65  hreadJoin(SQLite
2e640 54 68 72 65 61 64 2a 2c 20 76 6f 69 64 2a 2a 29  Thread*, void**)
2e650 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 65  ;.#endif..#if de
2e660 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
2e670 42 4c 45 5f 44 42 50 41 47 45 5f 56 54 41 42 29  BLE_DBPAGE_VTAB)
2e680 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49   || defined(SQLI
2e690 54 45 5f 54 45 53 54 29 0a 69 6e 74 20 73 71 6c  TE_TEST).int sql
2e6a0 69 74 65 33 44 62 70 61 67 65 52 65 67 69 73 74  ite3DbpageRegist
2e6b0 65 72 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65  er(sqlite3*);.#e
2e6c0 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64  ndif.#if defined
2e6d0 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 44  (SQLITE_ENABLE_D
2e6e0 42 53 54 41 54 5f 56 54 41 42 29 20 7c 7c 20 64  BSTAT_VTAB) || d
2e6f0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45  efined(SQLITE_TE
2e700 53 54 29 0a 69 6e 74 20 73 71 6c 69 74 65 33 44  ST).int sqlite3D
2e710 62 73 74 61 74 52 65 67 69 73 74 65 72 28 73 71  bstatRegister(sq
2e720 6c 69 74 65 33 2a 29 3b 0a 23 65 6e 64 69 66 0a  lite3*);.#endif.
2e730 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
2e740 56 65 63 74 6f 72 53 69 7a 65 28 45 78 70 72 20  VectorSize(Expr 
2e750 2a 70 45 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c  *pExpr);.int sql
2e760 69 74 65 33 45 78 70 72 49 73 56 65 63 74 6f 72  ite3ExprIsVector
2e770 28 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 45  (Expr *pExpr);.E
2e780 78 70 72 20 2a 73 71 6c 69 74 65 33 56 65 63 74  xpr *sqlite3Vect
2e790 6f 72 46 69 65 6c 64 53 75 62 65 78 70 72 28 45  orFieldSubexpr(E
2e7a0 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 45 78 70 72  xpr*, int);.Expr
2e7b0 20 2a 73 71 6c 69 74 65 33 45 78 70 72 46 6f 72   *sqlite3ExprFor
2e7c0 56 65 63 74 6f 72 46 69 65 6c 64 28 50 61 72 73  VectorField(Pars
2e7d0 65 2a 2c 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 76  e*,Expr*,int);.v
2e7e0 6f 69 64 20 73 71 6c 69 74 65 33 56 65 63 74 6f  oid sqlite3Vecto
2e7f0 72 45 72 72 6f 72 4d 73 67 28 50 61 72 73 65 2a  rErrorMsg(Parse*
2e800 2c 20 45 78 70 72 2a 29 3b 0a 0a 23 69 66 6e 64  , Expr*);..#ifnd
2e810 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  ef SQLITE_OMIT_C
2e820 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f 44 49 41  OMPILEOPTION_DIA
2e830 47 53 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 2a  GS.const char **
2e840 73 71 6c 69 74 65 33 43 6f 6d 70 69 6c 65 4f 70  sqlite3CompileOp
2e850 74 69 6f 6e 73 28 69 6e 74 20 2a 70 6e 4f 70 74  tions(int *pnOpt
2e860 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 65 6e 64 69  );.#endif..#endi
2e870 66 20 2f 2a 20 53 51 4c 49 54 45 49 4e 54 5f 48  f /* SQLITEINT_H
2e880 20 2a 2f 0a                                       */.