/ Hex Artifact Content
Login

Artifact 1fdcc239cbc8e7f21b71d7cb0f88af5a8c1df6c4b2afb3fd493f82222b9a6626:


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 44 65 66 61 75 6c 74 20 76 61 6c  *.** Default val
5710: 75 65 20 66 6f 72 20 74 68 65 20 53 51 4c 49 54  ue for the SQLIT
5720: 45 5f 43 4f 4e 46 49 47 5f 53 4f 52 54 45 52 52  E_CONFIG_SORTERR
5730: 45 46 5f 53 49 5a 45 20 6f 70 74 69 6f 6e 2e 0a  EF_SIZE option..
5740: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
5750: 45 5f 44 45 46 41 55 4c 54 5f 53 4f 52 54 45 52  E_DEFAULT_SORTER
5760: 52 45 46 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e  REF_SIZE.# defin
5770: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
5780: 5f 53 4f 52 54 45 52 52 45 46 5f 53 49 5a 45 20  _SORTERREF_SIZE 
5790: 30 78 37 66 66 66 66 66 66 66 0a 23 65 6e 64 69  0x7fffffff.#endi
57a0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d  f../*.** The com
57b0: 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
57c0: 73 20 53 51 4c 49 54 45 5f 4d 4d 41 50 5f 52 45  s SQLITE_MMAP_RE
57d0: 41 44 57 52 49 54 45 20 61 6e 64 20 0a 2a 2a 20  ADWRITE and .** 
57e0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 42 41  SQLITE_ENABLE_BA
57f0: 54 43 48 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45  TCH_ATOMIC_WRITE
5800: 20 61 72 65 20 6e 6f 74 20 63 6f 6d 70 61 74 69   are not compati
5810: 62 6c 65 20 77 69 74 68 20 6f 6e 65 20 61 6e 6f  ble with one ano
5820: 74 68 65 72 2e 0a 2a 2a 20 59 6f 75 20 6d 75 73  ther..** You mus
5830: 74 20 63 68 6f 6f 73 65 20 6f 6e 65 20 6f 72 20  t choose one or 
5840: 74 68 65 20 6f 74 68 65 72 20 28 6f 72 20 6e 65  the other (or ne
5850: 69 74 68 65 72 29 20 62 75 74 20 6e 6f 74 20 62  ither) but not b
5860: 6f 74 68 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69  oth..*/.#if defi
5870: 6e 65 64 28 53 51 4c 49 54 45 5f 4d 4d 41 50 5f  ned(SQLITE_MMAP_
5880: 52 45 41 44 57 52 49 54 45 29 20 26 26 20 64 65  READWRITE) && de
5890: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
58a0: 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f 4d 49 43  BLE_BATCH_ATOMIC
58b0: 5f 57 52 49 54 45 29 0a 23 65 72 72 6f 72 20 43  _WRITE).#error C
58c0: 61 6e 6e 6f 74 20 75 73 65 20 62 6f 74 68 20 53  annot use both S
58d0: 51 4c 49 54 45 5f 4d 4d 41 50 5f 52 45 41 44 57  QLITE_MMAP_READW
58e0: 52 49 54 45 20 61 6e 64 20 53 51 4c 49 54 45 5f  RITE and SQLITE_
58f0: 45 4e 41 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f  ENABLE_BATCH_ATO
5900: 4d 49 43 5f 57 52 49 54 45 0a 23 65 6e 64 69 66  MIC_WRITE.#endif
5910: 0a 0a 2f 2a 0a 2a 2a 20 47 43 43 20 64 6f 65 73  ../*.** GCC does
5920: 20 6e 6f 74 20 64 65 66 69 6e 65 20 74 68 65 20   not define the 
5930: 6f 66 66 73 65 74 6f 66 28 29 20 6d 61 63 72 6f  offsetof() macro
5940: 20 73 6f 20 77 65 27 6c 6c 20 68 61 76 65 20 74   so we'll have t
5950: 6f 20 64 6f 20 69 74 0a 2a 2a 20 6f 75 72 73 65  o do it.** ourse
5960: 6c 76 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  lves..*/.#ifndef
5970: 20 6f 66 66 73 65 74 6f 66 0a 23 64 65 66 69 6e   offsetof.#defin
5980: 65 20 6f 66 66 73 65 74 6f 66 28 53 54 52 55 43  e offsetof(STRUC
5990: 54 55 52 45 2c 46 49 45 4c 44 29 20 28 28 69 6e  TURE,FIELD) ((in
59a0: 74 29 28 28 63 68 61 72 2a 29 26 28 28 53 54 52  t)((char*)&((STR
59b0: 55 43 54 55 52 45 2a 29 30 29 2d 3e 46 49 45 4c  UCTURE*)0)->FIEL
59c0: 44 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  D)).#endif../*.*
59d0: 2a 20 4d 61 63 72 6f 73 20 74 6f 20 63 6f 6d 70  * Macros to comp
59e0: 75 74 65 20 6d 69 6e 69 6d 75 6d 20 61 6e 64 20  ute minimum and 
59f0: 6d 61 78 69 6d 75 6d 20 6f 66 20 74 77 6f 20 6e  maximum of two n
5a00: 75 6d 62 65 72 73 2e 0a 2a 2f 0a 23 69 66 6e 64  umbers..*/.#ifnd
5a10: 65 66 20 4d 49 4e 0a 23 20 64 65 66 69 6e 65 20  ef MIN.# define 
5a20: 4d 49 4e 28 41 2c 42 29 20 28 28 41 29 3c 28 42  MIN(A,B) ((A)<(B
5a30: 29 3f 28 41 29 3a 28 42 29 29 0a 23 65 6e 64 69  )?(A):(B)).#endi
5a40: 66 0a 23 69 66 6e 64 65 66 20 4d 41 58 0a 23 20  f.#ifndef MAX.# 
5a50: 64 65 66 69 6e 65 20 4d 41 58 28 41 2c 42 29 20  define MAX(A,B) 
5a60: 28 28 41 29 3e 28 42 29 3f 28 41 29 3a 28 42 29  ((A)>(B)?(A):(B)
5a70: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
5a80: 53 77 61 70 20 74 77 6f 20 6f 62 6a 65 63 74 73  Swap two objects
5a90: 20 6f 66 20 74 79 70 65 20 54 59 50 45 2e 0a 2a   of type TYPE..*
5aa0: 2f 0a 23 64 65 66 69 6e 65 20 53 57 41 50 28 54  /.#define SWAP(T
5ab0: 59 50 45 2c 41 2c 42 29 20 7b 54 59 50 45 20 74  YPE,A,B) {TYPE t
5ac0: 3d 41 3b 20 41 3d 42 3b 20 42 3d 74 3b 7d 0a 0a  =A; A=B; B=t;}..
5ad0: 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 6f 20 73  /*.** Check to s
5ae0: 65 65 20 69 66 20 74 68 69 73 20 6d 61 63 68 69  ee if this machi
5af0: 6e 65 20 75 73 65 73 20 45 42 43 44 49 43 2e 20  ne uses EBCDIC. 
5b00: 20 28 59 65 73 2c 20 62 65 6c 69 65 76 65 20 69   (Yes, believe i
5b10: 74 20 6f 72 0a 2a 2a 20 6e 6f 74 2c 20 74 68 65  t or.** not, the
5b20: 72 65 20 61 72 65 20 73 74 69 6c 6c 20 6d 61 63  re are still mac
5b30: 68 69 6e 65 73 20 6f 75 74 20 74 68 65 72 65 20  hines out there 
5b40: 74 68 61 74 20 75 73 65 20 45 42 43 44 49 43 2e  that use EBCDIC.
5b50: 29 0a 2a 2f 0a 23 69 66 20 27 41 27 20 3d 3d 20  ).*/.#if 'A' == 
5b60: 27 5c 33 30 31 27 0a 23 20 64 65 66 69 6e 65 20  '\301'.# define 
5b70: 53 51 4c 49 54 45 5f 45 42 43 44 49 43 20 31 0a  SQLITE_EBCDIC 1.
5b80: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53  #else.# define S
5b90: 51 4c 49 54 45 5f 41 53 43 49 49 20 31 0a 23 65  QLITE_ASCII 1.#e
5ba0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65  ndif../*.** Inte
5bb0: 67 65 72 73 20 6f 66 20 6b 6e 6f 77 6e 20 73 69  gers of known si
5bc0: 7a 65 73 2e 20 20 54 68 65 73 65 20 74 79 70 65  zes.  These type
5bd0: 64 65 66 73 20 6d 69 67 68 74 20 63 68 61 6e 67  defs might chang
5be0: 65 20 66 6f 72 20 61 72 63 68 69 74 65 63 74 75  e for architectu
5bf0: 72 65 73 0a 2a 2a 20 77 68 65 72 65 20 74 68 65  res.** where the
5c00: 20 73 69 7a 65 73 20 76 65 72 79 2e 20 20 50 72   sizes very.  Pr
5c10: 65 70 72 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f  eprocessor macro
5c20: 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20  s are available 
5c30: 73 6f 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 74  so that the.** t
5c40: 79 70 65 73 20 63 61 6e 20 62 65 20 63 6f 6e 76  ypes can be conv
5c50: 65 6e 69 65 6e 74 6c 79 20 72 65 64 65 66 69 6e  eniently redefin
5c60: 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 79  ed at compile-ty
5c70: 70 65 2e 20 20 4c 69 6b 65 20 74 68 69 73 3a 0a  pe.  Like this:.
5c80: 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20 63 63  **.**         cc
5c90: 20 27 2d 44 55 49 4e 54 50 54 52 5f 54 59 50 45   '-DUINTPTR_TYPE
5ca0: 3d 6c 6f 6e 67 20 6c 6f 6e 67 20 69 6e 74 27 20  =long long int' 
5cb0: 2e 2e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 55  ....*/.#ifndef U
5cc0: 49 4e 54 33 32 5f 54 59 50 45 0a 23 20 69 66 64  INT32_TYPE.# ifd
5cd0: 65 66 20 48 41 56 45 5f 55 49 4e 54 33 32 5f 54  ef HAVE_UINT32_T
5ce0: 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 33  .#  define UINT3
5cf0: 32 5f 54 59 50 45 20 75 69 6e 74 33 32 5f 74 0a  2_TYPE uint32_t.
5d00: 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  # else.#  define
5d10: 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75 6e 73   UINT32_TYPE uns
5d20: 69 67 6e 65 64 20 69 6e 74 0a 23 20 65 6e 64 69  igned int.# endi
5d30: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
5d40: 20 55 49 4e 54 31 36 5f 54 59 50 45 0a 23 20 69   UINT16_TYPE.# i
5d50: 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54 31 36  fdef HAVE_UINT16
5d60: 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  _T.#  define UIN
5d70: 54 31 36 5f 54 59 50 45 20 75 69 6e 74 31 36 5f  T16_TYPE uint16_
5d80: 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  t.# else.#  defi
5d90: 6e 65 20 55 49 4e 54 31 36 5f 54 59 50 45 20 75  ne UINT16_TYPE u
5da0: 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 69 6e  nsigned short in
5db0: 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  t.# endif.#endif
5dc0: 0a 23 69 66 6e 64 65 66 20 49 4e 54 31 36 5f 54  .#ifndef INT16_T
5dd0: 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45  YPE.# ifdef HAVE
5de0: 5f 49 4e 54 31 36 5f 54 0a 23 20 20 64 65 66 69  _INT16_T.#  defi
5df0: 6e 65 20 49 4e 54 31 36 5f 54 59 50 45 20 69 6e  ne INT16_TYPE in
5e00: 74 31 36 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20  t16_t.# else.#  
5e10: 64 65 66 69 6e 65 20 49 4e 54 31 36 5f 54 59 50  define INT16_TYP
5e20: 45 20 73 68 6f 72 74 20 69 6e 74 0a 23 20 65 6e  E short int.# en
5e30: 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  dif.#endif.#ifnd
5e40: 65 66 20 55 49 4e 54 38 5f 54 59 50 45 0a 23 20  ef UINT8_TYPE.# 
5e50: 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54 38  ifdef HAVE_UINT8
5e60: 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  _T.#  define UIN
5e70: 54 38 5f 54 59 50 45 20 75 69 6e 74 38 5f 74 0a  T8_TYPE uint8_t.
5e80: 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  # else.#  define
5e90: 20 55 49 4e 54 38 5f 54 59 50 45 20 75 6e 73 69   UINT8_TYPE unsi
5ea0: 67 6e 65 64 20 63 68 61 72 0a 23 20 65 6e 64 69  gned char.# endi
5eb0: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
5ec0: 20 49 4e 54 38 5f 54 59 50 45 0a 23 20 69 66 64   INT8_TYPE.# ifd
5ed0: 65 66 20 48 41 56 45 5f 49 4e 54 38 5f 54 0a 23  ef HAVE_INT8_T.#
5ee0: 20 20 64 65 66 69 6e 65 20 49 4e 54 38 5f 54 59    define INT8_TY
5ef0: 50 45 20 69 6e 74 38 5f 74 0a 23 20 65 6c 73 65  PE int8_t.# else
5f00: 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 38 5f  .#  define INT8_
5f10: 54 59 50 45 20 73 69 67 6e 65 64 20 63 68 61 72  TYPE signed char
5f20: 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  .# endif.#endif.
5f30: 23 69 66 6e 64 65 66 20 4c 4f 4e 47 44 4f 55 42  #ifndef LONGDOUB
5f40: 4c 45 5f 54 59 50 45 0a 23 20 64 65 66 69 6e 65  LE_TYPE.# define
5f50: 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45   LONGDOUBLE_TYPE
5f60: 20 6c 6f 6e 67 20 64 6f 75 62 6c 65 0a 23 65 6e   long double.#en
5f70: 64 69 66 0a 74 79 70 65 64 65 66 20 73 71 6c 69  dif.typedef sqli
5f80: 74 65 5f 69 6e 74 36 34 20 69 36 34 3b 20 20 20  te_int64 i64;   
5f90: 20 20 20 20 20 20 20 2f 2a 20 38 2d 62 79 74 65         /* 8-byte
5fa0: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20   signed integer 
5fb0: 2a 2f 0a 74 79 70 65 64 65 66 20 73 71 6c 69 74  */.typedef sqlit
5fc0: 65 5f 75 69 6e 74 36 34 20 75 36 34 3b 20 20 20  e_uint64 u64;   
5fd0: 20 20 20 20 20 20 2f 2a 20 38 2d 62 79 74 65 20        /* 8-byte 
5fe0: 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  unsigned integer
5ff0: 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e 54   */.typedef UINT
6000: 33 32 5f 54 59 50 45 20 75 33 32 3b 20 20 20 20  32_TYPE u32;    
6010: 20 20 20 20 20 20 20 2f 2a 20 34 2d 62 79 74 65         /* 4-byte
6020: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65   unsigned intege
6030: 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e  r */.typedef UIN
6040: 54 31 36 5f 54 59 50 45 20 75 31 36 3b 20 20 20  T16_TYPE u16;   
6050: 20 20 20 20 20 20 20 20 2f 2a 20 32 2d 62 79 74          /* 2-byt
6060: 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67  e unsigned integ
6070: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e  er */.typedef IN
6080: 54 31 36 5f 54 59 50 45 20 69 31 36 3b 20 20 20  T16_TYPE i16;   
6090: 20 20 20 20 20 20 20 20 20 2f 2a 20 32 2d 62 79           /* 2-by
60a0: 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  te signed intege
60b0: 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e  r */.typedef UIN
60c0: 54 38 5f 54 59 50 45 20 75 38 3b 20 20 20 20 20  T8_TYPE u8;     
60d0: 20 20 20 20 20 20 20 20 2f 2a 20 31 2d 62 79 74          /* 1-byt
60e0: 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67  e unsigned integ
60f0: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e  er */.typedef IN
6100: 54 38 5f 54 59 50 45 20 69 38 3b 20 20 20 20 20  T8_TYPE i8;     
6110: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 2d 62 79           /* 1-by
6120: 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  te signed intege
6130: 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 49  r */../*.** SQLI
6140: 54 45 5f 4d 41 58 5f 55 33 32 20 69 73 20 61 20  TE_MAX_U32 is a 
6150: 75 36 34 20 63 6f 6e 73 74 61 6e 74 20 74 68 61  u64 constant tha
6160: 74 20 69 73 20 74 68 65 20 6d 61 78 69 6d 75 6d  t is the maximum
6170: 20 75 36 34 20 76 61 6c 75 65 0a 2a 2a 20 74 68   u64 value.** th
6180: 61 74 20 63 61 6e 20 62 65 20 73 74 6f 72 65 64  at can be stored
6190: 20 69 6e 20 61 20 75 33 32 20 77 69 74 68 6f 75   in a u32 withou
61a0: 74 20 6c 6f 73 73 20 6f 66 20 64 61 74 61 2e 20  t loss of data. 
61b0: 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73   The value.** is
61c0: 20 30 78 30 30 30 30 30 30 30 30 66 66 66 66 66   0x00000000fffff
61d0: 66 66 66 2e 20 20 42 75 74 20 62 65 63 61 75 73  fff.  But becaus
61e0: 65 20 6f 66 20 71 75 69 72 6b 73 20 6f 66 20 73  e of quirks of s
61f0: 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73 2c 20 77  ome compilers, w
6200: 65 0a 2a 2a 20 68 61 76 65 20 74 6f 20 73 70 65  e.** have to spe
6210: 63 69 66 79 20 74 68 65 20 76 61 6c 75 65 20 69  cify the value i
6220: 6e 20 74 68 65 20 6c 65 73 73 20 69 6e 74 75 69  n the less intui
6230: 74 69 76 65 20 6d 61 6e 6e 65 72 20 73 68 6f 77  tive manner show
6240: 6e 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  n:.*/.#define SQ
6250: 4c 49 54 45 5f 4d 41 58 5f 55 33 32 20 20 28 28  LITE_MAX_U32  ((
6260: 28 28 75 36 34 29 31 29 3c 3c 33 32 29 2d 31 29  ((u64)1)<<32)-1)
6270: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61  ../*.** The data
6280: 74 79 70 65 20 75 73 65 64 20 74 6f 20 73 74 6f  type used to sto
6290: 72 65 20 65 73 74 69 6d 61 74 65 73 20 6f 66 20  re estimates of 
62a0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  the number of ro
62b0: 77 73 20 69 6e 20 61 0a 2a 2a 20 74 61 62 6c 65  ws in a.** table
62c0: 20 6f 72 20 69 6e 64 65 78 2e 20 20 54 68 69 73   or index.  This
62d0: 20 69 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20   is an unsigned 
62e0: 69 6e 74 65 67 65 72 20 74 79 70 65 2e 20 20 46  integer type.  F
62f0: 6f 72 20 39 39 2e 39 25 20 6f 66 0a 2a 2a 20 74  or 99.9% of.** t
6300: 68 65 20 77 6f 72 6c 64 2c 20 61 20 33 32 2d 62  he world, a 32-b
6310: 69 74 20 69 6e 74 65 67 65 72 20 69 73 20 73 75  it integer is su
6320: 66 66 69 63 69 65 6e 74 2e 20 20 42 75 74 20 61  fficient.  But a
6330: 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 0a   64-bit integer.
6340: 2a 2a 20 63 61 6e 20 62 65 20 75 73 65 64 20 61  ** can be used a
6350: 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 69  t compile-time i
6360: 66 20 64 65 73 69 72 65 64 2e 0a 2a 2f 0a 23 69  f desired..*/.#i
6370: 66 64 65 66 20 53 51 4c 49 54 45 5f 36 34 42 49  fdef SQLITE_64BI
6380: 54 5f 53 54 41 54 53 0a 20 74 79 70 65 64 65 66  T_STATS. typedef
6390: 20 75 36 34 20 74 52 6f 77 63 6e 74 3b 20 20 20   u64 tRowcnt;   
63a0: 20 2f 2a 20 36 34 2d 62 69 74 20 6f 6e 6c 79 20   /* 64-bit only 
63b0: 69 66 20 72 65 71 75 65 73 74 65 64 20 61 74 20  if requested at 
63c0: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 2a 2f 0a  compile-time */.
63d0: 23 65 6c 73 65 0a 20 74 79 70 65 64 65 66 20 75  #else. typedef u
63e0: 33 32 20 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f  32 tRowcnt;    /
63f0: 2a 20 33 32 2d 62 69 74 20 69 73 20 74 68 65 20  * 32-bit is the 
6400: 64 65 66 61 75 6c 74 20 2a 2f 0a 23 65 6e 64 69  default */.#endi
6410: 66 0a 0a 2f 2a 0a 2a 2a 20 45 73 74 69 6d 61 74  f../*.** Estimat
6420: 65 64 20 71 75 61 6e 74 69 74 69 65 73 20 75 73  ed quantities us
6430: 65 64 20 66 6f 72 20 71 75 65 72 79 20 70 6c 61  ed for query pla
6440: 6e 6e 69 6e 67 20 61 72 65 20 73 74 6f 72 65 64  nning are stored
6450: 20 61 73 20 31 36 2d 62 69 74 0a 2a 2a 20 6c 6f   as 16-bit.** lo
6460: 67 61 72 69 74 68 6d 73 2e 20 20 46 6f 72 20 71  garithms.  For q
6470: 75 61 6e 74 69 74 79 20 58 2c 20 74 68 65 20 76  uantity X, the v
6480: 61 6c 75 65 20 73 74 6f 72 65 64 20 69 73 20 31  alue stored is 1
6490: 30 2a 6c 6f 67 32 28 58 29 2e 20 20 54 68 69 73  0*log2(X).  This
64a0: 0a 2a 2a 20 67 69 76 65 73 20 61 20 70 6f 73 73  .** gives a poss
64b0: 69 62 6c 65 20 72 61 6e 67 65 20 6f 66 20 76 61  ible range of va
64c0: 6c 75 65 73 20 6f 66 20 61 70 70 72 6f 78 69 6d  lues of approxim
64d0: 61 74 65 6c 79 20 31 2e 30 65 39 38 36 20 74 6f  ately 1.0e986 to
64e0: 20 31 65 2d 39 38 36 2e 0a 2a 2a 20 42 75 74 20   1e-986..** But 
64f0: 74 68 65 20 61 6c 6c 6f 77 65 64 20 76 61 6c 75  the allowed valu
6500: 65 73 20 61 72 65 20 22 67 72 61 69 6e 79 22 2e  es are "grainy".
6510: 20 20 4e 6f 74 20 65 76 65 72 79 20 76 61 6c 75    Not every valu
6520: 65 20 69 73 20 72 65 70 72 65 73 65 6e 74 61 62  e is representab
6530: 6c 65 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70  le..** For examp
6540: 6c 65 2c 20 71 75 61 6e 74 69 74 69 65 73 20 31  le, quantities 1
6550: 36 20 61 6e 64 20 31 37 20 61 72 65 20 62 6f 74  6 and 17 are bot
6560: 68 20 72 65 70 72 65 73 65 6e 74 65 64 20 62 79  h represented by
6570: 20 61 20 4c 6f 67 45 73 74 0a 2a 2a 20 6f 66 20   a LogEst.** of 
6580: 34 30 2e 20 20 48 6f 77 65 76 65 72 2c 20 73 69  40.  However, si
6590: 6e 63 65 20 4c 6f 67 45 73 74 20 71 75 61 6e 74  nce LogEst quant
65a0: 69 74 69 65 73 20 61 72 65 20 73 75 70 70 6f 73  ities are suppos
65b0: 65 20 74 6f 20 62 65 20 65 73 74 69 6d 61 74 65  e to be estimate
65c0: 73 2c 0a 2a 2a 20 6e 6f 74 20 65 78 61 63 74 20  s,.** not exact 
65d0: 76 61 6c 75 65 73 2c 20 74 68 69 73 20 69 6d 70  values, this imp
65e0: 72 65 63 69 73 69 6f 6e 20 69 73 20 6e 6f 74 20  recision is not 
65f0: 61 20 70 72 6f 62 6c 65 6d 2e 0a 2a 2a 0a 2a 2a  a problem..**.**
6600: 20 22 4c 6f 67 45 73 74 22 20 69 73 20 73 68 6f   "LogEst" is sho
6610: 72 74 20 66 6f 72 20 22 4c 6f 67 61 72 69 74 68  rt for "Logarith
6620: 6d 69 63 20 45 73 74 69 6d 61 74 65 22 2e 0a 2a  mic Estimate"..*
6630: 2a 0a 2a 2a 20 45 78 61 6d 70 6c 65 73 3a 0a 2a  *.** Examples:.*
6640: 2a 20 20 20 20 20 20 31 20 2d 3e 20 30 20 20 20  *      1 -> 0   
6650: 20 20 20 20 20 20 20 20 20 20 20 32 30 20 2d 3e             20 ->
6660: 20 34 33 20 20 20 20 20 20 20 20 20 20 31 30 30   43          100
6670: 30 30 20 2d 3e 20 31 33 32 0a 2a 2a 20 20 20 20  00 -> 132.**    
6680: 20 20 32 20 2d 3e 20 31 30 20 20 20 20 20 20 20    2 -> 10       
6690: 20 20 20 20 20 20 32 35 20 2d 3e 20 34 36 20 20        25 -> 46  
66a0: 20 20 20 20 20 20 20 20 32 35 30 30 30 20 2d 3e          25000 ->
66b0: 20 31 34 36 0a 2a 2a 20 20 20 20 20 20 33 20 2d   146.**      3 -
66c0: 3e 20 31 36 20 20 20 20 20 20 20 20 20 20 20 20  > 16            
66d0: 31 30 30 20 2d 3e 20 36 36 20 20 20 20 20 20 20  100 -> 66       
66e0: 20 31 30 30 30 30 30 30 20 2d 3e 20 31 39 39 0a   1000000 -> 199.
66f0: 2a 2a 20 20 20 20 20 20 34 20 2d 3e 20 32 30 20  **      4 -> 20 
6700: 20 20 20 20 20 20 20 20 20 20 31 30 30 30 20 2d            1000 -
6710: 3e 20 39 39 20 20 20 20 20 20 20 20 31 30 34 38  > 99        1048
6720: 35 37 36 20 2d 3e 20 32 30 30 0a 2a 2a 20 20 20  576 -> 200.**   
6730: 20 20 31 30 20 2d 3e 20 33 33 20 20 20 20 20 20    10 -> 33      
6740: 20 20 20 20 20 31 30 32 34 20 2d 3e 20 31 30 30       1024 -> 100
6750: 20 20 20 20 34 32 39 34 39 36 37 32 39 36 20 2d      4294967296 -
6760: 3e 20 33 32 30 0a 2a 2a 0a 2a 2a 20 54 68 65 20  > 320.**.** The 
6770: 4c 6f 67 45 73 74 20 63 61 6e 20 62 65 20 6e 65  LogEst can be ne
6780: 67 61 74 69 76 65 20 74 6f 20 69 6e 64 69 63 61  gative to indica
6790: 74 65 20 66 72 61 63 74 69 6f 6e 61 6c 20 76 61  te fractional va
67a0: 6c 75 65 73 2e 0a 2a 2a 20 45 78 61 6d 70 6c 65  lues..** Example
67b0: 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 30 2e 35 20  s:.**.**    0.5 
67c0: 2d 3e 20 2d 31 30 20 20 20 20 20 20 20 20 20 20  -> -10          
67d0: 20 30 2e 31 20 2d 3e 20 2d 33 33 20 20 20 20 20   0.1 -> -33     
67e0: 20 20 20 30 2e 30 36 32 35 20 2d 3e 20 2d 34 30     0.0625 -> -40
67f0: 0a 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 31  .*/.typedef INT1
6800: 36 5f 54 59 50 45 20 4c 6f 67 45 73 74 3b 0a 0a  6_TYPE LogEst;..
6810: 2f 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 53 51  /*.** Set the SQ
6820: 4c 49 54 45 5f 50 54 52 53 49 5a 45 20 6d 61 63  LITE_PTRSIZE mac
6830: 72 6f 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72  ro to the number
6840: 20 6f 66 20 62 79 74 65 73 20 69 6e 20 61 20 70   of bytes in a p
6850: 6f 69 6e 74 65 72 0a 2a 2f 0a 23 69 66 6e 64 65  ointer.*/.#ifnde
6860: 66 20 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45  f SQLITE_PTRSIZE
6870: 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28 5f 5f  .# if defined(__
6880: 53 49 5a 45 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f  SIZEOF_POINTER__
6890: 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  ).#   define SQL
68a0: 49 54 45 5f 50 54 52 53 49 5a 45 20 5f 5f 53 49  ITE_PTRSIZE __SI
68b0: 5a 45 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f 0a 23  ZEOF_POINTER__.#
68c0: 20 65 6c 69 66 20 64 65 66 69 6e 65 64 28 69 33   elif defined(i3
68d0: 38 36 29 20 20 20 20 20 7c 7c 20 64 65 66 69 6e  86)     || defin
68e0: 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20 20 20 7c  ed(__i386__)   |
68f0: 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 49 58 38  | defined(_M_IX8
6900: 36 29 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20  6) ||    \.     
6910: 20 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41 52 4d    defined(_M_ARM
6920: 29 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  )   || defined(_
6930: 5f 61 72 6d 5f 5f 29 20 20 20 20 7c 7c 20 64 65  _arm__)    || de
6940: 66 69 6e 65 64 28 5f 5f 78 38 36 29 0a 23 20 20  fined(__x86).#  
6950: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50   define SQLITE_P
6960: 54 52 53 49 5a 45 20 34 0a 23 20 65 6c 73 65 0a  TRSIZE 4.# else.
6970: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
6980: 45 5f 50 54 52 53 49 5a 45 20 38 0a 23 20 65 6e  E_PTRSIZE 8.# en
6990: 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 54  dif.#endif../* T
69a0: 68 65 20 75 70 74 72 20 74 79 70 65 20 69 73 20  he uptr type is 
69b0: 61 6e 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65  an unsigned inte
69c0: 67 65 72 20 6c 61 72 67 65 20 65 6e 6f 75 67 68  ger large enough
69d0: 20 74 6f 20 68 6f 6c 64 20 61 20 70 6f 69 6e 74   to hold a point
69e0: 65 72 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  er.*/.#if define
69f0: 64 28 48 41 56 45 5f 53 54 44 49 4e 54 5f 48 29  d(HAVE_STDINT_H)
6a00: 0a 20 20 74 79 70 65 64 65 66 20 75 69 6e 74 70  .  typedef uintp
6a10: 74 72 5f 74 20 75 70 74 72 3b 0a 23 65 6c 69 66  tr_t uptr;.#elif
6a20: 20 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 3d   SQLITE_PTRSIZE=
6a30: 3d 34 0a 20 20 74 79 70 65 64 65 66 20 75 33 32  =4.  typedef u32
6a40: 20 75 70 74 72 3b 0a 23 65 6c 73 65 0a 20 20 74   uptr;.#else.  t
6a50: 79 70 65 64 65 66 20 75 36 34 20 75 70 74 72 3b  ypedef u64 uptr;
6a60: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
6a70: 68 65 20 53 51 4c 49 54 45 5f 57 49 54 48 49 4e  he SQLITE_WITHIN
6a80: 28 50 2c 53 2c 45 29 20 6d 61 63 72 6f 20 63 68  (P,S,E) macro ch
6a90: 65 63 6b 73 20 74 6f 20 73 65 65 20 69 66 20 70  ecks to see if p
6aa0: 6f 69 6e 74 65 72 20 50 20 70 6f 69 6e 74 73 20  ointer P points 
6ab0: 74 6f 0a 2a 2a 20 73 6f 6d 65 74 68 69 6e 67 20  to.** something 
6ac0: 62 65 74 77 65 65 6e 20 53 20 28 69 6e 63 6c 75  between S (inclu
6ad0: 73 69 76 65 29 20 61 6e 64 20 45 20 28 65 78 63  sive) and E (exc
6ae0: 6c 75 73 69 76 65 29 2e 0a 2a 2a 0a 2a 2a 20 49  lusive)..**.** I
6af0: 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 53  n other words, S
6b00: 20 69 73 20 61 20 62 75 66 66 65 72 20 61 6e 64   is a buffer and
6b10: 20 45 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20   E is a pointer 
6b20: 74 6f 20 74 68 65 20 66 69 72 73 74 20 62 79 74  to the first byt
6b30: 65 20 61 66 74 65 72 0a 2a 2a 20 74 68 65 20 65  e after.** the e
6b40: 6e 64 20 6f 66 20 62 75 66 66 65 72 20 53 2e 20  nd of buffer S. 
6b50: 20 54 68 69 73 20 6d 61 63 72 6f 20 72 65 74 75   This macro retu
6b60: 72 6e 73 20 74 72 75 65 20 69 66 20 50 20 70 6f  rns true if P po
6b70: 69 6e 74 73 20 74 6f 20 73 6f 6d 65 74 68 69 6e  ints to somethin
6b80: 67 0a 2a 2a 20 63 6f 6e 74 61 69 6e 65 64 20 77  g.** contained w
6b90: 69 74 68 69 6e 20 74 68 65 20 62 75 66 66 65 72  ithin the buffer
6ba0: 20 53 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53   S..*/.#define S
6bb0: 51 4c 49 54 45 5f 57 49 54 48 49 4e 28 50 2c 53  QLITE_WITHIN(P,S
6bc0: 2c 45 29 20 28 28 28 75 70 74 72 29 28 50 29 3e  ,E) (((uptr)(P)>
6bd0: 3d 28 75 70 74 72 29 28 53 29 29 26 26 28 28 75  =(uptr)(S))&&((u
6be0: 70 74 72 29 28 50 29 3c 28 75 70 74 72 29 28 45  ptr)(P)<(uptr)(E
6bf0: 29 29 29 0a 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72  ))).../*.** Macr
6c00: 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  os to determine 
6c10: 77 68 65 74 68 65 72 20 74 68 65 20 6d 61 63 68  whether the mach
6c20: 69 6e 65 20 69 73 20 62 69 67 20 6f 72 20 6c 69  ine is big or li
6c30: 74 74 6c 65 20 65 6e 64 69 61 6e 2c 0a 2a 2a 20  ttle endian,.** 
6c40: 61 6e 64 20 77 68 65 74 68 65 72 20 6f 72 20 6e  and whether or n
6c50: 6f 74 20 74 68 61 74 20 64 65 74 65 72 6d 69 6e  ot that determin
6c60: 61 74 69 6f 6e 20 69 73 20 72 75 6e 2d 74 69 6d  ation is run-tim
6c70: 65 20 6f 72 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  e or compile-tim
6c80: 65 2e 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 62 65 73  e..**.** For bes
6c90: 74 20 70 65 72 66 6f 72 6d 61 6e 63 65 2c 20 61  t performance, a
6ca0: 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64  n attempt is mad
6cb0: 65 20 74 6f 20 67 75 65 73 73 20 61 74 20 74 68  e to guess at th
6cc0: 65 20 62 79 74 65 2d 6f 72 64 65 72 0a 2a 2a 20  e byte-order.** 
6cd0: 75 73 69 6e 67 20 43 2d 70 72 65 70 72 6f 63 65  using C-preproce
6ce0: 73 73 6f 72 20 6d 61 63 72 6f 73 2e 20 20 49 66  ssor macros.  If
6cf0: 20 74 68 61 74 20 69 73 20 75 6e 73 75 63 63 65   that is unsucce
6d00: 73 73 66 75 6c 2c 20 6f 72 20 69 66 0a 2a 2a 20  ssful, or if.** 
6d10: 2d 44 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44  -DSQLITE_BYTEORD
6d20: 45 52 3d 30 20 69 73 20 73 65 74 2c 20 74 68 65  ER=0 is set, the
6d30: 6e 20 62 79 74 65 2d 6f 72 64 65 72 20 69 73 20  n byte-order is 
6d40: 64 65 74 65 72 6d 69 6e 65 64 0a 2a 2a 20 61 74  determined.** at
6d50: 20 72 75 6e 2d 74 69 6d 65 2e 0a 2a 2f 0a 23 69   run-time..*/.#i
6d60: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 42 59 54  fndef SQLITE_BYT
6d70: 45 4f 52 44 45 52 0a 23 20 69 66 20 64 65 66 69  EORDER.# if defi
6d80: 6e 65 64 28 69 33 38 36 29 20 20 20 20 20 7c 7c  ned(i386)     ||
6d90: 20 64 65 66 69 6e 65 64 28 5f 5f 69 33 38 36 5f   defined(__i386_
6da0: 5f 29 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28  _)   || defined(
6db0: 5f 4d 5f 49 58 38 36 29 20 7c 7c 20 20 20 20 5c  _M_IX86) ||    \
6dc0: 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28 5f 5f  .     defined(__
6dd0: 78 38 36 5f 36 34 29 20 7c 7c 20 64 65 66 69 6e  x86_64) || defin
6de0: 65 64 28 5f 5f 78 38 36 5f 36 34 5f 5f 29 20 7c  ed(__x86_64__) |
6df0: 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 58 36 34  | defined(_M_X64
6e00: 29 20 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20  )  ||    \.     
6e10: 64 65 66 69 6e 65 64 28 5f 4d 5f 41 4d 44 36 34  defined(_M_AMD64
6e20: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f  ) || defined(_M_
6e30: 41 52 4d 29 20 20 20 20 20 7c 7c 20 64 65 66 69  ARM)     || defi
6e40: 6e 65 64 28 5f 5f 78 38 36 29 20 20 20 7c 7c 20  ned(__x86)   || 
6e50: 20 20 20 5c 0a 20 20 20 20 20 64 65 66 69 6e 65     \.     define
6e60: 64 28 5f 5f 61 72 6d 5f 5f 29 0a 23 20 20 20 64  d(__arm__).#   d
6e70: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 59 54  efine SQLITE_BYT
6e80: 45 4f 52 44 45 52 20 20 20 20 31 32 33 34 0a 23  EORDER    1234.#
6e90: 20 65 6c 69 66 20 64 65 66 69 6e 65 64 28 73 70   elif defined(sp
6ea0: 61 72 63 29 20 20 20 20 7c 7c 20 64 65 66 69 6e  arc)    || defin
6eb0: 65 64 28 5f 5f 70 70 63 5f 5f 29 0a 23 20 20 20  ed(__ppc__).#   
6ec0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 59  define SQLITE_BY
6ed0: 54 45 4f 52 44 45 52 20 20 20 20 34 33 32 31 0a  TEORDER    4321.
6ee0: 23 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e  # else.#   defin
6ef0: 65 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44  e SQLITE_BYTEORD
6f00: 45 52 20 30 0a 23 20 65 6e 64 69 66 0a 23 65 6e  ER 0.# endif.#en
6f10: 64 69 66 0a 23 69 66 20 53 51 4c 49 54 45 5f 42  dif.#if SQLITE_B
6f20: 59 54 45 4f 52 44 45 52 3d 3d 34 33 32 31 0a 23  YTEORDER==4321.#
6f30: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42   define SQLITE_B
6f40: 49 47 45 4e 44 49 41 4e 20 20 20 20 31 0a 23 20  IGENDIAN    1.# 
6f50: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49  define SQLITE_LI
6f60: 54 54 4c 45 45 4e 44 49 41 4e 20 30 0a 23 20 64  TTLEENDIAN 0.# d
6f70: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 55 54 46  efine SQLITE_UTF
6f80: 31 36 4e 41 54 49 56 45 20 20 53 51 4c 49 54 45  16NATIVE  SQLITE
6f90: 5f 55 54 46 31 36 42 45 0a 23 65 6c 69 66 20 53  _UTF16BE.#elif S
6fa0: 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52 3d  QLITE_BYTEORDER=
6fb0: 3d 31 32 33 34 0a 23 20 64 65 66 69 6e 65 20 53  =1234.# define S
6fc0: 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 20  QLITE_BIGENDIAN 
6fd0: 20 20 20 30 0a 23 20 64 65 66 69 6e 65 20 53 51     0.# define SQ
6fe0: 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41  LITE_LITTLEENDIA
6ff0: 4e 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  N 1.# define SQL
7000: 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20  ITE_UTF16NATIVE 
7010: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 0a   SQLITE_UTF16LE.
7020: 23 65 6c 73 65 0a 23 20 69 66 64 65 66 20 53 51  #else.# ifdef SQ
7030: 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f  LITE_AMALGAMATIO
7040: 4e 0a 20 20 63 6f 6e 73 74 20 69 6e 74 20 73 71  N.  const int sq
7050: 6c 69 74 65 33 6f 6e 65 20 3d 20 31 3b 0a 23 20  lite3one = 1;.# 
7060: 65 6c 73 65 0a 20 20 65 78 74 65 72 6e 20 63 6f  else.  extern co
7070: 6e 73 74 20 69 6e 74 20 73 71 6c 69 74 65 33 6f  nst int sqlite3o
7080: 6e 65 3b 0a 23 20 65 6e 64 69 66 0a 23 20 64 65  ne;.# endif.# de
7090: 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45  fine SQLITE_BIGE
70a0: 4e 44 49 41 4e 20 20 20 20 28 2a 28 63 68 61 72  NDIAN    (*(char
70b0: 20 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e 65 29   *)(&sqlite3one)
70c0: 3d 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 53 51  ==0).# define SQ
70d0: 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41  LITE_LITTLEENDIA
70e0: 4e 20 28 2a 28 63 68 61 72 20 2a 29 28 26 73 71  N (*(char *)(&sq
70f0: 6c 69 74 65 33 6f 6e 65 29 3d 3d 31 29 0a 23 20  lite3one)==1).# 
7100: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 55 54  define SQLITE_UT
7110: 46 31 36 4e 41 54 49 56 45 20 20 28 53 51 4c 49  F16NATIVE  (SQLI
7120: 54 45 5f 42 49 47 45 4e 44 49 41 4e 3f 53 51 4c  TE_BIGENDIAN?SQL
7130: 49 54 45 5f 55 54 46 31 36 42 45 3a 53 51 4c 49  ITE_UTF16BE:SQLI
7140: 54 45 5f 55 54 46 31 36 4c 45 29 0a 23 65 6e 64  TE_UTF16LE).#end
7150: 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 73 74 61  if../*.** Consta
7160: 6e 74 73 20 66 6f 72 20 74 68 65 20 6c 61 72 67  nts for the larg
7170: 65 73 74 20 61 6e 64 20 73 6d 61 6c 6c 65 73 74  est and smallest
7180: 20 70 6f 73 73 69 62 6c 65 20 36 34 2d 62 69 74   possible 64-bit
7190: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 73   signed integers
71a0: 2e 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f  ..** These macro
71b0: 73 20 61 72 65 20 64 65 73 69 67 6e 65 64 20 74  s are designed t
71c0: 6f 20 77 6f 72 6b 20 63 6f 72 72 65 63 74 6c 79  o work correctly
71d0: 20 6f 6e 20 62 6f 74 68 20 33 32 2d 62 69 74 20   on both 32-bit 
71e0: 61 6e 64 20 36 34 2d 62 69 74 0a 2a 2a 20 63 6f  and 64-bit.** co
71f0: 6d 70 69 6c 65 72 73 2e 0a 2a 2f 0a 23 64 65 66  mpilers..*/.#def
7200: 69 6e 65 20 4c 41 52 47 45 53 54 5f 49 4e 54 36  ine LARGEST_INT6
7210: 34 20 20 28 30 78 66 66 66 66 66 66 66 66 7c 28  4  (0xffffffff|(
7220: 28 28 69 36 34 29 30 78 37 66 66 66 66 66 66 66  ((i64)0x7fffffff
7230: 29 3c 3c 33 32 29 29 0a 23 64 65 66 69 6e 65 20  )<<32)).#define 
7240: 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 28  SMALLEST_INT64 (
7250: 28 28 69 36 34 29 2d 31 29 20 2d 20 4c 41 52 47  ((i64)-1) - LARG
7260: 45 53 54 5f 49 4e 54 36 34 29 0a 0a 2f 2a 0a 2a  EST_INT64)../*.*
7270: 2a 20 52 6f 75 6e 64 20 75 70 20 61 20 6e 75 6d  * Round up a num
7280: 62 65 72 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ber to the next 
7290: 6c 61 72 67 65 72 20 6d 75 6c 74 69 70 6c 65 20  larger multiple 
72a0: 6f 66 20 38 2e 20 20 54 68 69 73 20 69 73 20 75  of 8.  This is u
72b0: 73 65 64 0a 2a 2a 20 74 6f 20 66 6f 72 63 65 20  sed.** to force 
72c0: 38 2d 62 79 74 65 20 61 6c 69 67 6e 6d 65 6e 74  8-byte alignment
72d0: 20 6f 6e 20 36 34 2d 62 69 74 20 61 72 63 68 69   on 64-bit archi
72e0: 74 65 63 74 75 72 65 73 2e 0a 2a 2f 0a 23 64 65  tectures..*/.#de
72f0: 66 69 6e 65 20 52 4f 55 4e 44 38 28 78 29 20 20  fine ROUND8(x)  
7300: 20 20 20 28 28 28 78 29 2b 37 29 26 7e 37 29 0a     (((x)+7)&~7).
7310: 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20 64 6f 77  ./*.** Round dow
7320: 6e 20 74 6f 20 74 68 65 20 6e 65 61 72 65 73 74  n to the nearest
7330: 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 38 0a 2a   multiple of 8.*
7340: 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e 44 44  /.#define ROUNDD
7350: 4f 57 4e 38 28 78 29 20 28 28 78 29 26 7e 37 29  OWN8(x) ((x)&~7)
7360: 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 65 72 74 20 74  ../*.** Assert t
7370: 68 61 74 20 74 68 65 20 70 6f 69 6e 74 65 72 20  hat the pointer 
7380: 58 20 69 73 20 61 6c 69 67 6e 65 64 20 74 6f 20  X is aligned to 
7390: 61 6e 20 38 2d 62 79 74 65 20 62 6f 75 6e 64 61  an 8-byte bounda
73a0: 72 79 2e 20 20 54 68 69 73 0a 2a 2a 20 6d 61 63  ry.  This.** mac
73b0: 72 6f 20 69 73 20 75 73 65 64 20 6f 6e 6c 79 20  ro is used only 
73c0: 77 69 74 68 69 6e 20 61 73 73 65 72 74 28 29 20  within assert() 
73d0: 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 74  to verify that t
73e0: 68 65 20 63 6f 64 65 20 67 65 74 73 0a 2a 2a 20  he code gets.** 
73f0: 61 6c 6c 20 61 6c 69 67 6e 6d 65 6e 74 20 72 65  all alignment re
7400: 73 74 72 69 63 74 69 6f 6e 73 20 63 6f 72 72 65  strictions corre
7410: 63 74 2e 0a 2a 2a 0a 2a 2a 20 45 78 63 65 70 74  ct..**.** Except
7420: 2c 20 69 66 20 53 51 4c 49 54 45 5f 34 5f 42 59  , if SQLITE_4_BY
7430: 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f  TE_ALIGNED_MALLO
7440: 43 20 69 73 20 64 65 66 69 6e 65 64 2c 20 74 68  C is defined, th
7450: 65 6e 20 74 68 65 0a 2a 2a 20 75 6e 64 65 72 6c  en the.** underl
7460: 79 69 6e 67 20 6d 61 6c 6c 6f 63 28 29 20 69 6d  ying malloc() im
7470: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6d 69 67  plementation mig
7480: 68 74 20 72 65 74 75 72 6e 20 75 73 20 34 2d 62  ht return us 4-b
7490: 79 74 65 20 61 6c 69 67 6e 65 64 0a 2a 2a 20 70  yte aligned.** p
74a0: 6f 69 6e 74 65 72 73 2e 20 20 49 6e 20 74 68 61  ointers.  In tha
74b0: 74 20 63 61 73 65 2c 20 6f 6e 6c 79 20 76 65 72  t case, only ver
74c0: 69 66 79 20 34 2d 62 79 74 65 20 61 6c 69 67 6e  ify 4-byte align
74d0: 6d 65 6e 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  ment..*/.#ifdef 
74e0: 53 51 4c 49 54 45 5f 34 5f 42 59 54 45 5f 41 4c  SQLITE_4_BYTE_AL
74f0: 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43 0a 23 20 64  IGNED_MALLOC.# d
7500: 65 66 69 6e 65 20 45 49 47 48 54 5f 42 59 54 45  efine EIGHT_BYTE
7510: 5f 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20 20  _ALIGNMENT(X)   
7520: 28 28 28 28 63 68 61 72 2a 29 28 58 29 20 2d 20  ((((char*)(X) - 
7530: 28 63 68 61 72 2a 29 30 29 26 33 29 3d 3d 30 29  (char*)0)&3)==0)
7540: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
7550: 45 49 47 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e  EIGHT_BYTE_ALIGN
7560: 4d 45 4e 54 28 58 29 20 20 20 28 28 28 28 63 68  MENT(X)   ((((ch
7570: 61 72 2a 29 28 58 29 20 2d 20 28 63 68 61 72 2a  ar*)(X) - (char*
7580: 29 30 29 26 37 29 3d 3d 30 29 0a 23 65 6e 64 69  )0)&7)==0).#endi
7590: 66 0a 0a 2f 2a 0a 2a 2a 20 44 69 73 61 62 6c 65  f../*.** Disable
75a0: 20 4d 4d 41 50 20 6f 6e 20 70 6c 61 74 66 6f 72   MMAP on platfor
75b0: 6d 73 20 77 68 65 72 65 20 69 74 20 69 73 20 6b  ms where it is k
75c0: 6e 6f 77 6e 20 74 6f 20 6e 6f 74 20 77 6f 72 6b  nown to not work
75d0: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
75e0: 5f 5f 4f 70 65 6e 42 53 44 5f 5f 29 20 7c 7c 20  __OpenBSD__) || 
75f0: 64 65 66 69 6e 65 64 28 5f 5f 51 4e 58 4e 54 4f  defined(__QNXNTO
7600: 5f 5f 29 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  __).# undef SQLI
7610: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
7620: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
7630: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30  _MAX_MMAP_SIZE 0
7640: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44  .#endif../*.** D
7650: 65 66 61 75 6c 74 20 6d 61 78 69 6d 75 6d 20 73  efault maximum s
7660: 69 7a 65 20 6f 66 20 6d 65 6d 6f 72 79 20 75 73  ize of memory us
7670: 65 64 20 62 79 20 6d 65 6d 6f 72 79 2d 6d 61 70  ed by memory-map
7680: 70 65 64 20 49 2f 4f 20 69 6e 20 74 68 65 20 56  ped I/O in the V
7690: 46 53 0a 2a 2f 0a 23 69 66 64 65 66 20 5f 5f 41  FS.*/.#ifdef __A
76a0: 50 50 4c 45 5f 5f 0a 23 20 69 6e 63 6c 75 64 65  PPLE__.# include
76b0: 20 3c 54 61 72 67 65 74 43 6f 6e 64 69 74 69 6f   <TargetConditio
76c0: 6e 61 6c 73 2e 68 3e 0a 23 65 6e 64 69 66 0a 23  nals.h>.#endif.#
76d0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41  ifndef SQLITE_MA
76e0: 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 69 66  X_MMAP_SIZE.# if
76f0: 20 64 65 66 69 6e 65 64 28 5f 5f 6c 69 6e 75 78   defined(__linux
7700: 5f 5f 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e  __) \.  || defin
7710: 65 64 28 5f 57 49 4e 33 32 29 20 5c 0a 20 20 7c  ed(_WIN32) \.  |
7720: 7c 20 28 64 65 66 69 6e 65 64 28 5f 5f 41 50 50  | (defined(__APP
7730: 4c 45 5f 5f 29 20 26 26 20 64 65 66 69 6e 65 64  LE__) && defined
7740: 28 5f 5f 4d 41 43 48 5f 5f 29 29 20 5c 0a 20 20  (__MACH__)) \.  
7750: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 73 75 6e  || defined(__sun
7760: 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64  ) \.  || defined
7770: 28 5f 5f 46 72 65 65 42 53 44 5f 5f 29 20 5c 0a  (__FreeBSD__) \.
7780: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 44    || defined(__D
7790: 72 61 67 6f 6e 46 6c 79 5f 5f 29 0a 23 20 20 20  ragonFly__).#   
77a0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
77b0: 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 78 37 66  X_MMAP_SIZE 0x7f
77c0: 66 66 30 30 30 30 20 20 2f 2a 20 32 31 34 37 34  ff0000  /* 21474
77d0: 31 38 31 31 32 20 2a 2f 0a 23 20 65 6c 73 65 0a  18112 */.# else.
77e0: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
77f0: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20  E_MAX_MMAP_SIZE 
7800: 30 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  0.# endif.#endif
7810: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 65 66 61  ../*.** The defa
7820: 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45 20 69 73  ult MMAP_SIZE is
7830: 20 7a 65 72 6f 20 6f 6e 20 61 6c 6c 20 70 6c 61   zero on all pla
7840: 74 66 6f 72 6d 73 2e 20 20 4f 72 2c 20 65 76 65  tforms.  Or, eve
7850: 6e 20 69 66 20 61 20 6c 61 72 67 65 72 0a 2a 2a  n if a larger.**
7860: 20 64 65 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49   default MMAP_SI
7870: 5a 45 20 69 73 20 73 70 65 63 69 66 69 65 64 20  ZE is specified 
7880: 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2c  at compile-time,
7890: 20 6d 61 6b 65 20 73 75 72 65 20 74 68 61 74 20   make sure that 
78a0: 69 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 65  it does.** not e
78b0: 78 63 65 65 64 20 74 68 65 20 6d 61 78 69 6d 75  xceed the maximu
78c0: 6d 20 6d 6d 61 70 20 73 69 7a 65 2e 0a 2a 2f 0a  m mmap size..*/.
78d0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44  #ifndef SQLITE_D
78e0: 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45  EFAULT_MMAP_SIZE
78f0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
7900: 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49  _DEFAULT_MMAP_SI
7910: 5a 45 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 20  ZE 0.#endif.#if 
7920: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
7930: 4d 41 50 5f 53 49 5a 45 3e 53 51 4c 49 54 45 5f  MAP_SIZE>SQLITE_
7940: 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20  MAX_MMAP_SIZE.# 
7950: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46  undef SQLITE_DEF
7960: 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23  AULT_MMAP_SIZE.#
7970: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44   define SQLITE_D
7980: 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45  EFAULT_MMAP_SIZE
7990: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50   SQLITE_MAX_MMAP
79a0: 5f 53 49 5a 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a  _SIZE.#endif../*
79b0: 0a 2a 2a 20 4f 6e 6c 79 20 6f 6e 65 20 6f 66 20  .** Only one of 
79c0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
79d0: 41 54 33 20 6f 72 20 53 51 4c 49 54 45 5f 45 4e  AT3 or SQLITE_EN
79e0: 41 42 4c 45 5f 53 54 41 54 34 20 63 61 6e 20 62  ABLE_STAT4 can b
79f0: 65 20 64 65 66 69 6e 65 64 2e 0a 2a 2a 20 50 72  e defined..** Pr
7a00: 69 6f 72 69 74 79 20 69 73 20 67 69 76 65 6e 20  iority is given 
7a10: 74 6f 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  to SQLITE_ENABLE
7a20: 5f 53 54 41 54 34 2e 20 20 49 66 20 65 69 74 68  _STAT4.  If eith
7a30: 65 72 20 61 72 65 20 64 65 66 69 6e 65 64 2c 20  er are defined, 
7a40: 61 6c 73 6f 0a 2a 2a 20 64 65 66 69 6e 65 20 53  also.** define S
7a50: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
7a60: 54 33 5f 4f 52 5f 53 54 41 54 34 0a 2a 2f 0a 23  T3_OR_STAT4.*/.#
7a70: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
7a80: 42 4c 45 5f 53 54 41 54 34 0a 23 20 75 6e 64 65  BLE_STAT4.# unde
7a90: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
7aa0: 53 54 41 54 33 0a 23 20 64 65 66 69 6e 65 20 53  STAT3.# define S
7ab0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
7ac0: 54 33 5f 4f 52 5f 53 54 41 54 34 20 31 0a 23 65  T3_OR_STAT4 1.#e
7ad0: 6c 69 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  lif SQLITE_ENABL
7ae0: 45 5f 53 54 41 54 33 0a 23 20 64 65 66 69 6e 65  E_STAT3.# define
7af0: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
7b00: 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 20 31 0a  TAT3_OR_STAT4 1.
7b10: 23 65 6c 69 66 20 53 51 4c 49 54 45 5f 45 4e 41  #elif SQLITE_ENA
7b20: 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41  BLE_STAT3_OR_STA
7b30: 54 34 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54  T4.# undef SQLIT
7b40: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f  E_ENABLE_STAT3_O
7b50: 52 5f 53 54 41 54 34 0a 23 65 6e 64 69 66 0a 0a  R_STAT4.#endif..
7b60: 2f 2a 0a 2a 2a 20 53 45 4c 45 43 54 54 52 41 43  /*.** SELECTTRAC
7b70: 45 5f 45 4e 41 42 4c 45 44 20 77 69 6c 6c 20 62  E_ENABLED will b
7b80: 65 20 65 69 74 68 65 72 20 31 20 6f 72 20 30 20  e either 1 or 0 
7b90: 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65  depending on whe
7ba0: 74 68 65 72 20 6f 72 20 6e 6f 74 0a 2a 2a 20 74  ther or not.** t
7bb0: 68 65 20 53 65 6c 65 63 74 20 71 75 65 72 79 20  he Select query 
7bc0: 67 65 6e 65 72 61 74 6f 72 20 74 72 61 63 69 6e  generator tracin
7bd0: 67 20 6c 6f 67 69 63 20 69 73 20 74 75 72 6e 65  g logic is turne
7be0: 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  d on..*/.#if def
7bf0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
7c00: 4c 45 5f 53 45 4c 45 43 54 54 52 41 43 45 29 0a  LE_SELECTTRACE).
7c10: 23 20 64 65 66 69 6e 65 20 53 45 4c 45 43 54 54  # define SELECTT
7c20: 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 31 0a 23  RACE_ENABLED 1.#
7c30: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53 45  else.# define SE
7c40: 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45  LECTTRACE_ENABLE
7c50: 44 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  D 0.#endif../*.*
7c60: 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
7c70: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
7c80: 74 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64  tructure is used
7c90: 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 62 75   to store the bu
7ca0: 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61  sy-handler.** ca
7cb0: 6c 6c 62 61 63 6b 20 66 6f 72 20 61 20 67 69 76  llback for a giv
7cc0: 65 6e 20 73 71 6c 69 74 65 20 68 61 6e 64 6c 65  en sqlite handle
7cd0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 71 6c 69  ..**.** The sqli
7ce0: 74 65 2e 62 75 73 79 48 61 6e 64 6c 65 72 20 6d  te.busyHandler m
7cf0: 65 6d 62 65 72 20 6f 66 20 74 68 65 20 73 71 6c  ember of the sql
7d00: 69 74 65 20 73 74 72 75 63 74 20 63 6f 6e 74 61  ite struct conta
7d10: 69 6e 73 20 74 68 65 20 62 75 73 79 0a 2a 2a 20  ins the busy.** 
7d20: 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 74 68 65  callback for the
7d30: 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
7d40: 2e 20 45 61 63 68 20 70 61 67 65 72 20 6f 70 65  . Each pager ope
7d50: 6e 65 64 20 76 69 61 20 74 68 65 20 73 71 6c 69  ned via the sqli
7d60: 74 65 0a 2a 2a 20 68 61 6e 64 6c 65 20 69 73 20  te.** handle is 
7d70: 70 61 73 73 65 64 20 61 20 70 6f 69 6e 74 65 72  passed a pointer
7d80: 20 74 6f 20 73 71 6c 69 74 65 2e 62 75 73 79 48   to sqlite.busyH
7d90: 61 6e 64 6c 65 72 2e 20 54 68 65 20 62 75 73 79  andler. The busy
7da0: 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c  -handler.** call
7db0: 62 61 63 6b 20 69 73 20 63 75 72 72 65 6e 74 6c  back is currentl
7dc0: 79 20 69 6e 76 6f 6b 65 64 20 6f 6e 6c 79 20 66  y invoked only f
7dd0: 72 6f 6d 20 77 69 74 68 69 6e 20 70 61 67 65 72  rom within pager
7de0: 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  .c..*/.typedef s
7df0: 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c 65  truct BusyHandle
7e00: 72 20 42 75 73 79 48 61 6e 64 6c 65 72 3b 0a 73  r BusyHandler;.s
7e10: 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c 65  truct BusyHandle
7e20: 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78 42 75 73  r {.  int (*xBus
7e30: 79 48 61 6e 64 6c 65 72 29 28 76 6f 69 64 20 2a  yHandler)(void *
7e40: 2c 69 6e 74 29 3b 20 20 2f 2a 20 54 68 65 20 62  ,int);  /* The b
7e50: 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  usy callback */.
7e60: 20 20 76 6f 69 64 20 2a 70 42 75 73 79 41 72 67    void *pBusyArg
7e70: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
7e80: 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67      /* First arg
7e90: 20 74 6f 20 62 75 73 79 20 63 61 6c 6c 62 61 63   to busy callbac
7ea0: 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 75 73 79  k */.  int nBusy
7eb0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
7ec0: 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 63 72           /* Incr
7ed0: 65 6d 65 6e 74 65 64 20 77 69 74 68 20 65 61 63  emented with eac
7ee0: 68 20 62 75 73 79 20 63 61 6c 6c 20 2a 2f 0a 20  h busy call */. 
7ef0: 20 75 38 20 62 45 78 74 72 61 46 69 6c 65 41 72   u8 bExtraFileAr
7f00: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
7f10: 20 20 20 2f 2a 20 49 6e 63 6c 75 64 65 20 73 71     /* Include sq
7f20: 6c 69 74 65 33 5f 66 69 6c 65 20 61 73 20 63 61  lite3_file as ca
7f30: 6c 6c 62 61 63 6b 20 61 72 67 20 2a 2f 0a 7d 3b  llback arg */.};
7f40: 0a 0a 2f 2a 0a 2a 2a 20 4e 61 6d 65 20 6f 66 20  ../*.** Name of 
7f50: 74 68 65 20 6d 61 73 74 65 72 20 64 61 74 61 62  the master datab
7f60: 61 73 65 20 74 61 62 6c 65 2e 20 20 54 68 65 20  ase table.  The 
7f70: 6d 61 73 74 65 72 20 64 61 74 61 62 61 73 65 20  master database 
7f80: 74 61 62 6c 65 0a 2a 2a 20 69 73 20 61 20 73 70  table.** is a sp
7f90: 65 63 69 61 6c 20 74 61 62 6c 65 20 74 68 61 74  ecial table that
7fa0: 20 68 6f 6c 64 73 20 74 68 65 20 6e 61 6d 65 73   holds the names
7fb0: 20 61 6e 64 20 61 74 74 72 69 62 75 74 65 73 20   and attributes 
7fc0: 6f 66 20 61 6c 6c 0a 2a 2a 20 75 73 65 72 20 74  of all.** user t
7fd0: 61 62 6c 65 73 20 61 6e 64 20 69 6e 64 69 63 65  ables and indice
7fe0: 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41  s..*/.#define MA
7ff0: 53 54 45 52 5f 4e 41 4d 45 20 20 20 20 20 20 20  STER_NAME       
8000: 22 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 0a  "sqlite_master".
8010: 23 64 65 66 69 6e 65 20 54 45 4d 50 5f 4d 41 53  #define TEMP_MAS
8020: 54 45 52 5f 4e 41 4d 45 20 20 22 73 71 6c 69 74  TER_NAME  "sqlit
8030: 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22 0a 0a  e_temp_master"..
8040: 2f 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 2d 70  /*.** The root-p
8050: 61 67 65 20 6f 66 20 74 68 65 20 6d 61 73 74 65  age of the maste
8060: 72 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  r database table
8070: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53  ..*/.#define MAS
8080: 54 45 52 5f 52 4f 4f 54 20 20 20 20 20 20 20 31  TER_ROOT       1
8090: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 61 6d 65  ../*.** The name
80a0: 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61 20 74   of the schema t
80b0: 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  able..*/.#define
80c0: 20 53 43 48 45 4d 41 5f 54 41 42 4c 45 28 78 29   SCHEMA_TABLE(x)
80d0: 20 20 28 28 21 4f 4d 49 54 5f 54 45 4d 50 44 42    ((!OMIT_TEMPDB
80e0: 29 26 26 28 78 3d 3d 31 29 3f 54 45 4d 50 5f 4d  )&&(x==1)?TEMP_M
80f0: 41 53 54 45 52 5f 4e 41 4d 45 3a 4d 41 53 54 45  ASTER_NAME:MASTE
8100: 52 5f 4e 41 4d 45 29 0a 0a 2f 2a 0a 2a 2a 20 41  R_NAME)../*.** A
8110: 20 63 6f 6e 76 65 6e 69 65 6e 63 65 20 6d 61 63   convenience mac
8120: 72 6f 20 74 68 61 74 20 72 65 74 75 72 6e 73 20  ro that returns 
8130: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6c  the number of el
8140: 65 6d 65 6e 74 73 20 69 6e 0a 2a 2a 20 61 6e 20  ements in.** an 
8150: 61 72 72 61 79 2e 0a 2a 2f 0a 23 64 65 66 69 6e  array..*/.#defin
8160: 65 20 41 72 72 61 79 53 69 7a 65 28 58 29 20 20  e ArraySize(X)  
8170: 20 20 28 28 69 6e 74 29 28 73 69 7a 65 6f 66 28    ((int)(sizeof(
8180: 58 29 2f 73 69 7a 65 6f 66 28 58 5b 30 5d 29 29  X)/sizeof(X[0]))
8190: 29 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65 72 6d 69  )../*.** Determi
81a0: 6e 65 20 69 66 20 74 68 65 20 61 72 67 75 6d 65  ne if the argume
81b0: 6e 74 20 69 73 20 61 20 70 6f 77 65 72 20 6f 66  nt is a power of
81c0: 20 74 77 6f 0a 2a 2f 0a 23 64 65 66 69 6e 65 20   two.*/.#define 
81d0: 49 73 50 6f 77 65 72 4f 66 54 77 6f 28 58 29 20  IsPowerOfTwo(X) 
81e0: 28 28 28 58 29 26 28 28 58 29 2d 31 29 29 3d 3d  (((X)&((X)-1))==
81f0: 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  0)../*.** The fo
8200: 6c 6c 6f 77 69 6e 67 20 76 61 6c 75 65 20 61 73  llowing value as
8210: 20 61 20 64 65 73 74 72 75 63 74 6f 72 20 6d 65   a destructor me
8220: 61 6e 73 20 74 6f 20 75 73 65 20 73 71 6c 69 74  ans to use sqlit
8230: 65 33 44 62 46 72 65 65 28 29 2e 0a 2a 2a 20 54  e3DbFree()..** T
8240: 68 65 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  he sqlite3DbFree
8250: 28 29 20 72 6f 75 74 69 6e 65 20 72 65 71 75 69  () routine requi
8260: 72 65 73 20 74 77 6f 20 70 61 72 61 6d 65 74 65  res two paramete
8270: 72 73 20 69 6e 73 74 65 61 64 20 6f 66 20 74 68  rs instead of th
8280: 65 0a 2a 2a 20 6f 6e 65 20 70 61 72 61 6d 65 74  e.** one paramet
8290: 65 72 20 74 68 61 74 20 64 65 73 74 72 75 63 74  er that destruct
82a0: 6f 72 73 20 6e 6f 72 6d 61 6c 6c 79 20 77 61 6e  ors normally wan
82b0: 74 2e 20 20 53 6f 20 77 65 20 68 61 76 65 20 74  t.  So we have t
82c0: 6f 20 69 6e 74 72 6f 64 75 63 65 0a 2a 2a 20 74  o introduce.** t
82d0: 68 69 73 20 6d 61 67 69 63 20 76 61 6c 75 65 20  his magic value 
82e0: 74 68 61 74 20 74 68 65 20 63 6f 64 65 20 6b 6e  that the code kn
82f0: 6f 77 73 20 74 6f 20 68 61 6e 64 6c 65 20 64 69  ows to handle di
8300: 66 66 65 72 65 6e 74 6c 79 2e 20 20 41 6e 79 0a  fferently.  Any.
8310: 2a 2a 20 70 6f 69 6e 74 65 72 20 77 69 6c 6c 20  ** pointer will 
8320: 77 6f 72 6b 20 68 65 72 65 20 61 73 20 6c 6f 6e  work here as lon
8330: 67 20 61 73 20 69 74 20 69 73 20 64 69 73 74 69  g as it is disti
8340: 6e 63 74 20 66 72 6f 6d 20 53 51 4c 49 54 45 5f  nct from SQLITE_
8350: 53 54 41 54 49 43 0a 2a 2a 20 61 6e 64 20 53 51  STATIC.** and SQ
8360: 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 2e 0a  LITE_TRANSIENT..
8370: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
8380: 45 5f 44 59 4e 41 4d 49 43 20 20 20 28 28 73 71  E_DYNAMIC   ((sq
8390: 6c 69 74 65 33 5f 64 65 73 74 72 75 63 74 6f 72  lite3_destructor
83a0: 5f 74 79 70 65 29 73 71 6c 69 74 65 33 4d 61 6c  _type)sqlite3Mal
83b0: 6c 6f 63 53 69 7a 65 29 0a 0a 2f 2a 0a 2a 2a 20  locSize)../*.** 
83c0: 57 68 65 6e 20 53 51 4c 49 54 45 5f 4f 4d 49 54  When SQLITE_OMIT
83d0: 5f 57 53 44 20 69 73 20 64 65 66 69 6e 65 64 2c  _WSD is defined,
83e0: 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74   it means that t
83f0: 68 65 20 74 61 72 67 65 74 20 70 6c 61 74 66 6f  he target platfo
8400: 72 6d 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 73  rm does.** not s
8410: 75 70 70 6f 72 74 20 57 72 69 74 61 62 6c 65 20  upport Writable 
8420: 53 74 61 74 69 63 20 44 61 74 61 20 28 57 53 44  Static Data (WSD
8430: 29 20 73 75 63 68 20 61 73 20 67 6c 6f 62 61 6c  ) such as global
8440: 20 61 6e 64 20 73 74 61 74 69 63 20 76 61 72 69   and static vari
8450: 61 62 6c 65 73 2e 0a 2a 2a 20 41 6c 6c 20 76 61  ables..** All va
8460: 72 69 61 62 6c 65 73 20 6d 75 73 74 20 65 69 74  riables must eit
8470: 68 65 72 20 62 65 20 6f 6e 20 74 68 65 20 73 74  her be on the st
8480: 61 63 6b 20 6f 72 20 64 79 6e 61 6d 69 63 61 6c  ack or dynamical
8490: 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 66 72 6f  ly allocated fro
84a0: 6d 0a 2a 2a 20 74 68 65 20 68 65 61 70 2e 20 20  m.** the heap.  
84b0: 57 68 65 6e 20 57 53 44 20 69 73 20 75 6e 73 75  When WSD is unsu
84c0: 70 70 6f 72 74 65 64 2c 20 74 68 65 20 76 61 72  pported, the var
84d0: 69 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f  iable declaratio
84e0: 6e 73 20 73 63 61 74 74 65 72 65 64 0a 2a 2a 20  ns scattered.** 
84f0: 74 68 72 6f 75 67 68 6f 75 74 20 74 68 65 20 53  throughout the S
8500: 51 4c 69 74 65 20 63 6f 64 65 20 6d 75 73 74 20  QLite code must 
8510: 62 65 63 6f 6d 65 20 63 6f 6e 73 74 61 6e 74 73  become constants
8520: 20 69 6e 73 74 65 61 64 2e 20 20 54 68 65 20 53   instead.  The S
8530: 51 4c 49 54 45 5f 57 53 44 0a 2a 2a 20 6d 61 63  QLITE_WSD.** mac
8540: 72 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20 74  ro is used for t
8550: 68 69 73 20 70 75 72 70 6f 73 65 2e 20 20 41 6e  his purpose.  An
8560: 64 20 69 6e 73 74 65 61 64 20 6f 66 20 72 65 66  d instead of ref
8570: 65 72 65 6e 63 69 6e 67 20 74 68 65 20 76 61 72  erencing the var
8580: 69 61 62 6c 65 0a 2a 2a 20 64 69 72 65 63 74 6c  iable.** directl
8590: 79 2c 20 77 65 20 75 73 65 20 69 74 73 20 63 6f  y, we use its co
85a0: 6e 73 74 61 6e 74 20 61 73 20 61 20 6b 65 79 20  nstant as a key 
85b0: 74 6f 20 6c 6f 6f 6b 75 70 20 74 68 65 20 72 75  to lookup the ru
85c0: 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65 64  n-time allocated
85d0: 0a 2a 2a 20 62 75 66 66 65 72 20 74 68 61 74 20  .** buffer that 
85e0: 68 6f 6c 64 73 20 72 65 61 6c 20 76 61 72 69 61  holds real varia
85f0: 62 6c 65 2e 20 20 54 68 65 20 63 6f 6e 73 74 61  ble.  The consta
8600: 6e 74 20 69 73 20 61 6c 73 6f 20 74 68 65 20 69  nt is also the i
8610: 6e 69 74 69 61 6c 69 7a 65 72 0a 2a 2a 20 66 6f  nitializer.** fo
8620: 72 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20 61  r the run-time a
8630: 6c 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72 2e  llocated buffer.
8640: 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 75 73  .**.** In the us
8650: 75 61 6c 20 63 61 73 65 20 77 68 65 72 65 20 57  ual case where W
8660: 53 44 20 69 73 20 73 75 70 70 6f 72 74 65 64 2c  SD is supported,
8670: 20 74 68 65 20 53 51 4c 49 54 45 5f 57 53 44 20   the SQLITE_WSD 
8680: 61 6e 64 20 47 4c 4f 42 41 4c 0a 2a 2a 20 6d 61  and GLOBAL.** ma
8690: 63 72 6f 73 20 62 65 63 6f 6d 65 20 6e 6f 2d 6f  cros become no-o
86a0: 70 73 20 61 6e 64 20 68 61 76 65 20 7a 65 72 6f  ps and have zero
86b0: 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 69 6d 70   performance imp
86c0: 61 63 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  act..*/.#ifdef S
86d0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 20  QLITE_OMIT_WSD. 
86e0: 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f   #define SQLITE_
86f0: 57 53 44 20 63 6f 6e 73 74 0a 20 20 23 64 65 66  WSD const.  #def
8700: 69 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20  ine GLOBAL(t,v) 
8710: 28 2a 28 74 2a 29 73 71 6c 69 74 65 33 5f 77 73  (*(t*)sqlite3_ws
8720: 64 5f 66 69 6e 64 28 28 76 6f 69 64 2a 29 26 28  d_find((void*)&(
8730: 76 29 2c 20 73 69 7a 65 6f 66 28 76 29 29 29 0a  v), sizeof(v))).
8740: 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
8750: 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 47 4c  3GlobalConfig GL
8760: 4f 42 41 4c 28 73 74 72 75 63 74 20 53 71 6c 69  OBAL(struct Sqli
8770: 74 65 33 43 6f 6e 66 69 67 2c 20 73 71 6c 69 74  te3Config, sqlit
8780: 65 33 43 6f 6e 66 69 67 29 0a 20 20 69 6e 74 20  e3Config).  int 
8790: 73 71 6c 69 74 65 33 5f 77 73 64 5f 69 6e 69 74  sqlite3_wsd_init
87a0: 28 69 6e 74 20 4e 2c 20 69 6e 74 20 4a 29 3b 0a  (int N, int J);.
87b0: 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f    void *sqlite3_
87c0: 77 73 64 5f 66 69 6e 64 28 76 6f 69 64 20 2a 4b  wsd_find(void *K
87d0: 2c 20 69 6e 74 20 4c 29 3b 0a 23 65 6c 73 65 0a  , int L);.#else.
87e0: 20 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45    #define SQLITE
87f0: 5f 57 53 44 0a 20 20 23 64 65 66 69 6e 65 20 47  _WSD.  #define G
8800: 4c 4f 42 41 4c 28 74 2c 76 29 20 76 0a 20 20 23  LOBAL(t,v) v.  #
8810: 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47 6c  define sqlite3Gl
8820: 6f 62 61 6c 43 6f 6e 66 69 67 20 73 71 6c 69 74  obalConfig sqlit
8830: 65 33 43 6f 6e 66 69 67 0a 23 65 6e 64 69 66 0a  e3Config.#endif.
8840: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
8850: 77 69 6e 67 20 6d 61 63 72 6f 73 20 61 72 65 20  wing macros are 
8860: 75 73 65 64 20 74 6f 20 73 75 70 70 72 65 73 73  used to suppress
8870: 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e   compiler warnin
8880: 67 73 20 61 6e 64 20 74 6f 0a 2a 2a 20 6d 61 6b  gs and to.** mak
8890: 65 20 69 74 20 63 6c 65 61 72 20 74 6f 20 68 75  e it clear to hu
88a0: 6d 61 6e 20 72 65 61 64 65 72 73 20 77 68 65 6e  man readers when
88b0: 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61 72 61   a function para
88c0: 6d 65 74 65 72 20 69 73 20 64 65 6c 69 62 65 72  meter is deliber
88d0: 61 74 65 6c 79 0a 2a 2a 20 6c 65 66 74 20 75 6e  ately.** left un
88e0: 75 73 65 64 20 77 69 74 68 69 6e 20 74 68 65 20  used within the 
88f0: 62 6f 64 79 20 6f 66 20 61 20 66 75 6e 63 74 69  body of a functi
8900: 6f 6e 2e 20 54 68 69 73 20 75 73 75 61 6c 6c 79  on. This usually
8910: 20 68 61 70 70 65 6e 73 20 77 68 65 6e 0a 2a 2a   happens when.**
8920: 20 61 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 63   a function is c
8930: 61 6c 6c 65 64 20 76 69 61 20 61 20 66 75 6e 63  alled via a func
8940: 74 69 6f 6e 20 70 6f 69 6e 74 65 72 2e 20 46 6f  tion pointer. Fo
8950: 72 20 65 78 61 6d 70 6c 65 20 74 68 65 0a 2a 2a  r example the.**
8960: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
8970: 6f 66 20 61 6e 20 53 51 4c 20 61 67 67 72 65 67  of an SQL aggreg
8980: 61 74 65 20 73 74 65 70 20 63 61 6c 6c 62 61 63  ate step callbac
8990: 6b 20 6d 61 79 20 6e 6f 74 20 75 73 65 20 74 68  k may not use th
89a0: 65 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 20 69  e.** parameter i
89b0: 6e 64 69 63 61 74 69 6e 67 20 74 68 65 20 6e 75  ndicating the nu
89c0: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
89d0: 73 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 20  s passed to the 
89e0: 61 67 67 72 65 67 61 74 65 2c 0a 2a 2a 20 69 66  aggregate,.** if
89f0: 20 69 74 20 6b 6e 6f 77 73 20 74 68 61 74 20 74   it knows that t
8a00: 68 69 73 20 69 73 20 65 6e 66 6f 72 63 65 64 20  his is enforced 
8a10: 65 6c 73 65 77 68 65 72 65 2e 0a 2a 2a 0a 2a 2a  elsewhere..**.**
8a20: 20 57 68 65 6e 20 61 20 66 75 6e 63 74 69 6f 6e   When a function
8a30: 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e 6f   parameter is no
8a40: 74 20 75 73 65 64 20 61 74 20 61 6c 6c 20 77 69  t used at all wi
8a50: 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20 6f 66  thin the body of
8a60: 20 61 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20   a function,.** 
8a70: 69 74 20 69 73 20 67 65 6e 65 72 61 6c 6c 79 20  it is generally 
8a80: 6e 61 6d 65 64 20 22 4e 6f 74 55 73 65 64 22 20  named "NotUsed" 
8a90: 6f 72 20 22 4e 6f 74 55 73 65 64 32 22 20 74 6f  or "NotUsed2" to
8aa0: 20 6d 61 6b 65 20 74 68 69 6e 67 73 20 65 76 65   make things eve
8ab0: 6e 20 63 6c 65 61 72 65 72 2e 0a 2a 2a 20 48 6f  n clearer..** Ho
8ac0: 77 65 76 65 72 2c 20 74 68 65 73 65 20 6d 61 63  wever, these mac
8ad0: 72 6f 73 20 6d 61 79 20 61 6c 73 6f 20 62 65 20  ros may also be 
8ae0: 75 73 65 64 20 74 6f 20 73 75 70 70 72 65 73 73  used to suppress
8af0: 20 77 61 72 6e 69 6e 67 73 20 72 65 6c 61 74 65   warnings relate
8b00: 64 20 74 6f 0a 2a 2a 20 70 61 72 61 6d 65 74 65  d to.** paramete
8b10: 72 73 20 74 68 61 74 20 6d 61 79 20 6f 72 20 6d  rs that may or m
8b20: 61 79 20 6e 6f 74 20 62 65 20 75 73 65 64 20 64  ay not be used d
8b30: 65 70 65 6e 64 69 6e 67 20 6f 6e 20 63 6f 6d 70  epending on comp
8b40: 69 6c 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 2e  ilation options.
8b50: 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70 6c 65 20  .** For example 
8b60: 74 68 6f 73 65 20 70 61 72 61 6d 65 74 65 72 73  those parameters
8b70: 20 6f 6e 6c 79 20 75 73 65 64 20 69 6e 20 61 73   only used in as
8b80: 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74  sert() statement
8b90: 73 2e 20 49 6e 20 74 68 65 73 65 0a 2a 2a 20 63  s. In these.** c
8ba0: 61 73 65 73 20 74 68 65 20 70 61 72 61 6d 65 74  ases the paramet
8bb0: 65 72 73 20 61 72 65 20 6e 61 6d 65 64 20 61 73  ers are named as
8bc0: 20 70 65 72 20 74 68 65 20 75 73 75 61 6c 20 63   per the usual c
8bd0: 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a 2a 2f 0a 23  onventions..*/.#
8be0: 64 65 66 69 6e 65 20 55 4e 55 53 45 44 5f 50 41  define UNUSED_PA
8bf0: 52 41 4d 45 54 45 52 28 78 29 20 28 76 6f 69 64  RAMETER(x) (void
8c00: 29 28 78 29 0a 23 64 65 66 69 6e 65 20 55 4e 55  )(x).#define UNU
8c10: 53 45 44 5f 50 41 52 41 4d 45 54 45 52 32 28 78  SED_PARAMETER2(x
8c20: 2c 79 29 20 55 4e 55 53 45 44 5f 50 41 52 41 4d  ,y) UNUSED_PARAM
8c30: 45 54 45 52 28 78 29 2c 55 4e 55 53 45 44 5f 50  ETER(x),UNUSED_P
8c40: 41 52 41 4d 45 54 45 52 28 79 29 0a 0a 2f 2a 0a  ARAMETER(y)../*.
8c50: 2a 2a 20 46 6f 72 77 61 72 64 20 72 65 66 65 72  ** Forward refer
8c60: 65 6e 63 65 73 20 74 6f 20 73 74 72 75 63 74 75  ences to structu
8c70: 72 65 73 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  res.*/.typedef s
8c80: 74 72 75 63 74 20 41 67 67 49 6e 66 6f 20 41 67  truct AggInfo Ag
8c90: 67 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73  gInfo;.typedef s
8ca0: 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74 65 78  truct AuthContex
8cb0: 74 20 41 75 74 68 43 6f 6e 74 65 78 74 3b 0a 74  t AuthContext;.t
8cc0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 41 75  ypedef struct Au
8cd0: 74 6f 69 6e 63 49 6e 66 6f 20 41 75 74 6f 69 6e  toincInfo Autoin
8ce0: 63 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73  cInfo;.typedef s
8cf0: 74 72 75 63 74 20 42 69 74 76 65 63 20 42 69 74  truct Bitvec Bit
8d00: 76 65 63 3b 0a 74 79 70 65 64 65 66 20 73 74 72  vec;.typedef str
8d10: 75 63 74 20 43 6f 6c 6c 53 65 71 20 43 6f 6c 6c  uct CollSeq Coll
8d20: 53 65 71 3b 0a 74 79 70 65 64 65 66 20 73 74 72  Seq;.typedef str
8d30: 75 63 74 20 43 6f 6c 75 6d 6e 20 43 6f 6c 75 6d  uct Column Colum
8d40: 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  n;.typedef struc
8d50: 74 20 44 62 20 44 62 3b 0a 74 79 70 65 64 65 66  t Db Db;.typedef
8d60: 20 73 74 72 75 63 74 20 53 63 68 65 6d 61 20 53   struct Schema S
8d70: 63 68 65 6d 61 3b 0a 74 79 70 65 64 65 66 20 73  chema;.typedef s
8d80: 74 72 75 63 74 20 45 78 70 72 20 45 78 70 72 3b  truct Expr Expr;
8d90: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8da0: 45 78 70 72 4c 69 73 74 20 45 78 70 72 4c 69 73  ExprList ExprLis
8db0: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
8dc0: 74 20 46 4b 65 79 20 46 4b 65 79 3b 0a 74 79 70  t FKey FKey;.typ
8dd0: 65 64 65 66 20 73 74 72 75 63 74 20 46 75 6e 63  edef struct Func
8de0: 44 65 73 74 72 75 63 74 6f 72 20 46 75 6e 63 44  Destructor FuncD
8df0: 65 73 74 72 75 63 74 6f 72 3b 0a 74 79 70 65 64  estructor;.typed
8e00: 65 66 20 73 74 72 75 63 74 20 46 75 6e 63 44 65  ef struct FuncDe
8e10: 66 20 46 75 6e 63 44 65 66 3b 0a 74 79 70 65 64  f FuncDef;.typed
8e20: 65 66 20 73 74 72 75 63 74 20 46 75 6e 63 44 65  ef struct FuncDe
8e30: 66 48 61 73 68 20 46 75 6e 63 44 65 66 48 61 73  fHash FuncDefHas
8e40: 68 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  h;.typedef struc
8e50: 74 20 49 64 4c 69 73 74 20 49 64 4c 69 73 74 3b  t IdList IdList;
8e60: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8e70: 49 6e 64 65 78 20 49 6e 64 65 78 3b 0a 74 79 70  Index Index;.typ
8e80: 65 64 65 66 20 73 74 72 75 63 74 20 49 6e 64 65  edef struct Inde
8e90: 78 53 61 6d 70 6c 65 20 49 6e 64 65 78 53 61 6d  xSample IndexSam
8ea0: 70 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ple;.typedef str
8eb0: 75 63 74 20 4b 65 79 43 6c 61 73 73 20 4b 65 79  uct KeyClass Key
8ec0: 43 6c 61 73 73 3b 0a 74 79 70 65 64 65 66 20 73  Class;.typedef s
8ed0: 74 72 75 63 74 20 4b 65 79 49 6e 66 6f 20 4b 65  truct KeyInfo Ke
8ee0: 79 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73  yInfo;.typedef s
8ef0: 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 20  truct Lookaside 
8f00: 4c 6f 6f 6b 61 73 69 64 65 3b 0a 74 79 70 65 64  Lookaside;.typed
8f10: 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73  ef struct Lookas
8f20: 69 64 65 53 6c 6f 74 20 4c 6f 6f 6b 61 73 69 64  ideSlot Lookasid
8f30: 65 53 6c 6f 74 3b 0a 74 79 70 65 64 65 66 20 73  eSlot;.typedef s
8f40: 74 72 75 63 74 20 4d 6f 64 75 6c 65 20 4d 6f 64  truct Module Mod
8f50: 75 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ule;.typedef str
8f60: 75 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20  uct NameContext 
8f70: 4e 61 6d 65 43 6f 6e 74 65 78 74 3b 0a 74 79 70  NameContext;.typ
8f80: 65 64 65 66 20 73 74 72 75 63 74 20 50 61 72 73  edef struct Pars
8f90: 65 20 50 61 72 73 65 3b 0a 74 79 70 65 64 65 66  e Parse;.typedef
8fa0: 20 73 74 72 75 63 74 20 50 72 65 55 70 64 61 74   struct PreUpdat
8fb0: 65 20 50 72 65 55 70 64 61 74 65 3b 0a 74 79 70  e PreUpdate;.typ
8fc0: 65 64 65 66 20 73 74 72 75 63 74 20 50 72 69 6e  edef struct Prin
8fd0: 74 66 41 72 67 75 6d 65 6e 74 73 20 50 72 69 6e  tfArguments Prin
8fe0: 74 66 41 72 67 75 6d 65 6e 74 73 3b 0a 74 79 70  tfArguments;.typ
8ff0: 65 64 65 66 20 73 74 72 75 63 74 20 52 6f 77 53  edef struct RowS
9000: 65 74 20 52 6f 77 53 65 74 3b 0a 74 79 70 65 64  et RowSet;.typed
9010: 65 66 20 73 74 72 75 63 74 20 53 61 76 65 70 6f  ef struct Savepo
9020: 69 6e 74 20 53 61 76 65 70 6f 69 6e 74 3b 0a 74  int Savepoint;.t
9030: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 65  ypedef struct Se
9040: 6c 65 63 74 20 53 65 6c 65 63 74 3b 0a 74 79 70  lect Select;.typ
9050: 65 64 65 66 20 73 74 72 75 63 74 20 53 51 4c 69  edef struct SQLi
9060: 74 65 54 68 72 65 61 64 20 53 51 4c 69 74 65 54  teThread SQLiteT
9070: 68 72 65 61 64 3b 0a 74 79 70 65 64 65 66 20 73  hread;.typedef s
9080: 74 72 75 63 74 20 53 65 6c 65 63 74 44 65 73 74  truct SelectDest
9090: 20 53 65 6c 65 63 74 44 65 73 74 3b 0a 74 79 70   SelectDest;.typ
90a0: 65 64 65 66 20 73 74 72 75 63 74 20 53 72 63 4c  edef struct SrcL
90b0: 69 73 74 20 53 72 63 4c 69 73 74 3b 0a 74 79 70  ist SrcList;.typ
90c0: 65 64 65 66 20 73 74 72 75 63 74 20 73 71 6c 69  edef struct sqli
90d0: 74 65 33 5f 73 74 72 20 53 74 72 41 63 63 75 6d  te3_str StrAccum
90e0: 3b 20 2f 2a 20 49 6e 74 65 72 6e 61 6c 20 61 6c  ; /* Internal al
90f0: 69 61 73 20 66 6f 72 20 73 71 6c 69 74 65 33 5f  ias for sqlite3_
9100: 73 74 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 73  str */.typedef s
9110: 74 72 75 63 74 20 54 61 62 6c 65 20 54 61 62 6c  truct Table Tabl
9120: 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  e;.typedef struc
9130: 74 20 54 61 62 6c 65 4c 6f 63 6b 20 54 61 62 6c  t TableLock Tabl
9140: 65 4c 6f 63 6b 3b 0a 74 79 70 65 64 65 66 20 73  eLock;.typedef s
9150: 74 72 75 63 74 20 54 6f 6b 65 6e 20 54 6f 6b 65  truct Token Toke
9160: 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  n;.typedef struc
9170: 74 20 54 72 65 65 56 69 65 77 20 54 72 65 65 56  t TreeView TreeV
9180: 69 65 77 3b 0a 74 79 70 65 64 65 66 20 73 74 72  iew;.typedef str
9190: 75 63 74 20 54 72 69 67 67 65 72 20 54 72 69 67  uct Trigger Trig
91a0: 67 65 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ger;.typedef str
91b0: 75 63 74 20 54 72 69 67 67 65 72 50 72 67 20 54  uct TriggerPrg T
91c0: 72 69 67 67 65 72 50 72 67 3b 0a 74 79 70 65 64  riggerPrg;.typed
91d0: 65 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65  ef struct Trigge
91e0: 72 53 74 65 70 20 54 72 69 67 67 65 72 53 74 65  rStep TriggerSte
91f0: 70 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  p;.typedef struc
9200: 74 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64  t UnpackedRecord
9210: 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 3b   UnpackedRecord;
9220: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9230: 55 70 73 65 72 74 20 55 70 73 65 72 74 3b 0a 74  Upsert Upsert;.t
9240: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 56 54  ypedef struct VT
9250: 61 62 6c 65 20 56 54 61 62 6c 65 3b 0a 74 79 70  able VTable;.typ
9260: 65 64 65 66 20 73 74 72 75 63 74 20 56 74 61 62  edef struct Vtab
9270: 43 74 78 20 56 74 61 62 43 74 78 3b 0a 74 79 70  Ctx VtabCtx;.typ
9280: 65 64 65 66 20 73 74 72 75 63 74 20 57 61 6c 6b  edef struct Walk
9290: 65 72 20 57 61 6c 6b 65 72 3b 0a 74 79 70 65 64  er Walker;.typed
92a0: 65 66 20 73 74 72 75 63 74 20 57 68 65 72 65 49  ef struct WhereI
92b0: 6e 66 6f 20 57 68 65 72 65 49 6e 66 6f 3b 0a 74  nfo WhereInfo;.t
92c0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 57 69  ypedef struct Wi
92d0: 74 68 20 57 69 74 68 3b 0a 0a 2f 2a 20 41 20 56  th With;../* A V
92e0: 4c 69 73 74 20 6f 62 6a 65 63 74 20 72 65 63 6f  List object reco
92f0: 72 64 73 20 61 20 6d 61 70 70 69 6e 67 20 62 65  rds a mapping be
9300: 74 77 65 65 6e 20 70 61 72 61 6d 65 74 65 72 73  tween parameters
9310: 2f 76 61 72 69 61 62 6c 65 73 2f 77 69 6c 64 63  /variables/wildc
9320: 61 72 64 73 0a 2a 2a 20 69 6e 20 74 68 65 20 53  ards.** in the S
9330: 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 28 73 75  QL statement (su
9340: 63 68 20 61 73 20 24 61 62 63 2c 20 40 70 71 72  ch as $abc, @pqr
9350: 2c 20 6f 72 20 3a 78 79 7a 29 20 61 6e 64 20 74  , or :xyz) and t
9360: 68 65 20 69 6e 74 65 67 65 72 0a 2a 2a 20 76 61  he integer.** va
9370: 72 69 61 62 6c 65 20 6e 75 6d 62 65 72 20 61 73  riable number as
9380: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
9390: 61 74 20 70 61 72 61 6d 65 74 65 72 2e 20 20 53  at parameter.  S
93a0: 65 65 20 74 68 65 20 66 6f 72 6d 61 74 20 64 65  ee the format de
93b0: 73 63 72 69 70 74 69 6f 6e 0a 2a 2a 20 6f 6e 20  scription.** on 
93c0: 74 68 65 20 73 71 6c 69 74 65 33 56 4c 69 73 74  the sqlite3VList
93d0: 41 64 64 28 29 20 72 6f 75 74 69 6e 65 20 66 6f  Add() routine fo
93e0: 72 20 6d 6f 72 65 20 69 6e 66 6f 72 6d 61 74 69  r more informati
93f0: 6f 6e 2e 20 20 41 20 56 4c 69 73 74 20 69 73 20  on.  A VList is 
9400: 72 65 61 6c 6c 79 0a 2a 2a 20 6a 75 73 74 20 61  really.** just a
9410: 6e 20 61 72 72 61 79 20 6f 66 20 69 6e 74 65 67  n array of integ
9420: 65 72 73 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20  ers..*/.typedef 
9430: 69 6e 74 20 56 4c 69 73 74 3b 0a 0a 2f 2a 0a 2a  int VList;../*.*
9440: 2a 20 44 65 66 65 72 20 73 6f 75 72 63 69 6e 67  * Defer sourcing
9450: 20 76 64 62 65 2e 68 20 61 6e 64 20 62 74 72 65   vdbe.h and btre
9460: 65 2e 68 20 75 6e 74 69 6c 20 61 66 74 65 72 20  e.h until after 
9470: 74 68 65 20 22 75 38 22 20 61 6e 64 0a 2a 2a 20  the "u8" and.** 
9480: 22 42 75 73 79 48 61 6e 64 6c 65 72 22 20 74 79  "BusyHandler" ty
9490: 70 65 64 65 66 73 2e 20 76 64 62 65 2e 68 20 61  pedefs. vdbe.h a
94a0: 6c 73 6f 20 72 65 71 75 69 72 65 73 20 61 20 66  lso requires a f
94b0: 65 77 20 6f 66 20 74 68 65 20 6f 70 61 71 75 65  ew of the opaque
94c0: 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 79 70 65  .** pointer type
94d0: 73 20 28 69 2e 65 2e 20 46 75 6e 63 44 65 66 29  s (i.e. FuncDef)
94e0: 20 64 65 66 69 6e 65 64 20 61 62 6f 76 65 2e 0a   defined above..
94f0: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 62 74 72  */.#include "btr
9500: 65 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22  ee.h".#include "
9510: 76 64 62 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65  vdbe.h".#include
9520: 20 22 70 61 67 65 72 2e 68 22 0a 23 69 6e 63 6c   "pager.h".#incl
9530: 75 64 65 20 22 70 63 61 63 68 65 2e 68 22 0a 23  ude "pcache.h".#
9540: 69 6e 63 6c 75 64 65 20 22 6f 73 2e 68 22 0a 23  include "os.h".#
9550: 69 6e 63 6c 75 64 65 20 22 6d 75 74 65 78 2e 68  include "mutex.h
9560: 22 0a 0a 2f 2a 20 54 68 65 20 53 51 4c 49 54 45  "../* The SQLITE
9570: 5f 45 58 54 52 41 5f 44 55 52 41 42 4c 45 20 63  _EXTRA_DURABLE c
9580: 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
9590: 6f 6e 20 75 73 65 64 20 74 6f 20 73 65 74 20 74  on used to set t
95a0: 68 65 20 64 65 66 61 75 6c 74 0a 2a 2a 20 73 79  he default.** sy
95b0: 6e 63 68 72 6f 6e 6f 75 73 20 73 65 74 74 69 6e  nchronous settin
95c0: 67 20 74 6f 20 45 58 54 52 41 2e 20 20 49 74 20  g to EXTRA.  It 
95d0: 69 73 20 6e 6f 20 6c 6f 6e 67 65 72 20 73 75 70  is no longer sup
95e0: 70 6f 72 74 65 64 2e 0a 2a 2f 0a 23 69 66 64 65  ported..*/.#ifde
95f0: 66 20 53 51 4c 49 54 45 5f 45 58 54 52 41 5f 44  f SQLITE_EXTRA_D
9600: 55 52 41 42 4c 45 0a 23 20 77 61 72 6e 69 6e 67  URABLE.# warning
9610: 20 55 73 65 20 53 51 4c 49 54 45 5f 44 45 46 41   Use SQLITE_DEFA
9620: 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 3d  ULT_SYNCHRONOUS=
9630: 33 20 69 6e 73 74 65 61 64 20 6f 66 20 53 51 4c  3 instead of SQL
9640: 49 54 45 5f 45 58 54 52 41 5f 44 55 52 41 42 4c  ITE_EXTRA_DURABL
9650: 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  E.# define SQLIT
9660: 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52  E_DEFAULT_SYNCHR
9670: 4f 4e 4f 55 53 20 33 0a 23 65 6e 64 69 66 0a 0a  ONOUS 3.#endif..
9680: 2f 2a 0a 2a 2a 20 44 65 66 61 75 6c 74 20 73 79  /*.** Default sy
9690: 6e 63 68 72 6f 6e 6f 75 73 20 6c 65 76 65 6c 73  nchronous levels
96a0: 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61  ..**.** Note tha
96b0: 74 20 28 66 6f 72 20 68 69 73 74 6f 72 63 61 6c  t (for historcal
96c0: 20 72 65 61 73 6f 6e 73 29 20 74 68 65 20 50 41   reasons) the PA
96d0: 47 45 52 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 5f  GER_SYNCHRONOUS_
96e0: 2a 20 6d 61 63 72 6f 73 20 64 69 66 66 65 72 0a  * macros differ.
96f0: 2a 2a 20 66 72 6f 6d 20 74 68 65 20 53 51 4c 49  ** from the SQLI
9700: 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48  TE_DEFAULT_SYNCH
9710: 52 4f 4e 4f 55 53 20 76 61 6c 75 65 20 62 79 20  RONOUS value by 
9720: 31 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20  1..**.**        
9730: 20 20 20 50 41 47 45 52 5f 53 59 4e 43 48 52 4f     PAGER_SYNCHRO
9740: 4e 4f 55 53 20 20 20 20 20 20 20 44 45 46 41 55  NOUS       DEFAU
9750: 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 2a  LT_SYNCHRONOUS.*
9760: 2a 20 20 20 4f 46 46 20 20 20 20 20 20 20 20 20  *   OFF         
9770: 20 20 31 20 20 20 20 20 20 20 20 20 20 20 20 20    1             
9780: 20 20 20 20 20 20 20 20 20 20 20 20 30 0a 2a 2a              0.**
9790: 20 20 20 4e 4f 52 4d 41 4c 20 20 20 20 20 20 20     NORMAL       
97a0: 20 32 20 20 20 20 20 20 20 20 20 20 20 20 20 20   2              
97b0: 20 20 20 20 20 20 20 20 20 20 20 31 0a 2a 2a 20             1.** 
97c0: 20 20 46 55 4c 4c 20 20 20 20 20 20 20 20 20 20    FULL          
97d0: 33 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  3               
97e0: 20 20 20 20 20 20 20 20 20 20 32 0a 2a 2a 20 20            2.**  
97f0: 20 45 58 54 52 41 20 20 20 20 20 20 20 20 20 34   EXTRA         4
9800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9810: 20 20 20 20 20 20 20 20 20 33 0a 2a 2a 0a 2a 2a           3.**.**
9820: 20 54 68 65 20 22 50 52 41 47 4d 41 20 73 79 6e   The "PRAGMA syn
9830: 63 68 72 6f 6e 6f 75 73 22 20 73 74 61 74 65 6d  chronous" statem
9840: 65 6e 74 20 61 6c 73 6f 20 75 73 65 73 20 74 68  ent also uses th
9850: 65 20 7a 65 72 6f 2d 62 61 73 65 64 20 6e 75 6d  e zero-based num
9860: 62 65 72 73 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65  bers..** In othe
9870: 72 20 77 6f 72 64 73 2c 20 74 68 65 20 7a 65 72  r words, the zer
9880: 6f 2d 62 61 73 65 64 20 6e 75 6d 62 65 72 73 20  o-based numbers 
9890: 61 72 65 20 75 73 65 64 20 66 6f 72 20 61 6c 6c  are used for all
98a0: 20 65 78 74 65 72 6e 61 6c 20 69 6e 74 65 72 66   external interf
98b0: 61 63 65 73 0a 2a 2a 20 61 6e 64 20 74 68 65 20  aces.** and the 
98c0: 6f 6e 65 2d 62 61 73 65 64 20 76 61 6c 75 65 73  one-based values
98d0: 20 61 72 65 20 75 73 65 64 20 69 6e 74 65 72 6e   are used intern
98e0: 61 6c 6c 79 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  ally..*/.#ifndef
98f0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
9900: 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 23 20 64 65  SYNCHRONOUS.# de
9910: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41  fine SQLITE_DEFA
9920: 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20  ULT_SYNCHRONOUS 
9930: 32 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  2.#endif.#ifndef
9940: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
9950: 57 41 4c 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a  WAL_SYNCHRONOUS.
9960: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
9970: 44 45 46 41 55 4c 54 5f 57 41 4c 5f 53 59 4e 43  DEFAULT_WAL_SYNC
9980: 48 52 4f 4e 4f 55 53 20 53 51 4c 49 54 45 5f 44  HRONOUS SQLITE_D
9990: 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f  EFAULT_SYNCHRONO
99a0: 55 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  US.#endif../*.**
99b0: 20 45 61 63 68 20 64 61 74 61 62 61 73 65 20 66   Each database f
99c0: 69 6c 65 20 74 6f 20 62 65 20 61 63 63 65 73 73  ile to be access
99d0: 65 64 20 62 79 20 74 68 65 20 73 79 73 74 65 6d  ed by the system
99e0: 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a   is an instance.
99f0: 2a 2a 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ** of the follow
9a00: 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 20 20  ing structure.  
9a10: 54 68 65 72 65 20 61 72 65 20 6e 6f 72 6d 61 6c  There are normal
9a20: 6c 79 20 74 77 6f 20 6f 66 20 74 68 65 73 65 20  ly two of these 
9a30: 73 74 72 75 63 74 75 72 65 73 0a 2a 2a 20 69 6e  structures.** in
9a40: 20 74 68 65 20 73 71 6c 69 74 65 2e 61 44 62 5b   the sqlite.aDb[
9a50: 5d 20 61 72 72 61 79 2e 20 20 61 44 62 5b 30 5d  ] array.  aDb[0]
9a60: 20 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74   is the main dat
9a70: 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 0a 2a  abase file and.*
9a80: 2a 20 61 44 62 5b 31 5d 20 69 73 20 74 68 65 20  * aDb[1] is the 
9a90: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 75 73  database file us
9aa0: 65 64 20 74 6f 20 68 6f 6c 64 20 74 65 6d 70 6f  ed to hold tempo
9ab0: 72 61 72 79 20 74 61 62 6c 65 73 2e 20 20 41 64  rary tables.  Ad
9ac0: 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20 64 61 74 61  ditional.** data
9ad0: 62 61 73 65 73 20 6d 61 79 20 62 65 20 61 74 74  bases may be att
9ae0: 61 63 68 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74  ached..*/.struct
9af0: 20 44 62 20 7b 0a 20 20 63 68 61 72 20 2a 7a 44   Db {.  char *zD
9b00: 62 53 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20  bSName;      /* 
9b10: 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 64 61 74  Name of this dat
9b20: 61 62 61 73 65 2e 20 28 73 63 68 65 6d 61 20 6e  abase. (schema n
9b30: 61 6d 65 2c 20 6e 6f 74 20 66 69 6c 65 6e 61 6d  ame, not filenam
9b40: 65 29 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70  e) */.  Btree *p
9b50: 42 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  Bt;          /* 
9b60: 54 68 65 20 42 2a 54 72 65 65 20 73 74 72 75 63  The B*Tree struc
9b70: 74 75 72 65 20 66 6f 72 20 74 68 69 73 20 64 61  ture for this da
9b80: 74 61 62 61 73 65 20 66 69 6c 65 20 2a 2f 0a 20  tabase file */. 
9b90: 20 75 38 20 73 61 66 65 74 79 5f 6c 65 76 65 6c   u8 safety_level
9ba0: 3b 20 20 20 20 20 2f 2a 20 48 6f 77 20 61 67 67  ;     /* How agg
9bb0: 72 65 73 73 69 76 65 20 61 74 20 73 79 6e 63 69  ressive at synci
9bc0: 6e 67 20 64 61 74 61 20 74 6f 20 64 69 73 6b 20  ng data to disk 
9bd0: 2a 2f 0a 20 20 75 38 20 62 53 79 6e 63 53 65 74  */.  u8 bSyncSet
9be0: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75  ;         /* Tru
9bf0: 65 20 69 66 20 22 50 52 41 47 4d 41 20 73 79 6e  e if "PRAGMA syn
9c00: 63 68 72 6f 6e 6f 75 73 3d 4e 22 20 68 61 73 20  chronous=N" has 
9c10: 62 65 65 6e 20 72 75 6e 20 2a 2f 0a 20 20 53 63  been run */.  Sc
9c20: 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20  hema *pSchema;  
9c30: 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
9c40: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
9c50: 20 28 70 6f 73 73 69 62 6c 79 20 73 68 61 72 65   (possibly share
9c60: 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  d) */.};../*.** 
9c70: 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
9c80: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
9c90: 75 63 74 75 72 65 20 73 74 6f 72 65 73 20 61 20  ucture stores a 
9ca0: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e  database schema.
9cb0: 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63 68 65  .**.** Most Sche
9cc0: 6d 61 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61  ma objects are a
9cd0: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
9ce0: 20 42 74 72 65 65 2e 20 20 54 68 65 20 65 78 63   Btree.  The exc
9cf0: 65 70 74 69 6f 6e 20 69 73 0a 2a 2a 20 74 68 65  eption is.** the
9d00: 20 53 63 68 65 6d 61 20 66 6f 72 20 74 68 65 20   Schema for the 
9d10: 54 45 4d 50 20 64 61 74 61 62 61 65 73 20 28 73  TEMP databaes (s
9d20: 71 6c 69 74 65 33 2e 61 44 62 5b 31 5d 29 20 77  qlite3.aDb[1]) w
9d30: 68 69 63 68 20 69 73 20 66 72 65 65 2d 73 74 61  hich is free-sta
9d40: 6e 64 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73 68 61  nding..** In sha
9d50: 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65 2c 20  red cache mode, 
9d60: 61 20 73 69 6e 67 6c 65 20 53 63 68 65 6d 61 20  a single Schema 
9d70: 6f 62 6a 65 63 74 20 63 61 6e 20 62 65 20 73 68  object can be sh
9d80: 61 72 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65  ared by multiple
9d90: 0a 2a 2a 20 42 74 72 65 65 73 20 74 68 61 74 20  .** Btrees that 
9da0: 72 65 66 65 72 20 74 6f 20 74 68 65 20 73 61 6d  refer to the sam
9db0: 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 42 74 53  e underlying BtS
9dc0: 68 61 72 65 64 20 6f 62 6a 65 63 74 2e 0a 2a 2a  hared object..**
9dd0: 0a 2a 2a 20 53 63 68 65 6d 61 20 6f 62 6a 65 63  .** Schema objec
9de0: 74 73 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63  ts are automatic
9df0: 61 6c 6c 79 20 64 65 61 6c 6c 6f 63 61 74 65 64  ally deallocated
9e00: 20 77 68 65 6e 20 74 68 65 20 6c 61 73 74 20 42   when the last B
9e10: 74 72 65 65 20 74 68 61 74 0a 2a 2a 20 72 65 66  tree that.** ref
9e20: 65 72 65 6e 63 65 73 20 74 68 65 6d 20 69 73 20  erences them is 
9e30: 64 65 73 74 72 6f 79 65 64 2e 20 20 20 54 68 65  destroyed.   The
9e40: 20 54 45 4d 50 20 53 63 68 65 6d 61 20 69 73 20   TEMP Schema is 
9e50: 6d 61 6e 75 61 6c 6c 79 20 66 72 65 65 64 20 62  manually freed b
9e60: 79 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6c 6f  y.** sqlite3_clo
9e70: 73 65 28 29 2e 0a 2a 0a 2a 2a 20 41 20 74 68 72  se()..*.** A thr
9e80: 65 61 64 20 6d 75 73 74 20 62 65 20 68 6f 6c 64  ead must be hold
9e90: 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74  ing a mutex on t
9ea0: 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
9eb0: 20 42 74 72 65 65 20 69 6e 20 6f 72 64 65 72 0a   Btree in order.
9ec0: 2a 2a 20 74 6f 20 61 63 63 65 73 73 20 53 63 68  ** to access Sch
9ed0: 65 6d 61 20 63 6f 6e 74 65 6e 74 2e 20 20 54 68  ema content.  Th
9ee0: 69 73 20 69 6d 70 6c 69 65 73 20 74 68 61 74 20  is implies that 
9ef0: 74 68 65 20 74 68 72 65 61 64 20 6d 75 73 74 20  the thread must 
9f00: 61 6c 73 6f 20 62 65 0a 2a 2a 20 68 6f 6c 64 69  also be.** holdi
9f10: 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68  ng a mutex on th
9f20: 65 20 73 71 6c 69 74 65 33 20 63 6f 6e 6e 65 63  e sqlite3 connec
9f30: 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 74 68 61  tion pointer tha
9f40: 74 20 6f 77 6e 73 20 74 68 65 20 42 74 72 65 65  t owns the Btree
9f50: 2e 0a 2a 2a 20 46 6f 72 20 61 20 54 45 4d 50 20  ..** For a TEMP 
9f60: 53 63 68 65 6d 61 2c 20 6f 6e 6c 79 20 74 68 65  Schema, only the
9f70: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74 65   connection mute
9f80: 78 20 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a  x is required..*
9f90: 2f 0a 73 74 72 75 63 74 20 53 63 68 65 6d 61 20  /.struct Schema 
9fa0: 7b 0a 20 20 69 6e 74 20 73 63 68 65 6d 61 5f 63  {.  int schema_c
9fb0: 6f 6f 6b 69 65 3b 20 20 20 2f 2a 20 44 61 74 61  ookie;   /* Data
9fc0: 62 61 73 65 20 73 63 68 65 6d 61 20 76 65 72 73  base schema vers
9fd0: 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74  ion number for t
9fe0: 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20 69 6e  his file */.  in
9ff0: 74 20 69 47 65 6e 65 72 61 74 69 6f 6e 3b 20 20  t iGeneration;  
a000: 20 20 20 2f 2a 20 47 65 6e 65 72 61 74 69 6f 6e     /* Generation
a010: 20 63 6f 75 6e 74 65 72 2e 20 20 49 6e 63 72 65   counter.  Incre
a020: 6d 65 6e 74 65 64 20 77 69 74 68 20 65 61 63 68  mented with each
a030: 20 63 68 61 6e 67 65 20 2a 2f 0a 20 20 48 61 73   change */.  Has
a040: 68 20 74 62 6c 48 61 73 68 3b 20 20 20 20 20 20  h tblHash;      
a050: 20 20 2f 2a 20 41 6c 6c 20 74 61 62 6c 65 73 20    /* All tables 
a060: 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20  indexed by name 
a070: 2a 2f 0a 20 20 48 61 73 68 20 69 64 78 48 61 73  */.  Hash idxHas
a080: 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c  h;        /* All
a090: 20 28 6e 61 6d 65 64 29 20 69 6e 64 69 63 65 73   (named) indices
a0a0: 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65   indexed by name
a0b0: 20 2a 2f 0a 20 20 48 61 73 68 20 74 72 69 67 48   */.  Hash trigH
a0c0: 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c  ash;       /* Al
a0d0: 6c 20 74 72 69 67 67 65 72 73 20 69 6e 64 65 78  l triggers index
a0e0: 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20  ed by name */.  
a0f0: 48 61 73 68 20 66 6b 65 79 48 61 73 68 3b 20 20  Hash fkeyHash;  
a100: 20 20 20 20 20 2f 2a 20 41 6c 6c 20 66 6f 72 65       /* All fore
a110: 69 67 6e 20 6b 65 79 73 20 62 79 20 72 65 66 65  ign keys by refe
a120: 72 65 6e 63 65 64 20 74 61 62 6c 65 20 6e 61 6d  renced table nam
a130: 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 53  e */.  Table *pS
a140: 65 71 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 54  eqTab;      /* T
a150: 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  he sqlite_sequen
a160: 63 65 20 74 61 62 6c 65 20 75 73 65 64 20 62 79  ce table used by
a170: 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a   AUTOINCREMENT *
a180: 2f 0a 20 20 75 38 20 66 69 6c 65 5f 66 6f 72 6d  /.  u8 file_form
a190: 61 74 3b 20 20 20 20 20 20 2f 2a 20 53 63 68 65  at;      /* Sche
a1a0: 6d 61 20 66 6f 72 6d 61 74 20 76 65 72 73 69 6f  ma format versio
a1b0: 6e 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20  n for this file 
a1c0: 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20  */.  u8 enc;    
a1d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
a1e0: 74 20 65 6e 63 6f 64 69 6e 67 20 75 73 65 64 20  t encoding used 
a1f0: 62 79 20 74 68 69 73 20 64 61 74 61 62 61 73 65  by this database
a200: 20 2a 2f 0a 20 20 75 31 36 20 73 63 68 65 6d 61   */.  u16 schema
a210: 46 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20 46 6c  Flags;     /* Fl
a220: 61 67 73 20 61 73 73 6f 63 69 61 74 65 64 20 77  ags associated w
a230: 69 74 68 20 74 68 69 73 20 73 63 68 65 6d 61 20  ith this schema 
a240: 2a 2f 0a 20 20 69 6e 74 20 63 61 63 68 65 5f 73  */.  int cache_s
a250: 69 7a 65 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ize;      /* Num
a260: 62 65 72 20 6f 66 20 70 61 67 65 73 20 74 6f 20  ber of pages to 
a270: 75 73 65 20 69 6e 20 74 68 65 20 63 61 63 68 65  use in the cache
a280: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
a290: 65 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62  ese macros can b
a2a0: 65 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20  e used to test, 
a2b0: 73 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69  set, or clear bi
a2c0: 74 73 20 69 6e 20 74 68 65 0a 2a 2a 20 44 62 2e  ts in the.** Db.
a2d0: 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66  pSchema->flags f
a2e0: 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ield..*/.#define
a2f0: 20 44 62 48 61 73 50 72 6f 70 65 72 74 79 28 44   DbHasProperty(D
a300: 2c 49 2c 50 29 20 20 20 20 20 28 28 28 44 29 2d  ,I,P)     (((D)-
a310: 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d  >aDb[I].pSchema-
a320: 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 28 50 29  >schemaFlags&(P)
a330: 29 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20  )==(P)).#define 
a340: 44 62 48 61 73 41 6e 79 50 72 6f 70 65 72 74 79  DbHasAnyProperty
a350: 28 44 2c 49 2c 50 29 20 20 28 28 28 44 29 2d 3e  (D,I,P)  (((D)->
a360: 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e  aDb[I].pSchema->
a370: 73 63 68 65 6d 61 46 6c 61 67 73 26 28 50 29 29  schemaFlags&(P))
a380: 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 44 62 53  !=0).#define DbS
a390: 65 74 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50  etProperty(D,I,P
a3a0: 29 20 20 20 20 20 28 44 29 2d 3e 61 44 62 5b 49  )     (D)->aDb[I
a3b0: 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d  ].pSchema->schem
a3c0: 61 46 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66  aFlags|=(P).#def
a3d0: 69 6e 65 20 44 62 43 6c 65 61 72 50 72 6f 70 65  ine DbClearPrope
a3e0: 72 74 79 28 44 2c 49 2c 50 29 20 20 20 28 44 29  rty(D,I,P)   (D)
a3f0: 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61  ->aDb[I].pSchema
a400: 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 3d 7e  ->schemaFlags&=~
a410: 28 50 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  (P)../*.** Allow
a420: 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68  ed values for th
a430: 65 20 44 42 2e 70 53 63 68 65 6d 61 2d 3e 66 6c  e DB.pSchema->fl
a440: 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a  ags field..**.**
a450: 20 54 68 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f   The DB_SchemaLo
a460: 61 64 65 64 20 66 6c 61 67 20 69 73 20 73 65 74  aded flag is set
a470: 20 61 66 74 65 72 20 74 68 65 20 64 61 74 61 62   after the datab
a480: 61 73 65 20 73 63 68 65 6d 61 20 68 61 73 20 62  ase schema has b
a490: 65 65 6e 0a 2a 2a 20 72 65 61 64 20 69 6e 74 6f  een.** read into
a4a0: 20 69 6e 74 65 72 6e 61 6c 20 68 61 73 68 20 74   internal hash t
a4b0: 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 44 42 5f  ables..**.** DB_
a4c0: 55 6e 72 65 73 65 74 56 69 65 77 73 20 6d 65 61  UnresetViews mea
a4d0: 6e 73 20 74 68 61 74 20 6f 6e 65 20 6f 72 20 6d  ns that one or m
a4e0: 6f 72 65 20 76 69 65 77 73 20 68 61 76 65 20 63  ore views have c
a4f0: 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74  olumn names that
a500: 0a 2a 2a 20 68 61 76 65 20 62 65 65 6e 20 66 69  .** have been fi
a510: 6c 6c 65 64 20 6f 75 74 2e 20 20 49 66 20 74 68  lled out.  If th
a520: 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73  e schema changes
a530: 2c 20 74 68 65 73 65 20 63 6f 6c 75 6d 6e 20 6e  , these column n
a540: 61 6d 65 73 20 6d 69 67 68 74 0a 2a 2a 20 63 68  ames might.** ch
a550: 61 6e 67 65 73 20 61 6e 64 20 73 6f 20 74 68 65  anges and so the
a560: 20 76 69 65 77 20 77 69 6c 6c 20 6e 65 65 64 20   view will need 
a570: 74 6f 20 62 65 20 72 65 73 65 74 2e 0a 2a 2f 0a  to be reset..*/.
a580: 23 64 65 66 69 6e 65 20 44 42 5f 53 63 68 65 6d  #define DB_Schem
a590: 61 4c 6f 61 64 65 64 20 20 20 20 30 78 30 30 30  aLoaded    0x000
a5a0: 31 20 20 2f 2a 20 54 68 65 20 73 63 68 65 6d 61  1  /* The schema
a5b0: 20 68 61 73 20 62 65 65 6e 20 6c 6f 61 64 65 64   has been loaded
a5c0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 55   */.#define DB_U
a5d0: 6e 72 65 73 65 74 56 69 65 77 73 20 20 20 20 30  nresetViews    0
a5e0: 78 30 30 30 32 20 20 2f 2a 20 53 6f 6d 65 20 76  x0002  /* Some v
a5f0: 69 65 77 73 20 68 61 76 65 20 64 65 66 69 6e 65  iews have define
a600: 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 2a  d column names *
a610: 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 45 6d 70  /.#define DB_Emp
a620: 74 79 20 20 20 20 20 20 20 20 20 20 20 30 78 30  ty           0x0
a630: 30 30 34 20 20 2f 2a 20 54 68 65 20 66 69 6c 65  004  /* The file
a640: 20 69 73 20 65 6d 70 74 79 20 28 6c 65 6e 67 74   is empty (lengt
a650: 68 20 30 20 62 79 74 65 73 29 20 2a 2f 0a 23 64  h 0 bytes) */.#d
a660: 65 66 69 6e 65 20 44 42 5f 52 65 73 65 74 57 61  efine DB_ResetWa
a670: 6e 74 65 64 20 20 20 20 20 30 78 30 30 30 38 20  nted     0x0008 
a680: 20 2f 2a 20 52 65 73 65 74 20 74 68 65 20 73 63   /* Reset the sc
a690: 68 65 6d 61 20 77 68 65 6e 20 6e 53 63 68 65 6d  hema when nSchem
a6a0: 61 4c 6f 63 6b 3d 3d 30 20 2a 2f 0a 0a 2f 2a 0a  aLock==0 */../*.
a6b0: 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66  ** The number of
a6c0: 20 64 69 66 66 65 72 65 6e 74 20 6b 69 6e 64 73   different kinds
a6d0: 20 6f 66 20 74 68 69 6e 67 73 20 74 68 61 74 20   of things that 
a6e0: 63 61 6e 20 62 65 20 6c 69 6d 69 74 65 64 0a 2a  can be limited.*
a6f0: 2a 20 75 73 69 6e 67 20 74 68 65 20 73 71 6c 69  * using the sqli
a700: 74 65 33 5f 6c 69 6d 69 74 28 29 20 69 6e 74 65  te3_limit() inte
a710: 72 66 61 63 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e  rface..*/.#defin
a720: 65 20 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54  e SQLITE_N_LIMIT
a730: 20 28 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 57   (SQLITE_LIMIT_W
a740: 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 2b 31 29  ORKER_THREADS+1)
a750: 0a 0a 2f 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64  ../*.** Lookasid
a760: 65 20 6d 61 6c 6c 6f 63 20 69 73 20 61 20 73 65  e malloc is a se
a770: 74 20 6f 66 20 66 69 78 65 64 2d 73 69 7a 65 20  t of fixed-size 
a780: 62 75 66 66 65 72 73 20 74 68 61 74 20 63 61 6e  buffers that can
a790: 20 62 65 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73   be used.** to s
a7a0: 61 74 69 73 66 79 20 73 6d 61 6c 6c 20 74 72 61  atisfy small tra
a7b0: 6e 73 69 65 6e 74 20 6d 65 6d 6f 72 79 20 61 6c  nsient memory al
a7c0: 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75 65 73 74  location request
a7d0: 73 20 66 6f 72 20 6f 62 6a 65 63 74 73 0a 2a 2a  s for objects.**
a7e0: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
a7f0: 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 64 61   a particular da
a800: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
a810: 6e 2e 20 20 54 68 65 20 75 73 65 20 6f 66 0a 2a  n.  The use of.*
a820: 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c  * lookaside mall
a830: 6f 63 20 70 72 6f 76 69 64 65 73 20 61 20 73 69  oc provides a si
a840: 67 6e 69 66 69 63 61 6e 74 20 70 65 72 66 6f 72  gnificant perfor
a850: 6d 61 6e 63 65 20 65 6e 68 61 6e 63 65 6d 65 6e  mance enhancemen
a860: 74 0a 2a 2a 20 28 61 70 70 72 6f 78 20 31 30 25  t.** (approx 10%
a870: 29 20 62 79 20 61 76 6f 69 64 69 6e 67 20 6e 75  ) by avoiding nu
a880: 6d 65 72 6f 75 73 20 6d 61 6c 6c 6f 63 2f 66 72  merous malloc/fr
a890: 65 65 20 72 65 71 75 65 73 74 73 20 77 68 69 6c  ee requests whil
a8a0: 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20 53 51 4c  e parsing.** SQL
a8b0: 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a   statements..**.
a8c0: 2a 2a 20 54 68 65 20 4c 6f 6f 6b 61 73 69 64 65  ** The Lookaside
a8d0: 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73   structure holds
a8e0: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 69   configuration i
a8f0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
a900: 20 74 68 65 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64   the.** lookasid
a910: 65 20 6d 61 6c 6c 6f 63 20 73 75 62 73 79 73 74  e malloc subsyst
a920: 65 6d 2e 20 20 45 61 63 68 20 61 76 61 69 6c 61  em.  Each availa
a930: 62 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  ble memory alloc
a940: 61 74 69 6f 6e 20 69 6e 0a 2a 2a 20 74 68 65 20  ation in.** the 
a950: 6c 6f 6f 6b 61 73 69 64 65 20 73 75 62 73 79 73  lookaside subsys
a960: 74 65 6d 20 69 73 20 73 74 6f 72 65 64 20 6f 6e  tem is stored on
a970: 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f   a linked list o
a980: 66 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 0a  f LookasideSlot.
a990: 2a 2a 20 6f 62 6a 65 63 74 73 2e 0a 2a 2a 0a 2a  ** objects..**.*
a9a0: 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f  * Lookaside allo
a9b0: 63 61 74 69 6f 6e 73 20 61 72 65 20 6f 6e 6c 79  cations are only
a9c0: 20 61 6c 6c 6f 77 65 64 20 66 6f 72 20 6f 62 6a   allowed for obj
a9d0: 65 63 74 73 20 74 68 61 74 20 61 72 65 20 61 73  ects that are as
a9e0: 73 6f 63 69 61 74 65 64 0a 2a 2a 20 77 69 74 68  sociated.** with
a9f0: 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 64 61   a particular da
aa00: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
aa10: 6e 2e 20 20 48 65 6e 63 65 2c 20 73 63 68 65 6d  n.  Hence, schem
aa20: 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 63 61  a information ca
aa30: 6e 6e 6f 74 0a 2a 2a 20 62 65 20 73 74 6f 72 65  nnot.** be store
aa40: 64 20 69 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 62  d in lookaside b
aa50: 65 63 61 75 73 65 20 69 6e 20 73 68 61 72 65 64  ecause in shared
aa60: 20 63 61 63 68 65 20 6d 6f 64 65 20 74 68 65 20   cache mode the 
aa70: 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69  schema informati
aa80: 6f 6e 0a 2a 2a 20 69 73 20 73 68 61 72 65 64 20  on.** is shared 
aa90: 62 79 20 6d 75 6c 74 69 70 6c 65 20 64 61 74 61  by multiple data
aaa0: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73  base connections
aab0: 2e 20 20 54 68 65 72 65 66 6f 72 65 2c 20 77 68  .  Therefore, wh
aac0: 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20 73  ile parsing.** s
aad0: 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f  chema informatio
aae0: 6e 2c 20 74 68 65 20 4c 6f 6f 6b 61 73 69 64 65  n, the Lookaside
aaf0: 2e 62 45 6e 61 62 6c 65 64 20 66 6c 61 67 20 69  .bEnabled flag i
ab00: 73 20 63 6c 65 61 72 65 64 20 73 6f 20 74 68 61  s cleared so tha
ab10: 74 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 61  t.** lookaside a
ab20: 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 6e  llocations are n
ab30: 6f 74 20 75 73 65 64 20 74 6f 20 63 6f 6e 73 74  ot used to const
ab40: 72 75 63 74 20 74 68 65 20 73 63 68 65 6d 61 20  ruct the schema 
ab50: 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a 73 74 72 75  objects..*/.stru
ab60: 63 74 20 4c 6f 6f 6b 61 73 69 64 65 20 7b 0a 20  ct Lookaside {. 
ab70: 20 75 33 32 20 62 44 69 73 61 62 6c 65 3b 20 20   u32 bDisable;  
ab80: 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 6c 79           /* Only
ab90: 20 6f 70 65 72 61 74 65 20 74 68 65 20 6c 6f 6f   operate the loo
aba0: 6b 61 73 69 64 65 20 77 68 65 6e 20 7a 65 72 6f  kaside when zero
abb0: 20 2a 2f 0a 20 20 75 31 36 20 73 7a 3b 20 20 20   */.  u16 sz;   
abc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
abd0: 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20 62 75   Size of each bu
abe0: 66 66 65 72 20 69 6e 20 62 79 74 65 73 20 2a 2f  ffer in bytes */
abf0: 0a 20 20 75 38 20 62 4d 61 6c 6c 6f 63 65 64 3b  .  u8 bMalloced;
ac00: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
ac10: 75 65 20 69 66 20 70 53 74 61 72 74 20 6f 62 74  ue if pStart obt
ac20: 61 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69 74  ained from sqlit
ac30: 65 33 5f 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 20  e3_malloc() */. 
ac40: 20 75 33 32 20 6e 53 6c 6f 74 3b 20 20 20 20 20   u32 nSlot;     
ac50: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
ac60: 65 72 20 6f 66 20 6c 6f 6f 6b 61 73 69 64 65 20  er of lookaside 
ac70: 73 6c 6f 74 73 20 61 6c 6c 6f 63 61 74 65 64 20  slots allocated 
ac80: 2a 2f 0a 20 20 75 33 32 20 61 6e 53 74 61 74 5b  */.  u32 anStat[
ac90: 33 5d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  3];          /* 
aca0: 30 3a 20 68 69 74 73 2e 20 20 31 3a 20 73 69 7a  0: hits.  1: siz
acb0: 65 20 6d 69 73 73 65 73 2e 20 20 32 3a 20 66 75  e misses.  2: fu
acc0: 6c 6c 20 6d 69 73 73 65 73 20 2a 2f 0a 20 20 4c  ll misses */.  L
acd0: 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 49  ookasideSlot *pI
ace0: 6e 69 74 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f  nit;   /* List o
acf0: 66 20 62 75 66 66 65 72 73 20 6e 6f 74 20 70 72  f buffers not pr
ad00: 65 76 69 6f 75 73 6c 79 20 75 73 65 64 20 2a 2f  eviously used */
ad10: 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74  .  LookasideSlot
ad20: 20 2a 70 46 72 65 65 3b 20 20 20 2f 2a 20 4c 69   *pFree;   /* Li
ad30: 73 74 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20  st of available 
ad40: 62 75 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69  buffers */.  voi
ad50: 64 20 2a 70 53 74 61 72 74 3b 20 20 20 20 20 20  d *pStart;      
ad60: 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79       /* First by
ad70: 74 65 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20  te of available 
ad80: 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 2a 2f 0a  memory space */.
ad90: 20 20 76 6f 69 64 20 2a 70 45 6e 64 3b 20 20 20    void *pEnd;   
ada0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72            /* Fir
adb0: 73 74 20 62 79 74 65 20 70 61 73 74 20 65 6e 64  st byte past end
adc0: 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 73 70   of available sp
add0: 61 63 65 20 2a 2f 0a 7d 3b 0a 73 74 72 75 63 74  ace */.};.struct
ade0: 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 7b   LookasideSlot {
adf0: 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74  .  LookasideSlot
ae00: 20 2a 70 4e 65 78 74 3b 20 20 20 20 2f 2a 20 4e   *pNext;    /* N
ae10: 65 78 74 20 62 75 66 66 65 72 20 69 6e 20 74 68  ext buffer in th
ae20: 65 20 6c 69 73 74 20 6f 66 20 66 72 65 65 20 62  e list of free b
ae30: 75 66 66 65 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  uffers */.};../*
ae40: 0a 2a 2a 20 41 20 68 61 73 68 20 74 61 62 6c 65  .** A hash table
ae50: 20 66 6f 72 20 62 75 69 6c 74 2d 69 6e 20 66 75   for built-in fu
ae60: 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f  nction definitio
ae70: 6e 73 2e 20 20 28 41 70 70 6c 69 63 61 74 69 6f  ns.  (Applicatio
ae80: 6e 2d 64 65 66 69 6e 65 64 0a 2a 2a 20 66 75 6e  n-defined.** fun
ae90: 63 74 69 6f 6e 73 20 75 73 65 20 61 20 72 65 67  ctions use a reg
aea0: 75 6c 61 72 20 74 61 62 6c 65 20 74 61 62 6c 65  ular table table
aeb0: 20 66 72 6f 6d 20 68 61 73 68 2e 68 2e 29 0a 2a   from hash.h.).*
aec0: 2a 0a 2a 2a 20 48 61 73 68 20 65 61 63 68 20 46  *.** Hash each F
aed0: 75 6e 63 44 65 66 20 73 74 72 75 63 74 75 72 65  uncDef structure
aee0: 20 69 6e 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65   into one of the
aef0: 20 46 75 6e 63 44 65 66 48 61 73 68 2e 61 5b 5d   FuncDefHash.a[]
af00: 20 73 6c 6f 74 73 2e 0a 2a 2a 20 43 6f 6c 6c 69   slots..** Colli
af10: 73 69 6f 6e 73 20 61 72 65 20 6f 6e 20 74 68 65  sions are on the
af20: 20 46 75 6e 63 44 65 66 2e 75 2e 70 48 61 73 68   FuncDef.u.pHash
af30: 20 63 68 61 69 6e 2e 0a 2a 2f 0a 23 64 65 66 69   chain..*/.#defi
af40: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 48  ne SQLITE_FUNC_H
af50: 41 53 48 5f 53 5a 20 32 33 0a 73 74 72 75 63 74  ASH_SZ 23.struct
af60: 20 46 75 6e 63 44 65 66 48 61 73 68 20 7b 0a 20   FuncDefHash {. 
af70: 20 46 75 6e 63 44 65 66 20 2a 61 5b 53 51 4c 49   FuncDef *a[SQLI
af80: 54 45 5f 46 55 4e 43 5f 48 41 53 48 5f 53 5a 5d  TE_FUNC_HASH_SZ]
af90: 3b 20 20 20 20 20 20 20 2f 2a 20 48 61 73 68 20  ;       /* Hash 
afa0: 74 61 62 6c 65 20 66 6f 72 20 66 75 6e 63 74 69  table for functi
afb0: 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a 23 69 66 64 65  ons */.};..#ifde
afc0: 66 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55  f SQLITE_USER_AU
afd0: 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a 2f 2a 0a  THENTICATION./*.
afe0: 2a 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 68  ** Information h
aff0: 65 6c 64 20 69 6e 20 74 68 65 20 22 73 71 6c 69  eld in the "sqli
b000: 74 65 33 22 20 64 61 74 61 62 61 73 65 20 63 6f  te3" database co
b010: 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63 74 20  nnection object 
b020: 61 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20 6d  and used.** to m
b030: 61 6e 61 67 65 20 75 73 65 72 20 61 75 74 68 65  anage user authe
b040: 6e 74 69 63 61 74 69 6f 6e 2e 0a 2a 2f 0a 74 79  ntication..*/.ty
b050: 70 65 64 65 66 20 73 74 72 75 63 74 20 73 71 6c  pedef struct sql
b060: 69 74 65 33 5f 75 73 65 72 61 75 74 68 20 73 71  ite3_userauth sq
b070: 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68 3b 0a  lite3_userauth;.
b080: 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f 75  struct sqlite3_u
b090: 73 65 72 61 75 74 68 20 7b 0a 20 20 75 38 20 61  serauth {.  u8 a
b0a0: 75 74 68 4c 65 76 65 6c 3b 20 20 20 20 20 20 20  uthLevel;       
b0b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72            /* Cur
b0c0: 72 65 6e 74 20 61 75 74 68 65 6e 74 69 63 61 74  rent authenticat
b0d0: 69 6f 6e 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 69  ion level */.  i
b0e0: 6e 74 20 6e 41 75 74 68 50 57 3b 20 20 20 20 20  nt nAuthPW;     
b0f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b100: 53 69 7a 65 20 6f 66 20 74 68 65 20 7a 41 75 74  Size of the zAut
b110: 68 50 57 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a  hPW in bytes */.
b120: 20 20 63 68 61 72 20 2a 7a 41 75 74 68 50 57 3b    char *zAuthPW;
b130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b140: 2f 2a 20 50 61 73 73 77 6f 72 64 20 75 73 65 64  /* Password used
b150: 20 74 6f 20 61 75 74 68 65 6e 74 69 63 61 74 65   to authenticate
b160: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 75 74   */.  char *zAut
b170: 68 55 73 65 72 3b 20 20 20 20 20 20 20 20 20 20  hUser;          
b180: 20 20 20 20 2f 2a 20 55 73 65 72 20 6e 61 6d 65      /* User name
b190: 20 75 73 65 64 20 74 6f 20 61 75 74 68 65 6e 74   used to authent
b1a0: 69 63 61 74 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20  icate */.};../* 
b1b0: 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
b1c0: 6f 72 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61  or sqlite3_usera
b1d0: 75 74 68 2e 61 75 74 68 4c 65 76 65 6c 20 2a 2f  uth.authLevel */
b1e0: 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 55  .#define UAUTH_U
b1f0: 6e 6b 6e 6f 77 6e 20 20 20 20 20 30 20 20 20 20  nknown     0    
b200: 20 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74 69   /* Authenticati
b210: 6f 6e 20 6e 6f 74 20 79 65 74 20 63 68 65 63 6b  on not yet check
b220: 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41  ed */.#define UA
b230: 55 54 48 5f 46 61 69 6c 20 20 20 20 20 20 20 20  UTH_Fail        
b240: 31 20 20 20 20 20 2f 2a 20 55 73 65 72 20 61 75  1     /* User au
b250: 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 66 61 69  thentication fai
b260: 6c 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55  led */.#define U
b270: 41 55 54 48 5f 55 73 65 72 20 20 20 20 20 20 20  AUTH_User       
b280: 20 32 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e   2     /* Authen
b290: 74 69 63 61 74 65 64 20 61 73 20 61 20 6e 6f 72  ticated as a nor
b2a0: 6d 61 6c 20 75 73 65 72 20 2a 2f 0a 23 64 65 66  mal user */.#def
b2b0: 69 6e 65 20 55 41 55 54 48 5f 41 64 6d 69 6e 20  ine UAUTH_Admin 
b2c0: 20 20 20 20 20 20 33 20 20 20 20 20 2f 2a 20 41        3     /* A
b2d0: 75 74 68 65 6e 74 69 63 61 74 65 64 20 61 73 20  uthenticated as 
b2e0: 61 6e 20 61 64 6d 69 6e 69 73 74 72 61 74 6f 72  an administrator
b2f0: 20 2a 2f 0a 0a 2f 2a 20 46 75 6e 63 74 69 6f 6e   */../* Function
b300: 73 20 75 73 65 64 20 6f 6e 6c 79 20 62 79 20 75  s used only by u
b310: 73 65 72 20 61 75 74 68 6f 72 69 7a 61 74 69 6f  ser authorizatio
b320: 6e 20 6c 6f 67 69 63 20 2a 2f 0a 69 6e 74 20 73  n logic */.int s
b330: 71 6c 69 74 65 33 55 73 65 72 41 75 74 68 54 61  qlite3UserAuthTa
b340: 62 6c 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 29  ble(const char*)
b350: 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 73 65  ;.int sqlite3Use
b360: 72 41 75 74 68 43 68 65 63 6b 4c 6f 67 69 6e 28  rAuthCheckLogin(
b370: 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
b380: 68 61 72 2a 2c 75 38 2a 29 3b 0a 76 6f 69 64 20  har*,u8*);.void 
b390: 73 71 6c 69 74 65 33 55 73 65 72 41 75 74 68 49  sqlite3UserAuthI
b3a0: 6e 69 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76  nit(sqlite3*);.v
b3b0: 6f 69 64 20 73 71 6c 69 74 65 33 43 72 79 70 74  oid sqlite3Crypt
b3c0: 46 75 6e 63 28 73 71 6c 69 74 65 33 5f 63 6f 6e  Func(sqlite3_con
b3d0: 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
b3e0: 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 0a 23 65 6e  3_value**);..#en
b3f0: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 55 53  dif /* SQLITE_US
b400: 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f  ER_AUTHENTICATIO
b410: 4e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 74 79 70 65  N */../*.** type
b420: 64 65 66 20 66 6f 72 20 74 68 65 20 61 75 74 68  def for the auth
b430: 6f 72 69 7a 61 74 69 6f 6e 20 63 61 6c 6c 62 61  orization callba
b440: 63 6b 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a  ck function..*/.
b450: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53  #ifdef SQLITE_US
b460: 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f  ER_AUTHENTICATIO
b470: 4e 0a 20 20 74 79 70 65 64 65 66 20 69 6e 74 20  N.  typedef int 
b480: 28 2a 73 71 6c 69 74 65 33 5f 78 61 75 74 68 29  (*sqlite3_xauth)
b490: 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74  (void*,int,const
b4a0: 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
b4b0: 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 0a  r*,const char*,.
b4c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b4d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
b4e0: 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
b4f0: 74 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a  t char*);.#else.
b500: 20 20 74 79 70 65 64 65 66 20 69 6e 74 20 28 2a    typedef int (*
b510: 73 71 6c 69 74 65 33 5f 78 61 75 74 68 29 28 76  sqlite3_xauth)(v
b520: 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  oid*,int,const c
b530: 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
b540: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 0a 20 20  ,const char*,.  
b550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b560: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
b570: 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69  st char*);.#endi
b580: 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  f..#ifndef SQLIT
b590: 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54 45  E_OMIT_DEPRECATE
b5a0: 44 0a 2f 2a 20 54 68 69 73 20 69 73 20 61 6e 20  D./* This is an 
b5b0: 65 78 74 72 61 20 53 51 4c 49 54 45 5f 54 52 41  extra SQLITE_TRA
b5c0: 43 45 20 6d 61 63 72 6f 20 74 68 61 74 20 69 6e  CE macro that in
b5d0: 64 69 63 61 74 65 73 20 22 6c 65 67 61 63 79 22  dicates "legacy"
b5e0: 20 74 72 61 63 69 6e 67 0a 2a 2a 20 69 6e 20 74   tracing.** in t
b5f0: 68 65 20 73 74 79 6c 65 20 6f 66 20 73 71 6c 69  he style of sqli
b600: 74 65 33 5f 74 72 61 63 65 28 29 0a 2a 2f 0a 23  te3_trace().*/.#
b610: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 52  define SQLITE_TR
b620: 41 43 45 5f 4c 45 47 41 43 59 20 20 30 78 38 30  ACE_LEGACY  0x80
b630: 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 53  .#else.#define S
b640: 51 4c 49 54 45 5f 54 52 41 43 45 5f 4c 45 47 41  QLITE_TRACE_LEGA
b650: 43 59 20 20 30 0a 23 65 6e 64 69 66 20 2f 2a 20  CY  0.#endif /* 
b660: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52  SQLITE_OMIT_DEPR
b670: 45 43 41 54 45 44 20 2a 2f 0a 0a 0a 2f 2a 0a 2a  ECATED */.../*.*
b680: 2a 20 45 61 63 68 20 64 61 74 61 62 61 73 65 20  * Each database 
b690: 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 61 6e  connection is an
b6a0: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
b6b0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
b6c0: 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ture..*/.struct 
b6d0: 73 71 6c 69 74 65 33 20 7b 0a 20 20 73 71 6c 69  sqlite3 {.  sqli
b6e0: 74 65 33 5f 76 66 73 20 2a 70 56 66 73 3b 20 20  te3_vfs *pVfs;  
b6f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 53 20            /* OS 
b700: 49 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73  Interface */.  s
b710: 74 72 75 63 74 20 56 64 62 65 20 2a 70 56 64 62  truct Vdbe *pVdb
b720: 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  e;           /* 
b730: 4c 69 73 74 20 6f 66 20 61 63 74 69 76 65 20 76  List of active v
b740: 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 73 20  irtual machines 
b750: 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70 44  */.  CollSeq *pD
b760: 66 6c 74 43 6f 6c 6c 3b 20 20 20 20 20 20 20 20  fltColl;        
b770: 20 20 20 2f 2a 20 54 68 65 20 64 65 66 61 75 6c     /* The defaul
b780: 74 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  t collating sequ
b790: 65 6e 63 65 20 28 42 49 4e 41 52 59 29 20 2a 2f  ence (BINARY) */
b7a0: 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
b7b0: 20 2a 6d 75 74 65 78 3b 20 20 20 20 20 20 20 20   *mutex;        
b7c0: 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 6d   /* Connection m
b7d0: 75 74 65 78 20 2a 2f 0a 20 20 44 62 20 2a 61 44  utex */.  Db *aD
b7e0: 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b;              
b7f0: 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 62          /* All b
b800: 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 69 6e 74  ackends */.  int
b810: 20 6e 44 62 3b 20 20 20 20 20 20 20 20 20 20 20   nDb;           
b820: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
b830: 6d 62 65 72 20 6f 66 20 62 61 63 6b 65 6e 64 73  mber of backends
b840: 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73   currently in us
b850: 65 20 2a 2f 0a 20 20 75 33 32 20 6d 44 62 46 6c  e */.  u32 mDbFl
b860: 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ags;            
b870: 20 20 20 20 20 2f 2a 20 66 6c 61 67 73 20 72 65       /* flags re
b880: 63 6f 72 64 69 6e 67 20 69 6e 74 65 72 6e 61 6c  cording internal
b890: 20 73 74 61 74 65 20 2a 2f 0a 20 20 75 33 32 20   state */.  u32 
b8a0: 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20  flags;          
b8b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 66 6c 61            /* fla
b8c0: 67 73 20 73 65 74 74 61 62 6c 65 20 62 79 20 70  gs settable by p
b8d0: 72 61 67 6d 61 73 2e 20 53 65 65 20 62 65 6c 6f  ragmas. See belo
b8e0: 77 20 2a 2f 0a 20 20 69 36 34 20 6c 61 73 74 52  w */.  i64 lastR
b8f0: 6f 77 69 64 3b 20 20 20 20 20 20 20 20 20 20 20  owid;           
b900: 20 20 20 20 20 2f 2a 20 52 4f 57 49 44 20 6f 66       /* ROWID of
b910: 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 69 6e 73   most recent ins
b920: 65 72 74 20 28 73 65 65 20 61 62 6f 76 65 29 20  ert (see above) 
b930: 2a 2f 0a 20 20 69 36 34 20 73 7a 4d 6d 61 70 3b  */.  i64 szMmap;
b940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b950: 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6d 6d     /* Default mm
b960: 61 70 5f 73 69 7a 65 20 73 65 74 74 69 6e 67 20  ap_size setting 
b970: 2a 2f 0a 20 20 75 33 32 20 6e 53 63 68 65 6d 61  */.  u32 nSchema
b980: 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20  Lock;           
b990: 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 72 65 73     /* Do not res
b9a0: 65 74 20 74 68 65 20 73 63 68 65 6d 61 20 77 68  et the schema wh
b9b0: 65 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 2a 2f 0a 20  en non-zero */. 
b9c0: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6f 70   unsigned int op
b9d0: 65 6e 46 6c 61 67 73 3b 20 20 20 20 20 20 20 2f  enFlags;       /
b9e0: 2a 20 46 6c 61 67 73 20 70 61 73 73 65 64 20 74  * Flags passed t
b9f0: 6f 20 73 71 6c 69 74 65 33 5f 76 66 73 2e 78 4f  o sqlite3_vfs.xO
ba00: 70 65 6e 28 29 20 2a 2f 0a 20 20 69 6e 74 20 65  pen() */.  int e
ba10: 72 72 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20  rrCode;         
ba20: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74           /* Most
ba30: 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20 63 6f   recent error co
ba40: 64 65 20 28 53 51 4c 49 54 45 5f 2a 29 20 2a 2f  de (SQLITE_*) */
ba50: 0a 20 20 69 6e 74 20 65 72 72 4d 61 73 6b 3b 20  .  int errMask; 
ba60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ba70: 20 2f 2a 20 26 20 72 65 73 75 6c 74 20 63 6f 64   /* & result cod
ba80: 65 73 20 77 69 74 68 20 74 68 69 73 20 62 65 66  es with this bef
ba90: 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 20 2a 2f  ore returning */
baa0: 0a 20 20 69 6e 74 20 69 53 79 73 45 72 72 6e 6f  .  int iSysErrno
bab0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
bac0: 20 2f 2a 20 45 72 72 6e 6f 20 76 61 6c 75 65 20   /* Errno value 
bad0: 66 72 6f 6d 20 6c 61 73 74 20 73 79 73 74 65 6d  from last system
bae0: 20 65 72 72 6f 72 20 2a 2f 0a 20 20 75 31 36 20   error */.  u16 
baf0: 64 62 4f 70 74 46 6c 61 67 73 3b 20 20 20 20 20  dbOptFlags;     
bb00: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6c 61            /* Fla
bb10: 67 73 20 74 6f 20 65 6e 61 62 6c 65 2f 64 69 73  gs to enable/dis
bb20: 61 62 6c 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f  able optimizatio
bb30: 6e 73 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20  ns */.  u8 enc; 
bb40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bb50: 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e        /* Text en
bb60: 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 75 38 20 61  coding */.  u8 a
bb70: 75 74 6f 43 6f 6d 6d 69 74 3b 20 20 20 20 20 20  utoCommit;      
bb80: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
bb90: 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61   auto-commit fla
bba0: 67 2e 20 2a 2f 0a 20 20 75 38 20 62 43 6f 6e 63  g. */.  u8 bConc
bbb0: 75 72 72 65 6e 74 3b 20 20 20 20 20 20 20 20 20  urrent;         
bbc0: 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74        /* Current
bbd0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
bbe0: 22 43 4f 4e 43 55 52 52 45 4e 54 22 20 2a 2f 0a  "CONCURRENT" */.
bbf0: 20 20 75 38 20 74 65 6d 70 5f 73 74 6f 72 65 3b    u8 temp_store;
bc00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bc10: 2f 2a 20 31 3a 20 66 69 6c 65 20 32 3a 20 6d 65  /* 1: file 2: me
bc20: 6d 6f 72 79 20 30 3a 20 64 65 66 61 75 6c 74 20  mory 0: default 
bc30: 2a 2f 0a 20 20 75 38 20 6d 61 6c 6c 6f 63 46 61  */.  u8 mallocFa
bc40: 69 6c 65 64 3b 20 20 20 20 20 20 20 20 20 20 20  iled;           
bc50: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 77 65     /* True if we
bc60: 20 68 61 76 65 20 73 65 65 6e 20 61 20 6d 61 6c   have seen a mal
bc70: 6c 6f 63 20 66 61 69 6c 75 72 65 20 2a 2f 0a 20  loc failure */. 
bc80: 20 75 38 20 62 42 65 6e 69 67 6e 4d 61 6c 6c 6f   u8 bBenignMallo
bc90: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  c;             /
bca0: 2a 20 44 6f 20 6e 6f 74 20 72 65 71 75 69 72 65  * Do not require
bcb0: 20 4f 4f 4d 73 20 69 66 20 74 72 75 65 20 2a 2f   OOMs if true */
bcc0: 0a 20 20 75 38 20 64 66 6c 74 4c 6f 63 6b 4d 6f  .  u8 dfltLockMo
bcd0: 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  de;             
bce0: 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 63 6b   /* Default lock
bcf0: 69 6e 67 2d 6d 6f 64 65 20 66 6f 72 20 61 74 74  ing-mode for att
bd00: 61 63 68 65 64 20 64 62 73 20 2a 2f 0a 20 20 73  ached dbs */.  s
bd10: 69 67 6e 65 64 20 63 68 61 72 20 6e 65 78 74 41  igned char nextA
bd20: 75 74 6f 76 61 63 3b 20 20 20 20 20 20 2f 2a 20  utovac;      /* 
bd30: 41 75 74 6f 76 61 63 20 73 65 74 74 69 6e 67 20  Autovac setting 
bd40: 61 66 74 65 72 20 56 41 43 55 55 4d 20 69 66 20  after VACUUM if 
bd50: 3e 3d 30 20 2a 2f 0a 20 20 75 38 20 73 75 70 70  >=0 */.  u8 supp
bd60: 72 65 73 73 45 72 72 3b 20 20 20 20 20 20 20 20  ressErr;        
bd70: 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74         /* Do not
bd80: 20 69 73 73 75 65 20 65 72 72 6f 72 20 6d 65 73   issue error mes
bd90: 73 61 67 65 73 20 69 66 20 74 72 75 65 20 2a 2f  sages if true */
bda0: 0a 20 20 75 38 20 76 74 61 62 4f 6e 43 6f 6e 66  .  u8 vtabOnConf
bdb0: 6c 69 63 74 3b 20 20 20 20 20 20 20 20 20 20 20  lict;           
bdc0: 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74   /* Value to ret
bdd0: 75 72 6e 20 66 6f 72 20 73 33 5f 76 74 61 62 5f  urn for s3_vtab_
bde0: 6f 6e 5f 63 6f 6e 66 6c 69 63 74 28 29 20 2a 2f  on_conflict() */
bdf0: 0a 20 20 75 38 20 69 73 54 72 61 6e 73 61 63 74  .  u8 isTransact
be00: 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20 20  ionSavepoint;   
be10: 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 20   /* True if the 
be20: 6f 75 74 65 72 6d 6f 73 74 20 73 61 76 65 70 6f  outermost savepo
be30: 69 6e 74 20 69 73 20 61 20 54 53 20 2a 2f 0a 20  int is a TS */. 
be40: 20 75 38 20 6d 54 72 61 63 65 3b 20 20 20 20 20   u8 mTrace;     
be50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
be60: 2a 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 53  * zero or more S
be70: 51 4c 49 54 45 5f 54 52 41 43 45 20 66 6c 61 67  QLITE_TRACE flag
be80: 73 20 2a 2f 0a 20 20 75 38 20 6e 6f 53 68 61 72  s */.  u8 noShar
be90: 65 64 43 61 63 68 65 3b 20 20 20 20 20 20 20 20  edCache;        
bea0: 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
beb0: 6e 6f 20 73 68 61 72 65 64 2d 63 61 63 68 65 20  no shared-cache 
bec0: 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 75 38  backends */.  u8
bed0: 20 6e 53 71 6c 45 78 65 63 3b 20 20 20 20 20 20   nSqlExec;      
bee0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
bef0: 75 6d 62 65 72 20 6f 66 20 70 65 6e 64 69 6e 67  umber of pending
bf00: 20 4f 50 5f 53 71 6c 45 78 65 63 20 6f 70 63 6f   OP_SqlExec opco
bf10: 64 65 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 78  des */.  int nex
bf20: 74 50 61 67 65 73 69 7a 65 3b 20 20 20 20 20 20  tPagesize;      
bf30: 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65 73 69         /* Pagesi
bf40: 7a 65 20 61 66 74 65 72 20 56 41 43 55 55 4d 20  ze after VACUUM 
bf50: 69 66 20 3e 30 20 2a 2f 0a 20 20 75 33 32 20 6d  if >0 */.  u32 m
bf60: 61 67 69 63 3b 20 20 20 20 20 20 20 20 20 20 20  agic;           
bf70: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 67 69           /* Magi
bf80: 63 20 6e 75 6d 62 65 72 20 66 6f 72 20 64 65 74  c number for det
bf90: 65 63 74 20 6c 69 62 72 61 72 79 20 6d 69 73 75  ect library misu
bfa0: 73 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 68 61  se */.  int nCha
bfb0: 6e 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  nge;            
bfc0: 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 72        /* Value r
bfd0: 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74  eturned by sqlit
bfe0: 65 33 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a  e3_changes() */.
bff0: 20 20 69 6e 74 20 6e 54 6f 74 61 6c 43 68 61 6e    int nTotalChan
c000: 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ge;             
c010: 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e 65  /* Value returne
c020: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 74 6f 74  d by sqlite3_tot
c030: 61 6c 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a  al_changes() */.
c040: 20 20 69 6e 74 20 61 4c 69 6d 69 74 5b 53 51 4c    int aLimit[SQL
c050: 49 54 45 5f 4e 5f 4c 49 4d 49 54 5d 3b 20 20 20  ITE_N_LIMIT];   
c060: 2f 2a 20 4c 69 6d 69 74 73 20 2a 2f 0a 20 20 69  /* Limits */.  i
c070: 6e 74 20 6e 4d 61 78 53 6f 72 74 65 72 4d 6d 61  nt nMaxSorterMma
c080: 70 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  p;           /* 
c090: 4d 61 78 69 6d 75 6d 20 73 69 7a 65 20 6f 66 20  Maximum size of 
c0a0: 72 65 67 69 6f 6e 73 20 6d 61 70 70 65 64 20 62  regions mapped b
c0b0: 79 20 73 6f 72 74 65 72 20 2a 2f 0a 20 20 73 74  y sorter */.  st
c0c0: 72 75 63 74 20 73 71 6c 69 74 65 33 49 6e 69 74  ruct sqlite3Init
c0d0: 49 6e 66 6f 20 7b 20 20 20 20 20 20 2f 2a 20 49  Info {      /* I
c0e0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20  nformation used 
c0f0: 64 75 72 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a  during initializ
c100: 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74  ation */.    int
c110: 20 6e 65 77 54 6e 75 6d 3b 20 20 20 20 20 20 20   newTnum;       
c120: 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74           /* Root
c130: 70 61 67 65 20 6f 66 20 74 61 62 6c 65 20 62 65  page of table be
c140: 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  ing initialized 
c150: 2a 2f 0a 20 20 20 20 75 38 20 69 44 62 3b 20 20  */.    u8 iDb;  
c160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c170: 20 20 20 2f 2a 20 57 68 69 63 68 20 64 62 20 66     /* Which db f
c180: 69 6c 65 20 69 73 20 62 65 69 6e 67 20 69 6e 69  ile is being ini
c190: 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20  tialized */.    
c1a0: 75 38 20 62 75 73 79 3b 20 20 20 20 20 20 20 20  u8 busy;        
c1b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
c1c0: 52 55 45 20 69 66 20 63 75 72 72 65 6e 74 6c 79  RUE if currently
c1d0: 20 69 6e 69 74 69 61 6c 69 7a 69 6e 67 20 2a 2f   initializing */
c1e0: 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 6f 72  .    unsigned or
c1f0: 70 68 61 6e 54 72 69 67 67 65 72 20 3a 20 31 3b  phanTrigger : 1;
c200: 20 2f 2a 20 4c 61 73 74 20 73 74 61 74 65 6d 65   /* Last stateme
c210: 6e 74 20 69 73 20 6f 72 70 68 61 6e 65 64 20 54  nt is orphaned T
c220: 45 4d 50 20 74 72 69 67 67 65 72 20 2a 2f 0a 20  EMP trigger */. 
c230: 20 20 20 75 6e 73 69 67 6e 65 64 20 69 6d 70 6f     unsigned impo
c240: 73 74 65 72 54 61 62 6c 65 20 3a 20 31 3b 20 2f  sterTable : 1; /
c250: 2a 20 42 75 69 6c 64 69 6e 67 20 61 6e 20 69 6d  * Building an im
c260: 70 6f 73 74 65 72 20 74 61 62 6c 65 20 2a 2f 0a  poster table */.
c270: 20 20 20 20 75 6e 73 69 67 6e 65 64 20 72 65 6f      unsigned reo
c280: 70 65 6e 4d 65 6d 64 62 20 3a 20 31 3b 20 20 20  penMemdb : 1;   
c290: 2f 2a 20 41 54 54 41 43 48 20 69 73 20 72 65 61  /* ATTACH is rea
c2a0: 6c 6c 79 20 61 20 72 65 6f 70 65 6e 20 75 73 69  lly a reopen usi
c2b0: 6e 67 20 4d 65 6d 44 42 20 2a 2f 0a 20 20 7d 20  ng MemDB */.  } 
c2c0: 69 6e 69 74 3b 0a 20 20 69 6e 74 20 6e 56 64 62  init;.  int nVdb
c2d0: 65 41 63 74 69 76 65 3b 20 20 20 20 20 20 20 20  eActive;        
c2e0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
c2f0: 6f 66 20 56 44 42 45 73 20 63 75 72 72 65 6e 74  of VDBEs current
c300: 6c 79 20 72 75 6e 6e 69 6e 67 20 2a 2f 0a 20 20  ly running */.  
c310: 69 6e 74 20 6e 56 64 62 65 52 65 61 64 3b 20 20  int nVdbeRead;  
c320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c330: 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76   Number of activ
c340: 65 20 56 44 42 45 73 20 74 68 61 74 20 72 65 61  e VDBEs that rea
c350: 64 20 6f 72 20 77 72 69 74 65 20 2a 2f 0a 20 20  d or write */.  
c360: 69 6e 74 20 6e 56 64 62 65 57 72 69 74 65 3b 20  int nVdbeWrite; 
c370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c380: 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76   Number of activ
c390: 65 20 56 44 42 45 73 20 74 68 61 74 20 72 65 61  e VDBEs that rea
c3a0: 64 20 61 6e 64 20 77 72 69 74 65 20 2a 2f 0a 20  d and write */. 
c3b0: 20 69 6e 74 20 6e 56 64 62 65 45 78 65 63 3b 20   int nVdbeExec; 
c3c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c3d0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74  * Number of nest
c3e0: 65 64 20 63 61 6c 6c 73 20 74 6f 20 56 64 62 65  ed calls to Vdbe
c3f0: 45 78 65 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20  Exec() */.  int 
c400: 6e 56 44 65 73 74 72 6f 79 3b 20 20 20 20 20 20  nVDestroy;      
c410: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
c420: 62 65 72 20 6f 66 20 61 63 74 69 76 65 20 4f 50  ber of active OP
c430: 5f 56 44 65 73 74 72 6f 79 20 6f 70 65 72 61 74  _VDestroy operat
c440: 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 45  ions */.  int nE
c450: 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20 20  xtension;       
c460: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
c470: 72 20 6f 66 20 6c 6f 61 64 65 64 20 65 78 74 65  r of loaded exte
c480: 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20 76 6f 69 64  nsions */.  void
c490: 20 2a 2a 61 45 78 74 65 6e 73 69 6f 6e 3b 20 20   **aExtension;  
c4a0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 72            /* Arr
c4b0: 61 79 20 6f 66 20 73 68 61 72 65 64 20 6c 69 62  ay of shared lib
c4c0: 72 61 72 79 20 68 61 6e 64 6c 65 73 20 2a 2f 0a  rary handles */.
c4d0: 20 20 69 6e 74 20 28 2a 78 54 72 61 63 65 29 28    int (*xTrace)(
c4e0: 75 33 32 2c 76 6f 69 64 2a 2c 76 6f 69 64 2a 2c  u32,void*,void*,
c4f0: 76 6f 69 64 2a 29 3b 20 20 20 20 20 2f 2a 20 54  void*);     /* T
c500: 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  race function */
c510: 0a 20 20 76 6f 69 64 20 2a 70 54 72 61 63 65 41  .  void *pTraceA
c520: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
c530: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c540: 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  Argument to the 
c550: 74 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a  trace function *
c560: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 50 72 6f 66  /.  void (*xProf
c570: 69 6c 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74  ile)(void*,const
c580: 20 63 68 61 72 2a 2c 75 36 34 29 3b 20 20 2f 2a   char*,u64);  /*
c590: 20 50 72 6f 66 69 6c 69 6e 67 20 66 75 6e 63 74   Profiling funct
c5a0: 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ion */.  void *p
c5b0: 50 72 6f 66 69 6c 65 41 72 67 3b 20 20 20 20 20  ProfileArg;     
c5c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c5d0: 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74     /* Argument t
c5e0: 6f 20 70 72 6f 66 69 6c 65 20 66 75 6e 63 74 69  o profile functi
c5f0: 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 43  on */.  void *pC
c600: 6f 6d 6d 69 74 41 72 67 3b 20 20 20 20 20 20 20  ommitArg;       
c610: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
c620: 75 6d 65 6e 74 20 74 6f 20 78 43 6f 6d 6d 69 74  ument to xCommit
c630: 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 0a 20 20  Callback() */.  
c640: 69 6e 74 20 28 2a 78 43 6f 6d 6d 69 74 43 61 6c  int (*xCommitCal
c650: 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29 3b 20 20  lback)(void*);  
c660: 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 61 74 20    /* Invoked at 
c670: 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f  every commit. */
c680: 0a 20 20 76 6f 69 64 20 2a 70 52 6f 6c 6c 62 61  .  void *pRollba
c690: 63 6b 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  ckArg;          
c6a0: 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74       /* Argument
c6b0: 20 74 6f 20 78 52 6f 6c 6c 62 61 63 6b 43 61 6c   to xRollbackCal
c6c0: 6c 62 61 63 6b 28 29 20 2a 2f 0a 20 20 76 6f 69  lback() */.  voi
c6d0: 64 20 28 2a 78 52 6f 6c 6c 62 61 63 6b 43 61 6c  d (*xRollbackCal
c6e0: 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29 3b 20 2f  lback)(void*); /
c6f0: 2a 20 49 6e 76 6f 6b 65 64 20 61 74 20 65 76 65  * Invoked at eve
c700: 72 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20  ry commit. */.  
c710: 76 6f 69 64 20 2a 70 55 70 64 61 74 65 41 72 67  void *pUpdateArg
c720: 3b 0a 20 20 76 6f 69 64 20 28 2a 78 55 70 64 61  ;.  void (*xUpda
c730: 74 65 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64  teCallback)(void
c740: 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61  *,int, const cha
c750: 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 73  r*,const char*,s
c760: 71 6c 69 74 65 5f 69 6e 74 36 34 29 3b 0a 23 69  qlite_int64);.#i
c770: 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
c780: 4c 45 5f 50 52 45 55 50 44 41 54 45 5f 48 4f 4f  LE_PREUPDATE_HOO
c790: 4b 0a 20 20 76 6f 69 64 20 2a 70 50 72 65 55 70  K.  void *pPreUp
c7a0: 64 61 74 65 41 72 67 3b 20 20 20 20 20 20 20 20  dateArg;        
c7b0: 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d    /* First argum
c7c0: 65 6e 74 20 74 6f 20 78 50 72 65 55 70 64 61 74  ent to xPreUpdat
c7d0: 65 43 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76  eCallback */.  v
c7e0: 6f 69 64 20 28 2a 78 50 72 65 55 70 64 61 74 65  oid (*xPreUpdate
c7f0: 43 61 6c 6c 62 61 63 6b 29 28 20 20 20 2f 2a 20  Callback)(   /* 
c800: 52 65 67 69 73 74 65 72 65 64 20 75 73 69 6e 67  Registered using
c810: 20 73 71 6c 69 74 65 33 5f 70 72 65 75 70 64 61   sqlite3_preupda
c820: 74 65 5f 68 6f 6f 6b 28 29 20 2a 2f 0a 20 20 20  te_hook() */.   
c830: 20 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c   void*,sqlite3*,
c840: 69 6e 74 2c 63 68 61 72 20 63 6f 6e 73 74 2a 2c  int,char const*,
c850: 63 68 61 72 20 63 6f 6e 73 74 2a 2c 73 71 6c 69  char const*,sqli
c860: 74 65 33 5f 69 6e 74 36 34 2c 73 71 6c 69 74 65  te3_int64,sqlite
c870: 33 5f 69 6e 74 36 34 0a 20 20 29 3b 0a 20 20 50  3_int64.  );.  P
c880: 72 65 55 70 64 61 74 65 20 2a 70 50 72 65 55 70  reUpdate *pPreUp
c890: 64 61 74 65 3b 20 20 20 20 20 20 20 20 2f 2a 20  date;        /* 
c8a0: 43 6f 6e 74 65 78 74 20 66 6f 72 20 61 63 74 69  Context for acti
c8b0: 76 65 20 70 72 65 2d 75 70 64 61 74 65 20 63 61  ve pre-update ca
c8c0: 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e 64 69 66  llback */.#endif
c8d0: 20 2f 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c   /* SQLITE_ENABL
c8e0: 45 5f 50 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b  E_PREUPDATE_HOOK
c8f0: 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
c900: 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e  TE_OMIT_WAL.  in
c910: 74 20 28 2a 78 57 61 6c 43 61 6c 6c 62 61 63 6b  t (*xWalCallback
c920: 29 28 76 6f 69 64 20 2a 2c 20 73 71 6c 69 74 65  )(void *, sqlite
c930: 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  3 *, const char 
c940: 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  *, int);.  void 
c950: 2a 70 57 61 6c 41 72 67 3b 0a 23 65 6e 64 69 66  *pWalArg;.#endif
c960: 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65  .  void(*xCollNe
c970: 65 64 65 64 29 28 76 6f 69 64 2a 2c 73 71 6c 69  eded)(void*,sqli
c980: 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65  te3*,int eTextRe
c990: 70 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  p,const char*);.
c9a0: 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65    void(*xCollNee
c9b0: 64 65 64 31 36 29 28 76 6f 69 64 2a 2c 73 71 6c  ded16)(void*,sql
c9c0: 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52  ite3*,int eTextR
c9d0: 65 70 2c 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b  ep,const void*);
c9e0: 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e 65  .  void *pCollNe
c9f0: 65 64 65 64 41 72 67 3b 0a 20 20 73 71 6c 69 74  ededArg;.  sqlit
ca00: 65 33 5f 76 61 6c 75 65 20 2a 70 45 72 72 3b 20  e3_value *pErr; 
ca10: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74           /* Most
ca20: 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20 6d 65   recent error me
ca30: 73 73 61 67 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e  ssage */.  union
ca40: 20 7b 0a 20 20 20 20 76 6f 6c 61 74 69 6c 65 20   {.    volatile 
ca50: 69 6e 74 20 69 73 49 6e 74 65 72 72 75 70 74 65  int isInterrupte
ca60: 64 3b 20 2f 2a 20 54 72 75 65 20 69 66 20 73 71  d; /* True if sq
ca70: 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 20  lite3_interrupt 
ca80: 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 20  has been called 
ca90: 2a 2f 0a 20 20 20 20 64 6f 75 62 6c 65 20 6e 6f  */.    double no
caa0: 74 55 73 65 64 31 3b 20 20 20 20 20 20 20 20 20  tUsed1;         
cab0: 20 20 20 2f 2a 20 53 70 61 63 65 72 20 2a 2f 0a     /* Spacer */.
cac0: 20 20 7d 20 75 31 3b 0a 20 20 4c 6f 6f 6b 61 73    } u1;.  Lookas
cad0: 69 64 65 20 6c 6f 6f 6b 61 73 69 64 65 3b 20 20  ide lookaside;  
cae0: 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 6b 61          /* Looka
caf0: 73 69 64 65 20 6d 61 6c 6c 6f 63 20 63 6f 6e 66  side malloc conf
cb00: 69 67 75 72 61 74 69 6f 6e 20 2a 2f 0a 23 69 66  iguration */.#if
cb10: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
cb20: 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20  _AUTHORIZATION. 
cb30: 20 73 71 6c 69 74 65 33 5f 78 61 75 74 68 20 78   sqlite3_xauth x
cb40: 41 75 74 68 3b 20 20 20 20 20 20 20 20 20 20 2f  Auth;          /
cb50: 2a 20 41 63 63 65 73 73 20 61 75 74 68 6f 72 69  * Access authori
cb60: 7a 61 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 20  zation function 
cb70: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75 74 68  */.  void *pAuth
cb80: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
cb90: 20 20 20 2f 2a 20 31 73 74 20 61 72 67 75 6d 65     /* 1st argume
cba0: 6e 74 20 74 6f 20 74 68 65 20 61 63 63 65 73 73  nt to the access
cbb0: 20 61 75 74 68 20 66 75 6e 63 74 69 6f 6e 20 2a   auth function *
cbc0: 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  /.#endif.#ifndef
cbd0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f   SQLITE_OMIT_PRO
cbe0: 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20  GRESS_CALLBACK. 
cbf0: 20 69 6e 74 20 28 2a 78 50 72 6f 67 72 65 73 73   int (*xProgress
cc00: 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20 20 2f  )(void *);     /
cc10: 2a 20 54 68 65 20 70 72 6f 67 72 65 73 73 20 63  * The progress c
cc20: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69  allback */.  voi
cc30: 64 20 2a 70 50 72 6f 67 72 65 73 73 41 72 67 3b  d *pProgressArg;
cc40: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
cc50: 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 70 72  gument to the pr
cc60: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
cc70: 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 50  */.  unsigned nP
cc80: 72 6f 67 72 65 73 73 4f 70 73 3b 20 20 20 20 20  rogressOps;     
cc90: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
cca0: 6f 70 63 6f 64 65 73 20 66 6f 72 20 70 72 6f 67  opcodes for prog
ccb0: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  ress callback */
ccc0: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
ccd0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
cce0: 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e  UALTABLE.  int n
ccf0: 56 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20  VTrans;         
cd00: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f           /* Allo
cd10: 63 61 74 65 64 20 73 69 7a 65 20 6f 66 20 61 56  cated size of aV
cd20: 54 72 61 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20  Trans */.  Hash 
cd30: 61 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20 20 20  aModule;        
cd40: 20 20 20 20 20 20 20 20 20 2f 2a 20 70 6f 70 75           /* popu
cd50: 6c 61 74 65 64 20 62 79 20 73 71 6c 69 74 65 33  lated by sqlite3
cd60: 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29  _create_module()
cd70: 20 2a 2f 0a 20 20 56 74 61 62 43 74 78 20 2a 70   */.  VtabCtx *p
cd80: 56 74 61 62 43 74 78 3b 20 20 20 20 20 20 20 20  VtabCtx;        
cd90: 20 20 20 20 2f 2a 20 43 6f 6e 74 65 78 74 20 66      /* Context f
cda0: 6f 72 20 61 63 74 69 76 65 20 76 74 61 62 20 63  or active vtab c
cdb0: 6f 6e 6e 65 63 74 2f 63 72 65 61 74 65 20 2a 2f  onnect/create */
cdc0: 0a 20 20 56 54 61 62 6c 65 20 2a 2a 61 56 54 72  .  VTable **aVTr
cdd0: 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ans;            
cde0: 20 2f 2a 20 56 69 72 74 75 61 6c 20 74 61 62 6c   /* Virtual tabl
cdf0: 65 73 20 77 69 74 68 20 6f 70 65 6e 20 74 72 61  es with open tra
ce00: 6e 73 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 56  nsactions */.  V
ce10: 54 61 62 6c 65 20 2a 70 44 69 73 63 6f 6e 6e 65  Table *pDisconne
ce20: 63 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ct;          /* 
ce30: 44 69 73 63 6f 6e 6e 65 63 74 20 74 68 65 73 65  Disconnect these
ce40: 20 69 6e 20 6e 65 78 74 20 73 71 6c 69 74 65 33   in next sqlite3
ce50: 5f 70 72 65 70 61 72 65 28 29 20 2a 2f 0a 23 65  _prepare() */.#e
ce60: 6e 64 69 66 0a 20 20 48 61 73 68 20 61 46 75 6e  ndif.  Hash aFun
ce70: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
ce80: 20 20 20 20 20 2f 2a 20 48 61 73 68 20 74 61 62       /* Hash tab
ce90: 6c 65 20 6f 66 20 63 6f 6e 6e 65 63 74 69 6f 6e  le of connection
cea0: 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20   functions */.  
ceb0: 48 61 73 68 20 61 43 6f 6c 6c 53 65 71 3b 20 20  Hash aCollSeq;  
cec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
ced0: 20 41 6c 6c 20 63 6f 6c 6c 61 74 69 6e 67 20 73   All collating s
cee0: 65 71 75 65 6e 63 65 73 20 2a 2f 0a 20 20 42 75  equences */.  Bu
cef0: 73 79 48 61 6e 64 6c 65 72 20 62 75 73 79 48 61  syHandler busyHa
cf00: 6e 64 6c 65 72 3b 20 20 20 20 20 20 2f 2a 20 42  ndler;      /* B
cf10: 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  usy callback */.
cf20: 20 20 44 62 20 61 44 62 53 74 61 74 69 63 5b 32    Db aDbStatic[2
cf30: 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ];              
cf40: 2f 2a 20 53 74 61 74 69 63 20 73 70 61 63 65 20  /* Static space 
cf50: 66 6f 72 20 74 68 65 20 32 20 64 65 66 61 75 6c  for the 2 defaul
cf60: 74 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20  t backends */.  
cf70: 53 61 76 65 70 6f 69 6e 74 20 2a 70 53 61 76 65  Savepoint *pSave
cf80: 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20 2f 2a  point;        /*
cf90: 20 4c 69 73 74 20 6f 66 20 61 63 74 69 76 65 20   List of active 
cfa0: 73 61 76 65 70 6f 69 6e 74 73 20 2a 2f 0a 20 20  savepoints */.  
cfb0: 69 6e 74 20 62 75 73 79 54 69 6d 65 6f 75 74 3b  int busyTimeout;
cfc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
cfd0: 20 42 75 73 79 20 68 61 6e 64 6c 65 72 20 74 69   Busy handler ti
cfe0: 6d 65 6f 75 74 2c 20 69 6e 20 6d 73 65 63 20 2a  meout, in msec *
cff0: 2f 0a 20 20 69 6e 74 20 6e 53 61 76 65 70 6f 69  /.  int nSavepoi
d000: 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nt;             
d010: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e    /* Number of n
d020: 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 73  on-transaction s
d030: 61 76 65 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69  avepoints */.  i
d040: 6e 74 20 6e 53 74 61 74 65 6d 65 6e 74 3b 20 20  nt nStatement;  
d050: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
d060: 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64  Number of nested
d070: 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73   statement-trans
d080: 61 63 74 69 6f 6e 73 20 20 2a 2f 0a 20 20 69 36  actions  */.  i6
d090: 34 20 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b  4 nDeferredCons;
d0a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
d0b0: 65 74 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73  et deferred cons
d0c0: 74 72 61 69 6e 74 73 20 74 68 69 73 20 74 72 61  traints this tra
d0d0: 6e 73 61 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 69  nsaction. */.  i
d0e0: 36 34 20 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  64 nDeferredImmC
d0f0: 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ons;         /* 
d100: 4e 65 74 20 64 65 66 65 72 72 65 64 20 69 6d 6d  Net deferred imm
d110: 65 64 69 61 74 65 20 63 6f 6e 73 74 72 61 69 6e  ediate constrain
d120: 74 73 20 2a 2f 0a 20 20 69 6e 74 20 2a 70 6e 42  ts */.  int *pnB
d130: 79 74 65 73 46 72 65 65 64 3b 20 20 20 20 20 20  ytesFreed;      
d140: 20 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20        /* If not 
d150: 4e 55 4c 4c 2c 20 69 6e 63 72 65 6d 65 6e 74 20  NULL, increment 
d160: 74 68 69 73 20 69 6e 20 44 62 46 72 65 65 28 29  this in DbFree()
d170: 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
d180: 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f  E_ENABLE_UNLOCK_
d190: 4e 4f 54 49 46 59 0a 20 20 2f 2a 20 54 68 65 20  NOTIFY.  /* The 
d1a0: 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 72 69 61 62  following variab
d1b0: 6c 65 73 20 61 72 65 20 61 6c 6c 20 70 72 6f 74  les are all prot
d1c0: 65 63 74 65 64 20 62 79 20 74 68 65 20 53 54 41  ected by the STA
d1d0: 54 49 43 5f 4d 41 53 54 45 52 0a 20 20 2a 2a 20  TIC_MASTER.  ** 
d1e0: 6d 75 74 65 78 2c 20 6e 6f 74 20 62 79 20 73 71  mutex, not by sq
d1f0: 6c 69 74 65 33 2e 6d 75 74 65 78 2e 20 54 68 65  lite3.mutex. The
d200: 79 20 61 72 65 20 75 73 65 64 20 62 79 20 63 6f  y are used by co
d210: 64 65 20 69 6e 20 6e 6f 74 69 66 79 2e 63 2e 0a  de in notify.c..
d220: 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58    **.  ** When X
d230: 2e 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69  .pUnlockConnecti
d240: 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e  on==Y, that mean
d250: 73 20 74 68 61 74 20 58 20 69 73 20 77 61 69 74  s that X is wait
d260: 69 6e 67 20 66 6f 72 20 59 20 74 6f 0a 20 20 2a  ing for Y to.  *
d270: 2a 20 75 6e 6c 6f 63 6b 20 73 6f 20 74 68 61 74  * unlock so that
d280: 20 69 74 20 63 61 6e 20 70 72 6f 63 65 65 64 2e   it can proceed.
d290: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20  .  **.  ** When 
d2a0: 58 2e 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65  X.pBlockingConne
d2b0: 63 74 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d  ction==Y, that m
d2c0: 65 61 6e 73 20 74 68 61 74 20 73 6f 6d 65 74 68  eans that someth
d2d0: 69 6e 67 20 74 68 61 74 20 58 20 74 72 69 65 64  ing that X tried
d2e0: 0a 20 20 2a 2a 20 74 72 69 65 64 20 74 6f 20 64  .  ** tried to d
d2f0: 6f 20 72 65 63 65 6e 74 6c 79 20 66 61 69 6c 65  o recently faile
d300: 64 20 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45  d with an SQLITE
d310: 5f 4c 4f 43 4b 45 44 20 65 72 72 6f 72 20 64 75  _LOCKED error du
d320: 65 20 74 6f 20 6c 6f 63 6b 73 0a 20 20 2a 2a 20  e to locks.  ** 
d330: 68 65 6c 64 20 62 79 20 59 2e 0a 20 20 2a 2f 0a  held by Y..  */.
d340: 20 20 73 71 6c 69 74 65 33 20 2a 70 42 6c 6f 63    sqlite3 *pBloc
d350: 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20  kingConnection; 
d360: 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 68  /* Connection th
d370: 61 74 20 63 61 75 73 65 64 20 53 51 4c 49 54 45  at caused SQLITE
d380: 5f 4c 4f 43 4b 45 44 20 2a 2f 0a 20 20 73 71 6c  _LOCKED */.  sql
d390: 69 74 65 33 20 2a 70 55 6e 6c 6f 63 6b 43 6f 6e  ite3 *pUnlockCon
d3a0: 6e 65 63 74 69 6f 6e 3b 20 20 20 20 20 20 20 20  nection;        
d3b0: 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e     /* Connection
d3c0: 20 74 6f 20 77 61 74 63 68 20 66 6f 72 20 75 6e   to watch for un
d3d0: 6c 6f 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  lock */.  void *
d3e0: 70 55 6e 6c 6f 63 6b 41 72 67 3b 20 20 20 20 20  pUnlockArg;     
d3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d400: 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78  /* Argument to x
d410: 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 20 2a 2f 0a  UnlockNotify */.
d420: 20 20 76 6f 69 64 20 28 2a 78 55 6e 6c 6f 63 6b    void (*xUnlock
d430: 4e 6f 74 69 66 79 29 28 76 6f 69 64 20 2a 2a 2c  Notify)(void **,
d440: 20 69 6e 74 29 3b 20 20 2f 2a 20 55 6e 6c 6f 63   int);  /* Unloc
d450: 6b 20 6e 6f 74 69 66 79 20 63 61 6c 6c 62 61 63  k notify callbac
d460: 6b 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a  k */.  sqlite3 *
d470: 70 4e 65 78 74 42 6c 6f 63 6b 65 64 3b 20 20 20  pNextBlocked;   
d480: 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20       /* Next in 
d490: 6c 69 73 74 20 6f 66 20 61 6c 6c 20 62 6c 6f 63  list of all bloc
d4a0: 6b 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20  ked connections 
d4b0: 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66  */.#endif.#ifdef
d4c0: 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54   SQLITE_USER_AUT
d4d0: 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20 73 71  HENTICATION.  sq
d4e0: 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68 20 61  lite3_userauth a
d4f0: 75 74 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 55  uth;        /* U
d500: 73 65 72 20 61 75 74 68 65 6e 74 69 63 61 74 69  ser authenticati
d510: 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a  on information *
d520: 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a  /.#endif.};../*.
d530: 2a 2a 20 41 20 6d 61 63 72 6f 20 74 6f 20 64 69  ** A macro to di
d540: 73 63 6f 76 65 72 20 74 68 65 20 65 6e 63 6f 64  scover the encod
d550: 69 6e 67 20 6f 66 20 61 20 64 61 74 61 62 61 73  ing of a databas
d560: 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43  e..*/.#define SC
d570: 48 45 4d 41 5f 45 4e 43 28 64 62 29 20 28 28 64  HEMA_ENC(db) ((d
d580: 62 29 2d 3e 61 44 62 5b 30 5d 2e 70 53 63 68 65  b)->aDb[0].pSche
d590: 6d 61 2d 3e 65 6e 63 29 0a 23 64 65 66 69 6e 65  ma->enc).#define
d5a0: 20 45 4e 43 28 64 62 29 20 20 20 20 20 20 20 20   ENC(db)        
d5b0: 28 28 64 62 29 2d 3e 65 6e 63 29 0a 0a 2f 2a 0a  ((db)->enc)../*.
d5c0: 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75  ** Possible valu
d5d0: 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74  es for the sqlit
d5e0: 65 33 2e 66 6c 61 67 73 2e 0a 2a 2a 0a 2a 2a 20  e3.flags..**.** 
d5f0: 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74  Value constraint
d600: 73 20 28 65 6e 66 6f 72 63 65 64 20 76 69 61 20  s (enforced via 
d610: 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20  assert()):.**   
d620: 20 20 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53     SQLITE_FullFS
d630: 79 6e 63 20 20 20 20 20 3d 3d 20 50 41 47 45 52  ync     == PAGER
d640: 5f 46 55 4c 4c 46 53 59 4e 43 0a 2a 2a 20 20 20  _FULLFSYNC.**   
d650: 20 20 20 53 51 4c 49 54 45 5f 43 6b 70 74 46 75     SQLITE_CkptFu
d660: 6c 6c 46 53 79 6e 63 20 3d 3d 20 50 41 47 45 52  llFSync == PAGER
d670: 5f 43 4b 50 54 5f 46 55 4c 4c 46 53 59 4e 43 0a  _CKPT_FULLFSYNC.
d680: 2a 2a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 43  **      SQLITE_C
d690: 61 63 68 65 53 70 69 6c 6c 20 20 20 20 3d 3d 20  acheSpill    == 
d6a0: 50 41 47 45 52 5f 43 41 43 48 45 5f 53 50 49 4c  PAGER_CACHE_SPIL
d6b0: 4c 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  L.*/.#define SQL
d6c0: 49 54 45 5f 57 72 69 74 65 53 63 68 65 6d 61 20  ITE_WriteSchema 
d6d0: 20 20 20 30 78 30 30 30 30 30 30 30 31 20 20 2f     0x00000001  /
d6e0: 2a 20 4f 4b 20 74 6f 20 75 70 64 61 74 65 20 53  * OK to update S
d6f0: 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 2a 2f 0a  QLITE_MASTER */.
d700: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c  #define SQLITE_L
d710: 65 67 61 63 79 46 69 6c 65 46 6d 74 20 20 30 78  egacyFileFmt  0x
d720: 30 30 30 30 30 30 30 32 20 20 2f 2a 20 43 72 65  00000002  /* Cre
d730: 61 74 65 20 6e 65 77 20 64 61 74 61 62 61 73 65  ate new database
d740: 73 20 69 6e 20 66 6f 72 6d 61 74 20 31 20 2a 2f  s in format 1 */
d750: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
d760: 46 75 6c 6c 43 6f 6c 4e 61 6d 65 73 20 20 20 30  FullColNames   0
d770: 78 30 30 30 30 30 30 30 34 20 20 2f 2a 20 53 68  x00000004  /* Sh
d780: 6f 77 20 66 75 6c 6c 20 63 6f 6c 75 6d 6e 20 6e  ow full column n
d790: 61 6d 65 73 20 6f 6e 20 53 45 4c 45 43 54 20 2a  ames on SELECT *
d7a0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
d7b0: 5f 46 75 6c 6c 46 53 79 6e 63 20 20 20 20 20 20  _FullFSync      
d7c0: 30 78 30 30 30 30 30 30 30 38 20 20 2f 2a 20 55  0x00000008  /* U
d7d0: 73 65 20 66 75 6c 6c 20 66 73 79 6e 63 20 6f 6e  se full fsync on
d7e0: 20 74 68 65 20 62 61 63 6b 65 6e 64 20 2a 2f 0a   the backend */.
d7f0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43  #define SQLITE_C
d800: 6b 70 74 46 75 6c 6c 46 53 79 6e 63 20 20 30 78  kptFullFSync  0x
d810: 30 30 30 30 30 30 31 30 20 20 2f 2a 20 55 73 65  00000010  /* Use
d820: 20 66 75 6c 6c 20 66 73 79 6e 63 20 66 6f 72 20   full fsync for 
d830: 63 68 65 63 6b 70 6f 69 6e 74 20 2a 2f 0a 23 64  checkpoint */.#d
d840: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 61 63  efine SQLITE_Cac
d850: 68 65 53 70 69 6c 6c 20 20 20 20 20 30 78 30 30  heSpill     0x00
d860: 30 30 30 30 32 30 20 20 2f 2a 20 4f 4b 20 74 6f  000020  /* OK to
d870: 20 73 70 69 6c 6c 20 70 61 67 65 72 20 63 61 63   spill pager cac
d880: 68 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  he */.#define SQ
d890: 4c 49 54 45 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d  LITE_ShortColNam
d8a0: 65 73 20 20 30 78 30 30 30 30 30 30 34 30 20 20  es  0x00000040  
d8b0: 2f 2a 20 53 68 6f 77 20 73 68 6f 72 74 20 63 6f  /* Show short co
d8c0: 6c 75 6d 6e 73 20 6e 61 6d 65 73 20 2a 2f 0a 23  lumns names */.#
d8d0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f  define SQLITE_Co
d8e0: 75 6e 74 52 6f 77 73 20 20 20 20 20 20 30 78 30  untRows      0x0
d8f0: 30 30 30 30 30 38 30 20 20 2f 2a 20 43 6f 75 6e  0000080  /* Coun
d900: 74 20 72 6f 77 73 20 63 68 61 6e 67 65 64 20 62  t rows changed b
d910: 79 20 49 4e 53 45 52 54 2c 20 2a 2f 0a 20 20 20  y INSERT, */.   
d920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d940: 20 20 20 20 20 20 20 2f 2a 20 20 20 44 45 4c 45         /*   DELE
d950: 54 45 2c 20 6f 72 20 55 50 44 41 54 45 20 61 6e  TE, or UPDATE an
d960: 64 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20 20 20  d return */.    
d970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d990: 20 20 20 20 20 20 2f 2a 20 20 20 74 68 65 20 63        /*   the c
d9a0: 6f 75 6e 74 20 75 73 69 6e 67 20 61 20 63 61 6c  ount using a cal
d9b0: 6c 62 61 63 6b 2e 20 2a 2f 0a 23 64 65 66 69 6e  lback. */.#defin
d9c0: 65 20 53 51 4c 49 54 45 5f 4e 75 6c 6c 43 61 6c  e SQLITE_NullCal
d9d0: 6c 62 61 63 6b 20 20 20 30 78 30 30 30 30 30 31  lback   0x000001
d9e0: 30 30 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68  00  /* Invoke th
d9f0: 65 20 63 61 6c 6c 62 61 63 6b 20 6f 6e 63 65 20  e callback once 
da00: 69 66 20 74 68 65 20 2a 2f 0a 20 20 20 20 20 20  if the */.      
da10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
da20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
da30: 20 20 20 20 2f 2a 20 20 20 72 65 73 75 6c 74 20      /*   result 
da40: 73 65 74 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a  set is empty */.
da50: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49  #define SQLITE_I
da60: 67 6e 6f 72 65 43 68 65 63 6b 73 20 20 20 30 78  gnoreChecks   0x
da70: 30 30 30 30 30 32 30 30 20 20 2f 2a 20 44 6f 20  00000200  /* Do 
da80: 6e 6f 74 20 65 6e 66 6f 72 63 65 20 63 68 65 63  not enforce chec
da90: 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f  k constraints */
daa0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
dab0: 52 65 61 64 55 6e 63 6f 6d 6d 69 74 20 20 20 30  ReadUncommit   0
dac0: 78 30 30 30 30 30 34 30 30 20 20 2f 2a 20 52 45  x00000400  /* RE
dad0: 41 44 20 55 4e 43 4f 4d 4d 49 54 54 45 44 20 69  AD UNCOMMITTED i
dae0: 6e 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 2a  n shared-cache *
daf0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
db00: 5f 4e 6f 43 6b 70 74 4f 6e 43 6c 6f 73 65 20 20  _NoCkptOnClose  
db10: 30 78 30 30 30 30 30 38 30 30 20 20 2f 2a 20 4e  0x00000800  /* N
db20: 6f 20 63 68 65 63 6b 70 6f 69 6e 74 20 6f 6e 20  o checkpoint on 
db30: 63 6c 6f 73 65 28 29 2f 44 45 54 41 43 48 20 2a  close()/DETACH *
db40: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
db50: 5f 52 65 76 65 72 73 65 4f 72 64 65 72 20 20 20  _ReverseOrder   
db60: 30 78 30 30 30 30 31 30 30 30 20 20 2f 2a 20 52  0x00001000  /* R
db70: 65 76 65 72 73 65 20 75 6e 6f 72 64 65 72 65 64  everse unordered
db80: 20 53 45 4c 45 43 54 73 20 2a 2f 0a 23 64 65 66   SELECTs */.#def
db90: 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 63 54 72  ine SQLITE_RecTr
dba0: 69 67 67 65 72 73 20 20 20 20 30 78 30 30 30 30  iggers    0x0000
dbb0: 32 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20  2000  /* Enable 
dbc0: 72 65 63 75 72 73 69 76 65 20 74 72 69 67 67 65  recursive trigge
dbd0: 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  rs */.#define SQ
dbe0: 4c 49 54 45 5f 46 6f 72 65 69 67 6e 4b 65 79 73  LITE_ForeignKeys
dbf0: 20 20 20 20 30 78 30 30 30 30 34 30 30 30 20 20      0x00004000  
dc00: 2f 2a 20 45 6e 66 6f 72 63 65 20 66 6f 72 65 69  /* Enforce forei
dc10: 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
dc20: 74 73 20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ts  */.#define S
dc30: 51 4c 49 54 45 5f 41 75 74 6f 49 6e 64 65 78 20  QLITE_AutoIndex 
dc40: 20 20 20 20 20 30 78 30 30 30 30 38 30 30 30 20       0x00008000 
dc50: 20 2f 2a 20 45 6e 61 62 6c 65 20 61 75 74 6f 6d   /* Enable autom
dc60: 61 74 69 63 20 69 6e 64 65 78 65 73 20 2a 2f 0a  atic indexes */.
dc70: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c  #define SQLITE_L
dc80: 6f 61 64 45 78 74 65 6e 73 69 6f 6e 20 20 30 78  oadExtension  0x
dc90: 30 30 30 31 30 30 30 30 20 20 2f 2a 20 45 6e 61  00010000  /* Ena
dca0: 62 6c 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69  ble load_extensi
dcb0: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
dcc0: 4c 49 54 45 5f 4c 6f 61 64 45 78 74 46 75 6e 63  LITE_LoadExtFunc
dcd0: 20 20 20 20 30 78 30 30 30 32 30 30 30 30 20 20      0x00020000  
dce0: 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f 61 64 5f 65  /* Enable load_e
dcf0: 78 74 65 6e 73 69 6f 6e 28 29 20 53 51 4c 20 66  xtension() SQL f
dd00: 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  unc */.#define S
dd10: 51 4c 49 54 45 5f 45 6e 61 62 6c 65 54 72 69 67  QLITE_EnableTrig
dd20: 67 65 72 20 20 30 78 30 30 30 34 30 30 30 30 20  ger  0x00040000 
dd30: 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62   /* True to enab
dd40: 6c 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 23  le triggers */.#
dd50: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 65  define SQLITE_De
dd60: 66 65 72 46 4b 73 20 20 20 20 20 20 20 30 78 30  ferFKs       0x0
dd70: 30 30 38 30 30 30 30 20 20 2f 2a 20 44 65 66 65  0080000  /* Defe
dd80: 72 20 61 6c 6c 20 46 4b 20 63 6f 6e 73 74 72 61  r all FK constra
dd90: 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ints */.#define 
dda0: 53 51 4c 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79  SQLITE_QueryOnly
ddb0: 20 20 20 20 20 20 30 78 30 30 31 30 30 30 30 30        0x00100000
ddc0: 20 20 2f 2a 20 44 69 73 61 62 6c 65 20 64 61 74    /* Disable dat
ddd0: 61 62 61 73 65 20 63 68 61 6e 67 65 73 20 2a 2f  abase changes */
dde0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
ddf0: 43 65 6c 6c 53 69 7a 65 43 6b 20 20 20 20 20 30  CellSizeCk     0
de00: 78 30 30 32 30 30 30 30 30 20 20 2f 2a 20 43 68  x00200000  /* Ch
de10: 65 63 6b 20 62 74 72 65 65 20 63 65 6c 6c 20 73  eck btree cell s
de20: 69 7a 65 73 20 6f 6e 20 6c 6f 61 64 20 2a 2f 0a  izes on load */.
de30: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
de40: 74 73 33 54 6f 6b 65 6e 69 7a 65 72 20 20 30 78  ts3Tokenizer  0x
de50: 30 30 34 30 30 30 30 30 20 20 2f 2a 20 45 6e 61  00400000  /* Ena
de60: 62 6c 65 20 66 74 73 33 5f 74 6f 6b 65 6e 69 7a  ble fts3_tokeniz
de70: 65 72 28 32 29 20 2a 2f 0a 23 64 65 66 69 6e 65  er(2) */.#define
de80: 20 53 51 4c 49 54 45 5f 45 6e 61 62 6c 65 51 50   SQLITE_EnableQP
de90: 53 47 20 20 20 20 20 30 78 30 30 38 30 30 30 30  SG     0x0080000
dea0: 30 20 20 2f 2a 20 51 75 65 72 79 20 50 6c 61 6e  0  /* Query Plan
deb0: 6e 65 72 20 53 74 61 62 69 6c 69 74 79 20 47 75  ner Stability Gu
dec0: 61 72 61 6e 74 65 65 2a 2f 0a 23 64 65 66 69 6e  arantee*/.#defin
ded0: 65 20 53 51 4c 49 54 45 5f 54 72 69 67 67 65 72  e SQLITE_Trigger
dee0: 45 51 50 20 20 20 20 20 30 78 30 31 30 30 30 30  EQP     0x010000
def0: 30 30 20 20 2f 2a 20 53 68 6f 77 20 74 72 69 67  00  /* Show trig
df00: 67 65 72 20 45 58 50 4c 41 49 4e 20 51 55 45 52  ger EXPLAIN QUER
df10: 59 20 50 4c 41 4e 20 2a 2f 0a 23 64 65 66 69 6e  Y PLAN */.#defin
df20: 65 20 53 51 4c 49 54 45 5f 52 65 73 65 74 44 61  e SQLITE_ResetDa
df30: 74 61 62 61 73 65 20 20 30 78 30 32 30 30 30 30  tabase  0x020000
df40: 30 30 20 20 2f 2a 20 52 65 73 65 74 20 74 68 65  00  /* Reset the
df50: 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 0a 23 64   database */..#d
df60: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 6f 6f  efine SQLITE_Noo
df70: 70 55 70 64 61 74 65 20 20 20 20 20 30 78 30 31  pUpdate     0x01
df80: 30 30 30 30 30 30 20 20 2f 2a 20 55 50 44 41 54  000000  /* UPDAT
df90: 45 20 6f 70 65 72 61 74 69 6f 6e 73 20 61 72 65  E operations are
dfa0: 20 6e 6f 2d 6f 70 73 20 2a 2f 0a 2f 2a 20 46 6c   no-ops */./* Fl
dfb0: 61 67 73 20 75 73 65 64 20 6f 6e 6c 79 20 69 66  ags used only if
dfc0: 20 64 65 62 75 67 67 69 6e 67 20 2a 2f 0a 23 69   debugging */.#i
dfd0: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
dfe0: 47 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  G.#define SQLITE
dff0: 5f 53 71 6c 54 72 61 63 65 20 20 20 20 20 20 20  _SqlTrace       
e000: 30 78 30 38 30 30 30 30 30 30 20 20 2f 2a 20 44  0x08000000  /* D
e010: 65 62 75 67 20 70 72 69 6e 74 20 53 51 4c 20 61  ebug print SQL a
e020: 73 20 69 74 20 65 78 65 63 75 74 65 73 20 2a 2f  s it executes */
e030: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e040: 56 64 62 65 4c 69 73 74 69 6e 67 20 20 20 20 30  VdbeListing    0
e050: 78 31 30 30 30 30 30 30 30 20 20 2f 2a 20 44 65  x10000000  /* De
e060: 62 75 67 20 6c 69 73 74 69 6e 67 73 20 6f 66 20  bug listings of 
e070: 56 44 42 45 20 70 72 6f 67 72 61 6d 73 20 2a 2f  VDBE programs */
e080: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e090: 56 64 62 65 54 72 61 63 65 20 20 20 20 20 20 30  VdbeTrace      0
e0a0: 78 32 30 30 30 30 30 30 30 20 20 2f 2a 20 54 72  x20000000  /* Tr
e0b0: 75 65 20 74 6f 20 74 72 61 63 65 20 56 44 42 45  ue to trace VDBE
e0c0: 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 23 64   execution */.#d
e0d0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62  efine SQLITE_Vdb
e0e0: 65 41 64 64 6f 70 54 72 61 63 65 20 30 78 34 30  eAddopTrace 0x40
e0f0: 30 30 30 30 30 30 20 20 2f 2a 20 54 72 61 63 65  000000  /* Trace
e100: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
e110: 70 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 23 64 65  p() calls */.#de
e120: 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65  fine SQLITE_Vdbe
e130: 45 51 50 20 20 20 20 20 20 20 20 30 78 38 30 30  EQP        0x800
e140: 30 30 30 30 30 20 20 2f 2a 20 44 65 62 75 67 20  00000  /* Debug 
e150: 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c  EXPLAIN QUERY PL
e160: 41 4e 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a  AN */.#endif../*
e170: 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
e180: 65 73 20 66 6f 72 20 73 71 6c 69 74 65 33 2e 6d  es for sqlite3.m
e190: 44 62 46 6c 61 67 73 0a 2a 2f 0a 23 64 65 66 69  DbFlags.*/.#defi
e1a0: 6e 65 20 44 42 46 4c 41 47 5f 53 63 68 65 6d 61  ne DBFLAG_Schema
e1b0: 43 68 61 6e 67 65 20 20 20 30 78 30 30 30 31 20  Change   0x0001 
e1c0: 20 2f 2a 20 55 6e 63 6f 6d 6d 69 74 74 65 64 20   /* Uncommitted 
e1d0: 48 61 73 68 20 74 61 62 6c 65 20 63 68 61 6e 67  Hash table chang
e1e0: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42  es */.#define DB
e1f0: 46 4c 41 47 5f 50 72 65 66 65 72 42 75 69 6c 74  FLAG_PreferBuilt
e200: 69 6e 20 20 30 78 30 30 30 32 20 20 2f 2a 20 50  in  0x0002  /* P
e210: 72 65 66 65 72 65 6e 63 65 20 74 6f 20 62 75 69  reference to bui
e220: 6c 74 2d 69 6e 20 66 75 6e 63 73 20 2a 2f 0a 23  lt-in funcs */.#
e230: 64 65 66 69 6e 65 20 44 42 46 4c 41 47 5f 56 61  define DBFLAG_Va
e240: 63 75 75 6d 20 20 20 20 20 20 20 20 20 30 78 30  cuum         0x0
e250: 30 30 34 20 20 2f 2a 20 43 75 72 72 65 6e 74 6c  004  /* Currentl
e260: 79 20 69 6e 20 61 20 56 41 43 55 55 4d 20 2a 2f  y in a VACUUM */
e270: 0a 23 64 65 66 69 6e 65 20 44 42 46 4c 41 47 5f  .#define DBFLAG_
e280: 53 63 68 65 6d 61 4b 6e 6f 77 6e 4f 6b 20 20 30  SchemaKnownOk  0
e290: 78 30 30 30 38 20 20 2f 2a 20 53 63 68 65 6d 61  x0008  /* Schema
e2a0: 20 69 73 20 6b 6e 6f 77 6e 20 74 6f 20 62 65 20   is known to be 
e2b0: 76 61 6c 69 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  valid */../*.** 
e2c0: 42 69 74 73 20 6f 66 20 74 68 65 20 73 71 6c 69  Bits of the sqli
e2d0: 74 65 33 2e 64 62 4f 70 74 46 6c 61 67 73 20 66  te3.dbOptFlags f
e2e0: 69 65 6c 64 20 74 68 61 74 20 61 72 65 20 75 73  ield that are us
e2f0: 65 64 20 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c  ed by the.** sql
e300: 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f  ite3_test_contro
e310: 6c 28 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52  l(SQLITE_TESTCTR
e320: 4c 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 53 2c  L_OPTIMIZATIONS,
e330: 2e 2e 2e 29 20 69 6e 74 65 72 66 61 63 65 20 74  ...) interface t
e340: 6f 0a 2a 2a 20 73 65 6c 65 63 74 69 76 65 6c 79  o.** selectively
e350: 20 64 69 73 61 62 6c 65 20 76 61 72 69 6f 75 73   disable various
e360: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a   optimizations..
e370: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e380: 45 5f 51 75 65 72 79 46 6c 61 74 74 65 6e 65 72  E_QueryFlattener
e390: 20 30 78 30 30 30 31 20 20 20 2f 2a 20 51 75 65   0x0001   /* Que
e3a0: 72 79 20 66 6c 61 74 74 65 6e 69 6e 67 20 2a 2f  ry flattening */
e3b0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e3c0: 43 6f 6c 75 6d 6e 43 61 63 68 65 20 20 20 20 30  ColumnCache    0
e3d0: 78 30 30 30 32 20 20 20 2f 2a 20 43 6f 6c 75 6d  x0002   /* Colum
e3e0: 6e 20 63 61 63 68 65 20 2a 2f 0a 23 64 65 66 69  n cache */.#defi
e3f0: 6e 65 20 53 51 4c 49 54 45 5f 47 72 6f 75 70 42  ne SQLITE_GroupB
e400: 79 4f 72 64 65 72 20 20 20 30 78 30 30 30 34 20  yOrder   0x0004 
e410: 20 20 2f 2a 20 47 52 4f 55 50 42 59 20 63 6f 76    /* GROUPBY cov
e420: 65 72 20 6f 66 20 4f 52 44 45 52 42 59 20 2a 2f  er of ORDERBY */
e430: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e440: 46 61 63 74 6f 72 4f 75 74 43 6f 6e 73 74 20 30  FactorOutConst 0
e450: 78 30 30 30 38 20 20 20 2f 2a 20 43 6f 6e 73 74  x0008   /* Const
e460: 61 6e 74 20 66 61 63 74 6f 72 69 6e 67 20 2a 2f  ant factoring */
e470: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e480: 44 69 73 74 69 6e 63 74 4f 70 74 20 20 20 20 30  DistinctOpt    0
e490: 78 30 30 31 30 20 20 20 2f 2a 20 44 49 53 54 49  x0010   /* DISTI
e4a0: 4e 43 54 20 75 73 69 6e 67 20 69 6e 64 65 78 65  NCT using indexe
e4b0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
e4c0: 49 54 45 5f 43 6f 76 65 72 49 64 78 53 63 61 6e  ITE_CoverIdxScan
e4d0: 20 20 20 30 78 30 30 32 30 20 20 20 2f 2a 20 43     0x0020   /* C
e4e0: 6f 76 65 72 69 6e 67 20 69 6e 64 65 78 20 73 63  overing index sc
e4f0: 61 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ans */.#define S
e500: 51 4c 49 54 45 5f 4f 72 64 65 72 42 79 49 64 78  QLITE_OrderByIdx
e510: 4a 6f 69 6e 20 30 78 30 30 34 30 20 20 20 2f 2a  Join 0x0040   /*
e520: 20 4f 52 44 45 52 20 42 59 20 6f 66 20 6a 6f 69   ORDER BY of joi
e530: 6e 73 20 76 69 61 20 69 6e 64 65 78 20 2a 2f 0a  ns via index */.
e540: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54  #define SQLITE_T
e550: 72 61 6e 73 69 74 69 76 65 20 20 20 20 20 30 78  ransitive     0x
e560: 30 30 38 30 20 20 20 2f 2a 20 54 72 61 6e 73 69  0080   /* Transi
e570: 74 69 76 65 20 63 6f 6e 73 74 72 61 69 6e 74 73  tive constraints
e580: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e590: 54 45 5f 4f 6d 69 74 4e 6f 6f 70 4a 6f 69 6e 20  TE_OmitNoopJoin 
e5a0: 20 20 30 78 30 31 30 30 20 20 20 2f 2a 20 4f 6d    0x0100   /* Om
e5b0: 69 74 20 75 6e 75 73 65 64 20 74 61 62 6c 65 73  it unused tables
e5c0: 20 69 6e 20 6a 6f 69 6e 73 20 2a 2f 0a 23 64 65   in joins */.#de
e5d0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e  fine SQLITE_Coun
e5e0: 74 4f 66 56 69 65 77 20 20 20 20 30 78 30 32 30  tOfView    0x020
e5f0: 30 20 20 20 2f 2a 20 54 68 65 20 63 6f 75 6e 74  0   /* The count
e600: 2d 6f 66 2d 76 69 65 77 20 6f 70 74 69 6d 69 7a  -of-view optimiz
e610: 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ation */.#define
e620: 20 53 51 4c 49 54 45 5f 43 75 72 73 6f 72 48 69   SQLITE_CursorHi
e630: 6e 74 73 20 20 20 20 30 78 30 34 30 30 20 20 20  nts    0x0400   
e640: 2f 2a 20 41 64 64 20 4f 50 5f 43 75 72 73 6f 72  /* Add OP_Cursor
e650: 48 69 6e 74 20 6f 70 63 6f 64 65 73 20 2a 2f 0a  Hint opcodes */.
e660: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
e670: 74 61 74 33 34 20 20 20 20 20 20 20 20 20 30 78  tat34         0x
e680: 30 38 30 30 20 20 20 2f 2a 20 55 73 65 20 53 54  0800   /* Use ST
e690: 41 54 33 20 6f 72 20 53 54 41 54 34 20 64 61 74  AT3 or STAT4 dat
e6a0: 61 20 2a 2f 0a 20 20 20 2f 2a 20 54 48 33 20 65  a */.   /* TH3 e
e6b0: 78 70 65 63 74 73 20 74 68 65 20 53 74 61 74 33  xpects the Stat3
e6c0: 34 20 20 5e 5e 5e 5e 5e 5e 20 76 61 6c 75 65 20  4  ^^^^^^ value 
e6d0: 74 6f 20 62 65 20 30 78 30 38 30 30 2e 20 20 44  to be 0x0800.  D
e6e0: 6f 6e 27 74 20 63 68 61 6e 67 65 20 69 74 20 2a  on't change it *
e6f0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e700: 5f 50 75 73 68 44 6f 77 6e 20 20 20 20 20 20 20  _PushDown       
e710: 30 78 31 30 30 30 20 20 20 2f 2a 20 54 68 65 20  0x1000   /* The 
e720: 70 75 73 68 2d 64 6f 77 6e 20 6f 70 74 69 6d 69  push-down optimi
e730: 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  zation */.#defin
e740: 65 20 53 51 4c 49 54 45 5f 53 69 6d 70 6c 69 66  e SQLITE_Simplif
e750: 79 4a 6f 69 6e 20 20 20 30 78 32 30 30 30 20 20  yJoin   0x2000  
e760: 20 2f 2a 20 43 6f 6e 76 65 72 74 20 4c 45 46 54   /* Convert LEFT
e770: 20 4a 4f 49 4e 20 74 6f 20 4a 4f 49 4e 20 2a 2f   JOIN to JOIN */
e780: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e790: 41 6c 6c 4f 70 74 73 20 20 20 20 20 20 20 20 30  AllOpts        0
e7a0: 78 66 66 66 66 20 20 20 2f 2a 20 41 6c 6c 20 6f  xffff   /* All o
e7b0: 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a  ptimizations */.
e7c0: 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 66 6f  ./*.** Macros fo
e7d0: 72 20 74 65 73 74 69 6e 67 20 77 68 65 74 68 65  r testing whethe
e7e0: 72 20 6f 72 20 6e 6f 74 20 6f 70 74 69 6d 69 7a  r or not optimiz
e7f0: 61 74 69 6f 6e 73 20 61 72 65 20 65 6e 61 62 6c  ations are enabl
e800: 65 64 20 6f 72 20 64 69 73 61 62 6c 65 64 2e 0a  ed or disabled..
e810: 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d  */.#define Optim
e820: 69 7a 61 74 69 6f 6e 44 69 73 61 62 6c 65 64 28  izationDisabled(
e830: 64 62 2c 20 6d 61 73 6b 29 20 20 28 28 28 64 62  db, mask)  (((db
e840: 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26 28 6d  )->dbOptFlags&(m
e850: 61 73 6b 29 29 21 3d 30 29 0a 23 64 65 66 69 6e  ask))!=0).#defin
e860: 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 45 6e  e OptimizationEn
e870: 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20  abled(db, mask) 
e880: 20 20 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46    (((db)->dbOptF
e890: 6c 61 67 73 26 28 6d 61 73 6b 29 29 3d 3d 30 29  lags&(mask))==0)
e8a0: 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74  ../*.** Return t
e8b0: 72 75 65 20 69 66 20 69 74 20 4f 4b 20 74 6f 20  rue if it OK to 
e8c0: 66 61 63 74 6f 72 20 63 6f 6e 73 74 61 6e 74 20  factor constant 
e8d0: 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 74 6f  expressions into
e8e0: 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 61 74   the initializat
e8f0: 69 6f 6e 0a 2a 2a 20 63 6f 64 65 2e 20 54 68 65  ion.** code. The
e900: 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20 50   argument is a P
e910: 61 72 73 65 20 6f 62 6a 65 63 74 20 66 6f 72 20  arse object for 
e920: 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74  the code generat
e930: 6f 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43  or..*/.#define C
e940: 6f 6e 73 74 46 61 63 74 6f 72 4f 6b 28 50 29 20  onstFactorOk(P) 
e950: 28 28 50 29 2d 3e 6f 6b 43 6f 6e 73 74 46 61 63  ((P)->okConstFac
e960: 74 6f 72 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73  tor)../*.** Poss
e970: 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20  ible values for 
e980: 74 68 65 20 73 71 6c 69 74 65 2e 6d 61 67 69 63  the sqlite.magic
e990: 20 66 69 65 6c 64 2e 0a 2a 2a 20 54 68 65 20 6e   field..** The n
e9a0: 75 6d 62 65 72 73 20 61 72 65 20 6f 62 74 61 69  umbers are obtai
e9b0: 6e 65 64 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e  ned at random an
e9c0: 64 20 68 61 76 65 20 6e 6f 20 73 70 65 63 69 61  d have no specia
e9d0: 6c 20 6d 65 61 6e 69 6e 67 2c 20 6f 74 68 65 72  l meaning, other
e9e0: 0a 2a 2a 20 74 68 61 6e 20 62 65 69 6e 67 20 64  .** than being d
e9f0: 69 73 74 69 6e 63 74 20 66 72 6f 6d 20 6f 6e 65  istinct from one
ea00: 20 61 6e 6f 74 68 65 72 2e 0a 2a 2f 0a 23 64 65   another..*/.#de
ea10: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49  fine SQLITE_MAGI
ea20: 43 5f 4f 50 45 4e 20 20 20 20 20 30 78 61 30 32  C_OPEN     0xa02
ea30: 39 61 36 39 37 20 20 2f 2a 20 44 61 74 61 62 61  9a697  /* Databa
ea40: 73 65 20 69 73 20 6f 70 65 6e 20 2a 2f 0a 23 64  se is open */.#d
ea50: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47  efine SQLITE_MAG
ea60: 49 43 5f 43 4c 4f 53 45 44 20 20 20 30 78 39 66  IC_CLOSED   0x9f
ea70: 33 63 32 64 33 33 20 20 2f 2a 20 44 61 74 61 62  3c2d33  /* Datab
ea80: 61 73 65 20 69 73 20 63 6c 6f 73 65 64 20 2a 2f  ase is closed */
ea90: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
eaa0: 4d 41 47 49 43 5f 53 49 43 4b 20 20 20 20 20 30  MAGIC_SICK     0
eab0: 78 34 62 37 37 31 32 39 30 20 20 2f 2a 20 45 72  x4b771290  /* Er
eac0: 72 6f 72 20 61 6e 64 20 61 77 61 69 74 69 6e 67  ror and awaiting
ead0: 20 63 6c 6f 73 65 20 2a 2f 0a 23 64 65 66 69 6e   close */.#defin
eae0: 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42  e SQLITE_MAGIC_B
eaf0: 55 53 59 20 20 20 20 20 30 78 66 30 33 62 37 39  USY     0xf03b79
eb00: 30 36 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20  06  /* Database 
eb10: 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65  currently in use
eb20: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
eb30: 54 45 5f 4d 41 47 49 43 5f 45 52 52 4f 52 20 20  TE_MAGIC_ERROR  
eb40: 20 20 30 78 62 35 33 35 37 39 33 30 20 20 2f 2a    0xb5357930  /*
eb50: 20 41 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53   An SQLITE_MISUS
eb60: 45 20 65 72 72 6f 72 20 6f 63 63 75 72 72 65 64  E error occurred
eb70: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
eb80: 54 45 5f 4d 41 47 49 43 5f 5a 4f 4d 42 49 45 20  TE_MAGIC_ZOMBIE 
eb90: 20 20 30 78 36 34 63 66 66 63 37 66 20 20 2f 2a    0x64cffc7f  /*
eba0: 20 43 6c 6f 73 65 20 77 69 74 68 20 6c 61 73 74   Close with last
ebb0: 20 73 74 61 74 65 6d 65 6e 74 20 63 6c 6f 73 65   statement close
ebc0: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20   */../*.** Each 
ebd0: 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  SQL function is 
ebe0: 64 65 66 69 6e 65 64 20 62 79 20 61 6e 20 69 6e  defined by an in
ebf0: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
ec00: 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63  llowing.** struc
ec10: 74 75 72 65 2e 20 20 46 6f 72 20 67 6c 6f 62 61  ture.  For globa
ec20: 6c 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63 74  l built-in funct
ec30: 69 6f 6e 73 20 28 65 78 3a 20 73 75 62 73 74 72  ions (ex: substr
ec40: 28 29 2c 20 6d 61 78 28 29 2c 20 63 6f 75 6e 74  (), max(), count
ec50: 28 29 29 0a 2a 2a 20 61 20 70 6f 69 6e 74 65 72  ()).** a pointer
ec60: 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75   to this structu
ec70: 72 65 20 69 73 20 68 65 6c 64 20 69 6e 20 74 68  re is held in th
ec80: 65 20 73 71 6c 69 74 65 33 42 75 69 6c 74 69 6e  e sqlite3Builtin
ec90: 46 75 6e 63 74 69 6f 6e 73 20 6f 62 6a 65 63 74  Functions object
eca0: 2e 0a 2a 2a 20 46 6f 72 20 70 65 72 2d 63 6f 6e  ..** For per-con
ecb0: 6e 65 63 74 69 6f 6e 20 61 70 70 6c 69 63 61 74  nection applicat
ecc0: 69 6f 6e 2d 64 65 66 69 6e 65 64 20 66 75 6e 63  ion-defined func
ecd0: 74 69 6f 6e 73 2c 20 61 20 70 6f 69 6e 74 65 72  tions, a pointer
ece0: 20 74 6f 20 74 68 69 73 0a 2a 2a 20 73 74 72 75   to this.** stru
ecf0: 63 74 75 72 65 20 69 73 20 68 65 6c 64 20 69 6e  cture is held in
ed00: 20 74 68 65 20 64 62 2d 3e 61 48 61 73 68 20 68   the db->aHash h
ed10: 61 73 68 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a  ash table..**.**
ed20: 20 54 68 65 20 75 2e 70 48 61 73 68 20 66 69 65   The u.pHash fie
ed30: 6c 64 20 69 73 20 75 73 65 64 20 62 79 20 74 68  ld is used by th
ed40: 65 20 67 6c 6f 62 61 6c 20 62 75 69 6c 74 2d 69  e global built-i
ed50: 6e 73 2e 20 20 54 68 65 20 75 2e 70 44 65 73 74  ns.  The u.pDest
ed60: 72 75 63 74 6f 72 0a 2a 2a 20 66 69 65 6c 64 20  ructor.** field 
ed70: 69 73 20 75 73 65 64 20 62 79 20 70 65 72 2d 63  is used by per-c
ed80: 6f 6e 6e 65 63 74 69 6f 6e 20 61 70 70 2d 64 65  onnection app-de
ed90: 66 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2f 0a  f functions..*/.
eda0: 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 20 7b  struct FuncDef {
edb0: 0a 20 20 69 38 20 6e 41 72 67 3b 20 20 20 20 20  .  i8 nArg;     
edc0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
edd0: 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e 20  r of arguments. 
ede0: 20 2d 31 20 6d 65 61 6e 73 20 75 6e 6c 69 6d 69   -1 means unlimi
edf0: 74 65 64 20 2a 2f 0a 20 20 75 31 36 20 66 75 6e  ted */.  u16 fun
ee00: 63 46 6c 61 67 73 3b 20 20 20 20 20 20 20 2f 2a  cFlags;       /*
ee10: 20 53 6f 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f   Some combinatio
ee20: 6e 20 6f 66 20 53 51 4c 49 54 45 5f 46 55 4e 43  n of SQLITE_FUNC
ee30: 5f 2a 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55  _* */.  void *pU
ee40: 73 65 72 44 61 74 61 3b 20 20 20 20 20 2f 2a 20  serData;     /* 
ee50: 55 73 65 72 20 64 61 74 61 20 70 61 72 61 6d 65  User data parame
ee60: 74 65 72 20 2a 2f 0a 20 20 46 75 6e 63 44 65 66  ter */.  FuncDef
ee70: 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a   *pNext;      /*
ee80: 20 4e 65 78 74 20 66 75 6e 63 74 69 6f 6e 20 77   Next function w
ee90: 69 74 68 20 73 61 6d 65 20 6e 61 6d 65 20 2a 2f  ith same name */
eea0: 0a 20 20 76 6f 69 64 20 28 2a 78 53 46 75 6e 63  .  void (*xSFunc
eeb0: 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
eec0: 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
eed0: 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 66 75 6e 63  alue**); /* func
eee0: 20 6f 72 20 61 67 67 2d 73 74 65 70 20 2a 2f 0a   or agg-step */.
eef0: 20 20 76 6f 69 64 20 28 2a 78 46 69 6e 61 6c 69    void (*xFinali
ef00: 7a 65 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ze)(sqlite3_cont
ef10: 65 78 74 2a 29 3b 20 20 20 20 20 20 20 20 20 20  ext*);          
ef20: 20 20 20 20 20 20 20 20 2f 2a 20 41 67 67 20 66          /* Agg f
ef30: 69 6e 61 6c 69 7a 65 72 20 2a 2f 0a 20 20 63 6f  inalizer */.  co
ef40: 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  nst char *zName;
ef50: 20 20 20 2f 2a 20 53 51 4c 20 6e 61 6d 65 20 6f     /* SQL name o
ef60: 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20  f the function. 
ef70: 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20  */.  union {.   
ef80: 20 46 75 6e 63 44 65 66 20 2a 70 48 61 73 68 3b   FuncDef *pHash;
ef90: 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69        /* Next wi
efa0: 74 68 20 61 20 64 69 66 66 65 72 65 6e 74 20 6e  th a different n
efb0: 61 6d 65 20 62 75 74 20 74 68 65 20 73 61 6d 65  ame but the same
efc0: 20 68 61 73 68 20 2a 2f 0a 20 20 20 20 46 75 6e   hash */.    Fun
efd0: 63 44 65 73 74 72 75 63 74 6f 72 20 2a 70 44 65  cDestructor *pDe
efe0: 73 74 72 75 63 74 6f 72 3b 20 20 20 2f 2a 20 52  structor;   /* R
eff0: 65 66 65 72 65 6e 63 65 20 63 6f 75 6e 74 65 64  eference counted
f000: 20 64 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63   destructor func
f010: 74 69 6f 6e 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d  tion */.  } u;.}
f020: 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 73 74  ;../*.** This st
f030: 72 75 63 74 75 72 65 20 65 6e 63 61 70 73 75 6c  ructure encapsul
f040: 61 74 65 73 20 61 20 75 73 65 72 2d 66 75 6e 63  ates a user-func
f050: 74 69 6f 6e 20 64 65 73 74 72 75 63 74 6f 72 20  tion destructor 
f060: 63 61 6c 6c 62 61 63 6b 20 28 61 73 0a 2a 2a 20  callback (as.** 
f070: 63 6f 6e 66 69 67 75 72 65 64 20 75 73 69 6e 67  configured using
f080: 20 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e   create_function
f090: 5f 76 32 28 29 29 20 61 6e 64 20 61 20 72 65 66  _v2()) and a ref
f0a0: 65 72 65 6e 63 65 20 63 6f 75 6e 74 65 72 2e 20  erence counter. 
f0b0: 57 68 65 6e 0a 2a 2a 20 63 72 65 61 74 65 5f 66  When.** create_f
f0c0: 75 6e 63 74 69 6f 6e 5f 76 32 28 29 20 69 73 20  unction_v2() is 
f0d0: 63 61 6c 6c 65 64 20 74 6f 20 63 72 65 61 74 65  called to create
f0e0: 20 61 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68   a function with
f0f0: 20 61 20 64 65 73 74 72 75 63 74 6f 72 2c 0a 2a   a destructor,.*
f100: 2a 20 61 20 73 69 6e 67 6c 65 20 6f 62 6a 65 63  * a single objec
f110: 74 20 6f 66 20 74 68 69 73 20 74 79 70 65 20 69  t of this type i
f120: 73 20 61 6c 6c 6f 63 61 74 65 64 2e 20 46 75 6e  s allocated. Fun
f130: 63 44 65 73 74 72 75 63 74 6f 72 2e 6e 52 65 66  cDestructor.nRef
f140: 20 69 73 20 73 65 74 20 74 6f 0a 2a 2a 20 74 68   is set to.** th
f150: 65 20 6e 75 6d 62 65 72 20 6f 66 20 46 75 6e 63  e number of Func
f160: 44 65 66 20 6f 62 6a 65 63 74 73 20 63 72 65 61  Def objects crea
f170: 74 65 64 20 28 65 69 74 68 65 72 20 31 20 6f 72  ted (either 1 or
f180: 20 33 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e   3, depending on
f190: 20 77 68 65 74 68 65 72 0a 2a 2a 20 6f 72 20 6e   whether.** or n
f1a0: 6f 74 20 74 68 65 20 73 70 65 63 69 66 69 65 64  ot the specified
f1b0: 20 65 6e 63 6f 64 69 6e 67 20 69 73 20 53 51 4c   encoding is SQL
f1c0: 49 54 45 5f 41 4e 59 29 2e 20 54 68 65 20 46 75  ITE_ANY). The Fu
f1d0: 6e 63 44 65 66 2e 70 44 65 73 74 72 75 63 74 6f  ncDef.pDestructo
f1e0: 72 0a 2a 2a 20 6d 65 6d 62 65 72 20 6f 66 20 65  r.** member of e
f1f0: 61 63 68 20 6f 66 20 74 68 65 20 6e 65 77 20 46  ach of the new F
f200: 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20 69  uncDef objects i
f210: 73 20 73 65 74 20 74 6f 20 70 6f 69 6e 74 20 74  s set to point t
f220: 6f 20 74 68 65 20 61 6c 6c 6f 63 61 74 65 64 0a  o the allocated.
f230: 2a 2a 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  ** FuncDestructo
f240: 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 61 66  r..**.** Thereaf
f250: 74 65 72 2c 20 77 68 65 6e 20 6f 6e 65 20 6f 66  ter, when one of
f260: 20 74 68 65 20 46 75 6e 63 44 65 66 20 6f 62 6a   the FuncDef obj
f270: 65 63 74 73 20 69 73 20 64 65 6c 65 74 65 64 2c  ects is deleted,
f280: 20 74 68 65 20 72 65 66 65 72 65 6e 63 65 0a 2a   the reference.*
f290: 2a 20 63 6f 75 6e 74 20 6f 6e 20 74 68 69 73 20  * count on this 
f2a0: 6f 62 6a 65 63 74 20 69 73 20 64 65 63 72 65 6d  object is decrem
f2b0: 65 6e 74 65 64 2e 20 57 68 65 6e 20 69 74 20 72  ented. When it r
f2c0: 65 61 63 68 65 73 20 30 2c 20 74 68 65 20 64 65  eaches 0, the de
f2d0: 73 74 72 75 63 74 6f 72 0a 2a 2a 20 69 73 20 69  structor.** is i
f2e0: 6e 76 6f 6b 65 64 20 61 6e 64 20 74 68 65 20 46  nvoked and the F
f2f0: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 73 74  uncDestructor st
f300: 72 75 63 74 75 72 65 20 66 72 65 65 64 2e 0a 2a  ructure freed..*
f310: 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65 73  /.struct FuncDes
f320: 74 72 75 63 74 6f 72 20 7b 0a 20 20 69 6e 74 20  tructor {.  int 
f330: 6e 52 65 66 3b 0a 20 20 76 6f 69 64 20 28 2a 78  nRef;.  void (*x
f340: 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a 29  Destroy)(void *)
f350: 3b 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44  ;.  void *pUserD
f360: 61 74 61 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50  ata;.};../*.** P
f370: 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66  ossible values f
f380: 6f 72 20 46 75 6e 63 44 65 66 2e 66 6c 61 67 73  or FuncDef.flags
f390: 2e 20 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65  .  Note that the
f3a0: 20 5f 4c 45 4e 47 54 48 20 61 6e 64 20 5f 54 59   _LENGTH and _TY
f3b0: 50 45 4f 46 0a 2a 2a 20 76 61 6c 75 65 73 20 6d  PEOF.** values m
f3c0: 75 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 20 74  ust correspond t
f3d0: 6f 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41  o OPFLAG_LENGTHA
f3e0: 52 47 20 61 6e 64 20 4f 50 46 4c 41 47 5f 54 59  RG and OPFLAG_TY
f3f0: 50 45 4f 46 41 52 47 2e 20 20 41 6e 64 0a 2a 2a  PEOFARG.  And.**
f400: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
f410: 53 54 41 4e 54 20 6d 75 73 74 20 62 65 20 74 68  STANT must be th
f420: 65 20 73 61 6d 65 20 61 73 20 53 51 4c 49 54 45  e same as SQLITE
f430: 5f 44 45 54 45 52 4d 49 4e 49 53 54 49 43 2e 20  _DETERMINISTIC. 
f440: 20 54 68 65 72 65 0a 2a 2a 20 61 72 65 20 61 73   There.** are as
f450: 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74  sert() statement
f460: 73 20 69 6e 20 74 68 65 20 63 6f 64 65 20 74 6f  s in the code to
f470: 20 76 65 72 69 66 79 20 74 68 69 73 2e 0a 2a 2a   verify this..**
f480: 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72  .** Value constr
f490: 61 69 6e 74 73 20 28 65 6e 66 6f 72 63 65 64 20  aints (enforced 
f4a0: 76 69 61 20 61 73 73 65 72 74 28 29 29 3a 0a 2a  via assert()):.*
f4b0: 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 46 55 4e  *     SQLITE_FUN
f4c0: 43 5f 4d 49 4e 4d 41 58 20 20 20 20 3d 3d 20 20  C_MINMAX    ==  
f4d0: 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20 20 20 20  NC_MinMaxAgg    
f4e0: 20 20 3d 3d 20 53 46 5f 4d 69 6e 4d 61 78 41 67    == SF_MinMaxAg
f4f0: 67 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f  g.**     SQLITE_
f500: 46 55 4e 43 5f 4c 45 4e 47 54 48 20 20 20 20 3d  FUNC_LENGTH    =
f510: 3d 20 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48  =  OPFLAG_LENGTH
f520: 41 52 47 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54  ARG.**     SQLIT
f530: 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46 20 20 20  E_FUNC_TYPEOF   
f540: 20 3d 3d 20 20 4f 50 46 4c 41 47 5f 54 59 50 45   ==  OPFLAG_TYPE
f550: 4f 46 41 52 47 0a 2a 2a 20 20 20 20 20 53 51 4c  OFARG.**     SQL
f560: 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
f570: 54 20 20 3d 3d 20 20 53 51 4c 49 54 45 5f 44 45  T  ==  SQLITE_DE
f580: 54 45 52 4d 49 4e 49 53 54 49 43 20 66 72 6f 6d  TERMINISTIC from
f590: 20 74 68 65 20 41 50 49 0a 2a 2a 20 20 20 20 20   the API.**     
f5a0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 4e 43 4d  SQLITE_FUNC_ENCM
f5b0: 41 53 4b 20 20 20 64 65 70 65 6e 64 73 20 6f 6e  ASK   depends on
f5c0: 20 53 51 4c 49 54 45 5f 55 54 46 2a 20 6d 61 63   SQLITE_UTF* mac
f5d0: 72 6f 73 20 69 6e 20 74 68 65 20 41 50 49 0a 2a  ros in the API.*
f5e0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
f5f0: 5f 46 55 4e 43 5f 45 4e 43 4d 41 53 4b 20 20 30  _FUNC_ENCMASK  0
f600: 78 30 30 30 33 20 2f 2a 20 53 51 4c 49 54 45 5f  x0003 /* SQLITE_
f610: 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 55 54 46  UTF8, SQLITE_UTF
f620: 31 36 42 45 20 6f 72 20 55 54 46 31 36 4c 45 20  16BE or UTF16LE 
f630: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
f640: 45 5f 46 55 4e 43 5f 4c 49 4b 45 20 20 20 20 20  E_FUNC_LIKE     
f650: 30 78 30 30 30 34 20 2f 2a 20 43 61 6e 64 69 64  0x0004 /* Candid
f660: 61 74 65 20 66 6f 72 20 74 68 65 20 4c 49 4b 45  ate for the LIKE
f670: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f   optimization */
f680: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
f690: 46 55 4e 43 5f 43 41 53 45 20 20 20 20 20 30 78  FUNC_CASE     0x
f6a0: 30 30 30 38 20 2f 2a 20 43 61 73 65 2d 73 65 6e  0008 /* Case-sen
f6b0: 73 69 74 69 76 65 20 4c 49 4b 45 2d 74 79 70 65  sitive LIKE-type
f6c0: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
f6d0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
f6e0: 5f 45 50 48 45 4d 20 20 20 20 30 78 30 30 31 30  _EPHEM    0x0010
f6f0: 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c 2e 20 20   /* Ephemeral.  
f700: 44 65 6c 65 74 65 20 77 69 74 68 20 56 44 42 45  Delete with VDBE
f710: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
f720: 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
f730: 20 30 78 30 30 32 30 20 2f 2a 20 73 71 6c 69 74   0x0020 /* sqlit
f740: 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71  e3GetFuncCollSeq
f750: 28 29 20 6d 69 67 68 74 20 62 65 20 63 61 6c 6c  () might be call
f760: 65 64 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ed*/.#define SQL
f770: 49 54 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 20  ITE_FUNC_LENGTH 
f780: 20 20 30 78 30 30 34 30 20 2f 2a 20 42 75 69 6c    0x0040 /* Buil
f790: 74 2d 69 6e 20 6c 65 6e 67 74 68 28 29 20 66 75  t-in length() fu
f7a0: 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
f7b0: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59  e SQLITE_FUNC_TY
f7c0: 50 45 4f 46 20 20 20 30 78 30 30 38 30 20 2f 2a  PEOF   0x0080 /*
f7d0: 20 42 75 69 6c 74 2d 69 6e 20 74 79 70 65 6f 66   Built-in typeof
f7e0: 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  () function */.#
f7f0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
f800: 4e 43 5f 43 4f 55 4e 54 20 20 20 20 30 78 30 31  NC_COUNT    0x01
f810: 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63  00 /* Built-in c
f820: 6f 75 6e 74 28 2a 29 20 61 67 67 72 65 67 61 74  ount(*) aggregat
f830: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e */.#define SQL
f840: 49 54 45 5f 46 55 4e 43 5f 43 4f 41 4c 45 53 43  ITE_FUNC_COALESC
f850: 45 20 30 78 30 32 30 30 20 2f 2a 20 42 75 69 6c  E 0x0200 /* Buil
f860: 74 2d 69 6e 20 63 6f 61 6c 65 73 63 65 28 29 20  t-in coalesce() 
f870: 6f 72 20 69 66 6e 75 6c 6c 28 29 20 2a 2f 0a 23  or ifnull() */.#
f880: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
f890: 4e 43 5f 55 4e 4c 49 4b 45 4c 59 20 30 78 30 34  NC_UNLIKELY 0x04
f8a0: 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 75  00 /* Built-in u
f8b0: 6e 6c 69 6b 65 6c 79 28 29 20 66 75 6e 63 74 69  nlikely() functi
f8c0: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
f8d0: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41  LITE_FUNC_CONSTA
f8e0: 4e 54 20 30 78 30 38 30 30 20 2f 2a 20 43 6f 6e  NT 0x0800 /* Con
f8f0: 73 74 61 6e 74 20 69 6e 70 75 74 73 20 67 69 76  stant inputs giv
f900: 65 20 61 20 63 6f 6e 73 74 61 6e 74 20 6f 75 74  e a constant out
f910: 70 75 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  put */.#define S
f920: 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41  QLITE_FUNC_MINMA
f930: 58 20 20 20 30 78 31 30 30 30 20 2f 2a 20 54 72  X   0x1000 /* Tr
f940: 75 65 20 66 6f 72 20 6d 69 6e 28 29 20 61 6e 64  ue for min() and
f950: 20 6d 61 78 28 29 20 61 67 67 72 65 67 61 74 65   max() aggregate
f960: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
f970: 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47  ITE_FUNC_SLOCHNG
f980: 20 20 30 78 32 30 30 30 20 2f 2a 20 22 53 6c 6f    0x2000 /* "Slo
f990: 77 20 43 68 61 6e 67 65 22 2e 20 56 61 6c 75 65  w Change". Value
f9a0: 20 63 6f 6e 73 74 61 6e 74 20 64 75 72 69 6e 67   constant during
f9b0: 20 61 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   a.             
f9c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f9d0: 20 20 20 20 20 20 20 2a 2a 20 73 69 6e 67 6c 65         ** single
f9e0: 20 71 75 65 72 79 20 2d 20 6d 69 67 68 74 20 63   query - might c
f9f0: 68 61 6e 67 65 20 6f 76 65 72 20 74 69 6d 65 20  hange over time 
fa00: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
fa10: 45 5f 46 55 4e 43 5f 41 46 46 49 4e 49 54 59 20  E_FUNC_AFFINITY 
fa20: 30 78 34 30 30 30 20 2f 2a 20 42 75 69 6c 74 2d  0x4000 /* Built-
fa30: 69 6e 20 61 66 66 69 6e 69 74 79 28 29 20 66 75  in affinity() fu
fa40: 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
fa50: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4f 46  e SQLITE_FUNC_OF
fa60: 46 53 45 54 20 20 20 30 78 38 30 30 30 20 2f 2a  FSET   0x8000 /*
fa70: 20 42 75 69 6c 74 2d 69 6e 20 73 71 6c 69 74 65   Built-in sqlite
fa80: 5f 6f 66 66 73 65 74 28 29 20 66 75 6e 63 74 69  _offset() functi
fa90: 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  on */../*.** The
faa0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 72 65 65   following three
fab0: 20 6d 61 63 72 6f 73 2c 20 46 55 4e 43 54 49 4f   macros, FUNCTIO
fac0: 4e 28 29 2c 20 4c 49 4b 45 46 55 4e 43 28 29 20  N(), LIKEFUNC() 
fad0: 61 6e 64 20 41 47 47 52 45 47 41 54 45 28 29 20  and AGGREGATE() 
fae0: 61 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63  are.** used to c
faf0: 72 65 61 74 65 20 74 68 65 20 69 6e 69 74 69 61  reate the initia
fb00: 6c 69 7a 65 72 73 20 66 6f 72 20 74 68 65 20 46  lizers for the F
fb10: 75 6e 63 44 65 66 20 73 74 72 75 63 74 75 72 65  uncDef structure
fb20: 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 46 55 4e 43 54  s..**.**   FUNCT
fb30: 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ION(zName, nArg,
fb40: 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e   iArg, bNC, xFun
fb50: 63 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74  c).**     Used t
fb60: 6f 20 63 72 65 61 74 65 20 61 20 73 63 61 6c 61  o create a scala
fb70: 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e  r function defin
fb80: 69 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74  ition of a funct
fb90: 69 6f 6e 20 7a 4e 61 6d 65 0a 2a 2a 20 20 20 20  ion zName.**    
fba0: 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20   implemented by 
fbb0: 43 20 66 75 6e 63 74 69 6f 6e 20 78 46 75 6e 63  C function xFunc
fbc0: 20 74 68 61 74 20 61 63 63 65 70 74 73 20 6e 41   that accepts nA
fbd0: 72 67 20 61 72 67 75 6d 65 6e 74 73 2e 20 54 68  rg arguments. Th
fbe0: 65 0a 2a 2a 20 20 20 20 20 76 61 6c 75 65 20 70  e.**     value p
fbf0: 61 73 73 65 64 20 61 73 20 69 41 72 67 20 69 73  assed as iArg is
fc00: 20 63 61 73 74 20 74 6f 20 61 20 28 76 6f 69 64   cast to a (void
fc10: 2a 29 20 61 6e 64 20 6d 61 64 65 20 61 76 61 69  *) and made avai
fc20: 6c 61 62 6c 65 0a 2a 2a 20 20 20 20 20 61 73 20  lable.**     as 
fc30: 74 68 65 20 75 73 65 72 2d 64 61 74 61 20 28 73  the user-data (s
fc40: 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61  qlite3_user_data
fc50: 28 29 29 20 66 6f 72 20 74 68 65 20 66 75 6e 63  ()) for the func
fc60: 74 69 6f 6e 2e 20 49 66 0a 2a 2a 20 20 20 20 20  tion. If.**     
fc70: 61 72 67 75 6d 65 6e 74 20 62 4e 43 20 69 73 20  argument bNC is 
fc80: 74 72 75 65 2c 20 74 68 65 6e 20 74 68 65 20 53  true, then the S
fc90: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
fca0: 4f 4c 4c 20 66 6c 61 67 20 69 73 20 73 65 74 2e  OLL flag is set.
fcb0: 0a 2a 2a 0a 2a 2a 20 20 20 56 46 55 4e 43 54 49  .**.**   VFUNCTI
fcc0: 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  ON(zName, nArg, 
fcd0: 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63  iArg, bNC, xFunc
fce0: 29 0a 2a 2a 20 20 20 20 20 4c 69 6b 65 20 46 55  ).**     Like FU
fcf0: 4e 43 54 49 4f 4e 20 65 78 63 65 70 74 20 69 74  NCTION except it
fd00: 20 6f 6d 69 74 73 20 74 68 65 20 53 51 4c 49 54   omits the SQLIT
fd10: 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20  E_FUNC_CONSTANT 
fd20: 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 44 46  flag..**.**   DF
fd30: 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
fd40: 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
fd50: 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 4c 69  xFunc).**     Li
fd60: 6b 65 20 46 55 4e 43 54 49 4f 4e 20 65 78 63 65  ke FUNCTION exce
fd70: 70 74 20 69 74 20 6f 6d 69 74 73 20 74 68 65 20  pt it omits the 
fd80: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
fd90: 54 41 4e 54 20 66 6c 61 67 20 61 6e 64 0a 2a 2a  TANT flag and.**
fda0: 20 20 20 20 20 61 64 64 73 20 74 68 65 20 53 51       adds the SQ
fdb0: 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e  LITE_FUNC_SLOCHN
fdc0: 47 20 66 6c 61 67 2e 20 20 55 73 65 64 20 66 6f  G flag.  Used fo
fdd0: 72 20 64 61 74 65 20 26 20 74 69 6d 65 20 66 75  r date & time fu
fde0: 6e 63 74 69 6f 6e 73 0a 2a 2a 20 20 20 20 20 61  nctions.**     a
fdf0: 6e 64 20 66 75 6e 63 74 69 6f 6e 73 20 6c 69 6b  nd functions lik
fe00: 65 20 73 71 6c 69 74 65 5f 76 65 72 73 69 6f 6e  e sqlite_version
fe10: 28 29 20 74 68 61 74 20 63 61 6e 20 63 68 61 6e  () that can chan
fe20: 67 65 2c 20 62 75 74 20 6e 6f 74 20 64 75 72 69  ge, but not duri
fe30: 6e 67 0a 2a 2a 20 20 20 20 20 61 20 73 69 6e 67  ng.**     a sing
fe40: 6c 65 20 71 75 65 72 79 2e 20 20 54 68 65 20 69  le query.  The i
fe50: 41 72 67 20 69 73 20 69 67 6e 6f 72 65 64 2e 20  Arg is ignored. 
fe60: 20 54 68 65 20 75 73 65 72 2d 64 61 74 61 20 69   The user-data i
fe70: 73 20 61 6c 77 61 79 73 20 73 65 74 0a 2a 2a 20  s always set.** 
fe80: 20 20 20 20 74 6f 20 61 20 4e 55 4c 4c 20 70 6f      to a NULL po
fe90: 69 6e 74 65 72 2e 20 20 54 68 65 20 62 4e 43 20  inter.  The bNC 
fea0: 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e 6f 74  parameter is not
feb0: 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 20 20 50   used..**.**   P
fec0: 55 52 45 5f 44 41 54 45 28 7a 4e 61 6d 65 2c 20  URE_DATE(zName, 
fed0: 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
fee0: 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 55   xFunc).**     U
fef0: 73 65 64 20 66 6f 72 20 22 70 75 72 65 22 20 64  sed for "pure" d
ff00: 61 74 65 2f 74 69 6d 65 20 66 75 6e 63 74 69 6f  ate/time functio
ff10: 6e 73 2c 20 74 68 69 73 20 6d 61 63 72 6f 20 69  ns, this macro i
ff20: 73 20 6c 69 6b 65 20 44 46 55 4e 43 54 49 4f 4e  s like DFUNCTION
ff30: 0a 2a 2a 20 20 20 20 20 65 78 63 65 70 74 20 74  .**     except t
ff40: 68 61 74 20 69 74 20 64 6f 65 73 20 73 65 74 20  hat it does set 
ff50: 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  the SQLITE_FUNC_
ff60: 43 4f 4e 53 54 41 4e 54 20 66 6c 61 67 73 2e 20  CONSTANT flags. 
ff70: 20 69 41 72 67 20 69 73 0a 2a 2a 20 20 20 20 20   iArg is.**     
ff80: 69 67 6e 6f 72 65 64 20 61 6e 64 20 74 68 65 20  ignored and the 
ff90: 75 73 65 72 2d 64 61 74 61 20 66 6f 72 20 74 68  user-data for th
ffa0: 65 73 65 20 66 75 6e 63 74 69 6f 6e 73 20 69 73  ese functions is
ffb0: 20 73 65 74 20 74 6f 20 61 6e 20 0a 2a 2a 20 20   set to an .**  
ffc0: 20 20 20 61 72 62 69 74 72 61 72 79 20 6e 6f 6e     arbitrary non
ffd0: 2d 4e 55 4c 4c 20 70 6f 69 6e 74 65 72 2e 20 20  -NULL pointer.  
ffe0: 54 68 65 20 62 4e 43 20 70 61 72 61 6d 65 74 65  The bNC paramete
fff0: 72 20 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a  r is not used..*
10000 2a 0a 2a 2a 20 20 20 41 47 47 52 45 47 41 54 45  *.**   AGGREGATE
10010 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
10020 72 67 2c 20 62 4e 43 2c 20 78 53 74 65 70 2c 20  rg, bNC, xStep, 
10030 78 46 69 6e 61 6c 29 0a 2a 2a 20 20 20 20 20 55  xFinal).**     U
10040 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 6e  sed to create an
10050 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
10060 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 69  ion definition i
10070 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 0a 2a 2a  mplemented by.**
10080 20 20 20 20 20 74 68 65 20 43 20 66 75 6e 63 74       the C funct
10090 69 6f 6e 73 20 78 53 74 65 70 20 61 6e 64 20 78  ions xStep and x
100a0 46 69 6e 61 6c 2e 20 54 68 65 20 66 69 72 73 74  Final. The first
100b0 20 66 6f 75 72 20 70 61 72 61 6d 65 74 65 72 73   four parameters
100c0 0a 2a 2a 20 20 20 20 20 61 72 65 20 69 6e 74 65  .**     are inte
100d0 72 70 72 65 74 65 64 20 69 6e 20 74 68 65 20 73  rpreted in the s
100e0 61 6d 65 20 77 61 79 20 61 73 20 74 68 65 20 66  ame way as the f
100f0 69 72 73 74 20 34 20 70 61 72 61 6d 65 74 65 72  irst 4 parameter
10100 73 20 74 6f 0a 2a 2a 20 20 20 20 20 46 55 4e 43  s to.**     FUNC
10110 54 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20  TION()..**.**   
10120 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20  LIKEFUNC(zName, 
10130 6e 41 72 67 2c 20 70 41 72 67 2c 20 66 6c 61 67  nArg, pArg, flag
10140 73 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74  s).**     Used t
10150 6f 20 63 72 65 61 74 65 20 61 20 73 63 61 6c 61  o create a scala
10160 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e  r function defin
10170 69 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74  ition of a funct
10180 69 6f 6e 20 7a 4e 61 6d 65 0a 2a 2a 20 20 20 20  ion zName.**    
10190 20 74 68 61 74 20 61 63 63 65 70 74 73 20 6e 41   that accepts nA
101a0 72 67 20 61 72 67 75 6d 65 6e 74 73 20 61 6e 64  rg arguments and
101b0 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20   is implemented 
101c0 62 79 20 61 20 63 61 6c 6c 20 74 6f 20 43 0a 2a  by a call to C.*
101d0 2a 20 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 6c  *     function l
101e0 69 6b 65 46 75 6e 63 2e 20 41 72 67 75 6d 65 6e  ikeFunc. Argumen
101f0 74 20 70 41 72 67 20 69 73 20 63 61 73 74 20 74  t pArg is cast t
10200 6f 20 61 20 28 76 6f 69 64 20 2a 29 20 61 6e 64  o a (void *) and
10210 20 6d 61 64 65 0a 2a 2a 20 20 20 20 20 61 76 61   made.**     ava
10220 69 6c 61 62 6c 65 20 61 73 20 74 68 65 20 66 75  ilable as the fu
10230 6e 63 74 69 6f 6e 20 75 73 65 72 2d 64 61 74 61  nction user-data
10240 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64   (sqlite3_user_d
10250 61 74 61 28 29 29 2e 20 54 68 65 0a 2a 2a 20 20  ata()). The.**  
10260 20 20 20 46 75 6e 63 44 65 66 2e 66 6c 61 67 73     FuncDef.flags
10270 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74   variable is set
10280 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 70 61   to the value pa
10290 73 73 65 64 20 61 73 20 74 68 65 20 66 6c 61 67  ssed as the flag
102a0 73 0a 2a 2a 20 20 20 20 20 70 61 72 61 6d 65 74  s.**     paramet
102b0 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 46  er..*/.#define F
102c0 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
102d0 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
102e0 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67  xFunc) \.  {nArg
102f0 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  , SQLITE_FUNC_CO
10300 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54  NSTANT|SQLITE_UT
10310 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46  F8|(bNC*SQLITE_F
10320 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c  UNC_NEEDCOLL), \
10330 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  .   SQLITE_INT_T
10340 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20  O_PTR(iArg), 0, 
10350 78 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65  xFunc, 0, #zName
10360 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20  , {0} }.#define 
10370 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c  VFUNCTION(zName,
10380 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
10390 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41  , xFunc) \.  {nA
103a0 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c  rg, SQLITE_UTF8|
103b0 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43  (bNC*SQLITE_FUNC
103c0 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20  _NEEDCOLL), \.  
103d0 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
103e0 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75  TR(iArg), 0, xFu
103f0 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b  nc, 0, #zName, {
10400 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 44 46 55  0} }.#define DFU
10410 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
10420 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
10430 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  Func) \.  {nArg,
10440 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f   SQLITE_FUNC_SLO
10450 43 48 4e 47 7c 53 51 4c 49 54 45 5f 55 54 46 38  CHNG|SQLITE_UTF8
10460 2c 20 5c 0a 20 20 20 30 2c 20 30 2c 20 78 46 75  , \.   0, 0, xFu
10470 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b  nc, 0, #zName, {
10480 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 50 55 52  0} }.#define PUR
10490 45 5f 44 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41  E_DATE(zName, nA
104a0 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
104b0 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  Func) \.  {nArg,
104c0 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f   SQLITE_FUNC_SLO
104d0 43 48 4e 47 7c 53 51 4c 49 54 45 5f 55 54 46 38  CHNG|SQLITE_UTF8
104e0 7c 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e  |SQLITE_FUNC_CON
104f0 53 54 41 4e 54 2c 20 5c 0a 20 20 20 28 76 6f 69  STANT, \.   (voi
10500 64 2a 29 26 73 71 6c 69 74 65 33 43 6f 6e 66 69  d*)&sqlite3Confi
10510 67 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20  g, 0, xFunc, 0, 
10520 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64  #zName, {0} }.#d
10530 65 66 69 6e 65 20 46 55 4e 43 54 49 4f 4e 32 28  efine FUNCTION2(
10540 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
10550 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 2c 20 65  g, bNC, xFunc, e
10560 78 74 72 61 46 6c 61 67 73 29 20 5c 0a 20 20 7b  xtraFlags) \.  {
10570 6e 41 72 67 2c 53 51 4c 49 54 45 5f 46 55 4e 43  nArg,SQLITE_FUNC
10580 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45  _CONSTANT|SQLITE
10590 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54  _UTF8|(bNC*SQLIT
105a0 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29  E_FUNC_NEEDCOLL)
105b0 7c 65 78 74 72 61 46 6c 61 67 73 2c 5c 0a 20 20  |extraFlags,\.  
105c0 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
105d0 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75  TR(iArg), 0, xFu
105e0 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b  nc, 0, #zName, {
105f0 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 53 54 52  0} }.#define STR
10600 5f 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c  _FUNCTION(zName,
10610 20 6e 41 72 67 2c 20 70 41 72 67 2c 20 62 4e 43   nArg, pArg, bNC
10620 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41  , xFunc) \.  {nA
10630 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  rg, SQLITE_FUNC_
10640 53 4c 4f 43 48 4e 47 7c 53 51 4c 49 54 45 5f 55  SLOCHNG|SQLITE_U
10650 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f  TF8|(bNC*SQLITE_
10660 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20  FUNC_NEEDCOLL), 
10670 5c 0a 20 20 20 70 41 72 67 2c 20 30 2c 20 78 46  \.   pArg, 0, xF
10680 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20  unc, 0, #zName, 
10690 7d 0a 23 64 65 66 69 6e 65 20 4c 49 4b 45 46 55  }.#define LIKEFU
106a0 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  NC(zName, nArg, 
106b0 61 72 67 2c 20 66 6c 61 67 73 29 20 5c 0a 20 20  arg, flags) \.  
106c0 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55  {nArg, SQLITE_FU
106d0 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49  NC_CONSTANT|SQLI
106e0 54 45 5f 55 54 46 38 7c 66 6c 61 67 73 2c 20 5c  TE_UTF8|flags, \
106f0 0a 20 20 20 28 76 6f 69 64 20 2a 29 61 72 67 2c  .   (void *)arg,
10700 20 30 2c 20 6c 69 6b 65 46 75 6e 63 2c 20 30 2c   0, likeFunc, 0,
10710 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23   #zName, {0} }.#
10720 64 65 66 69 6e 65 20 41 47 47 52 45 47 41 54 45  define AGGREGATE
10730 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72  (zName, nArg, ar
10740 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20 78 46  g, nc, xStep, xF
10750 69 6e 61 6c 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  inal) \.  {nArg,
10760 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e 63   SQLITE_UTF8|(nc
10770 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
10780 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c  DCOLL), \.   SQL
10790 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61  ITE_INT_TO_PTR(a
107a0 72 67 29 2c 20 30 2c 20 78 53 74 65 70 2c 78 46  rg), 0, xStep,xF
107b0 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c 20 7b 30 7d  inal,#zName, {0}
107c0 7d 0a 23 64 65 66 69 6e 65 20 41 47 47 52 45 47  }.#define AGGREG
107d0 41 54 45 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  ATE2(zName, nArg
107e0 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53 74 65 70  , arg, nc, xStep
107f0 2c 20 78 46 69 6e 61 6c 2c 20 65 78 74 72 61 46  , xFinal, extraF
10800 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  lags) \.  {nArg,
10810 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e 63   SQLITE_UTF8|(nc
10820 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
10830 44 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67  DCOLL)|extraFlag
10840 73 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49  s, \.   SQLITE_I
10850 4e 54 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c 20  NT_TO_PTR(arg), 
10860 30 2c 20 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c  0, xStep,xFinal,
10870 23 7a 4e 61 6d 65 2c 20 7b 30 7d 7d 0a 0a 2f 2a  #zName, {0}}../*
10880 0a 2a 2a 20 41 6c 6c 20 63 75 72 72 65 6e 74 20  .** All current 
10890 73 61 76 65 70 6f 69 6e 74 73 20 61 72 65 20 73  savepoints are s
108a0 74 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65  tored in a linke
108b0 64 20 6c 69 73 74 20 73 74 61 72 74 69 6e 67 20  d list starting 
108c0 61 74 0a 2a 2a 20 73 71 6c 69 74 65 33 2e 70 53  at.** sqlite3.pS
108d0 61 76 65 70 6f 69 6e 74 2e 20 54 68 65 20 66 69  avepoint. The fi
108e0 72 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20 74  rst element in t
108f0 68 65 20 6c 69 73 74 20 69 73 20 74 68 65 20 6d  he list is the m
10900 6f 73 74 20 72 65 63 65 6e 74 6c 79 0a 2a 2a 20  ost recently.** 
10910 6f 70 65 6e 65 64 20 73 61 76 65 70 6f 69 6e 74  opened savepoint
10920 2e 20 53 61 76 65 70 6f 69 6e 74 73 20 61 72 65  . Savepoints are
10930 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 6c 69   added to the li
10940 73 74 20 62 79 20 74 68 65 20 76 64 62 65 0a 2a  st by the vdbe.*
10950 2a 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20 69  * OP_Savepoint i
10960 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 73  nstruction..*/.s
10970 74 72 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20  truct Savepoint 
10980 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  {.  char *zName;
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 2f 2a 20 53 61 76 65 70          /* Savep
109b0 6f 69 6e 74 20 6e 61 6d 65 20 28 6e 75 6c 2d 74  oint name (nul-t
109c0 65 72 6d 69 6e 61 74 65 64 29 20 2a 2f 0a 20 20  erminated) */.  
109d0 69 36 34 20 6e 44 65 66 65 72 72 65 64 43 6f 6e  i64 nDeferredCon
109e0 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
109f0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
10a00 20 64 65 66 65 72 72 65 64 20 66 6b 20 76 69 6f   deferred fk vio
10a10 6c 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 69 36 34  lations */.  i64
10a20 20 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e   nDeferredImmCon
10a30 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
10a40 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64 65   /* Number of de
10a50 66 65 72 72 65 64 20 69 6d 6d 20 66 6b 2e 20 2a  ferred imm fk. *
10a60 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70  /.  Savepoint *p
10a70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 20 20  Next;           
10a80 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72 65 6e          /* Paren
10a90 74 20 73 61 76 65 70 6f 69 6e 74 20 28 69 66 20  t savepoint (if 
10aa0 61 6e 79 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  any) */.};../*.*
10ab0 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
10ac0 61 72 65 20 75 73 65 64 20 61 73 20 74 68 65 20  are used as the 
10ad0 73 65 63 6f 6e 64 20 70 61 72 61 6d 65 74 65 72  second parameter
10ae0 20 74 6f 20 73 71 6c 69 74 65 33 53 61 76 65 70   to sqlite3Savep
10af0 6f 69 6e 74 28 29 2c 0a 2a 2a 20 61 6e 64 20 61  oint(),.** and a
10b00 73 20 74 68 65 20 50 31 20 61 72 67 75 6d 65 6e  s the P1 argumen
10b10 74 20 74 6f 20 74 68 65 20 4f 50 5f 53 61 76 65  t to the OP_Save
10b20 70 6f 69 6e 74 20 69 6e 73 74 72 75 63 74 69 6f  point instructio
10b30 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 41  n..*/.#define SA
10b40 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20 20 20  VEPOINT_BEGIN   
10b50 20 20 20 30 0a 23 64 65 66 69 6e 65 20 53 41 56     0.#define SAV
10b60 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 20  EPOINT_RELEASE  
10b70 20 20 31 0a 23 64 65 66 69 6e 65 20 53 41 56 45    1.#define SAVE
10b80 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 20  POINT_ROLLBACK  
10b90 20 32 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20   2.../*.** Each 
10ba0 53 51 4c 69 74 65 20 6d 6f 64 75 6c 65 20 28 76  SQLite module (v
10bb0 69 72 74 75 61 6c 20 74 61 62 6c 65 20 64 65 66  irtual table def
10bc0 69 6e 69 74 69 6f 6e 29 20 69 73 20 64 65 66 69  inition) is defi
10bd0 6e 65 64 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73  ned by an.** ins
10be0 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
10bf0 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
10c00 2c 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  , stored in the 
10c10 73 71 6c 69 74 65 33 2e 61 4d 6f 64 75 6c 65 0a  sqlite3.aModule.
10c20 2a 2a 20 68 61 73 68 20 74 61 62 6c 65 2e 0a 2a  ** hash table..*
10c30 2f 0a 73 74 72 75 63 74 20 4d 6f 64 75 6c 65 20  /.struct Module 
10c40 7b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65  {.  const sqlite
10c50 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c  3_module *pModul
10c60 65 3b 20 20 20 20 20 20 20 2f 2a 20 43 61 6c 6c  e;       /* Call
10c70 62 61 63 6b 20 70 6f 69 6e 74 65 72 73 20 2a 2f  back pointers */
10c80 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
10c90 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20  Name;           
10ca0 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
10cb0 70 61 73 73 65 64 20 74 6f 20 63 72 65 61 74 65  passed to create
10cc0 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76  _module() */.  v
10cd0 6f 69 64 20 2a 70 41 75 78 3b 20 20 20 20 20 20  oid *pAux;      
10ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10cf0 20 20 20 20 2f 2a 20 70 41 75 78 20 70 61 73 73      /* pAux pass
10d00 65 64 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64  ed to create_mod
10d10 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20  ule() */.  void 
10d20 28 2a 78 44 65 73 74 72 6f 79 29 28 76 6f 69 64  (*xDestroy)(void
10d30 20 2a 29 3b 20 20 20 20 20 20 20 20 20 20 20 20   *);            
10d40 2f 2a 20 4d 6f 64 75 6c 65 20 64 65 73 74 72 75  /* Module destru
10d50 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  ctor function */
10d60 0a 20 20 54 61 62 6c 65 20 2a 70 45 70 6f 54 61  .  Table *pEpoTa
10d70 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b;              
10d80 20 20 20 20 20 20 20 20 2f 2a 20 45 70 6f 6e 79          /* Epony
10d90 6d 6f 75 73 20 74 61 62 6c 65 20 66 6f 72 20 74  mous table for t
10da0 68 69 73 20 6d 6f 64 75 6c 65 20 2a 2f 0a 7d 3b  his module */.};
10db0 0a 0a 2f 2a 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74  ../*.** informat
10dc0 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20 63  ion about each c
10dd0 6f 6c 75 6d 6e 20 6f 66 20 61 6e 20 53 51 4c 20  olumn of an SQL 
10de0 74 61 62 6c 65 20 69 73 20 68 65 6c 64 20 69 6e  table is held in
10df0 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20   an instance.** 
10e00 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
10e10 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c  e..*/.struct Col
10e20 75 6d 6e 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e  umn {.  char *zN
10e30 61 6d 65 3b 20 20 20 20 20 2f 2a 20 4e 61 6d 65  ame;     /* Name
10e40 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2c   of this column,
10e50 20 5c 30 30 30 2c 20 74 68 65 6e 20 74 68 65 20   \000, then the 
10e60 74 79 70 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a  type */.  Expr *
10e70 70 44 66 6c 74 3b 20 20 20 20 20 2f 2a 20 44 65  pDflt;     /* De
10e80 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 74  fault value of t
10e90 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  his column */.  
10ea0 63 68 61 72 20 2a 7a 43 6f 6c 6c 3b 20 20 20 20  char *zColl;    
10eb0 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65   /* Collating se
10ec0 71 75 65 6e 63 65 2e 20 20 49 66 20 4e 55 4c 4c  quence.  If NULL
10ed0 2c 20 75 73 65 20 74 68 65 20 64 65 66 61 75 6c  , use the defaul
10ee0 74 20 2a 2f 0a 20 20 75 38 20 6e 6f 74 4e 75 6c  t */.  u8 notNul
10ef0 6c 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20 4f 45  l;      /* An OE
10f00 5f 20 63 6f 64 65 20 66 6f 72 20 68 61 6e 64 6c  _ code for handl
10f10 69 6e 67 20 61 20 4e 4f 54 20 4e 55 4c 4c 20 63  ing a NOT NULL c
10f20 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 20 20 63  onstraint */.  c
10f30 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20  har affinity;   
10f40 2f 2a 20 4f 6e 65 20 6f 66 20 74 68 65 20 53 51  /* One of the SQ
10f50 4c 49 54 45 5f 41 46 46 5f 2e 2e 2e 20 76 61 6c  LITE_AFF_... val
10f60 75 65 73 20 2a 2f 0a 20 20 75 38 20 73 7a 45 73  ues */.  u8 szEs
10f70 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 45 73 74  t;        /* Est
10f80 69 6d 61 74 65 64 20 73 69 7a 65 20 6f 66 20 76  imated size of v
10f90 61 6c 75 65 20 69 6e 20 74 68 69 73 20 63 6f 6c  alue in this col
10fa0 75 6d 6e 2e 20 73 69 7a 65 6f 66 28 49 4e 54 29  umn. sizeof(INT)
10fb0 3d 3d 31 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 46  ==1 */.  u8 colF
10fc0 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20 42 6f 6f  lags;     /* Boo
10fd0 6c 65 61 6e 20 70 72 6f 70 65 72 74 69 65 73 2e  lean properties.
10fe0 20 20 53 65 65 20 43 4f 4c 46 4c 41 47 5f 20 64    See COLFLAG_ d
10ff0 65 66 69 6e 65 73 20 62 65 6c 6f 77 20 2a 2f 0a  efines below */.
11000 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76  };../* Allowed v
11010 61 6c 75 65 73 20 66 6f 72 20 43 6f 6c 75 6d 6e  alues for Column
11020 2e 63 6f 6c 46 6c 61 67 73 3a 0a 2a 2f 0a 23 64  .colFlags:.*/.#d
11030 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 50 52  efine COLFLAG_PR
11040 49 4d 4b 45 59 20 20 30 78 30 30 30 31 20 20 20  IMKEY  0x0001   
11050 20 2f 2a 20 43 6f 6c 75 6d 6e 20 69 73 20 70 61   /* Column is pa
11060 72 74 20 6f 66 20 74 68 65 20 70 72 69 6d 61 72  rt of the primar
11070 79 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65  y key */.#define
11080 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 20   COLFLAG_HIDDEN 
11090 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a 20 41    0x0002    /* A
110a0 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 69   hidden column i
110b0 6e 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  n a virtual tabl
110c0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c  e */.#define COL
110d0 46 4c 41 47 5f 48 41 53 54 59 50 45 20 20 30 78  FLAG_HASTYPE  0x
110e0 30 30 30 34 20 20 20 20 2f 2a 20 54 79 70 65 20  0004    /* Type 
110f0 6e 61 6d 65 20 66 6f 6c 6c 6f 77 73 20 63 6f 6c  name follows col
11100 75 6d 6e 20 6e 61 6d 65 20 2a 2f 0a 23 64 65 66  umn name */.#def
11110 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 55 4e 49 51  ine COLFLAG_UNIQ
11120 55 45 20 20 20 30 78 30 30 30 38 20 20 20 20 2f  UE   0x0008    /
11130 2a 20 43 6f 6c 75 6d 6e 20 64 65 66 20 63 6f 6e  * Column def con
11140 74 61 69 6e 73 20 22 55 4e 49 51 55 45 22 20 6f  tains "UNIQUE" o
11150 72 20 22 50 4b 22 20 2a 2f 0a 23 64 65 66 69 6e  r "PK" */.#defin
11160 65 20 43 4f 4c 46 4c 41 47 5f 53 4f 52 54 45 52  e COLFLAG_SORTER
11170 52 45 46 20 30 78 30 30 31 30 20 20 20 2f 2a 20  REF 0x0010   /* 
11180 55 73 65 20 73 6f 72 74 65 72 2d 72 65 66 73 20  Use sorter-refs 
11190 77 69 74 68 20 74 68 69 73 20 63 6f 6c 75 6d 6e  with this column
111a0 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 22 43 6f   */../*.** A "Co
111b0 6c 6c 61 74 69 6e 67 20 53 65 71 75 65 6e 63 65  llating Sequence
111c0 22 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20  " is defined by 
111d0 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
111e0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20  he following.** 
111f0 73 74 72 75 63 74 75 72 65 2e 20 43 6f 6e 63 65  structure. Conce
11200 70 74 75 61 6c 6c 79 2c 20 61 20 63 6f 6c 6c 61  ptually, a colla
11210 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 63 6f  ting sequence co
11220 6e 73 69 73 74 73 20 6f 66 20 61 20 6e 61 6d 65  nsists of a name
11230 20 61 6e 64 0a 2a 2a 20 61 20 63 6f 6d 70 61 72   and.** a compar
11240 69 73 6f 6e 20 72 6f 75 74 69 6e 65 20 74 68 61  ison routine tha
11250 74 20 64 65 66 69 6e 65 73 20 74 68 65 20 6f 72  t defines the or
11260 64 65 72 20 6f 66 20 74 68 61 74 20 73 65 71 75  der of that sequ
11270 65 6e 63 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 43  ence..**.** If C
11280 6f 6c 6c 53 65 71 2e 78 43 6d 70 20 69 73 20 4e  ollSeq.xCmp is N
11290 55 4c 4c 2c 20 69 74 20 6d 65 61 6e 73 20 74 68  ULL, it means th
112a0 61 74 20 74 68 65 0a 2a 2a 20 63 6f 6c 6c 61 74  at the.** collat
112b0 69 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73 20  ing sequence is 
112c0 75 6e 64 65 66 69 6e 65 64 2e 20 20 49 6e 64 69  undefined.  Indi
112d0 63 65 73 20 62 75 69 6c 74 20 6f 6e 20 61 6e 20  ces built on an 
112e0 75 6e 64 65 66 69 6e 65 64 0a 2a 2a 20 63 6f 6c  undefined.** col
112f0 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
11300 6d 61 79 20 6e 6f 74 20 62 65 20 72 65 61 64 20  may not be read 
11310 6f 72 20 77 72 69 74 74 65 6e 2e 0a 2a 2f 0a 73  or written..*/.s
11320 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 7b 0a  truct CollSeq {.
11330 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
11340 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
11350 6f 66 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67  of the collating
11360 20 73 65 71 75 65 6e 63 65 2c 20 55 54 46 2d 38   sequence, UTF-8
11370 20 65 6e 63 6f 64 65 64 20 2a 2f 0a 20 20 75 38   encoded */.  u8
11380 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20   enc;           
11390 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f      /* Text enco
113a0 64 69 6e 67 20 68 61 6e 64 6c 65 64 20 62 79 20  ding handled by 
113b0 78 43 6d 70 28 29 20 2a 2f 0a 20 20 76 6f 69 64  xCmp() */.  void
113c0 20 2a 70 55 73 65 72 3b 20 20 20 20 20 20 20 20   *pUser;        
113d0 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d    /* First argum
113e0 65 6e 74 20 74 6f 20 78 43 6d 70 28 29 20 2a 2f  ent to xCmp() */
113f0 0a 20 20 69 6e 74 20 28 2a 78 43 6d 70 29 28 76  .  int (*xCmp)(v
11400 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20  oid*,int, const 
11410 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73  void*, int, cons
11420 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64  t void*);.  void
11430 20 28 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29 3b   (*xDel)(void*);
11440 20 20 2f 2a 20 44 65 73 74 72 75 63 74 6f 72 20    /* Destructor 
11450 66 6f 72 20 70 55 73 65 72 20 2a 2f 0a 7d 3b 0a  for pUser */.};.
11460 0a 2f 2a 0a 2a 2a 20 41 20 73 6f 72 74 20 6f 72  ./*.** A sort or
11470 64 65 72 20 63 61 6e 20 62 65 20 65 69 74 68 65  der can be eithe
11480 72 20 41 53 43 20 6f 72 20 44 45 53 43 2e 0a 2a  r ASC or DESC..*
11490 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
114a0 5f 53 4f 5f 41 53 43 20 20 20 20 20 20 20 30 20  _SO_ASC       0 
114b0 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73 63 65   /* Sort in asce
114c0 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23  nding order */.#
114d0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f  define SQLITE_SO
114e0 5f 44 45 53 43 20 20 20 20 20 20 31 20 20 2f 2a  _DESC      1  /*
114f0 20 53 6f 72 74 20 69 6e 20 61 73 63 65 6e 64 69   Sort in ascendi
11500 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66  ng order */.#def
11510 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 55 4e  ine SQLITE_SO_UN
11520 44 45 46 49 4e 45 44 20 2d 31 20 2f 2a 20 4e 6f  DEFINED -1 /* No
11530 20 73 6f 72 74 20 6f 72 64 65 72 20 73 70 65 63   sort order spec
11540 69 66 69 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  ified */../*.** 
11550 43 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20  Column affinity 
11560 74 79 70 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  types..**.** The
11570 73 65 20 75 73 65 64 20 74 6f 20 68 61 76 65 20  se used to have 
11580 6d 6e 65 6d 6f 6e 69 63 20 6e 61 6d 65 20 6c 69  mnemonic name li
11590 6b 65 20 27 69 27 20 66 6f 72 20 53 51 4c 49 54  ke 'i' for SQLIT
115a0 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 61 6e  E_AFF_INTEGER an
115b0 64 0a 2a 2a 20 27 74 27 20 66 6f 72 20 53 51 4c  d.** 't' for SQL
115c0 49 54 45 5f 41 46 46 5f 54 45 58 54 2e 20 20 42  ITE_AFF_TEXT.  B
115d0 75 74 20 77 65 20 63 61 6e 20 73 61 76 65 20 61  ut we can save a
115e0 20 6c 69 74 74 6c 65 20 73 70 61 63 65 20 61 6e   little space an
115f0 64 20 69 6d 70 72 6f 76 65 0a 2a 2a 20 74 68 65  d improve.** the
11600 20 73 70 65 65 64 20 61 20 6c 69 74 74 6c 65 20   speed a little 
11610 62 79 20 6e 75 6d 62 65 72 69 6e 67 20 74 68 65  by numbering the
11620 20 76 61 6c 75 65 73 20 63 6f 6e 73 65 63 75 74   values consecut
11630 69 76 65 6c 79 2e 0a 2a 2a 0a 2a 2a 20 42 75 74  ively..**.** But
11640 20 72 61 74 68 65 72 20 74 68 61 6e 20 73 74 61   rather than sta
11650 72 74 20 77 69 74 68 20 30 20 6f 72 20 31 2c 20  rt with 0 or 1, 
11660 77 65 20 62 65 67 69 6e 20 77 69 74 68 20 27 41  we begin with 'A
11670 27 2e 20 20 54 68 61 74 20 77 61 79 2c 0a 2a 2a  '.  That way,.**
11680 20 77 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20 61   when multiple a
11690 66 66 69 6e 69 74 79 20 74 79 70 65 73 20 61 72  ffinity types ar
116a0 65 20 63 6f 6e 63 61 74 65 6e 61 74 65 64 20 69  e concatenated i
116b0 6e 74 6f 20 61 20 73 74 72 69 6e 67 20 61 6e 64  nto a string and
116c0 0a 2a 2a 20 75 73 65 64 20 61 73 20 74 68 65 20  .** used as the 
116d0 50 34 20 6f 70 65 72 61 6e 64 2c 20 74 68 65 79  P4 operand, they
116e0 20 77 69 6c 6c 20 62 65 20 6d 6f 72 65 20 72 65   will be more re
116f0 61 64 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 4e 6f  adable..**.** No
11700 74 65 20 61 6c 73 6f 20 74 68 61 74 20 74 68 65  te also that the
11710 20 6e 75 6d 65 72 69 63 20 74 79 70 65 73 20 61   numeric types a
11720 72 65 20 67 72 6f 75 70 65 64 20 74 6f 67 65 74  re grouped toget
11730 68 65 72 20 73 6f 20 74 68 61 74 20 74 65 73 74  her so that test
11740 69 6e 67 0a 2a 2a 20 66 6f 72 20 61 20 6e 75 6d  ing.** for a num
11750 65 72 69 63 20 74 79 70 65 20 69 73 20 61 20 73  eric type is a s
11760 69 6e 67 6c 65 20 63 6f 6d 70 61 72 69 73 6f 6e  ingle comparison
11770 2e 20 20 41 6e 64 20 74 68 65 20 42 4c 4f 42 20  .  And the BLOB 
11780 74 79 70 65 20 69 73 20 66 69 72 73 74 2e 0a 2a  type is first..*
11790 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
117a0 5f 41 46 46 5f 42 4c 4f 42 20 20 20 20 20 27 41  _AFF_BLOB     'A
117b0 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  '.#define SQLITE
117c0 5f 41 46 46 5f 54 45 58 54 20 20 20 20 20 27 42  _AFF_TEXT     'B
117d0 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  '.#define SQLITE
117e0 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 20 27 43  _AFF_NUMERIC  'C
117f0 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  '.#define SQLITE
11800 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 20 27 44  _AFF_INTEGER  'D
11810 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  '.#define SQLITE
11820 5f 41 46 46 5f 52 45 41 4c 20 20 20 20 20 27 45  _AFF_REAL     'E
11830 27 0a 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74  '..#define sqlit
11840 65 33 49 73 4e 75 6d 65 72 69 63 41 66 66 69 6e  e3IsNumericAffin
11850 69 74 79 28 58 29 20 20 28 28 58 29 3e 3d 53 51  ity(X)  ((X)>=SQ
11860 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43  LITE_AFF_NUMERIC
11870 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c  )../*.** The SQL
11880 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 76 61 6c  ITE_AFF_MASK val
11890 75 65 73 20 6d 61 73 6b 73 20 6f 66 66 20 74 68  ues masks off th
118a0 65 20 73 69 67 6e 69 66 69 63 61 6e 74 20 62 69  e significant bi
118b0 74 73 20 6f 66 20 61 6e 0a 2a 2a 20 61 66 66 69  ts of an.** affi
118c0 6e 69 74 79 20 76 61 6c 75 65 2e 0a 2a 2f 0a 23  nity value..*/.#
118d0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
118e0 46 5f 4d 41 53 4b 20 20 20 20 20 30 78 34 37 0a  F_MASK     0x47.
118f0 0a 2f 2a 0a 2a 2a 20 41 64 64 69 74 69 6f 6e 61  ./*.** Additiona
11900 6c 20 62 69 74 20 76 61 6c 75 65 73 20 74 68 61  l bit values tha
11910 74 20 63 61 6e 20 62 65 20 4f 52 65 64 20 77 69  t can be ORed wi
11920 74 68 20 61 6e 20 61 66 66 69 6e 69 74 79 20 77  th an affinity w
11930 69 74 68 6f 75 74 0a 2a 2a 20 63 68 61 6e 67 69  ithout.** changi
11940 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74 79 2e  ng the affinity.
11950 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54  .**.** The SQLIT
11960 45 5f 4e 4f 54 4e 55 4c 4c 20 66 6c 61 67 20 69  E_NOTNULL flag i
11970 73 20 61 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20  s a combination 
11980 6f 66 20 4e 55 4c 4c 45 51 20 61 6e 64 20 4a 55  of NULLEQ and JU
11990 4d 50 49 46 4e 55 4c 4c 2e 0a 2a 2a 20 49 74 20  MPIFNULL..** It 
119a0 63 61 75 73 65 73 20 61 6e 20 61 73 73 65 72 74  causes an assert
119b0 28 29 20 74 6f 20 66 69 72 65 20 69 66 20 65 69  () to fire if ei
119c0 74 68 65 72 20 6f 70 65 72 61 6e 64 20 74 6f 20  ther operand to 
119d0 61 20 63 6f 6d 70 61 72 69 73 6f 6e 0a 2a 2a 20  a comparison.** 
119e0 6f 70 65 72 61 74 6f 72 20 69 73 20 4e 55 4c 4c  operator is NULL
119f0 2e 20 20 49 74 20 69 73 20 61 64 64 65 64 20 74  .  It is added t
11a00 6f 20 63 65 72 74 61 69 6e 20 63 6f 6d 70 61 72  o certain compar
11a10 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72 73 20 74  ison operators t
11a20 6f 0a 2a 2a 20 70 72 6f 76 65 20 74 68 61 74 20  o.** prove that 
11a30 74 68 65 20 6f 70 65 72 61 6e 64 73 20 61 72 65  the operands are
11a40 20 61 6c 77 61 79 73 20 4e 4f 54 20 4e 55 4c 4c   always NOT NULL
11a50 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
11a60 49 54 45 5f 4b 45 45 50 4e 55 4c 4c 20 20 20 20  ITE_KEEPNULL    
11a70 20 30 78 30 38 20 20 2f 2a 20 55 73 65 64 20 62   0x08  /* Used b
11a80 79 20 76 65 63 74 6f 72 20 3d 3d 20 6f 72 20 3c  y vector == or <
11a90 3e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  > */.#define SQL
11aa0 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 20  ITE_JUMPIFNULL  
11ab0 20 30 78 31 30 20 20 2f 2a 20 6a 75 6d 70 73 20   0x10  /* jumps 
11ac0 69 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e  if either operan
11ad0 64 20 69 73 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65  d is NULL */.#de
11ae0 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 54 4f 52  fine SQLITE_STOR
11af0 45 50 32 20 20 20 20 20 20 30 78 32 30 20 20 2f  EP2      0x20  /
11b00 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69  * Store result i
11b10 6e 20 72 65 67 5b 50 32 5d 20 72 61 74 68 65 72  n reg[P2] rather
11b20 20 74 68 61 6e 20 6a 75 6d 70 20 2a 2f 0a 23 64   than jump */.#d
11b30 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 55 4c  efine SQLITE_NUL
11b40 4c 45 51 20 20 20 20 20 20 20 30 78 38 30 20 20  LEQ       0x80  
11b50 2f 2a 20 4e 55 4c 4c 3d 4e 55 4c 4c 20 2a 2f 0a  /* NULL=NULL */.
11b60 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e  #define SQLITE_N
11b70 4f 54 4e 55 4c 4c 20 20 20 20 20 20 30 78 39 30  OTNULL      0x90
11b80 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74    /* Assert that
11b90 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 6e 65   operands are ne
11ba0 76 65 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a  ver NULL */../*.
11bb0 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 20 6f 66 20  ** An object of 
11bc0 74 68 69 73 20 74 79 70 65 20 69 73 20 63 72 65  this type is cre
11bd0 61 74 65 64 20 66 6f 72 20 65 61 63 68 20 76 69  ated for each vi
11be0 72 74 75 61 6c 20 74 61 62 6c 65 20 70 72 65 73  rtual table pres
11bf0 65 6e 74 20 69 6e 0a 2a 2a 20 74 68 65 20 64 61  ent in.** the da
11c00 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 0a 2a  tabase schema..*
11c10 2a 0a 2a 2a 20 49 66 20 74 68 65 20 64 61 74 61  *.** If the data
11c20 62 61 73 65 20 73 63 68 65 6d 61 20 69 73 20 73  base schema is s
11c30 68 61 72 65 64 2c 20 74 68 65 6e 20 74 68 65 72  hared, then ther
11c40 65 20 69 73 20 6f 6e 65 20 69 6e 73 74 61 6e 63  e is one instanc
11c50 65 20 6f 66 20 74 68 69 73 0a 2a 2a 20 73 74 72  e of this.** str
11c60 75 63 74 75 72 65 20 66 6f 72 20 65 61 63 68 20  ucture for each 
11c70 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
11c80 69 6f 6e 20 28 73 71 6c 69 74 65 33 2a 29 20 74  ion (sqlite3*) t
11c90 68 61 74 20 75 73 65 73 20 74 68 65 20 73 68 61  hat uses the sha
11ca0 72 65 64 0a 2a 2a 20 73 63 68 65 6d 61 2e 20 54  red.** schema. T
11cb0 68 69 73 20 69 73 20 62 65 63 61 75 73 65 20 65  his is because e
11cc0 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e  ach database con
11cd0 6e 65 63 74 69 6f 6e 20 72 65 71 75 69 72 65 73  nection requires
11ce0 20 69 74 73 20 6f 77 6e 20 75 6e 69 71 75 65 0a   its own unique.
11cf0 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  ** instance of t
11d00 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a  he sqlite3_vtab*
11d10 20 68 61 6e 64 6c 65 20 75 73 65 64 20 74 6f 20   handle used to 
11d20 61 63 63 65 73 73 20 74 68 65 20 76 69 72 74 75  access the virtu
11d30 61 6c 20 74 61 62 6c 65 0a 2a 2a 20 69 6d 70 6c  al table.** impl
11d40 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 73 71 6c 69  ementation. sqli
11d50 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65  te3_vtab* handle
11d60 73 20 63 61 6e 20 6e 6f 74 20 62 65 20 73 68 61  s can not be sha
11d70 72 65 64 20 62 65 74 77 65 65 6e 0a 2a 2a 20 64  red between.** d
11d80 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
11d90 6f 6e 73 2c 20 65 76 65 6e 20 77 68 65 6e 20 74  ons, even when t
11da0 68 65 20 72 65 73 74 20 6f 66 20 74 68 65 20 69  he rest of the i
11db0 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73  n-memory databas
11dc0 65 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 73  e.** schema is s
11dd0 68 61 72 65 64 2c 20 61 73 20 74 68 65 20 69 6d  hared, as the im
11de0 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 74  plementation oft
11df0 65 6e 20 73 74 6f 72 65 73 20 74 68 65 20 64 61  en stores the da
11e00 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63  tabase.** connec
11e10 74 69 6f 6e 20 68 61 6e 64 6c 65 20 70 61 73 73  tion handle pass
11e20 65 64 20 74 6f 20 69 74 20 76 69 61 20 74 68 65  ed to it via the
11e30 20 78 43 6f 6e 6e 65 63 74 28 29 20 6f 72 20 78   xConnect() or x
11e40 43 72 65 61 74 65 28 29 20 6d 65 74 68 6f 64 0a  Create() method.
11e50 2a 2a 20 64 75 72 69 6e 67 20 69 6e 69 74 69 61  ** during initia
11e60 6c 69 7a 61 74 69 6f 6e 20 69 6e 74 65 72 6e 61  lization interna
11e70 6c 6c 79 2e 20 54 68 69 73 20 64 61 74 61 62 61  lly. This databa
11e80 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  se connection ha
11e90 6e 64 6c 65 20 6d 61 79 0a 2a 2a 20 74 68 65 6e  ndle may.** then
11ea0 20 62 65 20 75 73 65 64 20 62 79 20 74 68 65 20   be used by the 
11eb0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d  virtual table im
11ec0 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20  plementation to 
11ed0 61 63 63 65 73 73 20 72 65 61 6c 20 74 61 62 6c  access real tabl
11ee0 65 73 0a 2a 2a 20 77 69 74 68 69 6e 20 74 68 65  es.** within the
11ef0 20 64 61 74 61 62 61 73 65 2e 20 53 6f 20 74 68   database. So th
11f00 61 74 20 74 68 65 79 20 61 70 70 65 61 72 20 61  at they appear a
11f10 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 63 61  s part of the ca
11f20 6c 6c 65 72 73 0a 2a 2a 20 74 72 61 6e 73 61 63  llers.** transac
11f30 74 69 6f 6e 2c 20 74 68 65 73 65 20 61 63 63 65  tion, these acce
11f40 73 73 65 73 20 6e 65 65 64 20 74 6f 20 62 65 20  sses need to be 
11f50 6d 61 64 65 20 76 69 61 20 74 68 65 20 73 61 6d  made via the sam
11f60 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f  e database.** co
11f70 6e 6e 65 63 74 69 6f 6e 20 61 73 20 74 68 61 74  nnection as that
11f80 20 75 73 65 64 20 74 6f 20 65 78 65 63 75 74 65   used to execute
11f90 20 53 51 4c 20 6f 70 65 72 61 74 69 6f 6e 73 20   SQL operations 
11fa0 6f 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  on the virtual t
11fb0 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20  able..**.** All 
11fc0 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 74  VTable objects t
11fd0 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 20 74  hat correspond t
11fe0 6f 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65  o a single table
11ff0 20 69 6e 20 61 20 73 68 61 72 65 64 0a 2a 2a 20   in a shared.** 
12000 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
12010 61 72 65 20 69 6e 69 74 69 61 6c 6c 79 20 73 74  are initially st
12020 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64  ored in a linked
12030 2d 6c 69 73 74 20 70 6f 69 6e 74 65 64 20 74 6f  -list pointed to
12040 20 62 79 0a 2a 2a 20 74 68 65 20 54 61 62 6c 65   by.** the Table
12050 2e 70 56 54 61 62 6c 65 20 6d 65 6d 62 65 72 20  .pVTable member 
12060 76 61 72 69 61 62 6c 65 20 6f 66 20 74 68 65 20  variable of the 
12070 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 54 61  corresponding Ta
12080 62 6c 65 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 57  ble object..** W
12090 68 65 6e 20 61 6e 20 73 71 6c 69 74 65 33 5f 70  hen an sqlite3_p
120a0 72 65 70 61 72 65 28 29 20 6f 70 65 72 61 74 69  repare() operati
120b0 6f 6e 20 69 73 20 72 65 71 75 69 72 65 64 20 74  on is required t
120c0 6f 20 61 63 63 65 73 73 20 74 68 65 20 76 69 72  o access the vir
120d0 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 2c 20 69  tual.** table, i
120e0 74 20 73 65 61 72 63 68 65 73 20 74 68 65 20 6c  t searches the l
120f0 69 73 74 20 66 6f 72 20 74 68 65 20 56 54 61 62  ist for the VTab
12100 6c 65 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f  le that correspo
12110 6e 64 73 20 74 6f 20 74 68 65 0a 2a 2a 20 64 61  nds to the.** da
12120 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
12130 6e 20 64 6f 69 6e 67 20 74 68 65 20 70 72 65 70  n doing the prep
12140 61 72 69 6e 67 20 73 6f 20 61 73 20 74 6f 20 75  aring so as to u
12150 73 65 20 74 68 65 20 63 6f 72 72 65 63 74 0a 2a  se the correct.*
12160 2a 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20  * sqlite3_vtab* 
12170 68 61 6e 64 6c 65 20 69 6e 20 74 68 65 20 63 6f  handle in the co
12180 6d 70 69 6c 65 64 20 71 75 65 72 79 2e 0a 2a 2a  mpiled query..**
12190 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 69 6e 2d 6d  .** When an in-m
121a0 65 6d 6f 72 79 20 54 61 62 6c 65 20 6f 62 6a 65  emory Table obje
121b0 63 74 20 69 73 20 64 65 6c 65 74 65 64 20 28 66  ct is deleted (f
121c0 6f 72 20 65 78 61 6d 70 6c 65 20 77 68 65 6e 20  or example when 
121d0 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73  the.** schema is
121e0 20 62 65 69 6e 67 20 72 65 6c 6f 61 64 65 64 20   being reloaded 
121f0 66 6f 72 20 73 6f 6d 65 20 72 65 61 73 6f 6e 29  for some reason)
12200 2c 20 74 68 65 20 56 54 61 62 6c 65 20 6f 62 6a  , the VTable obj
12210 65 63 74 73 20 61 72 65 20 6e 6f 74 0a 2a 2a 20  ects are not.** 
12220 64 65 6c 65 74 65 64 20 61 6e 64 20 74 68 65 20  deleted and the 
12230 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61  sqlite3_vtab* ha
12240 6e 64 6c 65 73 20 61 72 65 20 6e 6f 74 20 78 44  ndles are not xD
12250 69 73 63 6f 6e 6e 65 63 74 28 29 65 64 0a 2a 2a  isconnect()ed.**
12260 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 49 6e   immediately. In
12270 73 74 65 61 64 2c 20 74 68 65 79 20 61 72 65 20  stead, they are 
12280 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20 54  moved from the T
12290 61 62 6c 65 2e 70 56 54 61 62 6c 65 20 6c 69 73  able.pVTable lis
122a0 74 20 74 6f 0a 2a 2a 20 61 6e 6f 74 68 65 72 20  t to.** another 
122b0 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68 65 61 64  linked list head
122c0 65 64 20 62 79 20 74 68 65 20 73 71 6c 69 74 65  ed by the sqlite
122d0 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74 20 6d 65  3.pDisconnect me
122e0 6d 62 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 63  mber of the.** c
122f0 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c  orresponding sql
12300 69 74 65 33 20 73 74 72 75 63 74 75 72 65 2e 20  ite3 structure. 
12310 54 68 65 79 20 61 72 65 20 74 68 65 6e 20 64 65  They are then de
12320 6c 65 74 65 64 2f 78 44 69 73 63 6f 6e 6e 65 63  leted/xDisconnec
12330 74 65 64 0a 2a 2a 20 6e 65 78 74 20 74 69 6d 65  ted.** next time
12340 20 61 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20   a statement is 
12350 70 72 65 70 61 72 65 64 20 75 73 69 6e 67 20 73  prepared using s
12360 61 69 64 20 73 71 6c 69 74 65 33 2a 2e 20 54 68  aid sqlite3*. Th
12370 69 73 20 69 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f  is is done.** to
12380 20 61 76 6f 69 64 20 64 65 61 64 6c 6f 63 6b 20   avoid deadlock 
12390 69 73 73 75 65 73 20 69 6e 76 6f 6c 76 69 6e 67  issues involving
123a0 20 6d 75 6c 74 69 70 6c 65 20 73 71 6c 69 74 65   multiple sqlite
123b0 33 2e 6d 75 74 65 78 20 6d 75 74 65 78 65 73 2e  3.mutex mutexes.
123c0 0a 2a 2a 20 52 65 66 65 72 20 74 6f 20 63 6f 6d  .** Refer to com
123d0 6d 65 6e 74 73 20 61 62 6f 76 65 20 66 75 6e 63  ments above func
123e0 74 69 6f 6e 20 73 71 6c 69 74 65 33 56 74 61 62  tion sqlite3Vtab
123f0 55 6e 6c 6f 63 6b 4c 69 73 74 28 29 20 66 6f 72  UnlockList() for
12400 20 61 6e 0a 2a 2a 20 65 78 70 6c 61 6e 61 74 69   an.** explanati
12410 6f 6e 20 61 73 20 74 6f 20 77 68 79 20 69 74 20  on as to why it 
12420 69 73 20 73 61 66 65 20 74 6f 20 61 64 64 20 61  is safe to add a
12430 6e 20 65 6e 74 72 79 20 74 6f 20 61 6e 20 73 71  n entry to an sq
12440 6c 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63  lite3.pDisconnec
12450 74 0a 2a 2a 20 6c 69 73 74 20 77 69 74 68 6f 75  t.** list withou
12460 74 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 63 6f  t holding the co
12470 72 72 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69  rresponding sqli
12480 74 65 33 2e 6d 75 74 65 78 20 6d 75 74 65 78 2e  te3.mutex mutex.
12490 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f 72  .**.** The memor
124a0 79 20 66 6f 72 20 6f 62 6a 65 63 74 73 20 6f 66  y for objects of
124b0 20 74 68 69 73 20 74 79 70 65 20 69 73 20 61 6c   this type is al
124c0 77 61 79 73 20 61 6c 6c 6f 63 61 74 65 64 20 62  ways allocated b
124d0 79 0a 2a 2a 20 73 71 6c 69 74 65 33 44 62 4d 61  y.** sqlite3DbMa
124e0 6c 6c 6f 63 28 29 2c 20 75 73 69 6e 67 20 74 68  lloc(), using th
124f0 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e  e connection han
12500 64 6c 65 20 73 74 6f 72 65 64 20 69 6e 20 56 54  dle stored in VT
12510 61 62 6c 65 2e 64 62 20 61 73 0a 2a 2a 20 74 68  able.db as.** th
12520 65 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74  e first argument
12530 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 56 54 61 62  ..*/.struct VTab
12540 6c 65 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a  le {.  sqlite3 *
12550 64 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  db;             
12560 20 2f 2a 20 44 61 74 61 62 61 73 65 20 63 6f 6e   /* Database con
12570 6e 65 63 74 69 6f 6e 20 61 73 73 6f 63 69 61 74  nection associat
12580 65 64 20 77 69 74 68 20 74 68 69 73 20 74 61 62  ed with this tab
12590 6c 65 20 2a 2f 0a 20 20 4d 6f 64 75 6c 65 20 2a  le */.  Module *
125a0 70 4d 6f 64 3b 20 20 20 20 20 20 20 20 20 20 20  pMod;           
125b0 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
125c0 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74  module implement
125d0 61 74 69 6f 6e 20 2a 2f 0a 20 20 73 71 6c 69 74  ation */.  sqlit
125e0 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 20  e3_vtab *pVtab; 
125f0 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20       /* Pointer 
12600 74 6f 20 76 74 61 62 20 69 6e 73 74 61 6e 63 65  to vtab instance
12610 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20   */.  int nRef; 
12620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12630 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69  /* Number of poi
12640 6e 74 65 72 73 20 74 6f 20 74 68 69 73 20 73 74  nters to this st
12650 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 75 38 20  ructure */.  u8 
12660 62 43 6f 6e 73 74 72 61 69 6e 74 3b 20 20 20 20  bConstraint;    
12670 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
12680 66 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 61 72  f constraints ar
12690 65 20 73 75 70 70 6f 72 74 65 64 20 2a 2f 0a 20  e supported */. 
126a0 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 3b   int iSavepoint;
126b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65             /* De
126c0 70 74 68 20 6f 66 20 74 68 65 20 53 41 56 45 50  pth of the SAVEP
126d0 4f 49 4e 54 20 73 74 61 63 6b 20 2a 2f 0a 20 20  OINT stack */.  
126e0 56 54 61 62 6c 65 20 2a 70 4e 65 78 74 3b 20 20  VTable *pNext;  
126f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78            /* Nex
12700 74 20 69 6e 20 6c 69 6e 6b 65 64 20 6c 69 73 74  t in linked list
12710 20 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a   (see above) */.
12720 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 73 63  };../*.** The sc
12730 68 65 6d 61 20 66 6f 72 20 65 61 63 68 20 53 51  hema for each SQ
12740 4c 20 74 61 62 6c 65 20 61 6e 64 20 76 69 65 77  L table and view
12750 20 69 73 20 72 65 70 72 65 73 65 6e 74 65 64 20   is represented 
12760 69 6e 20 6d 65 6d 6f 72 79 0a 2a 2a 20 62 79 20  in memory.** by 
12770 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
12780 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
12790 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63  ucture..*/.struc
127a0 74 20 54 61 62 6c 65 20 7b 0a 20 20 63 68 61 72  t Table {.  char
127b0 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
127c0 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20   /* Name of the 
127d0 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20 2a 2f  table or view */
127e0 0a 20 20 43 6f 6c 75 6d 6e 20 2a 61 43 6f 6c 3b  .  Column *aCol;
127f0 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72          /* Infor
12800 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63  mation about eac
12810 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e  h column */.  In
12820 64 65 78 20 2a 70 49 6e 64 65 78 3b 20 20 20 20  dex *pIndex;    
12830 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 53 51     /* List of SQ
12840 4c 20 69 6e 64 65 78 65 73 20 6f 6e 20 74 68 69  L indexes on thi
12850 73 20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20 53 65  s table. */.  Se
12860 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20  lect *pSelect;  
12870 20 20 20 2f 2a 20 4e 55 4c 4c 20 66 6f 72 20 74     /* NULL for t
12880 61 62 6c 65 73 2e 20 20 50 6f 69 6e 74 73 20 74  ables.  Points t
12890 6f 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 66 20  o definition if 
128a0 61 20 76 69 65 77 2e 20 2a 2f 0a 20 20 46 4b 65  a view. */.  FKe
128b0 79 20 2a 70 46 4b 65 79 3b 20 20 20 20 20 20 20  y *pFKey;       
128c0 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74    /* Linked list
128d0 20 6f 66 20 61 6c 6c 20 66 6f 72 65 69 67 6e 20   of all foreign 
128e0 6b 65 79 73 20 69 6e 20 74 68 69 73 20 74 61 62  keys in this tab
128f0 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43  le */.  char *zC
12900 6f 6c 41 66 66 3b 20 20 20 20 20 20 20 2f 2a 20  olAff;       /* 
12910 53 74 72 69 6e 67 20 64 65 66 69 6e 69 6e 67 20  String defining 
12920 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20  the affinity of 
12930 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  each column */. 
12940 20 45 78 70 72 4c 69 73 74 20 2a 70 43 68 65 63   ExprList *pChec
12950 6b 3b 20 20 20 20 2f 2a 20 41 6c 6c 20 43 48 45  k;    /* All CHE
12960 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  CK constraints *
12970 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
12980 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 2e 2e           /*   ..
12990 2e 20 61 6c 73 6f 20 75 73 65 64 20 61 73 20 63  . also used as c
129a0 6f 6c 75 6d 6e 20 6e 61 6d 65 20 6c 69 73 74 20  olumn name list 
129b0 69 6e 20 61 20 56 49 45 57 20 2a 2f 0a 20 20 69  in a VIEW */.  i
129c0 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20 20 20 20  nt tnum;        
129d0 20 20 20 20 2f 2a 20 52 6f 6f 74 20 42 54 72 65      /* Root BTre
129e0 65 20 70 61 67 65 20 66 6f 72 20 74 68 69 73 20  e page for this 
129f0 74 61 62 6c 65 20 2a 2f 0a 20 20 75 33 32 20 6e  table */.  u32 n
12a00 54 61 62 52 65 66 3b 20 20 20 20 20 20 20 20 20  TabRef;         
12a10 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69  /* Number of poi
12a20 6e 74 65 72 73 20 74 6f 20 74 68 69 73 20 54 61  nters to this Ta
12a30 62 6c 65 20 2a 2f 0a 20 20 75 33 32 20 74 61 62  ble */.  u32 tab
12a40 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 2f 2a  Flags;        /*
12a50 20 4d 61 73 6b 20 6f 66 20 54 46 5f 2a 20 76 61   Mask of TF_* va
12a60 6c 75 65 73 20 2a 2f 0a 20 20 69 31 36 20 69 50  lues */.  i16 iP
12a70 4b 65 79 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Key;           /
12a80 2a 20 49 66 20 6e 6f 74 20 6e 65 67 61 74 69 76  * If not negativ
12a90 65 2c 20 75 73 65 20 61 43 6f 6c 5b 69 50 4b 65  e, use aCol[iPKe
12aa0 79 5d 20 61 73 20 74 68 65 20 72 6f 77 69 64 20  y] as the rowid 
12ab0 2a 2f 0a 20 20 69 31 36 20 6e 43 6f 6c 3b 20 20  */.  i16 nCol;  
12ac0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
12ad0 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
12ae0 6e 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  n this table */.
12af0 20 20 4c 6f 67 45 73 74 20 6e 52 6f 77 4c 6f 67    LogEst nRowLog
12b00 45 73 74 3b 20 20 20 2f 2a 20 45 73 74 69 6d 61  Est;   /* Estima
12b10 74 65 64 20 72 6f 77 73 20 69 6e 20 74 61 62 6c  ted rows in tabl
12b20 65 20 2d 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f  e - from sqlite_
12b30 73 74 61 74 31 20 74 61 62 6c 65 20 2a 2f 0a 20  stat1 table */. 
12b40 20 4c 6f 67 45 73 74 20 73 7a 54 61 62 52 6f 77   LogEst szTabRow
12b50 3b 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74  ;     /* Estimat
12b60 65 64 20 73 69 7a 65 20 6f 66 20 65 61 63 68 20  ed size of each 
12b70 74 61 62 6c 65 20 72 6f 77 20 69 6e 20 62 79 74  table row in byt
12b80 65 73 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  es */.#ifdef SQL
12b90 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 53 54 4d  ITE_ENABLE_COSTM
12ba0 55 4c 54 0a 20 20 4c 6f 67 45 73 74 20 63 6f 73  ULT.  LogEst cos
12bb0 74 4d 75 6c 74 3b 20 20 20 20 20 2f 2a 20 43 6f  tMult;     /* Co
12bc0 73 74 20 6d 75 6c 74 69 70 6c 69 65 72 20 66 6f  st multiplier fo
12bd0 72 20 75 73 69 6e 67 20 74 68 69 73 20 74 61 62  r using this tab
12be0 6c 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 75  le */.#endif.  u
12bf0 38 20 6b 65 79 43 6f 6e 66 3b 20 20 20 20 20 20  8 keyConf;      
12c00 20 20 20 20 2f 2a 20 57 68 61 74 20 74 6f 20 64      /* What to d
12c10 6f 20 69 6e 20 63 61 73 65 20 6f 66 20 75 6e 69  o in case of uni
12c20 71 75 65 6e 65 73 73 20 63 6f 6e 66 6c 69 63 74  queness conflict
12c30 20 6f 6e 20 69 50 4b 65 79 20 2a 2f 0a 23 69 66   on iPKey */.#if
12c40 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
12c50 5f 41 4c 54 45 52 54 41 42 4c 45 0a 20 20 69 6e  _ALTERTABLE.  in
12c60 74 20 61 64 64 43 6f 6c 4f 66 66 73 65 74 3b 20  t addColOffset; 
12c70 20 20 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e 20     /* Offset in 
12c80 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 6d  CREATE TABLE stm
12c90 74 20 74 6f 20 61 64 64 20 61 20 6e 65 77 20 63  t to add a new c
12ca0 6f 6c 75 6d 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a  olumn */.#endif.
12cb0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
12cc0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
12cd0 0a 20 20 69 6e 74 20 6e 4d 6f 64 75 6c 65 41 72  .  int nModuleAr
12ce0 67 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  g;      /* Numbe
12cf0 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74  r of arguments t
12d00 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20 2a 2f 0a  o the module */.
12d10 20 20 63 68 61 72 20 2a 2a 61 7a 4d 6f 64 75 6c    char **azModul
12d20 65 41 72 67 3b 20 20 2f 2a 20 30 3a 20 6d 6f 64  eArg;  /* 0: mod
12d30 75 6c 65 20 31 3a 20 73 63 68 65 6d 61 20 32 3a  ule 1: schema 2:
12d40 20 76 74 61 62 20 6e 61 6d 65 20 33 2e 2e 2e 3a   vtab name 3...:
12d50 20 61 72 67 73 20 2a 2f 0a 20 20 56 54 61 62 6c   args */.  VTabl
12d60 65 20 2a 70 56 54 61 62 6c 65 3b 20 20 20 20 20  e *pVTable;     
12d70 2f 2a 20 4c 69 73 74 20 6f 66 20 56 54 61 62 6c  /* List of VTabl
12d80 65 20 6f 62 6a 65 63 74 73 2e 20 2a 2f 0a 23 65  e objects. */.#e
12d90 6e 64 69 66 0a 20 20 54 72 69 67 67 65 72 20 2a  ndif.  Trigger *
12da0 70 54 72 69 67 67 65 72 3b 20 20 20 2f 2a 20 4c  pTrigger;   /* L
12db0 69 73 74 20 6f 66 20 74 72 69 67 67 65 72 73 20  ist of triggers 
12dc0 73 74 6f 72 65 64 20 69 6e 20 70 53 63 68 65 6d  stored in pSchem
12dd0 61 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70  a */.  Schema *p
12de0 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53  Schema;     /* S
12df0 63 68 65 6d 61 20 74 68 61 74 20 63 6f 6e 74 61  chema that conta
12e00 69 6e 73 20 74 68 69 73 20 74 61 62 6c 65 20 2a  ins this table *
12e10 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65 78 74  /.  Table *pNext
12e20 5a 6f 6d 62 69 65 3b 20 20 2f 2a 20 4e 65 78 74  Zombie;  /* Next
12e30 20 6f 6e 20 74 68 65 20 50 61 72 73 65 2e 70 5a   on the Parse.pZ
12e40 6f 6d 62 69 65 54 61 62 20 6c 69 73 74 20 2a 2f  ombieTab list */
12e50 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  .};../*.** Allow
12e60 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 54 61  ed values for Ta
12e70 62 6c 65 2e 74 61 62 46 6c 61 67 73 2e 0a 2a 2a  ble.tabFlags..**
12e80 0a 2a 2a 20 54 46 5f 4f 4f 4f 48 69 64 64 65 6e  .** TF_OOOHidden
12e90 20 61 70 70 6c 69 65 73 20 74 6f 20 74 61 62 6c   applies to tabl
12ea0 65 73 20 6f 72 20 76 69 65 77 20 74 68 61 74 20  es or view that 
12eb0 68 61 76 65 20 68 69 64 64 65 6e 20 63 6f 6c 75  have hidden colu
12ec0 6d 6e 73 20 74 68 61 74 20 61 72 65 0a 2a 2a 20  mns that are.** 
12ed0 66 6f 6c 6c 6f 77 65 64 20 62 79 20 6e 6f 6e 2d  followed by non-
12ee0 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 2e 20  hidden columns. 
12ef0 20 45 78 61 6d 70 6c 65 3a 20 20 22 43 52 45 41   Example:  "CREA
12f00 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45  TE VIRTUAL TABLE
12f10 20 78 20 55 53 49 4e 47 0a 2a 2a 20 76 74 61 62   x USING.** vtab
12f20 31 28 61 20 48 49 44 44 45 4e 2c 20 62 29 3b 22  1(a HIDDEN, b);"
12f30 2e 20 20 53 69 6e 63 65 20 22 62 22 20 69 73 20  .  Since "b" is 
12f40 61 20 6e 6f 6e 2d 68 69 64 64 65 6e 20 63 6f 6c  a non-hidden col
12f50 75 6d 6e 20 62 75 74 20 22 61 22 20 69 73 20 68  umn but "a" is h
12f60 69 64 64 65 6e 2c 0a 2a 2a 20 74 68 65 20 54 46  idden,.** the TF
12f70 5f 4f 4f 4f 48 69 64 64 65 6e 20 61 74 74 72 69  _OOOHidden attri
12f80 62 75 74 65 20 77 6f 75 6c 64 20 61 70 70 6c 79  bute would apply
12f90 20 69 6e 20 74 68 69 73 20 63 61 73 65 2e 20 20   in this case.  
12fa0 53 75 63 68 20 74 61 62 6c 65 73 20 72 65 71 75  Such tables requ
12fb0 69 72 65 0a 2a 2a 20 73 70 65 63 69 61 6c 20 68  ire.** special h
12fc0 61 6e 64 6c 69 6e 67 20 64 75 72 69 6e 67 20 49  andling during I
12fd0 4e 53 45 52 54 20 70 72 6f 63 65 73 73 69 6e 67  NSERT processing
12fe0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  ..*/.#define TF_
12ff0 52 65 61 64 6f 6e 6c 79 20 20 20 20 20 20 20 20  Readonly        
13000 30 78 30 30 30 31 20 20 20 20 2f 2a 20 52 65 61  0x0001    /* Rea
13010 64 2d 6f 6e 6c 79 20 73 79 73 74 65 6d 20 74 61  d-only system ta
13020 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54  ble */.#define T
13030 46 5f 45 70 68 65 6d 65 72 61 6c 20 20 20 20 20  F_Ephemeral     
13040 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a 20 41    0x0002    /* A
13050 6e 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c  n ephemeral tabl
13060 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  e */.#define TF_
13070 48 61 73 50 72 69 6d 61 72 79 4b 65 79 20 20 20  HasPrimaryKey   
13080 30 78 30 30 30 34 20 20 20 20 2f 2a 20 54 61 62  0x0004    /* Tab
13090 6c 65 20 68 61 73 20 61 20 70 72 69 6d 61 72 79  le has a primary
130a0 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20   key */.#define 
130b0 54 46 5f 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74  TF_Autoincrement
130c0 20 20 20 30 78 30 30 30 38 20 20 20 20 2f 2a 20     0x0008    /* 
130d0 49 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 20  Integer primary 
130e0 6b 65 79 20 69 73 20 61 75 74 6f 69 6e 63 72 65  key is autoincre
130f0 6d 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ment */.#define 
13100 54 46 5f 48 61 73 53 74 61 74 31 20 20 20 20 20  TF_HasStat1     
13110 20 20 20 30 78 30 30 31 30 20 20 20 20 2f 2a 20     0x0010    /* 
13120 6e 52 6f 77 4c 6f 67 45 73 74 20 73 65 74 20 66  nRowLogEst set f
13130 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61 74 31  rom sqlite_stat1
13140 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 57   */.#define TF_W
13150 69 74 68 6f 75 74 52 6f 77 69 64 20 20 20 20 30  ithoutRowid    0
13160 78 30 30 32 30 20 20 20 20 2f 2a 20 4e 6f 20 72  x0020    /* No r
13170 6f 77 69 64 2e 20 20 50 52 49 4d 41 52 59 20 4b  owid.  PRIMARY K
13180 45 59 20 69 73 20 74 68 65 20 6b 65 79 20 2a 2f  EY is the key */
13190 0a 23 64 65 66 69 6e 65 20 54 46 5f 4e 6f 56 69  .#define TF_NoVi
131a0 73 69 62 6c 65 52 6f 77 69 64 20 20 30 78 30 30  sibleRowid  0x00
131b0 34 30 20 20 20 20 2f 2a 20 4e 6f 20 75 73 65 72  40    /* No user
131c0 2d 76 69 73 69 62 6c 65 20 22 72 6f 77 69 64 22  -visible "rowid"
131d0 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 64 65 66 69   column */.#defi
131e0 6e 65 20 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20  ne TF_OOOHidden 
131f0 20 20 20 20 20 20 30 78 30 30 38 30 20 20 20 20        0x0080    
13200 2f 2a 20 4f 75 74 2d 6f 66 2d 4f 72 64 65 72 20  /* Out-of-Order 
13210 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 2a  hidden columns *
13220 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 53 74 61  /.#define TF_Sta
13230 74 73 55 73 65 64 20 20 20 20 20 20 20 30 78 30  tsUsed       0x0
13240 31 30 30 20 20 20 20 2f 2a 20 51 75 65 72 79 20  100    /* Query 
13250 70 6c 61 6e 6e 65 72 20 64 65 63 69 73 69 6f 6e  planner decision
13260 73 20 61 66 66 65 63 74 65 64 20 62 79 0a 20 20  s affected by.  
13270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13290 20 20 20 2a 2a 20 49 6e 64 65 78 2e 61 69 52 6f     ** Index.aiRo
132a0 77 4c 6f 67 45 73 74 5b 5d 20 76 61 6c 75 65 73  wLogEst[] values
132b0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 48   */.#define TF_H
132c0 61 73 4e 6f 74 4e 75 6c 6c 20 20 20 20 20 20 30  asNotNull      0
132d0 78 30 32 30 30 20 20 20 20 2f 2a 20 43 6f 6e 74  x0200    /* Cont
132e0 61 69 6e 73 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f  ains NOT NULL co
132f0 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 0a 2f 2a  nstraints */../*
13300 0a 2a 2a 20 54 65 73 74 20 74 6f 20 73 65 65 20  .** Test to see 
13310 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61  whether or not a
13320 20 74 61 62 6c 65 20 69 73 20 61 20 76 69 72 74   table is a virt
13330 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 69 73  ual table.  This
13340 20 69 73 0a 2a 2a 20 64 6f 6e 65 20 61 73 20 61   is.** done as a
13350 20 6d 61 63 72 6f 20 73 6f 20 74 68 61 74 20 69   macro so that i
13360 74 20 77 69 6c 6c 20 62 65 20 6f 70 74 69 6d 69  t will be optimi
13370 7a 65 64 20 6f 75 74 20 77 68 65 6e 20 76 69 72  zed out when vir
13380 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 73 75  tual.** table su
13390 70 70 6f 72 74 20 69 73 20 6f 6d 69 74 74 65 64  pport is omitted
133a0 20 66 72 6f 6d 20 74 68 65 20 62 75 69 6c 64 2e   from the build.
133b0 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
133c0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
133d0 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20 49  ABLE.#  define I
133e0 73 56 69 72 74 75 61 6c 28 58 29 20 20 20 20 20  sVirtual(X)     
133f0 20 28 28 58 29 2d 3e 6e 4d 6f 64 75 6c 65 41 72   ((X)->nModuleAr
13400 67 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69  g).#else.#  defi
13410 6e 65 20 49 73 56 69 72 74 75 61 6c 28 58 29 20  ne IsVirtual(X) 
13420 20 20 20 20 20 30 0a 23 65 6e 64 69 66 0a 0a 2f       0.#endif../
13430 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64  *.** Macros to d
13440 65 74 65 72 6d 69 6e 65 20 69 66 20 61 20 63 6f  etermine if a co
13450 6c 75 6d 6e 20 69 73 20 68 69 64 64 65 6e 2e 20  lumn is hidden. 
13460 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65   IsOrdinaryHidde
13470 6e 43 6f 6c 75 6d 6e 28 29 0a 2a 2a 20 6f 6e 6c  nColumn().** onl
13480 79 20 77 6f 72 6b 73 20 66 6f 72 20 6e 6f 6e 2d  y works for non-
13490 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 28  virtual tables (
134a0 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65 73 20  ordinary tables 
134b0 61 6e 64 20 76 69 65 77 73 29 20 61 6e 64 20 69  and views) and i
134c0 73 0a 2a 2a 20 61 6c 77 61 79 73 20 66 61 6c 73  s.** always fals
134d0 65 20 75 6e 6c 65 73 73 20 53 51 4c 49 54 45 5f  e unless SQLITE_
134e0 45 4e 41 42 4c 45 5f 48 49 44 44 45 4e 5f 43 4f  ENABLE_HIDDEN_CO
134f0 4c 55 4d 4e 53 20 69 73 20 64 65 66 69 6e 65 64  LUMNS is defined
13500 2e 20 20 54 68 65 0a 2a 2a 20 49 73 48 69 64 64  .  The.** IsHidd
13510 65 6e 43 6f 6c 75 6d 6e 28 29 20 6d 61 63 72 6f  enColumn() macro
13520 20 69 73 20 67 65 6e 65 72 61 6c 20 70 75 72 70   is general purp
13530 6f 73 65 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69  ose..*/.#if defi
13540 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
13550 45 5f 48 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53  E_HIDDEN_COLUMNS
13560 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48 69  ).#  define IsHi
13570 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 20 20  ddenColumn(X)   
13580 20 20 20 20 20 20 28 28 28 58 29 2d 3e 63 6f 6c        (((X)->col
13590 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f  Flags & COLFLAG_
135a0 48 49 44 44 45 4e 29 21 3d 30 29 0a 23 20 20 64  HIDDEN)!=0).#  d
135b0 65 66 69 6e 65 20 49 73 4f 72 64 69 6e 61 72 79  efine IsOrdinary
135c0 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20  HiddenColumn(X) 
135d0 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20  (((X)->colFlags 
135e0 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e  & COLFLAG_HIDDEN
135f0 29 21 3d 30 29 0a 23 65 6c 69 66 20 21 64 65 66  )!=0).#elif !def
13600 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
13610 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 23  _VIRTUALTABLE).#
13620 20 20 64 65 66 69 6e 65 20 49 73 48 69 64 64 65    define IsHidde
13630 6e 43 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20 20  nColumn(X)      
13640 20 20 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61     (((X)->colFla
13650 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44  gs & COLFLAG_HID
13660 44 45 4e 29 21 3d 30 29 0a 23 20 20 64 65 66 69  DEN)!=0).#  defi
13670 6e 65 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64  ne IsOrdinaryHid
13680 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 30 0a 23  denColumn(X) 0.#
13690 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49  else.#  define I
136a0 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29  sHiddenColumn(X)
136b0 20 20 20 20 20 20 20 20 20 30 0a 23 20 20 64 65           0.#  de
136c0 66 69 6e 65 20 49 73 4f 72 64 69 6e 61 72 79 48  fine IsOrdinaryH
136d0 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 30  iddenColumn(X) 0
136e0 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20 44 6f 65  .#endif.../* Doe
136f0 73 20 74 68 65 20 74 61 62 6c 65 20 68 61 76 65  s the table have
13700 20 61 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66   a rowid */.#def
13710 69 6e 65 20 48 61 73 52 6f 77 69 64 28 58 29 20  ine HasRowid(X) 
13720 20 20 20 20 28 28 28 58 29 2d 3e 74 61 62 46 6c      (((X)->tabFl
13730 61 67 73 20 26 20 54 46 5f 57 69 74 68 6f 75 74  ags & TF_Without
13740 52 6f 77 69 64 29 3d 3d 30 29 0a 23 64 65 66 69  Rowid)==0).#defi
13750 6e 65 20 56 69 73 69 62 6c 65 52 6f 77 69 64 28  ne VisibleRowid(
13760 58 29 20 28 28 28 58 29 2d 3e 74 61 62 46 6c 61  X) (((X)->tabFla
13770 67 73 20 26 20 54 46 5f 4e 6f 56 69 73 69 62 6c  gs & TF_NoVisibl
13780 65 52 6f 77 69 64 29 3d 3d 30 29 0a 0a 2f 2a 0a  eRowid)==0)../*.
13790 2a 2a 20 45 61 63 68 20 66 6f 72 65 69 67 6e 20  ** Each foreign 
137a0 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20 69  key constraint i
137b0 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
137c0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
137d0 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20  tructure..**.** 
137e0 41 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 69 73  A foreign key is
137f0 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
13800 20 74 77 6f 20 74 61 62 6c 65 73 2e 20 20 54 68   two tables.  Th
13810 65 20 22 66 72 6f 6d 22 20 74 61 62 6c 65 20 69  e "from" table i
13820 73 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 74  s.** the table t
13830 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  hat contains the
13840 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75   REFERENCES clau
13850 73 65 20 74 68 61 74 20 63 72 65 61 74 65 73 20  se that creates 
13860 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b  the foreign.** k
13870 65 79 2e 20 20 54 68 65 20 22 74 6f 22 20 74 61  ey.  The "to" ta
13880 62 6c 65 20 69 73 20 74 68 65 20 74 61 62 6c 65  ble is the table
13890 20 74 68 61 74 20 69 73 20 6e 61 6d 65 64 20 69   that is named i
138a0 6e 20 74 68 65 20 52 45 46 45 52 45 4e 43 45 53  n the REFERENCES
138b0 20 63 6c 61 75 73 65 2e 0a 2a 2a 20 43 6f 6e 73   clause..** Cons
138c0 69 64 65 72 20 74 68 69 73 20 65 78 61 6d 70 6c  ider this exampl
138d0 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45  e:.**.**     CRE
138e0 41 54 45 20 54 41 42 4c 45 20 65 78 31 28 0a 2a  ATE TABLE ex1(.*
138f0 2a 20 20 20 20 20 20 20 61 20 49 4e 54 45 47 45  *       a INTEGE
13900 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 2a  R PRIMARY KEY,.*
13910 2a 20 20 20 20 20 20 20 62 20 49 4e 54 45 47 45  *       b INTEGE
13920 52 20 43 4f 4e 53 54 52 41 49 4e 54 20 66 6b 31  R CONSTRAINT fk1
13930 20 52 45 46 45 52 45 4e 43 45 53 20 65 78 32 28   REFERENCES ex2(
13940 78 29 0a 2a 2a 20 20 20 20 20 29 3b 0a 2a 2a 0a  x).**     );.**.
13950 2a 2a 20 46 6f 72 20 66 6f 72 65 69 67 6e 20 6b  ** For foreign k
13960 65 79 20 22 66 6b 31 22 2c 20 74 68 65 20 66 72  ey "fk1", the fr
13970 6f 6d 2d 74 61 62 6c 65 20 69 73 20 22 65 78 31  om-table is "ex1
13980 22 20 61 6e 64 20 74 68 65 20 74 6f 2d 74 61 62  " and the to-tab
13990 6c 65 20 69 73 20 22 65 78 32 22 2e 0a 2a 2a 20  le is "ex2"..** 
139a0 45 71 75 69 76 61 6c 65 6e 74 20 6e 61 6d 65 73  Equivalent names
139b0 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 66 72 6f 6d  :.**.**     from
139c0 2d 74 61 62 6c 65 20 3d 3d 20 63 68 69 6c 64 2d  -table == child-
139d0 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20 74  table.**       t
139e0 6f 2d 74 61 62 6c 65 20 3d 3d 20 70 61 72 65 6e  o-table == paren
139f0 74 2d 74 61 62 6c 65 0a 2a 2a 0a 2a 2a 20 45 61  t-table.**.** Ea
13a00 63 68 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c  ch REFERENCES cl
13a10 61 75 73 65 20 67 65 6e 65 72 61 74 65 73 20 61  ause generates a
13a20 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
13a30 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
13a40 63 74 75 72 65 0a 2a 2a 20 77 68 69 63 68 20 69  cture.** which i
13a50 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68  s attached to th
13a60 65 20 66 72 6f 6d 2d 74 61 62 6c 65 2e 20 20 54  e from-table.  T
13a70 68 65 20 74 6f 2d 74 61 62 6c 65 20 6e 65 65 64  he to-table need
13a80 20 6e 6f 74 20 65 78 69 73 74 20 77 68 65 6e 0a   not exist when.
13a90 2a 2a 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c  ** the from-tabl
13aa0 65 20 69 73 20 63 72 65 61 74 65 64 2e 20 20 54  e is created.  T
13ab0 68 65 20 65 78 69 73 74 65 6e 63 65 20 6f 66 20  he existence of 
13ac0 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69 73 20  the to-table is 
13ad0 6e 6f 74 20 63 68 65 63 6b 65 64 2e 0a 2a 2a 0a  not checked..**.
13ae0 2a 2a 20 54 68 65 20 6c 69 73 74 20 6f 66 20 61  ** The list of a
13af0 6c 6c 20 70 61 72 65 6e 74 73 20 66 6f 72 20 63  ll parents for c
13b00 68 69 6c 64 20 54 61 62 6c 65 20 58 20 69 73 20  hild Table X is 
13b10 68 65 6c 64 20 61 74 20 58 2e 70 46 4b 65 79 2e  held at X.pFKey.
13b20 0a 2a 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66  .**.** A list of
13b30 20 61 6c 6c 20 63 68 69 6c 64 72 65 6e 20 66 6f   all children fo
13b40 72 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 64 20  r a table named 
13b50 5a 20 28 77 68 69 63 68 20 6d 69 67 68 74 20 6e  Z (which might n
13b60 6f 74 20 65 76 65 6e 20 65 78 69 73 74 29 0a 2a  ot even exist).*
13b70 2a 20 69 73 20 68 65 6c 64 20 69 6e 20 53 63 68  * is held in Sch
13b80 65 6d 61 2e 66 6b 65 79 48 61 73 68 20 77 69 74  ema.fkeyHash wit
13b90 68 20 61 20 68 61 73 68 20 6b 65 79 20 6f 66 20  h a hash key of 
13ba0 5a 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 4b 65  Z..*/.struct FKe
13bb0 79 20 7b 0a 20 20 54 61 62 6c 65 20 2a 70 46 72  y {.  Table *pFr
13bc0 6f 6d 3b 20 20 20 20 20 2f 2a 20 54 61 62 6c 65  om;     /* Table
13bd0 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
13be0 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73  REFERENCES claus
13bf0 65 20 28 61 6b 61 3a 20 43 68 69 6c 64 29 20 2a  e (aka: Child) *
13c00 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 46  /.  FKey *pNextF
13c10 72 6f 6d 3b 20 20 2f 2a 20 4e 65 78 74 20 46 4b  rom;  /* Next FK
13c20 65 79 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  ey with the same
13c30 20 69 6e 20 70 46 72 6f 6d 2e 20 4e 65 78 74 20   in pFrom. Next 
13c40 70 61 72 65 6e 74 20 6f 66 20 70 46 72 6f 6d 20  parent of pFrom 
13c50 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 6f 3b 20  */.  char *zTo; 
13c60 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
13c70 66 20 74 61 62 6c 65 20 74 68 61 74 20 74 68 65  f table that the
13c80 20 6b 65 79 20 70 6f 69 6e 74 73 20 74 6f 20 28   key points to (
13c90 61 6b 61 3a 20 50 61 72 65 6e 74 29 20 2a 2f 0a  aka: Parent) */.
13ca0 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 54 6f 3b    FKey *pNextTo;
13cb0 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 74 68      /* Next with
13cc0 20 74 68 65 20 73 61 6d 65 20 7a 54 6f 2e 20 4e   the same zTo. N
13cd0 65 78 74 20 63 68 69 6c 64 20 6f 66 20 7a 54 6f  ext child of zTo
13ce0 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 50 72  . */.  FKey *pPr
13cf0 65 76 54 6f 3b 20 20 20 20 2f 2a 20 50 72 65 76  evTo;    /* Prev
13d00 69 6f 75 73 20 77 69 74 68 20 74 68 65 20 73 61  ious with the sa
13d10 6d 65 20 7a 54 6f 20 2a 2f 0a 20 20 69 6e 74 20  me zTo */.  int 
13d20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a  nCol;         /*
13d30 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
13d40 6e 73 20 69 6e 20 74 68 69 73 20 6b 65 79 20 2a  ns in this key *
13d50 2f 0a 20 20 2f 2a 20 45 56 3a 20 52 2d 33 30 33  /.  /* EV: R-303
13d60 32 33 2d 32 31 39 31 37 20 2a 2f 0a 20 20 75 38  23-21917 */.  u8
13d70 20 69 73 44 65 66 65 72 72 65 64 3b 20 20 20 20   isDeferred;    
13d80 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63 6f     /* True if co
13d90 6e 73 74 72 61 69 6e 74 20 63 68 65 63 6b 69 6e  nstraint checkin
13da0 67 20 69 73 20 64 65 66 65 72 72 65 64 20 74 69  g is deferred ti
13db0 6c 6c 20 43 4f 4d 4d 49 54 20 2a 2f 0a 20 20 75  ll COMMIT */.  u
13dc0 38 20 61 41 63 74 69 6f 6e 5b 32 5d 3b 20 20 20  8 aAction[2];   
13dd0 20 20 20 20 20 2f 2a 20 4f 4e 20 44 45 4c 45 54       /* ON DELET
13de0 45 20 61 6e 64 20 4f 4e 20 55 50 44 41 54 45 20  E and ON UPDATE 
13df0 61 63 74 69 6f 6e 73 2c 20 72 65 73 70 65 63 74  actions, respect
13e00 69 76 65 6c 79 20 2a 2f 0a 20 20 54 72 69 67 67  ively */.  Trigg
13e10 65 72 20 2a 61 70 54 72 69 67 67 65 72 5b 32 5d  er *apTrigger[2]
13e20 3b 2f 2a 20 54 72 69 67 67 65 72 73 20 66 6f 72  ;/* Triggers for
13e30 20 61 41 63 74 69 6f 6e 5b 5d 20 61 63 74 69 6f   aAction[] actio
13e40 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 73  ns */.  struct s
13e50 43 6f 6c 4d 61 70 20 7b 20 20 20 20 20 20 2f 2a  ColMap {      /*
13e60 20 4d 61 70 70 69 6e 67 20 6f 66 20 63 6f 6c 75   Mapping of colu
13e70 6d 6e 73 20 69 6e 20 70 46 72 6f 6d 20 74 6f 20  mns in pFrom to 
13e80 63 6f 6c 75 6d 6e 73 20 69 6e 20 7a 54 6f 20 2a  columns in zTo *
13e90 2f 0a 20 20 20 20 69 6e 74 20 69 46 72 6f 6d 3b  /.    int iFrom;
13ea0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
13eb0 6e 64 65 78 20 6f 66 20 63 6f 6c 75 6d 6e 20 69  ndex of column i
13ec0 6e 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 20 20 63  n pFrom */.    c
13ed0 68 61 72 20 2a 7a 43 6f 6c 3b 20 20 20 20 20 20  har *zCol;      
13ee0 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
13ef0 63 6f 6c 75 6d 6e 20 69 6e 20 7a 54 6f 2e 20 20  column in zTo.  
13f00 49 66 20 4e 55 4c 4c 20 75 73 65 20 50 52 49 4d  If NULL use PRIM
13f10 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 7d 20 61  ARY KEY */.  } a
13f20 43 6f 6c 5b 31 5d 3b 20 20 20 20 20 20 20 20 20  Col[1];         
13f30 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20     /* One entry 
13f40 66 6f 72 20 65 61 63 68 20 6f 66 20 6e 43 6f 6c  for each of nCol
13f50 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 7d 3b 0a 0a   columns */.};..
13f60 2f 2a 0a 2a 2a 20 53 51 4c 69 74 65 20 73 75 70  /*.** SQLite sup
13f70 70 6f 72 74 73 20 6d 61 6e 79 20 64 69 66 66 65  ports many diffe
13f80 72 65 6e 74 20 77 61 79 73 20 74 6f 20 72 65 73  rent ways to res
13f90 6f 6c 76 65 20 61 20 63 6f 6e 73 74 72 61 69 6e  olve a constrain
13fa0 74 0a 2a 2a 20 65 72 72 6f 72 2e 20 20 52 4f 4c  t.** error.  ROL
13fb0 4c 42 41 43 4b 20 70 72 6f 63 65 73 73 69 6e 67  LBACK processing
13fc0 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20 63 6f   means that a co
13fd0 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
13fe0 6f 6e 0a 2a 2a 20 63 61 75 73 65 73 20 74 68 65  on.** causes the
13ff0 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72   operation in pr
14000 6f 63 65 73 73 20 74 6f 20 66 61 69 6c 20 61 6e  ocess to fail an
14010 64 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e  d for the curren
14020 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a  t transaction.**
14030 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61   to be rolled ba
14040 63 6b 2e 20 20 41 42 4f 52 54 20 70 72 6f 63 65  ck.  ABORT proce
14050 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 65 20  ssing means the 
14060 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f  operation in pro
14070 63 65 73 73 0a 2a 2a 20 66 61 69 6c 73 20 61 6e  cess.** fails an
14080 64 20 61 6e 79 20 70 72 69 6f 72 20 63 68 61 6e  d any prior chan
14090 67 65 73 20 66 72 6f 6d 20 74 68 61 74 20 6f 6e  ges from that on
140a0 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65 20  e operation are 
140b0 62 61 63 6b 65 64 20 6f 75 74 2c 0a 2a 2a 20 62  backed out,.** b
140c0 75 74 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  ut the transacti
140d0 6f 6e 20 69 73 20 6e 6f 74 20 72 6f 6c 6c 65 64  on is not rolled
140e0 20 62 61 63 6b 2e 20 20 46 41 49 4c 20 70 72 6f   back.  FAIL pro
140f0 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68  cessing means th
14100 61 74 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 74  at.** the operat
14110 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73 20  ion in progress 
14120 73 74 6f 70 73 20 61 6e 64 20 72 65 74 75 72 6e  stops and return
14130 73 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 2e  s an error code.
14140 20 20 42 75 74 20 70 72 69 6f 72 0a 2a 2a 20 63    But prior.** c
14150 68 61 6e 67 65 73 20 64 75 65 20 74 6f 20 74 68  hanges due to th
14160 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e  e same operation
14170 20 61 72 65 20 6e 6f 74 20 62 61 63 6b 65 64 20   are not backed 
14180 6f 75 74 20 61 6e 64 20 6e 6f 20 72 6f 6c 6c 62  out and no rollb
14190 61 63 6b 0a 2a 2a 20 6f 63 63 75 72 73 2e 20 20  ack.** occurs.  
141a0 49 47 4e 4f 52 45 20 6d 65 61 6e 73 20 74 68 61  IGNORE means tha
141b0 74 20 74 68 65 20 70 61 72 74 69 63 75 6c 61 72  t the particular
141c0 20 72 6f 77 20 74 68 61 74 20 63 61 75 73 65 64   row that caused
141d0 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 0a   the constraint.
141e0 2a 2a 20 65 72 72 6f 72 20 69 73 20 6e 6f 74 20  ** error is not 
141f0 69 6e 73 65 72 74 65 64 20 6f 72 20 75 70 64 61  inserted or upda
14200 74 65 64 2e 20 20 50 72 6f 63 65 73 73 69 6e 67  ted.  Processing
14210 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e   continues and n
14220 6f 20 65 72 72 6f 72 0a 2a 2a 20 69 73 20 72 65  o error.** is re
14230 74 75 72 6e 65 64 2e 20 20 52 45 50 4c 41 43 45  turned.  REPLACE
14240 20 6d 65 61 6e 73 20 74 68 61 74 20 70 72 65 65   means that pree
14250 78 69 73 74 69 6e 67 20 64 61 74 61 62 61 73 65  xisting database
14260 20 72 6f 77 73 20 74 68 61 74 20 63 61 75 73 65   rows that cause
14270 64 0a 2a 2a 20 61 20 55 4e 49 51 55 45 20 63 6f  d.** a UNIQUE co
14280 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
14290 6f 6e 20 61 72 65 20 72 65 6d 6f 76 65 64 20 73  on are removed s
142a0 6f 20 74 68 61 74 20 74 68 65 20 6e 65 77 20 69  o that the new i
142b0 6e 73 65 72 74 20 6f 72 0a 2a 2a 20 75 70 64 61  nsert or.** upda
142c0 74 65 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 20  te can proceed. 
142d0 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74   Processing cont
142e0 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72 72  inues and no err
142f0 6f 72 20 69 73 20 72 65 70 6f 72 74 65 64 2e 0a  or is reported..
14300 2a 2a 0a 2a 2a 20 52 45 53 54 52 49 43 54 2c 20  **.** RESTRICT, 
14310 53 45 54 4e 55 4c 4c 2c 20 61 6e 64 20 43 41 53  SETNULL, and CAS
14320 43 41 44 45 20 61 63 74 69 6f 6e 73 20 61 70 70  CADE actions app
14330 6c 79 20 6f 6e 6c 79 20 74 6f 20 66 6f 72 65 69  ly only to forei
14340 67 6e 20 6b 65 79 73 2e 0a 2a 2a 20 52 45 53 54  gn keys..** REST
14350 52 49 43 54 20 69 73 20 74 68 65 20 73 61 6d 65  RICT is the same
14360 20 61 73 20 41 42 4f 52 54 20 66 6f 72 20 49 4d   as ABORT for IM
14370 4d 45 44 49 41 54 45 20 66 6f 72 65 69 67 6e 20  MEDIATE foreign 
14380 6b 65 79 73 20 61 6e 64 20 74 68 65 0a 2a 2a 20  keys and the.** 
14390 73 61 6d 65 20 61 73 20 52 4f 4c 4c 42 41 43 4b  same as ROLLBACK
143a0 20 66 6f 72 20 44 45 46 45 52 52 45 44 20 6b 65   for DEFERRED ke
143b0 79 73 2e 20 20 53 45 54 4e 55 4c 4c 20 6d 65 61  ys.  SETNULL mea
143c0 6e 73 20 74 68 61 74 20 74 68 65 20 66 6f 72 65  ns that the fore
143d0 69 67 6e 0a 2a 2a 20 6b 65 79 20 69 73 20 73 65  ign.** key is se
143e0 74 20 74 6f 20 4e 55 4c 4c 2e 20 20 43 41 53 43  t to NULL.  CASC
143f0 41 44 45 20 6d 65 61 6e 73 20 74 68 61 74 20 61  ADE means that a
14400 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54   DELETE or UPDAT
14410 45 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65 66 65  E of the.** refe
14420 72 65 6e 63 65 64 20 74 61 62 6c 65 20 72 6f 77  renced table row
14430 20 69 73 20 70 72 6f 70 61 67 61 74 65 64 20 69   is propagated i
14440 6e 74 6f 20 74 68 65 20 72 6f 77 20 74 68 61 74  nto the row that
14450 20 68 6f 6c 64 73 20 74 68 65 0a 2a 2a 20 66 6f   holds the.** fo
14460 72 65 69 67 6e 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a  reign key..**.**
14470 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   The following s
14480 79 6d 62 6f 6c 69 63 20 76 61 6c 75 65 73 20 61  ymbolic values a
14490 72 65 20 75 73 65 64 20 74 6f 20 72 65 63 6f 72  re used to recor
144a0 64 20 77 68 69 63 68 20 74 79 70 65 0a 2a 2a 20  d which type.** 
144b0 6f 66 20 61 63 74 69 6f 6e 20 74 6f 20 74 61 6b  of action to tak
144c0 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  e..*/.#define OE
144d0 5f 4e 6f 6e 65 20 20 20 20 20 30 20 20 20 2f 2a  _None     0   /*
144e0 20 54 68 65 72 65 20 69 73 20 6e 6f 20 63 6f 6e   There is no con
144f0 73 74 72 61 69 6e 74 20 74 6f 20 63 68 65 63 6b  straint to check
14500 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52   */.#define OE_R
14510 6f 6c 6c 62 61 63 6b 20 31 20 20 20 2f 2a 20 46  ollback 1   /* F
14520 61 69 6c 20 74 68 65 20 6f 70 65 72 61 74 69 6f  ail the operatio
14530 6e 20 61 6e 64 20 72 6f 6c 6c 62 61 63 6b 20 74  n and rollback t
14540 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a  he transaction *
14550 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 41 62 6f  /.#define OE_Abo
14560 72 74 20 20 20 20 32 20 20 20 2f 2a 20 42 61 63  rt    2   /* Bac
14570 6b 20 6f 75 74 20 63 68 61 6e 67 65 73 20 62 75  k out changes bu
14580 74 20 64 6f 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b  t do no rollback
14590 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a   transaction */.
145a0 23 64 65 66 69 6e 65 20 4f 45 5f 46 61 69 6c 20  #define OE_Fail 
145b0 20 20 20 20 33 20 20 20 2f 2a 20 53 74 6f 70 20      3   /* Stop 
145c0 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 62 75  the operation bu
145d0 74 20 6c 65 61 76 65 20 61 6c 6c 20 70 72 69 6f  t leave all prio
145e0 72 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65  r changes */.#de
145f0 66 69 6e 65 20 4f 45 5f 49 67 6e 6f 72 65 20 20  fine OE_Ignore  
14600 20 34 20 20 20 2f 2a 20 49 67 6e 6f 72 65 20 74   4   /* Ignore t
14610 68 65 20 65 72 72 6f 72 2e 20 44 6f 20 6e 6f 74  he error. Do not
14620 20 64 6f 20 74 68 65 20 49 4e 53 45 52 54 20 6f   do the INSERT o
14630 72 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66  r UPDATE */.#def
14640 69 6e 65 20 4f 45 5f 52 65 70 6c 61 63 65 20 20  ine OE_Replace  
14650 35 20 20 20 2f 2a 20 44 65 6c 65 74 65 20 65 78  5   /* Delete ex
14660 69 73 74 69 6e 67 20 72 65 63 6f 72 64 2c 20 74  isting record, t
14670 68 65 6e 20 64 6f 20 49 4e 53 45 52 54 20 6f 72  hen do INSERT or
14680 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69   UPDATE */.#defi
14690 6e 65 20 4f 45 5f 55 70 64 61 74 65 20 20 20 36  ne OE_Update   6
146a0 20 20 20 2f 2a 20 50 72 6f 63 65 73 73 20 61 73     /* Process as
146b0 20 61 20 44 4f 20 55 50 44 41 54 45 20 69 6e 20   a DO UPDATE in 
146c0 61 6e 20 75 70 73 65 72 74 20 2a 2f 0a 23 64 65  an upsert */.#de
146d0 66 69 6e 65 20 4f 45 5f 52 65 73 74 72 69 63 74  fine OE_Restrict
146e0 20 37 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74   7   /* OE_Abort
146f0 20 66 6f 72 20 49 4d 4d 45 44 49 41 54 45 2c 20   for IMMEDIATE, 
14700 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 66 6f 72 20  OE_Rollback for 
14710 44 45 46 45 52 52 45 44 20 2a 2f 0a 23 64 65 66  DEFERRED */.#def
14720 69 6e 65 20 4f 45 5f 53 65 74 4e 75 6c 6c 20 20  ine OE_SetNull  
14730 38 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20 66  8   /* Set the f
14740 6f 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75 65  oreign key value
14750 20 74 6f 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66   to NULL */.#def
14760 69 6e 65 20 4f 45 5f 53 65 74 44 66 6c 74 20 20  ine OE_SetDflt  
14770 39 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20 66  9   /* Set the f
14780 6f 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75 65  oreign key value
14790 20 74 6f 20 69 74 73 20 64 65 66 61 75 6c 74 20   to its default 
147a0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 43 61  */.#define OE_Ca
147b0 73 63 61 64 65 20 20 31 30 20 20 2f 2a 20 43 61  scade  10  /* Ca
147c0 73 63 61 64 65 20 74 68 65 20 63 68 61 6e 67 65  scade the change
147d0 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  s */.#define OE_
147e0 44 65 66 61 75 6c 74 20 20 31 31 20 20 2f 2a 20  Default  11  /* 
147f0 44 6f 20 77 68 61 74 65 76 65 72 20 74 68 65 20  Do whatever the 
14800 64 65 66 61 75 6c 74 20 61 63 74 69 6f 6e 20 69  default action i
14810 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  s */.../*.** An 
14820 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
14830 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
14840 75 72 65 20 69 73 20 70 61 73 73 65 64 20 61 73  ure is passed as
14850 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 61 72   the first.** ar
14860 67 75 6d 65 6e 74 20 74 6f 20 73 71 6c 69 74 65  gument to sqlite
14870 33 56 64 62 65 4b 65 79 43 6f 6d 70 61 72 65 20  3VdbeKeyCompare 
14880 61 6e 64 20 69 73 20 75 73 65 64 20 74 6f 20 63  and is used to c
14890 6f 6e 74 72 6f 6c 20 74 68 65 0a 2a 2a 20 63 6f  ontrol the.** co
148a0 6d 70 61 72 69 73 6f 6e 20 6f 66 20 74 68 65 20  mparison of the 
148b0 74 77 6f 20 69 6e 64 65 78 20 6b 65 79 73 2e 0a  two index keys..
148c0 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20  **.** Note that 
148d0 61 53 6f 72 74 4f 72 64 65 72 5b 5d 20 61 6e 64  aSortOrder[] and
148e0 20 61 43 6f 6c 6c 5b 5d 20 68 61 76 65 20 6e 46   aColl[] have nF
148f0 69 65 6c 64 2b 31 20 73 6c 6f 74 73 2e 20 20 54  ield+1 slots.  T
14900 68 65 72 65 0a 2a 2a 20 61 72 65 20 6e 46 69 65  here.** are nFie
14910 6c 64 20 73 6c 6f 74 73 20 66 6f 72 20 74 68 65  ld slots for the
14920 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 61 6e 20 69   columns of an i
14930 6e 64 65 78 20 74 68 65 6e 20 6f 6e 65 20 65 78  ndex then one ex
14940 74 72 61 20 73 6c 6f 74 0a 2a 2a 20 66 6f 72 20  tra slot.** for 
14950 74 68 65 20 72 6f 77 69 64 20 61 74 20 74 68 65  the rowid at the
14960 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20   end..*/.struct 
14970 4b 65 79 49 6e 66 6f 20 7b 0a 20 20 75 33 32 20  KeyInfo {.  u32 
14980 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20  nRef;           
14990 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 66  /* Number of ref
149a0 65 72 65 6e 63 65 73 20 74 6f 20 74 68 69 73 20  erences to this 
149b0 4b 65 79 49 6e 66 6f 20 6f 62 6a 65 63 74 20 2a  KeyInfo object *
149c0 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20  /.  u8 enc;     
149d0 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
149e0 65 6e 63 6f 64 69 6e 67 20 2d 20 6f 6e 65 20 6f  encoding - one o
149f0 66 20 74 68 65 20 53 51 4c 49 54 45 5f 55 54 46  f the SQLITE_UTF
14a00 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31  * values */.  u1
14a10 36 20 6e 4b 65 79 46 69 65 6c 64 3b 20 20 20 20  6 nKeyField;    
14a20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6b    /* Number of k
14a30 65 79 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  ey columns in th
14a40 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 31 36  e index */.  u16
14a50 20 6e 41 6c 6c 46 69 65 6c 64 3b 20 20 20 20 20   nAllField;     
14a60 20 2f 2a 20 54 6f 74 61 6c 20 63 6f 6c 75 6d 6e   /* Total column
14a70 73 2c 20 69 6e 63 6c 75 64 69 6e 67 20 6b 65 79  s, including key
14a80 20 70 6c 75 73 20 6f 74 68 65 72 73 20 2a 2f 0a   plus others */.
14a90 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20    sqlite3 *db;  
14aa0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74        /* The dat
14ab0 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
14ac0 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f   */.  u8 *aSortO
14ad0 72 64 65 72 3b 20 20 20 20 20 2f 2a 20 53 6f 72  rder;     /* Sor
14ae0 74 20 6f 72 64 65 72 20 66 6f 72 20 65 61 63 68  t order for each
14af0 20 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20 20 43 6f   column. */.  Co
14b00 6c 6c 53 65 71 20 2a 61 43 6f 6c 6c 5b 31 5d 3b  llSeq *aColl[1];
14b10 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73    /* Collating s
14b20 65 71 75 65 6e 63 65 20 66 6f 72 20 65 61 63 68  equence for each
14b30 20 74 65 72 6d 20 6f 66 20 74 68 65 20 6b 65 79   term of the key
14b40 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
14b50 69 73 20 6f 62 6a 65 63 74 20 68 6f 6c 64 73 20  is object holds 
14b60 61 20 72 65 63 6f 72 64 20 77 68 69 63 68 20 68  a record which h
14b70 61 73 20 62 65 65 6e 20 70 61 72 73 65 64 20 6f  as been parsed o
14b80 75 74 20 69 6e 74 6f 20 69 6e 64 69 76 69 64 75  ut into individu
14b90 61 6c 0a 2a 2a 20 66 69 65 6c 64 73 2c 20 66 6f  al.** fields, fo
14ba0 72 20 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f  r the purposes o
14bb0 66 20 64 6f 69 6e 67 20 61 20 63 6f 6d 70 61 72  f doing a compar
14bc0 69 73 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 20 72 65  ison..**.** A re
14bd0 63 6f 72 64 20 69 73 20 61 6e 20 6f 62 6a 65 63  cord is an objec
14be0 74 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  t that contains 
14bf0 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 66 69 65 6c  one or more fiel
14c00 64 73 20 6f 66 20 64 61 74 61 2e 0a 2a 2a 20 52  ds of data..** R
14c10 65 63 6f 72 64 73 20 61 72 65 20 75 73 65 64 20  ecords are used 
14c20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 63 6f 6e  to store the con
14c30 74 65 6e 74 20 6f 66 20 61 20 74 61 62 6c 65 20  tent of a table 
14c40 72 6f 77 20 61 6e 64 20 74 6f 20 73 74 6f 72 65  row and to store
14c50 0a 2a 2a 20 74 68 65 20 6b 65 79 20 6f 66 20 61  .** the key of a
14c60 6e 20 69 6e 64 65 78 2e 20 20 41 20 62 6c 6f 62  n index.  A blob
14c70 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20 72   encoding of a r
14c80 65 63 6f 72 64 20 69 73 20 63 72 65 61 74 65 64  ecord is created
14c90 20 62 79 0a 2a 2a 20 74 68 65 20 4f 50 5f 4d 61   by.** the OP_Ma
14ca0 6b 65 52 65 63 6f 72 64 20 6f 70 63 6f 64 65 20  keRecord opcode 
14cb0 6f 66 20 74 68 65 20 56 44 42 45 20 61 6e 64 20  of the VDBE and 
14cc0 69 73 20 64 69 73 61 73 73 65 6d 62 6c 65 64 20  is disassembled 
14cd0 62 79 20 74 68 65 0a 2a 2a 20 4f 50 5f 43 6f 6c  by the.** OP_Col
14ce0 75 6d 6e 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a  umn opcode..**.*
14cf0 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
14d00 20 74 68 69 73 20 6f 62 6a 65 63 74 20 73 65 72   this object ser
14d10 76 65 73 20 61 73 20 61 20 22 6b 65 79 22 20 66  ves as a "key" f
14d20 6f 72 20 64 6f 69 6e 67 20 61 20 73 65 61 72 63  or doing a searc
14d30 68 20 6f 6e 0a 2a 2a 20 61 6e 20 69 6e 64 65 78  h on.** an index
14d40 20 62 2b 74 72 65 65 2e 20 54 68 65 20 67 6f 61   b+tree. The goa
14d50 6c 20 6f 66 20 74 68 65 20 73 65 61 72 63 68 20  l of the search 
14d60 69 73 20 74 6f 20 66 69 6e 64 20 74 68 65 20 65  is to find the e
14d70 6e 74 72 79 20 74 68 61 74 0a 2a 2a 20 69 73 20  ntry that.** is 
14d80 63 6c 6f 73 65 64 20 74 6f 20 74 68 65 20 6b 65  closed to the ke
14d90 79 20 64 65 73 63 72 69 62 65 64 20 62 79 20 74  y described by t
14da0 68 69 73 20 6f 62 6a 65 63 74 2e 20 20 54 68 69  his object.  Thi
14db0 73 20 6f 62 6a 65 63 74 20 6d 69 67 68 74 20 68  s object might h
14dc0 6f 6c 64 0a 2a 2a 20 6a 75 73 74 20 61 20 70 72  old.** just a pr
14dd0 65 66 69 78 20 6f 66 20 74 68 65 20 6b 65 79 2e  efix of the key.
14de0 20 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20    The number of 
14df0 66 69 65 6c 64 73 20 69 73 20 67 69 76 65 6e 20  fields is given 
14e00 62 79 0a 2a 2a 20 70 4b 65 79 49 6e 66 6f 2d 3e  by.** pKeyInfo->
14e10 6e 46 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  nField..**.** Th
14e20 65 20 72 31 20 61 6e 64 20 72 32 20 66 69 65 6c  e r1 and r2 fiel
14e30 64 73 20 61 72 65 20 74 68 65 20 76 61 6c 75 65  ds are the value
14e40 73 20 74 6f 20 72 65 74 75 72 6e 20 69 66 20 74  s to return if t
14e50 68 69 73 20 6b 65 79 20 69 73 20 6c 65 73 73 20  his key is less 
14e60 74 68 61 6e 0a 2a 2a 20 6f 72 20 67 72 65 61 74  than.** or great
14e70 65 72 20 74 68 61 6e 20 61 20 6b 65 79 20 69 6e  er than a key in
14e80 20 74 68 65 20 62 74 72 65 65 2c 20 72 65 73 70   the btree, resp
14e90 65 63 74 69 76 65 6c 79 2e 20 20 54 68 65 73 65  ectively.  These
14ea0 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 0a 2a 2a   are normally.**
14eb0 20 2d 31 20 61 6e 64 20 2b 31 20 72 65 73 70 65   -1 and +1 respe
14ec0 63 74 69 76 65 6c 79 2c 20 62 75 74 20 6d 69 67  ctively, but mig
14ed0 68 74 20 62 65 20 69 6e 76 65 72 74 65 64 20 74  ht be inverted t
14ee0 6f 20 2b 31 20 61 6e 64 20 2d 31 20 69 66 20 74  o +1 and -1 if t
14ef0 68 65 20 62 2d 74 72 65 65 0a 2a 2a 20 69 73 20  he b-tree.** is 
14f00 69 6e 20 44 45 53 43 20 6f 72 64 65 72 2e 0a 2a  in DESC order..*
14f10 2a 0a 2a 2a 20 54 68 65 20 6b 65 79 20 63 6f 6d  *.** The key com
14f20 70 61 72 69 73 6f 6e 20 66 75 6e 63 74 69 6f 6e  parison function
14f30 73 20 61 63 74 75 61 6c 6c 79 20 72 65 74 75 72  s actually retur
14f40 6e 20 64 65 66 61 75 6c 74 5f 72 63 20 77 68 65  n default_rc whe
14f50 6e 20 74 68 65 79 20 66 69 6e 64 0a 2a 2a 20 61  n they find.** a
14f60 6e 20 65 71 75 61 6c 73 20 63 6f 6d 70 61 72 69  n equals compari
14f70 73 6f 6e 2e 20 20 64 65 66 61 75 6c 74 5f 72 63  son.  default_rc
14f80 20 63 61 6e 20 62 65 20 2d 31 2c 20 30 2c 20 6f   can be -1, 0, o
14f90 72 20 2b 31 2e 20 20 49 66 20 74 68 65 72 65 20  r +1.  If there 
14fa0 61 72 65 0a 2a 2a 20 6d 75 6c 74 69 70 6c 65 20  are.** multiple 
14fb0 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20 62  entries in the b
14fc0 2d 74 72 65 65 20 77 69 74 68 20 74 68 65 20 73  -tree with the s
14fd0 61 6d 65 20 6b 65 79 20 28 77 68 65 6e 20 6f 6e  ame key (when on
14fe0 6c 79 20 6c 6f 6f 6b 69 6e 67 0a 2a 2a 20 61 74  ly looking.** at
14ff0 20 74 68 65 20 66 69 72 73 74 20 70 4b 65 79 49   the first pKeyI
15000 6e 66 6f 2d 3e 6e 46 69 65 6c 64 73 2c 29 20 74  nfo->nFields,) t
15010 68 65 6e 20 64 65 66 61 75 6c 74 5f 72 63 20 63  hen default_rc c
15020 61 6e 20 62 65 20 73 65 74 20 74 6f 20 2d 31 20  an be set to -1 
15030 74 6f 0a 2a 2a 20 63 61 75 73 65 20 74 68 65 20  to.** cause the 
15040 73 65 61 72 63 68 20 74 6f 20 66 69 6e 64 20 74  search to find t
15050 68 65 20 6c 61 73 74 20 6d 61 74 63 68 2c 20 6f  he last match, o
15060 72 20 2b 31 20 74 6f 20 63 61 75 73 65 20 74 68  r +1 to cause th
15070 65 20 73 65 61 72 63 68 20 74 6f 0a 2a 2a 20 66  e search to.** f
15080 69 6e 64 20 74 68 65 20 66 69 72 73 74 20 6d 61  ind the first ma
15090 74 63 68 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6b  tch..**.** The k
150a0 65 79 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66 75  ey comparison fu
150b0 6e 63 74 69 6f 6e 73 20 77 69 6c 6c 20 73 65 74  nctions will set
150c0 20 65 71 53 65 65 6e 20 74 6f 20 74 72 75 65 20   eqSeen to true 
150d0 69 66 20 74 68 65 79 20 65 76 65 72 0a 2a 2a 20  if they ever.** 
150e0 67 65 74 20 61 6e 64 20 65 71 75 61 6c 20 72 65  get and equal re
150f0 73 75 6c 74 73 20 77 68 65 6e 20 63 6f 6d 70 61  sults when compa
15100 72 69 6e 67 20 74 68 69 73 20 73 74 72 75 63 74  ring this struct
15110 75 72 65 20 74 6f 20 61 20 62 2d 74 72 65 65 20  ure to a b-tree 
15120 72 65 63 6f 72 64 2e 0a 2a 2a 20 57 68 65 6e 20  record..** When 
15130 64 65 66 61 75 6c 74 5f 72 63 21 3d 30 2c 20 74  default_rc!=0, t
15140 68 65 20 73 65 61 72 63 68 20 6d 69 67 68 74 20  he search might 
15150 65 6e 64 20 75 70 20 6f 6e 20 74 68 65 20 72 65  end up on the re
15160 63 6f 72 64 20 69 6d 6d 65 64 69 61 74 65 6c 79  cord immediately
15170 0a 2a 2a 20 62 65 66 6f 72 65 20 74 68 65 20 66  .** before the f
15180 69 72 73 74 20 6d 61 74 63 68 20 6f 72 20 69 6d  irst match or im
15190 6d 65 64 69 61 74 65 6c 79 20 61 66 74 65 72 20  mediately after 
151a0 74 68 65 20 6c 61 73 74 20 6d 61 74 63 68 2e 20  the last match. 
151b0 20 54 68 65 0a 2a 2a 20 65 71 53 65 65 6e 20 66   The.** eqSeen f
151c0 69 65 6c 64 20 77 69 6c 6c 20 69 6e 64 69 63 61  ield will indica
151d0 74 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  te whether or no
151e0 74 20 61 6e 20 65 78 61 63 74 20 6d 61 74 63 68  t an exact match
151f0 20 65 78 69 73 74 73 20 69 6e 20 74 68 65 0a 2a   exists in the.*
15200 2a 20 62 2d 74 72 65 65 2e 0a 2a 2f 0a 73 74 72  * b-tree..*/.str
15210 75 63 74 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  uct UnpackedReco
15220 72 64 20 7b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a  rd {.  KeyInfo *
15230 70 4b 65 79 49 6e 66 6f 3b 20 20 2f 2a 20 43 6f  pKeyInfo;  /* Co
15240 6c 6c 61 74 69 6f 6e 20 61 6e 64 20 73 6f 72 74  llation and sort
15250 2d 6f 72 64 65 72 20 69 6e 66 6f 72 6d 61 74 69  -order informati
15260 6f 6e 20 2a 2f 0a 20 20 4d 65 6d 20 2a 61 4d 65  on */.  Mem *aMe
15270 6d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56  m;          /* V
15280 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e  alues */.  u16 n
15290 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20 2f  Field;         /
152a0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72  * Number of entr
152b0 69 65 73 20 69 6e 20 61 70 4d 65 6d 5b 5d 20 2a  ies in apMem[] *
152c0 2f 0a 20 20 69 38 20 64 65 66 61 75 6c 74 5f 72  /.  i8 default_r
152d0 63 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70 61  c;      /* Compa
152e0 72 69 73 6f 6e 20 72 65 73 75 6c 74 20 69 66 20  rison result if 
152f0 6b 65 79 73 20 61 72 65 20 65 71 75 61 6c 20 2a  keys are equal *
15300 2f 0a 20 20 75 38 20 65 72 72 43 6f 64 65 3b 20  /.  u8 errCode; 
15310 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72 6f 72          /* Error
15320 20 64 65 74 65 63 74 65 64 20 62 79 20 78 52 65   detected by xRe
15330 63 6f 72 64 43 6f 6d 70 61 72 65 20 28 43 4f 52  cordCompare (COR
15340 52 55 50 54 20 6f 72 20 4e 4f 4d 45 4d 29 20 2a  RUPT or NOMEM) *
15350 2f 0a 20 20 69 38 20 72 31 3b 20 20 20 20 20 20  /.  i8 r1;      
15360 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
15370 20 74 6f 20 72 65 74 75 72 6e 20 69 66 20 28 6c   to return if (l
15380 68 73 20 3c 20 72 68 73 29 20 2a 2f 0a 20 20 69  hs < rhs) */.  i
15390 38 20 72 32 3b 20 20 20 20 20 20 20 20 20 20 20  8 r2;           
153a0 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72     /* Value to r
153b0 65 74 75 72 6e 20 69 66 20 28 6c 68 73 20 3e 20  eturn if (lhs > 
153c0 72 68 73 29 20 2a 2f 0a 20 20 75 38 20 65 71 53  rhs) */.  u8 eqS
153d0 65 65 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  een;          /*
153e0 20 54 72 75 65 20 69 66 20 61 6e 20 65 71 75 61   True if an equa
153f0 6c 69 74 79 20 63 6f 6d 70 61 72 69 73 6f 6e 20  lity comparison 
15400 68 61 73 20 62 65 65 6e 20 73 65 65 6e 20 2a 2f  has been seen */
15410 0a 7d 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  .};.../*.** Each
15420 20 53 51 4c 20 69 6e 64 65 78 20 69 73 20 72 65   SQL index is re
15430 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d  presented in mem
15440 6f 72 79 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73  ory by an.** ins
15450 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
15460 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
15470 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6c 75  ..**.** The colu
15480 6d 6e 73 20 6f 66 20 74 68 65 20 74 61 62 6c 65  mns of the table
15490 20 74 68 61 74 20 61 72 65 20 74 6f 20 62 65 20   that are to be 
154a0 69 6e 64 65 78 65 64 20 61 72 65 20 64 65 73 63  indexed are desc
154b0 72 69 62 65 64 0a 2a 2a 20 62 79 20 74 68 65 20  ribed.** by the 
154c0 61 69 43 6f 6c 75 6d 6e 5b 5d 20 66 69 65 6c 64  aiColumn[] field
154d0 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
154e0 72 65 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65  re.  For example
154f0 2c 20 73 75 70 70 6f 73 65 0a 2a 2a 20 77 65 20  , suppose.** we 
15500 68 61 76 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69  have the followi
15510 6e 67 20 74 61 62 6c 65 20 61 6e 64 20 69 6e 64  ng table and ind
15520 65 78 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52  ex:.**.**     CR
15530 45 41 54 45 20 54 41 42 4c 45 20 45 78 31 28 63  EATE TABLE Ex1(c
15540 31 20 69 6e 74 2c 20 63 32 20 69 6e 74 2c 20 63  1 int, c2 int, c
15550 33 20 74 65 78 74 29 3b 0a 2a 2a 20 20 20 20 20  3 text);.**     
15560 43 52 45 41 54 45 20 49 4e 44 45 58 20 45 78 32  CREATE INDEX Ex2
15570 20 4f 4e 20 45 78 31 28 63 33 2c 63 31 29 3b 0a   ON Ex1(c3,c1);.
15580 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 54 61 62  **.** In the Tab
15590 6c 65 20 73 74 72 75 63 74 75 72 65 20 64 65 73  le structure des
155a0 63 72 69 62 69 6e 67 20 45 78 31 2c 20 6e 43 6f  cribing Ex1, nCo
155b0 6c 3d 3d 33 20 62 65 63 61 75 73 65 20 74 68 65  l==3 because the
155c0 72 65 20 61 72 65 0a 2a 2a 20 74 68 72 65 65 20  re are.** three 
155d0 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74  columns in the t
155e0 61 62 6c 65 2e 20 20 49 6e 20 74 68 65 20 49 6e  able.  In the In
155f0 64 65 78 20 73 74 72 75 63 74 75 72 65 20 64 65  dex structure de
15600 73 63 72 69 62 69 6e 67 0a 2a 2a 20 45 78 32 2c  scribing.** Ex2,
15610 20 6e 43 6f 6c 75 6d 6e 3d 3d 32 20 73 69 6e 63   nColumn==2 sinc
15620 65 20 32 20 6f 66 20 74 68 65 20 33 20 63 6f 6c  e 2 of the 3 col
15630 75 6d 6e 73 20 6f 66 20 45 78 31 20 61 72 65 20  umns of Ex1 are 
15640 69 6e 64 65 78 65 64 2e 0a 2a 2a 20 54 68 65 20  indexed..** The 
15650 76 61 6c 75 65 20 6f 66 20 61 69 43 6f 6c 75 6d  value of aiColum
15660 6e 20 69 73 20 7b 32 2c 20 30 7d 2e 20 20 61 69  n is {2, 0}.  ai
15670 43 6f 6c 75 6d 6e 5b 30 5d 3d 3d 32 20 62 65 63  Column[0]==2 bec
15680 61 75 73 65 20 74 68 65 0a 2a 2a 20 66 69 72 73  ause the.** firs
15690 74 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69  t column to be i
156a0 6e 64 65 78 65 64 20 28 63 33 29 20 68 61 73 20  ndexed (c3) has 
156b0 61 6e 20 69 6e 64 65 78 20 6f 66 20 32 20 69 6e  an index of 2 in
156c0 20 45 78 31 2e 61 43 6f 6c 5b 5d 2e 0a 2a 2a 20   Ex1.aCol[]..** 
156d0 54 68 65 20 73 65 63 6f 6e 64 20 63 6f 6c 75 6d  The second colum
156e0 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20  n to be indexed 
156f0 28 63 31 29 20 68 61 73 20 61 6e 20 69 6e 64 65  (c1) has an inde
15700 78 20 6f 66 20 30 20 69 6e 0a 2a 2a 20 45 78 31  x of 0 in.** Ex1
15710 2e 61 43 6f 6c 5b 5d 2c 20 68 65 6e 63 65 20 45  .aCol[], hence E
15720 78 32 2e 61 69 43 6f 6c 75 6d 6e 5b 31 5d 3d 3d  x2.aiColumn[1]==
15730 30 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 6e 64  0..**.** The Ind
15740 65 78 2e 6f 6e 45 72 72 6f 72 20 66 69 65 6c 64  ex.onError field
15750 20 64 65 74 65 72 6d 69 6e 65 73 20 77 68 65 74   determines whet
15760 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 69  her or not the i
15770 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 73 0a 2a  ndexed columns.*
15780 2a 20 6d 75 73 74 20 62 65 20 75 6e 69 71 75 65  * must be unique
15790 20 61 6e 64 20 77 68 61 74 20 74 6f 20 64 6f 20   and what to do 
157a0 69 66 20 74 68 65 79 20 61 72 65 20 6e 6f 74 2e  if they are not.
157b0 20 20 57 68 65 6e 20 49 6e 64 65 78 2e 6f 6e 45    When Index.onE
157c0 72 72 6f 72 3d 4f 45 5f 4e 6f 6e 65 2c 0a 2a 2a  rror=OE_None,.**
157d0 20 69 74 20 6d 65 61 6e 73 20 74 68 69 73 20 69   it means this i
157e0 73 20 6e 6f 74 20 61 20 75 6e 69 71 75 65 20 69  s not a unique i
157f0 6e 64 65 78 2e 20 20 4f 74 68 65 72 77 69 73 65  ndex.  Otherwise
15800 20 69 74 20 69 73 20 61 20 75 6e 69 71 75 65 20   it is a unique 
15810 69 6e 64 65 78 0a 2a 2a 20 61 6e 64 20 74 68 65  index.** and the
15820 20 76 61 6c 75 65 20 6f 66 20 49 6e 64 65 78 2e   value of Index.
15830 6f 6e 45 72 72 6f 72 20 69 6e 64 69 63 61 74 65  onError indicate
15840 20 74 68 65 20 77 68 69 63 68 20 63 6f 6e 66 6c   the which confl
15850 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 0a 2a  ict resolution.*
15860 2a 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20 65  * algorithm to e
15870 6d 70 6c 6f 79 20 77 68 65 6e 65 76 65 72 20 61  mploy whenever a
15880 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64  n attempt is mad
15890 65 20 74 6f 20 69 6e 73 65 72 74 20 61 20 6e 6f  e to insert a no
158a0 6e 2d 75 6e 69 71 75 65 0a 2a 2a 20 65 6c 65 6d  n-unique.** elem
158b0 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 57 68 69 6c 65  ent..**.** While
158c0 20 70 61 72 73 69 6e 67 20 61 20 43 52 45 41 54   parsing a CREAT
158d0 45 20 54 41 42 4c 45 20 6f 72 20 43 52 45 41 54  E TABLE or CREAT
158e0 45 20 49 4e 44 45 58 20 73 74 61 74 65 6d 65 6e  E INDEX statemen
158f0 74 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a  t in order to.**
15900 20 67 65 6e 65 72 61 74 65 20 56 44 42 45 20 63   generate VDBE c
15910 6f 64 65 20 28 61 73 20 6f 70 70 6f 73 65 64 20  ode (as opposed 
15920 74 6f 20 70 61 72 73 69 6e 67 20 6f 6e 65 20 72  to parsing one r
15930 65 61 64 20 66 72 6f 6d 20 61 6e 20 73 71 6c 69  ead from an sqli
15940 74 65 5f 6d 61 73 74 65 72 0a 2a 2a 20 74 61 62  te_master.** tab
15950 6c 65 20 61 73 20 70 61 72 74 20 6f 66 20 70 61  le as part of pa
15960 72 73 69 6e 67 20 61 6e 20 65 78 69 73 74 69 6e  rsing an existin
15970 67 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  g database schem
15980 61 29 2c 20 74 72 61 6e 73 69 65 6e 74 20 69 6e  a), transient in
15990 73 74 61 6e 63 65 73 0a 2a 2a 20 6f 66 20 74 68  stances.** of th
159a0 69 73 20 73 74 72 75 63 74 75 72 65 20 6d 61 79  is structure may
159b0 20 62 65 20 63 72 65 61 74 65 64 2e 20 49 6e 20   be created. In 
159c0 74 68 69 73 20 63 61 73 65 20 74 68 65 20 49 6e  this case the In
159d0 64 65 78 2e 74 6e 75 6d 20 76 61 72 69 61 62 6c  dex.tnum variabl
159e0 65 20 69 73 0a 2a 2a 20 75 73 65 64 20 74 6f 20  e is.** used to 
159f0 73 74 6f 72 65 20 74 68 65 20 61 64 64 72 65 73  store the addres
15a00 73 20 6f 66 20 61 20 56 44 42 45 20 69 6e 73 74  s of a VDBE inst
15a10 72 75 63 74 69 6f 6e 2c 20 6e 6f 74 20 61 20 64  ruction, not a d
15a20 61 74 61 62 61 73 65 20 70 61 67 65 0a 2a 2a 20  atabase page.** 
15a30 6e 75 6d 62 65 72 20 28 69 74 20 63 61 6e 6e 6f  number (it canno
15a40 74 20 2d 20 74 68 65 20 64 61 74 61 62 61 73 65  t - the database
15a50 20 70 61 67 65 20 69 73 20 6e 6f 74 20 61 6c 6c   page is not all
15a60 6f 63 61 74 65 64 20 75 6e 74 69 6c 20 74 68 65  ocated until the
15a70 20 56 44 42 45 0a 2a 2a 20 70 72 6f 67 72 61 6d   VDBE.** program
15a80 20 69 73 20 65 78 65 63 75 74 65 64 29 2e 20 53   is executed). S
15a90 65 65 20 63 6f 6e 76 65 72 74 54 6f 57 69 74 68  ee convertToWith
15aa0 6f 75 74 52 6f 77 69 64 54 61 62 6c 65 28 29 20  outRowidTable() 
15ab0 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a  for details..*/.
15ac0 73 74 72 75 63 74 20 49 6e 64 65 78 20 7b 0a 20  struct Index {. 
15ad0 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
15ae0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
15af0 65 20 6f 66 20 74 68 69 73 20 69 6e 64 65 78 20  e of this index 
15b00 2a 2f 0a 20 20 69 31 36 20 2a 61 69 43 6f 6c 75  */.  i16 *aiColu
15b10 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  mn;           /*
15b20 20 57 68 69 63 68 20 63 6f 6c 75 6d 6e 73 20 61   Which columns a
15b30 72 65 20 75 73 65 64 20 62 79 20 74 68 69 73 20  re used by this 
15b40 69 6e 64 65 78 2e 20 20 31 73 74 20 69 73 20 30  index.  1st is 0
15b50 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 2a 61 69   */.  LogEst *ai
15b60 52 6f 77 4c 6f 67 45 73 74 3b 20 20 20 20 20 2f  RowLogEst;     /
15b70 2a 20 46 72 6f 6d 20 41 4e 41 4c 59 5a 45 3a 20  * From ANALYZE: 
15b80 45 73 74 2e 20 72 6f 77 73 20 73 65 6c 65 63 74  Est. rows select
15b90 65 64 20 62 79 20 65 61 63 68 20 63 6f 6c 75 6d  ed by each colum
15ba0 6e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54  n */.  Table *pT
15bb0 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  able;           
15bc0 2f 2a 20 54 68 65 20 53 51 4c 20 74 61 62 6c 65  /* The SQL table
15bd0 20 62 65 69 6e 67 20 69 6e 64 65 78 65 64 20 2a   being indexed *
15be0 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66  /.  char *zColAf
15bf0 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  f;           /* 
15c00 53 74 72 69 6e 67 20 64 65 66 69 6e 69 6e 67 20  String defining 
15c10 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20  the affinity of 
15c20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  each column */. 
15c30 20 49 6e 64 65 78 20 2a 70 4e 65 78 74 3b 20 20   Index *pNext;  
15c40 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
15c50 20 6e 65 78 74 20 69 6e 64 65 78 20 61 73 73 6f   next index asso
15c60 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20  ciated with the 
15c70 73 61 6d 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20  same table */.  
15c80 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
15c90 20 20 20 20 20 20 20 20 20 2f 2a 20 53 63 68 65           /* Sche
15ca0 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  ma containing th
15cb0 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38  is index */.  u8
15cc0 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20 20 20   *aSortOrder;   
15cd0 20 20 20 20 20 20 20 2f 2a 20 66 6f 72 20 65 61         /* for ea
15ce0 63 68 20 63 6f 6c 75 6d 6e 3a 20 54 72 75 65 3d  ch column: True=
15cf0 3d 44 45 53 43 2c 20 46 61 6c 73 65 3d 3d 41 53  =DESC, False==AS
15d00 43 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  C */.  const cha
15d10 72 20 2a 2a 61 7a 43 6f 6c 6c 3b 20 20 20 20 20  r **azColl;     
15d20 2f 2a 20 41 72 72 61 79 20 6f 66 20 63 6f 6c 6c  /* Array of coll
15d30 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 6e  ation sequence n
15d40 61 6d 65 73 20 66 6f 72 20 69 6e 64 65 78 20 2a  ames for index *
15d50 2f 0a 20 20 45 78 70 72 20 2a 70 50 61 72 74 49  /.  Expr *pPartI
15d60 64 78 57 68 65 72 65 3b 20 20 20 20 20 2f 2a 20  dxWhere;     /* 
15d70 57 48 45 52 45 20 63 6c 61 75 73 65 20 66 6f 72  WHERE clause for
15d80 20 70 61 72 74 69 61 6c 20 69 6e 64 69 63 65 73   partial indices
15d90 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
15da0 61 43 6f 6c 45 78 70 72 3b 20 20 20 20 20 20 2f  aColExpr;      /
15db0 2a 20 43 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73  * Column express
15dc0 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 74 6e  ions */.  int tn
15dd0 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  um;             
15de0 20 20 20 2f 2a 20 44 42 20 50 61 67 65 20 63 6f     /* DB Page co
15df0 6e 74 61 69 6e 69 6e 67 20 72 6f 6f 74 20 6f 66  ntaining root of
15e00 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20   this index */. 
15e10 20 4c 6f 67 45 73 74 20 73 7a 49 64 78 52 6f 77   LogEst szIdxRow
15e20 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 45 73 74  ;         /* Est
15e30 69 6d 61 74 65 64 20 61 76 65 72 61 67 65 20 72  imated average r
15e40 6f 77 20 73 69 7a 65 20 69 6e 20 62 79 74 65 73  ow size in bytes
15e50 20 2a 2f 0a 20 20 75 31 36 20 6e 4b 65 79 43 6f   */.  u16 nKeyCo
15e60 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  l;             /
15e70 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
15e80 6d 6e 73 20 66 6f 72 6d 69 6e 67 20 74 68 65 20  mns forming the 
15e90 6b 65 79 20 2a 2f 0a 20 20 75 31 36 20 6e 43 6f  key */.  u16 nCo
15ea0 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20  lumn;           
15eb0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
15ec0 6f 6c 75 6d 6e 73 20 73 74 6f 72 65 64 20 69 6e  olumns stored in
15ed0 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20   the index */.  
15ee0 75 38 20 6f 6e 45 72 72 6f 72 3b 20 20 20 20 20  u8 onError;     
15ef0 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f 41           /* OE_A
15f00 62 6f 72 74 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c  bort, OE_Ignore,
15f10 20 4f 45 5f 52 65 70 6c 61 63 65 2c 20 6f 72 20   OE_Replace, or 
15f20 4f 45 5f 4e 6f 6e 65 20 2a 2f 0a 20 20 75 6e 73  OE_None */.  uns
15f30 69 67 6e 65 64 20 69 64 78 54 79 70 65 3a 32 3b  igned idxType:2;
15f40 20 20 20 20 20 20 2f 2a 20 31 3d 3d 55 4e 49 51        /* 1==UNIQ
15f50 55 45 2c 20 32 3d 3d 50 52 49 4d 41 52 59 20 4b  UE, 2==PRIMARY K
15f60 45 59 2c 20 30 3d 3d 43 52 45 41 54 45 20 49 4e  EY, 0==CREATE IN
15f70 44 45 58 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  DEX */.  unsigne
15f80 64 20 62 55 6e 6f 72 64 65 72 65 64 3a 31 3b 20  d bUnordered:1; 
15f90 20 20 2f 2a 20 55 73 65 20 74 68 69 73 20 69 6e    /* Use this in
15fa0 64 65 78 20 66 6f 72 20 3d 3d 20 6f 72 20 49 4e  dex for == or IN
15fb0 20 71 75 65 72 69 65 73 20 6f 6e 6c 79 20 2a 2f   queries only */
15fc0 0a 20 20 75 6e 73 69 67 6e 65 64 20 75 6e 69 71  .  unsigned uniq
15fd0 4e 6f 74 4e 75 6c 6c 3a 31 3b 20 20 2f 2a 20 54  NotNull:1;  /* T
15fe0 72 75 65 20 69 66 20 55 4e 49 51 55 45 20 61 6e  rue if UNIQUE an
15ff0 64 20 4e 4f 54 20 4e 55 4c 4c 20 66 6f 72 20 61  d NOT NULL for a
16000 6c 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20  ll columns */.  
16010 75 6e 73 69 67 6e 65 64 20 69 73 52 65 73 69 7a  unsigned isResiz
16020 65 64 3a 31 3b 20 20 20 20 2f 2a 20 54 72 75 65  ed:1;    /* True
16030 20 69 66 20 72 65 73 69 7a 65 49 6e 64 65 78 4f   if resizeIndexO
16040 62 6a 65 63 74 28 29 20 68 61 73 20 62 65 65 6e  bject() has been
16050 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20 75 6e 73   called */.  uns
16060 69 67 6e 65 64 20 69 73 43 6f 76 65 72 69 6e 67  igned isCovering
16070 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20 69 66  :1;   /* True if
16080 20 74 68 69 73 20 69 73 20 61 20 63 6f 76 65 72   this is a cover
16090 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75  ing index */.  u
160a0 6e 73 69 67 6e 65 64 20 6e 6f 53 6b 69 70 53 63  nsigned noSkipSc
160b0 61 6e 3a 31 3b 20 20 20 2f 2a 20 44 6f 20 6e 6f  an:1;   /* Do no
160c0 74 20 74 72 79 20 74 6f 20 75 73 65 20 73 6b 69  t try to use ski
160d0 70 2d 73 63 61 6e 20 69 66 20 74 72 75 65 20 2a  p-scan if true *
160e0 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 68 61 73  /.  unsigned has
160f0 53 74 61 74 31 3a 31 3b 20 20 20 20 20 2f 2a 20  Stat1:1;     /* 
16100 61 69 52 6f 77 4c 6f 67 45 73 74 20 76 61 6c 75  aiRowLogEst valu
16110 65 73 20 63 6f 6d 65 20 66 72 6f 6d 20 73 71 6c  es come from sql
16120 69 74 65 5f 73 74 61 74 31 20 2a 2f 0a 20 20 75  ite_stat1 */.  u
16130 6e 73 69 67 6e 65 64 20 62 4e 6f 51 75 65 72 79  nsigned bNoQuery
16140 3a 31 3b 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f  :1;     /* Do no
16150 74 20 75 73 65 20 74 68 69 73 20 69 6e 64 65 78  t use this index
16160 20 74 6f 20 6f 70 74 69 6d 69 7a 65 20 71 75 65   to optimize que
16170 72 69 65 73 20 2a 2f 0a 23 69 66 64 65 66 20 53  ries */.#ifdef S
16180 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
16190 54 33 5f 4f 52 5f 53 54 41 54 34 0a 20 20 69 6e  T3_OR_STAT4.  in
161a0 74 20 6e 53 61 6d 70 6c 65 3b 20 20 20 20 20 20  t nSample;      
161b0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
161c0 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20   of elements in 
161d0 61 53 61 6d 70 6c 65 5b 5d 20 2a 2f 0a 20 20 69  aSample[] */.  i
161e0 6e 74 20 6e 53 61 6d 70 6c 65 43 6f 6c 3b 20 20  nt nSampleCol;  
161f0 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20          /* Size 
16200 6f 66 20 49 6e 64 65 78 53 61 6d 70 6c 65 2e 61  of IndexSample.a
16210 6e 45 71 5b 5d 20 61 6e 64 20 73 6f 20 6f 6e 20  nEq[] and so on 
16220 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 41  */.  tRowcnt *aA
16230 76 67 45 71 3b 20 20 20 20 20 20 20 20 20 2f 2a  vgEq;         /*
16240 20 41 76 65 72 61 67 65 20 6e 45 71 20 76 61 6c   Average nEq val
16250 75 65 73 20 66 6f 72 20 6b 65 79 73 20 6e 6f 74  ues for keys not
16260 20 69 6e 20 61 53 61 6d 70 6c 65 20 2a 2f 0a 20   in aSample */. 
16270 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 2a 61 53   IndexSample *aS
16280 61 6d 70 6c 65 3b 20 20 20 20 2f 2a 20 53 61 6d  ample;    /* Sam
16290 70 6c 65 73 20 6f 66 20 74 68 65 20 6c 65 66 74  ples of the left
162a0 2d 6d 6f 73 74 20 6b 65 79 20 2a 2f 0a 20 20 74  -most key */.  t
162b0 52 6f 77 63 6e 74 20 2a 61 69 52 6f 77 45 73 74  Rowcnt *aiRowEst
162c0 3b 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c  ;       /* Non-l
162d0 6f 67 61 72 69 74 68 6d 69 63 20 73 74 61 74 31  ogarithmic stat1
162e0 20 64 61 74 61 20 66 6f 72 20 74 68 69 73 20 69   data for this i
162f0 6e 64 65 78 20 2a 2f 0a 20 20 74 52 6f 77 63 6e  ndex */.  tRowcn
16300 74 20 6e 52 6f 77 45 73 74 30 3b 20 20 20 20 20  t nRowEst0;     
16310 20 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61 72 69     /* Non-logari
16320 74 68 6d 69 63 20 6e 75 6d 62 65 72 20 6f 66 20  thmic number of 
16330 72 6f 77 73 20 69 6e 20 74 68 65 20 69 6e 64 65  rows in the inde
16340 78 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a  x */.#endif.};..
16350 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61  /*.** Allowed va
16360 6c 75 65 73 20 66 6f 72 20 49 6e 64 65 78 2e 69  lues for Index.i
16370 64 78 54 79 70 65 0a 2a 2f 0a 23 64 65 66 69 6e  dxType.*/.#defin
16380 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45  e SQLITE_IDXTYPE
16390 5f 41 50 50 44 45 46 20 20 20 20 20 20 30 20 20  _APPDEF      0  
163a0 20 2f 2a 20 43 72 65 61 74 65 64 20 75 73 69 6e   /* Created usin
163b0 67 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a  g CREATE INDEX *
163c0 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
163d0 5f 49 44 58 54 59 50 45 5f 55 4e 49 51 55 45 20  _IDXTYPE_UNIQUE 
163e0 20 20 20 20 20 31 20 20 20 2f 2a 20 49 6d 70 6c       1   /* Impl
163f0 65 6d 65 6e 74 73 20 61 20 55 4e 49 51 55 45 20  ements a UNIQUE 
16400 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64  constraint */.#d
16410 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58  efine SQLITE_IDX
16420 54 59 50 45 5f 50 52 49 4d 41 52 59 4b 45 59 20  TYPE_PRIMARYKEY 
16430 20 32 20 20 20 2f 2a 20 49 73 20 74 68 65 20 50   2   /* Is the P
16440 52 49 4d 41 52 59 20 4b 45 59 20 66 6f 72 20 74  RIMARY KEY for t
16450 68 65 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 20  he table */../* 
16460 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 69  Return true if i
16470 6e 64 65 78 20 58 20 69 73 20 61 20 50 52 49 4d  ndex X is a PRIM
16480 41 52 59 20 4b 45 59 20 69 6e 64 65 78 20 2a 2f  ARY KEY index */
16490 0a 23 64 65 66 69 6e 65 20 49 73 50 72 69 6d 61  .#define IsPrima
164a0 72 79 4b 65 79 49 6e 64 65 78 28 58 29 20 20 28  ryKeyIndex(X)  (
164b0 28 58 29 2d 3e 69 64 78 54 79 70 65 3d 3d 53 51  (X)->idxType==SQ
164c0 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 50 52 49  LITE_IDXTYPE_PRI
164d0 4d 41 52 59 4b 45 59 29 0a 0a 2f 2a 20 52 65 74  MARYKEY)../* Ret
164e0 75 72 6e 20 74 72 75 65 20 69 66 20 69 6e 64 65  urn true if inde
164f0 78 20 58 20 69 73 20 61 20 55 4e 49 51 55 45 20  x X is a UNIQUE 
16500 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65  index */.#define
16510 20 49 73 55 6e 69 71 75 65 49 6e 64 65 78 28 58   IsUniqueIndex(X
16520 29 20 20 20 20 20 20 28 28 58 29 2d 3e 6f 6e 45  )      ((X)->onE
16530 72 72 6f 72 21 3d 4f 45 5f 4e 6f 6e 65 29 0a 0a  rror!=OE_None)..
16540 2f 2a 20 54 68 65 20 49 6e 64 65 78 2e 61 69 43  /* The Index.aiC
16550 6f 6c 75 6d 6e 5b 5d 20 76 61 6c 75 65 73 20 61  olumn[] values a
16560 72 65 20 6e 6f 72 6d 61 6c 6c 79 20 70 6f 73 69  re normally posi
16570 74 69 76 65 20 69 6e 74 65 67 65 72 2e 20 20 42  tive integer.  B
16580 75 74 0a 2a 2a 20 74 68 65 72 65 20 61 72 65 20  ut.** there are 
16590 73 6f 6d 65 20 6e 65 67 61 74 69 76 65 20 76 61  some negative va
165a0 6c 75 65 73 20 74 68 61 74 20 68 61 76 65 20 73  lues that have s
165b0 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67 3a 0a  pecial meaning:.
165c0 2a 2f 0a 23 64 65 66 69 6e 65 20 58 4e 5f 52 4f  */.#define XN_RO
165d0 57 49 44 20 20 20 20 20 28 2d 31 29 20 20 20 20  WID     (-1)    
165e0 20 2f 2a 20 49 6e 64 65 78 65 64 20 63 6f 6c 75   /* Indexed colu
165f0 6d 6e 20 69 73 20 74 68 65 20 72 6f 77 69 64 20  mn is the rowid 
16600 2a 2f 0a 23 64 65 66 69 6e 65 20 58 4e 5f 45 58  */.#define XN_EX
16610 50 52 20 20 20 20 20 20 28 2d 32 29 20 20 20 20  PR      (-2)    
16620 20 2f 2a 20 49 6e 64 65 78 65 64 20 63 6f 6c 75   /* Indexed colu
16630 6d 6e 20 69 73 20 61 6e 20 65 78 70 72 65 73 73  mn is an express
16640 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61  ion */../*.** Ea
16650 63 68 20 73 61 6d 70 6c 65 20 73 74 6f 72 65 64  ch sample stored
16660 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73   in the sqlite_s
16670 74 61 74 33 20 74 61 62 6c 65 20 69 73 20 72 65  tat3 table is re
16680 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d  presented in mem
16690 6f 72 79 0a 2a 2a 20 75 73 69 6e 67 20 61 20 73  ory.** using a s
166a0 74 72 75 63 74 75 72 65 20 6f 66 20 74 68 69 73  tructure of this
166b0 20 74 79 70 65 2e 20 20 53 65 65 20 64 6f 63 75   type.  See docu
166c0 6d 65 6e 74 61 74 69 6f 6e 20 61 74 20 74 68 65  mentation at the
166d0 20 74 6f 70 20 6f 66 20 74 68 65 0a 2a 2a 20 61   top of the.** a
166e0 6e 61 6c 79 7a 65 2e 63 20 73 6f 75 72 63 65 20  nalyze.c source 
166f0 66 69 6c 65 20 66 6f 72 20 61 64 64 69 74 69 6f  file for additio
16700 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
16710 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64 65 78  .*/.struct Index
16720 53 61 6d 70 6c 65 20 7b 0a 20 20 76 6f 69 64 20  Sample {.  void 
16730 2a 70 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  *p;          /* 
16740 50 6f 69 6e 74 65 72 20 74 6f 20 73 61 6d 70 6c  Pointer to sampl
16750 65 64 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  ed record */.  i
16760 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20  nt n;           
16770 20 2f 2a 20 53 69 7a 65 20 6f 66 20 72 65 63 6f   /* Size of reco
16780 72 64 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20  rd in bytes */. 
16790 20 74 52 6f 77 63 6e 74 20 2a 61 6e 45 71 3b 20   tRowcnt *anEq; 
167a0 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65     /* Est. numbe
167b0 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20  r of rows where 
167c0 74 68 65 20 6b 65 79 20 65 71 75 61 6c 73 20 74  the key equals t
167d0 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20  his sample */.  
167e0 74 52 6f 77 63 6e 74 20 2a 61 6e 4c 74 3b 20 20  tRowcnt *anLt;  
167f0 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72    /* Est. number
16800 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20 6b   of rows where k
16810 65 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  ey is less than 
16820 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20  this sample */. 
16830 20 74 52 6f 77 63 6e 74 20 2a 61 6e 44 4c 74 3b   tRowcnt *anDLt;
16840 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65     /* Est. numbe
16850 72 20 6f 66 20 64 69 73 74 69 6e 63 74 20 6b 65  r of distinct ke
16860 79 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69  ys less than thi
16870 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a  s sample */.};..
16880 2f 2a 0a 2a 2a 20 45 61 63 68 20 74 6f 6b 65 6e  /*.** Each token
16890 20 63 6f 6d 69 6e 67 20 6f 75 74 20 6f 66 20 74   coming out of t
168a0 68 65 20 6c 65 78 65 72 20 69 73 20 61 6e 20 69  he lexer is an i
168b0 6e 73 74 61 6e 63 65 20 6f 66 0a 2a 2a 20 74 68  nstance of.** th
168c0 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 54  is structure.  T
168d0 6f 6b 65 6e 73 20 61 72 65 20 61 6c 73 6f 20 75  okens are also u
168e0 73 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 61  sed as part of a
168f0 6e 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2a  n expression..**
16900 0a 2a 2a 20 4e 6f 74 65 20 69 66 20 54 6f 6b 65  .** Note if Toke
16910 6e 2e 7a 3d 3d 30 20 74 68 65 6e 20 54 6f 6b 65  n.z==0 then Toke
16920 6e 2e 64 79 6e 20 61 6e 64 20 54 6f 6b 65 6e 2e  n.dyn and Token.
16930 6e 20 61 72 65 20 75 6e 64 65 66 69 6e 65 64 20  n are undefined 
16940 61 6e 64 0a 2a 2a 20 6d 61 79 20 63 6f 6e 74 61  and.** may conta
16950 69 6e 20 72 61 6e 64 6f 6d 20 76 61 6c 75 65 73  in random values
16960 2e 20 20 44 6f 20 6e 6f 74 20 6d 61 6b 65 20 61  .  Do not make a
16970 6e 79 20 61 73 73 75 6d 70 74 69 6f 6e 73 20 61  ny assumptions a
16980 62 6f 75 74 20 54 6f 6b 65 6e 2e 64 79 6e 0a 2a  bout Token.dyn.*
16990 2a 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 77 68  * and Token.n wh
169a0 65 6e 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 2e 0a 2a  en Token.z==0..*
169b0 2f 0a 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 7b  /.struct Token {
169c0 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
169d0 3b 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66  ;     /* Text of
169e0 20 74 68 65 20 74 6f 6b 65 6e 2e 20 20 4e 6f 74   the token.  Not
169f0 20 4e 55 4c 4c 2d 74 65 72 6d 69 6e 61 74 65 64   NULL-terminated
16a00 21 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  ! */.  unsigned 
16a10 69 6e 74 20 6e 3b 20 20 20 20 2f 2a 20 4e 75 6d  int n;    /* Num
16a20 62 65 72 20 6f 66 20 63 68 61 72 61 63 74 65 72  ber of character
16a30 73 20 69 6e 20 74 68 69 73 20 74 6f 6b 65 6e 20  s in this token 
16a40 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  */.};../*.** An 
16a50 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
16a60 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   structure conta
16a70 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ins information 
16a80 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61  needed to genera
16a90 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 61  te.** code for a
16aa0 20 53 45 4c 45 43 54 20 74 68 61 74 20 63 6f 6e   SELECT that con
16ab0 74 61 69 6e 73 20 61 67 67 72 65 67 61 74 65 20  tains aggregate 
16ac0 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a  functions..**.**
16ad0 20 49 66 20 45 78 70 72 2e 6f 70 3d 3d 54 4b 5f   If Expr.op==TK_
16ae0 41 47 47 5f 43 4f 4c 55 4d 4e 20 6f 72 20 54 4b  AGG_COLUMN or TK
16af0 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 74 68  _AGG_FUNCTION th
16b00 65 6e 20 45 78 70 72 2e 70 41 67 67 49 6e 66 6f  en Expr.pAggInfo
16b10 20 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72   is a.** pointer
16b20 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75   to this structu
16b30 72 65 2e 20 20 54 68 65 20 45 78 70 72 2e 69 43  re.  The Expr.iC
16b40 6f 6c 75 6d 6e 20 66 69 65 6c 64 20 69 73 20 74  olumn field is t
16b50 68 65 20 69 6e 64 65 78 20 69 6e 0a 2a 2a 20 41  he index in.** A
16b60 67 67 49 6e 66 6f 2e 61 43 6f 6c 5b 5d 20 6f 72  ggInfo.aCol[] or
16b70 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63 5b 5d   AggInfo.aFunc[]
16b80 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20   of information 
16b90 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61  needed to genera
16ba0 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 74  te.** code for t
16bb0 68 61 74 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  hat node..**.** 
16bc0 41 67 67 49 6e 66 6f 2e 70 47 72 6f 75 70 42 79  AggInfo.pGroupBy
16bd0 20 61 6e 64 20 41 67 67 49 6e 66 6f 2e 61 46 75   and AggInfo.aFu
16be0 6e 63 2e 70 45 78 70 72 20 70 6f 69 6e 74 20 74  nc.pExpr point t
16bf0 6f 20 66 69 65 6c 64 73 20 77 69 74 68 69 6e 20  o fields within 
16c00 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20  the.** original 
16c10 53 65 6c 65 63 74 20 73 74 72 75 63 74 75 72 65  Select structure
16c20 20 74 68 61 74 20 64 65 73 63 72 69 62 65 73 20   that describes 
16c30 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
16c40 6d 65 6e 74 2e 20 20 54 68 65 73 65 0a 2a 2a 20  ment.  These.** 
16c50 66 69 65 6c 64 73 20 64 6f 20 6e 6f 74 20 6e 65  fields do not ne
16c60 65 64 20 74 6f 20 62 65 20 66 72 65 65 64 20 77  ed to be freed w
16c70 68 65 6e 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67  hen deallocating
16c80 20 74 68 65 20 41 67 67 49 6e 66 6f 20 73 74 72   the AggInfo str
16c90 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63  ucture..*/.struc
16ca0 74 20 41 67 67 49 6e 66 6f 20 7b 0a 20 20 75 38  t AggInfo {.  u8
16cb0 20 64 69 72 65 63 74 4d 6f 64 65 3b 20 20 20 20   directMode;    
16cc0 20 20 20 20 20 20 2f 2a 20 44 69 72 65 63 74 20        /* Direct 
16cd0 72 65 6e 64 65 72 69 6e 67 20 6d 6f 64 65 20 6d  rendering mode m
16ce0 65 61 6e 73 20 74 61 6b 65 20 64 61 74 61 20 64  eans take data d
16cf0 69 72 65 63 74 6c 79 0a 20 20 20 20 20 20 20 20  irectly.        
16d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d10 20 20 2a 2a 20 66 72 6f 6d 20 73 6f 75 72 63 65    ** from source
16d20 20 74 61 62 6c 65 73 20 72 61 74 68 65 72 20 74   tables rather t
16d30 68 61 6e 20 66 72 6f 6d 20 61 63 63 75 6d 75 6c  han from accumul
16d40 61 74 6f 72 73 20 2a 2f 0a 20 20 75 38 20 75 73  ators */.  u8 us
16d50 65 53 6f 72 74 69 6e 67 49 64 78 3b 20 20 20 20  eSortingIdx;    
16d60 20 20 20 2f 2a 20 49 6e 20 64 69 72 65 63 74 20     /* In direct 
16d70 6d 6f 64 65 2c 20 72 65 66 65 72 65 6e 63 65 20  mode, reference 
16d80 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65  the sorting inde
16d90 78 20 72 61 74 68 65 72 0a 20 20 20 20 20 20 20  x rather.       
16da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16db0 20 20 20 2a 2a 20 74 68 61 6e 20 74 68 65 20 73     ** than the s
16dc0 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20  ource table */. 
16dd0 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64 78 3b   int sortingIdx;
16de0 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73           /* Curs
16df0 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65  or number of the
16e00 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a   sorting index *
16e10 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e 67 49  /.  int sortingI
16e20 64 78 50 54 61 62 3b 20 20 20 20 20 2f 2a 20 43  dxPTab;     /* C
16e30 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20  ursor number of 
16e40 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 2a 2f 0a  pseudo-table */.
16e50 20 20 69 6e 74 20 6e 53 6f 72 74 69 6e 67 43 6f    int nSortingCo
16e60 6c 75 6d 6e 3b 20 20 20 20 20 2f 2a 20 4e 75 6d  lumn;     /* Num
16e70 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
16e80 6e 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e  n the sorting in
16e90 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52  dex */.  int mnR
16ea0 65 67 2c 20 6d 78 52 65 67 3b 20 20 20 20 20 20  eg, mxReg;      
16eb0 20 2f 2a 20 52 61 6e 67 65 20 6f 66 20 72 65 67   /* Range of reg
16ec0 69 73 74 65 72 73 20 61 6c 6c 6f 63 61 74 65 64  isters allocated
16ed0 20 66 6f 72 20 61 43 6f 6c 20 61 6e 64 20 61 46   for aCol and aF
16ee0 75 6e 63 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  unc */.  ExprLis
16ef0 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20  t *pGroupBy;    
16f00 20 2f 2a 20 54 68 65 20 67 72 6f 75 70 20 62 79   /* The group by
16f10 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 73 74 72   clause */.  str
16f20 75 63 74 20 41 67 67 49 6e 66 6f 5f 63 6f 6c 20  uct AggInfo_col 
16f30 7b 20 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68  {    /* For each
16f40 20 63 6f 6c 75 6d 6e 20 75 73 65 64 20 69 6e 20   column used in 
16f50 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20 2a 2f  source tables */
16f60 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62  .    Table *pTab
16f70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
16f80 20 53 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f   Source table */
16f90 0a 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b  .    int iTable;
16fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
16fb0 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f   Cursor number o
16fc0 66 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62  f the source tab
16fd0 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43  le */.    int iC
16fe0 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20  olumn;          
16ff0 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d     /* Column num
17000 62 65 72 20 77 69 74 68 69 6e 20 74 68 65 20 73  ber within the s
17010 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20  ource table */. 
17020 20 20 20 69 6e 74 20 69 53 6f 72 74 65 72 43 6f     int iSorterCo
17030 6c 75 6d 6e 3b 20 20 20 20 20 20 20 2f 2a 20 43  lumn;       /* C
17040 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20  olumn number in 
17050 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65  the sorting inde
17060 78 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65  x */.    int iMe
17070 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
17080 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61    /* Memory loca
17090 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61  tion that acts a
170a0 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f  s accumulator */
170b0 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72  .    Expr *pExpr
170c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
170d0 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 65 78   The original ex
170e0 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 7d 20  pression */.  } 
170f0 2a 61 43 6f 6c 3b 0a 20 20 69 6e 74 20 6e 43 6f  *aCol;.  int nCo
17100 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20  lumn;           
17110 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73   /* Number of us
17120 65 64 20 65 6e 74 72 69 65 73 20 69 6e 20 61 43  ed entries in aC
17130 6f 6c 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 41  ol[] */.  int nA
17140 63 63 75 6d 75 6c 61 74 6f 72 3b 20 20 20 20 20  ccumulator;     
17150 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
17160 6f 6c 75 6d 6e 73 20 74 68 61 74 20 73 68 6f 77  olumns that show
17170 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
17180 6f 75 74 70 75 74 2e 0a 20 20 20 20 20 20 20 20  output..        
17190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
171a0 20 20 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20    ** Additional 
171b0 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64  columns are used
171c0 20 6f 6e 6c 79 20 61 73 20 70 61 72 61 6d 65 74   only as paramet
171d0 65 72 73 20 74 6f 0a 20 20 20 20 20 20 20 20 20  ers to.         
171e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
171f0 20 2a 2a 20 61 67 67 72 65 67 61 74 65 20 66 75   ** aggregate fu
17200 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72  nctions */.  str
17210 75 63 74 20 41 67 67 49 6e 66 6f 5f 66 75 6e 63  uct AggInfo_func
17220 20 7b 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68   {   /* For each
17230 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
17240 69 6f 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72 20  ion */.    Expr 
17250 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20  *pExpr;         
17260 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f      /* Expressio
17270 6e 20 65 6e 63 6f 64 69 6e 67 20 74 68 65 20 66  n encoding the f
17280 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 46  unction */.    F
17290 75 6e 63 44 65 66 20 2a 70 46 75 6e 63 3b 20 20  uncDef *pFunc;  
172a0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61          /* The a
172b0 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
172c0 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  n implementation
172d0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d   */.    int iMem
172e0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
172f0 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74   /* Memory locat
17300 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61 73  ion that acts as
17310 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a   accumulator */.
17320 20 20 20 20 69 6e 74 20 69 44 69 73 74 69 6e 63      int iDistinc
17330 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
17340 45 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20  Ephemeral table 
17350 75 73 65 64 20 74 6f 20 65 6e 66 6f 72 63 65 20  used to enforce 
17360 44 49 53 54 49 4e 43 54 20 2a 2f 0a 20 20 7d 20  DISTINCT */.  } 
17370 2a 61 46 75 6e 63 3b 0a 20 20 69 6e 74 20 6e 46  *aFunc;.  int nF
17380 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  unc;            
17390 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
173a0 6e 74 72 69 65 73 20 69 6e 20 61 46 75 6e 63 5b  ntries in aFunc[
173b0 5d 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  ] */.};../*.** T
173c0 68 65 20 64 61 74 61 74 79 70 65 20 79 6e 56 61  he datatype ynVa
173d0 72 20 69 73 20 61 20 73 69 67 6e 65 64 20 69 6e  r is a signed in
173e0 74 65 67 65 72 2c 20 65 69 74 68 65 72 20 31 36  teger, either 16
173f0 2d 62 69 74 20 6f 72 20 33 32 2d 62 69 74 2e 0a  -bit or 32-bit..
17400 2a 2a 20 55 73 75 61 6c 6c 79 20 69 74 20 69 73  ** Usually it is
17410 20 31 36 2d 62 69 74 73 2e 20 20 42 75 74 20 69   16-bits.  But i
17420 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52  f SQLITE_MAX_VAR
17430 49 41 42 4c 45 5f 4e 55 4d 42 45 52 20 69 73 20  IABLE_NUMBER is 
17440 67 72 65 61 74 65 72 0a 2a 2a 20 74 68 61 6e 20  greater.** than 
17450 33 32 37 36 37 20 77 65 20 68 61 76 65 20 74 6f  32767 we have to
17460 20 6d 61 6b 65 20 69 74 20 33 32 2d 62 69 74 2e   make it 32-bit.
17470 20 20 31 36 2d 62 69 74 20 69 73 20 70 72 65 66    16-bit is pref
17480 65 72 72 65 64 20 62 65 63 61 75 73 65 0a 2a 2a  erred because.**
17490 20 69 74 20 75 73 65 73 20 6c 65 73 73 20 6d 65   it uses less me
174a0 6d 6f 72 79 20 69 6e 20 74 68 65 20 45 78 70 72  mory in the Expr
174b0 20 6f 62 6a 65 63 74 2c 20 77 68 69 63 68 20 69   object, which i
174c0 73 20 61 20 62 69 67 20 6d 65 6d 6f 72 79 20 75  s a big memory u
174d0 73 65 72 0a 2a 2a 20 69 6e 20 73 79 73 74 65 6d  ser.** in system
174e0 73 20 77 69 74 68 20 6c 6f 74 73 20 6f 66 20 70  s with lots of p
174f0 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
17500 74 73 2e 20 20 41 6e 64 20 66 65 77 20 61 70 70  ts.  And few app
17510 6c 69 63 61 74 69 6f 6e 73 0a 2a 2a 20 6e 65 65  lications.** nee
17520 64 20 6d 6f 72 65 20 74 68 61 6e 20 61 62 6f 75  d more than abou
17530 74 20 31 30 20 6f 72 20 32 30 20 76 61 72 69 61  t 10 or 20 varia
17540 62 6c 65 73 2e 20 20 42 75 74 20 73 6f 6d 65 20  bles.  But some 
17550 65 78 74 72 65 6d 65 20 75 73 65 72 73 20 77 61  extreme users wa
17560 6e 74 0a 2a 2a 20 74 6f 20 68 61 76 65 20 70 72  nt.** to have pr
17570 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
17580 73 20 77 69 74 68 20 6f 76 65 72 20 33 32 37 36  s with over 3276
17590 37 20 76 61 72 69 61 62 6c 65 73 2c 20 61 6e 64  7 variables, and
175a0 20 66 6f 72 20 74 68 65 6d 0a 2a 2a 20 74 68 65   for them.** the
175b0 20 6f 70 74 69 6f 6e 20 69 73 20 61 76 61 69 6c   option is avail
175c0 61 62 6c 65 20 28 61 74 20 63 6f 6d 70 69 6c 65  able (at compile
175d0 2d 74 69 6d 65 29 2e 0a 2a 2f 0a 23 69 66 20 53  -time)..*/.#if S
175e0 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42  QLITE_MAX_VARIAB
175f0 4c 45 5f 4e 55 4d 42 45 52 3c 3d 33 32 37 36 37  LE_NUMBER<=32767
17600 0a 74 79 70 65 64 65 66 20 69 31 36 20 79 6e 56  .typedef i16 ynV
17610 61 72 3b 0a 23 65 6c 73 65 0a 74 79 70 65 64 65  ar;.#else.typede
17620 66 20 69 6e 74 20 79 6e 56 61 72 3b 0a 23 65 6e  f int ynVar;.#en
17630 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20  dif../*.** Each 
17640 6e 6f 64 65 20 6f 66 20 61 6e 20 65 78 70 72 65  node of an expre
17650 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 70 61 72  ssion in the par
17660 73 65 20 74 72 65 65 20 69 73 20 61 6e 20 69 6e  se tree is an in
17670 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69  stance.** of thi
17680 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a  s structure..**.
17690 2a 2a 20 45 78 70 72 2e 6f 70 20 69 73 20 74 68  ** Expr.op is th
176a0 65 20 6f 70 63 6f 64 65 2e 20 54 68 65 20 69 6e  e opcode. The in
176b0 74 65 67 65 72 20 70 61 72 73 65 72 20 74 6f 6b  teger parser tok
176c0 65 6e 20 63 6f 64 65 73 20 61 72 65 20 72 65 75  en codes are reu
176d0 73 65 64 0a 2a 2a 20 61 73 20 6f 70 63 6f 64 65  sed.** as opcode
176e0 73 20 68 65 72 65 2e 20 46 6f 72 20 65 78 61 6d  s here. For exam
176f0 70 6c 65 2c 20 74 68 65 20 70 61 72 73 65 72 20  ple, the parser 
17700 64 65 66 69 6e 65 73 20 54 4b 5f 47 45 20 74 6f  defines TK_GE to
17710 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a   be an integer.*
17720 2a 20 63 6f 64 65 20 72 65 70 72 65 73 65 6e 74  * code represent
17730 69 6e 67 20 74 68 65 20 22 3e 3d 22 20 6f 70 65  ing the ">=" ope
17740 72 61 74 6f 72 2e 20 54 68 69 73 20 73 61 6d 65  rator. This same
17750 20 69 6e 74 65 67 65 72 20 63 6f 64 65 20 69 73   integer code is
17760 20 72 65 75 73 65 64 0a 2a 2a 20 74 6f 20 72 65   reused.** to re
17770 70 72 65 73 65 6e 74 20 74 68 65 20 67 72 65 61  present the grea
17780 74 65 72 2d 74 68 61 6e 2d 6f 72 2d 65 71 75 61  ter-than-or-equa
17790 6c 2d 74 6f 20 6f 70 65 72 61 74 6f 72 20 69 6e  l-to operator in
177a0 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 0a   the expression.
177b0 2a 2a 20 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20 49  ** tree..**.** I
177c0 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
177d0 20 69 73 20 61 6e 20 53 51 4c 20 6c 69 74 65 72   is an SQL liter
177e0 61 6c 20 28 54 4b 5f 49 4e 54 45 47 45 52 2c 20  al (TK_INTEGER, 
177f0 54 4b 5f 46 4c 4f 41 54 2c 20 54 4b 5f 42 4c 4f  TK_FLOAT, TK_BLO
17800 42 2c 0a 2a 2a 20 6f 72 20 54 4b 5f 53 54 52 49  B,.** or TK_STRI
17810 4e 47 29 2c 20 74 68 65 6e 20 45 78 70 72 2e 74  NG), then Expr.t
17820 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68  oken contains th
17830 65 20 74 65 78 74 20 6f 66 20 74 68 65 20 53 51  e text of the SQ
17840 4c 20 6c 69 74 65 72 61 6c 2e 20 49 66 0a 2a 2a  L literal. If.**
17850 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
17860 69 73 20 61 20 76 61 72 69 61 62 6c 65 20 28 54  is a variable (T
17870 4b 5f 56 41 52 49 41 42 4c 45 29 2c 20 74 68 65  K_VARIABLE), the
17880 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e  n Expr.token con
17890 74 61 69 6e 73 20 74 68 65 0a 2a 2a 20 76 61 72  tains the.** var
178a0 69 61 62 6c 65 20 6e 61 6d 65 2e 20 46 69 6e 61  iable name. Fina
178b0 6c 6c 79 2c 20 69 66 20 74 68 65 20 65 78 70 72  lly, if the expr
178c0 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c  ession is an SQL
178d0 20 66 75 6e 63 74 69 6f 6e 20 28 54 4b 5f 46 55   function (TK_FU
178e0 4e 43 54 49 4f 4e 29 2c 0a 2a 2a 20 74 68 65 6e  NCTION),.** then
178f0 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74   Expr.token cont
17900 61 69 6e 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  ains the name of
17910 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a   the function..*
17920 2a 0a 2a 2a 20 45 78 70 72 2e 70 52 69 67 68 74  *.** Expr.pRight
17930 20 61 6e 64 20 45 78 70 72 2e 70 4c 65 66 74 20   and Expr.pLeft 
17940 61 72 65 20 74 68 65 20 6c 65 66 74 20 61 6e 64  are the left and
17950 20 72 69 67 68 74 20 73 75 62 65 78 70 72 65 73   right subexpres
17960 73 69 6f 6e 73 20 6f 66 20 61 0a 2a 2a 20 62 69  sions of a.** bi
17970 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 2e 20 45  nary operator. E
17980 69 74 68 65 72 20 6f 72 20 62 6f 74 68 20 6d 61  ither or both ma
17990 79 20 62 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a  y be NULL..**.**
179a0 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 69 73   Expr.x.pList is
179b0 20 61 20 6c 69 73 74 20 6f 66 20 61 72 67 75 6d   a list of argum
179c0 65 6e 74 73 20 69 66 20 74 68 65 20 65 78 70 72  ents if the expr
179d0 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c  ession is an SQL
179e0 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 61 20   function,.** a 
179f0 43 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20  CASE expression 
17a00 6f 72 20 61 6e 20 49 4e 20 65 78 70 72 65 73 73  or an IN express
17a10 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d 20  ion of the form 
17a20 22 3c 6c 68 73 3e 20 49 4e 20 28 3c 79 3e 2c 20  "<lhs> IN (<y>, 
17a30 3c 7a 3e 2e 2e 2e 29 22 2e 0a 2a 2a 20 45 78 70  <z>...)"..** Exp
17a40 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73 20 75  r.x.pSelect is u
17a50 73 65 64 20 69 66 20 74 68 65 20 65 78 70 72 65  sed if the expre
17a60 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62 2d 73  ssion is a sub-s
17a70 65 6c 65 63 74 20 6f 72 20 61 6e 20 65 78 70 72  elect or an expr
17a80 65 73 73 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65  ession of.** the
17a90 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20   form "<lhs> IN 
17aa0 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 20 49  (SELECT ...)". I
17ab0 66 20 74 68 65 20 45 50 5f 78 49 73 53 65 6c 65  f the EP_xIsSele
17ac0 63 74 20 62 69 74 20 69 73 20 73 65 74 20 69 6e  ct bit is set in
17ad0 20 74 68 65 0a 2a 2a 20 45 78 70 72 2e 66 6c 61   the.** Expr.fla
17ae0 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 45 78  gs mask, then Ex
17af0 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73 20  pr.x.pSelect is 
17b00 76 61 6c 69 64 2e 20 4f 74 68 65 72 77 69 73 65  valid. Otherwise
17b10 2c 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 69  , Expr.x.pList i
17b20 73 0a 2a 2a 20 76 61 6c 69 64 2e 0a 2a 2a 0a 2a  s.** valid..**.*
17b30 2a 20 41 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  * An expression 
17b40 6f 66 20 74 68 65 20 66 6f 72 6d 20 49 44 20 6f  of the form ID o
17b50 72 20 49 44 2e 49 44 20 72 65 66 65 72 73 20 74  r ID.ID refers t
17b60 6f 20 61 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20  o a column in a 
17b70 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20 73 75  table..** For su
17b80 63 68 20 65 78 70 72 65 73 73 69 6f 6e 73 2c 20  ch expressions, 
17b90 45 78 70 72 2e 6f 70 20 69 73 20 73 65 74 20 74  Expr.op is set t
17ba0 6f 20 54 4b 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20  o TK_COLUMN and 
17bb0 45 78 70 72 2e 69 54 61 62 6c 65 20 69 73 0a 2a  Expr.iTable is.*
17bc0 2a 20 74 68 65 20 69 6e 74 65 67 65 72 20 63 75  * the integer cu
17bd0 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 61  rsor number of a
17be0 20 56 44 42 45 20 63 75 72 73 6f 72 20 70 6f 69   VDBE cursor poi
17bf0 6e 74 69 6e 67 20 74 6f 20 74 68 61 74 20 74 61  nting to that ta
17c00 62 6c 65 20 61 6e 64 0a 2a 2a 20 45 78 70 72 2e  ble and.** Expr.
17c10 69 43 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20 63  iColumn is the c
17c20 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 66 6f 72  olumn number for
17c30 20 74 68 65 20 73 70 65 63 69 66 69 63 20 63 6f   the specific co
17c40 6c 75 6d 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a  lumn.  If the.**
17c50 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 75   expression is u
17c60 73 65 64 20 61 73 20 61 20 72 65 73 75 6c 74 20  sed as a result 
17c70 69 6e 20 61 6e 20 61 67 67 72 65 67 61 74 65 20  in an aggregate 
17c80 53 45 4c 45 43 54 2c 20 74 68 65 6e 20 74 68 65  SELECT, then the
17c90 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20 61 6c 73  .** value is als
17ca0 6f 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  o stored in the 
17cb0 45 78 70 72 2e 69 41 67 67 20 63 6f 6c 75 6d 6e  Expr.iAgg column
17cc0 20 69 6e 20 74 68 65 20 61 67 67 72 65 67 61 74   in the aggregat
17cd0 65 20 73 6f 20 74 68 61 74 0a 2a 2a 20 69 74 20  e so that.** it 
17ce0 63 61 6e 20 62 65 20 61 63 63 65 73 73 65 64 20  can be accessed 
17cf0 61 66 74 65 72 20 61 6c 6c 20 61 67 67 72 65 67  after all aggreg
17d00 61 74 65 73 20 61 72 65 20 63 6f 6d 70 75 74 65  ates are compute
17d10 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  d..**.** If the 
17d20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e  expression is an
17d30 20 75 6e 62 6f 75 6e 64 20 76 61 72 69 61 62 6c   unbound variabl
17d40 65 20 6d 61 72 6b 65 72 20 28 61 20 71 75 65 73  e marker (a ques
17d50 74 69 6f 6e 20 6d 61 72 6b 0a 2a 2a 20 63 68 61  tion mark.** cha
17d60 72 61 63 74 65 72 20 27 3f 27 20 69 6e 20 74 68  racter '?' in th
17d70 65 20 6f 72 69 67 69 6e 61 6c 20 53 51 4c 29 20  e original SQL) 
17d80 74 68 65 6e 20 74 68 65 20 45 78 70 72 2e 69 54  then the Expr.iT
17d90 61 62 6c 65 20 68 6f 6c 64 73 20 74 68 65 20 69  able holds the i
17da0 6e 64 65 78 0a 2a 2a 20 6e 75 6d 62 65 72 20 66  ndex.** number f
17db0 6f 72 20 74 68 61 74 20 76 61 72 69 61 62 6c 65  or that variable
17dc0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65  ..**.** If the e
17dd0 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 73  xpression is a s
17de0 75 62 71 75 65 72 79 20 74 68 65 6e 20 45 78 70  ubquery then Exp
17df0 72 2e 69 43 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20  r.iColumn holds 
17e00 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 72 65  an integer.** re
17e10 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20 63 6f  gister number co
17e20 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 72 65 73  ntaining the res
17e30 75 6c 74 20 6f 66 20 74 68 65 20 73 75 62 71 75  ult of the subqu
17e40 65 72 79 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20  ery.  If the.** 
17e50 73 75 62 71 75 65 72 79 20 67 69 76 65 73 20 61  subquery gives a
17e60 20 63 6f 6e 73 74 61 6e 74 20 72 65 73 75 6c 74   constant result
17e70 2c 20 74 68 65 6e 20 69 54 61 62 6c 65 20 69 73  , then iTable is
17e80 20 2d 31 2e 20 20 49 66 20 74 68 65 20 73 75 62   -1.  If the sub
17e90 71 75 65 72 79 0a 2a 2a 20 67 69 76 65 73 20 61  query.** gives a
17ea0 20 64 69 66 66 65 72 65 6e 74 20 61 6e 73 77 65   different answe
17eb0 72 20 61 74 20 64 69 66 66 65 72 65 6e 74 20 74  r at different t
17ec0 69 6d 65 73 20 64 75 72 69 6e 67 20 73 74 61 74  imes during stat
17ed0 65 6d 65 6e 74 20 70 72 6f 63 65 73 73 69 6e 67  ement processing
17ee0 0a 2a 2a 20 74 68 65 6e 20 69 54 61 62 6c 65 20  .** then iTable 
17ef0 69 73 20 74 68 65 20 61 64 64 72 65 73 73 20 6f  is the address o
17f00 66 20 61 20 73 75 62 72 6f 75 74 69 6e 65 20 74  f a subroutine t
17f10 68 61 74 20 63 6f 6d 70 75 74 65 73 20 74 68 65  hat computes the
17f20 20 73 75 62 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a   subquery..**.**
17f30 20 49 66 20 74 68 65 20 45 78 70 72 20 69 73 20   If the Expr is 
17f40 6f 66 20 74 79 70 65 20 4f 50 5f 43 6f 6c 75 6d  of type OP_Colum
17f50 6e 2c 20 61 6e 64 20 74 68 65 20 74 61 62 6c 65  n, and the table
17f60 20 69 74 20 69 73 20 73 65 6c 65 63 74 69 6e 67   it is selecting
17f70 20 66 72 6f 6d 0a 2a 2a 20 69 73 20 61 20 64 69   from.** is a di
17f80 73 6b 20 74 61 62 6c 65 20 6f 72 20 74 68 65 20  sk table or the 
17f90 22 6f 6c 64 2e 2a 22 20 70 73 65 75 64 6f 2d 74  "old.*" pseudo-t
17fa0 61 62 6c 65 2c 20 74 68 65 6e 20 70 54 61 62 20  able, then pTab 
17fb0 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a  points to the.**
17fc0 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74   corresponding t
17fd0 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 2e  able definition.
17fe0 0a 2a 2a 0a 2a 2a 20 41 4c 4c 4f 43 41 54 49 4f  .**.** ALLOCATIO
17ff0 4e 20 4e 4f 54 45 53 3a 0a 2a 2a 0a 2a 2a 20 45  N NOTES:.**.** E
18000 78 70 72 20 6f 62 6a 65 63 74 73 20 63 61 6e 20  xpr objects can 
18010 75 73 65 20 61 20 6c 6f 74 20 6f 66 20 6d 65 6d  use a lot of mem
18020 6f 72 79 20 73 70 61 63 65 20 69 6e 20 64 61 74  ory space in dat
18030 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20 20 54  abase schema.  T
18040 6f 0a 2a 2a 20 68 65 6c 70 20 72 65 64 75 63 65  o.** help reduce
18050 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65 6d   memory requirem
18060 65 6e 74 73 2c 20 73 6f 6d 65 74 69 6d 65 73 20  ents, sometimes 
18070 61 6e 20 45 78 70 72 20 6f 62 6a 65 63 74 20 77  an Expr object w
18080 69 6c 6c 20 62 65 0a 2a 2a 20 74 72 75 6e 63 61  ill be.** trunca
18090 74 65 64 2e 20 20 41 6e 64 20 74 6f 20 72 65 64  ted.  And to red
180a0 75 63 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  uce the number o
180b0 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  f memory allocat
180c0 69 6f 6e 73 2c 20 73 6f 6d 65 74 69 6d 65 73 0a  ions, sometimes.
180d0 2a 2a 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 45  ** two or more E
180e0 78 70 72 20 6f 62 6a 65 63 74 73 20 77 69 6c 6c  xpr objects will
180f0 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20   be stored in a 
18100 73 69 6e 67 6c 65 20 6d 65 6d 6f 72 79 20 61 6c  single memory al
18110 6c 6f 63 61 74 69 6f 6e 2c 0a 2a 2a 20 74 6f 67  location,.** tog
18120 65 74 68 65 72 20 77 69 74 68 20 45 78 70 72 2e  ether with Expr.
18130 7a 54 6f 6b 65 6e 20 73 74 72 69 6e 67 73 2e 0a  zToken strings..
18140 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 50 5f  **.** If the EP_
18150 52 65 64 75 63 65 64 20 61 6e 64 20 45 50 5f 54  Reduced and EP_T
18160 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 73 20 61  okenOnly flags a
18170 72 65 20 73 65 74 20 77 68 65 6e 0a 2a 2a 20 61  re set when.** a
18180 6e 20 45 78 70 72 20 6f 62 6a 65 63 74 20 69 73  n Expr object is
18190 20 74 72 75 6e 63 61 74 65 64 2e 20 20 57 68 65   truncated.  Whe
181a0 6e 20 45 50 5f 52 65 64 75 63 65 64 20 69 73 20  n EP_Reduced is 
181b0 73 65 74 2c 20 74 68 65 6e 20 61 6c 6c 0a 2a 2a  set, then all.**
181c0 20 74 68 65 20 63 68 69 6c 64 20 45 78 70 72 20   the child Expr 
181d0 6f 62 6a 65 63 74 73 20 69 6e 20 74 68 65 20 45  objects in the E
181e0 78 70 72 2e 70 4c 65 66 74 20 61 6e 64 20 45 78  xpr.pLeft and Ex
181f0 70 72 2e 70 52 69 67 68 74 20 73 75 62 74 72 65  pr.pRight subtre
18200 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 61 69  es.** are contai
18210 6e 65 64 20 77 69 74 68 69 6e 20 74 68 65 20 73  ned within the s
18220 61 6d 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  ame memory alloc
18230 61 74 69 6f 6e 2e 20 20 4e 6f 74 65 2c 20 68 6f  ation.  Note, ho
18240 77 65 76 65 72 2c 20 74 68 61 74 0a 2a 2a 20 74  wever, that.** t
18250 68 65 20 73 75 62 74 72 65 65 73 20 69 6e 20 45  he subtrees in E
18260 78 70 72 2e 78 2e 70 4c 69 73 74 20 6f 72 20 45  xpr.x.pList or E
18270 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 61 72  xpr.x.pSelect ar
18280 65 20 61 6c 77 61 79 73 20 73 65 70 61 72 61 74  e always separat
18290 65 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64  ely.** allocated
182a0 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20  , regardless of 
182b0 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 45  whether or not E
182c0 50 5f 52 65 64 75 63 65 64 20 69 73 20 73 65 74  P_Reduced is set
182d0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72  ..*/.struct Expr
182e0 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20   {.  u8 op;     
182f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
18300 70 65 72 61 74 69 6f 6e 20 70 65 72 66 6f 72 6d  peration perform
18310 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64 65 20  ed by this node 
18320 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69  */.  char affini
18330 74 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ty;         /* T
18340 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20 74  he affinity of t
18350 68 65 20 63 6f 6c 75 6d 6e 20 6f 72 20 30 20 69  he column or 0 i
18360 66 20 6e 6f 74 20 61 20 63 6f 6c 75 6d 6e 20 2a  f not a column *
18370 2f 0a 20 20 75 33 32 20 66 6c 61 67 73 3b 20 20  /.  u32 flags;  
18380 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61             /* Va
18390 72 69 6f 75 73 20 66 6c 61 67 73 2e 20 20 45 50  rious flags.  EP
183a0 5f 2a 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a  _* See below */.
183b0 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 63 68    union {.    ch
183c0 61 72 20 2a 7a 54 6f 6b 65 6e 3b 20 20 20 20 20  ar *zToken;     
183d0 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 76 61       /* Token va
183e0 6c 75 65 2e 20 5a 65 72 6f 20 74 65 72 6d 69 6e  lue. Zero termin
183f0 61 74 65 64 20 61 6e 64 20 64 65 71 75 6f 74 65  ated and dequote
18400 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 56 61  d */.    int iVa
18410 6c 75 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  lue;            
18420 2f 2a 20 4e 6f 6e 2d 6e 65 67 61 74 69 76 65 20  /* Non-negative 
18430 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 66  integer value if
18440 20 45 50 5f 49 6e 74 56 61 6c 75 65 20 2a 2f 0a   EP_IntValue */.
18450 20 20 7d 20 75 3b 0a 0a 20 20 2f 2a 20 49 66 20    } u;..  /* If 
18460 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79  the EP_TokenOnly
18470 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20   flag is set in 
18480 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20 6d  the Expr.flags m
18490 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a  ask, then no.  *
184a0 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c 6f 63  * space is alloc
184b0 61 74 65 64 20 66 6f 72 20 74 68 65 20 66 69 65  ated for the fie
184c0 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73 20 70  lds below this p
184d0 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70 74  oint. An attempt
184e0 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73 20   to.  ** access 
184f0 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74  them will result
18500 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74 20 6f   in a segfault o
18510 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20  r malfunction.. 
18520 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   ***************
18530 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18540 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18550 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18560 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 45 78 70 72 20  ******/..  Expr 
18570 2a 70 4c 65 66 74 3b 20 20 20 20 20 20 20 20 20  *pLeft;         
18580 20 20 2f 2a 20 4c 65 66 74 20 73 75 62 6e 6f 64    /* Left subnod
18590 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 52 69  e */.  Expr *pRi
185a0 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ght;          /*
185b0 20 52 69 67 68 74 20 73 75 62 6e 6f 64 65 20 2a   Right subnode *
185c0 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20  /.  union {.    
185d0 45 78 70 72 4c 69 73 74 20 2a 70 4c 69 73 74 3b  ExprList *pList;
185e0 20 20 20 20 20 2f 2a 20 6f 70 20 3d 20 49 4e 2c       /* op = IN,
185f0 20 45 58 49 53 54 53 2c 20 53 45 4c 45 43 54 2c   EXISTS, SELECT,
18600 20 43 41 53 45 2c 20 46 55 4e 43 54 49 4f 4e 2c   CASE, FUNCTION,
18610 20 42 45 54 57 45 45 4e 20 2a 2f 0a 20 20 20 20   BETWEEN */.    
18620 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b  Select *pSelect;
18630 20 20 20 20 20 2f 2a 20 45 50 5f 78 49 73 53 65       /* EP_xIsSe
18640 6c 65 63 74 20 61 6e 64 20 6f 70 20 3d 20 49 4e  lect and op = IN
18650 2c 20 45 58 49 53 54 53 2c 20 53 45 4c 45 43 54  , EXISTS, SELECT
18660 20 2a 2f 0a 20 20 7d 20 78 3b 0a 0a 20 20 2f 2a   */.  } x;..  /*
18670 20 49 66 20 74 68 65 20 45 50 5f 52 65 64 75 63   If the EP_Reduc
18680 65 64 20 66 6c 61 67 20 69 73 20 73 65 74 20 69  ed flag is set i
18690 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73  n the Expr.flags
186a0 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20   mask, then no. 
186b0 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c   ** space is all
186c0 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65 20 66  ocated for the f
186d0 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73  ields below this
186e0 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d   point. An attem
186f0 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73  pt to.  ** acces
18700 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75  s them will resu
18710 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74  lt in a segfault
18720 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e   or malfunction.
18730 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .  *************
18740 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18750 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18760 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18770 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 23 69 66 20 53  ********/..#if S
18780 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44  QLITE_MAX_EXPR_D
18790 45 50 54 48 3e 30 0a 20 20 69 6e 74 20 6e 48 65  EPTH>0.  int nHe
187a0 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 20  ight;           
187b0 2f 2a 20 48 65 69 67 68 74 20 6f 66 20 74 68 65  /* Height of the
187c0 20 74 72 65 65 20 68 65 61 64 65 64 20 62 79 20   tree headed by 
187d0 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 23 65 6e  this node */.#en
187e0 64 69 66 0a 20 20 69 6e 74 20 69 54 61 62 6c 65  dif.  int iTable
187f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
18800 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 75 72 73 6f  TK_COLUMN: curso
18810 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c  r number of tabl
18820 65 20 68 6f 6c 64 69 6e 67 20 63 6f 6c 75 6d 6e  e holding column
18830 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18840 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f            ** TK_
18850 52 45 47 49 53 54 45 52 3a 20 72 65 67 69 73 74  REGISTER: regist
18860 65 72 20 6e 75 6d 62 65 72 0a 20 20 20 20 20 20  er number.      
18870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18880 20 20 20 2a 2a 20 54 4b 5f 54 52 49 47 47 45 52     ** TK_TRIGGER
18890 3a 20 31 20 2d 3e 20 6e 65 77 2c 20 30 20 2d 3e  : 1 -> new, 0 ->
188a0 20 6f 6c 64 0a 20 20 20 20 20 20 20 20 20 20 20   old.           
188b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
188c0 20 45 50 5f 55 6e 6c 69 6b 65 6c 79 3a 20 20 31   EP_Unlikely:  1
188d0 33 34 32 31 37 37 32 38 20 74 69 6d 65 73 20 6c  34217728 times l
188e0 69 6b 65 6c 69 68 6f 6f 64 0a 20 20 20 20 20 20  ikelihood.      
188f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18900 20 20 20 2a 2a 20 54 4b 5f 53 45 4c 45 43 54 3a     ** TK_SELECT:
18910 20 31 73 74 20 72 65 67 69 73 74 65 72 20 6f 66   1st register of
18920 20 72 65 73 75 6c 74 20 76 65 63 74 6f 72 20 2a   result vector *
18930 2f 0a 20 20 79 6e 56 61 72 20 69 43 6f 6c 75 6d  /.  ynVar iColum
18940 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b  n;         /* TK
18950 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20  _COLUMN: column 
18960 69 6e 64 65 78 2e 20 20 2d 31 20 66 6f 72 20 72  index.  -1 for r
18970 6f 77 69 64 2e 0a 20 20 20 20 20 20 20 20 20 20  owid..          
18980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
18990 2a 20 54 4b 5f 56 41 52 49 41 42 4c 45 3a 20 76  * TK_VARIABLE: v
189a0 61 72 69 61 62 6c 65 20 6e 75 6d 62 65 72 20 28  ariable number (
189b0 61 6c 77 61 79 73 20 3e 3d 20 31 29 2e 0a 20 20  always >= 1)..  
189c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
189d0 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 53 45 4c         ** TK_SEL
189e0 45 43 54 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75  ECT_COLUMN: colu
189f0 6d 6e 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  mn of the result
18a00 20 76 65 63 74 6f 72 20 2a 2f 0a 20 20 69 31 36   vector */.  i16
18a10 20 69 41 67 67 3b 20 20 20 20 20 20 20 20 20 20   iAgg;          
18a20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 65 6e 74      /* Which ent
18a30 72 79 20 69 6e 20 70 41 67 67 49 6e 66 6f 2d 3e  ry in pAggInfo->
18a40 61 43 6f 6c 5b 5d 20 6f 72 20 2d 3e 61 46 75 6e  aCol[] or ->aFun
18a50 63 5b 5d 20 2a 2f 0a 20 20 69 31 36 20 69 52 69  c[] */.  i16 iRi
18a60 67 68 74 4a 6f 69 6e 54 61 62 6c 65 3b 20 20 20  ghtJoinTable;   
18a70 2f 2a 20 49 66 20 45 50 5f 46 72 6f 6d 4a 6f 69  /* If EP_FromJoi
18a80 6e 2c 20 74 68 65 20 72 69 67 68 74 20 74 61 62  n, the right tab
18a90 6c 65 20 6f 66 20 74 68 65 20 6a 6f 69 6e 20 2a  le of the join *
18aa0 2f 0a 20 20 75 38 20 6f 70 32 3b 20 20 20 20 20  /.  u8 op2;     
18ab0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b             /* TK
18ac0 5f 52 45 47 49 53 54 45 52 3a 20 6f 72 69 67 69  _REGISTER: origi
18ad0 6e 61 6c 20 76 61 6c 75 65 20 6f 66 20 45 78 70  nal value of Exp
18ae0 72 2e 6f 70 0a 20 20 20 20 20 20 20 20 20 20 20  r.op.           
18af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
18b00 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 74 68 65 20   TK_COLUMN: the 
18b10 76 61 6c 75 65 20 6f 66 20 70 35 20 66 6f 72 20  value of p5 for 
18b20 4f 50 5f 43 6f 6c 75 6d 6e 0a 20 20 20 20 20 20  OP_Column.      
18b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b40 20 20 20 2a 2a 20 54 4b 5f 41 47 47 5f 46 55 4e     ** TK_AGG_FUN
18b50 43 54 49 4f 4e 3a 20 6e 65 73 74 69 6e 67 20 64  CTION: nesting d
18b60 65 70 74 68 20 2a 2f 0a 20 20 41 67 67 49 6e 66  epth */.  AggInf
18b70 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20 20  o *pAggInfo;    
18b80 20 2f 2a 20 55 73 65 64 20 62 79 20 54 4b 5f 41   /* Used by TK_A
18b90 47 47 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 54 4b  GG_COLUMN and TK
18ba0 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 2a 2f  _AGG_FUNCTION */
18bb0 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20  .  Table *pTab; 
18bc0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62            /* Tab
18bd0 6c 65 20 66 6f 72 20 54 4b 5f 43 4f 4c 55 4d 4e  le for TK_COLUMN
18be0 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 20 43   expressions.  C
18bf0 61 6e 20 62 65 20 4e 55 4c 4c 0a 20 20 20 20 20  an be NULL.     
18c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c10 20 20 20 20 2a 2a 20 66 6f 72 20 61 20 63 6f 6c      ** for a col
18c20 75 6d 6e 20 6f 66 20 61 6e 20 69 6e 64 65 78 20  umn of an index 
18c30 6f 6e 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  on an expression
18c40 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
18c50 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20  e following are 
18c60 74 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20  the meanings of 
18c70 62 69 74 73 20 69 6e 20 74 68 65 20 45 78 70 72  bits in the Expr
18c80 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f  .flags field..*/
18c90 0a 23 64 65 66 69 6e 65 20 45 50 5f 46 72 6f 6d  .#define EP_From
18ca0 4a 6f 69 6e 20 20 30 78 30 30 30 30 30 31 20 2f  Join  0x000001 /
18cb0 2a 20 4f 72 69 67 69 6e 61 74 65 73 20 69 6e 20  * Originates in 
18cc0 4f 4e 2f 55 53 49 4e 47 20 63 6c 61 75 73 65 20  ON/USING clause 
18cd0 6f 66 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f  of outer join */
18ce0 0a 23 64 65 66 69 6e 65 20 45 50 5f 41 67 67 20  .#define EP_Agg 
18cf0 20 20 20 20 20 20 30 78 30 30 30 30 30 32 20 2f        0x000002 /
18d00 2a 20 43 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f  * Contains one o
18d10 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65  r more aggregate
18d20 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64   functions */.#d
18d30 65 66 69 6e 65 20 45 50 5f 48 61 73 46 75 6e 63  efine EP_HasFunc
18d40 20 20 20 30 78 30 30 30 30 30 34 20 2f 2a 20 43     0x000004 /* C
18d50 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d  ontains one or m
18d60 6f 72 65 20 66 75 6e 63 74 69 6f 6e 73 20 6f 66  ore functions of
18d70 20 61 6e 79 20 6b 69 6e 64 20 2a 2f 0a 20 20 20   any kind */.   
18d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
18d90 2a 20 30 78 30 30 30 30 30 38 20 2f 2f 20 61 76  * 0x000008 // av
18da0 61 69 6c 61 62 6c 65 20 66 6f 72 20 75 73 65 20  ailable for use 
18db0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 44 69  */.#define EP_Di
18dc0 73 74 69 6e 63 74 20 20 30 78 30 30 30 30 31 30  stinct  0x000010
18dd0 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66 75   /* Aggregate fu
18de0 6e 63 74 69 6f 6e 20 77 69 74 68 20 44 49 53 54  nction with DIST
18df0 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 2a 2f 0a  INCT keyword */.
18e00 23 64 65 66 69 6e 65 20 45 50 5f 56 61 72 53 65  #define EP_VarSe
18e10 6c 65 63 74 20 30 78 30 30 30 30 32 30 20 2f 2a  lect 0x000020 /*
18e20 20 70 53 65 6c 65 63 74 20 69 73 20 63 6f 72 72   pSelect is corr
18e30 65 6c 61 74 65 64 2c 20 6e 6f 74 20 63 6f 6e 73  elated, not cons
18e40 74 61 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tant */.#define 
18e50 45 50 5f 44 62 6c 51 75 6f 74 65 64 20 30 78 30  EP_DblQuoted 0x0
18e60 30 30 30 34 30 20 2f 2a 20 74 6f 6b 65 6e 2e 7a  00040 /* token.z
18e70 20 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20   was originally 
18e80 69 6e 20 22 2e 2e 2e 22 20 2a 2f 0a 23 64 65 66  in "..." */.#def
18e90 69 6e 65 20 45 50 5f 49 6e 66 69 78 46 75 6e 63  ine EP_InfixFunc
18ea0 20 30 78 30 30 30 30 38 30 20 2f 2a 20 54 72 75   0x000080 /* Tru
18eb0 65 20 66 6f 72 20 61 6e 20 69 6e 66 69 78 20 66  e for an infix f
18ec0 75 6e 63 74 69 6f 6e 3a 20 4c 49 4b 45 2c 20 47  unction: LIKE, G
18ed0 4c 4f 42 2c 20 65 74 63 20 2a 2f 0a 23 64 65 66  LOB, etc */.#def
18ee0 69 6e 65 20 45 50 5f 43 6f 6c 6c 61 74 65 20 20  ine EP_Collate  
18ef0 20 30 78 30 30 30 31 30 30 20 2f 2a 20 54 72 65   0x000100 /* Tre
18f00 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f  e contains a TK_
18f10 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72  COLLATE operator
18f20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 47   */.#define EP_G
18f30 65 6e 65 72 69 63 20 20 20 30 78 30 30 30 32 30  eneric   0x00020
18f40 30 20 2f 2a 20 49 67 6e 6f 72 65 20 43 4f 4c 4c  0 /* Ignore COLL
18f50 41 54 45 20 6f 72 20 61 66 66 69 6e 69 74 79 20  ATE or affinity 
18f60 6f 6e 20 74 68 69 73 20 74 72 65 65 20 2a 2f 0a  on this tree */.
18f70 23 64 65 66 69 6e 65 20 45 50 5f 49 6e 74 56 61  #define EP_IntVa
18f80 6c 75 65 20 20 30 78 30 30 30 34 30 30 20 2f 2a  lue  0x000400 /*
18f90 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 63   Integer value c
18fa0 6f 6e 74 61 69 6e 65 64 20 69 6e 20 75 2e 69 56  ontained in u.iV
18fb0 61 6c 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  alue */.#define 
18fc0 45 50 5f 78 49 73 53 65 6c 65 63 74 20 30 78 30  EP_xIsSelect 0x0
18fd0 30 30 38 30 30 20 2f 2a 20 78 2e 70 53 65 6c 65  00800 /* x.pSele
18fe0 63 74 20 69 73 20 76 61 6c 69 64 20 28 6f 74 68  ct is valid (oth
18ff0 65 72 77 69 73 65 20 78 2e 70 4c 69 73 74 20 69  erwise x.pList i
19000 73 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  s) */.#define EP
19010 5f 53 6b 69 70 20 20 20 20 20 20 30 78 30 30 31  _Skip      0x001
19020 30 30 30 20 2f 2a 20 43 4f 4c 4c 41 54 45 2c 20  000 /* COLLATE, 
19030 41 53 2c 20 6f 72 20 55 4e 4c 49 4b 45 4c 59 20  AS, or UNLIKELY 
19040 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 52 65  */.#define EP_Re
19050 64 75 63 65 64 20 20 20 30 78 30 30 32 30 30 30  duced   0x002000
19060 20 2f 2a 20 45 78 70 72 20 73 74 72 75 63 74 20   /* Expr struct 
19070 45 58 50 52 5f 52 45 44 55 43 45 44 53 49 5a 45  EXPR_REDUCEDSIZE
19080 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23   bytes only */.#
19090 64 65 66 69 6e 65 20 45 50 5f 54 6f 6b 65 6e 4f  define EP_TokenO
190a0 6e 6c 79 20 30 78 30 30 34 30 30 30 20 2f 2a 20  nly 0x004000 /* 
190b0 45 78 70 72 20 73 74 72 75 63 74 20 45 58 50 52  Expr struct EXPR
190c0 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 62  _TOKENONLYSIZE b
190d0 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65  ytes only */.#de
190e0 66 69 6e 65 20 45 50 5f 53 74 61 74 69 63 20 20  fine EP_Static  
190f0 20 20 30 78 30 30 38 30 30 30 20 2f 2a 20 48 65    0x008000 /* He
19100 6c 64 20 69 6e 20 6d 65 6d 6f 72 79 20 6e 6f 74  ld in memory not
19110 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 6d   obtained from m
19120 61 6c 6c 6f 63 28 29 20 2a 2f 0a 23 64 65 66 69  alloc() */.#defi
19130 6e 65 20 45 50 5f 4d 65 6d 54 6f 6b 65 6e 20 20  ne EP_MemToken  
19140 30 78 30 31 30 30 30 30 20 2f 2a 20 4e 65 65 64  0x010000 /* Need
19150 20 74 6f 20 73 71 6c 69 74 65 33 44 62 46 72 65   to sqlite3DbFre
19160 65 28 29 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20  e() Expr.zToken 
19170 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 4e 6f  */.#define EP_No
19180 52 65 64 75 63 65 20 20 30 78 30 32 30 30 30 30  Reduce  0x020000
19190 20 2f 2a 20 43 61 6e 6e 6f 74 20 45 58 50 52 44   /* Cannot EXPRD
191a0 55 50 5f 52 45 44 55 43 45 20 74 68 69 73 20 45  UP_REDUCE this E
191b0 78 70 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  xpr */.#define E
191c0 50 5f 55 6e 6c 69 6b 65 6c 79 20 20 30 78 30 34  P_Unlikely  0x04
191d0 30 30 30 30 20 2f 2a 20 75 6e 6c 69 6b 65 6c 79  0000 /* unlikely
191e0 28 29 20 6f 72 20 6c 69 6b 65 6c 69 68 6f 6f 64  () or likelihood
191f0 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  () function */.#
19200 64 65 66 69 6e 65 20 45 50 5f 43 6f 6e 73 74 46  define EP_ConstF
19210 75 6e 63 20 30 78 30 38 30 30 30 30 20 2f 2a 20  unc 0x080000 /* 
19220 41 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  A SQLITE_FUNC_CO
19230 4e 53 54 41 4e 54 20 6f 72 20 5f 53 4c 4f 43 48  NSTANT or _SLOCH
19240 4e 47 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  NG function */.#
19250 64 65 66 69 6e 65 20 45 50 5f 43 61 6e 42 65 4e  define EP_CanBeN
19260 75 6c 6c 20 30 78 31 30 30 30 30 30 20 2f 2a 20  ull 0x100000 /* 
19270 43 61 6e 20 62 65 20 6e 75 6c 6c 20 64 65 73 70  Can be null desp
19280 69 74 65 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e  ite NOT NULL con
19290 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69  straint */.#defi
192a0 6e 65 20 45 50 5f 53 75 62 71 75 65 72 79 20 20  ne EP_Subquery  
192b0 30 78 32 30 30 30 30 30 20 2f 2a 20 54 72 65 65  0x200000 /* Tree
192c0 20 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f 53   contains a TK_S
192d0 45 4c 45 43 54 20 6f 70 65 72 61 74 6f 72 20 2a  ELECT operator *
192e0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 41 6c 69  /.#define EP_Ali
192f0 61 73 20 20 20 20 20 30 78 34 30 30 30 30 30 20  as     0x400000 
19300 2f 2a 20 49 73 20 61 6e 20 61 6c 69 61 73 20 66  /* Is an alias f
19310 6f 72 20 61 20 72 65 73 75 6c 74 20 73 65 74 20  or a result set 
19320 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 64 65 66 69 6e  column */.#defin
19330 65 20 45 50 5f 4c 65 61 66 20 20 20 20 20 20 30  e EP_Leaf      0
19340 78 38 30 30 30 30 30 20 2f 2a 20 45 78 70 72 2e  x800000 /* Expr.
19350 70 4c 65 66 74 2c 20 2e 70 52 69 67 68 74 2c 20  pLeft, .pRight, 
19360 2e 75 2e 70 53 65 6c 65 63 74 20 61 6c 6c 20 4e  .u.pSelect all N
19370 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68  ULL */../*.** Th
19380 65 20 45 50 5f 50 72 6f 70 61 67 61 74 65 20 6d  e EP_Propagate m
19390 61 73 6b 20 69 73 20 61 20 73 65 74 20 6f 66 20  ask is a set of 
193a0 70 72 6f 70 65 72 74 69 65 73 20 74 68 61 74 20  properties that 
193b0 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 70 72  automatically pr
193c0 6f 70 61 67 61 74 65 0a 2a 2a 20 75 70 77 61 72  opagate.** upwar
193d0 64 73 20 69 6e 74 6f 20 70 61 72 65 6e 74 20 6e  ds into parent n
193e0 6f 64 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  odes..*/.#define
193f0 20 45 50 5f 50 72 6f 70 61 67 61 74 65 20 28 45   EP_Propagate (E
19400 50 5f 43 6f 6c 6c 61 74 65 7c 45 50 5f 53 75 62  P_Collate|EP_Sub
19410 71 75 65 72 79 7c 45 50 5f 48 61 73 46 75 6e 63  query|EP_HasFunc
19420 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d  )../*.** These m
19430 61 63 72 6f 73 20 63 61 6e 20 62 65 20 75 73 65  acros can be use
19440 64 20 74 6f 20 74 65 73 74 2c 20 73 65 74 2c 20  d to test, set, 
19450 6f 72 20 63 6c 65 61 72 20 62 69 74 73 20 69 6e  or clear bits in
19460 20 74 68 65 0a 2a 2a 20 45 78 70 72 2e 66 6c 61   the.** Expr.fla
19470 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65  gs field..*/.#de
19480 66 69 6e 65 20 45 78 70 72 48 61 73 50 72 6f 70  fine ExprHasProp
19490 65 72 74 79 28 45 2c 50 29 20 20 20 20 20 28 28  erty(E,P)     ((
194a0 28 45 29 2d 3e 66 6c 61 67 73 26 28 50 29 29 21  (E)->flags&(P))!
194b0 3d 30 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72  =0).#define Expr
194c0 48 61 73 41 6c 6c 50 72 6f 70 65 72 74 79 28 45  HasAllProperty(E
194d0 2c 50 29 20 20 28 28 28 45 29 2d 3e 66 6c 61 67  ,P)  (((E)->flag
194e0 73 26 28 50 29 29 3d 3d 28 50 29 29 0a 23 64 65  s&(P))==(P)).#de
194f0 66 69 6e 65 20 45 78 70 72 53 65 74 50 72 6f 70  fine ExprSetProp
19500 65 72 74 79 28 45 2c 50 29 20 20 20 20 20 28 45  erty(E,P)     (E
19510 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 64  )->flags|=(P).#d
19520 65 66 69 6e 65 20 45 78 70 72 43 6c 65 61 72 50  efine ExprClearP
19530 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20 28  roperty(E,P)   (
19540 45 29 2d 3e 66 6c 61 67 73 26 3d 7e 28 50 29 0a  E)->flags&=~(P).
19550 0a 2f 2a 20 54 68 65 20 45 78 70 72 53 65 74 56  ./* The ExprSetV
19560 56 41 50 72 6f 70 65 72 74 79 28 29 20 6d 61 63  VAProperty() mac
19570 72 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20 56  ro is used for V
19580 65 72 69 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c  erification, Val
19590 69 64 61 74 69 6f 6e 2c 0a 2a 2a 20 61 6e 64 20  idation,.** and 
195a0 41 63 63 72 65 64 69 74 61 74 69 6f 6e 20 6f 6e  Accreditation on
195b0 6c 79 2e 20 20 49 74 20 77 6f 72 6b 73 20 6c 69  ly.  It works li
195c0 6b 65 20 45 78 70 72 53 65 74 50 72 6f 70 65 72  ke ExprSetProper
195d0 74 79 28 29 20 64 75 72 69 6e 67 20 56 56 41 0a  ty() during VVA.
195e0 2a 2a 20 70 72 6f 63 65 73 73 65 73 20 62 75 74  ** processes but
195f0 20 69 73 20 61 20 6e 6f 2d 6f 70 20 66 6f 72 20   is a no-op for 
19600 64 65 6c 69 76 65 72 79 2e 0a 2a 2f 0a 23 69 66  delivery..*/.#if
19610 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
19620 0a 23 20 64 65 66 69 6e 65 20 45 78 70 72 53 65  .# define ExprSe
19630 74 56 56 41 50 72 6f 70 65 72 74 79 28 45 2c 50  tVVAProperty(E,P
19640 29 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28  )  (E)->flags|=(
19650 50 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  P).#else.# defin
19660 65 20 45 78 70 72 53 65 74 56 56 41 50 72 6f 70  e ExprSetVVAProp
19670 65 72 74 79 28 45 2c 50 29 0a 23 65 6e 64 69 66  erty(E,P).#endif
19680 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74  ../*.** Macros t
19690 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20  o determine the 
196a0 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  number of bytes 
196b0 72 65 71 75 69 72 65 64 20 62 79 20 61 20 6e 6f  required by a no
196c0 72 6d 61 6c 20 45 78 70 72 0a 2a 2a 20 73 74 72  rmal Expr.** str
196d0 75 63 74 2c 20 61 6e 20 45 78 70 72 20 73 74 72  uct, an Expr str
196e0 75 63 74 20 77 69 74 68 20 74 68 65 20 45 50 5f  uct with the EP_
196f0 52 65 64 75 63 65 64 20 66 6c 61 67 20 73 65 74  Reduced flag set
19700 20 69 6e 20 45 78 70 72 2e 66 6c 61 67 73 0a 2a   in Expr.flags.*
19710 2a 20 61 6e 64 20 61 6e 20 45 78 70 72 20 73 74  * and an Expr st
19720 72 75 63 74 20 77 69 74 68 20 74 68 65 20 45 50  ruct with the EP
19730 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20  _TokenOnly flag 
19740 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  set..*/.#define 
19750 45 58 50 52 5f 46 55 4c 4c 53 49 5a 45 20 20 20  EXPR_FULLSIZE   
19760 20 20 20 20 20 20 20 20 73 69 7a 65 6f 66 28 45          sizeof(E
19770 78 70 72 29 20 20 20 20 20 20 20 20 20 20 20 2f  xpr)           /
19780 2a 20 46 75 6c 6c 20 73 69 7a 65 20 2a 2f 0a 23  * Full size */.#
19790 64 65 66 69 6e 65 20 45 58 50 52 5f 52 45 44 55  define EXPR_REDU
197a0 43 45 44 53 49 5a 45 20 20 20 20 20 20 20 20 6f  CEDSIZE        o
197b0 66 66 73 65 74 6f 66 28 45 78 70 72 2c 69 54 61  ffsetof(Expr,iTa
197c0 62 6c 65 29 20 20 2f 2a 20 43 6f 6d 6d 6f 6e 20  ble)  /* Common 
197d0 66 65 61 74 75 72 65 73 20 2a 2f 0a 23 64 65 66  features */.#def
197e0 69 6e 65 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e  ine EXPR_TOKENON
197f0 4c 59 53 49 5a 45 20 20 20 20 20 20 6f 66 66 73  LYSIZE      offs
19800 65 74 6f 66 28 45 78 70 72 2c 70 4c 65 66 74 29  etof(Expr,pLeft)
19810 20 20 20 2f 2a 20 46 65 77 65 72 20 66 65 61 74     /* Fewer feat
19820 75 72 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 46  ures */../*.** F
19830 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f 20 74  lags passed to t
19840 68 65 20 73 71 6c 69 74 65 33 45 78 70 72 44 75  he sqlite3ExprDu
19850 70 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20 53 65  p() function. Se
19860 65 20 74 68 65 20 68 65 61 64 65 72 20 63 6f 6d  e the header com
19870 6d 65 6e 74 0a 2a 2a 20 61 62 6f 76 65 20 73 71  ment.** above sq
19880 6c 69 74 65 33 45 78 70 72 44 75 70 28 29 20 66  lite3ExprDup() f
19890 6f 72 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 23  or details..*/.#
198a0 64 65 66 69 6e 65 20 45 58 50 52 44 55 50 5f 52  define EXPRDUP_R
198b0 45 44 55 43 45 20 20 20 20 20 20 20 20 20 30 78  EDUCE         0x
198c0 30 30 30 31 20 20 2f 2a 20 55 73 65 64 20 72 65  0001  /* Used re
198d0 64 75 63 65 64 2d 73 69 7a 65 20 45 78 70 72 20  duced-size Expr 
198e0 6e 6f 64 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  nodes */../*.** 
198f0 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73  A list of expres
19900 73 69 6f 6e 73 2e 20 20 45 61 63 68 20 65 78 70  sions.  Each exp
19910 72 65 73 73 69 6f 6e 20 6d 61 79 20 6f 70 74 69  ression may opti
19920 6f 6e 61 6c 6c 79 20 68 61 76 65 20 61 0a 2a 2a  onally have a.**
19930 20 6e 61 6d 65 2e 20 20 41 6e 20 65 78 70 72 2f   name.  An expr/
19940 6e 61 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e  name combination
19950 20 63 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20   can be used in 
19960 73 65 76 65 72 61 6c 20 77 61 79 73 2c 20 73 75  several ways, su
19970 63 68 0a 2a 2a 20 61 73 20 74 68 65 20 6c 69 73  ch.** as the lis
19980 74 20 6f 66 20 22 65 78 70 72 20 41 53 20 49 44  t of "expr AS ID
19990 22 20 66 69 65 6c 64 73 20 66 6f 6c 6c 6f 77 69  " fields followi
199a0 6e 67 20 61 20 22 53 45 4c 45 43 54 22 20 6f 72  ng a "SELECT" or
199b0 20 69 6e 20 74 68 65 0a 2a 2a 20 6c 69 73 74 20   in the.** list 
199c0 6f 66 20 22 49 44 20 3d 20 65 78 70 72 22 20 69  of "ID = expr" i
199d0 74 65 6d 73 20 69 6e 20 61 6e 20 55 50 44 41 54  tems in an UPDAT
199e0 45 2e 20 20 41 20 6c 69 73 74 20 6f 66 20 65 78  E.  A list of ex
199f0 70 72 65 73 73 69 6f 6e 73 20 63 61 6e 0a 2a 2a  pressions can.**
19a00 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 61 73   also be used as
19a10 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f   the argument to
19a20 20 61 20 66 75 6e 63 74 69 6f 6e 2c 20 69 6e 20   a function, in 
19a30 77 68 69 63 68 20 63 61 73 65 20 74 68 65 20 61  which case the a
19a40 2e 7a 4e 61 6d 65 0a 2a 2a 20 66 69 65 6c 64 20  .zName.** field 
19a50 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a  is not used..**.
19a60 2a 2a 20 42 79 20 64 65 66 61 75 6c 74 20 74 68  ** By default th
19a70 65 20 45 78 70 72 2e 7a 53 70 61 6e 20 66 69 65  e Expr.zSpan fie
19a80 6c 64 20 68 6f 6c 64 73 20 61 20 68 75 6d 61 6e  ld holds a human
19a90 2d 72 65 61 64 61 62 6c 65 20 64 65 73 63 72 69  -readable descri
19aa0 70 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20  ption of.** the 
19ab0 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20  expression that 
19ac0 69 73 20 75 73 65 64 20 69 6e 20 74 68 65 20 67  is used in the g
19ad0 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 65 72 72  eneration of err
19ae0 6f 72 20 6d 65 73 73 61 67 65 73 20 61 6e 64 0a  or messages and.
19af0 2a 2a 20 63 6f 6c 75 6d 6e 20 6c 61 62 65 6c 73  ** column labels
19b00 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c  .  In this case,
19b10 20 45 78 70 72 2e 7a 53 70 61 6e 20 69 73 20 74   Expr.zSpan is t
19b20 79 70 69 63 61 6c 6c 79 20 74 68 65 20 74 65 78  ypically the tex
19b30 74 20 6f 66 20 61 0a 2a 2a 20 63 6f 6c 75 6d 6e  t of a.** column
19b40 20 65 78 70 72 65 73 73 69 6f 6e 20 61 73 20 69   expression as i
19b50 74 20 65 78 69 73 74 73 20 69 6e 20 61 20 53 45  t exists in a SE
19b60 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20  LECT statement. 
19b70 20 48 6f 77 65 76 65 72 2c 20 69 66 0a 2a 2a 20   However, if.** 
19b80 74 68 65 20 62 53 70 61 6e 49 73 54 61 62 20 66  the bSpanIsTab f
19b90 6c 61 67 20 69 73 20 73 65 74 2c 20 74 68 65 6e  lag is set, then
19ba0 20 7a 53 70 61 6e 20 69 73 20 6f 76 65 72 6c 6f   zSpan is overlo
19bb0 61 64 65 64 20 74 6f 20 6d 65 61 6e 20 74 68 65  aded to mean the
19bc0 20 6e 61 6d 65 0a 2a 2a 20 6f 66 20 74 68 65 20   name.** of the 
19bd0 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 69 6e  result column in
19be0 20 74 68 65 20 66 6f 72 6d 3a 20 44 41 54 41 42   the form: DATAB
19bf0 41 53 45 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e  ASE.TABLE.COLUMN
19c00 2e 20 20 54 68 69 73 20 6c 61 74 65 72 0a 2a 2a  .  This later.**
19c10 20 66 6f 72 6d 20 69 73 20 75 73 65 64 20 66 6f   form is used fo
19c20 72 20 6e 61 6d 65 20 72 65 73 6f 6c 75 74 69 6f  r name resolutio
19c30 6e 20 77 69 74 68 20 6e 65 73 74 65 64 20 46 52  n with nested FR
19c40 4f 4d 20 63 6c 61 75 73 65 73 2e 0a 2a 2f 0a 73  OM clauses..*/.s
19c50 74 72 75 63 74 20 45 78 70 72 4c 69 73 74 20 7b  truct ExprList {
19c60 0a 20 20 69 6e 74 20 6e 45 78 70 72 3b 20 20 20  .  int nExpr;   
19c70 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
19c80 62 65 72 20 6f 66 20 65 78 70 72 65 73 73 69 6f  ber of expressio
19c90 6e 73 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a  ns on the list *
19ca0 2f 0a 20 20 73 74 72 75 63 74 20 45 78 70 72 4c  /.  struct ExprL
19cb0 69 73 74 5f 69 74 65 6d 20 7b 20 2f 2a 20 46 6f  ist_item { /* Fo
19cc0 72 20 65 61 63 68 20 65 78 70 72 65 73 73 69 6f  r each expressio
19cd0 6e 20 69 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f  n in the list */
19ce0 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72  .    Expr *pExpr
19cf0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
19d00 54 68 65 20 70 61 72 73 65 20 74 72 65 65 20 66  The parse tree f
19d10 6f 72 20 74 68 69 73 20 65 78 70 72 65 73 73 69  or this expressi
19d20 6f 6e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  on */.    char *
19d30 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
19d40 20 20 2f 2a 20 54 6f 6b 65 6e 20 61 73 73 6f 63    /* Token assoc
19d50 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20  iated with this 
19d60 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20  expression */.  
19d70 20 20 63 68 61 72 20 2a 7a 53 70 61 6e 3b 20 20    char *zSpan;  
19d80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 72 69            /* Ori
19d90 67 69 6e 61 6c 20 74 65 78 74 20 6f 66 20 74 68  ginal text of th
19da0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a  e expression */.
19db0 20 20 20 20 75 38 20 73 6f 72 74 4f 72 64 65 72      u8 sortOrder
19dc0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31  ;           /* 1
19dd0 20 66 6f 72 20 44 45 53 43 20 6f 72 20 30 20 66   for DESC or 0 f
19de0 6f 72 20 41 53 43 20 2a 2f 0a 20 20 20 20 75 6e  or ASC */.    un
19df0 73 69 67 6e 65 64 20 64 6f 6e 65 20 3a 31 3b 20  signed done :1; 
19e00 20 20 20 20 20 20 2f 2a 20 41 20 66 6c 61 67 20        /* A flag 
19e10 74 6f 20 69 6e 64 69 63 61 74 65 20 77 68 65 6e  to indicate when
19e20 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20 66   processing is f
19e30 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20 20 20 75  inished */.    u
19e40 6e 73 69 67 6e 65 64 20 62 53 70 61 6e 49 73 54  nsigned bSpanIsT
19e50 61 62 20 3a 31 3b 20 2f 2a 20 7a 53 70 61 6e 20  ab :1; /* zSpan 
19e60 68 6f 6c 64 73 20 44 42 2e 54 41 42 4c 45 2e 43  holds DB.TABLE.C
19e70 4f 4c 55 4d 4e 20 2a 2f 0a 20 20 20 20 75 6e 73  OLUMN */.    uns
19e80 69 67 6e 65 64 20 72 65 75 73 61 62 6c 65 20 3a  igned reusable :
19e90 31 3b 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e 74  1;   /* Constant
19ea0 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 72   expression is r
19eb0 65 75 73 61 62 6c 65 20 2a 2f 0a 20 20 20 20 75  eusable */.    u
19ec0 6e 73 69 67 6e 65 64 20 62 53 6f 72 74 65 72 52  nsigned bSorterR
19ed0 65 66 20 3a 31 3b 20 2f 2a 20 44 65 66 65 72 20  ef :1; /* Defer 
19ee0 65 76 61 6c 75 61 74 69 6f 6e 20 75 6e 74 69 6c  evaluation until
19ef0 20 61 66 74 65 72 20 73 6f 72 74 69 6e 67 20 2a   after sorting *
19f00 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b 0a 20 20  /.    union {.  
19f10 20 20 20 20 73 74 72 75 63 74 20 7b 0a 20 20 20      struct {.   
19f20 20 20 20 20 20 75 31 36 20 69 4f 72 64 65 72 42       u16 iOrderB
19f30 79 43 6f 6c 3b 20 20 20 20 20 20 2f 2a 20 46 6f  yCol;      /* Fo
19f40 72 20 4f 52 44 45 52 20 42 59 2c 20 63 6f 6c 75  r ORDER BY, colu
19f50 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20 72 65 73  mn number in res
19f60 75 6c 74 20 73 65 74 20 2a 2f 0a 20 20 20 20 20  ult set */.     
19f70 20 20 20 75 31 36 20 69 41 6c 69 61 73 3b 20 20     u16 iAlias;  
19f80 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
19f90 78 20 69 6e 74 6f 20 50 61 72 73 65 2e 61 41 6c  x into Parse.aAl
19fa0 69 61 73 5b 5d 20 66 6f 72 20 7a 4e 61 6d 65 20  ias[] for zName 
19fb0 2a 2f 0a 20 20 20 20 20 20 7d 20 78 3b 0a 20 20  */.      } x;.  
19fc0 20 20 20 20 69 6e 74 20 69 43 6f 6e 73 74 45 78      int iConstEx
19fd0 70 72 52 65 67 3b 20 20 20 20 20 20 2f 2a 20 52  prReg;      /* R
19fe0 65 67 69 73 74 65 72 20 69 6e 20 77 68 69 63 68  egister in which
19ff0 20 45 78 70 72 20 76 61 6c 75 65 20 69 73 20 63   Expr value is c
1a000 61 63 68 65 64 20 2a 2f 0a 20 20 20 20 7d 20 75  ached */.    } u
1a010 3b 0a 20 20 7d 20 61 5b 31 5d 3b 20 20 20 20 20  ;.  } a[1];     
1a020 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1a030 4f 6e 65 20 73 6c 6f 74 20 66 6f 72 20 65 61 63  One slot for eac
1a040 68 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20  h expression in 
1a050 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a  the list */.};..
1a060 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
1a070 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  e of this struct
1a080 75 72 65 20 63 61 6e 20 68 6f 6c 64 20 61 20 73  ure can hold a s
1a090 69 6d 70 6c 65 20 6c 69 73 74 20 6f 66 20 69 64  imple list of id
1a0a0 65 6e 74 69 66 69 65 72 73 2c 0a 2a 2a 20 73 75  entifiers,.** su
1a0b0 63 68 20 61 73 20 74 68 65 20 6c 69 73 74 20 22  ch as the list "
1a0c0 61 2c 62 2c 63 22 20 69 6e 20 74 68 65 20 66 6f  a,b,c" in the fo
1a0d0 6c 6c 6f 77 69 6e 67 20 73 74 61 74 65 6d 65 6e  llowing statemen
1a0e0 74 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 49  ts:.**.**      I
1a0f0 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61 2c 62  NSERT INTO t(a,b
1a100 2c 63 29 20 56 41 4c 55 45 53 20 2e 2e 2e 3b 0a  ,c) VALUES ...;.
1a110 2a 2a 20 20 20 20 20 20 43 52 45 41 54 45 20 49  **      CREATE I
1a120 4e 44 45 58 20 69 64 78 20 4f 4e 20 74 28 61 2c  NDEX idx ON t(a,
1a130 62 2c 63 29 3b 0a 2a 2a 20 20 20 20 20 20 43 52  b,c);.**      CR
1a140 45 41 54 45 20 54 52 49 47 47 45 52 20 74 72 69  EATE TRIGGER tri
1a150 67 20 42 45 46 4f 52 45 20 55 50 44 41 54 45 20  g BEFORE UPDATE 
1a160 4f 4e 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 3b  ON t(a,b,c) ...;
1a170 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 64 4c 69 73  .**.** The IdLis
1a180 74 2e 61 2e 69 64 78 20 66 69 65 6c 64 20 69 73  t.a.idx field is
1a190 20 75 73 65 64 20 77 68 65 6e 20 74 68 65 20 49   used when the I
1a1a0 64 4c 69 73 74 20 72 65 70 72 65 73 65 6e 74 73  dList represents
1a1b0 20 74 68 65 20 6c 69 73 74 20 6f 66 0a 2a 2a 20   the list of.** 
1a1c0 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 61 66 74  column names aft
1a1d0 65 72 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 20  er a table name 
1a1e0 69 6e 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61  in an INSERT sta
1a1f0 74 65 6d 65 6e 74 2e 20 20 49 6e 20 74 68 65 20  tement.  In the 
1a200 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 0a 2a 2a 20  statement.**.** 
1a210 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
1a220 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 0a 2a 2a 0a  t(a,b,c) ....**.
1a230 2a 2a 20 49 66 20 22 61 22 20 69 73 20 74 68 65  ** If "a" is the
1a240 20 6b 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 20   k-th column of 
1a250 74 61 62 6c 65 20 22 74 22 2c 20 74 68 65 6e 20  table "t", then 
1a260 49 64 4c 69 73 74 2e 61 5b 30 5d 2e 69 64 78 3d  IdList.a[0].idx=
1a270 3d 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 64  =k..*/.struct Id
1a280 4c 69 73 74 20 7b 0a 20 20 73 74 72 75 63 74 20  List {.  struct 
1a290 49 64 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20  IdList_item {.  
1a2a0 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
1a2b0 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
1a2c0 68 65 20 69 64 65 6e 74 69 66 69 65 72 20 2a 2f  he identifier */
1a2d0 0a 20 20 20 20 69 6e 74 20 69 64 78 3b 20 20 20  .    int idx;   
1a2e0 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20         /* Index 
1a2f0 69 6e 20 73 6f 6d 65 20 54 61 62 6c 65 2e 61 43  in some Table.aC
1a300 6f 6c 5b 5d 20 6f 66 20 61 20 63 6f 6c 75 6d 6e  ol[] of a column
1a310 20 6e 61 6d 65 64 20 7a 4e 61 6d 65 20 2a 2f 0a   named zName */.
1a320 20 20 7d 20 2a 61 3b 0a 20 20 69 6e 74 20 6e 49    } *a;.  int nI
1a330 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  d;         /* Nu
1a340 6d 62 65 72 20 6f 66 20 69 64 65 6e 74 69 66 69  mber of identifi
1a350 65 72 73 20 6f 6e 20 74 68 65 20 6c 69 73 74 20  ers on the list 
1a360 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
1a370 20 62 69 74 6d 61 73 6b 20 64 61 74 61 74 79 70   bitmask datatyp
1a380 65 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 20  e defined below 
1a390 69 73 20 75 73 65 64 20 66 6f 72 20 76 61 72 69  is used for vari
1a3a0 6f 75 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  ous optimization
1a3b0 73 2e 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 69 6e  s..**.** Changin
1a3c0 67 20 74 68 69 73 20 66 72 6f 6d 20 61 20 36 34  g this from a 64
1a3d0 2d 62 69 74 20 74 6f 20 61 20 33 32 2d 62 69 74  -bit to a 32-bit
1a3e0 20 74 79 70 65 20 6c 69 6d 69 74 73 20 74 68 65   type limits the
1a3f0 20 6e 75 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 61   number of.** ta
1a400 62 6c 65 73 20 69 6e 20 61 20 6a 6f 69 6e 20 74  bles in a join t
1a410 6f 20 33 32 20 69 6e 73 74 65 61 64 20 6f 66 20  o 32 instead of 
1a420 36 34 2e 20 20 42 75 74 20 69 74 20 61 6c 73 6f  64.  But it also
1a430 20 72 65 64 75 63 65 73 20 74 68 65 20 73 69 7a   reduces the siz
1a440 65 0a 2a 2a 20 6f 66 20 74 68 65 20 6c 69 62 72  e.** of the libr
1a450 61 72 79 20 62 79 20 37 33 38 20 62 79 74 65 73  ary by 738 bytes
1a460 20 6f 6e 20 69 78 38 36 2e 0a 2a 2f 0a 23 69 66   on ix86..*/.#if
1a470 64 65 66 20 53 51 4c 49 54 45 5f 42 49 54 4d 41  def SQLITE_BITMA
1a480 53 4b 5f 54 59 50 45 0a 20 20 74 79 70 65 64 65  SK_TYPE.  typede
1a490 66 20 53 51 4c 49 54 45 5f 42 49 54 4d 41 53 4b  f SQLITE_BITMASK
1a4a0 5f 54 59 50 45 20 42 69 74 6d 61 73 6b 3b 0a 23  _TYPE Bitmask;.#
1a4b0 65 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20 75  else.  typedef u
1a4c0 36 34 20 42 69 74 6d 61 73 6b 3b 0a 23 65 6e 64  64 Bitmask;.#end
1a4d0 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75  if../*.** The nu
1a4e0 6d 62 65 72 20 6f 66 20 62 69 74 73 20 69 6e 20  mber of bits in 
1a4f0 61 20 42 69 74 6d 61 73 6b 2e 20 20 22 42 4d 53  a Bitmask.  "BMS
1a500 22 20 6d 65 61 6e 73 20 22 42 69 74 4d 61 73 6b  " means "BitMask
1a510 20 53 69 7a 65 22 2e 0a 2a 2f 0a 23 64 65 66 69   Size"..*/.#defi
1a520 6e 65 20 42 4d 53 20 20 28 28 69 6e 74 29 28 73  ne BMS  ((int)(s
1a530 69 7a 65 6f 66 28 42 69 74 6d 61 73 6b 29 2a 38  izeof(Bitmask)*8
1a540 29 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 62 69 74 20  ))../*.** A bit 
1a550 69 6e 20 61 20 42 69 74 6d 61 73 6b 0a 2a 2f 0a  in a Bitmask.*/.
1a560 23 64 65 66 69 6e 65 20 4d 41 53 4b 42 49 54 28  #define MASKBIT(
1a570 6e 29 20 20 20 28 28 28 42 69 74 6d 61 73 6b 29  n)   (((Bitmask)
1a580 31 29 3c 3c 28 6e 29 29 0a 23 64 65 66 69 6e 65  1)<<(n)).#define
1a590 20 4d 41 53 4b 42 49 54 33 32 28 6e 29 20 28 28   MASKBIT32(n) ((
1a5a0 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 31 29  (unsigned int)1)
1a5b0 3c 3c 28 6e 29 29 0a 23 64 65 66 69 6e 65 20 41  <<(n)).#define A
1a5c0 4c 4c 42 49 54 53 20 20 20 20 20 20 28 28 42 69  LLBITS      ((Bi
1a5d0 74 6d 61 73 6b 29 2d 31 29 0a 0a 2f 2a 0a 2a 2a  tmask)-1)../*.**
1a5e0 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   The following s
1a5f0 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62  tructure describ
1a600 65 73 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  es the FROM clau
1a610 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73  se of a SELECT s
1a620 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 45 61 63  tatement..** Eac
1a630 68 20 74 61 62 6c 65 20 6f 72 20 73 75 62 71 75  h table or subqu
1a640 65 72 79 20 69 6e 20 74 68 65 20 46 52 4f 4d 20  ery in the FROM 
1a650 63 6c 61 75 73 65 20 69 73 20 61 20 73 65 70 61  clause is a sepa
1a660 72 61 74 65 20 65 6c 65 6d 65 6e 74 20 6f 66 0a  rate element of.
1a670 2a 2a 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61  ** the SrcList.a
1a680 5b 5d 20 61 72 72 61 79 2e 0a 2a 2a 0a 2a 2a 20  [] array..**.** 
1a690 57 69 74 68 20 74 68 65 20 61 64 64 69 74 69 6f  With the additio
1a6a0 6e 20 6f 66 20 6d 75 6c 74 69 70 6c 65 20 64 61  n of multiple da
1a6b0 74 61 62 61 73 65 20 73 75 70 70 6f 72 74 2c 20  tabase support, 
1a6c0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
1a6d0 72 75 63 74 75 72 65 0a 2a 2a 20 63 61 6e 20 61  ructure.** can a
1a6e0 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f 20 64  lso be used to d
1a6f0 65 73 63 72 69 62 65 20 61 20 70 61 72 74 69 63  escribe a partic
1a700 75 6c 61 72 20 74 61 62 6c 65 20 73 75 63 68 20  ular table such 
1a710 61 73 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  as the table tha
1a720 74 0a 2a 2a 20 69 73 20 6d 6f 64 69 66 69 65 64  t.** is modified
1a730 20 62 79 20 61 6e 20 49 4e 53 45 52 54 2c 20 44   by an INSERT, D
1a740 45 4c 45 54 45 2c 20 6f 72 20 55 50 44 41 54 45  ELETE, or UPDATE
1a750 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20   statement.  In 
1a760 73 74 61 6e 64 61 72 64 20 53 51 4c 2c 0a 2a 2a  standard SQL,.**
1a770 20 73 75 63 68 20 61 20 74 61 62 6c 65 20 6d 75   such a table mu
1a780 73 74 20 62 65 20 61 20 73 69 6d 70 6c 65 20 6e  st be a simple n
1a790 61 6d 65 3a 20 49 44 2e 20 20 42 75 74 20 69 6e  ame: ID.  But in
1a7a0 20 53 51 4c 69 74 65 2c 20 74 68 65 20 74 61 62   SQLite, the tab
1a7b0 6c 65 20 63 61 6e 0a 2a 2a 20 6e 6f 77 20 62 65  le can.** now be
1a7c0 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 61   identified by a
1a7d0 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 2c 20   database name, 
1a7e0 61 20 64 6f 74 2c 20 74 68 65 6e 20 74 68 65 20  a dot, then the 
1a7f0 74 61 62 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 49  table name: ID.I
1a800 44 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6a 6f 69  D..**.** The joi
1a810 6e 74 79 70 65 20 73 74 61 72 74 73 20 6f 75 74  ntype starts out
1a820 20 73 68 6f 77 69 6e 67 20 74 68 65 20 6a 6f 69   showing the joi
1a830 6e 20 74 79 70 65 20 62 65 74 77 65 65 6e 20 74  n type between t
1a840 68 65 20 63 75 72 72 65 6e 74 20 74 61 62 6c 65  he current table
1a850 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6e 65 78 74  .** and the next
1a860 20 74 61 62 6c 65 20 6f 6e 20 74 68 65 20 6c 69   table on the li
1a870 73 74 2e 20 20 54 68 65 20 70 61 72 73 65 72 20  st.  The parser 
1a880 62 75 69 6c 64 73 20 74 68 65 20 6c 69 73 74 20  builds the list 
1a890 74 68 69 73 20 77 61 79 2e 0a 2a 2a 20 42 75 74  this way..** But
1a8a0 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 53   sqlite3SrcListS
1a8b0 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 29 20 6c  hiftJoinType() l
1a8c0 61 74 65 72 20 73 68 69 66 74 73 20 74 68 65 20  ater shifts the 
1a8d0 6a 6f 69 6e 74 79 70 65 73 20 73 6f 20 74 68 61  jointypes so tha
1a8e0 74 20 65 61 63 68 0a 2a 2a 20 6a 6f 69 6e 74 79  t each.** jointy
1a8f0 70 65 20 65 78 70 72 65 73 73 65 73 20 74 68 65  pe expresses the
1a900 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20 74 68   join between th
1a910 65 20 74 61 62 6c 65 20 61 6e 64 20 74 68 65 20  e table and the 
1a920 70 72 65 76 69 6f 75 73 20 74 61 62 6c 65 2e 0a  previous table..
1a930 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 63 6f 6c  **.** In the col
1a940 55 73 65 64 20 66 69 65 6c 64 2c 20 74 68 65 20  Used field, the 
1a950 68 69 67 68 2d 6f 72 64 65 72 20 62 69 74 20 28  high-order bit (
1a960 62 69 74 20 36 33 29 20 69 73 20 73 65 74 20 69  bit 63) is set i
1a970 66 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20 63  f the table.** c
1a980 6f 6e 74 61 69 6e 73 20 6d 6f 72 65 20 74 68 61  ontains more tha
1a990 6e 20 36 33 20 63 6f 6c 75 6d 6e 73 20 61 6e 64  n 63 columns and
1a9a0 20 74 68 65 20 36 34 2d 74 68 20 6f 72 20 6c 61   the 64-th or la
1a9b0 74 65 72 20 63 6f 6c 75 6d 6e 20 69 73 20 75 73  ter column is us
1a9c0 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 72  ed..*/.struct Sr
1a9d0 63 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e 53  cList {.  int nS
1a9e0 72 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  rc;        /* Nu
1a9f0 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73 20 6f  mber of tables o
1aa00 72 20 73 75 62 71 75 65 72 69 65 73 20 69 6e 20  r subqueries in 
1aa10 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
1aa20 2a 2f 0a 20 20 75 33 32 20 6e 41 6c 6c 6f 63 3b  */.  u32 nAlloc;
1aa30 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1aa40 6f 66 20 65 6e 74 72 69 65 73 20 61 6c 6c 6f 63  of entries alloc
1aa50 61 74 65 64 20 69 6e 20 61 5b 5d 20 62 65 6c 6f  ated in a[] belo
1aa60 77 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 53 72  w */.  struct Sr
1aa70 63 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20  cList_item {.   
1aa80 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61   Schema *pSchema
1aa90 3b 20 20 2f 2a 20 53 63 68 65 6d 61 20 74 6f 20  ;  /* Schema to 
1aaa0 77 68 69 63 68 20 74 68 69 73 20 69 74 65 6d 20  which this item 
1aab0 69 73 20 66 69 78 65 64 20 2a 2f 0a 20 20 20 20  is fixed */.    
1aac0 63 68 61 72 20 2a 7a 44 61 74 61 62 61 73 65 3b  char *zDatabase;
1aad0 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74    /* Name of dat
1aae0 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20 74 68  abase holding th
1aaf0 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  is table */.    
1ab00 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
1ab10 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65    /* Name of the
1ab20 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68   table */.    ch
1ab30 61 72 20 2a 7a 41 6c 69 61 73 3b 20 20 20 20 20  ar *zAlias;     
1ab40 2f 2a 20 54 68 65 20 22 42 22 20 70 61 72 74 20  /* The "B" part 
1ab50 6f 66 20 61 20 22 41 20 41 53 20 42 22 20 70 68  of a "A AS B" ph
1ab60 72 61 73 65 2e 20 20 7a 4e 61 6d 65 20 69 73 20  rase.  zName is 
1ab70 74 68 65 20 22 41 22 20 2a 2f 0a 20 20 20 20 54  the "A" */.    T
1ab80 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20  able *pTab;     
1ab90 20 2f 2a 20 41 6e 20 53 51 4c 20 74 61 62 6c 65   /* An SQL table
1aba0 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74   corresponding t
1abb0 6f 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 53  o zName */.    S
1abc0 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20  elect *pSelect; 
1abd0 20 2f 2a 20 41 20 53 45 4c 45 43 54 20 73 74 61   /* A SELECT sta
1abe0 74 65 6d 65 6e 74 20 75 73 65 64 20 69 6e 20 70  tement used in p
1abf0 6c 61 63 65 20 6f 66 20 61 20 74 61 62 6c 65 20  lace of a table 
1ac00 6e 61 6d 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20  name */.    int 
1ac10 61 64 64 72 46 69 6c 6c 53 75 62 3b 20 20 2f 2a  addrFillSub;  /*
1ac20 20 41 64 64 72 65 73 73 20 6f 66 20 73 75 62 72   Address of subr
1ac30 6f 75 74 69 6e 65 20 74 6f 20 6d 61 6e 69 66 65  outine to manife
1ac40 73 74 20 61 20 73 75 62 71 75 65 72 79 20 2a 2f  st a subquery */
1ac50 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65 74 75  .    int regRetu
1ac60 72 6e 3b 20 20 20 20 2f 2a 20 52 65 67 69 73 74  rn;    /* Regist
1ac70 65 72 20 68 6f 6c 64 69 6e 67 20 72 65 74 75 72  er holding retur
1ac80 6e 20 61 64 64 72 65 73 73 20 6f 66 20 61 64 64  n address of add
1ac90 72 46 69 6c 6c 53 75 62 20 2a 2f 0a 20 20 20 20  rFillSub */.    
1aca0 69 6e 74 20 72 65 67 52 65 73 75 6c 74 3b 20 20  int regResult;  
1acb0 20 20 2f 2a 20 52 65 67 69 73 74 65 72 73 20 68    /* Registers h
1acc0 6f 6c 64 69 6e 67 20 72 65 73 75 6c 74 73 20 6f  olding results o
1acd0 66 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a  f a co-routine *
1ace0 2f 0a 20 20 20 20 73 74 72 75 63 74 20 7b 0a 20  /.    struct {. 
1acf0 20 20 20 20 20 75 38 20 6a 6f 69 6e 74 79 70 65       u8 jointype
1ad00 3b 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20 6f  ;      /* Type o
1ad10 66 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20 74  f join between t
1ad20 68 69 73 20 74 61 62 6c 65 20 61 6e 64 20 74 68  his table and th
1ad30 65 20 70 72 65 76 69 6f 75 73 20 2a 2f 0a 20 20  e previous */.  
1ad40 20 20 20 20 75 6e 73 69 67 6e 65 64 20 6e 6f 74      unsigned not
1ad50 49 6e 64 65 78 65 64 20 3a 31 3b 20 20 20 20 2f  Indexed :1;    /
1ad60 2a 20 54 72 75 65 20 69 66 20 74 68 65 72 65 20  * True if there 
1ad70 69 73 20 61 20 4e 4f 54 20 49 4e 44 45 58 45 44  is a NOT INDEXED
1ad80 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 20   clause */.     
1ad90 20 75 6e 73 69 67 6e 65 64 20 69 73 49 6e 64 65   unsigned isInde
1ada0 78 65 64 42 79 20 3a 31 3b 20 20 20 2f 2a 20 54  xedBy :1;   /* T
1adb0 72 75 65 20 69 66 20 74 68 65 72 65 20 69 73 20  rue if there is 
1adc0 61 6e 20 49 4e 44 45 58 45 44 20 42 59 20 63 6c  an INDEXED BY cl
1add0 61 75 73 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e  ause */.      un
1ade0 73 69 67 6e 65 64 20 69 73 54 61 62 46 75 6e 63  signed isTabFunc
1adf0 20 3a 31 3b 20 20 20 20 20 2f 2a 20 54 72 75 65   :1;     /* True
1ae00 20 69 66 20 74 61 62 6c 65 2d 76 61 6c 75 65 64   if table-valued
1ae10 2d 66 75 6e 63 74 69 6f 6e 20 73 79 6e 74 61 78  -function syntax
1ae20 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e   */.      unsign
1ae30 65 64 20 69 73 43 6f 72 72 65 6c 61 74 65 64 20  ed isCorrelated 
1ae40 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69 66 20  :1;  /* True if 
1ae50 73 75 62 2d 71 75 65 72 79 20 69 73 20 63 6f 72  sub-query is cor
1ae60 72 65 6c 61 74 65 64 20 2a 2f 0a 20 20 20 20 20  related */.     
1ae70 20 75 6e 73 69 67 6e 65 64 20 76 69 61 43 6f 72   unsigned viaCor
1ae80 6f 75 74 69 6e 65 20 3a 31 3b 20 20 2f 2a 20 49  outine :1;  /* I
1ae90 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73 20 61 20  mplemented as a 
1aea0 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20  co-routine */.  
1aeb0 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73 52      unsigned isR
1aec0 65 63 75 72 73 69 76 65 20 3a 31 3b 20 20 20 2f  ecursive :1;   /
1aed0 2a 20 54 72 75 65 20 66 6f 72 20 72 65 63 75 72  * True for recur
1aee0 73 69 76 65 20 72 65 66 65 72 65 6e 63 65 20 69  sive reference i
1aef0 6e 20 57 49 54 48 20 2a 2f 0a 20 20 20 20 7d 20  n WITH */.    } 
1af00 66 67 3b 0a 20 20 20 20 69 6e 74 20 69 43 75 72  fg;.    int iCur
1af10 73 6f 72 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  sor;      /* The
1af20 20 56 44 42 45 20 63 75 72 73 6f 72 20 6e 75 6d   VDBE cursor num
1af30 62 65 72 20 75 73 65 64 20 74 6f 20 61 63 63 65  ber used to acce
1af40 73 73 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  ss this table */
1af50 0a 20 20 20 20 45 78 70 72 20 2a 70 4f 6e 3b 20  .    Expr *pOn; 
1af60 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 4f 4e         /* The ON
1af70 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69   clause of a joi
1af80 6e 20 2a 2f 0a 20 20 20 20 49 64 4c 69 73 74 20  n */.    IdList 
1af90 2a 70 55 73 69 6e 67 3b 20 20 20 2f 2a 20 54 68  *pUsing;   /* Th
1afa0 65 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20 6f  e USING clause o
1afb0 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20  f a join */.    
1afc0 42 69 74 6d 61 73 6b 20 63 6f 6c 55 73 65 64 3b  Bitmask colUsed;
1afd0 20 20 2f 2a 20 42 69 74 20 4e 20 28 31 3c 3c 4e    /* Bit N (1<<N
1afe0 29 20 73 65 74 20 69 66 20 63 6f 6c 75 6d 6e 20  ) set if column 
1aff0 4e 20 6f 66 20 70 54 61 62 20 69 73 20 75 73 65  N of pTab is use
1b000 64 20 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b  d */.    union {
1b010 0a 20 20 20 20 20 20 63 68 61 72 20 2a 7a 49 6e  .      char *zIn
1b020 64 65 78 65 64 42 79 3b 20 20 20 20 2f 2a 20 49  dexedBy;    /* I
1b030 64 65 6e 74 69 66 69 65 72 20 66 72 6f 6d 20 22  dentifier from "
1b040 49 4e 44 45 58 45 44 20 42 59 20 3c 7a 49 6e 64  INDEXED BY <zInd
1b050 65 78 3e 22 20 63 6c 61 75 73 65 20 2a 2f 0a 20  ex>" clause */. 
1b060 20 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70       ExprList *p
1b070 46 75 6e 63 41 72 67 3b 20 20 2f 2a 20 41 72 67  FuncArg;  /* Arg
1b080 75 6d 65 6e 74 73 20 74 6f 20 74 61 62 6c 65 2d  uments to table-
1b090 76 61 6c 75 65 64 2d 66 75 6e 63 74 69 6f 6e 20  valued-function 
1b0a0 2a 2f 0a 20 20 20 20 7d 20 75 31 3b 0a 20 20 20  */.    } u1;.   
1b0b0 20 49 6e 64 65 78 20 2a 70 49 42 49 6e 64 65 78   Index *pIBIndex
1b0c0 3b 20 20 2f 2a 20 49 6e 64 65 78 20 73 74 72 75  ;  /* Index stru
1b0d0 63 74 75 72 65 20 63 6f 72 72 65 73 70 6f 6e 64  cture correspond
1b0e0 69 6e 67 20 74 6f 20 75 31 2e 7a 49 6e 64 65 78  ing to u1.zIndex
1b0f0 65 64 42 79 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d  edBy */.  } a[1]
1b100 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
1b110 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65   One entry for e
1b120 61 63 68 20 69 64 65 6e 74 69 66 69 65 72 20 6f  ach identifier o
1b130 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b  n the list */.};
1b140 0a 0a 2f 2a 0a 2a 2a 20 50 65 72 6d 69 74 74 65  ../*.** Permitte
1b150 64 20 76 61 6c 75 65 73 20 6f 66 20 74 68 65 20  d values of the 
1b160 53 72 63 4c 69 73 74 2e 61 2e 6a 6f 69 6e 74 79  SrcList.a.jointy
1b170 70 65 20 66 69 65 6c 64 0a 2a 2f 0a 23 64 65 66  pe field.*/.#def
1b180 69 6e 65 20 4a 54 5f 49 4e 4e 45 52 20 20 20 20  ine JT_INNER    
1b190 20 30 78 30 30 30 31 20 20 20 20 2f 2a 20 41 6e   0x0001    /* An
1b1a0 79 20 6b 69 6e 64 20 6f 66 20 69 6e 6e 65 72 20  y kind of inner 
1b1b0 6f 72 20 63 72 6f 73 73 20 6a 6f 69 6e 20 2a 2f  or cross join */
1b1c0 0a 23 64 65 66 69 6e 65 20 4a 54 5f 43 52 4f 53  .#define JT_CROS
1b1d0 53 20 20 20 20 20 30 78 30 30 30 32 20 20 20 20  S     0x0002    
1b1e0 2f 2a 20 45 78 70 6c 69 63 69 74 20 75 73 65 20  /* Explicit use 
1b1f0 6f 66 20 74 68 65 20 43 52 4f 53 53 20 6b 65 79  of the CROSS key
1b200 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  word */.#define 
1b210 4a 54 5f 4e 41 54 55 52 41 4c 20 20 20 30 78 30  JT_NATURAL   0x0
1b220 30 30 34 20 20 20 20 2f 2a 20 54 72 75 65 20 66  004    /* True f
1b230 6f 72 20 61 20 22 6e 61 74 75 72 61 6c 22 20 6a  or a "natural" j
1b240 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  oin */.#define J
1b250 54 5f 4c 45 46 54 20 20 20 20 20 20 30 78 30 30  T_LEFT      0x00
1b260 30 38 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 75  08    /* Left ou
1b270 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66  ter join */.#def
1b280 69 6e 65 20 4a 54 5f 52 49 47 48 54 20 20 20 20  ine JT_RIGHT    
1b290 20 30 78 30 30 31 30 20 20 20 20 2f 2a 20 52 69   0x0010    /* Ri
1b2a0 67 68 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a  ght outer join *
1b2b0 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4f 55 54  /.#define JT_OUT
1b2c0 45 52 20 20 20 20 20 30 78 30 30 32 30 20 20 20  ER     0x0020   
1b2d0 20 2f 2a 20 54 68 65 20 22 4f 55 54 45 52 22 20   /* The "OUTER" 
1b2e0 6b 65 79 77 6f 72 64 20 69 73 20 70 72 65 73 65  keyword is prese
1b2f0 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  nt */.#define JT
1b300 5f 45 52 52 4f 52 20 20 20 20 20 30 78 30 30 34  _ERROR     0x004
1b310 30 20 20 20 20 2f 2a 20 75 6e 6b 6e 6f 77 6e 20  0    /* unknown 
1b320 6f 72 20 75 6e 73 75 70 70 6f 72 74 65 64 20 6a  or unsupported j
1b330 6f 69 6e 20 74 79 70 65 20 2a 2f 0a 0a 0a 2f 2a  oin type */.../*
1b340 0a 2a 2a 20 46 6c 61 67 73 20 61 70 70 72 6f 70  .** Flags approp
1b350 72 69 61 74 65 20 66 6f 72 20 74 68 65 20 77 63  riate for the wc
1b360 74 72 6c 46 6c 61 67 73 20 70 61 72 61 6d 65 74  trlFlags paramet
1b370 65 72 20 6f 66 20 73 71 6c 69 74 65 33 57 68 65  er of sqlite3Whe
1b380 72 65 42 65 67 69 6e 28 29 0a 2a 2a 20 61 6e 64  reBegin().** and
1b390 20 74 68 65 20 57 68 65 72 65 49 6e 66 6f 2e 77   the WhereInfo.w
1b3a0 63 74 72 6c 46 6c 61 67 73 20 6d 65 6d 62 65 72  ctrlFlags member
1b3b0 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f  ..**.** Value co
1b3c0 6e 73 74 72 61 69 6e 74 73 20 28 65 6e 66 6f 72  nstraints (enfor
1b3d0 63 65 64 20 76 69 61 20 61 73 73 65 72 74 28 29  ced via assert()
1b3e0 29 3a 0a 2a 2a 20 20 20 20 20 57 48 45 52 45 5f  ):.**     WHERE_
1b3f0 55 53 45 5f 4c 49 4d 49 54 20 20 3d 3d 20 53 46  USE_LIMIT  == SF
1b400 5f 46 69 78 65 64 4c 69 6d 69 74 0a 2a 2f 0a 23  _FixedLimit.*/.#
1b410 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44  define WHERE_ORD
1b420 45 52 42 59 5f 4e 4f 52 4d 41 4c 20 20 20 30 78  ERBY_NORMAL   0x
1b430 30 30 30 30 20 2f 2a 20 4e 6f 2d 6f 70 20 2a 2f  0000 /* No-op */
1b440 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
1b450 52 44 45 52 42 59 5f 4d 49 4e 20 20 20 20 20 20  RDERBY_MIN      
1b460 30 78 30 30 30 31 20 2f 2a 20 4f 52 44 45 52 20  0x0001 /* ORDER 
1b470 42 59 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f  BY processing fo
1b480 72 20 6d 69 6e 28 29 20 66 75 6e 63 20 2a 2f 0a  r min() func */.
1b490 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52  #define WHERE_OR
1b4a0 44 45 52 42 59 5f 4d 41 58 20 20 20 20 20 20 30  DERBY_MAX      0
1b4b0 78 30 30 30 32 20 2f 2a 20 4f 52 44 45 52 20 42  x0002 /* ORDER B
1b4c0 59 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72  Y processing for
1b4d0 20 6d 61 78 28 29 20 66 75 6e 63 20 2a 2f 0a 23   max() func */.#
1b4e0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45  define WHERE_ONE
1b4f0 50 41 53 53 5f 44 45 53 49 52 45 44 20 20 30 78  PASS_DESIRED  0x
1b500 30 30 30 34 20 2f 2a 20 57 61 6e 74 20 74 6f 20  0004 /* Want to 
1b510 64 6f 20 6f 6e 65 2d 70 61 73 73 20 55 50 44 41  do one-pass UPDA
1b520 54 45 2f 44 45 4c 45 54 45 20 2a 2f 0a 23 64 65  TE/DELETE */.#de
1b530 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50 41  fine WHERE_ONEPA
1b540 53 53 5f 4d 55 4c 54 49 52 4f 57 20 30 78 30 30  SS_MULTIROW 0x00
1b550 30 38 20 2f 2a 20 4f 4e 45 50 41 53 53 20 69 73  08 /* ONEPASS is
1b560 20 6f 6b 20 77 69 74 68 20 6d 75 6c 74 69 70 6c   ok with multipl
1b570 65 20 72 6f 77 73 20 2a 2f 0a 23 64 65 66 69 6e  e rows */.#defin
1b580 65 20 57 48 45 52 45 5f 44 55 50 4c 49 43 41 54  e WHERE_DUPLICAT
1b590 45 53 5f 4f 4b 20 20 20 20 30 78 30 30 31 30 20  ES_OK    0x0010 
1b5a0 2f 2a 20 4f 6b 20 74 6f 20 72 65 74 75 72 6e 20  /* Ok to return 
1b5b0 61 20 72 6f 77 20 6d 6f 72 65 20 74 68 61 6e 20  a row more than 
1b5c0 6f 6e 63 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  once */.#define 
1b5d0 57 48 45 52 45 5f 4f 52 5f 53 55 42 43 4c 41 55  WHERE_OR_SUBCLAU
1b5e0 53 45 20 20 20 20 20 30 78 30 30 32 30 20 2f 2a  SE     0x0020 /*
1b5f0 20 50 72 6f 63 65 73 73 69 6e 67 20 61 20 73 75   Processing a su
1b600 62 2d 57 48 45 52 45 20 61 73 20 70 61 72 74 20  b-WHERE as part 
1b610 6f 66 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  of.             
1b620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b630 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65 20           ** the 
1b640 4f 52 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20  OR optimization 
1b650 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
1b660 45 5f 47 52 4f 55 50 42 59 20 20 20 20 20 20 20  E_GROUPBY       
1b670 20 20 20 30 78 30 30 34 30 20 2f 2a 20 70 4f 72     0x0040 /* pOr
1b680 64 65 72 42 79 20 69 73 20 72 65 61 6c 6c 79 20  derBy is really 
1b690 61 20 47 52 4f 55 50 20 42 59 20 2a 2f 0a 23 64  a GROUP BY */.#d
1b6a0 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54  efine WHERE_DIST
1b6b0 49 4e 43 54 42 59 20 20 20 20 20 20 20 30 78 30  INCTBY       0x0
1b6c0 30 38 30 20 2f 2a 20 70 4f 72 64 65 72 62 79 20  080 /* pOrderby 
1b6d0 69 73 20 72 65 61 6c 6c 79 20 61 20 44 49 53 54  is really a DIST
1b6e0 49 4e 43 54 20 63 6c 61 75 73 65 20 2a 2f 0a 23  INCT clause */.#
1b6f0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 57 41 4e  define WHERE_WAN
1b700 54 5f 44 49 53 54 49 4e 43 54 20 20 20 20 30 78  T_DISTINCT    0x
1b710 30 31 30 30 20 2f 2a 20 41 6c 6c 20 6f 75 74 70  0100 /* All outp
1b720 75 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 64  ut needs to be d
1b730 69 73 74 69 6e 63 74 20 2a 2f 0a 23 64 65 66 69  istinct */.#defi
1b740 6e 65 20 57 48 45 52 45 5f 53 4f 52 54 42 59 47  ne WHERE_SORTBYG
1b750 52 4f 55 50 20 20 20 20 20 20 30 78 30 32 30 30  ROUP      0x0200
1b760 20 2f 2a 20 53 75 70 70 6f 72 74 20 73 71 6c 69   /* Support sqli
1b770 74 65 33 57 68 65 72 65 49 73 53 6f 72 74 65 64  te3WhereIsSorted
1b780 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  () */.#define WH
1b790 45 52 45 5f 53 45 45 4b 5f 54 41 42 4c 45 20 20  ERE_SEEK_TABLE  
1b7a0 20 20 20 20 20 30 78 30 34 30 30 20 2f 2a 20 44       0x0400 /* D
1b7b0 6f 20 6e 6f 74 20 64 65 66 65 72 20 73 65 65 6b  o not defer seek
1b7c0 73 20 6f 6e 20 6d 61 69 6e 20 74 61 62 6c 65 20  s on main table 
1b7d0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1b7e0 5f 4f 52 44 45 52 42 59 5f 4c 49 4d 49 54 20 20  _ORDERBY_LIMIT  
1b7f0 20 20 30 78 30 38 30 30 20 2f 2a 20 4f 52 44 45    0x0800 /* ORDE
1b800 52 42 59 2b 4c 49 4d 49 54 20 6f 6e 20 74 68 65  RBY+LIMIT on the
1b810 20 69 6e 6e 65 72 20 6c 6f 6f 70 20 2a 2f 0a 23   inner loop */.#
1b820 64 65 66 69 6e 65 20 57 48 45 52 45 5f 53 45 45  define WHERE_SEE
1b830 4b 5f 55 4e 49 51 5f 54 41 42 4c 45 20 20 30 78  K_UNIQ_TABLE  0x
1b840 31 30 30 30 20 2f 2a 20 44 6f 20 6e 6f 74 20 64  1000 /* Do not d
1b850 65 66 65 72 20 73 65 65 6b 73 20 69 66 20 75 6e  efer seeks if un
1b860 69 71 75 65 20 2a 2f 0a 20 20 20 20 20 20 20 20  ique */.        
1b870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b880 2f 2a 20 20 20 20 20 30 78 32 30 30 30 20 20 20  /*     0x2000   
1b890 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 75   not currently u
1b8a0 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  sed */.#define W
1b8b0 48 45 52 45 5f 55 53 45 5f 4c 49 4d 49 54 20 20  HERE_USE_LIMIT  
1b8c0 20 20 20 20 20 20 30 78 34 30 30 30 20 2f 2a 20        0x4000 /* 
1b8d0 55 73 65 20 74 68 65 20 4c 49 4d 49 54 20 69 6e  Use the LIMIT in
1b8e0 20 63 6f 73 74 20 65 73 74 69 6d 61 74 65 73 20   cost estimates 
1b8f0 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  */.             
1b900 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20             /*   
1b910 20 20 30 78 38 30 30 30 20 20 20 20 6e 6f 74 20    0x8000    not 
1b920 63 75 72 72 65 6e 74 6c 79 20 75 73 65 64 20 2a  currently used *
1b930 2f 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 72 65  /../* Allowed re
1b940 74 75 72 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d  turn values from
1b950 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 44   sqlite3WhereIsD
1b960 69 73 74 69 6e 63 74 28 29 0a 2a 2f 0a 23 64 65  istinct().*/.#de
1b970 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49  fine WHERE_DISTI
1b980 4e 43 54 5f 4e 4f 4f 50 20 20 20 20 20 20 30 20  NCT_NOOP      0 
1b990 20 2f 2a 20 44 49 53 54 49 4e 43 54 20 6b 65 79   /* DISTINCT key
1b9a0 77 6f 72 64 20 6e 6f 74 20 75 73 65 64 20 2a 2f  word not used */
1b9b0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44  .#define WHERE_D
1b9c0 49 53 54 49 4e 43 54 5f 55 4e 49 51 55 45 20 20  ISTINCT_UNIQUE  
1b9d0 20 20 31 20 20 2f 2a 20 4e 6f 20 64 75 70 6c 69    1  /* No dupli
1b9e0 63 61 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  cates */.#define
1b9f0 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f   WHERE_DISTINCT_
1ba00 4f 52 44 45 52 45 44 20 20 20 32 20 20 2f 2a 20  ORDERED   2  /* 
1ba10 41 6c 6c 20 64 75 70 6c 69 63 61 74 65 73 20 61  All duplicates a
1ba20 72 65 20 61 64 6a 61 63 65 6e 74 20 2a 2f 0a 23  re adjacent */.#
1ba30 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53  define WHERE_DIS
1ba40 54 49 4e 43 54 5f 55 4e 4f 52 44 45 52 45 44 20  TINCT_UNORDERED 
1ba50 33 20 20 2f 2a 20 44 75 70 6c 69 63 61 74 65 73  3  /* Duplicates
1ba60 20 61 72 65 20 73 63 61 74 74 65 72 65 64 20 2a   are scattered *
1ba70 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e 61 6d 65 43  /../*.** A NameC
1ba80 6f 6e 74 65 78 74 20 64 65 66 69 6e 65 73 20 61  ontext defines a
1ba90 20 63 6f 6e 74 65 78 74 20 69 6e 20 77 68 69 63   context in whic
1baa0 68 20 74 6f 20 72 65 73 6f 6c 76 65 20 74 61 62  h to resolve tab
1bab0 6c 65 20 61 6e 64 20 63 6f 6c 75 6d 6e 0a 2a 2a  le and column.**
1bac0 20 6e 61 6d 65 73 2e 20 20 54 68 65 20 63 6f 6e   names.  The con
1bad0 74 65 78 74 20 63 6f 6e 73 69 73 74 73 20 6f 66  text consists of
1bae0 20 61 20 6c 69 73 74 20 6f 66 20 74 61 62 6c 65   a list of table
1baf0 73 20 28 74 68 65 20 70 53 72 63 4c 69 73 74 29  s (the pSrcList)
1bb00 20 66 69 65 6c 64 20 61 6e 64 0a 2a 2a 20 61 20   field and.** a 
1bb10 6c 69 73 74 20 6f 66 20 6e 61 6d 65 64 20 65 78  list of named ex
1bb20 70 72 65 73 73 69 6f 6e 20 28 70 45 4c 69 73 74  pression (pEList
1bb30 29 2e 20 20 54 68 65 20 6e 61 6d 65 64 20 65 78  ).  The named ex
1bb40 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 20 6d 61  pression list ma
1bb50 79 0a 2a 2a 20 62 65 20 4e 55 4c 4c 2e 20 20 54  y.** be NULL.  T
1bb60 68 65 20 70 53 72 63 20 63 6f 72 72 65 73 70 6f  he pSrc correspo
1bb70 6e 64 73 20 74 6f 20 74 68 65 20 46 52 4f 4d 20  nds to the FROM 
1bb80 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45  clause of a SELE
1bb90 43 54 20 6f 72 0a 2a 2a 20 74 6f 20 74 68 65 20  CT or.** to the 
1bba0 74 61 62 6c 65 20 62 65 69 6e 67 20 6f 70 65 72  table being oper
1bbb0 61 74 65 64 20 6f 6e 20 62 79 20 49 4e 53 45 52  ated on by INSER
1bbc0 54 2c 20 55 50 44 41 54 45 2c 20 6f 72 20 44 45  T, UPDATE, or DE
1bbd0 4c 45 54 45 2e 20 20 54 68 65 0a 2a 2a 20 70 45  LETE.  The.** pE
1bbe0 4c 69 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 73  List corresponds
1bbf0 20 74 6f 20 74 68 65 20 72 65 73 75 6c 74 20 73   to the result s
1bc00 65 74 20 6f 66 20 61 20 53 45 4c 45 43 54 20 61  et of a SELECT a
1bc10 6e 64 20 69 73 20 4e 55 4c 4c 20 66 6f 72 0a 2a  nd is NULL for.*
1bc20 2a 20 6f 74 68 65 72 20 73 74 61 74 65 6d 65 6e  * other statemen
1bc30 74 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65 43 6f  ts..**.** NameCo
1bc40 6e 74 65 78 74 73 20 63 61 6e 20 62 65 20 6e 65  ntexts can be ne
1bc50 73 74 65 64 2e 20 20 57 68 65 6e 20 72 65 73 6f  sted.  When reso
1bc60 6c 76 69 6e 67 20 6e 61 6d 65 73 2c 20 74 68 65  lving names, the
1bc70 20 69 6e 6e 65 72 2d 6d 6f 73 74 0a 2a 2a 20 63   inner-most.** c
1bc80 6f 6e 74 65 78 74 20 69 73 20 73 65 61 72 63 68  ontext is search
1bc90 65 64 20 66 69 72 73 74 2e 20 20 49 66 20 6e 6f  ed first.  If no
1bca0 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c   match is found,
1bcb0 20 74 68 65 20 6e 65 78 74 20 6f 75 74 65 72 0a   the next outer.
1bcc0 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73 20 63 68  ** context is ch
1bcd0 65 63 6b 65 64 2e 20 20 49 66 20 74 68 65 72 65  ecked.  If there
1bce0 20 69 73 20 73 74 69 6c 6c 20 6e 6f 20 6d 61 74   is still no mat
1bcf0 63 68 2c 20 74 68 65 20 6e 65 78 74 20 63 6f 6e  ch, the next con
1bd00 74 65 78 74 0a 2a 2a 20 69 73 20 63 68 65 63 6b  text.** is check
1bd10 65 64 2e 20 20 54 68 69 73 20 70 72 6f 63 65 73  ed.  This proces
1bd20 73 20 63 6f 6e 74 69 6e 75 65 73 20 75 6e 74 69  s continues unti
1bd30 6c 20 65 69 74 68 65 72 20 61 20 6d 61 74 63 68  l either a match
1bd40 20 69 73 20 66 6f 75 6e 64 0a 2a 2a 20 6f 72 20   is found.** or 
1bd50 61 6c 6c 20 63 6f 6e 74 65 78 74 73 20 61 72 65  all contexts are
1bd60 20 63 68 65 63 6b 2e 20 20 57 68 65 6e 20 61 20   check.  When a 
1bd70 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20  match is found, 
1bd80 74 68 65 20 6e 52 65 66 20 6d 65 6d 62 65 72 20  the nRef member 
1bd90 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 78  of.** the contex
1bda0 74 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  t containing the
1bdb0 20 6d 61 74 63 68 20 69 73 20 69 6e 63 72 65 6d   match is increm
1bdc0 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 45 61 63  ented..**.** Eac
1bdd0 68 20 73 75 62 71 75 65 72 79 20 67 65 74 73 20  h subquery gets 
1bde0 61 20 6e 65 77 20 4e 61 6d 65 43 6f 6e 74 65 78  a new NameContex
1bdf0 74 2e 20 20 54 68 65 20 70 4e 65 78 74 20 66 69  t.  The pNext fi
1be00 65 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20 74 68  eld points to th
1be10 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74  e.** NameContext
1be20 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20 71   in the parent q
1be30 75 65 72 79 2e 20 20 54 68 75 73 20 74 68 65 20  uery.  Thus the 
1be40 70 72 6f 63 65 73 73 20 6f 66 20 73 63 61 6e 6e  process of scann
1be50 69 6e 67 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43  ing the.** NameC
1be60 6f 6e 74 65 78 74 20 6c 69 73 74 20 63 6f 72 72  ontext list corr
1be70 65 73 70 6f 6e 64 73 20 74 6f 20 73 65 61 72 63  esponds to searc
1be80 68 69 6e 67 20 74 68 72 6f 75 67 68 20 73 75 63  hing through suc
1be90 63 65 73 73 69 76 65 6c 79 20 6f 75 74 65 72 0a  cessively outer.
1bea0 2a 2a 20 73 75 62 71 75 65 72 69 65 73 20 6c 6f  ** subqueries lo
1beb0 6f 6b 69 6e 67 20 66 6f 72 20 61 20 6d 61 74 63  oking for a matc
1bec0 68 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4e 61 6d  h..*/.struct Nam
1bed0 65 43 6f 6e 74 65 78 74 20 7b 0a 20 20 50 61 72  eContext {.  Par
1bee0 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20  se *pParse;     
1bef0 20 20 2f 2a 20 54 68 65 20 70 61 72 73 65 72 20    /* The parser 
1bf00 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53  */.  SrcList *pS
1bf10 72 63 4c 69 73 74 3b 20 20 20 2f 2a 20 4f 6e 65  rcList;   /* One
1bf20 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65 73 20   or more tables 
1bf30 75 73 65 64 20 74 6f 20 72 65 73 6f 6c 76 65 20  used to resolve 
1bf40 6e 61 6d 65 73 20 2a 2f 0a 20 20 75 6e 69 6f 6e  names */.  union
1bf50 20 7b 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20   {.    ExprList 
1bf60 2a 70 45 4c 69 73 74 3b 20 20 20 20 2f 2a 20 4f  *pEList;    /* O
1bf70 70 74 69 6f 6e 61 6c 20 6c 69 73 74 20 6f 66 20  ptional list of 
1bf80 72 65 73 75 6c 74 2d 73 65 74 20 63 6f 6c 75 6d  result-set colum
1bf90 6e 73 20 2a 2f 0a 20 20 20 20 41 67 67 49 6e 66  ns */.    AggInf
1bfa0 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20 2f  o *pAggInfo;   /
1bfb0 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  * Information ab
1bfc0 6f 75 74 20 61 67 67 72 65 67 61 74 65 73 20 61  out aggregates a
1bfd0 74 20 74 68 69 73 20 6c 65 76 65 6c 20 2a 2f 0a  t this level */.
1bfe0 20 20 20 20 55 70 73 65 72 74 20 2a 70 55 70 73      Upsert *pUps
1bff0 65 72 74 3b 20 20 20 20 20 2f 2a 20 4f 4e 20 43  ert;     /* ON C
1c000 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 69  ONFLICT clause i
1c010 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20  nformation from 
1c020 61 6e 20 75 70 73 65 72 74 20 2a 2f 0a 20 20 7d  an upsert */.  }
1c030 20 75 4e 43 3b 0a 20 20 4e 61 6d 65 43 6f 6e 74   uNC;.  NameCont
1c040 65 78 74 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20  ext *pNext;  /* 
1c050 4e 65 78 74 20 6f 75 74 65 72 20 6e 61 6d 65 20  Next outer name 
1c060 63 6f 6e 74 65 78 74 2e 20 20 4e 55 4c 4c 20 66  context.  NULL f
1c070 6f 72 20 6f 75 74 65 72 6d 6f 73 74 20 2a 2f 0a  or outermost */.
1c080 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20    int nRef;     
1c090 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1c0a0 20 6f 66 20 6e 61 6d 65 73 20 72 65 73 6f 6c 76   of names resolv
1c0b0 65 64 20 62 79 20 74 68 69 73 20 63 6f 6e 74 65  ed by this conte
1c0c0 78 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72  xt */.  int nErr
1c0d0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1c0e0 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73  Number of errors
1c0f0 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 77 68 69   encountered whi
1c100 6c 65 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d  le resolving nam
1c110 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 63 46 6c  es */.  u16 ncFl
1c120 61 67 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ags;         /* 
1c130 5a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 4e 43 5f  Zero or more NC_
1c140 2a 20 66 6c 61 67 73 20 64 65 66 69 6e 65 64 20  * flags defined 
1c150 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  below */.};../*.
1c160 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65  ** Allowed value
1c170 73 20 66 6f 72 20 74 68 65 20 4e 61 6d 65 43 6f  s for the NameCo
1c180 6e 74 65 78 74 2c 20 6e 63 46 6c 61 67 73 20 66  ntext, ncFlags f
1c190 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75  ield..**.** Valu
1c1a0 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 61  e constraints (a
1c1b0 6c 6c 20 63 68 65 63 6b 65 64 20 76 69 61 20 61  ll checked via a
1c1c0 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20  ssert()):.**    
1c1d0 4e 43 5f 48 61 73 41 67 67 20 20 20 20 3d 3d 20  NC_HasAgg    == 
1c1e0 53 46 5f 48 61 73 41 67 67 0a 2a 2a 20 20 20 20  SF_HasAgg.**    
1c1f0 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20 3d 3d 20  NC_MinMaxAgg == 
1c200 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20 3d 3d 20  SF_MinMaxAgg == 
1c210 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d  SQLITE_FUNC_MINM
1c220 41 58 0a 2a 2a 0a 2a 2f 0a 23 64 65 66 69 6e 65  AX.**.*/.#define
1c230 20 4e 43 5f 41 6c 6c 6f 77 41 67 67 20 20 30 78   NC_AllowAgg  0x
1c240 30 30 30 31 20 20 2f 2a 20 41 67 67 72 65 67 61  0001  /* Aggrega
1c250 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65  te functions are
1c260 20 61 6c 6c 6f 77 65 64 20 68 65 72 65 20 2a 2f   allowed here */
1c270 0a 23 64 65 66 69 6e 65 20 4e 43 5f 50 61 72 74  .#define NC_Part
1c280 49 64 78 20 20 20 30 78 30 30 30 32 20 20 2f 2a  Idx   0x0002  /*
1c290 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76 69   True if resolvi
1c2a0 6e 67 20 61 20 70 61 72 74 69 61 6c 20 69 6e 64  ng a partial ind
1c2b0 65 78 20 57 48 45 52 45 20 2a 2f 0a 23 64 65 66  ex WHERE */.#def
1c2c0 69 6e 65 20 4e 43 5f 49 73 43 68 65 63 6b 20 20  ine NC_IsCheck  
1c2d0 20 30 78 30 30 30 34 20 20 2f 2a 20 54 72 75 65   0x0004  /* True
1c2e0 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61   if resolving na
1c2f0 6d 65 73 20 69 6e 20 61 20 43 48 45 43 4b 20 63  mes in a CHECK c
1c300 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65  onstraint */.#de
1c310 66 69 6e 65 20 4e 43 5f 49 6e 41 67 67 46 75 6e  fine NC_InAggFun
1c320 63 20 30 78 30 30 30 38 20 20 2f 2a 20 54 72 75  c 0x0008  /* Tru
1c330 65 20 69 66 20 61 6e 61 6c 79 7a 69 6e 67 20 61  e if analyzing a
1c340 72 67 75 6d 65 6e 74 73 20 74 6f 20 61 6e 20 61  rguments to an a
1c350 67 67 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69  gg func */.#defi
1c360 6e 65 20 4e 43 5f 48 61 73 41 67 67 20 20 20 20  ne NC_HasAgg    
1c370 30 78 30 30 31 30 20 20 2f 2a 20 4f 6e 65 20 6f  0x0010  /* One o
1c380 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65  r more aggregate
1c390 20 66 75 6e 63 74 69 6f 6e 73 20 73 65 65 6e 20   functions seen 
1c3a0 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 64  */.#define NC_Id
1c3b0 78 45 78 70 72 20 20 20 30 78 30 30 32 30 20 20  xExpr   0x0020  
1c3c0 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c  /* True if resol
1c3d0 76 69 6e 67 20 63 6f 6c 75 6d 6e 73 20 6f 66 20  ving columns of 
1c3e0 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a  CREATE INDEX */.
1c3f0 23 64 65 66 69 6e 65 20 4e 43 5f 56 61 72 53 65  #define NC_VarSe
1c400 6c 65 63 74 20 30 78 30 30 34 30 20 20 2f 2a 20  lect 0x0040  /* 
1c410 41 20 63 6f 72 72 65 6c 61 74 65 64 20 73 75 62  A correlated sub
1c420 71 75 65 72 79 20 68 61 73 20 62 65 65 6e 20 73  query has been s
1c430 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  een */.#define N
1c440 43 5f 55 45 4c 69 73 74 20 20 20 20 30 78 30 30  C_UEList    0x00
1c450 38 30 20 20 2f 2a 20 54 72 75 65 20 69 66 20 75  80  /* True if u
1c460 4e 43 2e 70 45 4c 69 73 74 20 69 73 20 75 73 65  NC.pEList is use
1c470 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  d */.#define NC_
1c480 55 41 67 67 49 6e 66 6f 20 20 30 78 30 31 30 30  UAggInfo  0x0100
1c490 20 20 2f 2a 20 54 72 75 65 20 69 66 20 75 4e 43    /* True if uNC
1c4a0 2e 70 41 67 67 49 6e 66 6f 20 69 73 20 75 73 65  .pAggInfo is use
1c4b0 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  d */.#define NC_
1c4c0 55 55 70 73 65 72 74 20 20 20 30 78 30 32 30 30  UUpsert   0x0200
1c4d0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 75 4e 43    /* True if uNC
1c4e0 2e 70 55 70 73 65 72 74 20 69 73 20 75 73 65 64  .pUpsert is used
1c4f0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 4d   */.#define NC_M
1c500 69 6e 4d 61 78 41 67 67 20 30 78 31 30 30 30 20  inMaxAgg 0x1000 
1c510 20 2f 2a 20 6d 69 6e 2f 6d 61 78 20 61 67 67 72   /* min/max aggr
1c520 65 67 61 74 65 73 20 73 65 65 6e 2e 20 20 53 65  egates seen.  Se
1c530 65 20 6e 6f 74 65 20 61 62 6f 76 65 20 2a 2f 0a  e note above */.
1c540 23 64 65 66 69 6e 65 20 4e 43 5f 43 6f 6d 70 6c  #define NC_Compl
1c550 65 78 20 20 20 30 78 32 30 30 30 20 20 2f 2a 20  ex   0x2000  /* 
1c560 54 72 75 65 20 69 66 20 61 20 66 75 6e 63 74 69  True if a functi
1c570 6f 6e 20 6f 72 20 73 75 62 71 75 65 72 79 20 73  on or subquery s
1c580 65 65 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e  een */../*.** An
1c590 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
1c5a0 20 66 6f 6c 6c 6f 77 69 6e 67 20 6f 62 6a 65 63   following objec
1c5b0 74 20 64 65 73 63 72 69 62 65 73 20 61 20 73 69  t describes a si
1c5c0 6e 67 6c 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  ngle ON CONFLICT
1c5d0 0a 2a 2a 20 63 6c 61 75 73 65 20 69 6e 20 61 6e  .** clause in an
1c5e0 20 75 70 73 65 72 74 2e 0a 2a 2a 0a 2a 2a 20 54   upsert..**.** T
1c5f0 68 65 20 70 55 70 73 65 72 74 54 61 72 67 65 74  he pUpsertTarget
1c600 20 66 69 65 6c 64 20 69 73 20 6f 6e 6c 79 20 73   field is only s
1c610 65 74 20 69 66 20 74 68 65 20 4f 4e 20 43 4f 4e  et if the ON CON
1c620 46 4c 49 43 54 20 63 6c 61 75 73 65 20 69 6e 63  FLICT clause inc
1c630 6c 75 64 65 73 0a 2a 2a 20 63 6f 6e 66 6c 69 63  ludes.** conflic
1c640 74 2d 74 61 72 67 65 74 20 63 6c 61 75 73 65 2e  t-target clause.
1c650 20 20 28 49 6e 20 22 4f 4e 20 43 4f 4e 46 4c 49    (In "ON CONFLI
1c660 43 54 28 61 2c 62 29 22 20 74 68 65 20 22 28 61  CT(a,b)" the "(a
1c670 2c 62 29 22 20 69 73 20 74 68 65 0a 2a 2a 20 63  ,b)" is the.** c
1c680 6f 6e 66 6c 69 63 74 2d 74 61 72 67 65 74 20 63  onflict-target c
1c690 6c 61 75 73 65 2e 29 20 20 54 68 65 20 70 55 70  lause.)  The pUp
1c6a0 73 65 72 74 54 61 72 67 65 74 57 68 65 72 65 20  sertTargetWhere 
1c6b0 69 73 20 74 68 65 20 6f 70 74 69 6f 6e 61 6c 0a  is the optional.
1c6c0 2a 2a 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  ** WHERE clause 
1c6d0 75 73 65 64 20 74 6f 20 69 64 65 6e 74 69 66 79  used to identify
1c6e0 20 70 61 72 74 69 61 6c 20 75 6e 69 71 75 65 20   partial unique 
1c6f0 69 6e 64 65 78 65 73 2e 0a 2a 2a 0a 2a 2a 20 70  indexes..**.** p
1c700 55 70 73 65 72 74 53 65 74 20 69 73 20 74 68 65  UpsertSet is the
1c710 20 6c 69 73 74 20 6f 66 20 63 6f 6c 75 6d 6e 3d   list of column=
1c720 65 78 70 72 20 74 65 72 6d 73 20 6f 66 20 74 68  expr terms of th
1c730 65 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65  e UPDATE stateme
1c740 6e 74 2e 20 0a 2a 2a 20 54 68 65 20 70 55 70 73  nt. .** The pUps
1c750 65 72 74 53 65 74 20 66 69 65 6c 64 20 69 73 20  ertSet field is 
1c760 4e 55 4c 4c 20 66 6f 72 20 61 20 4f 4e 20 43 4f  NULL for a ON CO
1c770 4e 46 4c 49 43 54 20 44 4f 20 4e 4f 54 48 49 4e  NFLICT DO NOTHIN
1c780 47 2e 20 20 54 68 65 0a 2a 2a 20 70 55 70 73 65  G.  The.** pUpse
1c790 72 74 57 68 65 72 65 20 69 73 20 74 68 65 20 57  rtWhere is the W
1c7a0 48 45 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20  HERE clause for 
1c7b0 74 68 65 20 55 50 44 41 54 45 20 61 6e 64 20 69  the UPDATE and i
1c7c0 73 20 4e 55 4c 4c 20 69 66 20 74 68 65 0a 2a 2a  s NULL if the.**
1c7d0 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 69 73   WHERE clause is
1c7e0 20 6f 6d 69 74 74 65 64 2e 0a 2a 2f 0a 73 74 72   omitted..*/.str
1c7f0 75 63 74 20 55 70 73 65 72 74 20 7b 0a 20 20 45  uct Upsert {.  E
1c800 78 70 72 4c 69 73 74 20 2a 70 55 70 73 65 72 74  xprList *pUpsert
1c810 54 61 72 67 65 74 3b 20 20 2f 2a 20 4f 70 74 69  Target;  /* Opti
1c820 6f 6e 61 6c 20 64 65 73 63 72 69 70 74 69 6f 6e  onal description
1c830 20 6f 66 20 63 6f 6e 66 6c 69 63 74 69 6e 67 20   of conflicting 
1c840 69 6e 64 65 78 20 2a 2f 0a 20 20 45 78 70 72 20  index */.  Expr 
1c850 2a 70 55 70 73 65 72 74 54 61 72 67 65 74 57 68  *pUpsertTargetWh
1c860 65 72 65 3b 20 2f 2a 20 57 48 45 52 45 20 63 6c  ere; /* WHERE cl
1c870 61 75 73 65 20 66 6f 72 20 70 61 72 74 69 61 6c  ause for partial
1c880 20 69 6e 64 65 78 20 74 61 72 67 65 74 73 20 2a   index targets *
1c890 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 55  /.  ExprList *pU
1c8a0 70 73 65 72 74 53 65 74 3b 20 20 20 20 20 2f 2a  psertSet;     /*
1c8b0 20 54 68 65 20 53 45 54 20 63 6c 61 75 73 65 20   The SET clause 
1c8c0 66 72 6f 6d 20 61 6e 20 4f 4e 20 43 4f 4e 46 4c  from an ON CONFL
1c8d0 49 43 54 20 55 50 44 41 54 45 20 2a 2f 0a 20 20  ICT UPDATE */.  
1c8e0 45 78 70 72 20 2a 70 55 70 73 65 72 74 57 68 65  Expr *pUpsertWhe
1c8f0 72 65 3b 20 20 20 20 20 20 20 2f 2a 20 57 48 45  re;       /* WHE
1c900 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20 74 68  RE clause for th
1c910 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 55 50  e ON CONFLICT UP
1c920 44 41 54 45 20 2a 2f 0a 20 20 2f 2a 20 54 68 65  DATE */.  /* The
1c930 20 66 69 65 6c 64 73 20 61 62 6f 76 65 20 63 6f   fields above co
1c940 6d 70 72 69 73 65 20 74 68 65 20 70 61 72 73 65  mprise the parse
1c950 20 74 72 65 65 20 66 6f 72 20 74 68 65 20 75 70   tree for the up
1c960 73 65 72 74 20 63 6c 61 75 73 65 2e 0a 20 20 2a  sert clause..  *
1c970 2a 20 54 68 65 20 66 69 65 6c 64 73 20 62 65 6c  * The fields bel
1c980 6f 77 20 61 72 65 20 75 73 65 64 20 74 6f 20 74  ow are used to t
1c990 72 61 6e 73 66 65 72 20 69 6e 66 6f 72 6d 61 74  ransfer informat
1c9a0 69 6f 6e 20 66 72 6f 6d 20 74 68 65 20 49 4e 53  ion from the INS
1c9b0 45 52 54 0a 20 20 2a 2a 20 70 72 6f 63 65 73 73  ERT.  ** process
1c9c0 69 6e 67 20 64 6f 77 6e 20 69 6e 74 6f 20 74 68  ing down into th
1c9d0 65 20 55 50 44 41 54 45 20 70 72 6f 63 65 73 73  e UPDATE process
1c9e0 69 6e 67 20 77 68 69 6c 65 20 67 65 6e 65 72 61  ing while genera
1c9f0 74 69 6e 67 20 63 6f 64 65 2e 0a 20 20 2a 2a 20  ting code..  ** 
1ca00 55 70 73 65 72 74 20 6f 77 6e 73 20 74 68 65 20  Upsert owns the 
1ca10 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 65 64  memory allocated
1ca20 20 61 62 6f 76 65 2c 20 62 75 74 20 6e 6f 74 20   above, but not 
1ca30 74 68 65 20 6d 65 6d 6f 72 79 20 62 65 6c 6f 77  the memory below
1ca40 2e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 55  . */.  Index *pU
1ca50 70 73 65 72 74 49 64 78 3b 20 20 20 20 20 20 20  psertIdx;       
1ca60 20 2f 2a 20 43 6f 6e 73 74 72 61 69 6e 74 20 74   /* Constraint t
1ca70 68 61 74 20 70 55 70 73 65 72 74 54 61 72 67 65  hat pUpsertTarge
1ca80 74 20 69 64 65 6e 74 69 66 69 65 73 20 2a 2f 0a  t identifies */.
1ca90 20 20 53 72 63 4c 69 73 74 20 2a 70 55 70 73 65    SrcList *pUpse
1caa0 72 74 53 72 63 3b 20 20 20 20 20 20 2f 2a 20 54  rtSrc;      /* T
1cab0 61 62 6c 65 20 74 6f 20 62 65 20 75 70 64 61 74  able to be updat
1cac0 65 64 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 44  ed */.  int regD
1cad0 61 74 61 3b 20 20 20 20 20 20 20 20 20 20 20 20  ata;            
1cae0 20 20 2f 2a 20 46 69 72 73 74 20 72 65 67 69 73    /* First regis
1caf0 74 65 72 20 68 6f 6c 64 69 6e 67 20 61 72 72 61  ter holding arra
1cb00 79 20 6f 66 20 56 41 4c 55 45 53 20 2a 2f 0a 20  y of VALUES */. 
1cb10 20 69 6e 74 20 69 44 61 74 61 43 75 72 3b 20 20   int iDataCur;  
1cb20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e             /* In
1cb30 64 65 78 20 6f 66 20 74 68 65 20 64 61 74 61 20  dex of the data 
1cb40 63 75 72 73 6f 72 20 2a 2f 0a 20 20 69 6e 74 20  cursor */.  int 
1cb50 69 49 64 78 43 75 72 3b 20 20 20 20 20 20 20 20  iIdxCur;        
1cb60 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f        /* Index o
1cb70 66 20 74 68 65 20 66 69 72 73 74 20 69 6e 64 65  f the first inde
1cb80 78 20 63 75 72 73 6f 72 20 2a 2f 0a 7d 3b 0a 0a  x cursor */.};..
1cb90 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
1cba0 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
1cbb0 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e  ng structure con
1cbc0 74 61 69 6e 73 20 61 6c 6c 20 69 6e 66 6f 72 6d  tains all inform
1cbd0 61 74 69 6f 6e 0a 2a 2a 20 6e 65 65 64 65 64 20  ation.** needed 
1cbe0 74 6f 20 67 65 6e 65 72 61 74 65 20 63 6f 64 65  to generate code
1cbf0 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 53 45   for a single SE
1cc00 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a  LECT statement..
1cc10 2a 2a 0a 2a 2a 20 53 65 65 20 74 68 65 20 68 65  **.** See the he
1cc20 61 64 65 72 20 63 6f 6d 6d 65 6e 74 20 6f 6e 20  ader comment on 
1cc30 74 68 65 20 63 6f 6d 70 75 74 65 4c 69 6d 69 74  the computeLimit
1cc40 52 65 67 69 73 74 65 72 73 28 29 20 72 6f 75 74  Registers() rout
1cc50 69 6e 65 20 66 6f 72 20 61 0a 2a 2a 20 64 65 74  ine for a.** det
1cc60 61 69 6c 65 64 20 64 65 73 63 72 69 70 74 69 6f  ailed descriptio
1cc70 6e 20 6f 66 20 74 68 65 20 6d 65 61 6e 69 6e 67  n of the meaning
1cc80 20 6f 66 20 74 68 65 20 69 4c 69 6d 69 74 20 61   of the iLimit a
1cc90 6e 64 20 69 4f 66 66 73 65 74 20 66 69 65 6c 64  nd iOffset field
1cca0 73 2e 0a 2a 2a 0a 2a 2a 20 61 64 64 72 4f 70 65  s..**.** addrOpe
1ccb0 6e 45 70 68 6d 5b 5d 20 65 6e 74 72 69 65 73 20  nEphm[] entries 
1ccc0 63 6f 6e 74 61 69 6e 20 74 68 65 20 61 64 64 72  contain the addr
1ccd0 65 73 73 20 6f 66 20 4f 50 5f 4f 70 65 6e 45 70  ess of OP_OpenEp
1cce0 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65 73 2e  hemeral opcodes.
1ccf0 0a 2a 2a 20 54 68 65 73 65 20 61 64 64 72 65 73  .** These addres
1cd00 73 65 73 20 6d 75 73 74 20 62 65 20 73 74 6f 72  ses must be stor
1cd10 65 64 20 73 6f 20 74 68 61 74 20 77 65 20 63 61  ed so that we ca
1cd20 6e 20 67 6f 20 62 61 63 6b 20 61 6e 64 20 66 69  n go back and fi
1cd30 6c 6c 20 69 6e 0a 2a 2a 20 74 68 65 20 50 34 5f  ll in.** the P4_
1cd40 4b 45 59 49 4e 46 4f 20 61 6e 64 20 50 32 20 70  KEYINFO and P2 p
1cd50 61 72 61 6d 65 74 65 72 73 20 6c 61 74 65 72 2e  arameters later.
1cd60 20 20 4e 65 69 74 68 65 72 20 74 68 65 20 4b 65    Neither the Ke
1cd70 79 49 6e 66 6f 20 6e 6f 72 0a 2a 2a 20 74 68 65  yInfo nor.** the
1cd80 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
1cd90 6e 73 20 69 6e 20 50 32 20 63 61 6e 20 62 65 20  ns in P2 can be 
1cda0 63 6f 6d 70 75 74 65 64 20 61 74 20 74 68 65 20  computed at the 
1cdb0 73 61 6d 65 20 74 69 6d 65 0a 2a 2a 20 61 73 20  same time.** as 
1cdc0 74 68 65 20 4f 50 5f 4f 70 65 6e 45 70 68 6d 20  the OP_OpenEphm 
1cdd0 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 63  instruction is c
1cde0 6f 64 65 64 20 62 65 63 61 75 73 65 20 6e 6f 74  oded because not
1cdf0 0a 2a 2a 20 65 6e 6f 75 67 68 20 69 6e 66 6f 72  .** enough infor
1ce00 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65  mation about the
1ce10 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79 20   compound query 
1ce20 69 73 20 6b 6e 6f 77 6e 20 61 74 20 74 68 61 74  is known at that
1ce30 20 70 6f 69 6e 74 2e 0a 2a 2a 20 54 68 65 20 4b   point..** The K
1ce40 65 79 49 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f  eyInfo for addrO
1ce50 70 65 6e 54 72 61 6e 5b 30 5d 20 61 6e 64 20 5b  penTran[0] and [
1ce60 31 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c  1] contains coll
1ce70 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 0a  ating sequences.
1ce80 2a 2a 20 66 6f 72 20 74 68 65 20 72 65 73 75 6c  ** for the resul
1ce90 74 20 73 65 74 2e 20 20 54 68 65 20 4b 65 79 49  t set.  The KeyI
1cea0 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e  nfo for addrOpen
1ceb0 45 70 68 6d 5b 32 5d 20 63 6f 6e 74 61 69 6e 73  Ephm[2] contains
1cec0 20 63 6f 6c 6c 61 74 69 6e 67 0a 2a 2a 20 73 65   collating.** se
1ced0 71 75 65 6e 63 65 73 20 66 6f 72 20 74 68 65 20  quences for the 
1cee0 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e  ORDER BY clause.
1cef0 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c 65 63  .*/.struct Selec
1cf00 74 20 7b 0a 20 20 45 78 70 72 4c 69 73 74 20 2a  t {.  ExprList *
1cf10 70 45 4c 69 73 74 3b 20 20 20 20 20 20 2f 2a 20  pEList;      /* 
1cf20 54 68 65 20 66 69 65 6c 64 73 20 6f 66 20 74 68  The fields of th
1cf30 65 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20 75 38  e result */.  u8
1cf40 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20   op;            
1cf50 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 3a 20       /* One of: 
1cf60 54 4b 5f 55 4e 49 4f 4e 20 54 4b 5f 41 4c 4c 20  TK_UNION TK_ALL 
1cf70 54 4b 5f 49 4e 54 45 52 53 45 43 54 20 54 4b 5f  TK_INTERSECT TK_
1cf80 45 58 43 45 50 54 20 2a 2f 0a 20 20 4c 6f 67 45  EXCEPT */.  LogE
1cf90 73 74 20 6e 53 65 6c 65 63 74 52 6f 77 3b 20 20  st nSelectRow;  
1cfa0 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20     /* Estimated 
1cfb0 6e 75 6d 62 65 72 20 6f 66 20 72 65 73 75 6c 74  number of result
1cfc0 20 72 6f 77 73 20 2a 2f 0a 20 20 75 33 32 20 73   rows */.  u32 s
1cfd0 65 6c 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20  elFlags;        
1cfe0 20 20 2f 2a 20 56 61 72 69 6f 75 73 20 53 46 5f    /* Various SF_
1cff0 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e  * values */.  in
1d000 74 20 69 4c 69 6d 69 74 2c 20 69 4f 66 66 73 65  t iLimit, iOffse
1d010 74 3b 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72  t;   /* Memory r
1d020 65 67 69 73 74 65 72 73 20 68 6f 6c 64 69 6e 67  egisters holding
1d030 20 4c 49 4d 49 54 20 26 20 4f 46 46 53 45 54 20   LIMIT & OFFSET 
1d040 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 23 69 66 20  counters */.#if 
1d050 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42  SELECTTRACE_ENAB
1d060 4c 45 44 0a 20 20 63 68 61 72 20 7a 53 65 6c 4e  LED.  char zSelN
1d070 61 6d 65 5b 31 32 5d 3b 20 20 20 20 20 2f 2a 20  ame[12];     /* 
1d080 53 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 6f 66  Symbolic name of
1d090 20 74 68 69 73 20 53 45 4c 45 43 54 20 75 73 65   this SELECT use
1d0a0 20 66 6f 72 20 64 65 62 75 67 67 69 6e 67 20 2a   for debugging *
1d0b0 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 61  /.#endif.  int a
1d0c0 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 3b 20  ddrOpenEphm[2]; 
1d0d0 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70 68 65    /* OP_OpenEphe
1d0e0 6d 20 6f 70 63 6f 64 65 73 20 72 65 6c 61 74 65  m opcodes relate
1d0f0 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63 74  d to this select
1d100 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70   */.  SrcList *p
1d110 53 72 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Src;         /* 
1d120 54 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  The FROM clause 
1d130 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65 72  */.  Expr *pWher
1d140 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  e;          /* T
1d150 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
1d160 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  */.  ExprList *p
1d170 47 72 6f 75 70 42 79 3b 20 20 20 20 2f 2a 20 54  GroupBy;    /* T
1d180 68 65 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75  he GROUP BY clau
1d190 73 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 48  se */.  Expr *pH
1d1a0 61 76 69 6e 67 3b 20 20 20 20 20 20 20 20 20 2f  aving;         /
1d1b0 2a 20 54 68 65 20 48 41 56 49 4e 47 20 63 6c 61  * The HAVING cla
1d1c0 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  use */.  ExprLis
1d1d0 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 20 20  t *pOrderBy;    
1d1e0 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59 20  /* The ORDER BY 
1d1f0 63 6c 61 75 73 65 20 2a 2f 0a 20 20 53 65 6c 65  clause */.  Sele
1d200 63 74 20 2a 70 50 72 69 6f 72 3b 20 20 20 20 20  ct *pPrior;     
1d210 20 20 20 2f 2a 20 50 72 69 6f 72 20 73 65 6c 65     /* Prior sele
1d220 63 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64  ct in a compound
1d230 20 73 65 6c 65 63 74 20 73 74 61 74 65 6d 65 6e   select statemen
1d240 74 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70  t */.  Select *p
1d250 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  Next;         /*
1d260 20 4e 65 78 74 20 73 65 6c 65 63 74 20 74 6f 20   Next select to 
1d270 74 68 65 20 6c 65 66 74 20 69 6e 20 61 20 63 6f  the left in a co
1d280 6d 70 6f 75 6e 64 20 2a 2f 0a 20 20 45 78 70 72  mpound */.  Expr
1d290 20 2a 70 4c 69 6d 69 74 3b 20 20 20 20 20 20 20   *pLimit;       
1d2a0 20 20 20 2f 2a 20 4c 49 4d 49 54 20 65 78 70 72     /* LIMIT expr
1d2b0 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61  ession. NULL mea
1d2c0 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a  ns not used. */.
1d2d0 20 20 57 69 74 68 20 2a 70 57 69 74 68 3b 20 20    With *pWith;  
1d2e0 20 20 20 20 20 20 20 20 20 2f 2a 20 57 49 54 48           /* WITH
1d2f0 20 63 6c 61 75 73 65 20 61 74 74 61 63 68 65 64   clause attached
1d300 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63 74 2e   to this select.
1d310 20 4f 72 20 4e 55 4c 4c 2e 20 2a 2f 0a 7d 3b 0a   Or NULL. */.};.
1d320 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76  ./*.** Allowed v
1d330 61 6c 75 65 73 20 66 6f 72 20 53 65 6c 65 63 74  alues for Select
1d340 2e 73 65 6c 46 6c 61 67 73 2e 20 20 54 68 65 20  .selFlags.  The 
1d350 22 53 46 22 20 70 72 65 66 69 78 20 73 74 61 6e  "SF" prefix stan
1d360 64 73 20 66 6f 72 0a 2a 2a 20 22 53 65 6c 65 63  ds for.** "Selec
1d370 74 20 46 6c 61 67 22 2e 0a 2a 2a 0a 2a 2a 20 56  t Flag"..**.** V
1d380 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73  alue constraints
1d390 20 28 61 6c 6c 20 63 68 65 63 6b 65 64 20 76 69   (all checked vi
1d3a0 61 20 61 73 73 65 72 74 28 29 29 0a 2a 2a 20 20  a assert()).**  
1d3b0 20 20 20 53 46 5f 48 61 73 41 67 67 20 20 20 20     SF_HasAgg    
1d3c0 20 3d 3d 20 4e 43 5f 48 61 73 41 67 67 0a 2a 2a   == NC_HasAgg.**
1d3d0 20 20 20 20 20 53 46 5f 4d 69 6e 4d 61 78 41 67       SF_MinMaxAg
1d3e0 67 20 20 3d 3d 20 4e 43 5f 4d 69 6e 4d 61 78 41  g  == NC_MinMaxA
1d3f0 67 67 20 20 20 20 20 3d 3d 20 53 51 4c 49 54 45  gg     == SQLITE
1d400 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 0a 2a 2a 20  _FUNC_MINMAX.** 
1d410 20 20 20 20 53 46 5f 46 69 78 65 64 4c 69 6d 69      SF_FixedLimi
1d420 74 20 3d 3d 20 57 48 45 52 45 5f 55 53 45 5f 4c  t == WHERE_USE_L
1d430 49 4d 49 54 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  IMIT.*/.#define 
1d440 53 46 5f 44 69 73 74 69 6e 63 74 20 20 20 20 20  SF_Distinct     
1d450 20 20 30 78 30 30 30 30 31 20 20 2f 2a 20 4f 75    0x00001  /* Ou
1d460 74 70 75 74 20 73 68 6f 75 6c 64 20 62 65 20 44  tput should be D
1d470 49 53 54 49 4e 43 54 20 2a 2f 0a 23 64 65 66 69  ISTINCT */.#defi
1d480 6e 65 20 53 46 5f 41 6c 6c 20 20 20 20 20 20 20  ne SF_All       
1d490 20 20 20 20 20 30 78 30 30 30 30 32 20 20 2f 2a       0x00002  /*
1d4a0 20 49 6e 63 6c 75 64 65 73 20 74 68 65 20 41 4c   Includes the AL
1d4b0 4c 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65  L keyword */.#de
1d4c0 66 69 6e 65 20 53 46 5f 52 65 73 6f 6c 76 65 64  fine SF_Resolved
1d4d0 20 20 20 20 20 20 20 30 78 30 30 30 30 34 20 20         0x00004  
1d4e0 2f 2a 20 49 64 65 6e 74 69 66 69 65 72 73 20 68  /* Identifiers h
1d4f0 61 76 65 20 62 65 65 6e 20 72 65 73 6f 6c 76 65  ave been resolve
1d500 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  d */.#define SF_
1d510 41 67 67 72 65 67 61 74 65 20 20 20 20 20 20 30  Aggregate      0
1d520 78 30 30 30 30 38 20 20 2f 2a 20 43 6f 6e 74 61  x00008  /* Conta
1d530 69 6e 73 20 61 67 67 20 66 75 6e 63 74 69 6f 6e  ins agg function
1d540 73 20 6f 72 20 61 20 47 52 4f 55 50 20 42 59 20  s or a GROUP BY 
1d550 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 48 61  */.#define SF_Ha
1d560 73 41 67 67 20 20 20 20 20 20 20 20 20 30 78 30  sAgg         0x0
1d570 30 30 31 30 20 20 2f 2a 20 43 6f 6e 74 61 69 6e  0010  /* Contain
1d580 73 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  s aggregate func
1d590 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tions */.#define
1d5a0 20 53 46 5f 55 73 65 73 45 70 68 65 6d 65 72 61   SF_UsesEphemera
1d5b0 6c 20 20 30 78 30 30 30 32 30 20 20 2f 2a 20 55  l  0x00020  /* U
1d5c0 73 65 73 20 74 68 65 20 4f 70 65 6e 45 70 68 65  ses the OpenEphe
1d5d0 6d 65 72 61 6c 20 6f 70 63 6f 64 65 20 2a 2f 0a  meral opcode */.
1d5e0 23 64 65 66 69 6e 65 20 53 46 5f 45 78 70 61 6e  #define SF_Expan
1d5f0 64 65 64 20 20 20 20 20 20 20 30 78 30 30 30 34  ded       0x0004
1d600 30 20 20 2f 2a 20 73 71 6c 69 74 65 33 53 65 6c  0  /* sqlite3Sel
1d610 65 63 74 45 78 70 61 6e 64 28 29 20 63 61 6c 6c  ectExpand() call
1d620 65 64 20 6f 6e 20 74 68 69 73 20 2a 2f 0a 23 64  ed on this */.#d
1d630 65 66 69 6e 65 20 53 46 5f 48 61 73 54 79 70 65  efine SF_HasType
1d640 49 6e 66 6f 20 20 20 20 30 78 30 30 30 38 30 20  Info    0x00080 
1d650 20 2f 2a 20 46 52 4f 4d 20 73 75 62 71 75 65 72   /* FROM subquer
1d660 69 65 73 20 68 61 76 65 20 54 61 62 6c 65 20 6d  ies have Table m
1d670 65 74 61 64 61 74 61 20 2a 2f 0a 23 64 65 66 69  etadata */.#defi
1d680 6e 65 20 53 46 5f 43 6f 6d 70 6f 75 6e 64 20 20  ne SF_Compound  
1d690 20 20 20 20 20 30 78 30 30 31 30 30 20 20 2f 2a       0x00100  /*
1d6a0 20 50 61 72 74 20 6f 66 20 61 20 63 6f 6d 70 6f   Part of a compo
1d6b0 75 6e 64 20 71 75 65 72 79 20 2a 2f 0a 23 64 65  und query */.#de
1d6c0 66 69 6e 65 20 53 46 5f 56 61 6c 75 65 73 20 20  fine SF_Values  
1d6d0 20 20 20 20 20 20 20 30 78 30 30 32 30 30 20 20         0x00200  
1d6e0 2f 2a 20 53 79 6e 74 68 65 73 69 7a 65 64 20 66  /* Synthesized f
1d6f0 72 6f 6d 20 56 41 4c 55 45 53 20 63 6c 61 75 73  rom VALUES claus
1d700 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  e */.#define SF_
1d710 4d 75 6c 74 69 56 61 6c 75 65 20 20 20 20 20 30  MultiValue     0
1d720 78 30 30 34 30 30 20 20 2f 2a 20 53 69 6e 67 6c  x00400  /* Singl
1d730 65 20 56 41 4c 55 45 53 20 74 65 72 6d 20 77 69  e VALUES term wi
1d740 74 68 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73  th multiple rows
1d750 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4e   */.#define SF_N
1d760 65 73 74 65 64 46 72 6f 6d 20 20 20 20 20 30 78  estedFrom     0x
1d770 30 30 38 30 30 20 20 2f 2a 20 50 61 72 74 20 6f  00800  /* Part o
1d780 66 20 61 20 70 61 72 65 6e 74 68 65 73 69 7a 65  f a parenthesize
1d790 64 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f  d FROM clause */
1d7a0 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d 69 6e 4d  .#define SF_MinM
1d7b0 61 78 41 67 67 20 20 20 20 20 20 30 78 30 31 30  axAgg      0x010
1d7c0 30 30 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65  00  /* Aggregate
1d7d0 20 63 6f 6e 74 61 69 6e 69 6e 67 20 6d 69 6e 28   containing min(
1d7e0 29 20 6f 72 20 6d 61 78 28 29 20 2a 2f 0a 23 64  ) or max() */.#d
1d7f0 65 66 69 6e 65 20 53 46 5f 52 65 63 75 72 73 69  efine SF_Recursi
1d800 76 65 20 20 20 20 20 20 30 78 30 32 30 30 30 20  ve      0x02000 
1d810 20 2f 2a 20 54 68 65 20 72 65 63 75 72 73 69 76   /* The recursiv
1d820 65 20 70 61 72 74 20 6f 66 20 61 20 72 65 63 75  e part of a recu
1d830 72 73 69 76 65 20 43 54 45 20 2a 2f 0a 23 64 65  rsive CTE */.#de
1d840 66 69 6e 65 20 53 46 5f 46 69 78 65 64 4c 69 6d  fine SF_FixedLim
1d850 69 74 20 20 20 20 20 30 78 30 34 30 30 30 20 20  it     0x04000  
1d860 2f 2a 20 6e 53 65 6c 65 63 74 52 6f 77 20 73 65  /* nSelectRow se
1d870 74 20 62 79 20 61 20 63 6f 6e 73 74 61 6e 74 20  t by a constant 
1d880 4c 49 4d 49 54 20 2a 2f 0a 23 64 65 66 69 6e 65  LIMIT */.#define
1d890 20 53 46 5f 4d 61 79 62 65 43 6f 6e 76 65 72 74   SF_MaybeConvert
1d8a0 20 20 20 30 78 30 38 30 30 30 20 20 2f 2a 20 4e     0x08000  /* N
1d8b0 65 65 64 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f  eed convertCompo
1d8c0 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75  undSelectToSubqu
1d8d0 65 72 79 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65  ery() */.#define
1d8e0 20 53 46 5f 43 6f 6e 76 65 72 74 65 64 20 20 20   SF_Converted   
1d8f0 20 20 20 30 78 31 30 30 30 30 20 20 2f 2a 20 42     0x10000  /* B
1d900 79 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e  y convertCompoun
1d910 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72  dSelectToSubquer
1d920 79 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  y() */.#define S
1d930 46 5f 49 6e 63 6c 75 64 65 48 69 64 64 65 6e 20  F_IncludeHidden 
1d940 20 30 78 32 30 30 30 30 20 20 2f 2a 20 49 6e 63   0x20000  /* Inc
1d950 6c 75 64 65 20 68 69 64 64 65 6e 20 63 6f 6c 75  lude hidden colu
1d960 6d 6e 73 20 69 6e 20 6f 75 74 70 75 74 20 2a 2f  mns in output */
1d970 0a 23 64 65 66 69 6e 65 20 53 46 5f 43 6f 6d 70  .#define SF_Comp
1d980 6c 65 78 52 65 73 75 6c 74 20 20 30 78 34 30 30  lexResult  0x400
1d990 30 30 20 20 2f 2a 20 52 65 73 75 6c 74 20 63 6f  00  /* Result co
1d9a0 6e 74 61 69 6e 73 20 73 75 62 71 75 65 72 79 20  ntains subquery 
1d9b0 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 0a  or function */..
1d9c0 2f 2a 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c 74  /*.** The result
1d9d0 73 20 6f 66 20 61 20 53 45 4c 45 43 54 20 63 61  s of a SELECT ca
1d9e0 6e 20 62 65 20 64 69 73 74 72 69 62 75 74 65 64  n be distributed
1d9f0 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61 79 73   in several ways
1da00 2c 20 61 73 20 64 65 66 69 6e 65 64 0a 2a 2a 20  , as defined.** 
1da10 62 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f  by one of the fo
1da20 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 2e 20  llowing macros. 
1da30 20 54 68 65 20 22 53 52 54 22 20 70 72 65 66 69   The "SRT" prefi
1da40 78 20 6d 65 61 6e 73 20 22 53 45 4c 45 43 54 20  x means "SELECT 
1da50 52 65 73 75 6c 74 0a 2a 2a 20 54 79 70 65 22 2e  Result.** Type".
1da60 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 55  .**.**     SRT_U
1da70 6e 69 6f 6e 20 20 20 20 20 20 20 53 74 6f 72 65  nion       Store
1da80 20 72 65 73 75 6c 74 73 20 61 73 20 61 20 6b 65   results as a ke
1da90 79 20 69 6e 20 61 20 74 65 6d 70 6f 72 61 72 79  y in a temporary
1daa0 20 69 6e 64 65 78 0a 2a 2a 20 20 20 20 20 20 20   index.**       
1dab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 64                id
1dac0 65 6e 74 69 66 69 65 64 20 62 79 20 70 44 65 73  entified by pDes
1dad0 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a  t->iSDParm..**.*
1dae0 2a 20 20 20 20 20 53 52 54 5f 45 78 63 65 70 74  *     SRT_Except
1daf0 20 20 20 20 20 20 52 65 6d 6f 76 65 20 72 65 73        Remove res
1db00 75 6c 74 73 20 66 72 6f 6d 20 74 68 65 20 74 65  ults from the te
1db10 6d 70 6f 72 61 72 79 20 69 6e 64 65 78 20 70 44  mporary index pD
1db20 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a  est->iSDParm..**
1db30 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 78 69 73  .**     SRT_Exis
1db40 74 73 20 20 20 20 20 20 53 74 6f 72 65 20 61 20  ts      Store a 
1db50 31 20 69 6e 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  1 in memory cell
1db60 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20   pDest->iSDParm 
1db70 69 66 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a  if the result.**
1db80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db90 20 20 20 20 20 73 65 74 20 69 73 20 6e 6f 74 20       set is not 
1dba0 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  empty..**.**    
1dbb0 20 53 52 54 5f 44 69 73 63 61 72 64 20 20 20 20   SRT_Discard    
1dbc0 20 54 68 72 6f 77 20 74 68 65 20 72 65 73 75 6c   Throw the resul
1dbd0 74 73 20 61 77 61 79 2e 20 20 54 68 69 73 20 69  ts away.  This i
1dbe0 73 20 75 73 65 64 20 62 79 20 53 45 4c 45 43 54  s used by SELECT
1dbf0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1dc00 20 20 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e          statemen
1dc10 74 73 20 77 69 74 68 69 6e 20 74 72 69 67 67 65  ts within trigge
1dc20 72 73 20 77 68 6f 73 65 20 6f 6e 6c 79 20 70 75  rs whose only pu
1dc30 72 70 6f 73 65 20 69 73 0a 2a 2a 20 20 20 20 20  rpose is.**     
1dc40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc50 74 68 65 20 73 69 64 65 2d 65 66 66 65 63 74 73  the side-effects
1dc60 20 6f 66 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a   of functions..*
1dc70 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 65 20  *.** All of the 
1dc80 61 62 6f 76 65 20 61 72 65 20 66 72 65 65 20 74  above are free t
1dc90 6f 20 69 67 6e 6f 72 65 20 74 68 65 69 72 20 4f  o ignore their O
1dca0 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 20  RDER BY clause. 
1dcb0 54 68 6f 73 65 20 74 68 61 74 0a 2a 2a 20 66 6f  Those that.** fo
1dcc0 6c 6c 6f 77 20 6d 75 73 74 20 68 6f 6e 6f 72 20  llow must honor 
1dcd0 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61  the ORDER BY cla
1dce0 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  use..**.**     S
1dcf0 52 54 5f 4f 75 74 70 75 74 20 20 20 20 20 20 47  RT_Output      G
1dd00 65 6e 65 72 61 74 65 20 61 20 72 6f 77 20 6f 66  enerate a row of
1dd10 20 6f 75 74 70 75 74 20 28 75 73 69 6e 67 20 74   output (using t
1dd20 68 65 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 0a  he OP_ResultRow.
1dd30 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1dd40 20 20 20 20 20 20 20 6f 70 63 6f 64 65 29 20 66         opcode) f
1dd50 6f 72 20 65 61 63 68 20 72 6f 77 20 69 6e 20 74  or each row in t
1dd60 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e 0a 2a  he result set..*
1dd70 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4d 65 6d  *.**     SRT_Mem
1dd80 20 20 20 20 20 20 20 20 20 4f 6e 6c 79 20 76 61           Only va
1dd90 6c 69 64 20 69 66 20 74 68 65 20 72 65 73 75 6c  lid if the resul
1dda0 74 20 69 73 20 61 20 73 69 6e 67 6c 65 20 63 6f  t is a single co
1ddb0 6c 75 6d 6e 2e 0a 2a 2a 20 20 20 20 20 20 20 20  lumn..**        
1ddc0 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74 6f               Sto
1ddd0 72 65 20 74 68 65 20 66 69 72 73 74 20 63 6f 6c  re the first col
1dde0 75 6d 6e 20 6f 66 20 74 68 65 20 66 69 72 73 74  umn of the first
1ddf0 20 72 65 73 75 6c 74 20 72 6f 77 0a 2a 2a 20 20   result row.**  
1de00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de10 20 20 20 69 6e 20 72 65 67 69 73 74 65 72 20 70     in register p
1de20 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 74 68  Dest->iSDParm th
1de30 65 6e 20 61 62 61 6e 64 6f 6e 20 74 68 65 20 72  en abandon the r
1de40 65 73 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  est.**          
1de50 20 20 20 20 20 20 20 20 20 20 20 6f 66 20 74 68             of th
1de60 65 20 71 75 65 72 79 2e 20 20 54 68 69 73 20 64  e query.  This d
1de70 65 73 74 69 6e 61 74 69 6f 6e 20 69 6d 70 6c 69  estination impli
1de80 65 73 20 22 4c 49 4d 49 54 20 31 22 2e 0a 2a 2a  es "LIMIT 1"..**
1de90 0a 2a 2a 20 20 20 20 20 53 52 54 5f 53 65 74 20  .**     SRT_Set 
1dea0 20 20 20 20 20 20 20 20 54 68 65 20 72 65 73 75          The resu
1deb0 6c 74 20 6d 75 73 74 20 62 65 20 61 20 73 69 6e  lt must be a sin
1dec0 67 6c 65 20 63 6f 6c 75 6d 6e 2e 20 20 53 74 6f  gle column.  Sto
1ded0 72 65 20 65 61 63 68 0a 2a 2a 20 20 20 20 20 20  re each.**      
1dee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1def0 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 61 73 20  ow of result as 
1df00 74 68 65 20 6b 65 79 20 69 6e 20 74 61 62 6c 65  the key in table
1df10 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e   pDest->iSDParm.
1df20 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1df30 20 20 20 20 20 20 20 20 41 70 70 6c 79 20 74 68          Apply th
1df40 65 20 61 66 66 69 6e 69 74 79 20 70 44 65 73 74  e affinity pDest
1df50 2d 3e 61 66 66 53 64 73 74 20 62 65 66 6f 72 65  ->affSdst before
1df60 20 73 74 6f 72 69 6e 67 0a 2a 2a 20 20 20 20 20   storing.**     
1df70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df80 72 65 73 75 6c 74 73 2e 20 20 55 73 65 64 20 74  results.  Used t
1df90 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 22 49 4e 20  o implement "IN 
1dfa0 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 0a 2a  (SELECT ...)"..*
1dfb0 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 70 68  *.**     SRT_Eph
1dfc0 65 6d 54 61 62 20 20 20 20 43 72 65 61 74 65 20  emTab    Create 
1dfd0 61 6e 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  an temporary tab
1dfe0 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  le pDest->iSDPar
1dff0 6d 20 61 6e 64 20 73 74 6f 72 65 0a 2a 2a 20 20  m and store.**  
1e000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e010 20 20 20 74 68 65 20 72 65 73 75 6c 74 20 74 68     the result th
1e020 65 72 65 2e 20 54 68 65 20 63 75 72 73 6f 72 20  ere. The cursor 
1e030 69 73 20 6c 65 66 74 20 6f 70 65 6e 20 61 66 74  is left open aft
1e040 65 72 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  er.**           
1e050 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1e060 69 6e 67 2e 20 20 54 68 69 73 20 69 73 20 6c 69  ing.  This is li
1e070 6b 65 20 53 52 54 5f 54 61 62 6c 65 20 65 78 63  ke SRT_Table exc
1e080 65 70 74 20 74 68 61 74 0a 2a 2a 20 20 20 20 20  ept that.**     
1e090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e0a0 74 68 69 73 20 64 65 73 74 69 6e 61 74 69 6f 6e  this destination
1e0b0 20 75 73 65 73 20 4f 50 5f 4f 70 65 6e 45 70 68   uses OP_OpenEph
1e0c0 65 6d 65 72 61 6c 20 74 6f 20 63 72 65 61 74 65  emeral to create
1e0d0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1e0e0 20 20 20 20 20 20 20 20 74 68 65 20 74 61 62 6c          the tabl
1e0f0 65 20 66 69 72 73 74 2e 0a 2a 2a 0a 2a 2a 20 20  e first..**.**  
1e100 20 20 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65     SRT_Coroutine
1e110 20 20 20 47 65 6e 65 72 61 74 65 20 61 20 63 6f     Generate a co
1e120 2d 72 6f 75 74 69 6e 65 20 74 68 61 74 20 72 65  -routine that re
1e130 74 75 72 6e 73 20 61 20 6e 65 77 20 72 6f 77 20  turns a new row 
1e140 6f 66 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  of.**           
1e150 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
1e160 73 20 65 61 63 68 20 74 69 6d 65 20 69 74 20 69  s each time it i
1e170 73 20 69 6e 76 6f 6b 65 64 2e 20 20 54 68 65 20  s invoked.  The 
1e180 65 6e 74 72 79 20 70 6f 69 6e 74 0a 2a 2a 20 20  entry point.**  
1e190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e1a0 20 20 20 6f 66 20 74 68 65 20 63 6f 2d 72 6f 75     of the co-rou
1e1b0 74 69 6e 65 20 69 73 20 73 74 6f 72 65 64 20 69  tine is stored i
1e1c0 6e 20 72 65 67 69 73 74 65 72 20 70 44 65 73 74  n register pDest
1e1d0 2d 3e 69 53 44 50 61 72 6d 0a 2a 2a 20 20 20 20  ->iSDParm.**    
1e1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e1f0 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20   and the result 
1e200 72 6f 77 20 69 73 20 73 74 6f 72 65 64 20 69 6e  row is stored in
1e210 20 70 44 65 73 74 2d 3e 6e 44 65 73 74 20 72 65   pDest->nDest re
1e220 67 69 73 74 65 72 73 0a 2a 2a 20 20 20 20 20 20  gisters.**      
1e230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1e240 74 61 72 74 69 6e 67 20 77 69 74 68 20 70 44 65  tarting with pDe
1e250 73 74 2d 3e 69 53 64 73 74 2e 0a 2a 2a 0a 2a 2a  st->iSdst..**.**
1e260 20 20 20 20 20 53 52 54 5f 54 61 62 6c 65 20 20       SRT_Table  
1e270 20 20 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c       Store resul
1e280 74 73 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20  ts in temporary 
1e290 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44  table pDest->iSD
1e2a0 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 53 52 54  Parm..**     SRT
1e2b0 5f 46 69 66 6f 20 20 20 20 20 20 20 20 54 68 69  _Fifo        Thi
1e2c0 73 20 69 73 20 6c 69 6b 65 20 53 52 54 5f 45 70  s is like SRT_Ep
1e2d0 68 65 6d 54 61 62 20 65 78 63 65 70 74 20 74 68  hemTab except th
1e2e0 61 74 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20  at the table.** 
1e2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e300 20 20 20 20 69 73 20 61 73 73 75 6d 65 64 20 74      is assumed t
1e310 6f 20 61 6c 72 65 61 64 79 20 62 65 20 6f 70 65  o already be ope
1e320 6e 2e 20 20 53 52 54 5f 46 69 66 6f 20 68 61 73  n.  SRT_Fifo has
1e330 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1e340 20 20 20 20 20 20 20 20 74 68 65 20 61 64 64 69          the addi
1e350 74 69 6f 6e 61 6c 20 70 72 6f 70 65 72 74 79 20  tional property 
1e360 6f 66 20 62 65 69 6e 67 20 61 62 6c 65 20 74 6f  of being able to
1e370 20 69 67 6e 6f 72 65 0a 2a 2a 20 20 20 20 20 20   ignore.**      
1e380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1e390 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
1e3a0 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  se..**.**     SR
1e3b0 54 5f 44 69 73 74 46 69 66 6f 20 20 20 20 53 74  T_DistFifo    St
1e3c0 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 61  ore results in a
1e3d0 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
1e3e0 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e   pDest->iSDParm.
1e3f0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1e400 20 20 20 20 20 20 20 20 42 75 74 20 61 6c 73 6f          But also
1e410 20 75 73 65 20 74 65 6d 70 6f 72 61 72 79 20 74   use temporary t
1e420 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50  able pDest->iSDP
1e430 61 72 6d 2b 31 20 61 73 0a 2a 2a 20 20 20 20 20  arm+1 as.**     
1e440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e450 61 20 72 65 63 6f 72 64 20 6f 66 20 61 6c 6c 20  a record of all 
1e460 70 72 69 6f 72 20 72 65 73 75 6c 74 73 20 61 6e  prior results an
1e470 64 20 69 67 6e 6f 72 65 20 61 6e 79 20 64 75 70  d ignore any dup
1e480 6c 69 63 61 74 65 0a 2a 2a 20 20 20 20 20 20 20  licate.**       
1e490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
1e4a0 77 73 2e 20 20 4e 61 6d 65 20 6d 65 61 6e 73 3a  ws.  Name means:
1e4b0 20 20 22 44 69 73 74 69 6e 63 74 20 46 69 66 6f    "Distinct Fifo
1e4c0 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  "..**.**     SRT
1e4d0 5f 51 75 65 75 65 20 20 20 20 20 20 20 53 74 6f  _Queue       Sto
1e4e0 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 70 72  re results in pr
1e4f0 69 6f 72 69 74 79 20 71 75 65 75 65 20 70 44 65  iority queue pDe
1e500 73 74 2d 3e 69 53 44 50 61 72 6d 20 28 72 65 61  st->iSDParm (rea
1e510 6c 6c 79 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  lly.**          
1e520 20 20 20 20 20 20 20 20 20 20 20 61 6e 20 69 6e             an in
1e530 64 65 78 29 2e 20 20 41 70 70 65 6e 64 20 61 20  dex).  Append a 
1e540 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20  sequence number 
1e550 73 6f 20 74 68 61 74 20 61 6c 6c 20 65 6e 74 72  so that all entr
1e560 69 65 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ies.**          
1e570 20 20 20 20 20 20 20 20 20 20 20 61 72 65 20 64             are d
1e580 69 73 74 69 6e 63 74 2e 0a 2a 2a 0a 2a 2a 20 20  istinct..**.**  
1e590 20 20 20 53 52 54 5f 44 69 73 74 51 75 65 75 65     SRT_DistQueue
1e5a0 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73     Store results
1e5b0 20 69 6e 20 70 72 69 6f 72 69 74 79 20 71 75 65   in priority que
1e5c0 75 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  ue pDest->iSDPar
1e5d0 6d 20 6f 6e 6c 79 20 69 66 0a 2a 2a 20 20 20 20  m only if.**    
1e5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e5f0 20 74 68 65 20 73 61 6d 65 20 72 65 63 6f 72 64   the same record
1e600 20 68 61 73 20 6e 65 76 65 72 20 62 65 65 6e 20   has never been 
1e610 73 74 6f 72 65 64 20 62 65 66 6f 72 65 2e 20 20  stored before.  
1e620 54 68 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  The.**          
1e630 20 20 20 20 20 20 20 20 20 20 20 69 6e 64 65 78             index
1e640 20 61 74 20 70 44 65 73 74 2d 3e 69 53 44 50 61   at pDest->iSDPa
1e650 72 6d 2b 31 20 68 6f 6c 64 20 61 6c 6c 20 70 72  rm+1 hold all pr
1e660 69 6f 72 20 73 74 6f 72 65 73 2e 0a 2a 2f 0a 23  ior stores..*/.#
1e670 64 65 66 69 6e 65 20 53 52 54 5f 55 6e 69 6f 6e  define SRT_Union
1e680 20 20 20 20 20 20 20 20 31 20 20 2f 2a 20 53 74          1  /* St
1e690 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20 6b 65  ore result as ke
1e6a0 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a  ys in an index *
1e6b0 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45 78  /.#define SRT_Ex
1e6c0 63 65 70 74 20 20 20 20 20 20 20 32 20 20 2f 2a  cept       2  /*
1e6d0 20 52 65 6d 6f 76 65 20 72 65 73 75 6c 74 20 66   Remove result f
1e6e0 72 6f 6d 20 61 20 55 4e 49 4f 4e 20 69 6e 64 65  rom a UNION inde
1e6f0 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  x */.#define SRT
1e700 5f 45 78 69 73 74 73 20 20 20 20 20 20 20 33 20  _Exists       3 
1e710 20 2f 2a 20 53 74 6f 72 65 20 31 20 69 66 20 74   /* Store 1 if t
1e720 68 65 20 72 65 73 75 6c 74 20 69 73 20 6e 6f 74  he result is not
1e730 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e   empty */.#defin
1e740 65 20 53 52 54 5f 44 69 73 63 61 72 64 20 20 20  e SRT_Discard   
1e750 20 20 20 34 20 20 2f 2a 20 44 6f 20 6e 6f 74 20     4  /* Do not 
1e760 73 61 76 65 20 74 68 65 20 72 65 73 75 6c 74 73  save the results
1e770 20 61 6e 79 77 68 65 72 65 20 2a 2f 0a 23 64 65   anywhere */.#de
1e780 66 69 6e 65 20 53 52 54 5f 46 69 66 6f 20 20 20  fine SRT_Fifo   
1e790 20 20 20 20 20 20 35 20 20 2f 2a 20 53 74 6f 72        5  /* Stor
1e7a0 65 20 72 65 73 75 6c 74 20 61 73 20 64 61 74 61  e result as data
1e7b0 20 77 69 74 68 20 61 6e 20 61 75 74 6f 6d 61 74   with an automat
1e7c0 69 63 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66  ic rowid */.#def
1e7d0 69 6e 65 20 53 52 54 5f 44 69 73 74 46 69 66 6f  ine SRT_DistFifo
1e7e0 20 20 20 20 20 36 20 20 2f 2a 20 4c 69 6b 65 20       6  /* Like 
1e7f0 53 52 54 5f 46 69 66 6f 2c 20 62 75 74 20 75 6e  SRT_Fifo, but un
1e800 69 71 75 65 20 72 65 73 75 6c 74 73 20 6f 6e 6c  ique results onl
1e810 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  y */.#define SRT
1e820 5f 51 75 65 75 65 20 20 20 20 20 20 20 20 37 20  _Queue        7 
1e830 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
1e840 20 69 6e 20 61 6e 20 71 75 65 75 65 20 2a 2f 0a   in an queue */.
1e850 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73 74  #define SRT_Dist
1e860 51 75 65 75 65 20 20 20 20 38 20 20 2f 2a 20 4c  Queue    8  /* L
1e870 69 6b 65 20 53 52 54 5f 51 75 65 75 65 2c 20 62  ike SRT_Queue, b
1e880 75 74 20 75 6e 69 71 75 65 20 72 65 73 75 6c 74  ut unique result
1e890 73 20 6f 6e 6c 79 20 2a 2f 0a 0a 2f 2a 20 54 68  s only */../* Th
1e8a0 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
1e8b0 65 20 69 73 20 69 67 6e 6f 72 65 64 20 66 6f 72  e is ignored for
1e8c0 20 61 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f 76   all of the abov
1e8d0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 67 6e  e */.#define Ign
1e8e0 6f 72 61 62 6c 65 4f 72 64 65 72 62 79 28 58 29  orableOrderby(X)
1e8f0 20 28 28 58 2d 3e 65 44 65 73 74 29 3c 3d 53 52   ((X->eDest)<=SR
1e900 54 5f 44 69 73 74 51 75 65 75 65 29 0a 0a 23 64  T_DistQueue)..#d
1e910 65 66 69 6e 65 20 53 52 54 5f 4f 75 74 70 75 74  efine SRT_Output
1e920 20 20 20 20 20 20 20 39 20 20 2f 2a 20 4f 75 74         9  /* Out
1e930 70 75 74 20 65 61 63 68 20 72 6f 77 20 6f 66 20  put each row of 
1e940 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e  result */.#defin
1e950 65 20 53 52 54 5f 4d 65 6d 20 20 20 20 20 20 20  e SRT_Mem       
1e960 20 20 31 30 20 20 2f 2a 20 53 74 6f 72 65 20 72    10  /* Store r
1e970 65 73 75 6c 74 20 69 6e 20 61 20 6d 65 6d 6f 72  esult in a memor
1e980 79 20 63 65 6c 6c 20 2a 2f 0a 23 64 65 66 69 6e  y cell */.#defin
1e990 65 20 53 52 54 5f 53 65 74 20 20 20 20 20 20 20  e SRT_Set       
1e9a0 20 20 31 31 20 20 2f 2a 20 53 74 6f 72 65 20 72    11  /* Store r
1e9b0 65 73 75 6c 74 73 20 61 73 20 6b 65 79 73 20 69  esults as keys i
1e9c0 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64  n an index */.#d
1e9d0 65 66 69 6e 65 20 53 52 54 5f 45 70 68 65 6d 54  efine SRT_EphemT
1e9e0 61 62 20 20 20 20 31 32 20 20 2f 2a 20 43 72 65  ab    12  /* Cre
1e9f0 61 74 65 20 74 72 61 6e 73 69 65 6e 74 20 74 61  ate transient ta
1ea00 62 20 61 6e 64 20 73 74 6f 72 65 20 6c 69 6b 65  b and store like
1ea10 20 53 52 54 5f 54 61 62 6c 65 20 2a 2f 0a 23 64   SRT_Table */.#d
1ea20 65 66 69 6e 65 20 53 52 54 5f 43 6f 72 6f 75 74  efine SRT_Corout
1ea30 69 6e 65 20 20 20 31 33 20 20 2f 2a 20 47 65 6e  ine   13  /* Gen
1ea40 65 72 61 74 65 20 61 20 73 69 6e 67 6c 65 20 72  erate a single r
1ea50 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a  ow of result */.
1ea60 23 64 65 66 69 6e 65 20 53 52 54 5f 54 61 62 6c  #define SRT_Tabl
1ea70 65 20 20 20 20 20 20 20 31 34 20 20 2f 2a 20 53  e       14  /* S
1ea80 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20 64  tore result as d
1ea90 61 74 61 20 77 69 74 68 20 61 6e 20 61 75 74 6f  ata with an auto
1eaa0 6d 61 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a 0a  matic rowid */..
1eab0 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
1eac0 65 20 6f 66 20 74 68 69 73 20 6f 62 6a 65 63 74  e of this object
1ead0 20 64 65 73 63 72 69 62 65 73 20 77 68 65 72 65   describes where
1eae0 20 74 6f 20 70 75 74 20 6f 66 20 74 68 65 20 72   to put of the r
1eaf0 65 73 75 6c 74 73 20 6f 66 0a 2a 2a 20 61 20 53  esults of.** a S
1eb00 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
1eb10 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c 65 63  .*/.struct Selec
1eb20 74 44 65 73 74 20 7b 0a 20 20 75 38 20 65 44 65  tDest {.  u8 eDe
1eb30 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  st;            /
1eb40 2a 20 48 6f 77 20 74 6f 20 64 69 73 70 6f 73 65  * How to dispose
1eb50 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73 2e   of the results.
1eb60 20 20 4f 6e 20 6f 66 20 53 52 54 5f 2a 20 61 62    On of SRT_* ab
1eb70 6f 76 65 2e 20 2a 2f 0a 20 20 69 6e 74 20 69 53  ove. */.  int iS
1eb80 44 50 61 72 6d 3b 20 20 20 20 20 20 20 20 20 2f  DParm;         /
1eb90 2a 20 41 20 70 61 72 61 6d 65 74 65 72 20 75 73  * A parameter us
1eba0 65 64 20 62 79 20 74 68 65 20 65 44 65 73 74 20  ed by the eDest 
1ebb0 64 69 73 70 6f 73 61 6c 20 6d 65 74 68 6f 64 20  disposal method 
1ebc0 2a 2f 0a 20 20 69 6e 74 20 69 53 64 73 74 3b 20  */.  int iSdst; 
1ebd0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 61 73            /* Bas
1ebe0 65 20 72 65 67 69 73 74 65 72 20 77 68 65 72 65  e register where
1ebf0 20 72 65 73 75 6c 74 73 20 61 72 65 20 77 72 69   results are wri
1ec00 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  tten */.  int nS
1ec10 64 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  dst;           /
1ec20 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 67 69  * Number of regi
1ec30 73 74 65 72 73 20 61 6c 6c 6f 63 61 74 65 64 20  sters allocated 
1ec40 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 66 66 53  */.  char *zAffS
1ec50 64 73 74 3b 20 20 20 20 20 20 2f 2a 20 41 66 66  dst;      /* Aff
1ec60 69 6e 69 74 79 20 75 73 65 64 20 77 68 65 6e 20  inity used when 
1ec70 65 44 65 73 74 3d 3d 53 52 54 5f 53 65 74 20 2a  eDest==SRT_Set *
1ec80 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4f  /.  ExprList *pO
1ec90 72 64 65 72 42 79 3b 20 20 2f 2a 20 4b 65 79 20  rderBy;  /* Key 
1eca0 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 53 52 54 5f  columns for SRT_
1ecb0 51 75 65 75 65 20 61 6e 64 20 53 52 54 5f 44 69  Queue and SRT_Di
1ecc0 73 74 51 75 65 75 65 20 2a 2f 0a 7d 3b 0a 0a 2f  stQueue */.};../
1ecd0 2a 0a 2a 2a 20 44 75 72 69 6e 67 20 63 6f 64 65  *.** During code
1ece0 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 73   generation of s
1ecf0 74 61 74 65 6d 65 6e 74 73 20 74 68 61 74 20 64  tatements that d
1ed00 6f 20 69 6e 73 65 72 74 73 20 69 6e 74 6f 20 41  o inserts into A
1ed10 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 2a 2a 20  UTOINCREMENT.** 
1ed20 74 61 62 6c 65 73 2c 20 74 68 65 20 66 6f 6c 6c  tables, the foll
1ed30 6f 77 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f  owing informatio
1ed40 6e 20 69 73 20 61 74 74 61 63 68 65 64 20 74 6f  n is attached to
1ed50 20 74 68 65 20 54 61 62 6c 65 2e 75 2e 61 75 74   the Table.u.aut
1ed60 6f 49 6e 63 2e 70 0a 2a 2a 20 70 6f 69 6e 74 65  oInc.p.** pointe
1ed70 72 20 6f 66 20 65 61 63 68 20 61 75 74 6f 69 6e  r of each autoin
1ed80 63 72 65 6d 65 6e 74 20 74 61 62 6c 65 20 74 6f  crement table to
1ed90 20 72 65 63 6f 72 64 20 73 6f 6d 65 20 73 69 64   record some sid
1eda0 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68  e information th
1edb0 61 74 0a 2a 2a 20 74 68 65 20 63 6f 64 65 20 67  at.** the code g
1edc0 65 6e 65 72 61 74 6f 72 20 6e 65 65 64 73 2e 20  enerator needs. 
1edd0 20 57 65 20 68 61 76 65 20 74 6f 20 6b 65 65 70   We have to keep
1ede0 20 70 65 72 2d 74 61 62 6c 65 20 61 75 74 6f 69   per-table autoi
1edf0 6e 63 72 65 6d 65 6e 74 0a 2a 2a 20 69 6e 66 6f  ncrement.** info
1ee00 72 6d 61 74 69 6f 6e 20 69 6e 20 63 61 73 65 20  rmation in case 
1ee10 69 6e 73 65 72 74 73 20 61 72 65 20 64 6f 6e 65  inserts are done
1ee20 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73   within triggers
1ee30 2e 20 20 54 72 69 67 67 65 72 73 20 64 6f 20 6e  .  Triggers do n
1ee40 6f 74 0a 2a 2a 20 6e 6f 72 6d 61 6c 6c 79 20 63  ot.** normally c
1ee50 6f 6f 72 64 69 6e 61 74 65 20 74 68 65 69 72 20  oordinate their 
1ee60 61 63 74 69 76 69 74 69 65 73 2c 20 62 75 74 20  activities, but 
1ee70 77 65 20 64 6f 20 6e 65 65 64 20 74 6f 20 63 6f  we do need to co
1ee80 6f 72 64 69 6e 61 74 65 20 74 68 65 0a 2a 2a 20  ordinate the.** 
1ee90 6c 6f 61 64 69 6e 67 20 61 6e 64 20 73 61 76 69  loading and savi
1eea0 6e 67 20 6f 66 20 61 75 74 6f 69 6e 63 72 65 6d  ng of autoincrem
1eeb0 65 6e 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  ent information.
1eec0 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 6f 69  .*/.struct Autoi
1eed0 6e 63 49 6e 66 6f 20 7b 0a 20 20 41 75 74 6f 69  ncInfo {.  Autoi
1eee0 6e 63 49 6e 66 6f 20 2a 70 4e 65 78 74 3b 20 20  ncInfo *pNext;  
1eef0 20 2f 2a 20 4e 65 78 74 20 69 6e 66 6f 20 62 6c   /* Next info bl
1ef00 6f 63 6b 20 69 6e 20 61 20 6c 69 73 74 20 6f 66  ock in a list of
1ef10 20 74 68 65 6d 20 61 6c 6c 20 2a 2f 0a 20 20 54   them all */.  T
1ef20 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20  able *pTab;     
1ef30 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 74 68       /* Table th
1ef40 69 73 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 72 65  is info block re
1ef50 66 65 72 73 20 74 6f 20 2a 2f 0a 20 20 69 6e 74  fers to */.  int
1ef60 20 69 44 62 3b 20 20 20 20 20 20 20 20 20 20 20   iDb;           
1ef70 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73     /* Index in s
1ef80 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20  qlite3.aDb[] of 
1ef90 64 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e 67  database holding
1efa0 20 70 54 61 62 20 2a 2f 0a 20 20 69 6e 74 20 72   pTab */.  int r
1efb0 65 67 43 74 72 3b 20 20 20 20 20 20 20 20 20 20  egCtr;          
1efc0 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69 73   /* Memory regis
1efd0 74 65 72 20 68 6f 6c 64 69 6e 67 20 74 68 65 20  ter holding the 
1efe0 72 6f 77 69 64 20 63 6f 75 6e 74 65 72 20 2a 2f  rowid counter */
1eff0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a 65 20  .};../*.** Size 
1f000 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63 61  of the column ca
1f010 63 68 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  che.*/.#ifndef S
1f020 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45  QLITE_N_COLCACHE
1f030 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
1f040 5f 4e 5f 43 4f 4c 43 41 43 48 45 20 31 30 0a 23  _N_COLCACHE 10.#
1f050 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 74 20  endif../*.** At 
1f060 6c 65 61 73 74 20 6f 6e 65 20 69 6e 73 74 61 6e  least one instan
1f070 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
1f080 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 69 73  ing structure is
1f090 20 63 72 65 61 74 65 64 20 66 6f 72 20 65 61 63   created for eac
1f0a0 68 0a 2a 2a 20 74 72 69 67 67 65 72 20 74 68 61  h.** trigger tha
1f0b0 74 20 6d 61 79 20 62 65 20 66 69 72 65 64 20 77  t may be fired w
1f0c0 68 69 6c 65 20 70 61 72 73 69 6e 67 20 61 6e 20  hile parsing an 
1f0d0 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45 20 6f  INSERT, UPDATE o
1f0e0 72 20 44 45 4c 45 54 45 0a 2a 2a 20 73 74 61 74  r DELETE.** stat
1f0f0 65 6d 65 6e 74 2e 20 41 6c 6c 20 73 75 63 68 20  ement. All such 
1f100 6f 62 6a 65 63 74 73 20 61 72 65 20 73 74 6f 72  objects are stor
1f110 65 64 20 69 6e 20 74 68 65 20 6c 69 6e 6b 65 64  ed in the linked
1f120 20 6c 69 73 74 20 68 65 61 64 65 64 20 61 74 0a   list headed at.
1f130 2a 2a 20 50 61 72 73 65 2e 70 54 72 69 67 67 65  ** Parse.pTrigge
1f140 72 50 72 67 20 61 6e 64 20 64 65 6c 65 74 65 64  rPrg and deleted
1f150 20 6f 6e 63 65 20 73 74 61 74 65 6d 65 6e 74 20   once statement 
1f160 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 68 61 73 20  compilation has 
1f170 62 65 65 6e 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65  been.** complete
1f180 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 56 64 62 65 20  d..**.** A Vdbe 
1f190 73 75 62 2d 70 72 6f 67 72 61 6d 20 74 68 61 74  sub-program that
1f1a0 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20   implements the 
1f1b0 62 6f 64 79 20 61 6e 64 20 57 48 45 4e 20 63 6c  body and WHEN cl
1f1c0 61 75 73 65 20 6f 66 20 74 72 69 67 67 65 72 0a  ause of trigger.
1f1d0 2a 2a 20 54 72 69 67 67 65 72 50 72 67 2e 70 54  ** TriggerPrg.pT
1f1e0 72 69 67 67 65 72 2c 20 61 73 73 75 6d 69 6e 67  rigger, assuming
1f1f0 20 61 20 64 65 66 61 75 6c 74 20 4f 4e 20 43 4f   a default ON CO
1f200 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 6f 66  NFLICT clause of
1f210 0a 2a 2a 20 54 72 69 67 67 65 72 50 72 67 2e 6f  .** TriggerPrg.o
1f220 72 63 6f 6e 66 2c 20 69 73 20 73 74 6f 72 65 64  rconf, is stored
1f230 20 69 6e 20 74 68 65 20 54 72 69 67 67 65 72 50   in the TriggerP
1f240 72 67 2e 70 50 72 6f 67 72 61 6d 20 76 61 72 69  rg.pProgram vari
1f250 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 50 61 72  able..** The Par
1f260 73 65 2e 70 54 72 69 67 67 65 72 50 72 67 20 6c  se.pTriggerPrg l
1f270 69 73 74 20 6e 65 76 65 72 20 63 6f 6e 74 61 69  ist never contai
1f280 6e 73 20 74 77 6f 20 65 6e 74 72 69 65 73 20 77  ns two entries w
1f290 69 74 68 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20  ith the same.** 
1f2a0 76 61 6c 75 65 73 20 66 6f 72 20 62 6f 74 68 20  values for both 
1f2b0 70 54 72 69 67 67 65 72 20 61 6e 64 20 6f 72 63  pTrigger and orc
1f2c0 6f 6e 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 54  onf..**.** The T
1f2d0 72 69 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61  riggerPrg.aColma
1f2e0 73 6b 5b 30 5d 20 76 61 72 69 61 62 6c 65 20 69  sk[0] variable i
1f2f0 73 20 73 65 74 20 74 6f 20 61 20 6d 61 73 6b 20  s set to a mask 
1f300 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73  of old.* columns
1f310 0a 2a 2a 20 61 63 63 65 73 73 65 64 20 28 6f 72  .** accessed (or
1f320 20 73 65 74 20 74 6f 20 30 20 66 6f 72 20 74 72   set to 0 for tr
1f330 69 67 67 65 72 73 20 66 69 72 65 64 20 61 73 20  iggers fired as 
1f340 61 20 72 65 73 75 6c 74 20 6f 66 20 49 4e 53 45  a result of INSE
1f350 52 54 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73  RT.** statements
1f360 29 2e 20 53 69 6d 69 6c 61 72 6c 79 2c 20 74 68  ). Similarly, th
1f370 65 20 54 72 69 67 67 65 72 50 72 67 2e 61 43 6f  e TriggerPrg.aCo
1f380 6c 6d 61 73 6b 5b 31 5d 20 76 61 72 69 61 62 6c  lmask[1] variabl
1f390 65 20 69 73 20 73 65 74 20 74 6f 0a 2a 2a 20 61  e is set to.** a
1f3a0 20 6d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63   mask of new.* c
1f3b0 6f 6c 75 6d 6e 73 20 75 73 65 64 20 62 79 20 74  olumns used by t
1f3c0 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 73  he program..*/.s
1f3d0 74 72 75 63 74 20 54 72 69 67 67 65 72 50 72 67  truct TriggerPrg
1f3e0 20 7b 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54   {.  Trigger *pT
1f3f0 72 69 67 67 65 72 3b 20 20 20 20 20 20 2f 2a 20  rigger;      /* 
1f400 54 72 69 67 67 65 72 20 74 68 69 73 20 70 72 6f  Trigger this pro
1f410 67 72 61 6d 20 77 61 73 20 63 6f 64 65 64 20 66  gram was coded f
1f420 72 6f 6d 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  rom */.  Trigger
1f430 50 72 67 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  Prg *pNext;     
1f440 20 2f 2a 20 4e 65 78 74 20 65 6e 74 72 79 20 69   /* Next entry i
1f450 6e 20 50 61 72 73 65 2e 70 54 72 69 67 67 65 72  n Parse.pTrigger
1f460 50 72 67 20 6c 69 73 74 20 2a 2f 0a 20 20 53 75  Prg list */.  Su
1f470 62 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72  bProgram *pProgr
1f480 61 6d 3b 20 20 20 2f 2a 20 50 72 6f 67 72 61 6d  am;   /* Program
1f490 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 70 54   implementing pT
1f4a0 72 69 67 67 65 72 2f 6f 72 63 6f 6e 66 20 2a 2f  rigger/orconf */
1f4b0 0a 20 20 69 6e 74 20 6f 72 63 6f 6e 66 3b 20 20  .  int orconf;  
1f4c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65             /* De
1f4d0 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43  fault ON CONFLIC
1f4e0 54 20 70 6f 6c 69 63 79 20 2a 2f 0a 20 20 75 33  T policy */.  u3
1f4f0 32 20 61 43 6f 6c 6d 61 73 6b 5b 32 5d 3b 20 20  2 aColmask[2];  
1f500 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 73 20 6f        /* Masks o
1f510 66 20 6f 6c 64 2e 2a 2c 20 6e 65 77 2e 2a 20 63  f old.*, new.* c
1f520 6f 6c 75 6d 6e 73 20 61 63 63 65 73 73 65 64 20  olumns accessed 
1f530 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
1f540 20 79 44 62 4d 61 73 6b 20 64 61 74 61 74 79 70   yDbMask datatyp
1f550 65 20 66 6f 72 20 74 68 65 20 62 69 74 6d 61 73  e for the bitmas
1f560 6b 20 6f 66 20 61 6c 6c 20 61 74 74 61 63 68 65  k of all attache
1f570 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a  d databases..*/.
1f580 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41  #if SQLITE_MAX_A
1f590 54 54 41 43 48 45 44 3e 33 30 0a 20 20 74 79 70  TTACHED>30.  typ
1f5a0 65 64 65 66 20 75 6e 73 69 67 6e 65 64 20 63 68  edef unsigned ch
1f5b0 61 72 20 79 44 62 4d 61 73 6b 5b 28 53 51 4c 49  ar yDbMask[(SQLI
1f5c0 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 2b  TE_MAX_ATTACHED+
1f5d0 39 29 2f 38 5d 3b 0a 23 20 64 65 66 69 6e 65 20  9)/8];.# define 
1f5e0 44 62 4d 61 73 6b 54 65 73 74 28 4d 2c 49 29 20  DbMaskTest(M,I) 
1f5f0 20 20 20 28 28 28 4d 29 5b 28 49 29 2f 38 5d 26     (((M)[(I)/8]&
1f600 28 31 3c 3c 28 28 49 29 26 37 29 29 29 21 3d 30  (1<<((I)&7)))!=0
1f610 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  ).# define DbMas
1f620 6b 5a 65 72 6f 28 4d 29 20 20 20 20 20 20 6d 65  kZero(M)      me
1f630 6d 73 65 74 28 28 4d 29 2c 30 2c 73 69 7a 65 6f  mset((M),0,sizeo
1f640 66 28 4d 29 29 0a 23 20 64 65 66 69 6e 65 20 44  f(M)).# define D
1f650 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20 20 20  bMaskSet(M,I)   
1f660 20 20 28 4d 29 5b 28 49 29 2f 38 5d 7c 3d 28 31    (M)[(I)/8]|=(1
1f670 3c 3c 28 28 49 29 26 37 29 29 0a 23 20 64 65 66  <<((I)&7)).# def
1f680 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a 65 72  ine DbMaskAllZer
1f690 6f 28 4d 29 20 20 20 73 71 6c 69 74 65 33 44 62  o(M)   sqlite3Db
1f6a0 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 0a 23  MaskAllZero(M).#
1f6b0 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e 6f   define DbMaskNo
1f6c0 6e 5a 65 72 6f 28 4d 29 20 20 20 28 73 71 6c 69  nZero(M)   (sqli
1f6d0 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f  te3DbMaskAllZero
1f6e0 28 4d 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 20 20  (M)==0).#else.  
1f6f0 74 79 70 65 64 65 66 20 75 6e 73 69 67 6e 65 64  typedef unsigned
1f700 20 69 6e 74 20 79 44 62 4d 61 73 6b 3b 0a 23 20   int yDbMask;.# 
1f710 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 54 65 73  define DbMaskTes
1f720 74 28 4d 2c 49 29 20 20 20 20 28 28 28 4d 29 26  t(M,I)    (((M)&
1f730 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 28  (((yDbMask)1)<<(
1f740 49 29 29 29 21 3d 30 29 0a 23 20 64 65 66 69 6e  I)))!=0).# defin
1f750 65 20 44 62 4d 61 73 6b 5a 65 72 6f 28 4d 29 20  e DbMaskZero(M) 
1f760 20 20 20 20 20 28 4d 29 3d 30 0a 23 20 64 65 66       (M)=0.# def
1f770 69 6e 65 20 44 62 4d 61 73 6b 53 65 74 28 4d 2c  ine DbMaskSet(M,
1f780 49 29 20 20 20 20 20 28 4d 29 7c 3d 28 28 28 79  I)     (M)|=(((y
1f790 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29 0a  DbMask)1)<<(I)).
1f7a0 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 41  # define DbMaskA
1f7b0 6c 6c 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29 3d  llZero(M)   (M)=
1f7c0 3d 30 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  =0.# define DbMa
1f7d0 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20 20 28  skNonZero(M)   (
1f7e0 4d 29 21 3d 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  M)!=0.#endif../*
1f7f0 0a 2a 2a 20 41 6e 20 53 51 4c 20 70 61 72 73 65  .** An SQL parse
1f800 72 20 63 6f 6e 74 65 78 74 2e 20 20 41 20 63 6f  r context.  A co
1f810 70 79 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  py of this struc
1f820 74 75 72 65 20 69 73 20 70 61 73 73 65 64 20 74  ture is passed t
1f830 68 72 6f 75 67 68 0a 2a 2a 20 74 68 65 20 70 61  hrough.** the pa
1f840 72 73 65 72 20 61 6e 64 20 64 6f 77 6e 20 69 6e  rser and down in
1f850 74 6f 20 61 6c 6c 20 74 68 65 20 70 61 72 73 65  to all the parse
1f860 72 20 61 63 74 69 6f 6e 20 72 6f 75 74 69 6e 65  r action routine
1f870 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20   in order to.** 
1f880 63 61 72 72 79 20 61 72 6f 75 6e 64 20 69 6e 66  carry around inf
1f890 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 69 73  ormation that is
1f8a0 20 67 6c 6f 62 61 6c 20 74 6f 20 74 68 65 20 65   global to the e
1f8b0 6e 74 69 72 65 20 70 61 72 73 65 2e 0a 2a 2a 0a  ntire parse..**.
1f8c0 2a 2a 20 54 68 65 20 73 74 72 75 63 74 75 72 65  ** The structure
1f8d0 20 69 73 20 64 69 76 69 64 65 64 20 69 6e 74 6f   is divided into
1f8e0 20 74 77 6f 20 70 61 72 74 73 2e 20 20 57 68 65   two parts.  Whe
1f8f0 6e 20 74 68 65 20 70 61 72 73 65 72 20 61 6e 64  n the parser and
1f900 20 63 6f 64 65 0a 2a 2a 20 67 65 6e 65 72 61 74   code.** generat
1f910 65 20 63 61 6c 6c 20 74 68 65 6d 73 65 6c 76 65  e call themselve
1f920 73 20 72 65 63 75 72 73 69 76 65 6c 79 2c 20 74  s recursively, t
1f930 68 65 20 66 69 72 73 74 20 70 61 72 74 20 6f 66  he first part of
1f940 20 74 68 65 20 73 74 72 75 63 74 75 72 65 0a 2a   the structure.*
1f950 2a 20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62 75  * is constant bu
1f960 74 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61 72  t the second par
1f970 74 20 69 73 20 72 65 73 65 74 20 61 74 20 74 68  t is reset at th
1f980 65 20 62 65 67 69 6e 6e 69 6e 67 20 61 6e 64 20  e beginning and 
1f990 65 6e 64 20 6f 66 0a 2a 2a 20 65 61 63 68 20 72  end of.** each r
1f9a0 65 63 75 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  ecursion..**.** 
1f9b0 54 68 65 20 6e 54 61 62 6c 65 4c 6f 63 6b 20 61  The nTableLock a
1f9c0 6e 64 20 61 54 61 62 6c 65 4c 6f 63 6b 20 76 61  nd aTableLock va
1f9d0 72 69 61 62 6c 65 73 20 61 72 65 20 6f 6e 6c 79  riables are only
1f9e0 20 75 73 65 64 20 69 66 20 74 68 65 20 73 68 61   used if the sha
1f9f0 72 65 64 2d 63 61 63 68 65 0a 2a 2a 20 66 65 61  red-cache.** fea
1fa00 74 75 72 65 20 69 73 20 65 6e 61 62 6c 65 64 20  ture is enabled 
1fa10 28 69 66 20 73 71 6c 69 74 65 33 54 73 64 28 29  (if sqlite3Tsd()
1fa20 2d 3e 75 73 65 53 68 61 72 65 64 44 61 74 61 20  ->useSharedData 
1fa30 69 73 20 74 72 75 65 29 2e 20 54 68 65 79 20 61  is true). They a
1fa40 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73 74  re.** used to st
1fa50 6f 72 65 20 74 68 65 20 73 65 74 20 6f 66 20 74  ore the set of t
1fa60 61 62 6c 65 2d 6c 6f 63 6b 73 20 72 65 71 75 69  able-locks requi
1fa70 72 65 64 20 62 79 20 74 68 65 20 73 74 61 74 65  red by the state
1fa80 6d 65 6e 74 20 62 65 69 6e 67 0a 2a 2a 20 63 6f  ment being.** co
1fa90 6d 70 69 6c 65 64 2e 20 46 75 6e 63 74 69 6f 6e  mpiled. Function
1faa0 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63   sqlite3TableLoc
1fab0 6b 28 29 20 69 73 20 75 73 65 64 20 74 6f 20 61  k() is used to a
1fac0 64 64 20 65 6e 74 72 69 65 73 20 74 6f 20 74 68  dd entries to th
1fad0 65 0a 2a 2a 20 6c 69 73 74 2e 0a 2a 2f 0a 73 74  e.** list..*/.st
1fae0 72 75 63 74 20 50 61 72 73 65 20 7b 0a 20 20 73  ruct Parse {.  s
1faf0 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
1fb00 20 20 20 20 2f 2a 20 54 68 65 20 6d 61 69 6e 20      /* The main 
1fb10 64 61 74 61 62 61 73 65 20 73 74 72 75 63 74 75  database structu
1fb20 72 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45  re */.  char *zE
1fb30 72 72 4d 73 67 3b 20 20 20 20 20 20 20 2f 2a 20  rrMsg;       /* 
1fb40 41 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  An error message
1fb50 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 56 64 62   */.  Vdbe *pVdb
1fb60 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6e  e;         /* An
1fb70 20 65 6e 67 69 6e 65 20 66 6f 72 20 65 78 65 63   engine for exec
1fb80 75 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 62  uting database b
1fb90 79 74 65 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74  ytecode */.  int
1fba0 20 72 63 3b 20 20 20 20 20 20 20 20 20 20 20 20   rc;            
1fbb0 20 20 2f 2a 20 52 65 74 75 72 6e 20 63 6f 64 65    /* Return code
1fbc0 20 66 72 6f 6d 20 65 78 65 63 75 74 69 6f 6e 20   from execution 
1fbd0 2a 2f 0a 20 20 75 38 20 63 6f 6c 4e 61 6d 65 73  */.  u8 colNames
1fbe0 53 65 74 3b 20 20 20 20 20 20 2f 2a 20 54 52 55  Set;      /* TRU
1fbf0 45 20 61 66 74 65 72 20 4f 50 5f 43 6f 6c 75 6d  E after OP_Colum
1fc00 6e 4e 61 6d 65 20 68 61 73 20 62 65 65 6e 20 69  nName has been i
1fc10 73 73 75 65 64 20 74 6f 20 70 56 64 62 65 20 2a  ssued to pVdbe *
1fc20 2f 0a 20 20 75 38 20 63 68 65 63 6b 53 63 68 65  /.  u8 checkSche
1fc30 6d 61 3b 20 20 20 20 20 20 2f 2a 20 43 61 75 73  ma;      /* Caus
1fc40 65 73 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65  es schema cookie
1fc50 20 63 68 65 63 6b 20 61 66 74 65 72 20 61 6e 20   check after an 
1fc60 65 72 72 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 65  error */.  u8 ne
1fc70 73 74 65 64 3b 20 20 20 20 20 20 20 20 20 20 20  sted;           
1fc80 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73  /* Number of nes
1fc90 74 65 64 20 63 61 6c 6c 73 20 74 6f 20 74 68 65  ted calls to the
1fca0 20 70 61 72 73 65 72 2f 63 6f 64 65 20 67 65 6e   parser/code gen
1fcb0 65 72 61 74 6f 72 20 2a 2f 0a 20 20 75 38 20 6e  erator */.  u8 n
1fcc0 54 65 6d 70 52 65 67 3b 20 20 20 20 20 20 20 20  TempReg;        
1fcd0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 65   /* Number of te
1fce0 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72  mporary register
1fcf0 73 20 69 6e 20 61 54 65 6d 70 52 65 67 5b 5d 20  s in aTempReg[] 
1fd00 2a 2f 0a 20 20 75 38 20 69 73 4d 75 6c 74 69 57  */.  u8 isMultiW
1fd10 72 69 74 65 3b 20 20 20 20 20 2f 2a 20 54 72 75  rite;     /* Tru
1fd20 65 20 69 66 20 73 74 61 74 65 6d 65 6e 74 20 6d  e if statement m
1fd30 61 79 20 6d 6f 64 69 66 79 2f 69 6e 73 65 72 74  ay modify/insert
1fd40 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a   multiple rows *
1fd50 2f 0a 20 20 75 38 20 6d 61 79 41 62 6f 72 74 3b  /.  u8 mayAbort;
1fd60 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
1fd70 20 69 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61   if statement ma
1fd80 79 20 74 68 72 6f 77 20 61 6e 20 41 42 4f 52 54  y throw an ABORT
1fd90 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20 20   exception */.  
1fda0 75 38 20 68 61 73 43 6f 6d 70 6f 75 6e 64 3b 20  u8 hasCompound; 
1fdb0 20 20 20 20 20 2f 2a 20 4e 65 65 64 20 74 6f 20       /* Need to 
1fdc0 69 6e 76 6f 6b 65 20 63 6f 6e 76 65 72 74 43 6f  invoke convertCo
1fdd0 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75  mpoundSelectToSu
1fde0 62 71 75 65 72 79 28 29 20 2a 2f 0a 20 20 75 38  bquery() */.  u8
1fdf0 20 6f 6b 43 6f 6e 73 74 46 61 63 74 6f 72 3b 20   okConstFactor; 
1fe00 20 20 20 2f 2a 20 4f 4b 20 74 6f 20 66 61 63 74     /* OK to fact
1fe10 6f 72 20 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73  or out constants
1fe20 20 2a 2f 0a 20 20 75 38 20 64 69 73 61 62 6c 65   */.  u8 disable
1fe30 4c 6f 6f 6b 61 73 69 64 65 3b 20 2f 2a 20 4e 75  Lookaside; /* Nu
1fe40 6d 62 65 72 20 6f 66 20 74 69 6d 65 73 20 6c 6f  mber of times lo
1fe50 6f 6b 61 73 69 64 65 20 68 61 73 20 62 65 65 6e  okaside has been
1fe60 20 64 69 73 61 62 6c 65 64 20 2a 2f 0a 20 20 75   disabled */.  u
1fe70 38 20 6e 43 6f 6c 43 61 63 68 65 3b 20 20 20 20  8 nColCache;    
1fe80 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1fe90 20 65 6e 74 72 69 65 73 20 69 6e 20 61 43 6f 6c   entries in aCol
1fea0 43 61 63 68 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74  Cache[] */.  int
1feb0 20 6e 52 61 6e 67 65 52 65 67 3b 20 20 20 20 20   nRangeReg;     
1fec0 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65    /* Size of the
1fed0 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73   temporary regis
1fee0 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69  ter block */.  i
1fef0 6e 74 20 69 52 61 6e 67 65 52 65 67 3b 20 20 20  nt iRangeReg;   
1ff00 20 20 20 20 2f 2a 20 46 69 72 73 74 20 72 65 67      /* First reg
1ff10 69 73 74 65 72 20 69 6e 20 74 65 6d 70 6f 72 61  ister in tempora
1ff20 72 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f 63  ry register bloc
1ff30 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b  k */.  int nErr;
1ff40 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1ff50 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20  umber of errors 
1ff60 73 65 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 54  seen */.  int nT
1ff70 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ab;            /
1ff80 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 72 65 76  * Number of prev
1ff90 69 6f 75 73 6c 79 20 61 6c 6c 6f 63 61 74 65 64  iously allocated
1ffa0 20 56 44 42 45 20 63 75 72 73 6f 72 73 20 2a 2f   VDBE cursors */
1ffb0 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20  .  int nMem;    
1ffc0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1ffd0 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  r of memory cell
1ffe0 73 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f  s used so far */
1fff0 0a 20 20 69 6e 74 20 6e 4f 70 41 6c 6c 6f 63 3b  .  int nOpAlloc;
20000 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
20010 72 20 6f 66 20 73 6c 6f 74 73 20 61 6c 6c 6f 63  r of slots alloc
20020 61 74 65 64 20 66 6f 72 20 56 64 62 65 2e 61 4f  ated for Vdbe.aO
20030 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 4f  p[] */.  int szO
20040 70 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 2f 2a  pAlloc;       /*
20050 20 42 79 74 65 73 20 6f 66 20 6d 65 6d 6f 72 79   Bytes of memory
20060 20 73 70 61 63 65 20 61 6c 6c 6f 63 61 74 65 64   space allocated
20070 20 66 6f 72 20 56 64 62 65 2e 61 4f 70 5b 5d 20   for Vdbe.aOp[] 
20080 2a 2f 0a 20 20 69 6e 74 20 69 53 65 6c 66 54 61  */.  int iSelfTa
20090 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62  b;        /* Tab
200a0 6c 65 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  le associated wi
200b0 74 68 20 61 6e 20 69 6e 64 65 78 20 6f 6e 20 65  th an index on e
200c0 78 70 72 2c 20 6f 72 20 6e 65 67 61 74 69 76 65  xpr, or negative
200d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
200e0 20 20 20 20 20 20 20 20 2a 2a 20 6f 66 20 74 68          ** of th
200f0 65 20 62 61 73 65 20 72 65 67 69 73 74 65 72 20  e base register 
20100 64 75 72 69 6e 67 20 63 68 65 63 6b 2d 63 6f 6e  during check-con
20110 73 74 72 61 69 6e 74 20 65 76 61 6c 20 2a 2f 0a  straint eval */.
20120 20 20 69 6e 74 20 69 43 61 63 68 65 4c 65 76 65    int iCacheLeve
20130 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 43 61 63  l;     /* ColCac
20140 68 65 20 76 61 6c 69 64 20 77 68 65 6e 20 61 43  he valid when aC
20150 6f 6c 43 61 63 68 65 5b 5d 2e 69 4c 65 76 65 6c  olCache[].iLevel
20160 3c 3d 69 43 61 63 68 65 4c 65 76 65 6c 20 2a 2f  <=iCacheLevel */
20170 0a 20 20 69 6e 74 20 69 43 61 63 68 65 43 6e 74  .  int iCacheCnt
20180 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74  ;       /* Count
20190 65 72 20 75 73 65 64 20 74 6f 20 67 65 6e 65 72  er used to gener
201a0 61 74 65 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e  ate aColCache[].
201b0 6c 72 75 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20  lru values */.  
201c0 69 6e 74 20 6e 4c 61 62 65 6c 3b 20 20 20 20 20  int nLabel;     
201d0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
201e0 66 20 6c 61 62 65 6c 73 20 75 73 65 64 20 2a 2f  f labels used */
201f0 0a 20 20 69 6e 74 20 2a 61 4c 61 62 65 6c 3b 20  .  int *aLabel; 
20200 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65          /* Space
20210 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 6c 61 62   to hold the lab
20220 65 6c 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  els */.  ExprLis
20230 74 20 2a 70 43 6f 6e 73 74 45 78 70 72 3b 2f 2a  t *pConstExpr;/*
20240 20 43 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73   Constant expres
20250 73 69 6f 6e 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e  sions */.  Token
20260 20 63 6f 6e 73 74 72 61 69 6e 74 4e 61 6d 65 3b   constraintName;
20270 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63  /* Name of the c
20280 6f 6e 73 74 72 61 69 6e 74 20 63 75 72 72 65 6e  onstraint curren
20290 74 6c 79 20 62 65 69 6e 67 20 70 61 72 73 65 64  tly being parsed
202a0 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 77 72   */.  yDbMask wr
202b0 69 74 65 4d 61 73 6b 3b 20 20 20 2f 2a 20 53 74  iteMask;   /* St
202c0 61 72 74 20 61 20 77 72 69 74 65 20 74 72 61 6e  art a write tran
202d0 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68 65 73 65  saction on these
202e0 20 64 61 74 61 62 61 73 65 73 20 2a 2f 0a 20 20   databases */.  
202f0 79 44 62 4d 61 73 6b 20 63 6f 6f 6b 69 65 4d 61  yDbMask cookieMa
20300 73 6b 3b 20 20 2f 2a 20 42 69 74 6d 61 73 6b 20  sk;  /* Bitmask 
20310 6f 66 20 73 63 68 65 6d 61 20 76 65 72 69 66 69  of schema verifi
20320 65 64 20 64 61 74 61 62 61 73 65 73 20 2a 2f 0a  ed databases */.
20330 20 20 69 6e 74 20 72 65 67 52 6f 77 69 64 3b 20    int regRowid; 
20340 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74         /* Regist
20350 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 77 69 64  er holding rowid
20360 20 6f 66 20 43 52 45 41 54 45 20 54 41 42 4c 45   of CREATE TABLE
20370 20 65 6e 74 72 79 20 2a 2f 0a 20 20 69 6e 74 20   entry */.  int 
20380 72 65 67 52 6f 6f 74 3b 20 20 20 20 20 20 20 20  regRoot;        
20390 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c   /* Register hol
203a0 64 69 6e 67 20 72 6f 6f 74 20 70 61 67 65 20 6e  ding root page n
203b0 75 6d 62 65 72 20 66 6f 72 20 6e 65 77 20 6f 62  umber for new ob
203c0 6a 65 63 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  jects */.  int n
203d0 4d 61 78 41 72 67 3b 20 20 20 20 20 20 20 20 20  MaxArg;         
203e0 2f 2a 20 4d 61 78 20 61 72 67 73 20 70 61 73 73  /* Max args pass
203f0 65 64 20 74 6f 20 75 73 65 72 20 66 75 6e 63 74  ed to user funct
20400 69 6f 6e 20 62 79 20 73 75 62 2d 70 72 6f 67 72  ion by sub-progr
20410 61 6d 20 2a 2f 0a 23 69 66 20 53 45 4c 45 43 54  am */.#if SELECT
20420 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a 20 20  TRACE_ENABLED.  
20430 69 6e 74 20 6e 53 65 6c 65 63 74 3b 20 20 20 20  int nSelect;    
20440 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
20450 66 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  f SELECT stateme
20460 6e 74 73 20 73 65 65 6e 20 2a 2f 0a 23 65 6e 64  nts seen */.#end
20470 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
20480 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41  E_OMIT_SHARED_CA
20490 43 48 45 0a 20 20 69 6e 74 20 6e 54 61 62 6c 65  CHE.  int nTable
204a0 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 2f 2a 20  Lock;        /* 
204b0 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 63 6b 73 20  Number of locks 
204c0 69 6e 20 61 54 61 62 6c 65 4c 6f 63 6b 20 2a 2f  in aTableLock */
204d0 0a 20 20 54 61 62 6c 65 4c 6f 63 6b 20 2a 61 54  .  TableLock *aT
204e0 61 62 6c 65 4c 6f 63 6b 3b 20 2f 2a 20 52 65 71  ableLock; /* Req
204f0 75 69 72 65 64 20 74 61 62 6c 65 20 6c 6f 63 6b  uired table lock
20500 73 20 66 6f 72 20 73 68 61 72 65 64 2d 63 61 63  s for shared-cac
20510 68 65 20 6d 6f 64 65 20 2a 2f 0a 23 65 6e 64 69  he mode */.#endi
20520 66 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20  f.  AutoincInfo 
20530 2a 70 41 69 6e 63 3b 20 20 2f 2a 20 49 6e 66 6f  *pAinc;  /* Info
20540 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 41 55  rmation about AU
20550 54 4f 49 4e 43 52 45 4d 45 4e 54 20 63 6f 75 6e  TOINCREMENT coun
20560 74 65 72 73 20 2a 2f 0a 20 20 50 61 72 73 65 20  ters */.  Parse 
20570 2a 70 54 6f 70 6c 65 76 65 6c 3b 20 20 20 20 2f  *pToplevel;    /
20580 2a 20 50 61 72 73 65 20 73 74 72 75 63 74 75 72  * Parse structur
20590 65 20 66 6f 72 20 6d 61 69 6e 20 70 72 6f 67 72  e for main progr
205a0 61 6d 20 28 6f 72 20 4e 55 4c 4c 29 20 2a 2f 0a  am (or NULL) */.
205b0 20 20 54 61 62 6c 65 20 2a 70 54 72 69 67 67 65    Table *pTrigge
205c0 72 54 61 62 3b 20 20 2f 2a 20 54 61 62 6c 65 20  rTab;  /* Table 
205d0 74 72 69 67 67 65 72 73 20 61 72 65 20 62 65 69  triggers are bei
205e0 6e 67 20 63 6f 64 65 64 20 66 6f 72 20 2a 2f 0a  ng coded for */.
205f0 20 20 69 6e 74 20 61 64 64 72 43 72 54 61 62 3b    int addrCrTab;
20600 20 20 20 20 20 20 20 2f 2a 20 41 64 64 72 65 73         /* Addres
20610 73 20 6f 66 20 4f 50 5f 43 72 65 61 74 65 42 74  s of OP_CreateBt
20620 72 65 65 20 6f 70 63 6f 64 65 20 6f 6e 20 43 52  ree opcode on CR
20630 45 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20  EATE TABLE */.  
20640 75 33 32 20 6e 51 75 65 72 79 4c 6f 6f 70 3b 20  u32 nQueryLoop; 
20650 20 20 20 20 20 2f 2a 20 45 73 74 20 6e 75 6d 62       /* Est numb
20660 65 72 20 6f 66 20 69 74 65 72 61 74 69 6f 6e 73  er of iterations
20670 20 6f 66 20 61 20 71 75 65 72 79 20 28 31 30 2a   of a query (10*
20680 6c 6f 67 32 28 4e 29 29 20 2a 2f 0a 20 20 75 33  log2(N)) */.  u3
20690 32 20 6f 6c 64 6d 61 73 6b 3b 20 20 20 20 20 20  2 oldmask;      
206a0 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6f 6c     /* Mask of ol
206b0 64 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65  d.* columns refe
206c0 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 33 32 20  renced */.  u32 
206d0 6e 65 77 6d 61 73 6b 3b 20 20 20 20 20 20 20 20  newmask;        
206e0 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6e 65 77 2e   /* Mask of new.
206f0 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65  * columns refere
20700 6e 63 65 64 20 2a 2f 0a 20 20 75 38 20 65 54 72  nced */.  u8 eTr
20710 69 67 67 65 72 4f 70 3b 20 20 20 20 20 20 20 2f  iggerOp;       /
20720 2a 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f  * TK_UPDATE, TK_
20730 49 4e 53 45 52 54 20 6f 72 20 54 4b 5f 44 45 4c  INSERT or TK_DEL
20740 45 54 45 20 2a 2f 0a 20 20 75 38 20 65 4f 72 63  ETE */.  u8 eOrc
20750 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  onf;          /*
20760 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46   Default ON CONF
20770 4c 49 43 54 20 70 6f 6c 69 63 79 20 66 6f 72 20  LICT policy for 
20780 74 72 69 67 67 65 72 20 73 74 65 70 73 20 2a 2f  trigger steps */
20790 0a 20 20 75 38 20 64 69 73 61 62 6c 65 54 72 69  .  u8 disableTri
207a0 67 67 65 72 73 3b 20 20 2f 2a 20 54 72 75 65 20  ggers;  /* True 
207b0 74 6f 20 64 69 73 61 62 6c 65 20 74 72 69 67 67  to disable trigg
207c0 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a  ers */..  /*****
207d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
207e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
207f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20800 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20810 2a 2a 2a 2a 2a 0a 20 20 2a 2a 20 46 69 65 6c 64  *****.  ** Field
20820 73 20 61 62 6f 76 65 20 6d 75 73 74 20 62 65 20  s above must be 
20830 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 7a  initialized to z
20840 65 72 6f 2e 20 20 54 68 65 20 66 69 65 6c 64 73  ero.  The fields
20850 20 74 68 61 74 20 66 6f 6c 6c 6f 77 2c 0a 20 20   that follow,.  
20860 2a 2a 20 64 6f 77 6e 20 74 6f 20 74 68 65 20 62  ** down to the b
20870 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20  eginning of the 
20880 72 65 63 75 72 73 69 76 65 20 73 65 63 74 69 6f  recursive sectio
20890 6e 2c 20 64 6f 20 6e 6f 74 20 6e 65 65 64 20 74  n, do not need t
208a0 6f 20 62 65 0a 20 20 2a 2a 20 69 6e 69 74 69 61  o be.  ** initia
208b0 6c 69 7a 65 64 20 61 73 20 74 68 65 79 20 77 69  lized as they wi
208c0 6c 6c 20 62 65 20 73 65 74 20 62 65 66 6f 72 65  ll be set before
208d0 20 62 65 69 6e 67 20 75 73 65 64 2e 20 20 54 68   being used.  Th
208e0 65 20 62 6f 75 6e 64 61 72 79 20 69 73 0a 20 20  e boundary is.  
208f0 2a 2a 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79  ** determined by
20900 20 6f 66 66 73 65 74 6f 66 28 50 61 72 73 65 2c   offsetof(Parse,
20910 61 43 6f 6c 43 61 63 68 65 29 2e 0a 20 20 2a 2a  aColCache)..  **
20920 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20930 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20940 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20950 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20960 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 73 74 72  ********/..  str
20970 75 63 74 20 79 43 6f 6c 43 61 63 68 65 20 7b 0a  uct yColCache {.
20980 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20      int iTable; 
20990 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62            /* Tab
209a0 6c 65 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72  le cursor number
209b0 20 2a 2f 0a 20 20 20 20 69 31 36 20 69 43 6f 6c   */.    i16 iCol
209c0 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  umn;          /*
209d0 20 54 61 62 6c 65 20 63 6f 6c 75 6d 6e 20 6e 75   Table column nu
209e0 6d 62 65 72 20 2a 2f 0a 20 20 20 20 75 38 20 74  mber */.    u8 t
209f0 65 6d 70 52 65 67 3b 20 20 20 20 20 20 20 20 20  empReg;         
20a00 20 20 2f 2a 20 69 52 65 67 20 69 73 20 61 20 74    /* iReg is a t
20a10 65 6d 70 20 72 65 67 69 73 74 65 72 20 74 68 61  emp register tha
20a20 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 66 72  t needs to be fr
20a30 65 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  eed */.    int i
20a40 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20  Level;          
20a50 20 2f 2a 20 4e 65 73 74 69 6e 67 20 6c 65 76 65   /* Nesting leve
20a60 6c 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 52 65  l */.    int iRe
20a70 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  g;             /
20a80 2a 20 52 65 67 20 77 69 74 68 20 76 61 6c 75 65  * Reg with value
20a90 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e   of this column.
20aa0 20 30 20 6d 65 61 6e 73 20 6e 6f 6e 65 2e 20 2a   0 means none. *
20ab0 2f 0a 20 20 20 20 69 6e 74 20 6c 72 75 3b 20 20  /.    int lru;  
20ac0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
20ad0 65 61 73 74 20 72 65 63 65 6e 74 6c 79 20 75 73  east recently us
20ae0 65 64 20 65 6e 74 72 79 20 68 61 73 20 74 68 65  ed entry has the
20af0 20 73 6d 61 6c 6c 65 73 74 20 76 61 6c 75 65 20   smallest value 
20b00 2a 2f 0a 20 20 7d 20 61 43 6f 6c 43 61 63 68 65  */.  } aColCache
20b10 5b 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43  [SQLITE_N_COLCAC
20b20 48 45 5d 3b 20 20 2f 2a 20 4f 6e 65 20 66 6f 72  HE];  /* One for
20b30 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 63 61 63   each column cac
20b40 68 65 20 65 6e 74 72 79 20 2a 2f 0a 20 20 69 6e  he entry */.  in
20b50 74 20 61 54 65 6d 70 52 65 67 5b 38 5d 3b 20 20  t aTempReg[8];  
20b60 20 20 20 20 20 20 2f 2a 20 48 6f 6c 64 69 6e 67        /* Holding
20b70 20 61 72 65 61 20 66 6f 72 20 74 65 6d 70 6f 72   area for tempor
20b80 61 72 79 20 72 65 67 69 73 74 65 72 73 20 2a 2f  ary registers */
20b90 0a 20 20 54 6f 6b 65 6e 20 73 4e 61 6d 65 54 6f  .  Token sNameTo
20ba0 6b 65 6e 3b 20 20 20 20 20 20 20 2f 2a 20 54 6f  ken;       /* To
20bb0 6b 65 6e 20 77 69 74 68 20 75 6e 71 75 61 6c 69  ken with unquali
20bc0 66 69 65 64 20 73 63 68 65 6d 61 20 6f 62 6a 65  fied schema obje
20bd0 63 74 20 6e 61 6d 65 20 2a 2f 0a 0a 20 20 2f 2a  ct name */..  /*
20be0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20bf0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20c00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20c10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20c20 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a 20 41 62 6f  *******.  ** Abo
20c30 76 65 20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62  ve is constant b
20c40 65 74 77 65 65 6e 20 72 65 63 75 72 73 69 6f 6e  etween recursion
20c50 73 2e 20 20 42 65 6c 6f 77 20 69 73 20 72 65 73  s.  Below is res
20c60 65 74 20 62 65 66 6f 72 65 20 61 6e 64 20 61 66  et before and af
20c70 74 65 72 0a 20 20 2a 2a 20 65 61 63 68 20 72 65  ter.  ** each re
20c80 63 75 72 73 69 6f 6e 2e 20 20 54 68 65 20 62 6f  cursion.  The bo
20c90 75 6e 64 61 72 79 20 62 65 74 77 65 65 6e 20 74  undary between t
20ca0 68 65 73 65 20 74 77 6f 20 72 65 67 69 6f 6e 73  hese two regions
20cb0 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 0a 20   is determined. 
20cc0 20 2a 2a 20 75 73 69 6e 67 20 6f 66 66 73 65 74   ** using offset
20cd0 6f 66 28 50 61 72 73 65 2c 73 4c 61 73 74 54 6f  of(Parse,sLastTo
20ce0 6b 65 6e 29 20 73 6f 20 74 68 65 20 73 4c 61 73  ken) so the sLas
20cf0 74 54 6f 6b 65 6e 20 66 69 65 6c 64 20 6d 75 73  tToken field mus
20d00 74 20 62 65 20 74 68 65 0a 20 20 2a 2a 20 66 69  t be the.  ** fi
20d10 72 73 74 20 66 69 65 6c 64 20 69 6e 20 74 68 65  rst field in the
20d20 20 72 65 63 75 72 73 69 76 65 20 72 65 67 69 6f   recursive regio
20d30 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  n..  ***********
20d40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20d50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20d60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20d70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a  *************/..
20d80 20 20 54 6f 6b 65 6e 20 73 4c 61 73 74 54 6f 6b    Token sLastTok
20d90 65 6e 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65  en;       /* The
20da0 20 6c 61 73 74 20 74 6f 6b 65 6e 20 70 61 72 73   last token pars
20db0 65 64 20 2a 2f 0a 20 20 79 6e 56 61 72 20 6e 56  ed */.  ynVar nV
20dc0 61 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ar;             
20dd0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 27    /* Number of '
20de0 3f 27 20 76 61 72 69 61 62 6c 65 73 20 73 65 65  ?' variables see
20df0 6e 20 69 6e 20 74 68 65 20 53 51 4c 20 73 6f 20  n in the SQL so 
20e00 66 61 72 20 2a 2f 0a 20 20 75 38 20 69 50 6b 53  far */.  u8 iPkS
20e10 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20  ortOrder;       
20e20 20 20 20 2f 2a 20 41 53 43 20 6f 72 20 44 45 53     /* ASC or DES
20e30 43 20 66 6f 72 20 49 4e 54 45 47 45 52 20 50 52  C for INTEGER PR
20e40 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 75  IMARY KEY */.  u
20e50 38 20 65 78 70 6c 61 69 6e 3b 20 20 20 20 20 20  8 explain;      
20e60 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
20e70 20 69 66 20 74 68 65 20 45 58 50 4c 41 49 4e 20   if the EXPLAIN 
20e80 66 6c 61 67 20 69 73 20 66 6f 75 6e 64 20 6f 6e  flag is found on
20e90 20 74 68 65 20 71 75 65 72 79 20 2a 2f 0a 23 69   the query */.#i
20ea0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
20eb0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
20ec0 20 75 38 20 64 65 63 6c 61 72 65 56 74 61 62 3b   u8 declareVtab;
20ed0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
20ee0 75 65 20 69 66 20 69 6e 73 69 64 65 20 73 71 6c  ue if inside sql
20ef0 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61  ite3_declare_vta
20f00 62 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 74  b() */.  int nVt
20f10 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 20  abLock;         
20f20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
20f30 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 74  virtual tables t
20f40 6f 20 6c 6f 63 6b 20 2a 2f 0a 23 65 6e 64 69 66  o lock */.#endif
20f50 0a 20 20 69 6e 74 20 6e 48 65 69 67 68 74 3b 20  .  int nHeight; 
20f60 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
20f70 45 78 70 72 65 73 73 69 6f 6e 20 74 72 65 65 20  Expression tree 
20f80 68 65 69 67 68 74 20 6f 66 20 63 75 72 72 65 6e  height of curren
20f90 74 20 73 75 62 2d 73 65 6c 65 63 74 20 2a 2f 0a  t sub-select */.
20fa0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
20fb0 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20 69 6e  MIT_EXPLAIN.  in
20fc0 74 20 61 64 64 72 45 78 70 6c 61 69 6e 3b 20 20  t addrExplain;  
20fd0 20 20 20 20 20 20 20 20 2f 2a 20 41 64 64 72 65          /* Addre
20fe0 73 73 20 6f 66 20 63 75 72 72 65 6e 74 20 4f 50  ss of current OP
20ff0 5f 45 78 70 6c 61 69 6e 20 6f 70 63 6f 64 65 20  _Explain opcode 
21000 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 56 4c 69 73  */.#endif.  VLis
21010 74 20 2a 70 56 4c 69 73 74 3b 20 20 20 20 20 20  t *pVList;      
21020 20 20 20 20 20 20 2f 2a 20 4d 61 70 70 69 6e 67        /* Mapping
21030 20 62 65 74 77 65 65 6e 20 76 61 72 69 61 62 6c   between variabl
21040 65 20 6e 61 6d 65 73 20 61 6e 64 20 6e 75 6d 62  e names and numb
21050 65 72 73 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70  ers */.  Vdbe *p
21060 52 65 70 72 65 70 61 72 65 3b 20 20 20 20 20 20  Reprepare;      
21070 20 20 20 2f 2a 20 56 4d 20 62 65 69 6e 67 20 72     /* VM being r
21080 65 70 72 65 70 61 72 65 64 20 28 73 71 6c 69 74  eprepared (sqlit
21090 65 33 52 65 70 72 65 70 61 72 65 28 29 29 20 2a  e3Reprepare()) *
210a0 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
210b0 7a 54 61 69 6c 3b 20 20 20 20 20 20 20 20 2f 2a  zTail;        /*
210c0 20 41 6c 6c 20 53 51 4c 20 74 65 78 74 20 70 61   All SQL text pa
210d0 73 74 20 74 68 65 20 6c 61 73 74 20 73 65 6d 69  st the last semi
210e0 63 6f 6c 6f 6e 20 70 61 72 73 65 64 20 2a 2f 0a  colon parsed */.
210f0 20 20 54 61 62 6c 65 20 2a 70 4e 65 77 54 61 62    Table *pNewTab
21100 6c 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41  le;         /* A
21110 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6f 6e   table being con
21120 73 74 72 75 63 74 65 64 20 62 79 20 43 52 45 41  structed by CREA
21130 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20 54 72  TE TABLE */.  Tr
21140 69 67 67 65 72 20 2a 70 4e 65 77 54 72 69 67 67  igger *pNewTrigg
21150 65 72 3b 20 20 20 20 20 2f 2a 20 54 72 69 67 67  er;     /* Trigg
21160 65 72 20 75 6e 64 65 72 20 63 6f 6e 73 74 72 75  er under constru
21170 63 74 20 62 79 20 61 20 43 52 45 41 54 45 20 54  ct by a CREATE T
21180 52 49 47 47 45 52 20 2a 2f 0a 20 20 63 6f 6e 73  RIGGER */.  cons
21190 74 20 63 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e  t char *zAuthCon
211a0 74 65 78 74 3b 20 2f 2a 20 54 68 65 20 36 74 68  text; /* The 6th
211b0 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 64 62   parameter to db
211c0 2d 3e 78 41 75 74 68 20 63 61 6c 6c 62 61 63 6b  ->xAuth callback
211d0 73 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  s */.#ifndef SQL
211e0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
211f0 54 41 42 4c 45 0a 20 20 54 6f 6b 65 6e 20 73 41  TABLE.  Token sA
21200 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
21210 20 20 2f 2a 20 43 6f 6d 70 6c 65 74 65 20 74 65    /* Complete te
21220 78 74 20 6f 66 20 61 20 6d 6f 64 75 6c 65 20 61  xt of a module a
21230 72 67 75 6d 65 6e 74 20 2a 2f 0a 20 20 54 61 62  rgument */.  Tab
21240 6c 65 20 2a 2a 61 70 56 74 61 62 4c 6f 63 6b 3b  le **apVtabLock;
21250 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
21260 72 20 74 6f 20 76 69 72 74 75 61 6c 20 74 61 62  r to virtual tab
21270 6c 65 73 20 6e 65 65 64 69 6e 67 20 6c 6f 63 6b  les needing lock
21280 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ing */.#endif.  
21290 54 61 62 6c 65 20 2a 70 5a 6f 6d 62 69 65 54 61  Table *pZombieTa
212a0 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73  b;        /* Lis
212b0 74 20 6f 66 20 54 61 62 6c 65 20 6f 62 6a 65 63  t of Table objec
212c0 74 73 20 74 6f 20 64 65 6c 65 74 65 20 61 66 74  ts to delete aft
212d0 65 72 20 63 6f 64 65 20 67 65 6e 20 2a 2f 0a 20  er code gen */. 
212e0 20 54 72 69 67 67 65 72 50 72 67 20 2a 70 54 72   TriggerPrg *pTr
212f0 69 67 67 65 72 50 72 67 3b 20 20 2f 2a 20 4c 69  iggerPrg;  /* Li
21300 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 63 6f 64  nked list of cod
21310 65 64 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 20  ed triggers */. 
21320 20 57 69 74 68 20 2a 70 57 69 74 68 3b 20 20 20   With *pWith;   
21330 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75             /* Cu
21340 72 72 65 6e 74 20 57 49 54 48 20 63 6c 61 75 73  rrent WITH claus
21350 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20  e, or NULL */.  
21360 57 69 74 68 20 2a 70 57 69 74 68 54 6f 46 72 65  With *pWithToFre
21370 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 46 72 65  e;        /* Fre
21380 65 20 74 68 69 73 20 57 49 54 48 20 6f 62 6a 65  e this WITH obje
21390 63 74 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66  ct at the end of
213a0 20 74 68 65 20 70 61 72 73 65 20 2a 2f 0a 7d 3b   the parse */.};
213b0 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a 65 73 20 61 6e  ../*.** Sizes an
213c0 64 20 70 6f 69 6e 74 65 72 73 20 6f 66 20 76 61  d pointers of va
213d0 72 69 6f 75 73 20 70 61 72 74 73 20 6f 66 20 74  rious parts of t
213e0 68 65 20 50 61 72 73 65 20 6f 62 6a 65 63 74 2e  he Parse object.
213f0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 50 41 52 53  .*/.#define PARS
21400 45 5f 48 44 52 5f 53 5a 20 6f 66 66 73 65 74 6f  E_HDR_SZ offseto
21410 66 28 50 61 72 73 65 2c 61 43 6f 6c 43 61 63 68  f(Parse,aColCach
21420 65 29 20 2f 2a 20 52 65 63 75 72 73 69 76 65 20  e) /* Recursive 
21430 70 61 72 74 20 77 2f 6f 20 61 43 6f 6c 43 61 63  part w/o aColCac
21440 68 65 2a 2f 0a 23 64 65 66 69 6e 65 20 50 41 52  he*/.#define PAR
21450 53 45 5f 52 45 43 55 52 53 45 5f 53 5a 20 6f 66  SE_RECURSE_SZ of
21460 66 73 65 74 6f 66 28 50 61 72 73 65 2c 73 4c 61  fsetof(Parse,sLa
21470 73 74 54 6f 6b 65 6e 29 20 20 20 20 2f 2a 20 52  stToken)    /* R
21480 65 63 75 72 73 69 76 65 20 70 61 72 74 20 2a 2f  ecursive part */
21490 0a 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f 54  .#define PARSE_T
214a0 41 49 4c 5f 53 5a 20 28 73 69 7a 65 6f 66 28 50  AIL_SZ (sizeof(P
214b0 61 72 73 65 29 2d 50 41 52 53 45 5f 52 45 43 55  arse)-PARSE_RECU
214c0 52 53 45 5f 53 5a 29 20 2f 2a 20 4e 6f 6e 2d 72  RSE_SZ) /* Non-r
214d0 65 63 75 72 73 69 76 65 20 70 61 72 74 20 2a 2f  ecursive part */
214e0 0a 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f 54  .#define PARSE_T
214f0 41 49 4c 28 58 29 20 28 28 28 63 68 61 72 2a 29  AIL(X) (((char*)
21500 28 58 29 29 2b 50 41 52 53 45 5f 52 45 43 55 52  (X))+PARSE_RECUR
21510 53 45 5f 53 5a 29 20 20 2f 2a 20 50 6f 69 6e 74  SE_SZ)  /* Point
21520 65 72 20 74 6f 20 74 61 69 6c 20 2a 2f 0a 0a 2f  er to tail */../
21530 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65  *.** Return true
21540 20 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e   if currently in
21550 73 69 64 65 20 61 6e 20 73 71 6c 69 74 65 33 5f  side an sqlite3_
21560 64 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20 63  declare_vtab() c
21570 61 6c 6c 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  all..*/.#ifdef S
21580 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
21590 41 4c 54 41 42 4c 45 0a 20 20 23 64 65 66 69 6e  ALTABLE.  #defin
215a0 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41  e IN_DECLARE_VTA
215b0 42 20 30 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  B 0.#else.  #def
215c0 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56  ine IN_DECLARE_V
215d0 54 41 42 20 28 70 50 61 72 73 65 2d 3e 64 65 63  TAB (pParse->dec
215e0 6c 61 72 65 56 74 61 62 29 0a 23 65 6e 64 69 66  lareVtab).#endif
215f0 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
21600 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
21610 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63  wing structure c
21620 61 6e 20 62 65 20 64 65 63 6c 61 72 65 64 20 6f  an be declared o
21630 6e 20 61 20 73 74 61 63 6b 20 61 6e 64 20 75 73  n a stack and us
21640 65 64 0a 2a 2a 20 74 6f 20 73 61 76 65 20 74 68  ed.** to save th
21650 65 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e  e Parse.zAuthCon
21660 74 65 78 74 20 76 61 6c 75 65 20 73 6f 20 74 68  text value so th
21670 61 74 20 69 74 20 63 61 6e 20 62 65 20 72 65 73  at it can be res
21680 74 6f 72 65 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a  tored later..*/.
21690 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74 65  struct AuthConte
216a0 78 74 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61  xt {.  const cha
216b0 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b  r *zAuthContext;
216c0 20 20 20 2f 2a 20 50 75 74 20 73 61 76 65 64 20     /* Put saved 
216d0 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65  Parse.zAuthConte
216e0 78 74 20 68 65 72 65 20 2a 2f 0a 20 20 50 61 72  xt here */.  Par
216f0 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20  se *pParse;     
21700 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
21710 50 61 72 73 65 20 73 74 72 75 63 74 75 72 65 20  Parse structure 
21720 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42 69 74  */.};../*.** Bit
21730 66 69 65 6c 64 20 66 6c 61 67 73 20 66 6f 72 20  field flags for 
21740 50 35 20 76 61 6c 75 65 20 69 6e 20 76 61 72 69  P5 value in vari
21750 6f 75 73 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 0a  ous opcodes..**.
21760 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61  ** Value constra
21770 69 6e 74 73 20 28 65 6e 66 6f 72 63 65 64 20 76  ints (enforced v
21780 69 61 20 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a  ia assert()):.**
21790 20 20 20 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54      OPFLAG_LENGT
217a0 48 41 52 47 20 20 20 20 3d 3d 20 53 51 4c 49 54  HARG    == SQLIT
217b0 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 0a 2a 2a  E_FUNC_LENGTH.**
217c0 20 20 20 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f      OPFLAG_TYPEO
217d0 46 41 52 47 20 20 20 20 3d 3d 20 53 51 4c 49 54  FARG    == SQLIT
217e0 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46 0a 2a 2a  E_FUNC_TYPEOF.**
217f0 20 20 20 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43      OPFLAG_BULKC
21800 53 52 20 20 20 20 20 20 3d 3d 20 42 54 52 45 45  SR      == BTREE
21810 5f 42 55 4c 4b 4c 4f 41 44 0a 2a 2a 20 20 20 20  _BULKLOAD.**    
21820 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 20 20  OPFLAG_SEEKEQ   
21830 20 20 20 20 3d 3d 20 42 54 52 45 45 5f 53 45 45      == BTREE_SEE
21840 4b 5f 45 51 0a 2a 2a 20 20 20 20 4f 50 46 4c 41  K_EQ.**    OPFLA
21850 47 5f 46 4f 52 44 45 4c 45 54 45 20 20 20 20 3d  G_FORDELETE    =
21860 3d 20 42 54 52 45 45 5f 46 4f 52 44 45 4c 45 54  = BTREE_FORDELET
21870 45 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 53  E.**    OPFLAG_S
21880 41 56 45 50 4f 53 49 54 49 4f 4e 20 3d 3d 20 42  AVEPOSITION == B
21890 54 52 45 45 5f 53 41 56 45 50 4f 53 49 54 49 4f  TREE_SAVEPOSITIO
218a0 4e 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 41  N.**    OPFLAG_A
218b0 55 58 44 45 4c 45 54 45 20 20 20 20 3d 3d 20 42  UXDELETE    == B
218c0 54 52 45 45 5f 41 55 58 44 45 4c 45 54 45 0a 2a  TREE_AUXDELETE.*
218d0 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
218e0 5f 4e 43 48 41 4e 47 45 20 20 20 20 20 20 20 30  _NCHANGE       0
218f0 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 49 6e 73  x01    /* OP_Ins
21900 65 72 74 3a 20 53 65 74 20 74 6f 20 75 70 64 61  ert: Set to upda
21910 74 65 20 64 62 2d 3e 6e 43 68 61 6e 67 65 20 2a  te db->nChange *
21920 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
21930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21940 20 20 20 20 20 20 20 2f 2a 20 41 6c 73 6f 20 75         /* Also u
21950 73 65 64 20 69 6e 20 50 32 20 28 6e 6f 74 20 50  sed in P2 (not P
21960 35 29 20 6f 66 20 4f 50 5f 44 65 6c 65 74 65 20  5) of OP_Delete 
21970 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
21980 47 5f 45 50 48 45 4d 20 20 20 20 20 20 20 20 20  G_EPHEM         
21990 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43 6f  0x01    /* OP_Co
219a0 6c 75 6d 6e 3a 20 45 70 68 65 6d 65 72 61 6c 20  lumn: Ephemeral 
219b0 6f 75 74 70 75 74 20 69 73 20 6f 6b 20 2a 2f 0a  output is ok */.
219c0 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c  #define OPFLAG_L
219d0 41 53 54 52 4f 57 49 44 20 20 20 20 20 30 78 32  ASTROWID     0x2
219e0 30 20 20 20 20 2f 2a 20 53 65 74 20 74 6f 20 75  0    /* Set to u
219f0 70 64 61 74 65 20 64 62 2d 3e 6c 61 73 74 52 6f  pdate db->lastRo
21a00 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  wid */.#define O
21a10 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20 20  PFLAG_ISUPDATE  
21a20 20 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20 54      0x04    /* T
21a30 68 69 73 20 4f 50 5f 49 6e 73 65 72 74 20 69 73  his OP_Insert is
21a40 20 61 6e 20 73 71 6c 20 55 50 44 41 54 45 20 2a   an sql UPDATE *
21a50 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
21a60 5f 41 50 50 45 4e 44 20 20 20 20 20 20 20 20 30  _APPEND        0
21a70 78 30 38 20 20 20 20 2f 2a 20 54 68 69 73 20 69  x08    /* This i
21a80 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20 61  s likely to be a
21a90 6e 20 61 70 70 65 6e 64 20 2a 2f 0a 23 64 65 66  n append */.#def
21aa0 69 6e 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45  ine OPFLAG_USESE
21ab0 45 4b 52 45 53 55 4c 54 20 30 78 31 30 20 20 20  EKRESULT 0x10   
21ac0 20 2f 2a 20 54 72 79 20 74 6f 20 61 76 6f 69 64   /* Try to avoid
21ad0 20 61 20 73 65 65 6b 20 69 6e 20 42 74 72 65 65   a seek in Btree
21ae0 49 6e 73 65 72 74 28 29 20 2a 2f 0a 23 64 65 66  Insert() */.#def
21af0 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53 4e 4f 4f  ine OPFLAG_ISNOO
21b00 50 20 20 20 20 20 20 20 20 30 78 34 30 20 20 20  P        0x40   
21b10 20 2f 2a 20 4f 50 5f 44 65 6c 65 74 65 20 64 6f   /* OP_Delete do
21b20 65 73 20 70 72 65 2d 75 70 64 61 74 65 2d 68 6f  es pre-update-ho
21b30 6f 6b 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69  ok only */.#defi
21b40 6e 65 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48  ne OPFLAG_LENGTH
21b50 41 52 47 20 20 20 20 20 30 78 34 30 20 20 20 20  ARG     0x40    
21b60 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c  /* OP_Column onl
21b70 79 20 75 73 65 64 20 66 6f 72 20 6c 65 6e 67 74  y used for lengt
21b80 68 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  h() */.#define O
21b90 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 20  PFLAG_TYPEOFARG 
21ba0 20 20 20 20 30 78 38 30 20 20 20 20 2f 2a 20 4f      0x80    /* O
21bb0 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73  P_Column only us
21bc0 65 64 20 66 6f 72 20 74 79 70 65 6f 66 28 29 20  ed for typeof() 
21bd0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
21be0 47 5f 42 55 4c 4b 43 53 52 20 20 20 20 20 20 20  G_BULKCSR       
21bf0 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 4f 70  0x01    /* OP_Op
21c00 65 6e 2a 2a 20 75 73 65 64 20 74 6f 20 6f 70 65  en** used to ope
21c10 6e 20 62 75 6c 6b 20 63 75 72 73 6f 72 20 2a 2f  n bulk cursor */
21c20 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
21c30 53 45 45 4b 45 51 20 20 20 20 20 20 20 20 30 78  SEEKEQ        0x
21c40 30 32 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e  02    /* OP_Open
21c50 2a 2a 20 63 75 72 73 6f 72 20 75 73 65 73 20 45  ** cursor uses E
21c60 51 20 73 65 65 6b 20 6f 6e 6c 79 20 2a 2f 0a 23  Q seek only */.#
21c70 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 46 4f  define OPFLAG_FO
21c80 52 44 45 4c 45 54 45 20 20 20 20 20 30 78 30 38  RDELETE     0x08
21c90 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 20 73      /* OP_Open s
21ca0 68 6f 75 6c 64 20 75 73 65 20 42 54 52 45 45 5f  hould use BTREE_
21cb0 46 4f 52 44 45 4c 45 54 45 20 2a 2f 0a 23 64 65  FORDELETE */.#de
21cc0 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50 32 49 53  fine OPFLAG_P2IS
21cd0 52 45 47 20 20 20 20 20 20 20 30 78 31 30 20 20  REG       0x10  
21ce0 20 20 2f 2a 20 50 32 20 74 6f 20 4f 50 5f 4f 70    /* P2 to OP_Op
21cf0 65 6e 2a 2a 20 69 73 20 61 20 72 65 67 69 73 74  en** is a regist
21d00 65 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 23 64 65  er number */.#de
21d10 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d  fine OPFLAG_PERM
21d20 55 54 45 20 20 20 20 20 20 20 30 78 30 31 20 20  UTE       0x01  
21d30 20 20 2f 2a 20 4f 50 5f 43 6f 6d 70 61 72 65 3a    /* OP_Compare:
21d40 20 75 73 65 20 74 68 65 20 70 65 72 6d 75 74 61   use the permuta
21d50 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
21d60 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54  OPFLAG_SAVEPOSIT
21d70 49 4f 4e 20 20 30 78 30 32 20 20 20 20 2f 2a 20  ION  0x02    /* 
21d80 4f 50 5f 44 65 6c 65 74 65 2f 49 6e 73 65 72 74  OP_Delete/Insert
21d90 3a 20 73 61 76 65 20 63 75 72 73 6f 72 20 70 6f  : save cursor po
21da0 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  s */.#define OPF
21db0 4c 41 47 5f 41 55 58 44 45 4c 45 54 45 20 20 20  LAG_AUXDELETE   
21dc0 20 20 30 78 30 34 20 20 20 20 2f 2a 20 4f 50 5f    0x04    /* OP_
21dd0 44 65 6c 65 74 65 3a 20 69 6e 64 65 78 20 69 6e  Delete: index in
21de0 20 61 20 44 45 4c 45 54 45 20 6f 70 20 2a 2f 0a   a DELETE op */.
21df0 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4e  #define OPFLAG_N
21e00 4f 43 48 4e 47 5f 4d 41 47 49 43 20 20 30 78 36  OCHNG_MAGIC  0x6
21e10 64 20 20 20 20 2f 2a 20 4f 50 5f 4d 61 6b 65 52  d    /* OP_MakeR
21e20 65 63 6f 72 64 3a 20 73 65 72 69 61 6c 74 79 70  ecord: serialtyp
21e30 65 20 31 30 20 69 73 20 6f 6b 20 2a 2f 0a 0a 2f  e 10 is ok */../
21e40 2a 0a 20 2a 20 45 61 63 68 20 74 72 69 67 67 65  *. * Each trigge
21e50 72 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65  r present in the
21e60 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
21e70 20 69 73 20 73 74 6f 72 65 64 20 61 73 20 61 6e   is stored as an
21e80 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 20 2a 20   instance of. * 
21e90 73 74 72 75 63 74 20 54 72 69 67 67 65 72 2e 0a  struct Trigger..
21ea0 20 2a 0a 20 2a 20 50 6f 69 6e 74 65 72 73 20 74   *. * Pointers t
21eb0 6f 20 69 6e 73 74 61 6e 63 65 73 20 6f 66 20 73  o instances of s
21ec0 74 72 75 63 74 20 54 72 69 67 67 65 72 20 61 72  truct Trigger ar
21ed0 65 20 73 74 6f 72 65 64 20 69 6e 20 74 77 6f 20  e stored in two 
21ee0 77 61 79 73 2e 0a 20 2a 20 31 2e 20 49 6e 20 74  ways.. * 1. In t
21ef0 68 65 20 22 74 72 69 67 48 61 73 68 22 20 68 61  he "trigHash" ha
21f00 73 68 20 74 61 62 6c 65 20 28 70 61 72 74 20 6f  sh table (part o
21f10 66 20 74 68 65 20 73 71 6c 69 74 65 33 2a 20 74  f the sqlite3* t
21f20 68 61 74 20 72 65 70 72 65 73 65 6e 74 73 20 74  hat represents t
21f30 68 65 0a 20 2a 20 20 20 20 64 61 74 61 62 61 73  he. *    databas
21f40 65 29 2e 20 54 68 69 73 20 61 6c 6c 6f 77 73 20  e). This allows 
21f50 54 72 69 67 67 65 72 20 73 74 72 75 63 74 75 72  Trigger structur
21f60 65 73 20 74 6f 20 62 65 20 72 65 74 72 69 65 76  es to be retriev
21f70 65 64 20 62 79 20 6e 61 6d 65 2e 0a 20 2a 20 32  ed by name.. * 2
21f80 2e 20 41 6c 6c 20 74 72 69 67 67 65 72 73 20 61  . All triggers a
21f90 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
21fa0 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 66 6f   single table fo
21fb0 72 6d 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74  rm a linked list
21fc0 2c 20 75 73 69 6e 67 20 74 68 65 0a 20 2a 20 20  , using the. *  
21fd0 20 20 70 4e 65 78 74 20 6d 65 6d 62 65 72 20 6f    pNext member o
21fe0 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  f struct Trigger
21ff0 2e 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  . A pointer to t
22000 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74  he first element
22010 20 6f 66 20 74 68 65 0a 20 2a 20 20 20 20 6c 69   of the. *    li
22020 6e 6b 65 64 20 6c 69 73 74 20 69 73 20 73 74 6f  nked list is sto
22030 72 65 64 20 61 73 20 74 68 65 20 22 70 54 72 69  red as the "pTri
22040 67 67 65 72 22 20 6d 65 6d 62 65 72 20 6f 66 20  gger" member of 
22050 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 0a 20  the associated. 
22060 2a 20 20 20 20 73 74 72 75 63 74 20 54 61 62 6c  *    struct Tabl
22070 65 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22 73 74  e.. *. * The "st
22080 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72 20  ep_list" member 
22090 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66 69  points to the fi
220a0 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 61  rst element of a
220b0 20 6c 69 6e 6b 65 64 20 6c 69 73 74 0a 20 2a 20   linked list. * 
220c0 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 53  containing the S
220d0 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 73 70  QL statements sp
220e0 65 63 69 66 69 65 64 20 61 73 20 74 68 65 20 74  ecified as the t
220f0 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 0a  rigger program..
22100 20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67   */.struct Trigg
22110 65 72 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  er {.  char *zNa
22120 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  me;            /
22130 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  * The name of th
22140 65 20 74 72 69 67 67 65 72 20 20 20 20 20 20 20  e trigger       
22150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22160 20 2a 2f 0a 20 20 63 68 61 72 20 2a 74 61 62 6c   */.  char *tabl
22170 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
22180 20 54 68 65 20 74 61 62 6c 65 20 6f 72 20 76 69   The table or vi
22190 65 77 20 74 6f 20 77 68 69 63 68 20 74 68 65 20  ew to which the 
221a0 74 72 69 67 67 65 72 20 61 70 70 6c 69 65 73 20  trigger applies 
221b0 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20  */.  u8 op;     
221c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
221d0 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45  One of TK_DELETE
221e0 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f  , TK_UPDATE, TK_
221f0 49 4e 53 45 52 54 20 20 20 20 20 20 20 20 20 2a  INSERT         *
22200 2f 0a 20 20 75 38 20 74 72 5f 74 6d 3b 20 20 20  /.  u8 tr_tm;   
22210 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
22220 6e 65 20 6f 66 20 54 52 49 47 47 45 52 5f 42 45  ne of TRIGGER_BE
22230 46 4f 52 45 2c 20 54 52 49 47 47 45 52 5f 41 46  FORE, TRIGGER_AF
22240 54 45 52 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  TER */.  Expr *p
22250 57 68 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20  When;           
22260 20 2f 2a 20 54 68 65 20 57 48 45 4e 20 63 6c 61   /* The WHEN cla
22270 75 73 65 20 6f 66 20 74 68 65 20 65 78 70 72 65  use of the expre
22280 73 73 69 6f 6e 20 28 6d 61 79 20 62 65 20 4e 55  ssion (may be NU
22290 4c 4c 29 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20  LL) */.  IdList 
222a0 2a 70 43 6f 6c 75 6d 6e 73 3b 20 20 20 20 20 20  *pColumns;      
222b0 20 2f 2a 20 49 66 20 74 68 69 73 20 69 73 20 61   /* If this is a
222c0 6e 20 55 50 44 41 54 45 20 4f 46 20 3c 63 6f 6c  n UPDATE OF <col
222d0 75 6d 6e 2d 6c 69 73 74 3e 20 74 72 69 67 67 65  umn-list> trigge
222e0 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  r,.             
222f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22300 74 68 65 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74  the <column-list
22310 3e 20 69 73 20 73 74 6f 72 65 64 20 68 65 72 65  > is stored here
22320 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53   */.  Schema *pS
22330 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20 2f 2a  chema;        /*
22340 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69   Schema containi
22350 6e 67 20 74 68 65 20 74 72 69 67 67 65 72 20 2a  ng the trigger *
22360 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 54 61 62  /.  Schema *pTab
22370 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53  Schema;     /* S
22380 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67  chema containing
22390 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20   the table */.  
223a0 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 74 65  TriggerStep *ste
223b0 70 5f 6c 69 73 74 3b 20 2f 2a 20 4c 69 6e 6b 20  p_list; /* Link 
223c0 6c 69 73 74 20 6f 66 20 74 72 69 67 67 65 72 20  list of trigger 
223d0 70 72 6f 67 72 61 6d 20 73 74 65 70 73 20 20 20  program steps   
223e0 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 54            */.  T
223f0 72 69 67 67 65 72 20 2a 70 4e 65 78 74 3b 20 20  rigger *pNext;  
22400 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 74         /* Next t
22410 72 69 67 67 65 72 20 61 73 73 6f 63 69 61 74 65  rigger associate
22420 64 20 77 69 74 68 20 74 68 65 20 74 61 62 6c 65  d with the table
22430 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20   */.};../*.** A 
22440 74 72 69 67 67 65 72 20 69 73 20 65 69 74 68 65  trigger is eithe
22450 72 20 61 20 42 45 46 4f 52 45 20 6f 72 20 61 6e  r a BEFORE or an
22460 20 41 46 54 45 52 20 74 72 69 67 67 65 72 2e 20   AFTER trigger. 
22470 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63   The following c
22480 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65 74 65  onstants.** dete
22490 72 6d 69 6e 65 20 77 68 69 63 68 2e 0a 2a 2a 0a  rmine which..**.
224a0 2a 2a 20 49 66 20 74 68 65 72 65 20 61 72 65 20  ** If there are 
224b0 6d 75 6c 74 69 70 6c 65 20 74 72 69 67 67 65 72  multiple trigger
224c0 73 2c 20 79 6f 75 20 6d 69 67 68 74 20 6f 66 20  s, you might of 
224d0 73 6f 6d 65 20 42 45 46 4f 52 45 20 61 6e 64 20  some BEFORE and 
224e0 73 6f 6d 65 20 41 46 54 45 52 2e 0a 2a 2a 20 49  some AFTER..** I
224f0 6e 20 74 68 61 74 20 63 61 73 65 73 2c 20 74 68  n that cases, th
22500 65 20 63 6f 6e 73 74 61 6e 74 73 20 62 65 6c 6f  e constants belo
22510 77 20 63 61 6e 20 62 65 20 4f 52 65 64 20 74 6f  w can be ORed to
22520 67 65 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69  gether..*/.#defi
22530 6e 65 20 54 52 49 47 47 45 52 5f 42 45 46 4f 52  ne TRIGGER_BEFOR
22540 45 20 20 31 0a 23 64 65 66 69 6e 65 20 54 52 49  E  1.#define TRI
22550 47 47 45 52 5f 41 46 54 45 52 20 20 20 32 0a 0a  GGER_AFTER   2..
22560 2f 2a 0a 20 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*. * An instanc
22570 65 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67  e of struct Trig
22580 67 65 72 53 74 65 70 20 69 73 20 75 73 65 64 20  gerStep is used 
22590 74 6f 20 73 74 6f 72 65 20 61 20 73 69 6e 67 6c  to store a singl
225a0 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 0a  e SQL statement.
225b0 20 2a 20 74 68 61 74 20 69 73 20 61 20 70 61 72   * that is a par
225c0 74 20 6f 66 20 61 20 74 72 69 67 67 65 72 2d 70  t of a trigger-p
225d0 72 6f 67 72 61 6d 2e 0a 20 2a 0a 20 2a 20 49 6e  rogram.. *. * In
225e0 73 74 61 6e 63 65 73 20 6f 66 20 73 74 72 75 63  stances of struc
225f0 74 20 54 72 69 67 67 65 72 53 74 65 70 20 61 72  t TriggerStep ar
22600 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 73 69  e stored in a si
22610 6e 67 6c 79 20 6c 69 6e 6b 65 64 20 6c 69 73 74  ngly linked list
22620 20 28 6c 69 6e 6b 65 64 0a 20 2a 20 75 73 69 6e   (linked. * usin
22630 67 20 74 68 65 20 22 70 4e 65 78 74 22 20 6d 65  g the "pNext" me
22640 6d 62 65 72 29 20 72 65 66 65 72 65 6e 63 65 64  mber) referenced
22650 20 62 79 20 74 68 65 20 22 73 74 65 70 5f 6c 69   by the "step_li
22660 73 74 22 20 6d 65 6d 62 65 72 20 6f 66 20 74 68  st" member of th
22670 65 0a 20 2a 20 61 73 73 6f 63 69 61 74 65 64 20  e. * associated 
22680 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20 69  struct Trigger i
22690 6e 73 74 61 6e 63 65 2e 20 54 68 65 20 66 69 72  nstance. The fir
226a0 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68  st element of th
226b0 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69 73  e linked list is
226c0 0a 20 2a 20 74 68 65 20 66 69 72 73 74 20 73 74  . * the first st
226d0 65 70 20 6f 66 20 74 68 65 20 74 72 69 67 67 65  ep of the trigge
226e0 72 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a 0a 20 2a  r-program.. *. *
226f0 20 54 68 65 20 22 6f 70 22 20 6d 65 6d 62 65 72   The "op" member
22700 20 69 6e 64 69 63 61 74 65 73 20 77 68 65 74 68   indicates wheth
22710 65 72 20 74 68 69 73 20 69 73 20 61 20 22 44 45  er this is a "DE
22720 4c 45 54 45 22 2c 20 22 49 4e 53 45 52 54 22 2c  LETE", "INSERT",
22730 20 22 55 50 44 41 54 45 22 20 6f 72 0a 20 2a 20   "UPDATE" or. * 
22740 22 53 45 4c 45 43 54 22 20 73 74 61 74 65 6d 65  "SELECT" stateme
22750 6e 74 2e 20 54 68 65 20 6d 65 61 6e 69 6e 67 73  nt. The meanings
22760 20 6f 66 20 74 68 65 20 6f 74 68 65 72 20 6d 65   of the other me
22770 6d 62 65 72 73 20 69 73 20 64 65 74 65 72 6d 69  mbers is determi
22780 6e 65 64 20 62 79 20 74 68 65 0a 20 2a 20 76 61  ned by the. * va
22790 6c 75 65 20 6f 66 20 22 6f 70 22 20 61 73 20 66  lue of "op" as f
227a0 6f 6c 6c 6f 77 73 3a 0a 20 2a 0a 20 2a 20 28 6f  ollows:. *. * (o
227b0 70 20 3d 3d 20 54 4b 5f 49 4e 53 45 52 54 29 0a  p == TK_INSERT).
227c0 20 2a 20 6f 72 63 6f 6e 66 20 20 20 20 2d 3e 20   * orconf    -> 
227d0 73 74 6f 72 65 73 20 74 68 65 20 4f 4e 20 43 4f  stores the ON CO
227e0 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68 6d  NFLICT algorithm
227f0 0a 20 2a 20 70 53 65 6c 65 63 74 20 20 20 2d 3e  . * pSelect   ->
22800 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 49   If this is an I
22810 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 53  NSERT INTO ... S
22820 45 4c 45 43 54 20 2e 2e 2e 20 73 74 61 74 65 6d  ELECT ... statem
22830 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20  ent, then. *    
22840 20 20 20 20 20 20 20 20 20 20 74 68 69 73 20 73            this s
22850 74 6f 72 65 73 20 61 20 70 6f 69 6e 74 65 72 20  tores a pointer 
22860 74 6f 20 74 68 65 20 53 45 4c 45 43 54 20 73 74  to the SELECT st
22870 61 74 65 6d 65 6e 74 2e 20 4f 74 68 65 72 77 69  atement. Otherwi
22880 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 7a 54 61 72  se NULL.. * zTar
22890 67 65 74 20 20 20 2d 3e 20 44 65 71 75 6f 74 65  get   -> Dequote
228a0 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  d name of the ta
228b0 62 6c 65 20 74 6f 20 69 6e 73 65 72 74 20 69 6e  ble to insert in
228c0 74 6f 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73 74  to.. * pExprList
228d0 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20 61   -> If this is a
228e0 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e  n INSERT INTO ..
228f0 2e 20 56 41 4c 55 45 53 20 2e 2e 2e 20 73 74 61  . VALUES ... sta
22900 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20  tement, then. * 
22910 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
22920 73 20 73 74 6f 72 65 73 20 76 61 6c 75 65 73 20  s stores values 
22930 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64 2e 20  to be inserted. 
22940 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a  Otherwise NULL..
22950 20 2a 20 70 49 64 4c 69 73 74 20 20 20 2d 3e 20   * pIdList   -> 
22960 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e  If this is an IN
22970 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 28 3c  SERT INTO ... (<
22980 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 3e 29 20 56  column-names>) V
22990 41 4c 55 45 53 20 2e 2e 2e 0a 20 2a 20 20 20 20  ALUES .... *    
229a0 20 20 20 20 20 20 20 20 20 20 73 74 61 74 65 6d            statem
229b0 65 6e 74 2c 20 74 68 65 6e 20 74 68 69 73 20 73  ent, then this s
229c0 74 6f 72 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e  tores the column
229d0 2d 6e 61 6d 65 73 20 74 6f 20 62 65 0a 20 2a 20  -names to be. * 
229e0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 73               ins
229f0 65 72 74 65 64 20 69 6e 74 6f 2e 0a 20 2a 0a 20  erted into.. *. 
22a00 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 44 45 4c 45  * (op == TK_DELE
22a10 54 45 29 0a 20 2a 20 7a 54 61 72 67 65 74 20 20  TE). * zTarget  
22a20 20 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e 61 6d   -> Dequoted nam
22a30 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  e of the table t
22a40 6f 20 64 65 6c 65 74 65 20 66 72 6f 6d 2e 0a 20  o delete from.. 
22a50 2a 20 70 57 68 65 72 65 20 20 20 20 2d 3e 20 54  * pWhere    -> T
22a60 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
22a70 6f 66 20 74 68 65 20 44 45 4c 45 54 45 20 73 74  of the DELETE st
22a80 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69  atement if one i
22a90 73 20 73 70 65 63 69 66 69 65 64 2e 0a 20 2a 20  s specified.. * 
22aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 74 68               Oth
22ab0 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 0a  erwise NULL.. *.
22ac0 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 55 50 44   * (op == TK_UPD
22ad0 41 54 45 29 0a 20 2a 20 7a 54 61 72 67 65 74 20  ATE). * zTarget 
22ae0 20 20 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e 61    -> Dequoted na
22af0 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
22b00 74 6f 20 75 70 64 61 74 65 2e 0a 20 2a 20 70 57  to update.. * pW
22b10 68 65 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57  here    -> The W
22b20 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74  HERE clause of t
22b30 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  he UPDATE statem
22b40 65 6e 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70  ent if one is sp
22b50 65 63 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20  ecified.. *     
22b60 20 20 20 20 20 20 20 20 20 4f 74 68 65 72 77 69           Otherwi
22b70 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 45 78 70  se NULL.. * pExp
22b80 72 4c 69 73 74 20 2d 3e 20 41 20 6c 69 73 74 20  rList -> A list 
22b90 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 74  of the columns t
22ba0 6f 20 75 70 64 61 74 65 20 61 6e 64 20 74 68 65  o update and the
22bb0 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74 6f 20   expressions to 
22bc0 75 70 64 61 74 65 0a 20 2a 20 20 20 20 20 20 20  update. *       
22bd0 20 20 20 20 20 20 20 74 68 65 6d 20 74 6f 2e 20         them to. 
22be0 53 65 65 20 73 71 6c 69 74 65 33 55 70 64 61 74  See sqlite3Updat
22bf0 65 28 29 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  e() documentatio
22c00 6e 20 6f 66 20 22 70 43 68 61 6e 67 65 73 22 0a  n of "pChanges".
22c10 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
22c20 61 72 67 75 6d 65 6e 74 2e 0a 20 2a 0a 20 2a 2f  argument.. *. */
22c30 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53  .struct TriggerS
22c40 74 65 70 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20  tep {.  u8 op;  
22c50 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
22c60 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45  One of TK_DELETE
22c70 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f  , TK_UPDATE, TK_
22c80 49 4e 53 45 52 54 2c 20 54 4b 5f 53 45 4c 45 43  INSERT, TK_SELEC
22c90 54 20 2a 2f 0a 20 20 75 38 20 6f 72 63 6f 6e 66  T */.  u8 orconf
22ca0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f  ;           /* O
22cb0 45 5f 52 6f 6c 6c 62 61 63 6b 20 65 74 63 2e 20  E_Rollback etc. 
22cc0 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54  */.  Trigger *pT
22cd0 72 69 67 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  rig;      /* The
22ce0 20 74 72 69 67 67 65 72 20 74 68 61 74 20 74 68   trigger that th
22cf0 69 73 20 73 74 65 70 20 69 73 20 61 20 70 61 72  is step is a par
22d00 74 20 6f 66 20 2a 2f 0a 20 20 53 65 6c 65 63 74  t of */.  Select
22d10 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f   *pSelect;     /
22d20 2a 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  * SELECT stateme
22d30 6e 74 20 6f 72 20 52 48 53 20 6f 66 20 49 4e 53  nt or RHS of INS
22d40 45 52 54 20 49 4e 54 4f 20 53 45 4c 45 43 54 20  ERT INTO SELECT 
22d50 2e 2e 2e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ... */.  char *z
22d60 54 61 72 67 65 74 3b 20 20 20 20 20 20 20 2f 2a  Target;       /*
22d70 20 54 61 72 67 65 74 20 74 61 62 6c 65 20 66 6f   Target table fo
22d80 72 20 44 45 4c 45 54 45 2c 20 55 50 44 41 54 45  r DELETE, UPDATE
22d90 2c 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 45 78  , INSERT */.  Ex
22da0 70 72 20 2a 70 57 68 65 72 65 3b 20 20 20 20 20  pr *pWhere;     
22db0 20 20 20 2f 2a 20 54 68 65 20 57 48 45 52 45 20     /* The WHERE 
22dc0 63 6c 61 75 73 65 20 66 6f 72 20 44 45 4c 45 54  clause for DELET
22dd0 45 20 6f 72 20 55 50 44 41 54 45 20 73 74 65 70  E or UPDATE step
22de0 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  s */.  ExprList 
22df0 2a 70 45 78 70 72 4c 69 73 74 3b 20 2f 2a 20 53  *pExprList; /* S
22e00 45 54 20 63 6c 61 75 73 65 20 66 6f 72 20 55 50  ET clause for UP
22e10 44 41 54 45 20 2a 2f 0a 20 20 49 64 4c 69 73 74  DATE */.  IdList
22e20 20 2a 70 49 64 4c 69 73 74 3b 20 20 20 20 20 2f   *pIdList;     /
22e30 2a 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 66  * Column names f
22e40 6f 72 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 55  or INSERT */.  U
22e50 70 73 65 72 74 20 2a 70 55 70 73 65 72 74 3b 20  psert *pUpsert; 
22e60 20 20 20 20 2f 2a 20 55 70 73 65 72 74 20 63 6c      /* Upsert cl
22e70 61 75 73 65 73 20 6f 6e 20 61 6e 20 49 4e 53 45  auses on an INSE
22e80 52 54 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 53  RT */.  char *zS
22e90 70 61 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  pan;         /* 
22ea0 4f 72 69 67 69 6e 61 6c 20 53 51 4c 20 74 65 78  Original SQL tex
22eb0 74 20 6f 66 20 74 68 69 73 20 63 6f 6d 6d 61 6e  t of this comman
22ec0 64 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74  d */.  TriggerSt
22ed0 65 70 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e  ep *pNext;  /* N
22ee0 65 78 74 20 69 6e 20 74 68 65 20 6c 69 6e 6b 2d  ext in the link-
22ef0 6c 69 73 74 20 2a 2f 0a 20 20 54 72 69 67 67 65  list */.  Trigge
22f00 72 53 74 65 70 20 2a 70 4c 61 73 74 3b 20 20 2f  rStep *pLast;  /
22f10 2a 20 4c 61 73 74 20 65 6c 65 6d 65 6e 74 20 69  * Last element i
22f20 6e 20 6c 69 6e 6b 2d 6c 69 73 74 2e 20 56 61 6c  n link-list. Val
22f30 69 64 20 66 6f 72 20 31 73 74 20 65 6c 65 6d 20  id for 1st elem 
22f40 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  only */.};../*.*
22f50 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
22f60 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69  structure contai
22f70 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 75  ns information u
22f80 73 65 64 20 62 79 20 74 68 65 20 73 71 6c 69 74  sed by the sqlit
22f90 65 46 69 78 2e 2e 2e 0a 2a 2a 20 72 6f 75 74 69  eFix....** routi
22fa0 6e 65 73 20 61 73 20 74 68 65 79 20 77 61 6c 6b  nes as they walk
22fb0 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65 20   the parse tree 
22fc0 74 6f 20 6d 61 6b 65 20 64 61 74 61 62 61 73 65  to make database
22fd0 20 72 65 66 65 72 65 6e 63 65 73 0a 2a 2a 20 65   references.** e
22fe0 78 70 6c 69 63 69 74 2e 0a 2a 2f 0a 74 79 70 65  xplicit..*/.type
22ff0 64 65 66 20 73 74 72 75 63 74 20 44 62 46 69 78  def struct DbFix
23000 65 72 20 44 62 46 69 78 65 72 3b 0a 73 74 72 75  er DbFixer;.stru
23010 63 74 20 44 62 46 69 78 65 72 20 7b 0a 20 20 50  ct DbFixer {.  P
23020 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20  arse *pParse;   
23030 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73 69 6e     /* The parsin
23040 67 20 63 6f 6e 74 65 78 74 2e 20 20 45 72 72 6f  g context.  Erro
23050 72 20 6d 65 73 73 61 67 65 73 20 77 72 69 74 74  r messages writt
23060 65 6e 20 68 65 72 65 20 2a 2f 0a 20 20 53 63 68  en here */.  Sch
23070 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20  ema *pSchema;   
23080 20 2f 2a 20 46 69 78 20 69 74 65 6d 73 20 74 6f   /* Fix items to
23090 20 74 68 69 73 20 73 63 68 65 6d 61 20 2a 2f 0a   this schema */.
230a0 20 20 69 6e 74 20 62 56 61 72 4f 6e 6c 79 3b 20    int bVarOnly; 
230b0 20 20 20 20 20 20 2f 2a 20 43 68 65 63 6b 20 66        /* Check f
230c0 6f 72 20 76 61 72 69 61 62 6c 65 20 72 65 66 65  or variable refe
230d0 72 65 6e 63 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20  rences only */. 
230e0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62   const char *zDb
230f0 3b 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72  ;    /* Make sur
23100 65 20 61 6c 6c 20 6f 62 6a 65 63 74 73 20 61 72  e all objects ar
23110 65 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74  e contained in t
23120 68 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a  his database */.
23130 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54    const char *zT
23140 79 70 65 3b 20 20 2f 2a 20 54 79 70 65 20 6f 66  ype;  /* Type of
23150 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d   the container -
23160 20 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72 20   used for error 
23170 6d 65 73 73 61 67 65 73 20 2a 2f 0a 20 20 63 6f  messages */.  co
23180 6e 73 74 20 54 6f 6b 65 6e 20 2a 70 4e 61 6d 65  nst Token *pName
23190 3b 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65  ; /* Name of the
231a0 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73 65   container - use
231b0 64 20 66 6f 72 20 65 72 72 6f 72 20 6d 65 73 73  d for error mess
231c0 61 67 65 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ages */.};../*.*
231d0 2a 20 41 6e 20 6f 62 6a 65 63 74 65 64 20 75 73  * An objected us
231e0 65 64 20 74 6f 20 61 63 63 75 6d 75 6c 61 74 65  ed to accumulate
231f0 20 74 68 65 20 74 65 78 74 20 6f 66 20 61 20 73   the text of a s
23200 74 72 69 6e 67 20 77 68 65 72 65 20 77 65 0a 2a  tring where we.*
23210 2a 20 64 6f 20 6e 6f 74 20 6e 65 63 65 73 73 61  * do not necessa
23220 72 69 6c 79 20 6b 6e 6f 77 20 68 6f 77 20 62 69  rily know how bi
23230 67 20 74 68 65 20 73 74 72 69 6e 67 20 77 69 6c  g the string wil
23240 6c 20 62 65 20 69 6e 20 74 68 65 20 65 6e 64 2e  l be in the end.
23250 0a 2a 2f 0a 73 74 72 75 63 74 20 73 71 6c 69 74  .*/.struct sqlit
23260 65 33 5f 73 74 72 20 7b 0a 20 20 73 71 6c 69 74  e3_str {.  sqlit
23270 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20  e3 *db;         
23280 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 64 61 74 61  /* Optional data
23290 62 61 73 65 20 66 6f 72 20 6c 6f 6f 6b 61 73 69  base for lookasi
232a0 64 65 2e 20 20 43 61 6e 20 62 65 20 4e 55 4c 4c  de.  Can be NULL
232b0 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 65 78   */.  char *zTex
232c0 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  t;         /* Th
232d0 65 20 73 74 72 69 6e 67 20 63 6f 6c 6c 65 63 74  e string collect
232e0 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 75  ed so far */.  u
232f0 33 32 20 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20  32  nAlloc;     
23300 20 20 20 20 2f 2a 20 41 6d 6f 75 6e 74 20 6f 66      /* Amount of
23310 20 73 70 61 63 65 20 61 6c 6c 6f 63 61 74 65 64   space allocated
23320 20 69 6e 20 7a 54 65 78 74 20 2a 2f 0a 20 20 75   in zText */.  u
23330 33 32 20 20 6d 78 41 6c 6c 6f 63 3b 20 20 20 20  32  mxAlloc;    
23340 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 61      /* Maximum a
23350 6c 6c 6f 77 65 64 20 61 6c 6c 6f 63 61 74 69 6f  llowed allocatio
23360 6e 2e 20 20 30 20 66 6f 72 20 6e 6f 20 6d 61 6c  n.  0 for no mal
23370 6c 6f 63 20 75 73 61 67 65 20 2a 2f 0a 20 20 75  loc usage */.  u
23380 33 32 20 20 6e 43 68 61 72 3b 20 20 20 20 20 20  32  nChar;      
23390 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66      /* Length of
233a0 20 74 68 65 20 73 74 72 69 6e 67 20 73 6f 20 66   the string so f
233b0 61 72 20 2a 2f 0a 20 20 75 38 20 20 20 61 63 63  ar */.  u8   acc
233c0 45 72 72 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20  Error;       /* 
233d0 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 6f 72 20  SQLITE_NOMEM or 
233e0 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 20 2a 2f  SQLITE_TOOBIG */
233f0 0a 20 20 75 38 20 20 20 70 72 69 6e 74 66 46 6c  .  u8   printfFl
23400 61 67 73 3b 20 20 20 20 2f 2a 20 53 51 4c 49 54  ags;    /* SQLIT
23410 45 5f 50 52 49 4e 54 46 20 66 6c 61 67 73 20 62  E_PRINTF flags b
23420 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 23 64 65 66 69  elow */.};.#defi
23430 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46  ne SQLITE_PRINTF
23440 5f 49 4e 54 45 52 4e 41 4c 20 30 78 30 31 20 20  _INTERNAL 0x01  
23450 2f 2a 20 49 6e 74 65 72 6e 61 6c 2d 75 73 65 2d  /* Internal-use-
23460 6f 6e 6c 79 20 63 6f 6e 76 65 72 74 65 72 73 20  only converters 
23470 61 6c 6c 6f 77 65 64 20 2a 2f 0a 23 64 65 66 69  allowed */.#defi
23480 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46  ne SQLITE_PRINTF
23490 5f 53 51 4c 46 55 4e 43 20 20 30 78 30 32 20 20  _SQLFUNC  0x02  
234a0 2f 2a 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20  /* SQL function 
234b0 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 56 58 50  arguments to VXP
234c0 72 69 6e 74 66 20 2a 2f 0a 23 64 65 66 69 6e 65  rintf */.#define
234d0 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 4d   SQLITE_PRINTF_M
234e0 41 4c 4c 4f 43 45 44 20 30 78 30 34 20 20 2f 2a  ALLOCED 0x04  /*
234f0 20 54 72 75 65 20 69 66 20 78 54 65 78 74 20 69   True if xText i
23500 73 20 61 6c 6c 6f 63 61 74 65 64 20 73 70 61 63  s allocated spac
23510 65 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 69 73  e */..#define is
23520 4d 61 6c 6c 6f 63 65 64 28 58 29 20 20 28 28 28  Malloced(X)  (((
23530 58 29 2d 3e 70 72 69 6e 74 66 46 6c 61 67 73 20  X)->printfFlags 
23540 26 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f  & SQLITE_PRINTF_
23550 4d 41 4c 4c 4f 43 45 44 29 21 3d 30 29 0a 0a 0a  MALLOCED)!=0)...
23560 2f 2a 0a 2a 2a 20 41 20 70 6f 69 6e 74 65 72 20  /*.** A pointer 
23570 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72  to this structur
23580 65 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d  e is used to com
23590 6d 75 6e 69 63 61 74 65 20 69 6e 66 6f 72 6d 61  municate informa
235a0 74 69 6f 6e 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c  tion.** from sql
235b0 69 74 65 33 49 6e 69 74 20 61 6e 64 20 4f 50 5f  ite3Init and OP_
235c0 50 61 72 73 65 53 63 68 65 6d 61 20 69 6e 74 6f  ParseSchema into
235d0 20 74 68 65 20 73 71 6c 69 74 65 33 49 6e 69 74   the sqlite3Init
235e0 43 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 74 79 70  Callback..*/.typ
235f0 65 64 65 66 20 73 74 72 75 63 74 20 7b 0a 20 20  edef struct {.  
23600 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20  sqlite3 *db;    
23610 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62      /* The datab
23620 61 73 65 20 62 65 69 6e 67 20 69 6e 69 74 69 61  ase being initia
23630 6c 69 7a 65 64 20 2a 2f 0a 20 20 63 68 61 72 20  lized */.  char 
23640 2a 2a 70 7a 45 72 72 4d 73 67 3b 20 20 20 20 2f  **pzErrMsg;    /
23650 2a 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20  * Error message 
23660 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20  stored here */. 
23670 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20   int iDb;       
23680 20 20 20 20 20 2f 2a 20 30 20 66 6f 72 20 6d 61       /* 0 for ma
23690 69 6e 20 64 61 74 61 62 61 73 65 2e 20 20 31 20  in database.  1 
236a0 66 6f 72 20 54 45 4d 50 2c 20 32 2e 2e 20 66 6f  for TEMP, 2.. fo
236b0 72 20 41 54 54 41 43 48 65 64 20 2a 2f 0a 20 20  r ATTACHed */.  
236c0 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20 20  int rc;         
236d0 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 63 6f      /* Result co
236e0 64 65 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a  de stored here *
236f0 2f 0a 7d 20 49 6e 69 74 44 61 74 61 3b 0a 0a 2f  /.} InitData;../
23700 2a 0a 2a 2a 20 53 74 72 75 63 74 75 72 65 20 63  *.** Structure c
23710 6f 6e 74 61 69 6e 69 6e 67 20 67 6c 6f 62 61 6c  ontaining global
23720 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 64   configuration d
23730 61 74 61 20 66 6f 72 20 74 68 65 20 53 51 4c 69  ata for the SQLi
23740 74 65 20 6c 69 62 72 61 72 79 2e 0a 2a 2a 0a 2a  te library..**.*
23750 2a 20 54 68 69 73 20 73 74 72 75 63 74 75 72 65  * This structure
23760 20 61 6c 73 6f 20 63 6f 6e 74 61 69 6e 73 20 73   also contains s
23770 6f 6d 65 20 73 74 61 74 65 20 69 6e 66 6f 72 6d  ome state inform
23780 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  ation..*/.struct
23790 20 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 20 7b   Sqlite3Config {
237a0 0a 20 20 69 6e 74 20 62 4d 65 6d 73 74 61 74 3b  .  int bMemstat;
237b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
237c0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20       /* True to 
237d0 65 6e 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73 74  enable memory st
237e0 61 74 75 73 20 2a 2f 0a 20 20 69 6e 74 20 62 43  atus */.  int bC
237f0 6f 72 65 4d 75 74 65 78 3b 20 20 20 20 20 20 20  oreMutex;       
23800 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
23810 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 63 6f  rue to enable co
23820 72 65 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20  re mutexing */. 
23830 20 69 6e 74 20 62 46 75 6c 6c 4d 75 74 65 78 3b   int bFullMutex;
23840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23850 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e     /* True to en
23860 61 62 6c 65 20 66 75 6c 6c 20 6d 75 74 65 78 69  able full mutexi
23870 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62 4f 70 65  ng */.  int bOpe
23880 6e 55 72 69 3b 20 20 20 20 20 20 20 20 20 20 20  nUri;           
23890 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
238a0 65 20 74 6f 20 69 6e 74 65 72 70 72 65 74 20 66  e to interpret f
238b0 69 6c 65 6e 61 6d 65 73 20 61 73 20 55 52 49 73  ilenames as URIs
238c0 20 2a 2f 0a 20 20 69 6e 74 20 62 55 73 65 43 69   */.  int bUseCi
238d0 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
238e0 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 63          /* Use c
238f0 6f 76 65 72 69 6e 67 20 69 6e 64 69 63 65 73 20  overing indices 
23900 66 6f 72 20 66 75 6c 6c 2d 73 63 61 6e 73 20 2a  for full-scans *
23910 2f 0a 20 20 69 6e 74 20 62 53 6d 61 6c 6c 4d 61  /.  int bSmallMa
23920 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 20 20  lloc;           
23930 20 20 20 20 20 20 2f 2a 20 41 76 6f 69 64 20 6c        /* Avoid l
23940 61 72 67 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  arge memory allo
23950 63 61 74 69 6f 6e 73 20 69 66 20 74 72 75 65 20  cations if true 
23960 2a 2f 0a 20 20 69 6e 74 20 6d 78 53 74 72 6c 65  */.  int mxStrle
23970 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n;              
23980 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75         /* Maximu
23990 6d 20 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  m string length 
239a0 2a 2f 0a 20 20 69 6e 74 20 6e 65 76 65 72 43 6f  */.  int neverCo
239b0 72 72 75 70 74 3b 20 20 20 20 20 20 20 20 20 20  rrupt;          
239c0 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61         /* Databa
239d0 73 65 20 69 73 20 61 6c 77 61 79 73 20 77 65 6c  se is always wel
239e0 6c 2d 66 6f 72 6d 65 64 20 2a 2f 0a 20 20 69 6e  l-formed */.  in
239f0 74 20 73 7a 4c 6f 6f 6b 61 73 69 64 65 3b 20 20  t szLookaside;  
23a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23a10 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61  /* Default looka
23a20 73 69 64 65 20 62 75 66 66 65 72 20 73 69 7a 65  side buffer size
23a30 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 6f 6f 6b 61   */.  int nLooka
23a40 73 69 64 65 3b 20 20 20 20 20 20 20 20 20 20 20  side;           
23a50 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
23a60 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66  lt lookaside buf
23a70 66 65 72 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 69  fer count */.  i
23a80 6e 74 20 6e 53 74 6d 74 53 70 69 6c 6c 3b 20 20  nt nStmtSpill;  
23a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23aa0 20 2f 2a 20 53 74 6d 74 2d 6a 6f 75 72 6e 61 6c   /* Stmt-journal
23ab0 20 73 70 69 6c 6c 2d 74 6f 2d 64 69 73 6b 20 74   spill-to-disk t
23ac0 68 72 65 73 68 6f 6c 64 20 2a 2f 0a 20 20 73 71  hreshold */.  sq
23ad0 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64  lite3_mem_method
23ae0 73 20 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  s m;            
23af0 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 65 6d  /* Low-level mem
23b00 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69  ory allocation i
23b10 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 71  nterface */.  sq
23b20 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68  lite3_mutex_meth
23b30 6f 64 73 20 6d 75 74 65 78 3b 20 20 20 20 20 20  ods mutex;      
23b40 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 75 74  /* Low-level mut
23b50 65 78 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a  ex interface */.
23b60 20 20 73 71 6c 69 74 65 33 5f 70 63 61 63 68 65    sqlite3_pcache
23b70 5f 6d 65 74 68 6f 64 73 32 20 70 63 61 63 68 65  _methods2 pcache
23b80 32 3b 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c  2;  /* Low-level
23b90 20 70 61 67 65 2d 63 61 63 68 65 20 69 6e 74 65   page-cache inte
23ba0 72 66 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20  rface */.  void 
23bb0 2a 70 48 65 61 70 3b 20 20 20 20 20 20 20 20 20  *pHeap;         
23bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
23bd0 48 65 61 70 20 73 74 6f 72 61 67 65 20 73 70 61  Heap storage spa
23be0 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 61  ce */.  int nHea
23bf0 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
23c00 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a            /* Siz
23c10 65 20 6f 66 20 70 48 65 61 70 5b 5d 20 2a 2f 0a  e of pHeap[] */.
23c20 20 20 69 6e 74 20 6d 6e 52 65 71 2c 20 6d 78 52    int mnReq, mxR
23c30 65 71 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  eq;             
23c40 20 20 20 20 2f 2a 20 4d 69 6e 20 61 6e 64 20 6d      /* Min and m
23c50 61 78 20 68 65 61 70 20 72 65 71 75 65 73 74 73  ax heap requests
23c60 20 73 69 7a 65 73 20 2a 2f 0a 20 20 73 71 6c 69   sizes */.  sqli
23c70 74 65 33 5f 69 6e 74 36 34 20 73 7a 4d 6d 61 70  te3_int64 szMmap
23c80 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
23c90 20 6d 6d 61 70 28 29 20 73 70 61 63 65 20 70 65   mmap() space pe
23ca0 72 20 6f 70 65 6e 20 66 69 6c 65 20 2a 2f 0a 20  r open file */. 
23cb0 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 6d   sqlite3_int64 m
23cc0 78 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20  xMmap;          
23cd0 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 76 61     /* Maximum va
23ce0 6c 75 65 20 66 6f 72 20 73 7a 4d 6d 61 70 20 2a  lue for szMmap *
23cf0 2f 0a 20 20 76 6f 69 64 20 2a 70 50 61 67 65 3b  /.  void *pPage;
23d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d10 20 20 20 20 20 20 2f 2a 20 50 61 67 65 20 63 61        /* Page ca
23d20 63 68 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20  che memory */.  
23d30 69 6e 74 20 73 7a 50 61 67 65 3b 20 20 20 20 20  int szPage;     
23d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d50 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63    /* Size of eac
23d60 68 20 70 61 67 65 20 69 6e 20 70 50 61 67 65 5b  h page in pPage[
23d70 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 50 61 67 65  ] */.  int nPage
23d80 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
23d90 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
23da0 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 70  er of pages in p
23db0 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  Page[] */.  int 
23dc0 6d 78 50 61 72 73 65 72 53 74 61 63 6b 3b 20 20  mxParserStack;  
23dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
23de0 20 6d 61 78 69 6d 75 6d 20 64 65 70 74 68 20 6f   maximum depth o
23df0 66 20 74 68 65 20 70 61 72 73 65 72 20 73 74 61  f the parser sta
23e00 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 73 68 61 72  ck */.  int shar
23e10 65 64 43 61 63 68 65 45 6e 61 62 6c 65 64 3b 20  edCacheEnabled; 
23e20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74 72 75            /* tru
23e30 65 20 69 66 20 73 68 61 72 65 64 2d 63 61 63 68  e if shared-cach
23e40 65 20 6d 6f 64 65 20 65 6e 61 62 6c 65 64 20 2a  e mode enabled *
23e50 2f 0a 20 20 75 33 32 20 73 7a 50 6d 61 3b 20 20  /.  u32 szPma;  
23e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e70 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d        /* Maximum
23e80 20 53 6f 72 74 65 72 20 50 4d 41 20 73 69 7a 65   Sorter PMA size
23e90 20 2a 2f 0a 20 20 2f 2a 20 54 68 65 20 61 62 6f   */.  /* The abo
23ea0 76 65 20 6d 69 67 68 74 20 62 65 20 69 6e 69 74  ve might be init
23eb0 69 61 6c 69 7a 65 64 20 74 6f 20 6e 6f 6e 2d 7a  ialized to non-z
23ec0 65 72 6f 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77  ero.  The follow
23ed0 69 6e 67 20 6e 65 65 64 20 74 6f 20 61 6c 77 61  ing need to alwa
23ee0 79 73 0a 20 20 2a 2a 20 69 6e 69 74 69 61 6c 6c  ys.  ** initiall
23ef0 79 20 62 65 20 7a 65 72 6f 2c 20 68 6f 77 65 76  y be zero, howev
23f00 65 72 2e 20 2a 2f 0a 20 20 69 6e 74 20 69 73 49  er. */.  int isI
23f10 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  nit;            
23f20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
23f30 75 65 20 61 66 74 65 72 20 69 6e 69 74 69 61 6c  ue after initial
23f40 69 7a 61 74 69 6f 6e 20 68 61 73 20 66 69 6e 69  ization has fini
23f50 73 68 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 6e  shed */.  int in
23f60 50 72 6f 67 72 65 73 73 3b 20 20 20 20 20 20 20  Progress;       
23f70 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
23f80 72 75 65 20 77 68 69 6c 65 20 69 6e 69 74 69 61  rue while initia
23f90 6c 69 7a 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67  lization in prog
23fa0 72 65 73 73 20 2a 2f 0a 20 20 69 6e 74 20 69 73  ress */.  int is
23fb0 4d 75 74 65 78 49 6e 69 74 3b 20 20 20 20 20 20  MutexInit;      
23fc0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
23fd0 72 75 65 20 61 66 74 65 72 20 6d 75 74 65 78 65  rue after mutexe
23fe0 73 20 61 72 65 20 69 6e 69 74 69 61 6c 69 7a 65  s are initialize
23ff0 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 61 6c  d */.  int isMal
24000 6c 6f 63 49 6e 69 74 3b 20 20 20 20 20 20 20 20  locInit;        
24010 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
24020 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73   after malloc is
24030 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a   initialized */.
24040 20 20 69 6e 74 20 69 73 50 43 61 63 68 65 49 6e    int isPCacheIn
24050 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  it;             
24060 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65      /* True afte
24070 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74  r malloc is init
24080 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74  ialized */.  int
24090 20 6e 52 65 66 49 6e 69 74 4d 75 74 65 78 3b 20   nRefInitMutex; 
240a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
240b0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73 65 72  * Number of user
240c0 73 20 6f 66 20 70 49 6e 69 74 4d 75 74 65 78 20  s of pInitMutex 
240d0 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  */.  sqlite3_mut
240e0 65 78 20 2a 70 49 6e 69 74 4d 75 74 65 78 3b 20  ex *pInitMutex; 
240f0 20 20 20 20 20 20 20 2f 2a 20 4d 75 74 65 78 20         /* Mutex 
24100 75 73 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  used by sqlite3_
24110 69 6e 69 74 69 61 6c 69 7a 65 28 29 20 2a 2f 0a  initialize() */.
24120 20 20 76 6f 69 64 20 28 2a 78 4c 6f 67 29 28 76    void (*xLog)(v
24130 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  oid*,int,const c
24140 68 61 72 2a 29 3b 20 2f 2a 20 46 75 6e 63 74 69  har*); /* Functi
24150 6f 6e 20 66 6f 72 20 6c 6f 67 67 69 6e 67 20 2a  on for logging *
24160 2f 0a 20 20 76 6f 69 64 20 2a 70 4c 6f 67 41 72  /.  void *pLogAr
24170 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
24180 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
24190 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 4c  t argument to xL
241a0 6f 67 28 29 20 2a 2f 0a 23 69 66 64 65 66 20 53  og() */.#ifdef S
241b0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 51 4c  QLITE_ENABLE_SQL
241c0 4c 4f 47 0a 20 20 76 6f 69 64 28 2a 78 53 71 6c  LOG.  void(*xSql
241d0 6c 6f 67 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74  log)(void*,sqlit
241e0 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
241f0 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70   int);.  void *p
24200 53 71 6c 6c 6f 67 41 72 67 3b 0a 23 65 6e 64 69  SqllogArg;.#endi
24210 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  f.#ifdef SQLITE_
24220 56 44 42 45 5f 43 4f 56 45 52 41 47 45 0a 20 20  VDBE_COVERAGE.  
24230 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  /* The following
24240 20 63 61 6c 6c 62 61 63 6b 20 28 69 66 20 6e 6f   callback (if no
24250 74 20 4e 55 4c 4c 29 20 69 73 20 69 6e 76 6f 6b  t NULL) is invok
24260 65 64 20 6f 6e 20 65 76 65 72 79 20 56 44 42 45  ed on every VDBE
24270 20 62 72 61 6e 63 68 0a 20 20 2a 2a 20 6f 70 65   branch.  ** ope
24280 72 61 74 69 6f 6e 2e 20 20 53 65 74 20 74 68 65  ration.  Set the
24290 20 63 61 6c 6c 62 61 63 6b 20 75 73 69 6e 67 20   callback using 
242a0 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f  SQLITE_TESTCTRL_
242b0 56 44 42 45 5f 43 4f 56 45 52 41 47 45 2e 0a 20  VDBE_COVERAGE.. 
242c0 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 56 64   */.  void (*xVd
242d0 62 65 42 72 61 6e 63 68 29 28 76 6f 69 64 2a 2c  beBranch)(void*,
242e0 69 6e 74 20 69 53 72 63 4c 69 6e 65 2c 75 38 20  int iSrcLine,u8 
242f0 65 54 68 69 73 2c 75 38 20 65 4d 78 29 3b 20 20  eThis,u8 eMx);  
24300 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  /* Callback */. 
24310 20 76 6f 69 64 20 2a 70 56 64 62 65 42 72 61 6e   void *pVdbeBran
24320 63 68 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  chArg;          
24330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24340 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73             /* 1s
24350 74 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 23 65  t argument */.#e
24360 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
24370 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 20  ITE_UNTESTABLE. 
24380 20 69 6e 74 20 28 2a 78 54 65 73 74 43 61 6c 6c   int (*xTestCall
24390 62 61 63 6b 29 28 69 6e 74 29 3b 20 20 20 20 20  back)(int);     
243a0 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 62 79     /* Invoked by
243b0 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d   sqlite3FaultSim
243c0 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69  () */.#endif.  i
243d0 6e 74 20 62 4c 6f 63 61 6c 74 69 6d 65 46 61 75  nt bLocaltimeFau
243e0 6c 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  lt;             
243f0 20 2f 2a 20 54 72 75 65 20 74 6f 20 66 61 69 6c   /* True to fail
24400 20 6c 6f 63 61 6c 74 69 6d 65 28 29 20 63 61 6c   localtime() cal
24410 6c 73 20 2a 2f 0a 20 20 69 6e 74 20 69 4f 6e 63  ls */.  int iOnc
24420 65 52 65 73 65 74 54 68 72 65 73 68 6f 6c 64 3b  eResetThreshold;
24430 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 65            /* Whe
24440 6e 20 74 6f 20 72 65 73 65 74 20 4f 50 5f 4f 6e  n to reset OP_On
24450 63 65 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 20  ce counters */. 
24460 20 75 33 32 20 73 7a 53 6f 72 74 65 72 52 65 66   u32 szSorterRef
24470 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
24480 20 20 20 2f 2a 20 4d 69 6e 20 73 69 7a 65 20 69     /* Min size i
24490 6e 20 62 79 74 65 73 20 74 6f 20 75 73 65 20 73  n bytes to use s
244a0 6f 72 74 65 72 2d 72 65 66 73 20 2a 2f 0a 7d 3b  orter-refs */.};
244b0 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6d 61 63  ../*.** This mac
244c0 72 6f 20 69 73 20 75 73 65 64 20 69 6e 73 69 64  ro is used insid
244d0 65 20 6f 66 20 61 73 73 65 72 74 28 29 20 73 74  e of assert() st
244e0 61 74 65 6d 65 6e 74 73 20 74 6f 20 69 6e 64 69  atements to indi
244f0 63 61 74 65 20 74 68 61 74 0a 2a 2a 20 74 68 65  cate that.** the
24500 20 61 73 73 65 72 74 20 69 73 20 6f 6e 6c 79 20   assert is only 
24510 76 61 6c 69 64 20 6f 6e 20 61 20 77 65 6c 6c 2d  valid on a well-
24520 66 6f 72 6d 65 64 20 64 61 74 61 62 61 73 65 2e  formed database.
24530 20 20 49 6e 73 74 65 61 64 20 6f 66 3a 0a 2a 2a    Instead of:.**
24540 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28 20  .**     assert( 
24550 58 20 29 3b 0a 2a 2a 0a 2a 2a 20 4f 6e 65 20 77  X );.**.** One w
24560 72 69 74 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  rites:.**.**    
24570 20 61 73 73 65 72 74 28 20 58 20 7c 7c 20 43 4f   assert( X || CO
24580 52 52 55 50 54 5f 44 42 20 29 3b 0a 2a 2a 0a 2a  RRUPT_DB );.**.*
24590 2a 20 43 4f 52 52 55 50 54 5f 44 42 20 69 73 20  * CORRUPT_DB is 
245a0 74 72 75 65 20 64 75 72 69 6e 67 20 6e 6f 72 6d  true during norm
245b0 61 6c 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 43  al operation.  C
245c0 4f 52 52 55 50 54 5f 44 42 20 64 6f 65 73 20 6e  ORRUPT_DB does n
245d0 6f 74 20 69 6e 64 69 63 61 74 65 0a 2a 2a 20 74  ot indicate.** t
245e0 68 61 74 20 74 68 65 20 64 61 74 61 62 61 73 65  hat the database
245f0 20 69 73 20 64 65 66 69 6e 69 74 65 6c 79 20 63   is definitely c
24600 6f 72 72 75 70 74 2c 20 6f 6e 6c 79 20 74 68 61  orrupt, only tha
24610 74 20 69 74 20 6d 69 67 68 74 20 62 65 20 63 6f  t it might be co
24620 72 72 75 70 74 2e 0a 2a 2a 20 46 6f 72 20 6d 6f  rrupt..** For mo
24630 73 74 20 74 65 73 74 20 63 61 73 65 73 2c 20 43  st test cases, C
24640 4f 52 52 55 50 54 5f 44 42 20 69 73 20 73 65 74  ORRUPT_DB is set
24650 20 74 6f 20 66 61 6c 73 65 20 75 73 69 6e 67 20   to false using 
24660 61 20 73 70 65 63 69 61 6c 0a 2a 2a 20 73 71 6c  a special.** sql
24670 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f  ite3_test_contro
24680 6c 28 29 2e 20 20 54 68 69 73 20 65 6e 61 62 6c  l().  This enabl
24690 65 73 20 61 73 73 65 72 74 28 29 20 73 74 61 74  es assert() stat
246a0 65 6d 65 6e 74 73 20 74 6f 20 70 72 6f 76 65 0a  ements to prove.
246b0 2a 2a 20 74 68 69 6e 67 73 20 74 68 61 74 20 61  ** things that a
246c0 72 65 20 61 6c 77 61 79 73 20 74 72 75 65 20 66  re always true f
246d0 6f 72 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 64  or well-formed d
246e0 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 64 65  atabases..*/.#de
246f0 66 69 6e 65 20 43 4f 52 52 55 50 54 5f 44 42 20  fine CORRUPT_DB 
24700 20 28 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 2e   (sqlite3Config.
24710 6e 65 76 65 72 43 6f 72 72 75 70 74 3d 3d 30 29  neverCorrupt==0)
24720 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74 65 78 74 20  ../*.** Context 
24730 70 6f 69 6e 74 65 72 20 70 61 73 73 65 64 20 64  pointer passed d
24740 6f 77 6e 20 74 68 72 6f 75 67 68 20 74 68 65 20  own through the 
24750 74 72 65 65 2d 77 61 6c 6b 2e 0a 2a 2f 0a 73 74  tree-walk..*/.st
24760 72 75 63 74 20 57 61 6c 6b 65 72 20 7b 0a 20 20  ruct Walker {.  
24770 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20  Parse *pParse;  
24780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24790 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72            /* Par
247a0 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 2a 2f  ser context.  */
247b0 0a 20 20 69 6e 74 20 28 2a 78 45 78 70 72 43 61  .  int (*xExprCa
247c0 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c  llback)(Walker*,
247d0 20 45 78 70 72 2a 29 3b 20 20 20 20 20 2f 2a 20   Expr*);     /* 
247e0 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20 65 78 70  Callback for exp
247f0 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e  ressions */.  in
24800 74 20 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62  t (*xSelectCallb
24810 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c  ack)(Walker*,Sel
24820 65 63 74 2a 29 3b 20 20 2f 2a 20 43 61 6c 6c 62  ect*);  /* Callb
24830 61 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20  ack for SELECTs 
24840 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 65 6c  */.  void (*xSel
24850 65 63 74 43 61 6c 6c 62 61 63 6b 32 29 28 57 61  ectCallback2)(Wa
24860 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 2f  lker*,Select*);/
24870 2a 20 53 65 63 6f 6e 64 20 63 61 6c 6c 62 61 63  * Second callbac
24880 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f  k for SELECTs */
24890 0a 20 20 69 6e 74 20 77 61 6c 6b 65 72 44 65 70  .  int walkerDep
248a0 74 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  th;             
248b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
248c0 4e 75 6d 62 65 72 20 6f 66 20 73 75 62 71 75 65  Number of subque
248d0 72 69 65 73 20 2a 2f 0a 20 20 75 38 20 65 43 6f  ries */.  u8 eCo
248e0 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  de;             
248f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24900 20 20 20 20 2f 2a 20 41 20 73 6d 61 6c 6c 20 70      /* A small p
24910 72 6f 63 65 73 73 69 6e 67 20 63 6f 64 65 20 2a  rocessing code *
24920 2f 0a 20 20 75 6e 69 6f 6e 20 7b 20 20 20 20 20  /.  union {     
24930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
24950 20 45 78 74 72 61 20 64 61 74 61 20 66 6f 72 20   Extra data for 
24960 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 20 20  callback */.    
24970 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e 43  NameContext *pNC
24980 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
24990 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
249a0 69 6e 67 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20  ing context */. 
249b0 20 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20     int n;       
249c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
249d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
249e0 41 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 20  A counter */.   
249f0 20 69 6e 74 20 69 43 75 72 3b 20 20 20 20 20 20   int iCur;      
24a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a10 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20             /* A 
24a20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 2a 2f  cursor number */
24a30 0a 20 20 20 20 53 72 63 4c 69 73 74 20 2a 70 53  .    SrcList *pS
24a40 72 63 4c 69 73 74 3b 20 20 20 20 20 20 20 20 20  rcList;         
24a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
24a60 2a 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f  * FROM clause */
24a70 0a 20 20 20 20 73 74 72 75 63 74 20 53 72 63 43  .    struct SrcC
24a80 6f 75 6e 74 20 2a 70 53 72 63 43 6f 75 6e 74 3b  ount *pSrcCount;
24a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
24aa0 2a 20 43 6f 75 6e 74 69 6e 67 20 63 6f 6c 75 6d  * Counting colum
24ab0 6e 20 72 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a  n references */.
24ac0 20 20 20 20 73 74 72 75 63 74 20 43 43 75 72 48      struct CCurH
24ad0 69 6e 74 20 2a 70 43 43 75 72 48 69 6e 74 3b 20  int *pCCurHint; 
24ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
24af0 20 55 73 65 64 20 62 79 20 63 6f 64 65 43 75 72   Used by codeCur
24b00 73 6f 72 48 69 6e 74 28 29 20 2a 2f 0a 20 20 20  sorHint() */.   
24b10 20 69 6e 74 20 2a 61 69 43 6f 6c 3b 20 20 20 20   int *aiCol;    
24b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b30 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 61 72             /* ar
24b40 72 61 79 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e  ray of column in
24b50 64 65 78 65 73 20 2a 2f 0a 20 20 20 20 73 74 72  dexes */.    str
24b60 75 63 74 20 49 64 78 43 6f 76 65 72 20 2a 70 49  uct IdxCover *pI
24b70 64 78 43 6f 76 65 72 3b 20 20 20 20 20 20 20 20  dxCover;        
24b80 20 20 20 20 20 20 20 2f 2a 20 43 68 65 63 6b 20         /* Check 
24b90 66 6f 72 20 69 6e 64 65 78 20 63 6f 76 65 72 61  for index covera
24ba0 67 65 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74  ge */.    struct
24bb0 20 49 64 78 45 78 70 72 54 72 61 6e 73 20 2a 70   IdxExprTrans *p
24bc0 49 64 78 54 72 61 6e 73 3b 20 20 20 20 20 20 20  IdxTrans;       
24bd0 20 20 20 20 2f 2a 20 43 6f 6e 76 65 72 74 20 69      /* Convert i
24be0 64 78 65 64 20 65 78 70 72 20 74 6f 20 63 6f 6c  dxed expr to col
24bf0 75 6d 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72 4c  umn */.    ExprL
24c00 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20  ist *pGroupBy;  
24c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24c20 20 20 20 20 20 2f 2a 20 47 52 4f 55 50 20 42 59       /* GROUP BY
24c30 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 53   clause */.    S
24c40 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20  elect *pSelect; 
24c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24c60 20 20 20 20 20 20 20 20 20 2f 2a 20 48 41 56 49           /* HAVI
24c70 4e 47 20 74 6f 20 57 48 45 52 45 20 63 6c 61 75  NG to WHERE clau
24c80 73 65 20 63 74 78 20 2a 2f 0a 20 20 7d 20 75 3b  se ctx */.  } u;
24c90 0a 7d 3b 0a 0a 2f 2a 20 46 6f 72 77 61 72 64 20  .};../* Forward 
24ca0 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 2a 2f 0a  declarations */.
24cb0 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 45  int sqlite3WalkE
24cc0 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70  xpr(Walker*, Exp
24cd0 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
24ce0 57 61 6c 6b 45 78 70 72 4c 69 73 74 28 57 61 6c  WalkExprList(Wal
24cf0 6b 65 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29  ker*, ExprList*)
24d00 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c  ;.int sqlite3Wal
24d10 6b 53 65 6c 65 63 74 28 57 61 6c 6b 65 72 2a 2c  kSelect(Walker*,
24d20 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73   Select*);.int s
24d30 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74  qlite3WalkSelect
24d40 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 53 65  Expr(Walker*, Se
24d50 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  lect*);.int sqli
24d60 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 46 72 6f  te3WalkSelectFro
24d70 6d 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63  m(Walker*, Selec
24d80 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
24d90 45 78 70 72 57 61 6c 6b 4e 6f 6f 70 28 57 61 6c  ExprWalkNoop(Wal
24da0 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e  ker*, Expr*);.in
24db0 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 57  t sqlite3SelectW
24dc0 61 6c 6b 4e 6f 6f 70 28 57 61 6c 6b 65 72 2a 2c  alkNoop(Walker*,
24dd0 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73   Select*);.int s
24de0 71 6c 69 74 65 33 53 65 6c 65 63 74 57 61 6c 6b  qlite3SelectWalk
24df0 46 61 69 6c 28 57 61 6c 6b 65 72 2a 2c 20 53 65  Fail(Walker*, Se
24e00 6c 65 63 74 2a 29 3b 0a 23 69 66 64 65 66 20 53  lect*);.#ifdef S
24e10 51 4c 49 54 45 5f 44 45 42 55 47 0a 76 6f 69 64  QLITE_DEBUG.void
24e20 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 57 61   sqlite3SelectWa
24e30 6c 6b 41 73 73 65 72 74 32 28 57 61 6c 6b 65 72  lkAssert2(Walker
24e40 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 23 65 6e  *, Select*);.#en
24e50 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  dif../*.** Retur
24e60 6e 20 63 6f 64 65 20 66 72 6f 6d 20 74 68 65 20  n code from the 
24e70 70 61 72 73 65 2d 74 72 65 65 20 77 61 6c 6b 69  parse-tree walki
24e80 6e 67 20 70 72 69 6d 69 74 69 76 65 73 20 61 6e  ng primitives an
24e90 64 20 74 68 65 69 72 0a 2a 2a 20 63 61 6c 6c 62  d their.** callb
24ea0 61 63 6b 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  acks..*/.#define
24eb0 20 57 52 43 5f 43 6f 6e 74 69 6e 75 65 20 20 20   WRC_Continue   
24ec0 20 30 20 20 20 2f 2a 20 43 6f 6e 74 69 6e 75 65   0   /* Continue
24ed0 20 64 6f 77 6e 20 69 6e 74 6f 20 63 68 69 6c 64   down into child
24ee0 72 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  ren */.#define W
24ef0 52 43 5f 50 72 75 6e 65 20 20 20 20 20 20 20 31  RC_Prune       1
24f00 20 20 20 2f 2a 20 4f 6d 69 74 20 63 68 69 6c 64     /* Omit child
24f10 72 65 6e 20 62 75 74 20 63 6f 6e 74 69 6e 75 65  ren but continue
24f20 20 77 61 6c 6b 69 6e 67 20 73 69 62 6c 69 6e 67   walking sibling
24f30 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43  s */.#define WRC
24f40 5f 41 62 6f 72 74 20 20 20 20 20 20 20 32 20 20  _Abort       2  
24f50 20 2f 2a 20 41 62 61 6e 64 6f 6e 20 74 68 65 20   /* Abandon the 
24f60 74 72 65 65 20 77 61 6c 6b 20 2a 2f 0a 0a 2f 2a  tree walk */../*
24f70 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
24f80 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
24f90 65 20 72 65 70 72 65 73 65 6e 74 73 20 61 20 73  e represents a s
24fa0 65 74 20 6f 66 20 6f 6e 65 20 6f 72 20 6d 6f 72  et of one or mor
24fb0 65 20 43 54 45 73 0a 2a 2a 20 28 63 6f 6d 6d 6f  e CTEs.** (commo
24fc0 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69  n table expressi
24fd0 6f 6e 73 29 20 63 72 65 61 74 65 64 20 62 79 20  ons) created by 
24fe0 61 20 73 69 6e 67 6c 65 20 57 49 54 48 20 63 6c  a single WITH cl
24ff0 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ause..*/.struct 
25000 57 69 74 68 20 7b 0a 20 20 69 6e 74 20 6e 43 74  With {.  int nCt
25010 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
25020 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
25030 65 72 20 6f 66 20 43 54 45 73 20 69 6e 20 74 68  er of CTEs in th
25040 65 20 57 49 54 48 20 63 6c 61 75 73 65 20 2a 2f  e WITH clause */
25050 0a 20 20 57 69 74 68 20 2a 70 4f 75 74 65 72 3b  .  With *pOuter;
25060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25070 20 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 69 6e 67     /* Containing
25080 20 57 49 54 48 20 63 6c 61 75 73 65 2c 20 6f 72   WITH clause, or
25090 20 4e 55 4c 4c 20 2a 2f 0a 20 20 73 74 72 75 63   NULL */.  struc
250a0 74 20 43 74 65 20 7b 20 20 20 20 20 20 20 20 20  t Cte {         
250b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f             /* Fo
250c0 72 20 65 61 63 68 20 43 54 45 20 69 6e 20 74 68  r each CTE in th
250d0 65 20 57 49 54 48 20 63 6c 61 75 73 65 2e 2e 2e  e WITH clause...
250e0 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  . */.    char *z
250f0 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20  Name;           
25100 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
25110 20 6f 66 20 74 68 69 73 20 43 54 45 20 2a 2f 0a   of this CTE */.
25120 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43      ExprList *pC
25130 6f 6c 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ols;            
25140 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 65      /* List of e
25150 78 70 6c 69 63 69 74 20 63 6f 6c 75 6d 6e 20 6e  xplicit column n
25160 61 6d 65 73 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f  ames, or NULL */
25170 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65  .    Select *pSe
25180 6c 65 63 74 3b 20 20 20 20 20 20 20 20 20 20 20  lect;           
25190 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65 66 69       /* The defi
251a0 6e 69 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 43  nition of this C
251b0 54 45 20 2a 2f 0a 20 20 20 20 63 6f 6e 73 74 20  TE */.    const 
251c0 63 68 61 72 20 2a 7a 43 74 65 45 72 72 3b 20 20  char *zCteErr;  
251d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72            /* Err
251e0 6f 72 20 6d 65 73 73 61 67 65 20 66 6f 72 20 63  or message for c
251f0 69 72 63 75 6c 61 72 20 72 65 66 65 72 65 6e 63  ircular referenc
25200 65 73 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 0a  es */.  } a[1];.
25210 7d 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  };..#ifdef SQLIT
25220 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 41 6e  E_DEBUG./*.** An
25230 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
25240 20 54 72 65 65 56 69 65 77 20 6f 62 6a 65 63 74   TreeView object
25250 20 69 73 20 75 73 65 64 20 66 6f 72 20 70 72 69   is used for pri
25260 6e 74 69 6e 67 20 74 68 65 20 63 6f 6e 74 65 6e  nting the conten
25270 74 20 6f 66 0a 2a 2a 20 64 61 74 61 20 73 74 72  t of.** data str
25280 75 63 74 75 72 65 73 20 6f 6e 20 73 71 6c 69 74  uctures on sqlit
25290 65 33 44 65 62 75 67 50 72 69 6e 74 66 28 29 20  e3DebugPrintf() 
252a0 75 73 69 6e 67 20 61 20 74 72 65 65 2d 6c 69 6b  using a tree-lik
252b0 65 20 76 69 65 77 2e 0a 2a 2f 0a 73 74 72 75 63  e view..*/.struc
252c0 74 20 54 72 65 65 56 69 65 77 20 7b 0a 20 20 69  t TreeView {.  i
252d0 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20 20 20 20  nt iLevel;      
252e0 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20         /* Which 
252f0 6c 65 76 65 6c 20 6f 66 20 74 68 65 20 74 72 65  level of the tre
25300 65 20 77 65 20 61 72 65 20 6f 6e 20 2a 2f 0a 20  e we are on */. 
25310 20 75 38 20 20 62 4c 69 6e 65 5b 31 30 30 5d 3b   u8  bLine[100];
25320 20 20 20 20 20 20 20 20 20 2f 2a 20 44 72 61 77           /* Draw
25330 20 76 65 72 74 69 63 61 6c 20 69 6e 20 63 6f 6c   vertical in col
25340 75 6d 6e 20 69 20 69 66 20 62 4c 69 6e 65 5b 69  umn i if bLine[i
25350 5d 20 69 73 20 74 72 75 65 20 2a 2f 0a 7d 3b 0a  ] is true */.};.
25360 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
25370 5f 44 45 42 55 47 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  _DEBUG */../*.**
25380 20 41 73 73 75 6d 69 6e 67 20 7a 49 6e 20 70 6f   Assuming zIn po
25390 69 6e 74 73 20 74 6f 20 74 68 65 20 66 69 72 73  ints to the firs
253a0 74 20 62 79 74 65 20 6f 66 20 61 20 55 54 46 2d  t byte of a UTF-
253b0 38 20 63 68 61 72 61 63 74 65 72 2c 0a 2a 2a 20  8 character,.** 
253c0 61 64 76 61 6e 63 65 20 7a 49 6e 20 74 6f 20 70  advance zIn to p
253d0 6f 69 6e 74 20 74 6f 20 74 68 65 20 66 69 72 73  oint to the firs
253e0 74 20 62 79 74 65 20 6f 66 20 74 68 65 20 6e 65  t byte of the ne
253f0 78 74 20 55 54 46 2d 38 20 63 68 61 72 61 63 74  xt UTF-8 charact
25400 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  er..*/.#define S
25410 51 4c 49 54 45 5f 53 4b 49 50 5f 55 54 46 38 28  QLITE_SKIP_UTF8(
25420 7a 49 6e 29 20 7b 20 20 20 20 20 20 20 20 20 20  zIn) {          
25430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a                \.
25440 20 20 69 66 28 20 28 2a 28 7a 49 6e 2b 2b 29 29    if( (*(zIn++))
25450 3e 3d 30 78 63 30 20 29 7b 20 20 20 20 20 20 20  >=0xc0 ){       
25460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25470 20 20 20 20 20 20 20 5c 0a 20 20 20 20 77 68 69         \.    whi
25480 6c 65 28 20 28 2a 7a 49 6e 20 26 20 30 78 63 30  le( (*zIn & 0xc0
25490 29 3d 3d 30 78 38 30 20 29 7b 20 7a 49 6e 2b 2b  )==0x80 ){ zIn++
254a0 3b 20 7d 20 20 20 20 20 20 20 20 20 20 20 20 20  ; }             
254b0 5c 0a 20 20 7d 20 20 20 20 20 20 20 20 20 20 20  \.  }           
254c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
254d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
254e0 20 20 20 20 20 20 20 20 20 5c 0a 7d 0a 0a 2f 2a           \.}../*
254f0 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 2a  .** The SQLITE_*
25500 5f 42 4b 50 54 20 6d 61 63 72 6f 73 20 61 72 65  _BKPT macros are
25510 20 73 75 62 73 74 69 74 75 74 65 73 20 66 6f 72   substitutes for
25520 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65 73   the error codes
25530 20 77 69 74 68 0a 2a 2a 20 74 68 65 20 73 61 6d   with.** the sam
25540 65 20 6e 61 6d 65 20 62 75 74 20 77 69 74 68 6f  e name but witho
25550 75 74 20 74 68 65 20 5f 42 4b 50 54 20 73 75 66  ut the _BKPT suf
25560 66 69 78 2e 20 20 54 68 65 73 65 20 6d 61 63 72  fix.  These macr
25570 6f 73 20 69 6e 76 6f 6b 65 0a 2a 2a 20 72 6f 75  os invoke.** rou
25580 74 69 6e 65 73 20 74 68 61 74 20 72 65 70 6f 72  tines that repor
25590 74 20 74 68 65 20 6c 69 6e 65 2d 6e 75 6d 62 65  t the line-numbe
255a0 72 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20 65  r on which the e
255b0 72 72 6f 72 20 6f 72 69 67 69 6e 61 74 65 64 0a  rror originated.
255c0 2a 2a 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33  ** using sqlite3
255d0 5f 6c 6f 67 28 29 2e 20 20 54 68 65 20 72 6f 75  _log().  The rou
255e0 74 69 6e 65 73 20 61 6c 73 6f 20 70 72 6f 76 69  tines also provi
255f0 64 65 20 61 20 63 6f 6e 76 65 6e 69 65 6e 74 20  de a convenient 
25600 70 6c 61 63 65 0a 2a 2a 20 74 6f 20 73 65 74 20  place.** to set 
25610 61 20 64 65 62 75 67 67 65 72 20 62 72 65 61 6b  a debugger break
25620 70 6f 69 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71  point..*/.int sq
25630 6c 69 74 65 33 52 65 70 6f 72 74 45 72 72 6f 72  lite3ReportError
25640 28 69 6e 74 20 69 45 72 72 2c 20 69 6e 74 20 6c  (int iErr, int l
25650 69 6e 65 6e 6f 2c 20 63 6f 6e 73 74 20 63 68 61  ineno, const cha
25660 72 20 2a 7a 54 79 70 65 29 3b 0a 69 6e 74 20 73  r *zType);.int s
25670 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72 72  qlite3CorruptErr
25680 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  or(int);.int sql
25690 69 74 65 33 4d 69 73 75 73 65 45 72 72 6f 72 28  ite3MisuseError(
256a0 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
256b0 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28 69  3CantopenError(i
256c0 6e 74 29 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c  nt);.#define SQL
256d0 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54  ITE_CORRUPT_BKPT
256e0 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45   sqlite3CorruptE
256f0 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23  rror(__LINE__).#
25700 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 49  define SQLITE_MI
25710 53 55 53 45 5f 42 4b 50 54 20 73 71 6c 69 74 65  SUSE_BKPT sqlite
25720 33 4d 69 73 75 73 65 45 72 72 6f 72 28 5f 5f 4c  3MisuseError(__L
25730 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53  INE__).#define S
25740 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e 5f 42  QLITE_CANTOPEN_B
25750 4b 50 54 20 73 71 6c 69 74 65 33 43 61 6e 74 6f  KPT sqlite3Canto
25760 70 65 6e 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f  penError(__LINE_
25770 5f 29 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  _).#ifdef SQLITE
25780 5f 44 45 42 55 47 0a 20 20 69 6e 74 20 73 71 6c  _DEBUG.  int sql
25790 69 74 65 33 4e 6f 6d 65 6d 45 72 72 6f 72 28 69  ite3NomemError(i
257a0 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  nt);.  int sqlit
257b0 65 33 49 6f 65 72 72 6e 6f 6d 65 6d 45 72 72 6f  e3IoerrnomemErro
257c0 72 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71  r(int);.  int sq
257d0 6c 69 74 65 33 43 6f 72 72 75 70 74 50 67 6e 6f  lite3CorruptPgno
257e0 45 72 72 6f 72 28 69 6e 74 2c 50 67 6e 6f 29 3b  Error(int,Pgno);
257f0 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
25800 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20 73 71 6c 69  _NOMEM_BKPT sqli
25810 74 65 33 4e 6f 6d 65 6d 45 72 72 6f 72 28 5f 5f  te3NomemError(__
25820 4c 49 4e 45 5f 5f 29 0a 23 20 64 65 66 69 6e 65  LINE__).# define
25830 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f   SQLITE_IOERR_NO
25840 4d 45 4d 5f 42 4b 50 54 20 73 71 6c 69 74 65 33  MEM_BKPT sqlite3
25850 49 6f 65 72 72 6e 6f 6d 65 6d 45 72 72 6f 72 28  IoerrnomemError(
25860 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 20 64 65 66 69  __LINE__).# defi
25870 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50  ne SQLITE_CORRUP
25880 54 5f 50 47 4e 4f 28 50 29 20 73 71 6c 69 74 65  T_PGNO(P) sqlite
25890 33 43 6f 72 72 75 70 74 50 67 6e 6f 45 72 72 6f  3CorruptPgnoErro
258a0 72 28 5f 5f 4c 49 4e 45 5f 5f 2c 28 50 29 29 0a  r(__LINE__,(P)).
258b0 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53  #else.# define S
258c0 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54  QLITE_NOMEM_BKPT
258d0 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 0a 23 20   SQLITE_NOMEM.# 
258e0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4f  define SQLITE_IO
258f0 45 52 52 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20 53  ERR_NOMEM_BKPT S
25900 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45  QLITE_IOERR_NOME
25910 4d 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  M.# define SQLIT
25920 45 5f 43 4f 52 52 55 50 54 5f 50 47 4e 4f 28 50  E_CORRUPT_PGNO(P
25930 29 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74  ) sqlite3Corrupt
25940 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a  Error(__LINE__).
25950 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 54  #endif../*.** FT
25960 53 33 20 61 6e 64 20 46 54 53 34 20 62 6f 74 68  S3 and FTS4 both
25970 20 72 65 71 75 69 72 65 20 76 69 72 74 75 61 6c   require virtual
25980 20 74 61 62 6c 65 20 73 75 70 70 6f 72 74 0a 2a   table support.*
25990 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
259a0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
259b0 4c 54 41 42 4c 45 29 0a 23 20 75 6e 64 65 66 20  LTABLE).# undef 
259c0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
259d0 53 33 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54  S3.# undef SQLIT
259e0 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 0a 23 65  E_ENABLE_FTS4.#e
259f0 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 54 53 34  ndif../*.** FTS4
25a00 20 69 73 20 72 65 61 6c 6c 79 20 61 6e 20 65 78   is really an ex
25a10 74 65 6e 73 69 6f 6e 20 66 6f 72 20 46 54 53 33  tension for FTS3
25a20 2e 20 20 49 74 20 69 73 20 65 6e 61 62 6c 65 64  .  It is enabled
25a30 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 53 51   using the.** SQ
25a40 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33  LITE_ENABLE_FTS3
25a50 20 6d 61 63 72 6f 2e 20 20 42 75 74 20 74 6f 20   macro.  But to 
25a60 61 76 6f 69 64 20 63 6f 6e 66 75 73 69 6f 6e 20  avoid confusion 
25a70 77 65 20 61 6c 73 6f 20 63 61 6c 6c 0a 2a 2a 20  we also call.** 
25a80 74 68 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  the SQLITE_ENABL
25a90 45 5f 46 54 53 34 20 6d 61 63 72 6f 20 74 6f 20  E_FTS4 macro to 
25aa0 73 65 72 76 65 20 61 73 20 61 6e 20 61 6c 69 61  serve as an alia
25ab0 73 20 66 6f 72 20 53 51 4c 49 54 45 5f 45 4e 41  s for SQLITE_ENA
25ac0 42 4c 45 5f 46 54 53 33 2e 0a 2a 2f 0a 23 69 66  BLE_FTS3..*/.#if
25ad0 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
25ae0 45 4e 41 42 4c 45 5f 46 54 53 34 29 20 26 26 20  ENABLE_FTS4) && 
25af0 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
25b00 45 4e 41 42 4c 45 5f 46 54 53 33 29 0a 23 20 64  ENABLE_FTS3).# d
25b10 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41  efine SQLITE_ENA
25b20 42 4c 45 5f 46 54 53 33 20 31 0a 23 65 6e 64 69  BLE_FTS3 1.#endi
25b30 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 74 79  f../*.** The cty
25b40 70 65 2e 68 20 68 65 61 64 65 72 20 69 73 20 6e  pe.h header is n
25b50 65 65 64 65 64 20 66 6f 72 20 6e 6f 6e 2d 41 53  eeded for non-AS
25b60 43 49 49 20 73 79 73 74 65 6d 73 2e 20 20 49 74  CII systems.  It
25b70 20 69 73 20 61 6c 73 6f 0a 2a 2a 20 6e 65 65 64   is also.** need
25b80 65 64 20 62 79 20 46 54 53 33 20 77 68 65 6e 20  ed by FTS3 when 
25b90 46 54 53 33 20 69 73 20 69 6e 63 6c 75 64 65 64  FTS3 is included
25ba0 20 69 6e 20 74 68 65 20 61 6d 61 6c 67 61 6d 61   in the amalgama
25bb0 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  tion..*/.#if !de
25bc0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 41 53 43  fined(SQLITE_ASC
25bd0 49 49 29 20 7c 7c 20 5c 0a 20 20 20 20 28 64 65  II) || \.    (de
25be0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
25bf0 42 4c 45 5f 46 54 53 33 29 20 26 26 20 64 65 66  BLE_FTS3) && def
25c00 69 6e 65 64 28 53 51 4c 49 54 45 5f 41 4d 41 4c  ined(SQLITE_AMAL
25c10 47 41 4d 41 54 49 4f 4e 29 29 0a 23 20 69 6e 63  GAMATION)).# inc
25c20 6c 75 64 65 20 3c 63 74 79 70 65 2e 68 3e 0a 23  lude <ctype.h>.#
25c30 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
25c40 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f   following macro
25c50 73 20 6d 69 6d 69 63 20 74 68 65 20 73 74 61 6e  s mimic the stan
25c60 64 61 72 64 20 6c 69 62 72 61 72 79 20 66 75 6e  dard library fun
25c70 63 74 69 6f 6e 73 20 74 6f 75 70 70 65 72 28 29  ctions toupper()
25c80 2c 0a 2a 2a 20 69 73 73 70 61 63 65 28 29 2c 20  ,.** isspace(), 
25c90 69 73 61 6c 6e 75 6d 28 29 2c 20 69 73 64 69 67  isalnum(), isdig
25ca0 69 74 28 29 20 61 6e 64 20 69 73 78 64 69 67 69  it() and isxdigi
25cb0 74 28 29 2c 20 72 65 73 70 65 63 74 69 76 65 6c  t(), respectivel
25cc0 79 2e 20 54 68 65 0a 2a 2a 20 73 71 6c 69 74 65  y. The.** sqlite
25cd0 20 76 65 72 73 69 6f 6e 73 20 6f 6e 6c 79 20 77   versions only w
25ce0 6f 72 6b 20 66 6f 72 20 41 53 43 49 49 20 63 68  ork for ASCII ch
25cf0 61 72 61 63 74 65 72 73 2c 20 72 65 67 61 72 64  aracters, regard
25d00 6c 65 73 73 20 6f 66 20 6c 6f 63 61 6c 65 2e 0a  less of locale..
25d10 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
25d20 5f 41 53 43 49 49 0a 23 20 64 65 66 69 6e 65 20  _ASCII.# define 
25d30 73 71 6c 69 74 65 33 54 6f 75 70 70 65 72 28 78  sqlite3Toupper(x
25d40 29 20 20 28 28 78 29 26 7e 28 73 71 6c 69 74 65  )  ((x)&~(sqlite
25d50 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67  3CtypeMap[(unsig
25d60 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78  ned char)(x)]&0x
25d70 32 30 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  20)).# define sq
25d80 6c 69 74 65 33 49 73 73 70 61 63 65 28 78 29 20  lite3Isspace(x) 
25d90 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d    (sqlite3CtypeM
25da0 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ap[(unsigned cha
25db0 72 29 28 78 29 5d 26 30 78 30 31 29 0a 23 20 64  r)(x)]&0x01).# d
25dc0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61  efine sqlite3Isa
25dd0 6c 6e 75 6d 28 78 29 20 20 20 28 73 71 6c 69 74  lnum(x)   (sqlit
25de0 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
25df0 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
25e00 78 30 36 29 0a 23 20 64 65 66 69 6e 65 20 73 71  x06).# define sq
25e10 6c 69 74 65 33 49 73 61 6c 70 68 61 28 78 29 20  lite3Isalpha(x) 
25e20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d    (sqlite3CtypeM
25e30 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ap[(unsigned cha
25e40 72 29 28 78 29 5d 26 30 78 30 32 29 0a 23 20 64  r)(x)]&0x02).# d
25e50 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 64  efine sqlite3Isd
25e60 69 67 69 74 28 78 29 20 20 20 28 73 71 6c 69 74  igit(x)   (sqlit
25e70 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
25e80 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
25e90 78 30 34 29 0a 23 20 64 65 66 69 6e 65 20 73 71  x04).# define sq
25ea0 6c 69 74 65 33 49 73 78 64 69 67 69 74 28 78 29  lite3Isxdigit(x)
25eb0 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d    (sqlite3CtypeM
25ec0 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ap[(unsigned cha
25ed0 72 29 28 78 29 5d 26 30 78 30 38 29 0a 23 20 64  r)(x)]&0x08).# d
25ee0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c  efine sqlite3Tol
25ef0 6f 77 65 72 28 78 29 20 20 20 28 73 71 6c 69 74  ower(x)   (sqlit
25f00 65 33 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 28  e3UpperToLower[(
25f10 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
25f20 29 5d 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  )]).# define sql
25f30 69 74 65 33 49 73 71 75 6f 74 65 28 78 29 20 20  ite3Isquote(x)  
25f40 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61   (sqlite3CtypeMa
25f50 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  p[(unsigned char
25f60 29 28 78 29 5d 26 30 78 38 30 29 0a 23 65 6c 73  )(x)]&0x80).#els
25f70 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
25f80 65 33 54 6f 75 70 70 65 72 28 78 29 20 20 20 74  e3Toupper(x)   t
25f90 6f 75 70 70 65 72 28 28 75 6e 73 69 67 6e 65 64  oupper((unsigned
25fa0 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
25fb0 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70 61  ine sqlite3Isspa
25fc0 63 65 28 78 29 20 20 20 69 73 73 70 61 63 65 28  ce(x)   isspace(
25fd0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
25fe0 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  x)).# define sql
25ff0 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20 20  ite3Isalnum(x)  
26000 20 69 73 61 6c 6e 75 6d 28 28 75 6e 73 69 67 6e   isalnum((unsign
26010 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64  ed char)(x)).# d
26020 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61  efine sqlite3Isa
26030 6c 70 68 61 28 78 29 20 20 20 69 73 61 6c 70 68  lpha(x)   isalph
26040 61 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  a((unsigned char
26050 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
26060 71 6c 69 74 65 33 49 73 64 69 67 69 74 28 78 29  qlite3Isdigit(x)
26070 20 20 20 69 73 64 69 67 69 74 28 28 75 6e 73 69     isdigit((unsi
26080 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
26090 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
260a0 73 78 64 69 67 69 74 28 78 29 20 20 69 73 78 64  sxdigit(x)  isxd
260b0 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64 20 63  igit((unsigned c
260c0 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
260d0 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72  e sqlite3Tolower
260e0 28 78 29 20 20 20 74 6f 6c 6f 77 65 72 28 28 75  (x)   tolower((u
260f0 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
26100 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
26110 65 33 49 73 71 75 6f 74 65 28 78 29 20 20 20 28  e3Isquote(x)   (
26120 28 78 29 3d 3d 27 22 27 7c 7c 28 78 29 3d 3d 27  (x)=='"'||(x)=='
26130 5c 27 27 7c 7c 28 78 29 3d 3d 27 5b 27 7c 7c 28  \''||(x)=='['||(
26140 78 29 3d 3d 27 60 27 29 0a 23 65 6e 64 69 66 0a  x)=='`').#endif.
26150 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
26160 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f 50 54 49 4f  MIT_COMPILEOPTIO
26170 4e 5f 44 49 41 47 53 0a 69 6e 74 20 73 71 6c 69  N_DIAGS.int sqli
26180 74 65 33 49 73 49 64 43 68 61 72 28 75 38 29 3b  te3IsIdChar(u8);
26190 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49  .#endif../*.** I
261a0 6e 74 65 72 6e 61 6c 20 66 75 6e 63 74 69 6f 6e  nternal function
261b0 20 70 72 6f 74 6f 74 79 70 65 73 0a 2a 2f 0a 69   prototypes.*/.i
261c0 6e 74 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d  nt sqlite3StrICm
261d0 70 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  p(const char*,co
261e0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20  nst char*);.int 
261f0 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
26200 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68  const char*);.ch
26210 61 72 20 2a 73 71 6c 69 74 65 33 43 6f 6c 75 6d  ar *sqlite3Colum
26220 6e 54 79 70 65 28 43 6f 6c 75 6d 6e 2a 2c 63 68  nType(Column*,ch
26230 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65 20 73 71  ar*);.#define sq
26240 6c 69 74 65 33 53 74 72 4e 49 43 6d 70 20 73 71  lite3StrNICmp sq
26250 6c 69 74 65 33 5f 73 74 72 6e 69 63 6d 70 0a 0a  lite3_strnicmp..
26260 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  int sqlite3Mallo
26270 63 49 6e 69 74 28 76 6f 69 64 29 3b 0a 76 6f 69  cInit(void);.voi
26280 64 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 45  d sqlite3MallocE
26290 6e 64 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 2a  nd(void);.void *
262a0 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 28 75 36  sqlite3Malloc(u6
262b0 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  4);.void *sqlite
262c0 33 4d 61 6c 6c 6f 63 5a 65 72 6f 28 75 36 34 29  3MallocZero(u64)
262d0 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44  ;.void *sqlite3D
262e0 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 73 71 6c 69  bMallocZero(sqli
262f0 74 65 33 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64  te3*, u64);.void
26300 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f   *sqlite3DbMallo
26310 63 52 61 77 28 73 71 6c 69 74 65 33 2a 2c 20 75  cRaw(sqlite3*, u
26320 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  64);.void *sqlit
26330 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 4e 4e 28  e3DbMallocRawNN(
26340 73 71 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a  sqlite3*, u64);.
26350 63 68 61 72 20 2a 73 71 6c 69 74 65 33 44 62 53  char *sqlite3DbS
26360 74 72 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 63  trDup(sqlite3*,c
26370 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68 61  onst char*);.cha
26380 72 20 2a 73 71 6c 69 74 65 33 44 62 53 74 72 4e  r *sqlite3DbStrN
26390 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  Dup(sqlite3*,con
263a0 73 74 20 63 68 61 72 2a 2c 20 75 36 34 29 3b 0a  st char*, u64);.
263b0 63 68 61 72 20 2a 73 71 6c 69 74 65 33 44 62 53  char *sqlite3DbS
263c0 70 61 6e 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  panDup(sqlite3*,
263d0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
263e0 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 2a  t char*);.void *
263f0 73 71 6c 69 74 65 33 52 65 61 6c 6c 6f 63 28 76  sqlite3Realloc(v
26400 6f 69 64 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64  oid*, u64);.void
26410 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c   *sqlite3DbReall
26420 6f 63 4f 72 46 72 65 65 28 73 71 6c 69 74 65 33  ocOrFree(sqlite3
26430 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 75 36 34 29   *, void *, u64)
26440 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44  ;.void *sqlite3D
26450 62 52 65 61 6c 6c 6f 63 28 73 71 6c 69 74 65 33  bRealloc(sqlite3
26460 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 75 36 34 29   *, void *, u64)
26470 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 62  ;.void sqlite3Db
26480 46 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 20 76  Free(sqlite3*, v
26490 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  oid*);.void sqli
264a0 74 65 33 44 62 46 72 65 65 4e 4e 28 73 71 6c 69  te3DbFreeNN(sqli
264b0 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 69 6e  te3*, void*);.in
264c0 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 53  t sqlite3MallocS
264d0 69 7a 65 28 76 6f 69 64 2a 29 3b 0a 69 6e 74 20  ize(void*);.int 
264e0 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 53  sqlite3DbMallocS
264f0 69 7a 65 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f  ize(sqlite3*, vo
26500 69 64 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  id*);.void *sqli
26510 74 65 33 50 61 67 65 4d 61 6c 6c 6f 63 28 69 6e  te3PageMalloc(in
26520 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
26530 50 61 67 65 46 72 65 65 28 76 6f 69 64 2a 29 3b  PageFree(void*);
26540 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d  .void sqlite3Mem
26550 53 65 74 44 65 66 61 75 6c 74 28 76 6f 69 64 29  SetDefault(void)
26560 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
26570 5f 55 4e 54 45 53 54 41 42 4c 45 0a 76 6f 69 64  _UNTESTABLE.void
26580 20 73 71 6c 69 74 65 33 42 65 6e 69 67 6e 4d 61   sqlite3BenignMa
26590 6c 6c 6f 63 48 6f 6f 6b 73 28 76 6f 69 64 20 28  llocHooks(void (
265a0 2a 29 28 76 6f 69 64 29 2c 20 76 6f 69 64 20 28  *)(void), void (
265b0 2a 29 28 76 6f 69 64 29 29 3b 0a 23 65 6e 64 69  *)(void));.#endi
265c0 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 48 65 61  f.int sqlite3Hea
265d0 70 4e 65 61 72 6c 79 46 75 6c 6c 28 76 6f 69 64  pNearlyFull(void
265e0 29 3b 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 20 73 79 73  );../*.** On sys
265f0 74 65 6d 73 20 77 69 74 68 20 61 6d 70 6c 65 20  tems with ample 
26600 73 74 61 63 6b 20 73 70 61 63 65 20 61 6e 64 20  stack space and 
26610 74 68 61 74 20 73 75 70 70 6f 72 74 20 61 6c 6c  that support all
26620 6f 63 61 28 29 2c 20 6d 61 6b 65 0a 2a 2a 20 75  oca(), make.** u
26630 73 65 20 6f 66 20 61 6c 6c 6f 63 61 28 29 20 74  se of alloca() t
26640 6f 20 6f 62 74 61 69 6e 20 73 70 61 63 65 20 66  o obtain space f
26650 6f 72 20 6c 61 72 67 65 20 61 75 74 6f 6d 61 74  or large automat
26660 69 63 20 6f 62 6a 65 63 74 73 2e 20 20 42 79 20  ic objects.  By 
26670 64 65 66 61 75 6c 74 2c 0a 2a 2a 20 6f 62 74 61  default,.** obta
26680 69 6e 20 73 70 61 63 65 20 66 72 6f 6d 20 6d 61  in space from ma
26690 6c 6c 6f 63 28 29 2e 0a 2a 2a 0a 2a 2a 20 54 68  lloc()..**.** Th
266a0 65 20 61 6c 6c 6f 63 61 28 29 20 72 6f 75 74 69  e alloca() routi
266b0 6e 65 20 6e 65 76 65 72 20 72 65 74 75 72 6e 73  ne never returns
266c0 20 4e 55 4c 4c 2e 20 20 54 68 69 73 20 77 69 6c   NULL.  This wil
266d0 6c 20 63 61 75 73 65 20 63 6f 64 65 20 70 61 74  l cause code pat
266e0 68 73 0a 2a 2a 20 74 68 61 74 20 64 65 61 6c 20  hs.** that deal 
266f0 77 69 74 68 20 73 71 6c 69 74 65 33 53 74 61 63  with sqlite3Stac
26700 6b 41 6c 6c 6f 63 28 29 20 66 61 69 6c 75 72 65  kAlloc() failure
26710 73 20 74 6f 20 62 65 20 75 6e 72 65 61 63 68 61  s to be unreacha
26720 62 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ble..*/.#ifdef S
26730 51 4c 49 54 45 5f 55 53 45 5f 41 4c 4c 4f 43 41  QLITE_USE_ALLOCA
26740 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
26750 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44  3StackAllocRaw(D
26760 2c 4e 29 20 20 20 61 6c 6c 6f 63 61 28 4e 29 0a  ,N)   alloca(N).
26770 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
26780 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44  StackAllocZero(D
26790 2c 4e 29 20 20 6d 65 6d 73 65 74 28 61 6c 6c 6f  ,N)  memset(allo
267a0 63 61 28 4e 29 2c 20 30 2c 20 4e 29 0a 23 20 64  ca(N), 0, N).# d
267b0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
267c0 63 6b 46 72 65 65 28 44 2c 50 29 0a 23 65 6c 73  ckFree(D,P).#els
267d0 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
267e0 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28  e3StackAllocRaw(
267f0 44 2c 4e 29 20 20 20 73 71 6c 69 74 65 33 44 62  D,N)   sqlite3Db
26800 4d 61 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 0a 23  MallocRaw(D,N).#
26810 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53   define sqlite3S
26820 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c  tackAllocZero(D,
26830 4e 29 20 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  N)  sqlite3DbMal
26840 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 0a 23 20 64  locZero(D,N).# d
26850 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
26860 63 6b 46 72 65 65 28 44 2c 50 29 20 20 20 20 20  ckFree(D,P)     
26870 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
26880 44 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20  D,P).#endif../* 
26890 44 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 62 6f 74  Do not allow bot
268a0 68 20 4d 45 4d 53 59 53 35 20 61 6e 64 20 4d 45  h MEMSYS5 and ME
268b0 4d 53 59 53 33 20 74 6f 20 62 65 20 64 65 66 69  MSYS3 to be defi
268c0 6e 65 64 20 74 6f 67 65 74 68 65 72 2e 20 20 49  ned together.  I
268d0 66 20 74 68 65 79 0a 2a 2a 20 61 72 65 2c 20 64  f they.** are, d
268e0 69 73 61 62 6c 65 20 4d 45 4d 53 59 53 33 0a 2a  isable MEMSYS3.*
268f0 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
26900 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 35 0a 63  ENABLE_MEMSYS5.c
26910 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d  onst sqlite3_mem
26920 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69 74 65  _methods *sqlite
26930 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73 35 28 76  3MemGetMemsys5(v
26940 6f 69 64 29 3b 0a 23 75 6e 64 65 66 20 53 51 4c  oid);.#undef SQL
26950 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59  ITE_ENABLE_MEMSY
26960 53 33 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66  S3.#endif.#ifdef
26970 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d   SQLITE_ENABLE_M
26980 45 4d 53 59 53 33 0a 63 6f 6e 73 74 20 73 71 6c  EMSYS3.const sql
26990 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73  ite3_mem_methods
269a0 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d   *sqlite3MemGetM
269b0 65 6d 73 79 73 33 28 76 6f 69 64 29 3b 0a 23 65  emsys3(void);.#e
269c0 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20 53  ndif...#ifndef S
269d0 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d 49 54  QLITE_MUTEX_OMIT
269e0 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
269f0 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a  _methods const *
26a00 73 71 6c 69 74 65 33 44 65 66 61 75 6c 74 4d 75  sqlite3DefaultMu
26a10 74 65 78 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c  tex(void);.  sql
26a20 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f  ite3_mutex_metho
26a30 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65  ds const *sqlite
26a40 33 4e 6f 6f 70 4d 75 74 65 78 28 76 6f 69 64 29  3NoopMutex(void)
26a50 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  ;.  sqlite3_mute
26a60 78 20 2a 73 71 6c 69 74 65 33 4d 75 74 65 78 41  x *sqlite3MutexA
26a70 6c 6c 6f 63 28 69 6e 74 29 3b 0a 20 20 69 6e 74  lloc(int);.  int
26a80 20 73 71 6c 69 74 65 33 4d 75 74 65 78 49 6e 69   sqlite3MutexIni
26a90 74 28 76 6f 69 64 29 3b 0a 20 20 69 6e 74 20 73  t(void);.  int s
26aa0 71 6c 69 74 65 33 4d 75 74 65 78 45 6e 64 28 76  qlite3MutexEnd(v
26ab0 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66  oid);.#endif.#if
26ac0 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
26ad0 5f 4d 55 54 45 58 5f 4f 4d 49 54 29 20 26 26 20  _MUTEX_OMIT) && 
26ae0 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
26af0 4d 55 54 45 58 5f 4e 4f 4f 50 29 0a 20 20 76 6f  MUTEX_NOOP).  vo
26b00 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 6f 72 79  id sqlite3Memory
26b10 42 61 72 72 69 65 72 28 76 6f 69 64 29 3b 0a 23  Barrier(void);.#
26b20 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
26b30 6c 69 74 65 33 4d 65 6d 6f 72 79 42 61 72 72 69  lite3MemoryBarri
26b40 65 72 28 29 0a 23 65 6e 64 69 66 0a 0a 73 71 6c  er().#endif..sql
26b50 69 74 65 33 5f 69 6e 74 36 34 20 73 71 6c 69 74  ite3_int64 sqlit
26b60 65 33 53 74 61 74 75 73 56 61 6c 75 65 28 69 6e  e3StatusValue(in
26b70 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
26b80 53 74 61 74 75 73 55 70 28 69 6e 74 2c 20 69 6e  StatusUp(int, in
26b90 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
26ba0 53 74 61 74 75 73 44 6f 77 6e 28 69 6e 74 2c 20  StatusDown(int, 
26bb0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
26bc0 65 33 53 74 61 74 75 73 48 69 67 68 77 61 74 65  e3StatusHighwate
26bd0 72 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74  r(int, int);.int
26be0 20 73 71 6c 69 74 65 33 4c 6f 6f 6b 61 73 69 64   sqlite3Lookasid
26bf0 65 55 73 65 64 28 73 71 6c 69 74 65 33 2a 2c 69  eUsed(sqlite3*,i
26c00 6e 74 2a 29 3b 0a 0a 2f 2a 20 41 63 63 65 73 73  nt*);../* Access
26c10 20 74 6f 20 6d 75 74 65 78 65 73 20 75 73 65 64   to mutexes used
26c20 20 62 79 20 73 71 6c 69 74 65 33 5f 73 74 61 74   by sqlite3_stat
26c30 75 73 28 29 20 2a 2f 0a 73 71 6c 69 74 65 33 5f  us() */.sqlite3_
26c40 6d 75 74 65 78 20 2a 73 71 6c 69 74 65 33 50 63  mutex *sqlite3Pc
26c50 61 63 68 65 31 4d 75 74 65 78 28 76 6f 69 64 29  ache1Mutex(void)
26c60 3b 0a 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20  ;.sqlite3_mutex 
26c70 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 4d 75  *sqlite3MallocMu
26c80 74 65 78 28 76 6f 69 64 29 3b 0a 0a 23 69 66 20  tex(void);..#if 
26c90 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
26ca0 4e 41 42 4c 45 5f 4d 55 4c 54 49 54 48 52 45 41  NABLE_MULTITHREA
26cb0 44 45 44 5f 43 48 45 43 4b 53 29 20 26 26 20 21  DED_CHECKS) && !
26cc0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d  defined(SQLITE_M
26cd0 55 54 45 58 5f 4f 4d 49 54 29 0a 76 6f 69 64 20  UTEX_OMIT).void 
26ce0 73 71 6c 69 74 65 33 4d 75 74 65 78 57 61 72 6e  sqlite3MutexWarn
26cf0 4f 6e 43 6f 6e 74 65 6e 74 69 6f 6e 28 73 71 6c  OnContention(sql
26d00 69 74 65 33 5f 6d 75 74 65 78 2a 29 3b 0a 23 65  ite3_mutex*);.#e
26d10 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
26d20 69 74 65 33 4d 75 74 65 78 57 61 72 6e 4f 6e 43  ite3MutexWarnOnC
26d30 6f 6e 74 65 6e 74 69 6f 6e 28 78 29 0a 23 65 6e  ontention(x).#en
26d40 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  dif..#ifndef SQL
26d50 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
26d60 47 5f 50 4f 49 4e 54 0a 20 20 69 6e 74 20 73 71  G_POINT.  int sq
26d70 6c 69 74 65 33 49 73 4e 61 4e 28 64 6f 75 62 6c  lite3IsNaN(doubl
26d80 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  e);.#else.# defi
26d90 6e 65 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28  ne sqlite3IsNaN(
26da0 58 29 20 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  X)  0.#endif../*
26db0 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
26dc0 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
26dd0 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73   structure holds
26de0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
26df0 75 74 20 53 51 4c 0a 2a 2a 20 66 75 6e 63 74 69  ut SQL.** functi
26e00 6f 6e 73 20 61 72 67 75 6d 65 6e 74 73 20 74 68  ons arguments th
26e10 61 74 20 61 72 65 20 74 68 65 20 70 61 72 61 6d  at are the param
26e20 65 74 65 72 73 20 74 6f 20 74 68 65 20 70 72 69  eters to the pri
26e30 6e 74 66 28 29 20 66 75 6e 63 74 69 6f 6e 2e 0a  ntf() function..
26e40 2a 2f 0a 73 74 72 75 63 74 20 50 72 69 6e 74 66  */.struct Printf
26e50 41 72 67 75 6d 65 6e 74 73 20 7b 0a 20 20 69 6e  Arguments {.  in
26e60 74 20 6e 41 72 67 3b 20 20 20 20 20 20 20 20 20  t nArg;         
26e70 20 20 20 20 20 20 20 2f 2a 20 54 6f 74 61 6c 20         /* Total 
26e80 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  number of argume
26e90 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 55 73  nts */.  int nUs
26ea0 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ed;             
26eb0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
26ec0 72 67 75 6d 65 6e 74 73 20 75 73 65 64 20 73 6f  rguments used so
26ed0 20 66 61 72 20 2a 2f 0a 20 20 73 71 6c 69 74 65   far */.  sqlite
26ee0 33 5f 76 61 6c 75 65 20 2a 2a 61 70 41 72 67 3b  3_value **apArg;
26ef0 20 20 20 2f 2a 20 54 68 65 20 61 72 67 75 6d 65     /* The argume
26f00 6e 74 20 76 61 6c 75 65 73 20 2a 2f 0a 7d 3b 0a  nt values */.};.
26f10 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4d 50  .char *sqlite3MP
26f20 72 69 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c 63  rintf(sqlite3*,c
26f30 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29  onst char*, ...)
26f40 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 56  ;.char *sqlite3V
26f50 4d 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33 2a  MPrintf(sqlite3*
26f60 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 76 61  ,const char*, va
26f70 5f 6c 69 73 74 29 3b 0a 23 69 66 20 64 65 66 69  _list);.#if defi
26f80 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
26f90 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c  ) || defined(SQL
26fa0 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41 43  ITE_HAVE_OS_TRAC
26fb0 45 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  E).  void sqlite
26fc0 33 44 65 62 75 67 50 72 69 6e 74 66 28 63 6f 6e  3DebugPrintf(con
26fd0 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a  st char*, ...);.
26fe0 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e  #endif.#if defin
26ff0 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a  ed(SQLITE_TEST).
27000 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 54    void *sqlite3T
27010 65 73 74 54 65 78 74 54 6f 50 74 72 28 63 6f 6e  estTextToPtr(con
27020 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69  st char*);.#endi
27030 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  f..#if defined(S
27040 51 4c 49 54 45 5f 44 45 42 55 47 29 0a 20 20 76  QLITE_DEBUG).  v
27050 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56  oid sqlite3TreeV
27060 69 65 77 45 78 70 72 28 54 72 65 65 56 69 65 77  iewExpr(TreeView
27070 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20  *, const Expr*, 
27080 75 38 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  u8);.  void sqli
27090 74 65 33 54 72 65 65 56 69 65 77 42 61 72 65 45  te3TreeViewBareE
270a0 78 70 72 4c 69 73 74 28 54 72 65 65 56 69 65 77  xprList(TreeView
270b0 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72 4c 69 73  *, const ExprLis
270c0 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  t*, const char*)
270d0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
270e0 54 72 65 65 56 69 65 77 45 78 70 72 4c 69 73 74  TreeViewExprList
270f0 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73  (TreeView*, cons
27100 74 20 45 78 70 72 4c 69 73 74 2a 2c 20 75 38 2c  t ExprList*, u8,
27110 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20   const char*);. 
27120 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65   void sqlite3Tre
27130 65 56 69 65 77 53 65 6c 65 63 74 28 54 72 65 65  eViewSelect(Tree
27140 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 53 65 6c  View*, const Sel
27150 65 63 74 2a 2c 20 75 38 29 3b 0a 20 20 76 6f 69  ect*, u8);.  voi
27160 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65  d sqlite3TreeVie
27170 77 57 69 74 68 28 54 72 65 65 56 69 65 77 2a 2c  wWith(TreeView*,
27180 20 63 6f 6e 73 74 20 57 69 74 68 2a 2c 20 75 38   const With*, u8
27190 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 76 6f 69 64  );.#endif...void
271a0 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
271b0 67 28 63 68 61 72 20 2a 2a 2c 20 73 71 6c 69 74  g(char **, sqlit
271c0 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  e3*, const char*
271d0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
271e0 72 72 6f 72 4d 73 67 28 50 61 72 73 65 2a 2c 20  rrorMsg(Parse*, 
271f0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e  const char*, ...
27200 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
27210 65 71 75 6f 74 65 28 63 68 61 72 2a 29 3b 0a 76  equote(char*);.v
27220 6f 69 64 20 73 71 6c 69 74 65 33 54 6f 6b 65 6e  oid sqlite3Token
27230 49 6e 69 74 28 54 6f 6b 65 6e 2a 2c 63 68 61 72  Init(Token*,char
27240 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4b  *);.int sqlite3K
27250 65 79 77 6f 72 64 43 6f 64 65 28 63 6f 6e 73 74  eywordCode(const
27260 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c   unsigned char*,
27270 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
27280 65 33 52 75 6e 50 61 72 73 65 72 28 50 61 72 73  e3RunParser(Pars
27290 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e*, const char*,
272a0 20 63 68 61 72 20 2a 2a 29 3b 0a 76 6f 69 64 20   char **);.void 
272b0 73 71 6c 69 74 65 33 46 69 6e 69 73 68 43 6f 64  sqlite3FinishCod
272c0 69 6e 67 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74  ing(Parse*);.int
272d0 20 73 71 6c 69 74 65 33 47 65 74 54 65 6d 70 52   sqlite3GetTempR
272e0 65 67 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64  eg(Parse*);.void
272f0 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54   sqlite3ReleaseT
27300 65 6d 70 52 65 67 28 50 61 72 73 65 2a 2c 69 6e  empReg(Parse*,in
27310 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47  t);.int sqlite3G
27320 65 74 54 65 6d 70 52 61 6e 67 65 28 50 61 72 73  etTempRange(Pars
27330 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  e*,int);.void sq
27340 6c 69 74 65 33 52 65 6c 65 61 73 65 54 65 6d 70  lite3ReleaseTemp
27350 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74  Range(Parse*,int
27360 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
27370 74 65 33 43 6c 65 61 72 54 65 6d 70 52 65 67 43  te3ClearTempRegC
27380 61 63 68 65 28 50 61 72 73 65 2a 29 3b 0a 23 69  ache(Parse*);.#i
27390 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
273a0 47 0a 69 6e 74 20 73 71 6c 69 74 65 33 4e 6f 54  G.int sqlite3NoT
273b0 65 6d 70 73 49 6e 52 61 6e 67 65 28 50 61 72 73  empsInRange(Pars
273c0 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 23 65 6e  e*,int,int);.#en
273d0 64 69 66 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  dif.Expr *sqlite
273e0 33 45 78 70 72 41 6c 6c 6f 63 28 73 71 6c 69 74  3ExprAlloc(sqlit
273f0 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 54 6f  e3*,int,const To
27400 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 20  ken*,int);.Expr 
27410 2a 73 71 6c 69 74 65 33 45 78 70 72 28 73 71 6c  *sqlite3Expr(sql
27420 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  ite3*,int,const 
27430 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
27440 69 74 65 33 45 78 70 72 41 74 74 61 63 68 53 75  ite3ExprAttachSu
27450 62 74 72 65 65 73 28 73 71 6c 69 74 65 33 2a 2c  btrees(sqlite3*,
27460 45 78 70 72 2a 2c 45 78 70 72 2a 2c 45 78 70 72  Expr*,Expr*,Expr
27470 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  *);.Expr *sqlite
27480 33 50 45 78 70 72 28 50 61 72 73 65 2a 2c 20 69  3PExpr(Parse*, i
27490 6e 74 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a  nt, Expr*, Expr*
274a0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
274b0 45 78 70 72 41 64 64 53 65 6c 65 63 74 28 50 61  ExprAddSelect(Pa
274c0 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 53 65 6c  rse*, Expr*, Sel
274d0 65 63 74 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c  ect*);.Expr *sql
274e0 69 74 65 33 45 78 70 72 41 6e 64 28 73 71 6c 69  ite3ExprAnd(sqli
274f0 74 65 33 2a 2c 45 78 70 72 2a 2c 20 45 78 70 72  te3*,Expr*, Expr
27500 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  *);.Expr *sqlite
27510 33 45 78 70 72 46 75 6e 63 74 69 6f 6e 28 50 61  3ExprFunction(Pa
27520 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20  rse*,ExprList*, 
27530 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
27540 6c 69 74 65 33 45 78 70 72 41 73 73 69 67 6e 56  lite3ExprAssignV
27550 61 72 4e 75 6d 62 65 72 28 50 61 72 73 65 2a 2c  arNumber(Parse*,
27560 20 45 78 70 72 2a 2c 20 75 33 32 29 3b 0a 76 6f   Expr*, u32);.vo
27570 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 44 65  id sqlite3ExprDe
27580 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 45  lete(sqlite3*, E
27590 78 70 72 2a 29 3b 0a 45 78 70 72 4c 69 73 74 20  xpr*);.ExprList 
275a0 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74  *sqlite3ExprList
275b0 41 70 70 65 6e 64 28 50 61 72 73 65 2a 2c 45 78  Append(Parse*,Ex
275c0 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b 0a  prList*,Expr*);.
275d0 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65  ExprList *sqlite
275e0 33 45 78 70 72 4c 69 73 74 41 70 70 65 6e 64 56  3ExprListAppendV
275f0 65 63 74 6f 72 28 50 61 72 73 65 2a 2c 45 78 70  ector(Parse*,Exp
27600 72 4c 69 73 74 2a 2c 49 64 4c 69 73 74 2a 2c 45  rList*,IdList*,E
27610 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
27620 74 65 33 45 78 70 72 4c 69 73 74 53 65 74 53 6f  te3ExprListSetSo
27630 72 74 4f 72 64 65 72 28 45 78 70 72 4c 69 73 74  rtOrder(ExprList
27640 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
27650 69 74 65 33 45 78 70 72 4c 69 73 74 53 65 74 4e  ite3ExprListSetN
27660 61 6d 65 28 50 61 72 73 65 2a 2c 45 78 70 72 4c  ame(Parse*,ExprL
27670 69 73 74 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29  ist*,Token*,int)
27680 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
27690 70 72 4c 69 73 74 53 65 74 53 70 61 6e 28 50 61  prListSetSpan(Pa
276a0 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 63  rse*,ExprList*,c
276b0 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
276c0 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
276d0 6c 69 74 65 33 45 78 70 72 4c 69 73 74 44 65 6c  lite3ExprListDel
276e0 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 45 78  ete(sqlite3*, Ex
276f0 70 72 4c 69 73 74 2a 29 3b 0a 75 33 32 20 73 71  prList*);.u32 sq
27700 6c 69 74 65 33 45 78 70 72 4c 69 73 74 46 6c 61  lite3ExprListFla
27710 67 73 28 63 6f 6e 73 74 20 45 78 70 72 4c 69 73  gs(const ExprLis
27720 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
27730 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c 20 63  Init(sqlite3*, c
27740 68 61 72 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  har**);.int sqli
27750 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28  te3InitCallback(
27760 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 68 61 72  void*, int, char
27770 2a 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 76 6f 69  **, char**);.voi
27780 64 20 73 71 6c 69 74 65 33 50 72 61 67 6d 61 28  d sqlite3Pragma(
27790 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Parse*,Token*,To
277a0 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29  ken*,Token*,int)
277b0 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
277c0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
277d0 4c 45 0a 4d 6f 64 75 6c 65 20 2a 73 71 6c 69 74  LE.Module *sqlit
277e0 65 33 50 72 61 67 6d 61 56 74 61 62 52 65 67 69  e3PragmaVtabRegi
277f0 73 74 65 72 28 73 71 6c 69 74 65 33 2a 2c 63 6f  ster(sqlite3*,co
27800 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 29  nst char *zName)
27810 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  ;.#endif.void sq
27820 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68  lite3ResetAllSch
27830 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e  emasOfConnection
27840 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64  (sqlite3*);.void
27850 20 73 71 6c 69 74 65 33 52 65 73 65 74 4f 6e 65   sqlite3ResetOne
27860 53 63 68 65 6d 61 28 73 71 6c 69 74 65 33 2a 2c  Schema(sqlite3*,
27870 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
27880 65 33 43 6f 6c 6c 61 70 73 65 44 61 74 61 62 61  e3CollapseDataba
27890 73 65 41 72 72 61 79 28 73 71 6c 69 74 65 33 2a  seArray(sqlite3*
278a0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
278b0 6f 6d 6d 69 74 49 6e 74 65 72 6e 61 6c 43 68 61  ommitInternalCha
278c0 6e 67 65 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a  nges(sqlite3*);.
278d0 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65  void sqlite3Dele
278e0 74 65 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 73 71  teColumnNames(sq
278f0 6c 69 74 65 33 2a 2c 54 61 62 6c 65 2a 29 3b 0a  lite3*,Table*);.
27900 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d  int sqlite3Colum
27910 6e 73 46 72 6f 6d 45 78 70 72 4c 69 73 74 28 50  nsFromExprList(P
27920 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  arse*,ExprList*,
27930 69 31 36 2a 2c 43 6f 6c 75 6d 6e 2a 2a 29 3b 0a  i16*,Column**);.
27940 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65  void sqlite3Sele
27950 63 74 41 64 64 43 6f 6c 75 6d 6e 54 79 70 65 41  ctAddColumnTypeA
27960 6e 64 43 6f 6c 6c 61 74 69 6f 6e 28 50 61 72 73  ndCollation(Pars
27970 65 2a 2c 54 61 62 6c 65 2a 2c 53 65 6c 65 63 74  e*,Table*,Select
27980 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74  *);.Table *sqlit
27990 65 33 52 65 73 75 6c 74 53 65 74 4f 66 53 65 6c  e3ResultSetOfSel
279a0 65 63 74 28 50 61 72 73 65 2a 2c 53 65 6c 65 63  ect(Parse*,Selec
279b0 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
279c0 33 4f 70 65 6e 4d 61 73 74 65 72 54 61 62 6c 65  3OpenMasterTable
279d0 28 50 61 72 73 65 20 2a 2c 20 69 6e 74 29 3b 0a  (Parse *, int);.
279e0 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 50 72  Index *sqlite3Pr
279f0 69 6d 61 72 79 4b 65 79 49 6e 64 65 78 28 54 61  imaryKeyIndex(Ta
27a00 62 6c 65 2a 29 3b 0a 69 31 36 20 73 71 6c 69 74  ble*);.i16 sqlit
27a10 65 33 43 6f 6c 75 6d 6e 4f 66 49 6e 64 65 78 28  e3ColumnOfIndex(
27a20 49 6e 64 65 78 2a 2c 20 69 31 36 29 3b 0a 76 6f  Index*, i16);.vo
27a30 69 64 20 73 71 6c 69 74 65 33 53 74 61 72 74 54  id sqlite3StartT
27a40 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65  able(Parse*,Toke
27a50 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e  n*,Token*,int,in
27a60 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a 23 69 66 20  t,int,int);.#if 
27a70 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49  SQLITE_ENABLE_HI
27a80 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53 0a 20 20 76  DDEN_COLUMNS.  v
27a90 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d  oid sqlite3Colum
27aa0 6e 50 72 6f 70 65 72 74 69 65 73 46 72 6f 6d 4e  nPropertiesFromN
27ab0 61 6d 65 28 54 61 62 6c 65 2a 2c 20 43 6f 6c 75  ame(Table*, Colu
27ac0 6d 6e 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  mn*);.#else.# de
27ad0 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6c 75  fine sqlite3Colu
27ae0 6d 6e 50 72 6f 70 65 72 74 69 65 73 46 72 6f 6d  mnPropertiesFrom
27af0 4e 61 6d 65 28 54 2c 43 29 20 2f 2a 20 6e 6f 2d  Name(T,C) /* no-
27b00 6f 70 20 2a 2f 0a 23 65 6e 64 69 66 0a 76 6f 69  op */.#endif.voi
27b10 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 75  d sqlite3AddColu
27b20 6d 6e 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  mn(Parse*,Token*
27b30 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73  ,Token*);.void s
27b40 71 6c 69 74 65 33 41 64 64 4e 6f 74 4e 75 6c 6c  qlite3AddNotNull
27b50 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76  (Parse*, int);.v
27b60 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 50 72  oid sqlite3AddPr
27b70 69 6d 61 72 79 4b 65 79 28 50 61 72 73 65 2a 2c  imaryKey(Parse*,
27b80 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c   ExprList*, int,
27b90 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
27ba0 20 73 71 6c 69 74 65 33 41 64 64 43 68 65 63 6b   sqlite3AddCheck
27bb0 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65  Constraint(Parse
27bc0 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  *, Expr*);.void 
27bd0 73 71 6c 69 74 65 33 41 64 64 44 65 66 61 75 6c  sqlite3AddDefaul
27be0 74 56 61 6c 75 65 28 50 61 72 73 65 2a 2c 45 78  tValue(Parse*,Ex
27bf0 70 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  pr*,const char*,
27c00 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
27c10 69 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c  id sqlite3AddCol
27c20 6c 61 74 65 54 79 70 65 28 50 61 72 73 65 2a 2c  lateType(Parse*,
27c30 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73   Token*);.void s
27c40 71 6c 69 74 65 33 45 6e 64 54 61 62 6c 65 28 50  qlite3EndTable(P
27c50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  arse*,Token*,Tok
27c60 65 6e 2a 2c 75 38 2c 53 65 6c 65 63 74 2a 29 3b  en*,u8,Select*);
27c70 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73  .int sqlite3Pars
27c80 65 55 72 69 28 63 6f 6e 73 74 20 63 68 61 72 2a  eUri(const char*
27c90 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 6e 73  ,const char*,uns
27ca0 69 67 6e 65 64 20 69 6e 74 2a 2c 0a 20 20 20 20  igned int*,.    
27cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27cc0 73 71 6c 69 74 65 33 5f 76 66 73 2a 2a 2c 63 68  sqlite3_vfs**,ch
27cd0 61 72 2a 2a 2c 63 68 61 72 20 2a 2a 29 3b 0a 42  ar**,char **);.B
27ce0 74 72 65 65 20 2a 73 71 6c 69 74 65 33 44 62 4e  tree *sqlite3DbN
27cf0 61 6d 65 54 6f 42 74 72 65 65 28 73 71 6c 69 74  ameToBtree(sqlit
27d00 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  e3*,const char*)
27d10 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
27d20 5f 55 4e 54 45 53 54 41 42 4c 45 0a 23 20 64 65  _UNTESTABLE.# de
27d30 66 69 6e 65 20 73 71 6c 69 74 65 33 46 61 75 6c  fine sqlite3Faul
27d40 74 53 69 6d 28 58 29 20 53 51 4c 49 54 45 5f 4f  tSim(X) SQLITE_O
27d50 4b 0a 23 65 6c 73 65 0a 20 20 69 6e 74 20 73 71  K.#else.  int sq
27d60 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28 69 6e  lite3FaultSim(in
27d70 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 42 69 74 76  t);.#endif..Bitv
27d80 65 63 20 2a 73 71 6c 69 74 65 33 42 69 74 76 65  ec *sqlite3Bitve
27d90 63 43 72 65 61 74 65 28 75 33 32 29 3b 0a 69 6e  cCreate(u32);.in
27da0 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 54  t sqlite3BitvecT
27db0 65 73 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32  est(Bitvec*, u32
27dc0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69  );.int sqlite3Bi
27dd0 74 76 65 63 54 65 73 74 4e 6f 74 4e 75 6c 6c 28  tvecTestNotNull(
27de0 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69  Bitvec*, u32);.i
27df0 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  nt sqlite3Bitvec
27e00 53 65 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32  Set(Bitvec*, u32
27e10 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  );.void sqlite3B
27e20 69 74 76 65 63 43 6c 65 61 72 28 42 69 74 76 65  itvecClear(Bitve
27e30 63 2a 2c 20 75 33 32 2c 20 76 6f 69 64 2a 29 3b  c*, u32, void*);
27e40 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69 74  .void sqlite3Bit
27e50 76 65 63 44 65 73 74 72 6f 79 28 42 69 74 76 65  vecDestroy(Bitve
27e60 63 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33  c*);.u32 sqlite3
27e70 42 69 74 76 65 63 53 69 7a 65 28 42 69 74 76 65  BitvecSize(Bitve
27e80 63 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  c*);.#ifndef SQL
27e90 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 69  ITE_UNTESTABLE.i
27ea0 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  nt sqlite3Bitvec
27eb0 42 75 69 6c 74 69 6e 54 65 73 74 28 69 6e 74 2c  BuiltinTest(int,
27ec0 69 6e 74 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 52  int*);.#endif..R
27ed0 6f 77 53 65 74 20 2a 73 71 6c 69 74 65 33 52 6f  owSet *sqlite3Ro
27ee0 77 53 65 74 49 6e 69 74 28 73 71 6c 69 74 65 33  wSetInit(sqlite3
27ef0 2a 2c 20 76 6f 69 64 2a 2c 20 75 6e 73 69 67 6e  *, void*, unsign
27f00 65 64 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  ed int);.void sq
27f10 6c 69 74 65 33 52 6f 77 53 65 74 43 6c 65 61 72  lite3RowSetClear
27f20 28 52 6f 77 53 65 74 2a 29 3b 0a 76 6f 69 64 20  (RowSet*);.void 
27f30 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73  sqlite3RowSetIns
27f40 65 72 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34  ert(RowSet*, i64
27f50 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f  );.int sqlite3Ro
27f60 77 53 65 74 54 65 73 74 28 52 6f 77 53 65 74 2a  wSetTest(RowSet*
27f70 2c 20 69 6e 74 20 69 42 61 74 63 68 2c 20 69 36  , int iBatch, i6
27f80 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  4);.int sqlite3R
27f90 6f 77 53 65 74 4e 65 78 74 28 52 6f 77 53 65 74  owSetNext(RowSet
27fa0 2a 2c 20 69 36 34 2a 29 3b 0a 0a 76 6f 69 64 20  *, i64*);..void 
27fb0 73 71 6c 69 74 65 33 43 72 65 61 74 65 56 69 65  sqlite3CreateVie
27fc0 77 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c  w(Parse*,Token*,
27fd0 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 45 78  Token*,Token*,Ex
27fe0 70 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a 2c  prList*,Select*,
27ff0 69 6e 74 2c 69 6e 74 29 3b 0a 0a 23 69 66 20 21  int,int);..#if !
28000 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
28010 4d 49 54 5f 56 49 45 57 29 20 7c 7c 20 21 64 65  MIT_VIEW) || !de
28020 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
28030 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29 0a  T_VIRTUALTABLE).
28040 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 69 65    int sqlite3Vie
28050 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28  wGetColumnNames(
28060 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a  Parse*,Table*);.
28070 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
28080 71 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c  qlite3ViewGetCol
28090 75 6d 6e 4e 61 6d 65 73 28 41 2c 42 29 20 30 0a  umnNames(A,B) 0.
280a0 23 65 6e 64 69 66 0a 0a 23 69 66 20 53 51 4c 49  #endif..#if SQLI
280b0 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3e  TE_MAX_ATTACHED>
280c0 33 30 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  30.  int sqlite3
280d0 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 79 44  DbMaskAllZero(yD
280e0 62 4d 61 73 6b 29 3b 0a 23 65 6e 64 69 66 0a 76  bMask);.#endif.v
280f0 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54  oid sqlite3DropT
28100 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63  able(Parse*, Src
28110 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  List*, int, int)
28120 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
28130 64 65 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73  deDropTable(Pars
28140 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c  e*, Table*, int,
28150 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
28160 74 65 33 44 65 6c 65 74 65 54 61 62 6c 65 28 73  te3DeleteTable(s
28170 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29  qlite3*, Table*)
28180 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
28190 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d  _OMIT_AUTOINCREM
281a0 45 4e 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  ENT.  void sqlit
281b0 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42  e3AutoincrementB
281c0 65 67 69 6e 28 50 61 72 73 65 20 2a 70 50 61 72  egin(Parse *pPar
281d0 73 65 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  se);.  void sqli
281e0 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74  te3Autoincrement
281f0 45 6e 64 28 50 61 72 73 65 20 2a 70 50 61 72 73  End(Parse *pPars
28200 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  e);.#else.# defi
28210 6e 65 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e  ne sqlite3Autoin
28220 63 72 65 6d 65 6e 74 42 65 67 69 6e 28 58 29 0a  crementBegin(X).
28230 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
28240 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64  AutoincrementEnd
28250 28 58 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  (X).#endif.void 
28260 73 71 6c 69 74 65 33 49 6e 73 65 72 74 28 50 61  sqlite3Insert(Pa
28270 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
28280 53 65 6c 65 63 74 2a 2c 20 49 64 4c 69 73 74 2a  Select*, IdList*
28290 2c 20 69 6e 74 2c 20 55 70 73 65 72 74 2a 29 3b  , int, Upsert*);
282a0 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 41 72  .void *sqlite3Ar
282b0 72 61 79 41 6c 6c 6f 63 61 74 65 28 73 71 6c 69  rayAllocate(sqli
282c0 74 65 33 2a 2c 76 6f 69 64 2a 2c 69 6e 74 2c 69  te3*,void*,int,i
282d0 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 49 64 4c 69 73  nt*,int*);.IdLis
282e0 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69 73 74  t *sqlite3IdList
282f0 41 70 70 65 6e 64 28 73 71 6c 69 74 65 33 2a 2c  Append(sqlite3*,
28300 20 49 64 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a   IdList*, Token*
28310 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 64  );.int sqlite3Id
28320 4c 69 73 74 49 6e 64 65 78 28 49 64 4c 69 73 74  ListIndex(IdList
28330 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
28340 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  SrcList *sqlite3
28350 53 72 63 4c 69 73 74 45 6e 6c 61 72 67 65 28 73  SrcListEnlarge(s
28360 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74  qlite3*, SrcList
28370 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 53 72  *, int, int);.Sr
28380 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72  cList *sqlite3Sr
28390 63 4c 69 73 74 41 70 70 65 6e 64 28 73 71 6c 69  cListAppend(sqli
283a0 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  te3*, SrcList*, 
283b0 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Token*, Token*);
283c0 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65  .SrcList *sqlite
283d0 33 53 72 63 4c 69 73 74 41 70 70 65 6e 64 46 72  3SrcListAppendFr
283e0 6f 6d 54 65 72 6d 28 50 61 72 73 65 2a 2c 20 53  omTerm(Parse*, S
283f0 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c  rcList*, Token*,
28400 20 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20   Token*,.       
28410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
28430 6f 6b 65 6e 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  oken*, Select*, 
28440 45 78 70 72 2a 2c 20 49 64 4c 69 73 74 2a 29 3b  Expr*, IdList*);
28450 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63  .void sqlite3Src
28460 4c 69 73 74 49 6e 64 65 78 65 64 42 79 28 50 61  ListIndexedBy(Pa
28470 72 73 65 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a  rse *, SrcList *
28480 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64  , Token *);.void
28490 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 46   sqlite3SrcListF
284a0 75 6e 63 41 72 67 73 28 50 61 72 73 65 2a 2c 20  uncArgs(Parse*, 
284b0 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69  SrcList*, ExprLi
284c0 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
284d0 33 49 6e 64 65 78 65 64 42 79 4c 6f 6f 6b 75 70  3IndexedByLookup
284e0 28 50 61 72 73 65 20 2a 2c 20 73 74 72 75 63 74  (Parse *, struct
284f0 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29   SrcList_item *)
28500 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72  ;.void sqlite3Sr
28510 63 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e 54 79  cListShiftJoinTy
28520 70 65 28 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f  pe(SrcList*);.vo
28530 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  id sqlite3SrcLis
28540 74 41 73 73 69 67 6e 43 75 72 73 6f 72 73 28 50  tAssignCursors(P
28550 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29  arse*, SrcList*)
28560 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 64  ;.void sqlite3Id
28570 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74  ListDelete(sqlit
28580 65 33 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76  e3*, IdList*);.v
28590 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69  oid sqlite3SrcLi
285a0 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  stDelete(sqlite3
285b0 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 49 6e  *, SrcList*);.In
285c0 64 65 78 20 2a 73 71 6c 69 74 65 33 41 6c 6c 6f  dex *sqlite3Allo
285d0 63 61 74 65 49 6e 64 65 78 4f 62 6a 65 63 74 28  cateIndexObject(
285e0 73 71 6c 69 74 65 33 2a 2c 69 31 36 2c 69 6e 74  sqlite3*,i16,int
285f0 2c 63 68 61 72 2a 2a 29 3b 0a 76 6f 69 64 20 73  ,char**);.void s
28600 71 6c 69 74 65 33 43 72 65 61 74 65 49 6e 64 65  qlite3CreateInde
28610 78 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c  x(Parse*,Token*,
28620 54 6f 6b 65 6e 2a 2c 53 72 63 4c 69 73 74 2a 2c  Token*,SrcList*,
28630 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 54 6f  ExprList*,int,To
28640 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  ken*,.          
28650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28660 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  Expr*, int, int,
28670 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   u8);.void sqlit
28680 65 33 44 72 6f 70 49 6e 64 65 78 28 50 61 72 73  e3DropIndex(Pars
28690 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e  e*, SrcList*, in
286a0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  t);.int sqlite3S
286b0 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 53 65  elect(Parse*, Se
286c0 6c 65 63 74 2a 2c 20 53 65 6c 65 63 74 44 65 73  lect*, SelectDes
286d0 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c  t*);.Select *sql
286e0 69 74 65 33 53 65 6c 65 63 74 4e 65 77 28 50 61  ite3SelectNew(Pa
286f0 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53  rse*,ExprList*,S
28700 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78  rcList*,Expr*,Ex
28710 70 72 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20  prList*,.       
28720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28730 20 20 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74    Expr*,ExprList
28740 2a 2c 75 33 32 2c 45 78 70 72 2a 29 3b 0a 76 6f  *,u32,Expr*);.vo
28750 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  id sqlite3Select
28760 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c  Delete(sqlite3*,
28770 20 53 65 6c 65 63 74 2a 29 3b 0a 54 61 62 6c 65   Select*);.Table
28780 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74   *sqlite3SrcList
28790 4c 6f 6f 6b 75 70 28 50 61 72 73 65 2a 2c 20 53  Lookup(Parse*, S
287a0 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  rcList*);.int sq
287b0 6c 69 74 65 33 49 73 52 65 61 64 4f 6e 6c 79 28  lite3IsReadOnly(
287c0 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
287d0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
287e0 65 33 4f 70 65 6e 54 61 62 6c 65 28 50 61 72 73  e3OpenTable(Pars
287f0 65 2a 2c 20 69 6e 74 20 69 43 75 72 2c 20 69 6e  e*, int iCur, in
28800 74 20 69 44 62 2c 20 54 61 62 6c 65 2a 2c 20 69  t iDb, Table*, i
28810 6e 74 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64  nt);.#if defined
28820 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55  (SQLITE_ENABLE_U
28830 50 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d  PDATE_DELETE_LIM
28840 49 54 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  IT) && !defined(
28850 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 55 42 51  SQLITE_OMIT_SUBQ
28860 55 45 52 59 29 0a 45 78 70 72 20 2a 73 71 6c 69  UERY).Expr *sqli
28870 74 65 33 4c 69 6d 69 74 57 68 65 72 65 28 50 61  te3LimitWhere(Pa
28880 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78  rse*,SrcList*,Ex
28890 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78  pr*,ExprList*,Ex
288a0 70 72 2a 2c 63 68 61 72 2a 29 3b 0a 23 65 6e 64  pr*,char*);.#end
288b0 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  if.void sqlite3D
288c0 65 6c 65 74 65 46 72 6f 6d 28 50 61 72 73 65 2a  eleteFrom(Parse*
288d0 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72  , SrcList*, Expr
288e0 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 45 78  *, ExprList*, Ex
288f0 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
28900 65 33 55 70 64 61 74 65 28 50 61 72 73 65 2a 2c  e3Update(Parse*,
28910 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c   SrcList*, ExprL
28920 69 73 74 2a 2c 45 78 70 72 2a 2c 69 6e 74 2c 45  ist*,Expr*,int,E
28930 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 0a  xprList*,Expr*,.
28940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28950 20 20 20 55 70 73 65 72 74 2a 29 3b 0a 57 68 65     Upsert*);.Whe
28960 72 65 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 57  reInfo *sqlite3W
28970 68 65 72 65 42 65 67 69 6e 28 50 61 72 73 65 2a  hereBegin(Parse*
28980 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c  ,SrcList*,Expr*,
28990 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 4c 69  ExprList*,ExprLi
289a0 73 74 2a 2c 75 31 36 2c 69 6e 74 29 3b 0a 76 6f  st*,u16,int);.vo
289b0 69 64 20 73 71 6c 69 74 65 33 57 68 65 72 65 45  id sqlite3WhereE
289c0 6e 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  nd(WhereInfo*);.
289d0 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33 57 68  LogEst sqlite3Wh
289e0 65 72 65 4f 75 74 70 75 74 52 6f 77 43 6f 75 6e  ereOutputRowCoun
289f0 74 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69  t(WhereInfo*);.i
28a00 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49  nt sqlite3WhereI
28a10 73 44 69 73 74 69 6e 63 74 28 57 68 65 72 65 49  sDistinct(WhereI
28a20 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  nfo*);.int sqlit
28a30 65 33 57 68 65 72 65 49 73 4f 72 64 65 72 65 64  e3WhereIsOrdered
28a40 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e  (WhereInfo*);.in
28a50 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 4f 72  t sqlite3WhereOr
28a60 64 65 72 65 64 49 6e 6e 65 72 4c 6f 6f 70 28 57  deredInnerLoop(W
28a70 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
28a80 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 53 6f  sqlite3WhereIsSo
28a90 72 74 65 64 28 57 68 65 72 65 49 6e 66 6f 2a 29  rted(WhereInfo*)
28aa0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65  ;.int sqlite3Whe
28ab0 72 65 43 6f 6e 74 69 6e 75 65 4c 61 62 65 6c 28  reContinueLabel(
28ac0 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74  WhereInfo*);.int
28ad0 20 73 71 6c 69 74 65 33 57 68 65 72 65 42 72 65   sqlite3WhereBre
28ae0 61 6b 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66  akLabel(WhereInf
28af0 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  o*);.int sqlite3
28b00 57 68 65 72 65 4f 6b 4f 6e 65 50 61 73 73 28 57  WhereOkOnePass(W
28b10 68 65 72 65 49 6e 66 6f 2a 2c 20 69 6e 74 2a 29  hereInfo*, int*)
28b20 3b 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50 41 53  ;.#define ONEPAS
28b30 53 5f 4f 46 46 20 20 20 20 20 20 30 20 20 20 20  S_OFF      0    
28b40 20 20 20 20 2f 2a 20 55 73 65 20 6f 66 20 4f 4e      /* Use of ON
28b50 45 50 41 53 53 20 6e 6f 74 20 61 6c 6c 6f 77 65  EPASS not allowe
28b60 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 4e 45  d */.#define ONE
28b70 50 41 53 53 5f 53 49 4e 47 4c 45 20 20 20 31 20  PASS_SINGLE   1 
28b80 20 20 20 20 20 20 20 2f 2a 20 4f 4e 45 50 41 53         /* ONEPAS
28b90 53 20 76 61 6c 69 64 20 66 6f 72 20 61 20 73 69  S valid for a si
28ba0 6e 67 6c 65 20 72 6f 77 20 75 70 64 61 74 65 20  ngle row update 
28bb0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50 41  */.#define ONEPA
28bc0 53 53 5f 4d 55 4c 54 49 20 20 20 20 32 20 20 20  SS_MULTI    2   
28bd0 20 20 20 20 20 2f 2a 20 4f 4e 45 50 41 53 53 20       /* ONEPASS 
28be0 69 73 20 76 61 6c 69 64 20 66 6f 72 20 6d 75 6c  is valid for mul
28bf0 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 76 6f  tiple rows */.vo
28c00 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
28c10 64 65 4c 6f 61 64 49 6e 64 65 78 43 6f 6c 75 6d  deLoadIndexColum
28c20 6e 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a  n(Parse*, Index*
28c30 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
28c40 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
28c50 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 28 50  rCodeGetColumn(P
28c60 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
28c70 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38  nt, int, int, u8
28c80 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
28c90 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e  xprCodeGetColumn
28ca0 54 6f 52 65 67 28 50 61 72 73 65 2a 2c 20 54 61  ToReg(Parse*, Ta
28cb0 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ble*, int, int, 
28cc0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
28cd0 65 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c  e3ExprCodeGetCol
28ce0 75 6d 6e 4f 66 54 61 62 6c 65 28 56 64 62 65 2a  umnOfTable(Vdbe*
28cf0 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69  , Table*, int, i
28d00 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
28d10 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 4d 6f  qlite3ExprCodeMo
28d20 76 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  ve(Parse*, int, 
28d30 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
28d40 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65  sqlite3ExprCache
28d50 53 74 6f 72 65 28 50 61 72 73 65 2a 2c 20 69 6e  Store(Parse*, in
28d60 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  t, int, int);.vo
28d70 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61  id sqlite3ExprCa
28d80 63 68 65 50 75 73 68 28 50 61 72 73 65 2a 29 3b  chePush(Parse*);
28d90 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
28da0 72 43 61 63 68 65 50 6f 70 28 50 61 72 73 65 2a  rCachePop(Parse*
28db0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
28dc0 78 70 72 43 61 63 68 65 52 65 6d 6f 76 65 28 50  xprCacheRemove(P
28dd0 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  arse*, int, int)
28de0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
28df0 70 72 43 61 63 68 65 43 6c 65 61 72 28 50 61 72  prCacheClear(Par
28e00 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
28e10 65 33 45 78 70 72 43 61 63 68 65 41 66 66 69 6e  e3ExprCacheAffin
28e20 69 74 79 43 68 61 6e 67 65 28 50 61 72 73 65 2a  ityChange(Parse*
28e30 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
28e40 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
28e50 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  e(Parse*, Expr*,
28e60 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
28e70 74 65 33 45 78 70 72 43 6f 64 65 43 6f 70 79 28  te3ExprCodeCopy(
28e80 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
28e90 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
28ea0 33 45 78 70 72 43 6f 64 65 46 61 63 74 6f 72 61  3ExprCodeFactora
28eb0 62 6c 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ble(Parse*, Expr
28ec0 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
28ed0 69 74 65 33 45 78 70 72 43 6f 64 65 41 74 49 6e  ite3ExprCodeAtIn
28ee0 69 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  it(Parse*, Expr*
28ef0 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
28f00 74 65 33 45 78 70 72 43 6f 64 65 54 65 6d 70 28  te3ExprCodeTemp(
28f10 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
28f20 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  nt*);.int sqlite
28f30 33 45 78 70 72 43 6f 64 65 54 61 72 67 65 74 28  3ExprCodeTarget(
28f40 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
28f50 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
28f60 33 45 78 70 72 43 6f 64 65 41 6e 64 43 61 63 68  3ExprCodeAndCach
28f70 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  e(Parse*, Expr*,
28f80 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
28f90 65 33 45 78 70 72 43 6f 64 65 45 78 70 72 4c 69  e3ExprCodeExprLi
28fa0 73 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c  st(Parse*, ExprL
28fb0 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ist*, int, int, 
28fc0 75 38 29 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c  u8);.#define SQL
28fd0 49 54 45 5f 45 43 45 4c 5f 44 55 50 20 20 20 20  ITE_ECEL_DUP    
28fe0 20 20 30 78 30 31 20 20 2f 2a 20 44 65 65 70 2c    0x01  /* Deep,
28ff0 20 6e 6f 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70   not shallow cop
29000 69 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ies */.#define S
29010 51 4c 49 54 45 5f 45 43 45 4c 5f 46 41 43 54 4f  QLITE_ECEL_FACTO
29020 52 20 20 20 30 78 30 32 20 20 2f 2a 20 46 61 63  R   0x02  /* Fac
29030 74 6f 72 20 6f 75 74 20 63 6f 6e 73 74 61 6e 74  tor out constant
29040 20 74 65 72 6d 73 20 2a 2f 0a 23 64 65 66 69 6e   terms */.#defin
29050 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 52 45  e SQLITE_ECEL_RE
29060 46 20 20 20 20 20 20 30 78 30 34 20 20 2f 2a 20  F      0x04  /* 
29070 55 73 65 20 45 78 70 72 4c 69 73 74 2e 75 2e 78  Use ExprList.u.x
29080 2e 69 4f 72 64 65 72 42 79 43 6f 6c 20 2a 2f 0a  .iOrderByCol */.
29090 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45  #define SQLITE_E
290a0 43 45 4c 5f 4f 4d 49 54 52 45 46 20 20 30 78 30  CEL_OMITREF  0x0
290b0 38 20 20 2f 2a 20 4f 6d 69 74 20 69 66 20 45 78  8  /* Omit if Ex
290c0 70 72 4c 69 73 74 2e 75 2e 78 2e 69 4f 72 64 65  prList.u.x.iOrde
290d0 72 42 79 43 6f 6c 20 2a 2f 0a 76 6f 69 64 20 73  rByCol */.void s
290e0 71 6c 69 74 65 33 45 78 70 72 49 66 54 72 75 65  qlite3ExprIfTrue
290f0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
29100 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
29110 73 71 6c 69 74 65 33 45 78 70 72 49 66 46 61 6c  sqlite3ExprIfFal
29120 73 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  se(Parse*, Expr*
29130 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
29140 64 20 73 71 6c 69 74 65 33 45 78 70 72 49 66 46  d sqlite3ExprIfF
29150 61 6c 73 65 44 75 70 28 50 61 72 73 65 2a 2c 20  alseDup(Parse*, 
29160 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  Expr*, int, int)
29170 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33  ;.Table *sqlite3
29180 46 69 6e 64 54 61 62 6c 65 28 73 71 6c 69 74 65  FindTable(sqlite
29190 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  3*,const char*, 
291a0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 64  const char*);.#d
291b0 65 66 69 6e 65 20 4c 4f 43 41 54 45 5f 56 49 45  efine LOCATE_VIE
291c0 57 20 20 20 20 30 78 30 31 0a 23 64 65 66 69 6e  W    0x01.#defin
291d0 65 20 4c 4f 43 41 54 45 5f 4e 4f 45 52 52 20 20  e LOCATE_NOERR  
291e0 20 30 78 30 32 0a 54 61 62 6c 65 20 2a 73 71 6c   0x02.Table *sql
291f0 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 28  ite3LocateTable(
29200 50 61 72 73 65 2a 2c 75 33 32 20 66 6c 61 67 73  Parse*,u32 flags
29210 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f  ,const char*, co
29220 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54 61 62 6c  nst char*);.Tabl
29230 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65  e *sqlite3Locate
29240 54 61 62 6c 65 49 74 65 6d 28 50 61 72 73 65 2a  TableItem(Parse*
29250 2c 75 33 32 20 66 6c 61 67 73 2c 73 74 72 75 63  ,u32 flags,struc
29260 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a  t SrcList_item *
29270 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65  );.Index *sqlite
29280 33 46 69 6e 64 49 6e 64 65 78 28 73 71 6c 69 74  3FindIndex(sqlit
29290 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
292a0 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76   const char*);.v
292b0 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  oid sqlite3Unlin
292c0 6b 41 6e 64 44 65 6c 65 74 65 54 61 62 6c 65 28  kAndDeleteTable(
292d0 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e  sqlite3*,int,con
292e0 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
292f0 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64  sqlite3UnlinkAnd
29300 44 65 6c 65 74 65 49 6e 64 65 78 28 73 71 6c 69  DeleteIndex(sqli
29310 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  te3*,int,const c
29320 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
29330 74 65 33 56 61 63 75 75 6d 28 50 61 72 73 65 2a  te3Vacuum(Parse*
29340 2c 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71  ,Token*);.int sq
29350 6c 69 74 65 33 52 75 6e 56 61 63 75 75 6d 28 63  lite3RunVacuum(c
29360 68 61 72 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 2c  har**, sqlite3*,
29370 20 69 6e 74 29 3b 0a 63 68 61 72 20 2a 73 71 6c   int);.char *sql
29380 69 74 65 33 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65  ite3NameFromToke
29390 6e 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65  n(sqlite3*, Toke
293a0 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
293b0 45 78 70 72 43 6f 6d 70 61 72 65 28 50 61 72 73  ExprCompare(Pars
293c0 65 2a 2c 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c  e*,Expr*, Expr*,
293d0 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
293e0 65 33 45 78 70 72 43 6f 6d 70 61 72 65 53 6b 69  e3ExprCompareSki
293f0 70 28 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20  p(Expr*, Expr*, 
29400 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
29410 33 45 78 70 72 4c 69 73 74 43 6f 6d 70 61 72 65  3ExprListCompare
29420 28 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72  (ExprList*, Expr
29430 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  List*, int);.int
29440 20 73 71 6c 69 74 65 33 45 78 70 72 49 6d 70 6c   sqlite3ExprImpl
29450 69 65 73 45 78 70 72 28 50 61 72 73 65 2a 2c 45  iesExpr(Parse*,E
29460 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  xpr*, Expr*, int
29470 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
29480 70 72 49 6d 70 6c 69 65 73 4e 6f 6e 4e 75 6c 6c  prImpliesNonNull
29490 52 6f 77 28 45 78 70 72 2a 2c 69 6e 74 29 3b 0a  Row(Expr*,int);.
294a0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
294b0 41 6e 61 6c 79 7a 65 41 67 67 72 65 67 61 74 65  AnalyzeAggregate
294c0 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20  s(NameContext*, 
294d0 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
294e0 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a 65 41  ite3ExprAnalyzeA
294f0 67 67 4c 69 73 74 28 4e 61 6d 65 43 6f 6e 74 65  ggList(NameConte
29500 78 74 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a  xt*,ExprList*);.
29510 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
29520 6f 76 65 72 65 64 42 79 49 6e 64 65 78 28 45 78  overedByIndex(Ex
29530 70 72 2a 2c 20 69 6e 74 20 69 43 75 72 2c 20 49  pr*, int iCur, I
29540 6e 64 65 78 20 2a 70 49 64 78 29 3b 0a 69 6e 74  ndex *pIdx);.int
29550 20 73 71 6c 69 74 65 33 46 75 6e 63 74 69 6f 6e   sqlite3Function
29560 55 73 65 73 54 68 69 73 53 72 63 28 45 78 70 72  UsesThisSrc(Expr
29570 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 56 64  *, SrcList*);.Vd
29580 62 65 20 2a 73 71 6c 69 74 65 33 47 65 74 56 64  be *sqlite3GetVd
29590 62 65 28 50 61 72 73 65 2a 29 3b 0a 23 69 66 6e  be(Parse*);.#ifn
295a0 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53  def SQLITE_UNTES
295b0 54 41 42 4c 45 0a 76 6f 69 64 20 73 71 6c 69 74  TABLE.void sqlit
295c0 65 33 50 72 6e 67 53 61 76 65 53 74 61 74 65 28  e3PrngSaveState(
295d0 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69  void);.void sqli
295e0 74 65 33 50 72 6e 67 52 65 73 74 6f 72 65 53 74  te3PrngRestoreSt
295f0 61 74 65 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69  ate(void);.#endi
29600 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f  f.void sqlite3Ro
29610 6c 6c 62 61 63 6b 41 6c 6c 28 73 71 6c 69 74 65  llbackAll(sqlite
29620 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  3*,int);.void sq
29630 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53  lite3CodeVerifyS
29640 63 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 69 6e  chema(Parse*, in
29650 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
29660 43 6f 64 65 56 65 72 69 66 79 4e 61 6d 65 64 53  CodeVerifyNamedS
29670 63 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 63 6f  chema(Parse*, co
29680 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 29 3b 0a  nst char *zDb);.
29690 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69  void sqlite3Begi
296a0 6e 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72  nTransaction(Par
296b0 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  se*, int);.void 
296c0 73 71 6c 69 74 65 33 45 6e 64 54 72 61 6e 73 61  sqlite3EndTransa
296d0 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 69 6e 74  ction(Parse*,int
296e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
296f0 61 76 65 70 6f 69 6e 74 28 50 61 72 73 65 2a 2c  avepoint(Parse*,
29700 20 69 6e 74 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76   int, Token*);.v
29710 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73 65  oid sqlite3Close
29720 53 61 76 65 70 6f 69 6e 74 73 28 73 71 6c 69 74  Savepoints(sqlit
29730 65 33 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  e3 *);.void sqli
29740 74 65 33 4c 65 61 76 65 4d 75 74 65 78 41 6e 64  te3LeaveMutexAnd
29750 43 6c 6f 73 65 5a 6f 6d 62 69 65 28 73 71 6c 69  CloseZombie(sqli
29760 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  te3*);.int sqlit
29770 65 33 45 78 70 72 49 64 54 6f 54 72 75 65 46 61  e3ExprIdToTrueFa
29780 6c 73 65 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20  lse(Expr*);.int 
29790 73 71 6c 69 74 65 33 45 78 70 72 54 72 75 74 68  sqlite3ExprTruth
297a0 56 61 6c 75 65 28 63 6f 6e 73 74 20 45 78 70 72  Value(const Expr
297b0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
297c0 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 28 45 78  xprIsConstant(Ex
297d0 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
297e0 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4e  3ExprIsConstantN
297f0 6f 74 4a 6f 69 6e 28 45 78 70 72 2a 29 3b 0a 69  otJoin(Expr*);.i
29800 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73  nt sqlite3ExprIs
29810 43 6f 6e 73 74 61 6e 74 4f 72 46 75 6e 63 74 69  ConstantOrFuncti
29820 6f 6e 28 45 78 70 72 2a 2c 20 75 38 29 3b 0a 69  on(Expr*, u8);.i
29830 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73  nt sqlite3ExprIs
29840 43 6f 6e 73 74 61 6e 74 4f 72 47 72 6f 75 70 42  ConstantOrGroupB
29850 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  y(Parse*, Expr*,
29860 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74   ExprList*);.int
29870 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 54 61   sqlite3ExprIsTa
29880 62 6c 65 43 6f 6e 73 74 61 6e 74 28 45 78 70 72  bleConstant(Expr
29890 2a 2c 69 6e 74 29 3b 0a 23 69 66 64 65 66 20 53  *,int);.#ifdef S
298a0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 55 52  QLITE_ENABLE_CUR
298b0 53 4f 52 5f 48 49 4e 54 53 0a 69 6e 74 20 73 71  SOR_HINTS.int sq
298c0 6c 69 74 65 33 45 78 70 72 43 6f 6e 74 61 69 6e  lite3ExprContain
298d0 73 53 75 62 71 75 65 72 79 28 45 78 70 72 2a 29  sSubquery(Expr*)
298e0 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c  ;.#endif.int sql
298f0 69 74 65 33 45 78 70 72 49 73 49 6e 74 65 67 65  ite3ExprIsIntege
29900 72 28 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a  r(Expr*, int*);.
29910 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
29920 61 6e 42 65 4e 75 6c 6c 28 63 6f 6e 73 74 20 45  anBeNull(const E
29930 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
29940 65 33 45 78 70 72 4e 65 65 64 73 4e 6f 41 66 66  e3ExprNeedsNoAff
29950 69 6e 69 74 79 43 68 61 6e 67 65 28 63 6f 6e 73  inityChange(cons
29960 74 20 45 78 70 72 2a 2c 20 63 68 61 72 29 3b 0a  t Expr*, char);.
29970 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52 6f 77  int sqlite3IsRow
29980 69 64 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  id(const char*);
29990 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e  .void sqlite3Gen
299a0 65 72 61 74 65 52 6f 77 44 65 6c 65 74 65 28 0a  erateRowDelete(.
299b0 20 20 20 20 50 61 72 73 65 2a 2c 54 61 62 6c 65      Parse*,Table
299c0 2a 2c 54 72 69 67 67 65 72 2a 2c 69 6e 74 2c 69  *,Trigger*,int,i
299d0 6e 74 2c 69 6e 74 2c 69 31 36 2c 75 38 2c 75 38  nt,int,i16,u8,u8
299e0 2c 75 38 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  ,u8,int);.void s
299f0 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 52 6f  qlite3GenerateRo
29a00 77 49 6e 64 65 78 44 65 6c 65 74 65 28 50 61 72  wIndexDelete(Par
29a10 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
29a20 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74  , int, int*, int
29a30 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65  );.int sqlite3Ge
29a40 6e 65 72 61 74 65 49 6e 64 65 78 4b 65 79 28 50  nerateIndexKey(P
29a50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20 69  arse*, Index*, i
29a60 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  nt, int, int, in
29a70 74 2a 2c 49 6e 64 65 78 2a 2c 69 6e 74 29 3b 0a  t*,Index*,int);.
29a80 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f  void sqlite3Reso
29a90 6c 76 65 50 61 72 74 49 64 78 4c 61 62 65 6c 28  lvePartIdxLabel(
29aa0 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69  Parse*,int);.voi
29ab0 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74  d sqlite3Generat
29ac0 65 43 6f 6e 73 74 72 61 69 6e 74 43 68 65 63 6b  eConstraintCheck
29ad0 73 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c  s(Parse*,Table*,
29ae0 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  int*,int,int,int
29af0 2c 69 6e 74 2c 0a 20 20 20 20 20 20 20 20 20 20  ,int,.          
29b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29b10 20 20 20 20 20 20 20 20 20 20 20 75 38 2c 75 38             u8,u8
29b20 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a 2c 55  ,int,int*,int*,U
29b30 70 73 65 72 74 2a 29 3b 0a 23 69 66 64 65 66 20  psert*);.#ifdef 
29b40 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4e 55  SQLITE_ENABLE_NU
29b50 4c 4c 5f 54 52 49 4d 0a 20 20 76 6f 69 64 20 73  LL_TRIM.  void s
29b60 71 6c 69 74 65 33 53 65 74 4d 61 6b 65 52 65 63  qlite3SetMakeRec
29b70 6f 72 64 50 35 28 56 64 62 65 2a 2c 54 61 62 6c  ordP5(Vdbe*,Tabl
29b80 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  e*);.#else.# def
29b90 69 6e 65 20 73 71 6c 69 74 65 33 53 65 74 4d 61  ine sqlite3SetMa
29ba0 6b 65 52 65 63 6f 72 64 50 35 28 41 2c 42 29 0a  keRecordP5(A,B).
29bb0 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
29bc0 74 65 33 43 6f 6d 70 6c 65 74 65 49 6e 73 65 72  te3CompleteInser
29bd0 74 69 6f 6e 28 50 61 72 73 65 2a 2c 54 61 62 6c  tion(Parse*,Tabl
29be0 65 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69  e*,int,int,int,i
29bf0 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29  nt*,int,int,int)
29c00 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 70 65  ;.int sqlite3Ope
29c10 6e 54 61 62 6c 65 41 6e 64 49 6e 64 69 63 65 73  nTableAndIndices
29c20 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
29c30 20 69 6e 74 2c 20 75 38 2c 20 69 6e 74 2c 20 75   int, u8, int, u
29c40 38 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b  8*, int*, int*);
29c50 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67  .void sqlite3Beg
29c60 69 6e 57 72 69 74 65 4f 70 65 72 61 74 69 6f 6e  inWriteOperation
29c70 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e  (Parse*, int, in
29c80 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
29c90 4d 75 6c 74 69 57 72 69 74 65 28 50 61 72 73 65  MultiWrite(Parse
29ca0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
29cb0 4d 61 79 41 62 6f 72 74 28 50 61 72 73 65 2a 29  MayAbort(Parse*)
29cc0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 48 61  ;.void sqlite3Ha
29cd0 6c 74 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72  ltConstraint(Par
29ce0 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 63  se*, int, int, c
29cf0 68 61 72 2a 2c 20 69 38 2c 20 75 38 29 3b 0a 76  har*, i8, u8);.v
29d00 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 69 71 75  oid sqlite3Uniqu
29d10 65 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73  eConstraint(Pars
29d20 65 2a 2c 20 69 6e 74 2c 20 49 6e 64 65 78 2a 29  e*, int, Index*)
29d30 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f  ;.void sqlite3Ro
29d40 77 69 64 43 6f 6e 73 74 72 61 69 6e 74 28 50 61  widConstraint(Pa
29d50 72 73 65 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65  rse*, int, Table
29d60 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  *);.Expr *sqlite
29d70 33 45 78 70 72 44 75 70 28 73 71 6c 69 74 65 33  3ExprDup(sqlite3
29d80 2a 2c 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 45 78  *,Expr*,int);.Ex
29d90 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45  prList *sqlite3E
29da0 78 70 72 4c 69 73 74 44 75 70 28 73 71 6c 69 74  xprListDup(sqlit
29db0 65 33 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e  e3*,ExprList*,in
29dc0 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c  t);.SrcList *sql
29dd0 69 74 65 33 53 72 63 4c 69 73 74 44 75 70 28 73  ite3SrcListDup(s
29de0 71 6c 69 74 65 33 2a 2c 53 72 63 4c 69 73 74 2a  qlite3*,SrcList*
29df0 2c 69 6e 74 29 3b 0a 49 64 4c 69 73 74 20 2a 73  ,int);.IdList *s
29e00 71 6c 69 74 65 33 49 64 4c 69 73 74 44 75 70 28  qlite3IdListDup(
29e10 73 71 6c 69 74 65 33 2a 2c 49 64 4c 69 73 74 2a  sqlite3*,IdList*
29e20 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69 74  );.Select *sqlit
29e30 65 33 53 65 6c 65 63 74 44 75 70 28 73 71 6c 69  e3SelectDup(sqli
29e40 74 65 33 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74  te3*,Select*,int
29e50 29 3b 0a 23 69 66 20 53 45 4c 45 43 54 54 52 41  );.#if SELECTTRA
29e60 43 45 5f 45 4e 41 42 4c 45 44 0a 76 6f 69 64 20  CE_ENABLED.void 
29e70 73 71 6c 69 74 65 33 53 65 6c 65 63 74 53 65 74  sqlite3SelectSet
29e80 4e 61 6d 65 28 53 65 6c 65 63 74 2a 2c 63 6f 6e  Name(Select*,con
29e90 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65  st char*);.#else
29ea0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
29eb0 33 53 65 6c 65 63 74 53 65 74 4e 61 6d 65 28 41  3SelectSetName(A
29ec0 2c 42 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  ,B).#endif.void 
29ed0 73 71 6c 69 74 65 33 49 6e 73 65 72 74 42 75 69  sqlite3InsertBui
29ee0 6c 74 69 6e 46 75 6e 63 73 28 46 75 6e 63 44 65  ltinFuncs(FuncDe
29ef0 66 2a 2c 69 6e 74 29 3b 0a 46 75 6e 63 44 65 66  f*,int);.FuncDef
29f00 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 46 75 6e   *sqlite3FindFun
29f10 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 63  ction(sqlite3*,c
29f20 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 2c 75  onst char*,int,u
29f30 38 2c 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69  8,u8);.void sqli
29f40 74 65 33 52 65 67 69 73 74 65 72 42 75 69 6c 74  te3RegisterBuilt
29f50 69 6e 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64  inFunctions(void
29f60 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
29f70 65 67 69 73 74 65 72 44 61 74 65 54 69 6d 65 46  egisterDateTimeF
29f80 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a  unctions(void);.
29f90 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69  void sqlite3Regi
29fa0 73 74 65 72 50 65 72 43 6f 6e 6e 65 63 74 69 6f  sterPerConnectio
29fb0 6e 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e  nBuiltinFunction
29fc0 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74  s(sqlite3*);.int
29fd0 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68   sqlite3SafetyCh
29fe0 65 63 6b 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b  eckOk(sqlite3*);
29ff0 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65  .int sqlite3Safe
2a000 74 79 43 68 65 63 6b 53 69 63 6b 4f 72 4f 6b 28  tyCheckSickOrOk(
2a010 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20  sqlite3*);.void 
2a020 73 71 6c 69 74 65 33 43 68 61 6e 67 65 43 6f 6f  sqlite3ChangeCoo
2a030 6b 69 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 29  kie(Parse*, int)
2a040 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  ;..#if !defined(
2a050 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57  SQLITE_OMIT_VIEW
2a060 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
2a070 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45  LITE_OMIT_TRIGGE
2a080 52 29 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  R).void sqlite3M
2a090 61 74 65 72 69 61 6c 69 7a 65 56 69 65 77 28 50  aterializeView(P
2a0a0 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45  arse*, Table*, E
2a0b0 78 70 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  xpr*, ExprList*,
2a0c0 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 23 65 6e 64  Expr*,int);.#end
2a0d0 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  if..#ifndef SQLI
2a0e0 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a  TE_OMIT_TRIGGER.
2a0f0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65    void sqlite3Be
2a100 67 69 6e 54 72 69 67 67 65 72 28 50 61 72 73 65  ginTrigger(Parse
2a110 2a 2c 20 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  *, Token*,Token*
2a120 2c 69 6e 74 2c 69 6e 74 2c 49 64 4c 69 73 74 2a  ,int,int,IdList*
2a130 2c 53 72 63 4c 69 73 74 2a 2c 0a 20 20 20 20 20  ,SrcList*,.     
2a140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a150 20 20 20 20 20 20 45 78 70 72 2a 2c 69 6e 74 2c        Expr*,int,
2a160 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71   int);.  void sq
2a170 6c 69 74 65 33 46 69 6e 69 73 68 54 72 69 67 67  lite3FinishTrigg
2a180 65 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67  er(Parse*, Trigg
2a190 65 72 53 74 65 70 2a 2c 20 54 6f 6b 65 6e 2a 29  erStep*, Token*)
2a1a0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2a1b0 44 72 6f 70 54 72 69 67 67 65 72 28 50 61 72 73  DropTrigger(Pars
2a1c0 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e  e*, SrcList*, in
2a1d0 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  t);.  void sqlit
2a1e0 65 33 44 72 6f 70 54 72 69 67 67 65 72 50 74 72  e3DropTriggerPtr
2a1f0 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72  (Parse*, Trigger
2a200 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73  *);.  Trigger *s
2a210 71 6c 69 74 65 33 54 72 69 67 67 65 72 73 45 78  qlite3TriggersEx
2a220 69 73 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62  ist(Parse *, Tab
2a230 6c 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69  le*, int, ExprLi
2a240 73 74 2a 2c 20 69 6e 74 20 2a 70 4d 61 73 6b 29  st*, int *pMask)
2a250 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c  ;.  Trigger *sql
2a260 69 74 65 33 54 72 69 67 67 65 72 4c 69 73 74 28  ite3TriggerList(
2a270 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65 20 2a  Parse *, Table *
2a280 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
2a290 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 28  3CodeRowTrigger(
2a2a0 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 20  Parse*, Trigger 
2a2b0 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74  *, int, ExprList
2a2c0 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65 20 2a 2c  *, int, Table *,
2a2d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74               int
2a2f0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76  , int, int);.  v
2a300 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52  oid sqlite3CodeR
2a310 6f 77 54 72 69 67 67 65 72 44 69 72 65 63 74 28  owTriggerDirect(
2a320 50 61 72 73 65 20 2a 2c 20 54 72 69 67 67 65 72  Parse *, Trigger
2a330 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74   *, Table *, int
2a340 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76  , int, int);.  v
2a350 6f 69 64 20 73 71 6c 69 74 65 56 69 65 77 54 72  oid sqliteViewTr
2a360 69 67 67 65 72 73 28 50 61 72 73 65 2a 2c 20 54  iggers(Parse*, T
2a370 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  able*, Expr*, in
2a380 74 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 20  t, ExprList*);. 
2a390 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c   void sqlite3Del
2a3a0 65 74 65 54 72 69 67 67 65 72 53 74 65 70 28 73  eteTriggerStep(s
2a3b0 71 6c 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72  qlite3*, Trigger
2a3c0 53 74 65 70 2a 29 3b 0a 20 20 54 72 69 67 67 65  Step*);.  Trigge
2a3d0 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72  rStep *sqlite3Tr
2a3e0 69 67 67 65 72 53 65 6c 65 63 74 53 74 65 70 28  iggerSelectStep(
2a3f0 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a  sqlite3*,Select*
2a400 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
2a410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a420 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20            const 
2a430 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
2a440 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65  *);.  TriggerSte
2a450 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65  p *sqlite3Trigge
2a460 72 49 6e 73 65 72 74 53 74 65 70 28 73 71 6c 69  rInsertStep(sqli
2a470 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 49 64 4c  te3*,Token*, IdL
2a480 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  ist*,.          
2a490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 65                Se
2a4b0 6c 65 63 74 2a 2c 75 38 2c 55 70 73 65 72 74 2a  lect*,u8,Upsert*
2a4c0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
2a4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a4e0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20            const 
2a4f0 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
2a500 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65  *);.  TriggerSte
2a510 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65  p *sqlite3Trigge
2a520 72 55 70 64 61 74 65 53 74 65 70 28 73 71 6c 69  rUpdateStep(sqli
2a530 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72  te3*,Token*,Expr
2a540 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20 75 38  List*, Expr*, u8
2a550 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
2a560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a570 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20            const 
2a580 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
2a590 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65  *);.  TriggerSte
2a5a0 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65  p *sqlite3Trigge
2a5b0 72 44 65 6c 65 74 65 53 74 65 70 28 73 71 6c 69  rDeleteStep(sqli
2a5c0 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 45 78 70  te3*,Token*, Exp
2a5d0 72 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  r*,.            
2a5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a5f0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73              cons
2a600 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
2a610 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  ar*);.  void sql
2a620 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67 65  ite3DeleteTrigge
2a630 72 28 73 71 6c 69 74 65 33 2a 2c 20 54 72 69 67  r(sqlite3*, Trig
2a640 67 65 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  ger*);.  void sq
2a650 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
2a660 6c 65 74 65 54 72 69 67 67 65 72 28 73 71 6c 69  leteTrigger(sqli
2a670 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  te3*,int,const c
2a680 68 61 72 2a 29 3b 0a 20 20 75 33 32 20 73 71 6c  har*);.  u32 sql
2a690 69 74 65 33 54 72 69 67 67 65 72 43 6f 6c 6d 61  ite3TriggerColma
2a6a0 73 6b 28 50 61 72 73 65 2a 2c 54 72 69 67 67 65  sk(Parse*,Trigge
2a6b0 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74  r*,ExprList*,int
2a6c0 2c 69 6e 74 2c 54 61 62 6c 65 2a 2c 69 6e 74 29  ,int,Table*,int)
2a6d0 3b 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ;.# define sqlit
2a6e0 65 33 50 61 72 73 65 54 6f 70 6c 65 76 65 6c 28  e3ParseToplevel(
2a6f0 70 29 20 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76  p) ((p)->pToplev
2a700 65 6c 20 3f 20 28 70 29 2d 3e 70 54 6f 70 6c 65  el ? (p)->pTople
2a710 76 65 6c 20 3a 20 28 70 29 29 0a 23 20 64 65 66  vel : (p)).# def
2a720 69 6e 65 20 73 71 6c 69 74 65 33 49 73 54 6f 70  ine sqlite3IsTop
2a730 6c 65 76 65 6c 28 70 29 20 28 28 70 29 2d 3e 70  level(p) ((p)->p
2a740 54 6f 70 6c 65 76 65 6c 3d 3d 30 29 0a 23 65 6c  Toplevel==0).#el
2a750 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
2a760 74 65 33 54 72 69 67 67 65 72 73 45 78 69 73 74  te3TriggersExist
2a770 28 42 2c 43 2c 44 2c 45 2c 46 29 20 30 0a 23 20  (B,C,D,E,F) 0.# 
2a780 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 44 65  define sqlite3De
2a790 6c 65 74 65 54 72 69 67 67 65 72 28 41 2c 42 29  leteTrigger(A,B)
2a7a0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2a7b0 33 44 72 6f 70 54 72 69 67 67 65 72 50 74 72 28  3DropTriggerPtr(
2a7c0 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71  A,B).# define sq
2a7d0 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
2a7e0 6c 65 74 65 54 72 69 67 67 65 72 28 41 2c 42 2c  leteTrigger(A,B,
2a7f0 43 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  C).# define sqli
2a800 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65  te3CodeRowTrigge
2a810 72 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 2c  r(A,B,C,D,E,F,G,
2a820 48 2c 49 29 0a 23 20 64 65 66 69 6e 65 20 73 71  H,I).# define sq
2a830 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67  lite3CodeRowTrig
2a840 67 65 72 44 69 72 65 63 74 28 41 2c 42 2c 43 2c  gerDirect(A,B,C,
2a850 44 2c 45 2c 46 29 0a 23 20 64 65 66 69 6e 65 20  D,E,F).# define 
2a860 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 4c 69  sqlite3TriggerLi
2a870 73 74 28 58 2c 20 59 29 20 30 0a 23 20 64 65 66  st(X, Y) 0.# def
2a880 69 6e 65 20 73 71 6c 69 74 65 33 50 61 72 73 65  ine sqlite3Parse
2a890 54 6f 70 6c 65 76 65 6c 28 70 29 20 70 0a 23 20  Toplevel(p) p.# 
2a8a0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
2a8b0 54 6f 70 6c 65 76 65 6c 28 70 29 20 31 0a 23 20  Toplevel(p) 1.# 
2a8c0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72  define sqlite3Tr
2a8d0 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28 41 2c 42  iggerColmask(A,B
2a8e0 2c 43 2c 44 2c 45 2c 46 2c 47 29 20 30 0a 23 65  ,C,D,E,F,G) 0.#e
2a8f0 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65  ndif..int sqlite
2a900 33 4a 6f 69 6e 54 79 70 65 28 50 61 72 73 65 2a  3JoinType(Parse*
2a910 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
2a920 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  , Token*);.void 
2a930 73 71 6c 69 74 65 33 43 72 65 61 74 65 46 6f 72  sqlite3CreateFor
2a940 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20  eignKey(Parse*, 
2a950 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e  ExprList*, Token
2a960 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e  *, ExprList*, in
2a970 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2a980 44 65 66 65 72 46 6f 72 65 69 67 6e 4b 65 79 28  DeferForeignKey(
2a990 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 69  Parse*, int);.#i
2a9a0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2a9b0 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a  T_AUTHORIZATION.
2a9c0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75    void sqlite3Au
2a9d0 74 68 52 65 61 64 28 50 61 72 73 65 2a 2c 45 78  thRead(Parse*,Ex
2a9e0 70 72 2a 2c 53 63 68 65 6d 61 2a 2c 53 72 63 4c  pr*,Schema*,SrcL
2a9f0 69 73 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  ist*);.  int sql
2aa00 69 74 65 33 41 75 74 68 43 68 65 63 6b 28 50 61  ite3AuthCheck(Pa
2aa10 72 73 65 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20  rse*,int, const 
2aa20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
2aa30 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  r*, const char*)
2aa40 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2aa50 41 75 74 68 43 6f 6e 74 65 78 74 50 75 73 68 28  AuthContextPush(
2aa60 50 61 72 73 65 2a 2c 20 41 75 74 68 43 6f 6e 74  Parse*, AuthCont
2aa70 65 78 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  ext*, const char
2aa80 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
2aa90 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 6f 70  e3AuthContextPop
2aaa0 28 41 75 74 68 43 6f 6e 74 65 78 74 2a 29 3b 0a  (AuthContext*);.
2aab0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75 74    int sqlite3Aut
2aac0 68 52 65 61 64 43 6f 6c 28 50 61 72 73 65 2a 2c  hReadCol(Parse*,
2aad0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 63   const char *, c
2aae0 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74  onst char *, int
2aaf0 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
2ab00 65 20 73 71 6c 69 74 65 33 41 75 74 68 52 65 61  e sqlite3AuthRea
2ab10 64 28 61 2c 62 2c 63 2c 64 29 0a 23 20 64 65 66  d(a,b,c,d).# def
2ab20 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 43  ine sqlite3AuthC
2ab30 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 29 20  heck(a,b,c,d,e) 
2ab40 20 20 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 64     SQLITE_OK.# d
2ab50 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74  efine sqlite3Aut
2ab60 68 43 6f 6e 74 65 78 74 50 75 73 68 28 61 2c 62  hContextPush(a,b
2ab70 2c 63 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,c).# define sql
2ab80 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50  ite3AuthContextP
2ab90 6f 70 28 61 29 20 20 28 28 76 6f 69 64 29 28 61  op(a)  ((void)(a
2aba0 29 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  )).#endif.void s
2abb0 71 6c 69 74 65 33 41 74 74 61 63 68 28 50 61 72  qlite3Attach(Par
2abc0 73 65 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72  se*, Expr*, Expr
2abd0 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  *, Expr*);.void 
2abe0 73 71 6c 69 74 65 33 44 65 74 61 63 68 28 50 61  sqlite3Detach(Pa
2abf0 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  rse*, Expr*);.vo
2ac00 69 64 20 73 71 6c 69 74 65 33 46 69 78 49 6e 69  id sqlite3FixIni
2ac10 74 28 44 62 46 69 78 65 72 2a 2c 20 50 61 72 73  t(DbFixer*, Pars
2ac20 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63  e*, int, const c
2ac30 68 61 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65  har*, const Toke
2ac40 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
2ac50 46 69 78 53 72 63 4c 69 73 74 28 44 62 46 69 78  FixSrcList(DbFix
2ac60 65 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a  er*, SrcList*);.
2ac70 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 53 65  int sqlite3FixSe
2ac80 6c 65 63 74 28 44 62 46 69 78 65 72 2a 2c 20 53  lect(DbFixer*, S
2ac90 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  elect*);.int sql
2aca0 69 74 65 33 46 69 78 45 78 70 72 28 44 62 46 69  ite3FixExpr(DbFi
2acb0 78 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e  xer*, Expr*);.in
2acc0 74 20 73 71 6c 69 74 65 33 46 69 78 45 78 70 72  t sqlite3FixExpr
2acd0 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c 20 45  List(DbFixer*, E
2ace0 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  xprList*);.int s
2acf0 71 6c 69 74 65 33 46 69 78 54 72 69 67 67 65 72  qlite3FixTrigger
2ad00 53 74 65 70 28 44 62 46 69 78 65 72 2a 2c 20 54  Step(DbFixer*, T
2ad10 72 69 67 67 65 72 53 74 65 70 2a 29 3b 0a 69 6e  riggerStep*);.in
2ad20 74 20 73 71 6c 69 74 65 33 41 74 6f 46 28 63 6f  t sqlite3AtoF(co
2ad30 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 64 6f 75  nst char *z, dou
2ad40 62 6c 65 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a  ble*, int, u8);.
2ad50 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 49 6e  int sqlite3GetIn
2ad60 74 33 32 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  t32(const char *
2ad70 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  , int*);.int sql
2ad80 69 74 65 33 41 74 6f 69 28 63 6f 6e 73 74 20 63  ite3Atoi(const c
2ad90 68 61 72 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53  har*);.#ifndef S
2ada0 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
2adb0 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66 31  .int sqlite3Utf1
2adc0 36 42 79 74 65 4c 65 6e 28 63 6f 6e 73 74 20 76  6ByteLen(const v
2add0 6f 69 64 20 2a 70 44 61 74 61 2c 20 69 6e 74 20  oid *pData, int 
2ade0 6e 43 68 61 72 29 3b 0a 23 65 6e 64 69 66 0a 69  nChar);.#endif.i
2adf0 6e 74 20 73 71 6c 69 74 65 33 55 74 66 38 43 68  nt sqlite3Utf8Ch
2ae00 61 72 4c 65 6e 28 63 6f 6e 73 74 20 63 68 61 72  arLen(const char
2ae10 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e 42 79   *pData, int nBy
2ae20 74 65 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33  te);.u32 sqlite3
2ae30 55 74 66 38 52 65 61 64 28 63 6f 6e 73 74 20 75  Utf8Read(const u
2ae40 38 2a 2a 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c  8**);.LogEst sql
2ae50 69 74 65 33 4c 6f 67 45 73 74 28 75 36 34 29 3b  ite3LogEst(u64);
2ae60 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c  .LogEst sqlite3L
2ae70 6f 67 45 73 74 41 64 64 28 4c 6f 67 45 73 74 2c  ogEstAdd(LogEst,
2ae80 4c 6f 67 45 73 74 29 3b 0a 23 69 66 6e 64 65 66  LogEst);.#ifndef
2ae90 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
2aea0 54 55 41 4c 54 41 42 4c 45 0a 4c 6f 67 45 73 74  TUALTABLE.LogEst
2aeb0 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 46 72   sqlite3LogEstFr
2aec0 6f 6d 44 6f 75 62 6c 65 28 64 6f 75 62 6c 65 29  omDouble(double)
2aed0 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66  ;.#endif.#if def
2aee0 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
2aef0 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41 54  LE_STMT_SCANSTAT
2af00 55 53 29 20 7c 7c 20 5c 0a 20 20 20 20 64 65 66  US) || \.    def
2af10 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
2af20 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
2af30 34 29 20 7c 7c 20 5c 0a 20 20 20 20 64 65 66 69  4) || \.    defi
2af40 6e 65 64 28 53 51 4c 49 54 45 5f 45 58 50 4c 41  ned(SQLITE_EXPLA
2af50 49 4e 5f 45 53 54 49 4d 41 54 45 44 5f 52 4f 57  IN_ESTIMATED_ROW
2af60 53 29 0a 75 36 34 20 73 71 6c 69 74 65 33 4c 6f  S).u64 sqlite3Lo
2af70 67 45 73 74 54 6f 49 6e 74 28 4c 6f 67 45 73 74  gEstToInt(LogEst
2af80 29 3b 0a 23 65 6e 64 69 66 0a 56 4c 69 73 74 20  );.#endif.VList 
2af90 2a 73 71 6c 69 74 65 33 56 4c 69 73 74 41 64 64  *sqlite3VListAdd
2afa0 28 73 71 6c 69 74 65 33 2a 2c 56 4c 69 73 74 2a  (sqlite3*,VList*
2afb0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74  ,const char*,int
2afc0 2c 69 6e 74 29 3b 0a 63 6f 6e 73 74 20 63 68 61  ,int);.const cha
2afd0 72 20 2a 73 71 6c 69 74 65 33 56 4c 69 73 74 4e  r *sqlite3VListN
2afe0 75 6d 54 6f 4e 61 6d 65 28 56 4c 69 73 74 2a 2c  umToName(VList*,
2aff0 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
2b000 33 56 4c 69 73 74 4e 61 6d 65 54 6f 4e 75 6d 28  3VListNameToNum(
2b010 56 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61  VList*,const cha
2b020 72 2a 2c 69 6e 74 29 3b 0a 0a 2f 2a 0a 2a 2a 20  r*,int);../*.** 
2b030 52 6f 75 74 69 6e 65 73 20 74 6f 20 72 65 61 64  Routines to read
2b040 20 61 6e 64 20 77 72 69 74 65 20 76 61 72 69 61   and write varia
2b050 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67  ble-length integ
2b060 65 72 73 2e 20 20 54 68 65 73 65 20 75 73 65 64  ers.  These used
2b070 20 74 6f 0a 2a 2a 20 62 65 20 64 65 66 69 6e 65   to.** be define
2b080 64 20 6c 6f 63 61 6c 6c 79 2c 20 62 75 74 20 6e  d locally, but n
2b090 6f 77 20 77 65 20 75 73 65 20 74 68 65 20 76 61  ow we use the va
2b0a0 72 69 6e 74 20 72 6f 75 74 69 6e 65 73 20 69 6e  rint routines in
2b0b0 20 74 68 65 20 75 74 69 6c 2e 63 0a 2a 2a 20 66   the util.c.** f
2b0c0 69 6c 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  ile..*/.int sqli
2b0d0 74 65 33 50 75 74 56 61 72 69 6e 74 28 75 6e 73  te3PutVarint(uns
2b0e0 69 67 6e 65 64 20 63 68 61 72 2a 2c 20 75 36 34  igned char*, u64
2b0f0 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74  );.u8 sqlite3Get
2b100 56 61 72 69 6e 74 28 63 6f 6e 73 74 20 75 6e 73  Varint(const uns
2b110 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 36  igned char *, u6
2b120 34 20 2a 29 3b 0a 75 38 20 73 71 6c 69 74 65 33  4 *);.u8 sqlite3
2b130 47 65 74 56 61 72 69 6e 74 33 32 28 63 6f 6e 73  GetVarint32(cons
2b140 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
2b150 2a 2c 20 75 33 32 20 2a 29 3b 0a 69 6e 74 20 73  *, u32 *);.int s
2b160 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28  qlite3VarintLen(
2b170 75 36 34 20 76 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54  u64 v);../*.** T
2b180 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 69  he common case i
2b190 73 20 66 6f 72 20 61 20 76 61 72 69 6e 74 20 74  s for a varint t
2b1a0 6f 20 62 65 20 61 20 73 69 6e 67 6c 65 20 62 79  o be a single by
2b1b0 74 65 2e 20 20 54 68 65 79 20 66 6f 6c 6c 6f 77  te.  They follow
2b1c0 69 6e 67 0a 2a 2a 20 6d 61 63 72 6f 73 20 68 61  ing.** macros ha
2b1d0 6e 64 6c 65 20 74 68 65 20 63 6f 6d 6d 6f 6e 20  ndle the common 
2b1e0 63 61 73 65 20 77 69 74 68 6f 75 74 20 61 20 70  case without a p
2b1f0 72 6f 63 65 64 75 72 65 20 63 61 6c 6c 2c 20 62  rocedure call, b
2b200 75 74 20 74 68 65 6e 20 63 61 6c 6c 0a 2a 2a 20  ut then call.** 
2b210 74 68 65 20 70 72 6f 63 65 64 75 72 65 20 66 6f  the procedure fo
2b220 72 20 6c 61 72 67 65 72 20 76 61 72 69 6e 74 73  r larger varints
2b230 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 67 65 74  ..*/.#define get
2b240 56 61 72 69 6e 74 33 32 28 41 2c 42 29 20 20 5c  Varint32(A,B)  \
2b250 0a 20 20 28 75 38 29 28 28 2a 28 41 29 3c 28 75  .  (u8)((*(A)<(u
2b260 38 29 30 78 38 30 29 3f 28 28 42 29 3d 28 75 33  8)0x80)?((B)=(u3
2b270 32 29 2a 28 41 29 29 2c 31 3a 73 71 6c 69 74 65  2)*(A)),1:sqlite
2b280 33 47 65 74 56 61 72 69 6e 74 33 32 28 28 41 29  3GetVarint32((A)
2b290 2c 28 75 33 32 20 2a 29 26 28 42 29 29 29 0a 23  ,(u32 *)&(B))).#
2b2a0 64 65 66 69 6e 65 20 70 75 74 56 61 72 69 6e 74  define putVarint
2b2b0 33 32 28 41 2c 42 29 20 20 5c 0a 20 20 28 75 38  32(A,B)  \.  (u8
2b2c0 29 28 28 28 75 33 32 29 28 42 29 3c 28 75 33 32  )(((u32)(B)<(u32
2b2d0 29 30 78 38 30 29 3f 28 2a 28 41 29 3d 28 75 6e  )0x80)?(*(A)=(un
2b2e0 73 69 67 6e 65 64 20 63 68 61 72 29 28 42 29 29  signed char)(B))
2b2f0 2c 31 3a 5c 0a 20 20 73 71 6c 69 74 65 33 50 75  ,1:\.  sqlite3Pu
2b300 74 56 61 72 69 6e 74 28 28 41 29 2c 28 42 29 29  tVarint((A),(B))
2b310 29 0a 23 64 65 66 69 6e 65 20 67 65 74 56 61 72  ).#define getVar
2b320 69 6e 74 20 20 20 20 73 71 6c 69 74 65 33 47 65  int    sqlite3Ge
2b330 74 56 61 72 69 6e 74 0a 23 64 65 66 69 6e 65 20  tVarint.#define 
2b340 70 75 74 56 61 72 69 6e 74 20 20 20 20 73 71 6c  putVarint    sql
2b350 69 74 65 33 50 75 74 56 61 72 69 6e 74 0a 0a 0a  ite3PutVarint...
2b360 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69  const char *sqli
2b370 74 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79  te3IndexAffinity
2b380 53 74 72 28 73 71 6c 69 74 65 33 2a 2c 20 49 6e  Str(sqlite3*, In
2b390 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  dex*);.void sqli
2b3a0 74 65 33 54 61 62 6c 65 41 66 66 69 6e 69 74 79  te3TableAffinity
2b3b0 28 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  (Vdbe*, Table*, 
2b3c0 69 6e 74 29 3b 0a 63 68 61 72 20 73 71 6c 69 74  int);.char sqlit
2b3d0 65 33 43 6f 6d 70 61 72 65 41 66 66 69 6e 69 74  e3CompareAffinit
2b3e0 79 28 45 78 70 72 20 2a 70 45 78 70 72 2c 20 63  y(Expr *pExpr, c
2b3f0 68 61 72 20 61 66 66 32 29 3b 0a 69 6e 74 20 73  har aff2);.int s
2b400 71 6c 69 74 65 33 49 6e 64 65 78 41 66 66 69 6e  qlite3IndexAffin
2b410 69 74 79 4f 6b 28 45 78 70 72 20 2a 70 45 78 70  ityOk(Expr *pExp
2b420 72 2c 20 63 68 61 72 20 69 64 78 5f 61 66 66 69  r, char idx_affi
2b430 6e 69 74 79 29 3b 0a 63 68 61 72 20 73 71 6c 69  nity);.char sqli
2b440 74 65 33 54 61 62 6c 65 43 6f 6c 75 6d 6e 41 66  te3TableColumnAf
2b450 66 69 6e 69 74 79 28 54 61 62 6c 65 2a 2c 69 6e  finity(Table*,in
2b460 74 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33  t);.char sqlite3
2b470 45 78 70 72 41 66 66 69 6e 69 74 79 28 45 78 70  ExprAffinity(Exp
2b480 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74 20 73  r *pExpr);.int s
2b490 71 6c 69 74 65 33 41 74 6f 69 36 34 28 63 6f 6e  qlite3Atoi64(con
2b4a0 73 74 20 63 68 61 72 2a 2c 20 69 36 34 2a 2c 20  st char*, i64*, 
2b4b0 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71  int, u8);.int sq
2b4c0 6c 69 74 65 33 44 65 63 4f 72 48 65 78 54 6f 49  lite3DecOrHexToI
2b4d0 36 34 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  64(const char*, 
2b4e0 69 36 34 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  i64*);.void sqli
2b4f0 74 65 33 45 72 72 6f 72 57 69 74 68 4d 73 67 28  te3ErrorWithMsg(
2b500 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63  sqlite3*, int, c
2b510 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b  onst char*,...);
2b520 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72  .void sqlite3Err
2b530 6f 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29  or(sqlite3*,int)
2b540 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 79  ;.void sqlite3Sy
2b550 73 74 65 6d 45 72 72 6f 72 28 73 71 6c 69 74 65  stemError(sqlite
2b560 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73  3*,int);.void *s
2b570 71 6c 69 74 65 33 48 65 78 54 6f 42 6c 6f 62 28  qlite3HexToBlob(
2b580 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20  sqlite3*, const 
2b590 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 6e 29 3b  char *z, int n);
2b5a0 0a 75 38 20 73 71 6c 69 74 65 33 48 65 78 54 6f  .u8 sqlite3HexTo
2b5b0 49 6e 74 28 69 6e 74 20 68 29 3b 0a 69 6e 74 20  Int(int h);.int 
2b5c0 73 71 6c 69 74 65 33 54 77 6f 50 61 72 74 4e 61  sqlite3TwoPartNa
2b5d0 6d 65 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65  me(Parse *, Toke
2b5e0 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f  n *, Token *, To
2b5f0 6b 65 6e 20 2a 2a 29 3b 0a 0a 23 69 66 20 64 65  ken **);..#if de
2b600 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4e 45 45  fined(SQLITE_NEE
2b610 44 5f 45 52 52 5f 4e 41 4d 45 29 0a 63 6f 6e 73  D_ERR_NAME).cons
2b620 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 45  t char *sqlite3E
2b630 72 72 4e 61 6d 65 28 69 6e 74 29 3b 0a 23 65 6e  rrName(int);.#en
2b640 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
2b650 54 45 5f 45 4e 41 42 4c 45 5f 44 45 53 45 52 49  TE_ENABLE_DESERI
2b660 41 4c 49 5a 45 0a 69 6e 74 20 73 71 6c 69 74 65  ALIZE.int sqlite
2b670 33 4d 65 6d 64 62 49 6e 69 74 28 76 6f 69 64 29  3MemdbInit(void)
2b680 3b 0a 23 65 6e 64 69 66 0a 0a 63 6f 6e 73 74 20  ;.#endif..const 
2b690 63 68 61 72 20 2a 73 71 6c 69 74 65 33 45 72 72  char *sqlite3Err
2b6a0 53 74 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71  Str(int);.int sq
2b6b0 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d 61 28  lite3ReadSchema(
2b6c0 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a  Parse *pParse);.
2b6d0 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33  CollSeq *sqlite3
2b6e0 46 69 6e 64 43 6f 6c 6c 53 65 71 28 73 71 6c 69  FindCollSeq(sqli
2b6f0 74 65 33 2a 2c 75 38 20 65 6e 63 2c 20 63 6f 6e  te3*,u8 enc, con
2b700 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 43  st char*,int);.C
2b710 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 4c  ollSeq *sqlite3L
2b720 6f 63 61 74 65 43 6f 6c 6c 53 65 71 28 50 61 72  ocateCollSeq(Par
2b730 73 65 20 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73  se *pParse, cons
2b740 74 20 63 68 61 72 2a 7a 4e 61 6d 65 29 3b 0a 43  t char*zName);.C
2b750 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 45  ollSeq *sqlite3E
2b760 78 70 72 43 6f 6c 6c 53 65 71 28 50 61 72 73 65  xprCollSeq(Parse
2b770 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a   *pParse, Expr *
2b780 70 45 78 70 72 29 3b 0a 43 6f 6c 6c 53 65 71 20  pExpr);.CollSeq 
2b790 2a 73 71 6c 69 74 65 33 45 78 70 72 4e 4e 43 6f  *sqlite3ExprNNCo
2b7a0 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70 50 61  llSeq(Parse *pPa
2b7b0 72 73 65 2c 20 45 78 70 72 20 2a 70 45 78 70 72  rse, Expr *pExpr
2b7c0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
2b7d0 70 72 43 6f 6c 6c 53 65 71 4d 61 74 63 68 28 50  prCollSeqMatch(P
2b7e0 61 72 73 65 2a 2c 45 78 70 72 2a 2c 45 78 70 72  arse*,Expr*,Expr
2b7f0 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  *);.Expr *sqlite
2b800 33 45 78 70 72 41 64 64 43 6f 6c 6c 61 74 65 54  3ExprAddCollateT
2b810 6f 6b 65 6e 28 50 61 72 73 65 20 2a 70 50 61 72  oken(Parse *pPar
2b820 73 65 2c 20 45 78 70 72 2a 2c 20 63 6f 6e 73 74  se, Expr*, const
2b830 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 45   Token*, int);.E
2b840 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
2b850 41 64 64 43 6f 6c 6c 61 74 65 53 74 72 69 6e 67  AddCollateString
2b860 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 63 6f  (Parse*,Expr*,co
2b870 6e 73 74 20 63 68 61 72 2a 29 3b 0a 45 78 70 72  nst char*);.Expr
2b880 20 2a 73 71 6c 69 74 65 33 45 78 70 72 53 6b 69   *sqlite3ExprSki
2b890 70 43 6f 6c 6c 61 74 65 28 45 78 70 72 2a 29 3b  pCollate(Expr*);
2b8a0 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63  .int sqlite3Chec
2b8b0 6b 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a  kCollSeq(Parse *
2b8c0 2c 20 43 6f 6c 6c 53 65 71 20 2a 29 3b 0a 69 6e  , CollSeq *);.in
2b8d0 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 4f 62  t sqlite3CheckOb
2b8e0 6a 65 63 74 4e 61 6d 65 28 50 61 72 73 65 20 2a  jectName(Parse *
2b8f0 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b  , const char *);
2b900 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62  .void sqlite3Vdb
2b910 65 53 65 74 43 68 61 6e 67 65 73 28 73 71 6c 69  eSetChanges(sqli
2b920 74 65 33 20 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  te3 *, int);.int
2b930 20 73 71 6c 69 74 65 33 41 64 64 49 6e 74 36 34   sqlite3AddInt64
2b940 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20  (i64*,i64);.int 
2b950 73 71 6c 69 74 65 33 53 75 62 49 6e 74 36 34 28  sqlite3SubInt64(
2b960 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73  i64*,i64);.int s
2b970 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36 34 28 69  qlite3MulInt64(i
2b980 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71  64*,i64);.int sq
2b990 6c 69 74 65 33 41 62 73 49 6e 74 33 32 28 69 6e  lite3AbsInt32(in
2b9a0 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  t);.#ifdef SQLIT
2b9b0 45 5f 45 4e 41 42 4c 45 5f 38 5f 33 5f 4e 41 4d  E_ENABLE_8_3_NAM
2b9c0 45 53 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46  ES.void sqlite3F
2b9d0 69 6c 65 53 75 66 66 69 78 33 28 63 6f 6e 73 74  ileSuffix3(const
2b9e0 20 63 68 61 72 2a 2c 20 63 68 61 72 2a 29 3b 0a   char*, char*);.
2b9f0 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
2ba00 71 6c 69 74 65 33 46 69 6c 65 53 75 66 66 69 78  qlite3FileSuffix
2ba10 33 28 58 2c 59 29 0a 23 65 6e 64 69 66 0a 75 38  3(X,Y).#endif.u8
2ba20 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65   sqlite3GetBoole
2ba30 61 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  an(const char *z
2ba40 2c 75 38 29 3b 0a 0a 63 6f 6e 73 74 20 76 6f 69  ,u8);..const voi
2ba50 64 20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65 54  d *sqlite3ValueT
2ba60 65 78 74 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  ext(sqlite3_valu
2ba70 65 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c  e*, u8);.int sql
2ba80 69 74 65 33 56 61 6c 75 65 42 79 74 65 73 28 73  ite3ValueBytes(s
2ba90 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75  qlite3_value*, u
2baa0 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  8);.void sqlite3
2bab0 56 61 6c 75 65 53 65 74 53 74 72 28 73 71 6c 69  ValueSetStr(sqli
2bac0 74 65 33 5f 76 61 6c 75 65 2a 2c 20 69 6e 74 2c  te3_value*, int,
2bad0 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 2c 75 38   const void *,u8
2bae0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
2baf0 20 20 20 20 20 20 20 20 20 20 76 6f 69 64 28 2a            void(*
2bb00 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69 64 20  )(void*));.void 
2bb10 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74 4e  sqlite3ValueSetN
2bb20 75 6c 6c 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  ull(sqlite3_valu
2bb30 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
2bb40 33 56 61 6c 75 65 46 72 65 65 28 73 71 6c 69 74  3ValueFree(sqlit
2bb50 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 73 71 6c 69  e3_value*);.sqli
2bb60 74 65 33 5f 76 61 6c 75 65 20 2a 73 71 6c 69 74  te3_value *sqlit
2bb70 65 33 56 61 6c 75 65 4e 65 77 28 73 71 6c 69 74  e3ValueNew(sqlit
2bb80 65 33 20 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53  e3 *);.#ifndef S
2bb90 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
2bba0 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 55 74  .char *sqlite3Ut
2bbb0 66 31 36 74 6f 38 28 73 71 6c 69 74 65 33 20 2a  f16to8(sqlite3 *
2bbc0 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69  , const void*, i
2bbd0 6e 74 2c 20 75 38 29 3b 0a 23 65 6e 64 69 66 0a  nt, u8);.#endif.
2bbe0 69 6e 74 20 73 71 6c 69 74 65 33 56 61 6c 75 65  int sqlite3Value
2bbf0 46 72 6f 6d 45 78 70 72 28 73 71 6c 69 74 65 33  FromExpr(sqlite3
2bc00 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75 38 2c 20   *, Expr *, u8, 
2bc10 75 38 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  u8, sqlite3_valu
2bc20 65 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  e **);.void sqli
2bc30 74 65 33 56 61 6c 75 65 41 70 70 6c 79 41 66 66  te3ValueApplyAff
2bc40 69 6e 69 74 79 28 73 71 6c 69 74 65 33 5f 76 61  inity(sqlite3_va
2bc50 6c 75 65 20 2a 2c 20 75 38 2c 20 75 38 29 3b 0a  lue *, u8, u8);.
2bc60 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 41  #ifndef SQLITE_A
2bc70 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 65 78 74 65  MALGAMATION.exte
2bc80 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  rn const unsigne
2bc90 64 20 63 68 61 72 20 73 71 6c 69 74 65 33 4f 70  d char sqlite3Op
2bca0 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d 3b 0a  codeProperty[];.
2bcb0 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 63 68 61  extern const cha
2bcc0 72 20 73 71 6c 69 74 65 33 53 74 72 42 49 4e 41  r sqlite3StrBINA
2bcd0 52 59 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e  RY[];.extern con
2bce0 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
2bcf0 20 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c   sqlite3UpperToL
2bd00 6f 77 65 72 5b 5d 3b 0a 65 78 74 65 72 6e 20 63  ower[];.extern c
2bd10 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
2bd20 61 72 20 73 71 6c 69 74 65 33 43 74 79 70 65 4d  ar sqlite3CtypeM
2bd30 61 70 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e  ap[];.extern con
2bd40 73 74 20 54 6f 6b 65 6e 20 73 71 6c 69 74 65 33  st Token sqlite3
2bd50 49 6e 74 54 6f 6b 65 6e 73 5b 5d 3b 0a 65 78 74  IntTokens[];.ext
2bd60 65 72 6e 20 53 51 4c 49 54 45 5f 57 53 44 20 73  ern SQLITE_WSD s
2bd70 74 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e  truct Sqlite3Con
2bd80 66 69 67 20 73 71 6c 69 74 65 33 43 6f 6e 66 69  fig sqlite3Confi
2bd90 67 3b 0a 65 78 74 65 72 6e 20 46 75 6e 63 44 65  g;.extern FuncDe
2bda0 66 48 61 73 68 20 73 71 6c 69 74 65 33 42 75 69  fHash sqlite3Bui
2bdb0 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 3b 0a 23  ltinFunctions;.#
2bdc0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2bdd0 49 54 5f 57 53 44 0a 65 78 74 65 72 6e 20 69 6e  IT_WSD.extern in
2bde0 74 20 73 71 6c 69 74 65 33 50 65 6e 64 69 6e 67  t sqlite3Pending
2bdf0 42 79 74 65 3b 0a 23 65 6e 64 69 66 0a 23 65 6e  Byte;.#endif.#en
2be00 64 69 66 0a 23 69 66 64 65 66 20 56 44 42 45 5f  dif.#ifdef VDBE_
2be10 50 52 4f 46 49 4c 45 0a 65 78 74 65 72 6e 20 73  PROFILE.extern s
2be20 71 6c 69 74 65 33 5f 75 69 6e 74 36 34 20 73 71  qlite3_uint64 sq
2be30 6c 69 74 65 33 4e 50 72 6f 66 69 6c 65 43 6e 74  lite3NProfileCnt
2be40 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  ;.#endif.void sq
2be50 6c 69 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76  lite3RootPageMov
2be60 65 64 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  ed(sqlite3*, int
2be70 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
2be80 64 20 73 71 6c 69 74 65 33 52 65 69 6e 64 65 78  d sqlite3Reindex
2be90 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c  (Parse*, Token*,
2bea0 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73   Token*);.void s
2beb0 71 6c 69 74 65 33 41 6c 74 65 72 46 75 6e 63 74  qlite3AlterFunct
2bec0 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64  ions(void);.void
2bed0 20 73 71 6c 69 74 65 33 41 6c 74 65 72 52 65 6e   sqlite3AlterRen
2bee0 61 6d 65 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  ameTable(Parse*,
2bef0 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e   SrcList*, Token
2bf00 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47  *);.int sqlite3G
2bf10 65 74 54 6f 6b 65 6e 28 63 6f 6e 73 74 20 75 6e  etToken(const un
2bf20 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 69  signed char *, i
2bf30 6e 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  nt *);.void sqli
2bf40 74 65 33 4e 65 73 74 65 64 50 61 72 73 65 28 50  te3NestedParse(P
2bf50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61  arse*, const cha
2bf60 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73  r*, ...);.void s
2bf70 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70  qlite3ExpirePrep
2bf80 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 73  aredStatements(s
2bf90 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71  qlite3*);.int sq
2bfa0 6c 69 74 65 33 43 6f 64 65 53 75 62 73 65 6c 65  lite3CodeSubsele
2bfb0 63 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 20  ct(Parse*, Expr 
2bfc0 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
2bfd0 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  id sqlite3Select
2bfe0 50 72 65 70 28 50 61 72 73 65 2a 2c 20 53 65 6c  Prep(Parse*, Sel
2bff0 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78  ect*, NameContex
2c000 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
2c010 33 53 65 6c 65 63 74 57 72 6f 6e 67 4e 75 6d 54  3SelectWrongNumT
2c020 65 72 6d 73 45 72 72 6f 72 28 50 61 72 73 65 20  ermsError(Parse 
2c030 2a 70 50 61 72 73 65 2c 20 53 65 6c 65 63 74 20  *pParse, Select 
2c040 2a 70 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  *p);.int sqlite3
2c050 4d 61 74 63 68 53 70 61 6e 4e 61 6d 65 28 63 6f  MatchSpanName(co
2c060 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
2c070 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
2c080 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
2c090 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65  );.int sqlite3Re
2c0a0 73 6f 6c 76 65 45 78 70 72 4e 61 6d 65 73 28 4e  solveExprNames(N
2c0b0 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70  ameContext*, Exp
2c0c0 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
2c0d0 52 65 73 6f 6c 76 65 45 78 70 72 4c 69 73 74 4e  ResolveExprListN
2c0e0 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74  ames(NameContext
2c0f0 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 76  *, ExprList*);.v
2c100 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c  oid sqlite3Resol
2c110 76 65 53 65 6c 65 63 74 4e 61 6d 65 73 28 50 61  veSelectNames(Pa
2c120 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e  rse*, Select*, N
2c130 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f  ameContext*);.vo
2c140 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76  id sqlite3Resolv
2c150 65 53 65 6c 66 52 65 66 65 72 65 6e 63 65 28 50  eSelfReference(P
2c160 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74  arse*,Table*,int
2c170 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a  ,Expr*,ExprList*
2c180 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65  );.int sqlite3Re
2c190 73 6f 6c 76 65 4f 72 64 65 72 47 72 6f 75 70 42  solveOrderGroupB
2c1a0 79 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74  y(Parse*, Select
2c1b0 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f  *, ExprList*, co
2c1c0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
2c1d0 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 44 65   sqlite3ColumnDe
2c1e0 66 61 75 6c 74 28 56 64 62 65 20 2a 2c 20 54 61  fault(Vdbe *, Ta
2c1f0 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  ble *, int, int)
2c200 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c  ;.void sqlite3Al
2c210 74 65 72 46 69 6e 69 73 68 41 64 64 43 6f 6c 75  terFinishAddColu
2c220 6d 6e 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65  mn(Parse *, Toke
2c230 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  n *);.void sqlit
2c240 65 33 41 6c 74 65 72 42 65 67 69 6e 41 64 64 43  e3AlterBeginAddC
2c250 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 53  olumn(Parse *, S
2c260 72 63 4c 69 73 74 20 2a 29 3b 0a 43 6f 6c 6c 53  rcList *);.CollS
2c270 65 71 20 2a 73 71 6c 69 74 65 33 47 65 74 43 6f  eq *sqlite3GetCo
2c280 6c 6c 53 65 71 28 50 61 72 73 65 2a 2c 20 75 38  llSeq(Parse*, u8
2c290 2c 20 43 6f 6c 6c 53 65 71 20 2a 2c 20 63 6f 6e  , CollSeq *, con
2c2a0 73 74 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20  st char*);.char 
2c2b0 73 71 6c 69 74 65 33 41 66 66 69 6e 69 74 79 54  sqlite3AffinityT
2c2c0 79 70 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ype(const char*,
2c2d0 20 43 6f 6c 75 6d 6e 2a 29 3b 0a 76 6f 69 64 20   Column*);.void 
2c2e0 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65 28 50  sqlite3Analyze(P
2c2f0 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  arse*, Token*, T
2c300 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
2c310 74 65 33 49 6e 76 6f 6b 65 42 75 73 79 48 61 6e  te3InvokeBusyHan
2c320 64 6c 65 72 28 42 75 73 79 48 61 6e 64 6c 65 72  dler(BusyHandler
2c330 2a 2c 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 2a  *, sqlite3_file*
2c340 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
2c350 6e 64 44 62 28 73 71 6c 69 74 65 33 2a 2c 20 54  ndDb(sqlite3*, T
2c360 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
2c370 74 65 33 46 69 6e 64 44 62 4e 61 6d 65 28 73 71  te3FindDbName(sq
2c380 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63  lite3 *, const c
2c390 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  har *);.int sqli
2c3a0 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28  te3AnalysisLoad(
2c3b0 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 69 44 42  sqlite3*,int iDB
2c3c0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
2c3d0 65 6c 65 74 65 49 6e 64 65 78 53 61 6d 70 6c 65  eleteIndexSample
2c3e0 73 28 73 71 6c 69 74 65 33 2a 2c 49 6e 64 65 78  s(sqlite3*,Index
2c3f0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2c400 44 65 66 61 75 6c 74 52 6f 77 45 73 74 28 49 6e  DefaultRowEst(In
2c410 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  dex*);.void sqli
2c420 74 65 33 52 65 67 69 73 74 65 72 4c 69 6b 65 46  te3RegisterLikeF
2c430 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65 33  unctions(sqlite3
2c440 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
2c450 69 74 65 33 49 73 4c 69 6b 65 46 75 6e 63 74 69  ite3IsLikeFuncti
2c460 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72  on(sqlite3*,Expr
2c470 2a 2c 69 6e 74 2a 2c 63 68 61 72 2a 29 3b 0a 76  *,int*,char*);.v
2c480 6f 69 64 20 73 71 6c 69 74 65 33 53 63 68 65 6d  oid sqlite3Schem
2c490 61 43 6c 65 61 72 28 76 6f 69 64 20 2a 29 3b 0a  aClear(void *);.
2c4a0 53 63 68 65 6d 61 20 2a 73 71 6c 69 74 65 33 53  Schema *sqlite3S
2c4b0 63 68 65 6d 61 47 65 74 28 73 71 6c 69 74 65 33  chemaGet(sqlite3
2c4c0 20 2a 2c 20 42 74 72 65 65 20 2a 29 3b 0a 69 6e   *, Btree *);.in
2c4d0 74 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 54  t sqlite3SchemaT
2c4e0 6f 49 6e 64 65 78 28 73 71 6c 69 74 65 33 20 2a  oIndex(sqlite3 *
2c4f0 64 62 2c 20 53 63 68 65 6d 61 20 2a 29 3b 0a 4b  db, Schema *);.K
2c500 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b  eyInfo *sqlite3K
2c510 65 79 49 6e 66 6f 41 6c 6c 6f 63 28 73 71 6c 69  eyInfoAlloc(sqli
2c520 74 65 33 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76  te3*,int,int);.v
2c530 6f 69 64 20 73 71 6c 69 74 65 33 4b 65 79 49 6e  oid sqlite3KeyIn
2c540 66 6f 55 6e 72 65 66 28 4b 65 79 49 6e 66 6f 2a  foUnref(KeyInfo*
2c550 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69  );.KeyInfo *sqli
2c560 74 65 33 4b 65 79 49 6e 66 6f 52 65 66 28 4b 65  te3KeyInfoRef(Ke
2c570 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f  yInfo*);.KeyInfo
2c580 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f   *sqlite3KeyInfo
2c590 4f 66 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 20  OfIndex(Parse*, 
2c5a0 49 6e 64 65 78 2a 29 3b 0a 23 69 66 64 65 66 20  Index*);.#ifdef 
2c5b0 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 69 6e 74  SQLITE_DEBUG.int
2c5c0 20 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 49   sqlite3KeyInfoI
2c5d0 73 57 72 69 74 65 61 62 6c 65 28 4b 65 79 49 6e  sWriteable(KeyIn
2c5e0 66 6f 2a 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74  fo*);.#endif.int
2c5f0 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 46 75   sqlite3CreateFu
2c600 6e 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f  nc(sqlite3 *, co
2c610 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2c  nst char *, int,
2c620 20 69 6e 74 2c 20 76 6f 69 64 20 2a 2c 0a 20 20   int, void *,.  
2c630 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33  void (*)(sqlite3
2c640 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
2c650 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c  lite3_value **),
2c660 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69  .  void (*)(sqli
2c670 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74  te3_context*,int
2c680 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  ,sqlite3_value *
2c690 2a 29 2c 20 76 6f 69 64 20 28 2a 29 28 73 71 6c  *), void (*)(sql
2c6a0 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a  ite3_context*),.
2c6b0 20 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72    FuncDestructor
2c6c0 20 2a 70 44 65 73 74 72 75 63 74 6f 72 0a 29 3b   *pDestructor.);
2c6d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 6f 6d  .void sqlite3Oom
2c6e0 46 61 75 6c 74 28 73 71 6c 69 74 65 33 2a 29 3b  Fault(sqlite3*);
2c6f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 6f 6d  .void sqlite3Oom
2c700 43 6c 65 61 72 28 73 71 6c 69 74 65 33 2a 29 3b  Clear(sqlite3*);
2c710 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 70 69 45  .int sqlite3ApiE
2c720 78 69 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  xit(sqlite3 *db,
2c730 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
2c740 65 33 4f 70 65 6e 54 65 6d 70 44 61 74 61 62 61  e3OpenTempDataba
2c750 73 65 28 50 61 72 73 65 20 2a 29 3b 0a 0a 76 6f  se(Parse *);..vo
2c760 69 64 20 73 71 6c 69 74 65 33 53 74 72 41 63 63  id sqlite3StrAcc
2c770 75 6d 49 6e 69 74 28 53 74 72 41 63 63 75 6d 2a  umInit(StrAccum*
2c780 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63 68 61 72  , sqlite3*, char
2c790 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 63 68  *, int, int);.ch
2c7a0 61 72 20 2a 73 71 6c 69 74 65 33 53 74 72 41 63  ar *sqlite3StrAc
2c7b0 63 75 6d 46 69 6e 69 73 68 28 53 74 72 41 63 63  cumFinish(StrAcc
2c7c0 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  um*);.void sqlit
2c7d0 65 33 53 65 6c 65 63 74 44 65 73 74 49 6e 69 74  e3SelectDestInit
2c7e0 28 53 65 6c 65 63 74 44 65 73 74 2a 2c 69 6e 74  (SelectDest*,int
2c7f0 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c  ,int);.Expr *sql
2c800 69 74 65 33 43 72 65 61 74 65 43 6f 6c 75 6d 6e  ite3CreateColumn
2c810 45 78 70 72 28 73 71 6c 69 74 65 33 20 2a 2c 20  Expr(sqlite3 *, 
2c820 53 72 63 4c 69 73 74 20 2a 2c 20 69 6e 74 2c 20  SrcList *, int, 
2c830 69 6e 74 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69  int);..void sqli
2c840 74 65 33 42 61 63 6b 75 70 52 65 73 74 61 72 74  te3BackupRestart
2c850 28 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 20  (sqlite3_backup 
2c860 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2c870 42 61 63 6b 75 70 55 70 64 61 74 65 28 73 71 6c  BackupUpdate(sql
2c880 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 2c 20 50  ite3_backup *, P
2c890 67 6e 6f 2c 20 63 6f 6e 73 74 20 75 38 20 2a 29  gno, const u8 *)
2c8a0 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ;..#ifndef SQLIT
2c8b0 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52 59 0a  E_OMIT_SUBQUERY.
2c8c0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
2c8d0 68 65 63 6b 49 4e 28 50 61 72 73 65 2a 2c 20 45  heckIN(Parse*, E
2c8e0 78 70 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64  xpr*);.#else.# d
2c8f0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70  efine sqlite3Exp
2c900 72 43 68 65 63 6b 49 4e 28 78 2c 79 29 20 53 51  rCheckIN(x,y) SQ
2c910 4c 49 54 45 5f 4f 4b 0a 23 65 6e 64 69 66 0a 0a  LITE_OK.#endif..
2c920 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
2c930 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54  ABLE_STAT3_OR_ST
2c940 41 54 34 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  AT4.void sqlite3
2c950 41 6e 61 6c 79 7a 65 46 75 6e 63 74 69 6f 6e 73  AnalyzeFunctions
2c960 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69  (void);.int sqli
2c970 74 65 33 53 74 61 74 34 50 72 6f 62 65 53 65 74  te3Stat4ProbeSet
2c980 56 61 6c 75 65 28 0a 20 20 20 20 50 61 72 73 65  Value(.    Parse
2c990 2a 2c 49 6e 64 65 78 2a 2c 55 6e 70 61 63 6b 65  *,Index*,Unpacke
2c9a0 64 52 65 63 6f 72 64 2a 2a 2c 45 78 70 72 2a 2c  dRecord**,Expr*,
2c9b0 69 6e 74 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 69  int,int,int*);.i
2c9c0 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74 34 56  nt sqlite3Stat4V
2c9d0 61 6c 75 65 46 72 6f 6d 45 78 70 72 28 50 61 72  alueFromExpr(Par
2c9e0 73 65 2a 2c 20 45 78 70 72 2a 2c 20 75 38 2c 20  se*, Expr*, u8, 
2c9f0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29  sqlite3_value**)
2ca00 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ;.void sqlite3St
2ca10 61 74 34 50 72 6f 62 65 46 72 65 65 28 55 6e 70  at4ProbeFree(Unp
2ca20 61 63 6b 65 64 52 65 63 6f 72 64 2a 29 3b 0a 69  ackedRecord*);.i
2ca30 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74 34 43  nt sqlite3Stat4C
2ca40 6f 6c 75 6d 6e 28 73 71 6c 69 74 65 33 2a 2c 20  olumn(sqlite3*, 
2ca50 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74  const void*, int
2ca60 2c 20 69 6e 74 2c 20 73 71 6c 69 74 65 33 5f 76  , int, sqlite3_v
2ca70 61 6c 75 65 2a 2a 29 3b 0a 63 68 61 72 20 73 71  alue**);.char sq
2ca80 6c 69 74 65 33 49 6e 64 65 78 43 6f 6c 75 6d 6e  lite3IndexColumn
2ca90 41 66 66 69 6e 69 74 79 28 73 71 6c 69 74 65 33  Affinity(sqlite3
2caa0 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74 29 3b  *, Index*, int);
2cab0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
2cac0 68 65 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20  he interface to 
2cad0 74 68 65 20 4c 45 4d 4f 4e 2d 67 65 6e 65 72 61  the LEMON-genera
2cae0 74 65 64 20 70 61 72 73 65 72 0a 2a 2f 0a 23 69  ted parser.*/.#i
2caf0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41  fndef SQLITE_AMA
2cb00 4c 47 41 4d 41 54 49 4f 4e 0a 20 20 76 6f 69 64  LGAMATION.  void
2cb10 20 2a 73 71 6c 69 74 65 33 50 61 72 73 65 72 41   *sqlite3ParserA
2cb20 6c 6c 6f 63 28 76 6f 69 64 2a 28 2a 29 28 75 36  lloc(void*(*)(u6
2cb30 34 29 2c 20 50 61 72 73 65 2a 29 3b 0a 20 20 76  4), Parse*);.  v
2cb40 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65  oid sqlite3Parse
2cb50 72 46 72 65 65 28 76 6f 69 64 2a 2c 20 76 6f 69  rFree(void*, voi
2cb60 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 23 65  d(*)(void*));.#e
2cb70 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
2cb80 33 50 61 72 73 65 72 28 76 6f 69 64 2a 2c 20 69  3Parser(void*, i
2cb90 6e 74 2c 20 54 6f 6b 65 6e 29 3b 0a 23 69 66 64  nt, Token);.#ifd
2cba0 65 66 20 59 59 54 52 41 43 4b 4d 41 58 53 54 41  ef YYTRACKMAXSTA
2cbb0 43 4b 44 45 50 54 48 0a 20 20 69 6e 74 20 73 71  CKDEPTH.  int sq
2cbc0 6c 69 74 65 33 50 61 72 73 65 72 53 74 61 63 6b  lite3ParserStack
2cbd0 50 65 61 6b 28 76 6f 69 64 2a 29 3b 0a 23 65 6e  Peak(void*);.#en
2cbe0 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  dif..void sqlite
2cbf0 33 41 75 74 6f 4c 6f 61 64 45 78 74 65 6e 73 69  3AutoLoadExtensi
2cc00 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23  ons(sqlite3*);.#
2cc10 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2cc20 49 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f  IT_LOAD_EXTENSIO
2cc30 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  N.  void sqlite3
2cc40 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28  CloseExtensions(
2cc50 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6c 73 65  sqlite3*);.#else
2cc60 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2cc70 33 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73  3CloseExtensions
2cc80 28 58 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e  (X).#endif..#ifn
2cc90 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2cca0 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20 76  SHARED_CACHE.  v
2ccb0 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65  oid sqlite3Table
2ccc0 4c 6f 63 6b 28 50 61 72 73 65 20 2a 2c 20 69 6e  Lock(Parse *, in
2ccd0 74 2c 20 69 6e 74 2c 20 75 38 2c 20 63 6f 6e 73  t, int, u8, cons
2cce0 74 20 63 68 61 72 20 2a 29 3b 0a 23 65 6c 73 65  t char *);.#else
2ccf0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
2cd00 65 33 54 61 62 6c 65 4c 6f 63 6b 28 76 2c 77 2c  e3TableLock(v,w,
2cd10 78 2c 79 2c 7a 29 0a 23 65 6e 64 69 66 0a 0a 23  x,y,z).#endif..#
2cd20 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
2cd30 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 55  T.  int sqlite3U
2cd40 74 66 38 54 6f 38 28 75 6e 73 69 67 6e 65 64 20  tf8To8(unsigned 
2cd50 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  char*);.#endif..
2cd60 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
2cd70 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
2cd80 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
2cd90 33 56 74 61 62 43 6c 65 61 72 28 59 29 0a 23 20  3VtabClear(Y).# 
2cda0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
2cdb0 74 61 62 53 79 6e 63 28 58 2c 59 29 20 53 51 4c  tabSync(X,Y) SQL
2cdc0 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65  ITE_OK.#  define
2cdd0 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c   sqlite3VtabRoll
2cde0 62 61 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e  back(X).#  defin
2cdf0 65 20 73 71 6c 69 74 65 33 56 74 61 62 43 6f 6d  e sqlite3VtabCom
2ce00 6d 69 74 28 58 29 0a 23 20 20 64 65 66 69 6e 65  mit(X).#  define
2ce10 20 73 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79   sqlite3VtabInSy
2ce20 6e 63 28 64 62 29 20 30 0a 23 20 20 64 65 66 69  nc(db) 0.#  defi
2ce30 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f  ne sqlite3VtabLo
2ce40 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20  ck(X).#  define 
2ce50 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63  sqlite3VtabUnloc
2ce60 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73  k(X).#  define s
2ce70 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b  qlite3VtabUnlock
2ce80 4c 69 73 74 28 58 29 0a 23 20 20 64 65 66 69 6e  List(X).#  defin
2ce90 65 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76  e sqlite3VtabSav
2cea0 65 70 6f 69 6e 74 28 58 2c 20 59 2c 20 5a 29 20  epoint(X, Y, Z) 
2ceb0 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66  SQLITE_OK.#  def
2cec0 69 6e 65 20 73 71 6c 69 74 65 33 47 65 74 56 54  ine sqlite3GetVT
2ced0 61 62 6c 65 28 58 2c 59 29 20 20 28 28 56 54 61  able(X,Y)  ((VTa
2cee0 62 6c 65 2a 29 30 29 0a 23 65 6c 73 65 0a 20 20  ble*)0).#else.  
2cef0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61   void sqlite3Vta
2cf00 62 43 6c 65 61 72 28 73 71 6c 69 74 65 33 20 2a  bClear(sqlite3 *
2cf10 64 62 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 20  db, Table*);.   
2cf20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
2cf30 44 69 73 63 6f 6e 6e 65 63 74 28 73 71 6c 69 74  Disconnect(sqlit
2cf40 65 33 20 2a 64 62 2c 20 54 61 62 6c 65 20 2a 70  e3 *db, Table *p
2cf50 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65  );.   int sqlite
2cf60 33 56 74 61 62 53 79 6e 63 28 73 71 6c 69 74 65  3VtabSync(sqlite
2cf70 33 20 2a 64 62 2c 20 56 64 62 65 2a 29 3b 0a 20  3 *db, Vdbe*);. 
2cf80 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61    int sqlite3Vta
2cf90 62 52 6f 6c 6c 62 61 63 6b 28 73 71 6c 69 74 65  bRollback(sqlite
2cfa0 33 20 2a 64 62 29 3b 0a 20 20 20 69 6e 74 20 73  3 *db);.   int s
2cfb0 71 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d 69 74  qlite3VtabCommit
2cfc0 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20  (sqlite3 *db);. 
2cfd0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74    void sqlite3Vt
2cfe0 61 62 4c 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29  abLock(VTable *)
2cff0 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ;.   void sqlite
2d000 33 56 74 61 62 55 6e 6c 6f 63 6b 28 56 54 61 62  3VtabUnlock(VTab
2d010 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73  le *);.   void s
2d020 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b  qlite3VtabUnlock
2d030 4c 69 73 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a  List(sqlite3*);.
2d040 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74     int sqlite3Vt
2d050 61 62 53 61 76 65 70 6f 69 6e 74 28 73 71 6c 69  abSavepoint(sqli
2d060 74 65 33 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  te3 *, int, int)
2d070 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ;.   void sqlite
2d080 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73  3VtabImportErrms
2d090 67 28 56 64 62 65 2a 2c 20 73 71 6c 69 74 65 33  g(Vdbe*, sqlite3
2d0a0 5f 76 74 61 62 2a 29 3b 0a 20 20 20 56 54 61 62  _vtab*);.   VTab
2d0b0 6c 65 20 2a 73 71 6c 69 74 65 33 47 65 74 56 54  le *sqlite3GetVT
2d0c0 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20 54  able(sqlite3*, T
2d0d0 61 62 6c 65 2a 29 3b 0a 20 20 20 4d 6f 64 75 6c  able*);.   Modul
2d0e0 65 20 2a 73 71 6c 69 74 65 33 56 74 61 62 43 72  e *sqlite3VtabCr
2d0f0 65 61 74 65 4d 6f 64 75 6c 65 28 0a 20 20 20 20  eateModule(.    
2d100 20 73 71 6c 69 74 65 33 2a 2c 0a 20 20 20 20 20   sqlite3*,.     
2d110 63 6f 6e 73 74 20 63 68 61 72 2a 2c 0a 20 20 20  const char*,.   
2d120 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f    const sqlite3_
2d130 6d 6f 64 75 6c 65 2a 2c 0a 20 20 20 20 20 76 6f  module*,.     vo
2d140 69 64 2a 2c 0a 20 20 20 20 20 76 6f 69 64 28 2a  id*,.     void(*
2d150 29 28 76 6f 69 64 2a 29 0a 20 20 20 29 3b 0a 23  )(void*).   );.#
2d160 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
2d170 56 74 61 62 49 6e 53 79 6e 63 28 64 62 29 20 28  VtabInSync(db) (
2d180 28 64 62 29 2d 3e 6e 56 54 72 61 6e 73 3e 30 20  (db)->nVTrans>0 
2d190 26 26 20 28 64 62 29 2d 3e 61 56 54 72 61 6e 73  && (db)->aVTrans
2d1a0 3d 3d 30 29 0a 23 65 6e 64 69 66 0a 69 6e 74 20  ==0).#endif.int 
2d1b0 73 71 6c 69 74 65 33 56 74 61 62 45 70 6f 6e 79  sqlite3VtabEpony
2d1c0 6d 6f 75 73 54 61 62 6c 65 49 6e 69 74 28 50 61  mousTableInit(Pa
2d1d0 72 73 65 2a 2c 4d 6f 64 75 6c 65 2a 29 3b 0a 76  rse*,Module*);.v
2d1e0 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 45  oid sqlite3VtabE
2d1f0 70 6f 6e 79 6d 6f 75 73 54 61 62 6c 65 43 6c 65  ponymousTableCle
2d200 61 72 28 73 71 6c 69 74 65 33 2a 2c 4d 6f 64 75  ar(sqlite3*,Modu
2d210 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  le*);.void sqlit
2d220 65 33 56 74 61 62 4d 61 6b 65 57 72 69 74 61 62  e3VtabMakeWritab
2d230 6c 65 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a  le(Parse*,Table*
2d240 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
2d250 74 61 62 42 65 67 69 6e 50 61 72 73 65 28 50 61  tabBeginParse(Pa
2d260 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  rse*, Token*, To
2d270 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e  ken*, Token*, in
2d280 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2d290 56 74 61 62 46 69 6e 69 73 68 50 61 72 73 65 28  VtabFinishParse(
2d2a0 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Parse*, Token*);
2d2b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61  .void sqlite3Vta
2d2c0 62 41 72 67 49 6e 69 74 28 50 61 72 73 65 2a 29  bArgInit(Parse*)
2d2d0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74  ;.void sqlite3Vt
2d2e0 61 62 41 72 67 45 78 74 65 6e 64 28 50 61 72 73  abArgExtend(Pars
2d2f0 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  e*, Token*);.int
2d300 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c   sqlite3VtabCall
2d310 43 72 65 61 74 65 28 73 71 6c 69 74 65 33 2a 2c  Create(sqlite3*,
2d320 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72   int, const char
2d330 20 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 69 6e   *, char **);.in
2d340 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c  t sqlite3VtabCal
2d350 6c 43 6f 6e 6e 65 63 74 28 50 61 72 73 65 2a 2c  lConnect(Parse*,
2d360 20 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71   Table*);.int sq
2d370 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 44 65 73  lite3VtabCallDes
2d380 74 72 6f 79 28 73 71 6c 69 74 65 33 2a 2c 20 69  troy(sqlite3*, i
2d390 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  nt, const char *
2d3a0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74  );.int sqlite3Vt
2d3b0 61 62 42 65 67 69 6e 28 73 71 6c 69 74 65 33 20  abBegin(sqlite3 
2d3c0 2a 2c 20 56 54 61 62 6c 65 20 2a 29 3b 0a 46 75  *, VTable *);.Fu
2d3d0 6e 63 44 65 66 20 2a 73 71 6c 69 74 65 33 56 74  ncDef *sqlite3Vt
2d3e0 61 62 4f 76 65 72 6c 6f 61 64 46 75 6e 63 74 69  abOverloadFuncti
2d3f0 6f 6e 28 73 71 6c 69 74 65 33 20 2a 2c 46 75 6e  on(sqlite3 *,Fun
2d400 63 44 65 66 2a 2c 20 69 6e 74 20 6e 41 72 67 2c  cDef*, int nArg,
2d410 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
2d420 6c 69 74 65 33 49 6e 76 61 6c 69 64 46 75 6e 63  lite3InvalidFunc
2d430 74 69 6f 6e 28 73 71 6c 69 74 65 33 5f 63 6f 6e  tion(sqlite3_con
2d440 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
2d450 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 73 71 6c 69  3_value**);.sqli
2d460 74 65 33 5f 69 6e 74 36 34 20 73 71 6c 69 74 65  te3_int64 sqlite
2d470 33 53 74 6d 74 43 75 72 72 65 6e 74 54 69 6d 65  3StmtCurrentTime
2d480 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
2d490 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
2d4a0 64 62 65 50 61 72 61 6d 65 74 65 72 49 6e 64 65  dbeParameterInde
2d4b0 78 28 56 64 62 65 2a 2c 20 63 6f 6e 73 74 20 63  x(Vdbe*, const c
2d4c0 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  har*, int);.int 
2d4d0 73 71 6c 69 74 65 33 54 72 61 6e 73 66 65 72 42  sqlite3TransferB
2d4e0 69 6e 64 69 6e 67 73 28 73 71 6c 69 74 65 33 5f  indings(sqlite3_
2d4f0 73 74 6d 74 20 2a 2c 20 73 71 6c 69 74 65 33 5f  stmt *, sqlite3_
2d500 73 74 6d 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71  stmt *);.void sq
2d510 6c 69 74 65 33 50 61 72 73 65 72 52 65 73 65 74  lite3ParserReset
2d520 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71  (Parse*);.int sq
2d530 6c 69 74 65 33 52 65 70 72 65 70 61 72 65 28 56  lite3Reprepare(V
2d540 64 62 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  dbe*);.void sqli
2d550 74 65 33 45 78 70 72 4c 69 73 74 43 68 65 63 6b  te3ExprListCheck
2d560 4c 65 6e 67 74 68 28 50 61 72 73 65 2a 2c 20 45  Length(Parse*, E
2d570 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20  xprList*, const 
2d580 63 68 61 72 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20  char*);.CollSeq 
2d590 2a 73 71 6c 69 74 65 33 42 69 6e 61 72 79 43 6f  *sqlite3BinaryCo
2d5a0 6d 70 61 72 65 43 6f 6c 6c 53 65 71 28 50 61 72  mpareCollSeq(Par
2d5b0 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 45 78  se *, Expr *, Ex
2d5c0 70 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  pr *);.int sqlit
2d5d0 65 33 54 65 6d 70 49 6e 4d 65 6d 6f 72 79 28 63  e3TempInMemory(c
2d5e0 6f 6e 73 74 20 73 71 6c 69 74 65 33 2a 29 3b 0a  onst sqlite3*);.
2d5f0 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69  const char *sqli
2d600 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61  te3JournalModena
2d610 6d 65 28 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66  me(int);.#ifndef
2d620 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c   SQLITE_OMIT_WAL
2d630 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 43 68  .  int sqlite3Ch
2d640 65 63 6b 70 6f 69 6e 74 28 73 71 6c 69 74 65 33  eckpoint(sqlite3
2d650 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
2d660 2a 2c 20 69 6e 74 2a 29 3b 0a 20 20 69 6e 74 20  *, int*);.  int 
2d670 73 71 6c 69 74 65 33 57 61 6c 44 65 66 61 75 6c  sqlite3WalDefaul
2d680 74 48 6f 6f 6b 28 76 6f 69 64 2a 2c 73 71 6c 69  tHook(void*,sqli
2d690 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
2d6a0 2c 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 23 69  ,int);.#endif.#i
2d6b0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2d6c0 54 5f 43 54 45 0a 20 20 57 69 74 68 20 2a 73 71  T_CTE.  With *sq
2d6d0 6c 69 74 65 33 57 69 74 68 41 64 64 28 50 61 72  lite3WithAdd(Par
2d6e0 73 65 2a 2c 57 69 74 68 2a 2c 54 6f 6b 65 6e 2a  se*,With*,Token*
2d6f0 2c 45 78 70 72 4c 69 73 74 2a 2c 53 65 6c 65 63  ,ExprList*,Selec
2d700 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  t*);.  void sqli
2d710 74 65 33 57 69 74 68 44 65 6c 65 74 65 28 73 71  te3WithDelete(sq
2d720 6c 69 74 65 33 2a 2c 57 69 74 68 2a 29 3b 0a 20  lite3*,With*);. 
2d730 20 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 74   void sqlite3Wit
2d740 68 50 75 73 68 28 50 61 72 73 65 2a 2c 20 57 69  hPush(Parse*, Wi
2d750 74 68 2a 2c 20 75 38 29 3b 0a 23 65 6c 73 65 0a  th*, u8);.#else.
2d760 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 57  #define sqlite3W
2d770 69 74 68 50 75 73 68 28 78 2c 79 2c 7a 29 0a 23  ithPush(x,y,z).#
2d780 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 57 69  define sqlite3Wi
2d790 74 68 44 65 6c 65 74 65 28 78 2c 79 29 0a 23 65  thDelete(x,y).#e
2d7a0 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
2d7b0 49 54 45 5f 4f 4d 49 54 5f 55 50 53 45 52 54 0a  ITE_OMIT_UPSERT.
2d7c0 20 20 55 70 73 65 72 74 20 2a 73 71 6c 69 74 65    Upsert *sqlite
2d7d0 33 55 70 73 65 72 74 4e 65 77 28 73 71 6c 69 74  3UpsertNew(sqlit
2d7e0 65 33 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78  e3*,ExprList*,Ex
2d7f0 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78  pr*,ExprList*,Ex
2d800 70 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  pr*);.  void sql
2d810 69 74 65 33 55 70 73 65 72 74 44 65 6c 65 74 65  ite3UpsertDelete
2d820 28 73 71 6c 69 74 65 33 2a 2c 55 70 73 65 72 74  (sqlite3*,Upsert
2d830 2a 29 3b 0a 20 20 55 70 73 65 72 74 20 2a 73 71  *);.  Upsert *sq
2d840 6c 69 74 65 33 55 70 73 65 72 74 44 75 70 28 73  lite3UpsertDup(s
2d850 71 6c 69 74 65 33 2a 2c 55 70 73 65 72 74 2a 29  qlite3*,Upsert*)
2d860 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 55  ;.  int sqlite3U
2d870 70 73 65 72 74 41 6e 61 6c 79 7a 65 54 61 72 67  psertAnalyzeTarg
2d880 65 74 28 50 61 72 73 65 2a 2c 53 72 63 4c 69 73  et(Parse*,SrcLis
2d890 74 2a 2c 55 70 73 65 72 74 2a 29 3b 0a 20 20 76  t*,Upsert*);.  v
2d8a0 6f 69 64 20 73 71 6c 69 74 65 33 55 70 73 65 72  oid sqlite3Upser
2d8b0 74 44 6f 55 70 64 61 74 65 28 50 61 72 73 65 2a  tDoUpdate(Parse*
2d8c0 2c 55 70 73 65 72 74 2a 2c 54 61 62 6c 65 2a 2c  ,Upsert*,Table*,
2d8d0 49 6e 64 65 78 2a 2c 69 6e 74 29 3b 0a 23 65 6c  Index*,int);.#el
2d8e0 73 65 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74  se.#define sqlit
2d8f0 65 33 55 70 73 65 72 74 4e 65 77 28 76 2c 77 2c  e3UpsertNew(v,w,
2d900 78 2c 79 2c 7a 29 20 28 28 55 70 73 65 72 74 2a  x,y,z) ((Upsert*
2d910 29 30 29 0a 23 64 65 66 69 6e 65 20 73 71 6c 69  )0).#define sqli
2d920 74 65 33 55 70 73 65 72 74 44 65 6c 65 74 65 28  te3UpsertDelete(
2d930 78 2c 79 29 0a 23 64 65 66 69 6e 65 20 73 71 6c  x,y).#define sql
2d940 69 74 65 33 55 70 73 65 72 74 44 75 70 28 78 2c  ite3UpsertDup(x,
2d950 79 29 20 20 20 20 20 20 20 28 28 55 70 73 65 72  y)       ((Upser
2d960 74 2a 29 30 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f  t*)0).#endif.../
2d970 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73 20 66  * Declarations f
2d980 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20 69 6e 20  or functions in 
2d990 66 6b 65 79 2e 63 2e 20 41 6c 6c 20 6f 66 20 74  fkey.c. All of t
2d9a0 68 65 73 65 20 61 72 65 20 72 65 70 6c 61 63 65  hese are replace
2d9b0 64 20 62 79 0a 2a 2a 20 6e 6f 2d 6f 70 20 6d 61  d by.** no-op ma
2d9c0 63 72 6f 73 20 69 66 20 4f 4d 49 54 5f 46 4f 52  cros if OMIT_FOR
2d9d0 45 49 47 4e 5f 4b 45 59 20 69 73 20 64 65 66 69  EIGN_KEY is defi
2d9e0 6e 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73  ned. In this cas
2d9f0 65 20 6e 6f 20 66 6f 72 65 69 67 6e 0a 2a 2a 20  e no foreign.** 
2da00 6b 65 79 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74  key functionalit
2da10 79 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 20  y is available. 
2da20 49 66 20 4f 4d 49 54 5f 54 52 49 47 47 45 52 20  If OMIT_TRIGGER 
2da30 69 73 20 64 65 66 69 6e 65 64 20 62 75 74 0a 2a  is defined but.*
2da40 2a 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  * OMIT_FOREIGN_K
2da50 45 59 20 69 73 20 6e 6f 74 2c 20 6f 6e 6c 79 20  EY is not, only 
2da60 73 6f 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63  some of the func
2da70 74 69 6f 6e 73 20 61 72 65 20 6e 6f 2d 6f 70 65  tions are no-ope
2da80 64 2e 20 49 6e 0a 2a 2a 20 74 68 69 73 20 63 61  d. In.** this ca
2da90 73 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20  se foreign keys 
2daa0 61 72 65 20 70 61 72 73 65 64 2c 20 62 75 74 20  are parsed, but 
2dab0 6e 6f 20 6f 74 68 65 72 20 66 75 6e 63 74 69 6f  no other functio
2dac0 6e 61 6c 69 74 79 20 69 73 0a 2a 2a 20 70 72 6f  nality is.** pro
2dad0 76 69 64 65 64 20 28 65 6e 66 6f 72 63 65 6d 65  vided (enforceme
2dae0 6e 74 20 6f 66 20 46 4b 20 63 6f 6e 73 74 72 61  nt of FK constra
2daf0 69 6e 74 73 20 72 65 71 75 69 72 65 73 20 74 68  ints requires th
2db00 65 20 74 72 69 67 67 65 72 73 20 73 75 62 2d 73  e triggers sub-s
2db10 79 73 74 65 6d 29 2e 0a 2a 2f 0a 23 69 66 20 21  ystem)..*/.#if !
2db20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
2db30 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29  MIT_FOREIGN_KEY)
2db40 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
2db50 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52  ITE_OMIT_TRIGGER
2db60 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ).  void sqlite3
2db70 46 6b 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 20  FkCheck(Parse*, 
2db80 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Table*, int, int
2db90 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20  , int*, int);.  
2dba0 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 44 72  void sqlite3FkDr
2dbb0 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20  opTable(Parse*, 
2dbc0 53 72 63 4c 69 73 74 20 2a 2c 20 54 61 62 6c 65  SrcList *, Table
2dbd0 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
2dbe0 65 33 46 6b 41 63 74 69 6f 6e 73 28 50 61 72 73  e3FkActions(Pars
2dbf0 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72  e*, Table*, Expr
2dc00 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2a  List*, int, int*
2dc10 2c 20 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71  , int);.  int sq
2dc20 6c 69 74 65 33 46 6b 52 65 71 75 69 72 65 64 28  lite3FkRequired(
2dc30 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
2dc40 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 75 33  int*, int);.  u3
2dc50 32 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61  2 sqlite3FkOldma
2dc60 73 6b 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  sk(Parse*, Table
2dc70 2a 29 3b 0a 20 20 46 4b 65 79 20 2a 73 71 6c 69  *);.  FKey *sqli
2dc80 74 65 33 46 6b 52 65 66 65 72 65 6e 63 65 73 28  te3FkReferences(
2dc90 54 61 62 6c 65 20 2a 29 3b 0a 23 65 6c 73 65 0a  Table *);.#else.
2dca0 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
2dcb0 33 46 6b 41 63 74 69 6f 6e 73 28 61 2c 62 2c 63  3FkActions(a,b,c
2dcc0 2c 64 2c 65 2c 66 29 0a 20 20 23 64 65 66 69 6e  ,d,e,f).  #defin
2dcd0 65 20 73 71 6c 69 74 65 33 46 6b 43 68 65 63 6b  e sqlite3FkCheck
2dce0 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20  (a,b,c,d,e,f).  
2dcf0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
2dd00 6b 44 72 6f 70 54 61 62 6c 65 28 61 2c 62 2c 63  kDropTable(a,b,c
2dd10 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
2dd20 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 61 2c 62  te3FkOldmask(a,b
2dd30 29 20 20 20 20 20 20 20 20 20 30 0a 20 20 23 64  )         0.  #d
2dd40 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 52  efine sqlite3FkR
2dd50 65 71 75 69 72 65 64 28 61 2c 62 2c 63 2c 64 29  equired(a,b,c,d)
2dd60 20 20 20 20 30 0a 20 20 23 64 65 66 69 6e 65 20      0.  #define 
2dd70 73 71 6c 69 74 65 33 46 6b 52 65 66 65 72 65 6e  sqlite3FkReferen
2dd80 63 65 73 28 61 29 20 20 20 20 20 20 20 20 30 0a  ces(a)        0.
2dd90 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
2dda0 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
2ddb0 47 4e 5f 4b 45 59 0a 20 20 76 6f 69 64 20 73 71  GN_KEY.  void sq
2ddc0 6c 69 74 65 33 46 6b 44 65 6c 65 74 65 28 73 71  lite3FkDelete(sq
2ddd0 6c 69 74 65 33 20 2a 2c 20 54 61 62 6c 65 2a 29  lite3 *, Table*)
2dde0 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46  ;.  int sqlite3F
2ddf0 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 50 61 72  kLocateIndex(Par
2de00 73 65 2a 2c 54 61 62 6c 65 2a 2c 46 4b 65 79 2a  se*,Table*,FKey*
2de10 2c 49 6e 64 65 78 2a 2a 2c 69 6e 74 2a 2a 29 3b  ,Index**,int**);
2de20 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
2de30 20 73 71 6c 69 74 65 33 46 6b 44 65 6c 65 74 65   sqlite3FkDelete
2de40 28 61 2c 62 29 0a 20 20 23 64 65 66 69 6e 65 20  (a,b).  #define 
2de50 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49  sqlite3FkLocateI
2de60 6e 64 65 78 28 61 2c 62 2c 63 2c 64 2c 65 29 0a  ndex(a,b,c,d,e).
2de70 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41  #endif.../*.** A
2de80 76 61 69 6c 61 62 6c 65 20 66 61 75 6c 74 20 69  vailable fault i
2de90 6e 6a 65 63 74 6f 72 73 2e 20 20 53 68 6f 75 6c  njectors.  Shoul
2dea0 64 20 62 65 20 6e 75 6d 62 65 72 65 64 20 62 65  d be numbered be
2deb0 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 30 2e 0a  ginning with 0..
2dec0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
2ded0 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f  E_FAULTINJECTOR_
2dee0 4d 41 4c 4c 4f 43 20 20 20 20 20 30 0a 23 64 65  MALLOC     0.#de
2def0 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 41 55 4c  fine SQLITE_FAUL
2df00 54 49 4e 4a 45 43 54 4f 52 5f 43 4f 55 4e 54 20  TINJECTOR_COUNT 
2df10 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68       1../*.** Th
2df20 65 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20 74  e interface to t
2df30 68 65 20 63 6f 64 65 20 69 6e 20 66 61 75 6c 74  he code in fault
2df40 2e 63 20 75 73 65 64 20 66 6f 72 20 69 64 65 6e  .c used for iden
2df50 74 69 66 79 69 6e 67 20 22 62 65 6e 69 67 6e 22  tifying "benign"
2df60 0a 2a 2a 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75  .** malloc failu
2df70 72 65 73 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c  res. This is onl
2df80 79 20 70 72 65 73 65 6e 74 20 69 66 20 53 51 4c  y present if SQL
2df90 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 2a  ITE_UNTESTABLE.*
2dfa0 2a 20 69 73 20 6e 6f 74 20 64 65 66 69 6e 65 64  * is not defined
2dfb0 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
2dfc0 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 20  ITE_UNTESTABLE. 
2dfd0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67   void sqlite3Beg
2dfe0 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76  inBenignMalloc(v
2dff0 6f 69 64 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  oid);.  void sql
2e000 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c  ite3EndBenignMal
2e010 6c 6f 63 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65  loc(void);.#else
2e020 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
2e030 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c  e3BeginBenignMal
2e040 6c 6f 63 28 29 0a 20 20 23 64 65 66 69 6e 65 20  loc().  #define 
2e050 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e  sqlite3EndBenign
2e060 4d 61 6c 6c 6f 63 28 29 0a 23 65 6e 64 69 66 0a  Malloc().#endif.
2e070 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 72  ./*.** Allowed r
2e080 65 74 75 72 6e 20 76 61 6c 75 65 73 20 66 72 6f  eturn values fro
2e090 6d 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49  m sqlite3FindInI
2e0a0 6e 64 65 78 28 29 0a 2a 2f 0a 23 64 65 66 69 6e  ndex().*/.#defin
2e0b0 65 20 49 4e 5f 49 4e 44 45 58 5f 52 4f 57 49 44  e IN_INDEX_ROWID
2e0c0 20 20 20 20 20 20 20 20 31 20 20 20 2f 2a 20 53          1   /* S
2e0d0 65 61 72 63 68 20 74 68 65 20 72 6f 77 69 64 20  earch the rowid 
2e0e0 6f 66 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a  of the table */.
2e0f0 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58  #define IN_INDEX
2e100 5f 45 50 48 20 20 20 20 20 20 20 20 20 20 32 20  _EPH          2 
2e110 20 20 2f 2a 20 53 65 61 72 63 68 20 61 6e 20 65    /* Search an e
2e120 70 68 65 6d 65 72 61 6c 20 62 2d 74 72 65 65 20  phemeral b-tree 
2e130 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  */.#define IN_IN
2e140 44 45 58 5f 49 4e 44 45 58 5f 41 53 43 20 20 20  DEX_INDEX_ASC   
2e150 20 33 20 20 20 2f 2a 20 45 78 69 73 74 69 6e 67   3   /* Existing
2e160 20 69 6e 64 65 78 20 41 53 43 45 4e 44 49 4e 47   index ASCENDING
2e170 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49   */.#define IN_I
2e180 4e 44 45 58 5f 49 4e 44 45 58 5f 44 45 53 43 20  NDEX_INDEX_DESC 
2e190 20 20 34 20 20 20 2f 2a 20 45 78 69 73 74 69 6e    4   /* Existin
2e1a0 67 20 69 6e 64 65 78 20 44 45 53 43 45 4e 44 49  g index DESCENDI
2e1b0 4e 47 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e  NG */.#define IN
2e1c0 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20 20 20 20 20  _INDEX_NOOP     
2e1d0 20 20 20 20 35 20 20 20 2f 2a 20 4e 6f 20 74 61      5   /* No ta
2e1e0 62 6c 65 20 61 76 61 69 6c 61 62 6c 65 2e 20 55  ble available. U
2e1f0 73 65 20 63 6f 6d 70 61 72 69 73 6f 6e 73 20 2a  se comparisons *
2e200 2f 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  /./*.** Allowed 
2e210 66 6c 61 67 73 20 66 6f 72 20 74 68 65 20 33 72  flags for the 3r
2e220 64 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 73  d parameter to s
2e230 71 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65  qlite3FindInInde
2e240 78 28 29 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  x()..*/.#define 
2e250 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 5f 4f 4b  IN_INDEX_NOOP_OK
2e260 20 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20       0x0001  /* 
2e270 4f 4b 20 74 6f 20 72 65 74 75 72 6e 20 49 4e 5f  OK to return IN_
2e280 49 4e 44 45 58 5f 4e 4f 4f 50 20 2a 2f 0a 23 64  INDEX_NOOP */.#d
2e290 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4d  efine IN_INDEX_M
2e2a0 45 4d 42 45 52 53 48 49 50 20 20 30 78 30 30 30  EMBERSHIP  0x000
2e2b0 32 20 20 2f 2a 20 49 4e 20 6f 70 65 72 61 74 6f  2  /* IN operato
2e2c0 72 20 75 73 65 64 20 66 6f 72 20 6d 65 6d 62 65  r used for membe
2e2d0 72 73 68 69 70 20 74 65 73 74 20 2a 2f 0a 23 64  rship test */.#d
2e2e0 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4c  efine IN_INDEX_L
2e2f0 4f 4f 50 20 20 20 20 20 20 20 20 30 78 30 30 30  OOP        0x000
2e300 34 20 20 2f 2a 20 49 4e 20 6f 70 65 72 61 74 6f  4  /* IN operato
2e310 72 20 75 73 65 64 20 61 73 20 61 20 6c 6f 6f 70  r used as a loop
2e320 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 46   */.int sqlite3F
2e330 69 6e 64 49 6e 49 6e 64 65 78 28 50 61 72 73 65  indInIndex(Parse
2e340 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75 33 32 2c   *, Expr *, u32,
2e350 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 0a 69   int*, int*);..i
2e360 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  nt sqlite3Journa
2e370 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f 76 66  lOpen(sqlite3_vf
2e380 73 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  s *, const char 
2e390 2a 2c 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20  *, sqlite3_file 
2e3a0 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e  *, int, int);.in
2e3b0 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c  t sqlite3Journal
2e3c0 53 69 7a 65 28 73 71 6c 69 74 65 33 5f 76 66 73  Size(sqlite3_vfs
2e3d0 20 2a 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64   *);.#if defined
2e3e0 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41  (SQLITE_ENABLE_A
2e3f0 54 4f 4d 49 43 5f 57 52 49 54 45 29 20 5c 0a 20  TOMIC_WRITE) \. 
2e400 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  || defined(SQLIT
2e410 45 5f 45 4e 41 42 4c 45 5f 42 41 54 43 48 5f 41  E_ENABLE_BATCH_A
2e420 54 4f 4d 49 43 5f 57 52 49 54 45 29 0a 20 20 69  TOMIC_WRITE).  i
2e430 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  nt sqlite3Journa
2e440 6c 43 72 65 61 74 65 28 73 71 6c 69 74 65 33 5f  lCreate(sqlite3_
2e450 66 69 6c 65 20 2a 29 3b 0a 23 65 6e 64 69 66 0a  file *);.#endif.
2e460 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72  .int sqlite3Jour
2e470 6e 61 6c 49 73 49 6e 4d 65 6d 6f 72 79 28 73 71  nalIsInMemory(sq
2e480 6c 69 74 65 33 5f 66 69 6c 65 20 2a 70 29 3b 0a  lite3_file *p);.
2e490 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 4a  void sqlite3MemJ
2e4a0 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74  ournalOpen(sqlit
2e4b0 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 0a 76 6f 69  e3_file *);..voi
2e4c0 64 20 73 71 6c 69 74 65 33 45 78 70 72 53 65 74  d sqlite3ExprSet
2e4d0 48 65 69 67 68 74 41 6e 64 46 6c 61 67 73 28 50  HeightAndFlags(P
2e4e0 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78  arse *pParse, Ex
2e4f0 70 72 20 2a 70 29 3b 0a 23 69 66 20 53 51 4c 49  pr *p);.#if SQLI
2e500 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50 54  TE_MAX_EXPR_DEPT
2e510 48 3e 30 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  H>0.  int sqlite
2e520 33 53 65 6c 65 63 74 45 78 70 72 48 65 69 67 68  3SelectExprHeigh
2e530 74 28 53 65 6c 65 63 74 20 2a 29 3b 0a 20 20 69  t(Select *);.  i
2e540 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 68  nt sqlite3ExprCh
2e550 65 63 6b 48 65 69 67 68 74 28 50 61 72 73 65 2a  eckHeight(Parse*
2e560 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20  , int);.#else.  
2e570 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53  #define sqlite3S
2e580 65 6c 65 63 74 45 78 70 72 48 65 69 67 68 74 28  electExprHeight(
2e590 78 29 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73  x) 0.  #define s
2e5a0 71 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b 48  qlite3ExprCheckH
2e5b0 65 69 67 68 74 28 78 2c 79 29 0a 23 65 6e 64 69  eight(x,y).#endi
2e5c0 66 0a 0a 75 33 32 20 73 71 6c 69 74 65 33 47 65  f..u32 sqlite3Ge
2e5d0 74 34 62 79 74 65 28 63 6f 6e 73 74 20 75 38 2a  t4byte(const u8*
2e5e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
2e5f0 75 74 34 62 79 74 65 28 75 38 2a 2c 20 75 33 32  ut4byte(u8*, u32
2e600 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  );..#ifdef SQLIT
2e610 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f  E_ENABLE_UNLOCK_
2e620 4e 4f 54 49 46 59 0a 20 20 76 6f 69 64 20 73 71  NOTIFY.  void sq
2e630 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42  lite3ConnectionB
2e640 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65 33 20 2a  locked(sqlite3 *
2e650 2c 20 73 71 6c 69 74 65 33 20 2a 29 3b 0a 20 20  , sqlite3 *);.  
2e660 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e  void sqlite3Conn
2e670 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 73  ectionUnlocked(s
2e680 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 76  qlite3 *db);.  v
2e690 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65  oid sqlite3Conne
2e6a0 63 74 69 6f 6e 43 6c 6f 73 65 64 28 73 71 6c 69  ctionClosed(sqli
2e6b0 74 65 33 20 2a 64 62 29 3b 0a 23 65 6c 73 65 0a  te3 *db);.#else.
2e6c0 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
2e6d0 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b  3ConnectionBlock
2e6e0 65 64 28 78 2c 79 29 0a 20 20 23 64 65 66 69 6e  ed(x,y).  #defin
2e6f0 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74  e sqlite3Connect
2e700 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 78 29 0a 20  ionUnlocked(x). 
2e710 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
2e720 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64  ConnectionClosed
2e730 28 78 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  (x).#endif..#ifd
2e740 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
2e750 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61    void sqlite3Pa
2e760 72 73 65 72 54 72 61 63 65 28 46 49 4c 45 2a 2c  rserTrace(FILE*,
2e770 20 63 68 61 72 20 2a 29 3b 0a 23 65 6e 64 69 66   char *);.#endif
2e780 0a 23 69 66 20 64 65 66 69 6e 65 64 28 59 59 43  .#if defined(YYC
2e790 4f 56 45 52 41 47 45 29 0a 20 20 69 6e 74 20 73  OVERAGE).  int s
2e7a0 71 6c 69 74 65 33 50 61 72 73 65 72 43 6f 76 65  qlite3ParserCove
2e7b0 72 61 67 65 28 46 49 4c 45 2a 29 3b 0a 23 65 6e  rage(FILE*);.#en
2e7c0 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68  dif../*.** If th
2e7d0 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 20  e SQLITE_ENABLE 
2e7e0 49 4f 54 52 41 43 45 20 65 78 69 73 74 73 20 74  IOTRACE exists t
2e7f0 68 65 6e 20 74 68 65 20 67 6c 6f 62 61 6c 20 76  hen the global v
2e800 61 72 69 61 62 6c 65 0a 2a 2a 20 73 71 6c 69 74  ariable.** sqlit
2e810 65 33 49 6f 54 72 61 63 65 20 69 73 20 61 20 70  e3IoTrace is a p
2e820 6f 69 6e 74 65 72 20 74 6f 20 61 20 70 72 69 6e  ointer to a prin
2e830 74 66 2d 6c 69 6b 65 20 72 6f 75 74 69 6e 65 20  tf-like routine 
2e840 75 73 65 64 20 74 6f 0a 2a 2a 20 70 72 69 6e 74  used to.** print
2e850 20 49 2f 4f 20 74 72 61 63 69 6e 67 20 6d 65 73   I/O tracing mes
2e860 73 61 67 65 73 2e 0a 2a 2f 0a 23 69 66 64 65 66  sages..*/.#ifdef
2e870 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 49   SQLITE_ENABLE_I
2e880 4f 54 52 41 43 45 0a 23 20 64 65 66 69 6e 65 20  OTRACE.# define 
2e890 49 4f 54 52 41 43 45 28 41 29 20 20 69 66 28 20  IOTRACE(A)  if( 
2e8a0 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 29  sqlite3IoTrace )
2e8b0 7b 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65  { sqlite3IoTrace
2e8c0 20 41 3b 20 7d 0a 20 20 76 6f 69 64 20 73 71 6c   A; }.  void sql
2e8d0 69 74 65 33 56 64 62 65 49 4f 54 72 61 63 65 53  ite3VdbeIOTraceS
2e8e0 71 6c 28 56 64 62 65 2a 29 3b 0a 53 51 4c 49 54  ql(Vdbe*);.SQLIT
2e8f0 45 5f 41 50 49 20 53 51 4c 49 54 45 5f 45 58 54  E_API SQLITE_EXT
2e900 45 52 4e 20 76 6f 69 64 20 28 53 51 4c 49 54 45  ERN void (SQLITE
2e910 5f 43 44 45 43 4c 20 2a 73 71 6c 69 74 65 33 49  _CDECL *sqlite3I
2e920 6f 54 72 61 63 65 29 28 63 6f 6e 73 74 20 63 68  oTrace)(const ch
2e930 61 72 2a 2c 2e 2e 2e 29 3b 0a 23 65 6c 73 65 0a  ar*,...);.#else.
2e940 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41 43 45  # define IOTRACE
2e950 28 41 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  (A).# define sql
2e960 69 74 65 33 56 64 62 65 49 4f 54 72 61 63 65 53  ite3VdbeIOTraceS
2e970 71 6c 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ql(X).#endif../*
2e980 0a 2a 2a 20 54 68 65 73 65 20 72 6f 75 74 69 6e  .** These routin
2e990 65 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65  es are available
2e9a0 20 66 6f 72 20 74 68 65 20 6d 65 6d 32 2e 63 20   for the mem2.c 
2e9b0 64 65 62 75 67 67 69 6e 67 20 6d 65 6d 6f 72 79  debugging memory
2e9c0 20 61 6c 6c 6f 63 61 74 6f 72 0a 2a 2a 20 6f 6e   allocator.** on
2e9d0 6c 79 2e 20 20 54 68 65 79 20 61 72 65 20 75 73  ly.  They are us
2e9e0 65 64 20 74 6f 20 76 65 72 69 66 79 20 74 68 61  ed to verify tha
2e9f0 74 20 64 69 66 66 65 72 65 6e 74 20 22 74 79 70  t different "typ
2ea00 65 73 22 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a  es" of memory.**
2ea10 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65   allocations are
2ea20 20 70 72 6f 70 65 72 6c 79 20 74 72 61 63 6b 65   properly tracke
2ea30 64 20 62 79 20 74 68 65 20 73 79 73 74 65 6d 2e  d by the system.
2ea40 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65  .**.** sqlite3Me
2ea50 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 29 20  mdebugSetType() 
2ea60 73 65 74 73 20 74 68 65 20 22 74 79 70 65 22 20  sets the "type" 
2ea70 6f 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e  of an allocation
2ea80 20 74 6f 20 6f 6e 65 20 6f 66 0a 2a 2a 20 74 68   to one of.** th
2ea90 65 20 4d 45 4d 54 59 50 45 5f 2a 20 6d 61 63 72  e MEMTYPE_* macr
2eaa0 6f 73 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77  os defined below
2eab0 2e 20 20 54 68 65 20 74 79 70 65 20 6d 75 73 74  .  The type must
2eac0 20 62 65 20 61 20 62 69 74 6d 61 73 6b 20 77 69   be a bitmask wi
2ead0 74 68 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20 62  th.** a single b
2eae0 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 73 71  it set..**.** sq
2eaf0 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73  lite3MemdebugHas
2eb00 54 79 70 65 28 29 20 72 65 74 75 72 6e 73 20 74  Type() returns t
2eb10 72 75 65 20 69 66 20 61 6e 79 20 6f 66 20 74 68  rue if any of th
2eb20 65 20 62 69 74 73 20 69 6e 20 69 74 73 20 73 65  e bits in its se
2eb30 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74  cond.** argument
2eb40 20 6d 61 74 63 68 20 74 68 65 20 74 79 70 65 20   match the type 
2eb50 73 65 74 20 62 79 20 74 68 65 20 70 72 65 76 69  set by the previ
2eb60 6f 75 73 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  ous sqlite3Memde
2eb70 62 75 67 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a  bugSetType()..**
2eb80 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
2eb90 48 61 73 54 79 70 65 28 29 20 69 73 20 69 6e 74  HasType() is int
2eba0 65 6e 64 65 64 20 66 6f 72 20 75 73 65 20 69 6e  ended for use in
2ebb0 73 69 64 65 20 61 73 73 65 72 74 28 29 20 73 74  side assert() st
2ebc0 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20  atements..**.** 
2ebd0 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e  sqlite3MemdebugN
2ebe0 6f 54 79 70 65 28 29 20 72 65 74 75 72 6e 73 20  oType() returns 
2ebf0 74 72 75 65 20 69 66 20 6e 6f 6e 65 20 6f 66 20  true if none of 
2ec00 74 68 65 20 62 69 74 73 20 69 6e 20 69 74 73 20  the bits in its 
2ec10 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65  second.** argume
2ec20 6e 74 20 6d 61 74 63 68 20 74 68 65 20 74 79 70  nt match the typ
2ec30 65 20 73 65 74 20 62 79 20 74 68 65 20 70 72 65  e set by the pre
2ec40 76 69 6f 75 73 20 73 71 6c 69 74 65 33 4d 65 6d  vious sqlite3Mem
2ec50 64 65 62 75 67 53 65 74 54 79 70 65 28 29 2e 0a  debugSetType()..
2ec60 2a 2a 0a 2a 2a 20 50 65 72 68 61 70 73 20 74 68  **.** Perhaps th
2ec70 65 20 6d 6f 73 74 20 69 6d 70 6f 72 74 61 6e 74  e most important
2ec80 20 70 6f 69 6e 74 20 69 73 20 74 68 65 20 64 69   point is the di
2ec90 66 66 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e  fference between
2eca0 20 4d 45 4d 54 59 50 45 5f 48 45 41 50 0a 2a 2a   MEMTYPE_HEAP.**
2ecb0 20 61 6e 64 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f   and MEMTYPE_LOO
2ecc0 4b 41 53 49 44 45 2e 20 20 49 66 20 61 6e 20 61  KASIDE.  If an a
2ecd0 6c 6c 6f 63 61 74 69 6f 6e 20 69 73 20 4d 45 4d  llocation is MEM
2ece0 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2c 20  TYPE_LOOKASIDE, 
2ecf0 74 68 61 74 20 6d 65 61 6e 73 0a 2a 2a 20 69 74  that means.** it
2ed00 20 6d 69 67 68 74 20 68 61 76 65 20 62 65 65 6e   might have been
2ed10 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20 6c 6f   allocated by lo
2ed20 6f 6b 61 73 69 64 65 2c 20 65 78 63 65 70 74 20  okaside, except 
2ed30 74 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 77  the allocation w
2ed40 61 73 0a 2a 2a 20 74 6f 6f 20 6c 61 72 67 65 20  as.** too large 
2ed50 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 20 77 61 73  or lookaside was
2ed60 20 61 6c 72 65 61 64 79 20 66 75 6c 6c 2e 20 20   already full.  
2ed70 49 74 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20  It is important 
2ed80 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74 68 61  to verify.** tha
2ed90 74 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 74 68  t allocations th
2eda0 61 74 20 6d 69 67 68 74 20 68 61 76 65 20 62 65  at might have be
2edb0 65 6e 20 73 61 74 69 73 66 69 65 64 20 62 79 20  en satisfied by 
2edc0 6c 6f 6f 6b 61 73 69 64 65 20 61 72 65 20 6e 6f  lookaside are no
2edd0 74 0a 2a 2a 20 70 61 73 73 65 64 20 62 61 63 6b  t.** passed back
2ede0 20 74 6f 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64   to non-lookasid
2edf0 65 20 66 72 65 65 28 29 20 72 6f 75 74 69 6e 65  e free() routine
2ee00 73 2e 20 20 41 73 73 65 72 74 73 20 73 75 63 68  s.  Asserts such
2ee10 20 61 73 20 74 68 65 0a 2a 2a 20 65 78 61 6d 70   as the.** examp
2ee20 6c 65 20 61 62 6f 76 65 20 61 72 65 20 70 6c 61  le above are pla
2ee30 63 65 64 20 6f 6e 20 74 68 65 20 6e 6f 6e 2d 6c  ced on the non-l
2ee40 6f 6f 6b 61 73 69 64 65 20 66 72 65 65 28 29 20  ookaside free() 
2ee50 72 6f 75 74 69 6e 65 73 20 74 6f 20 76 65 72 69  routines to veri
2ee60 66 79 0a 2a 2a 20 74 68 69 73 20 63 6f 6e 73 74  fy.** this const
2ee70 72 61 69 6e 74 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c  raint..**.** All
2ee80 20 6f 66 20 74 68 69 73 20 69 73 20 6e 6f 2d 6f   of this is no-o
2ee90 70 20 66 6f 72 20 61 20 70 72 6f 64 75 63 74 69  p for a producti
2eea0 6f 6e 20 62 75 69 6c 64 2e 20 20 49 74 20 6f 6e  on build.  It on
2eeb0 6c 79 20 63 6f 6d 65 73 20 69 6e 74 6f 0a 2a 2a  ly comes into.**
2eec0 20 70 6c 61 79 20 77 68 65 6e 20 74 68 65 20 53   play when the S
2eed0 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 63  QLITE_MEMDEBUG c
2eee0 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
2eef0 6f 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 23  on is used..*/.#
2ef00 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4d 45 4d  ifdef SQLITE_MEM
2ef10 44 45 42 55 47 0a 20 20 76 6f 69 64 20 73 71 6c  DEBUG.  void sql
2ef20 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54  ite3MemdebugSetT
2ef30 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20  ype(void*,u8);. 
2ef40 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 64   int sqlite3Memd
2ef50 65 62 75 67 48 61 73 54 79 70 65 28 76 6f 69 64  ebugHasType(void
2ef60 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c  *,u8);.  int sql
2ef70 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79  ite3MemdebugNoTy
2ef80 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 23 65  pe(void*,u8);.#e
2ef90 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
2efa0 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54  ite3MemdebugSetT
2efb0 79 70 65 28 58 2c 59 29 20 20 2f 2a 20 6e 6f 2d  ype(X,Y)  /* no-
2efc0 6f 70 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 73  op */.# define s
2efd0 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61  qlite3MemdebugHa
2efe0 73 54 79 70 65 28 58 2c 59 29 20 20 31 0a 23 20  sType(X,Y)  1.# 
2eff0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65  define sqlite3Me
2f000 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 58 2c 59  mdebugNoType(X,Y
2f010 29 20 20 20 31 0a 23 65 6e 64 69 66 0a 23 64 65  )   1.#endif.#de
2f020 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 48 45 41  fine MEMTYPE_HEA
2f030 50 20 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a  P       0x01  /*
2f040 20 47 65 6e 65 72 61 6c 20 68 65 61 70 20 61 6c   General heap al
2f050 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65  locations */.#de
2f060 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f  fine MEMTYPE_LOO
2f070 4b 41 53 49 44 45 20 20 30 78 30 32 20 20 2f 2a  KASIDE  0x02  /*
2f080 20 48 65 61 70 20 74 68 61 74 20 6d 69 67 68 74   Heap that might
2f090 20 68 61 76 65 20 62 65 65 6e 20 6c 6f 6f 6b 61   have been looka
2f0a0 73 69 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  side */.#define 
2f0b0 4d 45 4d 54 59 50 45 5f 50 43 41 43 48 45 20 20  MEMTYPE_PCACHE  
2f0c0 20 20 20 30 78 30 34 20 20 2f 2a 20 50 61 67 65     0x04  /* Page
2f0d0 20 63 61 63 68 65 20 61 6c 6c 6f 63 61 74 69 6f   cache allocatio
2f0e0 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 72  ns */../*.** Thr
2f0f0 65 61 64 69 6e 67 20 69 6e 74 65 72 66 61 63 65  eading interface
2f100 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d  .*/.#if SQLITE_M
2f110 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  AX_WORKER_THREAD
2f120 53 3e 30 0a 69 6e 74 20 73 71 6c 69 74 65 33 54  S>0.int sqlite3T
2f130 68 72 65 61 64 43 72 65 61 74 65 28 53 51 4c 69  hreadCreate(SQLi
2f140 74 65 54 68 72 65 61 64 2a 2a 2c 76 6f 69 64 2a  teThread**,void*
2f150 28 2a 29 28 76 6f 69 64 2a 29 2c 76 6f 69 64 2a  (*)(void*),void*
2f160 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 68  );.int sqlite3Th
2f170 72 65 61 64 4a 6f 69 6e 28 53 51 4c 69 74 65 54  readJoin(SQLiteT
2f180 68 72 65 61 64 2a 2c 20 76 6f 69 64 2a 2a 29 3b  hread*, void**);
2f190 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66  .#endif..#if def
2f1a0 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
2f1b0 4c 45 5f 44 42 50 41 47 45 5f 56 54 41 42 29 20  LE_DBPAGE_VTAB) 
2f1c0 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  || defined(SQLIT
2f1d0 45 5f 54 45 53 54 29 0a 69 6e 74 20 73 71 6c 69  E_TEST).int sqli
2f1e0 74 65 33 44 62 70 61 67 65 52 65 67 69 73 74 65  te3DbpageRegiste
2f1f0 72 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6e  r(sqlite3*);.#en
2f200 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28  dif.#if defined(
2f210 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 44 42  SQLITE_ENABLE_DB
2f220 53 54 41 54 5f 56 54 41 42 29 20 7c 7c 20 64 65  STAT_VTAB) || de
2f230 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53  fined(SQLITE_TES
2f240 54 29 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 62  T).int sqlite3Db
2f250 73 74 61 74 52 65 67 69 73 74 65 72 28 73 71 6c  statRegister(sql
2f260 69 74 65 33 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  ite3*);.#endif..
2f270 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 56  int sqlite3ExprV
2f280 65 63 74 6f 72 53 69 7a 65 28 45 78 70 72 20 2a  ectorSize(Expr *
2f290 70 45 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69  pExpr);.int sqli
2f2a0 74 65 33 45 78 70 72 49 73 56 65 63 74 6f 72 28  te3ExprIsVector(
2f2b0 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 45 78  Expr *pExpr);.Ex
2f2c0 70 72 20 2a 73 71 6c 69 74 65 33 56 65 63 74 6f  pr *sqlite3Vecto
2f2d0 72 46 69 65 6c 64 53 75 62 65 78 70 72 28 45 78  rFieldSubexpr(Ex
2f2e0 70 72 2a 2c 20 69 6e 74 29 3b 0a 45 78 70 72 20  pr*, int);.Expr 
2f2f0 2a 73 71 6c 69 74 65 33 45 78 70 72 46 6f 72 56  *sqlite3ExprForV
2f300 65 63 74 6f 72 46 69 65 6c 64 28 50 61 72 73 65  ectorField(Parse
2f310 2a 2c 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 76 6f  *,Expr*,int);.vo
2f320 69 64 20 73 71 6c 69 74 65 33 56 65 63 74 6f 72  id sqlite3Vector
2f330 45 72 72 6f 72 4d 73 67 28 50 61 72 73 65 2a 2c  ErrorMsg(Parse*,
2f340 20 45 78 70 72 2a 29 3b 0a 0a 23 69 66 6e 64 65   Expr*);..#ifnde
2f350 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f  f SQLITE_OMIT_CO
2f360 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f 44 49 41 47  MPILEOPTION_DIAG
2f370 53 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 2a 73  S.const char **s
2f380 71 6c 69 74 65 33 43 6f 6d 70 69 6c 65 4f 70 74  qlite3CompileOpt
2f390 69 6f 6e 73 28 69 6e 74 20 2a 70 6e 4f 70 74 29  ions(int *pnOpt)
2f3a0 3b 0a 23 65 6e 64 69 66 0a 0a 23 65 6e 64 69 66  ;.#endif..#endif
2f3b0 20 2f 2a 20 53 51 4c 49 54 45 49 4e 54 5f 48 20   /* SQLITEINT_H 
2f3c0 2a 2f 0a                                         */.