/ Hex Artifact Content
Login

Artifact 7a6bbb9a8864af66d864eb4e4619e263b44a35b8604f6775e1e226133d14d5ef:


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 20 20 20 7c  fined(__x86)   |
6950: 7c 20 20 20 20 5c 0a 20 20 20 20 20 20 28 64 65  |    \.      (de
6960: 66 69 6e 65 64 28 5f 5f 54 4f 53 5f 41 49 58 5f  fined(__TOS_AIX_
6970: 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f  _) && !defined(_
6980: 5f 36 34 42 49 54 5f 5f 29 29 0a 23 20 20 20 64  _64BIT__)).#   d
6990: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52  efine SQLITE_PTR
69a0: 53 49 5a 45 20 34 0a 23 20 65 6c 73 65 0a 23 20  SIZE 4.# else.# 
69b0: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
69c0: 50 54 52 53 49 5a 45 20 38 0a 23 20 65 6e 64 69  PTRSIZE 8.# endi
69d0: 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 54 68 65  f.#endif../* The
69e0: 20 75 70 74 72 20 74 79 70 65 20 69 73 20 61 6e   uptr type is an
69f0: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65   unsigned intege
6a00: 72 20 6c 61 72 67 65 20 65 6e 6f 75 67 68 20 74  r large enough t
6a10: 6f 20 68 6f 6c 64 20 61 20 70 6f 69 6e 74 65 72  o hold a pointer
6a20: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
6a30: 48 41 56 45 5f 53 54 44 49 4e 54 5f 48 29 0a 20  HAVE_STDINT_H). 
6a40: 20 74 79 70 65 64 65 66 20 75 69 6e 74 70 74 72   typedef uintptr
6a50: 5f 74 20 75 70 74 72 3b 0a 23 65 6c 69 66 20 53  _t uptr;.#elif S
6a60: 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 3d 3d 34  QLITE_PTRSIZE==4
6a70: 0a 20 20 74 79 70 65 64 65 66 20 75 33 32 20 75  .  typedef u32 u
6a80: 70 74 72 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70  ptr;.#else.  typ
6a90: 65 64 65 66 20 75 36 34 20 75 70 74 72 3b 0a 23  edef u64 uptr;.#
6aa0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
6ab0: 20 53 51 4c 49 54 45 5f 57 49 54 48 49 4e 28 50   SQLITE_WITHIN(P
6ac0: 2c 53 2c 45 29 20 6d 61 63 72 6f 20 63 68 65 63  ,S,E) macro chec
6ad0: 6b 73 20 74 6f 20 73 65 65 20 69 66 20 70 6f 69  ks to see if poi
6ae0: 6e 74 65 72 20 50 20 70 6f 69 6e 74 73 20 74 6f  nter P points to
6af0: 0a 2a 2a 20 73 6f 6d 65 74 68 69 6e 67 20 62 65  .** something be
6b00: 74 77 65 65 6e 20 53 20 28 69 6e 63 6c 75 73 69  tween S (inclusi
6b10: 76 65 29 20 61 6e 64 20 45 20 28 65 78 63 6c 75  ve) and E (exclu
6b20: 73 69 76 65 29 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20  sive)..**.** In 
6b30: 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 53 20 69  other words, S i
6b40: 73 20 61 20 62 75 66 66 65 72 20 61 6e 64 20 45  s a buffer and E
6b50: 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
6b60: 20 74 68 65 20 66 69 72 73 74 20 62 79 74 65 20   the first byte 
6b70: 61 66 74 65 72 0a 2a 2a 20 74 68 65 20 65 6e 64  after.** the end
6b80: 20 6f 66 20 62 75 66 66 65 72 20 53 2e 20 20 54   of buffer S.  T
6b90: 68 69 73 20 6d 61 63 72 6f 20 72 65 74 75 72 6e  his macro return
6ba0: 73 20 74 72 75 65 20 69 66 20 50 20 70 6f 69 6e  s true if P poin
6bb0: 74 73 20 74 6f 20 73 6f 6d 65 74 68 69 6e 67 0a  ts to something.
6bc0: 2a 2a 20 63 6f 6e 74 61 69 6e 65 64 20 77 69 74  ** contained wit
6bd0: 68 69 6e 20 74 68 65 20 62 75 66 66 65 72 20 53  hin the buffer S
6be0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
6bf0: 49 54 45 5f 57 49 54 48 49 4e 28 50 2c 53 2c 45  ITE_WITHIN(P,S,E
6c00: 29 20 28 28 28 75 70 74 72 29 28 50 29 3e 3d 28  ) (((uptr)(P)>=(
6c10: 75 70 74 72 29 28 53 29 29 26 26 28 28 75 70 74  uptr)(S))&&((upt
6c20: 72 29 28 50 29 3c 28 75 70 74 72 29 28 45 29 29  r)(P)<(uptr)(E))
6c30: 29 0a 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73  ).../*.** Macros
6c40: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 77 68   to determine wh
6c50: 65 74 68 65 72 20 74 68 65 20 6d 61 63 68 69 6e  ether the machin
6c60: 65 20 69 73 20 62 69 67 20 6f 72 20 6c 69 74 74  e is big or litt
6c70: 6c 65 20 65 6e 64 69 61 6e 2c 0a 2a 2a 20 61 6e  le endian,.** an
6c80: 64 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  d whether or not
6c90: 20 74 68 61 74 20 64 65 74 65 72 6d 69 6e 61 74   that determinat
6ca0: 69 6f 6e 20 69 73 20 72 75 6e 2d 74 69 6d 65 20  ion is run-time 
6cb0: 6f 72 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2e  or compile-time.
6cc0: 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 62 65 73 74 20  .**.** For best 
6cd0: 70 65 72 66 6f 72 6d 61 6e 63 65 2c 20 61 6e 20  performance, an 
6ce0: 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20  attempt is made 
6cf0: 74 6f 20 67 75 65 73 73 20 61 74 20 74 68 65 20  to guess at the 
6d00: 62 79 74 65 2d 6f 72 64 65 72 0a 2a 2a 20 75 73  byte-order.** us
6d10: 69 6e 67 20 43 2d 70 72 65 70 72 6f 63 65 73 73  ing C-preprocess
6d20: 6f 72 20 6d 61 63 72 6f 73 2e 20 20 49 66 20 74  or macros.  If t
6d30: 68 61 74 20 69 73 20 75 6e 73 75 63 63 65 73 73  hat is unsuccess
6d40: 66 75 6c 2c 20 6f 72 20 69 66 0a 2a 2a 20 2d 44  ful, or if.** -D
6d50: 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52  SQLITE_BYTEORDER
6d60: 3d 30 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20  =0 is set, then 
6d70: 62 79 74 65 2d 6f 72 64 65 72 20 69 73 20 64 65  byte-order is de
6d80: 74 65 72 6d 69 6e 65 64 0a 2a 2a 20 61 74 20 72  termined.** at r
6d90: 75 6e 2d 74 69 6d 65 2e 0a 2a 2f 0a 23 69 66 6e  un-time..*/.#ifn
6da0: 64 65 66 20 53 51 4c 49 54 45 5f 42 59 54 45 4f  def SQLITE_BYTEO
6db0: 52 44 45 52 0a 23 20 69 66 20 64 65 66 69 6e 65  RDER.# if define
6dc0: 64 28 69 33 38 36 29 20 20 20 20 20 7c 7c 20 64  d(i386)     || d
6dd0: 65 66 69 6e 65 64 28 5f 5f 69 33 38 36 5f 5f 29  efined(__i386__)
6de0: 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d     || defined(_M
6df0: 5f 49 58 38 36 29 20 7c 7c 20 20 20 20 5c 0a 20  _IX86) ||    \. 
6e00: 20 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 78 38      defined(__x8
6e10: 36 5f 36 34 29 20 7c 7c 20 64 65 66 69 6e 65 64  6_64) || defined
6e20: 28 5f 5f 78 38 36 5f 36 34 5f 5f 29 20 7c 7c 20  (__x86_64__) || 
6e30: 64 65 66 69 6e 65 64 28 5f 4d 5f 58 36 34 29 20  defined(_M_X64) 
6e40: 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20 64 65   ||    \.     de
6e50: 66 69 6e 65 64 28 5f 4d 5f 41 4d 44 36 34 29 20  fined(_M_AMD64) 
6e60: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41 52  || defined(_M_AR
6e70: 4d 29 20 20 20 20 20 7c 7c 20 64 65 66 69 6e 65  M)     || define
6e80: 64 28 5f 5f 78 38 36 29 20 20 20 7c 7c 20 20 20  d(__x86)   ||   
6e90: 20 5c 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28   \.     defined(
6ea0: 5f 5f 61 72 6d 5f 5f 29 20 20 7c 7c 20 64 65 66  __arm__)  || def
6eb0: 69 6e 65 64 28 5f 4d 5f 41 52 4d 36 34 29 0a 23  ined(_M_ARM64).#
6ec0: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
6ed0: 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20 31 32  _BYTEORDER    12
6ee0: 33 34 0a 23 20 65 6c 69 66 20 64 65 66 69 6e 65  34.# elif define
6ef0: 64 28 73 70 61 72 63 29 20 20 20 20 7c 7c 20 64  d(sparc)    || d
6f00: 65 66 69 6e 65 64 28 5f 5f 70 70 63 5f 5f 29 0a  efined(__ppc__).
6f10: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
6f20: 45 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20 34  E_BYTEORDER    4
6f30: 33 32 31 0a 23 20 65 6c 73 65 0a 23 20 20 20 64  321.# else.#   d
6f40: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 59 54  efine SQLITE_BYT
6f50: 45 4f 52 44 45 52 20 30 0a 23 20 65 6e 64 69 66  EORDER 0.# endif
6f60: 0a 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49  .#endif.#if SQLI
6f70: 54 45 5f 42 59 54 45 4f 52 44 45 52 3d 3d 34 33  TE_BYTEORDER==43
6f80: 32 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  21.# define SQLI
6f90: 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20  TE_BIGENDIAN    
6fa0: 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  1.# define SQLIT
6fb0: 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 30  E_LITTLEENDIAN 0
6fc0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
6fd0: 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20 53 51  _UTF16NATIVE  SQ
6fe0: 4c 49 54 45 5f 55 54 46 31 36 42 45 0a 23 65 6c  LITE_UTF16BE.#el
6ff0: 69 66 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52  if SQLITE_BYTEOR
7000: 44 45 52 3d 3d 31 32 33 34 0a 23 20 64 65 66 69  DER==1234.# defi
7010: 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e 44  ne SQLITE_BIGEND
7020: 49 41 4e 20 20 20 20 30 0a 23 20 64 65 66 69 6e  IAN    0.# defin
7030: 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45  e SQLITE_LITTLEE
7040: 4e 44 49 41 4e 20 31 0a 23 20 64 65 66 69 6e 65  NDIAN 1.# define
7050: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54   SQLITE_UTF16NAT
7060: 49 56 45 20 20 53 51 4c 49 54 45 5f 55 54 46 31  IVE  SQLITE_UTF1
7070: 36 4c 45 0a 23 65 6c 73 65 0a 23 20 69 66 64 65  6LE.#else.# ifde
7080: 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d  f SQLITE_AMALGAM
7090: 41 54 49 4f 4e 0a 20 20 63 6f 6e 73 74 20 69 6e  ATION.  const in
70a0: 74 20 73 71 6c 69 74 65 33 6f 6e 65 20 3d 20 31  t sqlite3one = 1
70b0: 3b 0a 23 20 65 6c 73 65 0a 20 20 65 78 74 65 72  ;.# else.  exter
70c0: 6e 20 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69  n const int sqli
70d0: 74 65 33 6f 6e 65 3b 0a 23 20 65 6e 64 69 66 0a  te3one;.# endif.
70e0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
70f0: 42 49 47 45 4e 44 49 41 4e 20 20 20 20 28 2a 28  BIGENDIAN    (*(
7100: 63 68 61 72 20 2a 29 28 26 73 71 6c 69 74 65 33  char *)(&sqlite3
7110: 6f 6e 65 29 3d 3d 30 29 0a 23 20 64 65 66 69 6e  one)==0).# defin
7120: 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45  e SQLITE_LITTLEE
7130: 4e 44 49 41 4e 20 28 2a 28 63 68 61 72 20 2a 29  NDIAN (*(char *)
7140: 28 26 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d 31  (&sqlite3one)==1
7150: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
7160: 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20 28  E_UTF16NATIVE  (
7170: 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e  SQLITE_BIGENDIAN
7180: 3f 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 3a  ?SQLITE_UTF16BE:
7190: 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 29 0a  SQLITE_UTF16LE).
71a0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f  #endif../*.** Co
71b0: 6e 73 74 61 6e 74 73 20 66 6f 72 20 74 68 65 20  nstants for the 
71c0: 6c 61 72 67 65 73 74 20 61 6e 64 20 73 6d 61 6c  largest and smal
71d0: 6c 65 73 74 20 70 6f 73 73 69 62 6c 65 20 36 34  lest possible 64
71e0: 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74 65  -bit signed inte
71f0: 67 65 72 73 2e 0a 2a 2a 20 54 68 65 73 65 20 6d  gers..** These m
7200: 61 63 72 6f 73 20 61 72 65 20 64 65 73 69 67 6e  acros are design
7210: 65 64 20 74 6f 20 77 6f 72 6b 20 63 6f 72 72 65  ed to work corre
7220: 63 74 6c 79 20 6f 6e 20 62 6f 74 68 20 33 32 2d  ctly on both 32-
7230: 62 69 74 20 61 6e 64 20 36 34 2d 62 69 74 0a 2a  bit and 64-bit.*
7240: 2a 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2f 0a  * compilers..*/.
7250: 23 64 65 66 69 6e 65 20 4c 41 52 47 45 53 54 5f  #define LARGEST_
7260: 49 4e 54 36 34 20 20 28 30 78 66 66 66 66 66 66  INT64  (0xffffff
7270: 66 66 7c 28 28 28 69 36 34 29 30 78 37 66 66 66  ff|(((i64)0x7fff
7280: 66 66 66 66 29 3c 3c 33 32 29 29 0a 23 64 65 66  ffff)<<32)).#def
7290: 69 6e 65 20 53 4d 41 4c 4c 45 53 54 5f 49 4e 54  ine SMALLEST_INT
72a0: 36 34 20 28 28 28 69 36 34 29 2d 31 29 20 2d 20  64 (((i64)-1) - 
72b0: 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 29 0a 0a  LARGEST_INT64)..
72c0: 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20 75 70 20 61  /*.** Round up a
72d0: 20 6e 75 6d 62 65 72 20 74 6f 20 74 68 65 20 6e   number to the n
72e0: 65 78 74 20 6c 61 72 67 65 72 20 6d 75 6c 74 69  ext larger multi
72f0: 70 6c 65 20 6f 66 20 38 2e 20 20 54 68 69 73 20  ple of 8.  This 
7300: 69 73 20 75 73 65 64 0a 2a 2a 20 74 6f 20 66 6f  is used.** to fo
7310: 72 63 65 20 38 2d 62 79 74 65 20 61 6c 69 67 6e  rce 8-byte align
7320: 6d 65 6e 74 20 6f 6e 20 36 34 2d 62 69 74 20 61  ment on 64-bit a
7330: 72 63 68 69 74 65 63 74 75 72 65 73 2e 0a 2a 2f  rchitectures..*/
7340: 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e 44 38 28  .#define ROUND8(
7350: 78 29 20 20 20 20 20 28 28 28 78 29 2b 37 29 26  x)     (((x)+7)&
7360: 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64  ~7)../*.** Round
7370: 20 64 6f 77 6e 20 74 6f 20 74 68 65 20 6e 65 61   down to the nea
7380: 72 65 73 74 20 6d 75 6c 74 69 70 6c 65 20 6f 66  rest multiple of
7390: 20 38 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f   8.*/.#define RO
73a0: 55 4e 44 44 4f 57 4e 38 28 78 29 20 28 28 78 29  UNDDOWN8(x) ((x)
73b0: 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 65  &~7)../*.** Asse
73c0: 72 74 20 74 68 61 74 20 74 68 65 20 70 6f 69 6e  rt that the poin
73d0: 74 65 72 20 58 20 69 73 20 61 6c 69 67 6e 65 64  ter X is aligned
73e0: 20 74 6f 20 61 6e 20 38 2d 62 79 74 65 20 62 6f   to an 8-byte bo
73f0: 75 6e 64 61 72 79 2e 20 20 54 68 69 73 0a 2a 2a  undary.  This.**
7400: 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 6f   macro is used o
7410: 6e 6c 79 20 77 69 74 68 69 6e 20 61 73 73 65 72  nly within asser
7420: 74 28 29 20 74 6f 20 76 65 72 69 66 79 20 74 68  t() to verify th
7430: 61 74 20 74 68 65 20 63 6f 64 65 20 67 65 74 73  at the code gets
7440: 0a 2a 2a 20 61 6c 6c 20 61 6c 69 67 6e 6d 65 6e  .** all alignmen
7450: 74 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20 63  t restrictions c
7460: 6f 72 72 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 45 78  orrect..**.** Ex
7470: 63 65 70 74 2c 20 69 66 20 53 51 4c 49 54 45 5f  cept, if SQLITE_
7480: 34 5f 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f 4d  4_BYTE_ALIGNED_M
7490: 41 4c 4c 4f 43 20 69 73 20 64 65 66 69 6e 65 64  ALLOC is defined
74a0: 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 75 6e  , then the.** un
74b0: 64 65 72 6c 79 69 6e 67 20 6d 61 6c 6c 6f 63 28  derlying malloc(
74c0: 29 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  ) implementation
74d0: 20 6d 69 67 68 74 20 72 65 74 75 72 6e 20 75 73   might return us
74e0: 20 34 2d 62 79 74 65 20 61 6c 69 67 6e 65 64 0a   4-byte aligned.
74f0: 2a 2a 20 70 6f 69 6e 74 65 72 73 2e 20 20 49 6e  ** pointers.  In
7500: 20 74 68 61 74 20 63 61 73 65 2c 20 6f 6e 6c 79   that case, only
7510: 20 76 65 72 69 66 79 20 34 2d 62 79 74 65 20 61   verify 4-byte a
7520: 6c 69 67 6e 6d 65 6e 74 2e 0a 2a 2f 0a 23 69 66  lignment..*/.#if
7530: 64 65 66 20 53 51 4c 49 54 45 5f 34 5f 42 59 54  def SQLITE_4_BYT
7540: 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43  E_ALIGNED_MALLOC
7550: 0a 23 20 64 65 66 69 6e 65 20 45 49 47 48 54 5f  .# define EIGHT_
7560: 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28 58  BYTE_ALIGNMENT(X
7570: 29 20 20 20 28 28 28 28 63 68 61 72 2a 29 28 58  )   ((((char*)(X
7580: 29 20 2d 20 28 63 68 61 72 2a 29 30 29 26 33 29  ) - (char*)0)&3)
7590: 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  ==0).#else.# def
75a0: 69 6e 65 20 45 49 47 48 54 5f 42 59 54 45 5f 41  ine EIGHT_BYTE_A
75b0: 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20 20 28 28  LIGNMENT(X)   ((
75c0: 28 28 63 68 61 72 2a 29 28 58 29 20 2d 20 28 63  ((char*)(X) - (c
75d0: 68 61 72 2a 29 30 29 26 37 29 3d 3d 30 29 0a 23  har*)0)&7)==0).#
75e0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 69 73  endif../*.** Dis
75f0: 61 62 6c 65 20 4d 4d 41 50 20 6f 6e 20 70 6c 61  able MMAP on pla
7600: 74 66 6f 72 6d 73 20 77 68 65 72 65 20 69 74 20  tforms where it 
7610: 69 73 20 6b 6e 6f 77 6e 20 74 6f 20 6e 6f 74 20  is known to not 
7620: 77 6f 72 6b 0a 2a 2f 0a 23 69 66 20 64 65 66 69  work.*/.#if defi
7630: 6e 65 64 28 5f 5f 4f 70 65 6e 42 53 44 5f 5f 29  ned(__OpenBSD__)
7640: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 51 4e   || defined(__QN
7650: 58 4e 54 4f 5f 5f 29 0a 23 20 75 6e 64 65 66 20  XNTO__).# undef 
7660: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
7670: 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51  SIZE.# define SQ
7680: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
7690: 5a 45 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ZE 0.#endif../*.
76a0: 2a 2a 20 44 65 66 61 75 6c 74 20 6d 61 78 69 6d  ** Default maxim
76b0: 75 6d 20 73 69 7a 65 20 6f 66 20 6d 65 6d 6f 72  um size of memor
76c0: 79 20 75 73 65 64 20 62 79 20 6d 65 6d 6f 72 79  y used by memory
76d0: 2d 6d 61 70 70 65 64 20 49 2f 4f 20 69 6e 20 74  -mapped I/O in t
76e0: 68 65 20 56 46 53 0a 2a 2f 0a 23 69 66 64 65 66  he VFS.*/.#ifdef
76f0: 20 5f 5f 41 50 50 4c 45 5f 5f 0a 23 20 69 6e 63   __APPLE__.# inc
7700: 6c 75 64 65 20 3c 54 61 72 67 65 74 43 6f 6e 64  lude <TargetCond
7710: 69 74 69 6f 6e 61 6c 73 2e 68 3e 0a 23 65 6e 64  itionals.h>.#end
7720: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
7730: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a  E_MAX_MMAP_SIZE.
7740: 23 20 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 6c  # if defined(__l
7750: 69 6e 75 78 5f 5f 29 20 5c 0a 20 20 7c 7c 20 64  inux__) \.  || d
7760: 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 5c  efined(_WIN32) \
7770: 0a 20 20 7c 7c 20 28 64 65 66 69 6e 65 64 28 5f  .  || (defined(_
7780: 5f 41 50 50 4c 45 5f 5f 29 20 26 26 20 64 65 66  _APPLE__) && def
7790: 69 6e 65 64 28 5f 5f 4d 41 43 48 5f 5f 29 29 20  ined(__MACH__)) 
77a0: 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  \.  || defined(_
77b0: 5f 73 75 6e 29 20 5c 0a 20 20 7c 7c 20 64 65 66  _sun) \.  || def
77c0: 69 6e 65 64 28 5f 5f 46 72 65 65 42 53 44 5f 5f  ined(__FreeBSD__
77d0: 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64  ) \.  || defined
77e0: 28 5f 5f 44 72 61 67 6f 6e 46 6c 79 5f 5f 29 0a  (__DragonFly__).
77f0: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
7800: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20  E_MAX_MMAP_SIZE 
7810: 30 78 37 66 66 66 30 30 30 30 20 20 2f 2a 20 32  0x7fff0000  /* 2
7820: 31 34 37 34 31 38 31 31 32 20 2a 2f 0a 23 20 65  147418112 */.# e
7830: 6c 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53  lse.#   define S
7840: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
7850: 49 5a 45 20 30 0a 23 20 65 6e 64 69 66 0a 23 65  IZE 0.# endif.#e
7860: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
7870: 64 65 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49 5a  default MMAP_SIZ
7880: 45 20 69 73 20 7a 65 72 6f 20 6f 6e 20 61 6c 6c  E is zero on all
7890: 20 70 6c 61 74 66 6f 72 6d 73 2e 20 20 4f 72 2c   platforms.  Or,
78a0: 20 65 76 65 6e 20 69 66 20 61 20 6c 61 72 67 65   even if a large
78b0: 72 0a 2a 2a 20 64 65 66 61 75 6c 74 20 4d 4d 41  r.** default MMA
78c0: 50 5f 53 49 5a 45 20 69 73 20 73 70 65 63 69 66  P_SIZE is specif
78d0: 69 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74  ied at compile-t
78e0: 69 6d 65 2c 20 6d 61 6b 65 20 73 75 72 65 20 74  ime, make sure t
78f0: 68 61 74 20 69 74 20 64 6f 65 73 0a 2a 2a 20 6e  hat it does.** n
7900: 6f 74 20 65 78 63 65 65 64 20 74 68 65 20 6d 61  ot exceed the ma
7910: 78 69 6d 75 6d 20 6d 6d 61 70 20 73 69 7a 65 2e  ximum mmap size.
7920: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
7930: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f  TE_DEFAULT_MMAP_
7940: 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51  SIZE.# define SQ
7950: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41  LITE_DEFAULT_MMA
7960: 50 5f 53 49 5a 45 20 30 0a 23 65 6e 64 69 66 0a  P_SIZE 0.#endif.
7970: 23 69 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55  #if SQLITE_DEFAU
7980: 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 3e 53 51 4c  LT_MMAP_SIZE>SQL
7990: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
79a0: 45 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  E.# undef SQLITE
79b0: 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49  _DEFAULT_MMAP_SI
79c0: 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  ZE.# define SQLI
79d0: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f  TE_DEFAULT_MMAP_
79e0: 53 49 5a 45 20 53 51 4c 49 54 45 5f 4d 41 58 5f  SIZE SQLITE_MAX_
79f0: 4d 4d 41 50 5f 53 49 5a 45 0a 23 65 6e 64 69 66  MMAP_SIZE.#endif
7a00: 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 6c 79 20 6f 6e 65  ../*.** Only one
7a10: 20 6f 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c   of SQLITE_ENABL
7a20: 45 5f 53 54 41 54 33 20 6f 72 20 53 51 4c 49 54  E_STAT3 or SQLIT
7a30: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 20 63  E_ENABLE_STAT4 c
7a40: 61 6e 20 62 65 20 64 65 66 69 6e 65 64 2e 0a 2a  an be defined..*
7a50: 2a 20 50 72 69 6f 72 69 74 79 20 69 73 20 67 69  * Priority is gi
7a60: 76 65 6e 20 74 6f 20 53 51 4c 49 54 45 5f 45 4e  ven to SQLITE_EN
7a70: 41 42 4c 45 5f 53 54 41 54 34 2e 20 20 49 66 20  ABLE_STAT4.  If 
7a80: 65 69 74 68 65 72 20 61 72 65 20 64 65 66 69 6e  either are defin
7a90: 65 64 2c 20 61 6c 73 6f 0a 2a 2a 20 64 65 66 69  ed, also.** defi
7aa0: 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ne SQLITE_ENABLE
7ab0: 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a  _STAT3_OR_STAT4.
7ac0: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
7ad0: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 0a 23 20  _ENABLE_STAT4.# 
7ae0: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  undef SQLITE_ENA
7af0: 42 4c 45 5f 53 54 41 54 33 0a 23 20 64 65 66 69  BLE_STAT3.# defi
7b00: 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ne SQLITE_ENABLE
7b10: 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 20  _STAT3_OR_STAT4 
7b20: 31 0a 23 65 6c 69 66 20 53 51 4c 49 54 45 5f 45  1.#elif SQLITE_E
7b30: 4e 41 42 4c 45 5f 53 54 41 54 33 0a 23 20 64 65  NABLE_STAT3.# de
7b40: 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42  fine SQLITE_ENAB
7b50: 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
7b60: 34 20 31 0a 23 65 6c 69 66 20 53 51 4c 49 54 45  4 1.#elif SQLITE
7b70: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52  _ENABLE_STAT3_OR
7b80: 5f 53 54 41 54 34 0a 23 20 75 6e 64 65 66 20 53  _STAT4.# undef S
7b90: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
7ba0: 54 33 5f 4f 52 5f 53 54 41 54 34 0a 23 65 6e 64  T3_OR_STAT4.#end
7bb0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 45 4c 45 43 54  if../*.** SELECT
7bc0: 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 77 69  TRACE_ENABLED wi
7bd0: 6c 6c 20 62 65 20 65 69 74 68 65 72 20 31 20 6f  ll be either 1 o
7be0: 72 20 30 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e  r 0 depending on
7bf0: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 0a   whether or not.
7c00: 2a 2a 20 74 68 65 20 53 65 6c 65 63 74 20 71 75  ** the Select qu
7c10: 65 72 79 20 67 65 6e 65 72 61 74 6f 72 20 74 72  ery generator tr
7c20: 61 63 69 6e 67 20 6c 6f 67 69 63 20 69 73 20 74  acing logic is t
7c30: 75 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66  urned on..*/.#if
7c40: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
7c50: 45 4e 41 42 4c 45 5f 53 45 4c 45 43 54 54 52 41  ENABLE_SELECTTRA
7c60: 43 45 29 0a 23 20 64 65 66 69 6e 65 20 53 45 4c  CE).# define SEL
7c70: 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44  ECTTRACE_ENABLED
7c80: 20 31 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   1.#else.# defin
7c90: 65 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e  e SELECTTRACE_EN
7ca0: 41 42 4c 45 44 20 30 0a 23 65 6e 64 69 66 0a 0a  ABLED 0.#endif..
7cb0: 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
7cc0: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
7cd0: 6e 67 20 73 74 72 75 63 74 75 72 65 20 69 73 20  ng structure is 
7ce0: 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68  used to store th
7cf0: 65 20 62 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a  e busy-handler.*
7d00: 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 61  * callback for a
7d10: 20 67 69 76 65 6e 20 73 71 6c 69 74 65 20 68 61   given sqlite ha
7d20: 6e 64 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ndle..**.** The 
7d30: 73 71 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c  sqlite.busyHandl
7d40: 65 72 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65  er member of the
7d50: 20 73 71 6c 69 74 65 20 73 74 72 75 63 74 20 63   sqlite struct c
7d60: 6f 6e 74 61 69 6e 73 20 74 68 65 20 62 75 73 79  ontains the busy
7d70: 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72  .** callback for
7d80: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61   the database ha
7d90: 6e 64 6c 65 2e 20 45 61 63 68 20 70 61 67 65 72  ndle. Each pager
7da0: 20 6f 70 65 6e 65 64 20 76 69 61 20 74 68 65 20   opened via the 
7db0: 73 71 6c 69 74 65 0a 2a 2a 20 68 61 6e 64 6c 65  sqlite.** handle
7dc0: 20 69 73 20 70 61 73 73 65 64 20 61 20 70 6f 69   is passed a poi
7dd0: 6e 74 65 72 20 74 6f 20 73 71 6c 69 74 65 2e 62  nter to sqlite.b
7de0: 75 73 79 48 61 6e 64 6c 65 72 2e 20 54 68 65 20  usyHandler. The 
7df0: 62 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20  busy-handler.** 
7e00: 63 61 6c 6c 62 61 63 6b 20 69 73 20 63 75 72 72  callback is curr
7e10: 65 6e 74 6c 79 20 69 6e 76 6f 6b 65 64 20 6f 6e  ently invoked on
7e20: 6c 79 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 70  ly from within p
7e30: 61 67 65 72 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64  ager.c..*/.typed
7e40: 65 66 20 73 74 72 75 63 74 20 42 75 73 79 48 61  ef struct BusyHa
7e50: 6e 64 6c 65 72 20 42 75 73 79 48 61 6e 64 6c 65  ndler BusyHandle
7e60: 72 3b 0a 73 74 72 75 63 74 20 42 75 73 79 48 61  r;.struct BusyHa
7e70: 6e 64 6c 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a  ndler {.  int (*
7e80: 78 42 75 73 79 48 61 6e 64 6c 65 72 29 28 76 6f  xBusyHandler)(vo
7e90: 69 64 20 2a 2c 69 6e 74 29 3b 20 20 2f 2a 20 54  id *,int);  /* T
7ea0: 68 65 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b  he busy callback
7eb0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 42 75 73   */.  void *pBus
7ec0: 79 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  yArg;           
7ed0: 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
7ee0: 20 61 72 67 20 74 6f 20 62 75 73 79 20 63 61 6c   arg to busy cal
7ef0: 6c 62 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e  lback */.  int n
7f00: 42 75 73 79 3b 20 20 20 20 20 20 20 20 20 20 20  Busy;           
7f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
7f20: 49 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68  Incremented with
7f30: 20 65 61 63 68 20 62 75 73 79 20 63 61 6c 6c 20   each busy call 
7f40: 2a 2f 0a 20 20 75 38 20 62 45 78 74 72 61 46 69  */.  u8 bExtraFi
7f50: 6c 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  leArg;          
7f60: 20 20 20 20 20 20 20 2f 2a 20 49 6e 63 6c 75 64         /* Includ
7f70: 65 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 61  e sqlite3_file a
7f80: 73 20 63 61 6c 6c 62 61 63 6b 20 61 72 67 20 2a  s callback arg *
7f90: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 4e 61 6d 65  /.};../*.** Name
7fa0: 20 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20 64   of the master d
7fb0: 61 74 61 62 61 73 65 20 74 61 62 6c 65 2e 20 20  atabase table.  
7fc0: 54 68 65 20 6d 61 73 74 65 72 20 64 61 74 61 62  The master datab
7fd0: 61 73 65 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20  ase table.** is 
7fe0: 61 20 73 70 65 63 69 61 6c 20 74 61 62 6c 65 20  a special table 
7ff0: 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20 6e  that holds the n
8000: 61 6d 65 73 20 61 6e 64 20 61 74 74 72 69 62 75  ames and attribu
8010: 74 65 73 20 6f 66 20 61 6c 6c 0a 2a 2a 20 75 73  tes of all.** us
8020: 65 72 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e  er tables and in
8030: 64 69 63 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  dices..*/.#defin
8040: 65 20 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20 20  e MASTER_NAME   
8050: 20 20 20 20 22 73 71 6c 69 74 65 5f 6d 61 73 74      "sqlite_mast
8060: 65 72 22 0a 23 64 65 66 69 6e 65 20 54 45 4d 50  er".#define TEMP
8070: 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20 22 73  _MASTER_NAME  "s
8080: 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65  qlite_temp_maste
8090: 72 22 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 6f  r"../*.** The ro
80a0: 6f 74 2d 70 61 67 65 20 6f 66 20 74 68 65 20 6d  ot-page of the m
80b0: 61 73 74 65 72 20 64 61 74 61 62 61 73 65 20 74  aster database t
80c0: 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  able..*/.#define
80d0: 20 4d 41 53 54 45 52 5f 52 4f 4f 54 20 20 20 20   MASTER_ROOT    
80e0: 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20     1../*.** The 
80f0: 6e 61 6d 65 20 6f 66 20 74 68 65 20 73 63 68 65  name of the sche
8100: 6d 61 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65  ma table..*/.#de
8110: 66 69 6e 65 20 53 43 48 45 4d 41 5f 54 41 42 4c  fine SCHEMA_TABL
8120: 45 28 78 29 20 20 28 28 21 4f 4d 49 54 5f 54 45  E(x)  ((!OMIT_TE
8130: 4d 50 44 42 29 26 26 28 78 3d 3d 31 29 3f 54 45  MPDB)&&(x==1)?TE
8140: 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 3a 4d  MP_MASTER_NAME:M
8150: 41 53 54 45 52 5f 4e 41 4d 45 29 0a 0a 2f 2a 0a  ASTER_NAME)../*.
8160: 2a 2a 20 41 20 63 6f 6e 76 65 6e 69 65 6e 63 65  ** A convenience
8170: 20 6d 61 63 72 6f 20 74 68 61 74 20 72 65 74 75   macro that retu
8180: 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  rns the number o
8190: 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e 0a 2a 2a  f elements in.**
81a0: 20 61 6e 20 61 72 72 61 79 2e 0a 2a 2f 0a 23 64   an array..*/.#d
81b0: 65 66 69 6e 65 20 41 72 72 61 79 53 69 7a 65 28  efine ArraySize(
81c0: 58 29 20 20 20 20 28 28 69 6e 74 29 28 73 69 7a  X)    ((int)(siz
81d0: 65 6f 66 28 58 29 2f 73 69 7a 65 6f 66 28 58 5b  eof(X)/sizeof(X[
81e0: 30 5d 29 29 29 0a 0a 2f 2a 0a 2a 2a 20 44 65 74  0])))../*.** Det
81f0: 65 72 6d 69 6e 65 20 69 66 20 74 68 65 20 61 72  ermine if the ar
8200: 67 75 6d 65 6e 74 20 69 73 20 61 20 70 6f 77 65  gument is a powe
8210: 72 20 6f 66 20 74 77 6f 0a 2a 2f 0a 23 64 65 66  r of two.*/.#def
8220: 69 6e 65 20 49 73 50 6f 77 65 72 4f 66 54 77 6f  ine IsPowerOfTwo
8230: 28 58 29 20 28 28 28 58 29 26 28 28 58 29 2d 31  (X) (((X)&((X)-1
8240: 29 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68  ))==0)../*.** Th
8250: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 6c 75  e following valu
8260: 65 20 61 73 20 61 20 64 65 73 74 72 75 63 74 6f  e as a destructo
8270: 72 20 6d 65 61 6e 73 20 74 6f 20 75 73 65 20 73  r means to use s
8280: 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 2e 0a  qlite3DbFree()..
8290: 2a 2a 20 54 68 65 20 73 71 6c 69 74 65 33 44 62  ** The sqlite3Db
82a0: 46 72 65 65 28 29 20 72 6f 75 74 69 6e 65 20 72  Free() routine r
82b0: 65 71 75 69 72 65 73 20 74 77 6f 20 70 61 72 61  equires two para
82c0: 6d 65 74 65 72 73 20 69 6e 73 74 65 61 64 20 6f  meters instead o
82d0: 66 20 74 68 65 0a 2a 2a 20 6f 6e 65 20 70 61 72  f the.** one par
82e0: 61 6d 65 74 65 72 20 74 68 61 74 20 64 65 73 74  ameter that dest
82f0: 72 75 63 74 6f 72 73 20 6e 6f 72 6d 61 6c 6c 79  ructors normally
8300: 20 77 61 6e 74 2e 20 20 53 6f 20 77 65 20 68 61   want.  So we ha
8310: 76 65 20 74 6f 20 69 6e 74 72 6f 64 75 63 65 0a  ve to introduce.
8320: 2a 2a 20 74 68 69 73 20 6d 61 67 69 63 20 76 61  ** this magic va
8330: 6c 75 65 20 74 68 61 74 20 74 68 65 20 63 6f 64  lue that the cod
8340: 65 20 6b 6e 6f 77 73 20 74 6f 20 68 61 6e 64 6c  e knows to handl
8350: 65 20 64 69 66 66 65 72 65 6e 74 6c 79 2e 20 20  e differently.  
8360: 41 6e 79 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 77  Any.** pointer w
8370: 69 6c 6c 20 77 6f 72 6b 20 68 65 72 65 20 61 73  ill work here as
8380: 20 6c 6f 6e 67 20 61 73 20 69 74 20 69 73 20 64   long as it is d
8390: 69 73 74 69 6e 63 74 20 66 72 6f 6d 20 53 51 4c  istinct from SQL
83a0: 49 54 45 5f 53 54 41 54 49 43 0a 2a 2a 20 61 6e  ITE_STATIC.** an
83b0: 64 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45  d SQLITE_TRANSIE
83c0: 4e 54 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  NT..*/.#define S
83d0: 51 4c 49 54 45 5f 44 59 4e 41 4d 49 43 20 20 20  QLITE_DYNAMIC   
83e0: 28 28 73 71 6c 69 74 65 33 5f 64 65 73 74 72 75  ((sqlite3_destru
83f0: 63 74 6f 72 5f 74 79 70 65 29 73 71 6c 69 74 65  ctor_type)sqlite
8400: 33 4d 61 6c 6c 6f 63 53 69 7a 65 29 0a 0a 2f 2a  3MallocSize)../*
8410: 0a 2a 2a 20 57 68 65 6e 20 53 51 4c 49 54 45 5f  .** When SQLITE_
8420: 4f 4d 49 54 5f 57 53 44 20 69 73 20 64 65 66 69  OMIT_WSD is defi
8430: 6e 65 64 2c 20 69 74 20 6d 65 61 6e 73 20 74 68  ned, it means th
8440: 61 74 20 74 68 65 20 74 61 72 67 65 74 20 70 6c  at the target pl
8450: 61 74 66 6f 72 6d 20 64 6f 65 73 0a 2a 2a 20 6e  atform does.** n
8460: 6f 74 20 73 75 70 70 6f 72 74 20 57 72 69 74 61  ot support Writa
8470: 62 6c 65 20 53 74 61 74 69 63 20 44 61 74 61 20  ble Static Data 
8480: 28 57 53 44 29 20 73 75 63 68 20 61 73 20 67 6c  (WSD) such as gl
8490: 6f 62 61 6c 20 61 6e 64 20 73 74 61 74 69 63 20  obal and static 
84a0: 76 61 72 69 61 62 6c 65 73 2e 0a 2a 2a 20 41 6c  variables..** Al
84b0: 6c 20 76 61 72 69 61 62 6c 65 73 20 6d 75 73 74  l variables must
84c0: 20 65 69 74 68 65 72 20 62 65 20 6f 6e 20 74 68   either be on th
84d0: 65 20 73 74 61 63 6b 20 6f 72 20 64 79 6e 61 6d  e stack or dynam
84e0: 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64  ically allocated
84f0: 20 66 72 6f 6d 0a 2a 2a 20 74 68 65 20 68 65 61   from.** the hea
8500: 70 2e 20 20 57 68 65 6e 20 57 53 44 20 69 73 20  p.  When WSD is 
8510: 75 6e 73 75 70 70 6f 72 74 65 64 2c 20 74 68 65  unsupported, the
8520: 20 76 61 72 69 61 62 6c 65 20 64 65 63 6c 61 72   variable declar
8530: 61 74 69 6f 6e 73 20 73 63 61 74 74 65 72 65 64  ations scattered
8540: 0a 2a 2a 20 74 68 72 6f 75 67 68 6f 75 74 20 74  .** throughout t
8550: 68 65 20 53 51 4c 69 74 65 20 63 6f 64 65 20 6d  he SQLite code m
8560: 75 73 74 20 62 65 63 6f 6d 65 20 63 6f 6e 73 74  ust become const
8570: 61 6e 74 73 20 69 6e 73 74 65 61 64 2e 20 20 54  ants instead.  T
8580: 68 65 20 53 51 4c 49 54 45 5f 57 53 44 0a 2a 2a  he SQLITE_WSD.**
8590: 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 66   macro is used f
85a0: 6f 72 20 74 68 69 73 20 70 75 72 70 6f 73 65 2e  or this purpose.
85b0: 20 20 41 6e 64 20 69 6e 73 74 65 61 64 20 6f 66    And instead of
85c0: 20 72 65 66 65 72 65 6e 63 69 6e 67 20 74 68 65   referencing the
85d0: 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 64 69 72   variable.** dir
85e0: 65 63 74 6c 79 2c 20 77 65 20 75 73 65 20 69 74  ectly, we use it
85f0: 73 20 63 6f 6e 73 74 61 6e 74 20 61 73 20 61 20  s constant as a 
8600: 6b 65 79 20 74 6f 20 6c 6f 6f 6b 75 70 20 74 68  key to lookup th
8610: 65 20 72 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63  e run-time alloc
8620: 61 74 65 64 0a 2a 2a 20 62 75 66 66 65 72 20 74  ated.** buffer t
8630: 68 61 74 20 68 6f 6c 64 73 20 72 65 61 6c 20 76  hat holds real v
8640: 61 72 69 61 62 6c 65 2e 20 20 54 68 65 20 63 6f  ariable.  The co
8650: 6e 73 74 61 6e 74 20 69 73 20 61 6c 73 6f 20 74  nstant is also t
8660: 68 65 20 69 6e 69 74 69 61 6c 69 7a 65 72 0a 2a  he initializer.*
8670: 2a 20 66 6f 72 20 74 68 65 20 72 75 6e 2d 74 69  * for the run-ti
8680: 6d 65 20 61 6c 6c 6f 63 61 74 65 64 20 62 75 66  me allocated buf
8690: 66 65 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68  fer..**.** In th
86a0: 65 20 75 73 75 61 6c 20 63 61 73 65 20 77 68 65  e usual case whe
86b0: 72 65 20 57 53 44 20 69 73 20 73 75 70 70 6f 72  re WSD is suppor
86c0: 74 65 64 2c 20 74 68 65 20 53 51 4c 49 54 45 5f  ted, the SQLITE_
86d0: 57 53 44 20 61 6e 64 20 47 4c 4f 42 41 4c 0a 2a  WSD and GLOBAL.*
86e0: 2a 20 6d 61 63 72 6f 73 20 62 65 63 6f 6d 65 20  * macros become 
86f0: 6e 6f 2d 6f 70 73 20 61 6e 64 20 68 61 76 65 20  no-ops and have 
8700: 7a 65 72 6f 20 70 65 72 66 6f 72 6d 61 6e 63 65  zero performance
8710: 20 69 6d 70 61 63 74 2e 0a 2a 2f 0a 23 69 66 64   impact..*/.#ifd
8720: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
8730: 53 44 0a 20 20 23 64 65 66 69 6e 65 20 53 51 4c  SD.  #define SQL
8740: 49 54 45 5f 57 53 44 20 63 6f 6e 73 74 0a 20 20  ITE_WSD const.  
8750: 23 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28 74  #define GLOBAL(t
8760: 2c 76 29 20 28 2a 28 74 2a 29 73 71 6c 69 74 65  ,v) (*(t*)sqlite
8770: 33 5f 77 73 64 5f 66 69 6e 64 28 28 76 6f 69 64  3_wsd_find((void
8780: 2a 29 26 28 76 29 2c 20 73 69 7a 65 6f 66 28 76  *)&(v), sizeof(v
8790: 29 29 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ))).  #define sq
87a0: 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69  lite3GlobalConfi
87b0: 67 20 47 4c 4f 42 41 4c 28 73 74 72 75 63 74 20  g GLOBAL(struct 
87c0: 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 2c 20 73  Sqlite3Config, s
87d0: 71 6c 69 74 65 33 43 6f 6e 66 69 67 29 0a 20 20  qlite3Config).  
87e0: 69 6e 74 20 73 71 6c 69 74 65 33 5f 77 73 64 5f  int sqlite3_wsd_
87f0: 69 6e 69 74 28 69 6e 74 20 4e 2c 20 69 6e 74 20  init(int N, int 
8800: 4a 29 3b 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69  J);.  void *sqli
8810: 74 65 33 5f 77 73 64 5f 66 69 6e 64 28 76 6f 69  te3_wsd_find(voi
8820: 64 20 2a 4b 2c 20 69 6e 74 20 4c 29 3b 0a 23 65  d *K, int L);.#e
8830: 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 53 51  lse.  #define SQ
8840: 4c 49 54 45 5f 57 53 44 0a 20 20 23 64 65 66 69  LITE_WSD.  #defi
8850: 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20 76  ne GLOBAL(t,v) v
8860: 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
8870: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 73  e3GlobalConfig s
8880: 71 6c 69 74 65 33 43 6f 6e 66 69 67 0a 23 65 6e  qlite3Config.#en
8890: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  dif../*.** The f
88a0: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20  ollowing macros 
88b0: 61 72 65 20 75 73 65 64 20 74 6f 20 73 75 70 70  are used to supp
88c0: 72 65 73 73 20 63 6f 6d 70 69 6c 65 72 20 77 61  ress compiler wa
88d0: 72 6e 69 6e 67 73 20 61 6e 64 20 74 6f 0a 2a 2a  rnings and to.**
88e0: 20 6d 61 6b 65 20 69 74 20 63 6c 65 61 72 20 74   make it clear t
88f0: 6f 20 68 75 6d 61 6e 20 72 65 61 64 65 72 73 20  o human readers 
8900: 77 68 65 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20  when a function 
8910: 70 61 72 61 6d 65 74 65 72 20 69 73 20 64 65 6c  parameter is del
8920: 69 62 65 72 61 74 65 6c 79 0a 2a 2a 20 6c 65 66  iberately.** lef
8930: 74 20 75 6e 75 73 65 64 20 77 69 74 68 69 6e 20  t unused within 
8940: 74 68 65 20 62 6f 64 79 20 6f 66 20 61 20 66 75  the body of a fu
8950: 6e 63 74 69 6f 6e 2e 20 54 68 69 73 20 75 73 75  nction. This usu
8960: 61 6c 6c 79 20 68 61 70 70 65 6e 73 20 77 68 65  ally happens whe
8970: 6e 0a 2a 2a 20 61 20 66 75 6e 63 74 69 6f 6e 20  n.** a function 
8980: 69 73 20 63 61 6c 6c 65 64 20 76 69 61 20 61 20  is called via a 
8990: 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72  function pointer
89a0: 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68  . For example th
89b0: 65 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74  e.** implementat
89c0: 69 6f 6e 20 6f 66 20 61 6e 20 53 51 4c 20 61 67  ion of an SQL ag
89d0: 67 72 65 67 61 74 65 20 73 74 65 70 20 63 61 6c  gregate step cal
89e0: 6c 62 61 63 6b 20 6d 61 79 20 6e 6f 74 20 75 73  lback may not us
89f0: 65 20 74 68 65 0a 2a 2a 20 70 61 72 61 6d 65 74  e the.** paramet
8a00: 65 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68  er indicating th
8a10: 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  e number of argu
8a20: 6d 65 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20  ments passed to 
8a30: 74 68 65 20 61 67 67 72 65 67 61 74 65 2c 0a 2a  the aggregate,.*
8a40: 2a 20 69 66 20 69 74 20 6b 6e 6f 77 73 20 74 68  * if it knows th
8a50: 61 74 20 74 68 69 73 20 69 73 20 65 6e 66 6f 72  at this is enfor
8a60: 63 65 64 20 65 6c 73 65 77 68 65 72 65 2e 0a 2a  ced elsewhere..*
8a70: 2a 0a 2a 2a 20 57 68 65 6e 20 61 20 66 75 6e 63  *.** When a func
8a80: 74 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69  tion parameter i
8a90: 73 20 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c  s not used at al
8aa0: 6c 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64  l within the bod
8ab0: 79 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2c  y of a function,
8ac0: 0a 2a 2a 20 69 74 20 69 73 20 67 65 6e 65 72 61  .** it is genera
8ad0: 6c 6c 79 20 6e 61 6d 65 64 20 22 4e 6f 74 55 73  lly named "NotUs
8ae0: 65 64 22 20 6f 72 20 22 4e 6f 74 55 73 65 64 32  ed" or "NotUsed2
8af0: 22 20 74 6f 20 6d 61 6b 65 20 74 68 69 6e 67 73  " to make things
8b00: 20 65 76 65 6e 20 63 6c 65 61 72 65 72 2e 0a 2a   even clearer..*
8b10: 2a 20 48 6f 77 65 76 65 72 2c 20 74 68 65 73 65  * However, these
8b20: 20 6d 61 63 72 6f 73 20 6d 61 79 20 61 6c 73 6f   macros may also
8b30: 20 62 65 20 75 73 65 64 20 74 6f 20 73 75 70 70   be used to supp
8b40: 72 65 73 73 20 77 61 72 6e 69 6e 67 73 20 72 65  ress warnings re
8b50: 6c 61 74 65 64 20 74 6f 0a 2a 2a 20 70 61 72 61  lated to.** para
8b60: 6d 65 74 65 72 73 20 74 68 61 74 20 6d 61 79 20  meters that may 
8b70: 6f 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 75 73  or may not be us
8b80: 65 64 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  ed depending on 
8b90: 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69  compilation opti
8ba0: 6f 6e 73 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d  ons..** For exam
8bb0: 70 6c 65 20 74 68 6f 73 65 20 70 61 72 61 6d 65  ple those parame
8bc0: 74 65 72 73 20 6f 6e 6c 79 20 75 73 65 64 20 69  ters only used i
8bd0: 6e 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65  n assert() state
8be0: 6d 65 6e 74 73 2e 20 49 6e 20 74 68 65 73 65 0a  ments. In these.
8bf0: 2a 2a 20 63 61 73 65 73 20 74 68 65 20 70 61 72  ** cases the par
8c00: 61 6d 65 74 65 72 73 20 61 72 65 20 6e 61 6d 65  ameters are name
8c10: 64 20 61 73 20 70 65 72 20 74 68 65 20 75 73 75  d as per the usu
8c20: 61 6c 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a  al conventions..
8c30: 2a 2f 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45  */.#define UNUSE
8c40: 44 5f 50 41 52 41 4d 45 54 45 52 28 78 29 20 28  D_PARAMETER(x) (
8c50: 76 6f 69 64 29 28 78 29 0a 23 64 65 66 69 6e 65  void)(x).#define
8c60: 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45   UNUSED_PARAMETE
8c70: 52 32 28 78 2c 79 29 20 55 4e 55 53 45 44 5f 50  R2(x,y) UNUSED_P
8c80: 41 52 41 4d 45 54 45 52 28 78 29 2c 55 4e 55 53  ARAMETER(x),UNUS
8c90: 45 44 5f 50 41 52 41 4d 45 54 45 52 28 79 29 0a  ED_PARAMETER(y).
8ca0: 0a 2f 2a 0a 2a 2a 20 46 6f 72 77 61 72 64 20 72  ./*.** Forward r
8cb0: 65 66 65 72 65 6e 63 65 73 20 74 6f 20 73 74 72  eferences to str
8cc0: 75 63 74 75 72 65 73 0a 2a 2f 0a 74 79 70 65 64  uctures.*/.typed
8cd0: 65 66 20 73 74 72 75 63 74 20 41 67 67 49 6e 66  ef struct AggInf
8ce0: 6f 20 41 67 67 49 6e 66 6f 3b 0a 74 79 70 65 64  o AggInfo;.typed
8cf0: 65 66 20 73 74 72 75 63 74 20 41 75 74 68 43 6f  ef struct AuthCo
8d00: 6e 74 65 78 74 20 41 75 74 68 43 6f 6e 74 65 78  ntext AuthContex
8d10: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
8d20: 74 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 41 75  t AutoincInfo Au
8d30: 74 6f 69 6e 63 49 6e 66 6f 3b 0a 74 79 70 65 64  toincInfo;.typed
8d40: 65 66 20 73 74 72 75 63 74 20 42 69 74 76 65 63  ef struct Bitvec
8d50: 20 42 69 74 76 65 63 3b 0a 74 79 70 65 64 65 66   Bitvec;.typedef
8d60: 20 73 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20   struct CollSeq 
8d70: 43 6f 6c 6c 53 65 71 3b 0a 74 79 70 65 64 65 66  CollSeq;.typedef
8d80: 20 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 43   struct Column C
8d90: 6f 6c 75 6d 6e 3b 0a 74 79 70 65 64 65 66 20 73  olumn;.typedef s
8da0: 74 72 75 63 74 20 44 62 20 44 62 3b 0a 74 79 70  truct Db Db;.typ
8db0: 65 64 65 66 20 73 74 72 75 63 74 20 53 63 68 65  edef struct Sche
8dc0: 6d 61 20 53 63 68 65 6d 61 3b 0a 74 79 70 65 64  ma Schema;.typed
8dd0: 65 66 20 73 74 72 75 63 74 20 45 78 70 72 20 45  ef struct Expr E
8de0: 78 70 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72  xpr;.typedef str
8df0: 75 63 74 20 45 78 70 72 4c 69 73 74 20 45 78 70  uct ExprList Exp
8e00: 72 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73  rList;.typedef s
8e10: 74 72 75 63 74 20 46 4b 65 79 20 46 4b 65 79 3b  truct FKey FKey;
8e20: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8e30: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 46  FuncDestructor F
8e40: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 3b 0a 74  uncDestructor;.t
8e50: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75  ypedef struct Fu
8e60: 6e 63 44 65 66 20 46 75 6e 63 44 65 66 3b 0a 74  ncDef FuncDef;.t
8e70: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75  ypedef struct Fu
8e80: 6e 63 44 65 66 48 61 73 68 20 46 75 6e 63 44 65  ncDefHash FuncDe
8e90: 66 48 61 73 68 3b 0a 74 79 70 65 64 65 66 20 73  fHash;.typedef s
8ea0: 74 72 75 63 74 20 49 64 4c 69 73 74 20 49 64 4c  truct IdList IdL
8eb0: 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ist;.typedef str
8ec0: 75 63 74 20 49 6e 64 65 78 20 49 6e 64 65 78 3b  uct Index Index;
8ed0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8ee0: 49 6e 64 65 78 53 61 6d 70 6c 65 20 49 6e 64 65  IndexSample Inde
8ef0: 78 53 61 6d 70 6c 65 3b 0a 74 79 70 65 64 65 66  xSample;.typedef
8f00: 20 73 74 72 75 63 74 20 4b 65 79 43 6c 61 73 73   struct KeyClass
8f10: 20 4b 65 79 43 6c 61 73 73 3b 0a 74 79 70 65 64   KeyClass;.typed
8f20: 65 66 20 73 74 72 75 63 74 20 4b 65 79 49 6e 66  ef struct KeyInf
8f30: 6f 20 4b 65 79 49 6e 66 6f 3b 0a 74 79 70 65 64  o KeyInfo;.typed
8f40: 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73  ef struct Lookas
8f50: 69 64 65 20 4c 6f 6f 6b 61 73 69 64 65 3b 0a 74  ide Lookaside;.t
8f60: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4c 6f  ypedef struct Lo
8f70: 6f 6b 61 73 69 64 65 53 6c 6f 74 20 4c 6f 6f 6b  okasideSlot Look
8f80: 61 73 69 64 65 53 6c 6f 74 3b 0a 74 79 70 65 64  asideSlot;.typed
8f90: 65 66 20 73 74 72 75 63 74 20 4d 6f 64 75 6c 65  ef struct Module
8fa0: 20 4d 6f 64 75 6c 65 3b 0a 74 79 70 65 64 65 66   Module;.typedef
8fb0: 20 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74   struct NameCont
8fc0: 65 78 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 3b  ext NameContext;
8fd0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8fe0: 50 61 72 73 65 20 50 61 72 73 65 3b 0a 74 79 70  Parse Parse;.typ
8ff0: 65 64 65 66 20 73 74 72 75 63 74 20 50 72 65 55  edef struct PreU
9000: 70 64 61 74 65 20 50 72 65 55 70 64 61 74 65 3b  pdate PreUpdate;
9010: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9020: 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 20  PrintfArguments 
9030: 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 3b  PrintfArguments;
9040: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9050: 52 65 6e 61 6d 65 54 6f 6b 65 6e 20 52 65 6e 61  RenameToken Rena
9060: 6d 65 54 6f 6b 65 6e 3b 0a 74 79 70 65 64 65 66  meToken;.typedef
9070: 20 73 74 72 75 63 74 20 52 6f 77 53 65 74 20 52   struct RowSet R
9080: 6f 77 53 65 74 3b 0a 74 79 70 65 64 65 66 20 73  owSet;.typedef s
9090: 74 72 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20  truct Savepoint 
90a0: 53 61 76 65 70 6f 69 6e 74 3b 0a 74 79 70 65 64  Savepoint;.typed
90b0: 65 66 20 73 74 72 75 63 74 20 53 65 6c 65 63 74  ef struct Select
90c0: 20 53 65 6c 65 63 74 3b 0a 74 79 70 65 64 65 66   Select;.typedef
90d0: 20 73 74 72 75 63 74 20 53 51 4c 69 74 65 54 68   struct SQLiteTh
90e0: 72 65 61 64 20 53 51 4c 69 74 65 54 68 72 65 61  read SQLiteThrea
90f0: 64 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  d;.typedef struc
9100: 74 20 53 65 6c 65 63 74 44 65 73 74 20 53 65 6c  t SelectDest Sel
9110: 65 63 74 44 65 73 74 3b 0a 74 79 70 65 64 65 66  ectDest;.typedef
9120: 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 20   struct SrcList 
9130: 53 72 63 4c 69 73 74 3b 0a 74 79 70 65 64 65 66  SrcList;.typedef
9140: 20 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f   struct sqlite3_
9150: 73 74 72 20 53 74 72 41 63 63 75 6d 3b 20 2f 2a  str StrAccum; /*
9160: 20 49 6e 74 65 72 6e 61 6c 20 61 6c 69 61 73 20   Internal alias 
9170: 66 6f 72 20 73 71 6c 69 74 65 33 5f 73 74 72 20  for sqlite3_str 
9180: 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
9190: 74 20 54 61 62 6c 65 20 54 61 62 6c 65 3b 0a 74  t Table Table;.t
91a0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 61  ypedef struct Ta
91b0: 62 6c 65 4c 6f 63 6b 20 54 61 62 6c 65 4c 6f 63  bleLock TableLoc
91c0: 6b 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  k;.typedef struc
91d0: 74 20 54 6f 6b 65 6e 20 54 6f 6b 65 6e 3b 0a 74  t Token Token;.t
91e0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72  ypedef struct Tr
91f0: 65 65 56 69 65 77 20 54 72 65 65 56 69 65 77 3b  eeView TreeView;
9200: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9210: 54 72 69 67 67 65 72 20 54 72 69 67 67 65 72 3b  Trigger Trigger;
9220: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9230: 54 72 69 67 67 65 72 50 72 67 20 54 72 69 67 67  TriggerPrg Trigg
9240: 65 72 50 72 67 3b 0a 74 79 70 65 64 65 66 20 73  erPrg;.typedef s
9250: 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65  truct TriggerSte
9260: 70 20 54 72 69 67 67 65 72 53 74 65 70 3b 0a 74  p TriggerStep;.t
9270: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 55 6e  ypedef struct Un
9280: 70 61 63 6b 65 64 52 65 63 6f 72 64 20 55 6e 70  packedRecord Unp
9290: 61 63 6b 65 64 52 65 63 6f 72 64 3b 0a 74 79 70  ackedRecord;.typ
92a0: 65 64 65 66 20 73 74 72 75 63 74 20 55 70 73 65  edef struct Upse
92b0: 72 74 20 55 70 73 65 72 74 3b 0a 74 79 70 65 64  rt Upsert;.typed
92c0: 65 66 20 73 74 72 75 63 74 20 56 54 61 62 6c 65  ef struct VTable
92d0: 20 56 54 61 62 6c 65 3b 0a 74 79 70 65 64 65 66   VTable;.typedef
92e0: 20 73 74 72 75 63 74 20 56 74 61 62 43 74 78 20   struct VtabCtx 
92f0: 56 74 61 62 43 74 78 3b 0a 74 79 70 65 64 65 66  VtabCtx;.typedef
9300: 20 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20 57   struct Walker W
9310: 61 6c 6b 65 72 3b 0a 74 79 70 65 64 65 66 20 73  alker;.typedef s
9320: 74 72 75 63 74 20 57 68 65 72 65 49 6e 66 6f 20  truct WhereInfo 
9330: 57 68 65 72 65 49 6e 66 6f 3b 0a 74 79 70 65 64  WhereInfo;.typed
9340: 65 66 20 73 74 72 75 63 74 20 57 69 6e 64 6f 77  ef struct Window
9350: 20 57 69 6e 64 6f 77 3b 0a 74 79 70 65 64 65 66   Window;.typedef
9360: 20 73 74 72 75 63 74 20 57 69 74 68 20 57 69 74   struct With Wit
9370: 68 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 62  h;.../*.** The b
9380: 69 74 6d 61 73 6b 20 64 61 74 61 74 79 70 65 20  itmask datatype 
9390: 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 20 69 73  defined below is
93a0: 20 75 73 65 64 20 66 6f 72 20 76 61 72 69 6f 75   used for variou
93b0: 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e  s optimizations.
93c0: 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 69 6e 67 20  .**.** Changing 
93d0: 74 68 69 73 20 66 72 6f 6d 20 61 20 36 34 2d 62  this from a 64-b
93e0: 69 74 20 74 6f 20 61 20 33 32 2d 62 69 74 20 74  it to a 32-bit t
93f0: 79 70 65 20 6c 69 6d 69 74 73 20 74 68 65 20 6e  ype limits the n
9400: 75 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 61 62 6c  umber of.** tabl
9410: 65 73 20 69 6e 20 61 20 6a 6f 69 6e 20 74 6f 20  es in a join to 
9420: 33 32 20 69 6e 73 74 65 61 64 20 6f 66 20 36 34  32 instead of 64
9430: 2e 20 20 42 75 74 20 69 74 20 61 6c 73 6f 20 72  .  But it also r
9440: 65 64 75 63 65 73 20 74 68 65 20 73 69 7a 65 0a  educes the size.
9450: 2a 2a 20 6f 66 20 74 68 65 20 6c 69 62 72 61 72  ** of the librar
9460: 79 20 62 79 20 37 33 38 20 62 79 74 65 73 20 6f  y by 738 bytes o
9470: 6e 20 69 78 38 36 2e 0a 2a 2f 0a 23 69 66 64 65  n ix86..*/.#ifde
9480: 66 20 53 51 4c 49 54 45 5f 42 49 54 4d 41 53 4b  f SQLITE_BITMASK
9490: 5f 54 59 50 45 0a 20 20 74 79 70 65 64 65 66 20  _TYPE.  typedef 
94a0: 53 51 4c 49 54 45 5f 42 49 54 4d 41 53 4b 5f 54  SQLITE_BITMASK_T
94b0: 59 50 45 20 42 69 74 6d 61 73 6b 3b 0a 23 65 6c  YPE Bitmask;.#el
94c0: 73 65 0a 20 20 74 79 70 65 64 65 66 20 75 36 34  se.  typedef u64
94d0: 20 42 69 74 6d 61 73 6b 3b 0a 23 65 6e 64 69 66   Bitmask;.#endif
94e0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62  ../*.** The numb
94f0: 65 72 20 6f 66 20 62 69 74 73 20 69 6e 20 61 20  er of bits in a 
9500: 42 69 74 6d 61 73 6b 2e 20 20 22 42 4d 53 22 20  Bitmask.  "BMS" 
9510: 6d 65 61 6e 73 20 22 42 69 74 4d 61 73 6b 20 53  means "BitMask S
9520: 69 7a 65 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ize"..*/.#define
9530: 20 42 4d 53 20 20 28 28 69 6e 74 29 28 73 69 7a   BMS  ((int)(siz
9540: 65 6f 66 28 42 69 74 6d 61 73 6b 29 2a 38 29 29  eof(Bitmask)*8))
9550: 0a 0a 2f 2a 0a 2a 2a 20 41 20 62 69 74 20 69 6e  ../*.** A bit in
9560: 20 61 20 42 69 74 6d 61 73 6b 0a 2a 2f 0a 23 64   a Bitmask.*/.#d
9570: 65 66 69 6e 65 20 4d 41 53 4b 42 49 54 28 6e 29  efine MASKBIT(n)
9580: 20 20 20 28 28 28 42 69 74 6d 61 73 6b 29 31 29     (((Bitmask)1)
9590: 3c 3c 28 6e 29 29 0a 23 64 65 66 69 6e 65 20 4d  <<(n)).#define M
95a0: 41 53 4b 42 49 54 33 32 28 6e 29 20 28 28 28 75  ASKBIT32(n) (((u
95b0: 6e 73 69 67 6e 65 64 20 69 6e 74 29 31 29 3c 3c  nsigned int)1)<<
95c0: 28 6e 29 29 0a 23 64 65 66 69 6e 65 20 41 4c 4c  (n)).#define ALL
95d0: 42 49 54 53 20 20 20 20 20 20 28 28 42 69 74 6d  BITS      ((Bitm
95e0: 61 73 6b 29 2d 31 29 0a 0a 2f 2a 20 41 20 56 4c  ask)-1)../* A VL
95f0: 69 73 74 20 6f 62 6a 65 63 74 20 72 65 63 6f 72  ist object recor
9600: 64 73 20 61 20 6d 61 70 70 69 6e 67 20 62 65 74  ds a mapping bet
9610: 77 65 65 6e 20 70 61 72 61 6d 65 74 65 72 73 2f  ween parameters/
9620: 76 61 72 69 61 62 6c 65 73 2f 77 69 6c 64 63 61  variables/wildca
9630: 72 64 73 0a 2a 2a 20 69 6e 20 74 68 65 20 53 51  rds.** in the SQ
9640: 4c 20 73 74 61 74 65 6d 65 6e 74 20 28 73 75 63  L statement (suc
9650: 68 20 61 73 20 24 61 62 63 2c 20 40 70 71 72 2c  h as $abc, @pqr,
9660: 20 6f 72 20 3a 78 79 7a 29 20 61 6e 64 20 74 68   or :xyz) and th
9670: 65 20 69 6e 74 65 67 65 72 0a 2a 2a 20 76 61 72  e integer.** var
9680: 69 61 62 6c 65 20 6e 75 6d 62 65 72 20 61 73 73  iable number ass
9690: 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 61  ociated with tha
96a0: 74 20 70 61 72 61 6d 65 74 65 72 2e 20 20 53 65  t parameter.  Se
96b0: 65 20 74 68 65 20 66 6f 72 6d 61 74 20 64 65 73  e the format des
96c0: 63 72 69 70 74 69 6f 6e 0a 2a 2a 20 6f 6e 20 74  cription.** on t
96d0: 68 65 20 73 71 6c 69 74 65 33 56 4c 69 73 74 41  he sqlite3VListA
96e0: 64 64 28 29 20 72 6f 75 74 69 6e 65 20 66 6f 72  dd() routine for
96f0: 20 6d 6f 72 65 20 69 6e 66 6f 72 6d 61 74 69 6f   more informatio
9700: 6e 2e 20 20 41 20 56 4c 69 73 74 20 69 73 20 72  n.  A VList is r
9710: 65 61 6c 6c 79 0a 2a 2a 20 6a 75 73 74 20 61 6e  eally.** just an
9720: 20 61 72 72 61 79 20 6f 66 20 69 6e 74 65 67 65   array of intege
9730: 72 73 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 69  rs..*/.typedef i
9740: 6e 74 20 56 4c 69 73 74 3b 0a 0a 2f 2a 0a 2a 2a  nt VList;../*.**
9750: 20 44 65 66 65 72 20 73 6f 75 72 63 69 6e 67 20   Defer sourcing 
9760: 76 64 62 65 2e 68 20 61 6e 64 20 62 74 72 65 65  vdbe.h and btree
9770: 2e 68 20 75 6e 74 69 6c 20 61 66 74 65 72 20 74  .h until after t
9780: 68 65 20 22 75 38 22 20 61 6e 64 0a 2a 2a 20 22  he "u8" and.** "
9790: 42 75 73 79 48 61 6e 64 6c 65 72 22 20 74 79 70  BusyHandler" typ
97a0: 65 64 65 66 73 2e 20 76 64 62 65 2e 68 20 61 6c  edefs. vdbe.h al
97b0: 73 6f 20 72 65 71 75 69 72 65 73 20 61 20 66 65  so requires a fe
97c0: 77 20 6f 66 20 74 68 65 20 6f 70 61 71 75 65 0a  w of the opaque.
97d0: 2a 2a 20 70 6f 69 6e 74 65 72 20 74 79 70 65 73  ** pointer types
97e0: 20 28 69 2e 65 2e 20 46 75 6e 63 44 65 66 29 20   (i.e. FuncDef) 
97f0: 64 65 66 69 6e 65 64 20 61 62 6f 76 65 2e 0a 2a  defined above..*
9800: 2f 0a 23 69 6e 63 6c 75 64 65 20 22 62 74 72 65  /.#include "btre
9810: 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 76  e.h".#include "v
9820: 64 62 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  dbe.h".#include 
9830: 22 70 61 67 65 72 2e 68 22 0a 23 69 6e 63 6c 75  "pager.h".#inclu
9840: 64 65 20 22 70 63 61 63 68 65 2e 68 22 0a 23 69  de "pcache.h".#i
9850: 6e 63 6c 75 64 65 20 22 6f 73 2e 68 22 0a 23 69  nclude "os.h".#i
9860: 6e 63 6c 75 64 65 20 22 6d 75 74 65 78 2e 68 22  nclude "mutex.h"
9870: 0a 0a 2f 2a 20 54 68 65 20 53 51 4c 49 54 45 5f  ../* The SQLITE_
9880: 45 58 54 52 41 5f 44 55 52 41 42 4c 45 20 63 6f  EXTRA_DURABLE co
9890: 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
98a0: 6e 20 75 73 65 64 20 74 6f 20 73 65 74 20 74 68  n used to set th
98b0: 65 20 64 65 66 61 75 6c 74 0a 2a 2a 20 73 79 6e  e default.** syn
98c0: 63 68 72 6f 6e 6f 75 73 20 73 65 74 74 69 6e 67  chronous setting
98d0: 20 74 6f 20 45 58 54 52 41 2e 20 20 49 74 20 69   to EXTRA.  It i
98e0: 73 20 6e 6f 20 6c 6f 6e 67 65 72 20 73 75 70 70  s no longer supp
98f0: 6f 72 74 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66  orted..*/.#ifdef
9900: 20 53 51 4c 49 54 45 5f 45 58 54 52 41 5f 44 55   SQLITE_EXTRA_DU
9910: 52 41 42 4c 45 0a 23 20 77 61 72 6e 69 6e 67 20  RABLE.# warning 
9920: 55 73 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  Use SQLITE_DEFAU
9930: 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 3d 33  LT_SYNCHRONOUS=3
9940: 20 69 6e 73 74 65 61 64 20 6f 66 20 53 51 4c 49   instead of SQLI
9950: 54 45 5f 45 58 54 52 41 5f 44 55 52 41 42 4c 45  TE_EXTRA_DURABLE
9960: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
9970: 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f  _DEFAULT_SYNCHRO
9980: 4e 4f 55 53 20 33 0a 23 65 6e 64 69 66 0a 0a 2f  NOUS 3.#endif../
9990: 2a 0a 2a 2a 20 44 65 66 61 75 6c 74 20 73 79 6e  *.** Default syn
99a0: 63 68 72 6f 6e 6f 75 73 20 6c 65 76 65 6c 73 2e  chronous levels.
99b0: 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74  .**.** Note that
99c0: 20 28 66 6f 72 20 68 69 73 74 6f 72 63 61 6c 20   (for historcal 
99d0: 72 65 61 73 6f 6e 73 29 20 74 68 65 20 50 41 47  reasons) the PAG
99e0: 45 52 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 5f 2a  ER_SYNCHRONOUS_*
99f0: 20 6d 61 63 72 6f 73 20 64 69 66 66 65 72 0a 2a   macros differ.*
9a00: 2a 20 66 72 6f 6d 20 74 68 65 20 53 51 4c 49 54  * from the SQLIT
9a10: 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52  E_DEFAULT_SYNCHR
9a20: 4f 4e 4f 55 53 20 76 61 6c 75 65 20 62 79 20 31  ONOUS value by 1
9a30: 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20  ..**.**         
9a40: 20 20 50 41 47 45 52 5f 53 59 4e 43 48 52 4f 4e    PAGER_SYNCHRON
9a50: 4f 55 53 20 20 20 20 20 20 20 44 45 46 41 55 4c  OUS       DEFAUL
9a60: 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 2a 2a  T_SYNCHRONOUS.**
9a70: 20 20 20 4f 46 46 20 20 20 20 20 20 20 20 20 20     OFF          
9a80: 20 31 20 20 20 20 20 20 20 20 20 20 20 20 20 20   1              
9a90: 20 20 20 20 20 20 20 20 20 20 20 30 0a 2a 2a 20             0.** 
9aa0: 20 20 4e 4f 52 4d 41 4c 20 20 20 20 20 20 20 20    NORMAL        
9ab0: 32 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  2               
9ac0: 20 20 20 20 20 20 20 20 20 20 31 0a 2a 2a 20 20            1.**  
9ad0: 20 46 55 4c 4c 20 20 20 20 20 20 20 20 20 20 33   FULL          3
9ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9af0: 20 20 20 20 20 20 20 20 20 32 0a 2a 2a 20 20 20           2.**   
9b00: 45 58 54 52 41 20 20 20 20 20 20 20 20 20 34 20  EXTRA         4 
9b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b20: 20 20 20 20 20 20 20 20 33 0a 2a 2a 0a 2a 2a 20          3.**.** 
9b30: 54 68 65 20 22 50 52 41 47 4d 41 20 73 79 6e 63  The "PRAGMA sync
9b40: 68 72 6f 6e 6f 75 73 22 20 73 74 61 74 65 6d 65  hronous" stateme
9b50: 6e 74 20 61 6c 73 6f 20 75 73 65 73 20 74 68 65  nt also uses the
9b60: 20 7a 65 72 6f 2d 62 61 73 65 64 20 6e 75 6d 62   zero-based numb
9b70: 65 72 73 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72  ers..** In other
9b80: 20 77 6f 72 64 73 2c 20 74 68 65 20 7a 65 72 6f   words, the zero
9b90: 2d 62 61 73 65 64 20 6e 75 6d 62 65 72 73 20 61  -based numbers a
9ba0: 72 65 20 75 73 65 64 20 66 6f 72 20 61 6c 6c 20  re used for all 
9bb0: 65 78 74 65 72 6e 61 6c 20 69 6e 74 65 72 66 61  external interfa
9bc0: 63 65 73 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6f  ces.** and the o
9bd0: 6e 65 2d 62 61 73 65 64 20 76 61 6c 75 65 73 20  ne-based values 
9be0: 61 72 65 20 75 73 65 64 20 69 6e 74 65 72 6e 61  are used interna
9bf0: 6c 6c 79 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  lly..*/.#ifndef 
9c00: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53  SQLITE_DEFAULT_S
9c10: 59 4e 43 48 52 4f 4e 4f 55 53 0a 23 20 64 65 66  YNCHRONOUS.# def
9c20: 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  ine SQLITE_DEFAU
9c30: 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 32  LT_SYNCHRONOUS 2
9c40: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
9c50: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57  SQLITE_DEFAULT_W
9c60: 41 4c 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 23  AL_SYNCHRONOUS.#
9c70: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44   define SQLITE_D
9c80: 45 46 41 55 4c 54 5f 57 41 4c 5f 53 59 4e 43 48  EFAULT_WAL_SYNCH
9c90: 52 4f 4e 4f 55 53 20 53 51 4c 49 54 45 5f 44 45  RONOUS SQLITE_DE
9ca0: 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55  FAULT_SYNCHRONOU
9cb0: 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  S.#endif../*.** 
9cc0: 45 61 63 68 20 64 61 74 61 62 61 73 65 20 66 69  Each database fi
9cd0: 6c 65 20 74 6f 20 62 65 20 61 63 63 65 73 73 65  le to be accesse
9ce0: 64 20 62 79 20 74 68 65 20 73 79 73 74 65 6d 20  d by the system 
9cf0: 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a  is an instance.*
9d00: 2a 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  * of the followi
9d10: 6e 67 20 73 74 72 75 63 74 75 72 65 2e 20 20 54  ng structure.  T
9d20: 68 65 72 65 20 61 72 65 20 6e 6f 72 6d 61 6c 6c  here are normall
9d30: 79 20 74 77 6f 20 6f 66 20 74 68 65 73 65 20 73  y two of these s
9d40: 74 72 75 63 74 75 72 65 73 0a 2a 2a 20 69 6e 20  tructures.** in 
9d50: 74 68 65 20 73 71 6c 69 74 65 2e 61 44 62 5b 5d  the sqlite.aDb[]
9d60: 20 61 72 72 61 79 2e 20 20 61 44 62 5b 30 5d 20   array.  aDb[0] 
9d70: 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  is the main data
9d80: 62 61 73 65 20 66 69 6c 65 20 61 6e 64 0a 2a 2a  base file and.**
9d90: 20 61 44 62 5b 31 5d 20 69 73 20 74 68 65 20 64   aDb[1] is the d
9da0: 61 74 61 62 61 73 65 20 66 69 6c 65 20 75 73 65  atabase file use
9db0: 64 20 74 6f 20 68 6f 6c 64 20 74 65 6d 70 6f 72  d to hold tempor
9dc0: 61 72 79 20 74 61 62 6c 65 73 2e 20 20 41 64 64  ary tables.  Add
9dd0: 69 74 69 6f 6e 61 6c 0a 2a 2a 20 64 61 74 61 62  itional.** datab
9de0: 61 73 65 73 20 6d 61 79 20 62 65 20 61 74 74 61  ases may be atta
9df0: 63 68 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ched..*/.struct 
9e00: 44 62 20 7b 0a 20 20 63 68 61 72 20 2a 7a 44 62  Db {.  char *zDb
9e10: 53 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e  SName;      /* N
9e20: 61 6d 65 20 6f 66 20 74 68 69 73 20 64 61 74 61  ame of this data
9e30: 62 61 73 65 2e 20 28 73 63 68 65 6d 61 20 6e 61  base. (schema na
9e40: 6d 65 2c 20 6e 6f 74 20 66 69 6c 65 6e 61 6d 65  me, not filename
9e50: 29 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42  ) */.  Btree *pB
9e60: 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  t;          /* T
9e70: 68 65 20 42 2a 54 72 65 65 20 73 74 72 75 63 74  he B*Tree struct
9e80: 75 72 65 20 66 6f 72 20 74 68 69 73 20 64 61 74  ure for this dat
9e90: 61 62 61 73 65 20 66 69 6c 65 20 2a 2f 0a 20 20  abase file */.  
9ea0: 75 38 20 73 61 66 65 74 79 5f 6c 65 76 65 6c 3b  u8 safety_level;
9eb0: 20 20 20 20 20 2f 2a 20 48 6f 77 20 61 67 67 72       /* How aggr
9ec0: 65 73 73 69 76 65 20 61 74 20 73 79 6e 63 69 6e  essive at syncin
9ed0: 67 20 64 61 74 61 20 74 6f 20 64 69 73 6b 20 2a  g data to disk *
9ee0: 2f 0a 20 20 75 38 20 62 53 79 6e 63 53 65 74 3b  /.  u8 bSyncSet;
9ef0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
9f00: 20 69 66 20 22 50 52 41 47 4d 41 20 73 79 6e 63   if "PRAGMA sync
9f10: 68 72 6f 6e 6f 75 73 3d 4e 22 20 68 61 73 20 62  hronous=N" has b
9f20: 65 65 6e 20 72 75 6e 20 2a 2f 0a 20 20 53 63 68  een run */.  Sch
9f30: 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20  ema *pSchema;   
9f40: 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
9f50: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
9f60: 28 70 6f 73 73 69 62 6c 79 20 73 68 61 72 65 64  (possibly shared
9f70: 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  ) */.};../*.** A
9f80: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
9f90: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
9fa0: 63 74 75 72 65 20 73 74 6f 72 65 73 20 61 20 64  cture stores a d
9fb0: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 0a  atabase schema..
9fc0: 2a 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63 68 65 6d  **.** Most Schem
9fd0: 61 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61 73  a objects are as
9fe0: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20  sociated with a 
9ff0: 42 74 72 65 65 2e 20 20 54 68 65 20 65 78 63 65  Btree.  The exce
a000: 70 74 69 6f 6e 20 69 73 0a 2a 2a 20 74 68 65 20  ption is.** the 
a010: 53 63 68 65 6d 61 20 66 6f 72 20 74 68 65 20 54  Schema for the T
a020: 45 4d 50 20 64 61 74 61 62 61 65 73 20 28 73 71  EMP databaes (sq
a030: 6c 69 74 65 33 2e 61 44 62 5b 31 5d 29 20 77 68  lite3.aDb[1]) wh
a040: 69 63 68 20 69 73 20 66 72 65 65 2d 73 74 61 6e  ich is free-stan
a050: 64 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73 68 61 72  ding..** In shar
a060: 65 64 20 63 61 63 68 65 20 6d 6f 64 65 2c 20 61  ed cache mode, a
a070: 20 73 69 6e 67 6c 65 20 53 63 68 65 6d 61 20 6f   single Schema o
a080: 62 6a 65 63 74 20 63 61 6e 20 62 65 20 73 68 61  bject can be sha
a090: 72 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65 0a  red by multiple.
a0a0: 2a 2a 20 42 74 72 65 65 73 20 74 68 61 74 20 72  ** Btrees that r
a0b0: 65 66 65 72 20 74 6f 20 74 68 65 20 73 61 6d 65  efer to the same
a0c0: 20 75 6e 64 65 72 6c 79 69 6e 67 20 42 74 53 68   underlying BtSh
a0d0: 61 72 65 64 20 6f 62 6a 65 63 74 2e 0a 2a 2a 0a  ared object..**.
a0e0: 2a 2a 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74  ** Schema object
a0f0: 73 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61  s are automatica
a100: 6c 6c 79 20 64 65 61 6c 6c 6f 63 61 74 65 64 20  lly deallocated 
a110: 77 68 65 6e 20 74 68 65 20 6c 61 73 74 20 42 74  when the last Bt
a120: 72 65 65 20 74 68 61 74 0a 2a 2a 20 72 65 66 65  ree that.** refe
a130: 72 65 6e 63 65 73 20 74 68 65 6d 20 69 73 20 64  rences them is d
a140: 65 73 74 72 6f 79 65 64 2e 20 20 20 54 68 65 20  estroyed.   The 
a150: 54 45 4d 50 20 53 63 68 65 6d 61 20 69 73 20 6d  TEMP Schema is m
a160: 61 6e 75 61 6c 6c 79 20 66 72 65 65 64 20 62 79  anually freed by
a170: 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73  .** sqlite3_clos
a180: 65 28 29 2e 0a 2a 0a 2a 2a 20 41 20 74 68 72 65  e()..*.** A thre
a190: 61 64 20 6d 75 73 74 20 62 65 20 68 6f 6c 64 69  ad must be holdi
a1a0: 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68  ng a mutex on th
a1b0: 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
a1c0: 42 74 72 65 65 20 69 6e 20 6f 72 64 65 72 0a 2a  Btree in order.*
a1d0: 2a 20 74 6f 20 61 63 63 65 73 73 20 53 63 68 65  * to access Sche
a1e0: 6d 61 20 63 6f 6e 74 65 6e 74 2e 20 20 54 68 69  ma content.  Thi
a1f0: 73 20 69 6d 70 6c 69 65 73 20 74 68 61 74 20 74  s implies that t
a200: 68 65 20 74 68 72 65 61 64 20 6d 75 73 74 20 61  he thread must a
a210: 6c 73 6f 20 62 65 0a 2a 2a 20 68 6f 6c 64 69 6e  lso be.** holdin
a220: 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68 65  g a mutex on the
a230: 20 73 71 6c 69 74 65 33 20 63 6f 6e 6e 65 63 74   sqlite3 connect
a240: 69 6f 6e 20 70 6f 69 6e 74 65 72 20 74 68 61 74  ion pointer that
a250: 20 6f 77 6e 73 20 74 68 65 20 42 74 72 65 65 2e   owns the Btree.
a260: 0a 2a 2a 20 46 6f 72 20 61 20 54 45 4d 50 20 53  .** For a TEMP S
a270: 63 68 65 6d 61 2c 20 6f 6e 6c 79 20 74 68 65 20  chema, only the 
a280: 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74 65 78  connection mutex
a290: 20 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2f   is required..*/
a2a0: 0a 73 74 72 75 63 74 20 53 63 68 65 6d 61 20 7b  .struct Schema {
a2b0: 0a 20 20 69 6e 74 20 73 63 68 65 6d 61 5f 63 6f  .  int schema_co
a2c0: 6f 6b 69 65 3b 20 20 20 2f 2a 20 44 61 74 61 62  okie;   /* Datab
a2d0: 61 73 65 20 73 63 68 65 6d 61 20 76 65 72 73 69  ase schema versi
a2e0: 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68  on number for th
a2f0: 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20 69 6e 74  is file */.  int
a300: 20 69 47 65 6e 65 72 61 74 69 6f 6e 3b 20 20 20   iGeneration;   
a310: 20 20 2f 2a 20 47 65 6e 65 72 61 74 69 6f 6e 20    /* Generation 
a320: 63 6f 75 6e 74 65 72 2e 20 20 49 6e 63 72 65 6d  counter.  Increm
a330: 65 6e 74 65 64 20 77 69 74 68 20 65 61 63 68 20  ented with each 
a340: 63 68 61 6e 67 65 20 2a 2f 0a 20 20 48 61 73 68  change */.  Hash
a350: 20 74 62 6c 48 61 73 68 3b 20 20 20 20 20 20 20   tblHash;       
a360: 20 2f 2a 20 41 6c 6c 20 74 61 62 6c 65 73 20 69   /* All tables i
a370: 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a  ndexed by name *
a380: 2f 0a 20 20 48 61 73 68 20 69 64 78 48 61 73 68  /.  Hash idxHash
a390: 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  ;        /* All 
a3a0: 28 6e 61 6d 65 64 29 20 69 6e 64 69 63 65 73 20  (named) indices 
a3b0: 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20  indexed by name 
a3c0: 2a 2f 0a 20 20 48 61 73 68 20 74 72 69 67 48 61  */.  Hash trigHa
a3d0: 73 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c  sh;       /* All
a3e0: 20 74 72 69 67 67 65 72 73 20 69 6e 64 65 78 65   triggers indexe
a3f0: 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48  d by name */.  H
a400: 61 73 68 20 66 6b 65 79 48 61 73 68 3b 20 20 20  ash fkeyHash;   
a410: 20 20 20 20 2f 2a 20 41 6c 6c 20 66 6f 72 65 69      /* All forei
a420: 67 6e 20 6b 65 79 73 20 62 79 20 72 65 66 65 72  gn keys by refer
a430: 65 6e 63 65 64 20 74 61 62 6c 65 20 6e 61 6d 65  enced table name
a440: 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 53 65   */.  Table *pSe
a450: 71 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 54 68  qTab;      /* Th
a460: 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63  e sqlite_sequenc
a470: 65 20 74 61 62 6c 65 20 75 73 65 64 20 62 79 20  e table used by 
a480: 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f  AUTOINCREMENT */
a490: 0a 20 20 75 38 20 66 69 6c 65 5f 66 6f 72 6d 61  .  u8 file_forma
a4a0: 74 3b 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d  t;      /* Schem
a4b0: 61 20 66 6f 72 6d 61 74 20 76 65 72 73 69 6f 6e  a format version
a4c0: 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20 2a   for this file *
a4d0: 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20  /.  u8 enc;     
a4e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
a4f0: 20 65 6e 63 6f 64 69 6e 67 20 75 73 65 64 20 62   encoding used b
a500: 79 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20  y this database 
a510: 2a 2f 0a 20 20 75 31 36 20 73 63 68 65 6d 61 46  */.  u16 schemaF
a520: 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20 46 6c 61  lags;     /* Fla
a530: 67 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  gs associated wi
a540: 74 68 20 74 68 69 73 20 73 63 68 65 6d 61 20 2a  th this schema *
a550: 2f 0a 20 20 69 6e 74 20 63 61 63 68 65 5f 73 69  /.  int cache_si
a560: 7a 65 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ze;      /* Numb
a570: 65 72 20 6f 66 20 70 61 67 65 73 20 74 6f 20 75  er of pages to u
a580: 73 65 20 69 6e 20 74 68 65 20 63 61 63 68 65 20  se in the cache 
a590: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
a5a0: 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62 65  se macros can be
a5b0: 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20 73   used to test, s
a5c0: 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69 74  et, or clear bit
a5d0: 73 20 69 6e 20 74 68 65 0a 2a 2a 20 44 62 2e 70  s in the.** Db.p
a5e0: 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69  Schema->flags fi
a5f0: 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  eld..*/.#define 
a600: 44 62 48 61 73 50 72 6f 70 65 72 74 79 28 44 2c  DbHasProperty(D,
a610: 49 2c 50 29 20 20 20 20 20 28 28 28 44 29 2d 3e  I,P)     (((D)->
a620: 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e  aDb[I].pSchema->
a630: 73 63 68 65 6d 61 46 6c 61 67 73 26 28 50 29 29  schemaFlags&(P))
a640: 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20 44  ==(P)).#define D
a650: 62 48 61 73 41 6e 79 50 72 6f 70 65 72 74 79 28  bHasAnyProperty(
a660: 44 2c 49 2c 50 29 20 20 28 28 28 44 29 2d 3e 61  D,I,P)  (((D)->a
a670: 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73  Db[I].pSchema->s
a680: 63 68 65 6d 61 46 6c 61 67 73 26 28 50 29 29 21  chemaFlags&(P))!
a690: 3d 30 29 0a 23 64 65 66 69 6e 65 20 44 62 53 65  =0).#define DbSe
a6a0: 74 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29  tProperty(D,I,P)
a6b0: 20 20 20 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d       (D)->aDb[I]
a6c0: 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61  .pSchema->schema
a6d0: 46 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66 69  Flags|=(P).#defi
a6e0: 6e 65 20 44 62 43 6c 65 61 72 50 72 6f 70 65 72  ne DbClearProper
a6f0: 74 79 28 44 2c 49 2c 50 29 20 20 20 28 44 29 2d  ty(D,I,P)   (D)-
a700: 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d  >aDb[I].pSchema-
a710: 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 3d 7e 28  >schemaFlags&=~(
a720: 50 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  P)../*.** Allowe
a730: 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65  d values for the
a740: 20 44 42 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61   DB.pSchema->fla
a750: 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20  gs field..**.** 
a760: 54 68 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61  The DB_SchemaLoa
a770: 64 65 64 20 66 6c 61 67 20 69 73 20 73 65 74 20  ded flag is set 
a780: 61 66 74 65 72 20 74 68 65 20 64 61 74 61 62 61  after the databa
a790: 73 65 20 73 63 68 65 6d 61 20 68 61 73 20 62 65  se schema has be
a7a0: 65 6e 0a 2a 2a 20 72 65 61 64 20 69 6e 74 6f 20  en.** read into 
a7b0: 69 6e 74 65 72 6e 61 6c 20 68 61 73 68 20 74 61  internal hash ta
a7c0: 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 44 42 5f 55  bles..**.** DB_U
a7d0: 6e 72 65 73 65 74 56 69 65 77 73 20 6d 65 61 6e  nresetViews mean
a7e0: 73 20 74 68 61 74 20 6f 6e 65 20 6f 72 20 6d 6f  s that one or mo
a7f0: 72 65 20 76 69 65 77 73 20 68 61 76 65 20 63 6f  re views have co
a800: 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74 0a  lumn names that.
a810: 2a 2a 20 68 61 76 65 20 62 65 65 6e 20 66 69 6c  ** have been fil
a820: 6c 65 64 20 6f 75 74 2e 20 20 49 66 20 74 68 65  led out.  If the
a830: 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2c   schema changes,
a840: 20 74 68 65 73 65 20 63 6f 6c 75 6d 6e 20 6e 61   these column na
a850: 6d 65 73 20 6d 69 67 68 74 0a 2a 2a 20 63 68 61  mes might.** cha
a860: 6e 67 65 73 20 61 6e 64 20 73 6f 20 74 68 65 20  nges and so the 
a870: 76 69 65 77 20 77 69 6c 6c 20 6e 65 65 64 20 74  view will need t
a880: 6f 20 62 65 20 72 65 73 65 74 2e 0a 2a 2f 0a 23  o be reset..*/.#
a890: 64 65 66 69 6e 65 20 44 42 5f 53 63 68 65 6d 61  define DB_Schema
a8a0: 4c 6f 61 64 65 64 20 20 20 20 30 78 30 30 30 31  Loaded    0x0001
a8b0: 20 20 2f 2a 20 54 68 65 20 73 63 68 65 6d 61 20    /* The schema 
a8c0: 68 61 73 20 62 65 65 6e 20 6c 6f 61 64 65 64 20  has been loaded 
a8d0: 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 55 6e  */.#define DB_Un
a8e0: 72 65 73 65 74 56 69 65 77 73 20 20 20 20 30 78  resetViews    0x
a8f0: 30 30 30 32 20 20 2f 2a 20 53 6f 6d 65 20 76 69  0002  /* Some vi
a900: 65 77 73 20 68 61 76 65 20 64 65 66 69 6e 65 64  ews have defined
a910: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 2a 2f   column names */
a920: 0a 23 64 65 66 69 6e 65 20 44 42 5f 45 6d 70 74  .#define DB_Empt
a930: 79 20 20 20 20 20 20 20 20 20 20 20 30 78 30 30  y           0x00
a940: 30 34 20 20 2f 2a 20 54 68 65 20 66 69 6c 65 20  04  /* The file 
a950: 69 73 20 65 6d 70 74 79 20 28 6c 65 6e 67 74 68  is empty (length
a960: 20 30 20 62 79 74 65 73 29 20 2a 2f 0a 23 64 65   0 bytes) */.#de
a970: 66 69 6e 65 20 44 42 5f 52 65 73 65 74 57 61 6e  fine DB_ResetWan
a980: 74 65 64 20 20 20 20 20 30 78 30 30 30 38 20 20  ted     0x0008  
a990: 2f 2a 20 52 65 73 65 74 20 74 68 65 20 73 63 68  /* Reset the sch
a9a0: 65 6d 61 20 77 68 65 6e 20 6e 53 63 68 65 6d 61  ema when nSchema
a9b0: 4c 6f 63 6b 3d 3d 30 20 2a 2f 0a 0a 2f 2a 0a 2a  Lock==0 */../*.*
a9c0: 2a 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  * The number of 
a9d0: 64 69 66 66 65 72 65 6e 74 20 6b 69 6e 64 73 20  different kinds 
a9e0: 6f 66 20 74 68 69 6e 67 73 20 74 68 61 74 20 63  of things that c
a9f0: 61 6e 20 62 65 20 6c 69 6d 69 74 65 64 0a 2a 2a  an be limited.**
aa00: 20 75 73 69 6e 67 20 74 68 65 20 73 71 6c 69 74   using the sqlit
aa10: 65 33 5f 6c 69 6d 69 74 28 29 20 69 6e 74 65 72  e3_limit() inter
aa20: 66 61 63 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  face..*/.#define
aa30: 20 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 20   SQLITE_N_LIMIT 
aa40: 28 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 57 4f  (SQLITE_LIMIT_WO
aa50: 52 4b 45 52 5f 54 48 52 45 41 44 53 2b 31 29 0a  RKER_THREADS+1).
aa60: 0a 2f 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65  ./*.** Lookaside
aa70: 20 6d 61 6c 6c 6f 63 20 69 73 20 61 20 73 65 74   malloc is a set
aa80: 20 6f 66 20 66 69 78 65 64 2d 73 69 7a 65 20 62   of fixed-size b
aa90: 75 66 66 65 72 73 20 74 68 61 74 20 63 61 6e 20  uffers that can 
aaa0: 62 65 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61  be used.** to sa
aab0: 74 69 73 66 79 20 73 6d 61 6c 6c 20 74 72 61 6e  tisfy small tran
aac0: 73 69 65 6e 74 20 6d 65 6d 6f 72 79 20 61 6c 6c  sient memory all
aad0: 6f 63 61 74 69 6f 6e 20 72 65 71 75 65 73 74 73  ocation requests
aae0: 20 66 6f 72 20 6f 62 6a 65 63 74 73 0a 2a 2a 20   for objects.** 
aaf0: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
ab00: 61 20 70 61 72 74 69 63 75 6c 61 72 20 64 61 74  a particular dat
ab10: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
ab20: 2e 20 20 54 68 65 20 75 73 65 20 6f 66 0a 2a 2a  .  The use of.**
ab30: 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f   lookaside mallo
ab40: 63 20 70 72 6f 76 69 64 65 73 20 61 20 73 69 67  c provides a sig
ab50: 6e 69 66 69 63 61 6e 74 20 70 65 72 66 6f 72 6d  nificant perform
ab60: 61 6e 63 65 20 65 6e 68 61 6e 63 65 6d 65 6e 74  ance enhancement
ab70: 0a 2a 2a 20 28 61 70 70 72 6f 78 20 31 30 25 29  .** (approx 10%)
ab80: 20 62 79 20 61 76 6f 69 64 69 6e 67 20 6e 75 6d   by avoiding num
ab90: 65 72 6f 75 73 20 6d 61 6c 6c 6f 63 2f 66 72 65  erous malloc/fre
aba0: 65 20 72 65 71 75 65 73 74 73 20 77 68 69 6c 65  e requests while
abb0: 20 70 61 72 73 69 6e 67 0a 2a 2a 20 53 51 4c 20   parsing.** SQL 
abc0: 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a  statements..**.*
abd0: 2a 20 54 68 65 20 4c 6f 6f 6b 61 73 69 64 65 20  * The Lookaside 
abe0: 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20  structure holds 
abf0: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 69 6e  configuration in
ac00: 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
ac10: 74 68 65 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65  the.** lookaside
ac20: 20 6d 61 6c 6c 6f 63 20 73 75 62 73 79 73 74 65   malloc subsyste
ac30: 6d 2e 20 20 45 61 63 68 20 61 76 61 69 6c 61 62  m.  Each availab
ac40: 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  le memory alloca
ac50: 74 69 6f 6e 20 69 6e 0a 2a 2a 20 74 68 65 20 6c  tion in.** the l
ac60: 6f 6f 6b 61 73 69 64 65 20 73 75 62 73 79 73 74  ookaside subsyst
ac70: 65 6d 20 69 73 20 73 74 6f 72 65 64 20 6f 6e 20  em is stored on 
ac80: 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66  a linked list of
ac90: 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 0a 2a   LookasideSlot.*
aca0: 2a 20 6f 62 6a 65 63 74 73 2e 0a 2a 2a 0a 2a 2a  * objects..**.**
acb0: 20 4c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63   Lookaside alloc
acc0: 61 74 69 6f 6e 73 20 61 72 65 20 6f 6e 6c 79 20  ations are only 
acd0: 61 6c 6c 6f 77 65 64 20 66 6f 72 20 6f 62 6a 65  allowed for obje
ace0: 63 74 73 20 74 68 61 74 20 61 72 65 20 61 73 73  cts that are ass
acf0: 6f 63 69 61 74 65 64 0a 2a 2a 20 77 69 74 68 20  ociated.** with 
ad00: 61 20 70 61 72 74 69 63 75 6c 61 72 20 64 61 74  a particular dat
ad10: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
ad20: 2e 20 20 48 65 6e 63 65 2c 20 73 63 68 65 6d 61  .  Hence, schema
ad30: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 63 61 6e   information can
ad40: 6e 6f 74 0a 2a 2a 20 62 65 20 73 74 6f 72 65 64  not.** be stored
ad50: 20 69 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 62 65   in lookaside be
ad60: 63 61 75 73 65 20 69 6e 20 73 68 61 72 65 64 20  cause in shared 
ad70: 63 61 63 68 65 20 6d 6f 64 65 20 74 68 65 20 73  cache mode the s
ad80: 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f  chema informatio
ad90: 6e 0a 2a 2a 20 69 73 20 73 68 61 72 65 64 20 62  n.** is shared b
ada0: 79 20 6d 75 6c 74 69 70 6c 65 20 64 61 74 61 62  y multiple datab
adb0: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2e  ase connections.
adc0: 20 20 54 68 65 72 65 66 6f 72 65 2c 20 77 68 69    Therefore, whi
add0: 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20 73 63  le parsing.** sc
ade0: 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  hema information
adf0: 2c 20 74 68 65 20 4c 6f 6f 6b 61 73 69 64 65 2e  , the Lookaside.
ae00: 62 45 6e 61 62 6c 65 64 20 66 6c 61 67 20 69 73  bEnabled flag is
ae10: 20 63 6c 65 61 72 65 64 20 73 6f 20 74 68 61 74   cleared so that
ae20: 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 61 6c  .** lookaside al
ae30: 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 6e 6f  locations are no
ae40: 74 20 75 73 65 64 20 74 6f 20 63 6f 6e 73 74 72  t used to constr
ae50: 75 63 74 20 74 68 65 20 73 63 68 65 6d 61 20 6f  uct the schema o
ae60: 62 6a 65 63 74 73 2e 0a 2a 2f 0a 73 74 72 75 63  bjects..*/.struc
ae70: 74 20 4c 6f 6f 6b 61 73 69 64 65 20 7b 0a 20 20  t Lookaside {.  
ae80: 75 33 32 20 62 44 69 73 61 62 6c 65 3b 20 20 20  u32 bDisable;   
ae90: 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 6c 79 20          /* Only 
aea0: 6f 70 65 72 61 74 65 20 74 68 65 20 6c 6f 6f 6b  operate the look
aeb0: 61 73 69 64 65 20 77 68 65 6e 20 7a 65 72 6f 20  aside when zero 
aec0: 2a 2f 0a 20 20 75 31 36 20 73 7a 3b 20 20 20 20  */.  u16 sz;    
aed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
aee0: 53 69 7a 65 20 6f 66 20 65 61 63 68 20 62 75 66  Size of each buf
aef0: 66 65 72 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a  fer in bytes */.
af00: 20 20 75 38 20 62 4d 61 6c 6c 6f 63 65 64 3b 20    u8 bMalloced; 
af10: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
af20: 65 20 69 66 20 70 53 74 61 72 74 20 6f 62 74 61  e if pStart obta
af30: 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 65  ined from sqlite
af40: 33 5f 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 20 20  3_malloc() */.  
af50: 75 33 32 20 6e 53 6c 6f 74 3b 20 20 20 20 20 20  u32 nSlot;      
af60: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
af70: 72 20 6f 66 20 6c 6f 6f 6b 61 73 69 64 65 20 73  r of lookaside s
af80: 6c 6f 74 73 20 61 6c 6c 6f 63 61 74 65 64 20 2a  lots allocated *
af90: 2f 0a 20 20 75 33 32 20 61 6e 53 74 61 74 5b 33  /.  u32 anStat[3
afa0: 5d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30  ];          /* 0
afb0: 3a 20 68 69 74 73 2e 20 20 31 3a 20 73 69 7a 65  : hits.  1: size
afc0: 20 6d 69 73 73 65 73 2e 20 20 32 3a 20 66 75 6c   misses.  2: ful
afd0: 6c 20 6d 69 73 73 65 73 20 2a 2f 0a 20 20 4c 6f  l misses */.  Lo
afe0: 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 49 6e  okasideSlot *pIn
aff0: 69 74 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66  it;   /* List of
b000: 20 62 75 66 66 65 72 73 20 6e 6f 74 20 70 72 65   buffers not pre
b010: 76 69 6f 75 73 6c 79 20 75 73 65 64 20 2a 2f 0a  viously used */.
b020: 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20    LookasideSlot 
b030: 2a 70 46 72 65 65 3b 20 20 20 2f 2a 20 4c 69 73  *pFree;   /* Lis
b040: 74 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 62  t of available b
b050: 75 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69 64  uffers */.  void
b060: 20 2a 70 53 74 61 72 74 3b 20 20 20 20 20 20 20   *pStart;       
b070: 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79 74      /* First byt
b080: 65 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 6d  e of available m
b090: 65 6d 6f 72 79 20 73 70 61 63 65 20 2a 2f 0a 20  emory space */. 
b0a0: 20 76 6f 69 64 20 2a 70 45 6e 64 3b 20 20 20 20   void *pEnd;    
b0b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
b0c0: 74 20 62 79 74 65 20 70 61 73 74 20 65 6e 64 20  t byte past end 
b0d0: 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 73 70 61  of available spa
b0e0: 63 65 20 2a 2f 0a 7d 3b 0a 73 74 72 75 63 74 20  ce */.};.struct 
b0f0: 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 7b 0a  LookasideSlot {.
b100: 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20    LookasideSlot 
b110: 2a 70 4e 65 78 74 3b 20 20 20 20 2f 2a 20 4e 65  *pNext;    /* Ne
b120: 78 74 20 62 75 66 66 65 72 20 69 6e 20 74 68 65  xt buffer in the
b130: 20 6c 69 73 74 20 6f 66 20 66 72 65 65 20 62 75   list of free bu
b140: 66 66 65 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  ffers */.};../*.
b150: 2a 2a 20 41 20 68 61 73 68 20 74 61 62 6c 65 20  ** A hash table 
b160: 66 6f 72 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e  for built-in fun
b170: 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e  ction definition
b180: 73 2e 20 20 28 41 70 70 6c 69 63 61 74 69 6f 6e  s.  (Application
b190: 2d 64 65 66 69 6e 65 64 0a 2a 2a 20 66 75 6e 63  -defined.** func
b1a0: 74 69 6f 6e 73 20 75 73 65 20 61 20 72 65 67 75  tions use a regu
b1b0: 6c 61 72 20 74 61 62 6c 65 20 74 61 62 6c 65 20  lar table table 
b1c0: 66 72 6f 6d 20 68 61 73 68 2e 68 2e 29 0a 2a 2a  from hash.h.).**
b1d0: 0a 2a 2a 20 48 61 73 68 20 65 61 63 68 20 46 75  .** Hash each Fu
b1e0: 6e 63 44 65 66 20 73 74 72 75 63 74 75 72 65 20  ncDef structure 
b1f0: 69 6e 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20  into one of the 
b200: 46 75 6e 63 44 65 66 48 61 73 68 2e 61 5b 5d 20  FuncDefHash.a[] 
b210: 73 6c 6f 74 73 2e 0a 2a 2a 20 43 6f 6c 6c 69 73  slots..** Collis
b220: 69 6f 6e 73 20 61 72 65 20 6f 6e 20 74 68 65 20  ions are on the 
b230: 46 75 6e 63 44 65 66 2e 75 2e 70 48 61 73 68 20  FuncDef.u.pHash 
b240: 63 68 61 69 6e 2e 20 20 55 73 65 20 74 68 65 20  chain.  Use the 
b250: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48  SQLITE_FUNC_HASH
b260: 28 29 0a 2a 2a 20 6d 61 63 72 6f 20 74 6f 20 63  ().** macro to c
b270: 6f 6d 70 75 74 65 20 61 20 68 61 73 68 20 6f 6e  ompute a hash on
b280: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 6e 61   the function na
b290: 6d 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  me..*/.#define S
b2a0: 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48 5f  QLITE_FUNC_HASH_
b2b0: 53 5a 20 32 33 0a 73 74 72 75 63 74 20 46 75 6e  SZ 23.struct Fun
b2c0: 63 44 65 66 48 61 73 68 20 7b 0a 20 20 46 75 6e  cDefHash {.  Fun
b2d0: 63 44 65 66 20 2a 61 5b 53 51 4c 49 54 45 5f 46  cDef *a[SQLITE_F
b2e0: 55 4e 43 5f 48 41 53 48 5f 53 5a 5d 3b 20 20 20  UNC_HASH_SZ];   
b2f0: 20 20 20 20 2f 2a 20 48 61 73 68 20 74 61 62 6c      /* Hash tabl
b300: 65 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20  e for functions 
b310: 2a 2f 0a 7d 3b 0a 23 64 65 66 69 6e 65 20 53 51  */.};.#define SQ
b320: 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48 28 43  LITE_FUNC_HASH(C
b330: 2c 4c 29 20 28 28 28 43 29 2b 28 4c 29 29 25 53  ,L) (((C)+(L))%S
b340: 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48 5f  QLITE_FUNC_HASH_
b350: 53 5a 29 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  SZ)..#ifdef SQLI
b360: 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49  TE_USER_AUTHENTI
b370: 43 41 54 49 4f 4e 0a 2f 2a 0a 2a 2a 20 49 6e 66  CATION./*.** Inf
b380: 6f 72 6d 61 74 69 6f 6e 20 68 65 6c 64 20 69 6e  ormation held in
b390: 20 74 68 65 20 22 73 71 6c 69 74 65 33 22 20 64   the "sqlite3" d
b3a0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
b3b0: 6f 6e 20 6f 62 6a 65 63 74 20 61 6e 64 20 75 73  on object and us
b3c0: 65 64 0a 2a 2a 20 74 6f 20 6d 61 6e 61 67 65 20  ed.** to manage 
b3d0: 75 73 65 72 20 61 75 74 68 65 6e 74 69 63 61 74  user authenticat
b3e0: 69 6f 6e 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20  ion..*/.typedef 
b3f0: 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f 75  struct sqlite3_u
b400: 73 65 72 61 75 74 68 20 73 71 6c 69 74 65 33 5f  serauth sqlite3_
b410: 75 73 65 72 61 75 74 68 3b 0a 73 74 72 75 63 74  userauth;.struct
b420: 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74   sqlite3_useraut
b430: 68 20 7b 0a 20 20 75 38 20 61 75 74 68 4c 65 76  h {.  u8 authLev
b440: 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  el;             
b450: 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 61      /* Current a
b460: 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 6c 65  uthentication le
b470: 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 75  vel */.  int nAu
b480: 74 68 50 57 3b 20 20 20 20 20 20 20 20 20 20 20  thPW;           
b490: 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
b4a0: 66 20 74 68 65 20 7a 41 75 74 68 50 57 20 69 6e  f the zAuthPW in
b4b0: 20 62 79 74 65 73 20 2a 2f 0a 20 20 63 68 61 72   bytes */.  char
b4c0: 20 2a 7a 41 75 74 68 50 57 3b 20 20 20 20 20 20   *zAuthPW;      
b4d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 73            /* Pas
b4e0: 73 77 6f 72 64 20 75 73 65 64 20 74 6f 20 61 75  sword used to au
b4f0: 74 68 65 6e 74 69 63 61 74 65 20 2a 2f 0a 20 20  thenticate */.  
b500: 63 68 61 72 20 2a 7a 41 75 74 68 55 73 65 72 3b  char *zAuthUser;
b510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b520: 20 55 73 65 72 20 6e 61 6d 65 20 75 73 65 64 20   User name used 
b530: 74 6f 20 61 75 74 68 65 6e 74 69 63 61 74 65 20  to authenticate 
b540: 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65  */.};../* Allowe
b550: 64 20 76 61 6c 75 65 73 20 66 6f 72 20 73 71 6c  d values for sql
b560: 69 74 65 33 5f 75 73 65 72 61 75 74 68 2e 61 75  ite3_userauth.au
b570: 74 68 4c 65 76 65 6c 20 2a 2f 0a 23 64 65 66 69  thLevel */.#defi
b580: 6e 65 20 55 41 55 54 48 5f 55 6e 6b 6e 6f 77 6e  ne UAUTH_Unknown
b590: 20 20 20 20 20 30 20 20 20 20 20 2f 2a 20 41 75       0     /* Au
b5a0: 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 6e 6f 74  thentication not
b5b0: 20 79 65 74 20 63 68 65 63 6b 65 64 20 2a 2f 0a   yet checked */.
b5c0: 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 46 61  #define UAUTH_Fa
b5d0: 69 6c 20 20 20 20 20 20 20 20 31 20 20 20 20 20  il        1     
b5e0: 2f 2a 20 55 73 65 72 20 61 75 74 68 65 6e 74 69  /* User authenti
b5f0: 63 61 74 69 6f 6e 20 66 61 69 6c 65 64 20 2a 2f  cation failed */
b600: 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 55  .#define UAUTH_U
b610: 73 65 72 20 20 20 20 20 20 20 20 32 20 20 20 20  ser        2    
b620: 20 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74 65   /* Authenticate
b630: 64 20 61 73 20 61 20 6e 6f 72 6d 61 6c 20 75 73  d as a normal us
b640: 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41  er */.#define UA
b650: 55 54 48 5f 41 64 6d 69 6e 20 20 20 20 20 20 20  UTH_Admin       
b660: 33 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74  3     /* Authent
b670: 69 63 61 74 65 64 20 61 73 20 61 6e 20 61 64 6d  icated as an adm
b680: 69 6e 69 73 74 72 61 74 6f 72 20 2a 2f 0a 0a 2f  inistrator */../
b690: 2a 20 46 75 6e 63 74 69 6f 6e 73 20 75 73 65 64  * Functions used
b6a0: 20 6f 6e 6c 79 20 62 79 20 75 73 65 72 20 61 75   only by user au
b6b0: 74 68 6f 72 69 7a 61 74 69 6f 6e 20 6c 6f 67 69  thorization logi
b6c0: 63 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  c */.int sqlite3
b6d0: 55 73 65 72 41 75 74 68 54 61 62 6c 65 28 63 6f  UserAuthTable(co
b6e0: 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20  nst char*);.int 
b6f0: 73 71 6c 69 74 65 33 55 73 65 72 41 75 74 68 43  sqlite3UserAuthC
b700: 68 65 63 6b 4c 6f 67 69 6e 28 73 71 6c 69 74 65  heckLogin(sqlite
b710: 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75  3*,const char*,u
b720: 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  8*);.void sqlite
b730: 33 55 73 65 72 41 75 74 68 49 6e 69 74 28 73 71  3UserAuthInit(sq
b740: 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71  lite3*);.void sq
b750: 6c 69 74 65 33 43 72 79 70 74 46 75 6e 63 28 73  lite3CryptFunc(s
b760: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
b770: 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
b780: 65 2a 2a 29 3b 0a 0a 23 65 6e 64 69 66 20 2f 2a  e**);..#endif /*
b790: 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54   SQLITE_USER_AUT
b7a0: 48 45 4e 54 49 43 41 54 49 4f 4e 20 2a 2f 0a 0a  HENTICATION */..
b7b0: 2f 2a 0a 2a 2a 20 74 79 70 65 64 65 66 20 66 6f  /*.** typedef fo
b7c0: 72 20 74 68 65 20 61 75 74 68 6f 72 69 7a 61 74  r the authorizat
b7d0: 69 6f 6e 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e  ion callback fun
b7e0: 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 64 65 66  ction..*/.#ifdef
b7f0: 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54   SQLITE_USER_AUT
b800: 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20 74 79  HENTICATION.  ty
b810: 70 65 64 65 66 20 69 6e 74 20 28 2a 73 71 6c 69  pedef int (*sqli
b820: 74 65 33 5f 78 61 75 74 68 29 28 76 6f 69 64 2a  te3_xauth)(void*
b830: 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
b840: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e  ,const char*,con
b850: 73 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 20  st char*,.      
b860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b870: 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63           const c
b880: 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
b890: 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70 65  *);.#else.  type
b8a0: 64 65 66 20 69 6e 74 20 28 2a 73 71 6c 69 74 65  def int (*sqlite
b8b0: 33 5f 78 61 75 74 68 29 28 76 6f 69 64 2a 2c 69  3_xauth)(void*,i
b8c0: 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  nt,const char*,c
b8d0: 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
b8e0: 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 20 20 20   char*,.        
b8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b900: 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61         const cha
b910: 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  r*);.#endif..#if
b920: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
b930: 5f 44 45 50 52 45 43 41 54 45 44 0a 2f 2a 20 54  _DEPRECATED./* T
b940: 68 69 73 20 69 73 20 61 6e 20 65 78 74 72 61 20  his is an extra 
b950: 53 51 4c 49 54 45 5f 54 52 41 43 45 20 6d 61 63  SQLITE_TRACE mac
b960: 72 6f 20 74 68 61 74 20 69 6e 64 69 63 61 74 65  ro that indicate
b970: 73 20 22 6c 65 67 61 63 79 22 20 74 72 61 63 69  s "legacy" traci
b980: 6e 67 0a 2a 2a 20 69 6e 20 74 68 65 20 73 74 79  ng.** in the sty
b990: 6c 65 20 6f 66 20 73 71 6c 69 74 65 33 5f 74 72  le of sqlite3_tr
b9a0: 61 63 65 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65  ace().*/.#define
b9b0: 20 53 51 4c 49 54 45 5f 54 52 41 43 45 5f 4c 45   SQLITE_TRACE_LE
b9c0: 47 41 43 59 20 20 30 78 38 30 0a 23 65 6c 73 65  GACY  0x80.#else
b9d0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b9e0: 54 52 41 43 45 5f 4c 45 47 41 43 59 20 20 30 0a  TRACE_LEGACY  0.
b9f0: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
ba00: 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44  _OMIT_DEPRECATED
ba10: 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68   */.../*.** Each
ba20: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
ba30: 74 69 6f 6e 20 69 73 20 61 6e 20 69 6e 73 74 61  tion is an insta
ba40: 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
ba50: 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a  wing structure..
ba60: 2a 2f 0a 73 74 72 75 63 74 20 73 71 6c 69 74 65  */.struct sqlite
ba70: 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 66  3 {.  sqlite3_vf
ba80: 73 20 2a 70 56 66 73 3b 20 20 20 20 20 20 20 20  s *pVfs;        
ba90: 20 20 20 20 2f 2a 20 4f 53 20 49 6e 74 65 72 66      /* OS Interf
baa0: 61 63 65 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  ace */.  struct 
bab0: 56 64 62 65 20 2a 70 56 64 62 65 3b 20 20 20 20  Vdbe *pVdbe;    
bac0: 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f         /* List o
bad0: 66 20 61 63 74 69 76 65 20 76 69 72 74 75 61 6c  f active virtual
bae0: 20 6d 61 63 68 69 6e 65 73 20 2a 2f 0a 20 20 43   machines */.  C
baf0: 6f 6c 6c 53 65 71 20 2a 70 44 66 6c 74 43 6f 6c  ollSeq *pDfltCol
bb00: 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  l;           /* 
bb10: 54 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c  The default coll
bb20: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 28  ating sequence (
bb30: 42 49 4e 41 52 59 29 20 2a 2f 0a 20 20 73 71 6c  BINARY) */.  sql
bb40: 69 74 65 33 5f 6d 75 74 65 78 20 2a 6d 75 74 65  ite3_mutex *mute
bb50: 78 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f  x;         /* Co
bb60: 6e 6e 65 63 74 69 6f 6e 20 6d 75 74 65 78 20 2a  nnection mutex *
bb70: 2f 0a 20 20 44 62 20 2a 61 44 62 3b 20 20 20 20  /.  Db *aDb;    
bb80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bb90: 20 20 2f 2a 20 41 6c 6c 20 62 61 63 6b 65 6e 64    /* All backend
bba0: 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 44 62 3b 20  s */.  int nDb; 
bbb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bbc0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
bbd0: 66 20 62 61 63 6b 65 6e 64 73 20 63 75 72 72 65  f backends curre
bbe0: 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a 2f 0a 20  ntly in use */. 
bbf0: 20 75 33 32 20 6d 44 62 46 6c 61 67 73 3b 20 20   u32 mDbFlags;  
bc00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
bc10: 2a 20 66 6c 61 67 73 20 72 65 63 6f 72 64 69 6e  * flags recordin
bc20: 67 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 65  g internal state
bc30: 20 2a 2f 0a 20 20 75 36 34 20 66 6c 61 67 73 3b   */.  u64 flags;
bc40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bc50: 20 20 20 20 2f 2a 20 66 6c 61 67 73 20 73 65 74      /* flags set
bc60: 74 61 62 6c 65 20 62 79 20 70 72 61 67 6d 61 73  table by pragmas
bc70: 2e 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20  . See below */. 
bc80: 20 69 36 34 20 6c 61 73 74 52 6f 77 69 64 3b 20   i64 lastRowid; 
bc90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
bca0: 2a 20 52 4f 57 49 44 20 6f 66 20 6d 6f 73 74 20  * ROWID of most 
bcb0: 72 65 63 65 6e 74 20 69 6e 73 65 72 74 20 28 73  recent insert (s
bcc0: 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 20 20 69  ee above) */.  i
bcd0: 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20  64 szMmap;      
bce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
bcf0: 44 65 66 61 75 6c 74 20 6d 6d 61 70 5f 73 69 7a  Default mmap_siz
bd00: 65 20 73 65 74 74 69 6e 67 20 2a 2f 0a 20 20 75  e setting */.  u
bd10: 33 32 20 6e 53 63 68 65 6d 61 4c 6f 63 6b 3b 20  32 nSchemaLock; 
bd20: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
bd30: 44 6f 20 6e 6f 74 20 72 65 73 65 74 20 74 68 65  Do not reset the
bd40: 20 73 63 68 65 6d 61 20 77 68 65 6e 20 6e 6f 6e   schema when non
bd50: 2d 7a 65 72 6f 20 2a 2f 0a 20 20 75 6e 73 69 67  -zero */.  unsig
bd60: 6e 65 64 20 69 6e 74 20 6f 70 65 6e 46 6c 61 67  ned int openFlag
bd70: 73 3b 20 20 20 20 20 20 20 2f 2a 20 46 6c 61 67  s;       /* Flag
bd80: 73 20 70 61 73 73 65 64 20 74 6f 20 73 71 6c 69  s passed to sqli
bd90: 74 65 33 5f 76 66 73 2e 78 4f 70 65 6e 28 29 20  te3_vfs.xOpen() 
bda0: 2a 2f 0a 20 20 69 6e 74 20 65 72 72 43 6f 64 65  */.  int errCode
bdb0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
bdc0: 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e     /* Most recen
bdd0: 74 20 65 72 72 6f 72 20 63 6f 64 65 20 28 53 51  t error code (SQ
bde0: 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20 20 69 6e 74  LITE_*) */.  int
bdf0: 20 65 72 72 4d 61 73 6b 3b 20 20 20 20 20 20 20   errMask;       
be00: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 26 20             /* & 
be10: 72 65 73 75 6c 74 20 63 6f 64 65 73 20 77 69 74  result codes wit
be20: 68 20 74 68 69 73 20 62 65 66 6f 72 65 20 72 65  h this before re
be30: 74 75 72 6e 69 6e 67 20 2a 2f 0a 20 20 69 6e 74  turning */.  int
be40: 20 69 53 79 73 45 72 72 6e 6f 3b 20 20 20 20 20   iSysErrno;     
be50: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72             /* Er
be60: 72 6e 6f 20 76 61 6c 75 65 20 66 72 6f 6d 20 6c  rno value from l
be70: 61 73 74 20 73 79 73 74 65 6d 20 65 72 72 6f 72  ast system error
be80: 20 2a 2f 0a 20 20 75 31 36 20 64 62 4f 70 74 46   */.  u16 dbOptF
be90: 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20  lags;           
bea0: 20 20 20 20 2f 2a 20 46 6c 61 67 73 20 74 6f 20      /* Flags to 
beb0: 65 6e 61 62 6c 65 2f 64 69 73 61 62 6c 65 20 6f  enable/disable o
bec0: 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a  ptimizations */.
bed0: 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20    u8 enc;       
bee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bef0: 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67  /* Text encoding
bf00: 20 2a 2f 0a 20 20 75 38 20 61 75 74 6f 43 6f 6d   */.  u8 autoCom
bf10: 6d 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  mit;            
bf20: 20 20 20 20 2f 2a 20 54 68 65 20 61 75 74 6f 2d      /* The auto-
bf30: 63 6f 6d 6d 69 74 20 66 6c 61 67 2e 20 2a 2f 0a  commit flag. */.
bf40: 20 20 75 38 20 74 65 6d 70 5f 73 74 6f 72 65 3b    u8 temp_store;
bf50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bf60: 2f 2a 20 31 3a 20 66 69 6c 65 20 32 3a 20 6d 65  /* 1: file 2: me
bf70: 6d 6f 72 79 20 30 3a 20 64 65 66 61 75 6c 74 20  mory 0: default 
bf80: 2a 2f 0a 20 20 75 38 20 6d 61 6c 6c 6f 63 46 61  */.  u8 mallocFa
bf90: 69 6c 65 64 3b 20 20 20 20 20 20 20 20 20 20 20  iled;           
bfa0: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 77 65     /* True if we
bfb0: 20 68 61 76 65 20 73 65 65 6e 20 61 20 6d 61 6c   have seen a mal
bfc0: 6c 6f 63 20 66 61 69 6c 75 72 65 20 2a 2f 0a 20  loc failure */. 
bfd0: 20 75 38 20 62 42 65 6e 69 67 6e 4d 61 6c 6c 6f   u8 bBenignMallo
bfe0: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  c;             /
bff0: 2a 20 44 6f 20 6e 6f 74 20 72 65 71 75 69 72 65  * Do not require
c000: 20 4f 4f 4d 73 20 69 66 20 74 72 75 65 20 2a 2f   OOMs if true */
c010: 0a 20 20 75 38 20 64 66 6c 74 4c 6f 63 6b 4d 6f  .  u8 dfltLockMo
c020: 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  de;             
c030: 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 63 6b   /* Default lock
c040: 69 6e 67 2d 6d 6f 64 65 20 66 6f 72 20 61 74 74  ing-mode for att
c050: 61 63 68 65 64 20 64 62 73 20 2a 2f 0a 20 20 73  ached dbs */.  s
c060: 69 67 6e 65 64 20 63 68 61 72 20 6e 65 78 74 41  igned char nextA
c070: 75 74 6f 76 61 63 3b 20 20 20 20 20 20 2f 2a 20  utovac;      /* 
c080: 41 75 74 6f 76 61 63 20 73 65 74 74 69 6e 67 20  Autovac setting 
c090: 61 66 74 65 72 20 56 41 43 55 55 4d 20 69 66 20  after VACUUM if 
c0a0: 3e 3d 30 20 2a 2f 0a 20 20 75 38 20 73 75 70 70  >=0 */.  u8 supp
c0b0: 72 65 73 73 45 72 72 3b 20 20 20 20 20 20 20 20  ressErr;        
c0c0: 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74         /* Do not
c0d0: 20 69 73 73 75 65 20 65 72 72 6f 72 20 6d 65 73   issue error mes
c0e0: 73 61 67 65 73 20 69 66 20 74 72 75 65 20 2a 2f  sages if true */
c0f0: 0a 20 20 75 38 20 76 74 61 62 4f 6e 43 6f 6e 66  .  u8 vtabOnConf
c100: 6c 69 63 74 3b 20 20 20 20 20 20 20 20 20 20 20  lict;           
c110: 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74   /* Value to ret
c120: 75 72 6e 20 66 6f 72 20 73 33 5f 76 74 61 62 5f  urn for s3_vtab_
c130: 6f 6e 5f 63 6f 6e 66 6c 69 63 74 28 29 20 2a 2f  on_conflict() */
c140: 0a 20 20 75 38 20 69 73 54 72 61 6e 73 61 63 74  .  u8 isTransact
c150: 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20 20  ionSavepoint;   
c160: 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 20   /* True if the 
c170: 6f 75 74 65 72 6d 6f 73 74 20 73 61 76 65 70 6f  outermost savepo
c180: 69 6e 74 20 69 73 20 61 20 54 53 20 2a 2f 0a 20  int is a TS */. 
c190: 20 75 38 20 6d 54 72 61 63 65 3b 20 20 20 20 20   u8 mTrace;     
c1a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c1b0: 2a 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 53  * zero or more S
c1c0: 51 4c 49 54 45 5f 54 52 41 43 45 20 66 6c 61 67  QLITE_TRACE flag
c1d0: 73 20 2a 2f 0a 20 20 75 38 20 6e 6f 53 68 61 72  s */.  u8 noShar
c1e0: 65 64 43 61 63 68 65 3b 20 20 20 20 20 20 20 20  edCache;        
c1f0: 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
c200: 6e 6f 20 73 68 61 72 65 64 2d 63 61 63 68 65 20  no shared-cache 
c210: 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 75 38  backends */.  u8
c220: 20 6e 53 71 6c 45 78 65 63 3b 20 20 20 20 20 20   nSqlExec;      
c230: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
c240: 75 6d 62 65 72 20 6f 66 20 70 65 6e 64 69 6e 67  umber of pending
c250: 20 4f 50 5f 53 71 6c 45 78 65 63 20 6f 70 63 6f   OP_SqlExec opco
c260: 64 65 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 78  des */.  int nex
c270: 74 50 61 67 65 73 69 7a 65 3b 20 20 20 20 20 20  tPagesize;      
c280: 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65 73 69         /* Pagesi
c290: 7a 65 20 61 66 74 65 72 20 56 41 43 55 55 4d 20  ze after VACUUM 
c2a0: 69 66 20 3e 30 20 2a 2f 0a 20 20 75 33 32 20 6d  if >0 */.  u32 m
c2b0: 61 67 69 63 3b 20 20 20 20 20 20 20 20 20 20 20  agic;           
c2c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 67 69           /* Magi
c2d0: 63 20 6e 75 6d 62 65 72 20 66 6f 72 20 64 65 74  c number for det
c2e0: 65 63 74 20 6c 69 62 72 61 72 79 20 6d 69 73 75  ect library misu
c2f0: 73 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 68 61  se */.  int nCha
c300: 6e 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  nge;            
c310: 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 72        /* Value r
c320: 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74  eturned by sqlit
c330: 65 33 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a  e3_changes() */.
c340: 20 20 69 6e 74 20 6e 54 6f 74 61 6c 43 68 61 6e    int nTotalChan
c350: 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ge;             
c360: 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e 65  /* Value returne
c370: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 74 6f 74  d by sqlite3_tot
c380: 61 6c 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a  al_changes() */.
c390: 20 20 69 6e 74 20 61 4c 69 6d 69 74 5b 53 51 4c    int aLimit[SQL
c3a0: 49 54 45 5f 4e 5f 4c 49 4d 49 54 5d 3b 20 20 20  ITE_N_LIMIT];   
c3b0: 2f 2a 20 4c 69 6d 69 74 73 20 2a 2f 0a 20 20 69  /* Limits */.  i
c3c0: 6e 74 20 6e 4d 61 78 53 6f 72 74 65 72 4d 6d 61  nt nMaxSorterMma
c3d0: 70 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  p;           /* 
c3e0: 4d 61 78 69 6d 75 6d 20 73 69 7a 65 20 6f 66 20  Maximum size of 
c3f0: 72 65 67 69 6f 6e 73 20 6d 61 70 70 65 64 20 62  regions mapped b
c400: 79 20 73 6f 72 74 65 72 20 2a 2f 0a 20 20 73 74  y sorter */.  st
c410: 72 75 63 74 20 73 71 6c 69 74 65 33 49 6e 69 74  ruct sqlite3Init
c420: 49 6e 66 6f 20 7b 20 20 20 20 20 20 2f 2a 20 49  Info {      /* I
c430: 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20  nformation used 
c440: 64 75 72 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a  during initializ
c450: 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74  ation */.    int
c460: 20 6e 65 77 54 6e 75 6d 3b 20 20 20 20 20 20 20   newTnum;       
c470: 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74           /* Root
c480: 70 61 67 65 20 6f 66 20 74 61 62 6c 65 20 62 65  page of table be
c490: 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  ing initialized 
c4a0: 2a 2f 0a 20 20 20 20 75 38 20 69 44 62 3b 20 20  */.    u8 iDb;  
c4b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c4c0: 20 20 20 2f 2a 20 57 68 69 63 68 20 64 62 20 66     /* Which db f
c4d0: 69 6c 65 20 69 73 20 62 65 69 6e 67 20 69 6e 69  ile is being ini
c4e0: 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20  tialized */.    
c4f0: 75 38 20 62 75 73 79 3b 20 20 20 20 20 20 20 20  u8 busy;        
c500: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
c510: 52 55 45 20 69 66 20 63 75 72 72 65 6e 74 6c 79  RUE if currently
c520: 20 69 6e 69 74 69 61 6c 69 7a 69 6e 67 20 2a 2f   initializing */
c530: 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 6f 72  .    unsigned or
c540: 70 68 61 6e 54 72 69 67 67 65 72 20 3a 20 31 3b  phanTrigger : 1;
c550: 20 2f 2a 20 4c 61 73 74 20 73 74 61 74 65 6d 65   /* Last stateme
c560: 6e 74 20 69 73 20 6f 72 70 68 61 6e 65 64 20 54  nt is orphaned T
c570: 45 4d 50 20 74 72 69 67 67 65 72 20 2a 2f 0a 20  EMP trigger */. 
c580: 20 20 20 75 6e 73 69 67 6e 65 64 20 69 6d 70 6f     unsigned impo
c590: 73 74 65 72 54 61 62 6c 65 20 3a 20 31 3b 20 2f  sterTable : 1; /
c5a0: 2a 20 42 75 69 6c 64 69 6e 67 20 61 6e 20 69 6d  * Building an im
c5b0: 70 6f 73 74 65 72 20 74 61 62 6c 65 20 2a 2f 0a  poster table */.
c5c0: 20 20 20 20 75 6e 73 69 67 6e 65 64 20 72 65 6f      unsigned reo
c5d0: 70 65 6e 4d 65 6d 64 62 20 3a 20 31 3b 20 20 20  penMemdb : 1;   
c5e0: 2f 2a 20 41 54 54 41 43 48 20 69 73 20 72 65 61  /* ATTACH is rea
c5f0: 6c 6c 79 20 61 20 72 65 6f 70 65 6e 20 75 73 69  lly a reopen usi
c600: 6e 67 20 4d 65 6d 44 42 20 2a 2f 0a 20 20 7d 20  ng MemDB */.  } 
c610: 69 6e 69 74 3b 0a 20 20 69 6e 74 20 6e 56 64 62  init;.  int nVdb
c620: 65 41 63 74 69 76 65 3b 20 20 20 20 20 20 20 20  eActive;        
c630: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
c640: 6f 66 20 56 44 42 45 73 20 63 75 72 72 65 6e 74  of VDBEs current
c650: 6c 79 20 72 75 6e 6e 69 6e 67 20 2a 2f 0a 20 20  ly running */.  
c660: 69 6e 74 20 6e 56 64 62 65 52 65 61 64 3b 20 20  int nVdbeRead;  
c670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c680: 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76   Number of activ
c690: 65 20 56 44 42 45 73 20 74 68 61 74 20 72 65 61  e VDBEs that rea
c6a0: 64 20 6f 72 20 77 72 69 74 65 20 2a 2f 0a 20 20  d or write */.  
c6b0: 69 6e 74 20 6e 56 64 62 65 57 72 69 74 65 3b 20  int nVdbeWrite; 
c6c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c6d0: 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76   Number of activ
c6e0: 65 20 56 44 42 45 73 20 74 68 61 74 20 72 65 61  e VDBEs that rea
c6f0: 64 20 61 6e 64 20 77 72 69 74 65 20 2a 2f 0a 20  d and write */. 
c700: 20 69 6e 74 20 6e 56 64 62 65 45 78 65 63 3b 20   int nVdbeExec; 
c710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c720: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74  * Number of nest
c730: 65 64 20 63 61 6c 6c 73 20 74 6f 20 56 64 62 65  ed calls to Vdbe
c740: 45 78 65 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20  Exec() */.  int 
c750: 6e 56 44 65 73 74 72 6f 79 3b 20 20 20 20 20 20  nVDestroy;      
c760: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
c770: 62 65 72 20 6f 66 20 61 63 74 69 76 65 20 4f 50  ber of active OP
c780: 5f 56 44 65 73 74 72 6f 79 20 6f 70 65 72 61 74  _VDestroy operat
c790: 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 45  ions */.  int nE
c7a0: 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20 20  xtension;       
c7b0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
c7c0: 72 20 6f 66 20 6c 6f 61 64 65 64 20 65 78 74 65  r of loaded exte
c7d0: 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20 76 6f 69 64  nsions */.  void
c7e0: 20 2a 2a 61 45 78 74 65 6e 73 69 6f 6e 3b 20 20   **aExtension;  
c7f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 72            /* Arr
c800: 61 79 20 6f 66 20 73 68 61 72 65 64 20 6c 69 62  ay of shared lib
c810: 72 61 72 79 20 68 61 6e 64 6c 65 73 20 2a 2f 0a  rary handles */.
c820: 20 20 69 6e 74 20 28 2a 78 54 72 61 63 65 29 28    int (*xTrace)(
c830: 75 33 32 2c 76 6f 69 64 2a 2c 76 6f 69 64 2a 2c  u32,void*,void*,
c840: 76 6f 69 64 2a 29 3b 20 20 20 20 20 2f 2a 20 54  void*);     /* T
c850: 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  race function */
c860: 0a 20 20 76 6f 69 64 20 2a 70 54 72 61 63 65 41  .  void *pTraceA
c870: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
c880: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c890: 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  Argument to the 
c8a0: 74 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a  trace function *
c8b0: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 50 72 6f 66  /.  void (*xProf
c8c0: 69 6c 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74  ile)(void*,const
c8d0: 20 63 68 61 72 2a 2c 75 36 34 29 3b 20 20 2f 2a   char*,u64);  /*
c8e0: 20 50 72 6f 66 69 6c 69 6e 67 20 66 75 6e 63 74   Profiling funct
c8f0: 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ion */.  void *p
c900: 50 72 6f 66 69 6c 65 41 72 67 3b 20 20 20 20 20  ProfileArg;     
c910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c920: 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74     /* Argument t
c930: 6f 20 70 72 6f 66 69 6c 65 20 66 75 6e 63 74 69  o profile functi
c940: 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 43  on */.  void *pC
c950: 6f 6d 6d 69 74 41 72 67 3b 20 20 20 20 20 20 20  ommitArg;       
c960: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
c970: 75 6d 65 6e 74 20 74 6f 20 78 43 6f 6d 6d 69 74  ument to xCommit
c980: 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 0a 20 20  Callback() */.  
c990: 69 6e 74 20 28 2a 78 43 6f 6d 6d 69 74 43 61 6c  int (*xCommitCal
c9a0: 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29 3b 20 20  lback)(void*);  
c9b0: 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 61 74 20    /* Invoked at 
c9c0: 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f  every commit. */
c9d0: 0a 20 20 76 6f 69 64 20 2a 70 52 6f 6c 6c 62 61  .  void *pRollba
c9e0: 63 6b 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  ckArg;          
c9f0: 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74       /* Argument
ca00: 20 74 6f 20 78 52 6f 6c 6c 62 61 63 6b 43 61 6c   to xRollbackCal
ca10: 6c 62 61 63 6b 28 29 20 2a 2f 0a 20 20 76 6f 69  lback() */.  voi
ca20: 64 20 28 2a 78 52 6f 6c 6c 62 61 63 6b 43 61 6c  d (*xRollbackCal
ca30: 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29 3b 20 2f  lback)(void*); /
ca40: 2a 20 49 6e 76 6f 6b 65 64 20 61 74 20 65 76 65  * Invoked at eve
ca50: 72 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20  ry commit. */.  
ca60: 76 6f 69 64 20 2a 70 55 70 64 61 74 65 41 72 67  void *pUpdateArg
ca70: 3b 0a 20 20 76 6f 69 64 20 28 2a 78 55 70 64 61  ;.  void (*xUpda
ca80: 74 65 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64  teCallback)(void
ca90: 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61  *,int, const cha
caa0: 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 73  r*,const char*,s
cab0: 71 6c 69 74 65 5f 69 6e 74 36 34 29 3b 0a 23 69  qlite_int64);.#i
cac0: 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
cad0: 4c 45 5f 50 52 45 55 50 44 41 54 45 5f 48 4f 4f  LE_PREUPDATE_HOO
cae0: 4b 0a 20 20 76 6f 69 64 20 2a 70 50 72 65 55 70  K.  void *pPreUp
caf0: 64 61 74 65 41 72 67 3b 20 20 20 20 20 20 20 20  dateArg;        
cb00: 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d    /* First argum
cb10: 65 6e 74 20 74 6f 20 78 50 72 65 55 70 64 61 74  ent to xPreUpdat
cb20: 65 43 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76  eCallback */.  v
cb30: 6f 69 64 20 28 2a 78 50 72 65 55 70 64 61 74 65  oid (*xPreUpdate
cb40: 43 61 6c 6c 62 61 63 6b 29 28 20 20 20 2f 2a 20  Callback)(   /* 
cb50: 52 65 67 69 73 74 65 72 65 64 20 75 73 69 6e 67  Registered using
cb60: 20 73 71 6c 69 74 65 33 5f 70 72 65 75 70 64 61   sqlite3_preupda
cb70: 74 65 5f 68 6f 6f 6b 28 29 20 2a 2f 0a 20 20 20  te_hook() */.   
cb80: 20 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c   void*,sqlite3*,
cb90: 69 6e 74 2c 63 68 61 72 20 63 6f 6e 73 74 2a 2c  int,char const*,
cba0: 63 68 61 72 20 63 6f 6e 73 74 2a 2c 73 71 6c 69  char const*,sqli
cbb0: 74 65 33 5f 69 6e 74 36 34 2c 73 71 6c 69 74 65  te3_int64,sqlite
cbc0: 33 5f 69 6e 74 36 34 0a 20 20 29 3b 0a 20 20 50  3_int64.  );.  P
cbd0: 72 65 55 70 64 61 74 65 20 2a 70 50 72 65 55 70  reUpdate *pPreUp
cbe0: 64 61 74 65 3b 20 20 20 20 20 20 20 20 2f 2a 20  date;        /* 
cbf0: 43 6f 6e 74 65 78 74 20 66 6f 72 20 61 63 74 69  Context for acti
cc00: 76 65 20 70 72 65 2d 75 70 64 61 74 65 20 63 61  ve pre-update ca
cc10: 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e 64 69 66  llback */.#endif
cc20: 20 2f 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c   /* SQLITE_ENABL
cc30: 45 5f 50 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b  E_PREUPDATE_HOOK
cc40: 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
cc50: 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e  TE_OMIT_WAL.  in
cc60: 74 20 28 2a 78 57 61 6c 43 61 6c 6c 62 61 63 6b  t (*xWalCallback
cc70: 29 28 76 6f 69 64 20 2a 2c 20 73 71 6c 69 74 65  )(void *, sqlite
cc80: 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  3 *, const char 
cc90: 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  *, int);.  void 
cca0: 2a 70 57 61 6c 41 72 67 3b 0a 23 65 6e 64 69 66  *pWalArg;.#endif
ccb0: 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65  .  void(*xCollNe
ccc0: 65 64 65 64 29 28 76 6f 69 64 2a 2c 73 71 6c 69  eded)(void*,sqli
ccd0: 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65  te3*,int eTextRe
cce0: 70 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  p,const char*);.
ccf0: 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65    void(*xCollNee
cd00: 64 65 64 31 36 29 28 76 6f 69 64 2a 2c 73 71 6c  ded16)(void*,sql
cd10: 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52  ite3*,int eTextR
cd20: 65 70 2c 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b  ep,const void*);
cd30: 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e 65  .  void *pCollNe
cd40: 65 64 65 64 41 72 67 3b 0a 20 20 73 71 6c 69 74  ededArg;.  sqlit
cd50: 65 33 5f 76 61 6c 75 65 20 2a 70 45 72 72 3b 20  e3_value *pErr; 
cd60: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74           /* Most
cd70: 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20 6d 65   recent error me
cd80: 73 73 61 67 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e  ssage */.  union
cd90: 20 7b 0a 20 20 20 20 76 6f 6c 61 74 69 6c 65 20   {.    volatile 
cda0: 69 6e 74 20 69 73 49 6e 74 65 72 72 75 70 74 65  int isInterrupte
cdb0: 64 3b 20 2f 2a 20 54 72 75 65 20 69 66 20 73 71  d; /* True if sq
cdc0: 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 20  lite3_interrupt 
cdd0: 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 20  has been called 
cde0: 2a 2f 0a 20 20 20 20 64 6f 75 62 6c 65 20 6e 6f  */.    double no
cdf0: 74 55 73 65 64 31 3b 20 20 20 20 20 20 20 20 20  tUsed1;         
ce00: 20 20 20 2f 2a 20 53 70 61 63 65 72 20 2a 2f 0a     /* Spacer */.
ce10: 20 20 7d 20 75 31 3b 0a 20 20 4c 6f 6f 6b 61 73    } u1;.  Lookas
ce20: 69 64 65 20 6c 6f 6f 6b 61 73 69 64 65 3b 20 20  ide lookaside;  
ce30: 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 6b 61          /* Looka
ce40: 73 69 64 65 20 6d 61 6c 6c 6f 63 20 63 6f 6e 66  side malloc conf
ce50: 69 67 75 72 61 74 69 6f 6e 20 2a 2f 0a 23 69 66  iguration */.#if
ce60: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
ce70: 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20  _AUTHORIZATION. 
ce80: 20 73 71 6c 69 74 65 33 5f 78 61 75 74 68 20 78   sqlite3_xauth x
ce90: 41 75 74 68 3b 20 20 20 20 20 20 20 20 20 20 2f  Auth;          /
cea0: 2a 20 41 63 63 65 73 73 20 61 75 74 68 6f 72 69  * Access authori
ceb0: 7a 61 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 20  zation function 
cec0: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75 74 68  */.  void *pAuth
ced0: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
cee0: 20 20 20 2f 2a 20 31 73 74 20 61 72 67 75 6d 65     /* 1st argume
cef0: 6e 74 20 74 6f 20 74 68 65 20 61 63 63 65 73 73  nt to the access
cf00: 20 61 75 74 68 20 66 75 6e 63 74 69 6f 6e 20 2a   auth function *
cf10: 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  /.#endif.#ifndef
cf20: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f   SQLITE_OMIT_PRO
cf30: 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20  GRESS_CALLBACK. 
cf40: 20 69 6e 74 20 28 2a 78 50 72 6f 67 72 65 73 73   int (*xProgress
cf50: 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20 20 2f  )(void *);     /
cf60: 2a 20 54 68 65 20 70 72 6f 67 72 65 73 73 20 63  * The progress c
cf70: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69  allback */.  voi
cf80: 64 20 2a 70 50 72 6f 67 72 65 73 73 41 72 67 3b  d *pProgressArg;
cf90: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
cfa0: 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 70 72  gument to the pr
cfb0: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
cfc0: 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 50  */.  unsigned nP
cfd0: 72 6f 67 72 65 73 73 4f 70 73 3b 20 20 20 20 20  rogressOps;     
cfe0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
cff0: 6f 70 63 6f 64 65 73 20 66 6f 72 20 70 72 6f 67  opcodes for prog
d000: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  ress callback */
d010: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
d020: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
d030: 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e  UALTABLE.  int n
d040: 56 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20  VTrans;         
d050: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f           /* Allo
d060: 63 61 74 65 64 20 73 69 7a 65 20 6f 66 20 61 56  cated size of aV
d070: 54 72 61 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20  Trans */.  Hash 
d080: 61 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20 20 20  aModule;        
d090: 20 20 20 20 20 20 20 20 20 2f 2a 20 70 6f 70 75           /* popu
d0a0: 6c 61 74 65 64 20 62 79 20 73 71 6c 69 74 65 33  lated by sqlite3
d0b0: 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29  _create_module()
d0c0: 20 2a 2f 0a 20 20 56 74 61 62 43 74 78 20 2a 70   */.  VtabCtx *p
d0d0: 56 74 61 62 43 74 78 3b 20 20 20 20 20 20 20 20  VtabCtx;        
d0e0: 20 20 20 20 2f 2a 20 43 6f 6e 74 65 78 74 20 66      /* Context f
d0f0: 6f 72 20 61 63 74 69 76 65 20 76 74 61 62 20 63  or active vtab c
d100: 6f 6e 6e 65 63 74 2f 63 72 65 61 74 65 20 2a 2f  onnect/create */
d110: 0a 20 20 56 54 61 62 6c 65 20 2a 2a 61 56 54 72  .  VTable **aVTr
d120: 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ans;            
d130: 20 2f 2a 20 56 69 72 74 75 61 6c 20 74 61 62 6c   /* Virtual tabl
d140: 65 73 20 77 69 74 68 20 6f 70 65 6e 20 74 72 61  es with open tra
d150: 6e 73 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 56  nsactions */.  V
d160: 54 61 62 6c 65 20 2a 70 44 69 73 63 6f 6e 6e 65  Table *pDisconne
d170: 63 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ct;          /* 
d180: 44 69 73 63 6f 6e 6e 65 63 74 20 74 68 65 73 65  Disconnect these
d190: 20 69 6e 20 6e 65 78 74 20 73 71 6c 69 74 65 33   in next sqlite3
d1a0: 5f 70 72 65 70 61 72 65 28 29 20 2a 2f 0a 23 65  _prepare() */.#e
d1b0: 6e 64 69 66 0a 20 20 48 61 73 68 20 61 46 75 6e  ndif.  Hash aFun
d1c0: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
d1d0: 20 20 20 20 20 2f 2a 20 48 61 73 68 20 74 61 62       /* Hash tab
d1e0: 6c 65 20 6f 66 20 63 6f 6e 6e 65 63 74 69 6f 6e  le of connection
d1f0: 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20   functions */.  
d200: 48 61 73 68 20 61 43 6f 6c 6c 53 65 71 3b 20 20  Hash aCollSeq;  
d210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
d220: 20 41 6c 6c 20 63 6f 6c 6c 61 74 69 6e 67 20 73   All collating s
d230: 65 71 75 65 6e 63 65 73 20 2a 2f 0a 20 20 42 75  equences */.  Bu
d240: 73 79 48 61 6e 64 6c 65 72 20 62 75 73 79 48 61  syHandler busyHa
d250: 6e 64 6c 65 72 3b 20 20 20 20 20 20 2f 2a 20 42  ndler;      /* B
d260: 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  usy callback */.
d270: 20 20 44 62 20 61 44 62 53 74 61 74 69 63 5b 32    Db aDbStatic[2
d280: 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ];              
d290: 2f 2a 20 53 74 61 74 69 63 20 73 70 61 63 65 20  /* Static space 
d2a0: 66 6f 72 20 74 68 65 20 32 20 64 65 66 61 75 6c  for the 2 defaul
d2b0: 74 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20  t backends */.  
d2c0: 53 61 76 65 70 6f 69 6e 74 20 2a 70 53 61 76 65  Savepoint *pSave
d2d0: 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20 2f 2a  point;        /*
d2e0: 20 4c 69 73 74 20 6f 66 20 61 63 74 69 76 65 20   List of active 
d2f0: 73 61 76 65 70 6f 69 6e 74 73 20 2a 2f 0a 20 20  savepoints */.  
d300: 69 6e 74 20 62 75 73 79 54 69 6d 65 6f 75 74 3b  int busyTimeout;
d310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
d320: 20 42 75 73 79 20 68 61 6e 64 6c 65 72 20 74 69   Busy handler ti
d330: 6d 65 6f 75 74 2c 20 69 6e 20 6d 73 65 63 20 2a  meout, in msec *
d340: 2f 0a 20 20 69 6e 74 20 6e 53 61 76 65 70 6f 69  /.  int nSavepoi
d350: 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nt;             
d360: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e    /* Number of n
d370: 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 73  on-transaction s
d380: 61 76 65 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69  avepoints */.  i
d390: 6e 74 20 6e 53 74 61 74 65 6d 65 6e 74 3b 20 20  nt nStatement;  
d3a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
d3b0: 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64  Number of nested
d3c0: 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73   statement-trans
d3d0: 61 63 74 69 6f 6e 73 20 20 2a 2f 0a 20 20 69 36  actions  */.  i6
d3e0: 34 20 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b  4 nDeferredCons;
d3f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
d400: 65 74 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73  et deferred cons
d410: 74 72 61 69 6e 74 73 20 74 68 69 73 20 74 72 61  traints this tra
d420: 6e 73 61 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 69  nsaction. */.  i
d430: 36 34 20 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  64 nDeferredImmC
d440: 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ons;         /* 
d450: 4e 65 74 20 64 65 66 65 72 72 65 64 20 69 6d 6d  Net deferred imm
d460: 65 64 69 61 74 65 20 63 6f 6e 73 74 72 61 69 6e  ediate constrain
d470: 74 73 20 2a 2f 0a 20 20 69 6e 74 20 2a 70 6e 42  ts */.  int *pnB
d480: 79 74 65 73 46 72 65 65 64 3b 20 20 20 20 20 20  ytesFreed;      
d490: 20 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20        /* If not 
d4a0: 4e 55 4c 4c 2c 20 69 6e 63 72 65 6d 65 6e 74 20  NULL, increment 
d4b0: 74 68 69 73 20 69 6e 20 44 62 46 72 65 65 28 29  this in DbFree()
d4c0: 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
d4d0: 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f  E_ENABLE_UNLOCK_
d4e0: 4e 4f 54 49 46 59 0a 20 20 2f 2a 20 54 68 65 20  NOTIFY.  /* The 
d4f0: 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 72 69 61 62  following variab
d500: 6c 65 73 20 61 72 65 20 61 6c 6c 20 70 72 6f 74  les are all prot
d510: 65 63 74 65 64 20 62 79 20 74 68 65 20 53 54 41  ected by the STA
d520: 54 49 43 5f 4d 41 53 54 45 52 0a 20 20 2a 2a 20  TIC_MASTER.  ** 
d530: 6d 75 74 65 78 2c 20 6e 6f 74 20 62 79 20 73 71  mutex, not by sq
d540: 6c 69 74 65 33 2e 6d 75 74 65 78 2e 20 54 68 65  lite3.mutex. The
d550: 79 20 61 72 65 20 75 73 65 64 20 62 79 20 63 6f  y are used by co
d560: 64 65 20 69 6e 20 6e 6f 74 69 66 79 2e 63 2e 0a  de in notify.c..
d570: 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58    **.  ** When X
d580: 2e 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69  .pUnlockConnecti
d590: 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e  on==Y, that mean
d5a0: 73 20 74 68 61 74 20 58 20 69 73 20 77 61 69 74  s that X is wait
d5b0: 69 6e 67 20 66 6f 72 20 59 20 74 6f 0a 20 20 2a  ing for Y to.  *
d5c0: 2a 20 75 6e 6c 6f 63 6b 20 73 6f 20 74 68 61 74  * unlock so that
d5d0: 20 69 74 20 63 61 6e 20 70 72 6f 63 65 65 64 2e   it can proceed.
d5e0: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20  .  **.  ** When 
d5f0: 58 2e 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65  X.pBlockingConne
d600: 63 74 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d  ction==Y, that m
d610: 65 61 6e 73 20 74 68 61 74 20 73 6f 6d 65 74 68  eans that someth
d620: 69 6e 67 20 74 68 61 74 20 58 20 74 72 69 65 64  ing that X tried
d630: 0a 20 20 2a 2a 20 74 72 69 65 64 20 74 6f 20 64  .  ** tried to d
d640: 6f 20 72 65 63 65 6e 74 6c 79 20 66 61 69 6c 65  o recently faile
d650: 64 20 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45  d with an SQLITE
d660: 5f 4c 4f 43 4b 45 44 20 65 72 72 6f 72 20 64 75  _LOCKED error du
d670: 65 20 74 6f 20 6c 6f 63 6b 73 0a 20 20 2a 2a 20  e to locks.  ** 
d680: 68 65 6c 64 20 62 79 20 59 2e 0a 20 20 2a 2f 0a  held by Y..  */.
d690: 20 20 73 71 6c 69 74 65 33 20 2a 70 42 6c 6f 63    sqlite3 *pBloc
d6a0: 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20  kingConnection; 
d6b0: 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 68  /* Connection th
d6c0: 61 74 20 63 61 75 73 65 64 20 53 51 4c 49 54 45  at caused SQLITE
d6d0: 5f 4c 4f 43 4b 45 44 20 2a 2f 0a 20 20 73 71 6c  _LOCKED */.  sql
d6e0: 69 74 65 33 20 2a 70 55 6e 6c 6f 63 6b 43 6f 6e  ite3 *pUnlockCon
d6f0: 6e 65 63 74 69 6f 6e 3b 20 20 20 20 20 20 20 20  nection;        
d700: 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e     /* Connection
d710: 20 74 6f 20 77 61 74 63 68 20 66 6f 72 20 75 6e   to watch for un
d720: 6c 6f 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  lock */.  void *
d730: 70 55 6e 6c 6f 63 6b 41 72 67 3b 20 20 20 20 20  pUnlockArg;     
d740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d750: 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78  /* Argument to x
d760: 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 20 2a 2f 0a  UnlockNotify */.
d770: 20 20 76 6f 69 64 20 28 2a 78 55 6e 6c 6f 63 6b    void (*xUnlock
d780: 4e 6f 74 69 66 79 29 28 76 6f 69 64 20 2a 2a 2c  Notify)(void **,
d790: 20 69 6e 74 29 3b 20 20 2f 2a 20 55 6e 6c 6f 63   int);  /* Unloc
d7a0: 6b 20 6e 6f 74 69 66 79 20 63 61 6c 6c 62 61 63  k notify callbac
d7b0: 6b 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a  k */.  sqlite3 *
d7c0: 70 4e 65 78 74 42 6c 6f 63 6b 65 64 3b 20 20 20  pNextBlocked;   
d7d0: 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20       /* Next in 
d7e0: 6c 69 73 74 20 6f 66 20 61 6c 6c 20 62 6c 6f 63  list of all bloc
d7f0: 6b 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20  ked connections 
d800: 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66  */.#endif.#ifdef
d810: 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54   SQLITE_USER_AUT
d820: 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20 73 71  HENTICATION.  sq
d830: 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68 20 61  lite3_userauth a
d840: 75 74 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 55  uth;        /* U
d850: 73 65 72 20 61 75 74 68 65 6e 74 69 63 61 74 69  ser authenticati
d860: 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a  on information *
d870: 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a  /.#endif.};../*.
d880: 2a 2a 20 41 20 6d 61 63 72 6f 20 74 6f 20 64 69  ** A macro to di
d890: 73 63 6f 76 65 72 20 74 68 65 20 65 6e 63 6f 64  scover the encod
d8a0: 69 6e 67 20 6f 66 20 61 20 64 61 74 61 62 61 73  ing of a databas
d8b0: 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43  e..*/.#define SC
d8c0: 48 45 4d 41 5f 45 4e 43 28 64 62 29 20 28 28 64  HEMA_ENC(db) ((d
d8d0: 62 29 2d 3e 61 44 62 5b 30 5d 2e 70 53 63 68 65  b)->aDb[0].pSche
d8e0: 6d 61 2d 3e 65 6e 63 29 0a 23 64 65 66 69 6e 65  ma->enc).#define
d8f0: 20 45 4e 43 28 64 62 29 20 20 20 20 20 20 20 20   ENC(db)        
d900: 28 28 64 62 29 2d 3e 65 6e 63 29 0a 0a 2f 2a 0a  ((db)->enc)../*.
d910: 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75  ** Possible valu
d920: 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74  es for the sqlit
d930: 65 33 2e 66 6c 61 67 73 2e 0a 2a 2a 0a 2a 2a 20  e3.flags..**.** 
d940: 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74  Value constraint
d950: 73 20 28 65 6e 66 6f 72 63 65 64 20 76 69 61 20  s (enforced via 
d960: 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20  assert()):.**   
d970: 20 20 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53     SQLITE_FullFS
d980: 79 6e 63 20 20 20 20 20 3d 3d 20 50 41 47 45 52  ync     == PAGER
d990: 5f 46 55 4c 4c 46 53 59 4e 43 0a 2a 2a 20 20 20  _FULLFSYNC.**   
d9a0: 20 20 20 53 51 4c 49 54 45 5f 43 6b 70 74 46 75     SQLITE_CkptFu
d9b0: 6c 6c 46 53 79 6e 63 20 3d 3d 20 50 41 47 45 52  llFSync == PAGER
d9c0: 5f 43 4b 50 54 5f 46 55 4c 4c 46 53 59 4e 43 0a  _CKPT_FULLFSYNC.
d9d0: 2a 2a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 43  **      SQLITE_C
d9e0: 61 63 68 65 53 70 69 6c 6c 20 20 20 20 3d 3d 20  acheSpill    == 
d9f0: 50 41 47 45 52 5f 43 41 43 48 45 5f 53 50 49 4c  PAGER_CACHE_SPIL
da00: 4c 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  L.*/.#define SQL
da10: 49 54 45 5f 57 72 69 74 65 53 63 68 65 6d 61 20  ITE_WriteSchema 
da20: 20 20 20 30 78 30 30 30 30 30 30 30 31 20 20 2f     0x00000001  /
da30: 2a 20 4f 4b 20 74 6f 20 75 70 64 61 74 65 20 53  * OK to update S
da40: 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 2a 2f 0a  QLITE_MASTER */.
da50: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c  #define SQLITE_L
da60: 65 67 61 63 79 46 69 6c 65 46 6d 74 20 20 30 78  egacyFileFmt  0x
da70: 30 30 30 30 30 30 30 32 20 20 2f 2a 20 43 72 65  00000002  /* Cre
da80: 61 74 65 20 6e 65 77 20 64 61 74 61 62 61 73 65  ate new database
da90: 73 20 69 6e 20 66 6f 72 6d 61 74 20 31 20 2a 2f  s in format 1 */
daa0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
dab0: 46 75 6c 6c 43 6f 6c 4e 61 6d 65 73 20 20 20 30  FullColNames   0
dac0: 78 30 30 30 30 30 30 30 34 20 20 2f 2a 20 53 68  x00000004  /* Sh
dad0: 6f 77 20 66 75 6c 6c 20 63 6f 6c 75 6d 6e 20 6e  ow full column n
dae0: 61 6d 65 73 20 6f 6e 20 53 45 4c 45 43 54 20 2a  ames on SELECT *
daf0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
db00: 5f 46 75 6c 6c 46 53 79 6e 63 20 20 20 20 20 20  _FullFSync      
db10: 30 78 30 30 30 30 30 30 30 38 20 20 2f 2a 20 55  0x00000008  /* U
db20: 73 65 20 66 75 6c 6c 20 66 73 79 6e 63 20 6f 6e  se full fsync on
db30: 20 74 68 65 20 62 61 63 6b 65 6e 64 20 2a 2f 0a   the backend */.
db40: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43  #define SQLITE_C
db50: 6b 70 74 46 75 6c 6c 46 53 79 6e 63 20 20 30 78  kptFullFSync  0x
db60: 30 30 30 30 30 30 31 30 20 20 2f 2a 20 55 73 65  00000010  /* Use
db70: 20 66 75 6c 6c 20 66 73 79 6e 63 20 66 6f 72 20   full fsync for 
db80: 63 68 65 63 6b 70 6f 69 6e 74 20 2a 2f 0a 23 64  checkpoint */.#d
db90: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 61 63  efine SQLITE_Cac
dba0: 68 65 53 70 69 6c 6c 20 20 20 20 20 30 78 30 30  heSpill     0x00
dbb0: 30 30 30 30 32 30 20 20 2f 2a 20 4f 4b 20 74 6f  000020  /* OK to
dbc0: 20 73 70 69 6c 6c 20 70 61 67 65 72 20 63 61 63   spill pager cac
dbd0: 68 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  he */.#define SQ
dbe0: 4c 49 54 45 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d  LITE_ShortColNam
dbf0: 65 73 20 20 30 78 30 30 30 30 30 30 34 30 20 20  es  0x00000040  
dc00: 2f 2a 20 53 68 6f 77 20 73 68 6f 72 74 20 63 6f  /* Show short co
dc10: 6c 75 6d 6e 73 20 6e 61 6d 65 73 20 2a 2f 0a 23  lumns names */.#
dc20: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f  define SQLITE_Co
dc30: 75 6e 74 52 6f 77 73 20 20 20 20 20 20 30 78 30  untRows      0x0
dc40: 30 30 30 30 30 38 30 20 20 2f 2a 20 43 6f 75 6e  0000080  /* Coun
dc50: 74 20 72 6f 77 73 20 63 68 61 6e 67 65 64 20 62  t rows changed b
dc60: 79 20 49 4e 53 45 52 54 2c 20 2a 2f 0a 20 20 20  y INSERT, */.   
dc70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dc80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dc90: 20 20 20 20 20 20 20 2f 2a 20 20 20 44 45 4c 45         /*   DELE
dca0: 54 45 2c 20 6f 72 20 55 50 44 41 54 45 20 61 6e  TE, or UPDATE an
dcb0: 64 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20 20 20  d return */.    
dcc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dcd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dce0: 20 20 20 20 20 20 2f 2a 20 20 20 74 68 65 20 63        /*   the c
dcf0: 6f 75 6e 74 20 75 73 69 6e 67 20 61 20 63 61 6c  ount using a cal
dd00: 6c 62 61 63 6b 2e 20 2a 2f 0a 23 64 65 66 69 6e  lback. */.#defin
dd10: 65 20 53 51 4c 49 54 45 5f 4e 75 6c 6c 43 61 6c  e SQLITE_NullCal
dd20: 6c 62 61 63 6b 20 20 20 30 78 30 30 30 30 30 31  lback   0x000001
dd30: 30 30 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68  00  /* Invoke th
dd40: 65 20 63 61 6c 6c 62 61 63 6b 20 6f 6e 63 65 20  e callback once 
dd50: 69 66 20 74 68 65 20 2a 2f 0a 20 20 20 20 20 20  if the */.      
dd60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd80: 20 20 20 20 2f 2a 20 20 20 72 65 73 75 6c 74 20      /*   result 
dd90: 73 65 74 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a  set is empty */.
dda0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49  #define SQLITE_I
ddb0: 67 6e 6f 72 65 43 68 65 63 6b 73 20 20 20 30 78  gnoreChecks   0x
ddc0: 30 30 30 30 30 32 30 30 20 20 2f 2a 20 44 6f 20  00000200  /* Do 
ddd0: 6e 6f 74 20 65 6e 66 6f 72 63 65 20 63 68 65 63  not enforce chec
dde0: 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f  k constraints */
ddf0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
de00: 52 65 61 64 55 6e 63 6f 6d 6d 69 74 20 20 20 30  ReadUncommit   0
de10: 78 30 30 30 30 30 34 30 30 20 20 2f 2a 20 52 45  x00000400  /* RE
de20: 41 44 20 55 4e 43 4f 4d 4d 49 54 54 45 44 20 69  AD UNCOMMITTED i
de30: 6e 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 2a  n shared-cache *
de40: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
de50: 5f 4e 6f 43 6b 70 74 4f 6e 43 6c 6f 73 65 20 20  _NoCkptOnClose  
de60: 30 78 30 30 30 30 30 38 30 30 20 20 2f 2a 20 4e  0x00000800  /* N
de70: 6f 20 63 68 65 63 6b 70 6f 69 6e 74 20 6f 6e 20  o checkpoint on 
de80: 63 6c 6f 73 65 28 29 2f 44 45 54 41 43 48 20 2a  close()/DETACH *
de90: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
dea0: 5f 52 65 76 65 72 73 65 4f 72 64 65 72 20 20 20  _ReverseOrder   
deb0: 30 78 30 30 30 30 31 30 30 30 20 20 2f 2a 20 52  0x00001000  /* R
dec0: 65 76 65 72 73 65 20 75 6e 6f 72 64 65 72 65 64  everse unordered
ded0: 20 53 45 4c 45 43 54 73 20 2a 2f 0a 23 64 65 66   SELECTs */.#def
dee0: 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 63 54 72  ine SQLITE_RecTr
def0: 69 67 67 65 72 73 20 20 20 20 30 78 30 30 30 30  iggers    0x0000
df00: 32 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20  2000  /* Enable 
df10: 72 65 63 75 72 73 69 76 65 20 74 72 69 67 67 65  recursive trigge
df20: 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  rs */.#define SQ
df30: 4c 49 54 45 5f 46 6f 72 65 69 67 6e 4b 65 79 73  LITE_ForeignKeys
df40: 20 20 20 20 30 78 30 30 30 30 34 30 30 30 20 20      0x00004000  
df50: 2f 2a 20 45 6e 66 6f 72 63 65 20 66 6f 72 65 69  /* Enforce forei
df60: 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
df70: 74 73 20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ts  */.#define S
df80: 51 4c 49 54 45 5f 41 75 74 6f 49 6e 64 65 78 20  QLITE_AutoIndex 
df90: 20 20 20 20 20 30 78 30 30 30 30 38 30 30 30 20       0x00008000 
dfa0: 20 2f 2a 20 45 6e 61 62 6c 65 20 61 75 74 6f 6d   /* Enable autom
dfb0: 61 74 69 63 20 69 6e 64 65 78 65 73 20 2a 2f 0a  atic indexes */.
dfc0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c  #define SQLITE_L
dfd0: 6f 61 64 45 78 74 65 6e 73 69 6f 6e 20 20 30 78  oadExtension  0x
dfe0: 30 30 30 31 30 30 30 30 20 20 2f 2a 20 45 6e 61  00010000  /* Ena
dff0: 62 6c 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69  ble load_extensi
e000: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
e010: 4c 49 54 45 5f 4c 6f 61 64 45 78 74 46 75 6e 63  LITE_LoadExtFunc
e020: 20 20 20 20 30 78 30 30 30 32 30 30 30 30 20 20      0x00020000  
e030: 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f 61 64 5f 65  /* Enable load_e
e040: 78 74 65 6e 73 69 6f 6e 28 29 20 53 51 4c 20 66  xtension() SQL f
e050: 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  unc */.#define S
e060: 51 4c 49 54 45 5f 45 6e 61 62 6c 65 54 72 69 67  QLITE_EnableTrig
e070: 67 65 72 20 20 30 78 30 30 30 34 30 30 30 30 20  ger  0x00040000 
e080: 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62   /* True to enab
e090: 6c 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 23  le triggers */.#
e0a0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 65  define SQLITE_De
e0b0: 66 65 72 46 4b 73 20 20 20 20 20 20 20 30 78 30  ferFKs       0x0
e0c0: 30 30 38 30 30 30 30 20 20 2f 2a 20 44 65 66 65  0080000  /* Defe
e0d0: 72 20 61 6c 6c 20 46 4b 20 63 6f 6e 73 74 72 61  r all FK constra
e0e0: 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ints */.#define 
e0f0: 53 51 4c 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79  SQLITE_QueryOnly
e100: 20 20 20 20 20 20 30 78 30 30 31 30 30 30 30 30        0x00100000
e110: 20 20 2f 2a 20 44 69 73 61 62 6c 65 20 64 61 74    /* Disable dat
e120: 61 62 61 73 65 20 63 68 61 6e 67 65 73 20 2a 2f  abase changes */
e130: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e140: 43 65 6c 6c 53 69 7a 65 43 6b 20 20 20 20 20 30  CellSizeCk     0
e150: 78 30 30 32 30 30 30 30 30 20 20 2f 2a 20 43 68  x00200000  /* Ch
e160: 65 63 6b 20 62 74 72 65 65 20 63 65 6c 6c 20 73  eck btree cell s
e170: 69 7a 65 73 20 6f 6e 20 6c 6f 61 64 20 2a 2f 0a  izes on load */.
e180: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
e190: 74 73 33 54 6f 6b 65 6e 69 7a 65 72 20 20 30 78  ts3Tokenizer  0x
e1a0: 30 30 34 30 30 30 30 30 20 20 2f 2a 20 45 6e 61  00400000  /* Ena
e1b0: 62 6c 65 20 66 74 73 33 5f 74 6f 6b 65 6e 69 7a  ble fts3_tokeniz
e1c0: 65 72 28 32 29 20 2a 2f 0a 23 64 65 66 69 6e 65  er(2) */.#define
e1d0: 20 53 51 4c 49 54 45 5f 45 6e 61 62 6c 65 51 50   SQLITE_EnableQP
e1e0: 53 47 20 20 20 20 20 30 78 30 30 38 30 30 30 30  SG     0x0080000
e1f0: 30 20 20 2f 2a 20 51 75 65 72 79 20 50 6c 61 6e  0  /* Query Plan
e200: 6e 65 72 20 53 74 61 62 69 6c 69 74 79 20 47 75  ner Stability Gu
e210: 61 72 61 6e 74 65 65 2a 2f 0a 23 64 65 66 69 6e  arantee*/.#defin
e220: 65 20 53 51 4c 49 54 45 5f 54 72 69 67 67 65 72  e SQLITE_Trigger
e230: 45 51 50 20 20 20 20 20 30 78 30 31 30 30 30 30  EQP     0x010000
e240: 30 30 20 20 2f 2a 20 53 68 6f 77 20 74 72 69 67  00  /* Show trig
e250: 67 65 72 20 45 58 50 4c 41 49 4e 20 51 55 45 52  ger EXPLAIN QUER
e260: 59 20 50 4c 41 4e 20 2a 2f 0a 23 64 65 66 69 6e  Y PLAN */.#defin
e270: 65 20 53 51 4c 49 54 45 5f 52 65 73 65 74 44 61  e SQLITE_ResetDa
e280: 74 61 62 61 73 65 20 20 30 78 30 32 30 30 30 30  tabase  0x020000
e290: 30 30 20 20 2f 2a 20 52 65 73 65 74 20 74 68 65  00  /* Reset the
e2a0: 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 23 64 65   database */.#de
e2b0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 65 67 61  fine SQLITE_Lega
e2c0: 63 79 41 6c 74 65 72 20 20 20 20 30 78 30 34 30  cyAlter    0x040
e2d0: 30 30 30 30 30 20 20 2f 2a 20 4c 65 67 61 63 79  00000  /* Legacy
e2e0: 20 41 4c 54 45 52 20 54 41 42 4c 45 20 62 65 68   ALTER TABLE beh
e2f0: 61 76 69 6f 75 72 20 2a 2f 0a 23 64 65 66 69 6e  aviour */.#defin
e300: 65 20 53 51 4c 49 54 45 5f 4e 6f 53 63 68 65 6d  e SQLITE_NoSchem
e310: 61 45 72 72 6f 72 20 20 30 78 30 38 30 30 30 30  aError  0x080000
e320: 30 30 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 72 65  00  /* Do not re
e330: 70 6f 72 74 20 73 63 68 65 6d 61 20 70 61 72 73  port schema pars
e340: 65 20 65 72 72 6f 72 73 2a 2f 0a 23 64 65 66 69  e errors*/.#defi
e350: 6e 65 20 53 51 4c 49 54 45 5f 44 65 66 65 6e 73  ne SQLITE_Defens
e360: 69 76 65 20 20 20 20 20 20 30 78 31 30 30 30 30  ive      0x10000
e370: 30 30 30 20 20 2f 2a 20 49 6e 70 75 74 20 53 51  000  /* Input SQ
e380: 4c 20 69 73 20 6c 69 6b 65 6c 79 20 68 6f 73 74  L is likely host
e390: 69 6c 65 20 2a 2f 0a 0a 2f 2a 20 46 6c 61 67 73  ile */../* Flags
e3a0: 20 75 73 65 64 20 6f 6e 6c 79 20 69 66 20 64 65   used only if de
e3b0: 62 75 67 67 69 6e 67 20 2a 2f 0a 23 64 65 66 69  bugging */.#defi
e3c0: 6e 65 20 48 49 28 58 29 20 20 28 28 75 36 34 29  ne HI(X)  ((u64)
e3d0: 28 58 29 3c 3c 33 32 29 0a 23 69 66 64 65 66 20  (X)<<32).#ifdef 
e3e0: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 64 65  SQLITE_DEBUG.#de
e3f0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 71 6c 54  fine SQLITE_SqlT
e400: 72 61 63 65 20 20 20 20 20 20 20 48 49 28 30 78  race       HI(0x
e410: 30 30 30 31 29 20 20 2f 2a 20 44 65 62 75 67 20  0001)  /* Debug 
e420: 70 72 69 6e 74 20 53 51 4c 20 61 73 20 69 74 20  print SQL as it 
e430: 65 78 65 63 75 74 65 73 20 2a 2f 0a 23 64 65 66  executes */.#def
e440: 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 4c  ine SQLITE_VdbeL
e450: 69 73 74 69 6e 67 20 20 20 20 48 49 28 30 78 30  isting    HI(0x0
e460: 30 30 32 29 20 20 2f 2a 20 44 65 62 75 67 20 6c  002)  /* Debug l
e470: 69 73 74 69 6e 67 73 20 6f 66 20 56 44 42 45 20  istings of VDBE 
e480: 70 72 6f 67 73 20 2a 2f 0a 23 64 65 66 69 6e 65  progs */.#define
e490: 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63   SQLITE_VdbeTrac
e4a0: 65 20 20 20 20 20 20 48 49 28 30 78 30 30 30 34  e      HI(0x0004
e4b0: 29 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 74 72  )  /* True to tr
e4c0: 61 63 65 20 56 44 42 45 20 65 78 65 63 75 74 69  ace VDBE executi
e4d0: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
e4e0: 4c 49 54 45 5f 56 64 62 65 41 64 64 6f 70 54 72  LITE_VdbeAddopTr
e4f0: 61 63 65 20 48 49 28 30 78 30 30 30 38 29 20 20  ace HI(0x0008)  
e500: 2f 2a 20 54 72 61 63 65 20 73 71 6c 69 74 65 33  /* Trace sqlite3
e510: 56 64 62 65 41 64 64 4f 70 28 29 20 63 61 6c 6c  VdbeAddOp() call
e520: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
e530: 49 54 45 5f 56 64 62 65 45 51 50 20 20 20 20 20  ITE_VdbeEQP     
e540: 20 20 20 48 49 28 30 78 30 30 31 30 29 20 20 2f     HI(0x0010)  /
e550: 2a 20 44 65 62 75 67 20 45 58 50 4c 41 49 4e 20  * Debug EXPLAIN 
e560: 51 55 45 52 59 20 50 4c 41 4e 20 2a 2f 0a 23 65  QUERY PLAN */.#e
e570: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  ndif../*.** Allo
e580: 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 73  wed values for s
e590: 71 6c 69 74 65 33 2e 6d 44 62 46 6c 61 67 73 0a  qlite3.mDbFlags.
e5a0: 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 46 4c 41  */.#define DBFLA
e5b0: 47 5f 53 63 68 65 6d 61 43 68 61 6e 67 65 20 20  G_SchemaChange  
e5c0: 20 30 78 30 30 30 31 20 20 2f 2a 20 55 6e 63 6f   0x0001  /* Unco
e5d0: 6d 6d 69 74 74 65 64 20 48 61 73 68 20 74 61 62  mmitted Hash tab
e5e0: 6c 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64  le changes */.#d
e5f0: 65 66 69 6e 65 20 44 42 46 4c 41 47 5f 50 72 65  efine DBFLAG_Pre
e600: 66 65 72 42 75 69 6c 74 69 6e 20 20 30 78 30 30  ferBuiltin  0x00
e610: 30 32 20 20 2f 2a 20 50 72 65 66 65 72 65 6e 63  02  /* Preferenc
e620: 65 20 74 6f 20 62 75 69 6c 74 2d 69 6e 20 66 75  e to built-in fu
e630: 6e 63 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44  ncs */.#define D
e640: 42 46 4c 41 47 5f 56 61 63 75 75 6d 20 20 20 20  BFLAG_Vacuum    
e650: 20 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20       0x0004  /* 
e660: 43 75 72 72 65 6e 74 6c 79 20 69 6e 20 61 20 56  Currently in a V
e670: 41 43 55 55 4d 20 2a 2f 0a 23 64 65 66 69 6e 65  ACUUM */.#define
e680: 20 44 42 46 4c 41 47 5f 53 63 68 65 6d 61 4b 6e   DBFLAG_SchemaKn
e690: 6f 77 6e 4f 6b 20 20 30 78 30 30 30 38 20 20 2f  ownOk  0x0008  /
e6a0: 2a 20 53 63 68 65 6d 61 20 69 73 20 6b 6e 6f 77  * Schema is know
e6b0: 6e 20 74 6f 20 62 65 20 76 61 6c 69 64 20 2a 2f  n to be valid */
e6c0: 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 73 20 6f 66 20  ../*.** Bits of 
e6d0: 74 68 65 20 73 71 6c 69 74 65 33 2e 64 62 4f 70  the sqlite3.dbOp
e6e0: 74 46 6c 61 67 73 20 66 69 65 6c 64 20 74 68 61  tFlags field tha
e6f0: 74 20 61 72 65 20 75 73 65 64 20 62 79 20 74 68  t are used by th
e700: 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65 73  e.** sqlite3_tes
e710: 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49 54 45  t_control(SQLITE
e720: 5f 54 45 53 54 43 54 52 4c 5f 4f 50 54 49 4d 49  _TESTCTRL_OPTIMI
e730: 5a 41 54 49 4f 4e 53 2c 2e 2e 2e 29 20 69 6e 74  ZATIONS,...) int
e740: 65 72 66 61 63 65 20 74 6f 0a 2a 2a 20 73 65 6c  erface to.** sel
e750: 65 63 74 69 76 65 6c 79 20 64 69 73 61 62 6c 65  ectively disable
e760: 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a   various optimiz
e770: 61 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69  ations..*/.#defi
e780: 6e 65 20 53 51 4c 49 54 45 5f 51 75 65 72 79 46  ne SQLITE_QueryF
e790: 6c 61 74 74 65 6e 65 72 20 30 78 30 30 30 31 20  lattener 0x0001 
e7a0: 20 20 2f 2a 20 51 75 65 72 79 20 66 6c 61 74 74    /* Query flatt
e7b0: 65 6e 69 6e 67 20 2a 2f 0a 20 20 20 20 20 20 20  ening */.       
e7c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e7d0: 20 20 20 2f 2a 20 20 30 78 30 30 30 32 20 20 20     /*  0x0002   
e7e0: 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 72 65  available for re
e7f0: 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  use */.#define S
e800: 51 4c 49 54 45 5f 47 72 6f 75 70 42 79 4f 72 64  QLITE_GroupByOrd
e810: 65 72 20 20 20 30 78 30 30 30 34 20 20 20 2f 2a  er   0x0004   /*
e820: 20 47 52 4f 55 50 42 59 20 63 6f 76 65 72 20 6f   GROUPBY cover o
e830: 66 20 4f 52 44 45 52 42 59 20 2a 2f 0a 23 64 65  f ORDERBY */.#de
e840: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 61 63 74  fine SQLITE_Fact
e850: 6f 72 4f 75 74 43 6f 6e 73 74 20 30 78 30 30 30  orOutConst 0x000
e860: 38 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20  8   /* Constant 
e870: 66 61 63 74 6f 72 69 6e 67 20 2a 2f 0a 23 64 65  factoring */.#de
e880: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 69 73 74  fine SQLITE_Dist
e890: 69 6e 63 74 4f 70 74 20 20 20 20 30 78 30 30 31  inctOpt    0x001
e8a0: 30 20 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20  0   /* DISTINCT 
e8b0: 75 73 69 6e 67 20 69 6e 64 65 78 65 73 20 2a 2f  using indexes */
e8c0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e8d0: 43 6f 76 65 72 49 64 78 53 63 61 6e 20 20 20 30  CoverIdxScan   0
e8e0: 78 30 30 32 30 20 20 20 2f 2a 20 43 6f 76 65 72  x0020   /* Cover
e8f0: 69 6e 67 20 69 6e 64 65 78 20 73 63 61 6e 73 20  ing index scans 
e900: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e910: 45 5f 4f 72 64 65 72 42 79 49 64 78 4a 6f 69 6e  E_OrderByIdxJoin
e920: 20 30 78 30 30 34 30 20 20 20 2f 2a 20 4f 52 44   0x0040   /* ORD
e930: 45 52 20 42 59 20 6f 66 20 6a 6f 69 6e 73 20 76  ER BY of joins v
e940: 69 61 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66  ia index */.#def
e950: 69 6e 65 20 53 51 4c 49 54 45 5f 54 72 61 6e 73  ine SQLITE_Trans
e960: 69 74 69 76 65 20 20 20 20 20 30 78 30 30 38 30  itive     0x0080
e970: 20 20 20 2f 2a 20 54 72 61 6e 73 69 74 69 76 65     /* Transitive
e980: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
e990: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f  #define SQLITE_O
e9a0: 6d 69 74 4e 6f 6f 70 4a 6f 69 6e 20 20 20 30 78  mitNoopJoin   0x
e9b0: 30 31 30 30 20 20 20 2f 2a 20 4f 6d 69 74 20 75  0100   /* Omit u
e9c0: 6e 75 73 65 64 20 74 61 62 6c 65 73 20 69 6e 20  nused tables in 
e9d0: 6a 6f 69 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  joins */.#define
e9e0: 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 4f 66 56   SQLITE_CountOfV
e9f0: 69 65 77 20 20 20 20 30 78 30 32 30 30 20 20 20  iew    0x0200   
ea00: 2f 2a 20 54 68 65 20 63 6f 75 6e 74 2d 6f 66 2d  /* The count-of-
ea10: 76 69 65 77 20 6f 70 74 69 6d 69 7a 61 74 69 6f  view optimizatio
ea20: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
ea30: 49 54 45 5f 43 75 72 73 6f 72 48 69 6e 74 73 20  ITE_CursorHints 
ea40: 20 20 20 30 78 30 34 30 30 20 20 20 2f 2a 20 41     0x0400   /* A
ea50: 64 64 20 4f 50 5f 43 75 72 73 6f 72 48 69 6e 74  dd OP_CursorHint
ea60: 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 23 64 65 66   opcodes */.#def
ea70: 69 6e 65 20 53 51 4c 49 54 45 5f 53 74 61 74 33  ine SQLITE_Stat3
ea80: 34 20 20 20 20 20 20 20 20 20 30 78 30 38 30 30  4         0x0800
ea90: 20 20 20 2f 2a 20 55 73 65 20 53 54 41 54 33 20     /* Use STAT3 
eaa0: 6f 72 20 53 54 41 54 34 20 64 61 74 61 20 2a 2f  or STAT4 data */
eab0: 0a 20 20 20 2f 2a 20 54 48 33 20 65 78 70 65 63  .   /* TH3 expec
eac0: 74 73 20 74 68 65 20 53 74 61 74 33 34 20 20 5e  ts the Stat34  ^
ead0: 5e 5e 5e 5e 5e 20 76 61 6c 75 65 20 74 6f 20 62  ^^^^^ value to b
eae0: 65 20 30 78 30 38 30 30 2e 20 20 44 6f 6e 27 74  e 0x0800.  Don't
eaf0: 20 63 68 61 6e 67 65 20 69 74 20 2a 2f 0a 23 64   change it */.#d
eb00: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 75 73  efine SQLITE_Pus
eb10: 68 44 6f 77 6e 20 20 20 20 20 20 20 30 78 31 30  hDown       0x10
eb20: 30 30 20 20 20 2f 2a 20 54 68 65 20 70 75 73 68  00   /* The push
eb30: 2d 64 6f 77 6e 20 6f 70 74 69 6d 69 7a 61 74 69  -down optimizati
eb40: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
eb50: 4c 49 54 45 5f 53 69 6d 70 6c 69 66 79 4a 6f 69  LITE_SimplifyJoi
eb60: 6e 20 20 20 30 78 32 30 30 30 20 20 20 2f 2a 20  n   0x2000   /* 
eb70: 43 6f 6e 76 65 72 74 20 4c 45 46 54 20 4a 4f 49  Convert LEFT JOI
eb80: 4e 20 74 6f 20 4a 4f 49 4e 20 2a 2f 0a 23 64 65  N to JOIN */.#de
eb90: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 6b 69 70  fine SQLITE_Skip
eba0: 53 63 61 6e 20 20 20 20 20 20 20 30 78 34 30 30  Scan       0x400
ebb0: 30 20 20 20 2f 2a 20 53 6b 69 70 2d 73 63 61 6e  0   /* Skip-scan
ebc0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
ebd0: 49 54 45 5f 50 72 6f 70 61 67 61 74 65 43 6f 6e  ITE_PropagateCon
ebe0: 73 74 20 30 78 38 30 30 30 20 20 20 2f 2a 20 54  st 0x8000   /* T
ebf0: 68 65 20 63 6f 6e 73 74 61 6e 74 20 70 72 6f 70  he constant prop
ec00: 61 67 61 74 69 6f 6e 20 6f 70 74 20 2a 2f 0a 23  agation opt */.#
ec10: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 6c  define SQLITE_Al
ec20: 6c 4f 70 74 73 20 20 20 20 20 20 20 20 30 78 66  lOpts        0xf
ec30: 66 66 66 20 20 20 2f 2a 20 41 6c 6c 20 6f 70 74  fff   /* All opt
ec40: 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f  imizations */../
ec50: 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 66 6f 72 20  *.** Macros for 
ec60: 74 65 73 74 69 6e 67 20 77 68 65 74 68 65 72 20  testing whether 
ec70: 6f 72 20 6e 6f 74 20 6f 70 74 69 6d 69 7a 61 74  or not optimizat
ec80: 69 6f 6e 73 20 61 72 65 20 65 6e 61 62 6c 65 64  ions are enabled
ec90: 20 6f 72 20 64 69 73 61 62 6c 65 64 2e 0a 2a 2f   or disabled..*/
eca0: 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a  .#define Optimiz
ecb0: 61 74 69 6f 6e 44 69 73 61 62 6c 65 64 28 64 62  ationDisabled(db
ecc0: 2c 20 6d 61 73 6b 29 20 20 28 28 28 64 62 29 2d  , mask)  (((db)-
ecd0: 3e 64 62 4f 70 74 46 6c 61 67 73 26 28 6d 61 73  >dbOptFlags&(mas
ece0: 6b 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20  k))!=0).#define 
ecf0: 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62  OptimizationEnab
ed00: 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 20  led(db, mask)   
ed10: 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61  (((db)->dbOptFla
ed20: 67 73 26 28 6d 61 73 6b 29 29 3d 3d 30 29 0a 0a  gs&(mask))==0)..
ed30: 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75  /*.** Return tru
ed40: 65 20 69 66 20 69 74 20 4f 4b 20 74 6f 20 66 61  e if it OK to fa
ed50: 63 74 6f 72 20 63 6f 6e 73 74 61 6e 74 20 65 78  ctor constant ex
ed60: 70 72 65 73 73 69 6f 6e 73 20 69 6e 74 6f 20 74  pressions into t
ed70: 68 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  he initializatio
ed80: 6e 0a 2a 2a 20 63 6f 64 65 2e 20 54 68 65 20 61  n.** code. The a
ed90: 72 67 75 6d 65 6e 74 20 69 73 20 61 20 50 61 72  rgument is a Par
eda0: 73 65 20 6f 62 6a 65 63 74 20 66 6f 72 20 74 68  se object for th
edb0: 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72  e code generator
edc0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 6f 6e  ..*/.#define Con
edd0: 73 74 46 61 63 74 6f 72 4f 6b 28 50 29 20 28 28  stFactorOk(P) ((
ede0: 50 29 2d 3e 6f 6b 43 6f 6e 73 74 46 61 63 74 6f  P)->okConstFacto
edf0: 72 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62  r)../*.** Possib
ee00: 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68  le values for th
ee10: 65 20 73 71 6c 69 74 65 2e 6d 61 67 69 63 20 66  e sqlite.magic f
ee20: 69 65 6c 64 2e 0a 2a 2a 20 54 68 65 20 6e 75 6d  ield..** The num
ee30: 62 65 72 73 20 61 72 65 20 6f 62 74 61 69 6e 65  bers are obtaine
ee40: 64 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20  d at random and 
ee50: 68 61 76 65 20 6e 6f 20 73 70 65 63 69 61 6c 20  have no special 
ee60: 6d 65 61 6e 69 6e 67 2c 20 6f 74 68 65 72 0a 2a  meaning, other.*
ee70: 2a 20 74 68 61 6e 20 62 65 69 6e 67 20 64 69 73  * than being dis
ee80: 74 69 6e 63 74 20 66 72 6f 6d 20 6f 6e 65 20 61  tinct from one a
ee90: 6e 6f 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69  nother..*/.#defi
eea0: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
eeb0: 4f 50 45 4e 20 20 20 20 20 30 78 61 30 32 39 61  OPEN     0xa029a
eec0: 36 39 37 20 20 2f 2a 20 44 61 74 61 62 61 73 65  697  /* Database
eed0: 20 69 73 20 6f 70 65 6e 20 2a 2f 0a 23 64 65 66   is open */.#def
eee0: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
eef0: 5f 43 4c 4f 53 45 44 20 20 20 30 78 39 66 33 63  _CLOSED   0x9f3c
ef00: 32 64 33 33 20 20 2f 2a 20 44 61 74 61 62 61 73  2d33  /* Databas
ef10: 65 20 69 73 20 63 6c 6f 73 65 64 20 2a 2f 0a 23  e is closed */.#
ef20: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
ef30: 47 49 43 5f 53 49 43 4b 20 20 20 20 20 30 78 34  GIC_SICK     0x4
ef40: 62 37 37 31 32 39 30 20 20 2f 2a 20 45 72 72 6f  b771290  /* Erro
ef50: 72 20 61 6e 64 20 61 77 61 69 74 69 6e 67 20 63  r and awaiting c
ef60: 6c 6f 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  lose */.#define 
ef70: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53  SQLITE_MAGIC_BUS
ef80: 59 20 20 20 20 20 30 78 66 30 33 62 37 39 30 36  Y     0xf03b7906
ef90: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 63 75    /* Database cu
efa0: 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a  rrently in use *
efb0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
efc0: 5f 4d 41 47 49 43 5f 45 52 52 4f 52 20 20 20 20  _MAGIC_ERROR    
efd0: 30 78 62 35 33 35 37 39 33 30 20 20 2f 2a 20 41  0xb5357930  /* A
efe0: 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20  n SQLITE_MISUSE 
eff0: 65 72 72 6f 72 20 6f 63 63 75 72 72 65 64 20 2a  error occurred *
f000: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
f010: 5f 4d 41 47 49 43 5f 5a 4f 4d 42 49 45 20 20 20  _MAGIC_ZOMBIE   
f020: 30 78 36 34 63 66 66 63 37 66 20 20 2f 2a 20 43  0x64cffc7f  /* C
f030: 6c 6f 73 65 20 77 69 74 68 20 6c 61 73 74 20 73  lose with last s
f040: 74 61 74 65 6d 65 6e 74 20 63 6c 6f 73 65 20 2a  tatement close *
f050: 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51  /../*.** Each SQ
f060: 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 64 65  L function is de
f070: 66 69 6e 65 64 20 62 79 20 61 6e 20 69 6e 73 74  fined by an inst
f080: 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
f090: 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75  owing.** structu
f0a0: 72 65 2e 20 20 46 6f 72 20 67 6c 6f 62 61 6c 20  re.  For global 
f0b0: 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63 74 69 6f  built-in functio
f0c0: 6e 73 20 28 65 78 3a 20 73 75 62 73 74 72 28 29  ns (ex: substr()
f0d0: 2c 20 6d 61 78 28 29 2c 20 63 6f 75 6e 74 28 29  , max(), count()
f0e0: 29 0a 2a 2a 20 61 20 70 6f 69 6e 74 65 72 20 74  ).** a pointer t
f0f0: 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  o this structure
f100: 20 69 73 20 68 65 6c 64 20 69 6e 20 74 68 65 20   is held in the 
f110: 73 71 6c 69 74 65 33 42 75 69 6c 74 69 6e 46 75  sqlite3BuiltinFu
f120: 6e 63 74 69 6f 6e 73 20 6f 62 6a 65 63 74 2e 0a  nctions object..
f130: 2a 2a 20 46 6f 72 20 70 65 72 2d 63 6f 6e 6e 65  ** For per-conne
f140: 63 74 69 6f 6e 20 61 70 70 6c 69 63 61 74 69 6f  ction applicatio
f150: 6e 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69  n-defined functi
f160: 6f 6e 73 2c 20 61 20 70 6f 69 6e 74 65 72 20 74  ons, a pointer t
f170: 6f 20 74 68 69 73 0a 2a 2a 20 73 74 72 75 63 74  o this.** struct
f180: 75 72 65 20 69 73 20 68 65 6c 64 20 69 6e 20 74  ure is held in t
f190: 68 65 20 64 62 2d 3e 61 48 61 73 68 20 68 61 73  he db->aHash has
f1a0: 68 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54  h table..**.** T
f1b0: 68 65 20 75 2e 70 48 61 73 68 20 66 69 65 6c 64  he u.pHash field
f1c0: 20 69 73 20 75 73 65 64 20 62 79 20 74 68 65 20   is used by the 
f1d0: 67 6c 6f 62 61 6c 20 62 75 69 6c 74 2d 69 6e 73  global built-ins
f1e0: 2e 20 20 54 68 65 20 75 2e 70 44 65 73 74 72 75  .  The u.pDestru
f1f0: 63 74 6f 72 0a 2a 2a 20 66 69 65 6c 64 20 69 73  ctor.** field is
f200: 20 75 73 65 64 20 62 79 20 70 65 72 2d 63 6f 6e   used by per-con
f210: 6e 65 63 74 69 6f 6e 20 61 70 70 2d 64 65 66 20  nection app-def 
f220: 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2f 0a 73 74  functions..*/.st
f230: 72 75 63 74 20 46 75 6e 63 44 65 66 20 7b 0a 20  ruct FuncDef {. 
f240: 20 69 38 20 6e 41 72 67 3b 20 20 20 20 20 20 20   i8 nArg;       
f250: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
f260: 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 2d  of arguments.  -
f270: 31 20 6d 65 61 6e 73 20 75 6e 6c 69 6d 69 74 65  1 means unlimite
f280: 64 20 2a 2f 0a 20 20 75 33 32 20 66 75 6e 63 46  d */.  u32 funcF
f290: 6c 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 53  lags;       /* S
f2a0: 6f 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20  ome combination 
f2b0: 6f 66 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 2a  of SQLITE_FUNC_*
f2c0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73 65   */.  void *pUse
f2d0: 72 44 61 74 61 3b 20 20 20 20 20 2f 2a 20 55 73  rData;     /* Us
f2e0: 65 72 20 64 61 74 61 20 70 61 72 61 6d 65 74 65  er data paramete
f2f0: 72 20 2a 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a  r */.  FuncDef *
f300: 70 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e  pNext;      /* N
f310: 65 78 74 20 66 75 6e 63 74 69 6f 6e 20 77 69 74  ext function wit
f320: 68 20 73 61 6d 65 20 6e 61 6d 65 20 2a 2f 0a 20  h same name */. 
f330: 20 76 6f 69 64 20 28 2a 78 53 46 75 6e 63 29 28   void (*xSFunc)(
f340: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
f350: 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c  ,int,sqlite3_val
f360: 75 65 2a 2a 29 3b 20 2f 2a 20 66 75 6e 63 20 6f  ue**); /* func o
f370: 72 20 61 67 67 2d 73 74 65 70 20 2a 2f 0a 20 20  r agg-step */.  
f380: 76 6f 69 64 20 28 2a 78 46 69 6e 61 6c 69 7a 65  void (*xFinalize
f390: 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
f3a0: 74 2a 29 3b 20 20 20 20 20 20 20 20 20 20 20 20  t*);            
f3b0: 20 20 20 20 20 20 2f 2a 20 41 67 67 20 66 69 6e        /* Agg fin
f3c0: 61 6c 69 7a 65 72 20 2a 2f 0a 20 20 76 6f 69 64  alizer */.  void
f3d0: 20 28 2a 78 56 61 6c 75 65 29 28 73 71 6c 69 74   (*xValue)(sqlit
f3e0: 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 20 20 20  e3_context*);   
f3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f400: 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 61 67 67    /* Current agg
f410: 20 76 61 6c 75 65 20 2a 2f 0a 20 20 76 6f 69 64   value */.  void
f420: 20 28 2a 78 49 6e 76 65 72 73 65 29 28 73 71 6c   (*xInverse)(sql
f430: 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e  ite3_context*,in
f440: 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  t,sqlite3_value*
f450: 2a 29 3b 20 2f 2a 20 69 6e 76 65 72 73 65 20 61  *); /* inverse a
f460: 67 67 2d 73 74 65 70 20 2a 2f 0a 20 20 63 6f 6e  gg-step */.  con
f470: 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  st char *zName; 
f480: 20 20 2f 2a 20 53 51 4c 20 6e 61 6d 65 20 6f 66    /* SQL name of
f490: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 2a   the function. *
f4a0: 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20  /.  union {.    
f4b0: 46 75 6e 63 44 65 66 20 2a 70 48 61 73 68 3b 20  FuncDef *pHash; 
f4c0: 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 74       /* Next wit
f4d0: 68 20 61 20 64 69 66 66 65 72 65 6e 74 20 6e 61  h a different na
f4e0: 6d 65 20 62 75 74 20 74 68 65 20 73 61 6d 65 20  me but the same 
f4f0: 68 61 73 68 20 2a 2f 0a 20 20 20 20 46 75 6e 63  hash */.    Func
f500: 44 65 73 74 72 75 63 74 6f 72 20 2a 70 44 65 73  Destructor *pDes
f510: 74 72 75 63 74 6f 72 3b 20 20 20 2f 2a 20 52 65  tructor;   /* Re
f520: 66 65 72 65 6e 63 65 20 63 6f 75 6e 74 65 64 20  ference counted 
f530: 64 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74  destructor funct
f540: 69 6f 6e 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b  ion */.  } u;.};
f550: 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72  ../*.** This str
f560: 75 63 74 75 72 65 20 65 6e 63 61 70 73 75 6c 61  ucture encapsula
f570: 74 65 73 20 61 20 75 73 65 72 2d 66 75 6e 63 74  tes a user-funct
f580: 69 6f 6e 20 64 65 73 74 72 75 63 74 6f 72 20 63  ion destructor c
f590: 61 6c 6c 62 61 63 6b 20 28 61 73 0a 2a 2a 20 63  allback (as.** c
f5a0: 6f 6e 66 69 67 75 72 65 64 20 75 73 69 6e 67 20  onfigured using 
f5b0: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f  create_function_
f5c0: 76 32 28 29 29 20 61 6e 64 20 61 20 72 65 66 65  v2()) and a refe
f5d0: 72 65 6e 63 65 20 63 6f 75 6e 74 65 72 2e 20 57  rence counter. W
f5e0: 68 65 6e 0a 2a 2a 20 63 72 65 61 74 65 5f 66 75  hen.** create_fu
f5f0: 6e 63 74 69 6f 6e 5f 76 32 28 29 20 69 73 20 63  nction_v2() is c
f600: 61 6c 6c 65 64 20 74 6f 20 63 72 65 61 74 65 20  alled to create 
f610: 61 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20  a function with 
f620: 61 20 64 65 73 74 72 75 63 74 6f 72 2c 0a 2a 2a  a destructor,.**
f630: 20 61 20 73 69 6e 67 6c 65 20 6f 62 6a 65 63 74   a single object
f640: 20 6f 66 20 74 68 69 73 20 74 79 70 65 20 69 73   of this type is
f650: 20 61 6c 6c 6f 63 61 74 65 64 2e 20 46 75 6e 63   allocated. Func
f660: 44 65 73 74 72 75 63 74 6f 72 2e 6e 52 65 66 20  Destructor.nRef 
f670: 69 73 20 73 65 74 20 74 6f 0a 2a 2a 20 74 68 65  is set to.** the
f680: 20 6e 75 6d 62 65 72 20 6f 66 20 46 75 6e 63 44   number of FuncD
f690: 65 66 20 6f 62 6a 65 63 74 73 20 63 72 65 61 74  ef objects creat
f6a0: 65 64 20 28 65 69 74 68 65 72 20 31 20 6f 72 20  ed (either 1 or 
f6b0: 33 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  3, depending on 
f6c0: 77 68 65 74 68 65 72 0a 2a 2a 20 6f 72 20 6e 6f  whether.** or no
f6d0: 74 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  t the specified 
f6e0: 65 6e 63 6f 64 69 6e 67 20 69 73 20 53 51 4c 49  encoding is SQLI
f6f0: 54 45 5f 41 4e 59 29 2e 20 54 68 65 20 46 75 6e  TE_ANY). The Fun
f700: 63 44 65 66 2e 70 44 65 73 74 72 75 63 74 6f 72  cDef.pDestructor
f710: 0a 2a 2a 20 6d 65 6d 62 65 72 20 6f 66 20 65 61  .** member of ea
f720: 63 68 20 6f 66 20 74 68 65 20 6e 65 77 20 46 75  ch of the new Fu
f730: 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20 69 73  ncDef objects is
f740: 20 73 65 74 20 74 6f 20 70 6f 69 6e 74 20 74 6f   set to point to
f750: 20 74 68 65 20 61 6c 6c 6f 63 61 74 65 64 0a 2a   the allocated.*
f760: 2a 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72  * FuncDestructor
f770: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 61 66 74  ..**.** Thereaft
f780: 65 72 2c 20 77 68 65 6e 20 6f 6e 65 20 6f 66 20  er, when one of 
f790: 74 68 65 20 46 75 6e 63 44 65 66 20 6f 62 6a 65  the FuncDef obje
f7a0: 63 74 73 20 69 73 20 64 65 6c 65 74 65 64 2c 20  cts is deleted, 
f7b0: 74 68 65 20 72 65 66 65 72 65 6e 63 65 0a 2a 2a  the reference.**
f7c0: 20 63 6f 75 6e 74 20 6f 6e 20 74 68 69 73 20 6f   count on this o
f7d0: 62 6a 65 63 74 20 69 73 20 64 65 63 72 65 6d 65  bject is decreme
f7e0: 6e 74 65 64 2e 20 57 68 65 6e 20 69 74 20 72 65  nted. When it re
f7f0: 61 63 68 65 73 20 30 2c 20 74 68 65 20 64 65 73  aches 0, the des
f800: 74 72 75 63 74 6f 72 0a 2a 2a 20 69 73 20 69 6e  tructor.** is in
f810: 76 6f 6b 65 64 20 61 6e 64 20 74 68 65 20 46 75  voked and the Fu
f820: 6e 63 44 65 73 74 72 75 63 74 6f 72 20 73 74 72  ncDestructor str
f830: 75 63 74 75 72 65 20 66 72 65 65 64 2e 0a 2a 2f  ucture freed..*/
f840: 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65 73 74  .struct FuncDest
f850: 72 75 63 74 6f 72 20 7b 0a 20 20 69 6e 74 20 6e  ructor {.  int n
f860: 52 65 66 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44  Ref;.  void (*xD
f870: 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b  estroy)(void *);
f880: 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44 61  .  void *pUserDa
f890: 74 61 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 6f  ta;.};../*.** Po
f8a0: 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f  ssible values fo
f8b0: 72 20 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 2e  r FuncDef.flags.
f8c0: 20 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20    Note that the 
f8d0: 5f 4c 45 4e 47 54 48 20 61 6e 64 20 5f 54 59 50  _LENGTH and _TYP
f8e0: 45 4f 46 0a 2a 2a 20 76 61 6c 75 65 73 20 6d 75  EOF.** values mu
f8f0: 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f  st correspond to
f900: 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52   OPFLAG_LENGTHAR
f910: 47 20 61 6e 64 20 4f 50 46 4c 41 47 5f 54 59 50  G and OPFLAG_TYP
f920: 45 4f 46 41 52 47 2e 20 20 41 6e 64 0a 2a 2a 20  EOFARG.  And.** 
f930: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
f940: 54 41 4e 54 20 6d 75 73 74 20 62 65 20 74 68 65  TANT must be the
f950: 20 73 61 6d 65 20 61 73 20 53 51 4c 49 54 45 5f   same as SQLITE_
f960: 44 45 54 45 52 4d 49 4e 49 53 54 49 43 2e 20 20  DETERMINISTIC.  
f970: 54 68 65 72 65 0a 2a 2a 20 61 72 65 20 61 73 73  There.** are ass
f980: 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73  ert() statements
f990: 20 69 6e 20 74 68 65 20 63 6f 64 65 20 74 6f 20   in the code to 
f9a0: 76 65 72 69 66 79 20 74 68 69 73 2e 0a 2a 2a 0a  verify this..**.
f9b0: 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61  ** Value constra
f9c0: 69 6e 74 73 20 28 65 6e 66 6f 72 63 65 64 20 76  ints (enforced v
f9d0: 69 61 20 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a  ia assert()):.**
f9e0: 20 20 20 20 20 53 51 4c 49 54 45 5f 46 55 4e 43       SQLITE_FUNC
f9f0: 5f 4d 49 4e 4d 41 58 20 20 20 20 3d 3d 20 20 4e  _MINMAX    ==  N
fa00: 43 5f 4d 69 6e 4d 61 78 41 67 67 20 20 20 20 20  C_MinMaxAgg     
fa10: 20 3d 3d 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67   == SF_MinMaxAgg
fa20: 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 46  .**     SQLITE_F
fa30: 55 4e 43 5f 4c 45 4e 47 54 48 20 20 20 20 3d 3d  UNC_LENGTH    ==
fa40: 20 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41    OPFLAG_LENGTHA
fa50: 52 47 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45  RG.**     SQLITE
fa60: 5f 46 55 4e 43 5f 54 59 50 45 4f 46 20 20 20 20  _FUNC_TYPEOF    
fa70: 3d 3d 20 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f  ==  OPFLAG_TYPEO
fa80: 46 41 52 47 0a 2a 2a 20 20 20 20 20 53 51 4c 49  FARG.**     SQLI
fa90: 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
faa0: 20 20 3d 3d 20 20 53 51 4c 49 54 45 5f 44 45 54    ==  SQLITE_DET
fab0: 45 52 4d 49 4e 49 53 54 49 43 20 66 72 6f 6d 20  ERMINISTIC from 
fac0: 74 68 65 20 41 50 49 0a 2a 2a 20 20 20 20 20 53  the API.**     S
fad0: 51 4c 49 54 45 5f 46 55 4e 43 5f 45 4e 43 4d 41  QLITE_FUNC_ENCMA
fae0: 53 4b 20 20 20 64 65 70 65 6e 64 73 20 6f 6e 20  SK   depends on 
faf0: 53 51 4c 49 54 45 5f 55 54 46 2a 20 6d 61 63 72  SQLITE_UTF* macr
fb00: 6f 73 20 69 6e 20 74 68 65 20 41 50 49 0a 2a 2f  os in the API.*/
fb10: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
fb20: 46 55 4e 43 5f 45 4e 43 4d 41 53 4b 20 20 30 78  FUNC_ENCMASK  0x
fb30: 30 30 30 33 20 2f 2a 20 53 51 4c 49 54 45 5f 55  0003 /* SQLITE_U
fb40: 54 46 38 2c 20 53 51 4c 49 54 45 5f 55 54 46 31  TF8, SQLITE_UTF1
fb50: 36 42 45 20 6f 72 20 55 54 46 31 36 4c 45 20 2a  6BE or UTF16LE *
fb60: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
fb70: 5f 46 55 4e 43 5f 4c 49 4b 45 20 20 20 20 20 30  _FUNC_LIKE     0
fb80: 78 30 30 30 34 20 2f 2a 20 43 61 6e 64 69 64 61  x0004 /* Candida
fb90: 74 65 20 66 6f 72 20 74 68 65 20 4c 49 4b 45 20  te for the LIKE 
fba0: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a  optimization */.
fbb0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
fbc0: 55 4e 43 5f 43 41 53 45 20 20 20 20 20 30 78 30  UNC_CASE     0x0
fbd0: 30 30 38 20 2f 2a 20 43 61 73 65 2d 73 65 6e 73  008 /* Case-sens
fbe0: 69 74 69 76 65 20 4c 49 4b 45 2d 74 79 70 65 20  itive LIKE-type 
fbf0: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  function */.#def
fc00: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
fc10: 45 50 48 45 4d 20 20 20 20 30 78 30 30 31 30 20  EPHEM    0x0010 
fc20: 2f 2a 20 45 70 68 65 6d 65 72 61 6c 2e 20 20 44  /* Ephemeral.  D
fc30: 65 6c 65 74 65 20 77 69 74 68 20 56 44 42 45 20  elete with VDBE 
fc40: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
fc50: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20  E_FUNC_NEEDCOLL 
fc60: 30 78 30 30 32 30 20 2f 2a 20 73 71 6c 69 74 65  0x0020 /* sqlite
fc70: 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28  3GetFuncCollSeq(
fc80: 29 20 6d 69 67 68 74 20 62 65 20 63 61 6c 6c 65  ) might be calle
fc90: 64 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  d*/.#define SQLI
fca0: 54 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 20 20  TE_FUNC_LENGTH  
fcb0: 20 30 78 30 30 34 30 20 2f 2a 20 42 75 69 6c 74   0x0040 /* Built
fcc0: 2d 69 6e 20 6c 65 6e 67 74 68 28 29 20 66 75 6e  -in length() fun
fcd0: 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
fce0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59 50   SQLITE_FUNC_TYP
fcf0: 45 4f 46 20 20 20 30 78 30 30 38 30 20 2f 2a 20  EOF   0x0080 /* 
fd00: 42 75 69 6c 74 2d 69 6e 20 74 79 70 65 6f 66 28  Built-in typeof(
fd10: 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  ) function */.#d
fd20: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
fd30: 43 5f 43 4f 55 4e 54 20 20 20 20 30 78 30 31 30  C_COUNT    0x010
fd40: 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f  0 /* Built-in co
fd50: 75 6e 74 28 2a 29 20 61 67 67 72 65 67 61 74 65  unt(*) aggregate
fd60: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
fd70: 54 45 5f 46 55 4e 43 5f 43 4f 41 4c 45 53 43 45  TE_FUNC_COALESCE
fd80: 20 30 78 30 32 30 30 20 2f 2a 20 42 75 69 6c 74   0x0200 /* Built
fd90: 2d 69 6e 20 63 6f 61 6c 65 73 63 65 28 29 20 6f  -in coalesce() o
fda0: 72 20 69 66 6e 75 6c 6c 28 29 20 2a 2f 0a 23 64  r ifnull() */.#d
fdb0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
fdc0: 43 5f 55 4e 4c 49 4b 45 4c 59 20 30 78 30 34 30  C_UNLIKELY 0x040
fdd0: 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 75 6e  0 /* Built-in un
fde0: 6c 69 6b 65 6c 79 28 29 20 66 75 6e 63 74 69 6f  likely() functio
fdf0: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
fe00: 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
fe10: 54 20 30 78 30 38 30 30 20 2f 2a 20 43 6f 6e 73  T 0x0800 /* Cons
fe20: 74 61 6e 74 20 69 6e 70 75 74 73 20 67 69 76 65  tant inputs give
fe30: 20 61 20 63 6f 6e 73 74 61 6e 74 20 6f 75 74 70   a constant outp
fe40: 75 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ut */.#define SQ
fe50: 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58  LITE_FUNC_MINMAX
fe60: 20 20 20 30 78 31 30 30 30 20 2f 2a 20 54 72 75     0x1000 /* Tru
fe70: 65 20 66 6f 72 20 6d 69 6e 28 29 20 61 6e 64 20  e for min() and 
fe80: 6d 61 78 28 29 20 61 67 67 72 65 67 61 74 65 73  max() aggregates
fe90: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
fea0: 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 20  TE_FUNC_SLOCHNG 
feb0: 20 30 78 32 30 30 30 20 2f 2a 20 22 53 6c 6f 77   0x2000 /* "Slow
fec0: 20 43 68 61 6e 67 65 22 2e 20 56 61 6c 75 65 20   Change". Value 
fed0: 63 6f 6e 73 74 61 6e 74 20 64 75 72 69 6e 67 20  constant during 
fee0: 61 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  a.              
fef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ff00: 20 20 20 20 20 20 2a 2a 20 73 69 6e 67 6c 65 20        ** single 
ff10: 71 75 65 72 79 20 2d 20 6d 69 67 68 74 20 63 68  query - might ch
ff20: 61 6e 67 65 20 6f 76 65 72 20 74 69 6d 65 20 2a  ange over time *
ff30: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
ff40: 5f 46 55 4e 43 5f 41 46 46 49 4e 49 54 59 20 30  _FUNC_AFFINITY 0
ff50: 78 34 30 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69  x4000 /* Built-i
ff60: 6e 20 61 66 66 69 6e 69 74 79 28 29 20 66 75 6e  n affinity() fun
ff70: 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
ff80: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4f 46 46   SQLITE_FUNC_OFF
ff90: 53 45 54 20 20 20 30 78 38 30 30 30 20 2f 2a 20  SET   0x8000 /* 
ffa0: 42 75 69 6c 74 2d 69 6e 20 73 71 6c 69 74 65 5f  Built-in sqlite_
ffb0: 6f 66 66 73 65 74 28 29 20 66 75 6e 63 74 69 6f  offset() functio
ffc0: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
ffd0: 49 54 45 5f 46 55 4e 43 5f 57 49 4e 44 4f 57 20  ITE_FUNC_WINDOW 
ffe0: 20 30 78 31 30 30 30 30 20 2f 2a 20 42 75 69 6c   0x10000 /* Buil
fff0: 74 2d 69 6e 20 77 69 6e 64 6f 77 2d 6f 6e 6c 79  t-in window-only
10000 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
10010 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
10020 5f 57 49 4e 44 4f 57 5f 53 49 5a 45 20 20 30 78  _WINDOW_SIZE  0x
10030 32 30 30 30 30 20 20 2f 2a 20 52 65 71 75 69 72  20000  /* Requir
10040 65 73 20 70 61 72 74 69 74 69 6f 6e 20 73 69 7a  es partition siz
10050 65 20 61 73 20 61 72 67 2e 20 2a 2f 0a 0a 2f 2a  e as arg. */../*
10060 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
10070 67 20 74 68 72 65 65 20 6d 61 63 72 6f 73 2c 20  g three macros, 
10080 46 55 4e 43 54 49 4f 4e 28 29 2c 20 4c 49 4b 45  FUNCTION(), LIKE
10090 46 55 4e 43 28 29 20 61 6e 64 20 41 47 47 52 45  FUNC() and AGGRE
100a0 47 41 54 45 28 29 20 61 72 65 0a 2a 2a 20 75 73  GATE() are.** us
100b0 65 64 20 74 6f 20 63 72 65 61 74 65 20 74 68 65  ed to create the
100c0 20 69 6e 69 74 69 61 6c 69 7a 65 72 73 20 66 6f   initializers fo
100d0 72 20 74 68 65 20 46 75 6e 63 44 65 66 20 73 74  r the FuncDef st
100e0 72 75 63 74 75 72 65 73 2e 0a 2a 2a 0a 2a 2a 20  ructures..**.** 
100f0 20 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65    FUNCTION(zName
10100 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
10110 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20  C, xFunc).**    
10120 20 55 73 65 64 20 74 6f 20 63 72 65 61 74 65 20   Used to create 
10130 61 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f  a scalar functio
10140 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20  n definition of 
10150 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65  a function zName
10160 0a 2a 2a 20 20 20 20 20 69 6d 70 6c 65 6d 65 6e  .**     implemen
10170 74 65 64 20 62 79 20 43 20 66 75 6e 63 74 69 6f  ted by C functio
10180 6e 20 78 46 75 6e 63 20 74 68 61 74 20 61 63 63  n xFunc that acc
10190 65 70 74 73 20 6e 41 72 67 20 61 72 67 75 6d 65  epts nArg argume
101a0 6e 74 73 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20  nts. The.**     
101b0 76 61 6c 75 65 20 70 61 73 73 65 64 20 61 73 20  value passed as 
101c0 69 41 72 67 20 69 73 20 63 61 73 74 20 74 6f 20  iArg is cast to 
101d0 61 20 28 76 6f 69 64 2a 29 20 61 6e 64 20 6d 61  a (void*) and ma
101e0 64 65 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20  de available.** 
101f0 20 20 20 20 61 73 20 74 68 65 20 75 73 65 72 2d      as the user-
10200 64 61 74 61 20 28 73 71 6c 69 74 65 33 5f 75 73  data (sqlite3_us
10210 65 72 5f 64 61 74 61 28 29 29 20 66 6f 72 20 74  er_data()) for t
10220 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 49 66 0a  he function. If.
10230 2a 2a 20 20 20 20 20 61 72 67 75 6d 65 6e 74 20  **     argument 
10240 62 4e 43 20 69 73 20 74 72 75 65 2c 20 74 68 65  bNC is true, the
10250 6e 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e  n the SQLITE_FUN
10260 43 5f 4e 45 45 44 43 4f 4c 4c 20 66 6c 61 67 20  C_NEEDCOLL flag 
10270 69 73 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20  is set..**.**   
10280 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c  VFUNCTION(zName,
10290 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
102a0 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20  , xFunc).**     
102b0 4c 69 6b 65 20 46 55 4e 43 54 49 4f 4e 20 65 78  Like FUNCTION ex
102c0 63 65 70 74 20 69 74 20 6f 6d 69 74 73 20 74 68  cept it omits th
102d0 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  e SQLITE_FUNC_CO
102e0 4e 53 54 41 4e 54 20 66 6c 61 67 2e 0a 2a 2a 0a  NSTANT flag..**.
102f0 2a 2a 20 20 20 44 46 55 4e 43 54 49 4f 4e 28 7a  **   DFUNCTION(z
10300 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67  Name, nArg, iArg
10310 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a  , bNC, xFunc).**
10320 20 20 20 20 20 4c 69 6b 65 20 46 55 4e 43 54 49       Like FUNCTI
10330 4f 4e 20 65 78 63 65 70 74 20 69 74 20 6f 6d 69  ON except it omi
10340 74 73 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55  ts the SQLITE_FU
10350 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66 6c 61 67  NC_CONSTANT flag
10360 20 61 6e 64 0a 2a 2a 20 20 20 20 20 61 64 64 73   and.**     adds
10370 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43   the SQLITE_FUNC
10380 5f 53 4c 4f 43 48 4e 47 20 66 6c 61 67 2e 20 20  _SLOCHNG flag.  
10390 55 73 65 64 20 66 6f 72 20 64 61 74 65 20 26 20  Used for date & 
103a0 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 0a 2a  time functions.*
103b0 2a 20 20 20 20 20 61 6e 64 20 66 75 6e 63 74 69  *     and functi
103c0 6f 6e 73 20 6c 69 6b 65 20 73 71 6c 69 74 65 5f  ons like sqlite_
103d0 76 65 72 73 69 6f 6e 28 29 20 74 68 61 74 20 63  version() that c
103e0 61 6e 20 63 68 61 6e 67 65 2c 20 62 75 74 20 6e  an change, but n
103f0 6f 74 20 64 75 72 69 6e 67 0a 2a 2a 20 20 20 20  ot during.**    
10400 20 61 20 73 69 6e 67 6c 65 20 71 75 65 72 79 2e   a single query.
10410 20 20 54 68 65 20 69 41 72 67 20 69 73 20 69 67    The iArg is ig
10420 6e 6f 72 65 64 2e 20 20 54 68 65 20 75 73 65 72  nored.  The user
10430 2d 64 61 74 61 20 69 73 20 61 6c 77 61 79 73 20  -data is always 
10440 73 65 74 0a 2a 2a 20 20 20 20 20 74 6f 20 61 20  set.**     to a 
10450 4e 55 4c 4c 20 70 6f 69 6e 74 65 72 2e 20 20 54  NULL pointer.  T
10460 68 65 20 62 4e 43 20 70 61 72 61 6d 65 74 65 72  he bNC parameter
10470 20 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a   is not used..**
10480 0a 2a 2a 20 20 20 50 55 52 45 5f 44 41 54 45 28  .**   PURE_DATE(
10490 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
104a0 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a  g, bNC, xFunc).*
104b0 2a 20 20 20 20 20 55 73 65 64 20 66 6f 72 20 22  *     Used for "
104c0 70 75 72 65 22 20 64 61 74 65 2f 74 69 6d 65 20  pure" date/time 
104d0 66 75 6e 63 74 69 6f 6e 73 2c 20 74 68 69 73 20  functions, this 
104e0 6d 61 63 72 6f 20 69 73 20 6c 69 6b 65 20 44 46  macro is like DF
104f0 55 4e 43 54 49 4f 4e 0a 2a 2a 20 20 20 20 20 65  UNCTION.**     e
10500 78 63 65 70 74 20 74 68 61 74 20 69 74 20 64 6f  xcept that it do
10510 65 73 20 73 65 74 20 74 68 65 20 53 51 4c 49 54  es set the SQLIT
10520 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20  E_FUNC_CONSTANT 
10530 66 6c 61 67 73 2e 20 20 69 41 72 67 20 69 73 0a  flags.  iArg is.
10540 2a 2a 20 20 20 20 20 69 67 6e 6f 72 65 64 20 61  **     ignored a
10550 6e 64 20 74 68 65 20 75 73 65 72 2d 64 61 74 61  nd the user-data
10560 20 66 6f 72 20 74 68 65 73 65 20 66 75 6e 63 74   for these funct
10570 69 6f 6e 73 20 69 73 20 73 65 74 20 74 6f 20 61  ions is set to a
10580 6e 20 0a 2a 2a 20 20 20 20 20 61 72 62 69 74 72  n .**     arbitr
10590 61 72 79 20 6e 6f 6e 2d 4e 55 4c 4c 20 70 6f 69  ary non-NULL poi
105a0 6e 74 65 72 2e 20 20 54 68 65 20 62 4e 43 20 70  nter.  The bNC p
105b0 61 72 61 6d 65 74 65 72 20 69 73 20 6e 6f 74 20  arameter is not 
105c0 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 20 20 41 47  used..**.**   AG
105d0 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e  GREGATE(zName, n
105e0 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
105f0 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 29 0a 2a  xStep, xFinal).*
10600 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63 72  *     Used to cr
10610 65 61 74 65 20 61 6e 20 61 67 67 72 65 67 61 74  eate an aggregat
10620 65 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e  e function defin
10630 69 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65  ition implemente
10640 64 20 62 79 0a 2a 2a 20 20 20 20 20 74 68 65 20  d by.**     the 
10650 43 20 66 75 6e 63 74 69 6f 6e 73 20 78 53 74 65  C functions xSte
10660 70 20 61 6e 64 20 78 46 69 6e 61 6c 2e 20 54 68  p and xFinal. Th
10670 65 20 66 69 72 73 74 20 66 6f 75 72 20 70 61 72  e first four par
10680 61 6d 65 74 65 72 73 0a 2a 2a 20 20 20 20 20 61  ameters.**     a
10690 72 65 20 69 6e 74 65 72 70 72 65 74 65 64 20 69  re interpreted i
106a0 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79 20 61  n the same way a
106b0 73 20 74 68 65 20 66 69 72 73 74 20 34 20 70 61  s the first 4 pa
106c0 72 61 6d 65 74 65 72 73 20 74 6f 0a 2a 2a 20 20  rameters to.**  
106d0 20 20 20 46 55 4e 43 54 49 4f 4e 28 29 2e 0a 2a     FUNCTION()..*
106e0 2a 0a 2a 2a 20 20 20 57 46 55 4e 43 54 49 4f 4e  *.**   WFUNCTION
106f0 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
10700 72 67 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61  rg, xStep, xFina
10710 6c 2c 20 78 56 61 6c 75 65 2c 20 78 49 6e 76 65  l, xValue, xInve
10720 72 73 65 29 0a 2a 2a 20 20 20 20 20 55 73 65 64  rse).**     Used
10730 20 74 6f 20 63 72 65 61 74 65 20 61 6e 20 61 67   to create an ag
10740 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
10750 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 6d 70 6c   definition impl
10760 65 6d 65 6e 74 65 64 20 62 79 0a 2a 2a 20 20 20  emented by.**   
10770 20 20 74 68 65 20 43 20 66 75 6e 63 74 69 6f 6e    the C function
10780 73 20 78 53 74 65 70 20 61 6e 64 20 78 46 69 6e  s xStep and xFin
10790 61 6c 2e 20 54 68 65 20 66 69 72 73 74 20 66 6f  al. The first fo
107a0 75 72 20 70 61 72 61 6d 65 74 65 72 73 0a 2a 2a  ur parameters.**
107b0 20 20 20 20 20 61 72 65 20 69 6e 74 65 72 70 72       are interpr
107c0 65 74 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65  eted in the same
107d0 20 77 61 79 20 61 73 20 74 68 65 20 66 69 72 73   way as the firs
107e0 74 20 34 20 70 61 72 61 6d 65 74 65 72 73 20 74  t 4 parameters t
107f0 6f 0a 2a 2a 20 20 20 20 20 46 55 4e 43 54 49 4f  o.**     FUNCTIO
10800 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c 49 4b  N()..**.**   LIK
10810 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72  EFUNC(zName, nAr
10820 67 2c 20 70 41 72 67 2c 20 66 6c 61 67 73 29 0a  g, pArg, flags).
10830 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63  **     Used to c
10840 72 65 61 74 65 20 61 20 73 63 61 6c 61 72 20 66  reate a scalar f
10850 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69  unction definiti
10860 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e  on of a function
10870 20 7a 4e 61 6d 65 0a 2a 2a 20 20 20 20 20 74 68   zName.**     th
10880 61 74 20 61 63 63 65 70 74 73 20 6e 41 72 67 20  at accepts nArg 
10890 61 72 67 75 6d 65 6e 74 73 20 61 6e 64 20 69 73  arguments and is
108a0 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20   implemented by 
108b0 61 20 63 61 6c 6c 20 74 6f 20 43 0a 2a 2a 20 20  a call to C.**  
108c0 20 20 20 66 75 6e 63 74 69 6f 6e 20 6c 69 6b 65     function like
108d0 46 75 6e 63 2e 20 41 72 67 75 6d 65 6e 74 20 70  Func. Argument p
108e0 41 72 67 20 69 73 20 63 61 73 74 20 74 6f 20 61  Arg is cast to a
108f0 20 28 76 6f 69 64 20 2a 29 20 61 6e 64 20 6d 61   (void *) and ma
10900 64 65 0a 2a 2a 20 20 20 20 20 61 76 61 69 6c 61  de.**     availa
10910 62 6c 65 20 61 73 20 74 68 65 20 66 75 6e 63 74  ble as the funct
10920 69 6f 6e 20 75 73 65 72 2d 64 61 74 61 20 28 73  ion user-data (s
10930 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61  qlite3_user_data
10940 28 29 29 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20  ()). The.**     
10950 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 20 76 61  FuncDef.flags va
10960 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f  riable is set to
10970 20 74 68 65 20 76 61 6c 75 65 20 70 61 73 73 65   the value passe
10980 64 20 61 73 20 74 68 65 20 66 6c 61 67 73 0a 2a  d as the flags.*
10990 2a 20 20 20 20 20 70 61 72 61 6d 65 74 65 72 2e  *     parameter.
109a0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 46 55 4e 43  .*/.#define FUNC
109b0 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
109c0 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
109d0 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  nc) \.  {nArg, S
109e0 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
109f0 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c  ANT|SQLITE_UTF8|
10a00 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43  (bNC*SQLITE_FUNC
10a10 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20  _NEEDCOLL), \.  
10a20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
10a30 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75  TR(iArg), 0, xFu
10a40 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e  nc, 0, 0, 0, #zN
10a50 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69  ame, {0} }.#defi
10a60 6e 65 20 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61  ne VFUNCTION(zNa
10a70 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
10a80 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20  bNC, xFunc) \.  
10a90 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54  {nArg, SQLITE_UT
10aa0 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46  F8|(bNC*SQLITE_F
10ab0 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c  UNC_NEEDCOLL), \
10ac0 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  .   SQLITE_INT_T
10ad0 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20  O_PTR(iArg), 0, 
10ae0 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20  xFunc, 0, 0, 0, 
10af0 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64  #zName, {0} }.#d
10b00 65 66 69 6e 65 20 44 46 55 4e 43 54 49 4f 4e 28  efine DFUNCTION(
10b10 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
10b20 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c  g, bNC, xFunc) \
10b30 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45  .  {nArg, SQLITE
10b40 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53 51  _FUNC_SLOCHNG|SQ
10b50 4c 49 54 45 5f 55 54 46 38 2c 20 5c 0a 20 20 20  LITE_UTF8, \.   
10b60 30 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20  0, 0, xFunc, 0, 
10b70 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30  0, 0, #zName, {0
10b80 7d 20 7d 0a 23 64 65 66 69 6e 65 20 50 55 52 45  } }.#define PURE
10b90 5f 44 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72  _DATE(zName, nAr
10ba0 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
10bb0 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  unc) \.  {nArg, 
10bc0 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43  SQLITE_FUNC_SLOC
10bd0 48 4e 47 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c  HNG|SQLITE_UTF8|
10be0 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
10bf0 54 41 4e 54 2c 20 5c 0a 20 20 20 28 76 6f 69 64  TANT, \.   (void
10c00 2a 29 26 73 71 6c 69 74 65 33 43 6f 6e 66 69 67  *)&sqlite3Config
10c10 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30  , 0, xFunc, 0, 0
10c20 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d  , 0, #zName, {0}
10c30 20 7d 0a 23 64 65 66 69 6e 65 20 46 55 4e 43 54   }.#define FUNCT
10c40 49 4f 4e 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  ION2(zName, nArg
10c50 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
10c60 6e 63 2c 20 65 78 74 72 61 46 6c 61 67 73 29 20  nc, extraFlags) 
10c70 5c 0a 20 20 7b 6e 41 72 67 2c 53 51 4c 49 54 45  \.  {nArg,SQLITE
10c80 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53  _FUNC_CONSTANT|S
10c90 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a  QLITE_UTF8|(bNC*
10ca0 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
10cb0 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67 73  COLL)|extraFlags
10cc0 2c 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54  ,\.   SQLITE_INT
10cd0 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30  _TO_PTR(iArg), 0
10ce0 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 30  , xFunc, 0, 0, 0
10cf0 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a  , #zName, {0} }.
10d00 23 64 65 66 69 6e 65 20 53 54 52 5f 46 55 4e 43  #define STR_FUNC
10d10 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
10d20 2c 20 70 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , pArg, bNC, xFu
10d30 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  nc) \.  {nArg, S
10d40 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48  QLITE_FUNC_SLOCH
10d50 4e 47 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 28  NG|SQLITE_UTF8|(
10d60 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f  bNC*SQLITE_FUNC_
10d70 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20  NEEDCOLL), \.   
10d80 70 41 72 67 2c 20 30 2c 20 78 46 75 6e 63 2c 20  pArg, 0, xFunc, 
10d90 30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c  0, 0, 0, #zName,
10da0 20 7d 0a 23 64 65 66 69 6e 65 20 4c 49 4b 45 46   }.#define LIKEF
10db0 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  UNC(zName, nArg,
10dc0 20 61 72 67 2c 20 66 6c 61 67 73 29 20 5c 0a 20   arg, flags) \. 
10dd0 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46   {nArg, SQLITE_F
10de0 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c  UNC_CONSTANT|SQL
10df0 49 54 45 5f 55 54 46 38 7c 66 6c 61 67 73 2c 20  ITE_UTF8|flags, 
10e00 5c 0a 20 20 20 28 76 6f 69 64 20 2a 29 61 72 67  \.   (void *)arg
10e10 2c 20 30 2c 20 6c 69 6b 65 46 75 6e 63 2c 20 30  , 0, likeFunc, 0
10e20 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20  , 0, 0, #zName, 
10e30 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 41 47  {0} }.#define AG
10e40 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e  GREGATE(zName, n
10e50 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53  Arg, arg, nc, xS
10e60 74 65 70 2c 20 78 46 69 6e 61 6c 2c 20 78 56 61  tep, xFinal, xVa
10e70 6c 75 65 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  lue) \.  {nArg, 
10e80 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e 63 2a  SQLITE_UTF8|(nc*
10e90 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
10ea0 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49  COLL), \.   SQLI
10eb0 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72  TE_INT_TO_PTR(ar
10ec0 67 29 2c 20 30 2c 20 78 53 74 65 70 2c 78 46 69  g), 0, xStep,xFi
10ed0 6e 61 6c 2c 78 56 61 6c 75 65 2c 30 2c 23 7a 4e  nal,xValue,0,#zN
10ee0 61 6d 65 2c 20 7b 30 7d 7d 0a 23 64 65 66 69 6e  ame, {0}}.#defin
10ef0 65 20 41 47 47 52 45 47 41 54 45 32 28 7a 4e 61  e AGGREGATE2(zNa
10f00 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e  me, nArg, arg, n
10f10 63 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c  c, xStep, xFinal
10f20 2c 20 65 78 74 72 61 46 6c 61 67 73 29 20 5c 0a  , extraFlags) \.
10f30 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
10f40 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f  UTF8|(nc*SQLITE_
10f50 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65  FUNC_NEEDCOLL)|e
10f60 78 74 72 61 46 6c 61 67 73 2c 20 5c 0a 20 20 20  xtraFlags, \.   
10f70 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54  SQLITE_INT_TO_PT
10f80 52 28 61 72 67 29 2c 20 30 2c 20 78 53 74 65 70  R(arg), 0, xStep
10f90 2c 78 46 69 6e 61 6c 2c 78 46 69 6e 61 6c 2c 30  ,xFinal,xFinal,0
10fa0 2c 23 7a 4e 61 6d 65 2c 20 7b 30 7d 7d 0a 0a 23  ,#zName, {0}}..#
10fb0 64 65 66 69 6e 65 20 57 41 47 47 52 45 47 41 54  define WAGGREGAT
10fc0 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61  E(zName, nArg, a
10fd0 72 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20 78  rg, nc, xStep, x
10fe0 46 69 6e 61 6c 2c 20 78 56 61 6c 75 65 2c 20 78  Final, xValue, x
10ff0 49 6e 76 65 72 73 65 2c 20 66 29 20 5c 0a 20 20  Inverse, f) \.  
11000 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54  {nArg, SQLITE_UT
11010 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55  F8|(nc*SQLITE_FU
11020 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 66 2c 20  NC_NEEDCOLL)|f, 
11030 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f  \.   SQLITE_INT_
11040 54 4f 5f 50 54 52 28 61 72 67 29 2c 20 30 2c 20  TO_PTR(arg), 0, 
11050 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c 78 56 61  xStep,xFinal,xVa
11060 6c 75 65 2c 78 49 6e 76 65 72 73 65 2c 23 7a 4e  lue,xInverse,#zN
11070 61 6d 65 2c 20 7b 30 7d 7d 0a 0a 2f 2a 0a 2a 2a  ame, {0}}../*.**
11080 20 41 6c 6c 20 63 75 72 72 65 6e 74 20 73 61 76   All current sav
11090 65 70 6f 69 6e 74 73 20 61 72 65 20 73 74 6f 72  epoints are stor
110a0 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 20 6c  ed in a linked l
110b0 69 73 74 20 73 74 61 72 74 69 6e 67 20 61 74 0a  ist starting at.
110c0 2a 2a 20 73 71 6c 69 74 65 33 2e 70 53 61 76 65  ** sqlite3.pSave
110d0 70 6f 69 6e 74 2e 20 54 68 65 20 66 69 72 73 74  point. The first
110e0 20 65 6c 65 6d 65 6e 74 20 69 6e 20 74 68 65 20   element in the 
110f0 6c 69 73 74 20 69 73 20 74 68 65 20 6d 6f 73 74  list is the most
11100 20 72 65 63 65 6e 74 6c 79 0a 2a 2a 20 6f 70 65   recently.** ope
11110 6e 65 64 20 73 61 76 65 70 6f 69 6e 74 2e 20 53  ned savepoint. S
11120 61 76 65 70 6f 69 6e 74 73 20 61 72 65 20 61 64  avepoints are ad
11130 64 65 64 20 74 6f 20 74 68 65 20 6c 69 73 74 20  ded to the list 
11140 62 79 20 74 68 65 20 76 64 62 65 0a 2a 2a 20 4f  by the vdbe.** O
11150 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74  P_Savepoint inst
11160 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75  ruction..*/.stru
11170 63 74 20 53 61 76 65 70 6f 69 6e 74 20 7b 0a 20  ct Savepoint {. 
11180 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
11190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
111a0 20 20 20 20 20 2f 2a 20 53 61 76 65 70 6f 69 6e       /* Savepoin
111b0 74 20 6e 61 6d 65 20 28 6e 75 6c 2d 74 65 72 6d  t name (nul-term
111c0 69 6e 61 74 65 64 29 20 2a 2f 0a 20 20 69 36 34  inated) */.  i64
111d0 20 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 20   nDeferredCons; 
111e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
111f0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64 65   /* Number of de
11200 66 65 72 72 65 64 20 66 6b 20 76 69 6f 6c 61 74  ferred fk violat
11210 69 6f 6e 73 20 2a 2f 0a 20 20 69 36 34 20 6e 44  ions */.  i64 nD
11220 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20  eferredImmCons; 
11230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
11240 20 4e 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72   Number of defer
11250 72 65 64 20 69 6d 6d 20 66 6b 2e 20 2a 2f 0a 20  red imm fk. */. 
11260 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 4e 65 78   Savepoint *pNex
11270 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
11280 20 20 20 20 20 2f 2a 20 50 61 72 65 6e 74 20 73       /* Parent s
11290 61 76 65 70 6f 69 6e 74 20 28 69 66 20 61 6e 79  avepoint (if any
112a0 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  ) */.};../*.** T
112b0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65  he following are
112c0 20 75 73 65 64 20 61 73 20 74 68 65 20 73 65 63   used as the sec
112d0 6f 6e 64 20 70 61 72 61 6d 65 74 65 72 20 74 6f  ond parameter to
112e0 20 73 71 6c 69 74 65 33 53 61 76 65 70 6f 69 6e   sqlite3Savepoin
112f0 74 28 29 2c 0a 2a 2a 20 61 6e 64 20 61 73 20 74  t(),.** and as t
11300 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74  he P1 argument t
11310 6f 20 74 68 65 20 4f 50 5f 53 61 76 65 70 6f 69  o the OP_Savepoi
11320 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  nt instruction..
11330 2a 2f 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50  */.#define SAVEP
11340 4f 49 4e 54 5f 42 45 47 49 4e 20 20 20 20 20 20  OINT_BEGIN      
11350 30 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f  0.#define SAVEPO
11360 49 4e 54 5f 52 45 4c 45 41 53 45 20 20 20 20 31  INT_RELEASE    1
11370 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49  .#define SAVEPOI
11380 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 20 20 32 0a  NT_ROLLBACK   2.
11390 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c  ../*.** Each SQL
113a0 69 74 65 20 6d 6f 64 75 6c 65 20 28 76 69 72 74  ite module (virt
113b0 75 61 6c 20 74 61 62 6c 65 20 64 65 66 69 6e 69  ual table defini
113c0 74 69 6f 6e 29 20 69 73 20 64 65 66 69 6e 65 64  tion) is defined
113d0 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e   by an.** instan
113e0 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
113f0 69 6e 67 20 73 74 72 75 63 74 75 72 65 2c 20 73  ing structure, s
11400 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c  tored in the sql
11410 69 74 65 33 2e 61 4d 6f 64 75 6c 65 0a 2a 2a 20  ite3.aModule.** 
11420 68 61 73 68 20 74 61 62 6c 65 2e 0a 2a 2f 0a 73  hash table..*/.s
11430 74 72 75 63 74 20 4d 6f 64 75 6c 65 20 7b 0a 20  truct Module {. 
11440 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d   const sqlite3_m
11450 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 20  odule *pModule; 
11460 20 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63        /* Callbac
11470 6b 20 70 6f 69 6e 74 65 72 73 20 2a 2f 0a 20 20  k pointers */.  
11480 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d  const char *zNam
11490 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
114a0 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 70 61 73       /* Name pas
114b0 73 65 64 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f  sed to create_mo
114c0 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64  dule() */.  void
114d0 20 2a 70 41 75 78 3b 20 20 20 20 20 20 20 20 20   *pAux;         
114e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
114f0 20 2f 2a 20 70 41 75 78 20 70 61 73 73 65 64 20   /* pAux passed 
11500 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65  to create_module
11510 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  () */.  void (*x
11520 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a 29  Destroy)(void *)
11530 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
11540 4d 6f 64 75 6c 65 20 64 65 73 74 72 75 63 74 6f  Module destructo
11550 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  r function */.  
11560 54 61 62 6c 65 20 2a 70 45 70 6f 54 61 62 3b 20  Table *pEpoTab; 
11570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11580 20 20 20 20 20 2f 2a 20 45 70 6f 6e 79 6d 6f 75       /* Eponymou
11590 73 20 74 61 62 6c 65 20 66 6f 72 20 74 68 69 73  s table for this
115a0 20 6d 6f 64 75 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f   module */.};../
115b0 2a 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  *.** information
115c0 20 61 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75   about each colu
115d0 6d 6e 20 6f 66 20 61 6e 20 53 51 4c 20 74 61 62  mn of an SQL tab
115e0 6c 65 20 69 73 20 68 65 6c 64 20 69 6e 20 61 6e  le is held in an
115f0 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20   instance.** of 
11600 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 0a  this structure..
11610 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e  */.struct Column
11620 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65   {.  char *zName
11630 3b 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66  ;     /* Name of
11640 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2c 20 5c 30   this column, \0
11650 30 30 2c 20 74 68 65 6e 20 74 68 65 20 74 79 70  00, then the typ
11660 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 44 66  e */.  Expr *pDf
11670 6c 74 3b 20 20 20 20 20 2f 2a 20 44 65 66 61 75  lt;     /* Defau
11680 6c 74 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73  lt value of this
11690 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68 61   column */.  cha
116a0 72 20 2a 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a  r *zColl;     /*
116b0 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   Collating seque
116c0 6e 63 65 2e 20 20 49 66 20 4e 55 4c 4c 2c 20 75  nce.  If NULL, u
116d0 73 65 20 74 68 65 20 64 65 66 61 75 6c 74 20 2a  se the default *
116e0 2f 0a 20 20 75 38 20 6e 6f 74 4e 75 6c 6c 3b 20  /.  u8 notNull; 
116f0 20 20 20 20 20 2f 2a 20 41 6e 20 4f 45 5f 20 63       /* An OE_ c
11700 6f 64 65 20 66 6f 72 20 68 61 6e 64 6c 69 6e 67  ode for handling
11710 20 61 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73   a NOT NULL cons
11720 74 72 61 69 6e 74 20 2a 2f 0a 20 20 63 68 61 72  traint */.  char
11730 20 61 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a 20   affinity;   /* 
11740 4f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c 49 54  One of the SQLIT
11750 45 5f 41 46 46 5f 2e 2e 2e 20 76 61 6c 75 65 73  E_AFF_... values
11760 20 2a 2f 0a 20 20 75 38 20 73 7a 45 73 74 3b 20   */.  u8 szEst; 
11770 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61         /* Estima
11780 74 65 64 20 73 69 7a 65 20 6f 66 20 76 61 6c 75  ted size of valu
11790 65 20 69 6e 20 74 68 69 73 20 63 6f 6c 75 6d 6e  e in this column
117a0 2e 20 73 69 7a 65 6f 66 28 49 4e 54 29 3d 3d 31  . sizeof(INT)==1
117b0 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 46 6c 61 67   */.  u8 colFlag
117c0 73 3b 20 20 20 20 20 2f 2a 20 42 6f 6f 6c 65 61  s;     /* Boolea
117d0 6e 20 70 72 6f 70 65 72 74 69 65 73 2e 20 20 53  n properties.  S
117e0 65 65 20 43 4f 4c 46 4c 41 47 5f 20 64 65 66 69  ee COLFLAG_ defi
117f0 6e 65 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a  nes below */.};.
11800 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  ./* Allowed valu
11810 65 73 20 66 6f 72 20 43 6f 6c 75 6d 6e 2e 63 6f  es for Column.co
11820 6c 46 6c 61 67 73 3a 0a 2a 2f 0a 23 64 65 66 69  lFlags:.*/.#defi
11830 6e 65 20 43 4f 4c 46 4c 41 47 5f 50 52 49 4d 4b  ne COLFLAG_PRIMK
11840 45 59 20 20 30 78 30 30 30 31 20 20 20 20 2f 2a  EY  0x0001    /*
11850 20 43 6f 6c 75 6d 6e 20 69 73 20 70 61 72 74 20   Column is part 
11860 6f 66 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b  of the primary k
11870 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f  ey */.#define CO
11880 4c 46 4c 41 47 5f 48 49 44 44 45 4e 20 20 20 30  LFLAG_HIDDEN   0
11890 78 30 30 30 32 20 20 20 20 2f 2a 20 41 20 68 69  x0002    /* A hi
118a0 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 69 6e 20 61  dden column in a
118b0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 2a   virtual table *
118c0 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41  /.#define COLFLA
118d0 47 5f 48 41 53 54 59 50 45 20 20 30 78 30 30 30  G_HASTYPE  0x000
118e0 34 20 20 20 20 2f 2a 20 54 79 70 65 20 6e 61 6d  4    /* Type nam
118f0 65 20 66 6f 6c 6c 6f 77 73 20 63 6f 6c 75 6d 6e  e follows column
11900 20 6e 61 6d 65 20 2a 2f 0a 23 64 65 66 69 6e 65   name */.#define
11910 20 43 4f 4c 46 4c 41 47 5f 55 4e 49 51 55 45 20   COLFLAG_UNIQUE 
11920 20 20 30 78 30 30 30 38 20 20 20 20 2f 2a 20 43    0x0008    /* C
11930 6f 6c 75 6d 6e 20 64 65 66 20 63 6f 6e 74 61 69  olumn def contai
11940 6e 73 20 22 55 4e 49 51 55 45 22 20 6f 72 20 22  ns "UNIQUE" or "
11950 50 4b 22 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43  PK" */.#define C
11960 4f 4c 46 4c 41 47 5f 53 4f 52 54 45 52 52 45 46  OLFLAG_SORTERREF
11970 20 30 78 30 30 31 30 20 20 20 2f 2a 20 55 73 65   0x0010   /* Use
11980 20 73 6f 72 74 65 72 2d 72 65 66 73 20 77 69 74   sorter-refs wit
11990 68 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f  h this column */
119a0 0a 0a 2f 2a 0a 2a 2a 20 41 20 22 43 6f 6c 6c 61  ../*.** A "Colla
119b0 74 69 6e 67 20 53 65 71 75 65 6e 63 65 22 20 69  ting Sequence" i
119c0 73 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e 20  s defined by an 
119d0 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
119e0 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72  following.** str
119f0 75 63 74 75 72 65 2e 20 43 6f 6e 63 65 70 74 75  ucture. Conceptu
11a00 61 6c 6c 79 2c 20 61 20 63 6f 6c 6c 61 74 69 6e  ally, a collatin
11a10 67 20 73 65 71 75 65 6e 63 65 20 63 6f 6e 73 69  g sequence consi
11a20 73 74 73 20 6f 66 20 61 20 6e 61 6d 65 20 61 6e  sts of a name an
11a30 64 0a 2a 2a 20 61 20 63 6f 6d 70 61 72 69 73 6f  d.** a compariso
11a40 6e 20 72 6f 75 74 69 6e 65 20 74 68 61 74 20 64  n routine that d
11a50 65 66 69 6e 65 73 20 74 68 65 20 6f 72 64 65 72  efines the order
11a60 20 6f 66 20 74 68 61 74 20 73 65 71 75 65 6e 63   of that sequenc
11a70 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 43 6f 6c 6c  e..**.** If Coll
11a80 53 65 71 2e 78 43 6d 70 20 69 73 20 4e 55 4c 4c  Seq.xCmp is NULL
11a90 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20  , it means that 
11aa0 74 68 65 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67  the.** collating
11ab0 20 73 65 71 75 65 6e 63 65 20 69 73 20 75 6e 64   sequence is und
11ac0 65 66 69 6e 65 64 2e 20 20 49 6e 64 69 63 65 73  efined.  Indices
11ad0 20 62 75 69 6c 74 20 6f 6e 20 61 6e 20 75 6e 64   built on an und
11ae0 65 66 69 6e 65 64 0a 2a 2a 20 63 6f 6c 6c 61 74  efined.** collat
11af0 69 6e 67 20 73 65 71 75 65 6e 63 65 20 6d 61 79  ing sequence may
11b00 20 6e 6f 74 20 62 65 20 72 65 61 64 20 6f 72 20   not be read or 
11b10 77 72 69 74 74 65 6e 2e 0a 2a 2f 0a 73 74 72 75  written..*/.stru
11b20 63 74 20 43 6f 6c 6c 53 65 71 20 7b 0a 20 20 63  ct CollSeq {.  c
11b30 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
11b40 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
11b50 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  the collating se
11b60 71 75 65 6e 63 65 2c 20 55 54 46 2d 38 20 65 6e  quence, UTF-8 en
11b70 63 6f 64 65 64 20 2a 2f 0a 20 20 75 38 20 65 6e  coded */.  u8 en
11b80 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
11b90 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e   /* Text encodin
11ba0 67 20 68 61 6e 64 6c 65 64 20 62 79 20 78 43 6d  g handled by xCm
11bb0 70 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  p() */.  void *p
11bc0 55 73 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f  User;          /
11bd0 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74  * First argument
11be0 20 74 6f 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20   to xCmp() */.  
11bf0 69 6e 74 20 28 2a 78 43 6d 70 29 28 76 6f 69 64  int (*xCmp)(void
11c00 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69  *,int, const voi
11c10 64 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76  d*, int, const v
11c20 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20 28 2a  oid*);.  void (*
11c30 78 44 65 6c 29 28 76 6f 69 64 2a 29 3b 20 20 2f  xDel)(void*);  /
11c40 2a 20 44 65 73 74 72 75 63 74 6f 72 20 66 6f 72  * Destructor for
11c50 20 70 55 73 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   pUser */.};../*
11c60 0a 2a 2a 20 41 20 73 6f 72 74 20 6f 72 64 65 72  .** A sort order
11c70 20 63 61 6e 20 62 65 20 65 69 74 68 65 72 20 41   can be either A
11c80 53 43 20 6f 72 20 44 45 53 43 2e 0a 2a 2f 0a 23  SC or DESC..*/.#
11c90 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f  define SQLITE_SO
11ca0 5f 41 53 43 20 20 20 20 20 20 20 30 20 20 2f 2a  _ASC       0  /*
11cb0 20 53 6f 72 74 20 69 6e 20 61 73 63 65 6e 64 69   Sort in ascendi
11cc0 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66  ng order */.#def
11cd0 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 44 45  ine SQLITE_SO_DE
11ce0 53 43 20 20 20 20 20 20 31 20 20 2f 2a 20 53 6f  SC      1  /* So
11cf0 72 74 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20  rt in ascending 
11d00 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65  order */.#define
11d10 20 53 51 4c 49 54 45 5f 53 4f 5f 55 4e 44 45 46   SQLITE_SO_UNDEF
11d20 49 4e 45 44 20 2d 31 20 2f 2a 20 4e 6f 20 73 6f  INED -1 /* No so
11d30 72 74 20 6f 72 64 65 72 20 73 70 65 63 69 66 69  rt order specifi
11d40 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6c  ed */../*.** Col
11d50 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 79 70  umn affinity typ
11d60 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 73 65 20  es..**.** These 
11d70 75 73 65 64 20 74 6f 20 68 61 76 65 20 6d 6e 65  used to have mne
11d80 6d 6f 6e 69 63 20 6e 61 6d 65 20 6c 69 6b 65 20  monic name like 
11d90 27 69 27 20 66 6f 72 20 53 51 4c 49 54 45 5f 41  'i' for SQLITE_A
11da0 46 46 5f 49 4e 54 45 47 45 52 20 61 6e 64 0a 2a  FF_INTEGER and.*
11db0 2a 20 27 74 27 20 66 6f 72 20 53 51 4c 49 54 45  * 't' for SQLITE
11dc0 5f 41 46 46 5f 54 45 58 54 2e 20 20 42 75 74 20  _AFF_TEXT.  But 
11dd0 77 65 20 63 61 6e 20 73 61 76 65 20 61 20 6c 69  we can save a li
11de0 74 74 6c 65 20 73 70 61 63 65 20 61 6e 64 20 69  ttle space and i
11df0 6d 70 72 6f 76 65 0a 2a 2a 20 74 68 65 20 73 70  mprove.** the sp
11e00 65 65 64 20 61 20 6c 69 74 74 6c 65 20 62 79 20  eed a little by 
11e10 6e 75 6d 62 65 72 69 6e 67 20 74 68 65 20 76 61  numbering the va
11e20 6c 75 65 73 20 63 6f 6e 73 65 63 75 74 69 76 65  lues consecutive
11e30 6c 79 2e 0a 2a 2a 0a 2a 2a 20 42 75 74 20 72 61  ly..**.** But ra
11e40 74 68 65 72 20 74 68 61 6e 20 73 74 61 72 74 20  ther than start 
11e50 77 69 74 68 20 30 20 6f 72 20 31 2c 20 77 65 20  with 0 or 1, we 
11e60 62 65 67 69 6e 20 77 69 74 68 20 27 41 27 2e 20  begin with 'A'. 
11e70 20 54 68 61 74 20 77 61 79 2c 0a 2a 2a 20 77 68   That way,.** wh
11e80 65 6e 20 6d 75 6c 74 69 70 6c 65 20 61 66 66 69  en multiple affi
11e90 6e 69 74 79 20 74 79 70 65 73 20 61 72 65 20 63  nity types are c
11ea0 6f 6e 63 61 74 65 6e 61 74 65 64 20 69 6e 74 6f  oncatenated into
11eb0 20 61 20 73 74 72 69 6e 67 20 61 6e 64 0a 2a 2a   a string and.**
11ec0 20 75 73 65 64 20 61 73 20 74 68 65 20 50 34 20   used as the P4 
11ed0 6f 70 65 72 61 6e 64 2c 20 74 68 65 79 20 77 69  operand, they wi
11ee0 6c 6c 20 62 65 20 6d 6f 72 65 20 72 65 61 64 61  ll be more reada
11ef0 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20  ble..**.** Note 
11f00 61 6c 73 6f 20 74 68 61 74 20 74 68 65 20 6e 75  also that the nu
11f10 6d 65 72 69 63 20 74 79 70 65 73 20 61 72 65 20  meric types are 
11f20 67 72 6f 75 70 65 64 20 74 6f 67 65 74 68 65 72  grouped together
11f30 20 73 6f 20 74 68 61 74 20 74 65 73 74 69 6e 67   so that testing
11f40 0a 2a 2a 20 66 6f 72 20 61 20 6e 75 6d 65 72 69  .** for a numeri
11f50 63 20 74 79 70 65 20 69 73 20 61 20 73 69 6e 67  c type is a sing
11f60 6c 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20  le comparison.  
11f70 41 6e 64 20 74 68 65 20 42 4c 4f 42 20 74 79 70  And the BLOB typ
11f80 65 20 69 73 20 66 69 72 73 74 2e 0a 2a 2f 0a 23  e is first..*/.#
11f90 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
11fa0 46 5f 42 4c 4f 42 20 20 20 20 20 27 41 27 0a 23  F_BLOB     'A'.#
11fb0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
11fc0 46 5f 54 45 58 54 20 20 20 20 20 27 42 27 0a 23  F_TEXT     'B'.#
11fd0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
11fe0 46 5f 4e 55 4d 45 52 49 43 20 20 27 43 27 0a 23  F_NUMERIC  'C'.#
11ff0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
12000 46 5f 49 4e 54 45 47 45 52 20 20 27 44 27 0a 23  F_INTEGER  'D'.#
12010 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
12020 46 5f 52 45 41 4c 20 20 20 20 20 27 45 27 0a 0a  F_REAL     'E'..
12030 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49  #define sqlite3I
12040 73 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79  sNumericAffinity
12050 28 58 29 20 20 28 28 58 29 3e 3d 53 51 4c 49 54  (X)  ((X)>=SQLIT
12060 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 29 0a 0a  E_AFF_NUMERIC)..
12070 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45  /*.** The SQLITE
12080 5f 41 46 46 5f 4d 41 53 4b 20 76 61 6c 75 65 73  _AFF_MASK values
12090 20 6d 61 73 6b 73 20 6f 66 66 20 74 68 65 20 73   masks off the s
120a0 69 67 6e 69 66 69 63 61 6e 74 20 62 69 74 73 20  ignificant bits 
120b0 6f 66 20 61 6e 0a 2a 2a 20 61 66 66 69 6e 69 74  of an.** affinit
120c0 79 20 76 61 6c 75 65 2e 0a 2a 2f 0a 23 64 65 66  y value..*/.#def
120d0 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d  ine SQLITE_AFF_M
120e0 41 53 4b 20 20 20 20 20 30 78 34 37 0a 0a 2f 2a  ASK     0x47../*
120f0 0a 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20 62  .** Additional b
12100 69 74 20 76 61 6c 75 65 73 20 74 68 61 74 20 63  it values that c
12110 61 6e 20 62 65 20 4f 52 65 64 20 77 69 74 68 20  an be ORed with 
12120 61 6e 20 61 66 66 69 6e 69 74 79 20 77 69 74 68  an affinity with
12130 6f 75 74 0a 2a 2a 20 63 68 61 6e 67 69 6e 67 20  out.** changing 
12140 74 68 65 20 61 66 66 69 6e 69 74 79 2e 0a 2a 2a  the affinity..**
12150 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 4e  .** The SQLITE_N
12160 4f 54 4e 55 4c 4c 20 66 6c 61 67 20 69 73 20 61  OTNULL flag is a
12170 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20   combination of 
12180 4e 55 4c 4c 45 51 20 61 6e 64 20 4a 55 4d 50 49  NULLEQ and JUMPI
12190 46 4e 55 4c 4c 2e 0a 2a 2a 20 49 74 20 63 61 75  FNULL..** It cau
121a0 73 65 73 20 61 6e 20 61 73 73 65 72 74 28 29 20  ses an assert() 
121b0 74 6f 20 66 69 72 65 20 69 66 20 65 69 74 68 65  to fire if eithe
121c0 72 20 6f 70 65 72 61 6e 64 20 74 6f 20 61 20 63  r operand to a c
121d0 6f 6d 70 61 72 69 73 6f 6e 0a 2a 2a 20 6f 70 65  omparison.** ope
121e0 72 61 74 6f 72 20 69 73 20 4e 55 4c 4c 2e 20 20  rator is NULL.  
121f0 49 74 20 69 73 20 61 64 64 65 64 20 74 6f 20 63  It is added to c
12200 65 72 74 61 69 6e 20 63 6f 6d 70 61 72 69 73 6f  ertain compariso
12210 6e 20 6f 70 65 72 61 74 6f 72 73 20 74 6f 0a 2a  n operators to.*
12220 2a 20 70 72 6f 76 65 20 74 68 61 74 20 74 68 65  * prove that the
12230 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 61 6c   operands are al
12240 77 61 79 73 20 4e 4f 54 20 4e 55 4c 4c 2e 0a 2a  ways NOT NULL..*
12250 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
12260 5f 4b 45 45 50 4e 55 4c 4c 20 20 20 20 20 30 78  _KEEPNULL     0x
12270 30 38 20 20 2f 2a 20 55 73 65 64 20 62 79 20 76  08  /* Used by v
12280 65 63 74 6f 72 20 3d 3d 20 6f 72 20 3c 3e 20 2a  ector == or <> *
12290 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
122a0 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 20 20 30 78  _JUMPIFNULL   0x
122b0 31 30 20 20 2f 2a 20 6a 75 6d 70 73 20 69 66 20  10  /* jumps if 
122c0 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69  either operand i
122d0 73 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e  s NULL */.#defin
122e0 65 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32  e SQLITE_STOREP2
122f0 20 20 20 20 20 20 30 78 32 30 20 20 2f 2a 20 53        0x20  /* S
12300 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20 72  tore result in r
12310 65 67 5b 50 32 5d 20 72 61 74 68 65 72 20 74 68  eg[P2] rather th
12320 61 6e 20 6a 75 6d 70 20 2a 2f 0a 23 64 65 66 69  an jump */.#defi
12330 6e 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  ne SQLITE_NULLEQ
12340 20 20 20 20 20 20 20 30 78 38 30 20 20 2f 2a 20         0x80  /* 
12350 4e 55 4c 4c 3d 4e 55 4c 4c 20 2a 2f 0a 23 64 65  NULL=NULL */.#de
12360 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e  fine SQLITE_NOTN
12370 55 4c 4c 20 20 20 20 20 20 30 78 39 30 20 20 2f  ULL      0x90  /
12380 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 6f 70  * Assert that op
12390 65 72 61 6e 64 73 20 61 72 65 20 6e 65 76 65 72  erands are never
123a0 20 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20   NULL */../*.** 
123b0 41 6e 20 6f 62 6a 65 63 74 20 6f 66 20 74 68 69  An object of thi
123c0 73 20 74 79 70 65 20 69 73 20 63 72 65 61 74 65  s type is create
123d0 64 20 66 6f 72 20 65 61 63 68 20 76 69 72 74 75  d for each virtu
123e0 61 6c 20 74 61 62 6c 65 20 70 72 65 73 65 6e 74  al table present
123f0 20 69 6e 0a 2a 2a 20 74 68 65 20 64 61 74 61 62   in.** the datab
12400 61 73 65 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a  ase schema..**.*
12410 2a 20 49 66 20 74 68 65 20 64 61 74 61 62 61 73  * If the databas
12420 65 20 73 63 68 65 6d 61 20 69 73 20 73 68 61 72  e schema is shar
12430 65 64 2c 20 74 68 65 6e 20 74 68 65 72 65 20 69  ed, then there i
12440 73 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f  s one instance o
12450 66 20 74 68 69 73 0a 2a 2a 20 73 74 72 75 63 74  f this.** struct
12460 75 72 65 20 66 6f 72 20 65 61 63 68 20 64 61 74  ure for each dat
12470 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
12480 20 28 73 71 6c 69 74 65 33 2a 29 20 74 68 61 74   (sqlite3*) that
12490 20 75 73 65 73 20 74 68 65 20 73 68 61 72 65 64   uses the shared
124a0 0a 2a 2a 20 73 63 68 65 6d 61 2e 20 54 68 69 73  .** schema. This
124b0 20 69 73 20 62 65 63 61 75 73 65 20 65 61 63 68   is because each
124c0 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
124d0 74 69 6f 6e 20 72 65 71 75 69 72 65 73 20 69 74  tion requires it
124e0 73 20 6f 77 6e 20 75 6e 69 71 75 65 0a 2a 2a 20  s own unique.** 
124f0 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
12500 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61  sqlite3_vtab* ha
12510 6e 64 6c 65 20 75 73 65 64 20 74 6f 20 61 63 63  ndle used to acc
12520 65 73 73 20 74 68 65 20 76 69 72 74 75 61 6c 20  ess the virtual 
12530 74 61 62 6c 65 0a 2a 2a 20 69 6d 70 6c 65 6d 65  table.** impleme
12540 6e 74 61 74 69 6f 6e 2e 20 73 71 6c 69 74 65 33  ntation. sqlite3
12550 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20 63  _vtab* handles c
12560 61 6e 20 6e 6f 74 20 62 65 20 73 68 61 72 65 64  an not be shared
12570 20 62 65 74 77 65 65 6e 0a 2a 2a 20 64 61 74 61   between.** data
12580 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73  base connections
12590 2c 20 65 76 65 6e 20 77 68 65 6e 20 74 68 65 20  , even when the 
125a0 72 65 73 74 20 6f 66 20 74 68 65 20 69 6e 2d 6d  rest of the in-m
125b0 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65 0a 2a  emory database.*
125c0 2a 20 73 63 68 65 6d 61 20 69 73 20 73 68 61 72  * schema is shar
125d0 65 64 2c 20 61 73 20 74 68 65 20 69 6d 70 6c 65  ed, as the imple
125e0 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 74 65 6e 20  mentation often 
125f0 73 74 6f 72 65 73 20 74 68 65 20 64 61 74 61 62  stores the datab
12600 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f  ase.** connectio
12610 6e 20 68 61 6e 64 6c 65 20 70 61 73 73 65 64 20  n handle passed 
12620 74 6f 20 69 74 20 76 69 61 20 74 68 65 20 78 43  to it via the xC
12630 6f 6e 6e 65 63 74 28 29 20 6f 72 20 78 43 72 65  onnect() or xCre
12640 61 74 65 28 29 20 6d 65 74 68 6f 64 0a 2a 2a 20  ate() method.** 
12650 64 75 72 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a  during initializ
12660 61 74 69 6f 6e 20 69 6e 74 65 72 6e 61 6c 6c 79  ation internally
12670 2e 20 54 68 69 73 20 64 61 74 61 62 61 73 65 20  . This database 
12680 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c  connection handl
12690 65 20 6d 61 79 0a 2a 2a 20 74 68 65 6e 20 62 65  e may.** then be
126a0 20 75 73 65 64 20 62 79 20 74 68 65 20 76 69 72   used by the vir
126b0 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65  tual table imple
126c0 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20 61 63 63  mentation to acc
126d0 65 73 73 20 72 65 61 6c 20 74 61 62 6c 65 73 0a  ess real tables.
126e0 2a 2a 20 77 69 74 68 69 6e 20 74 68 65 20 64 61  ** within the da
126f0 74 61 62 61 73 65 2e 20 53 6f 20 74 68 61 74 20  tabase. So that 
12700 74 68 65 79 20 61 70 70 65 61 72 20 61 73 20 70  they appear as p
12710 61 72 74 20 6f 66 20 74 68 65 20 63 61 6c 6c 65  art of the calle
12720 72 73 0a 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f  rs.** transactio
12730 6e 2c 20 74 68 65 73 65 20 61 63 63 65 73 73 65  n, these accesse
12740 73 20 6e 65 65 64 20 74 6f 20 62 65 20 6d 61 64  s need to be mad
12750 65 20 76 69 61 20 74 68 65 20 73 61 6d 65 20 64  e via the same d
12760 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65  atabase.** conne
12770 63 74 69 6f 6e 20 61 73 20 74 68 61 74 20 75 73  ction as that us
12780 65 64 20 74 6f 20 65 78 65 63 75 74 65 20 53 51  ed to execute SQ
12790 4c 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f 6e 20  L operations on 
127a0 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
127b0 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 56 54 61  e..**.** All VTa
127c0 62 6c 65 20 6f 62 6a 65 63 74 73 20 74 68 61 74  ble objects that
127d0 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 61   correspond to a
127e0 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 69 6e   single table in
127f0 20 61 20 73 68 61 72 65 64 0a 2a 2a 20 64 61 74   a shared.** dat
12800 61 62 61 73 65 20 73 63 68 65 6d 61 20 61 72 65  abase schema are
12810 20 69 6e 69 74 69 61 6c 6c 79 20 73 74 6f 72 65   initially store
12820 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 2d 6c 69  d in a linked-li
12830 73 74 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79  st pointed to by
12840 0a 2a 2a 20 74 68 65 20 54 61 62 6c 65 2e 70 56  .** the Table.pV
12850 54 61 62 6c 65 20 6d 65 6d 62 65 72 20 76 61 72  Table member var
12860 69 61 62 6c 65 20 6f 66 20 74 68 65 20 63 6f 72  iable of the cor
12870 72 65 73 70 6f 6e 64 69 6e 67 20 54 61 62 6c 65  responding Table
12880 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 57 68 65 6e   object..** When
12890 20 61 6e 20 73 71 6c 69 74 65 33 5f 70 72 65 70   an sqlite3_prep
128a0 61 72 65 28 29 20 6f 70 65 72 61 74 69 6f 6e 20  are() operation 
128b0 69 73 20 72 65 71 75 69 72 65 64 20 74 6f 20 61  is required to a
128c0 63 63 65 73 73 20 74 68 65 20 76 69 72 74 75 61  ccess the virtua
128d0 6c 0a 2a 2a 20 74 61 62 6c 65 2c 20 69 74 20 73  l.** table, it s
128e0 65 61 72 63 68 65 73 20 74 68 65 20 6c 69 73 74  earches the list
128f0 20 66 6f 72 20 74 68 65 20 56 54 61 62 6c 65 20   for the VTable 
12900 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 73  that corresponds
12910 20 74 6f 20 74 68 65 0a 2a 2a 20 64 61 74 61 62   to the.** datab
12920 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 64  ase connection d
12930 6f 69 6e 67 20 74 68 65 20 70 72 65 70 61 72 69  oing the prepari
12940 6e 67 20 73 6f 20 61 73 20 74 6f 20 75 73 65 20  ng so as to use 
12950 74 68 65 20 63 6f 72 72 65 63 74 0a 2a 2a 20 73  the correct.** s
12960 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e  qlite3_vtab* han
12970 64 6c 65 20 69 6e 20 74 68 65 20 63 6f 6d 70 69  dle in the compi
12980 6c 65 64 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a  led query..**.**
12990 20 57 68 65 6e 20 61 6e 20 69 6e 2d 6d 65 6d 6f   When an in-memo
129a0 72 79 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 20  ry Table object 
129b0 69 73 20 64 65 6c 65 74 65 64 20 28 66 6f 72 20  is deleted (for 
129c0 65 78 61 6d 70 6c 65 20 77 68 65 6e 20 74 68 65  example when the
129d0 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 62 65  .** schema is be
129e0 69 6e 67 20 72 65 6c 6f 61 64 65 64 20 66 6f 72  ing reloaded for
129f0 20 73 6f 6d 65 20 72 65 61 73 6f 6e 29 2c 20 74   some reason), t
12a00 68 65 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74  he VTable object
12a10 73 20 61 72 65 20 6e 6f 74 0a 2a 2a 20 64 65 6c  s are not.** del
12a20 65 74 65 64 20 61 6e 64 20 74 68 65 20 73 71 6c  eted and the sql
12a30 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c  ite3_vtab* handl
12a40 65 73 20 61 72 65 20 6e 6f 74 20 78 44 69 73 63  es are not xDisc
12a50 6f 6e 6e 65 63 74 28 29 65 64 0a 2a 2a 20 69 6d  onnect()ed.** im
12a60 6d 65 64 69 61 74 65 6c 79 2e 20 49 6e 73 74 65  mediately. Inste
12a70 61 64 2c 20 74 68 65 79 20 61 72 65 20 6d 6f 76  ad, they are mov
12a80 65 64 20 66 72 6f 6d 20 74 68 65 20 54 61 62 6c  ed from the Tabl
12a90 65 2e 70 56 54 61 62 6c 65 20 6c 69 73 74 20 74  e.pVTable list t
12aa0 6f 0a 2a 2a 20 61 6e 6f 74 68 65 72 20 6c 69 6e  o.** another lin
12ab0 6b 65 64 20 6c 69 73 74 20 68 65 61 64 65 64 20  ked list headed 
12ac0 62 79 20 74 68 65 20 73 71 6c 69 74 65 33 2e 70  by the sqlite3.p
12ad0 44 69 73 63 6f 6e 6e 65 63 74 20 6d 65 6d 62 65  Disconnect membe
12ae0 72 20 6f 66 20 74 68 65 0a 2a 2a 20 63 6f 72 72  r of the.** corr
12af0 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65  esponding sqlite
12b00 33 20 73 74 72 75 63 74 75 72 65 2e 20 54 68 65  3 structure. The
12b10 79 20 61 72 65 20 74 68 65 6e 20 64 65 6c 65 74  y are then delet
12b20 65 64 2f 78 44 69 73 63 6f 6e 6e 65 63 74 65 64  ed/xDisconnected
12b30 0a 2a 2a 20 6e 65 78 74 20 74 69 6d 65 20 61 20  .** next time a 
12b40 73 74 61 74 65 6d 65 6e 74 20 69 73 20 70 72 65  statement is pre
12b50 70 61 72 65 64 20 75 73 69 6e 67 20 73 61 69 64  pared using said
12b60 20 73 71 6c 69 74 65 33 2a 2e 20 54 68 69 73 20   sqlite3*. This 
12b70 69 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20 61 76  is done.** to av
12b80 6f 69 64 20 64 65 61 64 6c 6f 63 6b 20 69 73 73  oid deadlock iss
12b90 75 65 73 20 69 6e 76 6f 6c 76 69 6e 67 20 6d 75  ues involving mu
12ba0 6c 74 69 70 6c 65 20 73 71 6c 69 74 65 33 2e 6d  ltiple sqlite3.m
12bb0 75 74 65 78 20 6d 75 74 65 78 65 73 2e 0a 2a 2a  utex mutexes..**
12bc0 20 52 65 66 65 72 20 74 6f 20 63 6f 6d 6d 65 6e   Refer to commen
12bd0 74 73 20 61 62 6f 76 65 20 66 75 6e 63 74 69 6f  ts above functio
12be0 6e 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c  n sqlite3VtabUnl
12bf0 6f 63 6b 4c 69 73 74 28 29 20 66 6f 72 20 61 6e  ockList() for an
12c00 0a 2a 2a 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20  .** explanation 
12c10 61 73 20 74 6f 20 77 68 79 20 69 74 20 69 73 20  as to why it is 
12c20 73 61 66 65 20 74 6f 20 61 64 64 20 61 6e 20 65  safe to add an e
12c30 6e 74 72 79 20 74 6f 20 61 6e 20 73 71 6c 69 74  ntry to an sqlit
12c40 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74 0a 2a  e3.pDisconnect.*
12c50 2a 20 6c 69 73 74 20 77 69 74 68 6f 75 74 20 68  * list without h
12c60 6f 6c 64 69 6e 67 20 74 68 65 20 63 6f 72 72 65  olding the corre
12c70 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33  sponding sqlite3
12c80 2e 6d 75 74 65 78 20 6d 75 74 65 78 2e 0a 2a 2a  .mutex mutex..**
12c90 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 66  .** The memory f
12ca0 6f 72 20 6f 62 6a 65 63 74 73 20 6f 66 20 74 68  or objects of th
12cb0 69 73 20 74 79 70 65 20 69 73 20 61 6c 77 61 79  is type is alway
12cc0 73 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 0a 2a  s allocated by.*
12cd0 2a 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  * sqlite3DbMallo
12ce0 63 28 29 2c 20 75 73 69 6e 67 20 74 68 65 20 63  c(), using the c
12cf0 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65  onnection handle
12d00 20 73 74 6f 72 65 64 20 69 6e 20 56 54 61 62 6c   stored in VTabl
12d10 65 2e 64 62 20 61 73 0a 2a 2a 20 74 68 65 20 66  e.db as.** the f
12d20 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a 2a  irst argument..*
12d30 2f 0a 73 74 72 75 63 74 20 56 54 61 62 6c 65 20  /.struct VTable 
12d40 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
12d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
12d60 20 44 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   Database connec
12d70 74 69 6f 6e 20 61 73 73 6f 63 69 61 74 65 64 20  tion associated 
12d80 77 69 74 68 20 74 68 69 73 20 74 61 62 6c 65 20  with this table 
12d90 2a 2f 0a 20 20 4d 6f 64 75 6c 65 20 2a 70 4d 6f  */.  Module *pMo
12da0 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  d;             /
12db0 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 6d 6f 64  * Pointer to mod
12dc0 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ule implementati
12dd0 6f 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  on */.  sqlite3_
12de0 76 74 61 62 20 2a 70 56 74 61 62 3b 20 20 20 20  vtab *pVtab;    
12df0 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
12e00 76 74 61 62 20 69 6e 73 74 61 6e 63 65 20 2a 2f  vtab instance */
12e10 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20  .  int nRef;    
12e20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
12e30 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65  Number of pointe
12e40 72 73 20 74 6f 20 74 68 69 73 20 73 74 72 75 63  rs to this struc
12e50 74 75 72 65 20 2a 2f 0a 20 20 75 38 20 62 43 6f  ture */.  u8 bCo
12e60 6e 73 74 72 61 69 6e 74 3b 20 20 20 20 20 20 20  nstraint;       
12e70 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63      /* True if c
12e80 6f 6e 73 74 72 61 69 6e 74 73 20 61 72 65 20 73  onstraints are s
12e90 75 70 70 6f 72 74 65 64 20 2a 2f 0a 20 20 69 6e  upported */.  in
12ea0 74 20 69 53 61 76 65 70 6f 69 6e 74 3b 20 20 20  t iSavepoint;   
12eb0 20 20 20 20 20 20 20 20 2f 2a 20 44 65 70 74 68          /* Depth
12ec0 20 6f 66 20 74 68 65 20 53 41 56 45 50 4f 49 4e   of the SAVEPOIN
12ed0 54 20 73 74 61 63 6b 20 2a 2f 0a 20 20 56 54 61  T stack */.  VTa
12ee0 62 6c 65 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  ble *pNext;     
12ef0 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 69         /* Next i
12f00 6e 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28 73  n linked list (s
12f10 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 7d 3b 0a  ee above) */.};.
12f20 0a 2f 2a 0a 2a 2a 20 54 68 65 20 73 63 68 65 6d  ./*.** The schem
12f30 61 20 66 6f 72 20 65 61 63 68 20 53 51 4c 20 74  a for each SQL t
12f40 61 62 6c 65 20 61 6e 64 20 76 69 65 77 20 69 73  able and view is
12f50 20 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20   represented in 
12f60 6d 65 6d 6f 72 79 0a 2a 2a 20 62 79 20 61 6e 20  memory.** by an 
12f70 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
12f80 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
12f90 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54  ure..*/.struct T
12fa0 61 62 6c 65 20 7b 0a 20 20 63 68 61 72 20 2a 7a  able {.  char *z
12fb0 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  Name;         /*
12fc0 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   Name of the tab
12fd0 6c 65 20 6f 72 20 76 69 65 77 20 2a 2f 0a 20 20  le or view */.  
12fe0 43 6f 6c 75 6d 6e 20 2a 61 43 6f 6c 3b 20 20 20  Column *aCol;   
12ff0 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74       /* Informat
13000 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20 63  ion about each c
13010 6f 6c 75 6d 6e 20 2a 2f 0a 23 69 66 64 65 66 20  olumn */.#ifdef 
13020 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4e 4f  SQLITE_ENABLE_NO
13030 52 4d 41 4c 49 5a 45 0a 20 20 48 61 73 68 20 2a  RMALIZE.  Hash *
13040 70 43 6f 6c 48 61 73 68 3b 20 20 20 20 20 20 2f  pColHash;      /
13050 2a 20 41 6c 6c 20 63 6f 6c 75 6d 6e 73 20 69 6e  * All columns in
13060 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f  dexed by name */
13070 0a 23 65 6e 64 69 66 0a 20 20 49 6e 64 65 78 20  .#endif.  Index 
13080 2a 70 49 6e 64 65 78 3b 20 20 20 20 20 20 20 2f  *pIndex;       /
13090 2a 20 4c 69 73 74 20 6f 66 20 53 51 4c 20 69 6e  * List of SQL in
130a0 64 65 78 65 73 20 6f 6e 20 74 68 69 73 20 74 61  dexes on this ta
130b0 62 6c 65 2e 20 2a 2f 0a 20 20 53 65 6c 65 63 74  ble. */.  Select
130c0 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f   *pSelect;     /
130d0 2a 20 4e 55 4c 4c 20 66 6f 72 20 74 61 62 6c 65  * NULL for table
130e0 73 2e 20 20 50 6f 69 6e 74 73 20 74 6f 20 64 65  s.  Points to de
130f0 66 69 6e 69 74 69 6f 6e 20 69 66 20 61 20 76 69  finition if a vi
13100 65 77 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70  ew. */.  FKey *p
13110 46 4b 65 79 3b 20 20 20 20 20 20 20 20 20 2f 2a  FKey;         /*
13120 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20   Linked list of 
13130 61 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79 73  all foreign keys
13140 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65 20 2a   in this table *
13150 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66  /.  char *zColAf
13160 66 3b 20 20 20 20 20 20 20 2f 2a 20 53 74 72 69  f;       /* Stri
13170 6e 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65 20  ng defining the 
13180 61 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63 68  affinity of each
13190 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 45 78 70   column */.  Exp
131a0 72 4c 69 73 74 20 2a 70 43 68 65 63 6b 3b 20 20  rList *pCheck;  
131b0 20 20 2f 2a 20 41 6c 6c 20 43 48 45 43 4b 20 63    /* All CHECK c
131c0 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20  onstraints */.  
131d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
131e0 20 20 20 20 20 2f 2a 20 20 20 2e 2e 2e 20 61 6c       /*   ... al
131f0 73 6f 20 75 73 65 64 20 61 73 20 63 6f 6c 75 6d  so used as colum
13200 6e 20 6e 61 6d 65 20 6c 69 73 74 20 69 6e 20 61  n name list in a
13210 20 56 49 45 57 20 2a 2f 0a 20 20 69 6e 74 20 74   VIEW */.  int t
13220 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  num;            
13230 2f 2a 20 52 6f 6f 74 20 42 54 72 65 65 20 70 61  /* Root BTree pa
13240 67 65 20 66 6f 72 20 74 68 69 73 20 74 61 62 6c  ge for this tabl
13250 65 20 2a 2f 0a 20 20 75 33 32 20 6e 54 61 62 52  e */.  u32 nTabR
13260 65 66 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ef;         /* N
13270 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65 72  umber of pointer
13280 73 20 74 6f 20 74 68 69 73 20 54 61 62 6c 65 20  s to this Table 
13290 2a 2f 0a 20 20 75 33 32 20 74 61 62 46 6c 61 67  */.  u32 tabFlag
132a0 73 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73  s;        /* Mas
132b0 6b 20 6f 66 20 54 46 5f 2a 20 76 61 6c 75 65 73  k of TF_* values
132c0 20 2a 2f 0a 20 20 69 31 36 20 69 50 4b 65 79 3b   */.  i16 iPKey;
132d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 66             /* If
132e0 20 6e 6f 74 20 6e 65 67 61 74 69 76 65 2c 20 75   not negative, u
132f0 73 65 20 61 43 6f 6c 5b 69 50 4b 65 79 5d 20 61  se aCol[iPKey] a
13300 73 20 74 68 65 20 72 6f 77 69 64 20 2a 2f 0a 20  s the rowid */. 
13310 20 69 31 36 20 6e 43 6f 6c 3b 20 20 20 20 20 20   i16 nCol;      
13320 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
13330 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
13340 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f  is table */.  Lo
13350 67 45 73 74 20 6e 52 6f 77 4c 6f 67 45 73 74 3b  gEst nRowLogEst;
13360 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20     /* Estimated 
13370 72 6f 77 73 20 69 6e 20 74 61 62 6c 65 20 2d 20  rows in table - 
13380 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61 74  from sqlite_stat
13390 31 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67  1 table */.  Log
133a0 45 73 74 20 73 7a 54 61 62 52 6f 77 3b 20 20 20  Est szTabRow;   
133b0 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 73    /* Estimated s
133c0 69 7a 65 20 6f 66 20 65 61 63 68 20 74 61 62 6c  ize of each tabl
133d0 65 20 72 6f 77 20 69 6e 20 62 79 74 65 73 20 2a  e row in bytes *
133e0 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
133f0 45 4e 41 42 4c 45 5f 43 4f 53 54 4d 55 4c 54 0a  ENABLE_COSTMULT.
13400 20 20 4c 6f 67 45 73 74 20 63 6f 73 74 4d 75 6c    LogEst costMul
13410 74 3b 20 20 20 20 20 2f 2a 20 43 6f 73 74 20 6d  t;     /* Cost m
13420 75 6c 74 69 70 6c 69 65 72 20 66 6f 72 20 75 73  ultiplier for us
13430 69 6e 67 20 74 68 69 73 20 74 61 62 6c 65 20 2a  ing this table *
13440 2f 0a 23 65 6e 64 69 66 0a 20 20 75 38 20 6b 65  /.#endif.  u8 ke
13450 79 43 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20  yConf;          
13460 2f 2a 20 57 68 61 74 20 74 6f 20 64 6f 20 69 6e  /* What to do in
13470 20 63 61 73 65 20 6f 66 20 75 6e 69 71 75 65 6e   case of uniquen
13480 65 73 73 20 63 6f 6e 66 6c 69 63 74 20 6f 6e 20  ess conflict on 
13490 69 50 4b 65 79 20 2a 2f 0a 23 69 66 6e 64 65 66  iPKey */.#ifndef
134a0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54   SQLITE_OMIT_ALT
134b0 45 52 54 41 42 4c 45 0a 20 20 69 6e 74 20 61 64  ERTABLE.  int ad
134c0 64 43 6f 6c 4f 66 66 73 65 74 3b 20 20 20 20 2f  dColOffset;    /
134d0 2a 20 4f 66 66 73 65 74 20 69 6e 20 43 52 45 41  * Offset in CREA
134e0 54 45 20 54 41 42 4c 45 20 73 74 6d 74 20 74 6f  TE TABLE stmt to
134f0 20 61 64 64 20 61 20 6e 65 77 20 63 6f 6c 75 6d   add a new colum
13500 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e  n */.#endif.#ifn
13510 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
13520 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69  VIRTUALTABLE.  i
13530 6e 74 20 6e 4d 6f 64 75 6c 65 41 72 67 3b 20 20  nt nModuleArg;  
13540 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
13550 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 68   arguments to th
13560 65 20 6d 6f 64 75 6c 65 20 2a 2f 0a 20 20 63 68  e module */.  ch
13570 61 72 20 2a 2a 61 7a 4d 6f 64 75 6c 65 41 72 67  ar **azModuleArg
13580 3b 20 20 2f 2a 20 30 3a 20 6d 6f 64 75 6c 65 20  ;  /* 0: module 
13590 31 3a 20 73 63 68 65 6d 61 20 32 3a 20 76 74 61  1: schema 2: vta
135a0 62 20 6e 61 6d 65 20 33 2e 2e 2e 3a 20 61 72 67  b name 3...: arg
135b0 73 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70  s */.  VTable *p
135c0 56 54 61 62 6c 65 3b 20 20 20 20 20 2f 2a 20 4c  VTable;     /* L
135d0 69 73 74 20 6f 66 20 56 54 61 62 6c 65 20 6f 62  ist of VTable ob
135e0 6a 65 63 74 73 2e 20 2a 2f 0a 23 65 6e 64 69 66  jects. */.#endif
135f0 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54 72 69  .  Trigger *pTri
13600 67 67 65 72 3b 20 20 20 2f 2a 20 4c 69 73 74 20  gger;   /* List 
13610 6f 66 20 74 72 69 67 67 65 72 73 20 73 74 6f 72  of triggers stor
13620 65 64 20 69 6e 20 70 53 63 68 65 6d 61 20 2a 2f  ed in pSchema */
13630 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65  .  Schema *pSche
13640 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63 68 65 6d  ma;     /* Schem
13650 61 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  a that contains 
13660 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
13670 54 61 62 6c 65 20 2a 70 4e 65 78 74 5a 6f 6d 62  Table *pNextZomb
13680 69 65 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 6e 20  ie;  /* Next on 
13690 74 68 65 20 50 61 72 73 65 2e 70 5a 6f 6d 62 69  the Parse.pZombi
136a0 65 54 61 62 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a  eTab list */.};.
136b0 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76  ./*.** Allowed v
136c0 61 6c 75 65 73 20 66 6f 72 20 54 61 62 6c 65 2e  alues for Table.
136d0 74 61 62 46 6c 61 67 73 2e 0a 2a 2a 0a 2a 2a 20  tabFlags..**.** 
136e0 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20 61 70 70  TF_OOOHidden app
136f0 6c 69 65 73 20 74 6f 20 74 61 62 6c 65 73 20 6f  lies to tables o
13700 72 20 76 69 65 77 20 74 68 61 74 20 68 61 76 65  r view that have
13710 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20   hidden columns 
13720 74 68 61 74 20 61 72 65 0a 2a 2a 20 66 6f 6c 6c  that are.** foll
13730 6f 77 65 64 20 62 79 20 6e 6f 6e 2d 68 69 64 64  owed by non-hidd
13740 65 6e 20 63 6f 6c 75 6d 6e 73 2e 20 20 45 78 61  en columns.  Exa
13750 6d 70 6c 65 3a 20 20 22 43 52 45 41 54 45 20 56  mple:  "CREATE V
13760 49 52 54 55 41 4c 20 54 41 42 4c 45 20 78 20 55  IRTUAL TABLE x U
13770 53 49 4e 47 0a 2a 2a 20 76 74 61 62 31 28 61 20  SING.** vtab1(a 
13780 48 49 44 44 45 4e 2c 20 62 29 3b 22 2e 20 20 53  HIDDEN, b);".  S
13790 69 6e 63 65 20 22 62 22 20 69 73 20 61 20 6e 6f  ince "b" is a no
137a0 6e 2d 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 20  n-hidden column 
137b0 62 75 74 20 22 61 22 20 69 73 20 68 69 64 64 65  but "a" is hidde
137c0 6e 2c 0a 2a 2a 20 74 68 65 20 54 46 5f 4f 4f 4f  n,.** the TF_OOO
137d0 48 69 64 64 65 6e 20 61 74 74 72 69 62 75 74 65  Hidden attribute
137e0 20 77 6f 75 6c 64 20 61 70 70 6c 79 20 69 6e 20   would apply in 
137f0 74 68 69 73 20 63 61 73 65 2e 20 20 53 75 63 68  this case.  Such
13800 20 74 61 62 6c 65 73 20 72 65 71 75 69 72 65 0a   tables require.
13810 2a 2a 20 73 70 65 63 69 61 6c 20 68 61 6e 64 6c  ** special handl
13820 69 6e 67 20 64 75 72 69 6e 67 20 49 4e 53 45 52  ing during INSER
13830 54 20 70 72 6f 63 65 73 73 69 6e 67 2e 0a 2a 2f  T processing..*/
13840 0a 23 64 65 66 69 6e 65 20 54 46 5f 52 65 61 64  .#define TF_Read
13850 6f 6e 6c 79 20 20 20 20 20 20 20 20 30 78 30 30  only        0x00
13860 30 31 20 20 20 20 2f 2a 20 52 65 61 64 2d 6f 6e  01    /* Read-on
13870 6c 79 20 73 79 73 74 65 6d 20 74 61 62 6c 65 20  ly system table 
13880 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 45 70  */.#define TF_Ep
13890 68 65 6d 65 72 61 6c 20 20 20 20 20 20 20 30 78  hemeral       0x
138a0 30 30 30 32 20 20 20 20 2f 2a 20 41 6e 20 65 70  0002    /* An ep
138b0 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 2a 2f  hemeral table */
138c0 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73 50  .#define TF_HasP
138d0 72 69 6d 61 72 79 4b 65 79 20 20 20 30 78 30 30  rimaryKey   0x00
138e0 30 34 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 68  04    /* Table h
138f0 61 73 20 61 20 70 72 69 6d 61 72 79 20 6b 65 79  as a primary key
13900 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 41   */.#define TF_A
13910 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 20 20 30  utoincrement   0
13920 78 30 30 30 38 20 20 20 20 2f 2a 20 49 6e 74 65  x0008    /* Inte
13930 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20  ger primary key 
13940 69 73 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74  is autoincrement
13950 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 48   */.#define TF_H
13960 61 73 53 74 61 74 31 20 20 20 20 20 20 20 20 30  asStat1        0
13970 78 30 30 31 30 20 20 20 20 2f 2a 20 6e 52 6f 77  x0010    /* nRow
13980 4c 6f 67 45 73 74 20 73 65 74 20 66 72 6f 6d 20  LogEst set from 
13990 73 71 6c 69 74 65 5f 73 74 61 74 31 20 2a 2f 0a  sqlite_stat1 */.
139a0 23 64 65 66 69 6e 65 20 54 46 5f 57 69 74 68 6f  #define TF_Witho
139b0 75 74 52 6f 77 69 64 20 20 20 20 30 78 30 30 32  utRowid    0x002
139c0 30 20 20 20 20 2f 2a 20 4e 6f 20 72 6f 77 69 64  0    /* No rowid
139d0 2e 20 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69  .  PRIMARY KEY i
139e0 73 20 74 68 65 20 6b 65 79 20 2a 2f 0a 23 64 65  s the key */.#de
139f0 66 69 6e 65 20 54 46 5f 4e 6f 56 69 73 69 62 6c  fine TF_NoVisibl
13a00 65 52 6f 77 69 64 20 20 30 78 30 30 34 30 20 20  eRowid  0x0040  
13a10 20 20 2f 2a 20 4e 6f 20 75 73 65 72 2d 76 69 73    /* No user-vis
13a20 69 62 6c 65 20 22 72 6f 77 69 64 22 20 63 6f 6c  ible "rowid" col
13a30 75 6d 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54  umn */.#define T
13a40 46 5f 4f 4f 4f 48 69 64 64 65 6e 20 20 20 20 20  F_OOOHidden     
13a50 20 20 30 78 30 30 38 30 20 20 20 20 2f 2a 20 4f    0x0080    /* O
13a60 75 74 2d 6f 66 2d 4f 72 64 65 72 20 68 69 64 64  ut-of-Order hidd
13a70 65 6e 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 23 64  en columns */.#d
13a80 65 66 69 6e 65 20 54 46 5f 53 74 61 74 73 55 73  efine TF_StatsUs
13a90 65 64 20 20 20 20 20 20 20 30 78 30 31 30 30 20  ed       0x0100 
13aa0 20 20 20 2f 2a 20 51 75 65 72 79 20 70 6c 61 6e     /* Query plan
13ab0 6e 65 72 20 64 65 63 69 73 69 6f 6e 73 20 61 66  ner decisions af
13ac0 66 65 63 74 65 64 20 62 79 0a 20 20 20 20 20 20  fected by.      
13ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
13af0 2a 20 49 6e 64 65 78 2e 61 69 52 6f 77 4c 6f 67  * Index.aiRowLog
13b00 45 73 74 5b 5d 20 76 61 6c 75 65 73 20 2a 2f 0a  Est[] values */.
13b10 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73 4e 6f  #define TF_HasNo
13b20 74 4e 75 6c 6c 20 20 20 20 20 20 30 78 30 32 30  tNull      0x020
13b30 30 20 20 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73  0    /* Contains
13b40 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72   NOT NULL constr
13b50 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65  aints */.#define
13b60 20 54 46 5f 53 68 61 64 6f 77 20 20 20 20 20 20   TF_Shadow      
13b70 20 20 20 20 30 78 30 34 30 30 20 20 20 20 2f 2a      0x0400    /*
13b80 20 54 72 75 65 20 66 6f 72 20 61 20 73 68 61 64   True for a shad
13b90 6f 77 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 0a  ow table */../*.
13ba0 2a 2a 20 54 65 73 74 20 74 6f 20 73 65 65 20 77  ** Test to see w
13bb0 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 20  hether or not a 
13bc0 74 61 62 6c 65 20 69 73 20 61 20 76 69 72 74 75  table is a virtu
13bd0 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 69 73 20  al table.  This 
13be0 69 73 0a 2a 2a 20 64 6f 6e 65 20 61 73 20 61 20  is.** done as a 
13bf0 6d 61 63 72 6f 20 73 6f 20 74 68 61 74 20 69 74  macro so that it
13c00 20 77 69 6c 6c 20 62 65 20 6f 70 74 69 6d 69 7a   will be optimiz
13c10 65 64 20 6f 75 74 20 77 68 65 6e 20 76 69 72 74  ed out when virt
13c20 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 73 75 70  ual.** table sup
13c30 70 6f 72 74 20 69 73 20 6f 6d 69 74 74 65 64 20  port is omitted 
13c40 66 72 6f 6d 20 74 68 65 20 62 75 69 6c 64 2e 0a  from the build..
13c50 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
13c60 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
13c70 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20 49 73  BLE.#  define Is
13c80 56 69 72 74 75 61 6c 28 58 29 20 20 20 20 20 20  Virtual(X)      
13c90 28 28 58 29 2d 3e 6e 4d 6f 64 75 6c 65 41 72 67  ((X)->nModuleArg
13ca0 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e  ).#else.#  defin
13cb0 65 20 49 73 56 69 72 74 75 61 6c 28 58 29 20 20  e IsVirtual(X)  
13cc0 20 20 20 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a      0.#endif../*
13cd0 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65  .** Macros to de
13ce0 74 65 72 6d 69 6e 65 20 69 66 20 61 20 63 6f 6c  termine if a col
13cf0 75 6d 6e 20 69 73 20 68 69 64 64 65 6e 2e 20 20  umn is hidden.  
13d00 49 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e  IsOrdinaryHidden
13d10 43 6f 6c 75 6d 6e 28 29 0a 2a 2a 20 6f 6e 6c 79  Column().** only
13d20 20 77 6f 72 6b 73 20 66 6f 72 20 6e 6f 6e 2d 76   works for non-v
13d30 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 28 6f  irtual tables (o
13d40 72 64 69 6e 61 72 79 20 74 61 62 6c 65 73 20 61  rdinary tables a
13d50 6e 64 20 76 69 65 77 73 29 20 61 6e 64 20 69 73  nd views) and is
13d60 0a 2a 2a 20 61 6c 77 61 79 73 20 66 61 6c 73 65  .** always false
13d70 20 75 6e 6c 65 73 73 20 53 51 4c 49 54 45 5f 45   unless SQLITE_E
13d80 4e 41 42 4c 45 5f 48 49 44 44 45 4e 5f 43 4f 4c  NABLE_HIDDEN_COL
13d90 55 4d 4e 53 20 69 73 20 64 65 66 69 6e 65 64 2e  UMNS is defined.
13da0 20 20 54 68 65 0a 2a 2a 20 49 73 48 69 64 64 65    The.** IsHidde
13db0 6e 43 6f 6c 75 6d 6e 28 29 20 6d 61 63 72 6f 20  nColumn() macro 
13dc0 69 73 20 67 65 6e 65 72 61 6c 20 70 75 72 70 6f  is general purpo
13dd0 73 65 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  se..*/.#if defin
13de0 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
13df0 5f 48 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53 29  _HIDDEN_COLUMNS)
13e00 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48 69 64  .#  define IsHid
13e10 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 20 20 20  denColumn(X)    
13e20 20 20 20 20 20 28 28 28 58 29 2d 3e 63 6f 6c 46       (((X)->colF
13e30 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f 48  lags & COLFLAG_H
13e40 49 44 44 45 4e 29 21 3d 30 29 0a 23 20 20 64 65  IDDEN)!=0).#  de
13e50 66 69 6e 65 20 49 73 4f 72 64 69 6e 61 72 79 48  fine IsOrdinaryH
13e60 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 28  iddenColumn(X) (
13e70 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26  ((X)->colFlags &
13e80 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29   COLFLAG_HIDDEN)
13e90 21 3d 30 29 0a 23 65 6c 69 66 20 21 64 65 66 69  !=0).#elif !defi
13ea0 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
13eb0 56 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 23 20  VIRTUALTABLE).# 
13ec0 20 64 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e   define IsHidden
13ed0 43 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20 20 20  Column(X)       
13ee0 20 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67    (((X)->colFlag
13ef0 73 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44  s & COLFLAG_HIDD
13f00 45 4e 29 21 3d 30 29 0a 23 20 20 64 65 66 69 6e  EN)!=0).#  defin
13f10 65 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64 64  e IsOrdinaryHidd
13f20 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 30 0a 23 65  enColumn(X) 0.#e
13f30 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49 73  lse.#  define Is
13f40 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20  HiddenColumn(X) 
13f50 20 20 20 20 20 20 20 20 30 0a 23 20 20 64 65 66          0.#  def
13f60 69 6e 65 20 49 73 4f 72 64 69 6e 61 72 79 48 69  ine IsOrdinaryHi
13f70 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 30 0a  ddenColumn(X) 0.
13f80 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20 44 6f 65 73  #endif.../* Does
13f90 20 74 68 65 20 74 61 62 6c 65 20 68 61 76 65 20   the table have 
13fa0 61 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69  a rowid */.#defi
13fb0 6e 65 20 48 61 73 52 6f 77 69 64 28 58 29 20 20  ne HasRowid(X)  
13fc0 20 20 20 28 28 28 58 29 2d 3e 74 61 62 46 6c 61     (((X)->tabFla
13fd0 67 73 20 26 20 54 46 5f 57 69 74 68 6f 75 74 52  gs & TF_WithoutR
13fe0 6f 77 69 64 29 3d 3d 30 29 0a 23 64 65 66 69 6e  owid)==0).#defin
13ff0 65 20 56 69 73 69 62 6c 65 52 6f 77 69 64 28 58  e VisibleRowid(X
14000 29 20 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67  ) (((X)->tabFlag
14010 73 20 26 20 54 46 5f 4e 6f 56 69 73 69 62 6c 65  s & TF_NoVisible
14020 52 6f 77 69 64 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a  Rowid)==0)../*.*
14030 2a 20 45 61 63 68 20 66 6f 72 65 69 67 6e 20 6b  * Each foreign k
14040 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20 69 73  ey constraint is
14050 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
14060 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
14070 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 41  ructure..**.** A
14080 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 69 73 20   foreign key is 
14090 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
140a0 74 77 6f 20 74 61 62 6c 65 73 2e 20 20 54 68 65  two tables.  The
140b0 20 22 66 72 6f 6d 22 20 74 61 62 6c 65 20 69 73   "from" table is
140c0 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 74 68  .** the table th
140d0 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  at contains the 
140e0 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73  REFERENCES claus
140f0 65 20 74 68 61 74 20 63 72 65 61 74 65 73 20 74  e that creates t
14100 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65  he foreign.** ke
14110 79 2e 20 20 54 68 65 20 22 74 6f 22 20 74 61 62  y.  The "to" tab
14120 6c 65 20 69 73 20 74 68 65 20 74 61 62 6c 65 20  le is the table 
14130 74 68 61 74 20 69 73 20 6e 61 6d 65 64 20 69 6e  that is named in
14140 20 74 68 65 20 52 45 46 45 52 45 4e 43 45 53 20   the REFERENCES 
14150 63 6c 61 75 73 65 2e 0a 2a 2a 20 43 6f 6e 73 69  clause..** Consi
14160 64 65 72 20 74 68 69 73 20 65 78 61 6d 70 6c 65  der this example
14170 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41  :.**.**     CREA
14180 54 45 20 54 41 42 4c 45 20 65 78 31 28 0a 2a 2a  TE TABLE ex1(.**
14190 20 20 20 20 20 20 20 61 20 49 4e 54 45 47 45 52         a INTEGER
141a0 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 2a 2a   PRIMARY KEY,.**
141b0 20 20 20 20 20 20 20 62 20 49 4e 54 45 47 45 52         b INTEGER
141c0 20 43 4f 4e 53 54 52 41 49 4e 54 20 66 6b 31 20   CONSTRAINT fk1 
141d0 52 45 46 45 52 45 4e 43 45 53 20 65 78 32 28 78  REFERENCES ex2(x
141e0 29 0a 2a 2a 20 20 20 20 20 29 3b 0a 2a 2a 0a 2a  ).**     );.**.*
141f0 2a 20 46 6f 72 20 66 6f 72 65 69 67 6e 20 6b 65  * For foreign ke
14200 79 20 22 66 6b 31 22 2c 20 74 68 65 20 66 72 6f  y "fk1", the fro
14210 6d 2d 74 61 62 6c 65 20 69 73 20 22 65 78 31 22  m-table is "ex1"
14220 20 61 6e 64 20 74 68 65 20 74 6f 2d 74 61 62 6c   and the to-tabl
14230 65 20 69 73 20 22 65 78 32 22 2e 0a 2a 2a 20 45  e is "ex2"..** E
14240 71 75 69 76 61 6c 65 6e 74 20 6e 61 6d 65 73 3a  quivalent names:
14250 0a 2a 2a 0a 2a 2a 20 20 20 20 20 66 72 6f 6d 2d  .**.**     from-
14260 74 61 62 6c 65 20 3d 3d 20 63 68 69 6c 64 2d 74  table == child-t
14270 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20 74 6f  able.**       to
14280 2d 74 61 62 6c 65 20 3d 3d 20 70 61 72 65 6e 74  -table == parent
14290 2d 74 61 62 6c 65 0a 2a 2a 0a 2a 2a 20 45 61 63  -table.**.** Eac
142a0 68 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61  h REFERENCES cla
142b0 75 73 65 20 67 65 6e 65 72 61 74 65 73 20 61 6e  use generates an
142c0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
142d0 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
142e0 74 75 72 65 0a 2a 2a 20 77 68 69 63 68 20 69 73  ture.** which is
142f0 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65   attached to the
14300 20 66 72 6f 6d 2d 74 61 62 6c 65 2e 20 20 54 68   from-table.  Th
14310 65 20 74 6f 2d 74 61 62 6c 65 20 6e 65 65 64 20  e to-table need 
14320 6e 6f 74 20 65 78 69 73 74 20 77 68 65 6e 0a 2a  not exist when.*
14330 2a 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65  * the from-table
14340 20 69 73 20 63 72 65 61 74 65 64 2e 20 20 54 68   is created.  Th
14350 65 20 65 78 69 73 74 65 6e 63 65 20 6f 66 20 74  e existence of t
14360 68 65 20 74 6f 2d 74 61 62 6c 65 20 69 73 20 6e  he to-table is n
14370 6f 74 20 63 68 65 63 6b 65 64 2e 0a 2a 2a 0a 2a  ot checked..**.*
14380 2a 20 54 68 65 20 6c 69 73 74 20 6f 66 20 61 6c  * The list of al
14390 6c 20 70 61 72 65 6e 74 73 20 66 6f 72 20 63 68  l parents for ch
143a0 69 6c 64 20 54 61 62 6c 65 20 58 20 69 73 20 68  ild Table X is h
143b0 65 6c 64 20 61 74 20 58 2e 70 46 4b 65 79 2e 0a  eld at X.pFKey..
143c0 2a 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20  **.** A list of 
143d0 61 6c 6c 20 63 68 69 6c 64 72 65 6e 20 66 6f 72  all children for
143e0 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 5a   a table named Z
143f0 20 28 77 68 69 63 68 20 6d 69 67 68 74 20 6e 6f   (which might no
14400 74 20 65 76 65 6e 20 65 78 69 73 74 29 0a 2a 2a  t even exist).**
14410 20 69 73 20 68 65 6c 64 20 69 6e 20 53 63 68 65   is held in Sche
14420 6d 61 2e 66 6b 65 79 48 61 73 68 20 77 69 74 68  ma.fkeyHash with
14430 20 61 20 68 61 73 68 20 6b 65 79 20 6f 66 20 5a   a hash key of Z
14440 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 4b 65 79  ..*/.struct FKey
14450 20 7b 0a 20 20 54 61 62 6c 65 20 2a 70 46 72 6f   {.  Table *pFro
14460 6d 3b 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20  m;     /* Table 
14470 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 52  containing the R
14480 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65  EFERENCES clause
14490 20 28 61 6b 61 3a 20 43 68 69 6c 64 29 20 2a 2f   (aka: Child) */
144a0 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 46 72  .  FKey *pNextFr
144b0 6f 6d 3b 20 20 2f 2a 20 4e 65 78 74 20 46 4b 65  om;  /* Next FKe
144c0 79 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  y with the same 
144d0 69 6e 20 70 46 72 6f 6d 2e 20 4e 65 78 74 20 70  in pFrom. Next p
144e0 61 72 65 6e 74 20 6f 66 20 70 46 72 6f 6d 20 2a  arent of pFrom *
144f0 2f 0a 20 20 63 68 61 72 20 2a 7a 54 6f 3b 20 20  /.  char *zTo;  
14500 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
14510 20 74 61 62 6c 65 20 74 68 61 74 20 74 68 65 20   table that the 
14520 6b 65 79 20 70 6f 69 6e 74 73 20 74 6f 20 28 61  key points to (a
14530 6b 61 3a 20 50 61 72 65 6e 74 29 20 2a 2f 0a 20  ka: Parent) */. 
14540 20 46 4b 65 79 20 2a 70 4e 65 78 74 54 6f 3b 20   FKey *pNextTo; 
14550 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 74 68 20     /* Next with 
14560 74 68 65 20 73 61 6d 65 20 7a 54 6f 2e 20 4e 65  the same zTo. Ne
14570 78 74 20 63 68 69 6c 64 20 6f 66 20 7a 54 6f 2e  xt child of zTo.
14580 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 50 72 65   */.  FKey *pPre
14590 76 54 6f 3b 20 20 20 20 2f 2a 20 50 72 65 76 69  vTo;    /* Previ
145a0 6f 75 73 20 77 69 74 68 20 74 68 65 20 73 61 6d  ous with the sam
145b0 65 20 7a 54 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e  e zTo */.  int n
145c0 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Col;         /* 
145d0 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  Number of column
145e0 73 20 69 6e 20 74 68 69 73 20 6b 65 79 20 2a 2f  s in this key */
145f0 0a 20 20 2f 2a 20 45 56 3a 20 52 2d 33 30 33 32  .  /* EV: R-3032
14600 33 2d 32 31 39 31 37 20 2a 2f 0a 20 20 75 38 20  3-21917 */.  u8 
14610 69 73 44 65 66 65 72 72 65 64 3b 20 20 20 20 20  isDeferred;     
14620 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63 6f 6e    /* True if con
14630 73 74 72 61 69 6e 74 20 63 68 65 63 6b 69 6e 67  straint checking
14640 20 69 73 20 64 65 66 65 72 72 65 64 20 74 69 6c   is deferred til
14650 6c 20 43 4f 4d 4d 49 54 20 2a 2f 0a 20 20 75 38  l COMMIT */.  u8
14660 20 61 41 63 74 69 6f 6e 5b 32 5d 3b 20 20 20 20   aAction[2];    
14670 20 20 20 20 2f 2a 20 4f 4e 20 44 45 4c 45 54 45      /* ON DELETE
14680 20 61 6e 64 20 4f 4e 20 55 50 44 41 54 45 20 61   and ON UPDATE a
14690 63 74 69 6f 6e 73 2c 20 72 65 73 70 65 63 74 69  ctions, respecti
146a0 76 65 6c 79 20 2a 2f 0a 20 20 54 72 69 67 67 65  vely */.  Trigge
146b0 72 20 2a 61 70 54 72 69 67 67 65 72 5b 32 5d 3b  r *apTrigger[2];
146c0 2f 2a 20 54 72 69 67 67 65 72 73 20 66 6f 72 20  /* Triggers for 
146d0 61 41 63 74 69 6f 6e 5b 5d 20 61 63 74 69 6f 6e  aAction[] action
146e0 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 73 43  s */.  struct sC
146f0 6f 6c 4d 61 70 20 7b 20 20 20 20 20 20 2f 2a 20  olMap {      /* 
14700 4d 61 70 70 69 6e 67 20 6f 66 20 63 6f 6c 75 6d  Mapping of colum
14710 6e 73 20 69 6e 20 70 46 72 6f 6d 20 74 6f 20 63  ns in pFrom to c
14720 6f 6c 75 6d 6e 73 20 69 6e 20 7a 54 6f 20 2a 2f  olumns in zTo */
14730 0a 20 20 20 20 69 6e 74 20 69 46 72 6f 6d 3b 20  .    int iFrom; 
14740 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e             /* In
14750 64 65 78 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e  dex of column in
14760 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 20 20 63 68   pFrom */.    ch
14770 61 72 20 2a 7a 43 6f 6c 3b 20 20 20 20 20 20 20  ar *zCol;       
14780 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 63      /* Name of c
14790 6f 6c 75 6d 6e 20 69 6e 20 7a 54 6f 2e 20 20 49  olumn in zTo.  I
147a0 66 20 4e 55 4c 4c 20 75 73 65 20 50 52 49 4d 41  f NULL use PRIMA
147b0 52 59 20 4b 45 59 20 2a 2f 0a 20 20 7d 20 61 43  RY KEY */.  } aC
147c0 6f 6c 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20  ol[1];          
147d0 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66    /* One entry f
147e0 6f 72 20 65 61 63 68 20 6f 66 20 6e 43 6f 6c 20  or each of nCol 
147f0 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f  columns */.};../
14800 2a 0a 2a 2a 20 53 51 4c 69 74 65 20 73 75 70 70  *.** SQLite supp
14810 6f 72 74 73 20 6d 61 6e 79 20 64 69 66 66 65 72  orts many differ
14820 65 6e 74 20 77 61 79 73 20 74 6f 20 72 65 73 6f  ent ways to reso
14830 6c 76 65 20 61 20 63 6f 6e 73 74 72 61 69 6e 74  lve a constraint
14840 0a 2a 2a 20 65 72 72 6f 72 2e 20 20 52 4f 4c 4c  .** error.  ROLL
14850 42 41 43 4b 20 70 72 6f 63 65 73 73 69 6e 67 20  BACK processing 
14860 6d 65 61 6e 73 20 74 68 61 74 20 61 20 63 6f 6e  means that a con
14870 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
14880 6e 0a 2a 2a 20 63 61 75 73 65 73 20 74 68 65 20  n.** causes the 
14890 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f  operation in pro
148a0 63 65 73 73 20 74 6f 20 66 61 69 6c 20 61 6e 64  cess to fail and
148b0 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74   for the current
148c0 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20   transaction.** 
148d0 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63  to be rolled bac
148e0 6b 2e 20 20 41 42 4f 52 54 20 70 72 6f 63 65 73  k.  ABORT proces
148f0 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 65 20 6f  sing means the o
14900 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63  peration in proc
14910 65 73 73 0a 2a 2a 20 66 61 69 6c 73 20 61 6e 64  ess.** fails and
14920 20 61 6e 79 20 70 72 69 6f 72 20 63 68 61 6e 67   any prior chang
14930 65 73 20 66 72 6f 6d 20 74 68 61 74 20 6f 6e 65  es from that one
14940 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65 20 62   operation are b
14950 61 63 6b 65 64 20 6f 75 74 2c 0a 2a 2a 20 62 75  acked out,.** bu
14960 74 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  t the transactio
14970 6e 20 69 73 20 6e 6f 74 20 72 6f 6c 6c 65 64 20  n is not rolled 
14980 62 61 63 6b 2e 20 20 46 41 49 4c 20 70 72 6f 63  back.  FAIL proc
14990 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 61  essing means tha
149a0 74 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 74 69  t.** the operati
149b0 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73 20 73  on in progress s
149c0 74 6f 70 73 20 61 6e 64 20 72 65 74 75 72 6e 73  tops and returns
149d0 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 2e 20   an error code. 
149e0 20 42 75 74 20 70 72 69 6f 72 0a 2a 2a 20 63 68   But prior.** ch
149f0 61 6e 67 65 73 20 64 75 65 20 74 6f 20 74 68 65  anges due to the
14a00 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20   same operation 
14a10 61 72 65 20 6e 6f 74 20 62 61 63 6b 65 64 20 6f  are not backed o
14a20 75 74 20 61 6e 64 20 6e 6f 20 72 6f 6c 6c 62 61  ut and no rollba
14a30 63 6b 0a 2a 2a 20 6f 63 63 75 72 73 2e 20 20 49  ck.** occurs.  I
14a40 47 4e 4f 52 45 20 6d 65 61 6e 73 20 74 68 61 74  GNORE means that
14a50 20 74 68 65 20 70 61 72 74 69 63 75 6c 61 72 20   the particular 
14a60 72 6f 77 20 74 68 61 74 20 63 61 75 73 65 64 20  row that caused 
14a70 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a  the constraint.*
14a80 2a 20 65 72 72 6f 72 20 69 73 20 6e 6f 74 20 69  * error is not i
14a90 6e 73 65 72 74 65 64 20 6f 72 20 75 70 64 61 74  nserted or updat
14aa0 65 64 2e 20 20 50 72 6f 63 65 73 73 69 6e 67 20  ed.  Processing 
14ab0 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f  continues and no
14ac0 20 65 72 72 6f 72 0a 2a 2a 20 69 73 20 72 65 74   error.** is ret
14ad0 75 72 6e 65 64 2e 20 20 52 45 50 4c 41 43 45 20  urned.  REPLACE 
14ae0 6d 65 61 6e 73 20 74 68 61 74 20 70 72 65 65 78  means that preex
14af0 69 73 74 69 6e 67 20 64 61 74 61 62 61 73 65 20  isting database 
14b00 72 6f 77 73 20 74 68 61 74 20 63 61 75 73 65 64  rows that caused
14b10 0a 2a 2a 20 61 20 55 4e 49 51 55 45 20 63 6f 6e  .** a UNIQUE con
14b20 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
14b30 6e 20 61 72 65 20 72 65 6d 6f 76 65 64 20 73 6f  n are removed so
14b40 20 74 68 61 74 20 74 68 65 20 6e 65 77 20 69 6e   that the new in
14b50 73 65 72 74 20 6f 72 0a 2a 2a 20 75 70 64 61 74  sert or.** updat
14b60 65 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 20 20  e can proceed.  
14b70 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69  Processing conti
14b80 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f  nues and no erro
14b90 72 20 69 73 20 72 65 70 6f 72 74 65 64 2e 0a 2a  r is reported..*
14ba0 2a 0a 2a 2a 20 52 45 53 54 52 49 43 54 2c 20 53  *.** RESTRICT, S
14bb0 45 54 4e 55 4c 4c 2c 20 61 6e 64 20 43 41 53 43  ETNULL, and CASC
14bc0 41 44 45 20 61 63 74 69 6f 6e 73 20 61 70 70 6c  ADE actions appl
14bd0 79 20 6f 6e 6c 79 20 74 6f 20 66 6f 72 65 69 67  y only to foreig
14be0 6e 20 6b 65 79 73 2e 0a 2a 2a 20 52 45 53 54 52  n keys..** RESTR
14bf0 49 43 54 20 69 73 20 74 68 65 20 73 61 6d 65 20  ICT is the same 
14c00 61 73 20 41 42 4f 52 54 20 66 6f 72 20 49 4d 4d  as ABORT for IMM
14c10 45 44 49 41 54 45 20 66 6f 72 65 69 67 6e 20 6b  EDIATE foreign k
14c20 65 79 73 20 61 6e 64 20 74 68 65 0a 2a 2a 20 73  eys and the.** s
14c30 61 6d 65 20 61 73 20 52 4f 4c 4c 42 41 43 4b 20  ame as ROLLBACK 
14c40 66 6f 72 20 44 45 46 45 52 52 45 44 20 6b 65 79  for DEFERRED key
14c50 73 2e 20 20 53 45 54 4e 55 4c 4c 20 6d 65 61 6e  s.  SETNULL mean
14c60 73 20 74 68 61 74 20 74 68 65 20 66 6f 72 65 69  s that the forei
14c70 67 6e 0a 2a 2a 20 6b 65 79 20 69 73 20 73 65 74  gn.** key is set
14c80 20 74 6f 20 4e 55 4c 4c 2e 20 20 43 41 53 43 41   to NULL.  CASCA
14c90 44 45 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20  DE means that a 
14ca0 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45  DELETE or UPDATE
14cb0 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65 66 65 72   of the.** refer
14cc0 65 6e 63 65 64 20 74 61 62 6c 65 20 72 6f 77 20  enced table row 
14cd0 69 73 20 70 72 6f 70 61 67 61 74 65 64 20 69 6e  is propagated in
14ce0 74 6f 20 74 68 65 20 72 6f 77 20 74 68 61 74 20  to the row that 
14cf0 68 6f 6c 64 73 20 74 68 65 0a 2a 2a 20 66 6f 72  holds the.** for
14d00 65 69 67 6e 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20  eign key..**.** 
14d10 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79  The following sy
14d20 6d 62 6f 6c 69 63 20 76 61 6c 75 65 73 20 61 72  mbolic values ar
14d30 65 20 75 73 65 64 20 74 6f 20 72 65 63 6f 72 64  e used to record
14d40 20 77 68 69 63 68 20 74 79 70 65 0a 2a 2a 20 6f   which type.** o
14d50 66 20 61 63 74 69 6f 6e 20 74 6f 20 74 61 6b 65  f action to take
14d60 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  ..*/.#define OE_
14d70 4e 6f 6e 65 20 20 20 20 20 30 20 20 20 2f 2a 20  None     0   /* 
14d80 54 68 65 72 65 20 69 73 20 6e 6f 20 63 6f 6e 73  There is no cons
14d90 74 72 61 69 6e 74 20 74 6f 20 63 68 65 63 6b 20  traint to check 
14da0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 6f  */.#define OE_Ro
14db0 6c 6c 62 61 63 6b 20 31 20 20 20 2f 2a 20 46 61  llback 1   /* Fa
14dc0 69 6c 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  il the operation
14dd0 20 61 6e 64 20 72 6f 6c 6c 62 61 63 6b 20 74 68   and rollback th
14de0 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f  e transaction */
14df0 0a 23 64 65 66 69 6e 65 20 4f 45 5f 41 62 6f 72  .#define OE_Abor
14e00 74 20 20 20 20 32 20 20 20 2f 2a 20 42 61 63 6b  t    2   /* Back
14e10 20 6f 75 74 20 63 68 61 6e 67 65 73 20 62 75 74   out changes but
14e20 20 64 6f 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 20   do no rollback 
14e30 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23  transaction */.#
14e40 64 65 66 69 6e 65 20 4f 45 5f 46 61 69 6c 20 20  define OE_Fail  
14e50 20 20 20 33 20 20 20 2f 2a 20 53 74 6f 70 20 74     3   /* Stop t
14e60 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 62 75 74  he operation but
14e70 20 6c 65 61 76 65 20 61 6c 6c 20 70 72 69 6f 72   leave all prior
14e80 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66   changes */.#def
14e90 69 6e 65 20 4f 45 5f 49 67 6e 6f 72 65 20 20 20  ine OE_Ignore   
14ea0 34 20 20 20 2f 2a 20 49 67 6e 6f 72 65 20 74 68  4   /* Ignore th
14eb0 65 20 65 72 72 6f 72 2e 20 44 6f 20 6e 6f 74 20  e error. Do not 
14ec0 64 6f 20 74 68 65 20 49 4e 53 45 52 54 20 6f 72  do the INSERT or
14ed0 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69   UPDATE */.#defi
14ee0 6e 65 20 4f 45 5f 52 65 70 6c 61 63 65 20 20 35  ne OE_Replace  5
14ef0 20 20 20 2f 2a 20 44 65 6c 65 74 65 20 65 78 69     /* Delete exi
14f00 73 74 69 6e 67 20 72 65 63 6f 72 64 2c 20 74 68  sting record, th
14f10 65 6e 20 64 6f 20 49 4e 53 45 52 54 20 6f 72 20  en do INSERT or 
14f20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e  UPDATE */.#defin
14f30 65 20 4f 45 5f 55 70 64 61 74 65 20 20 20 36 20  e OE_Update   6 
14f40 20 20 2f 2a 20 50 72 6f 63 65 73 73 20 61 73 20    /* Process as 
14f50 61 20 44 4f 20 55 50 44 41 54 45 20 69 6e 20 61  a DO UPDATE in a
14f60 6e 20 75 70 73 65 72 74 20 2a 2f 0a 23 64 65 66  n upsert */.#def
14f70 69 6e 65 20 4f 45 5f 52 65 73 74 72 69 63 74 20  ine OE_Restrict 
14f80 37 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 20  7   /* OE_Abort 
14f90 66 6f 72 20 49 4d 4d 45 44 49 41 54 45 2c 20 4f  for IMMEDIATE, O
14fa0 45 5f 52 6f 6c 6c 62 61 63 6b 20 66 6f 72 20 44  E_Rollback for D
14fb0 45 46 45 52 52 45 44 20 2a 2f 0a 23 64 65 66 69  EFERRED */.#defi
14fc0 6e 65 20 4f 45 5f 53 65 74 4e 75 6c 6c 20 20 38  ne OE_SetNull  8
14fd0 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20 66 6f     /* Set the fo
14fe0 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75 65 20  reign key value 
14ff0 74 6f 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69  to NULL */.#defi
15000 6e 65 20 4f 45 5f 53 65 74 44 66 6c 74 20 20 39  ne OE_SetDflt  9
15010 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20 66 6f     /* Set the fo
15020 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75 65 20  reign key value 
15030 74 6f 20 69 74 73 20 64 65 66 61 75 6c 74 20 2a  to its default *
15040 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 43 61 73  /.#define OE_Cas
15050 63 61 64 65 20 20 31 30 20 20 2f 2a 20 43 61 73  cade  10  /* Cas
15060 63 61 64 65 20 74 68 65 20 63 68 61 6e 67 65 73  cade the changes
15070 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 44   */.#define OE_D
15080 65 66 61 75 6c 74 20 20 31 31 20 20 2f 2a 20 44  efault  11  /* D
15090 6f 20 77 68 61 74 65 76 65 72 20 74 68 65 20 64  o whatever the d
150a0 65 66 61 75 6c 74 20 61 63 74 69 6f 6e 20 69 73  efault action is
150b0 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69   */.../*.** An i
150c0 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
150d0 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
150e0 72 65 20 69 73 20 70 61 73 73 65 64 20 61 73 20  re is passed as 
150f0 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 61 72 67  the first.** arg
15100 75 6d 65 6e 74 20 74 6f 20 73 71 6c 69 74 65 33  ument to sqlite3
15110 56 64 62 65 4b 65 79 43 6f 6d 70 61 72 65 20 61  VdbeKeyCompare a
15120 6e 64 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f  nd is used to co
15130 6e 74 72 6f 6c 20 74 68 65 0a 2a 2a 20 63 6f 6d  ntrol the.** com
15140 70 61 72 69 73 6f 6e 20 6f 66 20 74 68 65 20 74  parison of the t
15150 77 6f 20 69 6e 64 65 78 20 6b 65 79 73 2e 0a 2a  wo index keys..*
15160 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 61  *.** Note that a
15170 53 6f 72 74 4f 72 64 65 72 5b 5d 20 61 6e 64 20  SortOrder[] and 
15180 61 43 6f 6c 6c 5b 5d 20 68 61 76 65 20 6e 46 69  aColl[] have nFi
15190 65 6c 64 2b 31 20 73 6c 6f 74 73 2e 20 20 54 68  eld+1 slots.  Th
151a0 65 72 65 0a 2a 2a 20 61 72 65 20 6e 46 69 65 6c  ere.** are nFiel
151b0 64 20 73 6c 6f 74 73 20 66 6f 72 20 74 68 65 20  d slots for the 
151c0 63 6f 6c 75 6d 6e 73 20 6f 66 20 61 6e 20 69 6e  columns of an in
151d0 64 65 78 20 74 68 65 6e 20 6f 6e 65 20 65 78 74  dex then one ext
151e0 72 61 20 73 6c 6f 74 0a 2a 2a 20 66 6f 72 20 74  ra slot.** for t
151f0 68 65 20 72 6f 77 69 64 20 61 74 20 74 68 65 20  he rowid at the 
15200 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4b  end..*/.struct K
15210 65 79 49 6e 66 6f 20 7b 0a 20 20 75 33 32 20 6e  eyInfo {.  u32 n
15220 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Ref;           /
15230 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 66 65  * Number of refe
15240 72 65 6e 63 65 73 20 74 6f 20 74 68 69 73 20 4b  rences to this K
15250 65 79 49 6e 66 6f 20 6f 62 6a 65 63 74 20 2a 2f  eyInfo object */
15260 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20  .  u8 enc;      
15270 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65         /* Text e
15280 6e 63 6f 64 69 6e 67 20 2d 20 6f 6e 65 20 6f 66  ncoding - one of
15290 20 74 68 65 20 53 51 4c 49 54 45 5f 55 54 46 2a   the SQLITE_UTF*
152a0 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31 36   values */.  u16
152b0 20 6e 4b 65 79 46 69 65 6c 64 3b 20 20 20 20 20   nKeyField;     
152c0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6b 65   /* Number of ke
152d0 79 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  y columns in the
152e0 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 31 36 20   index */.  u16 
152f0 6e 41 6c 6c 46 69 65 6c 64 3b 20 20 20 20 20 20  nAllField;      
15300 2f 2a 20 54 6f 74 61 6c 20 63 6f 6c 75 6d 6e 73  /* Total columns
15310 2c 20 69 6e 63 6c 75 64 69 6e 67 20 6b 65 79 20  , including key 
15320 70 6c 75 73 20 6f 74 68 65 72 73 20 2a 2f 0a 20  plus others */. 
15330 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20   sqlite3 *db;   
15340 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61       /* The data
15350 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
15360 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72  */.  u8 *aSortOr
15370 64 65 72 3b 20 20 20 20 20 2f 2a 20 53 6f 72 74  der;     /* Sort
15380 20 6f 72 64 65 72 20 66 6f 72 20 65 61 63 68 20   order for each 
15390 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20 20 43 6f 6c  column. */.  Col
153a0 6c 53 65 71 20 2a 61 43 6f 6c 6c 5b 31 5d 3b 20  lSeq *aColl[1]; 
153b0 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65   /* Collating se
153c0 71 75 65 6e 63 65 20 66 6f 72 20 65 61 63 68 20  quence for each 
153d0 74 65 72 6d 20 6f 66 20 74 68 65 20 6b 65 79 20  term of the key 
153e0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69  */.};../*.** Thi
153f0 73 20 6f 62 6a 65 63 74 20 68 6f 6c 64 73 20 61  s object holds a
15400 20 72 65 63 6f 72 64 20 77 68 69 63 68 20 68 61   record which ha
15410 73 20 62 65 65 6e 20 70 61 72 73 65 64 20 6f 75  s been parsed ou
15420 74 20 69 6e 74 6f 20 69 6e 64 69 76 69 64 75 61  t into individua
15430 6c 0a 2a 2a 20 66 69 65 6c 64 73 2c 20 66 6f 72  l.** fields, for
15440 20 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66   the purposes of
15450 20 64 6f 69 6e 67 20 61 20 63 6f 6d 70 61 72 69   doing a compari
15460 73 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 20 72 65 63  son..**.** A rec
15470 6f 72 64 20 69 73 20 61 6e 20 6f 62 6a 65 63 74  ord is an object
15480 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 6f   that contains o
15490 6e 65 20 6f 72 20 6d 6f 72 65 20 66 69 65 6c 64  ne or more field
154a0 73 20 6f 66 20 64 61 74 61 2e 0a 2a 2a 20 52 65  s of data..** Re
154b0 63 6f 72 64 73 20 61 72 65 20 75 73 65 64 20 74  cords are used t
154c0 6f 20 73 74 6f 72 65 20 74 68 65 20 63 6f 6e 74  o store the cont
154d0 65 6e 74 20 6f 66 20 61 20 74 61 62 6c 65 20 72  ent of a table r
154e0 6f 77 20 61 6e 64 20 74 6f 20 73 74 6f 72 65 0a  ow and to store.
154f0 2a 2a 20 74 68 65 20 6b 65 79 20 6f 66 20 61 6e  ** the key of an
15500 20 69 6e 64 65 78 2e 20 20 41 20 62 6c 6f 62 20   index.  A blob 
15510 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20 72 65  encoding of a re
15520 63 6f 72 64 20 69 73 20 63 72 65 61 74 65 64 20  cord is created 
15530 62 79 0a 2a 2a 20 74 68 65 20 4f 50 5f 4d 61 6b  by.** the OP_Mak
15540 65 52 65 63 6f 72 64 20 6f 70 63 6f 64 65 20 6f  eRecord opcode o
15550 66 20 74 68 65 20 56 44 42 45 20 61 6e 64 20 69  f the VDBE and i
15560 73 20 64 69 73 61 73 73 65 6d 62 6c 65 64 20 62  s disassembled b
15570 79 20 74 68 65 0a 2a 2a 20 4f 50 5f 43 6f 6c 75  y the.** OP_Colu
15580 6d 6e 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a  mn opcode..**.**
15590 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
155a0 74 68 69 73 20 6f 62 6a 65 63 74 20 73 65 72 76  this object serv
155b0 65 73 20 61 73 20 61 20 22 6b 65 79 22 20 66 6f  es as a "key" fo
155c0 72 20 64 6f 69 6e 67 20 61 20 73 65 61 72 63 68  r doing a search
155d0 20 6f 6e 0a 2a 2a 20 61 6e 20 69 6e 64 65 78 20   on.** an index 
155e0 62 2b 74 72 65 65 2e 20 54 68 65 20 67 6f 61 6c  b+tree. The goal
155f0 20 6f 66 20 74 68 65 20 73 65 61 72 63 68 20 69   of the search i
15600 73 20 74 6f 20 66 69 6e 64 20 74 68 65 20 65 6e  s to find the en
15610 74 72 79 20 74 68 61 74 0a 2a 2a 20 69 73 20 63  try that.** is c
15620 6c 6f 73 65 64 20 74 6f 20 74 68 65 20 6b 65 79  losed to the key
15630 20 64 65 73 63 72 69 62 65 64 20 62 79 20 74 68   described by th
15640 69 73 20 6f 62 6a 65 63 74 2e 20 20 54 68 69 73  is object.  This
15650 20 6f 62 6a 65 63 74 20 6d 69 67 68 74 20 68 6f   object might ho
15660 6c 64 0a 2a 2a 20 6a 75 73 74 20 61 20 70 72 65  ld.** just a pre
15670 66 69 78 20 6f 66 20 74 68 65 20 6b 65 79 2e 20  fix of the key. 
15680 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 66   The number of f
15690 69 65 6c 64 73 20 69 73 20 67 69 76 65 6e 20 62  ields is given b
156a0 79 0a 2a 2a 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e  y.** pKeyInfo->n
156b0 46 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  Field..**.** The
156c0 20 72 31 20 61 6e 64 20 72 32 20 66 69 65 6c 64   r1 and r2 field
156d0 73 20 61 72 65 20 74 68 65 20 76 61 6c 75 65 73  s are the values
156e0 20 74 6f 20 72 65 74 75 72 6e 20 69 66 20 74 68   to return if th
156f0 69 73 20 6b 65 79 20 69 73 20 6c 65 73 73 20 74  is key is less t
15700 68 61 6e 0a 2a 2a 20 6f 72 20 67 72 65 61 74 65  han.** or greate
15710 72 20 74 68 61 6e 20 61 20 6b 65 79 20 69 6e 20  r than a key in 
15720 74 68 65 20 62 74 72 65 65 2c 20 72 65 73 70 65  the btree, respe
15730 63 74 69 76 65 6c 79 2e 20 20 54 68 65 73 65 20  ctively.  These 
15740 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 0a 2a 2a 20  are normally.** 
15750 2d 31 20 61 6e 64 20 2b 31 20 72 65 73 70 65 63  -1 and +1 respec
15760 74 69 76 65 6c 79 2c 20 62 75 74 20 6d 69 67 68  tively, but migh
15770 74 20 62 65 20 69 6e 76 65 72 74 65 64 20 74 6f  t be inverted to
15780 20 2b 31 20 61 6e 64 20 2d 31 20 69 66 20 74 68   +1 and -1 if th
15790 65 20 62 2d 74 72 65 65 0a 2a 2a 20 69 73 20 69  e b-tree.** is i
157a0 6e 20 44 45 53 43 20 6f 72 64 65 72 2e 0a 2a 2a  n DESC order..**
157b0 0a 2a 2a 20 54 68 65 20 6b 65 79 20 63 6f 6d 70  .** The key comp
157c0 61 72 69 73 6f 6e 20 66 75 6e 63 74 69 6f 6e 73  arison functions
157d0 20 61 63 74 75 61 6c 6c 79 20 72 65 74 75 72 6e   actually return
157e0 20 64 65 66 61 75 6c 74 5f 72 63 20 77 68 65 6e   default_rc when
157f0 20 74 68 65 79 20 66 69 6e 64 0a 2a 2a 20 61 6e   they find.** an
15800 20 65 71 75 61 6c 73 20 63 6f 6d 70 61 72 69 73   equals comparis
15810 6f 6e 2e 20 20 64 65 66 61 75 6c 74 5f 72 63 20  on.  default_rc 
15820 63 61 6e 20 62 65 20 2d 31 2c 20 30 2c 20 6f 72  can be -1, 0, or
15830 20 2b 31 2e 20 20 49 66 20 74 68 65 72 65 20 61   +1.  If there a
15840 72 65 0a 2a 2a 20 6d 75 6c 74 69 70 6c 65 20 65  re.** multiple e
15850 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20 62 2d  ntries in the b-
15860 74 72 65 65 20 77 69 74 68 20 74 68 65 20 73 61  tree with the sa
15870 6d 65 20 6b 65 79 20 28 77 68 65 6e 20 6f 6e 6c  me key (when onl
15880 79 20 6c 6f 6f 6b 69 6e 67 0a 2a 2a 20 61 74 20  y looking.** at 
15890 74 68 65 20 66 69 72 73 74 20 70 4b 65 79 49 6e  the first pKeyIn
158a0 66 6f 2d 3e 6e 46 69 65 6c 64 73 2c 29 20 74 68  fo->nFields,) th
158b0 65 6e 20 64 65 66 61 75 6c 74 5f 72 63 20 63 61  en default_rc ca
158c0 6e 20 62 65 20 73 65 74 20 74 6f 20 2d 31 20 74  n be set to -1 t
158d0 6f 0a 2a 2a 20 63 61 75 73 65 20 74 68 65 20 73  o.** cause the s
158e0 65 61 72 63 68 20 74 6f 20 66 69 6e 64 20 74 68  earch to find th
158f0 65 20 6c 61 73 74 20 6d 61 74 63 68 2c 20 6f 72  e last match, or
15900 20 2b 31 20 74 6f 20 63 61 75 73 65 20 74 68 65   +1 to cause the
15910 20 73 65 61 72 63 68 20 74 6f 0a 2a 2a 20 66 69   search to.** fi
15920 6e 64 20 74 68 65 20 66 69 72 73 74 20 6d 61 74  nd the first mat
15930 63 68 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6b 65  ch..**.** The ke
15940 79 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66 75 6e  y comparison fun
15950 63 74 69 6f 6e 73 20 77 69 6c 6c 20 73 65 74 20  ctions will set 
15960 65 71 53 65 65 6e 20 74 6f 20 74 72 75 65 20 69  eqSeen to true i
15970 66 20 74 68 65 79 20 65 76 65 72 0a 2a 2a 20 67  f they ever.** g
15980 65 74 20 61 6e 64 20 65 71 75 61 6c 20 72 65 73  et and equal res
15990 75 6c 74 73 20 77 68 65 6e 20 63 6f 6d 70 61 72  ults when compar
159a0 69 6e 67 20 74 68 69 73 20 73 74 72 75 63 74 75  ing this structu
159b0 72 65 20 74 6f 20 61 20 62 2d 74 72 65 65 20 72  re to a b-tree r
159c0 65 63 6f 72 64 2e 0a 2a 2a 20 57 68 65 6e 20 64  ecord..** When d
159d0 65 66 61 75 6c 74 5f 72 63 21 3d 30 2c 20 74 68  efault_rc!=0, th
159e0 65 20 73 65 61 72 63 68 20 6d 69 67 68 74 20 65  e search might e
159f0 6e 64 20 75 70 20 6f 6e 20 74 68 65 20 72 65 63  nd up on the rec
15a00 6f 72 64 20 69 6d 6d 65 64 69 61 74 65 6c 79 0a  ord immediately.
15a10 2a 2a 20 62 65 66 6f 72 65 20 74 68 65 20 66 69  ** before the fi
15a20 72 73 74 20 6d 61 74 63 68 20 6f 72 20 69 6d 6d  rst match or imm
15a30 65 64 69 61 74 65 6c 79 20 61 66 74 65 72 20 74  ediately after t
15a40 68 65 20 6c 61 73 74 20 6d 61 74 63 68 2e 20 20  he last match.  
15a50 54 68 65 0a 2a 2a 20 65 71 53 65 65 6e 20 66 69  The.** eqSeen fi
15a60 65 6c 64 20 77 69 6c 6c 20 69 6e 64 69 63 61 74  eld will indicat
15a70 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  e whether or not
15a80 20 61 6e 20 65 78 61 63 74 20 6d 61 74 63 68 20   an exact match 
15a90 65 78 69 73 74 73 20 69 6e 20 74 68 65 0a 2a 2a  exists in the.**
15aa0 20 62 2d 74 72 65 65 2e 0a 2a 2f 0a 73 74 72 75   b-tree..*/.stru
15ab0 63 74 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  ct UnpackedRecor
15ac0 64 20 7b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70  d {.  KeyInfo *p
15ad0 4b 65 79 49 6e 66 6f 3b 20 20 2f 2a 20 43 6f 6c  KeyInfo;  /* Col
15ae0 6c 61 74 69 6f 6e 20 61 6e 64 20 73 6f 72 74 2d  lation and sort-
15af0 6f 72 64 65 72 20 69 6e 66 6f 72 6d 61 74 69 6f  order informatio
15b00 6e 20 2a 2f 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d  n */.  Mem *aMem
15b10 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61  ;          /* Va
15b20 6c 75 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 46  lues */.  u16 nF
15b30 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20 2f 2a  ield;         /*
15b40 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69   Number of entri
15b50 65 73 20 69 6e 20 61 70 4d 65 6d 5b 5d 20 2a 2f  es in apMem[] */
15b60 0a 20 20 69 38 20 64 65 66 61 75 6c 74 5f 72 63  .  i8 default_rc
15b70 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70 61 72  ;      /* Compar
15b80 69 73 6f 6e 20 72 65 73 75 6c 74 20 69 66 20 6b  ison result if k
15b90 65 79 73 20 61 72 65 20 65 71 75 61 6c 20 2a 2f  eys are equal */
15ba0 0a 20 20 75 38 20 65 72 72 43 6f 64 65 3b 20 20  .  u8 errCode;  
15bb0 20 20 20 20 20 20 20 2f 2a 20 45 72 72 6f 72 20         /* Error 
15bc0 64 65 74 65 63 74 65 64 20 62 79 20 78 52 65 63  detected by xRec
15bd0 6f 72 64 43 6f 6d 70 61 72 65 20 28 43 4f 52 52  ordCompare (CORR
15be0 55 50 54 20 6f 72 20 4e 4f 4d 45 4d 29 20 2a 2f  UPT or NOMEM) */
15bf0 0a 20 20 69 38 20 72 31 3b 20 20 20 20 20 20 20  .  i8 r1;       
15c00 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
15c10 74 6f 20 72 65 74 75 72 6e 20 69 66 20 28 6c 68  to return if (lh
15c20 73 20 3c 20 72 68 73 29 20 2a 2f 0a 20 20 69 38  s < rhs) */.  i8
15c30 20 72 32 3b 20 20 20 20 20 20 20 20 20 20 20 20   r2;            
15c40 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65    /* Value to re
15c50 74 75 72 6e 20 69 66 20 28 6c 68 73 20 3e 20 72  turn if (lhs > r
15c60 68 73 29 20 2a 2f 0a 20 20 75 38 20 65 71 53 65  hs) */.  u8 eqSe
15c70 65 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  en;          /* 
15c80 54 72 75 65 20 69 66 20 61 6e 20 65 71 75 61 6c  True if an equal
15c90 69 74 79 20 63 6f 6d 70 61 72 69 73 6f 6e 20 68  ity comparison h
15ca0 61 73 20 62 65 65 6e 20 73 65 65 6e 20 2a 2f 0a  as been seen */.
15cb0 7d 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20  };.../*.** Each 
15cc0 53 51 4c 20 69 6e 64 65 78 20 69 73 20 72 65 70  SQL index is rep
15cd0 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f  resented in memo
15ce0 72 79 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74  ry by an.** inst
15cf0 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
15d00 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e  owing structure.
15d10 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6c 75 6d  .**.** The colum
15d20 6e 73 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  ns of the table 
15d30 74 68 61 74 20 61 72 65 20 74 6f 20 62 65 20 69  that are to be i
15d40 6e 64 65 78 65 64 20 61 72 65 20 64 65 73 63 72  ndexed are descr
15d50 69 62 65 64 0a 2a 2a 20 62 79 20 74 68 65 20 61  ibed.** by the a
15d60 69 43 6f 6c 75 6d 6e 5b 5d 20 66 69 65 6c 64 20  iColumn[] field 
15d70 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
15d80 65 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c  e.  For example,
15d90 20 73 75 70 70 6f 73 65 0a 2a 2a 20 77 65 20 68   suppose.** we h
15da0 61 76 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  ave the followin
15db0 67 20 74 61 62 6c 65 20 61 6e 64 20 69 6e 64 65  g table and inde
15dc0 78 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45  x:.**.**     CRE
15dd0 41 54 45 20 54 41 42 4c 45 20 45 78 31 28 63 31  ATE TABLE Ex1(c1
15de0 20 69 6e 74 2c 20 63 32 20 69 6e 74 2c 20 63 33   int, c2 int, c3
15df0 20 74 65 78 74 29 3b 0a 2a 2a 20 20 20 20 20 43   text);.**     C
15e00 52 45 41 54 45 20 49 4e 44 45 58 20 45 78 32 20  REATE INDEX Ex2 
15e10 4f 4e 20 45 78 31 28 63 33 2c 63 31 29 3b 0a 2a  ON Ex1(c3,c1);.*
15e20 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 54 61 62 6c  *.** In the Tabl
15e30 65 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63  e structure desc
15e40 72 69 62 69 6e 67 20 45 78 31 2c 20 6e 43 6f 6c  ribing Ex1, nCol
15e50 3d 3d 33 20 62 65 63 61 75 73 65 20 74 68 65 72  ==3 because ther
15e60 65 20 61 72 65 0a 2a 2a 20 74 68 72 65 65 20 63  e are.** three c
15e70 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61  olumns in the ta
15e80 62 6c 65 2e 20 20 49 6e 20 74 68 65 20 49 6e 64  ble.  In the Ind
15e90 65 78 20 73 74 72 75 63 74 75 72 65 20 64 65 73  ex structure des
15ea0 63 72 69 62 69 6e 67 0a 2a 2a 20 45 78 32 2c 20  cribing.** Ex2, 
15eb0 6e 43 6f 6c 75 6d 6e 3d 3d 32 20 73 69 6e 63 65  nColumn==2 since
15ec0 20 32 20 6f 66 20 74 68 65 20 33 20 63 6f 6c 75   2 of the 3 colu
15ed0 6d 6e 73 20 6f 66 20 45 78 31 20 61 72 65 20 69  mns of Ex1 are i
15ee0 6e 64 65 78 65 64 2e 0a 2a 2a 20 54 68 65 20 76  ndexed..** The v
15ef0 61 6c 75 65 20 6f 66 20 61 69 43 6f 6c 75 6d 6e  alue of aiColumn
15f00 20 69 73 20 7b 32 2c 20 30 7d 2e 20 20 61 69 43   is {2, 0}.  aiC
15f10 6f 6c 75 6d 6e 5b 30 5d 3d 3d 32 20 62 65 63 61  olumn[0]==2 beca
15f20 75 73 65 20 74 68 65 0a 2a 2a 20 66 69 72 73 74  use the.** first
15f30 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e   column to be in
15f40 64 65 78 65 64 20 28 63 33 29 20 68 61 73 20 61  dexed (c3) has a
15f50 6e 20 69 6e 64 65 78 20 6f 66 20 32 20 69 6e 20  n index of 2 in 
15f60 45 78 31 2e 61 43 6f 6c 5b 5d 2e 0a 2a 2a 20 54  Ex1.aCol[]..** T
15f70 68 65 20 73 65 63 6f 6e 64 20 63 6f 6c 75 6d 6e  he second column
15f80 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20 28   to be indexed (
15f90 63 31 29 20 68 61 73 20 61 6e 20 69 6e 64 65 78  c1) has an index
15fa0 20 6f 66 20 30 20 69 6e 0a 2a 2a 20 45 78 31 2e   of 0 in.** Ex1.
15fb0 61 43 6f 6c 5b 5d 2c 20 68 65 6e 63 65 20 45 78  aCol[], hence Ex
15fc0 32 2e 61 69 43 6f 6c 75 6d 6e 5b 31 5d 3d 3d 30  2.aiColumn[1]==0
15fd0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 6e 64 65  ..**.** The Inde
15fe0 78 2e 6f 6e 45 72 72 6f 72 20 66 69 65 6c 64 20  x.onError field 
15ff0 64 65 74 65 72 6d 69 6e 65 73 20 77 68 65 74 68  determines wheth
16000 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 69 6e  er or not the in
16010 64 65 78 65 64 20 63 6f 6c 75 6d 6e 73 0a 2a 2a  dexed columns.**
16020 20 6d 75 73 74 20 62 65 20 75 6e 69 71 75 65 20   must be unique 
16030 61 6e 64 20 77 68 61 74 20 74 6f 20 64 6f 20 69  and what to do i
16040 66 20 74 68 65 79 20 61 72 65 20 6e 6f 74 2e 20  f they are not. 
16050 20 57 68 65 6e 20 49 6e 64 65 78 2e 6f 6e 45 72   When Index.onEr
16060 72 6f 72 3d 4f 45 5f 4e 6f 6e 65 2c 0a 2a 2a 20  ror=OE_None,.** 
16070 69 74 20 6d 65 61 6e 73 20 74 68 69 73 20 69 73  it means this is
16080 20 6e 6f 74 20 61 20 75 6e 69 71 75 65 20 69 6e   not a unique in
16090 64 65 78 2e 20 20 4f 74 68 65 72 77 69 73 65 20  dex.  Otherwise 
160a0 69 74 20 69 73 20 61 20 75 6e 69 71 75 65 20 69  it is a unique i
160b0 6e 64 65 78 0a 2a 2a 20 61 6e 64 20 74 68 65 20  ndex.** and the 
160c0 76 61 6c 75 65 20 6f 66 20 49 6e 64 65 78 2e 6f  value of Index.o
160d0 6e 45 72 72 6f 72 20 69 6e 64 69 63 61 74 65 20  nError indicate 
160e0 74 68 65 20 77 68 69 63 68 20 63 6f 6e 66 6c 69  the which confli
160f0 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 0a 2a 2a  ct resolution.**
16100 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20 65 6d   algorithm to em
16110 70 6c 6f 79 20 77 68 65 6e 65 76 65 72 20 61 6e  ploy whenever an
16120 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65   attempt is made
16130 20 74 6f 20 69 6e 73 65 72 74 20 61 20 6e 6f 6e   to insert a non
16140 2d 75 6e 69 71 75 65 0a 2a 2a 20 65 6c 65 6d 65  -unique.** eleme
16150 6e 74 2e 0a 2a 2a 0a 2a 2a 20 57 68 69 6c 65 20  nt..**.** While 
16160 70 61 72 73 69 6e 67 20 61 20 43 52 45 41 54 45  parsing a CREATE
16170 20 54 41 42 4c 45 20 6f 72 20 43 52 45 41 54 45   TABLE or CREATE
16180 20 49 4e 44 45 58 20 73 74 61 74 65 6d 65 6e 74   INDEX statement
16190 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20   in order to.** 
161a0 67 65 6e 65 72 61 74 65 20 56 44 42 45 20 63 6f  generate VDBE co
161b0 64 65 20 28 61 73 20 6f 70 70 6f 73 65 64 20 74  de (as opposed t
161c0 6f 20 70 61 72 73 69 6e 67 20 6f 6e 65 20 72 65  o parsing one re
161d0 61 64 20 66 72 6f 6d 20 61 6e 20 73 71 6c 69 74  ad from an sqlit
161e0 65 5f 6d 61 73 74 65 72 0a 2a 2a 20 74 61 62 6c  e_master.** tabl
161f0 65 20 61 73 20 70 61 72 74 20 6f 66 20 70 61 72  e as part of par
16200 73 69 6e 67 20 61 6e 20 65 78 69 73 74 69 6e 67  sing an existing
16210 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
16220 29 2c 20 74 72 61 6e 73 69 65 6e 74 20 69 6e 73  ), transient ins
16230 74 61 6e 63 65 73 0a 2a 2a 20 6f 66 20 74 68 69  tances.** of thi
16240 73 20 73 74 72 75 63 74 75 72 65 20 6d 61 79 20  s structure may 
16250 62 65 20 63 72 65 61 74 65 64 2e 20 49 6e 20 74  be created. In t
16260 68 69 73 20 63 61 73 65 20 74 68 65 20 49 6e 64  his case the Ind
16270 65 78 2e 74 6e 75 6d 20 76 61 72 69 61 62 6c 65  ex.tnum variable
16280 20 69 73 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73   is.** used to s
16290 74 6f 72 65 20 74 68 65 20 61 64 64 72 65 73 73  tore the address
162a0 20 6f 66 20 61 20 56 44 42 45 20 69 6e 73 74 72   of a VDBE instr
162b0 75 63 74 69 6f 6e 2c 20 6e 6f 74 20 61 20 64 61  uction, not a da
162c0 74 61 62 61 73 65 20 70 61 67 65 0a 2a 2a 20 6e  tabase page.** n
162d0 75 6d 62 65 72 20 28 69 74 20 63 61 6e 6e 6f 74  umber (it cannot
162e0 20 2d 20 74 68 65 20 64 61 74 61 62 61 73 65 20   - the database 
162f0 70 61 67 65 20 69 73 20 6e 6f 74 20 61 6c 6c 6f  page is not allo
16300 63 61 74 65 64 20 75 6e 74 69 6c 20 74 68 65 20  cated until the 
16310 56 44 42 45 0a 2a 2a 20 70 72 6f 67 72 61 6d 20  VDBE.** program 
16320 69 73 20 65 78 65 63 75 74 65 64 29 2e 20 53 65  is executed). Se
16330 65 20 63 6f 6e 76 65 72 74 54 6f 57 69 74 68 6f  e convertToWitho
16340 75 74 52 6f 77 69 64 54 61 62 6c 65 28 29 20 66  utRowidTable() f
16350 6f 72 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 73  or details..*/.s
16360 74 72 75 63 74 20 49 6e 64 65 78 20 7b 0a 20 20  truct Index {.  
16370 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
16380 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
16390 20 6f 66 20 74 68 69 73 20 69 6e 64 65 78 20 2a   of this index *
163a0 2f 0a 20 20 69 31 36 20 2a 61 69 43 6f 6c 75 6d  /.  i16 *aiColum
163b0 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  n;           /* 
163c0 57 68 69 63 68 20 63 6f 6c 75 6d 6e 73 20 61 72  Which columns ar
163d0 65 20 75 73 65 64 20 62 79 20 74 68 69 73 20 69  e used by this i
163e0 6e 64 65 78 2e 20 20 31 73 74 20 69 73 20 30 20  ndex.  1st is 0 
163f0 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 2a 61 69 52  */.  LogEst *aiR
16400 6f 77 4c 6f 67 45 73 74 3b 20 20 20 20 20 2f 2a  owLogEst;     /*
16410 20 46 72 6f 6d 20 41 4e 41 4c 59 5a 45 3a 20 45   From ANALYZE: E
16420 73 74 2e 20 72 6f 77 73 20 73 65 6c 65 63 74 65  st. rows selecte
16430 64 20 62 79 20 65 61 63 68 20 63 6f 6c 75 6d 6e  d by each column
16440 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61   */.  Table *pTa
16450 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ble;           /
16460 2a 20 54 68 65 20 53 51 4c 20 74 61 62 6c 65 20  * The SQL table 
16470 62 65 69 6e 67 20 69 6e 64 65 78 65 64 20 2a 2f  being indexed */
16480 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66  .  char *zColAff
16490 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53  ;           /* S
164a0 74 72 69 6e 67 20 64 65 66 69 6e 69 6e 67 20 74  tring defining t
164b0 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20 65  he affinity of e
164c0 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  ach column */.  
164d0 49 6e 64 65 78 20 2a 70 4e 65 78 74 3b 20 20 20  Index *pNext;   
164e0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
164f0 6e 65 78 74 20 69 6e 64 65 78 20 61 73 73 6f 63  next index assoc
16500 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20 73  iated with the s
16510 61 6d 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 53  ame table */.  S
16520 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20  chema *pSchema; 
16530 20 20 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d          /* Schem
16540 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 69  a containing thi
16550 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20  s index */.  u8 
16560 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20  *aSortOrder;    
16570 20 20 20 20 20 20 2f 2a 20 66 6f 72 20 65 61 63        /* for eac
16580 68 20 63 6f 6c 75 6d 6e 3a 20 54 72 75 65 3d 3d  h column: True==
16590 44 45 53 43 2c 20 46 61 6c 73 65 3d 3d 41 53 43  DESC, False==ASC
165a0 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
165b0 20 2a 2a 61 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f   **azColl;     /
165c0 2a 20 41 72 72 61 79 20 6f 66 20 63 6f 6c 6c 61  * Array of colla
165d0 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 6e 61  tion sequence na
165e0 6d 65 73 20 66 6f 72 20 69 6e 64 65 78 20 2a 2f  mes for index */
165f0 0a 20 20 45 78 70 72 20 2a 70 50 61 72 74 49 64  .  Expr *pPartId
16600 78 57 68 65 72 65 3b 20 20 20 20 20 2f 2a 20 57  xWhere;     /* W
16610 48 45 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20  HERE clause for 
16620 70 61 72 74 69 61 6c 20 69 6e 64 69 63 65 73 20  partial indices 
16630 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 61  */.  ExprList *a
16640 43 6f 6c 45 78 70 72 3b 20 20 20 20 20 20 2f 2a  ColExpr;      /*
16650 20 43 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73 69   Column expressi
16660 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75  ons */.  int tnu
16670 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
16680 20 20 2f 2a 20 44 42 20 50 61 67 65 20 63 6f 6e    /* DB Page con
16690 74 61 69 6e 69 6e 67 20 72 6f 6f 74 20 6f 66 20  taining root of 
166a0 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20  this index */.  
166b0 4c 6f 67 45 73 74 20 73 7a 49 64 78 52 6f 77 3b  LogEst szIdxRow;
166c0 20 20 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69           /* Esti
166d0 6d 61 74 65 64 20 61 76 65 72 61 67 65 20 72 6f  mated average ro
166e0 77 20 73 69 7a 65 20 69 6e 20 62 79 74 65 73 20  w size in bytes 
166f0 2a 2f 0a 20 20 75 31 36 20 6e 4b 65 79 43 6f 6c  */.  u16 nKeyCol
16700 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
16710 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
16720 6e 73 20 66 6f 72 6d 69 6e 67 20 74 68 65 20 6b  ns forming the k
16730 65 79 20 2a 2f 0a 20 20 75 31 36 20 6e 43 6f 6c  ey */.  u16 nCol
16740 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  umn;            
16750 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f   /* Number of co
16760 6c 75 6d 6e 73 20 73 74 6f 72 65 64 20 69 6e 20  lumns stored in 
16770 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75  the index */.  u
16780 38 20 6f 6e 45 72 72 6f 72 3b 20 20 20 20 20 20  8 onError;      
16790 20 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f 41 62          /* OE_Ab
167a0 6f 72 74 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c 20  ort, OE_Ignore, 
167b0 4f 45 5f 52 65 70 6c 61 63 65 2c 20 6f 72 20 4f  OE_Replace, or O
167c0 45 5f 4e 6f 6e 65 20 2a 2f 0a 20 20 75 6e 73 69  E_None */.  unsi
167d0 67 6e 65 64 20 69 64 78 54 79 70 65 3a 32 3b 20  gned idxType:2; 
167e0 20 20 20 20 20 2f 2a 20 31 3d 3d 55 4e 49 51 55       /* 1==UNIQU
167f0 45 2c 20 32 3d 3d 50 52 49 4d 41 52 59 20 4b 45  E, 2==PRIMARY KE
16800 59 2c 20 30 3d 3d 43 52 45 41 54 45 20 49 4e 44  Y, 0==CREATE IND
16810 45 58 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  EX */.  unsigned
16820 20 62 55 6e 6f 72 64 65 72 65 64 3a 31 3b 20 20   bUnordered:1;  
16830 20 2f 2a 20 55 73 65 20 74 68 69 73 20 69 6e 64   /* Use this ind
16840 65 78 20 66 6f 72 20 3d 3d 20 6f 72 20 49 4e 20  ex for == or IN 
16850 71 75 65 72 69 65 73 20 6f 6e 6c 79 20 2a 2f 0a  queries only */.
16860 20 20 75 6e 73 69 67 6e 65 64 20 75 6e 69 71 4e    unsigned uniqN
16870 6f 74 4e 75 6c 6c 3a 31 3b 20 20 2f 2a 20 54 72  otNull:1;  /* Tr
16880 75 65 20 69 66 20 55 4e 49 51 55 45 20 61 6e 64  ue if UNIQUE and
16890 20 4e 4f 54 20 4e 55 4c 4c 20 66 6f 72 20 61 6c   NOT NULL for al
168a0 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 75  l columns */.  u
168b0 6e 73 69 67 6e 65 64 20 69 73 52 65 73 69 7a 65  nsigned isResize
168c0 64 3a 31 3b 20 20 20 20 2f 2a 20 54 72 75 65 20  d:1;    /* True 
168d0 69 66 20 72 65 73 69 7a 65 49 6e 64 65 78 4f 62  if resizeIndexOb
168e0 6a 65 63 74 28 29 20 68 61 73 20 62 65 65 6e 20  ject() has been 
168f0 63 61 6c 6c 65 64 20 2a 2f 0a 20 20 75 6e 73 69  called */.  unsi
16900 67 6e 65 64 20 69 73 43 6f 76 65 72 69 6e 67 3a  gned isCovering:
16910 31 3b 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20  1;   /* True if 
16920 74 68 69 73 20 69 73 20 61 20 63 6f 76 65 72 69  this is a coveri
16930 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 6e  ng index */.  un
16940 73 69 67 6e 65 64 20 6e 6f 53 6b 69 70 53 63 61  signed noSkipSca
16950 6e 3a 31 3b 20 20 20 2f 2a 20 44 6f 20 6e 6f 74  n:1;   /* Do not
16960 20 74 72 79 20 74 6f 20 75 73 65 20 73 6b 69 70   try to use skip
16970 2d 73 63 61 6e 20 69 66 20 74 72 75 65 20 2a 2f  -scan if true */
16980 0a 20 20 75 6e 73 69 67 6e 65 64 20 68 61 73 53  .  unsigned hasS
16990 74 61 74 31 3a 31 3b 20 20 20 20 20 2f 2a 20 61  tat1:1;     /* a
169a0 69 52 6f 77 4c 6f 67 45 73 74 20 76 61 6c 75 65  iRowLogEst value
169b0 73 20 63 6f 6d 65 20 66 72 6f 6d 20 73 71 6c 69  s come from sqli
169c0 74 65 5f 73 74 61 74 31 20 2a 2f 0a 20 20 75 6e  te_stat1 */.  un
169d0 73 69 67 6e 65 64 20 62 4e 6f 51 75 65 72 79 3a  signed bNoQuery:
169e0 31 3b 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74  1;     /* Do not
169f0 20 75 73 65 20 74 68 69 73 20 69 6e 64 65 78 20   use this index 
16a00 74 6f 20 6f 70 74 69 6d 69 7a 65 20 71 75 65 72  to optimize quer
16a10 69 65 73 20 2a 2f 0a 23 69 66 64 65 66 20 53 51  ies */.#ifdef SQ
16a20 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
16a30 33 5f 4f 52 5f 53 54 41 54 34 0a 20 20 69 6e 74  3_OR_STAT4.  int
16a40 20 6e 53 61 6d 70 6c 65 3b 20 20 20 20 20 20 20   nSample;       
16a50 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
16a60 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20 61  of elements in a
16a70 53 61 6d 70 6c 65 5b 5d 20 2a 2f 0a 20 20 69 6e  Sample[] */.  in
16a80 74 20 6e 53 61 6d 70 6c 65 43 6f 6c 3b 20 20 20  t nSampleCol;   
16a90 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
16aa0 66 20 49 6e 64 65 78 53 61 6d 70 6c 65 2e 61 6e  f IndexSample.an
16ab0 45 71 5b 5d 20 61 6e 64 20 73 6f 20 6f 6e 20 2a  Eq[] and so on *
16ac0 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 41 76  /.  tRowcnt *aAv
16ad0 67 45 71 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  gEq;         /* 
16ae0 41 76 65 72 61 67 65 20 6e 45 71 20 76 61 6c 75  Average nEq valu
16af0 65 73 20 66 6f 72 20 6b 65 79 73 20 6e 6f 74 20  es for keys not 
16b00 69 6e 20 61 53 61 6d 70 6c 65 20 2a 2f 0a 20 20  in aSample */.  
16b10 49 6e 64 65 78 53 61 6d 70 6c 65 20 2a 61 53 61  IndexSample *aSa
16b20 6d 70 6c 65 3b 20 20 20 20 2f 2a 20 53 61 6d 70  mple;    /* Samp
16b30 6c 65 73 20 6f 66 20 74 68 65 20 6c 65 66 74 2d  les of the left-
16b40 6d 6f 73 74 20 6b 65 79 20 2a 2f 0a 20 20 74 52  most key */.  tR
16b50 6f 77 63 6e 74 20 2a 61 69 52 6f 77 45 73 74 3b  owcnt *aiRowEst;
16b60 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f         /* Non-lo
16b70 67 61 72 69 74 68 6d 69 63 20 73 74 61 74 31 20  garithmic stat1 
16b80 64 61 74 61 20 66 6f 72 20 74 68 69 73 20 69 6e  data for this in
16b90 64 65 78 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74  dex */.  tRowcnt
16ba0 20 6e 52 6f 77 45 73 74 30 3b 20 20 20 20 20 20   nRowEst0;      
16bb0 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74    /* Non-logarit
16bc0 68 6d 69 63 20 6e 75 6d 62 65 72 20 6f 66 20 72  hmic number of r
16bd0 6f 77 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78  ows in the index
16be0 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 42 69 74   */.#endif.  Bit
16bf0 6d 61 73 6b 20 63 6f 6c 4e 6f 74 49 64 78 65 64  mask colNotIdxed
16c00 3b 20 20 20 20 20 2f 2a 20 30 20 66 6f 72 20 75  ;     /* 0 for u
16c10 6e 69 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 73  nindexed columns
16c20 20 69 6e 20 70 54 61 62 20 2a 2f 0a 7d 3b 0a 0a   in pTab */.};..
16c30 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61  /*.** Allowed va
16c40 6c 75 65 73 20 66 6f 72 20 49 6e 64 65 78 2e 69  lues for Index.i
16c50 64 78 54 79 70 65 0a 2a 2f 0a 23 64 65 66 69 6e  dxType.*/.#defin
16c60 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45  e SQLITE_IDXTYPE
16c70 5f 41 50 50 44 45 46 20 20 20 20 20 20 30 20 20  _APPDEF      0  
16c80 20 2f 2a 20 43 72 65 61 74 65 64 20 75 73 69 6e   /* Created usin
16c90 67 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a  g CREATE INDEX *
16ca0 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
16cb0 5f 49 44 58 54 59 50 45 5f 55 4e 49 51 55 45 20  _IDXTYPE_UNIQUE 
16cc0 20 20 20 20 20 31 20 20 20 2f 2a 20 49 6d 70 6c       1   /* Impl
16cd0 65 6d 65 6e 74 73 20 61 20 55 4e 49 51 55 45 20  ements a UNIQUE 
16ce0 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64  constraint */.#d
16cf0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58  efine SQLITE_IDX
16d00 54 59 50 45 5f 50 52 49 4d 41 52 59 4b 45 59 20  TYPE_PRIMARYKEY 
16d10 20 32 20 20 20 2f 2a 20 49 73 20 74 68 65 20 50   2   /* Is the P
16d20 52 49 4d 41 52 59 20 4b 45 59 20 66 6f 72 20 74  RIMARY KEY for t
16d30 68 65 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 20  he table */../* 
16d40 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 69  Return true if i
16d50 6e 64 65 78 20 58 20 69 73 20 61 20 50 52 49 4d  ndex X is a PRIM
16d60 41 52 59 20 4b 45 59 20 69 6e 64 65 78 20 2a 2f  ARY KEY index */
16d70 0a 23 64 65 66 69 6e 65 20 49 73 50 72 69 6d 61  .#define IsPrima
16d80 72 79 4b 65 79 49 6e 64 65 78 28 58 29 20 20 28  ryKeyIndex(X)  (
16d90 28 58 29 2d 3e 69 64 78 54 79 70 65 3d 3d 53 51  (X)->idxType==SQ
16da0 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 50 52 49  LITE_IDXTYPE_PRI
16db0 4d 41 52 59 4b 45 59 29 0a 0a 2f 2a 20 52 65 74  MARYKEY)../* Ret
16dc0 75 72 6e 20 74 72 75 65 20 69 66 20 69 6e 64 65  urn true if inde
16dd0 78 20 58 20 69 73 20 61 20 55 4e 49 51 55 45 20  x X is a UNIQUE 
16de0 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65  index */.#define
16df0 20 49 73 55 6e 69 71 75 65 49 6e 64 65 78 28 58   IsUniqueIndex(X
16e00 29 20 20 20 20 20 20 28 28 58 29 2d 3e 6f 6e 45  )      ((X)->onE
16e10 72 72 6f 72 21 3d 4f 45 5f 4e 6f 6e 65 29 0a 0a  rror!=OE_None)..
16e20 2f 2a 20 54 68 65 20 49 6e 64 65 78 2e 61 69 43  /* The Index.aiC
16e30 6f 6c 75 6d 6e 5b 5d 20 76 61 6c 75 65 73 20 61  olumn[] values a
16e40 72 65 20 6e 6f 72 6d 61 6c 6c 79 20 70 6f 73 69  re normally posi
16e50 74 69 76 65 20 69 6e 74 65 67 65 72 2e 20 20 42  tive integer.  B
16e60 75 74 0a 2a 2a 20 74 68 65 72 65 20 61 72 65 20  ut.** there are 
16e70 73 6f 6d 65 20 6e 65 67 61 74 69 76 65 20 76 61  some negative va
16e80 6c 75 65 73 20 74 68 61 74 20 68 61 76 65 20 73  lues that have s
16e90 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67 3a 0a  pecial meaning:.
16ea0 2a 2f 0a 23 64 65 66 69 6e 65 20 58 4e 5f 52 4f  */.#define XN_RO
16eb0 57 49 44 20 20 20 20 20 28 2d 31 29 20 20 20 20  WID     (-1)    
16ec0 20 2f 2a 20 49 6e 64 65 78 65 64 20 63 6f 6c 75   /* Indexed colu
16ed0 6d 6e 20 69 73 20 74 68 65 20 72 6f 77 69 64 20  mn is the rowid 
16ee0 2a 2f 0a 23 64 65 66 69 6e 65 20 58 4e 5f 45 58  */.#define XN_EX
16ef0 50 52 20 20 20 20 20 20 28 2d 32 29 20 20 20 20  PR      (-2)    
16f00 20 2f 2a 20 49 6e 64 65 78 65 64 20 63 6f 6c 75   /* Indexed colu
16f10 6d 6e 20 69 73 20 61 6e 20 65 78 70 72 65 73 73  mn is an express
16f20 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61  ion */../*.** Ea
16f30 63 68 20 73 61 6d 70 6c 65 20 73 74 6f 72 65 64  ch sample stored
16f40 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73   in the sqlite_s
16f50 74 61 74 33 20 74 61 62 6c 65 20 69 73 20 72 65  tat3 table is re
16f60 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d  presented in mem
16f70 6f 72 79 0a 2a 2a 20 75 73 69 6e 67 20 61 20 73  ory.** using a s
16f80 74 72 75 63 74 75 72 65 20 6f 66 20 74 68 69 73  tructure of this
16f90 20 74 79 70 65 2e 20 20 53 65 65 20 64 6f 63 75   type.  See docu
16fa0 6d 65 6e 74 61 74 69 6f 6e 20 61 74 20 74 68 65  mentation at the
16fb0 20 74 6f 70 20 6f 66 20 74 68 65 0a 2a 2a 20 61   top of the.** a
16fc0 6e 61 6c 79 7a 65 2e 63 20 73 6f 75 72 63 65 20  nalyze.c source 
16fd0 66 69 6c 65 20 66 6f 72 20 61 64 64 69 74 69 6f  file for additio
16fe0 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
16ff0 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64 65 78  .*/.struct Index
17000 53 61 6d 70 6c 65 20 7b 0a 20 20 76 6f 69 64 20  Sample {.  void 
17010 2a 70 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  *p;          /* 
17020 50 6f 69 6e 74 65 72 20 74 6f 20 73 61 6d 70 6c  Pointer to sampl
17030 65 64 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  ed record */.  i
17040 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20  nt n;           
17050 20 2f 2a 20 53 69 7a 65 20 6f 66 20 72 65 63 6f   /* Size of reco
17060 72 64 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20  rd in bytes */. 
17070 20 74 52 6f 77 63 6e 74 20 2a 61 6e 45 71 3b 20   tRowcnt *anEq; 
17080 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65     /* Est. numbe
17090 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20  r of rows where 
170a0 74 68 65 20 6b 65 79 20 65 71 75 61 6c 73 20 74  the key equals t
170b0 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20  his sample */.  
170c0 74 52 6f 77 63 6e 74 20 2a 61 6e 4c 74 3b 20 20  tRowcnt *anLt;  
170d0 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72    /* Est. number
170e0 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20 6b   of rows where k
170f0 65 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  ey is less than 
17100 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20  this sample */. 
17110 20 74 52 6f 77 63 6e 74 20 2a 61 6e 44 4c 74 3b   tRowcnt *anDLt;
17120 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65     /* Est. numbe
17130 72 20 6f 66 20 64 69 73 74 69 6e 63 74 20 6b 65  r of distinct ke
17140 79 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69  ys less than thi
17150 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a  s sample */.};..
17160 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76  /*.** Possible v
17170 61 6c 75 65 73 20 74 6f 20 75 73 65 20 77 69 74  alues to use wit
17180 68 69 6e 20 74 68 65 20 66 6c 61 67 73 20 61 72  hin the flags ar
17190 67 75 6d 65 6e 74 20 74 6f 20 73 71 6c 69 74 65  gument to sqlite
171a0 33 47 65 74 54 6f 6b 65 6e 28 29 2e 0a 2a 2f 0a  3GetToken()..*/.
171b0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54  #define SQLITE_T
171c0 4f 4b 45 4e 5f 51 55 4f 54 45 44 20 20 20 20 30  OKEN_QUOTED    0
171d0 78 31 20 2f 2a 20 54 6f 6b 65 6e 20 69 73 20 61  x1 /* Token is a
171e0 20 71 75 6f 74 65 64 20 69 64 65 6e 74 69 66 69   quoted identifi
171f0 65 72 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  er. */.#define S
17200 51 4c 49 54 45 5f 54 4f 4b 45 4e 5f 4b 45 59 57  QLITE_TOKEN_KEYW
17210 4f 52 44 20 20 20 30 78 32 20 2f 2a 20 54 6f 6b  ORD   0x2 /* Tok
17220 65 6e 20 69 73 20 61 20 6b 65 79 77 6f 72 64 2e  en is a keyword.
17230 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20   */../*.** Each 
17240 74 6f 6b 65 6e 20 63 6f 6d 69 6e 67 20 6f 75 74  token coming out
17250 20 6f 66 20 74 68 65 20 6c 65 78 65 72 20 69 73   of the lexer is
17260 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a   an instance of.
17270 2a 2a 20 74 68 69 73 20 73 74 72 75 63 74 75 72  ** this structur
17280 65 2e 20 20 54 6f 6b 65 6e 73 20 61 72 65 20 61  e.  Tokens are a
17290 6c 73 6f 20 75 73 65 64 20 61 73 20 70 61 72 74  lso used as part
172a0 20 6f 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f   of an expressio
172b0 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 65 6d  n..**.** The mem
172c0 6f 72 79 20 74 68 61 74 20 22 7a 22 20 70 6f 69  ory that "z" poi
172d0 6e 74 73 20 74 6f 20 69 73 20 6f 77 6e 65 64 20  nts to is owned 
172e0 62 79 20 6f 74 68 65 72 20 6f 62 6a 65 63 74 73  by other objects
172f0 2e 20 20 54 61 6b 65 20 63 61 72 65 0a 2a 2a 20  .  Take care.** 
17300 74 68 61 74 20 74 68 65 20 6f 77 6e 65 72 20 6f  that the owner o
17310 66 20 74 68 65 20 22 7a 22 20 73 74 72 69 6e 67  f the "z" string
17320 20 64 6f 65 73 20 6e 6f 74 20 64 65 61 6c 6c 6f   does not deallo
17330 63 61 74 65 20 74 68 65 20 73 74 72 69 6e 67 20  cate the string 
17340 62 65 66 6f 72 65 0a 2a 2a 20 74 68 65 20 54 6f  before.** the To
17350 6b 65 6e 20 67 6f 65 73 20 6f 75 74 20 6f 66 20  ken goes out of 
17360 73 63 6f 70 65 21 20 20 56 65 72 79 20 6f 66 74  scope!  Very oft
17370 65 6e 2c 20 74 68 65 20 22 7a 22 20 70 6f 69 6e  en, the "z" poin
17380 74 73 20 74 6f 20 73 6f 6d 65 20 70 6c 61 63 65  ts to some place
17390 0a 2a 2a 20 69 6e 20 74 68 65 20 6d 69 64 64 6c  .** in the middl
173a0 65 20 6f 66 20 74 68 65 20 50 61 72 73 65 2e 7a  e of the Parse.z
173b0 53 71 6c 20 74 65 78 74 2e 20 20 42 75 74 20 69  Sql text.  But i
173c0 74 20 6d 69 67 68 74 20 61 6c 73 6f 20 70 6f 69  t might also poi
173d0 6e 74 20 74 6f 20 61 0a 2a 2a 20 73 74 61 74 69  nt to a.** stati
173e0 63 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a 73 74 72  c string..*/.str
173f0 75 63 74 20 54 6f 6b 65 6e 20 7b 0a 20 20 63 6f  uct Token {.  co
17400 6e 73 74 20 63 68 61 72 20 2a 7a 3b 20 20 20 20  nst char *z;    
17410 20 2f 2a 20 54 65 78 74 20 6f 66 20 74 68 65 20   /* Text of the 
17420 74 6f 6b 65 6e 2e 20 20 4e 6f 74 20 4e 55 4c 4c  token.  Not NULL
17430 2d 74 65 72 6d 69 6e 61 74 65 64 21 20 2a 2f 0a  -terminated! */.
17440 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6e    unsigned int n
17450 3b 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f  ;    /* Number o
17460 66 20 63 68 61 72 61 63 74 65 72 73 20 69 6e 20  f characters in 
17470 74 68 69 73 20 74 6f 6b 65 6e 20 2a 2f 0a 7d 3b  this token */.};
17480 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
17490 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75  nce of this stru
174a0 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 69  cture contains i
174b0 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65  nformation neede
174c0 64 20 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a  d to generate.**
174d0 20 63 6f 64 65 20 66 6f 72 20 61 20 53 45 4c 45   code for a SELE
174e0 43 54 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  CT that contains
174f0 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
17500 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 45  ions..**.** If E
17510 78 70 72 2e 6f 70 3d 3d 54 4b 5f 41 47 47 5f 43  xpr.op==TK_AGG_C
17520 4f 4c 55 4d 4e 20 6f 72 20 54 4b 5f 41 47 47 5f  OLUMN or TK_AGG_
17530 46 55 4e 43 54 49 4f 4e 20 74 68 65 6e 20 45 78  FUNCTION then Ex
17540 70 72 2e 70 41 67 67 49 6e 66 6f 20 69 73 20 61  pr.pAggInfo is a
17550 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  .** pointer to t
17560 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20  his structure.  
17570 54 68 65 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e  The Expr.iColumn
17580 20 66 69 65 6c 64 20 69 73 20 74 68 65 20 69 6e   field is the in
17590 64 65 78 20 69 6e 0a 2a 2a 20 41 67 67 49 6e 66  dex in.** AggInf
175a0 6f 2e 61 43 6f 6c 5b 5d 20 6f 72 20 41 67 67 49  o.aCol[] or AggI
175b0 6e 66 6f 2e 61 46 75 6e 63 5b 5d 20 6f 66 20 69  nfo.aFunc[] of i
175c0 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65  nformation neede
175d0 64 20 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a  d to generate.**
175e0 20 63 6f 64 65 20 66 6f 72 20 74 68 61 74 20 6e   code for that n
175f0 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 67 67 49 6e  ode..**.** AggIn
17600 66 6f 2e 70 47 72 6f 75 70 42 79 20 61 6e 64 20  fo.pGroupBy and 
17610 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63 2e 70 45  AggInfo.aFunc.pE
17620 78 70 72 20 70 6f 69 6e 74 20 74 6f 20 66 69 65  xpr point to fie
17630 6c 64 73 20 77 69 74 68 69 6e 20 74 68 65 0a 2a  lds within the.*
17640 2a 20 6f 72 69 67 69 6e 61 6c 20 53 65 6c 65 63  * original Selec
17650 74 20 73 74 72 75 63 74 75 72 65 20 74 68 61 74  t structure that
17660 20 64 65 73 63 72 69 62 65 73 20 74 68 65 20 53   describes the S
17670 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
17680 20 20 54 68 65 73 65 0a 2a 2a 20 66 69 65 6c 64    These.** field
17690 73 20 64 6f 20 6e 6f 74 20 6e 65 65 64 20 74 6f  s do not need to
176a0 20 62 65 20 66 72 65 65 64 20 77 68 65 6e 20 64   be freed when d
176b0 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74 68 65 20  eallocating the 
176c0 41 67 67 49 6e 66 6f 20 73 74 72 75 63 74 75 72  AggInfo structur
176d0 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 67 67  e..*/.struct Agg
176e0 49 6e 66 6f 20 7b 0a 20 20 75 38 20 64 69 72 65  Info {.  u8 dire
176f0 63 74 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20  ctMode;         
17700 20 2f 2a 20 44 69 72 65 63 74 20 72 65 6e 64 65   /* Direct rende
17710 72 69 6e 67 20 6d 6f 64 65 20 6d 65 61 6e 73 20  ring mode means 
17720 74 61 6b 65 20 64 61 74 61 20 64 69 72 65 63 74  take data direct
17730 6c 79 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ly.             
17740 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
17750 66 72 6f 6d 20 73 6f 75 72 63 65 20 74 61 62 6c  from source tabl
17760 65 73 20 72 61 74 68 65 72 20 74 68 61 6e 20 66  es rather than f
17770 72 6f 6d 20 61 63 63 75 6d 75 6c 61 74 6f 72 73  rom accumulators
17780 20 2a 2f 0a 20 20 75 38 20 75 73 65 53 6f 72 74   */.  u8 useSort
17790 69 6e 67 49 64 78 3b 20 20 20 20 20 20 20 2f 2a  ingIdx;       /*
177a0 20 49 6e 20 64 69 72 65 63 74 20 6d 6f 64 65 2c   In direct mode,
177b0 20 72 65 66 65 72 65 6e 63 65 20 74 68 65 20 73   reference the s
177c0 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 72 61 74  orting index rat
177d0 68 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 20  her.            
177e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
177f0 20 74 68 61 6e 20 74 68 65 20 73 6f 75 72 63 65   than the source
17800 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20   table */.  int 
17810 73 6f 72 74 69 6e 67 49 64 78 3b 20 20 20 20 20  sortingIdx;     
17820 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75      /* Cursor nu
17830 6d 62 65 72 20 6f 66 20 74 68 65 20 73 6f 72 74  mber of the sort
17840 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69  ing index */.  i
17850 6e 74 20 73 6f 72 74 69 6e 67 49 64 78 50 54 61  nt sortingIdxPTa
17860 62 3b 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72  b;     /* Cursor
17870 20 6e 75 6d 62 65 72 20 6f 66 20 70 73 65 75 64   number of pseud
17880 6f 2d 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74  o-table */.  int
17890 20 6e 53 6f 72 74 69 6e 67 43 6f 6c 75 6d 6e 3b   nSortingColumn;
178a0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
178b0 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
178c0 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a   sorting index *
178d0 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 67 2c 20 6d  /.  int mnReg, m
178e0 78 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 52  xReg;       /* R
178f0 61 6e 67 65 20 6f 66 20 72 65 67 69 73 74 65 72  ange of register
17900 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20  s allocated for 
17910 61 43 6f 6c 20 61 6e 64 20 61 46 75 6e 63 20 2a  aCol and aFunc *
17920 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47  /.  ExprList *pG
17930 72 6f 75 70 42 79 3b 20 20 20 20 20 2f 2a 20 54  roupBy;     /* T
17940 68 65 20 67 72 6f 75 70 20 62 79 20 63 6c 61 75  he group by clau
17950 73 65 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 41  se */.  struct A
17960 67 67 49 6e 66 6f 5f 63 6f 6c 20 7b 20 20 20 20  ggInfo_col {    
17970 2f 2a 20 46 6f 72 20 65 61 63 68 20 63 6f 6c 75  /* For each colu
17980 6d 6e 20 75 73 65 64 20 69 6e 20 73 6f 75 72 63  mn used in sourc
17990 65 20 74 61 62 6c 65 73 20 2a 2f 0a 20 20 20 20  e tables */.    
179a0 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20  Table *pTab;    
179b0 20 20 20 20 20 20 20 20 20 2f 2a 20 53 6f 75 72           /* Sour
179c0 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  ce table */.    
179d0 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20  int iTable;     
179e0 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73           /* Curs
179f0 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65  or number of the
17a00 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f   source table */
17a10 0a 20 20 20 20 69 6e 74 20 69 43 6f 6c 75 6d 6e  .    int iColumn
17a20 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
17a30 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 77   Column number w
17a40 69 74 68 69 6e 20 74 68 65 20 73 6f 75 72 63 65  ithin the source
17a50 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e   table */.    in
17a60 74 20 69 53 6f 72 74 65 72 43 6f 6c 75 6d 6e 3b  t iSorterColumn;
17a70 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e         /* Column
17a80 20 6e 75 6d 62 65 72 20 69 6e 20 74 68 65 20 73   number in the s
17a90 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a  orting index */.
17aa0 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20      int iMem;   
17ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
17ac0 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20  Memory location 
17ad0 74 68 61 74 20 61 63 74 73 20 61 73 20 61 63 63  that acts as acc
17ae0 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20  umulator */.    
17af0 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20  Expr *pExpr;    
17b00 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
17b10 6f 72 69 67 69 6e 61 6c 20 65 78 70 72 65 73 73  original express
17b20 69 6f 6e 20 2a 2f 0a 20 20 7d 20 2a 61 43 6f 6c  ion */.  } *aCol
17b30 3b 0a 20 20 69 6e 74 20 6e 43 6f 6c 75 6d 6e 3b  ;.  int nColumn;
17b40 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
17b50 75 6d 62 65 72 20 6f 66 20 75 73 65 64 20 65 6e  umber of used en
17b60 74 72 69 65 73 20 69 6e 20 61 43 6f 6c 5b 5d 20  tries in aCol[] 
17b70 2a 2f 0a 20 20 69 6e 74 20 6e 41 63 63 75 6d 75  */.  int nAccumu
17b80 6c 61 74 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20  lator;       /* 
17b90 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  Number of column
17ba0 73 20 74 68 61 74 20 73 68 6f 77 20 74 68 72 6f  s that show thro
17bb0 75 67 68 20 74 6f 20 74 68 65 20 6f 75 74 70 75  ugh to the outpu
17bc0 74 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t..             
17bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
17be0 41 64 64 69 74 69 6f 6e 61 6c 20 63 6f 6c 75 6d  Additional colum
17bf0 6e 73 20 61 72 65 20 75 73 65 64 20 6f 6e 6c 79  ns are used only
17c00 20 61 73 20 70 61 72 61 6d 65 74 65 72 73 20 74   as parameters t
17c10 6f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  o.              
17c20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 61              ** a
17c30 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
17c40 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 41  ns */.  struct A
17c50 67 67 49 6e 66 6f 5f 66 75 6e 63 20 7b 20 20 20  ggInfo_func {   
17c60 2f 2a 20 46 6f 72 20 65 61 63 68 20 61 67 67 72  /* For each aggr
17c70 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 2a  egate function *
17c80 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70  /.    Expr *pExp
17c90 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  r;             /
17ca0 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 65 6e 63  * Expression enc
17cb0 6f 64 69 6e 67 20 74 68 65 20 66 75 6e 63 74 69  oding the functi
17cc0 6f 6e 20 2a 2f 0a 20 20 20 20 46 75 6e 63 44 65  on */.    FuncDe
17cd0 66 20 2a 70 46 75 6e 63 3b 20 20 20 20 20 20 20  f *pFunc;       
17ce0 20 20 20 2f 2a 20 54 68 65 20 61 67 67 72 65 67     /* The aggreg
17cf0 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 69 6d 70  ate function imp
17d00 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20  lementation */. 
17d10 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20     int iMem;    
17d20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
17d30 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74  emory location t
17d40 68 61 74 20 61 63 74 73 20 61 73 20 61 63 63 75  hat acts as accu
17d50 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 69  mulator */.    i
17d60 6e 74 20 69 44 69 73 74 69 6e 63 74 3b 20 20 20  nt iDistinct;   
17d70 20 20 20 20 20 20 20 20 2f 2a 20 45 70 68 65 6d          /* Ephem
17d80 65 72 61 6c 20 74 61 62 6c 65 20 75 73 65 64 20  eral table used 
17d90 74 6f 20 65 6e 66 6f 72 63 65 20 44 49 53 54 49  to enforce DISTI
17da0 4e 43 54 20 2a 2f 0a 20 20 7d 20 2a 61 46 75 6e  NCT */.  } *aFun
17db0 63 3b 0a 20 20 69 6e 74 20 6e 46 75 6e 63 3b 20  c;.  int nFunc; 
17dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
17dd0 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65  Number of entrie
17de0 73 20 69 6e 20 61 46 75 6e 63 5b 5d 20 2a 2f 0a  s in aFunc[] */.
17df0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61  };../*.** The da
17e00 74 61 74 79 70 65 20 79 6e 56 61 72 20 69 73 20  tatype ynVar is 
17e10 61 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  a signed integer
17e20 2c 20 65 69 74 68 65 72 20 31 36 2d 62 69 74 20  , either 16-bit 
17e30 6f 72 20 33 32 2d 62 69 74 2e 0a 2a 2a 20 55 73  or 32-bit..** Us
17e40 75 61 6c 6c 79 20 69 74 20 69 73 20 31 36 2d 62  ually it is 16-b
17e50 69 74 73 2e 20 20 42 75 74 20 69 66 20 53 51 4c  its.  But if SQL
17e60 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45  ITE_MAX_VARIABLE
17e70 5f 4e 55 4d 42 45 52 20 69 73 20 67 72 65 61 74  _NUMBER is great
17e80 65 72 0a 2a 2a 20 74 68 61 6e 20 33 32 37 36 37  er.** than 32767
17e90 20 77 65 20 68 61 76 65 20 74 6f 20 6d 61 6b 65   we have to make
17ea0 20 69 74 20 33 32 2d 62 69 74 2e 20 20 31 36 2d   it 32-bit.  16-
17eb0 62 69 74 20 69 73 20 70 72 65 66 65 72 72 65 64  bit is preferred
17ec0 20 62 65 63 61 75 73 65 0a 2a 2a 20 69 74 20 75   because.** it u
17ed0 73 65 73 20 6c 65 73 73 20 6d 65 6d 6f 72 79 20  ses less memory 
17ee0 69 6e 20 74 68 65 20 45 78 70 72 20 6f 62 6a 65  in the Expr obje
17ef0 63 74 2c 20 77 68 69 63 68 20 69 73 20 61 20 62  ct, which is a b
17f00 69 67 20 6d 65 6d 6f 72 79 20 75 73 65 72 0a 2a  ig memory user.*
17f10 2a 20 69 6e 20 73 79 73 74 65 6d 73 20 77 69 74  * in systems wit
17f20 68 20 6c 6f 74 73 20 6f 66 20 70 72 65 70 61 72  h lots of prepar
17f30 65 64 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 20  ed statements.  
17f40 41 6e 64 20 66 65 77 20 61 70 70 6c 69 63 61 74  And few applicat
17f50 69 6f 6e 73 0a 2a 2a 20 6e 65 65 64 20 6d 6f 72  ions.** need mor
17f60 65 20 74 68 61 6e 20 61 62 6f 75 74 20 31 30 20  e than about 10 
17f70 6f 72 20 32 30 20 76 61 72 69 61 62 6c 65 73 2e  or 20 variables.
17f80 20 20 42 75 74 20 73 6f 6d 65 20 65 78 74 72 65    But some extre
17f90 6d 65 20 75 73 65 72 73 20 77 61 6e 74 0a 2a 2a  me users want.**
17fa0 20 74 6f 20 68 61 76 65 20 70 72 65 70 61 72 65   to have prepare
17fb0 64 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74  d statements wit
17fc0 68 20 6f 76 65 72 20 33 32 37 36 37 20 76 61 72  h over 32767 var
17fd0 69 61 62 6c 65 73 2c 20 61 6e 64 20 66 6f 72 20  iables, and for 
17fe0 74 68 65 6d 0a 2a 2a 20 74 68 65 20 6f 70 74 69  them.** the opti
17ff0 6f 6e 20 69 73 20 61 76 61 69 6c 61 62 6c 65 20  on is available 
18000 28 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  (at compile-time
18010 29 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45  )..*/.#if SQLITE
18020 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55  _MAX_VARIABLE_NU
18030 4d 42 45 52 3c 3d 33 32 37 36 37 0a 74 79 70 65  MBER<=32767.type
18040 64 65 66 20 69 31 36 20 79 6e 56 61 72 3b 0a 23  def i16 ynVar;.#
18050 65 6c 73 65 0a 74 79 70 65 64 65 66 20 69 6e 74  else.typedef int
18060 20 79 6e 56 61 72 3b 0a 23 65 6e 64 69 66 0a 0a   ynVar;.#endif..
18070 2f 2a 0a 2a 2a 20 45 61 63 68 20 6e 6f 64 65 20  /*.** Each node 
18080 6f 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  of an expression
18090 20 69 6e 20 74 68 65 20 70 61 72 73 65 20 74 72   in the parse tr
180a0 65 65 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63  ee is an instanc
180b0 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72  e.** of this str
180c0 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 45 78  ucture..**.** Ex
180d0 70 72 2e 6f 70 20 69 73 20 74 68 65 20 6f 70 63  pr.op is the opc
180e0 6f 64 65 2e 20 54 68 65 20 69 6e 74 65 67 65 72  ode. The integer
180f0 20 70 61 72 73 65 72 20 74 6f 6b 65 6e 20 63 6f   parser token co
18100 64 65 73 20 61 72 65 20 72 65 75 73 65 64 0a 2a  des are reused.*
18110 2a 20 61 73 20 6f 70 63 6f 64 65 73 20 68 65 72  * as opcodes her
18120 65 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20  e. For example, 
18130 74 68 65 20 70 61 72 73 65 72 20 64 65 66 69 6e  the parser defin
18140 65 73 20 54 4b 5f 47 45 20 74 6f 20 62 65 20 61  es TK_GE to be a
18150 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63 6f 64  n integer.** cod
18160 65 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74  e representing t
18170 68 65 20 22 3e 3d 22 20 6f 70 65 72 61 74 6f 72  he ">=" operator
18180 2e 20 54 68 69 73 20 73 61 6d 65 20 69 6e 74 65  . This same inte
18190 67 65 72 20 63 6f 64 65 20 69 73 20 72 65 75 73  ger code is reus
181a0 65 64 0a 2a 2a 20 74 6f 20 72 65 70 72 65 73 65  ed.** to represe
181b0 6e 74 20 74 68 65 20 67 72 65 61 74 65 72 2d 74  nt the greater-t
181c0 68 61 6e 2d 6f 72 2d 65 71 75 61 6c 2d 74 6f 20  han-or-equal-to 
181d0 6f 70 65 72 61 74 6f 72 20 69 6e 20 74 68 65 20  operator in the 
181e0 65 78 70 72 65 73 73 69 6f 6e 0a 2a 2a 20 74 72  expression.** tr
181f0 65 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ee..**.** If the
18200 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
18210 6e 20 53 51 4c 20 6c 69 74 65 72 61 6c 20 28 54  n SQL literal (T
18220 4b 5f 49 4e 54 45 47 45 52 2c 20 54 4b 5f 46 4c  K_INTEGER, TK_FL
18230 4f 41 54 2c 20 54 4b 5f 42 4c 4f 42 2c 0a 2a 2a  OAT, TK_BLOB,.**
18240 20 6f 72 20 54 4b 5f 53 54 52 49 4e 47 29 2c 20   or TK_STRING), 
18250 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20  then Expr.token 
18260 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 74 65 78  contains the tex
18270 74 20 6f 66 20 74 68 65 20 53 51 4c 20 6c 69 74  t of the SQL lit
18280 65 72 61 6c 2e 20 49 66 0a 2a 2a 20 74 68 65 20  eral. If.** the 
18290 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20  expression is a 
182a0 76 61 72 69 61 62 6c 65 20 28 54 4b 5f 56 41 52  variable (TK_VAR
182b0 49 41 42 4c 45 29 2c 20 74 68 65 6e 20 45 78 70  IABLE), then Exp
182c0 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73  r.token contains
182d0 20 74 68 65 0a 2a 2a 20 76 61 72 69 61 62 6c 65   the.** variable
182e0 20 6e 61 6d 65 2e 20 46 69 6e 61 6c 6c 79 2c 20   name. Finally, 
182f0 69 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  if the expressio
18300 6e 20 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63  n is an SQL func
18310 74 69 6f 6e 20 28 54 4b 5f 46 55 4e 43 54 49 4f  tion (TK_FUNCTIO
18320 4e 29 2c 0a 2a 2a 20 74 68 65 6e 20 45 78 70 72  N),.** then Expr
18330 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20  .token contains 
18340 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
18350 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  function..**.** 
18360 45 78 70 72 2e 70 52 69 67 68 74 20 61 6e 64 20  Expr.pRight and 
18370 45 78 70 72 2e 70 4c 65 66 74 20 61 72 65 20 74  Expr.pLeft are t
18380 68 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68  he left and righ
18390 74 20 73 75 62 65 78 70 72 65 73 73 69 6f 6e 73  t subexpressions
183a0 20 6f 66 20 61 0a 2a 2a 20 62 69 6e 61 72 79 20   of a.** binary 
183b0 6f 70 65 72 61 74 6f 72 2e 20 45 69 74 68 65 72  operator. Either
183c0 20 6f 72 20 62 6f 74 68 20 6d 61 79 20 62 65 20   or both may be 
183d0 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72  NULL..**.** Expr
183e0 2e 78 2e 70 4c 69 73 74 20 69 73 20 61 20 6c 69  .x.pList is a li
183f0 73 74 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  st of arguments 
18400 69 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  if the expressio
18410 6e 20 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63  n is an SQL func
18420 74 69 6f 6e 2c 0a 2a 2a 20 61 20 43 41 53 45 20  tion,.** a CASE 
18430 65 78 70 72 65 73 73 69 6f 6e 20 6f 72 20 61 6e  expression or an
18440 20 49 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f   IN expression o
18450 66 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73  f the form "<lhs
18460 3e 20 49 4e 20 28 3c 79 3e 2c 20 3c 7a 3e 2e 2e  > IN (<y>, <z>..
18470 2e 29 22 2e 0a 2a 2a 20 45 78 70 72 2e 78 2e 70  .)"..** Expr.x.p
18480 53 65 6c 65 63 74 20 69 73 20 75 73 65 64 20 69  Select is used i
18490 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
184a0 20 69 73 20 61 20 73 75 62 2d 73 65 6c 65 63 74   is a sub-select
184b0 20 6f 72 20 61 6e 20 65 78 70 72 65 73 73 69 6f   or an expressio
184c0 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 66 6f 72 6d  n of.** the form
184d0 20 22 3c 6c 68 73 3e 20 49 4e 20 28 53 45 4c 45   "<lhs> IN (SELE
184e0 43 54 20 2e 2e 2e 29 22 2e 20 49 66 20 74 68 65  CT ...)". If the
184f0 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20 62 69   EP_xIsSelect bi
18500 74 20 69 73 20 73 65 74 20 69 6e 20 74 68 65 0a  t is set in the.
18510 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61  ** Expr.flags ma
18520 73 6b 2c 20 74 68 65 6e 20 45 78 70 72 2e 78 2e  sk, then Expr.x.
18530 70 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69 64  pSelect is valid
18540 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 45 78 70  . Otherwise, Exp
18550 72 2e 78 2e 70 4c 69 73 74 20 69 73 0a 2a 2a 20  r.x.pList is.** 
18560 76 61 6c 69 64 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20  valid..**.** An 
18570 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74 68  expression of th
18580 65 20 66 6f 72 6d 20 49 44 20 6f 72 20 49 44 2e  e form ID or ID.
18590 49 44 20 72 65 66 65 72 73 20 74 6f 20 61 20 63  ID refers to a c
185a0 6f 6c 75 6d 6e 20 69 6e 20 61 20 74 61 62 6c 65  olumn in a table
185b0 2e 0a 2a 2a 20 46 6f 72 20 73 75 63 68 20 65 78  ..** For such ex
185c0 70 72 65 73 73 69 6f 6e 73 2c 20 45 78 70 72 2e  pressions, Expr.
185d0 6f 70 20 69 73 20 73 65 74 20 74 6f 20 54 4b 5f  op is set to TK_
185e0 43 4f 4c 55 4d 4e 20 61 6e 64 20 45 78 70 72 2e  COLUMN and Expr.
185f0 69 54 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65  iTable is.** the
18600 20 69 6e 74 65 67 65 72 20 63 75 72 73 6f 72 20   integer cursor 
18610 6e 75 6d 62 65 72 20 6f 66 20 61 20 56 44 42 45  number of a VDBE
18620 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67   cursor pointing
18630 20 74 6f 20 74 68 61 74 20 74 61 62 6c 65 20 61   to that table a
18640 6e 64 0a 2a 2a 20 45 78 70 72 2e 69 43 6f 6c 75  nd.** Expr.iColu
18650 6d 6e 20 69 73 20 74 68 65 20 63 6f 6c 75 6d 6e  mn is the column
18660 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 65 20   number for the 
18670 73 70 65 63 69 66 69 63 20 63 6f 6c 75 6d 6e 2e  specific column.
18680 20 20 49 66 20 74 68 65 0a 2a 2a 20 65 78 70 72    If the.** expr
18690 65 73 73 69 6f 6e 20 69 73 20 75 73 65 64 20 61  ession is used a
186a0 73 20 61 20 72 65 73 75 6c 74 20 69 6e 20 61 6e  s a result in an
186b0 20 61 67 67 72 65 67 61 74 65 20 53 45 4c 45 43   aggregate SELEC
186c0 54 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 76  T, then the.** v
186d0 61 6c 75 65 20 69 73 20 61 6c 73 6f 20 73 74 6f  alue is also sto
186e0 72 65 64 20 69 6e 20 74 68 65 20 45 78 70 72 2e  red in the Expr.
186f0 69 41 67 67 20 63 6f 6c 75 6d 6e 20 69 6e 20 74  iAgg column in t
18700 68 65 20 61 67 67 72 65 67 61 74 65 20 73 6f 20  he aggregate so 
18710 74 68 61 74 0a 2a 2a 20 69 74 20 63 61 6e 20 62  that.** it can b
18720 65 20 61 63 63 65 73 73 65 64 20 61 66 74 65 72  e accessed after
18730 20 61 6c 6c 20 61 67 67 72 65 67 61 74 65 73 20   all aggregates 
18740 61 72 65 20 63 6f 6d 70 75 74 65 64 2e 0a 2a 2a  are computed..**
18750 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72 65  .** If the expre
18760 73 73 69 6f 6e 20 69 73 20 61 6e 20 75 6e 62 6f  ssion is an unbo
18770 75 6e 64 20 76 61 72 69 61 62 6c 65 20 6d 61 72  und variable mar
18780 6b 65 72 20 28 61 20 71 75 65 73 74 69 6f 6e 20  ker (a question 
18790 6d 61 72 6b 0a 2a 2a 20 63 68 61 72 61 63 74 65  mark.** characte
187a0 72 20 27 3f 27 20 69 6e 20 74 68 65 20 6f 72 69  r '?' in the ori
187b0 67 69 6e 61 6c 20 53 51 4c 29 20 74 68 65 6e 20  ginal SQL) then 
187c0 74 68 65 20 45 78 70 72 2e 69 54 61 62 6c 65 20  the Expr.iTable 
187d0 68 6f 6c 64 73 20 74 68 65 20 69 6e 64 65 78 0a  holds the index.
187e0 2a 2a 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68  ** number for th
187f0 61 74 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 0a  at variable..**.
18800 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72 65 73  ** If the expres
18810 73 69 6f 6e 20 69 73 20 61 20 73 75 62 71 75 65  sion is a subque
18820 72 79 20 74 68 65 6e 20 45 78 70 72 2e 69 43 6f  ry then Expr.iCo
18830 6c 75 6d 6e 20 68 6f 6c 64 73 20 61 6e 20 69 6e  lumn holds an in
18840 74 65 67 65 72 0a 2a 2a 20 72 65 67 69 73 74 65  teger.** registe
18850 72 20 6e 75 6d 62 65 72 20 63 6f 6e 74 61 69 6e  r number contain
18860 69 6e 67 20 74 68 65 20 72 65 73 75 6c 74 20 6f  ing the result o
18870 66 20 74 68 65 20 73 75 62 71 75 65 72 79 2e 20  f the subquery. 
18880 20 49 66 20 74 68 65 0a 2a 2a 20 73 75 62 71 75   If the.** subqu
18890 65 72 79 20 67 69 76 65 73 20 61 20 63 6f 6e 73  ery gives a cons
188a0 74 61 6e 74 20 72 65 73 75 6c 74 2c 20 74 68 65  tant result, the
188b0 6e 20 69 54 61 62 6c 65 20 69 73 20 2d 31 2e 20  n iTable is -1. 
188c0 20 49 66 20 74 68 65 20 73 75 62 71 75 65 72 79   If the subquery
188d0 0a 2a 2a 20 67 69 76 65 73 20 61 20 64 69 66 66  .** gives a diff
188e0 65 72 65 6e 74 20 61 6e 73 77 65 72 20 61 74 20  erent answer at 
188f0 64 69 66 66 65 72 65 6e 74 20 74 69 6d 65 73 20  different times 
18900 64 75 72 69 6e 67 20 73 74 61 74 65 6d 65 6e 74  during statement
18910 20 70 72 6f 63 65 73 73 69 6e 67 0a 2a 2a 20 74   processing.** t
18920 68 65 6e 20 69 54 61 62 6c 65 20 69 73 20 74 68  hen iTable is th
18930 65 20 61 64 64 72 65 73 73 20 6f 66 20 61 20 73  e address of a s
18940 75 62 72 6f 75 74 69 6e 65 20 74 68 61 74 20 63  ubroutine that c
18950 6f 6d 70 75 74 65 73 20 74 68 65 20 73 75 62 71  omputes the subq
18960 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  uery..**.** If t
18970 68 65 20 45 78 70 72 20 69 73 20 6f 66 20 74 79  he Expr is of ty
18980 70 65 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 61 6e  pe OP_Column, an
18990 64 20 74 68 65 20 74 61 62 6c 65 20 69 74 20 69  d the table it i
189a0 73 20 73 65 6c 65 63 74 69 6e 67 20 66 72 6f 6d  s selecting from
189b0 0a 2a 2a 20 69 73 20 61 20 64 69 73 6b 20 74 61  .** is a disk ta
189c0 62 6c 65 20 6f 72 20 74 68 65 20 22 6f 6c 64 2e  ble or the "old.
189d0 2a 22 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2c  *" pseudo-table,
189e0 20 74 68 65 6e 20 70 54 61 62 20 70 6f 69 6e 74   then pTab point
189f0 73 20 74 6f 20 74 68 65 0a 2a 2a 20 63 6f 72 72  s to the.** corr
18a00 65 73 70 6f 6e 64 69 6e 67 20 74 61 62 6c 65 20  esponding table 
18a10 64 65 66 69 6e 69 74 69 6f 6e 2e 0a 2a 2a 0a 2a  definition..**.*
18a20 2a 20 41 4c 4c 4f 43 41 54 49 4f 4e 20 4e 4f 54  * ALLOCATION NOT
18a30 45 53 3a 0a 2a 2a 0a 2a 2a 20 45 78 70 72 20 6f  ES:.**.** Expr o
18a40 62 6a 65 63 74 73 20 63 61 6e 20 75 73 65 20 61  bjects can use a
18a50 20 6c 6f 74 20 6f 66 20 6d 65 6d 6f 72 79 20 73   lot of memory s
18a60 70 61 63 65 20 69 6e 20 64 61 74 61 62 61 73 65  pace in database
18a70 20 73 63 68 65 6d 61 2e 20 20 54 6f 0a 2a 2a 20   schema.  To.** 
18a80 68 65 6c 70 20 72 65 64 75 63 65 20 6d 65 6d 6f  help reduce memo
18a90 72 79 20 72 65 71 75 69 72 65 6d 65 6e 74 73 2c  ry requirements,
18aa0 20 73 6f 6d 65 74 69 6d 65 73 20 61 6e 20 45 78   sometimes an Ex
18ab0 70 72 20 6f 62 6a 65 63 74 20 77 69 6c 6c 20 62  pr object will b
18ac0 65 0a 2a 2a 20 74 72 75 6e 63 61 74 65 64 2e 20  e.** truncated. 
18ad0 20 41 6e 64 20 74 6f 20 72 65 64 75 63 65 20 74   And to reduce t
18ae0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d  he number of mem
18af0 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2c  ory allocations,
18b00 20 73 6f 6d 65 74 69 6d 65 73 0a 2a 2a 20 74 77   sometimes.** tw
18b10 6f 20 6f 72 20 6d 6f 72 65 20 45 78 70 72 20 6f  o or more Expr o
18b20 62 6a 65 63 74 73 20 77 69 6c 6c 20 62 65 20 73  bjects will be s
18b30 74 6f 72 65 64 20 69 6e 20 61 20 73 69 6e 67 6c  tored in a singl
18b40 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  e memory allocat
18b50 69 6f 6e 2c 0a 2a 2a 20 74 6f 67 65 74 68 65 72  ion,.** together
18b60 20 77 69 74 68 20 45 78 70 72 2e 7a 54 6f 6b 65   with Expr.zToke
18b70 6e 20 73 74 72 69 6e 67 73 2e 0a 2a 2a 0a 2a 2a  n strings..**.**
18b80 20 49 66 20 74 68 65 20 45 50 5f 52 65 64 75 63   If the EP_Reduc
18b90 65 64 20 61 6e 64 20 45 50 5f 54 6f 6b 65 6e 4f  ed and EP_TokenO
18ba0 6e 6c 79 20 66 6c 61 67 73 20 61 72 65 20 73 65  nly flags are se
18bb0 74 20 77 68 65 6e 0a 2a 2a 20 61 6e 20 45 78 70  t when.** an Exp
18bc0 72 20 6f 62 6a 65 63 74 20 69 73 20 74 72 75 6e  r object is trun
18bd0 63 61 74 65 64 2e 20 20 57 68 65 6e 20 45 50 5f  cated.  When EP_
18be0 52 65 64 75 63 65 64 20 69 73 20 73 65 74 2c 20  Reduced is set, 
18bf0 74 68 65 6e 20 61 6c 6c 0a 2a 2a 20 74 68 65 20  then all.** the 
18c00 63 68 69 6c 64 20 45 78 70 72 20 6f 62 6a 65 63  child Expr objec
18c10 74 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e 70  ts in the Expr.p
18c20 4c 65 66 74 20 61 6e 64 20 45 78 70 72 2e 70 52  Left and Expr.pR
18c30 69 67 68 74 20 73 75 62 74 72 65 65 73 0a 2a 2a  ight subtrees.**
18c40 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20 77   are contained w
18c50 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20 6d  ithin the same m
18c60 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
18c70 2e 20 20 4e 6f 74 65 2c 20 68 6f 77 65 76 65 72  .  Note, however
18c80 2c 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 73 75  , that.** the su
18c90 62 74 72 65 65 73 20 69 6e 20 45 78 70 72 2e 78  btrees in Expr.x
18ca0 2e 70 4c 69 73 74 20 6f 72 20 45 78 70 72 2e 78  .pList or Expr.x
18cb0 2e 70 53 65 6c 65 63 74 20 61 72 65 20 61 6c 77  .pSelect are alw
18cc0 61 79 73 20 73 65 70 61 72 61 74 65 6c 79 0a 2a  ays separately.*
18cd0 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20 72 65 67  * allocated, reg
18ce0 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68  ardless of wheth
18cf0 65 72 20 6f 72 20 6e 6f 74 20 45 50 5f 52 65 64  er or not EP_Red
18d00 75 63 65 64 20 69 73 20 73 65 74 2e 0a 2a 2f 0a  uced is set..*/.
18d10 73 74 72 75 63 74 20 45 78 70 72 20 7b 0a 20 20  struct Expr {.  
18d20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20  u8 op;          
18d30 20 20 20 20 20 20 20 2f 2a 20 4f 70 65 72 61 74         /* Operat
18d40 69 6f 6e 20 70 65 72 66 6f 72 6d 65 64 20 62 79  ion performed by
18d50 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 20 20   this node */.  
18d60 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20  char affinity;  
18d70 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 66         /* The af
18d80 66 69 6e 69 74 79 20 6f 66 20 74 68 65 20 63 6f  finity of the co
18d90 6c 75 6d 6e 20 6f 72 20 30 20 69 66 20 6e 6f 74  lumn or 0 if not
18da0 20 61 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75   a column */.  u
18db0 33 32 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20  32 flags;       
18dc0 20 20 20 20 20 20 2f 2a 20 56 61 72 69 6f 75 73        /* Various
18dd0 20 66 6c 61 67 73 2e 20 20 45 50 5f 2a 20 53 65   flags.  EP_* Se
18de0 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 75 6e 69  e below */.  uni
18df0 6f 6e 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a  on {.    char *z
18e00 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20 20 20  Token;          
18e10 2f 2a 20 54 6f 6b 65 6e 20 76 61 6c 75 65 2e 20  /* Token value. 
18e20 5a 65 72 6f 20 74 65 72 6d 69 6e 61 74 65 64 20  Zero terminated 
18e30 61 6e 64 20 64 65 71 75 6f 74 65 64 20 2a 2f 0a  and dequoted */.
18e40 20 20 20 20 69 6e 74 20 69 56 61 6c 75 65 3b 20      int iValue; 
18e50 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f             /* No
18e60 6e 2d 6e 65 67 61 74 69 76 65 20 69 6e 74 65 67  n-negative integ
18e70 65 72 20 76 61 6c 75 65 20 69 66 20 45 50 5f 49  er value if EP_I
18e80 6e 74 56 61 6c 75 65 20 2a 2f 0a 20 20 7d 20 75  ntValue */.  } u
18e90 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 45  ;..  /* If the E
18ea0 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67  P_TokenOnly flag
18eb0 20 69 73 20 73 65 74 20 69 6e 20 74 68 65 20 45   is set in the E
18ec0 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20  xpr.flags mask, 
18ed0 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61  then no.  ** spa
18ee0 63 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20  ce is allocated 
18ef0 66 6f 72 20 74 68 65 20 66 69 65 6c 64 73 20 62  for the fields b
18f00 65 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e 74 2e  elow this point.
18f10 20 41 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a 20   An attempt to. 
18f20 20 2a 2a 20 61 63 63 65 73 73 20 74 68 65 6d 20   ** access them 
18f30 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20 61  will result in a
18f40 20 73 65 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c   segfault or mal
18f50 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a  function..  ****
18f60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18f70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18f80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18f90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18fa0 2a 2f 0a 0a 20 20 45 78 70 72 20 2a 70 4c 65 66  */..  Expr *pLef
18fb0 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
18fc0 4c 65 66 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a  Left subnode */.
18fd0 20 20 45 78 70 72 20 2a 70 52 69 67 68 74 3b 20    Expr *pRight; 
18fe0 20 20 20 20 20 20 20 20 20 2f 2a 20 52 69 67 68           /* Righ
18ff0 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 75  t subnode */.  u
19000 6e 69 6f 6e 20 7b 0a 20 20 20 20 45 78 70 72 4c  nion {.    ExprL
19010 69 73 74 20 2a 70 4c 69 73 74 3b 20 20 20 20 20  ist *pList;     
19020 2f 2a 20 6f 70 20 3d 20 49 4e 2c 20 45 58 49 53  /* op = IN, EXIS
19030 54 53 2c 20 53 45 4c 45 43 54 2c 20 43 41 53 45  TS, SELECT, CASE
19040 2c 20 46 55 4e 43 54 49 4f 4e 2c 20 42 45 54 57  , FUNCTION, BETW
19050 45 45 4e 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63  EEN */.    Selec
19060 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20  t *pSelect;     
19070 2f 2a 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20  /* EP_xIsSelect 
19080 61 6e 64 20 6f 70 20 3d 20 49 4e 2c 20 45 58 49  and op = IN, EXI
19090 53 54 53 2c 20 53 45 4c 45 43 54 20 2a 2f 0a 20  STS, SELECT */. 
190a0 20 7d 20 78 3b 0a 0a 20 20 2f 2a 20 49 66 20 74   } x;..  /* If t
190b0 68 65 20 45 50 5f 52 65 64 75 63 65 64 20 66 6c  he EP_Reduced fl
190c0 61 67 20 69 73 20 73 65 74 20 69 6e 20 74 68 65  ag is set in the
190d0 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b   Expr.flags mask
190e0 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73  , then no.  ** s
190f0 70 61 63 65 20 69 73 20 61 6c 6c 6f 63 61 74 65  pace is allocate
19100 64 20 66 6f 72 20 74 68 65 20 66 69 65 6c 64 73  d for the fields
19110 20 62 65 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e   below this poin
19120 74 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 74 6f  t. An attempt to
19130 0a 20 20 2a 2a 20 61 63 63 65 73 73 20 74 68 65  .  ** access the
19140 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e  m will result in
19150 20 61 20 73 65 67 66 61 75 6c 74 20 6f 72 20 6d   a segfault or m
19160 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a  alfunction..  **
19170 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19180 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19190 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
191a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
191b0 2a 2a 2a 2f 0a 0a 23 69 66 20 53 51 4c 49 54 45  ***/..#if SQLITE
191c0 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50 54 48 3e  _MAX_EXPR_DEPTH>
191d0 30 0a 20 20 69 6e 74 20 6e 48 65 69 67 68 74 3b  0.  int nHeight;
191e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 65             /* He
191f0 69 67 68 74 20 6f 66 20 74 68 65 20 74 72 65 65  ight of the tree
19200 20 68 65 61 64 65 64 20 62 79 20 74 68 69 73 20   headed by this 
19210 6e 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  node */.#endif. 
19220 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20   int iTable;    
19230 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f          /* TK_CO
19240 4c 55 4d 4e 3a 20 63 75 72 73 6f 72 20 6e 75 6d  LUMN: cursor num
19250 62 65 72 20 6f 66 20 74 61 62 6c 65 20 68 6f 6c  ber of table hol
19260 64 69 6e 67 20 63 6f 6c 75 6d 6e 0a 20 20 20 20  ding column.    
19270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19280 20 20 20 20 20 2a 2a 20 54 4b 5f 52 45 47 49 53       ** TK_REGIS
19290 54 45 52 3a 20 72 65 67 69 73 74 65 72 20 6e 75  TER: register nu
192a0 6d 62 65 72 0a 20 20 20 20 20 20 20 20 20 20 20  mber.           
192b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
192c0 20 54 4b 5f 54 52 49 47 47 45 52 3a 20 31 20 2d   TK_TRIGGER: 1 -
192d0 3e 20 6e 65 77 2c 20 30 20 2d 3e 20 6f 6c 64 0a  > new, 0 -> old.
192e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
192f0 20 20 20 20 20 20 20 20 20 2a 2a 20 45 50 5f 55           ** EP_U
19300 6e 6c 69 6b 65 6c 79 3a 20 20 31 33 34 32 31 37  nlikely:  134217
19310 37 32 38 20 74 69 6d 65 73 20 6c 69 6b 65 6c 69  728 times likeli
19320 68 6f 6f 64 0a 20 20 20 20 20 20 20 20 20 20 20  hood.           
19330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
19340 20 54 4b 5f 53 45 4c 45 43 54 3a 20 31 73 74 20   TK_SELECT: 1st 
19350 72 65 67 69 73 74 65 72 20 6f 66 20 72 65 73 75  register of resu
19360 6c 74 20 76 65 63 74 6f 72 20 2a 2f 0a 20 20 79  lt vector */.  y
19370 6e 56 61 72 20 69 43 6f 6c 75 6d 6e 3b 20 20 20  nVar iColumn;   
19380 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55        /* TK_COLU
19390 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78  MN: column index
193a0 2e 20 20 2d 31 20 66 6f 72 20 72 6f 77 69 64 2e  .  -1 for rowid.
193b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
193c0 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f            ** TK_
193d0 56 41 52 49 41 42 4c 45 3a 20 76 61 72 69 61 62  VARIABLE: variab
193e0 6c 65 20 6e 75 6d 62 65 72 20 28 61 6c 77 61 79  le number (alway
193f0 73 20 3e 3d 20 31 29 2e 0a 20 20 20 20 20 20 20  s >= 1)..       
19400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19410 20 20 2a 2a 20 54 4b 5f 53 45 4c 45 43 54 5f 43    ** TK_SELECT_C
19420 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 6f 66  OLUMN: column of
19430 20 74 68 65 20 72 65 73 75 6c 74 20 76 65 63 74   the result vect
19440 6f 72 20 2a 2f 0a 20 20 69 31 36 20 69 41 67 67  or */.  i16 iAgg
19450 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
19460 2a 20 57 68 69 63 68 20 65 6e 74 72 79 20 69 6e  * Which entry in
19470 20 70 41 67 67 49 6e 66 6f 2d 3e 61 43 6f 6c 5b   pAggInfo->aCol[
19480 5d 20 6f 72 20 2d 3e 61 46 75 6e 63 5b 5d 20 2a  ] or ->aFunc[] *
19490 2f 0a 20 20 69 31 36 20 69 52 69 67 68 74 4a 6f  /.  i16 iRightJo
194a0 69 6e 54 61 62 6c 65 3b 20 20 20 2f 2a 20 49 66  inTable;   /* If
194b0 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 2c 20 74 68   EP_FromJoin, th
194c0 65 20 72 69 67 68 74 20 74 61 62 6c 65 20 6f 66  e right table of
194d0 20 74 68 65 20 6a 6f 69 6e 20 2a 2f 0a 20 20 75   the join */.  u
194e0 38 20 6f 70 32 3b 20 20 20 20 20 20 20 20 20 20  8 op2;          
194f0 20 20 20 20 20 20 2f 2a 20 54 4b 5f 52 45 47 49        /* TK_REGI
19500 53 54 45 52 3a 20 6f 72 69 67 69 6e 61 6c 20 76  STER: original v
19510 61 6c 75 65 20 6f 66 20 45 78 70 72 2e 6f 70 0a  alue of Expr.op.
19520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19530 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 43           ** TK_C
19540 4f 4c 55 4d 4e 3a 20 74 68 65 20 76 61 6c 75 65  OLUMN: the value
19550 20 6f 66 20 70 35 20 66 6f 72 20 4f 50 5f 43 6f   of p5 for OP_Co
19560 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20 20 20 20  lumn.           
19570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
19580 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e   TK_AGG_FUNCTION
19590 3a 20 6e 65 73 74 69 6e 67 20 64 65 70 74 68 20  : nesting depth 
195a0 2a 2f 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70 41  */.  AggInfo *pA
195b0 67 67 49 6e 66 6f 3b 20 20 20 20 20 2f 2a 20 55  ggInfo;     /* U
195c0 73 65 64 20 62 79 20 54 4b 5f 41 47 47 5f 43 4f  sed by TK_AGG_CO
195d0 4c 55 4d 4e 20 61 6e 64 20 54 4b 5f 41 47 47 5f  LUMN and TK_AGG_
195e0 46 55 4e 43 54 49 4f 4e 20 2a 2f 0a 20 20 75 6e  FUNCTION */.  un
195f0 69 6f 6e 20 7b 0a 20 20 20 20 54 61 62 6c 65 20  ion {.    Table 
19600 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20  *pTab;          
19610 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 54   /* TK_COLUMN: T
19620 61 62 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20  able containing 
19630 63 6f 6c 75 6d 6e 2e 20 43 61 6e 20 62 65 20 4e  column. Can be N
19640 55 4c 4c 0a 20 20 20 20 20 20 20 20 20 20 20 20  ULL.            
19650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
19660 2a 20 66 6f 72 20 61 20 63 6f 6c 75 6d 6e 20 6f  * for a column o
19670 66 20 61 6e 20 69 6e 64 65 78 20 6f 6e 20 61 6e  f an index on an
19680 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20   expression */. 
19690 20 20 20 57 69 6e 64 6f 77 20 2a 70 57 69 6e 3b     Window *pWin;
196a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f            /* TK_
196b0 46 55 4e 43 54 49 4f 4e 3a 20 57 69 6e 64 6f 77  FUNCTION: Window
196c0 20 64 65 66 69 6e 69 74 69 6f 6e 20 66 6f 72 20   definition for 
196d0 74 68 65 20 66 75 6e 63 20 2a 2f 0a 20 20 7d 20  the func */.  } 
196e0 79 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  y;.};../*.** The
196f0 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74   following are t
19700 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 62  he meanings of b
19710 69 74 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e  its in the Expr.
19720 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a  flags field..*/.
19730 23 64 65 66 69 6e 65 20 45 50 5f 46 72 6f 6d 4a  #define EP_FromJ
19740 6f 69 6e 20 20 30 78 30 30 30 30 30 31 20 2f 2a  oin  0x000001 /*
19750 20 4f 72 69 67 69 6e 61 74 65 73 20 69 6e 20 4f   Originates in O
19760 4e 2f 55 53 49 4e 47 20 63 6c 61 75 73 65 20 6f  N/USING clause o
19770 66 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a  f outer join */.
19780 23 64 65 66 69 6e 65 20 45 50 5f 41 67 67 20 20  #define EP_Agg  
19790 20 20 20 20 20 30 78 30 30 30 30 30 32 20 2f 2a       0x000002 /*
197a0 20 43 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72   Contains one or
197b0 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65 20   more aggregate 
197c0 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65  functions */.#de
197d0 66 69 6e 65 20 45 50 5f 48 61 73 46 75 6e 63 20  fine EP_HasFunc 
197e0 20 20 30 78 30 30 30 30 30 34 20 2f 2a 20 43 6f    0x000004 /* Co
197f0 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f  ntains one or mo
19800 72 65 20 66 75 6e 63 74 69 6f 6e 73 20 6f 66 20  re functions of 
19810 61 6e 79 20 6b 69 6e 64 20 2a 2f 0a 23 64 65 66  any kind */.#def
19820 69 6e 65 20 45 50 5f 46 69 78 65 64 43 6f 6c 20  ine EP_FixedCol 
19830 20 30 78 30 30 30 30 30 38 20 2f 2a 20 54 4b 5f   0x000008 /* TK_
19840 43 6f 6c 75 6d 6e 20 77 69 74 68 20 61 20 6b 6e  Column with a kn
19850 6f 77 6e 20 66 69 78 65 64 20 76 61 6c 75 65 20  own fixed value 
19860 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 44 69  */.#define EP_Di
19870 73 74 69 6e 63 74 20 20 30 78 30 30 30 30 31 30  stinct  0x000010
19880 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66 75   /* Aggregate fu
19890 6e 63 74 69 6f 6e 20 77 69 74 68 20 44 49 53 54  nction with DIST
198a0 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 2a 2f 0a  INCT keyword */.
198b0 23 64 65 66 69 6e 65 20 45 50 5f 56 61 72 53 65  #define EP_VarSe
198c0 6c 65 63 74 20 30 78 30 30 30 30 32 30 20 2f 2a  lect 0x000020 /*
198d0 20 70 53 65 6c 65 63 74 20 69 73 20 63 6f 72 72   pSelect is corr
198e0 65 6c 61 74 65 64 2c 20 6e 6f 74 20 63 6f 6e 73  elated, not cons
198f0 74 61 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tant */.#define 
19900 45 50 5f 44 62 6c 51 75 6f 74 65 64 20 30 78 30  EP_DblQuoted 0x0
19910 30 30 30 34 30 20 2f 2a 20 74 6f 6b 65 6e 2e 7a  00040 /* token.z
19920 20 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20   was originally 
19930 69 6e 20 22 2e 2e 2e 22 20 2a 2f 0a 23 64 65 66  in "..." */.#def
19940 69 6e 65 20 45 50 5f 49 6e 66 69 78 46 75 6e 63  ine EP_InfixFunc
19950 20 30 78 30 30 30 30 38 30 20 2f 2a 20 54 72 75   0x000080 /* Tru
19960 65 20 66 6f 72 20 61 6e 20 69 6e 66 69 78 20 66  e for an infix f
19970 75 6e 63 74 69 6f 6e 3a 20 4c 49 4b 45 2c 20 47  unction: LIKE, G
19980 4c 4f 42 2c 20 65 74 63 20 2a 2f 0a 23 64 65 66  LOB, etc */.#def
19990 69 6e 65 20 45 50 5f 43 6f 6c 6c 61 74 65 20 20  ine EP_Collate  
199a0 20 30 78 30 30 30 31 30 30 20 2f 2a 20 54 72 65   0x000100 /* Tre
199b0 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f  e contains a TK_
199c0 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72  COLLATE operator
199d0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 47   */.#define EP_G
199e0 65 6e 65 72 69 63 20 20 20 30 78 30 30 30 32 30  eneric   0x00020
199f0 30 20 2f 2a 20 49 67 6e 6f 72 65 20 43 4f 4c 4c  0 /* Ignore COLL
19a00 41 54 45 20 6f 72 20 61 66 66 69 6e 69 74 79 20  ATE or affinity 
19a10 6f 6e 20 74 68 69 73 20 74 72 65 65 20 2a 2f 0a  on this tree */.
19a20 23 64 65 66 69 6e 65 20 45 50 5f 49 6e 74 56 61  #define EP_IntVa
19a30 6c 75 65 20 20 30 78 30 30 30 34 30 30 20 2f 2a  lue  0x000400 /*
19a40 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 63   Integer value c
19a50 6f 6e 74 61 69 6e 65 64 20 69 6e 20 75 2e 69 56  ontained in u.iV
19a60 61 6c 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  alue */.#define 
19a70 45 50 5f 78 49 73 53 65 6c 65 63 74 20 30 78 30  EP_xIsSelect 0x0
19a80 30 30 38 30 30 20 2f 2a 20 78 2e 70 53 65 6c 65  00800 /* x.pSele
19a90 63 74 20 69 73 20 76 61 6c 69 64 20 28 6f 74 68  ct is valid (oth
19aa0 65 72 77 69 73 65 20 78 2e 70 4c 69 73 74 20 69  erwise x.pList i
19ab0 73 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  s) */.#define EP
19ac0 5f 53 6b 69 70 20 20 20 20 20 20 30 78 30 30 31  _Skip      0x001
19ad0 30 30 30 20 2f 2a 20 43 4f 4c 4c 41 54 45 2c 20  000 /* COLLATE, 
19ae0 41 53 2c 20 6f 72 20 55 4e 4c 49 4b 45 4c 59 20  AS, or UNLIKELY 
19af0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 52 65  */.#define EP_Re
19b00 64 75 63 65 64 20 20 20 30 78 30 30 32 30 30 30  duced   0x002000
19b10 20 2f 2a 20 45 78 70 72 20 73 74 72 75 63 74 20   /* Expr struct 
19b20 45 58 50 52 5f 52 45 44 55 43 45 44 53 49 5a 45  EXPR_REDUCEDSIZE
19b30 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23   bytes only */.#
19b40 64 65 66 69 6e 65 20 45 50 5f 54 6f 6b 65 6e 4f  define EP_TokenO
19b50 6e 6c 79 20 30 78 30 30 34 30 30 30 20 2f 2a 20  nly 0x004000 /* 
19b60 45 78 70 72 20 73 74 72 75 63 74 20 45 58 50 52  Expr struct EXPR
19b70 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 62  _TOKENONLYSIZE b
19b80 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65  ytes only */.#de
19b90 66 69 6e 65 20 45 50 5f 53 74 61 74 69 63 20 20  fine EP_Static  
19ba0 20 20 30 78 30 30 38 30 30 30 20 2f 2a 20 48 65    0x008000 /* He
19bb0 6c 64 20 69 6e 20 6d 65 6d 6f 72 79 20 6e 6f 74  ld in memory not
19bc0 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 6d   obtained from m
19bd0 61 6c 6c 6f 63 28 29 20 2a 2f 0a 23 64 65 66 69  alloc() */.#defi
19be0 6e 65 20 45 50 5f 4d 65 6d 54 6f 6b 65 6e 20 20  ne EP_MemToken  
19bf0 30 78 30 31 30 30 30 30 20 2f 2a 20 4e 65 65 64  0x010000 /* Need
19c00 20 74 6f 20 73 71 6c 69 74 65 33 44 62 46 72 65   to sqlite3DbFre
19c10 65 28 29 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20  e() Expr.zToken 
19c20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 4e 6f  */.#define EP_No
19c30 52 65 64 75 63 65 20 20 30 78 30 32 30 30 30 30  Reduce  0x020000
19c40 20 2f 2a 20 43 61 6e 6e 6f 74 20 45 58 50 52 44   /* Cannot EXPRD
19c50 55 50 5f 52 45 44 55 43 45 20 74 68 69 73 20 45  UP_REDUCE this E
19c60 78 70 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  xpr */.#define E
19c70 50 5f 55 6e 6c 69 6b 65 6c 79 20 20 30 78 30 34  P_Unlikely  0x04
19c80 30 30 30 30 20 2f 2a 20 75 6e 6c 69 6b 65 6c 79  0000 /* unlikely
19c90 28 29 20 6f 72 20 6c 69 6b 65 6c 69 68 6f 6f 64  () or likelihood
19ca0 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  () function */.#
19cb0 64 65 66 69 6e 65 20 45 50 5f 43 6f 6e 73 74 46  define EP_ConstF
19cc0 75 6e 63 20 30 78 30 38 30 30 30 30 20 2f 2a 20  unc 0x080000 /* 
19cd0 41 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  A SQLITE_FUNC_CO
19ce0 4e 53 54 41 4e 54 20 6f 72 20 5f 53 4c 4f 43 48  NSTANT or _SLOCH
19cf0 4e 47 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  NG function */.#
19d00 64 65 66 69 6e 65 20 45 50 5f 43 61 6e 42 65 4e  define EP_CanBeN
19d10 75 6c 6c 20 30 78 31 30 30 30 30 30 20 2f 2a 20  ull 0x100000 /* 
19d20 43 61 6e 20 62 65 20 6e 75 6c 6c 20 64 65 73 70  Can be null desp
19d30 69 74 65 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e  ite NOT NULL con
19d40 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69  straint */.#defi
19d50 6e 65 20 45 50 5f 53 75 62 71 75 65 72 79 20 20  ne EP_Subquery  
19d60 30 78 32 30 30 30 30 30 20 2f 2a 20 54 72 65 65  0x200000 /* Tree
19d70 20 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f 53   contains a TK_S
19d80 45 4c 45 43 54 20 6f 70 65 72 61 74 6f 72 20 2a  ELECT operator *
19d90 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 41 6c 69  /.#define EP_Ali
19da0 61 73 20 20 20 20 20 30 78 34 30 30 30 30 30 20  as     0x400000 
19db0 2f 2a 20 49 73 20 61 6e 20 61 6c 69 61 73 20 66  /* Is an alias f
19dc0 6f 72 20 61 20 72 65 73 75 6c 74 20 73 65 74 20  or a result set 
19dd0 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 64 65 66 69 6e  column */.#defin
19de0 65 20 45 50 5f 4c 65 61 66 20 20 20 20 20 20 30  e EP_Leaf      0
19df0 78 38 30 30 30 30 30 20 2f 2a 20 45 78 70 72 2e  x800000 /* Expr.
19e00 70 4c 65 66 74 2c 20 2e 70 52 69 67 68 74 2c 20  pLeft, .pRight, 
19e10 2e 75 2e 70 53 65 6c 65 63 74 20 61 6c 6c 20 4e  .u.pSelect all N
19e20 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ULL */.#define E
19e30 50 5f 57 69 6e 46 75 6e 63 20 20 30 78 31 30 30  P_WinFunc  0x100
19e40 30 30 30 30 20 2f 2a 20 54 4b 5f 46 55 4e 43 54  0000 /* TK_FUNCT
19e50 49 4f 4e 20 77 69 74 68 20 45 78 70 72 2e 79 2e  ION with Expr.y.
19e60 70 57 69 6e 20 73 65 74 20 2a 2f 0a 0a 2f 2a 0a  pWin set */../*.
19e70 2a 2a 20 54 68 65 20 45 50 5f 50 72 6f 70 61 67  ** The EP_Propag
19e80 61 74 65 20 6d 61 73 6b 20 69 73 20 61 20 73 65  ate mask is a se
19e90 74 20 6f 66 20 70 72 6f 70 65 72 74 69 65 73 20  t of properties 
19ea0 74 68 61 74 20 61 75 74 6f 6d 61 74 69 63 61 6c  that automatical
19eb0 6c 79 20 70 72 6f 70 61 67 61 74 65 0a 2a 2a 20  ly propagate.** 
19ec0 75 70 77 61 72 64 73 20 69 6e 74 6f 20 70 61 72  upwards into par
19ed0 65 6e 74 20 6e 6f 64 65 73 2e 0a 2a 2f 0a 23 64  ent nodes..*/.#d
19ee0 65 66 69 6e 65 20 45 50 5f 50 72 6f 70 61 67 61  efine EP_Propaga
19ef0 74 65 20 28 45 50 5f 43 6f 6c 6c 61 74 65 7c 45  te (EP_Collate|E
19f00 50 5f 53 75 62 71 75 65 72 79 7c 45 50 5f 48 61  P_Subquery|EP_Ha
19f10 73 46 75 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20 54 68  sFunc)../*.** Th
19f20 65 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62  ese macros can b
19f30 65 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20  e used to test, 
19f40 73 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69  set, or clear bi
19f50 74 73 20 69 6e 20 74 68 65 0a 2a 2a 20 45 78 70  ts in the.** Exp
19f60 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a  r.flags field..*
19f70 2f 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48 61  /.#define ExprHa
19f80 73 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20  sProperty(E,P)  
19f90 20 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26     (((E)->flags&
19fa0 28 50 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65  (P))!=0).#define
19fb0 20 45 78 70 72 48 61 73 41 6c 6c 50 72 6f 70 65   ExprHasAllPrope
19fc0 72 74 79 28 45 2c 50 29 20 20 28 28 28 45 29 2d  rty(E,P)  (((E)-
19fd0 3e 66 6c 61 67 73 26 28 50 29 29 3d 3d 28 50 29  >flags&(P))==(P)
19fe0 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 53 65  ).#define ExprSe
19ff0 74 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20  tProperty(E,P)  
1a000 20 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28     (E)->flags|=(
1a010 50 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 43  P).#define ExprC
1a020 6c 65 61 72 50 72 6f 70 65 72 74 79 28 45 2c 50  learProperty(E,P
1a030 29 20 20 20 28 45 29 2d 3e 66 6c 61 67 73 26 3d  )   (E)->flags&=
1a040 7e 28 50 29 0a 0a 2f 2a 20 54 68 65 20 45 78 70  ~(P)../* The Exp
1a050 72 53 65 74 56 56 41 50 72 6f 70 65 72 74 79 28  rSetVVAProperty(
1a060 29 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20  ) macro is used 
1a070 66 6f 72 20 56 65 72 69 66 69 63 61 74 69 6f 6e  for Verification
1a080 2c 20 56 61 6c 69 64 61 74 69 6f 6e 2c 0a 2a 2a  , Validation,.**
1a090 20 61 6e 64 20 41 63 63 72 65 64 69 74 61 74 69   and Accreditati
1a0a0 6f 6e 20 6f 6e 6c 79 2e 20 20 49 74 20 77 6f 72  on only.  It wor
1a0b0 6b 73 20 6c 69 6b 65 20 45 78 70 72 53 65 74 50  ks like ExprSetP
1a0c0 72 6f 70 65 72 74 79 28 29 20 64 75 72 69 6e 67  roperty() during
1a0d0 20 56 56 41 0a 2a 2a 20 70 72 6f 63 65 73 73 65   VVA.** processe
1a0e0 73 20 62 75 74 20 69 73 20 61 20 6e 6f 2d 6f 70  s but is a no-op
1a0f0 20 66 6f 72 20 64 65 6c 69 76 65 72 79 2e 0a 2a   for delivery..*
1a100 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
1a110 44 45 42 55 47 0a 23 20 64 65 66 69 6e 65 20 45  DEBUG.# define E
1a120 78 70 72 53 65 74 56 56 41 50 72 6f 70 65 72 74  xprSetVVAPropert
1a130 79 28 45 2c 50 29 20 20 28 45 29 2d 3e 66 6c 61  y(E,P)  (E)->fla
1a140 67 73 7c 3d 28 50 29 0a 23 65 6c 73 65 0a 23 20  gs|=(P).#else.# 
1a150 64 65 66 69 6e 65 20 45 78 70 72 53 65 74 56 56  define ExprSetVV
1a160 41 50 72 6f 70 65 72 74 79 28 45 2c 50 29 0a 23  AProperty(E,P).#
1a170 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63  endif../*.** Mac
1a180 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  ros to determine
1a190 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62   the number of b
1a1a0 79 74 65 73 20 72 65 71 75 69 72 65 64 20 62 79  ytes required by
1a1b0 20 61 20 6e 6f 72 6d 61 6c 20 45 78 70 72 0a 2a   a normal Expr.*
1a1c0 2a 20 73 74 72 75 63 74 2c 20 61 6e 20 45 78 70  * struct, an Exp
1a1d0 72 20 73 74 72 75 63 74 20 77 69 74 68 20 74 68  r struct with th
1a1e0 65 20 45 50 5f 52 65 64 75 63 65 64 20 66 6c 61  e EP_Reduced fla
1a1f0 67 20 73 65 74 20 69 6e 20 45 78 70 72 2e 66 6c  g set in Expr.fl
1a200 61 67 73 0a 2a 2a 20 61 6e 64 20 61 6e 20 45 78  ags.** and an Ex
1a210 70 72 20 73 74 72 75 63 74 20 77 69 74 68 20 74  pr struct with t
1a220 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20  he EP_TokenOnly 
1a230 66 6c 61 67 20 73 65 74 2e 0a 2a 2f 0a 23 64 65  flag set..*/.#de
1a240 66 69 6e 65 20 45 58 50 52 5f 46 55 4c 4c 53 49  fine EXPR_FULLSI
1a250 5a 45 20 20 20 20 20 20 20 20 20 20 20 73 69 7a  ZE           siz
1a260 65 6f 66 28 45 78 70 72 29 20 20 20 20 20 20 20  eof(Expr)       
1a270 20 20 20 20 2f 2a 20 46 75 6c 6c 20 73 69 7a 65      /* Full size
1a280 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52   */.#define EXPR
1a290 5f 52 45 44 55 43 45 44 53 49 5a 45 20 20 20 20  _REDUCEDSIZE    
1a2a0 20 20 20 20 6f 66 66 73 65 74 6f 66 28 45 78 70      offsetof(Exp
1a2b0 72 2c 69 54 61 62 6c 65 29 20 20 2f 2a 20 43 6f  r,iTable)  /* Co
1a2c0 6d 6d 6f 6e 20 66 65 61 74 75 72 65 73 20 2a 2f  mmon features */
1a2d0 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f 54 4f  .#define EXPR_TO
1a2e0 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 20 20 20 20  KENONLYSIZE     
1a2f0 20 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c 70   offsetof(Expr,p
1a300 4c 65 66 74 29 20 20 20 2f 2a 20 46 65 77 65 72  Left)   /* Fewer
1a310 20 66 65 61 74 75 72 65 73 20 2a 2f 0a 0a 2f 2a   features */../*
1a320 0a 2a 2a 20 46 6c 61 67 73 20 70 61 73 73 65 64  .** Flags passed
1a330 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 45   to the sqlite3E
1a340 78 70 72 44 75 70 28 29 20 66 75 6e 63 74 69 6f  xprDup() functio
1a350 6e 2e 20 53 65 65 20 74 68 65 20 68 65 61 64 65  n. See the heade
1a360 72 20 63 6f 6d 6d 65 6e 74 0a 2a 2a 20 61 62 6f  r comment.** abo
1a370 76 65 20 73 71 6c 69 74 65 33 45 78 70 72 44 75  ve sqlite3ExprDu
1a380 70 28 29 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  p() for details.
1a390 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52  .*/.#define EXPR
1a3a0 44 55 50 5f 52 45 44 55 43 45 20 20 20 20 20 20  DUP_REDUCE      
1a3b0 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 55 73     0x0001  /* Us
1a3c0 65 64 20 72 65 64 75 63 65 64 2d 73 69 7a 65 20  ed reduced-size 
1a3d0 45 78 70 72 20 6e 6f 64 65 73 20 2a 2f 0a 0a 2f  Expr nodes */../
1a3e0 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20 65  *.** A list of e
1a3f0 78 70 72 65 73 73 69 6f 6e 73 2e 20 20 45 61 63  xpressions.  Eac
1a400 68 20 65 78 70 72 65 73 73 69 6f 6e 20 6d 61 79  h expression may
1a410 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 68 61 76 65   optionally have
1a420 20 61 0a 2a 2a 20 6e 61 6d 65 2e 20 20 41 6e 20   a.** name.  An 
1a430 65 78 70 72 2f 6e 61 6d 65 20 63 6f 6d 62 69 6e  expr/name combin
1a440 61 74 69 6f 6e 20 63 61 6e 20 62 65 20 75 73 65  ation can be use
1a450 64 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61 79  d in several way
1a460 73 2c 20 73 75 63 68 0a 2a 2a 20 61 73 20 74 68  s, such.** as th
1a470 65 20 6c 69 73 74 20 6f 66 20 22 65 78 70 72 20  e list of "expr 
1a480 41 53 20 49 44 22 20 66 69 65 6c 64 73 20 66 6f  AS ID" fields fo
1a490 6c 6c 6f 77 69 6e 67 20 61 20 22 53 45 4c 45 43  llowing a "SELEC
1a4a0 54 22 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20  T" or in the.** 
1a4b0 6c 69 73 74 20 6f 66 20 22 49 44 20 3d 20 65 78  list of "ID = ex
1a4c0 70 72 22 20 69 74 65 6d 73 20 69 6e 20 61 6e 20  pr" items in an 
1a4d0 55 50 44 41 54 45 2e 20 20 41 20 6c 69 73 74 20  UPDATE.  A list 
1a4e0 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20 63  of expressions c
1a4f0 61 6e 0a 2a 2a 20 61 6c 73 6f 20 62 65 20 75 73  an.** also be us
1a500 65 64 20 61 73 20 74 68 65 20 61 72 67 75 6d 65  ed as the argume
1a510 6e 74 20 74 6f 20 61 20 66 75 6e 63 74 69 6f 6e  nt to a function
1a520 2c 20 69 6e 20 77 68 69 63 68 20 63 61 73 65 20  , in which case 
1a530 74 68 65 20 61 2e 7a 4e 61 6d 65 0a 2a 2a 20 66  the a.zName.** f
1a540 69 65 6c 64 20 69 73 20 6e 6f 74 20 75 73 65 64  ield is not used
1a550 2e 0a 2a 2a 0a 2a 2a 20 42 79 20 64 65 66 61 75  ..**.** By defau
1a560 6c 74 20 74 68 65 20 45 78 70 72 2e 7a 53 70 61  lt the Expr.zSpa
1a570 6e 20 66 69 65 6c 64 20 68 6f 6c 64 73 20 61 20  n field holds a 
1a580 68 75 6d 61 6e 2d 72 65 61 64 61 62 6c 65 20 64  human-readable d
1a590 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 0a 2a 2a  escription of.**
1a5a0 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
1a5b0 74 68 61 74 20 69 73 20 75 73 65 64 20 69 6e 20  that is used in 
1a5c0 74 68 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f  the generation o
1a5d0 66 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73  f error messages
1a5e0 20 61 6e 64 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6c   and.** column l
1a5f0 61 62 65 6c 73 2e 20 20 49 6e 20 74 68 69 73 20  abels.  In this 
1a600 63 61 73 65 2c 20 45 78 70 72 2e 7a 53 70 61 6e  case, Expr.zSpan
1a610 20 69 73 20 74 79 70 69 63 61 6c 6c 79 20 74 68   is typically th
1a620 65 20 74 65 78 74 20 6f 66 20 61 0a 2a 2a 20 63  e text of a.** c
1a630 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e  olumn expression
1a640 20 61 73 20 69 74 20 65 78 69 73 74 73 20 69 6e   as it exists in
1a650 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d   a SELECT statem
1a660 65 6e 74 2e 20 20 48 6f 77 65 76 65 72 2c 20 69  ent.  However, i
1a670 66 0a 2a 2a 20 74 68 65 20 62 53 70 61 6e 49 73  f.** the bSpanIs
1a680 54 61 62 20 66 6c 61 67 20 69 73 20 73 65 74 2c  Tab flag is set,
1a690 20 74 68 65 6e 20 7a 53 70 61 6e 20 69 73 20 6f   then zSpan is o
1a6a0 76 65 72 6c 6f 61 64 65 64 20 74 6f 20 6d 65 61  verloaded to mea
1a6b0 6e 20 74 68 65 20 6e 61 6d 65 0a 2a 2a 20 6f 66  n the name.** of
1a6c0 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75   the result colu
1a6d0 6d 6e 20 69 6e 20 74 68 65 20 66 6f 72 6d 3a 20  mn in the form: 
1a6e0 44 41 54 41 42 41 53 45 2e 54 41 42 4c 45 2e 43  DATABASE.TABLE.C
1a6f0 4f 4c 55 4d 4e 2e 20 20 54 68 69 73 20 6c 61 74  OLUMN.  This lat
1a700 65 72 0a 2a 2a 20 66 6f 72 6d 20 69 73 20 75 73  er.** form is us
1a710 65 64 20 66 6f 72 20 6e 61 6d 65 20 72 65 73 6f  ed for name reso
1a720 6c 75 74 69 6f 6e 20 77 69 74 68 20 6e 65 73 74  lution with nest
1a730 65 64 20 46 52 4f 4d 20 63 6c 61 75 73 65 73 2e  ed FROM clauses.
1a740 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72 4c  .*/.struct ExprL
1a750 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e 45 78 70  ist {.  int nExp
1a760 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  r;             /
1a770 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 78 70 72  * Number of expr
1a780 65 73 73 69 6f 6e 73 20 6f 6e 20 74 68 65 20 6c  essions on the l
1a790 69 73 74 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  ist */.  struct 
1a7a0 45 78 70 72 4c 69 73 74 5f 69 74 65 6d 20 7b 20  ExprList_item { 
1a7b0 2f 2a 20 46 6f 72 20 65 61 63 68 20 65 78 70 72  /* For each expr
1a7c0 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 6c 69  ession in the li
1a7d0 73 74 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a  st */.    Expr *
1a7e0 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20  pExpr;          
1a7f0 20 20 2f 2a 20 54 68 65 20 70 61 72 73 65 20 74    /* The parse t
1a800 72 65 65 20 66 6f 72 20 74 68 69 73 20 65 78 70  ree for this exp
1a810 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 63  ression */.    c
1a820 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
1a830 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20         /* Token 
1a840 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
1a850 74 68 69 73 20 65 78 70 72 65 73 73 69 6f 6e 20  this expression 
1a860 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 53 70  */.    char *zSp
1a870 61 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  an;            /
1a880 2a 20 4f 72 69 67 69 6e 61 6c 20 74 65 78 74 20  * Original text 
1a890 6f 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  of the expressio
1a8a0 6e 20 2a 2f 0a 20 20 20 20 75 38 20 73 6f 72 74  n */.    u8 sort
1a8b0 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20 20 20  Order;          
1a8c0 20 2f 2a 20 31 20 66 6f 72 20 44 45 53 43 20 6f   /* 1 for DESC o
1a8d0 72 20 30 20 66 6f 72 20 41 53 43 20 2a 2f 0a 20  r 0 for ASC */. 
1a8e0 20 20 20 75 6e 73 69 67 6e 65 64 20 64 6f 6e 65     unsigned done
1a8f0 20 3a 31 3b 20 20 20 20 20 20 20 2f 2a 20 41 20   :1;       /* A 
1a900 66 6c 61 67 20 74 6f 20 69 6e 64 69 63 61 74 65  flag to indicate
1a910 20 77 68 65 6e 20 70 72 6f 63 65 73 73 69 6e 67   when processing
1a920 20 69 73 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a   is finished */.
1a930 20 20 20 20 75 6e 73 69 67 6e 65 64 20 62 53 70      unsigned bSp
1a940 61 6e 49 73 54 61 62 20 3a 31 3b 20 2f 2a 20 7a  anIsTab :1; /* z
1a950 53 70 61 6e 20 68 6f 6c 64 73 20 44 42 2e 54 41  Span holds DB.TA
1a960 42 4c 45 2e 43 4f 4c 55 4d 4e 20 2a 2f 0a 20 20  BLE.COLUMN */.  
1a970 20 20 75 6e 73 69 67 6e 65 64 20 72 65 75 73 61    unsigned reusa
1a980 62 6c 65 20 3a 31 3b 20 20 20 2f 2a 20 43 6f 6e  ble :1;   /* Con
1a990 73 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e  stant expression
1a9a0 20 69 73 20 72 65 75 73 61 62 6c 65 20 2a 2f 0a   is reusable */.
1a9b0 20 20 20 20 75 6e 73 69 67 6e 65 64 20 62 53 6f      unsigned bSo
1a9c0 72 74 65 72 52 65 66 20 3a 31 3b 20 2f 2a 20 44  rterRef :1; /* D
1a9d0 65 66 65 72 20 65 76 61 6c 75 61 74 69 6f 6e 20  efer evaluation 
1a9e0 75 6e 74 69 6c 20 61 66 74 65 72 20 73 6f 72 74  until after sort
1a9f0 69 6e 67 20 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e  ing */.    union
1aa00 20 7b 0a 20 20 20 20 20 20 73 74 72 75 63 74 20   {.      struct 
1aa10 7b 0a 20 20 20 20 20 20 20 20 75 31 36 20 69 4f  {.        u16 iO
1aa20 72 64 65 72 42 79 43 6f 6c 3b 20 20 20 20 20 20  rderByCol;      
1aa30 2f 2a 20 46 6f 72 20 4f 52 44 45 52 20 42 59 2c  /* For ORDER BY,
1aa40 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69   column number i
1aa50 6e 20 72 65 73 75 6c 74 20 73 65 74 20 2a 2f 0a  n result set */.
1aa60 20 20 20 20 20 20 20 20 75 31 36 20 69 41 6c 69          u16 iAli
1aa70 61 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  as;           /*
1aa80 20 49 6e 64 65 78 20 69 6e 74 6f 20 50 61 72 73   Index into Pars
1aa90 65 2e 61 41 6c 69 61 73 5b 5d 20 66 6f 72 20 7a  e.aAlias[] for z
1aaa0 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 20 20 7d 20  Name */.      } 
1aab0 78 3b 0a 20 20 20 20 20 20 69 6e 74 20 69 43 6f  x;.      int iCo
1aac0 6e 73 74 45 78 70 72 52 65 67 3b 20 20 20 20 20  nstExprReg;     
1aad0 20 2f 2a 20 52 65 67 69 73 74 65 72 20 69 6e 20   /* Register in 
1aae0 77 68 69 63 68 20 45 78 70 72 20 76 61 6c 75 65  which Expr value
1aaf0 20 69 73 20 63 61 63 68 65 64 20 2a 2f 0a 20 20   is cached */.  
1ab00 20 20 7d 20 75 3b 0a 20 20 7d 20 61 5b 31 5d 3b    } u;.  } a[1];
1ab10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab20 20 20 2f 2a 20 4f 6e 65 20 73 6c 6f 74 20 66 6f    /* One slot fo
1ab30 72 20 65 61 63 68 20 65 78 70 72 65 73 73 69 6f  r each expressio
1ab40 6e 20 69 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f  n in the list */
1ab50 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  .};../*.** An in
1ab60 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73  stance of this s
1ab70 74 72 75 63 74 75 72 65 20 63 61 6e 20 68 6f 6c  tructure can hol
1ab80 64 20 61 20 73 69 6d 70 6c 65 20 6c 69 73 74 20  d a simple list 
1ab90 6f 66 20 69 64 65 6e 74 69 66 69 65 72 73 2c 0a  of identifiers,.
1aba0 2a 2a 20 73 75 63 68 20 61 73 20 74 68 65 20 6c  ** such as the l
1abb0 69 73 74 20 22 61 2c 62 2c 63 22 20 69 6e 20 74  ist "a,b,c" in t
1abc0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61  he following sta
1abd0 74 65 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 20  tements:.**.**  
1abe0 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
1abf0 74 28 61 2c 62 2c 63 29 20 56 41 4c 55 45 53 20  t(a,b,c) VALUES 
1ac00 2e 2e 2e 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45  ...;.**      CRE
1ac10 41 54 45 20 49 4e 44 45 58 20 69 64 78 20 4f 4e  ATE INDEX idx ON
1ac20 20 74 28 61 2c 62 2c 63 29 3b 0a 2a 2a 20 20 20   t(a,b,c);.**   
1ac30 20 20 20 43 52 45 41 54 45 20 54 52 49 47 47 45     CREATE TRIGGE
1ac40 52 20 74 72 69 67 20 42 45 46 4f 52 45 20 55 50  R trig BEFORE UP
1ac50 44 41 54 45 20 4f 4e 20 74 28 61 2c 62 2c 63 29  DATE ON t(a,b,c)
1ac60 20 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68 65 20   ...;.**.** The 
1ac70 49 64 4c 69 73 74 2e 61 2e 69 64 78 20 66 69 65  IdList.a.idx fie
1ac80 6c 64 20 69 73 20 75 73 65 64 20 77 68 65 6e 20  ld is used when 
1ac90 74 68 65 20 49 64 4c 69 73 74 20 72 65 70 72 65  the IdList repre
1aca0 73 65 6e 74 73 20 74 68 65 20 6c 69 73 74 20 6f  sents the list o
1acb0 66 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  f.** column name
1acc0 73 20 61 66 74 65 72 20 61 20 74 61 62 6c 65 20  s after a table 
1acd0 6e 61 6d 65 20 69 6e 20 61 6e 20 49 4e 53 45 52  name in an INSER
1ace0 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e  T statement.  In
1acf0 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 2a   the statement.*
1ad00 2a 0a 2a 2a 20 20 20 20 20 49 4e 53 45 52 54 20  *.**     INSERT 
1ad10 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 2e 2e  INTO t(a,b,c) ..
1ad20 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 22 61 22 20 69  ..**.** If "a" i
1ad30 73 20 74 68 65 20 6b 2d 74 68 20 63 6f 6c 75 6d  s the k-th colum
1ad40 6e 20 6f 66 20 74 61 62 6c 65 20 22 74 22 2c 20  n of table "t", 
1ad50 74 68 65 6e 20 49 64 4c 69 73 74 2e 61 5b 30 5d  then IdList.a[0]
1ad60 2e 69 64 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72 75  .idx==k..*/.stru
1ad70 63 74 20 49 64 4c 69 73 74 20 7b 0a 20 20 73 74  ct IdList {.  st
1ad80 72 75 63 74 20 49 64 4c 69 73 74 5f 69 74 65 6d  ruct IdList_item
1ad90 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61   {.    char *zNa
1ada0 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65  me;      /* Name
1adb0 20 6f 66 20 74 68 65 20 69 64 65 6e 74 69 66 69   of the identifi
1adc0 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 64  er */.    int id
1add0 78 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49  x;          /* I
1ade0 6e 64 65 78 20 69 6e 20 73 6f 6d 65 20 54 61 62  ndex in some Tab
1adf0 6c 65 2e 61 43 6f 6c 5b 5d 20 6f 66 20 61 20 63  le.aCol[] of a c
1ae00 6f 6c 75 6d 6e 20 6e 61 6d 65 64 20 7a 4e 61 6d  olumn named zNam
1ae10 65 20 2a 2f 0a 20 20 7d 20 2a 61 3b 0a 20 20 69  e */.  } *a;.  i
1ae20 6e 74 20 6e 49 64 3b 20 20 20 20 20 20 20 20 20  nt nId;         
1ae30 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 69 64 65  /* Number of ide
1ae40 6e 74 69 66 69 65 72 73 20 6f 6e 20 74 68 65 20  ntifiers on the 
1ae50 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  list */.};../*.*
1ae60 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
1ae70 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69  structure descri
1ae80 62 65 73 20 74 68 65 20 46 52 4f 4d 20 63 6c 61  bes the FROM cla
1ae90 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20  use of a SELECT 
1aea0 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 45 61  statement..** Ea
1aeb0 63 68 20 74 61 62 6c 65 20 6f 72 20 73 75 62 71  ch table or subq
1aec0 75 65 72 79 20 69 6e 20 74 68 65 20 46 52 4f 4d  uery in the FROM
1aed0 20 63 6c 61 75 73 65 20 69 73 20 61 20 73 65 70   clause is a sep
1aee0 61 72 61 74 65 20 65 6c 65 6d 65 6e 74 20 6f 66  arate element of
1aef0 0a 2a 2a 20 74 68 65 20 53 72 63 4c 69 73 74 2e  .** the SrcList.
1af00 61 5b 5d 20 61 72 72 61 79 2e 0a 2a 2a 0a 2a 2a  a[] array..**.**
1af10 20 57 69 74 68 20 74 68 65 20 61 64 64 69 74 69   With the additi
1af20 6f 6e 20 6f 66 20 6d 75 6c 74 69 70 6c 65 20 64  on of multiple d
1af30 61 74 61 62 61 73 65 20 73 75 70 70 6f 72 74 2c  atabase support,
1af40 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
1af50 74 72 75 63 74 75 72 65 0a 2a 2a 20 63 61 6e 20  tructure.** can 
1af60 61 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f 20  also be used to 
1af70 64 65 73 63 72 69 62 65 20 61 20 70 61 72 74 69  describe a parti
1af80 63 75 6c 61 72 20 74 61 62 6c 65 20 73 75 63 68  cular table such
1af90 20 61 73 20 74 68 65 20 74 61 62 6c 65 20 74 68   as the table th
1afa0 61 74 0a 2a 2a 20 69 73 20 6d 6f 64 69 66 69 65  at.** is modifie
1afb0 64 20 62 79 20 61 6e 20 49 4e 53 45 52 54 2c 20  d by an INSERT, 
1afc0 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44 41 54  DELETE, or UPDAT
1afd0 45 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e  E statement.  In
1afe0 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2c 0a 2a   standard SQL,.*
1aff0 2a 20 73 75 63 68 20 61 20 74 61 62 6c 65 20 6d  * such a table m
1b000 75 73 74 20 62 65 20 61 20 73 69 6d 70 6c 65 20  ust be a simple 
1b010 6e 61 6d 65 3a 20 49 44 2e 20 20 42 75 74 20 69  name: ID.  But i
1b020 6e 20 53 51 4c 69 74 65 2c 20 74 68 65 20 74 61  n SQLite, the ta
1b030 62 6c 65 20 63 61 6e 0a 2a 2a 20 6e 6f 77 20 62  ble can.** now b
1b040 65 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20  e identified by 
1b050 61 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 2c  a database name,
1b060 20 61 20 64 6f 74 2c 20 74 68 65 6e 20 74 68 65   a dot, then the
1b070 20 74 61 62 6c 65 20 6e 61 6d 65 3a 20 49 44 2e   table name: ID.
1b080 49 44 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6a 6f  ID..**.** The jo
1b090 69 6e 74 79 70 65 20 73 74 61 72 74 73 20 6f 75  intype starts ou
1b0a0 74 20 73 68 6f 77 69 6e 67 20 74 68 65 20 6a 6f  t showing the jo
1b0b0 69 6e 20 74 79 70 65 20 62 65 74 77 65 65 6e 20  in type between 
1b0c0 74 68 65 20 63 75 72 72 65 6e 74 20 74 61 62 6c  the current tabl
1b0d0 65 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6e 65 78  e.** and the nex
1b0e0 74 20 74 61 62 6c 65 20 6f 6e 20 74 68 65 20 6c  t table on the l
1b0f0 69 73 74 2e 20 20 54 68 65 20 70 61 72 73 65 72  ist.  The parser
1b100 20 62 75 69 6c 64 73 20 74 68 65 20 6c 69 73 74   builds the list
1b110 20 74 68 69 73 20 77 61 79 2e 0a 2a 2a 20 42 75   this way..** Bu
1b120 74 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74  t sqlite3SrcList
1b130 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 29 20  ShiftJoinType() 
1b140 6c 61 74 65 72 20 73 68 69 66 74 73 20 74 68 65  later shifts the
1b150 20 6a 6f 69 6e 74 79 70 65 73 20 73 6f 20 74 68   jointypes so th
1b160 61 74 20 65 61 63 68 0a 2a 2a 20 6a 6f 69 6e 74  at each.** joint
1b170 79 70 65 20 65 78 70 72 65 73 73 65 73 20 74 68  ype expresses th
1b180 65 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20 74  e join between t
1b190 68 65 20 74 61 62 6c 65 20 61 6e 64 20 74 68 65  he table and the
1b1a0 20 70 72 65 76 69 6f 75 73 20 74 61 62 6c 65 2e   previous table.
1b1b0 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 63 6f  .**.** In the co
1b1c0 6c 55 73 65 64 20 66 69 65 6c 64 2c 20 74 68 65  lUsed field, the
1b1d0 20 68 69 67 68 2d 6f 72 64 65 72 20 62 69 74 20   high-order bit 
1b1e0 28 62 69 74 20 36 33 29 20 69 73 20 73 65 74 20  (bit 63) is set 
1b1f0 69 66 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20  if the table.** 
1b200 63 6f 6e 74 61 69 6e 73 20 6d 6f 72 65 20 74 68  contains more th
1b210 61 6e 20 36 33 20 63 6f 6c 75 6d 6e 73 20 61 6e  an 63 columns an
1b220 64 20 74 68 65 20 36 34 2d 74 68 20 6f 72 20 6c  d the 64-th or l
1b230 61 74 65 72 20 63 6f 6c 75 6d 6e 20 69 73 20 75  ater column is u
1b240 73 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  sed..*/.struct S
1b250 72 63 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e  rcList {.  int n
1b260 53 72 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  Src;        /* N
1b270 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73 20  umber of tables 
1b280 6f 72 20 73 75 62 71 75 65 72 69 65 73 20 69 6e  or subqueries in
1b290 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
1b2a0 20 2a 2f 0a 20 20 75 33 32 20 6e 41 6c 6c 6f 63   */.  u32 nAlloc
1b2b0 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72  ;      /* Number
1b2c0 20 6f 66 20 65 6e 74 72 69 65 73 20 61 6c 6c 6f   of entries allo
1b2d0 63 61 74 65 64 20 69 6e 20 61 5b 5d 20 62 65 6c  cated in a[] bel
1b2e0 6f 77 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 53  ow */.  struct S
1b2f0 72 63 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20  rcList_item {.  
1b300 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d    Schema *pSchem
1b310 61 3b 20 20 2f 2a 20 53 63 68 65 6d 61 20 74 6f  a;  /* Schema to
1b320 20 77 68 69 63 68 20 74 68 69 73 20 69 74 65 6d   which this item
1b330 20 69 73 20 66 69 78 65 64 20 2a 2f 0a 20 20 20   is fixed */.   
1b340 20 63 68 61 72 20 2a 7a 44 61 74 61 62 61 73 65   char *zDatabase
1b350 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61  ;  /* Name of da
1b360 74 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20 74  tabase holding t
1b370 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20  his table */.   
1b380 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
1b390 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
1b3a0 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63  e table */.    c
1b3b0 68 61 72 20 2a 7a 41 6c 69 61 73 3b 20 20 20 20  har *zAlias;    
1b3c0 20 2f 2a 20 54 68 65 20 22 42 22 20 70 61 72 74   /* The "B" part
1b3d0 20 6f 66 20 61 20 22 41 20 41 53 20 42 22 20 70   of a "A AS B" p
1b3e0 68 72 61 73 65 2e 20 20 7a 4e 61 6d 65 20 69 73  hrase.  zName is
1b3f0 20 74 68 65 20 22 41 22 20 2a 2f 0a 20 20 20 20   the "A" */.    
1b400 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20  Table *pTab;    
1b410 20 20 2f 2a 20 41 6e 20 53 51 4c 20 74 61 62 6c    /* An SQL tabl
1b420 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
1b430 74 6f 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20  to zName */.    
1b440 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b  Select *pSelect;
1b450 20 20 2f 2a 20 41 20 53 45 4c 45 43 54 20 73 74    /* A SELECT st
1b460 61 74 65 6d 65 6e 74 20 75 73 65 64 20 69 6e 20  atement used in 
1b470 70 6c 61 63 65 20 6f 66 20 61 20 74 61 62 6c 65  place of a table
1b480 20 6e 61 6d 65 20 2a 2f 0a 20 20 20 20 69 6e 74   name */.    int
1b490 20 61 64 64 72 46 69 6c 6c 53 75 62 3b 20 20 2f   addrFillSub;  /
1b4a0 2a 20 41 64 64 72 65 73 73 20 6f 66 20 73 75 62  * Address of sub
1b4b0 72 6f 75 74 69 6e 65 20 74 6f 20 6d 61 6e 69 66  routine to manif
1b4c0 65 73 74 20 61 20 73 75 62 71 75 65 72 79 20 2a  est a subquery *
1b4d0 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65 74  /.    int regRet
1b4e0 75 72 6e 3b 20 20 20 20 2f 2a 20 52 65 67 69 73  urn;    /* Regis
1b4f0 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 65 74 75  ter holding retu
1b500 72 6e 20 61 64 64 72 65 73 73 20 6f 66 20 61 64  rn address of ad
1b510 64 72 46 69 6c 6c 53 75 62 20 2a 2f 0a 20 20 20  drFillSub */.   
1b520 20 69 6e 74 20 72 65 67 52 65 73 75 6c 74 3b 20   int regResult; 
1b530 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 73 20     /* Registers 
1b540 68 6f 6c 64 69 6e 67 20 72 65 73 75 6c 74 73 20  holding results 
1b550 6f 66 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20  of a co-routine 
1b560 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 7b 0a  */.    struct {.
1b570 20 20 20 20 20 20 75 38 20 6a 6f 69 6e 74 79 70        u8 jointyp
1b580 65 3b 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20  e;      /* Type 
1b590 6f 66 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20  of join between 
1b5a0 74 68 69 73 20 74 61 62 6c 65 20 61 6e 64 20 74  this table and t
1b5b0 68 65 20 70 72 65 76 69 6f 75 73 20 2a 2f 0a 20  he previous */. 
1b5c0 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 6e 6f       unsigned no
1b5d0 74 49 6e 64 65 78 65 64 20 3a 31 3b 20 20 20 20  tIndexed :1;    
1b5e0 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 72 65  /* True if there
1b5f0 20 69 73 20 61 20 4e 4f 54 20 49 4e 44 45 58 45   is a NOT INDEXE
1b600 44 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20  D clause */.    
1b610 20 20 75 6e 73 69 67 6e 65 64 20 69 73 49 6e 64    unsigned isInd
1b620 65 78 65 64 42 79 20 3a 31 3b 20 20 20 2f 2a 20  exedBy :1;   /* 
1b630 54 72 75 65 20 69 66 20 74 68 65 72 65 20 69 73  True if there is
1b640 20 61 6e 20 49 4e 44 45 58 45 44 20 42 59 20 63   an INDEXED BY c
1b650 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 20 20 75  lause */.      u
1b660 6e 73 69 67 6e 65 64 20 69 73 54 61 62 46 75 6e  nsigned isTabFun
1b670 63 20 3a 31 3b 20 20 20 20 20 2f 2a 20 54 72 75  c :1;     /* Tru
1b680 65 20 69 66 20 74 61 62 6c 65 2d 76 61 6c 75 65  e if table-value
1b690 64 2d 66 75 6e 63 74 69 6f 6e 20 73 79 6e 74 61  d-function synta
1b6a0 78 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67  x */.      unsig
1b6b0 6e 65 64 20 69 73 43 6f 72 72 65 6c 61 74 65 64  ned isCorrelated
1b6c0 20 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69 66   :1;  /* True if
1b6d0 20 73 75 62 2d 71 75 65 72 79 20 69 73 20 63 6f   sub-query is co
1b6e0 72 72 65 6c 61 74 65 64 20 2a 2f 0a 20 20 20 20  rrelated */.    
1b6f0 20 20 75 6e 73 69 67 6e 65 64 20 76 69 61 43 6f    unsigned viaCo
1b700 72 6f 75 74 69 6e 65 20 3a 31 3b 20 20 2f 2a 20  routine :1;  /* 
1b710 49 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73 20 61  Implemented as a
1b720 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 20   co-routine */. 
1b730 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73       unsigned is
1b740 52 65 63 75 72 73 69 76 65 20 3a 31 3b 20 20 20  Recursive :1;   
1b750 2f 2a 20 54 72 75 65 20 66 6f 72 20 72 65 63 75  /* True for recu
1b760 72 73 69 76 65 20 72 65 66 65 72 65 6e 63 65 20  rsive reference 
1b770 69 6e 20 57 49 54 48 20 2a 2f 0a 20 20 20 20 7d  in WITH */.    }
1b780 20 66 67 3b 0a 20 20 20 20 69 6e 74 20 69 43 75   fg;.    int iCu
1b790 72 73 6f 72 3b 20 20 20 20 20 20 2f 2a 20 54 68  rsor;      /* Th
1b7a0 65 20 56 44 42 45 20 63 75 72 73 6f 72 20 6e 75  e VDBE cursor nu
1b7b0 6d 62 65 72 20 75 73 65 64 20 74 6f 20 61 63 63  mber used to acc
1b7c0 65 73 73 20 74 68 69 73 20 74 61 62 6c 65 20 2a  ess this table *
1b7d0 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 4f 6e 3b  /.    Expr *pOn;
1b7e0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 4f          /* The O
1b7f0 4e 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f  N clause of a jo
1b800 69 6e 20 2a 2f 0a 20 20 20 20 49 64 4c 69 73 74  in */.    IdList
1b810 20 2a 70 55 73 69 6e 67 3b 20 20 20 2f 2a 20 54   *pUsing;   /* T
1b820 68 65 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20  he USING clause 
1b830 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20  of a join */.   
1b840 20 42 69 74 6d 61 73 6b 20 63 6f 6c 55 73 65 64   Bitmask colUsed
1b850 3b 20 20 2f 2a 20 42 69 74 20 4e 20 28 31 3c 3c  ;  /* Bit N (1<<
1b860 4e 29 20 73 65 74 20 69 66 20 63 6f 6c 75 6d 6e  N) set if column
1b870 20 4e 20 6f 66 20 70 54 61 62 20 69 73 20 75 73   N of pTab is us
1b880 65 64 20 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20  ed */.    union 
1b890 7b 0a 20 20 20 20 20 20 63 68 61 72 20 2a 7a 49  {.      char *zI
1b8a0 6e 64 65 78 65 64 42 79 3b 20 20 20 20 2f 2a 20  ndexedBy;    /* 
1b8b0 49 64 65 6e 74 69 66 69 65 72 20 66 72 6f 6d 20  Identifier from 
1b8c0 22 49 4e 44 45 58 45 44 20 42 59 20 3c 7a 49 6e  "INDEXED BY <zIn
1b8d0 64 65 78 3e 22 20 63 6c 61 75 73 65 20 2a 2f 0a  dex>" clause */.
1b8e0 20 20 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a        ExprList *
1b8f0 70 46 75 6e 63 41 72 67 3b 20 20 2f 2a 20 41 72  pFuncArg;  /* Ar
1b900 67 75 6d 65 6e 74 73 20 74 6f 20 74 61 62 6c 65  guments to table
1b910 2d 76 61 6c 75 65 64 2d 66 75 6e 63 74 69 6f 6e  -valued-function
1b920 20 2a 2f 0a 20 20 20 20 7d 20 75 31 3b 0a 20 20   */.    } u1;.  
1b930 20 20 49 6e 64 65 78 20 2a 70 49 42 49 6e 64 65    Index *pIBInde
1b940 78 3b 20 20 2f 2a 20 49 6e 64 65 78 20 73 74 72  x;  /* Index str
1b950 75 63 74 75 72 65 20 63 6f 72 72 65 73 70 6f 6e  ucture correspon
1b960 64 69 6e 67 20 74 6f 20 75 31 2e 7a 49 6e 64 65  ding to u1.zInde
1b970 78 65 64 42 79 20 2a 2f 0a 20 20 7d 20 61 5b 31  xedBy */.  } a[1
1b980 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ];             /
1b990 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20  * One entry for 
1b9a0 65 61 63 68 20 69 64 65 6e 74 69 66 69 65 72 20  each identifier 
1b9b0 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d  on the list */.}
1b9c0 3b 0a 0a 2f 2a 0a 2a 2a 20 50 65 72 6d 69 74 74  ;../*.** Permitt
1b9d0 65 64 20 76 61 6c 75 65 73 20 6f 66 20 74 68 65  ed values of the
1b9e0 20 53 72 63 4c 69 73 74 2e 61 2e 6a 6f 69 6e 74   SrcList.a.joint
1b9f0 79 70 65 20 66 69 65 6c 64 0a 2a 2f 0a 23 64 65  ype field.*/.#de
1ba00 66 69 6e 65 20 4a 54 5f 49 4e 4e 45 52 20 20 20  fine JT_INNER   
1ba10 20 20 30 78 30 30 30 31 20 20 20 20 2f 2a 20 41    0x0001    /* A
1ba20 6e 79 20 6b 69 6e 64 20 6f 66 20 69 6e 6e 65 72  ny kind of inner
1ba30 20 6f 72 20 63 72 6f 73 73 20 6a 6f 69 6e 20 2a   or cross join *
1ba40 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 43 52 4f  /.#define JT_CRO
1ba50 53 53 20 20 20 20 20 30 78 30 30 30 32 20 20 20  SS     0x0002   
1ba60 20 2f 2a 20 45 78 70 6c 69 63 69 74 20 75 73 65   /* Explicit use
1ba70 20 6f 66 20 74 68 65 20 43 52 4f 53 53 20 6b 65   of the CROSS ke
1ba80 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65  yword */.#define
1ba90 20 4a 54 5f 4e 41 54 55 52 41 4c 20 20 20 30 78   JT_NATURAL   0x
1baa0 30 30 30 34 20 20 20 20 2f 2a 20 54 72 75 65 20  0004    /* True 
1bab0 66 6f 72 20 61 20 22 6e 61 74 75 72 61 6c 22 20  for a "natural" 
1bac0 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  join */.#define 
1bad0 4a 54 5f 4c 45 46 54 20 20 20 20 20 20 30 78 30  JT_LEFT      0x0
1bae0 30 30 38 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f  008    /* Left o
1baf0 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65  uter join */.#de
1bb00 66 69 6e 65 20 4a 54 5f 52 49 47 48 54 20 20 20  fine JT_RIGHT   
1bb10 20 20 30 78 30 30 31 30 20 20 20 20 2f 2a 20 52    0x0010    /* R
1bb20 69 67 68 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20  ight outer join 
1bb30 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4f 55  */.#define JT_OU
1bb40 54 45 52 20 20 20 20 20 30 78 30 30 32 30 20 20  TER     0x0020  
1bb50 20 20 2f 2a 20 54 68 65 20 22 4f 55 54 45 52 22    /* The "OUTER"
1bb60 20 6b 65 79 77 6f 72 64 20 69 73 20 70 72 65 73   keyword is pres
1bb70 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  ent */.#define J
1bb80 54 5f 45 52 52 4f 52 20 20 20 20 20 30 78 30 30  T_ERROR     0x00
1bb90 34 30 20 20 20 20 2f 2a 20 75 6e 6b 6e 6f 77 6e  40    /* unknown
1bba0 20 6f 72 20 75 6e 73 75 70 70 6f 72 74 65 64 20   or unsupported 
1bbb0 6a 6f 69 6e 20 74 79 70 65 20 2a 2f 0a 0a 0a 2f  join type */.../
1bbc0 2a 0a 2a 2a 20 46 6c 61 67 73 20 61 70 70 72 6f  *.** Flags appro
1bbd0 70 72 69 61 74 65 20 66 6f 72 20 74 68 65 20 77  priate for the w
1bbe0 63 74 72 6c 46 6c 61 67 73 20 70 61 72 61 6d 65  ctrlFlags parame
1bbf0 74 65 72 20 6f 66 20 73 71 6c 69 74 65 33 57 68  ter of sqlite3Wh
1bc00 65 72 65 42 65 67 69 6e 28 29 0a 2a 2a 20 61 6e  ereBegin().** an
1bc10 64 20 74 68 65 20 57 68 65 72 65 49 6e 66 6f 2e  d the WhereInfo.
1bc20 77 63 74 72 6c 46 6c 61 67 73 20 6d 65 6d 62 65  wctrlFlags membe
1bc30 72 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63  r..**.** Value c
1bc40 6f 6e 73 74 72 61 69 6e 74 73 20 28 65 6e 66 6f  onstraints (enfo
1bc50 72 63 65 64 20 76 69 61 20 61 73 73 65 72 74 28  rced via assert(
1bc60 29 29 3a 0a 2a 2a 20 20 20 20 20 57 48 45 52 45  )):.**     WHERE
1bc70 5f 55 53 45 5f 4c 49 4d 49 54 20 20 3d 3d 20 53  _USE_LIMIT  == S
1bc80 46 5f 46 69 78 65 64 4c 69 6d 69 74 0a 2a 2f 0a  F_FixedLimit.*/.
1bc90 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52  #define WHERE_OR
1bca0 44 45 52 42 59 5f 4e 4f 52 4d 41 4c 20 20 20 30  DERBY_NORMAL   0
1bcb0 78 30 30 30 30 20 2f 2a 20 4e 6f 2d 6f 70 20 2a  x0000 /* No-op *
1bcc0 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1bcd0 4f 52 44 45 52 42 59 5f 4d 49 4e 20 20 20 20 20  ORDERBY_MIN     
1bce0 20 30 78 30 30 30 31 20 2f 2a 20 4f 52 44 45 52   0x0001 /* ORDER
1bcf0 20 42 59 20 70 72 6f 63 65 73 73 69 6e 67 20 66   BY processing f
1bd00 6f 72 20 6d 69 6e 28 29 20 66 75 6e 63 20 2a 2f  or min() func */
1bd10 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
1bd20 52 44 45 52 42 59 5f 4d 41 58 20 20 20 20 20 20  RDERBY_MAX      
1bd30 30 78 30 30 30 32 20 2f 2a 20 4f 52 44 45 52 20  0x0002 /* ORDER 
1bd40 42 59 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f  BY processing fo
1bd50 72 20 6d 61 78 28 29 20 66 75 6e 63 20 2a 2f 0a  r max() func */.
1bd60 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e  #define WHERE_ON
1bd70 45 50 41 53 53 5f 44 45 53 49 52 45 44 20 20 30  EPASS_DESIRED  0
1bd80 78 30 30 30 34 20 2f 2a 20 57 61 6e 74 20 74 6f  x0004 /* Want to
1bd90 20 64 6f 20 6f 6e 65 2d 70 61 73 73 20 55 50 44   do one-pass UPD
1bda0 41 54 45 2f 44 45 4c 45 54 45 20 2a 2f 0a 23 64  ATE/DELETE */.#d
1bdb0 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50  efine WHERE_ONEP
1bdc0 41 53 53 5f 4d 55 4c 54 49 52 4f 57 20 30 78 30  ASS_MULTIROW 0x0
1bdd0 30 30 38 20 2f 2a 20 4f 4e 45 50 41 53 53 20 69  008 /* ONEPASS i
1bde0 73 20 6f 6b 20 77 69 74 68 20 6d 75 6c 74 69 70  s ok with multip
1bdf0 6c 65 20 72 6f 77 73 20 2a 2f 0a 23 64 65 66 69  le rows */.#defi
1be00 6e 65 20 57 48 45 52 45 5f 44 55 50 4c 49 43 41  ne WHERE_DUPLICA
1be10 54 45 53 5f 4f 4b 20 20 20 20 30 78 30 30 31 30  TES_OK    0x0010
1be20 20 2f 2a 20 4f 6b 20 74 6f 20 72 65 74 75 72 6e   /* Ok to return
1be30 20 61 20 72 6f 77 20 6d 6f 72 65 20 74 68 61 6e   a row more than
1be40 20 6f 6e 63 65 20 2a 2f 0a 23 64 65 66 69 6e 65   once */.#define
1be50 20 57 48 45 52 45 5f 4f 52 5f 53 55 42 43 4c 41   WHERE_OR_SUBCLA
1be60 55 53 45 20 20 20 20 20 30 78 30 30 32 30 20 2f  USE     0x0020 /
1be70 2a 20 50 72 6f 63 65 73 73 69 6e 67 20 61 20 73  * Processing a s
1be80 75 62 2d 57 48 45 52 45 20 61 73 20 70 61 72 74  ub-WHERE as part
1be90 20 6f 66 0a 20 20 20 20 20 20 20 20 20 20 20 20   of.            
1bea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1beb0 20 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65            ** the
1bec0 20 4f 52 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e   OR optimization
1bed0 20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45    */.#define WHE
1bee0 52 45 5f 47 52 4f 55 50 42 59 20 20 20 20 20 20  RE_GROUPBY      
1bef0 20 20 20 20 30 78 30 30 34 30 20 2f 2a 20 70 4f      0x0040 /* pO
1bf00 72 64 65 72 42 79 20 69 73 20 72 65 61 6c 6c 79  rderBy is really
1bf10 20 61 20 47 52 4f 55 50 20 42 59 20 2a 2f 0a 23   a GROUP BY */.#
1bf20 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53  define WHERE_DIS
1bf30 54 49 4e 43 54 42 59 20 20 20 20 20 20 20 30 78  TINCTBY       0x
1bf40 30 30 38 30 20 2f 2a 20 70 4f 72 64 65 72 62 79  0080 /* pOrderby
1bf50 20 69 73 20 72 65 61 6c 6c 79 20 61 20 44 49 53   is really a DIS
1bf60 54 49 4e 43 54 20 63 6c 61 75 73 65 20 2a 2f 0a  TINCT clause */.
1bf70 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 57 41  #define WHERE_WA
1bf80 4e 54 5f 44 49 53 54 49 4e 43 54 20 20 20 20 30  NT_DISTINCT    0
1bf90 78 30 31 30 30 20 2f 2a 20 41 6c 6c 20 6f 75 74  x0100 /* All out
1bfa0 70 75 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20  put needs to be 
1bfb0 64 69 73 74 69 6e 63 74 20 2a 2f 0a 23 64 65 66  distinct */.#def
1bfc0 69 6e 65 20 57 48 45 52 45 5f 53 4f 52 54 42 59  ine WHERE_SORTBY
1bfd0 47 52 4f 55 50 20 20 20 20 20 20 30 78 30 32 30  GROUP      0x020
1bfe0 30 20 2f 2a 20 53 75 70 70 6f 72 74 20 73 71 6c  0 /* Support sql
1bff0 69 74 65 33 57 68 65 72 65 49 73 53 6f 72 74 65  ite3WhereIsSorte
1c000 64 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  d() */.#define W
1c010 48 45 52 45 5f 53 45 45 4b 5f 54 41 42 4c 45 20  HERE_SEEK_TABLE 
1c020 20 20 20 20 20 20 30 78 30 34 30 30 20 2f 2a 20        0x0400 /* 
1c030 44 6f 20 6e 6f 74 20 64 65 66 65 72 20 73 65 65  Do not defer see
1c040 6b 73 20 6f 6e 20 6d 61 69 6e 20 74 61 62 6c 65  ks on main table
1c050 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
1c060 45 5f 4f 52 44 45 52 42 59 5f 4c 49 4d 49 54 20  E_ORDERBY_LIMIT 
1c070 20 20 20 30 78 30 38 30 30 20 2f 2a 20 4f 52 44     0x0800 /* ORD
1c080 45 52 42 59 2b 4c 49 4d 49 54 20 6f 6e 20 74 68  ERBY+LIMIT on th
1c090 65 20 69 6e 6e 65 72 20 6c 6f 6f 70 20 2a 2f 0a  e inner loop */.
1c0a0 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 53 45  #define WHERE_SE
1c0b0 45 4b 5f 55 4e 49 51 5f 54 41 42 4c 45 20 20 30  EK_UNIQ_TABLE  0
1c0c0 78 31 30 30 30 20 2f 2a 20 44 6f 20 6e 6f 74 20  x1000 /* Do not 
1c0d0 64 65 66 65 72 20 73 65 65 6b 73 20 69 66 20 75  defer seeks if u
1c0e0 6e 69 71 75 65 20 2a 2f 0a 20 20 20 20 20 20 20  nique */.       
1c0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c100 20 2f 2a 20 20 20 20 20 30 78 32 30 30 30 20 20   /*     0x2000  
1c110 20 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20    not currently 
1c120 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  used */.#define 
1c130 57 48 45 52 45 5f 55 53 45 5f 4c 49 4d 49 54 20  WHERE_USE_LIMIT 
1c140 20 20 20 20 20 20 20 30 78 34 30 30 30 20 2f 2a         0x4000 /*
1c150 20 55 73 65 20 74 68 65 20 4c 49 4d 49 54 20 69   Use the LIMIT i
1c160 6e 20 63 6f 73 74 20 65 73 74 69 6d 61 74 65 73  n cost estimates
1c170 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
1c180 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20              /*  
1c190 20 20 20 30 78 38 30 30 30 20 20 20 20 6e 6f 74     0x8000    not
1c1a0 20 63 75 72 72 65 6e 74 6c 79 20 75 73 65 64 20   currently used 
1c1b0 2a 2f 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 72  */../* Allowed r
1c1c0 65 74 75 72 6e 20 76 61 6c 75 65 73 20 66 72 6f  eturn values fro
1c1d0 6d 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73  m sqlite3WhereIs
1c1e0 44 69 73 74 69 6e 63 74 28 29 0a 2a 2f 0a 23 64  Distinct().*/.#d
1c1f0 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54  efine WHERE_DIST
1c200 49 4e 43 54 5f 4e 4f 4f 50 20 20 20 20 20 20 30  INCT_NOOP      0
1c210 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20 6b 65    /* DISTINCT ke
1c220 79 77 6f 72 64 20 6e 6f 74 20 75 73 65 64 20 2a  yword not used *
1c230 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1c240 44 49 53 54 49 4e 43 54 5f 55 4e 49 51 55 45 20  DISTINCT_UNIQUE 
1c250 20 20 20 31 20 20 2f 2a 20 4e 6f 20 64 75 70 6c     1  /* No dupl
1c260 69 63 61 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e  icates */.#defin
1c270 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54  e WHERE_DISTINCT
1c280 5f 4f 52 44 45 52 45 44 20 20 20 32 20 20 2f 2a  _ORDERED   2  /*
1c290 20 41 6c 6c 20 64 75 70 6c 69 63 61 74 65 73 20   All duplicates 
1c2a0 61 72 65 20 61 64 6a 61 63 65 6e 74 20 2a 2f 0a  are adjacent */.
1c2b0 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49  #define WHERE_DI
1c2c0 53 54 49 4e 43 54 5f 55 4e 4f 52 44 45 52 45 44  STINCT_UNORDERED
1c2d0 20 33 20 20 2f 2a 20 44 75 70 6c 69 63 61 74 65   3  /* Duplicate
1c2e0 73 20 61 72 65 20 73 63 61 74 74 65 72 65 64 20  s are scattered 
1c2f0 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e 61 6d 65  */../*.** A Name
1c300 43 6f 6e 74 65 78 74 20 64 65 66 69 6e 65 73 20  Context defines 
1c310 61 20 63 6f 6e 74 65 78 74 20 69 6e 20 77 68 69  a context in whi
1c320 63 68 20 74 6f 20 72 65 73 6f 6c 76 65 20 74 61  ch to resolve ta
1c330 62 6c 65 20 61 6e 64 20 63 6f 6c 75 6d 6e 0a 2a  ble and column.*
1c340 2a 20 6e 61 6d 65 73 2e 20 20 54 68 65 20 63 6f  * names.  The co
1c350 6e 74 65 78 74 20 63 6f 6e 73 69 73 74 73 20 6f  ntext consists o
1c360 66 20 61 20 6c 69 73 74 20 6f 66 20 74 61 62 6c  f a list of tabl
1c370 65 73 20 28 74 68 65 20 70 53 72 63 4c 69 73 74  es (the pSrcList
1c380 29 20 66 69 65 6c 64 20 61 6e 64 0a 2a 2a 20 61  ) field and.** a
1c390 20 6c 69 73 74 20 6f 66 20 6e 61 6d 65 64 20 65   list of named e
1c3a0 78 70 72 65 73 73 69 6f 6e 20 28 70 45 4c 69 73  xpression (pELis
1c3b0 74 29 2e 20 20 54 68 65 20 6e 61 6d 65 64 20 65  t).  The named e
1c3c0 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 20 6d  xpression list m
1c3d0 61 79 0a 2a 2a 20 62 65 20 4e 55 4c 4c 2e 20 20  ay.** be NULL.  
1c3e0 54 68 65 20 70 53 72 63 20 63 6f 72 72 65 73 70  The pSrc corresp
1c3f0 6f 6e 64 73 20 74 6f 20 74 68 65 20 46 52 4f 4d  onds to the FROM
1c400 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c   clause of a SEL
1c410 45 43 54 20 6f 72 0a 2a 2a 20 74 6f 20 74 68 65  ECT or.** to the
1c420 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6f 70 65   table being ope
1c430 72 61 74 65 64 20 6f 6e 20 62 79 20 49 4e 53 45  rated on by INSE
1c440 52 54 2c 20 55 50 44 41 54 45 2c 20 6f 72 20 44  RT, UPDATE, or D
1c450 45 4c 45 54 45 2e 20 20 54 68 65 0a 2a 2a 20 70  ELETE.  The.** p
1c460 45 4c 69 73 74 20 63 6f 72 72 65 73 70 6f 6e 64  EList correspond
1c470 73 20 74 6f 20 74 68 65 20 72 65 73 75 6c 74 20  s to the result 
1c480 73 65 74 20 6f 66 20 61 20 53 45 4c 45 43 54 20  set of a SELECT 
1c490 61 6e 64 20 69 73 20 4e 55 4c 4c 20 66 6f 72 0a  and is NULL for.
1c4a0 2a 2a 20 6f 74 68 65 72 20 73 74 61 74 65 6d 65  ** other stateme
1c4b0 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65 43  nts..**.** NameC
1c4c0 6f 6e 74 65 78 74 73 20 63 61 6e 20 62 65 20 6e  ontexts can be n
1c4d0 65 73 74 65 64 2e 20 20 57 68 65 6e 20 72 65 73  ested.  When res
1c4e0 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 2c 20 74 68  olving names, th
1c4f0 65 20 69 6e 6e 65 72 2d 6d 6f 73 74 0a 2a 2a 20  e inner-most.** 
1c500 63 6f 6e 74 65 78 74 20 69 73 20 73 65 61 72 63  context is searc
1c510 68 65 64 20 66 69 72 73 74 2e 20 20 49 66 20 6e  hed first.  If n
1c520 6f 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64  o match is found
1c530 2c 20 74 68 65 20 6e 65 78 74 20 6f 75 74 65 72  , the next outer
1c540 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73 20 63  .** context is c
1c550 68 65 63 6b 65 64 2e 20 20 49 66 20 74 68 65 72  hecked.  If ther
1c560 65 20 69 73 20 73 74 69 6c 6c 20 6e 6f 20 6d 61  e is still no ma
1c570 74 63 68 2c 20 74 68 65 20 6e 65 78 74 20 63 6f  tch, the next co
1c580 6e 74 65 78 74 0a 2a 2a 20 69 73 20 63 68 65 63  ntext.** is chec
1c590 6b 65 64 2e 20 20 54 68 69 73 20 70 72 6f 63 65  ked.  This proce
1c5a0 73 73 20 63 6f 6e 74 69 6e 75 65 73 20 75 6e 74  ss continues unt
1c5b0 69 6c 20 65 69 74 68 65 72 20 61 20 6d 61 74 63  il either a matc
1c5c0 68 20 69 73 20 66 6f 75 6e 64 0a 2a 2a 20 6f 72  h is found.** or
1c5d0 20 61 6c 6c 20 63 6f 6e 74 65 78 74 73 20 61 72   all contexts ar
1c5e0 65 20 63 68 65 63 6b 2e 20 20 57 68 65 6e 20 61  e check.  When a
1c5f0 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c   match is found,
1c600 20 74 68 65 20 6e 52 65 66 20 6d 65 6d 62 65 72   the nRef member
1c610 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65   of.** the conte
1c620 78 74 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  xt containing th
1c630 65 20 6d 61 74 63 68 20 69 73 20 69 6e 63 72 65  e match is incre
1c640 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 45 61  mented..**.** Ea
1c650 63 68 20 73 75 62 71 75 65 72 79 20 67 65 74 73  ch subquery gets
1c660 20 61 20 6e 65 77 20 4e 61 6d 65 43 6f 6e 74 65   a new NameConte
1c670 78 74 2e 20 20 54 68 65 20 70 4e 65 78 74 20 66  xt.  The pNext f
1c680 69 65 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20 74  ield points to t
1c690 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78  he.** NameContex
1c6a0 74 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20  t in the parent 
1c6b0 71 75 65 72 79 2e 20 20 54 68 75 73 20 74 68 65  query.  Thus the
1c6c0 20 70 72 6f 63 65 73 73 20 6f 66 20 73 63 61 6e   process of scan
1c6d0 6e 69 6e 67 20 74 68 65 0a 2a 2a 20 4e 61 6d 65  ning the.** Name
1c6e0 43 6f 6e 74 65 78 74 20 6c 69 73 74 20 63 6f 72  Context list cor
1c6f0 72 65 73 70 6f 6e 64 73 20 74 6f 20 73 65 61 72  responds to sear
1c700 63 68 69 6e 67 20 74 68 72 6f 75 67 68 20 73 75  ching through su
1c710 63 63 65 73 73 69 76 65 6c 79 20 6f 75 74 65 72  ccessively outer
1c720 0a 2a 2a 20 73 75 62 71 75 65 72 69 65 73 20 6c  .** subqueries l
1c730 6f 6f 6b 69 6e 67 20 66 6f 72 20 61 20 6d 61 74  ooking for a mat
1c740 63 68 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4e 61  ch..*/.struct Na
1c750 6d 65 43 6f 6e 74 65 78 74 20 7b 0a 20 20 50 61  meContext {.  Pa
1c760 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20  rse *pParse;    
1c770 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73 65 72     /* The parser
1c780 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70   */.  SrcList *p
1c790 53 72 63 4c 69 73 74 3b 20 20 20 2f 2a 20 4f 6e  SrcList;   /* On
1c7a0 65 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65 73  e or more tables
1c7b0 20 75 73 65 64 20 74 6f 20 72 65 73 6f 6c 76 65   used to resolve
1c7c0 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 75 6e 69 6f   names */.  unio
1c7d0 6e 20 7b 0a 20 20 20 20 45 78 70 72 4c 69 73 74  n {.    ExprList
1c7e0 20 2a 70 45 4c 69 73 74 3b 20 20 20 20 2f 2a 20   *pEList;    /* 
1c7f0 4f 70 74 69 6f 6e 61 6c 20 6c 69 73 74 20 6f 66  Optional list of
1c800 20 72 65 73 75 6c 74 2d 73 65 74 20 63 6f 6c 75   result-set colu
1c810 6d 6e 73 20 2a 2f 0a 20 20 20 20 41 67 67 49 6e  mns */.    AggIn
1c820 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20  fo *pAggInfo;   
1c830 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  /* Information a
1c840 62 6f 75 74 20 61 67 67 72 65 67 61 74 65 73 20  bout aggregates 
1c850 61 74 20 74 68 69 73 20 6c 65 76 65 6c 20 2a 2f  at this level */
1c860 0a 20 20 20 20 55 70 73 65 72 74 20 2a 70 55 70  .    Upsert *pUp
1c870 73 65 72 74 3b 20 20 20 20 20 2f 2a 20 4f 4e 20  sert;     /* ON 
1c880 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20  CONFLICT clause 
1c890 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d  information from
1c8a0 20 61 6e 20 75 70 73 65 72 74 20 2a 2f 0a 20 20   an upsert */.  
1c8b0 7d 20 75 4e 43 3b 0a 20 20 4e 61 6d 65 43 6f 6e  } uNC;.  NameCon
1c8c0 74 65 78 74 20 2a 70 4e 65 78 74 3b 20 20 2f 2a  text *pNext;  /*
1c8d0 20 4e 65 78 74 20 6f 75 74 65 72 20 6e 61 6d 65   Next outer name
1c8e0 20 63 6f 6e 74 65 78 74 2e 20 20 4e 55 4c 4c 20   context.  NULL 
1c8f0 66 6f 72 20 6f 75 74 65 72 6d 6f 73 74 20 2a 2f  for outermost */
1c900 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20  .  int nRef;    
1c910 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1c920 72 20 6f 66 20 6e 61 6d 65 73 20 72 65 73 6f 6c  r of names resol
1c930 76 65 64 20 62 79 20 74 68 69 73 20 63 6f 6e 74  ved by this cont
1c940 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72  ext */.  int nEr
1c950 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  r;            /*
1c960 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72   Number of error
1c970 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 77 68  s encountered wh
1c980 69 6c 65 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61  ile resolving na
1c990 6d 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 63 46  mes */.  u16 ncF
1c9a0 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 2f 2a  lags;         /*
1c9b0 20 5a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 4e 43   Zero or more NC
1c9c0 5f 2a 20 66 6c 61 67 73 20 64 65 66 69 6e 65 64  _* flags defined
1c9d0 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 53 65 6c 65   below */.  Sele
1c9e0 63 74 20 2a 70 57 69 6e 53 65 6c 65 63 74 3b 20  ct *pWinSelect; 
1c9f0 20 2f 2a 20 53 45 4c 45 43 54 20 73 74 61 74 65   /* SELECT state
1ca00 6d 65 6e 74 20 66 6f 72 20 61 6e 79 20 77 69 6e  ment for any win
1ca10 64 6f 77 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f  dow functions */
1ca20 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  .};../*.** Allow
1ca30 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68  ed values for th
1ca40 65 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2c 20 6e  e NameContext, n
1ca50 63 46 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a  cFlags field..**
1ca60 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72  .** Value constr
1ca70 61 69 6e 74 73 20 28 61 6c 6c 20 63 68 65 63 6b  aints (all check
1ca80 65 64 20 76 69 61 20 61 73 73 65 72 74 28 29 29  ed via assert())
1ca90 3a 0a 2a 2a 20 20 20 20 4e 43 5f 48 61 73 41 67  :.**    NC_HasAg
1caa0 67 20 20 20 20 3d 3d 20 53 46 5f 48 61 73 41 67  g    == SF_HasAg
1cab0 67 0a 2a 2a 20 20 20 20 4e 43 5f 4d 69 6e 4d 61  g.**    NC_MinMa
1cac0 78 41 67 67 20 3d 3d 20 53 46 5f 4d 69 6e 4d 61  xAgg == SF_MinMa
1cad0 78 41 67 67 20 3d 3d 20 53 51 4c 49 54 45 5f 46  xAgg == SQLITE_F
1cae0 55 4e 43 5f 4d 49 4e 4d 41 58 0a 2a 2a 0a 2a 2f  UNC_MINMAX.**.*/
1caf0 0a 23 64 65 66 69 6e 65 20 4e 43 5f 41 6c 6c 6f  .#define NC_Allo
1cb00 77 41 67 67 20 20 30 78 30 30 30 31 20 20 2f 2a  wAgg  0x0001  /*
1cb10 20 41 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   Aggregate funct
1cb20 69 6f 6e 73 20 61 72 65 20 61 6c 6c 6f 77 65 64  ions are allowed
1cb30 20 68 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65   here */.#define
1cb40 20 4e 43 5f 50 61 72 74 49 64 78 20 20 20 30 78   NC_PartIdx   0x
1cb50 30 30 30 32 20 20 2f 2a 20 54 72 75 65 20 69 66  0002  /* True if
1cb60 20 72 65 73 6f 6c 76 69 6e 67 20 61 20 70 61 72   resolving a par
1cb70 74 69 61 6c 20 69 6e 64 65 78 20 57 48 45 52 45  tial index WHERE
1cb80 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49   */.#define NC_I
1cb90 73 43 68 65 63 6b 20 20 20 30 78 30 30 30 34 20  sCheck   0x0004 
1cba0 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f   /* True if reso
1cbb0 6c 76 69 6e 67 20 6e 61 6d 65 73 20 69 6e 20 61  lving names in a
1cbc0 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e   CHECK constrain
1cbd0 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  t */.#define NC_
1cbe0 49 6e 41 67 67 46 75 6e 63 20 30 78 30 30 30 38  InAggFunc 0x0008
1cbf0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61 6e 61    /* True if ana
1cc00 6c 79 7a 69 6e 67 20 61 72 67 75 6d 65 6e 74 73  lyzing arguments
1cc10 20 74 6f 20 61 6e 20 61 67 67 20 66 75 6e 63 20   to an agg func 
1cc20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 48 61  */.#define NC_Ha
1cc30 73 41 67 67 20 20 20 20 30 78 30 30 31 30 20 20  sAgg    0x0010  
1cc40 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 61  /* One or more a
1cc50 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
1cc60 6e 73 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69  ns seen */.#defi
1cc70 6e 65 20 4e 43 5f 49 64 78 45 78 70 72 20 20 20  ne NC_IdxExpr   
1cc80 30 78 30 30 32 30 20 20 2f 2a 20 54 72 75 65 20  0x0020  /* True 
1cc90 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 63 6f 6c  if resolving col
1cca0 75 6d 6e 73 20 6f 66 20 43 52 45 41 54 45 20 49  umns of CREATE I
1ccb0 4e 44 45 58 20 2a 2f 0a 23 64 65 66 69 6e 65 20  NDEX */.#define 
1ccc0 4e 43 5f 56 61 72 53 65 6c 65 63 74 20 30 78 30  NC_VarSelect 0x0
1ccd0 30 34 30 20 20 2f 2a 20 41 20 63 6f 72 72 65 6c  040  /* A correl
1cce0 61 74 65 64 20 73 75 62 71 75 65 72 79 20 68 61  ated subquery ha
1ccf0 73 20 62 65 65 6e 20 73 65 65 6e 20 2a 2f 0a 23  s been seen */.#
1cd00 64 65 66 69 6e 65 20 4e 43 5f 55 45 4c 69 73 74  define NC_UEList
1cd10 20 20 20 20 30 78 30 30 38 30 20 20 2f 2a 20 54      0x0080  /* T
1cd20 72 75 65 20 69 66 20 75 4e 43 2e 70 45 4c 69 73  rue if uNC.pELis
1cd30 74 20 69 73 20 75 73 65 64 20 2a 2f 0a 23 64 65  t is used */.#de
1cd40 66 69 6e 65 20 4e 43 5f 55 41 67 67 49 6e 66 6f  fine NC_UAggInfo
1cd50 20 20 30 78 30 31 30 30 20 20 2f 2a 20 54 72 75    0x0100  /* Tru
1cd60 65 20 69 66 20 75 4e 43 2e 70 41 67 67 49 6e 66  e if uNC.pAggInf
1cd70 6f 20 69 73 20 75 73 65 64 20 2a 2f 0a 23 64 65  o is used */.#de
1cd80 66 69 6e 65 20 4e 43 5f 55 55 70 73 65 72 74 20  fine NC_UUpsert 
1cd90 20 20 30 78 30 32 30 30 20 20 2f 2a 20 54 72 75    0x0200  /* Tru
1cda0 65 20 69 66 20 75 4e 43 2e 70 55 70 73 65 72 74  e if uNC.pUpsert
1cdb0 20 69 73 20 75 73 65 64 20 2a 2f 0a 23 64 65 66   is used */.#def
1cdc0 69 6e 65 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67  ine NC_MinMaxAgg
1cdd0 20 30 78 31 30 30 30 20 20 2f 2a 20 6d 69 6e 2f   0x1000  /* min/
1cde0 6d 61 78 20 61 67 67 72 65 67 61 74 65 73 20 73  max aggregates s
1cdf0 65 65 6e 2e 20 20 53 65 65 20 6e 6f 74 65 20 61  een.  See note a
1ce00 62 6f 76 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  bove */.#define 
1ce10 4e 43 5f 43 6f 6d 70 6c 65 78 20 20 20 30 78 32  NC_Complex   0x2
1ce20 30 30 30 20 20 2f 2a 20 54 72 75 65 20 69 66 20  000  /* True if 
1ce30 61 20 66 75 6e 63 74 69 6f 6e 20 6f 72 20 73 75  a function or su
1ce40 62 71 75 65 72 79 20 73 65 65 6e 20 2a 2f 0a 23  bquery seen */.#
1ce50 64 65 66 69 6e 65 20 4e 43 5f 41 6c 6c 6f 77 57  define NC_AllowW
1ce60 69 6e 20 20 30 78 34 30 30 30 20 20 2f 2a 20 57  in  0x4000  /* W
1ce70 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 73 20  indow functions 
1ce80 61 72 65 20 61 6c 6c 6f 77 65 64 20 68 65 72 65  are allowed here
1ce90 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e   */../*.** An in
1cea0 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
1ceb0 6c 6c 6f 77 69 6e 67 20 6f 62 6a 65 63 74 20 64  llowing object d
1cec0 65 73 63 72 69 62 65 73 20 61 20 73 69 6e 67 6c  escribes a singl
1ced0 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 0a 2a 2a  e ON CONFLICT.**
1cee0 20 63 6c 61 75 73 65 20 69 6e 20 61 6e 20 75 70   clause in an up
1cef0 73 65 72 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  sert..**.** The 
1cf00 70 55 70 73 65 72 74 54 61 72 67 65 74 20 66 69  pUpsertTarget fi
1cf10 65 6c 64 20 69 73 20 6f 6e 6c 79 20 73 65 74 20  eld is only set 
1cf20 69 66 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49  if the ON CONFLI
1cf30 43 54 20 63 6c 61 75 73 65 20 69 6e 63 6c 75 64  CT clause includ
1cf40 65 73 0a 2a 2a 20 63 6f 6e 66 6c 69 63 74 2d 74  es.** conflict-t
1cf50 61 72 67 65 74 20 63 6c 61 75 73 65 2e 20 20 28  arget clause.  (
1cf60 49 6e 20 22 4f 4e 20 43 4f 4e 46 4c 49 43 54 28  In "ON CONFLICT(
1cf70 61 2c 62 29 22 20 74 68 65 20 22 28 61 2c 62 29  a,b)" the "(a,b)
1cf80 22 20 69 73 20 74 68 65 0a 2a 2a 20 63 6f 6e 66  " is the.** conf
1cf90 6c 69 63 74 2d 74 61 72 67 65 74 20 63 6c 61 75  lict-target clau
1cfa0 73 65 2e 29 20 20 54 68 65 20 70 55 70 73 65 72  se.)  The pUpser
1cfb0 74 54 61 72 67 65 74 57 68 65 72 65 20 69 73 20  tTargetWhere is 
1cfc0 74 68 65 20 6f 70 74 69 6f 6e 61 6c 0a 2a 2a 20  the optional.** 
1cfd0 57 48 45 52 45 20 63 6c 61 75 73 65 20 75 73 65  WHERE clause use
1cfe0 64 20 74 6f 20 69 64 65 6e 74 69 66 79 20 70 61  d to identify pa
1cff0 72 74 69 61 6c 20 75 6e 69 71 75 65 20 69 6e 64  rtial unique ind
1d000 65 78 65 73 2e 0a 2a 2a 0a 2a 2a 20 70 55 70 73  exes..**.** pUps
1d010 65 72 74 53 65 74 20 69 73 20 74 68 65 20 6c 69  ertSet is the li
1d020 73 74 20 6f 66 20 63 6f 6c 75 6d 6e 3d 65 78 70  st of column=exp
1d030 72 20 74 65 72 6d 73 20 6f 66 20 74 68 65 20 55  r terms of the U
1d040 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 2e  PDATE statement.
1d050 20 0a 2a 2a 20 54 68 65 20 70 55 70 73 65 72 74   .** The pUpsert
1d060 53 65 74 20 66 69 65 6c 64 20 69 73 20 4e 55 4c  Set field is NUL
1d070 4c 20 66 6f 72 20 61 20 4f 4e 20 43 4f 4e 46 4c  L for a ON CONFL
1d080 49 43 54 20 44 4f 20 4e 4f 54 48 49 4e 47 2e 20  ICT DO NOTHING. 
1d090 20 54 68 65 0a 2a 2a 20 70 55 70 73 65 72 74 57   The.** pUpsertW
1d0a0 68 65 72 65 20 69 73 20 74 68 65 20 57 48 45 52  here is the WHER
1d0b0 45 20 63 6c 61 75 73 65 20 66 6f 72 20 74 68 65  E clause for the
1d0c0 20 55 50 44 41 54 45 20 61 6e 64 20 69 73 20 4e   UPDATE and is N
1d0d0 55 4c 4c 20 69 66 20 74 68 65 0a 2a 2a 20 57 48  ULL if the.** WH
1d0e0 45 52 45 20 63 6c 61 75 73 65 20 69 73 20 6f 6d  ERE clause is om
1d0f0 69 74 74 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74  itted..*/.struct
1d100 20 55 70 73 65 72 74 20 7b 0a 20 20 45 78 70 72   Upsert {.  Expr
1d110 4c 69 73 74 20 2a 70 55 70 73 65 72 74 54 61 72  List *pUpsertTar
1d120 67 65 74 3b 20 20 2f 2a 20 4f 70 74 69 6f 6e 61  get;  /* Optiona
1d130 6c 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66  l description of
1d140 20 63 6f 6e 66 6c 69 63 74 69 6e 67 20 69 6e 64   conflicting ind
1d150 65 78 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 55  ex */.  Expr *pU
1d160 70 73 65 72 74 54 61 72 67 65 74 57 68 65 72 65  psertTargetWhere
1d170 3b 20 2f 2a 20 57 48 45 52 45 20 63 6c 61 75 73  ; /* WHERE claus
1d180 65 20 66 6f 72 20 70 61 72 74 69 61 6c 20 69 6e  e for partial in
1d190 64 65 78 20 74 61 72 67 65 74 73 20 2a 2f 0a 20  dex targets */. 
1d1a0 20 45 78 70 72 4c 69 73 74 20 2a 70 55 70 73 65   ExprList *pUpse
1d1b0 72 74 53 65 74 3b 20 20 20 20 20 2f 2a 20 54 68  rtSet;     /* Th
1d1c0 65 20 53 45 54 20 63 6c 61 75 73 65 20 66 72 6f  e SET clause fro
1d1d0 6d 20 61 6e 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  m an ON CONFLICT
1d1e0 20 55 50 44 41 54 45 20 2a 2f 0a 20 20 45 78 70   UPDATE */.  Exp
1d1f0 72 20 2a 70 55 70 73 65 72 74 57 68 65 72 65 3b  r *pUpsertWhere;
1d200 20 20 20 20 20 20 20 2f 2a 20 57 48 45 52 45 20         /* WHERE 
1d210 63 6c 61 75 73 65 20 66 6f 72 20 74 68 65 20 4f  clause for the O
1d220 4e 20 43 4f 4e 46 4c 49 43 54 20 55 50 44 41 54  N CONFLICT UPDAT
1d230 45 20 2a 2f 0a 20 20 2f 2a 20 54 68 65 20 66 69  E */.  /* The fi
1d240 65 6c 64 73 20 61 62 6f 76 65 20 63 6f 6d 70 72  elds above compr
1d250 69 73 65 20 74 68 65 20 70 61 72 73 65 20 74 72  ise the parse tr
1d260 65 65 20 66 6f 72 20 74 68 65 20 75 70 73 65 72  ee for the upser
1d270 74 20 63 6c 61 75 73 65 2e 0a 20 20 2a 2a 20 54  t clause..  ** T
1d280 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20  he fields below 
1d290 61 72 65 20 75 73 65 64 20 74 6f 20 74 72 61 6e  are used to tran
1d2a0 73 66 65 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  sfer information
1d2b0 20 66 72 6f 6d 20 74 68 65 20 49 4e 53 45 52 54   from the INSERT
1d2c0 0a 20 20 2a 2a 20 70 72 6f 63 65 73 73 69 6e 67  .  ** processing
1d2d0 20 64 6f 77 6e 20 69 6e 74 6f 20 74 68 65 20 55   down into the U
1d2e0 50 44 41 54 45 20 70 72 6f 63 65 73 73 69 6e 67  PDATE processing
1d2f0 20 77 68 69 6c 65 20 67 65 6e 65 72 61 74 69 6e   while generatin
1d300 67 20 63 6f 64 65 2e 0a 20 20 2a 2a 20 55 70 73  g code..  ** Ups
1d310 65 72 74 20 6f 77 6e 73 20 74 68 65 20 6d 65 6d  ert owns the mem
1d320 6f 72 79 20 61 6c 6c 6f 63 61 74 65 64 20 61 62  ory allocated ab
1d330 6f 76 65 2c 20 62 75 74 20 6e 6f 74 20 74 68 65  ove, but not the
1d340 20 6d 65 6d 6f 72 79 20 62 65 6c 6f 77 2e 20 2a   memory below. *
1d350 2f 0a 20 20 49 6e 64 65 78 20 2a 70 55 70 73 65  /.  Index *pUpse
1d360 72 74 49 64 78 3b 20 20 20 20 20 20 20 20 2f 2a  rtIdx;        /*
1d370 20 43 6f 6e 73 74 72 61 69 6e 74 20 74 68 61 74   Constraint that
1d380 20 70 55 70 73 65 72 74 54 61 72 67 65 74 20 69   pUpsertTarget i
1d390 64 65 6e 74 69 66 69 65 73 20 2a 2f 0a 20 20 53  dentifies */.  S
1d3a0 72 63 4c 69 73 74 20 2a 70 55 70 73 65 72 74 53  rcList *pUpsertS
1d3b0 72 63 3b 20 20 20 20 20 20 2f 2a 20 54 61 62 6c  rc;      /* Tabl
1d3c0 65 20 74 6f 20 62 65 20 75 70 64 61 74 65 64 20  e to be updated 
1d3d0 2a 2f 0a 20 20 69 6e 74 20 72 65 67 44 61 74 61  */.  int regData
1d3e0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
1d3f0 2a 20 46 69 72 73 74 20 72 65 67 69 73 74 65 72  * First register
1d400 20 68 6f 6c 64 69 6e 67 20 61 72 72 61 79 20 6f   holding array o
1d410 66 20 56 41 4c 55 45 53 20 2a 2f 0a 20 20 69 6e  f VALUES */.  in
1d420 74 20 69 44 61 74 61 43 75 72 3b 20 20 20 20 20  t iDataCur;     
1d430 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78          /* Index
1d440 20 6f 66 20 74 68 65 20 64 61 74 61 20 63 75 72   of the data cur
1d450 73 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 69 49 64  sor */.  int iId
1d460 78 43 75 72 3b 20 20 20 20 20 20 20 20 20 20 20  xCur;           
1d470 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74     /* Index of t
1d480 68 65 20 66 69 72 73 74 20 69 6e 64 65 78 20 63  he first index c
1d490 75 72 73 6f 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  ursor */.};../*.
1d4a0 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
1d4b0 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
1d4c0 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69  structure contai
1d4d0 6e 73 20 61 6c 6c 20 69 6e 66 6f 72 6d 61 74 69  ns all informati
1d4e0 6f 6e 0a 2a 2a 20 6e 65 65 64 65 64 20 74 6f 20  on.** needed to 
1d4f0 67 65 6e 65 72 61 74 65 20 63 6f 64 65 20 66 6f  generate code fo
1d500 72 20 61 20 73 69 6e 67 6c 65 20 53 45 4c 45 43  r a single SELEC
1d510 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a  T statement..**.
1d520 2a 2a 20 53 65 65 20 74 68 65 20 68 65 61 64 65  ** See the heade
1d530 72 20 63 6f 6d 6d 65 6e 74 20 6f 6e 20 74 68 65  r comment on the
1d540 20 63 6f 6d 70 75 74 65 4c 69 6d 69 74 52 65 67   computeLimitReg
1d550 69 73 74 65 72 73 28 29 20 72 6f 75 74 69 6e 65  isters() routine
1d560 20 66 6f 72 20 61 0a 2a 2a 20 64 65 74 61 69 6c   for a.** detail
1d570 65 64 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f  ed description o
1d580 66 20 74 68 65 20 6d 65 61 6e 69 6e 67 20 6f 66  f the meaning of
1d590 20 74 68 65 20 69 4c 69 6d 69 74 20 61 6e 64 20   the iLimit and 
1d5a0 69 4f 66 66 73 65 74 20 66 69 65 6c 64 73 2e 0a  iOffset fields..
1d5b0 2a 2a 0a 2a 2a 20 61 64 64 72 4f 70 65 6e 45 70  **.** addrOpenEp
1d5c0 68 6d 5b 5d 20 65 6e 74 72 69 65 73 20 63 6f 6e  hm[] entries con
1d5d0 74 61 69 6e 20 74 68 65 20 61 64 64 72 65 73 73  tain the address
1d5e0 20 6f 66 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d   of OP_OpenEphem
1d5f0 65 72 61 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a  eral opcodes..**
1d600 20 54 68 65 73 65 20 61 64 64 72 65 73 73 65 73   These addresses
1d610 20 6d 75 73 74 20 62 65 20 73 74 6f 72 65 64 20   must be stored 
1d620 73 6f 20 74 68 61 74 20 77 65 20 63 61 6e 20 67  so that we can g
1d630 6f 20 62 61 63 6b 20 61 6e 64 20 66 69 6c 6c 20  o back and fill 
1d640 69 6e 0a 2a 2a 20 74 68 65 20 50 34 5f 4b 45 59  in.** the P4_KEY
1d650 49 4e 46 4f 20 61 6e 64 20 50 32 20 70 61 72 61  INFO and P2 para
1d660 6d 65 74 65 72 73 20 6c 61 74 65 72 2e 20 20 4e  meters later.  N
1d670 65 69 74 68 65 72 20 74 68 65 20 4b 65 79 49 6e  either the KeyIn
1d680 66 6f 20 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e 75  fo nor.** the nu
1d690 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
1d6a0 69 6e 20 50 32 20 63 61 6e 20 62 65 20 63 6f 6d  in P2 can be com
1d6b0 70 75 74 65 64 20 61 74 20 74 68 65 20 73 61 6d  puted at the sam
1d6c0 65 20 74 69 6d 65 0a 2a 2a 20 61 73 20 74 68 65  e time.** as the
1d6d0 20 4f 50 5f 4f 70 65 6e 45 70 68 6d 20 69 6e 73   OP_OpenEphm ins
1d6e0 74 72 75 63 74 69 6f 6e 20 69 73 20 63 6f 64 65  truction is code
1d6f0 64 20 62 65 63 61 75 73 65 20 6e 6f 74 0a 2a 2a  d because not.**
1d700 20 65 6e 6f 75 67 68 20 69 6e 66 6f 72 6d 61 74   enough informat
1d710 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 63 6f  ion about the co
1d720 6d 70 6f 75 6e 64 20 71 75 65 72 79 20 69 73 20  mpound query is 
1d730 6b 6e 6f 77 6e 20 61 74 20 74 68 61 74 20 70 6f  known at that po
1d740 69 6e 74 2e 0a 2a 2a 20 54 68 65 20 4b 65 79 49  int..** The KeyI
1d750 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e  nfo for addrOpen
1d760 54 72 61 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d 20  Tran[0] and [1] 
1d770 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69  contains collati
1d780 6e 67 20 73 65 71 75 65 6e 63 65 73 0a 2a 2a 20  ng sequences.** 
1d790 66 6f 72 20 74 68 65 20 72 65 73 75 6c 74 20 73  for the result s
1d7a0 65 74 2e 20 20 54 68 65 20 4b 65 79 49 6e 66 6f  et.  The KeyInfo
1d7b0 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 45 70 68   for addrOpenEph
1d7c0 6d 5b 32 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f  m[2] contains co
1d7d0 6c 6c 61 74 69 6e 67 0a 2a 2a 20 73 65 71 75 65  llating.** seque
1d7e0 6e 63 65 73 20 66 6f 72 20 74 68 65 20 4f 52 44  nces for the ORD
1d7f0 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2f  ER BY clause..*/
1d800 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74 20 7b  .struct Select {
1d810 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c  .  ExprList *pEL
1d820 69 73 74 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  ist;      /* The
1d830 20 66 69 65 6c 64 73 20 6f 66 20 74 68 65 20 72   fields of the r
1d840 65 73 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6f 70  esult */.  u8 op
1d850 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1d860 20 20 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b 5f    /* One of: TK_
1d870 55 4e 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b 5f  UNION TK_ALL TK_
1d880 49 4e 54 45 52 53 45 43 54 20 54 4b 5f 45 58 43  INTERSECT TK_EXC
1d890 45 50 54 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20  EPT */.  LogEst 
1d8a0 6e 53 65 6c 65 63 74 52 6f 77 3b 20 20 20 20 20  nSelectRow;     
1d8b0 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 6e 75 6d  /* Estimated num
1d8c0 62 65 72 20 6f 66 20 72 65 73 75 6c 74 20 72 6f  ber of result ro
1d8d0 77 73 20 2a 2f 0a 20 20 75 33 32 20 73 65 6c 46  ws */.  u32 selF
1d8e0 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 2f  lags;          /
1d8f0 2a 20 56 61 72 69 6f 75 73 20 53 46 5f 2a 20 76  * Various SF_* v
1d900 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20 69  alues */.  int i
1d910 4c 69 6d 69 74 2c 20 69 4f 66 66 73 65 74 3b 20  Limit, iOffset; 
1d920 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69    /* Memory regi
1d930 73 74 65 72 73 20 68 6f 6c 64 69 6e 67 20 4c 49  sters holding LI
1d940 4d 49 54 20 26 20 4f 46 46 53 45 54 20 63 6f 75  MIT & OFFSET cou
1d950 6e 74 65 72 73 20 2a 2f 0a 20 20 75 33 32 20 73  nters */.  u32 s
1d960 65 6c 49 64 3b 20 20 20 20 20 20 20 20 20 20 20  elId;           
1d970 20 20 2f 2a 20 55 6e 69 71 75 65 20 69 64 65 6e    /* Unique iden
1d980 74 69 66 69 65 72 20 6e 75 6d 62 65 72 20 66 6f  tifier number fo
1d990 72 20 74 68 69 73 20 53 45 4c 45 43 54 20 2a 2f  r this SELECT */
1d9a0 0a 20 20 69 6e 74 20 61 64 64 72 4f 70 65 6e 45  .  int addrOpenE
1d9b0 70 68 6d 5b 32 5d 3b 20 20 20 2f 2a 20 4f 50 5f  phm[2];   /* OP_
1d9c0 4f 70 65 6e 45 70 68 65 6d 20 6f 70 63 6f 64 65  OpenEphem opcode
1d9d0 73 20 72 65 6c 61 74 65 64 20 74 6f 20 74 68 69  s related to thi
1d9e0 73 20 73 65 6c 65 63 74 20 2a 2f 0a 20 20 53 72  s select */.  Sr
1d9f0 63 4c 69 73 74 20 2a 70 53 72 63 3b 20 20 20 20  cList *pSrc;    
1da00 20 20 20 20 20 2f 2a 20 54 68 65 20 46 52 4f 4d       /* The FROM
1da10 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70   clause */.  Exp
1da20 72 20 2a 70 57 68 65 72 65 3b 20 20 20 20 20 20  r *pWhere;      
1da30 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45 52 45      /* The WHERE
1da40 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70   clause */.  Exp
1da50 72 4c 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b  rList *pGroupBy;
1da60 20 20 20 20 2f 2a 20 54 68 65 20 47 52 4f 55 50      /* The GROUP
1da70 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20   BY clause */.  
1da80 45 78 70 72 20 2a 70 48 61 76 69 6e 67 3b 20 20  Expr *pHaving;  
1da90 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 48 41         /* The HA
1daa0 56 49 4e 47 20 63 6c 61 75 73 65 20 2a 2f 0a 20  VING clause */. 
1dab0 20 45 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65   ExprList *pOrde
1dac0 72 42 79 3b 20 20 20 20 2f 2a 20 54 68 65 20 4f  rBy;    /* The O
1dad0 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 2a  RDER BY clause *
1dae0 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 50 72 69  /.  Select *pPri
1daf0 6f 72 3b 20 20 20 20 20 20 20 20 2f 2a 20 50 72  or;        /* Pr
1db00 69 6f 72 20 73 65 6c 65 63 74 20 69 6e 20 61 20  ior select in a 
1db10 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74 20  compound select 
1db20 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 53  statement */.  S
1db30 65 6c 65 63 74 20 2a 70 4e 65 78 74 3b 20 20 20  elect *pNext;   
1db40 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 73 65        /* Next se
1db50 6c 65 63 74 20 74 6f 20 74 68 65 20 6c 65 66 74  lect to the left
1db60 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 2a   in a compound *
1db70 2f 0a 20 20 45 78 70 72 20 2a 70 4c 69 6d 69 74  /.  Expr *pLimit
1db80 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 49  ;          /* LI
1db90 4d 49 54 20 65 78 70 72 65 73 73 69 6f 6e 2e 20  MIT expression. 
1dba0 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75  NULL means not u
1dbb0 73 65 64 2e 20 2a 2f 0a 20 20 57 69 74 68 20 2a  sed. */.  With *
1dbc0 70 57 69 74 68 3b 20 20 20 20 20 20 20 20 20 20  pWith;          
1dbd0 20 2f 2a 20 57 49 54 48 20 63 6c 61 75 73 65 20   /* WITH clause 
1dbe0 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 69 73  attached to this
1dbf0 20 73 65 6c 65 63 74 2e 20 4f 72 20 4e 55 4c 4c   select. Or NULL
1dc00 2e 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  . */.#ifndef SQL
1dc10 49 54 45 5f 4f 4d 49 54 5f 57 49 4e 44 4f 57 46  ITE_OMIT_WINDOWF
1dc20 55 4e 43 0a 20 20 57 69 6e 64 6f 77 20 2a 70 57  UNC.  Window *pW
1dc30 69 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  in;          /* 
1dc40 4c 69 73 74 20 6f 66 20 77 69 6e 64 6f 77 20 66  List of window f
1dc50 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 57 69  unctions */.  Wi
1dc60 6e 64 6f 77 20 2a 70 57 69 6e 44 65 66 6e 3b 20  ndow *pWinDefn; 
1dc70 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
1dc80 6e 61 6d 65 64 20 77 69 6e 64 6f 77 20 64 65 66  named window def
1dc90 69 6e 69 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e 64  initions */.#end
1dca0 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  if.};../*.** All
1dcb0 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
1dcc0 53 65 6c 65 63 74 2e 73 65 6c 46 6c 61 67 73 2e  Select.selFlags.
1dcd0 20 20 54 68 65 20 22 53 46 22 20 70 72 65 66 69    The "SF" prefi
1dce0 78 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20  x stands for.** 
1dcf0 22 53 65 6c 65 63 74 20 46 6c 61 67 22 2e 0a 2a  "Select Flag"..*
1dd00 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74  *.** Value const
1dd10 72 61 69 6e 74 73 20 28 61 6c 6c 20 63 68 65 63  raints (all chec
1dd20 6b 65 64 20 76 69 61 20 61 73 73 65 72 74 28 29  ked via assert()
1dd30 29 0a 2a 2a 20 20 20 20 20 53 46 5f 48 61 73 41  ).**     SF_HasA
1dd40 67 67 20 20 20 20 20 3d 3d 20 4e 43 5f 48 61 73  gg     == NC_Has
1dd50 41 67 67 0a 2a 2a 20 20 20 20 20 53 46 5f 4d 69  Agg.**     SF_Mi
1dd60 6e 4d 61 78 41 67 67 20 20 3d 3d 20 4e 43 5f 4d  nMaxAgg  == NC_M
1dd70 69 6e 4d 61 78 41 67 67 20 20 20 20 20 3d 3d 20  inMaxAgg     == 
1dd80 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d  SQLITE_FUNC_MINM
1dd90 41 58 0a 2a 2a 20 20 20 20 20 53 46 5f 46 69 78  AX.**     SF_Fix
1dda0 65 64 4c 69 6d 69 74 20 3d 3d 20 57 48 45 52 45  edLimit == WHERE
1ddb0 5f 55 53 45 5f 4c 49 4d 49 54 0a 2a 2f 0a 23 64  _USE_LIMIT.*/.#d
1ddc0 65 66 69 6e 65 20 53 46 5f 44 69 73 74 69 6e 63  efine SF_Distinc
1ddd0 74 20 20 20 20 20 20 20 30 78 30 30 30 30 31 20  t       0x00001 
1dde0 20 2f 2a 20 4f 75 74 70 75 74 20 73 68 6f 75 6c   /* Output shoul
1ddf0 64 20 62 65 20 44 49 53 54 49 4e 43 54 20 2a 2f  d be DISTINCT */
1de00 0a 23 64 65 66 69 6e 65 20 53 46 5f 41 6c 6c 20  .#define SF_All 
1de10 20 20 20 20 20 20 20 20 20 20 20 30 78 30 30 30             0x000
1de20 30 32 20 20 2f 2a 20 49 6e 63 6c 75 64 65 73 20  02  /* Includes 
1de30 74 68 65 20 41 4c 4c 20 6b 65 79 77 6f 72 64 20  the ALL keyword 
1de40 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 52 65  */.#define SF_Re
1de50 73 6f 6c 76 65 64 20 20 20 20 20 20 20 30 78 30  solved       0x0
1de60 30 30 30 34 20 20 2f 2a 20 49 64 65 6e 74 69 66  0004  /* Identif
1de70 69 65 72 73 20 68 61 76 65 20 62 65 65 6e 20 72  iers have been r
1de80 65 73 6f 6c 76 65 64 20 2a 2f 0a 23 64 65 66 69  esolved */.#defi
1de90 6e 65 20 53 46 5f 41 67 67 72 65 67 61 74 65 20  ne SF_Aggregate 
1dea0 20 20 20 20 20 30 78 30 30 30 30 38 20 20 2f 2a       0x00008  /*
1deb0 20 43 6f 6e 74 61 69 6e 73 20 61 67 67 20 66 75   Contains agg fu
1dec0 6e 63 74 69 6f 6e 73 20 6f 72 20 61 20 47 52 4f  nctions or a GRO
1ded0 55 50 20 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65  UP BY */.#define
1dee0 20 53 46 5f 48 61 73 41 67 67 20 20 20 20 20 20   SF_HasAgg      
1def0 20 20 20 30 78 30 30 30 31 30 20 20 2f 2a 20 43     0x00010  /* C
1df00 6f 6e 74 61 69 6e 73 20 61 67 67 72 65 67 61 74  ontains aggregat
1df10 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23  e functions */.#
1df20 64 65 66 69 6e 65 20 53 46 5f 55 73 65 73 45 70  define SF_UsesEp
1df30 68 65 6d 65 72 61 6c 20 20 30 78 30 30 30 32 30  hemeral  0x00020
1df40 20 20 2f 2a 20 55 73 65 73 20 74 68 65 20 4f 70    /* Uses the Op
1df50 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f  enEphemeral opco
1df60 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  de */.#define SF
1df70 5f 45 78 70 61 6e 64 65 64 20 20 20 20 20 20 20  _Expanded       
1df80 30 78 30 30 30 34 30 20 20 2f 2a 20 73 71 6c 69  0x00040  /* sqli
1df90 74 65 33 53 65 6c 65 63 74 45 78 70 61 6e 64 28  te3SelectExpand(
1dfa0 29 20 63 61 6c 6c 65 64 20 6f 6e 20 74 68 69 73  ) called on this
1dfb0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 48   */.#define SF_H
1dfc0 61 73 54 79 70 65 49 6e 66 6f 20 20 20 20 30 78  asTypeInfo    0x
1dfd0 30 30 30 38 30 20 20 2f 2a 20 46 52 4f 4d 20 73  00080  /* FROM s
1dfe0 75 62 71 75 65 72 69 65 73 20 68 61 76 65 20 54  ubqueries have T
1dff0 61 62 6c 65 20 6d 65 74 61 64 61 74 61 20 2a 2f  able metadata */
1e000 0a 23 64 65 66 69 6e 65 20 53 46 5f 43 6f 6d 70  .#define SF_Comp
1e010 6f 75 6e 64 20 20 20 20 20 20 20 30 78 30 30 31  ound       0x001
1e020 30 30 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 61  00  /* Part of a
1e030 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79 20   compound query 
1e040 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 56 61  */.#define SF_Va
1e050 6c 75 65 73 20 20 20 20 20 20 20 20 20 30 78 30  lues         0x0
1e060 30 32 30 30 20 20 2f 2a 20 53 79 6e 74 68 65 73  0200  /* Synthes
1e070 69 7a 65 64 20 66 72 6f 6d 20 56 41 4c 55 45 53  ized from VALUES
1e080 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69   clause */.#defi
1e090 6e 65 20 53 46 5f 4d 75 6c 74 69 56 61 6c 75 65  ne SF_MultiValue
1e0a0 20 20 20 20 20 30 78 30 30 34 30 30 20 20 2f 2a       0x00400  /*
1e0b0 20 53 69 6e 67 6c 65 20 56 41 4c 55 45 53 20 74   Single VALUES t
1e0c0 65 72 6d 20 77 69 74 68 20 6d 75 6c 74 69 70 6c  erm with multipl
1e0d0 65 20 72 6f 77 73 20 2a 2f 0a 23 64 65 66 69 6e  e rows */.#defin
1e0e0 65 20 53 46 5f 4e 65 73 74 65 64 46 72 6f 6d 20  e SF_NestedFrom 
1e0f0 20 20 20 20 30 78 30 30 38 30 30 20 20 2f 2a 20      0x00800  /* 
1e100 50 61 72 74 20 6f 66 20 61 20 70 61 72 65 6e 74  Part of a parent
1e110 68 65 73 69 7a 65 64 20 46 52 4f 4d 20 63 6c 61  hesized FROM cla
1e120 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  use */.#define S
1e130 46 5f 4d 69 6e 4d 61 78 41 67 67 20 20 20 20 20  F_MinMaxAgg     
1e140 20 30 78 30 31 30 30 30 20 20 2f 2a 20 41 67 67   0x01000  /* Agg
1e150 72 65 67 61 74 65 20 63 6f 6e 74 61 69 6e 69 6e  regate containin
1e160 67 20 6d 69 6e 28 29 20 6f 72 20 6d 61 78 28 29  g min() or max()
1e170 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 52   */.#define SF_R
1e180 65 63 75 72 73 69 76 65 20 20 20 20 20 20 30 78  ecursive      0x
1e190 30 32 30 30 30 20 20 2f 2a 20 54 68 65 20 72 65  02000  /* The re
1e1a0 63 75 72 73 69 76 65 20 70 61 72 74 20 6f 66 20  cursive part of 
1e1b0 61 20 72 65 63 75 72 73 69 76 65 20 43 54 45 20  a recursive CTE 
1e1c0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 46 69  */.#define SF_Fi
1e1d0 78 65 64 4c 69 6d 69 74 20 20 20 20 20 30 78 30  xedLimit     0x0
1e1e0 34 30 30 30 20 20 2f 2a 20 6e 53 65 6c 65 63 74  4000  /* nSelect
1e1f0 52 6f 77 20 73 65 74 20 62 79 20 61 20 63 6f 6e  Row set by a con
1e200 73 74 61 6e 74 20 4c 49 4d 49 54 20 2a 2f 0a 23  stant LIMIT */.#
1e210 64 65 66 69 6e 65 20 53 46 5f 4d 61 79 62 65 43  define SF_MaybeC
1e220 6f 6e 76 65 72 74 20 20 20 30 78 30 38 30 30 30  onvert   0x08000
1e230 20 20 2f 2a 20 4e 65 65 64 20 63 6f 6e 76 65 72    /* Need conver
1e240 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54  tCompoundSelectT
1e250 6f 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 23  oSubquery() */.#
1e260 64 65 66 69 6e 65 20 53 46 5f 43 6f 6e 76 65 72  define SF_Conver
1e270 74 65 64 20 20 20 20 20 20 30 78 31 30 30 30 30  ted      0x10000
1e280 20 20 2f 2a 20 42 79 20 63 6f 6e 76 65 72 74 43    /* By convertC
1e290 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53  ompoundSelectToS
1e2a0 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 23 64 65  ubquery() */.#de
1e2b0 66 69 6e 65 20 53 46 5f 49 6e 63 6c 75 64 65 48  fine SF_IncludeH
1e2c0 69 64 64 65 6e 20 20 30 78 32 30 30 30 30 20 20  idden  0x20000  
1e2d0 2f 2a 20 49 6e 63 6c 75 64 65 20 68 69 64 64 65  /* Include hidde
1e2e0 6e 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 6f 75 74  n columns in out
1e2f0 70 75 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  put */.#define S
1e300 46 5f 43 6f 6d 70 6c 65 78 52 65 73 75 6c 74 20  F_ComplexResult 
1e310 20 30 78 34 30 30 30 30 20 20 2f 2a 20 52 65 73   0x40000  /* Res
1e320 75 6c 74 20 63 6f 6e 74 61 69 6e 73 20 73 75 62  ult contains sub
1e330 71 75 65 72 79 20 6f 72 20 66 75 6e 63 74 69 6f  query or functio
1e340 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  n */../*.** The 
1e350 72 65 73 75 6c 74 73 20 6f 66 20 61 20 53 45 4c  results of a SEL
1e360 45 43 54 20 63 61 6e 20 62 65 20 64 69 73 74 72  ECT can be distr
1e370 69 62 75 74 65 64 20 69 6e 20 73 65 76 65 72 61  ibuted in severa
1e380 6c 20 77 61 79 73 2c 20 61 73 20 64 65 66 69 6e  l ways, as defin
1e390 65 64 0a 2a 2a 20 62 79 20 6f 6e 65 20 6f 66 20  ed.** by one of 
1e3a0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  the following ma
1e3b0 63 72 6f 73 2e 20 20 54 68 65 20 22 53 52 54 22  cros.  The "SRT"
1e3c0 20 70 72 65 66 69 78 20 6d 65 61 6e 73 20 22 53   prefix means "S
1e3d0 45 4c 45 43 54 20 52 65 73 75 6c 74 0a 2a 2a 20  ELECT Result.** 
1e3e0 54 79 70 65 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  Type"..**.**    
1e3f0 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20   SRT_Union      
1e400 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 61   Store results a
1e410 73 20 61 20 6b 65 79 20 69 6e 20 61 20 74 65 6d  s a key in a tem
1e420 70 6f 72 61 72 79 20 69 6e 64 65 78 0a 2a 2a 20  porary index.** 
1e430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e440 20 20 20 20 69 64 65 6e 74 69 66 69 65 64 20 62      identified b
1e450 79 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  y pDest->iSDParm
1e460 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
1e470 45 78 63 65 70 74 20 20 20 20 20 20 52 65 6d 6f  Except      Remo
1e480 76 65 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20  ve results from 
1e490 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 69 6e  the temporary in
1e4a0 64 65 78 20 70 44 65 73 74 2d 3e 69 53 44 50 61  dex pDest->iSDPa
1e4b0 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  rm..**.**     SR
1e4c0 54 5f 45 78 69 73 74 73 20 20 20 20 20 20 53 74  T_Exists      St
1e4d0 6f 72 65 20 61 20 31 20 69 6e 20 6d 65 6d 6f 72  ore a 1 in memor
1e4e0 79 20 63 65 6c 6c 20 70 44 65 73 74 2d 3e 69 53  y cell pDest->iS
1e4f0 44 50 61 72 6d 20 69 66 20 74 68 65 20 72 65 73  DParm if the res
1e500 75 6c 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ult.**          
1e510 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 69             set i
1e520 73 20 6e 6f 74 20 65 6d 70 74 79 2e 0a 2a 2a 0a  s not empty..**.
1e530 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73 63 61  **     SRT_Disca
1e540 72 64 20 20 20 20 20 54 68 72 6f 77 20 74 68 65  rd     Throw the
1e550 20 72 65 73 75 6c 74 73 20 61 77 61 79 2e 20 20   results away.  
1e560 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20  This is used by 
1e570 53 45 4c 45 43 54 0a 2a 2a 20 20 20 20 20 20 20  SELECT.**       
1e580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
1e590 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20  atements within 
1e5a0 74 72 69 67 67 65 72 73 20 77 68 6f 73 65 20 6f  triggers whose o
1e5b0 6e 6c 79 20 70 75 72 70 6f 73 65 20 69 73 0a 2a  nly purpose is.*
1e5c0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1e5d0 20 20 20 20 20 20 74 68 65 20 73 69 64 65 2d 65        the side-e
1e5e0 66 66 65 63 74 73 20 6f 66 20 66 75 6e 63 74 69  ffects of functi
1e5f0 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f  ons..**.** All o
1e600 66 20 74 68 65 20 61 62 6f 76 65 20 61 72 65 20  f the above are 
1e610 66 72 65 65 20 74 6f 20 69 67 6e 6f 72 65 20 74  free to ignore t
1e620 68 65 69 72 20 4f 52 44 45 52 20 42 59 20 63 6c  heir ORDER BY cl
1e630 61 75 73 65 2e 20 54 68 6f 73 65 20 74 68 61 74  ause. Those that
1e640 0a 2a 2a 20 66 6f 6c 6c 6f 77 20 6d 75 73 74 20  .** follow must 
1e650 68 6f 6e 6f 72 20 74 68 65 20 4f 52 44 45 52 20  honor the ORDER 
1e660 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a  BY clause..**.**
1e670 20 20 20 20 20 53 52 54 5f 4f 75 74 70 75 74 20       SRT_Output 
1e680 20 20 20 20 20 47 65 6e 65 72 61 74 65 20 61 20       Generate a 
1e690 72 6f 77 20 6f 66 20 6f 75 74 70 75 74 20 28 75  row of output (u
1e6a0 73 69 6e 67 20 74 68 65 20 4f 50 5f 52 65 73 75  sing the OP_Resu
1e6b0 6c 74 52 6f 77 0a 2a 2a 20 20 20 20 20 20 20 20  ltRow.**        
1e6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 70 63               opc
1e6d0 6f 64 65 29 20 66 6f 72 20 65 61 63 68 20 72 6f  ode) for each ro
1e6e0 77 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20  w in the result 
1e6f0 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  set..**.**     S
1e700 52 54 5f 4d 65 6d 20 20 20 20 20 20 20 20 20 4f  RT_Mem         O
1e710 6e 6c 79 20 76 61 6c 69 64 20 69 66 20 74 68 65  nly valid if the
1e720 20 72 65 73 75 6c 74 20 69 73 20 61 20 73 69 6e   result is a sin
1e730 67 6c 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 20  gle column..**  
1e740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e750 20 20 20 53 74 6f 72 65 20 74 68 65 20 66 69 72     Store the fir
1e760 73 74 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65  st column of the
1e770 20 66 69 72 73 74 20 72 65 73 75 6c 74 20 72 6f   first result ro
1e780 77 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  w.**            
1e790 20 20 20 20 20 20 20 20 20 69 6e 20 72 65 67 69           in regi
1e7a0 73 74 65 72 20 70 44 65 73 74 2d 3e 69 53 44 50  ster pDest->iSDP
1e7b0 61 72 6d 20 74 68 65 6e 20 61 62 61 6e 64 6f 6e  arm then abandon
1e7c0 20 74 68 65 20 72 65 73 74 0a 2a 2a 20 20 20 20   the rest.**    
1e7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e7e0 20 6f 66 20 74 68 65 20 71 75 65 72 79 2e 20 20   of the query.  
1e7f0 54 68 69 73 20 64 65 73 74 69 6e 61 74 69 6f 6e  This destination
1e800 20 69 6d 70 6c 69 65 73 20 22 4c 49 4d 49 54 20   implies "LIMIT 
1e810 31 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  1"..**.**     SR
1e820 54 5f 53 65 74 20 20 20 20 20 20 20 20 20 54 68  T_Set         Th
1e830 65 20 72 65 73 75 6c 74 20 6d 75 73 74 20 62 65  e result must be
1e840 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e   a single column
1e850 2e 20 20 53 74 6f 72 65 20 65 61 63 68 0a 2a 2a  .  Store each.**
1e860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e870 20 20 20 20 20 72 6f 77 20 6f 66 20 72 65 73 75       row of resu
1e880 6c 74 20 61 73 20 74 68 65 20 6b 65 79 20 69 6e  lt as the key in
1e890 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53   table pDest->iS
1e8a0 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 20 20  DParm..**       
1e8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41 70                Ap
1e8c0 70 6c 79 20 74 68 65 20 61 66 66 69 6e 69 74 79  ply the affinity
1e8d0 20 70 44 65 73 74 2d 3e 61 66 66 53 64 73 74 20   pDest->affSdst 
1e8e0 62 65 66 6f 72 65 20 73 74 6f 72 69 6e 67 0a 2a  before storing.*
1e8f0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1e900 20 20 20 20 20 20 72 65 73 75 6c 74 73 2e 20 20        results.  
1e910 55 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e  Used to implemen
1e920 74 20 22 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e  t "IN (SELECT ..
1e930 2e 29 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  .)"..**.**     S
1e940 52 54 5f 45 70 68 65 6d 54 61 62 20 20 20 20 43  RT_EphemTab    C
1e950 72 65 61 74 65 20 61 6e 20 74 65 6d 70 6f 72 61  reate an tempora
1e960 72 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e  ry table pDest->
1e970 69 53 44 50 61 72 6d 20 61 6e 64 20 73 74 6f 72  iSDParm and stor
1e980 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
1e990 20 20 20 20 20 20 20 20 20 74 68 65 20 72 65 73           the res
1e9a0 75 6c 74 20 74 68 65 72 65 2e 20 54 68 65 20 63  ult there. The c
1e9b0 75 72 73 6f 72 20 69 73 20 6c 65 66 74 20 6f 70  ursor is left op
1e9c0 65 6e 20 61 66 74 65 72 0a 2a 2a 20 20 20 20 20  en after.**     
1e9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e9e0 72 65 74 75 72 6e 69 6e 67 2e 20 20 54 68 69 73  returning.  This
1e9f0 20 69 73 20 6c 69 6b 65 20 53 52 54 5f 54 61 62   is like SRT_Tab
1ea00 6c 65 20 65 78 63 65 70 74 20 74 68 61 74 0a 2a  le except that.*
1ea10 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1ea20 20 20 20 20 20 20 74 68 69 73 20 64 65 73 74 69        this desti
1ea30 6e 61 74 69 6f 6e 20 75 73 65 73 20 4f 50 5f 4f  nation uses OP_O
1ea40 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 74 6f 20  penEphemeral to 
1ea50 63 72 65 61 74 65 0a 2a 2a 20 20 20 20 20 20 20  create.**       
1ea60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
1ea70 65 20 74 61 62 6c 65 20 66 69 72 73 74 2e 0a 2a  e table first..*
1ea80 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 43 6f 72  *.**     SRT_Cor
1ea90 6f 75 74 69 6e 65 20 20 20 47 65 6e 65 72 61 74  outine   Generat
1eaa0 65 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 74  e a co-routine t
1eab0 68 61 74 20 72 65 74 75 72 6e 73 20 61 20 6e 65  hat returns a ne
1eac0 77 20 72 6f 77 20 6f 66 0a 2a 2a 20 20 20 20 20  w row of.**     
1ead0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eae0 72 65 73 75 6c 74 73 20 65 61 63 68 20 74 69 6d  results each tim
1eaf0 65 20 69 74 20 69 73 20 69 6e 76 6f 6b 65 64 2e  e it is invoked.
1eb00 20 20 54 68 65 20 65 6e 74 72 79 20 70 6f 69 6e    The entry poin
1eb10 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  t.**            
1eb20 20 20 20 20 20 20 20 20 20 6f 66 20 74 68 65 20           of the 
1eb30 63 6f 2d 72 6f 75 74 69 6e 65 20 69 73 20 73 74  co-routine is st
1eb40 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
1eb50 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 0a   pDest->iSDParm.
1eb60 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1eb70 20 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 72         and the r
1eb80 65 73 75 6c 74 20 72 6f 77 20 69 73 20 73 74 6f  esult row is sto
1eb90 72 65 64 20 69 6e 20 70 44 65 73 74 2d 3e 6e 44  red in pDest->nD
1eba0 65 73 74 20 72 65 67 69 73 74 65 72 73 0a 2a 2a  est registers.**
1ebb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ebc0 20 20 20 20 20 73 74 61 72 74 69 6e 67 20 77 69       starting wi
1ebd0 74 68 20 70 44 65 73 74 2d 3e 69 53 64 73 74 2e  th pDest->iSdst.
1ebe0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 54  .**.**     SRT_T
1ebf0 61 62 6c 65 20 20 20 20 20 20 20 53 74 6f 72 65  able       Store
1ec00 20 72 65 73 75 6c 74 73 20 69 6e 20 74 65 6d 70   results in temp
1ec10 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44 65 73  orary table pDes
1ec20 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20  t->iSDParm..**  
1ec30 20 20 20 53 52 54 5f 46 69 66 6f 20 20 20 20 20     SRT_Fifo     
1ec40 20 20 20 54 68 69 73 20 69 73 20 6c 69 6b 65 20     This is like 
1ec50 53 52 54 5f 45 70 68 65 6d 54 61 62 20 65 78 63  SRT_EphemTab exc
1ec60 65 70 74 20 74 68 61 74 20 74 68 65 20 74 61 62  ept that the tab
1ec70 6c 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  le.**           
1ec80 20 20 20 20 20 20 20 20 20 20 69 73 20 61 73 73            is ass
1ec90 75 6d 65 64 20 74 6f 20 61 6c 72 65 61 64 79 20  umed to already 
1eca0 62 65 20 6f 70 65 6e 2e 20 20 53 52 54 5f 46 69  be open.  SRT_Fi
1ecb0 66 6f 20 68 61 73 0a 2a 2a 20 20 20 20 20 20 20  fo has.**       
1ecc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
1ecd0 65 20 61 64 64 69 74 69 6f 6e 61 6c 20 70 72 6f  e additional pro
1ece0 70 65 72 74 79 20 6f 66 20 62 65 69 6e 67 20 61  perty of being a
1ecf0 62 6c 65 20 74 6f 20 69 67 6e 6f 72 65 0a 2a 2a  ble to ignore.**
1ed00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed10 20 20 20 20 20 74 68 65 20 4f 52 44 45 52 20 42       the ORDER B
1ed20 59 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20  Y clause..**.** 
1ed30 20 20 20 20 53 52 54 5f 44 69 73 74 46 69 66 6f      SRT_DistFifo
1ed40 20 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74      Store result
1ed50 73 20 69 6e 20 61 20 74 65 6d 70 6f 72 61 72 79  s in a temporary
1ed60 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53   table pDest->iS
1ed70 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 20 20  DParm..**       
1ed80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 42 75                Bu
1ed90 74 20 61 6c 73 6f 20 75 73 65 20 74 65 6d 70 6f  t also use tempo
1eda0 72 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74  rary table pDest
1edb0 2d 3e 69 53 44 50 61 72 6d 2b 31 20 61 73 0a 2a  ->iSDParm+1 as.*
1edc0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1edd0 20 20 20 20 20 20 61 20 72 65 63 6f 72 64 20 6f        a record o
1ede0 66 20 61 6c 6c 20 70 72 69 6f 72 20 72 65 73 75  f all prior resu
1edf0 6c 74 73 20 61 6e 64 20 69 67 6e 6f 72 65 20 61  lts and ignore a
1ee00 6e 79 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20  ny duplicate.** 
1ee10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee20 20 20 20 20 72 6f 77 73 2e 20 20 4e 61 6d 65 20      rows.  Name 
1ee30 6d 65 61 6e 73 3a 20 20 22 44 69 73 74 69 6e 63  means:  "Distinc
1ee40 74 20 46 69 66 6f 22 2e 0a 2a 2a 0a 2a 2a 20 20  t Fifo"..**.**  
1ee50 20 20 20 53 52 54 5f 51 75 65 75 65 20 20 20 20     SRT_Queue    
1ee60 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73     Store results
1ee70 20 69 6e 20 70 72 69 6f 72 69 74 79 20 71 75 65   in priority que
1ee80 75 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  ue pDest->iSDPar
1ee90 6d 20 28 72 65 61 6c 6c 79 0a 2a 2a 20 20 20 20  m (really.**    
1eea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eeb0 20 61 6e 20 69 6e 64 65 78 29 2e 20 20 41 70 70   an index).  App
1eec0 65 6e 64 20 61 20 73 65 71 75 65 6e 63 65 20 6e  end a sequence n
1eed0 75 6d 62 65 72 20 73 6f 20 74 68 61 74 20 61 6c  umber so that al
1eee0 6c 20 65 6e 74 72 69 65 73 0a 2a 2a 20 20 20 20  l entries.**    
1eef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef00 20 61 72 65 20 64 69 73 74 69 6e 63 74 2e 0a 2a   are distinct..*
1ef10 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73  *.**     SRT_Dis
1ef20 74 51 75 65 75 65 20 20 20 53 74 6f 72 65 20 72  tQueue   Store r
1ef30 65 73 75 6c 74 73 20 69 6e 20 70 72 69 6f 72 69  esults in priori
1ef40 74 79 20 71 75 65 75 65 20 70 44 65 73 74 2d 3e  ty queue pDest->
1ef50 69 53 44 50 61 72 6d 20 6f 6e 6c 79 20 69 66 0a  iSDParm only if.
1ef60 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1ef70 20 20 20 20 20 20 20 74 68 65 20 73 61 6d 65 20         the same 
1ef80 72 65 63 6f 72 64 20 68 61 73 20 6e 65 76 65 72  record has never
1ef90 20 62 65 65 6e 20 73 74 6f 72 65 64 20 62 65 66   been stored bef
1efa0 6f 72 65 2e 20 20 54 68 65 0a 2a 2a 20 20 20 20  ore.  The.**    
1efb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1efc0 20 69 6e 64 65 78 20 61 74 20 70 44 65 73 74 2d   index at pDest-
1efd0 3e 69 53 44 50 61 72 6d 2b 31 20 68 6f 6c 64 20  >iSDParm+1 hold 
1efe0 61 6c 6c 20 70 72 69 6f 72 20 73 74 6f 72 65 73  all prior stores
1eff0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  ..*/.#define SRT
1f000 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20 20 31 20  _Union        1 
1f010 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
1f020 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20 69   as keys in an i
1f030 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ndex */.#define 
1f040 53 52 54 5f 45 78 63 65 70 74 20 20 20 20 20 20  SRT_Except      
1f050 20 32 20 20 2f 2a 20 52 65 6d 6f 76 65 20 72 65   2  /* Remove re
1f060 73 75 6c 74 20 66 72 6f 6d 20 61 20 55 4e 49 4f  sult from a UNIO
1f070 4e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69  N index */.#defi
1f080 6e 65 20 53 52 54 5f 45 78 69 73 74 73 20 20 20  ne SRT_Exists   
1f090 20 20 20 20 33 20 20 2f 2a 20 53 74 6f 72 65 20      3  /* Store 
1f0a0 31 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20  1 if the result 
1f0b0 69 73 20 6e 6f 74 20 65 6d 70 74 79 20 2a 2f 0a  is not empty */.
1f0c0 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73 63  #define SRT_Disc
1f0d0 61 72 64 20 20 20 20 20 20 34 20 20 2f 2a 20 44  ard      4  /* D
1f0e0 6f 20 6e 6f 74 20 73 61 76 65 20 74 68 65 20 72  o not save the r
1f0f0 65 73 75 6c 74 73 20 61 6e 79 77 68 65 72 65 20  esults anywhere 
1f100 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 46  */.#define SRT_F
1f110 69 66 6f 20 20 20 20 20 20 20 20 20 35 20 20 2f  ifo         5  /
1f120 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61  * Store result a
1f130 73 20 64 61 74 61 20 77 69 74 68 20 61 6e 20 61  s data with an a
1f140 75 74 6f 6d 61 74 69 63 20 72 6f 77 69 64 20 2a  utomatic rowid *
1f150 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69  /.#define SRT_Di
1f160 73 74 46 69 66 6f 20 20 20 20 20 36 20 20 2f 2a  stFifo     6  /*
1f170 20 4c 69 6b 65 20 53 52 54 5f 46 69 66 6f 2c 20   Like SRT_Fifo, 
1f180 62 75 74 20 75 6e 69 71 75 65 20 72 65 73 75 6c  but unique resul
1f190 74 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69  ts only */.#defi
1f1a0 6e 65 20 53 52 54 5f 51 75 65 75 65 20 20 20 20  ne SRT_Queue    
1f1b0 20 20 20 20 37 20 20 2f 2a 20 53 74 6f 72 65 20      7  /* Store 
1f1c0 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 71 75 65  result in an que
1f1d0 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ue */.#define SR
1f1e0 54 5f 44 69 73 74 51 75 65 75 65 20 20 20 20 38  T_DistQueue    8
1f1f0 20 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 51 75    /* Like SRT_Qu
1f200 65 75 65 2c 20 62 75 74 20 75 6e 69 71 75 65 20  eue, but unique 
1f210 72 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a  results only */.
1f220 0a 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59  ./* The ORDER BY
1f230 20 63 6c 61 75 73 65 20 69 73 20 69 67 6e 6f 72   clause is ignor
1f240 65 64 20 66 6f 72 20 61 6c 6c 20 6f 66 20 74 68  ed for all of th
1f250 65 20 61 62 6f 76 65 20 2a 2f 0a 23 64 65 66 69  e above */.#defi
1f260 6e 65 20 49 67 6e 6f 72 61 62 6c 65 4f 72 64 65  ne IgnorableOrde
1f270 72 62 79 28 58 29 20 28 28 58 2d 3e 65 44 65 73  rby(X) ((X->eDes
1f280 74 29 3c 3d 53 52 54 5f 44 69 73 74 51 75 65 75  t)<=SRT_DistQueu
1f290 65 29 0a 0a 23 64 65 66 69 6e 65 20 53 52 54 5f  e)..#define SRT_
1f2a0 4f 75 74 70 75 74 20 20 20 20 20 20 20 39 20 20  Output       9  
1f2b0 2f 2a 20 4f 75 74 70 75 74 20 65 61 63 68 20 72  /* Output each r
1f2c0 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a  ow of result */.
1f2d0 23 64 65 66 69 6e 65 20 53 52 54 5f 4d 65 6d 20  #define SRT_Mem 
1f2e0 20 20 20 20 20 20 20 20 31 30 20 20 2f 2a 20 53          10  /* S
1f2f0 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20 61  tore result in a
1f300 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 2a 2f 0a   memory cell */.
1f310 23 64 65 66 69 6e 65 20 53 52 54 5f 53 65 74 20  #define SRT_Set 
1f320 20 20 20 20 20 20 20 20 31 31 20 20 2f 2a 20 53          11  /* S
1f330 74 6f 72 65 20 72 65 73 75 6c 74 73 20 61 73 20  tore results as 
1f340 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78  keys in an index
1f350 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1f360 45 70 68 65 6d 54 61 62 20 20 20 20 31 32 20 20  EphemTab    12  
1f370 2f 2a 20 43 72 65 61 74 65 20 74 72 61 6e 73 69  /* Create transi
1f380 65 6e 74 20 74 61 62 20 61 6e 64 20 73 74 6f 72  ent tab and stor
1f390 65 20 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c 65  e like SRT_Table
1f3a0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1f3b0 43 6f 72 6f 75 74 69 6e 65 20 20 20 31 33 20 20  Coroutine   13  
1f3c0 2f 2a 20 47 65 6e 65 72 61 74 65 20 61 20 73 69  /* Generate a si
1f3d0 6e 67 6c 65 20 72 6f 77 20 6f 66 20 72 65 73 75  ngle row of resu
1f3e0 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  lt */.#define SR
1f3f0 54 5f 54 61 62 6c 65 20 20 20 20 20 20 20 31 34  T_Table       14
1f400 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
1f410 74 20 61 73 20 64 61 74 61 20 77 69 74 68 20 61  t as data with a
1f420 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 77 69  n automatic rowi
1f430 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  d */../*.** An i
1f440 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
1f450 6f 62 6a 65 63 74 20 64 65 73 63 72 69 62 65 73  object describes
1f460 20 77 68 65 72 65 20 74 6f 20 70 75 74 20 6f 66   where to put of
1f470 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 0a   the results of.
1f480 2a 2a 20 61 20 53 45 4c 45 43 54 20 73 74 61 74  ** a SELECT stat
1f490 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74  ement..*/.struct
1f4a0 20 53 65 6c 65 63 74 44 65 73 74 20 7b 0a 20 20   SelectDest {.  
1f4b0 75 38 20 65 44 65 73 74 3b 20 20 20 20 20 20 20  u8 eDest;       
1f4c0 20 20 20 20 20 2f 2a 20 48 6f 77 20 74 6f 20 64       /* How to d
1f4d0 69 73 70 6f 73 65 20 6f 66 20 74 68 65 20 72 65  ispose of the re
1f4e0 73 75 6c 74 73 2e 20 20 4f 6e 20 6f 66 20 53 52  sults.  On of SR
1f4f0 54 5f 2a 20 61 62 6f 76 65 2e 20 2a 2f 0a 20 20  T_* above. */.  
1f500 69 6e 74 20 69 53 44 50 61 72 6d 3b 20 20 20 20  int iSDParm;    
1f510 20 20 20 20 20 2f 2a 20 41 20 70 61 72 61 6d 65       /* A parame
1f520 74 65 72 20 75 73 65 64 20 62 79 20 74 68 65 20  ter used by the 
1f530 65 44 65 73 74 20 64 69 73 70 6f 73 61 6c 20 6d  eDest disposal m
1f540 65 74 68 6f 64 20 2a 2f 0a 20 20 69 6e 74 20 69  ethod */.  int i
1f550 53 64 73 74 3b 20 20 20 20 20 20 20 20 20 20 20  Sdst;           
1f560 2f 2a 20 42 61 73 65 20 72 65 67 69 73 74 65 72  /* Base register
1f570 20 77 68 65 72 65 20 72 65 73 75 6c 74 73 20 61   where results a
1f580 72 65 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20  re written */.  
1f590 69 6e 74 20 6e 53 64 73 74 3b 20 20 20 20 20 20  int nSdst;      
1f5a0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1f5b0 66 20 72 65 67 69 73 74 65 72 73 20 61 6c 6c 6f  f registers allo
1f5c0 63 61 74 65 64 20 2a 2f 0a 20 20 63 68 61 72 20  cated */.  char 
1f5d0 2a 7a 41 66 66 53 64 73 74 3b 20 20 20 20 20 20  *zAffSdst;      
1f5e0 2f 2a 20 41 66 66 69 6e 69 74 79 20 75 73 65 64  /* Affinity used
1f5f0 20 77 68 65 6e 20 65 44 65 73 74 3d 3d 53 52 54   when eDest==SRT
1f600 5f 53 65 74 20 2a 2f 0a 20 20 45 78 70 72 4c 69  _Set */.  ExprLi
1f610 73 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 2f  st *pOrderBy;  /
1f620 2a 20 4b 65 79 20 63 6f 6c 75 6d 6e 73 20 66 6f  * Key columns fo
1f630 72 20 53 52 54 5f 51 75 65 75 65 20 61 6e 64 20  r SRT_Queue and 
1f640 53 52 54 5f 44 69 73 74 51 75 65 75 65 20 2a 2f  SRT_DistQueue */
1f650 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 44 75 72 69 6e  .};../*.** Durin
1f660 67 20 63 6f 64 65 20 67 65 6e 65 72 61 74 69 6f  g code generatio
1f670 6e 20 6f 66 20 73 74 61 74 65 6d 65 6e 74 73 20  n of statements 
1f680 74 68 61 74 20 64 6f 20 69 6e 73 65 72 74 73 20  that do inserts 
1f690 69 6e 74 6f 20 41 55 54 4f 49 4e 43 52 45 4d 45  into AUTOINCREME
1f6a0 4e 54 0a 2a 2a 20 74 61 62 6c 65 73 2c 20 74 68  NT.** tables, th
1f6b0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 66 6f  e following info
1f6c0 72 6d 61 74 69 6f 6e 20 69 73 20 61 74 74 61 63  rmation is attac
1f6d0 68 65 64 20 74 6f 20 74 68 65 20 54 61 62 6c 65  hed to the Table
1f6e0 2e 75 2e 61 75 74 6f 49 6e 63 2e 70 0a 2a 2a 20  .u.autoInc.p.** 
1f6f0 70 6f 69 6e 74 65 72 20 6f 66 20 65 61 63 68 20  pointer of each 
1f700 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 74 61  autoincrement ta
1f710 62 6c 65 20 74 6f 20 72 65 63 6f 72 64 20 73 6f  ble to record so
1f720 6d 65 20 73 69 64 65 20 69 6e 66 6f 72 6d 61 74  me side informat
1f730 69 6f 6e 20 74 68 61 74 0a 2a 2a 20 74 68 65 20  ion that.** the 
1f740 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20 6e  code generator n
1f750 65 65 64 73 2e 20 20 57 65 20 68 61 76 65 20 74  eeds.  We have t
1f760 6f 20 6b 65 65 70 20 70 65 72 2d 74 61 62 6c 65  o keep per-table
1f770 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 0a 2a   autoincrement.*
1f780 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e  * information in
1f790 20 63 61 73 65 20 69 6e 73 65 72 74 73 20 61 72   case inserts ar
1f7a0 65 20 64 6f 6e 65 20 77 69 74 68 69 6e 20 74 72  e done within tr
1f7b0 69 67 67 65 72 73 2e 20 20 54 72 69 67 67 65 72  iggers.  Trigger
1f7c0 73 20 64 6f 20 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d  s do not.** norm
1f7d0 61 6c 6c 79 20 63 6f 6f 72 64 69 6e 61 74 65 20  ally coordinate 
1f7e0 74 68 65 69 72 20 61 63 74 69 76 69 74 69 65 73  their activities
1f7f0 2c 20 62 75 74 20 77 65 20 64 6f 20 6e 65 65 64  , but we do need
1f800 20 74 6f 20 63 6f 6f 72 64 69 6e 61 74 65 20 74   to coordinate t
1f810 68 65 0a 2a 2a 20 6c 6f 61 64 69 6e 67 20 61 6e  he.** loading an
1f820 64 20 73 61 76 69 6e 67 20 6f 66 20 61 75 74 6f  d saving of auto
1f830 69 6e 63 72 65 6d 65 6e 74 20 69 6e 66 6f 72 6d  increment inform
1f840 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  ation..*/.struct
1f850 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 7b 0a 20   AutoincInfo {. 
1f860 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 4e   AutoincInfo *pN
1f870 65 78 74 3b 20 20 20 2f 2a 20 4e 65 78 74 20 69  ext;   /* Next i
1f880 6e 66 6f 20 62 6c 6f 63 6b 20 69 6e 20 61 20 6c  nfo block in a l
1f890 69 73 74 20 6f 66 20 74 68 65 6d 20 61 6c 6c 20  ist of them all 
1f8a0 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62  */.  Table *pTab
1f8b0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61  ;          /* Ta
1f8c0 62 6c 65 20 74 68 69 73 20 69 6e 66 6f 20 62 6c  ble this info bl
1f8d0 6f 63 6b 20 72 65 66 65 72 73 20 74 6f 20 2a 2f  ock refers to */
1f8e0 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20  .  int iDb;     
1f8f0 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
1f900 78 20 69 6e 20 73 71 6c 69 74 65 33 2e 61 44 62  x in sqlite3.aDb
1f910 5b 5d 20 6f 66 20 64 61 74 61 62 61 73 65 20 68  [] of database h
1f920 6f 6c 64 69 6e 67 20 70 54 61 62 20 2a 2f 0a 20  olding pTab */. 
1f930 20 69 6e 74 20 72 65 67 43 74 72 3b 20 20 20 20   int regCtr;    
1f940 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79         /* Memory
1f950 20 72 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e   register holdin
1f960 67 20 74 68 65 20 72 6f 77 69 64 20 63 6f 75 6e  g the rowid coun
1f970 74 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ter */.};../*.**
1f980 20 41 74 20 6c 65 61 73 74 20 6f 6e 65 20 69 6e   At least one in
1f990 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
1f9a0 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
1f9b0 65 20 69 73 20 63 72 65 61 74 65 64 20 66 6f 72  e is created for
1f9c0 20 65 61 63 68 0a 2a 2a 20 74 72 69 67 67 65 72   each.** trigger
1f9d0 20 74 68 61 74 20 6d 61 79 20 62 65 20 66 69 72   that may be fir
1f9e0 65 64 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67  ed while parsing
1f9f0 20 61 6e 20 49 4e 53 45 52 54 2c 20 55 50 44 41   an INSERT, UPDA
1fa00 54 45 20 6f 72 20 44 45 4c 45 54 45 0a 2a 2a 20  TE or DELETE.** 
1fa10 73 74 61 74 65 6d 65 6e 74 2e 20 41 6c 6c 20 73  statement. All s
1fa20 75 63 68 20 6f 62 6a 65 63 74 73 20 61 72 65 20  uch objects are 
1fa30 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 6c 69  stored in the li
1fa40 6e 6b 65 64 20 6c 69 73 74 20 68 65 61 64 65 64  nked list headed
1fa50 20 61 74 0a 2a 2a 20 50 61 72 73 65 2e 70 54 72   at.** Parse.pTr
1fa60 69 67 67 65 72 50 72 67 20 61 6e 64 20 64 65 6c  iggerPrg and del
1fa70 65 74 65 64 20 6f 6e 63 65 20 73 74 61 74 65 6d  eted once statem
1fa80 65 6e 74 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20  ent compilation 
1fa90 68 61 73 20 62 65 65 6e 0a 2a 2a 20 63 6f 6d 70  has been.** comp
1faa0 6c 65 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 56  leted..**.** A V
1fab0 64 62 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20  dbe sub-program 
1fac0 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20  that implements 
1fad0 74 68 65 20 62 6f 64 79 20 61 6e 64 20 57 48 45  the body and WHE
1fae0 4e 20 63 6c 61 75 73 65 20 6f 66 20 74 72 69 67  N clause of trig
1faf0 67 65 72 0a 2a 2a 20 54 72 69 67 67 65 72 50 72  ger.** TriggerPr
1fb00 67 2e 70 54 72 69 67 67 65 72 2c 20 61 73 73 75  g.pTrigger, assu
1fb10 6d 69 6e 67 20 61 20 64 65 66 61 75 6c 74 20 4f  ming a default O
1fb20 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73  N CONFLICT claus
1fb30 65 20 6f 66 0a 2a 2a 20 54 72 69 67 67 65 72 50  e of.** TriggerP
1fb40 72 67 2e 6f 72 63 6f 6e 66 2c 20 69 73 20 73 74  rg.orconf, is st
1fb50 6f 72 65 64 20 69 6e 20 74 68 65 20 54 72 69 67  ored in the Trig
1fb60 67 65 72 50 72 67 2e 70 50 72 6f 67 72 61 6d 20  gerPrg.pProgram 
1fb70 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 20 54 68 65  variable..** The
1fb80 20 50 61 72 73 65 2e 70 54 72 69 67 67 65 72 50   Parse.pTriggerP
1fb90 72 67 20 6c 69 73 74 20 6e 65 76 65 72 20 63 6f  rg list never co
1fba0 6e 74 61 69 6e 73 20 74 77 6f 20 65 6e 74 72 69  ntains two entri
1fbb0 65 73 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  es with the same
1fbc0 0a 2a 2a 20 76 61 6c 75 65 73 20 66 6f 72 20 62  .** values for b
1fbd0 6f 74 68 20 70 54 72 69 67 67 65 72 20 61 6e 64  oth pTrigger and
1fbe0 20 6f 72 63 6f 6e 66 2e 0a 2a 2a 0a 2a 2a 20 54   orconf..**.** T
1fbf0 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 61 43  he TriggerPrg.aC
1fc00 6f 6c 6d 61 73 6b 5b 30 5d 20 76 61 72 69 61 62  olmask[0] variab
1fc10 6c 65 20 69 73 20 73 65 74 20 74 6f 20 61 20 6d  le is set to a m
1fc20 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c  ask of old.* col
1fc30 75 6d 6e 73 0a 2a 2a 20 61 63 63 65 73 73 65 64  umns.** accessed
1fc40 20 28 6f 72 20 73 65 74 20 74 6f 20 30 20 66 6f   (or set to 0 fo
1fc50 72 20 74 72 69 67 67 65 72 73 20 66 69 72 65 64  r triggers fired
1fc60 20 61 73 20 61 20 72 65 73 75 6c 74 20 6f 66 20   as a result of 
1fc70 49 4e 53 45 52 54 0a 2a 2a 20 73 74 61 74 65 6d  INSERT.** statem
1fc80 65 6e 74 73 29 2e 20 53 69 6d 69 6c 61 72 6c 79  ents). Similarly
1fc90 2c 20 74 68 65 20 54 72 69 67 67 65 72 50 72 67  , the TriggerPrg
1fca0 2e 61 43 6f 6c 6d 61 73 6b 5b 31 5d 20 76 61 72  .aColmask[1] var
1fcb0 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f 0a  iable is set to.
1fcc0 2a 2a 20 61 20 6d 61 73 6b 20 6f 66 20 6e 65 77  ** a mask of new
1fcd0 2e 2a 20 63 6f 6c 75 6d 6e 73 20 75 73 65 64 20  .* columns used 
1fce0 62 79 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a  by the program..
1fcf0 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67 65  */.struct Trigge
1fd00 72 50 72 67 20 7b 0a 20 20 54 72 69 67 67 65 72  rPrg {.  Trigger
1fd10 20 2a 70 54 72 69 67 67 65 72 3b 20 20 20 20 20   *pTrigger;     
1fd20 20 2f 2a 20 54 72 69 67 67 65 72 20 74 68 69 73   /* Trigger this
1fd30 20 70 72 6f 67 72 61 6d 20 77 61 73 20 63 6f 64   program was cod
1fd40 65 64 20 66 72 6f 6d 20 2a 2f 0a 20 20 54 72 69  ed from */.  Tri
1fd50 67 67 65 72 50 72 67 20 2a 70 4e 65 78 74 3b 20  ggerPrg *pNext; 
1fd60 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 65 6e 74       /* Next ent
1fd70 72 79 20 69 6e 20 50 61 72 73 65 2e 70 54 72 69  ry in Parse.pTri
1fd80 67 67 65 72 50 72 67 20 6c 69 73 74 20 2a 2f 0a  ggerPrg list */.
1fd90 20 20 53 75 62 50 72 6f 67 72 61 6d 20 2a 70 50    SubProgram *pP
1fda0 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 50 72 6f  rogram;   /* Pro
1fdb0 67 72 61 6d 20 69 6d 70 6c 65 6d 65 6e 74 69 6e  gram implementin
1fdc0 67 20 70 54 72 69 67 67 65 72 2f 6f 72 63 6f 6e  g pTrigger/orcon
1fdd0 66 20 2a 2f 0a 20 20 69 6e 74 20 6f 72 63 6f 6e  f */.  int orcon
1fde0 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  f;             /
1fdf0 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e  * Default ON CON
1fe00 46 4c 49 43 54 20 70 6f 6c 69 63 79 20 2a 2f 0a  FLICT policy */.
1fe10 20 20 75 33 32 20 61 43 6f 6c 6d 61 73 6b 5b 32    u32 aColmask[2
1fe20 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73  ];        /* Mas
1fe30 6b 73 20 6f 66 20 6f 6c 64 2e 2a 2c 20 6e 65 77  ks of old.*, new
1fe40 2e 2a 20 63 6f 6c 75 6d 6e 73 20 61 63 63 65 73  .* columns acces
1fe50 73 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  sed */.};../*.**
1fe60 20 54 68 65 20 79 44 62 4d 61 73 6b 20 64 61 74   The yDbMask dat
1fe70 61 74 79 70 65 20 66 6f 72 20 74 68 65 20 62 69  atype for the bi
1fe80 74 6d 61 73 6b 20 6f 66 20 61 6c 6c 20 61 74 74  tmask of all att
1fe90 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73 2e  ached databases.
1fea0 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d  .*/.#if SQLITE_M
1feb0 41 58 5f 41 54 54 41 43 48 45 44 3e 33 30 0a 20  AX_ATTACHED>30. 
1fec0 20 74 79 70 65 64 65 66 20 75 6e 73 69 67 6e 65   typedef unsigne
1fed0 64 20 63 68 61 72 20 79 44 62 4d 61 73 6b 5b 28  d char yDbMask[(
1fee0 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43  SQLITE_MAX_ATTAC
1fef0 48 45 44 2b 39 29 2f 38 5d 3b 0a 23 20 64 65 66  HED+9)/8];.# def
1ff00 69 6e 65 20 44 62 4d 61 73 6b 54 65 73 74 28 4d  ine DbMaskTest(M
1ff10 2c 49 29 20 20 20 20 28 28 28 4d 29 5b 28 49 29  ,I)    (((M)[(I)
1ff20 2f 38 5d 26 28 31 3c 3c 28 28 49 29 26 37 29 29  /8]&(1<<((I)&7))
1ff30 29 21 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 44  )!=0).# define D
1ff40 62 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20  bMaskZero(M)    
1ff50 20 20 6d 65 6d 73 65 74 28 28 4d 29 2c 30 2c 73    memset((M),0,s
1ff60 69 7a 65 6f 66 28 4d 29 29 0a 23 20 64 65 66 69  izeof(M)).# defi
1ff70 6e 65 20 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49  ne DbMaskSet(M,I
1ff80 29 20 20 20 20 20 28 4d 29 5b 28 49 29 2f 38 5d  )     (M)[(I)/8]
1ff90 7c 3d 28 31 3c 3c 28 28 49 29 26 37 29 29 0a 23  |=(1<<((I)&7)).#
1ffa0 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c   define DbMaskAl
1ffb0 6c 5a 65 72 6f 28 4d 29 20 20 20 73 71 6c 69 74  lZero(M)   sqlit
1ffc0 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28  e3DbMaskAllZero(
1ffd0 4d 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  M).# define DbMa
1ffe0 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20 20 28  skNonZero(M)   (
1fff0 73 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c  sqlite3DbMaskAll
20000 5a 65 72 6f 28 4d 29 3d 3d 30 29 0a 23 65 6c 73  Zero(M)==0).#els
20010 65 0a 20 20 74 79 70 65 64 65 66 20 75 6e 73 69  e.  typedef unsi
20020 67 6e 65 64 20 69 6e 74 20 79 44 62 4d 61 73 6b  gned int yDbMask
20030 3b 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  ;.# define DbMas
20040 6b 54 65 73 74 28 4d 2c 49 29 20 20 20 20 28 28  kTest(M,I)    ((
20050 28 4d 29 26 28 28 28 79 44 62 4d 61 73 6b 29 31  (M)&(((yDbMask)1
20060 29 3c 3c 28 49 29 29 29 21 3d 30 29 0a 23 20 64  )<<(I)))!=0).# d
20070 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a 65 72 6f  efine DbMaskZero
20080 28 4d 29 20 20 20 20 20 20 28 4d 29 3d 30 0a 23  (M)      (M)=0.#
20090 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 53 65   define DbMaskSe
200a0 74 28 4d 2c 49 29 20 20 20 20 20 28 4d 29 7c 3d  t(M,I)     (M)|=
200b0 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 28  (((yDbMask)1)<<(
200c0 49 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  I)).# define DbM
200d0 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20 20 20  askAllZero(M)   
200e0 28 4d 29 3d 3d 30 0a 23 20 64 65 66 69 6e 65 20  (M)==0.# define 
200f0 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29  DbMaskNonZero(M)
20100 20 20 20 28 4d 29 21 3d 30 0a 23 65 6e 64 69 66     (M)!=0.#endif
20110 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 53 51 4c 20 70  ../*.** An SQL p
20120 61 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20  arser context.  
20130 41 20 63 6f 70 79 20 6f 66 20 74 68 69 73 20 73  A copy of this s
20140 74 72 75 63 74 75 72 65 20 69 73 20 70 61 73 73  tructure is pass
20150 65 64 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 68  ed through.** th
20160 65 20 70 61 72 73 65 72 20 61 6e 64 20 64 6f 77  e parser and dow
20170 6e 20 69 6e 74 6f 20 61 6c 6c 20 74 68 65 20 70  n into all the p
20180 61 72 73 65 72 20 61 63 74 69 6f 6e 20 72 6f 75  arser action rou
20190 74 69 6e 65 20 69 6e 20 6f 72 64 65 72 20 74 6f  tine in order to
201a0 0a 2a 2a 20 63 61 72 72 79 20 61 72 6f 75 6e 64  .** carry around
201b0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61   information tha
201c0 74 20 69 73 20 67 6c 6f 62 61 6c 20 74 6f 20 74  t is global to t
201d0 68 65 20 65 6e 74 69 72 65 20 70 61 72 73 65 2e  he entire parse.
201e0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72 75 63  .**.** The struc
201f0 74 75 72 65 20 69 73 20 64 69 76 69 64 65 64 20  ture is divided 
20200 69 6e 74 6f 20 74 77 6f 20 70 61 72 74 73 2e 20  into two parts. 
20210 20 57 68 65 6e 20 74 68 65 20 70 61 72 73 65 72   When the parser
20220 20 61 6e 64 20 63 6f 64 65 0a 2a 2a 20 67 65 6e   and code.** gen
20230 65 72 61 74 65 20 63 61 6c 6c 20 74 68 65 6d 73  erate call thems
20240 65 6c 76 65 73 20 72 65 63 75 72 73 69 76 65 6c  elves recursivel
20250 79 2c 20 74 68 65 20 66 69 72 73 74 20 70 61 72  y, the first par
20260 74 20 6f 66 20 74 68 65 20 73 74 72 75 63 74 75  t of the structu
20270 72 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 74 61 6e  re.** is constan
20280 74 20 62 75 74 20 74 68 65 20 73 65 63 6f 6e 64  t but the second
20290 20 70 61 72 74 20 69 73 20 72 65 73 65 74 20 61   part is reset a
202a0 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20  t the beginning 
202b0 61 6e 64 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 61  and end of.** ea
202c0 63 68 20 72 65 63 75 72 73 69 6f 6e 2e 0a 2a 2a  ch recursion..**
202d0 0a 2a 2a 20 54 68 65 20 6e 54 61 62 6c 65 4c 6f  .** The nTableLo
202e0 63 6b 20 61 6e 64 20 61 54 61 62 6c 65 4c 6f 63  ck and aTableLoc
202f0 6b 20 76 61 72 69 61 62 6c 65 73 20 61 72 65 20  k variables are 
20300 6f 6e 6c 79 20 75 73 65 64 20 69 66 20 74 68 65  only used if the
20310 20 73 68 61 72 65 64 2d 63 61 63 68 65 0a 2a 2a   shared-cache.**
20320 20 66 65 61 74 75 72 65 20 69 73 20 65 6e 61 62   feature is enab
20330 6c 65 64 20 28 69 66 20 73 71 6c 69 74 65 33 54  led (if sqlite3T
20340 73 64 28 29 2d 3e 75 73 65 53 68 61 72 65 64 44  sd()->useSharedD
20350 61 74 61 20 69 73 20 74 72 75 65 29 2e 20 54 68  ata is true). Th
20360 65 79 20 61 72 65 0a 2a 2a 20 75 73 65 64 20 74  ey are.** used t
20370 6f 20 73 74 6f 72 65 20 74 68 65 20 73 65 74 20  o store the set 
20380 6f 66 20 74 61 62 6c 65 2d 6c 6f 63 6b 73 20 72  of table-locks r
20390 65 71 75 69 72 65 64 20 62 79 20 74 68 65 20 73  equired by the s
203a0 74 61 74 65 6d 65 6e 74 20 62 65 69 6e 67 0a 2a  tatement being.*
203b0 2a 20 63 6f 6d 70 69 6c 65 64 2e 20 46 75 6e 63  * compiled. Func
203c0 74 69 6f 6e 20 73 71 6c 69 74 65 33 54 61 62 6c  tion sqlite3Tabl
203d0 65 4c 6f 63 6b 28 29 20 69 73 20 75 73 65 64 20  eLock() is used 
203e0 74 6f 20 61 64 64 20 65 6e 74 72 69 65 73 20 74  to add entries t
203f0 6f 20 74 68 65 0a 2a 2a 20 6c 69 73 74 2e 0a 2a  o the.** list..*
20400 2f 0a 73 74 72 75 63 74 20 50 61 72 73 65 20 7b  /.struct Parse {
20410 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20  .  sqlite3 *db; 
20420 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6d          /* The m
20430 61 69 6e 20 64 61 74 61 62 61 73 65 20 73 74 72  ain database str
20440 75 63 74 75 72 65 20 2a 2f 0a 20 20 63 68 61 72  ucture */.  char
20450 20 2a 7a 45 72 72 4d 73 67 3b 20 20 20 20 20 20   *zErrMsg;      
20460 20 2f 2a 20 41 6e 20 65 72 72 6f 72 20 6d 65 73   /* An error mes
20470 73 61 67 65 20 2a 2f 0a 20 20 56 64 62 65 20 2a  sage */.  Vdbe *
20480 70 56 64 62 65 3b 20 20 20 20 20 20 20 20 20 2f  pVdbe;         /
20490 2a 20 41 6e 20 65 6e 67 69 6e 65 20 66 6f 72 20  * An engine for 
204a0 65 78 65 63 75 74 69 6e 67 20 64 61 74 61 62 61  executing databa
204b0 73 65 20 62 79 74 65 63 6f 64 65 20 2a 2f 0a 20  se bytecode */. 
204c0 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20   int rc;        
204d0 20 20 20 20 20 20 2f 2a 20 52 65 74 75 72 6e 20        /* Return 
204e0 63 6f 64 65 20 66 72 6f 6d 20 65 78 65 63 75 74  code from execut
204f0 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 4e  ion */.  u8 colN
20500 61 6d 65 73 53 65 74 3b 20 20 20 20 20 20 2f 2a  amesSet;      /*
20510 20 54 52 55 45 20 61 66 74 65 72 20 4f 50 5f 43   TRUE after OP_C
20520 6f 6c 75 6d 6e 4e 61 6d 65 20 68 61 73 20 62 65  olumnName has be
20530 65 6e 20 69 73 73 75 65 64 20 74 6f 20 70 56 64  en issued to pVd
20540 62 65 20 2a 2f 0a 20 20 75 38 20 63 68 65 63 6b  be */.  u8 check
20550 53 63 68 65 6d 61 3b 20 20 20 20 20 20 2f 2a 20  Schema;      /* 
20560 43 61 75 73 65 73 20 73 63 68 65 6d 61 20 63 6f  Causes schema co
20570 6f 6b 69 65 20 63 68 65 63 6b 20 61 66 74 65 72  okie check after
20580 20 61 6e 20 65 72 72 6f 72 20 2a 2f 0a 20 20 75   an error */.  u
20590 38 20 6e 65 73 74 65 64 3b 20 20 20 20 20 20 20  8 nested;       
205a0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
205b0 20 6e 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f   nested calls to
205c0 20 74 68 65 20 70 61 72 73 65 72 2f 63 6f 64 65   the parser/code
205d0 20 67 65 6e 65 72 61 74 6f 72 20 2a 2f 0a 20 20   generator */.  
205e0 75 38 20 6e 54 65 6d 70 52 65 67 3b 20 20 20 20  u8 nTempReg;    
205f0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
20600 66 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69  f temporary regi
20610 73 74 65 72 73 20 69 6e 20 61 54 65 6d 70 52 65  sters in aTempRe
20620 67 5b 5d 20 2a 2f 0a 20 20 75 38 20 69 73 4d 75  g[] */.  u8 isMu
20630 6c 74 69 57 72 69 74 65 3b 20 20 20 20 20 2f 2a  ltiWrite;     /*
20640 20 54 72 75 65 20 69 66 20 73 74 61 74 65 6d 65   True if stateme
20650 6e 74 20 6d 61 79 20 6d 6f 64 69 66 79 2f 69 6e  nt may modify/in
20660 73 65 72 74 20 6d 75 6c 74 69 70 6c 65 20 72 6f  sert multiple ro
20670 77 73 20 2a 2f 0a 20 20 75 38 20 6d 61 79 41 62  ws */.  u8 mayAb
20680 6f 72 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ort;         /* 
20690 54 72 75 65 20 69 66 20 73 74 61 74 65 6d 65 6e  True if statemen
206a0 74 20 6d 61 79 20 74 68 72 6f 77 20 61 6e 20 41  t may throw an A
206b0 42 4f 52 54 20 65 78 63 65 70 74 69 6f 6e 20 2a  BORT exception *
206c0 2f 0a 20 20 75 38 20 68 61 73 43 6f 6d 70 6f 75  /.  u8 hasCompou
206d0 6e 64 3b 20 20 20 20 20 20 2f 2a 20 4e 65 65 64  nd;      /* Need
206e0 20 74 6f 20 69 6e 76 6f 6b 65 20 63 6f 6e 76 65   to invoke conve
206f0 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74  rtCompoundSelect
20700 54 6f 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a  ToSubquery() */.
20710 20 20 75 38 20 6f 6b 43 6f 6e 73 74 46 61 63 74    u8 okConstFact
20720 6f 72 3b 20 20 20 20 2f 2a 20 4f 4b 20 74 6f 20  or;    /* OK to 
20730 66 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e 73 74  factor out const
20740 61 6e 74 73 20 2a 2f 0a 20 20 75 38 20 64 69 73  ants */.  u8 dis
20750 61 62 6c 65 4c 6f 6f 6b 61 73 69 64 65 3b 20 2f  ableLookaside; /
20760 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 69 6d 65  * Number of time
20770 73 20 6c 6f 6f 6b 61 73 69 64 65 20 68 61 73 20  s lookaside has 
20780 62 65 65 6e 20 64 69 73 61 62 6c 65 64 20 2a 2f  been disabled */
20790 0a 20 20 69 6e 74 20 6e 52 61 6e 67 65 52 65 67  .  int nRangeReg
207a0 3b 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20  ;       /* Size 
207b0 6f 66 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79  of the temporary
207c0 20 72 65 67 69 73 74 65 72 20 62 6c 6f 63 6b 20   register block 
207d0 2a 2f 0a 20 20 69 6e 74 20 69 52 61 6e 67 65 52  */.  int iRangeR
207e0 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 46 69 72  eg;       /* Fir
207f0 73 74 20 72 65 67 69 73 74 65 72 20 69 6e 20 74  st register in t
20800 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65  emporary registe
20810 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74  r block */.  int
20820 20 6e 45 72 72 3b 20 20 20 20 20 20 20 20 20 20   nErr;          
20830 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
20840 72 72 6f 72 73 20 73 65 65 6e 20 2a 2f 0a 20 20  rrors seen */.  
20850 69 6e 74 20 6e 54 61 62 3b 20 20 20 20 20 20 20  int nTab;       
20860 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
20870 66 20 70 72 65 76 69 6f 75 73 6c 79 20 61 6c 6c  f previously all
20880 6f 63 61 74 65 64 20 56 44 42 45 20 63 75 72 73  ocated VDBE curs
20890 6f 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65  ors */.  int nMe
208a0 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  m;            /*
208b0 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72   Number of memor
208c0 79 20 63 65 6c 6c 73 20 75 73 65 64 20 73 6f 20  y cells used so 
208d0 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 70  far */.  int nOp
208e0 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a  Alloc;        /*
208f0 20 4e 75 6d 62 65 72 20 6f 66 20 73 6c 6f 74 73   Number of slots
20900 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 56   allocated for V
20910 64 62 65 2e 61 4f 70 5b 5d 20 2a 2f 0a 20 20 69  dbe.aOp[] */.  i
20920 6e 74 20 73 7a 4f 70 41 6c 6c 6f 63 3b 20 20 20  nt szOpAlloc;   
20930 20 20 20 20 2f 2a 20 42 79 74 65 73 20 6f 66 20      /* Bytes of 
20940 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 61 6c 6c  memory space all
20950 6f 63 61 74 65 64 20 66 6f 72 20 56 64 62 65 2e  ocated for Vdbe.
20960 61 4f 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 69  aOp[] */.  int i
20970 53 65 6c 66 54 61 62 3b 20 20 20 20 20 20 20 20  SelfTab;        
20980 2f 2a 20 54 61 62 6c 65 20 61 73 73 6f 63 69 61  /* Table associa
20990 74 65 64 20 77 69 74 68 20 61 6e 20 69 6e 64 65  ted with an inde
209a0 78 20 6f 6e 20 65 78 70 72 2c 20 6f 72 20 6e 65  x on expr, or ne
209b0 67 61 74 69 76 65 0a 20 20 20 20 20 20 20 20 20  gative.         
209c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
209d0 20 6f 66 20 74 68 65 20 62 61 73 65 20 72 65 67   of the base reg
209e0 69 73 74 65 72 20 64 75 72 69 6e 67 20 63 68 65  ister during che
209f0 63 6b 2d 63 6f 6e 73 74 72 61 69 6e 74 20 65 76  ck-constraint ev
20a00 61 6c 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 61 62  al */.  int nLab
20a10 65 6c 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  el;          /* 
20a20 4e 75 6d 62 65 72 20 6f 66 20 6c 61 62 65 6c 73  Number of labels
20a30 20 75 73 65 64 20 2a 2f 0a 20 20 69 6e 74 20 2a   used */.  int *
20a40 61 4c 61 62 65 6c 3b 20 20 20 20 20 20 20 20 20  aLabel;         
20a50 2f 2a 20 53 70 61 63 65 20 74 6f 20 68 6f 6c 64  /* Space to hold
20a60 20 74 68 65 20 6c 61 62 65 6c 73 20 2a 2f 0a 20   the labels */. 
20a70 20 45 78 70 72 4c 69 73 74 20 2a 70 43 6f 6e 73   ExprList *pCons
20a80 74 45 78 70 72 3b 2f 2a 20 43 6f 6e 73 74 61 6e  tExpr;/* Constan
20a90 74 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f  t expressions */
20aa0 0a 20 20 54 6f 6b 65 6e 20 63 6f 6e 73 74 72 61  .  Token constra
20ab0 69 6e 74 4e 61 6d 65 3b 2f 2a 20 4e 61 6d 65 20  intName;/* Name 
20ac0 6f 66 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e  of the constrain
20ad0 74 20 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e  t currently bein
20ae0 67 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 79 44  g parsed */.  yD
20af0 62 4d 61 73 6b 20 77 72 69 74 65 4d 61 73 6b 3b  bMask writeMask;
20b00 20 20 20 2f 2a 20 53 74 61 72 74 20 61 20 77 72     /* Start a wr
20b10 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ite transaction 
20b20 6f 6e 20 74 68 65 73 65 20 64 61 74 61 62 61 73  on these databas
20b30 65 73 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20  es */.  yDbMask 
20b40 63 6f 6f 6b 69 65 4d 61 73 6b 3b 20 20 2f 2a 20  cookieMask;  /* 
20b50 42 69 74 6d 61 73 6b 20 6f 66 20 73 63 68 65 6d  Bitmask of schem
20b60 61 20 76 65 72 69 66 69 65 64 20 64 61 74 61 62  a verified datab
20b70 61 73 65 73 20 2a 2f 0a 20 20 69 6e 74 20 72 65  ases */.  int re
20b80 67 52 6f 77 69 64 3b 20 20 20 20 20 20 20 20 2f  gRowid;        /
20b90 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69  * Register holdi
20ba0 6e 67 20 72 6f 77 69 64 20 6f 66 20 43 52 45 41  ng rowid of CREA
20bb0 54 45 20 54 41 42 4c 45 20 65 6e 74 72 79 20 2a  TE TABLE entry *
20bc0 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f 6f 74 3b  /.  int regRoot;
20bd0 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69           /* Regi
20be0 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 6f  ster holding roo
20bf0 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f  t page number fo
20c00 72 20 6e 65 77 20 6f 62 6a 65 63 74 73 20 2a 2f  r new objects */
20c10 0a 20 20 69 6e 74 20 6e 4d 61 78 41 72 67 3b 20  .  int nMaxArg; 
20c20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 20 61          /* Max a
20c30 72 67 73 20 70 61 73 73 65 64 20 74 6f 20 75 73  rgs passed to us
20c40 65 72 20 66 75 6e 63 74 69 6f 6e 20 62 79 20 73  er function by s
20c50 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20  ub-program */.  
20c60 69 6e 74 20 6e 53 65 6c 65 63 74 3b 20 20 20 20  int nSelect;    
20c70 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
20c80 66 20 53 45 4c 45 43 54 20 73 74 6d 74 73 2e 20  f SELECT stmts. 
20c90 43 6f 75 6e 74 65 72 20 66 6f 72 20 53 65 6c 65  Counter for Sele
20ca0 63 74 2e 73 65 6c 49 64 20 2a 2f 0a 23 69 66 6e  ct.selId */.#ifn
20cb0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
20cc0 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20 69  SHARED_CACHE.  i
20cd0 6e 74 20 6e 54 61 62 6c 65 4c 6f 63 6b 3b 20 20  nt nTableLock;  
20ce0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
20cf0 6f 66 20 6c 6f 63 6b 73 20 69 6e 20 61 54 61 62  of locks in aTab
20d00 6c 65 4c 6f 63 6b 20 2a 2f 0a 20 20 54 61 62 6c  leLock */.  Tabl
20d10 65 4c 6f 63 6b 20 2a 61 54 61 62 6c 65 4c 6f 63  eLock *aTableLoc
20d20 6b 3b 20 2f 2a 20 52 65 71 75 69 72 65 64 20 74  k; /* Required t
20d30 61 62 6c 65 20 6c 6f 63 6b 73 20 66 6f 72 20 73  able locks for s
20d40 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65  hared-cache mode
20d50 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 41 75 74   */.#endif.  Aut
20d60 6f 69 6e 63 49 6e 66 6f 20 2a 70 41 69 6e 63 3b  oincInfo *pAinc;
20d70 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e    /* Information
20d80 20 61 62 6f 75 74 20 41 55 54 4f 49 4e 43 52 45   about AUTOINCRE
20d90 4d 45 4e 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f  MENT counters */
20da0 0a 20 20 50 61 72 73 65 20 2a 70 54 6f 70 6c 65  .  Parse *pTople
20db0 76 65 6c 3b 20 20 20 20 2f 2a 20 50 61 72 73 65  vel;    /* Parse
20dc0 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 20 6d   structure for m
20dd0 61 69 6e 20 70 72 6f 67 72 61 6d 20 28 6f 72 20  ain program (or 
20de0 4e 55 4c 4c 29 20 2a 2f 0a 20 20 54 61 62 6c 65  NULL) */.  Table
20df0 20 2a 70 54 72 69 67 67 65 72 54 61 62 3b 20 20   *pTriggerTab;  
20e00 2f 2a 20 54 61 62 6c 65 20 74 72 69 67 67 65 72  /* Table trigger
20e10 73 20 61 72 65 20 62 65 69 6e 67 20 63 6f 64 65  s are being code
20e20 64 20 66 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 61  d for */.  int a
20e30 64 64 72 43 72 54 61 62 3b 20 20 20 20 20 20 20  ddrCrTab;       
20e40 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20 4f 50  /* Address of OP
20e50 5f 43 72 65 61 74 65 42 74 72 65 65 20 6f 70 63  _CreateBtree opc
20e60 6f 64 65 20 6f 6e 20 43 52 45 41 54 45 20 54 41  ode on CREATE TA
20e70 42 4c 45 20 2a 2f 0a 20 20 75 33 32 20 6e 51 75  BLE */.  u32 nQu
20e80 65 72 79 4c 6f 6f 70 3b 20 20 20 20 20 20 2f 2a  eryLoop;      /*
20e90 20 45 73 74 20 6e 75 6d 62 65 72 20 6f 66 20 69   Est number of i
20ea0 74 65 72 61 74 69 6f 6e 73 20 6f 66 20 61 20 71  terations of a q
20eb0 75 65 72 79 20 28 31 30 2a 6c 6f 67 32 28 4e 29  uery (10*log2(N)
20ec0 29 20 2a 2f 0a 20 20 75 33 32 20 6f 6c 64 6d 61  ) */.  u32 oldma
20ed0 73 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d  sk;         /* M
20ee0 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c  ask of old.* col
20ef0 75 6d 6e 73 20 72 65 66 65 72 65 6e 63 65 64 20  umns referenced 
20f00 2a 2f 0a 20 20 75 33 32 20 6e 65 77 6d 61 73 6b  */.  u32 newmask
20f10 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73  ;         /* Mas
20f20 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d  k of new.* colum
20f30 6e 73 20 72 65 66 65 72 65 6e 63 65 64 20 2a 2f  ns referenced */
20f40 0a 20 20 75 38 20 65 54 72 69 67 67 65 72 4f 70  .  u8 eTriggerOp
20f50 3b 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 55 50  ;       /* TK_UP
20f60 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20  DATE, TK_INSERT 
20f70 6f 72 20 54 4b 5f 44 45 4c 45 54 45 20 2a 2f 0a  or TK_DELETE */.
20f80 20 20 75 38 20 65 4f 72 63 6f 6e 66 3b 20 20 20    u8 eOrconf;   
20f90 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c         /* Defaul
20fa0 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f  t ON CONFLICT po
20fb0 6c 69 63 79 20 66 6f 72 20 74 72 69 67 67 65 72  licy for trigger
20fc0 20 73 74 65 70 73 20 2a 2f 0a 20 20 75 38 20 64   steps */.  u8 d
20fd0 69 73 61 62 6c 65 54 72 69 67 67 65 72 73 3b 20  isableTriggers; 
20fe0 20 2f 2a 20 54 72 75 65 20 74 6f 20 64 69 73 61   /* True to disa
20ff0 62 6c 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a  ble triggers */.
21000 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .  /************
21010 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21020 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21030 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21040 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20  **************. 
21050 20 2a 2a 20 46 69 65 6c 64 73 20 61 62 6f 76 65   ** Fields above
21060 20 6d 75 73 74 20 62 65 20 69 6e 69 74 69 61 6c   must be initial
21070 69 7a 65 64 20 74 6f 20 7a 65 72 6f 2e 20 20 54  ized to zero.  T
21080 68 65 20 66 69 65 6c 64 73 20 74 68 61 74 20 66  he fields that f
21090 6f 6c 6c 6f 77 2c 0a 20 20 2a 2a 20 64 6f 77 6e  ollow,.  ** down
210a0 20 74 6f 20 74 68 65 20 62 65 67 69 6e 6e 69 6e   to the beginnin
210b0 67 20 6f 66 20 74 68 65 20 72 65 63 75 72 73 69  g of the recursi
210c0 76 65 20 73 65 63 74 69 6f 6e 2c 20 64 6f 20 6e  ve section, do n
210d0 6f 74 20 6e 65 65 64 20 74 6f 20 62 65 0a 20 20  ot need to be.  
210e0 2a 2a 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 61  ** initialized a
210f0 73 20 74 68 65 79 20 77 69 6c 6c 20 62 65 20 73  s they will be s
21100 65 74 20 62 65 66 6f 72 65 20 62 65 69 6e 67 20  et before being 
21110 75 73 65 64 2e 20 20 54 68 65 20 62 6f 75 6e 64  used.  The bound
21120 61 72 79 20 69 73 0a 20 20 2a 2a 20 64 65 74 65  ary is.  ** dete
21130 72 6d 69 6e 65 64 20 62 79 20 6f 66 66 73 65 74  rmined by offset
21140 6f 66 28 50 61 72 73 65 2c 61 54 65 6d 70 52 65  of(Parse,aTempRe
21150 67 29 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  g)..  **********
21160 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21170 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21180 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21190 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
211a0 2f 0a 0a 20 20 69 6e 74 20 61 54 65 6d 70 52 65  /..  int aTempRe
211b0 67 5b 38 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20  g[8];        /* 
211c0 48 6f 6c 64 69 6e 67 20 61 72 65 61 20 66 6f 72  Holding area for
211d0 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73   temporary regis
211e0 74 65 72 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20  ters */.  Token 
211f0 73 4e 61 6d 65 54 6f 6b 65 6e 3b 20 20 20 20 20  sNameToken;     
21200 20 20 2f 2a 20 54 6f 6b 65 6e 20 77 69 74 68 20    /* Token with 
21210 75 6e 71 75 61 6c 69 66 69 65 64 20 73 63 68 65  unqualified sche
21220 6d 61 20 6f 62 6a 65 63 74 20 6e 61 6d 65 20 2a  ma object name *
21230 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /..  /**********
21240 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21250 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21260 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21270 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20  **************. 
21280 20 2a 2a 20 41 62 6f 76 65 20 69 73 20 63 6f 6e   ** Above is con
21290 73 74 61 6e 74 20 62 65 74 77 65 65 6e 20 72 65  stant between re
212a0 63 75 72 73 69 6f 6e 73 2e 20 20 42 65 6c 6f 77  cursions.  Below
212b0 20 69 73 20 72 65 73 65 74 20 62 65 66 6f 72 65   is reset before
212c0 20 61 6e 64 20 61 66 74 65 72 0a 20 20 2a 2a 20   and after.  ** 
212d0 65 61 63 68 20 72 65 63 75 72 73 69 6f 6e 2e 20  each recursion. 
212e0 20 54 68 65 20 62 6f 75 6e 64 61 72 79 20 62 65   The boundary be
212f0 74 77 65 65 6e 20 74 68 65 73 65 20 74 77 6f 20  tween these two 
21300 72 65 67 69 6f 6e 73 20 69 73 20 64 65 74 65 72  regions is deter
21310 6d 69 6e 65 64 0a 20 20 2a 2a 20 75 73 69 6e 67  mined.  ** using
21320 20 6f 66 66 73 65 74 6f 66 28 50 61 72 73 65 2c   offsetof(Parse,
21330 73 4c 61 73 74 54 6f 6b 65 6e 29 20 73 6f 20 74  sLastToken) so t
21340 68 65 20 73 4c 61 73 74 54 6f 6b 65 6e 20 66 69  he sLastToken fi
21350 65 6c 64 20 6d 75 73 74 20 62 65 20 74 68 65 0a  eld must be the.
21360 20 20 2a 2a 20 66 69 72 73 74 20 66 69 65 6c 64    ** first field
21370 20 69 6e 20 74 68 65 20 72 65 63 75 72 73 69 76   in the recursiv
21380 65 20 72 65 67 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a  e region..  ****
21390 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
213a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
213b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
213c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
213d0 2a 2a 2a 2a 2f 0a 0a 20 20 54 6f 6b 65 6e 20 73  ****/..  Token s
213e0 4c 61 73 74 54 6f 6b 65 6e 3b 20 20 20 20 20 20  LastToken;      
213f0 20 2f 2a 20 54 68 65 20 6c 61 73 74 20 74 6f 6b   /* The last tok
21400 65 6e 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 79  en parsed */.  y
21410 6e 56 61 72 20 6e 56 61 72 3b 20 20 20 20 20 20  nVar nVar;      
21420 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
21430 65 72 20 6f 66 20 27 3f 27 20 76 61 72 69 61 62  er of '?' variab
21440 6c 65 73 20 73 65 65 6e 20 69 6e 20 74 68 65 20  les seen in the 
21450 53 51 4c 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20  SQL so far */.  
21460 75 38 20 69 50 6b 53 6f 72 74 4f 72 64 65 72 3b  u8 iPkSortOrder;
21470 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 53 43            /* ASC
21480 20 6f 72 20 44 45 53 43 20 66 6f 72 20 49 4e 54   or DESC for INT
21490 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
214a0 20 2a 2f 0a 20 20 75 38 20 65 78 70 6c 61 69 6e   */.  u8 explain
214b0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
214c0 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 20 45  /* True if the E
214d0 58 50 4c 41 49 4e 20 66 6c 61 67 20 69 73 20 66  XPLAIN flag is f
214e0 6f 75 6e 64 20 6f 6e 20 74 68 65 20 71 75 65 72  ound on the quer
214f0 79 20 2a 2f 0a 23 69 66 20 21 28 64 65 66 69 6e  y */.#if !(defin
21500 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ed(SQLITE_OMIT_V
21510 49 52 54 55 41 4c 54 41 42 4c 45 29 20 26 26 20  IRTUALTABLE) && 
21520 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
21530 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c 45 29 29  MIT_ALTERTABLE))
21540 0a 20 20 75 38 20 65 50 61 72 73 65 4d 6f 64 65  .  u8 eParseMode
21550 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
21560 50 41 52 53 45 5f 4d 4f 44 45 5f 58 58 58 20 63  PARSE_MODE_XXX c
21570 6f 6e 73 74 61 6e 74 20 2a 2f 0a 23 65 6e 64 69  onstant */.#endi
21580 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
21590 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
215a0 4c 45 0a 20 20 69 6e 74 20 6e 56 74 61 62 4c 6f  LE.  int nVtabLo
215b0 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ck;            /
215c0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 76 69 72 74  * Number of virt
215d0 75 61 6c 20 74 61 62 6c 65 73 20 74 6f 20 6c 6f  ual tables to lo
215e0 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69  ck */.#endif.  i
215f0 6e 74 20 6e 48 65 69 67 68 74 3b 20 20 20 20 20  nt nHeight;     
21600 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70 72           /* Expr
21610 65 73 73 69 6f 6e 20 74 72 65 65 20 68 65 69 67  ession tree heig
21620 68 74 20 6f 66 20 63 75 72 72 65 6e 74 20 73 75  ht of current su
21630 62 2d 73 65 6c 65 63 74 20 2a 2f 0a 23 69 66 6e  b-select */.#ifn
21640 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
21650 45 58 50 4c 41 49 4e 0a 20 20 69 6e 74 20 61 64  EXPLAIN.  int ad
21660 64 72 45 78 70 6c 61 69 6e 3b 20 20 20 20 20 20  drExplain;      
21670 20 20 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f      /* Address o
21680 66 20 63 75 72 72 65 6e 74 20 4f 50 5f 45 78 70  f current OP_Exp
21690 6c 61 69 6e 20 6f 70 63 6f 64 65 20 2a 2f 0a 23  lain opcode */.#
216a0 65 6e 64 69 66 0a 20 20 56 4c 69 73 74 20 2a 70  endif.  VList *p
216b0 56 4c 69 73 74 3b 20 20 20 20 20 20 20 20 20 20  VList;          
216c0 20 20 2f 2a 20 4d 61 70 70 69 6e 67 20 62 65 74    /* Mapping bet
216d0 77 65 65 6e 20 76 61 72 69 61 62 6c 65 20 6e 61  ween variable na
216e0 6d 65 73 20 61 6e 64 20 6e 75 6d 62 65 72 73 20  mes and numbers 
216f0 2a 2f 0a 20 20 56 64 62 65 20 2a 70 52 65 70 72  */.  Vdbe *pRepr
21700 65 70 61 72 65 3b 20 20 20 20 20 20 20 20 20 2f  epare;         /
21710 2a 20 56 4d 20 62 65 69 6e 67 20 72 65 70 72 65  * VM being repre
21720 70 61 72 65 64 20 28 73 71 6c 69 74 65 33 52 65  pared (sqlite3Re
21730 70 72 65 70 61 72 65 28 29 29 20 2a 2f 0a 20 20  prepare()) */.  
21740 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 69  const char *zTai
21750 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c  l;        /* All
21760 20 53 51 4c 20 74 65 78 74 20 70 61 73 74 20 74   SQL text past t
21770 68 65 20 6c 61 73 74 20 73 65 6d 69 63 6f 6c 6f  he last semicolo
21780 6e 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 54 61  n parsed */.  Ta
21790 62 6c 65 20 2a 70 4e 65 77 54 61 62 6c 65 3b 20  ble *pNewTable; 
217a0 20 20 20 20 20 20 20 20 2f 2a 20 41 20 74 61 62          /* A tab
217b0 6c 65 20 62 65 69 6e 67 20 63 6f 6e 73 74 72 75  le being constru
217c0 63 74 65 64 20 62 79 20 43 52 45 41 54 45 20 54  cted by CREATE T
217d0 41 42 4c 45 20 2a 2f 0a 20 20 49 6e 64 65 78 20  ABLE */.  Index 
217e0 2a 70 4e 65 77 49 6e 64 65 78 3b 20 20 20 20 20  *pNewIndex;     
217f0 20 20 20 20 2f 2a 20 41 6e 20 69 6e 64 65 78 20      /* An index 
21800 62 65 69 6e 67 20 63 6f 6e 73 74 72 75 63 74 65  being constructe
21810 64 20 62 79 20 43 52 45 41 54 45 20 49 4e 44 45  d by CREATE INDE
21820 58 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a  X */.  Trigger *
21830 70 4e 65 77 54 72 69 67 67 65 72 3b 20 20 20 20  pNewTrigger;    
21840 20 2f 2a 20 54 72 69 67 67 65 72 20 75 6e 64 65   /* Trigger unde
21850 72 20 63 6f 6e 73 74 72 75 63 74 20 62 79 20 61  r construct by a
21860 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20   CREATE TRIGGER 
21870 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
21880 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20 2f  *zAuthContext; /
21890 2a 20 54 68 65 20 36 74 68 20 70 61 72 61 6d 65  * The 6th parame
218a0 74 65 72 20 74 6f 20 64 62 2d 3e 78 41 75 74 68  ter to db->xAuth
218b0 20 63 61 6c 6c 62 61 63 6b 73 20 2a 2f 0a 23 69   callbacks */.#i
218c0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
218d0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
218e0 20 54 6f 6b 65 6e 20 73 41 72 67 3b 20 20 20 20   Token sArg;    
218f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
21900 6d 70 6c 65 74 65 20 74 65 78 74 20 6f 66 20 61  mplete text of a
21910 20 6d 6f 64 75 6c 65 20 61 72 67 75 6d 65 6e 74   module argument
21920 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 2a 61 70   */.  Table **ap
21930 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20  VtabLock;       
21940 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 76 69  /* Pointer to vi
21950 72 74 75 61 6c 20 74 61 62 6c 65 73 20 6e 65 65  rtual tables nee
21960 64 69 6e 67 20 6c 6f 63 6b 69 6e 67 20 2a 2f 0a  ding locking */.
21970 23 65 6e 64 69 66 0a 20 20 54 61 62 6c 65 20 2a  #endif.  Table *
21980 70 5a 6f 6d 62 69 65 54 61 62 3b 20 20 20 20 20  pZombieTab;     
21990 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 54 61     /* List of Ta
219a0 62 6c 65 20 6f 62 6a 65 63 74 73 20 74 6f 20 64  ble objects to d
219b0 65 6c 65 74 65 20 61 66 74 65 72 20 63 6f 64 65  elete after code
219c0 20 67 65 6e 20 2a 2f 0a 20 20 54 72 69 67 67 65   gen */.  Trigge
219d0 72 50 72 67 20 2a 70 54 72 69 67 67 65 72 50 72  rPrg *pTriggerPr
219e0 67 3b 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69  g;  /* Linked li
219f0 73 74 20 6f 66 20 63 6f 64 65 64 20 74 72 69 67  st of coded trig
21a00 67 65 72 73 20 2a 2f 0a 20 20 57 69 74 68 20 2a  gers */.  With *
21a10 70 57 69 74 68 3b 20 20 20 20 20 20 20 20 20 20  pWith;          
21a20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 57      /* Current W
21a30 49 54 48 20 63 6c 61 75 73 65 2c 20 6f 72 20 4e  ITH clause, or N
21a40 55 4c 4c 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70  ULL */.  With *p
21a50 57 69 74 68 54 6f 46 72 65 65 3b 20 20 20 20 20  WithToFree;     
21a60 20 20 20 2f 2a 20 46 72 65 65 20 74 68 69 73 20     /* Free this 
21a70 57 49 54 48 20 6f 62 6a 65 63 74 20 61 74 20 74  WITH object at t
21a80 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 70 61  he end of the pa
21a90 72 73 65 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  rse */.#ifndef S
21aa0 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52  QLITE_OMIT_ALTER
21ab0 54 41 42 4c 45 0a 20 20 52 65 6e 61 6d 65 54 6f  TABLE.  RenameTo
21ac0 6b 65 6e 20 2a 70 52 65 6e 61 6d 65 3b 20 20 20  ken *pRename;   
21ad0 20 20 2f 2a 20 54 6f 6b 65 6e 73 20 73 75 62 6a    /* Tokens subj
21ae0 65 63 74 20 74 6f 20 72 65 6e 61 6d 69 6e 67 20  ect to renaming 
21af0 62 79 20 41 4c 54 45 52 20 54 41 42 4c 45 20 2a  by ALTER TABLE *
21b00 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 23 64 65  /.#endif.};..#de
21b10 66 69 6e 65 20 50 41 52 53 45 5f 4d 4f 44 45 5f  fine PARSE_MODE_
21b20 4e 4f 52 4d 41 4c 20 20 20 20 20 20 20 20 30 0a  NORMAL        0.
21b30 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f 4d 4f  #define PARSE_MO
21b40 44 45 5f 44 45 43 4c 41 52 45 5f 56 54 41 42 20  DE_DECLARE_VTAB 
21b50 20 31 0a 23 64 65 66 69 6e 65 20 50 41 52 53 45   1.#define PARSE
21b60 5f 4d 4f 44 45 5f 52 45 4e 41 4d 45 5f 43 4f 4c  _MODE_RENAME_COL
21b70 55 4d 4e 20 32 0a 23 64 65 66 69 6e 65 20 50 41  UMN 2.#define PA
21b80 52 53 45 5f 4d 4f 44 45 5f 52 45 4e 41 4d 45 5f  RSE_MODE_RENAME_
21b90 54 41 42 4c 45 20 20 33 0a 0a 2f 2a 0a 2a 2a 20  TABLE  3../*.** 
21ba0 53 69 7a 65 73 20 61 6e 64 20 70 6f 69 6e 74 65  Sizes and pointe
21bb0 72 73 20 6f 66 20 76 61 72 69 6f 75 73 20 70 61  rs of various pa
21bc0 72 74 73 20 6f 66 20 74 68 65 20 50 61 72 73 65  rts of the Parse
21bd0 20 6f 62 6a 65 63 74 2e 0a 2a 2f 0a 23 64 65 66   object..*/.#def
21be0 69 6e 65 20 50 41 52 53 45 5f 48 44 52 5f 53 5a  ine PARSE_HDR_SZ
21bf0 20 6f 66 66 73 65 74 6f 66 28 50 61 72 73 65 2c   offsetof(Parse,
21c00 61 54 65 6d 70 52 65 67 29 20 2f 2a 20 52 65 63  aTempReg) /* Rec
21c10 75 72 73 69 76 65 20 70 61 72 74 20 77 2f 6f 20  ursive part w/o 
21c20 61 43 6f 6c 43 61 63 68 65 2a 2f 0a 23 64 65 66  aColCache*/.#def
21c30 69 6e 65 20 50 41 52 53 45 5f 52 45 43 55 52 53  ine PARSE_RECURS
21c40 45 5f 53 5a 20 6f 66 66 73 65 74 6f 66 28 50 61  E_SZ offsetof(Pa
21c50 72 73 65 2c 73 4c 61 73 74 54 6f 6b 65 6e 29 20  rse,sLastToken) 
21c60 20 20 20 2f 2a 20 52 65 63 75 72 73 69 76 65 20     /* Recursive 
21c70 70 61 72 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  part */.#define 
21c80 50 41 52 53 45 5f 54 41 49 4c 5f 53 5a 20 28 73  PARSE_TAIL_SZ (s
21c90 69 7a 65 6f 66 28 50 61 72 73 65 29 2d 50 41 52  izeof(Parse)-PAR
21ca0 53 45 5f 52 45 43 55 52 53 45 5f 53 5a 29 20 2f  SE_RECURSE_SZ) /
21cb0 2a 20 4e 6f 6e 2d 72 65 63 75 72 73 69 76 65 20  * Non-recursive 
21cc0 70 61 72 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  part */.#define 
21cd0 50 41 52 53 45 5f 54 41 49 4c 28 58 29 20 28 28  PARSE_TAIL(X) ((
21ce0 28 63 68 61 72 2a 29 28 58 29 29 2b 50 41 52 53  (char*)(X))+PARS
21cf0 45 5f 52 45 43 55 52 53 45 5f 53 5a 29 20 20 2f  E_RECURSE_SZ)  /
21d00 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 74 61 69  * Pointer to tai
21d10 6c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75  l */../*.** Retu
21d20 72 6e 20 74 72 75 65 20 69 66 20 63 75 72 72 65  rn true if curre
21d30 6e 74 6c 79 20 69 6e 73 69 64 65 20 61 6e 20 73  ntly inside an s
21d40 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76  qlite3_declare_v
21d50 74 61 62 28 29 20 63 61 6c 6c 2e 0a 2a 2f 0a 23  tab() call..*/.#
21d60 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
21d70 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
21d80 20 23 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c   #define IN_DECL
21d90 41 52 45 5f 56 54 41 42 20 30 0a 23 65 6c 73 65  ARE_VTAB 0.#else
21da0 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 44 45  .  #define IN_DE
21db0 43 4c 41 52 45 5f 56 54 41 42 20 28 70 50 61 72  CLARE_VTAB (pPar
21dc0 73 65 2d 3e 65 50 61 72 73 65 4d 6f 64 65 3d 3d  se->eParseMode==
21dd0 50 41 52 53 45 5f 4d 4f 44 45 5f 44 45 43 4c 41  PARSE_MODE_DECLA
21de0 52 45 5f 56 54 41 42 29 0a 23 65 6e 64 69 66 0a  RE_VTAB).#endif.
21df0 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
21e00 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41  ITE_OMIT_ALTERTA
21e10 42 4c 45 29 0a 20 20 23 64 65 66 69 6e 65 20 49  BLE).  #define I
21e20 4e 5f 52 45 4e 41 4d 45 5f 4f 42 4a 45 43 54 20  N_RENAME_OBJECT 
21e30 30 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  0.#else.  #defin
21e40 65 20 49 4e 5f 52 45 4e 41 4d 45 5f 4f 42 4a 45  e IN_RENAME_OBJE
21e50 43 54 20 28 70 50 61 72 73 65 2d 3e 65 50 61 72  CT (pParse->ePar
21e60 73 65 4d 6f 64 65 3e 3d 50 41 52 53 45 5f 4d 4f  seMode>=PARSE_MO
21e70 44 45 5f 52 45 4e 41 4d 45 5f 43 4f 4c 55 4d 4e  DE_RENAME_COLUMN
21e80 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 65  ).#endif..#if de
21e90 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
21ea0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29 20  T_VIRTUALTABLE) 
21eb0 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  && defined(SQLIT
21ec0 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c  E_OMIT_ALTERTABL
21ed0 45 29 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f  E).  #define IN_
21ee0 53 50 45 43 49 41 4c 5f 50 41 52 53 45 20 30 0a  SPECIAL_PARSE 0.
21ef0 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
21f00 49 4e 5f 53 50 45 43 49 41 4c 5f 50 41 52 53 45  IN_SPECIAL_PARSE
21f10 20 28 70 50 61 72 73 65 2d 3e 65 50 61 72 73 65   (pParse->eParse
21f20 4d 6f 64 65 21 3d 50 41 52 53 45 5f 4d 4f 44 45  Mode!=PARSE_MODE
21f30 5f 4e 4f 52 4d 41 4c 29 0a 23 65 6e 64 69 66 0a  _NORMAL).#endif.
21f40 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
21f50 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
21f60 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 61  ing structure ca
21f70 6e 20 62 65 20 64 65 63 6c 61 72 65 64 20 6f 6e  n be declared on
21f80 20 61 20 73 74 61 63 6b 20 61 6e 64 20 75 73 65   a stack and use
21f90 64 0a 2a 2a 20 74 6f 20 73 61 76 65 20 74 68 65  d.** to save the
21fa0 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74   Parse.zAuthCont
21fb0 65 78 74 20 76 61 6c 75 65 20 73 6f 20 74 68 61  ext value so tha
21fc0 74 20 69 74 20 63 61 6e 20 62 65 20 72 65 73 74  t it can be rest
21fd0 6f 72 65 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a 73  ored later..*/.s
21fe0 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74 65 78  truct AuthContex
21ff0 74 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  t {.  const char
22000 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20   *zAuthContext; 
22010 20 20 2f 2a 20 50 75 74 20 73 61 76 65 64 20 50    /* Put saved P
22020 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78  arse.zAuthContex
22030 74 20 68 65 72 65 20 2a 2f 0a 20 20 50 61 72 73  t here */.  Pars
22040 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20  e *pParse;      
22050 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 50          /* The P
22060 61 72 73 65 20 73 74 72 75 63 74 75 72 65 20 2a  arse structure *
22070 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 66  /.};../*.** Bitf
22080 69 65 6c 64 20 66 6c 61 67 73 20 66 6f 72 20 50  ield flags for P
22090 35 20 76 61 6c 75 65 20 69 6e 20 76 61 72 69 6f  5 value in vario
220a0 75 73 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 0a 2a  us opcodes..**.*
220b0 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69  * Value constrai
220c0 6e 74 73 20 28 65 6e 66 6f 72 63 65 64 20 76 69  nts (enforced vi
220d0 61 20 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20  a assert()):.** 
220e0 20 20 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48     OPFLAG_LENGTH
220f0 41 52 47 20 20 20 20 3d 3d 20 53 51 4c 49 54 45  ARG    == SQLITE
22100 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 0a 2a 2a 20  _FUNC_LENGTH.** 
22110 20 20 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46     OPFLAG_TYPEOF
22120 41 52 47 20 20 20 20 3d 3d 20 53 51 4c 49 54 45  ARG    == SQLITE
22130 5f 46 55 4e 43 5f 54 59 50 45 4f 46 0a 2a 2a 20  _FUNC_TYPEOF.** 
22140 20 20 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53     OPFLAG_BULKCS
22150 52 20 20 20 20 20 20 3d 3d 20 42 54 52 45 45 5f  R      == BTREE_
22160 42 55 4c 4b 4c 4f 41 44 0a 2a 2a 20 20 20 20 4f  BULKLOAD.**    O
22170 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 20 20 20  PFLAG_SEEKEQ    
22180 20 20 20 3d 3d 20 42 54 52 45 45 5f 53 45 45 4b     == BTREE_SEEK
22190 5f 45 51 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47  _EQ.**    OPFLAG
221a0 5f 46 4f 52 44 45 4c 45 54 45 20 20 20 20 3d 3d  _FORDELETE    ==
221b0 20 42 54 52 45 45 5f 46 4f 52 44 45 4c 45 54 45   BTREE_FORDELETE
221c0 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 53 41  .**    OPFLAG_SA
221d0 56 45 50 4f 53 49 54 49 4f 4e 20 3d 3d 20 42 54  VEPOSITION == BT
221e0 52 45 45 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e  REE_SAVEPOSITION
221f0 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 41 55  .**    OPFLAG_AU
22200 58 44 45 4c 45 54 45 20 20 20 20 3d 3d 20 42 54  XDELETE    == BT
22210 52 45 45 5f 41 55 58 44 45 4c 45 54 45 0a 2a 2f  REE_AUXDELETE.*/
22220 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
22230 4e 43 48 41 4e 47 45 20 20 20 20 20 20 20 30 78  NCHANGE       0x
22240 30 31 20 20 20 20 2f 2a 20 4f 50 5f 49 6e 73 65  01    /* OP_Inse
22250 72 74 3a 20 53 65 74 20 74 6f 20 75 70 64 61 74  rt: Set to updat
22260 65 20 64 62 2d 3e 6e 43 68 61 6e 67 65 20 2a 2f  e db->nChange */
22270 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22290 20 20 20 20 20 20 2f 2a 20 41 6c 73 6f 20 75 73        /* Also us
222a0 65 64 20 69 6e 20 50 32 20 28 6e 6f 74 20 50 35  ed in P2 (not P5
222b0 29 20 6f 66 20 4f 50 5f 44 65 6c 65 74 65 20 2a  ) of OP_Delete *
222c0 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
222d0 5f 4e 4f 43 48 4e 47 20 20 20 20 20 20 20 20 30  _NOCHNG        0
222e0 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 56 43 6f  x01    /* OP_VCo
222f0 6c 75 6d 6e 20 6e 6f 63 68 61 6e 67 65 20 66 6f  lumn nochange fo
22300 72 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66  r UPDATE */.#def
22310 69 6e 65 20 4f 50 46 4c 41 47 5f 45 50 48 45 4d  ine OPFLAG_EPHEM
22320 20 20 20 20 20 20 20 20 20 30 78 30 31 20 20 20           0x01   
22330 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 45   /* OP_Column: E
22340 70 68 65 6d 65 72 61 6c 20 6f 75 74 70 75 74 20  phemeral output 
22350 69 73 20 6f 6b 20 2a 2f 0a 23 64 65 66 69 6e 65  is ok */.#define
22360 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49   OPFLAG_LASTROWI
22370 44 20 20 20 20 20 30 78 32 30 20 20 20 20 2f 2a  D     0x20    /*
22380 20 53 65 74 20 74 6f 20 75 70 64 61 74 65 20 64   Set to update d
22390 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 2a 2f 0a  b->lastRowid */.
223a0 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49  #define OPFLAG_I
223b0 53 55 50 44 41 54 45 20 20 20 20 20 20 30 78 30  SUPDATE      0x0
223c0 34 20 20 20 20 2f 2a 20 54 68 69 73 20 4f 50 5f  4    /* This OP_
223d0 49 6e 73 65 72 74 20 69 73 20 61 6e 20 73 71 6c  Insert is an sql
223e0 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69   UPDATE */.#defi
223f0 6e 65 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44  ne OPFLAG_APPEND
22400 20 20 20 20 20 20 20 20 30 78 30 38 20 20 20 20          0x08    
22410 2f 2a 20 54 68 69 73 20 69 73 20 6c 69 6b 65 6c  /* This is likel
22420 79 20 74 6f 20 62 65 20 61 6e 20 61 70 70 65 6e  y to be an appen
22430 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  d */.#define OPF
22440 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c  LAG_USESEEKRESUL
22450 54 20 30 78 31 30 20 20 20 20 2f 2a 20 54 72 79  T 0x10    /* Try
22460 20 74 6f 20 61 76 6f 69 64 20 61 20 73 65 65 6b   to avoid a seek
22470 20 69 6e 20 42 74 72 65 65 49 6e 73 65 72 74 28   in BtreeInsert(
22480 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  ) */.#define OPF
22490 4c 41 47 5f 49 53 4e 4f 4f 50 20 20 20 20 20 20  LAG_ISNOOP      
224a0 20 20 30 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f    0x40    /* OP_
224b0 44 65 6c 65 74 65 20 64 6f 65 73 20 70 72 65 2d  Delete does pre-
224c0 75 70 64 61 74 65 2d 68 6f 6f 6b 20 6f 6e 6c 79  update-hook only
224d0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
224e0 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 20 20 20  AG_LENGTHARG    
224f0 20 30 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f 43   0x40    /* OP_C
22500 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20  olumn only used 
22510 66 6f 72 20 6c 65 6e 67 74 68 28 29 20 2a 2f 0a  for length() */.
22520 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 54  #define OPFLAG_T
22530 59 50 45 4f 46 41 52 47 20 20 20 20 20 30 78 38  YPEOFARG     0x8
22540 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d  0    /* OP_Colum
22550 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20  n only used for 
22560 74 79 70 65 6f 66 28 29 20 2a 2f 0a 23 64 65 66  typeof() */.#def
22570 69 6e 65 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43  ine OPFLAG_BULKC
22580 53 52 20 20 20 20 20 20 20 30 78 30 31 20 20 20  SR       0x01   
22590 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 75 73   /* OP_Open** us
225a0 65 64 20 74 6f 20 6f 70 65 6e 20 62 75 6c 6b 20  ed to open bulk 
225b0 63 75 72 73 6f 72 20 2a 2f 0a 23 64 65 66 69 6e  cursor */.#defin
225c0 65 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20  e OPFLAG_SEEKEQ 
225d0 20 20 20 20 20 20 20 30 78 30 32 20 20 20 20 2f         0x02    /
225e0 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 63 75 72 73  * OP_Open** curs
225f0 6f 72 20 75 73 65 73 20 45 51 20 73 65 65 6b 20  or uses EQ seek 
22600 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  only */.#define 
22610 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45  OPFLAG_FORDELETE
22620 20 20 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20       0x08    /* 
22630 4f 50 5f 4f 70 65 6e 20 73 68 6f 75 6c 64 20 75  OP_Open should u
22640 73 65 20 42 54 52 45 45 5f 46 4f 52 44 45 4c 45  se BTREE_FORDELE
22650 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  TE */.#define OP
22660 46 4c 41 47 5f 50 32 49 53 52 45 47 20 20 20 20  FLAG_P2ISREG    
22670 20 20 20 30 78 31 30 20 20 20 20 2f 2a 20 50 32     0x10    /* P2
22680 20 74 6f 20 4f 50 5f 4f 70 65 6e 2a 2a 20 69 73   to OP_Open** is
22690 20 61 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62   a register numb
226a0 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  er */.#define OP
226b0 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 20 20 20  FLAG_PERMUTE    
226c0 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50     0x01    /* OP
226d0 5f 43 6f 6d 70 61 72 65 3a 20 75 73 65 20 74 68  _Compare: use th
226e0 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 2a 2f  e permutation */
226f0 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
22700 53 41 56 45 50 4f 53 49 54 49 4f 4e 20 20 30 78  SAVEPOSITION  0x
22710 30 32 20 20 20 20 2f 2a 20 4f 50 5f 44 65 6c 65  02    /* OP_Dele
22720 74 65 2f 49 6e 73 65 72 74 3a 20 73 61 76 65 20  te/Insert: save 
22730 63 75 72 73 6f 72 20 70 6f 73 20 2a 2f 0a 23 64  cursor pos */.#d
22740 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 41 55 58  efine OPFLAG_AUX
22750 44 45 4c 45 54 45 20 20 20 20 20 30 78 30 34 20  DELETE     0x04 
22760 20 20 20 2f 2a 20 4f 50 5f 44 65 6c 65 74 65 3a     /* OP_Delete:
22770 20 69 6e 64 65 78 20 69 6e 20 61 20 44 45 4c 45   index in a DELE
22780 54 45 20 6f 70 20 2a 2f 0a 23 64 65 66 69 6e 65  TE op */.#define
22790 20 4f 50 46 4c 41 47 5f 4e 4f 43 48 4e 47 5f 4d   OPFLAG_NOCHNG_M
227a0 41 47 49 43 20 20 30 78 36 64 20 20 20 20 2f 2a  AGIC  0x6d    /*
227b0 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 3a 20   OP_MakeRecord: 
227c0 73 65 72 69 61 6c 74 79 70 65 20 31 30 20 69 73  serialtype 10 is
227d0 20 6f 6b 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20 45 61   ok */../*. * Ea
227e0 63 68 20 74 72 69 67 67 65 72 20 70 72 65 73 65  ch trigger prese
227f0 6e 74 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  nt in the databa
22800 73 65 20 73 63 68 65 6d 61 20 69 73 20 73 74 6f  se schema is sto
22810 72 65 64 20 61 73 20 61 6e 20 69 6e 73 74 61 6e  red as an instan
22820 63 65 20 6f 66 0a 20 2a 20 73 74 72 75 63 74 20  ce of. * struct 
22830 54 72 69 67 67 65 72 2e 0a 20 2a 0a 20 2a 20 50  Trigger.. *. * P
22840 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e 73 74 61  ointers to insta
22850 6e 63 65 73 20 6f 66 20 73 74 72 75 63 74 20 54  nces of struct T
22860 72 69 67 67 65 72 20 61 72 65 20 73 74 6f 72 65  rigger are store
22870 64 20 69 6e 20 74 77 6f 20 77 61 79 73 2e 0a 20  d in two ways.. 
22880 2a 20 31 2e 20 49 6e 20 74 68 65 20 22 74 72 69  * 1. In the "tri
22890 67 48 61 73 68 22 20 68 61 73 68 20 74 61 62 6c  gHash" hash tabl
228a0 65 20 28 70 61 72 74 20 6f 66 20 74 68 65 20 73  e (part of the s
228b0 71 6c 69 74 65 33 2a 20 74 68 61 74 20 72 65 70  qlite3* that rep
228c0 72 65 73 65 6e 74 73 20 74 68 65 0a 20 2a 20 20  resents the. *  
228d0 20 20 64 61 74 61 62 61 73 65 29 2e 20 54 68 69    database). Thi
228e0 73 20 61 6c 6c 6f 77 73 20 54 72 69 67 67 65 72  s allows Trigger
228f0 20 73 74 72 75 63 74 75 72 65 73 20 74 6f 20 62   structures to b
22900 65 20 72 65 74 72 69 65 76 65 64 20 62 79 20 6e  e retrieved by n
22910 61 6d 65 2e 0a 20 2a 20 32 2e 20 41 6c 6c 20 74  ame.. * 2. All t
22920 72 69 67 67 65 72 73 20 61 73 73 6f 63 69 61 74  riggers associat
22930 65 64 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65  ed with a single
22940 20 74 61 62 6c 65 20 66 6f 72 6d 20 61 20 6c 69   table form a li
22950 6e 6b 65 64 20 6c 69 73 74 2c 20 75 73 69 6e 67  nked list, using
22960 20 74 68 65 0a 20 2a 20 20 20 20 70 4e 65 78 74   the. *    pNext
22970 20 6d 65 6d 62 65 72 20 6f 66 20 73 74 72 75 63   member of struc
22980 74 20 54 72 69 67 67 65 72 2e 20 41 20 70 6f 69  t Trigger. A poi
22990 6e 74 65 72 20 74 6f 20 74 68 65 20 66 69 72 73  nter to the firs
229a0 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65  t element of the
229b0 0a 20 2a 20 20 20 20 6c 69 6e 6b 65 64 20 6c 69  . *    linked li
229c0 73 74 20 69 73 20 73 74 6f 72 65 64 20 61 73 20  st is stored as 
229d0 74 68 65 20 22 70 54 72 69 67 67 65 72 22 20 6d  the "pTrigger" m
229e0 65 6d 62 65 72 20 6f 66 20 74 68 65 20 61 73 73  ember of the ass
229f0 6f 63 69 61 74 65 64 0a 20 2a 20 20 20 20 73 74  ociated. *    st
22a00 72 75 63 74 20 54 61 62 6c 65 2e 0a 20 2a 0a 20  ruct Table.. *. 
22a10 2a 20 54 68 65 20 22 73 74 65 70 5f 6c 69 73 74  * The "step_list
22a20 22 20 6d 65 6d 62 65 72 20 70 6f 69 6e 74 73 20  " member points 
22a30 74 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c 65  to the first ele
22a40 6d 65 6e 74 20 6f 66 20 61 20 6c 69 6e 6b 65 64  ment of a linked
22a50 20 6c 69 73 74 0a 20 2a 20 63 6f 6e 74 61 69 6e   list. * contain
22a60 69 6e 67 20 74 68 65 20 53 51 4c 20 73 74 61 74  ing the SQL stat
22a70 65 6d 65 6e 74 73 20 73 70 65 63 69 66 69 65 64  ements specified
22a80 20 61 73 20 74 68 65 20 74 72 69 67 67 65 72 20   as the trigger 
22a90 70 72 6f 67 72 61 6d 2e 0a 20 2a 2f 0a 73 74 72  program.. */.str
22aa0 75 63 74 20 54 72 69 67 67 65 72 20 7b 0a 20 20  uct Trigger {.  
22ab0 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
22ac0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e          /* The n
22ad0 61 6d 65 20 6f 66 20 74 68 65 20 74 72 69 67 67  ame of the trigg
22ae0 65 72 20 20 20 20 20 20 20 20 20 20 20 20 20 20  er              
22af0 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 63            */.  c
22b00 68 61 72 20 2a 74 61 62 6c 65 3b 20 20 20 20 20  har *table;     
22b10 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74 61         /* The ta
22b20 62 6c 65 20 6f 72 20 76 69 65 77 20 74 6f 20 77  ble or view to w
22b30 68 69 63 68 20 74 68 65 20 74 72 69 67 67 65 72  hich the trigger
22b40 20 61 70 70 6c 69 65 73 20 2a 2f 0a 20 20 75 38   applies */.  u8
22b50 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20   op;            
22b60 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20        /* One of 
22b70 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50  TK_DELETE, TK_UP
22b80 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20  DATE, TK_INSERT 
22b90 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 75 38 20          */.  u8 
22ba0 74 72 5f 74 6d 3b 20 20 20 20 20 20 20 20 20 20  tr_tm;          
22bb0 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54       /* One of T
22bc0 52 49 47 47 45 52 5f 42 45 46 4f 52 45 2c 20 54  RIGGER_BEFORE, T
22bd0 52 49 47 47 45 52 5f 41 46 54 45 52 20 2a 2f 0a  RIGGER_AFTER */.
22be0 20 20 45 78 70 72 20 2a 70 57 68 65 6e 3b 20 20    Expr *pWhen;  
22bf0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
22c00 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20   WHEN clause of 
22c10 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 28  the expression (
22c20 6d 61 79 20 62 65 20 4e 55 4c 4c 29 20 2a 2f 0a  may be NULL) */.
22c30 20 20 49 64 4c 69 73 74 20 2a 70 43 6f 6c 75 6d    IdList *pColum
22c40 6e 73 3b 20 20 20 20 20 20 20 2f 2a 20 49 66 20  ns;       /* If 
22c50 74 68 69 73 20 69 73 20 61 6e 20 55 50 44 41 54  this is an UPDAT
22c60 45 20 4f 46 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73  E OF <column-lis
22c70 74 3e 20 74 72 69 67 67 65 72 2c 0a 20 20 20 20  t> trigger,.    
22c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22c90 20 20 20 20 20 20 20 20 20 74 68 65 20 3c 63 6f           the <co
22ca0 6c 75 6d 6e 2d 6c 69 73 74 3e 20 69 73 20 73 74  lumn-list> is st
22cb0 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 53  ored here */.  S
22cc0 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20  chema *pSchema; 
22cd0 20 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61         /* Schema
22ce0 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
22cf0 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 53 63 68  trigger */.  Sch
22d00 65 6d 61 20 2a 70 54 61 62 53 63 68 65 6d 61 3b  ema *pTabSchema;
22d10 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63       /* Schema c
22d20 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 61  ontaining the ta
22d30 62 6c 65 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  ble */.  Trigger
22d40 53 74 65 70 20 2a 73 74 65 70 5f 6c 69 73 74 3b  Step *step_list;
22d50 20 2f 2a 20 4c 69 6e 6b 20 6c 69 73 74 20 6f 66   /* Link list of
22d60 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
22d70 20 73 74 65 70 73 20 20 20 20 20 20 20 20 20 20   steps          
22d80 20 20 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20     */.  Trigger 
22d90 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20  *pNext;         
22da0 2f 2a 20 4e 65 78 74 20 74 72 69 67 67 65 72 20  /* Next trigger 
22db0 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
22dc0 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 7d 3b 0a  the table */.};.
22dd0 0a 2f 2a 0a 2a 2a 20 41 20 74 72 69 67 67 65 72  ./*.** A trigger
22de0 20 69 73 20 65 69 74 68 65 72 20 61 20 42 45 46   is either a BEF
22df0 4f 52 45 20 6f 72 20 61 6e 20 41 46 54 45 52 20  ORE or an AFTER 
22e00 74 72 69 67 67 65 72 2e 20 20 54 68 65 20 66 6f  trigger.  The fo
22e10 6c 6c 6f 77 69 6e 67 20 63 6f 6e 73 74 61 6e 74  llowing constant
22e20 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e 65 20 77  s.** determine w
22e30 68 69 63 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  hich..**.** If t
22e40 68 65 72 65 20 61 72 65 20 6d 75 6c 74 69 70 6c  here are multipl
22e50 65 20 74 72 69 67 67 65 72 73 2c 20 79 6f 75 20  e triggers, you 
22e60 6d 69 67 68 74 20 6f 66 20 73 6f 6d 65 20 42 45  might of some BE
22e70 46 4f 52 45 20 61 6e 64 20 73 6f 6d 65 20 41 46  FORE and some AF
22e80 54 45 52 2e 0a 2a 2a 20 49 6e 20 74 68 61 74 20  TER..** In that 
22e90 63 61 73 65 73 2c 20 74 68 65 20 63 6f 6e 73 74  cases, the const
22ea0 61 6e 74 73 20 62 65 6c 6f 77 20 63 61 6e 20 62  ants below can b
22eb0 65 20 4f 52 65 64 20 74 6f 67 65 74 68 65 72 2e  e ORed together.
22ec0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 52 49 47  .*/.#define TRIG
22ed0 47 45 52 5f 42 45 46 4f 52 45 20 20 31 0a 23 64  GER_BEFORE  1.#d
22ee0 65 66 69 6e 65 20 54 52 49 47 47 45 52 5f 41 46  efine TRIGGER_AF
22ef0 54 45 52 20 20 20 32 0a 0a 2f 2a 0a 20 2a 20 41  TER   2../*. * A
22f00 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 73 74  n instance of st
22f10 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70  ruct TriggerStep
22f20 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72   is used to stor
22f30 65 20 61 20 73 69 6e 67 6c 65 20 53 51 4c 20 73  e a single SQL s
22f40 74 61 74 65 6d 65 6e 74 0a 20 2a 20 74 68 61 74  tatement. * that
22f50 20 69 73 20 61 20 70 61 72 74 20 6f 66 20 61 20   is a part of a 
22f60 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e  trigger-program.
22f70 0a 20 2a 0a 20 2a 20 49 6e 73 74 61 6e 63 65 73  . *. * Instances
22f80 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67   of struct Trigg
22f90 65 72 53 74 65 70 20 61 72 65 20 73 74 6f 72 65  erStep are store
22fa0 64 20 69 6e 20 61 20 73 69 6e 67 6c 79 20 6c 69  d in a singly li
22fb0 6e 6b 65 64 20 6c 69 73 74 20 28 6c 69 6e 6b 65  nked list (linke
22fc0 64 0a 20 2a 20 75 73 69 6e 67 20 74 68 65 20 22  d. * using the "
22fd0 70 4e 65 78 74 22 20 6d 65 6d 62 65 72 29 20 72  pNext" member) r
22fe0 65 66 65 72 65 6e 63 65 64 20 62 79 20 74 68 65  eferenced by the
22ff0 20 22 73 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d   "step_list" mem
23000 62 65 72 20 6f 66 20 74 68 65 0a 20 2a 20 61 73  ber of the. * as
23010 73 6f 63 69 61 74 65 64 20 73 74 72 75 63 74 20  sociated struct 
23020 54 72 69 67 67 65 72 20 69 6e 73 74 61 6e 63 65  Trigger instance
23030 2e 20 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d  . The first elem
23040 65 6e 74 20 6f 66 20 74 68 65 20 6c 69 6e 6b 65  ent of the linke
23050 64 20 6c 69 73 74 20 69 73 0a 20 2a 20 74 68 65  d list is. * the
23060 20 66 69 72 73 74 20 73 74 65 70 20 6f 66 20 74   first step of t
23070 68 65 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72  he trigger-progr
23080 61 6d 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22 6f  am.. *. * The "o
23090 70 22 20 6d 65 6d 62 65 72 20 69 6e 64 69 63 61  p" member indica
230a0 74 65 73 20 77 68 65 74 68 65 72 20 74 68 69 73  tes whether this
230b0 20 69 73 20 61 20 22 44 45 4c 45 54 45 22 2c 20   is a "DELETE", 
230c0 22 49 4e 53 45 52 54 22 2c 20 22 55 50 44 41 54  "INSERT", "UPDAT
230d0 45 22 20 6f 72 0a 20 2a 20 22 53 45 4c 45 43 54  E" or. * "SELECT
230e0 22 20 73 74 61 74 65 6d 65 6e 74 2e 20 54 68 65  " statement. The
230f0 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 74 68 65   meanings of the
23100 20 6f 74 68 65 72 20 6d 65 6d 62 65 72 73 20 69   other members i
23110 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20  s determined by 
23120 74 68 65 0a 20 2a 20 76 61 6c 75 65 20 6f 66 20  the. * value of 
23130 22 6f 70 22 20 61 73 20 66 6f 6c 6c 6f 77 73 3a  "op" as follows:
23140 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b  . *. * (op == TK
23150 5f 49 4e 53 45 52 54 29 0a 20 2a 20 6f 72 63 6f  _INSERT). * orco
23160 6e 66 20 20 20 20 2d 3e 20 73 74 6f 72 65 73 20  nf    -> stores 
23170 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  the ON CONFLICT 
23180 61 6c 67 6f 72 69 74 68 6d 0a 20 2a 20 70 53 65  algorithm. * pSe
23190 6c 65 63 74 20 20 20 2d 3e 20 49 66 20 74 68 69  lect   -> If thi
231a0 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49  s is an INSERT I
231b0 4e 54 4f 20 2e 2e 2e 20 53 45 4c 45 43 54 20 2e  NTO ... SELECT .
231c0 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68  .. statement, th
231d0 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  en. *           
231e0 20 20 20 74 68 69 73 20 73 74 6f 72 65 73 20 61     this stores a
231f0 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
23200 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
23210 2e 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c  . Otherwise NULL
23220 2e 0a 20 2a 20 7a 54 61 72 67 65 74 20 20 20 2d  .. * zTarget   -
23230 3e 20 44 65 71 75 6f 74 65 64 20 6e 61 6d 65 20  > Dequoted name 
23240 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20  of the table to 
23250 69 6e 73 65 72 74 20 69 6e 74 6f 2e 0a 20 2a 20  insert into.. * 
23260 70 45 78 70 72 4c 69 73 74 20 2d 3e 20 49 66 20  pExprList -> If 
23270 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52  this is an INSER
23280 54 20 49 4e 54 4f 20 2e 2e 2e 20 56 41 4c 55 45  T INTO ... VALUE
23290 53 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c  S ... statement,
232a0 20 74 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20   then. *        
232b0 20 20 20 20 20 20 74 68 69 73 20 73 74 6f 72 65        this store
232c0 73 20 76 61 6c 75 65 73 20 74 6f 20 62 65 20 69  s values to be i
232d0 6e 73 65 72 74 65 64 2e 20 4f 74 68 65 72 77 69  nserted. Otherwi
232e0 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 49 64 4c  se NULL.. * pIdL
232f0 69 73 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73  ist   -> If this
23300 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e   is an INSERT IN
23310 54 4f 20 2e 2e 2e 20 28 3c 63 6f 6c 75 6d 6e 2d  TO ... (<column-
23320 6e 61 6d 65 73 3e 29 20 56 41 4c 55 45 53 20 2e  names>) VALUES .
23330 2e 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  ... *           
23340 20 20 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68     statement, th
23350 65 6e 20 74 68 69 73 20 73 74 6f 72 65 73 20 74  en this stores t
23360 68 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 20  he column-names 
23370 74 6f 20 62 65 0a 20 2a 20 20 20 20 20 20 20 20  to be. *        
23380 20 20 20 20 20 20 69 6e 73 65 72 74 65 64 20 69        inserted i
23390 6e 74 6f 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d  nto.. *. * (op =
233a0 3d 20 54 4b 5f 44 45 4c 45 54 45 29 0a 20 2a 20  = TK_DELETE). * 
233b0 7a 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65 71  zTarget   -> Deq
233c0 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68  uoted name of th
233d0 65 20 74 61 62 6c 65 20 74 6f 20 64 65 6c 65 74  e table to delet
233e0 65 20 66 72 6f 6d 2e 0a 20 2a 20 70 57 68 65 72  e from.. * pWher
233f0 65 20 20 20 20 2d 3e 20 54 68 65 20 57 48 45 52  e    -> The WHER
23400 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20  E clause of the 
23410 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74  DELETE statement
23420 20 69 66 20 6f 6e 65 20 69 73 20 73 70 65 63 69   if one is speci
23430 66 69 65 64 2e 0a 20 2a 20 20 20 20 20 20 20 20  fied.. *        
23440 20 20 20 20 20 20 4f 74 68 65 72 77 69 73 65 20        Otherwise 
23450 4e 55 4c 4c 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20  NULL.. *. * (op 
23460 3d 3d 20 54 4b 5f 55 50 44 41 54 45 29 0a 20 2a  == TK_UPDATE). *
23470 20 7a 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65   zTarget   -> De
23480 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74  quoted name of t
23490 68 65 20 74 61 62 6c 65 20 74 6f 20 75 70 64 61  he table to upda
234a0 74 65 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20  te.. * pWhere   
234b0 20 2d 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c   -> The WHERE cl
234c0 61 75 73 65 20 6f 66 20 74 68 65 20 55 50 44 41  ause of the UPDA
234d0 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20  TE statement if 
234e0 6f 6e 65 20 69 73 20 73 70 65 63 69 66 69 65 64  one is specified
234f0 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  .. *            
23500 20 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c    Otherwise NULL
23510 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73 74 20 2d  .. * pExprList -
23520 3e 20 41 20 6c 69 73 74 20 6f 66 20 74 68 65 20  > A list of the 
23530 63 6f 6c 75 6d 6e 73 20 74 6f 20 75 70 64 61 74  columns to updat
23540 65 20 61 6e 64 20 74 68 65 20 65 78 70 72 65 73  e and the expres
23550 73 69 6f 6e 73 20 74 6f 20 75 70 64 61 74 65 0a  sions to update.
23560 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
23570 74 68 65 6d 20 74 6f 2e 20 53 65 65 20 73 71 6c  them to. See sql
23580 69 74 65 33 55 70 64 61 74 65 28 29 20 64 6f 63  ite3Update() doc
23590 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 22 70  umentation of "p
235a0 43 68 61 6e 67 65 73 22 0a 20 2a 20 20 20 20 20  Changes". *     
235b0 20 20 20 20 20 20 20 20 20 61 72 67 75 6d 65 6e           argumen
235c0 74 2e 0a 20 2a 0a 20 2a 2f 0a 73 74 72 75 63 74  t.. *. */.struct
235d0 20 54 72 69 67 67 65 72 53 74 65 70 20 7b 0a 20   TriggerStep {. 
235e0 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20   u8 op;         
235f0 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20        /* One of 
23600 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50  TK_DELETE, TK_UP
23610 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 2c  DATE, TK_INSERT,
23620 20 54 4b 5f 53 45 4c 45 43 54 20 2a 2f 0a 20 20   TK_SELECT */.  
23630 75 38 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20  u8 orconf;      
23640 20 20 20 20 20 2f 2a 20 4f 45 5f 52 6f 6c 6c 62       /* OE_Rollb
23650 61 63 6b 20 65 74 63 2e 20 2a 2f 0a 20 20 54 72  ack etc. */.  Tr
23660 69 67 67 65 72 20 2a 70 54 72 69 67 3b 20 20 20  igger *pTrig;   
23670 20 20 20 2f 2a 20 54 68 65 20 74 72 69 67 67 65     /* The trigge
23680 72 20 74 68 61 74 20 74 68 69 73 20 73 74 65 70  r that this step
23690 20 69 73 20 61 20 70 61 72 74 20 6f 66 20 2a 2f   is a part of */
236a0 0a 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65  .  Select *pSele
236b0 63 74 3b 20 20 20 20 20 2f 2a 20 53 45 4c 45 43  ct;     /* SELEC
236c0 54 20 73 74 61 74 65 6d 65 6e 74 20 6f 72 20 52  T statement or R
236d0 48 53 20 6f 66 20 49 4e 53 45 52 54 20 49 4e 54  HS of INSERT INT
236e0 4f 20 53 45 4c 45 43 54 20 2e 2e 2e 20 2a 2f 0a  O SELECT ... */.
236f0 20 20 63 68 61 72 20 2a 7a 54 61 72 67 65 74 3b    char *zTarget;
23700 20 20 20 20 20 20 20 2f 2a 20 54 61 72 67 65 74         /* Target
23710 20 74 61 62 6c 65 20 66 6f 72 20 44 45 4c 45 54   table for DELET
23720 45 2c 20 55 50 44 41 54 45 2c 20 49 4e 53 45 52  E, UPDATE, INSER
23730 54 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68  T */.  Expr *pWh
23740 65 72 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 54  ere;        /* T
23750 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
23760 66 6f 72 20 44 45 4c 45 54 45 20 6f 72 20 55 50  for DELETE or UP
23770 44 41 54 45 20 73 74 65 70 73 20 2a 2f 0a 20 20  DATE steps */.  
23780 45 78 70 72 4c 69 73 74 20 2a 70 45 78 70 72 4c  ExprList *pExprL
23790 69 73 74 3b 20 2f 2a 20 53 45 54 20 63 6c 61 75  ist; /* SET clau
237a0 73 65 20 66 6f 72 20 55 50 44 41 54 45 20 2a 2f  se for UPDATE */
237b0 0a 20 20 49 64 4c 69 73 74 20 2a 70 49 64 4c 69  .  IdList *pIdLi
237c0 73 74 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d  st;     /* Colum
237d0 6e 20 6e 61 6d 65 73 20 66 6f 72 20 49 4e 53 45  n names for INSE
237e0 52 54 20 2a 2f 0a 20 20 55 70 73 65 72 74 20 2a  RT */.  Upsert *
237f0 70 55 70 73 65 72 74 3b 20 20 20 20 20 2f 2a 20  pUpsert;     /* 
23800 55 70 73 65 72 74 20 63 6c 61 75 73 65 73 20 6f  Upsert clauses o
23810 6e 20 61 6e 20 49 4e 53 45 52 54 20 2a 2f 0a 20  n an INSERT */. 
23820 20 63 68 61 72 20 2a 7a 53 70 61 6e 3b 20 20 20   char *zSpan;   
23830 20 20 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61        /* Origina
23840 6c 20 53 51 4c 20 74 65 78 74 20 6f 66 20 74 68  l SQL text of th
23850 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20  is command */.  
23860 54 72 69 67 67 65 72 53 74 65 70 20 2a 70 4e 65  TriggerStep *pNe
23870 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20  xt;  /* Next in 
23880 74 68 65 20 6c 69 6e 6b 2d 6c 69 73 74 20 2a 2f  the link-list */
23890 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
238a0 70 4c 61 73 74 3b 20 20 2f 2a 20 4c 61 73 74 20  pLast;  /* Last 
238b0 65 6c 65 6d 65 6e 74 20 69 6e 20 6c 69 6e 6b 2d  element in link-
238c0 6c 69 73 74 2e 20 56 61 6c 69 64 20 66 6f 72 20  list. Valid for 
238d0 31 73 74 20 65 6c 65 6d 20 6f 6e 6c 79 20 2a 2f  1st elem only */
238e0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  .};../*.** The f
238f0 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
23900 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f  re contains info
23910 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 62 79 20  rmation used by 
23920 74 68 65 20 73 71 6c 69 74 65 46 69 78 2e 2e 2e  the sqliteFix...
23930 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20 61 73 20  .** routines as 
23940 74 68 65 79 20 77 61 6c 6b 20 74 68 65 20 70 61  they walk the pa
23950 72 73 65 20 74 72 65 65 20 74 6f 20 6d 61 6b 65  rse tree to make
23960 20 64 61 74 61 62 61 73 65 20 72 65 66 65 72 65   database refere
23970 6e 63 65 73 0a 2a 2a 20 65 78 70 6c 69 63 69 74  nces.** explicit
23980 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72  ..*/.typedef str
23990 75 63 74 20 44 62 46 69 78 65 72 20 44 62 46 69  uct DbFixer DbFi
239a0 78 65 72 3b 0a 73 74 72 75 63 74 20 44 62 46 69  xer;.struct DbFi
239b0 78 65 72 20 7b 0a 20 20 50 61 72 73 65 20 2a 70  xer {.  Parse *p
239c0 50 61 72 73 65 3b 20 20 20 20 20 20 2f 2a 20 54  Parse;      /* T
239d0 68 65 20 70 61 72 73 69 6e 67 20 63 6f 6e 74 65  he parsing conte
239e0 78 74 2e 20 20 45 72 72 6f 72 20 6d 65 73 73 61  xt.  Error messa
239f0 67 65 73 20 77 72 69 74 74 65 6e 20 68 65 72 65  ges written here
23a00 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53   */.  Schema *pS
23a10 63 68 65 6d 61 3b 20 20 20 20 2f 2a 20 46 69 78  chema;    /* Fix
23a20 20 69 74 65 6d 73 20 74 6f 20 74 68 69 73 20 73   items to this s
23a30 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 62  chema */.  int b
23a40 56 61 72 4f 6e 6c 79 3b 20 20 20 20 20 20 20 2f  VarOnly;       /
23a50 2a 20 43 68 65 63 6b 20 66 6f 72 20 76 61 72 69  * Check for vari
23a60 61 62 6c 65 20 72 65 66 65 72 65 6e 63 65 73 20  able references 
23a70 6f 6e 6c 79 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  only */.  const 
23a80 63 68 61 72 20 2a 7a 44 62 3b 20 20 20 20 2f 2a  char *zDb;    /*
23a90 20 4d 61 6b 65 20 73 75 72 65 20 61 6c 6c 20 6f   Make sure all o
23aa0 62 6a 65 63 74 73 20 61 72 65 20 63 6f 6e 74 61  bjects are conta
23ab0 69 6e 65 64 20 69 6e 20 74 68 69 73 20 64 61 74  ined in this dat
23ac0 61 62 61 73 65 20 2a 2f 0a 20 20 63 6f 6e 73 74  abase */.  const
23ad0 20 63 68 61 72 20 2a 7a 54 79 70 65 3b 20 20 2f   char *zType;  /
23ae0 2a 20 54 79 70 65 20 6f 66 20 74 68 65 20 63 6f  * Type of the co
23af0 6e 74 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66  ntainer - used f
23b00 6f 72 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  or error message
23b10 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 54 6f 6b  s */.  const Tok
23b20 65 6e 20 2a 70 4e 61 6d 65 3b 20 2f 2a 20 4e 61  en *pName; /* Na
23b30 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69  me of the contai
23b40 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65  ner - used for e
23b50 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f  rror messages */
23b60 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62  .};../*.** An ob
23b70 6a 65 63 74 65 64 20 75 73 65 64 20 74 6f 20 61  jected used to a
23b80 63 63 75 6d 75 6c 61 74 65 20 74 68 65 20 74 65  ccumulate the te
23b90 78 74 20 6f 66 20 61 20 73 74 72 69 6e 67 20 77  xt of a string w
23ba0 68 65 72 65 20 77 65 0a 2a 2a 20 64 6f 20 6e 6f  here we.** do no
23bb0 74 20 6e 65 63 65 73 73 61 72 69 6c 79 20 6b 6e  t necessarily kn
23bc0 6f 77 20 68 6f 77 20 62 69 67 20 74 68 65 20 73  ow how big the s
23bd0 74 72 69 6e 67 20 77 69 6c 6c 20 62 65 20 69 6e  tring will be in
23be0 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72   the end..*/.str
23bf0 75 63 74 20 73 71 6c 69 74 65 33 5f 73 74 72 20  uct sqlite3_str 
23c00 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
23c10 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 74 69           /* Opti
23c20 6f 6e 61 6c 20 64 61 74 61 62 61 73 65 20 66 6f  onal database fo
23c30 72 20 6c 6f 6f 6b 61 73 69 64 65 2e 20 20 43 61  r lookaside.  Ca
23c40 6e 20 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63  n be NULL */.  c
23c50 68 61 72 20 2a 7a 54 65 78 74 3b 20 20 20 20 20  har *zText;     
23c60 20 20 20 20 2f 2a 20 54 68 65 20 73 74 72 69 6e      /* The strin
23c70 67 20 63 6f 6c 6c 65 63 74 65 64 20 73 6f 20 66  g collected so f
23c80 61 72 20 2a 2f 0a 20 20 75 33 32 20 20 6e 41 6c  ar */.  u32  nAl
23c90 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  loc;         /* 
23ca0 41 6d 6f 75 6e 74 20 6f 66 20 73 70 61 63 65 20  Amount of space 
23cb0 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20 7a 54 65  allocated in zTe
23cc0 78 74 20 2a 2f 0a 20 20 75 33 32 20 20 6d 78 41  xt */.  u32  mxA
23cd0 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a 20  lloc;        /* 
23ce0 4d 61 78 69 6d 75 6d 20 61 6c 6c 6f 77 65 64 20  Maximum allowed 
23cf0 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 30 20 66  allocation.  0 f
23d00 6f 72 20 6e 6f 20 6d 61 6c 6c 6f 63 20 75 73 61  or no malloc usa
23d10 67 65 20 2a 2f 0a 20 20 75 33 32 20 20 6e 43 68  ge */.  u32  nCh
23d20 61 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ar;          /* 
23d30 4c 65 6e 67 74 68 20 6f 66 20 74 68 65 20 73 74  Length of the st
23d40 72 69 6e 67 20 73 6f 20 66 61 72 20 2a 2f 0a 20  ring so far */. 
23d50 20 75 38 20 20 20 61 63 63 45 72 72 6f 72 3b 20   u8   accError; 
23d60 20 20 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f        /* SQLITE_
23d70 4e 4f 4d 45 4d 20 6f 72 20 53 51 4c 49 54 45 5f  NOMEM or SQLITE_
23d80 54 4f 4f 42 49 47 20 2a 2f 0a 20 20 75 38 20 20  TOOBIG */.  u8  
23d90 20 70 72 69 6e 74 66 46 6c 61 67 73 3b 20 20 20   printfFlags;   
23da0 20 2f 2a 20 53 51 4c 49 54 45 5f 50 52 49 4e 54   /* SQLITE_PRINT
23db0 46 20 66 6c 61 67 73 20 62 65 6c 6f 77 20 2a 2f  F flags below */
23dc0 0a 7d 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .};.#define SQLI
23dd0 54 45 5f 50 52 49 4e 54 46 5f 49 4e 54 45 52 4e  TE_PRINTF_INTERN
23de0 41 4c 20 30 78 30 31 20 20 2f 2a 20 49 6e 74 65  AL 0x01  /* Inte
23df0 72 6e 61 6c 2d 75 73 65 2d 6f 6e 6c 79 20 63 6f  rnal-use-only co
23e00 6e 76 65 72 74 65 72 73 20 61 6c 6c 6f 77 65 64  nverters allowed
23e10 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
23e20 54 45 5f 50 52 49 4e 54 46 5f 53 51 4c 46 55 4e  TE_PRINTF_SQLFUN
23e30 43 20 20 30 78 30 32 20 20 2f 2a 20 53 51 4c 20  C  0x02  /* SQL 
23e40 66 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e  function argumen
23e50 74 73 20 74 6f 20 56 58 50 72 69 6e 74 66 20 2a  ts to VXPrintf *
23e60 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
23e70 5f 50 52 49 4e 54 46 5f 4d 41 4c 4c 4f 43 45 44  _PRINTF_MALLOCED
23e80 20 30 78 30 34 20 20 2f 2a 20 54 72 75 65 20 69   0x04  /* True i
23e90 66 20 78 54 65 78 74 20 69 73 20 61 6c 6c 6f 63  f xText is alloc
23ea0 61 74 65 64 20 73 70 61 63 65 20 2a 2f 0a 0a 23  ated space */..#
23eb0 64 65 66 69 6e 65 20 69 73 4d 61 6c 6c 6f 63 65  define isMalloce
23ec0 64 28 58 29 20 20 28 28 28 58 29 2d 3e 70 72 69  d(X)  (((X)->pri
23ed0 6e 74 66 46 6c 61 67 73 20 26 20 53 51 4c 49 54  ntfFlags & SQLIT
23ee0 45 5f 50 52 49 4e 54 46 5f 4d 41 4c 4c 4f 43 45  E_PRINTF_MALLOCE
23ef0 44 29 21 3d 30 29 0a 0a 0a 2f 2a 0a 2a 2a 20 41  D)!=0).../*.** A
23f00 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73   pointer to this
23f10 20 73 74 72 75 63 74 75 72 65 20 69 73 20 75 73   structure is us
23f20 65 64 20 74 6f 20 63 6f 6d 6d 75 6e 69 63 61 74  ed to communicat
23f30 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a  e information.**
23f40 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 49 6e 69   from sqlite3Ini
23f50 74 20 61 6e 64 20 4f 50 5f 50 61 72 73 65 53 63  t and OP_ParseSc
23f60 68 65 6d 61 20 69 6e 74 6f 20 74 68 65 20 73 71  hema into the sq
23f70 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63  lite3InitCallbac
23f80 6b 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74  k..*/.typedef st
23f90 72 75 63 74 20 7b 0a 20 20 73 71 6c 69 74 65 33  ruct {.  sqlite3
23fa0 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f 2a 20   *db;        /* 
23fb0 54 68 65 20 64 61 74 61 62 61 73 65 20 62 65 69  The database bei
23fc0 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a  ng initialized *
23fd0 2f 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45 72 72  /.  char **pzErr
23fe0 4d 73 67 3b 20 20 20 20 2f 2a 20 45 72 72 6f 72  Msg;    /* Error
23ff0 20 6d 65 73 73 61 67 65 20 73 74 6f 72 65 64 20   message stored 
24000 68 65 72 65 20 2a 2f 0a 20 20 69 6e 74 20 69 44  here */.  int iD
24010 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  b;            /*
24020 20 30 20 66 6f 72 20 6d 61 69 6e 20 64 61 74 61   0 for main data
24030 62 61 73 65 2e 20 20 31 20 66 6f 72 20 54 45 4d  base.  1 for TEM
24040 50 2c 20 32 2e 2e 20 66 6f 72 20 41 54 54 41 43  P, 2.. for ATTAC
24050 48 65 64 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b  Hed */.  int rc;
24060 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
24070 52 65 73 75 6c 74 20 63 6f 64 65 20 73 74 6f 72  Result code stor
24080 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 75 33 32  ed here */.  u32
24090 20 6d 49 6e 69 74 46 6c 61 67 73 3b 20 20 20 20   mInitFlags;    
240a0 20 2f 2a 20 46 6c 61 67 73 20 63 6f 6e 74 72 6f   /* Flags contro
240b0 6c 6c 69 6e 67 20 65 72 72 6f 72 20 6d 65 73 73  lling error mess
240c0 61 67 65 73 20 2a 2f 0a 7d 20 49 6e 69 74 44 61  ages */.} InitDa
240d0 74 61 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  ta;../*.** Allow
240e0 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 6d 49  ed values for mI
240f0 6e 69 74 46 6c 61 67 73 0a 2a 2f 0a 23 64 65 66  nitFlags.*/.#def
24100 69 6e 65 20 49 4e 49 54 46 4c 41 47 5f 41 6c 74  ine INITFLAG_Alt
24110 65 72 54 61 62 6c 65 20 20 20 30 78 30 30 30 31  erTable   0x0001
24120 20 20 2f 2a 20 54 68 69 73 20 69 73 20 61 20 72    /* This is a r
24130 65 70 61 72 73 65 20 61 66 74 65 72 20 41 4c 54  eparse after ALT
24140 45 52 20 54 41 42 4c 45 20 2a 2f 0a 0a 2f 2a 0a  ER TABLE */../*.
24150 2a 2a 20 53 74 72 75 63 74 75 72 65 20 63 6f 6e  ** Structure con
24160 74 61 69 6e 69 6e 67 20 67 6c 6f 62 61 6c 20 63  taining global c
24170 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 64 61 74  onfiguration dat
24180 61 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65  a for the SQLite
24190 20 6c 69 62 72 61 72 79 2e 0a 2a 2a 0a 2a 2a 20   library..**.** 
241a0 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20 61  This structure a
241b0 6c 73 6f 20 63 6f 6e 74 61 69 6e 73 20 73 6f 6d  lso contains som
241c0 65 20 73 74 61 74 65 20 69 6e 66 6f 72 6d 61 74  e state informat
241d0 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  ion..*/.struct S
241e0 71 6c 69 74 65 33 43 6f 6e 66 69 67 20 7b 0a 20  qlite3Config {. 
241f0 20 69 6e 74 20 62 4d 65 6d 73 74 61 74 3b 20 20   int bMemstat;  
24200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24210 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e     /* True to en
24220 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73 74 61 74  able memory stat
24230 75 73 20 2a 2f 0a 20 20 69 6e 74 20 62 43 6f 72  us */.  int bCor
24240 65 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20  eMutex;         
24250 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
24260 65 20 74 6f 20 65 6e 61 62 6c 65 20 63 6f 72 65  e to enable core
24270 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69   mutexing */.  i
24280 6e 74 20 62 46 75 6c 6c 4d 75 74 65 78 3b 20 20  nt bFullMutex;  
24290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
242a0 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62   /* True to enab
242b0 6c 65 20 66 75 6c 6c 20 6d 75 74 65 78 69 6e 67  le full mutexing
242c0 20 2a 2f 0a 20 20 69 6e 74 20 62 4f 70 65 6e 55   */.  int bOpenU
242d0 72 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ri;             
242e0 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
242f0 74 6f 20 69 6e 74 65 72 70 72 65 74 20 66 69 6c  to interpret fil
24300 65 6e 61 6d 65 73 20 61 73 20 55 52 49 73 20 2a  enames as URIs *
24310 2f 0a 20 20 69 6e 74 20 62 55 73 65 43 69 73 3b  /.  int bUseCis;
24320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24330 20 20 20 20 20 20 2f 2a 20 55 73 65 20 63 6f 76        /* Use cov
24340 65 72 69 6e 67 20 69 6e 64 69 63 65 73 20 66 6f  ering indices fo
24350 72 20 66 75 6c 6c 2d 73 63 61 6e 73 20 2a 2f 0a  r full-scans */.
24360 20 20 69 6e 74 20 62 53 6d 61 6c 6c 4d 61 6c 6c    int bSmallMall
24370 6f 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  oc;             
24380 20 20 20 20 2f 2a 20 41 76 6f 69 64 20 6c 61 72      /* Avoid lar
24390 67 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  ge memory alloca
243a0 74 69 6f 6e 73 20 69 66 20 74 72 75 65 20 2a 2f  tions if true */
243b0 0a 20 20 69 6e 74 20 6d 78 53 74 72 6c 65 6e 3b  .  int mxStrlen;
243c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
243d0 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20       /* Maximum 
243e0 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 2a 2f  string length */
243f0 0a 20 20 69 6e 74 20 6e 65 76 65 72 43 6f 72 72  .  int neverCorr
24400 75 70 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  upt;            
24410 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65       /* Database
24420 20 69 73 20 61 6c 77 61 79 73 20 77 65 6c 6c 2d   is always well-
24430 66 6f 72 6d 65 64 20 2a 2f 0a 20 20 69 6e 74 20  formed */.  int 
24440 73 7a 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20  szLookaside;    
24450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
24460 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69   Default lookasi
24470 64 65 20 62 75 66 66 65 72 20 73 69 7a 65 20 2a  de buffer size *
24480 2f 0a 20 20 69 6e 74 20 6e 4c 6f 6f 6b 61 73 69  /.  int nLookasi
24490 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  de;             
244a0 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74        /* Default
244b0 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66 66 65   lookaside buffe
244c0 72 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 69 6e 74  r count */.  int
244d0 20 6e 53 74 6d 74 53 70 69 6c 6c 3b 20 20 20 20   nStmtSpill;    
244e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
244f0 2a 20 53 74 6d 74 2d 6a 6f 75 72 6e 61 6c 20 73  * Stmt-journal s
24500 70 69 6c 6c 2d 74 6f 2d 64 69 73 6b 20 74 68 72  pill-to-disk thr
24510 65 73 68 6f 6c 64 20 2a 2f 0a 20 20 73 71 6c 69  eshold */.  sqli
24520 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20  te3_mem_methods 
24530 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  m;            /*
24540 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 65 6d 6f 72   Low-level memor
24550 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 74  y allocation int
24560 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69  erface */.  sqli
24570 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64  te3_mutex_method
24580 73 20 6d 75 74 65 78 3b 20 20 20 20 20 20 2f 2a  s mutex;      /*
24590 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 75 74 65 78   Low-level mutex
245a0 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20   interface */.  
245b0 73 71 6c 69 74 65 33 5f 70 63 61 63 68 65 5f 6d  sqlite3_pcache_m
245c0 65 74 68 6f 64 73 32 20 70 63 61 63 68 65 32 3b  ethods2 pcache2;
245d0 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 70    /* Low-level p
245e0 61 67 65 2d 63 61 63 68 65 20 69 6e 74 65 72 66  age-cache interf
245f0 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ace */.  void *p
24600 48 65 61 70 3b 20 20 20 20 20 20 20 20 20 20 20  Heap;           
24610 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 65             /* He
24620 61 70 20 73 74 6f 72 61 67 65 20 73 70 61 63 65  ap storage space
24630 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 61 70 3b   */.  int nHeap;
24640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24650 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20          /* Size 
24660 6f 66 20 70 48 65 61 70 5b 5d 20 2a 2f 0a 20 20  of pHeap[] */.  
24670 69 6e 74 20 6d 6e 52 65 71 2c 20 6d 78 52 65 71  int mnReq, mxReq
24680 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
24690 20 20 2f 2a 20 4d 69 6e 20 61 6e 64 20 6d 61 78    /* Min and max
246a0 20 68 65 61 70 20 72 65 71 75 65 73 74 73 20 73   heap requests s
246b0 69 7a 65 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65  izes */.  sqlite
246c0 33 5f 69 6e 74 36 34 20 73 7a 4d 6d 61 70 3b 20  3_int64 szMmap; 
246d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d              /* m
246e0 6d 61 70 28 29 20 73 70 61 63 65 20 70 65 72 20  map() space per 
246f0 6f 70 65 6e 20 66 69 6c 65 20 2a 2f 0a 20 20 73  open file */.  s
24700 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 6d 78 4d  qlite3_int64 mxM
24710 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20  map;            
24720 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 76 61 6c 75   /* Maximum valu
24730 65 20 66 6f 72 20 73 7a 4d 6d 61 70 20 2a 2f 0a  e for szMmap */.
24740 20 20 76 6f 69 64 20 2a 70 50 61 67 65 3b 20 20    void *pPage;  
24750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24760 20 20 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68      /* Page cach
24770 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e  e memory */.  in
24780 74 20 73 7a 50 61 67 65 3b 20 20 20 20 20 20 20  t szPage;       
24790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
247a0 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20  /* Size of each 
247b0 70 61 67 65 20 69 6e 20 70 50 61 67 65 5b 5d 20  page in pPage[] 
247c0 2a 2f 0a 20 20 69 6e 74 20 6e 50 61 67 65 3b 20  */.  int nPage; 
247d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
247e0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
247f0 20 6f 66 20 70 61 67 65 73 20 69 6e 20 70 50 61   of pages in pPa
24800 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 78  ge[] */.  int mx
24810 50 61 72 73 65 72 53 74 61 63 6b 3b 20 20 20 20  ParserStack;    
24820 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d              /* m
24830 61 78 69 6d 75 6d 20 64 65 70 74 68 20 6f 66 20  aximum depth of 
24840 74 68 65 20 70 61 72 73 65 72 20 73 74 61 63 6b  the parser stack
24850 20 2a 2f 0a 20 20 69 6e 74 20 73 68 61 72 65 64   */.  int shared
24860 43 61 63 68 65 45 6e 61 62 6c 65 64 3b 20 20 20  CacheEnabled;   
24870 20 20 20 20 20 20 20 20 2f 2a 20 74 72 75 65 20          /* true 
24880 69 66 20 73 68 61 72 65 64 2d 63 61 63 68 65 20  if shared-cache 
24890 6d 6f 64 65 20 65 6e 61 62 6c 65 64 20 2a 2f 0a  mode enabled */.
248a0 20 20 75 33 32 20 73 7a 50 6d 61 3b 20 20 20 20    u32 szPma;    
248b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
248c0 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 53      /* Maximum S
248d0 6f 72 74 65 72 20 50 4d 41 20 73 69 7a 65 20 2a  orter PMA size *
248e0 2f 0a 20 20 2f 2a 20 54 68 65 20 61 62 6f 76 65  /.  /* The above
248f0 20 6d 69 67 68 74 20 62 65 20 69 6e 69 74 69 61   might be initia
24900 6c 69 7a 65 64 20 74 6f 20 6e 6f 6e 2d 7a 65 72  lized to non-zer
24910 6f 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  o.  The followin
24920 67 20 6e 65 65 64 20 74 6f 20 61 6c 77 61 79 73  g need to always
24930 0a 20 20 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20  .  ** initially 
24940 62 65 20 7a 65 72 6f 2c 20 68 6f 77 65 76 65 72  be zero, however
24950 2e 20 2a 2f 0a 20 20 69 6e 74 20 69 73 49 6e 69  . */.  int isIni
24960 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
24970 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
24980 20 61 66 74 65 72 20 69 6e 69 74 69 61 6c 69 7a   after initializ
24990 61 74 69 6f 6e 20 68 61 73 20 66 69 6e 69 73 68  ation has finish
249a0 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 6e 50 72  ed */.  int inPr
249b0 6f 67 72 65 73 73 3b 20 20 20 20 20 20 20 20 20  ogress;         
249c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
249d0 65 20 77 68 69 6c 65 20 69 6e 69 74 69 61 6c 69  e while initiali
249e0 7a 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65  zation in progre
249f0 73 73 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 75  ss */.  int isMu
24a00 74 65 78 49 6e 69 74 3b 20 20 20 20 20 20 20 20  texInit;        
24a10 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
24a20 65 20 61 66 74 65 72 20 6d 75 74 65 78 65 73 20  e after mutexes 
24a30 61 72 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  are initialized 
24a40 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 61 6c 6c 6f  */.  int isMallo
24a50 63 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20  cInit;          
24a60 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61         /* True a
24a70 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69  fter malloc is i
24a80 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20  nitialized */.  
24a90 69 6e 74 20 69 73 50 43 61 63 68 65 49 6e 69 74  int isPCacheInit
24aa0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
24ab0 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20    /* True after 
24ac0 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69 61  malloc is initia
24ad0 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e  lized */.  int n
24ae0 52 65 66 49 6e 69 74 4d 75 74 65 78 3b 20 20 20  RefInitMutex;   
24af0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
24b00 4e 75 6d 62 65 72 20 6f 66 20 75 73 65 72 73 20  Number of users 
24b10 6f 66 20 70 49 6e 69 74 4d 75 74 65 78 20 2a 2f  of pInitMutex */
24b20 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
24b30 20 2a 70 49 6e 69 74 4d 75 74 65 78 3b 20 20 20   *pInitMutex;   
24b40 20 20 20 20 20 2f 2a 20 4d 75 74 65 78 20 75 73       /* Mutex us
24b50 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 69 6e  ed by sqlite3_in
24b60 69 74 69 61 6c 69 7a 65 28 29 20 2a 2f 0a 20 20  itialize() */.  
24b70 76 6f 69 64 20 28 2a 78 4c 6f 67 29 28 76 6f 69  void (*xLog)(voi
24b80 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61  d*,int,const cha
24b90 72 2a 29 3b 20 2f 2a 20 46 75 6e 63 74 69 6f 6e  r*); /* Function
24ba0 20 66 6f 72 20 6c 6f 67 67 69 6e 67 20 2a 2f 0a   for logging */.
24bb0 20 20 76 6f 69 64 20 2a 70 4c 6f 67 41 72 67 3b    void *pLogArg;
24bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24bd0 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
24be0 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 4c 6f 67  argument to xLog
24bf0 28 29 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  () */.#ifdef SQL
24c00 49 54 45 5f 45 4e 41 42 4c 45 5f 53 51 4c 4c 4f  ITE_ENABLE_SQLLO
24c10 47 0a 20 20 76 6f 69 64 28 2a 78 53 71 6c 6c 6f  G.  void(*xSqllo
24c20 67 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33  g)(void*,sqlite3
24c30 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69  *,const char*, i
24c40 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70 53 71  nt);.  void *pSq
24c50 6c 6c 6f 67 41 72 67 3b 0a 23 65 6e 64 69 66 0a  llogArg;.#endif.
24c60 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 56 44  #ifdef SQLITE_VD
24c70 42 45 5f 43 4f 56 45 52 41 47 45 0a 20 20 2f 2a  BE_COVERAGE.  /*
24c80 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63   The following c
24c90 61 6c 6c 62 61 63 6b 20 28 69 66 20 6e 6f 74 20  allback (if not 
24ca0 4e 55 4c 4c 29 20 69 73 20 69 6e 76 6f 6b 65 64  NULL) is invoked
24cb0 20 6f 6e 20 65 76 65 72 79 20 56 44 42 45 20 62   on every VDBE b
24cc0 72 61 6e 63 68 0a 20 20 2a 2a 20 6f 70 65 72 61  ranch.  ** opera
24cd0 74 69 6f 6e 2e 20 20 53 65 74 20 74 68 65 20 63  tion.  Set the c
24ce0 61 6c 6c 62 61 63 6b 20 75 73 69 6e 67 20 53 51  allback using SQ
24cf0 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 56 44  LITE_TESTCTRL_VD
24d00 42 45 5f 43 4f 56 45 52 41 47 45 2e 0a 20 20 2a  BE_COVERAGE..  *
24d10 2f 0a 20 20 76 6f 69 64 20 28 2a 78 56 64 62 65  /.  void (*xVdbe
24d20 42 72 61 6e 63 68 29 28 76 6f 69 64 2a 2c 75 6e  Branch)(void*,un
24d30 73 69 67 6e 65 64 20 69 53 72 63 4c 69 6e 65 2c  signed iSrcLine,
24d40 75 38 20 65 54 68 69 73 2c 75 38 20 65 4d 78 29  u8 eThis,u8 eMx)
24d50 3b 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 2a  ;  /* Callback *
24d60 2f 0a 20 20 76 6f 69 64 20 2a 70 56 64 62 65 42  /.  void *pVdbeB
24d70 72 61 6e 63 68 41 72 67 3b 20 20 20 20 20 20 20  ranchArg;       
24d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
24da0 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20 2a 2f   1st argument */
24db0 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
24dc0 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c  SQLITE_UNTESTABL
24dd0 45 0a 20 20 69 6e 74 20 28 2a 78 54 65 73 74 43  E.  int (*xTestC
24de0 61 6c 6c 62 61 63 6b 29 28 69 6e 74 29 3b 20 20  allback)(int);  
24df0 20 20 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64        /* Invoked
24e00 20 62 79 20 73 71 6c 69 74 65 33 46 61 75 6c 74   by sqlite3Fault
24e10 53 69 6d 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a  Sim() */.#endif.
24e20 20 20 69 6e 74 20 62 4c 6f 63 61 6c 74 69 6d 65    int bLocaltime
24e30 46 61 75 6c 74 3b 20 20 20 20 20 20 20 20 20 20  Fault;          
24e40 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 66      /* True to f
24e50 61 69 6c 20 6c 6f 63 61 6c 74 69 6d 65 28 29 20  ail localtime() 
24e60 63 61 6c 6c 73 20 2a 2f 0a 20 20 69 6e 74 20 69  calls */.  int i
24e70 4f 6e 63 65 52 65 73 65 74 54 68 72 65 73 68 6f  OnceResetThresho
24e80 6c 64 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ld;          /* 
24e90 57 68 65 6e 20 74 6f 20 72 65 73 65 74 20 4f 50  When to reset OP
24ea0 5f 4f 6e 63 65 20 63 6f 75 6e 74 65 72 73 20 2a  _Once counters *
24eb0 2f 0a 20 20 75 33 32 20 73 7a 53 6f 72 74 65 72  /.  u32 szSorter
24ec0 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20 20  Ref;            
24ed0 20 20 20 20 20 20 2f 2a 20 4d 69 6e 20 73 69 7a        /* Min siz
24ee0 65 20 69 6e 20 62 79 74 65 73 20 74 6f 20 75 73  e in bytes to us
24ef0 65 20 73 6f 72 74 65 72 2d 72 65 66 73 20 2a 2f  e sorter-refs */
24f00 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20  .};../*.** This 
24f10 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 69 6e  macro is used in
24f20 73 69 64 65 20 6f 66 20 61 73 73 65 72 74 28 29  side of assert()
24f30 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 69   statements to i
24f40 6e 64 69 63 61 74 65 20 74 68 61 74 0a 2a 2a 20  ndicate that.** 
24f50 74 68 65 20 61 73 73 65 72 74 20 69 73 20 6f 6e  the assert is on
24f60 6c 79 20 76 61 6c 69 64 20 6f 6e 20 61 20 77 65  ly valid on a we
24f70 6c 6c 2d 66 6f 72 6d 65 64 20 64 61 74 61 62 61  ll-formed databa
24f80 73 65 2e 20 20 49 6e 73 74 65 61 64 20 6f 66 3a  se.  Instead of:
24f90 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65 72  .**.**     asser
24fa0 74 28 20 58 20 29 3b 0a 2a 2a 0a 2a 2a 20 4f 6e  t( X );.**.** On
24fb0 65 20 77 72 69 74 65 73 3a 0a 2a 2a 0a 2a 2a 20  e writes:.**.** 
24fc0 20 20 20 20 61 73 73 65 72 74 28 20 58 20 7c 7c      assert( X ||
24fd0 20 43 4f 52 52 55 50 54 5f 44 42 20 29 3b 0a 2a   CORRUPT_DB );.*
24fe0 2a 0a 2a 2a 20 43 4f 52 52 55 50 54 5f 44 42 20  *.** CORRUPT_DB 
24ff0 69 73 20 74 72 75 65 20 64 75 72 69 6e 67 20 6e  is true during n
25000 6f 72 6d 61 6c 20 6f 70 65 72 61 74 69 6f 6e 2e  ormal operation.
25010 20 20 43 4f 52 52 55 50 54 5f 44 42 20 64 6f 65    CORRUPT_DB doe
25020 73 20 6e 6f 74 20 69 6e 64 69 63 61 74 65 0a 2a  s not indicate.*
25030 2a 20 74 68 61 74 20 74 68 65 20 64 61 74 61 62  * that the datab
25040 61 73 65 20 69 73 20 64 65 66 69 6e 69 74 65 6c  ase is definitel
25050 79 20 63 6f 72 72 75 70 74 2c 20 6f 6e 6c 79 20  y corrupt, only 
25060 74 68 61 74 20 69 74 20 6d 69 67 68 74 20 62 65  that it might be
25070 20 63 6f 72 72 75 70 74 2e 0a 2a 2a 20 46 6f 72   corrupt..** For
25080 20 6d 6f 73 74 20 74 65 73 74 20 63 61 73 65 73   most test cases
25090 2c 20 43 4f 52 52 55 50 54 5f 44 42 20 69 73 20  , CORRUPT_DB is 
250a0 73 65 74 20 74 6f 20 66 61 6c 73 65 20 75 73 69  set to false usi
250b0 6e 67 20 61 20 73 70 65 63 69 61 6c 0a 2a 2a 20  ng a special.** 
250c0 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e  sqlite3_test_con
250d0 74 72 6f 6c 28 29 2e 20 20 54 68 69 73 20 65 6e  trol().  This en
250e0 61 62 6c 65 73 20 61 73 73 65 72 74 28 29 20 73  ables assert() s
250f0 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 70 72 6f  tatements to pro
25100 76 65 0a 2a 2a 20 74 68 69 6e 67 73 20 74 68 61  ve.** things tha
25110 74 20 61 72 65 20 61 6c 77 61 79 73 20 74 72 75  t are always tru
25120 65 20 66 6f 72 20 77 65 6c 6c 2d 66 6f 72 6d 65  e for well-forme
25130 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a  d databases..*/.
25140 23 64 65 66 69 6e 65 20 43 4f 52 52 55 50 54 5f  #define CORRUPT_
25150 44 42 20 20 28 73 71 6c 69 74 65 33 43 6f 6e 66  DB  (sqlite3Conf
25160 69 67 2e 6e 65 76 65 72 43 6f 72 72 75 70 74 3d  ig.neverCorrupt=
25170 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74 65  =0)../*.** Conte
25180 78 74 20 70 6f 69 6e 74 65 72 20 70 61 73 73 65  xt pointer passe
25190 64 20 64 6f 77 6e 20 74 68 72 6f 75 67 68 20 74  d down through t
251a0 68 65 20 74 72 65 65 2d 77 61 6c 6b 2e 0a 2a 2f  he tree-walk..*/
251b0 0a 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20 7b  .struct Walker {
251c0 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65  .  Parse *pParse
251d0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
251e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
251f0 50 61 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20  Parser context. 
25200 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 45 78 70   */.  int (*xExp
25210 72 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65  rCallback)(Walke
25220 72 2a 2c 20 45 78 70 72 2a 29 3b 20 20 20 20 20  r*, Expr*);     
25230 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20  /* Callback for 
25240 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20  expressions */. 
25250 20 69 6e 74 20 28 2a 78 53 65 6c 65 63 74 43 61   int (*xSelectCa
25260 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c  llback)(Walker*,
25270 53 65 6c 65 63 74 2a 29 3b 20 20 2f 2a 20 43 61  Select*);  /* Ca
25280 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c 45 43  llback for SELEC
25290 54 73 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  Ts */.  void (*x
252a0 53 65 6c 65 63 74 43 61 6c 6c 62 61 63 6b 32 29  SelectCallback2)
252b0 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a  (Walker*,Select*
252c0 29 3b 2f 2a 20 53 65 63 6f 6e 64 20 63 61 6c 6c  );/* Second call
252d0 62 61 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73  back for SELECTs
252e0 20 2a 2f 0a 20 20 69 6e 74 20 77 61 6c 6b 65 72   */.  int walker
252f0 44 65 70 74 68 3b 20 20 20 20 20 20 20 20 20 20  Depth;          
25300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25310 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 75 62  /* Number of sub
25320 71 75 65 72 69 65 73 20 2a 2f 0a 20 20 75 38 20  queries */.  u8 
25330 65 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20  eCode;          
25340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25350 20 20 20 20 20 20 20 2f 2a 20 41 20 73 6d 61 6c         /* A smal
25360 6c 20 70 72 6f 63 65 73 73 69 6e 67 20 63 6f 64  l processing cod
25370 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 20 20  e */.  union {  
25380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
253a0 20 2f 2a 20 45 78 74 72 61 20 64 61 74 61 20 66   /* Extra data f
253b0 6f 72 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  or callback */. 
253c0 20 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a     NameContext *
253d0 70 4e 43 3b 20 20 20 20 20 20 20 20 20 20 20 20  pNC;            
253e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
253f0 4e 61 6d 69 6e 67 20 63 6f 6e 74 65 78 74 20 2a  Naming context *
25400 2f 0a 20 20 20 20 69 6e 74 20 6e 3b 20 20 20 20  /.    int n;    
25410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25430 2f 2a 20 41 20 63 6f 75 6e 74 65 72 20 2a 2f 0a  /* A counter */.
25440 20 20 20 20 69 6e 74 20 69 43 75 72 3b 20 20 20      int iCur;   
25450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
25470 20 41 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72   A cursor number
25480 20 2a 2f 0a 20 20 20 20 53 72 63 4c 69 73 74 20   */.    SrcList 
25490 2a 70 53 72 63 4c 69 73 74 3b 20 20 20 20 20 20  *pSrcList;      
254a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
254b0 20 20 2f 2a 20 46 52 4f 4d 20 63 6c 61 75 73 65    /* FROM clause
254c0 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 53   */.    struct S
254d0 72 63 43 6f 75 6e 74 20 2a 70 53 72 63 43 6f 75  rcCount *pSrcCou
254e0 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nt;             
254f0 20 20 2f 2a 20 43 6f 75 6e 74 69 6e 67 20 63 6f    /* Counting co
25500 6c 75 6d 6e 20 72 65 66 65 72 65 6e 63 65 73 20  lumn references 
25510 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 43 43  */.    struct CC
25520 75 72 48 69 6e 74 20 2a 70 43 43 75 72 48 69 6e  urHint *pCCurHin
25530 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
25540 20 2f 2a 20 55 73 65 64 20 62 79 20 63 6f 64 65   /* Used by code
25550 43 75 72 73 6f 72 48 69 6e 74 28 29 20 2a 2f 0a  CursorHint() */.
25560 20 20 20 20 69 6e 74 20 2a 61 69 43 6f 6c 3b 20      int *aiCol; 
25570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
25590 20 61 72 72 61 79 20 6f 66 20 63 6f 6c 75 6d 6e   array of column
255a0 20 69 6e 64 65 78 65 73 20 2a 2f 0a 20 20 20 20   indexes */.    
255b0 73 74 72 75 63 74 20 49 64 78 43 6f 76 65 72 20  struct IdxCover 
255c0 2a 70 49 64 78 43 6f 76 65 72 3b 20 20 20 20 20  *pIdxCover;     
255d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 68 65            /* Che
255e0 63 6b 20 66 6f 72 20 69 6e 64 65 78 20 63 6f 76  ck for index cov
255f0 65 72 61 67 65 20 2a 2f 0a 20 20 20 20 73 74 72  erage */.    str
25600 75 63 74 20 49 64 78 45 78 70 72 54 72 61 6e 73  uct IdxExprTrans
25610 20 2a 70 49 64 78 54 72 61 6e 73 3b 20 20 20 20   *pIdxTrans;    
25620 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 76 65 72         /* Conver
25630 74 20 69 64 78 65 64 20 65 78 70 72 20 74 6f 20  t idxed expr to 
25640 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 20 20 45 78  column */.    Ex
25650 70 72 4c 69 73 74 20 2a 70 47 72 6f 75 70 42 79  prList *pGroupBy
25660 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
25670 20 20 20 20 20 20 20 20 2f 2a 20 47 52 4f 55 50          /* GROUP
25680 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20   BY clause */.  
25690 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63    Select *pSelec
256a0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
256b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48              /* H
256c0 41 56 49 4e 47 20 74 6f 20 57 48 45 52 45 20 63  AVING to WHERE c
256d0 6c 61 75 73 65 20 63 74 78 20 2a 2f 0a 20 20 20  lause ctx */.   
256e0 20 73 74 72 75 63 74 20 57 69 6e 64 6f 77 52 65   struct WindowRe
256f0 77 72 69 74 65 20 2a 70 52 65 77 72 69 74 65 3b  write *pRewrite;
25700 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 69             /* Wi
25710 6e 64 6f 77 20 72 65 77 72 69 74 65 20 63 6f 6e  ndow rewrite con
25720 74 65 78 74 20 2a 2f 0a 20 20 20 20 73 74 72 75  text */.    stru
25730 63 74 20 57 68 65 72 65 43 6f 6e 73 74 20 2a 70  ct WhereConst *p
25740 43 6f 6e 73 74 3b 20 20 20 20 20 20 20 20 20 20  Const;          
25750 20 20 20 20 20 20 2f 2a 20 57 48 45 52 45 20 63        /* WHERE c
25760 6c 61 75 73 65 20 63 6f 6e 73 74 61 6e 74 73 20  lause constants 
25770 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 52 65  */.    struct Re
25780 6e 61 6d 65 43 74 78 20 2a 70 52 65 6e 61 6d 65  nameCtx *pRename
25790 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
257a0 20 2f 2a 20 52 45 4e 41 4d 45 20 43 4f 4c 55 4d   /* RENAME COLUM
257b0 4e 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 7d  N context */.  }
257c0 20 75 3b 0a 7d 3b 0a 0a 2f 2a 20 46 6f 72 77 61   u;.};../* Forwa
257d0 72 64 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20  rd declarations 
257e0 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61  */.int sqlite3Wa
257f0 6c 6b 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20  lkExpr(Walker*, 
25800 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
25810 74 65 33 57 61 6c 6b 45 78 70 72 4c 69 73 74 28  te3WalkExprList(
25820 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 4c 69 73  Walker*, ExprLis
25830 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
25840 57 61 6c 6b 53 65 6c 65 63 74 28 57 61 6c 6b 65  WalkSelect(Walke
25850 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e  r*, Select*);.in
25860 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c  t sqlite3WalkSel
25870 65 63 74 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c  ectExpr(Walker*,
25880 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73   Select*);.int s
25890 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74  qlite3WalkSelect
258a0 46 72 6f 6d 28 57 61 6c 6b 65 72 2a 2c 20 53 65  From(Walker*, Se
258b0 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  lect*);.int sqli
258c0 74 65 33 45 78 70 72 57 61 6c 6b 4e 6f 6f 70 28  te3ExprWalkNoop(
258d0 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b  Walker*, Expr*);
258e0 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65  .int sqlite3Sele
258f0 63 74 57 61 6c 6b 4e 6f 6f 70 28 57 61 6c 6b 65  ctWalkNoop(Walke
25900 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e  r*, Select*);.in
25910 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 57  t sqlite3SelectW
25920 61 6c 6b 46 61 69 6c 28 57 61 6c 6b 65 72 2a 2c  alkFail(Walker*,
25930 20 53 65 6c 65 63 74 2a 29 3b 0a 23 69 66 64 65   Select*);.#ifde
25940 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 76  f SQLITE_DEBUG.v
25950 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63  oid sqlite3Selec
25960 74 57 61 6c 6b 41 73 73 65 72 74 32 28 57 61 6c  tWalkAssert2(Wal
25970 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  ker*, Select*);.
25980 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65  #endif../*.** Re
25990 74 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20 74  turn code from t
259a0 68 65 20 70 61 72 73 65 2d 74 72 65 65 20 77 61  he parse-tree wa
259b0 6c 6b 69 6e 67 20 70 72 69 6d 69 74 69 76 65 73  lking primitives
259c0 20 61 6e 64 20 74 68 65 69 72 0a 2a 2a 20 63 61   and their.** ca
259d0 6c 6c 62 61 63 6b 73 2e 0a 2a 2f 0a 23 64 65 66  llbacks..*/.#def
259e0 69 6e 65 20 57 52 43 5f 43 6f 6e 74 69 6e 75 65  ine WRC_Continue
259f0 20 20 20 20 30 20 20 20 2f 2a 20 43 6f 6e 74 69      0   /* Conti
25a00 6e 75 65 20 64 6f 77 6e 20 69 6e 74 6f 20 63 68  nue down into ch
25a10 69 6c 64 72 65 6e 20 2a 2f 0a 23 64 65 66 69 6e  ildren */.#defin
25a20 65 20 57 52 43 5f 50 72 75 6e 65 20 20 20 20 20  e WRC_Prune     
25a30 20 20 31 20 20 20 2f 2a 20 4f 6d 69 74 20 63 68    1   /* Omit ch
25a40 69 6c 64 72 65 6e 20 62 75 74 20 63 6f 6e 74 69  ildren but conti
25a50 6e 75 65 20 77 61 6c 6b 69 6e 67 20 73 69 62 6c  nue walking sibl
25a60 69 6e 67 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ings */.#define 
25a70 57 52 43 5f 41 62 6f 72 74 20 20 20 20 20 20 20  WRC_Abort       
25a80 32 20 20 20 2f 2a 20 41 62 61 6e 64 6f 6e 20 74  2   /* Abandon t
25a90 68 65 20 74 72 65 65 20 77 61 6c 6b 20 2a 2f 0a  he tree walk */.
25aa0 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
25ab0 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ce of this struc
25ac0 74 75 72 65 20 72 65 70 72 65 73 65 6e 74 73 20  ture represents 
25ad0 61 20 73 65 74 20 6f 66 20 6f 6e 65 20 6f 72 20  a set of one or 
25ae0 6d 6f 72 65 20 43 54 45 73 0a 2a 2a 20 28 63 6f  more CTEs.** (co
25af0 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65  mmon table expre
25b00 73 73 69 6f 6e 73 29 20 63 72 65 61 74 65 64 20  ssions) created 
25b10 62 79 20 61 20 73 69 6e 67 6c 65 20 57 49 54 48  by a single WITH
25b20 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75   clause..*/.stru
25b30 63 74 20 57 69 74 68 20 7b 0a 20 20 69 6e 74 20  ct With {.  int 
25b40 6e 43 74 65 3b 20 20 20 20 20 20 20 20 20 20 20  nCte;           
25b50 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
25b60 75 6d 62 65 72 20 6f 66 20 43 54 45 73 20 69 6e  umber of CTEs in
25b70 20 74 68 65 20 57 49 54 48 20 63 6c 61 75 73 65   the WITH clause
25b80 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 4f 75 74   */.  With *pOut
25b90 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  er;             
25ba0 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 61 69 6e        /* Contain
25bb0 69 6e 67 20 57 49 54 48 20 63 6c 61 75 73 65 2c  ing WITH clause,
25bc0 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 73 74   or NULL */.  st
25bd0 72 75 63 74 20 43 74 65 20 7b 20 20 20 20 20 20  ruct Cte {      
25be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
25bf0 20 46 6f 72 20 65 61 63 68 20 43 54 45 20 69 6e   For each CTE in
25c00 20 74 68 65 20 57 49 54 48 20 63 6c 61 75 73 65   the WITH clause
25c10 2e 2e 2e 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72  .... */.    char
25c20 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
25c30 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
25c40 61 6d 65 20 6f 66 20 74 68 69 73 20 43 54 45 20  ame of this CTE 
25c50 2a 2f 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20  */.    ExprList 
25c60 2a 70 43 6f 6c 73 3b 20 20 20 20 20 20 20 20 20  *pCols;         
25c70 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f         /* List o
25c80 66 20 65 78 70 6c 69 63 69 74 20 63 6f 6c 75 6d  f explicit colum
25c90 6e 20 6e 61 6d 65 73 2c 20 6f 72 20 4e 55 4c 4c  n names, or NULL
25ca0 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a   */.    Select *
25cb0 70 53 65 6c 65 63 74 3b 20 20 20 20 20 20 20 20  pSelect;        
25cc0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64          /* The d
25cd0 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 74 68 69  efinition of thi
25ce0 73 20 43 54 45 20 2a 2f 0a 20 20 20 20 63 6f 6e  s CTE */.    con
25cf0 73 74 20 63 68 61 72 20 2a 7a 43 74 65 45 72 72  st char *zCteErr
25d00 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
25d10 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20 66 6f  Error message fo
25d20 72 20 63 69 72 63 75 6c 61 72 20 72 65 66 65 72  r circular refer
25d30 65 6e 63 65 73 20 2a 2f 0a 20 20 7d 20 61 5b 31  ences */.  } a[1
25d40 5d 3b 0a 7d 3b 0a 0a 23 69 66 64 65 66 20 53 51  ];.};..#ifdef SQ
25d50 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a  LITE_DEBUG./*.**
25d60 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
25d70 74 68 65 20 54 72 65 65 56 69 65 77 20 6f 62 6a  the TreeView obj
25d80 65 63 74 20 69 73 20 75 73 65 64 20 66 6f 72 20  ect is used for 
25d90 70 72 69 6e 74 69 6e 67 20 74 68 65 20 63 6f 6e  printing the con
25da0 74 65 6e 74 20 6f 66 0a 2a 2a 20 64 61 74 61 20  tent of.** data 
25db0 73 74 72 75 63 74 75 72 65 73 20 6f 6e 20 73 71  structures on sq
25dc0 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e 74 66  lite3DebugPrintf
25dd0 28 29 20 75 73 69 6e 67 20 61 20 74 72 65 65 2d  () using a tree-
25de0 6c 69 6b 65 20 76 69 65 77 2e 0a 2a 2f 0a 73 74  like view..*/.st
25df0 72 75 63 74 20 54 72 65 65 56 69 65 77 20 7b 0a  ruct TreeView {.
25e00 20 20 69 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20    int iLevel;   
25e10 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69            /* Whi
25e20 63 68 20 6c 65 76 65 6c 20 6f 66 20 74 68 65 20  ch level of the 
25e30 74 72 65 65 20 77 65 20 61 72 65 20 6f 6e 20 2a  tree we are on *
25e40 2f 0a 20 20 75 38 20 20 62 4c 69 6e 65 5b 31 30  /.  u8  bLine[10
25e50 30 5d 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 44  0];         /* D
25e60 72 61 77 20 76 65 72 74 69 63 61 6c 20 69 6e 20  raw vertical in 
25e70 63 6f 6c 75 6d 6e 20 69 20 69 66 20 62 4c 69 6e  column i if bLin
25e80 65 5b 69 5d 20 69 73 20 74 72 75 65 20 2a 2f 0a  e[i] is true */.
25e90 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  };.#endif /* SQL
25ea0 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 0a 2f 2a  ITE_DEBUG */../*
25eb0 0a 2a 2a 20 54 68 69 73 20 6f 62 6a 65 63 74 20  .** This object 
25ec0 69 73 20 75 73 65 64 20 69 6e 20 76 61 72 69 6f  is used in vario
25ed0 69 75 73 20 77 61 79 73 2c 20 61 6c 6c 20 72 65  ius ways, all re
25ee0 6c 61 74 65 64 20 74 6f 20 77 69 6e 64 6f 77 20  lated to window 
25ef0 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a 0a 2a 2a 20  functions.**.** 
25f00 20 20 28 31 29 20 41 20 73 69 6e 67 6c 65 20 69    (1) A single i
25f10 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
25f20 73 74 72 75 63 74 75 72 65 20 69 73 20 61 74 74  structure is att
25f30 61 63 68 65 64 20 74 6f 20 74 68 65 0a 2a 2a 20  ached to the.** 
25f40 20 20 20 20 20 20 74 68 65 20 45 78 70 72 2e 70        the Expr.p
25f50 57 69 6e 20 66 69 65 6c 64 20 66 6f 72 20 65 61  Win field for ea
25f60 63 68 20 77 69 6e 64 6f 77 20 66 75 6e 63 74 69  ch window functi
25f70 6f 6e 20 69 6e 20 61 6e 20 65 78 70 72 65 73 73  on in an express
25f80 69 6f 6e 20 74 72 65 65 2e 0a 2a 2a 20 20 20 20  ion tree..**    
25f90 20 20 20 54 68 69 73 20 6f 62 6a 65 63 74 20 68     This object h
25fa0 6f 6c 64 73 20 74 68 65 20 69 6e 66 6f 72 6d 61  olds the informa
25fb0 74 69 6f 6e 20 63 6f 6e 74 61 69 6e 65 64 20 69  tion contained i
25fc0 6e 20 74 68 65 20 4f 56 45 52 20 63 6c 61 75 73  n the OVER claus
25fd0 65 2c 0a 2a 2a 20 20 20 20 20 20 20 70 6c 75 73  e,.**       plus
25fe0 20 61 64 64 69 74 69 6f 6e 61 6c 20 66 69 65 6c   additional fiel
25ff0 64 73 20 75 73 65 64 20 64 75 72 69 6e 67 20 63  ds used during c
26000 6f 64 65 20 67 65 6e 65 72 61 74 69 6f 6e 2e 0a  ode generation..
26010 2a 2a 0a 2a 2a 20 20 20 28 32 29 20 41 6c 6c 20  **.**   (2) All 
26020 77 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 73  window functions
26030 20 69 6e 20 61 20 73 69 6e 67 6c 65 20 53 45 4c   in a single SEL
26040 45 43 54 20 66 6f 72 6d 20 61 20 6c 69 6e 6b 65  ECT form a linke
26050 64 2d 6c 69 73 74 0a 2a 2a 20 20 20 20 20 20 20  d-list.**       
26060 61 74 74 61 63 68 65 64 20 74 6f 20 53 65 6c 65  attached to Sele
26070 63 74 2e 70 57 69 6e 2e 20 20 54 68 65 20 57 69  ct.pWin.  The Wi
26080 6e 64 6f 77 2e 70 46 75 6e 63 20 61 6e 64 20 57  ndow.pFunc and W
26090 69 6e 64 6f 77 2e 70 45 78 70 72 0a 2a 2a 20 20  indow.pExpr.**  
260a0 20 20 20 20 20 66 69 65 6c 64 73 20 70 6f 69 6e       fields poin
260b0 74 20 62 61 63 6b 20 74 6f 20 74 68 65 20 65 78  t back to the ex
260c0 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73  pression that is
260d0 20 74 68 65 20 77 69 6e 64 6f 77 20 66 75 6e 63   the window func
260e0 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 20 20 28 33  tion..**.**   (3
260f0 29 20 54 68 65 20 74 65 72 6d 73 20 6f 66 20 74  ) The terms of t
26100 68 65 20 57 49 4e 44 4f 57 20 63 6c 61 75 73 65  he WINDOW clause
26110 20 6f 66 20 61 20 53 45 4c 45 43 54 20 61 72 65   of a SELECT are
26120 20 69 6e 73 74 61 6e 63 65 73 20 6f 66 20 74 68   instances of th
26130 69 73 0a 2a 2a 20 20 20 20 20 20 20 6f 62 6a 65  is.**       obje
26140 63 74 20 6f 6e 20 61 20 6c 69 6e 6b 65 64 20 6c  ct on a linked l
26150 69 73 74 20 61 74 74 61 63 68 65 64 20 74 6f 20  ist attached to 
26160 53 65 6c 65 63 74 2e 70 57 69 6e 44 65 66 6e 2e  Select.pWinDefn.
26170 0a 2a 2a 0a 2a 2a 20 54 68 65 20 75 73 65 73 20  .**.** The uses 
26180 28 31 29 20 61 6e 64 20 28 32 29 20 61 72 65 20  (1) and (2) are 
26190 72 65 61 6c 6c 79 20 74 68 65 20 73 61 6d 65 20  really the same 
261a0 57 69 6e 64 6f 77 20 6f 62 6a 65 63 74 20 74 68  Window object th
261b0 61 74 20 6a 75 73 74 20 68 61 70 70 65 6e 73 0a  at just happens.
261c0 2a 2a 20 74 6f 20 62 65 20 61 63 63 65 73 73 69  ** to be accessi
261d0 62 6c 65 20 69 6e 20 74 77 6f 20 64 69 66 66 65  ble in two diffe
261e0 72 65 6e 74 20 77 61 79 73 2e 20 20 55 73 65 20  rent ways.  Use 
261f0 28 33 29 20 69 73 20 61 72 65 20 73 65 70 61 72  (3) is are separ
26200 61 74 65 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a  ate objects..*/.
26210 73 74 72 75 63 74 20 57 69 6e 64 6f 77 20 7b 0a  struct Window {.
26220 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
26230 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
26240 65 20 6f 66 20 77 69 6e 64 6f 77 20 28 6d 61 79  e of window (may
26250 20 62 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 45   be NULL) */.  E
26260 78 70 72 4c 69 73 74 20 2a 70 50 61 72 74 69 74  xprList *pPartit
26270 69 6f 6e 3b 20 20 20 2f 2a 20 50 41 52 54 49 54  ion;   /* PARTIT
26280 49 4f 4e 20 42 59 20 63 6c 61 75 73 65 20 2a 2f  ION BY clause */
26290 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4f 72  .  ExprList *pOr
262a0 64 65 72 42 79 3b 20 20 20 20 20 2f 2a 20 4f 52  derBy;     /* OR
262b0 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 2a 2f  DER BY clause */
262c0 0a 20 20 75 38 20 65 54 79 70 65 3b 20 20 20 20  .  u8 eType;    
262d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b             /* TK
262e0 5f 52 41 4e 47 45 20 6f 72 20 54 4b 5f 52 4f 57  _RANGE or TK_ROW
262f0 53 20 2a 2f 0a 20 20 75 38 20 65 53 74 61 72 74  S */.  u8 eStart
26300 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
26310 2a 20 55 4e 42 4f 55 4e 44 45 44 2c 20 43 55 52  * UNBOUNDED, CUR
26320 52 45 4e 54 2c 20 50 52 45 43 45 44 49 4e 47 20  RENT, PRECEDING 
26330 6f 72 20 46 4f 4c 4c 4f 57 49 4e 47 20 2a 2f 0a  or FOLLOWING */.
26340 20 20 75 38 20 65 45 6e 64 3b 20 20 20 20 20 20    u8 eEnd;      
26350 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 4e 42            /* UNB
26360 4f 55 4e 44 45 44 2c 20 43 55 52 52 45 4e 54 2c  OUNDED, CURRENT,
26370 20 50 52 45 43 45 44 49 4e 47 20 6f 72 20 46 4f   PRECEDING or FO
26380 4c 4c 4f 57 49 4e 47 20 2a 2f 0a 20 20 45 78 70  LLOWING */.  Exp
26390 72 20 2a 70 53 74 61 72 74 3b 20 20 20 20 20 20  r *pStart;      
263a0 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69       /* Expressi
263b0 6f 6e 20 66 6f 72 20 22 3c 65 78 70 72 3e 20 50  on for "<expr> P
263c0 52 45 43 45 44 49 4e 47 22 20 2a 2f 0a 20 20 45  RECEDING" */.  E
263d0 78 70 72 20 2a 70 45 6e 64 3b 20 20 20 20 20 20  xpr *pEnd;      
263e0 20 20 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73         /* Expres
263f0 73 69 6f 6e 20 66 6f 72 20 22 3c 65 78 70 72 3e  sion for "<expr>
26400 20 46 4f 4c 4c 4f 57 49 4e 47 22 20 2a 2f 0a 20   FOLLOWING" */. 
26410 20 57 69 6e 64 6f 77 20 2a 70 4e 65 78 74 57 69   Window *pNextWi
26420 6e 3b 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74  n;       /* Next
26430 20 77 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e   window function
26440 20 62 65 6c 6f 6e 67 69 6e 67 20 74 6f 20 74 68   belonging to th
26450 69 73 20 53 45 4c 45 43 54 20 2a 2f 0a 20 20 45  is SELECT */.  E
26460 78 70 72 20 2a 70 46 69 6c 74 65 72 3b 20 20 20  xpr *pFilter;   
26470 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 46 49         /* The FI
26480 4c 54 45 52 20 65 78 70 72 65 73 73 69 6f 6e 20  LTER expression 
26490 2a 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a 70 46  */.  FuncDef *pF
264a0 75 6e 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  unc;         /* 
264b0 54 68 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  The function */.
264c0 20 20 69 6e 74 20 69 45 70 68 43 73 72 3b 20 20    int iEphCsr;  
264d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72            /* Par
264e0 74 69 74 69 6f 6e 20 62 75 66 66 65 72 20 6f 72  tition buffer or
264f0 20 50 65 65 72 20 62 75 66 66 65 72 20 2a 2f 0a   Peer buffer */.
26500 20 20 69 6e 74 20 72 65 67 41 63 63 75 6d 3b 0a    int regAccum;.
26510 20 20 69 6e 74 20 72 65 67 52 65 73 75 6c 74 3b    int regResult;
26520 0a 20 20 69 6e 74 20 63 73 72 41 70 70 3b 20 20  .  int csrApp;  
26530 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 75             /* Fu
26540 6e 63 74 69 6f 6e 20 63 75 72 73 6f 72 20 28 75  nction cursor (u
26550 73 65 64 20 62 79 20 6d 69 6e 2f 6d 61 78 29 20  sed by min/max) 
26560 2a 2f 0a 20 20 69 6e 74 20 72 65 67 41 70 70 3b  */.  int regApp;
26570 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
26580 46 75 6e 63 74 69 6f 6e 20 72 65 67 69 73 74 65  Function registe
26590 72 20 28 61 6c 73 6f 20 75 73 65 64 20 62 79 20  r (also used by 
265a0 6d 69 6e 2f 6d 61 78 29 20 2a 2f 0a 20 20 69 6e  min/max) */.  in
265b0 74 20 72 65 67 50 61 72 74 3b 20 20 20 20 20 20  t regPart;      
265c0 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 69        /* First i
265d0 6e 20 61 20 73 65 74 20 6f 66 20 72 65 67 69 73  n a set of regis
265e0 74 65 72 73 20 68 6f 6c 64 69 6e 67 20 50 41 52  ters holding PAR
265f0 54 49 54 49 4f 4e 20 42 59 0a 20 20 20 20 20 20  TITION BY.      
26600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26610 20 20 20 20 2a 2a 20 61 6e 64 20 4f 52 44 45 52      ** and ORDER
26620 20 42 59 20 76 61 6c 75 65 73 20 66 6f 72 20 74   BY values for t
26630 68 65 20 77 69 6e 64 6f 77 20 2a 2f 0a 20 20 45  he window */.  E
26640 78 70 72 20 2a 70 4f 77 6e 65 72 3b 20 20 20 20  xpr *pOwner;    
26650 20 20 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73         /* Expres
26660 73 69 6f 6e 20 6f 62 6a 65 63 74 20 74 68 69 73  sion object this
26670 20 77 69 6e 64 6f 77 20 69 73 20 61 74 74 61 63   window is attac
26680 68 65 64 20 74 6f 20 2a 2f 0a 20 20 69 6e 74 20  hed to */.  int 
26690 6e 42 75 66 66 65 72 43 6f 6c 3b 20 20 20 20 20  nBufferCol;     
266a0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
266b0 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 62 75 66 66   columns in buff
266c0 65 72 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e  er table */.  in
266d0 74 20 69 41 72 67 43 6f 6c 3b 20 20 20 20 20 20  t iArgCol;      
266e0 20 20 20 20 20 20 2f 2a 20 4f 66 66 73 65 74 20        /* Offset 
266f0 6f 66 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e  of first argumen
26700 74 20 66 6f 72 20 74 68 69 73 20 66 75 6e 63 74  t for this funct
26710 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 23 69 66 6e 64  ion */.};..#ifnd
26720 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
26730 49 4e 44 4f 57 46 55 4e 43 0a 76 6f 69 64 20 73  INDOWFUNC.void s
26740 71 6c 69 74 65 33 57 69 6e 64 6f 77 44 65 6c 65  qlite3WindowDele
26750 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 57 69 6e  te(sqlite3*, Win
26760 64 6f 77 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  dow*);.void sqli
26770 74 65 33 57 69 6e 64 6f 77 4c 69 73 74 44 65 6c  te3WindowListDel
26780 65 74 65 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  ete(sqlite3 *db,
26790 20 57 69 6e 64 6f 77 20 2a 70 29 3b 0a 57 69 6e   Window *p);.Win
267a0 64 6f 77 20 2a 73 71 6c 69 74 65 33 57 69 6e 64  dow *sqlite3Wind
267b0 6f 77 41 6c 6c 6f 63 28 50 61 72 73 65 2a 2c 20  owAlloc(Parse*, 
267c0 69 6e 74 2c 20 69 6e 74 2c 20 45 78 70 72 2a 2c  int, int, Expr*,
267d0 20 69 6e 74 20 2c 20 45 78 70 72 2a 29 3b 0a 76   int , Expr*);.v
267e0 6f 69 64 20 73 71 6c 69 74 65 33 57 69 6e 64 6f  oid sqlite3Windo
267f0 77 41 74 74 61 63 68 28 50 61 72 73 65 2a 2c 20  wAttach(Parse*, 
26800 45 78 70 72 2a 2c 20 57 69 6e 64 6f 77 2a 29 3b  Expr*, Window*);
26810 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 69 6e 64  .int sqlite3Wind
26820 6f 77 43 6f 6d 70 61 72 65 28 50 61 72 73 65 2a  owCompare(Parse*
26830 2c 20 57 69 6e 64 6f 77 2a 2c 20 57 69 6e 64 6f  , Window*, Windo
26840 77 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  w*);.void sqlite
26850 33 57 69 6e 64 6f 77 43 6f 64 65 49 6e 69 74 28  3WindowCodeInit(
26860 50 61 72 73 65 2a 2c 20 57 69 6e 64 6f 77 2a 29  Parse*, Window*)
26870 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69  ;.void sqlite3Wi
26880 6e 64 6f 77 43 6f 64 65 53 74 65 70 28 50 61 72  ndowCodeStep(Par
26890 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 57 68  se*, Select*, Wh
268a0 65 72 65 49 6e 66 6f 2a 2c 20 69 6e 74 2c 20 69  ereInfo*, int, i
268b0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
268c0 57 69 6e 64 6f 77 52 65 77 72 69 74 65 28 50 61  WindowRewrite(Pa
268d0 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  rse*, Select*);.
268e0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 61 6e  int sqlite3Expan
268f0 64 53 75 62 71 75 65 72 79 28 50 61 72 73 65 2a  dSubquery(Parse*
26900 2c 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74  , struct SrcList
26910 5f 69 74 65 6d 2a 29 3b 0a 76 6f 69 64 20 73 71  _item*);.void sq
26920 6c 69 74 65 33 57 69 6e 64 6f 77 55 70 64 61 74  lite3WindowUpdat
26930 65 28 50 61 72 73 65 2a 2c 20 57 69 6e 64 6f 77  e(Parse*, Window
26940 2a 2c 20 57 69 6e 64 6f 77 2a 2c 20 46 75 6e 63  *, Window*, Func
26950 44 65 66 2a 29 3b 0a 57 69 6e 64 6f 77 20 2a 73  Def*);.Window *s
26960 71 6c 69 74 65 33 57 69 6e 64 6f 77 44 75 70 28  qlite3WindowDup(
26970 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 45 78 70  sqlite3 *db, Exp
26980 72 20 2a 70 4f 77 6e 65 72 2c 20 57 69 6e 64 6f  r *pOwner, Windo
26990 77 20 2a 70 29 3b 0a 57 69 6e 64 6f 77 20 2a 73  w *p);.Window *s
269a0 71 6c 69 74 65 33 57 69 6e 64 6f 77 4c 69 73 74  qlite3WindowList
269b0 44 75 70 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  Dup(sqlite3 *db,
269c0 20 57 69 6e 64 6f 77 20 2a 70 29 3b 0a 76 6f 69   Window *p);.voi
269d0 64 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 46  d sqlite3WindowF
269e0 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a  unctions(void);.
269f0 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
26a00 71 6c 69 74 65 33 57 69 6e 64 6f 77 44 65 6c 65  qlite3WindowDele
26a10 74 65 28 61 2c 62 29 0a 23 20 64 65 66 69 6e 65  te(a,b).# define
26a20 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 46 75   sqlite3WindowFu
26a30 6e 63 74 69 6f 6e 73 28 29 0a 23 20 64 65 66 69  nctions().# defi
26a40 6e 65 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77  ne sqlite3Window
26a50 41 74 74 61 63 68 28 61 2c 62 2c 63 29 0a 23 65  Attach(a,b,c).#e
26a60 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 75  ndif../*.** Assu
26a70 6d 69 6e 67 20 7a 49 6e 20 70 6f 69 6e 74 73 20  ming zIn points 
26a80 74 6f 20 74 68 65 20 66 69 72 73 74 20 62 79 74  to the first byt
26a90 65 20 6f 66 20 61 20 55 54 46 2d 38 20 63 68 61  e of a UTF-8 cha
26aa0 72 61 63 74 65 72 2c 0a 2a 2a 20 61 64 76 61 6e  racter,.** advan
26ab0 63 65 20 7a 49 6e 20 74 6f 20 70 6f 69 6e 74 20  ce zIn to point 
26ac0 74 6f 20 74 68 65 20 66 69 72 73 74 20 62 79 74  to the first byt
26ad0 65 20 6f 66 20 74 68 65 20 6e 65 78 74 20 55 54  e of the next UT
26ae0 46 2d 38 20 63 68 61 72 61 63 74 65 72 2e 0a 2a  F-8 character..*
26af0 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
26b00 5f 53 4b 49 50 5f 55 54 46 38 28 7a 49 6e 29 20  _SKIP_UTF8(zIn) 
26b10 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
26b20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 69 66 28           \.  if(
26b30 20 28 2a 28 7a 49 6e 2b 2b 29 29 3e 3d 30 78 63   (*(zIn++))>=0xc
26b40 30 20 29 7b 20 20 20 20 20 20 20 20 20 20 20 20  0 ){            
26b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26b60 20 20 5c 0a 20 20 20 20 77 68 69 6c 65 28 20 28    \.    while( (
26b70 2a 7a 49 6e 20 26 20 30 78 63 30 29 3d 3d 30 78  *zIn & 0xc0)==0x
26b80 38 30 20 29 7b 20 7a 49 6e 2b 2b 3b 20 7d 20 20  80 ){ zIn++; }  
26b90 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 7d             \.  }
26ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26bd0 20 20 20 20 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54      \.}../*.** T
26be0 68 65 20 53 51 4c 49 54 45 5f 2a 5f 42 4b 50 54  he SQLITE_*_BKPT
26bf0 20 6d 61 63 72 6f 73 20 61 72 65 20 73 75 62 73   macros are subs
26c00 74 69 74 75 74 65 73 20 66 6f 72 20 74 68 65 20  titutes for the 
26c10 65 72 72 6f 72 20 63 6f 64 65 73 20 77 69 74 68  error codes with
26c20 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20 6e 61 6d  .** the same nam
26c30 65 20 62 75 74 20 77 69 74 68 6f 75 74 20 74 68  e but without th
26c40 65 20 5f 42 4b 50 54 20 73 75 66 66 69 78 2e 20  e _BKPT suffix. 
26c50 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 69 6e   These macros in
26c60 76 6f 6b 65 0a 2a 2a 20 72 6f 75 74 69 6e 65 73  voke.** routines
26c70 20 74 68 61 74 20 72 65 70 6f 72 74 20 74 68 65   that report the
26c80 20 6c 69 6e 65 2d 6e 75 6d 62 65 72 20 6f 6e 20   line-number on 
26c90 77 68 69 63 68 20 74 68 65 20 65 72 72 6f 72 20  which the error 
26ca0 6f 72 69 67 69 6e 61 74 65 64 0a 2a 2a 20 75 73  originated.** us
26cb0 69 6e 67 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28  ing sqlite3_log(
26cc0 29 2e 20 20 54 68 65 20 72 6f 75 74 69 6e 65 73  ).  The routines
26cd0 20 61 6c 73 6f 20 70 72 6f 76 69 64 65 20 61 20   also provide a 
26ce0 63 6f 6e 76 65 6e 69 65 6e 74 20 70 6c 61 63 65  convenient place
26cf0 0a 2a 2a 20 74 6f 20 73 65 74 20 61 20 64 65 62  .** to set a deb
26d00 75 67 67 65 72 20 62 72 65 61 6b 70 6f 69 6e 74  ugger breakpoint
26d10 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
26d20 52 65 70 6f 72 74 45 72 72 6f 72 28 69 6e 74 20  ReportError(int 
26d30 69 45 72 72 2c 20 69 6e 74 20 6c 69 6e 65 6e 6f  iErr, int lineno
26d40 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54  , const char *zT
26d50 79 70 65 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ype);.int sqlite
26d60 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28 69 6e  3CorruptError(in
26d70 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d  t);.int sqlite3M
26d80 69 73 75 73 65 45 72 72 6f 72 28 69 6e 74 29 3b  isuseError(int);
26d90 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 61 6e 74  .int sqlite3Cant
26da0 6f 70 65 6e 45 72 72 6f 72 28 69 6e 74 29 3b 0a  openError(int);.
26db0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43  #define SQLITE_C
26dc0 4f 52 52 55 50 54 5f 42 4b 50 54 20 73 71 6c 69  ORRUPT_BKPT sqli
26dd0 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28  te3CorruptError(
26de0 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e  __LINE__).#defin
26df0 65 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f  e SQLITE_MISUSE_
26e00 42 4b 50 54 20 73 71 6c 69 74 65 33 4d 69 73 75  BKPT sqlite3Misu
26e10 73 65 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f  seError(__LINE__
26e20 29 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  ).#define SQLITE
26e30 5f 43 41 4e 54 4f 50 45 4e 5f 42 4b 50 54 20 73  _CANTOPEN_BKPT s
26e40 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e 45 72  qlite3CantopenEr
26e50 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 69  ror(__LINE__).#i
26e60 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
26e70 47 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4e  G.  int sqlite3N
26e80 6f 6d 65 6d 45 72 72 6f 72 28 69 6e 74 29 3b 0a  omemError(int);.
26e90 20 20 69 6e 74 20 73 71 6c 69 74 65 33 49 6f 65    int sqlite3Ioe
26ea0 72 72 6e 6f 6d 65 6d 45 72 72 6f 72 28 69 6e 74  rrnomemError(int
26eb0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
26ec0 43 6f 72 72 75 70 74 50 67 6e 6f 45 72 72 6f 72  CorruptPgnoError
26ed0 28 69 6e 74 2c 50 67 6e 6f 29 3b 0a 23 20 64 65  (int,Pgno);.# de
26ee0 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 4d 45  fine SQLITE_NOME
26ef0 4d 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 4e 6f  M_BKPT sqlite3No
26f00 6d 65 6d 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f  memError(__LINE_
26f10 5f 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  _).# define SQLI
26f20 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 5f 42  TE_IOERR_NOMEM_B
26f30 4b 50 54 20 73 71 6c 69 74 65 33 49 6f 65 72 72  KPT sqlite3Ioerr
26f40 6e 6f 6d 65 6d 45 72 72 6f 72 28 5f 5f 4c 49 4e  nomemError(__LIN
26f50 45 5f 5f 29 0a 23 20 64 65 66 69 6e 65 20 53 51  E__).# define SQ
26f60 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 50 47 4e  LITE_CORRUPT_PGN
26f70 4f 28 50 29 20 73 71 6c 69 74 65 33 43 6f 72 72  O(P) sqlite3Corr
26f80 75 70 74 50 67 6e 6f 45 72 72 6f 72 28 5f 5f 4c  uptPgnoError(__L
26f90 49 4e 45 5f 5f 2c 28 50 29 29 0a 23 65 6c 73 65  INE__,(P)).#else
26fa0 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
26fb0 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20 53 51 4c 49  _NOMEM_BKPT SQLI
26fc0 54 45 5f 4e 4f 4d 45 4d 0a 23 20 64 65 66 69 6e  TE_NOMEM.# defin
26fd0 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e  e SQLITE_IOERR_N
26fe0 4f 4d 45 4d 5f 42 4b 50 54 20 53 51 4c 49 54 45  OMEM_BKPT SQLITE
26ff0 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 0a 23 20 64  _IOERR_NOMEM.# d
27000 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52  efine SQLITE_COR
27010 52 55 50 54 5f 50 47 4e 4f 28 50 29 20 73 71 6c  RUPT_PGNO(P) sql
27020 69 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72  ite3CorruptError
27030 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 65 6e 64 69  (__LINE__).#endi
27040 66 0a 0a 2f 2a 0a 2a 2a 20 46 54 53 33 20 61 6e  f../*.** FTS3 an
27050 64 20 46 54 53 34 20 62 6f 74 68 20 72 65 71 75  d FTS4 both requ
27060 69 72 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  ire virtual tabl
27070 65 20 73 75 70 70 6f 72 74 0a 2a 2f 0a 23 69 66  e support.*/.#if
27080 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
27090 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
270a0 45 29 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54  E).# undef SQLIT
270b0 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 0a 23 20  E_ENABLE_FTS3.# 
270c0 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  undef SQLITE_ENA
270d0 42 4c 45 5f 46 54 53 34 0a 23 65 6e 64 69 66 0a  BLE_FTS4.#endif.
270e0 0a 2f 2a 0a 2a 2a 20 46 54 53 34 20 69 73 20 72  ./*.** FTS4 is r
270f0 65 61 6c 6c 79 20 61 6e 20 65 78 74 65 6e 73 69  eally an extensi
27100 6f 6e 20 66 6f 72 20 46 54 53 33 2e 20 20 49 74  on for FTS3.  It
27110 20 69 73 20 65 6e 61 62 6c 65 64 20 75 73 69 6e   is enabled usin
27120 67 20 74 68 65 0a 2a 2a 20 53 51 4c 49 54 45 5f  g the.** SQLITE_
27130 45 4e 41 42 4c 45 5f 46 54 53 33 20 6d 61 63 72  ENABLE_FTS3 macr
27140 6f 2e 20 20 42 75 74 20 74 6f 20 61 76 6f 69 64  o.  But to avoid
27150 20 63 6f 6e 66 75 73 69 6f 6e 20 77 65 20 61 6c   confusion we al
27160 73 6f 20 63 61 6c 6c 0a 2a 2a 20 74 68 65 20 53  so call.** the S
27170 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
27180 34 20 6d 61 63 72 6f 20 74 6f 20 73 65 72 76 65  4 macro to serve
27190 20 61 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72   as an alias for
271a0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46   SQLITE_ENABLE_F
271b0 54 53 33 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69  TS3..*/.#if defi
271c0 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
271d0 45 5f 46 54 53 34 29 20 26 26 20 21 64 65 66 69  E_FTS4) && !defi
271e0 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
271f0 45 5f 46 54 53 33 29 0a 23 20 64 65 66 69 6e 65  E_FTS3).# define
27200 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46   SQLITE_ENABLE_F
27210 54 53 33 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a  TS3 1.#endif../*
27220 0a 2a 2a 20 54 68 65 20 63 74 79 70 65 2e 68 20  .** The ctype.h 
27230 68 65 61 64 65 72 20 69 73 20 6e 65 65 64 65 64  header is needed
27240 20 66 6f 72 20 6e 6f 6e 2d 41 53 43 49 49 20 73   for non-ASCII s
27250 79 73 74 65 6d 73 2e 20 20 49 74 20 69 73 20 61  ystems.  It is a
27260 6c 73 6f 0a 2a 2a 20 6e 65 65 64 65 64 20 62 79  lso.** needed by
27270 20 46 54 53 33 20 77 68 65 6e 20 46 54 53 33 20   FTS3 when FTS3 
27280 69 73 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 74  is included in t
27290 68 65 20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 2e  he amalgamation.
272a0 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .*/.#if !defined
272b0 28 53 51 4c 49 54 45 5f 41 53 43 49 49 29 20 7c  (SQLITE_ASCII) |
272c0 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64  | \.    (defined
272d0 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46  (SQLITE_ENABLE_F
272e0 54 53 33 29 20 26 26 20 64 65 66 69 6e 65 64 28  TS3) && defined(
272f0 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54  SQLITE_AMALGAMAT
27300 49 4f 4e 29 29 0a 23 20 69 6e 63 6c 75 64 65 20  ION)).# include 
27310 3c 63 74 79 70 65 2e 68 3e 0a 23 65 6e 64 69 66  <ctype.h>.#endif
27320 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
27330 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 6d 69 6d  owing macros mim
27340 69 63 20 74 68 65 20 73 74 61 6e 64 61 72 64 20  ic the standard 
27350 6c 69 62 72 61 72 79 20 66 75 6e 63 74 69 6f 6e  library function
27360 73 20 74 6f 75 70 70 65 72 28 29 2c 0a 2a 2a 20  s toupper(),.** 
27370 69 73 73 70 61 63 65 28 29 2c 20 69 73 61 6c 6e  isspace(), isaln
27380 75 6d 28 29 2c 20 69 73 64 69 67 69 74 28 29 20  um(), isdigit() 
27390 61 6e 64 20 69 73 78 64 69 67 69 74 28 29 2c 20  and isxdigit(), 
273a0 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 54 68  respectively. Th
273b0 65 0a 2a 2a 20 73 71 6c 69 74 65 20 76 65 72 73  e.** sqlite vers
273c0 69 6f 6e 73 20 6f 6e 6c 79 20 77 6f 72 6b 20 66  ions only work f
273d0 6f 72 20 41 53 43 49 49 20 63 68 61 72 61 63 74  or ASCII charact
273e0 65 72 73 2c 20 72 65 67 61 72 64 6c 65 73 73 20  ers, regardless 
273f0 6f 66 20 6c 6f 63 61 6c 65 2e 0a 2a 2f 0a 23 69  of locale..*/.#i
27400 66 64 65 66 20 53 51 4c 49 54 45 5f 41 53 43 49  fdef SQLITE_ASCI
27410 49 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  I.# define sqlit
27420 65 33 54 6f 75 70 70 65 72 28 78 29 20 20 28 28  e3Toupper(x)  ((
27430 78 29 26 7e 28 73 71 6c 69 74 65 33 43 74 79 70  x)&~(sqlite3Ctyp
27440 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
27450 68 61 72 29 28 78 29 5d 26 30 78 32 30 29 29 0a  har)(x)]&0x20)).
27460 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
27470 49 73 73 70 61 63 65 28 78 29 20 20 20 28 73 71  Isspace(x)   (sq
27480 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75  lite3CtypeMap[(u
27490 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
274a0 5d 26 30 78 30 31 29 0a 23 20 64 65 66 69 6e 65  ]&0x01).# define
274b0 20 73 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28   sqlite3Isalnum(
274c0 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79  x)   (sqlite3Cty
274d0 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20  peMap[(unsigned 
274e0 63 68 61 72 29 28 78 29 5d 26 30 78 30 36 29 0a  char)(x)]&0x06).
274f0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
27500 49 73 61 6c 70 68 61 28 78 29 20 20 20 28 73 71  Isalpha(x)   (sq
27510 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75  lite3CtypeMap[(u
27520 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
27530 5d 26 30 78 30 32 29 0a 23 20 64 65 66 69 6e 65  ]&0x02).# define
27540 20 73 71 6c 69 74 65 33 49 73 64 69 67 69 74 28   sqlite3Isdigit(
27550 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79  x)   (sqlite3Cty
27560 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20  peMap[(unsigned 
27570 63 68 61 72 29 28 78 29 5d 26 30 78 30 34 29 0a  char)(x)]&0x04).
27580 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
27590 49 73 78 64 69 67 69 74 28 78 29 20 20 28 73 71  Isxdigit(x)  (sq
275a0 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75  lite3CtypeMap[(u
275b0 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
275c0 5d 26 30 78 30 38 29 0a 23 20 64 65 66 69 6e 65  ]&0x08).# define
275d0 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28   sqlite3Tolower(
275e0 78 29 20 20 20 28 73 71 6c 69 74 65 33 55 70 70  x)   (sqlite3Upp
275f0 65 72 54 6f 4c 6f 77 65 72 5b 28 75 6e 73 69 67  erToLower[(unsig
27600 6e 65 64 20 63 68 61 72 29 28 78 29 5d 29 0a 23  ned char)(x)]).#
27610 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
27620 73 71 75 6f 74 65 28 78 29 20 20 20 28 73 71 6c  squote(x)   (sql
27630 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
27640 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
27650 26 30 78 38 30 29 0a 23 65 6c 73 65 0a 23 20 64  &0x80).#else.# d
27660 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 75  efine sqlite3Tou
27670 70 70 65 72 28 78 29 20 20 20 74 6f 75 70 70 65  pper(x)   touppe
27680 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  r((unsigned char
27690 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
276a0 71 6c 69 74 65 33 49 73 73 70 61 63 65 28 78 29  qlite3Isspace(x)
276b0 20 20 20 69 73 73 70 61 63 65 28 28 75 6e 73 69     isspace((unsi
276c0 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
276d0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
276e0 73 61 6c 6e 75 6d 28 78 29 20 20 20 69 73 61 6c  salnum(x)   isal
276f0 6e 75 6d 28 28 75 6e 73 69 67 6e 65 64 20 63 68  num((unsigned ch
27700 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65  ar)(x)).# define
27710 20 73 71 6c 69 74 65 33 49 73 61 6c 70 68 61 28   sqlite3Isalpha(
27720 78 29 20 20 20 69 73 61 6c 70 68 61 28 28 75 6e  x)   isalpha((un
27730 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29  signed char)(x))
27740 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
27750 33 49 73 64 69 67 69 74 28 78 29 20 20 20 69 73  3Isdigit(x)   is
27760 64 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64 20  digit((unsigned 
27770 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69  char)(x)).# defi
27780 6e 65 20 73 71 6c 69 74 65 33 49 73 78 64 69 67  ne sqlite3Isxdig
27790 69 74 28 78 29 20 20 69 73 78 64 69 67 69 74 28  it(x)  isxdigit(
277a0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
277b0 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  x)).# define sql
277c0 69 74 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20  ite3Tolower(x)  
277d0 20 74 6f 6c 6f 77 65 72 28 28 75 6e 73 69 67 6e   tolower((unsign
277e0 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64  ed char)(x)).# d
277f0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 71  efine sqlite3Isq
27800 75 6f 74 65 28 78 29 20 20 20 28 28 78 29 3d 3d  uote(x)   ((x)==
27810 27 22 27 7c 7c 28 78 29 3d 3d 27 5c 27 27 7c 7c  '"'||(x)=='\''||
27820 28 78 29 3d 3d 27 5b 27 7c 7c 28 78 29 3d 3d 27  (x)=='['||(x)=='
27830 60 27 29 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73  `').#endif.int s
27840 71 6c 69 74 65 33 49 73 49 64 43 68 61 72 28 75  qlite3IsIdChar(u
27850 38 29 3b 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72  8);../*.** Inter
27860 6e 61 6c 20 66 75 6e 63 74 69 6f 6e 20 70 72 6f  nal function pro
27870 74 6f 74 79 70 65 73 0a 2a 2f 0a 69 6e 74 20 73  totypes.*/.int s
27880 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 63 6f  qlite3StrICmp(co
27890 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
278a0 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  char*);.int sqli
278b0 74 65 33 53 74 72 6c 65 6e 33 30 28 63 6f 6e 73  te3Strlen30(cons
278c0 74 20 63 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e  t char*);.#defin
278d0 65 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  e sqlite3Strlen3
278e0 30 4e 4e 28 43 29 20 28 73 74 72 6c 65 6e 28 43  0NN(C) (strlen(C
278f0 29 26 30 78 33 66 66 66 66 66 66 66 29 0a 63 68  )&0x3fffffff).ch
27900 61 72 20 2a 73 71 6c 69 74 65 33 43 6f 6c 75 6d  ar *sqlite3Colum
27910 6e 54 79 70 65 28 43 6f 6c 75 6d 6e 2a 2c 63 68  nType(Column*,ch
27920 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65 20 73 71  ar*);.#define sq
27930 6c 69 74 65 33 53 74 72 4e 49 43 6d 70 20 73 71  lite3StrNICmp sq
27940 6c 69 74 65 33 5f 73 74 72 6e 69 63 6d 70 0a 0a  lite3_strnicmp..
27950 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  int sqlite3Mallo
27960 63 49 6e 69 74 28 76 6f 69 64 29 3b 0a 76 6f 69  cInit(void);.voi
27970 64 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 45  d sqlite3MallocE
27980 6e 64 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 2a  nd(void);.void *
27990 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 28 75 36  sqlite3Malloc(u6
279a0 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  4);.void *sqlite
279b0 33 4d 61 6c 6c 6f 63 5a 65 72 6f 28 75 36 34 29  3MallocZero(u64)
279c0 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44  ;.void *sqlite3D
279d0 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 73 71 6c 69  bMallocZero(sqli
279e0 74 65 33 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64  te3*, u64);.void
279f0 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f   *sqlite3DbMallo
27a00 63 52 61 77 28 73 71 6c 69 74 65 33 2a 2c 20 75  cRaw(sqlite3*, u
27a10 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  64);.void *sqlit
27a20 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 4e 4e 28  e3DbMallocRawNN(
27a30 73 71 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a  sqlite3*, u64);.
27a40 63 68 61 72 20 2a 73 71 6c 69 74 65 33 44 62 53  char *sqlite3DbS
27a50 74 72 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 63  trDup(sqlite3*,c
27a60 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68 61  onst char*);.cha
27a70 72 20 2a 73 71 6c 69 74 65 33 44 62 53 74 72 4e  r *sqlite3DbStrN
27a80 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  Dup(sqlite3*,con
27a90 73 74 20 63 68 61 72 2a 2c 20 75 36 34 29 3b 0a  st char*, u64);.
27aa0 63 68 61 72 20 2a 73 71 6c 69 74 65 33 44 62 53  char *sqlite3DbS
27ab0 70 61 6e 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  panDup(sqlite3*,
27ac0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
27ad0 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 2a  t char*);.void *
27ae0 73 71 6c 69 74 65 33 52 65 61 6c 6c 6f 63 28 76  sqlite3Realloc(v
27af0 6f 69 64 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64  oid*, u64);.void
27b00 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c   *sqlite3DbReall
27b10 6f 63 4f 72 46 72 65 65 28 73 71 6c 69 74 65 33  ocOrFree(sqlite3
27b20 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 75 36 34 29   *, void *, u64)
27b30 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44  ;.void *sqlite3D
27b40 62 52 65 61 6c 6c 6f 63 28 73 71 6c 69 74 65 33  bRealloc(sqlite3
27b50 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 75 36 34 29   *, void *, u64)
27b60 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 62  ;.void sqlite3Db
27b70 46 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 20 76  Free(sqlite3*, v
27b80 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  oid*);.void sqli
27b90 74 65 33 44 62 46 72 65 65 4e 4e 28 73 71 6c 69  te3DbFreeNN(sqli
27ba0 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 69 6e  te3*, void*);.in
27bb0 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 53  t sqlite3MallocS
27bc0 69 7a 65 28 76 6f 69 64 2a 29 3b 0a 69 6e 74 20  ize(void*);.int 
27bd0 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 53  sqlite3DbMallocS
27be0 69 7a 65 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f  ize(sqlite3*, vo
27bf0 69 64 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  id*);.void *sqli
27c00 74 65 33 50 61 67 65 4d 61 6c 6c 6f 63 28 69 6e  te3PageMalloc(in
27c10 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
27c20 50 61 67 65 46 72 65 65 28 76 6f 69 64 2a 29 3b  PageFree(void*);
27c30 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d  .void sqlite3Mem
27c40 53 65 74 44 65 66 61 75 6c 74 28 76 6f 69 64 29  SetDefault(void)
27c50 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
27c60 5f 55 4e 54 45 53 54 41 42 4c 45 0a 76 6f 69 64  _UNTESTABLE.void
27c70 20 73 71 6c 69 74 65 33 42 65 6e 69 67 6e 4d 61   sqlite3BenignMa
27c80 6c 6c 6f 63 48 6f 6f 6b 73 28 76 6f 69 64 20 28  llocHooks(void (
27c90 2a 29 28 76 6f 69 64 29 2c 20 76 6f 69 64 20 28  *)(void), void (
27ca0 2a 29 28 76 6f 69 64 29 29 3b 0a 23 65 6e 64 69  *)(void));.#endi
27cb0 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 48 65 61  f.int sqlite3Hea
27cc0 70 4e 65 61 72 6c 79 46 75 6c 6c 28 76 6f 69 64  pNearlyFull(void
27cd0 29 3b 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 20 73 79 73  );../*.** On sys
27ce0 74 65 6d 73 20 77 69 74 68 20 61 6d 70 6c 65 20  tems with ample 
27cf0 73 74 61 63 6b 20 73 70 61 63 65 20 61 6e 64 20  stack space and 
27d00 74 68 61 74 20 73 75 70 70 6f 72 74 20 61 6c 6c  that support all
27d10 6f 63 61 28 29 2c 20 6d 61 6b 65 0a 2a 2a 20 75  oca(), make.** u
27d20 73 65 20 6f 66 20 61 6c 6c 6f 63 61 28 29 20 74  se of alloca() t
27d30 6f 20 6f 62 74 61 69 6e 20 73 70 61 63 65 20 66  o obtain space f
27d40 6f 72 20 6c 61 72 67 65 20 61 75 74 6f 6d 61 74  or large automat
27d50 69 63 20 6f 62 6a 65 63 74 73 2e 20 20 42 79 20  ic objects.  By 
27d60 64 65 66 61 75 6c 74 2c 0a 2a 2a 20 6f 62 74 61  default,.** obta
27d70 69 6e 20 73 70 61 63 65 20 66 72 6f 6d 20 6d 61  in space from ma
27d80 6c 6c 6f 63 28 29 2e 0a 2a 2a 0a 2a 2a 20 54 68  lloc()..**.** Th
27d90 65 20 61 6c 6c 6f 63 61 28 29 20 72 6f 75 74 69  e alloca() routi
27da0 6e 65 20 6e 65 76 65 72 20 72 65 74 75 72 6e 73  ne never returns
27db0 20 4e 55 4c 4c 2e 20 20 54 68 69 73 20 77 69 6c   NULL.  This wil
27dc0 6c 20 63 61 75 73 65 20 63 6f 64 65 20 70 61 74  l cause code pat
27dd0 68 73 0a 2a 2a 20 74 68 61 74 20 64 65 61 6c 20  hs.** that deal 
27de0 77 69 74 68 20 73 71 6c 69 74 65 33 53 74 61 63  with sqlite3Stac
27df0 6b 41 6c 6c 6f 63 28 29 20 66 61 69 6c 75 72 65  kAlloc() failure
27e00 73 20 74 6f 20 62 65 20 75 6e 72 65 61 63 68 61  s to be unreacha
27e10 62 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ble..*/.#ifdef S
27e20 51 4c 49 54 45 5f 55 53 45 5f 41 4c 4c 4f 43 41  QLITE_USE_ALLOCA
27e30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
27e40 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44  3StackAllocRaw(D
27e50 2c 4e 29 20 20 20 61 6c 6c 6f 63 61 28 4e 29 0a  ,N)   alloca(N).
27e60 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
27e70 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44  StackAllocZero(D
27e80 2c 4e 29 20 20 6d 65 6d 73 65 74 28 61 6c 6c 6f  ,N)  memset(allo
27e90 63 61 28 4e 29 2c 20 30 2c 20 4e 29 0a 23 20 64  ca(N), 0, N).# d
27ea0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
27eb0 63 6b 46 72 65 65 28 44 2c 50 29 0a 23 65 6c 73  ckFree(D,P).#els
27ec0 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
27ed0 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28  e3StackAllocRaw(
27ee0 44 2c 4e 29 20 20 20 73 71 6c 69 74 65 33 44 62  D,N)   sqlite3Db
27ef0 4d 61 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 0a 23  MallocRaw(D,N).#
27f00 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53   define sqlite3S
27f10 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c  tackAllocZero(D,
27f20 4e 29 20 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  N)  sqlite3DbMal
27f30 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 0a 23 20 64  locZero(D,N).# d
27f40 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
27f50 63 6b 46 72 65 65 28 44 2c 50 29 20 20 20 20 20  ckFree(D,P)     
27f60 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
27f70 44 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20  D,P).#endif../* 
27f80 44 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 62 6f 74  Do not allow bot
27f90 68 20 4d 45 4d 53 59 53 35 20 61 6e 64 20 4d 45  h MEMSYS5 and ME
27fa0 4d 53 59 53 33 20 74 6f 20 62 65 20 64 65 66 69  MSYS3 to be defi
27fb0 6e 65 64 20 74 6f 67 65 74 68 65 72 2e 20 20 49  ned together.  I
27fc0 66 20 74 68 65 79 0a 2a 2a 20 61 72 65 2c 20 64  f they.** are, d
27fd0 69 73 61 62 6c 65 20 4d 45 4d 53 59 53 33 0a 2a  isable MEMSYS3.*
27fe0 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
27ff0 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 35 0a 63  ENABLE_MEMSYS5.c
28000 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d  onst sqlite3_mem
28010 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69 74 65  _methods *sqlite
28020 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73 35 28 76  3MemGetMemsys5(v
28030 6f 69 64 29 3b 0a 23 75 6e 64 65 66 20 53 51 4c  oid);.#undef SQL
28040 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59  ITE_ENABLE_MEMSY
28050 53 33 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66  S3.#endif.#ifdef
28060 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d   SQLITE_ENABLE_M
28070 45 4d 53 59 53 33 0a 63 6f 6e 73 74 20 73 71 6c  EMSYS3.const sql
28080 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73  ite3_mem_methods
28090 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d   *sqlite3MemGetM
280a0 65 6d 73 79 73 33 28 76 6f 69 64 29 3b 0a 23 65  emsys3(void);.#e
280b0 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20 53  ndif...#ifndef S
280c0 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d 49 54  QLITE_MUTEX_OMIT
280d0 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
280e0 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a  _methods const *
280f0 73 71 6c 69 74 65 33 44 65 66 61 75 6c 74 4d 75  sqlite3DefaultMu
28100 74 65 78 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c  tex(void);.  sql
28110 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f  ite3_mutex_metho
28120 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65  ds const *sqlite
28130 33 4e 6f 6f 70 4d 75 74 65 78 28 76 6f 69 64 29  3NoopMutex(void)
28140 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  ;.  sqlite3_mute
28150 78 20 2a 73 71 6c 69 74 65 33 4d 75 74 65 78 41  x *sqlite3MutexA
28160 6c 6c 6f 63 28 69 6e 74 29 3b 0a 20 20 69 6e 74  lloc(int);.  int
28170 20 73 71 6c 69 74 65 33 4d 75 74 65 78 49 6e 69   sqlite3MutexIni
28180 74 28 76 6f 69 64 29 3b 0a 20 20 69 6e 74 20 73  t(void);.  int s
28190 71 6c 69 74 65 33 4d 75 74 65 78 45 6e 64 28 76  qlite3MutexEnd(v
281a0 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66  oid);.#endif.#if
281b0 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
281c0 5f 4d 55 54 45 58 5f 4f 4d 49 54 29 20 26 26 20  _MUTEX_OMIT) && 
281d0 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
281e0 4d 55 54 45 58 5f 4e 4f 4f 50 29 0a 20 20 76 6f  MUTEX_NOOP).  vo
281f0 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 6f 72 79  id sqlite3Memory
28200 42 61 72 72 69 65 72 28 76 6f 69 64 29 3b 0a 23  Barrier(void);.#
28210 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
28220 6c 69 74 65 33 4d 65 6d 6f 72 79 42 61 72 72 69  lite3MemoryBarri
28230 65 72 28 29 0a 23 65 6e 64 69 66 0a 0a 73 71 6c  er().#endif..sql
28240 69 74 65 33 5f 69 6e 74 36 34 20 73 71 6c 69 74  ite3_int64 sqlit
28250 65 33 53 74 61 74 75 73 56 61 6c 75 65 28 69 6e  e3StatusValue(in
28260 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
28270 53 74 61 74 75 73 55 70 28 69 6e 74 2c 20 69 6e  StatusUp(int, in
28280 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
28290 53 74 61 74 75 73 44 6f 77 6e 28 69 6e 74 2c 20  StatusDown(int, 
282a0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
282b0 65 33 53 74 61 74 75 73 48 69 67 68 77 61 74 65  e3StatusHighwate
282c0 72 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74  r(int, int);.int
282d0 20 73 71 6c 69 74 65 33 4c 6f 6f 6b 61 73 69 64   sqlite3Lookasid
282e0 65 55 73 65 64 28 73 71 6c 69 74 65 33 2a 2c 69  eUsed(sqlite3*,i
282f0 6e 74 2a 29 3b 0a 0a 2f 2a 20 41 63 63 65 73 73  nt*);../* Access
28300 20 74 6f 20 6d 75 74 65 78 65 73 20 75 73 65 64   to mutexes used
28310 20 62 79 20 73 71 6c 69 74 65 33 5f 73 74 61 74   by sqlite3_stat
28320 75 73 28 29 20 2a 2f 0a 73 71 6c 69 74 65 33 5f  us() */.sqlite3_
28330 6d 75 74 65 78 20 2a 73 71 6c 69 74 65 33 50 63  mutex *sqlite3Pc
28340 61 63 68 65 31 4d 75 74 65 78 28 76 6f 69 64 29  ache1Mutex(void)
28350 3b 0a 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20  ;.sqlite3_mutex 
28360 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 4d 75  *sqlite3MallocMu
28370 74 65 78 28 76 6f 69 64 29 3b 0a 0a 23 69 66 20  tex(void);..#if 
28380 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
28390 4e 41 42 4c 45 5f 4d 55 4c 54 49 54 48 52 45 41  NABLE_MULTITHREA
283a0 44 45 44 5f 43 48 45 43 4b 53 29 20 26 26 20 21  DED_CHECKS) && !
283b0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d  defined(SQLITE_M
283c0 55 54 45 58 5f 4f 4d 49 54 29 0a 76 6f 69 64 20  UTEX_OMIT).void 
283d0 73 71 6c 69 74 65 33 4d 75 74 65 78 57 61 72 6e  sqlite3MutexWarn
283e0 4f 6e 43 6f 6e 74 65 6e 74 69 6f 6e 28 73 71 6c  OnContention(sql
283f0 69 74 65 33 5f 6d 75 74 65 78 2a 29 3b 0a 23 65  ite3_mutex*);.#e
28400 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
28410 69 74 65 33 4d 75 74 65 78 57 61 72 6e 4f 6e 43  ite3MutexWarnOnC
28420 6f 6e 74 65 6e 74 69 6f 6e 28 78 29 0a 23 65 6e  ontention(x).#en
28430 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  dif..#ifndef SQL
28440 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
28450 47 5f 50 4f 49 4e 54 0a 20 20 69 6e 74 20 73 71  G_POINT.  int sq
28460 6c 69 74 65 33 49 73 4e 61 4e 28 64 6f 75 62 6c  lite3IsNaN(doubl
28470 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  e);.#else.# defi
28480 6e 65 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28  ne sqlite3IsNaN(
28490 58 29 20 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  X)  0.#endif../*
284a0 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
284b0 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
284c0 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73   structure holds
284d0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
284e0 75 74 20 53 51 4c 0a 2a 2a 20 66 75 6e 63 74 69  ut SQL.** functi
284f0 6f 6e 73 20 61 72 67 75 6d 65 6e 74 73 20 74 68  ons arguments th
28500 61 74 20 61 72 65 20 74 68 65 20 70 61 72 61 6d  at are the param
28510 65 74 65 72 73 20 74 6f 20 74 68 65 20 70 72 69  eters to the pri
28520 6e 74 66 28 29 20 66 75 6e 63 74 69 6f 6e 2e 0a  ntf() function..
28530 2a 2f 0a 73 74 72 75 63 74 20 50 72 69 6e 74 66  */.struct Printf
28540 41 72 67 75 6d 65 6e 74 73 20 7b 0a 20 20 69 6e  Arguments {.  in
28550 74 20 6e 41 72 67 3b 20 20 20 20 20 20 20 20 20  t nArg;         
28560 20 20 20 20 20 20 20 2f 2a 20 54 6f 74 61 6c 20         /* Total 
28570 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  number of argume
28580 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 55 73  nts */.  int nUs
28590 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ed;             
285a0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
285b0 72 67 75 6d 65 6e 74 73 20 75 73 65 64 20 73 6f  rguments used so
285c0 20 66 61 72 20 2a 2f 0a 20 20 73 71 6c 69 74 65   far */.  sqlite
285d0 33 5f 76 61 6c 75 65 20 2a 2a 61 70 41 72 67 3b  3_value **apArg;
285e0 20 20 20 2f 2a 20 54 68 65 20 61 72 67 75 6d 65     /* The argume
285f0 6e 74 20 76 61 6c 75 65 73 20 2a 2f 0a 7d 3b 0a  nt values */.};.
28600 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4d 50  .char *sqlite3MP
28610 72 69 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c 63  rintf(sqlite3*,c
28620 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29  onst char*, ...)
28630 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 56  ;.char *sqlite3V
28640 4d 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33 2a  MPrintf(sqlite3*
28650 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 76 61  ,const char*, va
28660 5f 6c 69 73 74 29 3b 0a 23 69 66 20 64 65 66 69  _list);.#if defi
28670 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
28680 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c  ) || defined(SQL
28690 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41 43  ITE_HAVE_OS_TRAC
286a0 45 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  E).  void sqlite
286b0 33 44 65 62 75 67 50 72 69 6e 74 66 28 63 6f 6e  3DebugPrintf(con
286c0 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a  st char*, ...);.
286d0 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e  #endif.#if defin
286e0 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a  ed(SQLITE_TEST).
286f0 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 54    void *sqlite3T
28700 65 73 74 54 65 78 74 54 6f 50 74 72 28 63 6f 6e  estTextToPtr(con
28710 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69  st char*);.#endi
28720 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  f..#if defined(S
28730 51 4c 49 54 45 5f 44 45 42 55 47 29 0a 20 20 76  QLITE_DEBUG).  v
28740 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56  oid sqlite3TreeV
28750 69 65 77 45 78 70 72 28 54 72 65 65 56 69 65 77  iewExpr(TreeView
28760 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20  *, const Expr*, 
28770 75 38 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  u8);.  void sqli
28780 74 65 33 54 72 65 65 56 69 65 77 42 61 72 65 45  te3TreeViewBareE
28790 78 70 72 4c 69 73 74 28 54 72 65 65 56 69 65 77  xprList(TreeView
287a0 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72 4c 69 73  *, const ExprLis
287b0 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  t*, const char*)
287c0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
287d0 54 72 65 65 56 69 65 77 45 78 70 72 4c 69 73 74  TreeViewExprList
287e0 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73  (TreeView*, cons
287f0 74 20 45 78 70 72 4c 69 73 74 2a 2c 20 75 38 2c  t ExprList*, u8,
28800 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20   const char*);. 
28810 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65   void sqlite3Tre
28820 65 56 69 65 77 53 65 6c 65 63 74 28 54 72 65 65  eViewSelect(Tree
28830 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 53 65 6c  View*, const Sel
28840 65 63 74 2a 2c 20 75 38 29 3b 0a 20 20 76 6f 69  ect*, u8);.  voi
28850 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65  d sqlite3TreeVie
28860 77 57 69 74 68 28 54 72 65 65 56 69 65 77 2a 2c  wWith(TreeView*,
28870 20 63 6f 6e 73 74 20 57 69 74 68 2a 2c 20 75 38   const With*, u8
28880 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
28890 45 5f 4f 4d 49 54 5f 57 49 4e 44 4f 57 46 55 4e  E_OMIT_WINDOWFUN
288a0 43 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  C.  void sqlite3
288b0 54 72 65 65 56 69 65 77 57 69 6e 64 6f 77 28 54  TreeViewWindow(T
288c0 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20  reeView*, const 
288d0 57 69 6e 64 6f 77 2a 2c 20 75 38 29 3b 0a 20 20  Window*, u8);.  
288e0 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65  void sqlite3Tree
288f0 56 69 65 77 57 69 6e 46 75 6e 63 28 54 72 65 65  ViewWinFunc(Tree
28900 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 57 69 6e  View*, const Win
28910 64 6f 77 2a 2c 20 75 38 29 3b 0a 23 65 6e 64 69  dow*, u8);.#endi
28920 66 0a 23 65 6e 64 69 66 0a 0a 0a 76 6f 69 64 20  f.#endif...void 
28930 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
28940 28 63 68 61 72 20 2a 2a 2c 20 73 71 6c 69 74 65  (char **, sqlite
28950 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  3*, const char*)
28960 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72  ;.void sqlite3Er
28970 72 6f 72 4d 73 67 28 50 61 72 73 65 2a 2c 20 63  rorMsg(Parse*, c
28980 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29  onst char*, ...)
28990 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  ;.void sqlite3De
289a0 71 75 6f 74 65 28 63 68 61 72 2a 29 3b 0a 76 6f  quote(char*);.vo
289b0 69 64 20 73 71 6c 69 74 65 33 54 6f 6b 65 6e 49  id sqlite3TokenI
289c0 6e 69 74 28 54 6f 6b 65 6e 2a 2c 63 68 61 72 2a  nit(Token*,char*
289d0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4b 65  );.int sqlite3Ke
289e0 79 77 6f 72 64 43 6f 64 65 28 63 6f 6e 73 74 20  ywordCode(const 
289f0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c 20  unsigned char*, 
28a00 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
28a10 33 52 75 6e 50 61 72 73 65 72 28 50 61 72 73 65  3RunParser(Parse
28a20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
28a30 63 68 61 72 20 2a 2a 29 3b 0a 76 6f 69 64 20 73  char **);.void s
28a40 71 6c 69 74 65 33 46 69 6e 69 73 68 43 6f 64 69  qlite3FinishCodi
28a50 6e 67 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20  ng(Parse*);.int 
28a60 73 71 6c 69 74 65 33 47 65 74 54 65 6d 70 52 65  sqlite3GetTempRe
28a70 67 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  g(Parse*);.void 
28a80 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54 65  sqlite3ReleaseTe
28a90 6d 70 52 65 67 28 50 61 72 73 65 2a 2c 69 6e 74  mpReg(Parse*,int
28aa0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65  );.int sqlite3Ge
28ab0 74 54 65 6d 70 52 61 6e 67 65 28 50 61 72 73 65  tTempRange(Parse
28ac0 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
28ad0 69 74 65 33 52 65 6c 65 61 73 65 54 65 6d 70 52  ite3ReleaseTempR
28ae0 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 2c  ange(Parse*,int,
28af0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
28b00 65 33 43 6c 65 61 72 54 65 6d 70 52 65 67 43 61  e3ClearTempRegCa
28b10 63 68 65 28 50 61 72 73 65 2a 29 3b 0a 23 69 66  che(Parse*);.#if
28b20 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
28b30 0a 69 6e 74 20 73 71 6c 69 74 65 33 4e 6f 54 65  .int sqlite3NoTe
28b40 6d 70 73 49 6e 52 61 6e 67 65 28 50 61 72 73 65  mpsInRange(Parse
28b50 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 23 65 6e 64  *,int,int);.#end
28b60 69 66 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  if.Expr *sqlite3
28b70 45 78 70 72 41 6c 6c 6f 63 28 73 71 6c 69 74 65  ExprAlloc(sqlite
28b80 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 54 6f 6b  3*,int,const Tok
28b90 65 6e 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a  en*,int);.Expr *
28ba0 73 71 6c 69 74 65 33 45 78 70 72 28 73 71 6c 69  sqlite3Expr(sqli
28bb0 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  te3*,int,const c
28bc0 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
28bd0 74 65 33 45 78 70 72 41 74 74 61 63 68 53 75 62  te3ExprAttachSub
28be0 74 72 65 65 73 28 73 71 6c 69 74 65 33 2a 2c 45  trees(sqlite3*,E
28bf0 78 70 72 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a  xpr*,Expr*,Expr*
28c00 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
28c10 50 45 78 70 72 28 50 61 72 73 65 2a 2c 20 69 6e  PExpr(Parse*, in
28c20 74 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 29  t, Expr*, Expr*)
28c30 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 45  ;.void sqlite3PE
28c40 78 70 72 41 64 64 53 65 6c 65 63 74 28 50 61 72  xprAddSelect(Par
28c50 73 65 2a 2c 20 45 78 70 72 2a 2c 20 53 65 6c 65  se*, Expr*, Sele
28c60 63 74 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  ct*);.Expr *sqli
28c70 74 65 33 45 78 70 72 41 6e 64 28 73 71 6c 69 74  te3ExprAnd(sqlit
28c80 65 33 2a 2c 45 78 70 72 2a 2c 20 45 78 70 72 2a  e3*,Expr*, Expr*
28c90 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
28ca0 45 78 70 72 46 75 6e 63 74 69 6f 6e 28 50 61 72  ExprFunction(Par
28cb0 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20 54  se*,ExprList*, T
28cc0 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  oken*, int);.voi
28cd0 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 73 73  d sqlite3ExprAss
28ce0 69 67 6e 56 61 72 4e 75 6d 62 65 72 28 50 61 72  ignVarNumber(Par
28cf0 73 65 2a 2c 20 45 78 70 72 2a 2c 20 75 33 32 29  se*, Expr*, u32)
28d00 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
28d10 70 72 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  prDelete(sqlite3
28d20 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c  *, Expr*);.ExprL
28d30 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72  ist *sqlite3Expr
28d40 4c 69 73 74 41 70 70 65 6e 64 28 50 61 72 73 65  ListAppend(Parse
28d50 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72  *,ExprList*,Expr
28d60 2a 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71  *);.ExprList *sq
28d70 6c 69 74 65 33 45 78 70 72 4c 69 73 74 41 70 70  lite3ExprListApp
28d80 65 6e 64 56 65 63 74 6f 72 28 50 61 72 73 65 2a  endVector(Parse*
28d90 2c 45 78 70 72 4c 69 73 74 2a 2c 49 64 4c 69 73  ,ExprList*,IdLis
28da0 74 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  t*,Expr*);.void 
28db0 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53  sqlite3ExprListS
28dc0 65 74 53 6f 72 74 4f 72 64 65 72 28 45 78 70 72  etSortOrder(Expr
28dd0 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  List*,int);.void
28de0 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
28df0 53 65 74 4e 61 6d 65 28 50 61 72 73 65 2a 2c 45  SetName(Parse*,E
28e00 78 70 72 4c 69 73 74 2a 2c 54 6f 6b 65 6e 2a 2c  xprList*,Token*,
28e10 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
28e20 65 33 45 78 70 72 4c 69 73 74 53 65 74 53 70 61  e3ExprListSetSpa
28e30 6e 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73  n(Parse*,ExprLis
28e40 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  t*,const char*,c
28e50 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
28e60 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  d sqlite3ExprLis
28e70 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a  tDelete(sqlite3*
28e80 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 75 33  , ExprList*);.u3
28e90 32 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  2 sqlite3ExprLis
28ea0 74 46 6c 61 67 73 28 63 6f 6e 73 74 20 45 78 70  tFlags(const Exp
28eb0 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  rList*);.int sql
28ec0 69 74 65 33 49 6e 69 74 28 73 71 6c 69 74 65 33  ite3Init(sqlite3
28ed0 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 69 6e 74 20  *, char**);.int 
28ee0 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62  sqlite3InitCallb
28ef0 61 63 6b 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20  ack(void*, int, 
28f00 63 68 61 72 2a 2a 2c 20 63 68 61 72 2a 2a 29 3b  char**, char**);
28f10 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74  .int sqlite3Init
28f20 4f 6e 65 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  One(sqlite3*, in
28f30 74 2c 20 63 68 61 72 2a 2a 2c 20 75 33 32 29 3b  t, char**, u32);
28f40 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 61  .void sqlite3Pra
28f50 67 6d 61 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  gma(Parse*,Token
28f60 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
28f70 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  int);.#ifndef SQ
28f80 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
28f90 4c 54 41 42 4c 45 0a 4d 6f 64 75 6c 65 20 2a 73  LTABLE.Module *s
28fa0 71 6c 69 74 65 33 50 72 61 67 6d 61 56 74 61 62  qlite3PragmaVtab
28fb0 52 65 67 69 73 74 65 72 28 73 71 6c 69 74 65 33  Register(sqlite3
28fc0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e  *,const char *zN
28fd0 61 6d 65 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69  ame);.#endif.voi
28fe0 64 20 73 71 6c 69 74 65 33 52 65 73 65 74 41 6c  d sqlite3ResetAl
28ff0 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63  lSchemasOfConnec
29000 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 29 3b 0a  tion(sqlite3*);.
29010 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 65  void sqlite3Rese
29020 74 4f 6e 65 53 63 68 65 6d 61 28 73 71 6c 69 74  tOneSchema(sqlit
29030 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e3*,int);.void s
29040 71 6c 69 74 65 33 43 6f 6c 6c 61 70 73 65 44 61  qlite3CollapseDa
29050 74 61 62 61 73 65 41 72 72 61 79 28 73 71 6c 69  tabaseArray(sqli
29060 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  te3*);.void sqli
29070 74 65 33 43 6f 6d 6d 69 74 49 6e 74 65 72 6e 61  te3CommitInterna
29080 6c 43 68 61 6e 67 65 73 28 73 71 6c 69 74 65 33  lChanges(sqlite3
29090 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
290a0 44 65 6c 65 74 65 43 6f 6c 75 6d 6e 4e 61 6d 65  DeleteColumnName
290b0 73 28 73 71 6c 69 74 65 33 2a 2c 54 61 62 6c 65  s(sqlite3*,Table
290c0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  *);.int sqlite3C
290d0 6f 6c 75 6d 6e 73 46 72 6f 6d 45 78 70 72 4c 69  olumnsFromExprLi
290e0 73 74 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69  st(Parse*,ExprLi
290f0 73 74 2a 2c 69 31 36 2a 2c 43 6f 6c 75 6d 6e 2a  st*,i16*,Column*
29100 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
29110 53 65 6c 65 63 74 41 64 64 43 6f 6c 75 6d 6e 54  SelectAddColumnT
29120 79 70 65 41 6e 64 43 6f 6c 6c 61 74 69 6f 6e 28  ypeAndCollation(
29130 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 53 65  Parse*,Table*,Se
29140 6c 65 63 74 2a 29 3b 0a 54 61 62 6c 65 20 2a 73  lect*);.Table *s
29150 71 6c 69 74 65 33 52 65 73 75 6c 74 53 65 74 4f  qlite3ResultSetO
29160 66 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 53  fSelect(Parse*,S
29170 65 6c 65 63 74 2a 29 3b 0a 76 6f 69 64 20 73 71  elect*);.void sq
29180 6c 69 74 65 33 4f 70 65 6e 4d 61 73 74 65 72 54  lite3OpenMasterT
29190 61 62 6c 65 28 50 61 72 73 65 20 2a 2c 20 69 6e  able(Parse *, in
291a0 74 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74  t);.Index *sqlit
291b0 65 33 50 72 69 6d 61 72 79 4b 65 79 49 6e 64 65  e3PrimaryKeyInde
291c0 78 28 54 61 62 6c 65 2a 29 3b 0a 69 31 36 20 73  x(Table*);.i16 s
291d0 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 4f 66 49 6e  qlite3ColumnOfIn
291e0 64 65 78 28 49 6e 64 65 78 2a 2c 20 69 31 36 29  dex(Index*, i16)
291f0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ;.void sqlite3St
29200 61 72 74 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  artTable(Parse*,
29210 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e  Token*,Token*,in
29220 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a  t,int,int,int);.
29230 23 69 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  #if SQLITE_ENABL
29240 45 5f 48 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53  E_HIDDEN_COLUMNS
29250 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43  .  void sqlite3C
29260 6f 6c 75 6d 6e 50 72 6f 70 65 72 74 69 65 73 46  olumnPropertiesF
29270 72 6f 6d 4e 61 6d 65 28 54 61 62 6c 65 2a 2c 20  romName(Table*, 
29280 43 6f 6c 75 6d 6e 2a 29 3b 0a 23 65 6c 73 65 0a  Column*);.#else.
29290 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
292a0 43 6f 6c 75 6d 6e 50 72 6f 70 65 72 74 69 65 73  ColumnProperties
292b0 46 72 6f 6d 4e 61 6d 65 28 54 2c 43 29 20 2f 2a  FromName(T,C) /*
292c0 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 65 6e 64 69 66   no-op */.#endif
292d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64  .void sqlite3Add
292e0 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 54 6f  Column(Parse*,To
292f0 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  ken*,Token*);.vo
29300 69 64 20 73 71 6c 69 74 65 33 41 64 64 4e 6f 74  id sqlite3AddNot
29310 4e 75 6c 6c 28 50 61 72 73 65 2a 2c 20 69 6e 74  Null(Parse*, int
29320 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
29330 64 64 50 72 69 6d 61 72 79 4b 65 79 28 50 61 72  ddPrimaryKey(Par
29340 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  se*, ExprList*, 
29350 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
29360 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43  void sqlite3AddC
29370 68 65 63 6b 43 6f 6e 73 74 72 61 69 6e 74 28 50  heckConstraint(P
29380 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  arse*, Expr*);.v
29390 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 44 65  oid sqlite3AddDe
293a0 66 61 75 6c 74 56 61 6c 75 65 28 50 61 72 73 65  faultValue(Parse
293b0 2a 2c 45 78 70 72 2a 2c 63 6f 6e 73 74 20 63 68  *,Expr*,const ch
293c0 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  ar*,const char*)
293d0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  ;.void sqlite3Ad
293e0 64 43 6f 6c 6c 61 74 65 54 79 70 65 28 50 61 72  dCollateType(Par
293f0 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  se*, Token*);.vo
29400 69 64 20 73 71 6c 69 74 65 33 45 6e 64 54 61 62  id sqlite3EndTab
29410 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  le(Parse*,Token*
29420 2c 54 6f 6b 65 6e 2a 2c 75 38 2c 53 65 6c 65 63  ,Token*,u8,Selec
29430 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
29440 50 61 72 73 65 55 72 69 28 63 6f 6e 73 74 20 63  ParseUri(const c
29450 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
29460 2c 75 6e 73 69 67 6e 65 64 20 69 6e 74 2a 2c 0a  ,unsigned int*,.
29470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29480 20 20 20 20 73 71 6c 69 74 65 33 5f 76 66 73 2a      sqlite3_vfs*
29490 2a 2c 63 68 61 72 2a 2a 2c 63 68 61 72 20 2a 2a  *,char**,char **
294a0 29 3b 0a 42 74 72 65 65 20 2a 73 71 6c 69 74 65  );.Btree *sqlite
294b0 33 44 62 4e 61 6d 65 54 6f 42 74 72 65 65 28 73  3DbNameToBtree(s
294c0 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
294d0 61 72 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53 51  ar*);..#ifdef SQ
294e0 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a  LITE_UNTESTABLE.
294f0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
29500 46 61 75 6c 74 53 69 6d 28 58 29 20 53 51 4c 49  FaultSim(X) SQLI
29510 54 45 5f 4f 4b 0a 23 65 6c 73 65 0a 20 20 69 6e  TE_OK.#else.  in
29520 74 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69  t sqlite3FaultSi
29530 6d 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a  m(int);.#endif..
29540 42 69 74 76 65 63 20 2a 73 71 6c 69 74 65 33 42  Bitvec *sqlite3B
29550 69 74 76 65 63 43 72 65 61 74 65 28 75 33 32 29  itvecCreate(u32)
29560 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74  ;.int sqlite3Bit
29570 76 65 63 54 65 73 74 28 42 69 74 76 65 63 2a 2c  vecTest(Bitvec*,
29580 20 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74   u32);.int sqlit
29590 65 33 42 69 74 76 65 63 54 65 73 74 4e 6f 74 4e  e3BitvecTestNotN
295a0 75 6c 6c 28 42 69 74 76 65 63 2a 2c 20 75 33 32  ull(Bitvec*, u32
295b0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69  );.int sqlite3Bi
295c0 74 76 65 63 53 65 74 28 42 69 74 76 65 63 2a 2c  tvecSet(Bitvec*,
295d0 20 75 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69   u32);.void sqli
295e0 74 65 33 42 69 74 76 65 63 43 6c 65 61 72 28 42  te3BitvecClear(B
295f0 69 74 76 65 63 2a 2c 20 75 33 32 2c 20 76 6f 69  itvec*, u32, voi
29600 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  d*);.void sqlite
29610 33 42 69 74 76 65 63 44 65 73 74 72 6f 79 28 42  3BitvecDestroy(B
29620 69 74 76 65 63 2a 29 3b 0a 75 33 32 20 73 71 6c  itvec*);.u32 sql
29630 69 74 65 33 42 69 74 76 65 63 53 69 7a 65 28 42  ite3BitvecSize(B
29640 69 74 76 65 63 2a 29 3b 0a 23 69 66 6e 64 65 66  itvec*);.#ifndef
29650 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42   SQLITE_UNTESTAB
29660 4c 45 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69  LE.int sqlite3Bi
29670 74 76 65 63 42 75 69 6c 74 69 6e 54 65 73 74 28  tvecBuiltinTest(
29680 69 6e 74 2c 69 6e 74 2a 29 3b 0a 23 65 6e 64 69  int,int*);.#endi
29690 66 0a 0a 52 6f 77 53 65 74 20 2a 73 71 6c 69 74  f..RowSet *sqlit
296a0 65 33 52 6f 77 53 65 74 49 6e 69 74 28 73 71 6c  e3RowSetInit(sql
296b0 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
296c0 69 74 65 33 52 6f 77 53 65 74 44 65 6c 65 74 65  ite3RowSetDelete
296d0 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71  (void*);.void sq
296e0 6c 69 74 65 33 52 6f 77 53 65 74 43 6c 65 61 72  lite3RowSetClear
296f0 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71  (void*);.void sq
29700 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72  lite3RowSetInser
29710 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 29 3b  t(RowSet*, i64);
29720 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f 77 53  .int sqlite3RowS
29730 65 74 54 65 73 74 28 52 6f 77 53 65 74 2a 2c 20  etTest(RowSet*, 
29740 69 6e 74 20 69 42 61 74 63 68 2c 20 69 36 34 29  int iBatch, i64)
29750 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f 77  ;.int sqlite3Row
29760 53 65 74 4e 65 78 74 28 52 6f 77 53 65 74 2a 2c  SetNext(RowSet*,
29770 20 69 36 34 2a 29 3b 0a 0a 76 6f 69 64 20 73 71   i64*);..void sq
29780 6c 69 74 65 33 43 72 65 61 74 65 56 69 65 77 28  lite3CreateView(
29790 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Parse*,Token*,To
297a0 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72  ken*,Token*,Expr
297b0 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e  List*,Select*,in
297c0 74 2c 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65  t,int);..#if !de
297d0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
297e0 54 5f 56 49 45 57 29 20 7c 7c 20 21 64 65 66 69  T_VIEW) || !defi
297f0 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
29800 56 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 20 20  VIRTUALTABLE).  
29810 69 6e 74 20 73 71 6c 69 74 65 33 56 69 65 77 47  int sqlite3ViewG
29820 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 50 61  etColumnNames(Pa
29830 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23 65  rse*,Table*);.#e
29840 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
29850 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d  ite3ViewGetColum
29860 6e 4e 61 6d 65 73 28 41 2c 42 29 20 30 0a 23 65  nNames(A,B) 0.#e
29870 6e 64 69 66 0a 0a 23 69 66 20 53 51 4c 49 54 45  ndif..#if SQLITE
29880 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3e 33 30  _MAX_ATTACHED>30
29890 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 44 62  .  int sqlite3Db
298a0 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 79 44 62 4d  MaskAllZero(yDbM
298b0 61 73 6b 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69  ask);.#endif.voi
298c0 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 61 62  d sqlite3DropTab
298d0 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  le(Parse*, SrcLi
298e0 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  st*, int, int);.
298f0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65  void sqlite3Code
29900 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a  DropTable(Parse*
29910 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69  , Table*, int, i
29920 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
29930 33 44 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c  3DeleteTable(sql
29940 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a  ite3*, Table*);.
29950 76 6f 69 64 20 73 71 6c 69 74 65 33 46 72 65 65  void sqlite3Free
29960 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 20  Index(sqlite3*, 
29970 49 6e 64 65 78 2a 29 3b 0a 23 69 66 6e 64 65 66  Index*);.#ifndef
29980 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
29990 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 76 6f 69  OINCREMENT.  voi
299a0 64 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63  d sqlite3Autoinc
299b0 72 65 6d 65 6e 74 42 65 67 69 6e 28 50 61 72 73  rementBegin(Pars
299c0 65 20 2a 70 50 61 72 73 65 29 3b 0a 20 20 76 6f  e *pParse);.  vo
299d0 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e  id sqlite3Autoin
299e0 63 72 65 6d 65 6e 74 45 6e 64 28 50 61 72 73 65  crementEnd(Parse
299f0 20 2a 70 50 61 72 73 65 29 3b 0a 23 65 6c 73 65   *pParse);.#else
29a00 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
29a10 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65  3AutoincrementBe
29a20 67 69 6e 28 58 29 0a 23 20 64 65 66 69 6e 65 20  gin(X).# define 
29a30 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65  sqlite3Autoincre
29a40 6d 65 6e 74 45 6e 64 28 58 29 0a 23 65 6e 64 69  mentEnd(X).#endi
29a50 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e  f.void sqlite3In
29a60 73 65 72 74 28 50 61 72 73 65 2a 2c 20 53 72 63  sert(Parse*, Src
29a70 4c 69 73 74 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  List*, Select*, 
29a80 49 64 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 55 70  IdList*, int, Up
29a90 73 65 72 74 2a 29 3b 0a 76 6f 69 64 20 2a 73 71  sert*);.void *sq
29aa0 6c 69 74 65 33 41 72 72 61 79 41 6c 6c 6f 63 61  lite3ArrayAlloca
29ab0 74 65 28 73 71 6c 69 74 65 33 2a 2c 76 6f 69 64  te(sqlite3*,void
29ac0 2a 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a 29  *,int,int*,int*)
29ad0 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69 74 65  ;.IdList *sqlite
29ae0 33 49 64 4c 69 73 74 41 70 70 65 6e 64 28 50 61  3IdListAppend(Pa
29af0 72 73 65 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 54  rse*, IdList*, T
29b00 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
29b10 74 65 33 49 64 4c 69 73 74 49 6e 64 65 78 28 49  te3IdListIndex(I
29b20 64 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61  dList*,const cha
29b30 72 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71  r*);.SrcList *sq
29b40 6c 69 74 65 33 53 72 63 4c 69 73 74 45 6e 6c 61  lite3SrcListEnla
29b50 72 67 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 72  rge(sqlite3*, Sr
29b60 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74  cList*, int, int
29b70 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69  );.SrcList *sqli
29b80 74 65 33 53 72 63 4c 69 73 74 41 70 70 65 6e 64  te3SrcListAppend
29b90 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69  (sqlite3*, SrcLi
29ba0 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  st*, Token*, Tok
29bb0 65 6e 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73  en*);.SrcList *s
29bc0 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41 70 70  qlite3SrcListApp
29bd0 65 6e 64 46 72 6f 6d 54 65 72 6d 28 50 61 72 73  endFromTerm(Pars
29be0 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f  e*, SrcList*, To
29bf0 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a 20 20  ken*, Token*,.  
29c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29c20 20 20 20 20 54 6f 6b 65 6e 2a 2c 20 53 65 6c 65      Token*, Sele
29c30 63 74 2a 2c 20 45 78 70 72 2a 2c 20 49 64 4c 69  ct*, Expr*, IdLi
29c40 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  st*);.void sqlit
29c50 65 33 53 72 63 4c 69 73 74 49 6e 64 65 78 65 64  e3SrcListIndexed
29c60 42 79 28 50 61 72 73 65 20 2a 2c 20 53 72 63 4c  By(Parse *, SrcL
29c70 69 73 74 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b  ist *, Token *);
29c80 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63  .void sqlite3Src
29c90 4c 69 73 74 46 75 6e 63 41 72 67 73 28 50 61 72  ListFuncArgs(Par
29ca0 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45  se*, SrcList*, E
29cb0 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  xprList*);.int s
29cc0 71 6c 69 74 65 33 49 6e 64 65 78 65 64 42 79 4c  qlite3IndexedByL
29cd0 6f 6f 6b 75 70 28 50 61 72 73 65 20 2a 2c 20 73  ookup(Parse *, s
29ce0 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74  truct SrcList_it
29cf0 65 6d 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  em *);.void sqli
29d00 74 65 33 53 72 63 4c 69 73 74 53 68 69 66 74 4a  te3SrcListShiftJ
29d10 6f 69 6e 54 79 70 65 28 53 72 63 4c 69 73 74 2a  oinType(SrcList*
29d20 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
29d30 72 63 4c 69 73 74 41 73 73 69 67 6e 43 75 72 73  rcListAssignCurs
29d40 6f 72 73 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ors(Parse*, SrcL
29d50 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ist*);.void sqli
29d60 74 65 33 49 64 4c 69 73 74 44 65 6c 65 74 65 28  te3IdListDelete(
29d70 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73 74  sqlite3*, IdList
29d80 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
29d90 53 72 63 4c 69 73 74 44 65 6c 65 74 65 28 73 71  SrcListDelete(sq
29da0 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a  lite3*, SrcList*
29db0 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65  );.Index *sqlite
29dc0 33 41 6c 6c 6f 63 61 74 65 49 6e 64 65 78 4f 62  3AllocateIndexOb
29dd0 6a 65 63 74 28 73 71 6c 69 74 65 33 2a 2c 69 31  ject(sqlite3*,i1
29de0 36 2c 69 6e 74 2c 63 68 61 72 2a 2a 29 3b 0a 76  6,int,char**);.v
29df0 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65 61 74  oid sqlite3Creat
29e00 65 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 54 6f  eIndex(Parse*,To
29e10 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 72 63 4c  ken*,Token*,SrcL
29e20 69 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69  ist*,ExprList*,i
29e30 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20  nt,Token*,.     
29e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29e50 20 20 20 20 20 45 78 70 72 2a 2c 20 69 6e 74 2c       Expr*, int,
29e60 20 69 6e 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20   int, u8);.void 
29e70 73 71 6c 69 74 65 33 44 72 6f 70 49 6e 64 65 78  sqlite3DropIndex
29e80 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
29e90 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
29ea0 69 74 65 33 53 65 6c 65 63 74 28 50 61 72 73 65  ite3Select(Parse
29eb0 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 53 65 6c 65  *, Select*, Sele
29ec0 63 74 44 65 73 74 2a 29 3b 0a 53 65 6c 65 63 74  ctDest*);.Select
29ed0 20 2a 73 71 6c 69 74 65 33 53 65 6c 65 63 74 4e   *sqlite3SelectN
29ee0 65 77 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69  ew(Parse*,ExprLi
29ef0 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70  st*,SrcList*,Exp
29f00 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 0a 20 20  r*,ExprList*,.  
29f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29f20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 45 78 70         Expr*,Exp
29f30 72 4c 69 73 74 2a 2c 75 33 32 2c 45 78 70 72 2a  rList*,u32,Expr*
29f40 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
29f50 65 6c 65 63 74 44 65 6c 65 74 65 28 73 71 6c 69  electDelete(sqli
29f60 74 65 33 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  te3*, Select*);.
29f70 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 53 72  Table *sqlite3Sr
29f80 63 4c 69 73 74 4c 6f 6f 6b 75 70 28 50 61 72 73  cListLookup(Pars
29f90 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69  e*, SrcList*);.i
29fa0 6e 74 20 73 71 6c 69 74 65 33 49 73 52 65 61 64  nt sqlite3IsRead
29fb0 4f 6e 6c 79 28 50 61 72 73 65 2a 2c 20 54 61 62  Only(Parse*, Tab
29fc0 6c 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  le*, int);.void 
29fd0 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65  sqlite3OpenTable
29fe0 28 50 61 72 73 65 2a 2c 20 69 6e 74 20 69 43 75  (Parse*, int iCu
29ff0 72 2c 20 69 6e 74 20 69 44 62 2c 20 54 61 62 6c  r, int iDb, Tabl
2a000 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 20 64 65  e*, int);.#if de
2a010 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
2a020 42 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45 54  BLE_UPDATE_DELET
2a030 45 5f 4c 49 4d 49 54 29 20 26 26 20 21 64 65 66  E_LIMIT) && !def
2a040 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
2a050 5f 53 55 42 51 55 45 52 59 29 0a 45 78 70 72 20  _SUBQUERY).Expr 
2a060 2a 73 71 6c 69 74 65 33 4c 69 6d 69 74 57 68 65  *sqlite3LimitWhe
2a070 72 65 28 50 61 72 73 65 2a 2c 53 72 63 4c 69 73  re(Parse*,SrcLis
2a080 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73  t*,Expr*,ExprLis
2a090 74 2a 2c 45 78 70 72 2a 2c 63 68 61 72 2a 29 3b  t*,Expr*,char*);
2a0a0 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
2a0b0 69 74 65 33 44 65 6c 65 74 65 46 72 6f 6d 28 50  ite3DeleteFrom(P
2a0c0 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
2a0d0 20 45 78 70 72 2a 2c 20 45 78 70 72 4c 69 73 74   Expr*, ExprList
2a0e0 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  *, Expr*);.void 
2a0f0 73 71 6c 69 74 65 33 55 70 64 61 74 65 28 50 61  sqlite3Update(Pa
2a100 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
2a110 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c  ExprList*,Expr*,
2a120 69 6e 74 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78  int,ExprList*,Ex
2a130 70 72 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  pr*,.           
2a140 20 20 20 20 20 20 20 20 55 70 73 65 72 74 2a 29          Upsert*)
2a150 3b 0a 57 68 65 72 65 49 6e 66 6f 20 2a 73 71 6c  ;.WhereInfo *sql
2a160 69 74 65 33 57 68 65 72 65 42 65 67 69 6e 28 50  ite3WhereBegin(P
2a170 61 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45  arse*,SrcList*,E
2a180 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45  xpr*,ExprList*,E
2a190 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c 69 6e 74  xprList*,u16,int
2a1a0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57  );.void sqlite3W
2a1b0 68 65 72 65 45 6e 64 28 57 68 65 72 65 49 6e 66  hereEnd(WhereInf
2a1c0 6f 2a 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69  o*);.LogEst sqli
2a1d0 74 65 33 57 68 65 72 65 4f 75 74 70 75 74 52 6f  te3WhereOutputRo
2a1e0 77 43 6f 75 6e 74 28 57 68 65 72 65 49 6e 66 6f  wCount(WhereInfo
2a1f0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
2a200 68 65 72 65 49 73 44 69 73 74 69 6e 63 74 28 57  hereIsDistinct(W
2a210 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
2a220 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 4f 72  sqlite3WhereIsOr
2a230 64 65 72 65 64 28 57 68 65 72 65 49 6e 66 6f 2a  dered(WhereInfo*
2a240 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68  );.int sqlite3Wh
2a250 65 72 65 4f 72 64 65 72 42 79 4c 69 6d 69 74 4f  ereOrderByLimitO
2a260 70 74 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66  ptLabel(WhereInf
2a270 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  o*);.int sqlite3
2a280 57 68 65 72 65 49 73 53 6f 72 74 65 64 28 57 68  WhereIsSorted(Wh
2a290 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73  ereInfo*);.int s
2a2a0 71 6c 69 74 65 33 57 68 65 72 65 43 6f 6e 74 69  qlite3WhereConti
2a2b0 6e 75 65 4c 61 62 65 6c 28 57 68 65 72 65 49 6e  nueLabel(WhereIn
2a2c0 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  fo*);.int sqlite
2a2d0 33 57 68 65 72 65 42 72 65 61 6b 4c 61 62 65 6c  3WhereBreakLabel
2a2e0 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e  (WhereInfo*);.in
2a2f0 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 4f 6b  t sqlite3WhereOk
2a300 4f 6e 65 50 61 73 73 28 57 68 65 72 65 49 6e 66  OnePass(WhereInf
2a310 6f 2a 2c 20 69 6e 74 2a 29 3b 0a 23 64 65 66 69  o*, int*);.#defi
2a320 6e 65 20 4f 4e 45 50 41 53 53 5f 4f 46 46 20 20  ne ONEPASS_OFF  
2a330 20 20 20 20 30 20 20 20 20 20 20 20 20 2f 2a 20      0        /* 
2a340 55 73 65 20 6f 66 20 4f 4e 45 50 41 53 53 20 6e  Use of ONEPASS n
2a350 6f 74 20 61 6c 6c 6f 77 65 64 20 2a 2f 0a 23 64  ot allowed */.#d
2a360 65 66 69 6e 65 20 4f 4e 45 50 41 53 53 5f 53 49  efine ONEPASS_SI
2a370 4e 47 4c 45 20 20 20 31 20 20 20 20 20 20 20 20  NGLE   1        
2a380 2f 2a 20 4f 4e 45 50 41 53 53 20 76 61 6c 69 64  /* ONEPASS valid
2a390 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 72 6f   for a single ro
2a3a0 77 20 75 70 64 61 74 65 20 2a 2f 0a 23 64 65 66  w update */.#def
2a3b0 69 6e 65 20 4f 4e 45 50 41 53 53 5f 4d 55 4c 54  ine ONEPASS_MULT
2a3c0 49 20 20 20 20 32 20 20 20 20 20 20 20 20 2f 2a  I    2        /*
2a3d0 20 4f 4e 45 50 41 53 53 20 69 73 20 76 61 6c 69   ONEPASS is vali
2a3e0 64 20 66 6f 72 20 6d 75 6c 74 69 70 6c 65 20 72  d for multiple r
2a3f0 6f 77 73 20 2a 2f 0a 76 6f 69 64 20 73 71 6c 69  ows */.void sqli
2a400 74 65 33 45 78 70 72 43 6f 64 65 4c 6f 61 64 49  te3ExprCodeLoadI
2a410 6e 64 65 78 43 6f 6c 75 6d 6e 28 50 61 72 73 65  ndexColumn(Parse
2a420 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74 2c 20  *, Index*, int, 
2a430 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  int, int);.int s
2a440 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47 65  qlite3ExprCodeGe
2a450 74 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20  tColumn(Parse*, 
2a460 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Table*, int, int
2a470 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 76 6f 69 64  , int, u8);.void
2a480 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
2a490 47 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65  GetColumnOfTable
2a4a0 28 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  (Vdbe*, Table*, 
2a4b0 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
2a4c0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
2a4d0 43 6f 64 65 4d 6f 76 65 28 50 61 72 73 65 2a 2c  CodeMove(Parse*,
2a4e0 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
2a4f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
2a500 72 43 6f 64 65 28 50 61 72 73 65 2a 2c 20 45 78  rCode(Parse*, Ex
2a510 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  pr*, int);.void 
2a520 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 43  sqlite3ExprCodeC
2a530 6f 70 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72  opy(Parse*, Expr
2a540 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
2a550 6c 69 74 65 33 45 78 70 72 43 6f 64 65 46 61 63  lite3ExprCodeFac
2a560 74 6f 72 61 62 6c 65 28 50 61 72 73 65 2a 2c 20  torable(Parse*, 
2a570 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  Expr*, int);.int
2a580 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
2a590 41 74 49 6e 69 74 28 50 61 72 73 65 2a 2c 20 45  AtInit(Parse*, E
2a5a0 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  xpr*, int);.int 
2a5b0 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 54  sqlite3ExprCodeT
2a5c0 65 6d 70 28 50 61 72 73 65 2a 2c 20 45 78 70 72  emp(Parse*, Expr
2a5d0 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71  *, int*);.int sq
2a5e0 6c 69 74 65 33 45 78 70 72 43 6f 64 65 54 61 72  lite3ExprCodeTar
2a5f0 67 65 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72  get(Parse*, Expr
2a600 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
2a610 6c 69 74 65 33 45 78 70 72 43 6f 64 65 41 6e 64  lite3ExprCodeAnd
2a620 43 61 63 68 65 28 50 61 72 73 65 2a 2c 20 45 78  Cache(Parse*, Ex
2a630 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  pr*, int);.int s
2a640 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 45 78  qlite3ExprCodeEx
2a650 70 72 4c 69 73 74 28 50 61 72 73 65 2a 2c 20 45  prList(Parse*, E
2a660 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69  xprList*, int, i
2a670 6e 74 2c 20 75 38 29 3b 0a 23 64 65 66 69 6e 65  nt, u8);.#define
2a680 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 44 55 50   SQLITE_ECEL_DUP
2a690 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a 20 44        0x01  /* D
2a6a0 65 65 70 2c 20 6e 6f 74 20 73 68 61 6c 6c 6f 77  eep, not shallow
2a6b0 20 63 6f 70 69 65 73 20 2a 2f 0a 23 64 65 66 69   copies */.#defi
2a6c0 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 46  ne SQLITE_ECEL_F
2a6d0 41 43 54 4f 52 20 20 20 30 78 30 32 20 20 2f 2a  ACTOR   0x02  /*
2a6e0 20 46 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e 73   Factor out cons
2a6f0 74 61 6e 74 20 74 65 72 6d 73 20 2a 2f 0a 23 64  tant terms */.#d
2a700 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45  efine SQLITE_ECE
2a710 4c 5f 52 45 46 20 20 20 20 20 20 30 78 30 34 20  L_REF      0x04 
2a720 20 2f 2a 20 55 73 65 20 45 78 70 72 4c 69 73 74   /* Use ExprList
2a730 2e 75 2e 78 2e 69 4f 72 64 65 72 42 79 43 6f 6c  .u.x.iOrderByCol
2a740 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
2a750 54 45 5f 45 43 45 4c 5f 4f 4d 49 54 52 45 46 20  TE_ECEL_OMITREF 
2a760 20 30 78 30 38 20 20 2f 2a 20 4f 6d 69 74 20 69   0x08  /* Omit i
2a770 66 20 45 78 70 72 4c 69 73 74 2e 75 2e 78 2e 69  f ExprList.u.x.i
2a780 4f 72 64 65 72 42 79 43 6f 6c 20 2a 2f 0a 76 6f  OrderByCol */.vo
2a790 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 49 66  id sqlite3ExprIf
2a7a0 54 72 75 65 28 50 61 72 73 65 2a 2c 20 45 78 70  True(Parse*, Exp
2a7b0 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  r*, int, int);.v
2a7c0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 49  oid sqlite3ExprI
2a7d0 66 46 61 6c 73 65 28 50 61 72 73 65 2a 2c 20 45  fFalse(Parse*, E
2a7e0 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  xpr*, int, int);
2a7f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
2a800 72 49 66 46 61 6c 73 65 44 75 70 28 50 61 72 73  rIfFalseDup(Pars
2a810 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20  e*, Expr*, int, 
2a820 69 6e 74 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c  int);.Table *sql
2a830 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28 73 71  ite3FindTable(sq
2a840 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
2a850 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  r*, const char*)
2a860 3b 0a 23 64 65 66 69 6e 65 20 4c 4f 43 41 54 45  ;.#define LOCATE
2a870 5f 56 49 45 57 20 20 20 20 30 78 30 31 0a 23 64  _VIEW    0x01.#d
2a880 65 66 69 6e 65 20 4c 4f 43 41 54 45 5f 4e 4f 45  efine LOCATE_NOE
2a890 52 52 20 20 20 30 78 30 32 0a 54 61 62 6c 65 20  RR   0x02.Table 
2a8a0 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61  *sqlite3LocateTa
2a8b0 62 6c 65 28 50 61 72 73 65 2a 2c 75 33 32 20 66  ble(Parse*,u32 f
2a8c0 6c 61 67 73 2c 63 6f 6e 73 74 20 63 68 61 72 2a  lags,const char*
2a8d0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
2a8e0 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f  Table *sqlite3Lo
2a8f0 63 61 74 65 54 61 62 6c 65 49 74 65 6d 28 50 61  cateTableItem(Pa
2a900 72 73 65 2a 2c 75 33 32 20 66 6c 61 67 73 2c 73  rse*,u32 flags,s
2a910 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74  truct SrcList_it
2a920 65 6d 20 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71  em *);.Index *sq
2a930 6c 69 74 65 33 46 69 6e 64 49 6e 64 65 78 28 73  lite3FindIndex(s
2a940 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
2a950 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
2a960 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55  );.void sqlite3U
2a970 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61  nlinkAndDeleteTa
2a980 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  ble(sqlite3*,int
2a990 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76  ,const char*);.v
2a9a0 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  oid sqlite3Unlin
2a9b0 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64 65 78 28  kAndDeleteIndex(
2a9c0 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e  sqlite3*,int,con
2a9d0 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
2a9e0 73 71 6c 69 74 65 33 56 61 63 75 75 6d 28 50 61  sqlite3Vacuum(Pa
2a9f0 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  rse*,Token*);.in
2aa00 74 20 73 71 6c 69 74 65 33 52 75 6e 56 61 63 75  t sqlite3RunVacu
2aa10 75 6d 28 63 68 61 72 2a 2a 2c 20 73 71 6c 69 74  um(char**, sqlit
2aa20 65 33 2a 2c 20 69 6e 74 29 3b 0a 63 68 61 72 20  e3*, int);.char 
2aa30 2a 73 71 6c 69 74 65 33 4e 61 6d 65 46 72 6f 6d  *sqlite3NameFrom
2aa40 54 6f 6b 65 6e 28 73 71 6c 69 74 65 33 2a 2c 20  Token(sqlite3*, 
2aa50 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
2aa60 69 74 65 33 45 78 70 72 43 6f 6d 70 61 72 65 28  ite3ExprCompare(
2aa70 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 20 45 78  Parse*,Expr*, Ex
2aa80 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  pr*, int);.int s
2aa90 71 6c 69 74 65 33 45 78 70 72 43 6f 6d 70 61 72  qlite3ExprCompar
2aaa0 65 53 6b 69 70 28 45 78 70 72 2a 2c 20 45 78 70  eSkip(Expr*, Exp
2aab0 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  r*, int);.int sq
2aac0 6c 69 74 65 33 45 78 70 72 4c 69 73 74 43 6f 6d  lite3ExprListCom
2aad0 70 61 72 65 28 45 78 70 72 4c 69 73 74 2a 2c 20  pare(ExprList*, 
2aae0 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b  ExprList*, int);
2aaf0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
2ab00 49 6d 70 6c 69 65 73 45 78 70 72 28 50 61 72 73  ImpliesExpr(Pars
2ab10 65 2a 2c 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c  e*,Expr*, Expr*,
2ab20 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
2ab30 65 33 45 78 70 72 49 6d 70 6c 69 65 73 4e 6f 6e  e3ExprImpliesNon
2ab40 4e 75 6c 6c 52 6f 77 28 45 78 70 72 2a 2c 69 6e  NullRow(Expr*,in
2ab50 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2ab60 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67 72 65  ExprAnalyzeAggre
2ab70 67 61 74 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78  gates(NameContex
2ab80 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  t*, Expr*);.void
2ab90 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c   sqlite3ExprAnal
2aba0 79 7a 65 41 67 67 4c 69 73 74 28 4e 61 6d 65 43  yzeAggList(NameC
2abb0 6f 6e 74 65 78 74 2a 2c 45 78 70 72 4c 69 73 74  ontext*,ExprList
2abc0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
2abd0 78 70 72 43 6f 76 65 72 65 64 42 79 49 6e 64 65  xprCoveredByInde
2abe0 78 28 45 78 70 72 2a 2c 20 69 6e 74 20 69 43 75  x(Expr*, int iCu
2abf0 72 2c 20 49 6e 64 65 78 20 2a 70 49 64 78 29 3b  r, Index *pIdx);
2ac00 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 75 6e 63  .int sqlite3Func
2ac10 74 69 6f 6e 55 73 65 73 54 68 69 73 53 72 63 28  tionUsesThisSrc(
2ac20 45 78 70 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29  Expr*, SrcList*)
2ac30 3b 0a 56 64 62 65 20 2a 73 71 6c 69 74 65 33 47  ;.Vdbe *sqlite3G
2ac40 65 74 56 64 62 65 28 50 61 72 73 65 2a 29 3b 0a  etVdbe(Parse*);.
2ac50 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 55  #ifndef SQLITE_U
2ac60 4e 54 45 53 54 41 42 4c 45 0a 76 6f 69 64 20 73  NTESTABLE.void s
2ac70 71 6c 69 74 65 33 50 72 6e 67 53 61 76 65 53 74  qlite3PrngSaveSt
2ac80 61 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20  ate(void);.void 
2ac90 73 71 6c 69 74 65 33 50 72 6e 67 52 65 73 74 6f  sqlite3PrngResto
2aca0 72 65 53 74 61 74 65 28 76 6f 69 64 29 3b 0a 23  reState(void);.#
2acb0 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
2acc0 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 73 71  e3RollbackAll(sq
2acd0 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69  lite3*,int);.voi
2ace0 64 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72  d sqlite3CodeVer
2acf0 69 66 79 53 63 68 65 6d 61 28 50 61 72 73 65 2a  ifySchema(Parse*
2ad00 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
2ad10 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 4e 61  ite3CodeVerifyNa
2ad20 6d 65 64 53 63 68 65 6d 61 28 50 61 72 73 65 2a  medSchema(Parse*
2ad30 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44  , const char *zD
2ad40 62 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  b);.void sqlite3
2ad50 42 65 67 69 6e 54 72 61 6e 73 61 63 74 69 6f 6e  BeginTransaction
2ad60 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76  (Parse*, int);.v
2ad70 6f 69 64 20 73 71 6c 69 74 65 33 45 6e 64 54 72  oid sqlite3EndTr
2ad80 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a  ansaction(Parse*
2ad90 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
2ada0 74 65 33 53 61 76 65 70 6f 69 6e 74 28 50 61 72  te3Savepoint(Par
2adb0 73 65 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2a  se*, int, Token*
2adc0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
2add0 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74 73 28 73  loseSavepoints(s
2ade0 71 6c 69 74 65 33 20 2a 29 3b 0a 76 6f 69 64 20  qlite3 *);.void 
2adf0 73 71 6c 69 74 65 33 4c 65 61 76 65 4d 75 74 65  sqlite3LeaveMute
2ae00 78 41 6e 64 43 6c 6f 73 65 5a 6f 6d 62 69 65 28  xAndCloseZombie(
2ae10 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73  sqlite3*);.int s
2ae20 71 6c 69 74 65 33 45 78 70 72 49 64 54 6f 54 72  qlite3ExprIdToTr
2ae30 75 65 46 61 6c 73 65 28 45 78 70 72 2a 29 3b 0a  ueFalse(Expr*);.
2ae40 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 54  int sqlite3ExprT
2ae50 72 75 74 68 56 61 6c 75 65 28 63 6f 6e 73 74 20  ruthValue(const 
2ae60 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
2ae70 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e  te3ExprIsConstan
2ae80 74 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  t(Expr*);.int sq
2ae90 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74  lite3ExprIsConst
2aea0 61 6e 74 4e 6f 74 4a 6f 69 6e 28 45 78 70 72 2a  antNotJoin(Expr*
2aeb0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
2aec0 70 72 49 73 43 6f 6e 73 74 61 6e 74 4f 72 46 75  prIsConstantOrFu
2aed0 6e 63 74 69 6f 6e 28 45 78 70 72 2a 2c 20 75 38  nction(Expr*, u8
2aee0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
2aef0 70 72 49 73 43 6f 6e 73 74 61 6e 74 4f 72 47 72  prIsConstantOrGr
2af00 6f 75 70 42 79 28 50 61 72 73 65 2a 2c 20 45 78  oupBy(Parse*, Ex
2af10 70 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b  pr*, ExprList*);
2af20 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
2af30 49 73 54 61 62 6c 65 43 6f 6e 73 74 61 6e 74 28  IsTableConstant(
2af40 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 23 69 66 64  Expr*,int);.#ifd
2af50 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
2af60 5f 43 55 52 53 4f 52 5f 48 49 4e 54 53 0a 69 6e  _CURSOR_HINTS.in
2af70 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6e  t sqlite3ExprCon
2af80 74 61 69 6e 73 53 75 62 71 75 65 72 79 28 45 78  tainsSubquery(Ex
2af90 70 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74  pr*);.#endif.int
2afa0 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 49 6e   sqlite3ExprIsIn
2afb0 74 65 67 65 72 28 45 78 70 72 2a 2c 20 69 6e 74  teger(Expr*, int
2afc0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
2afd0 78 70 72 43 61 6e 42 65 4e 75 6c 6c 28 63 6f 6e  xprCanBeNull(con
2afe0 73 74 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  st Expr*);.int s
2aff0 71 6c 69 74 65 33 45 78 70 72 4e 65 65 64 73 4e  qlite3ExprNeedsN
2b000 6f 41 66 66 69 6e 69 74 79 43 68 61 6e 67 65 28  oAffinityChange(
2b010 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20 63 68 61  const Expr*, cha
2b020 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  r);.int sqlite3I
2b030 73 52 6f 77 69 64 28 63 6f 6e 73 74 20 63 68 61  sRowid(const cha
2b040 72 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  r*);.#ifdef SQLI
2b050 54 45 5f 45 4e 41 42 4c 45 5f 4e 4f 52 4d 41 4c  TE_ENABLE_NORMAL
2b060 49 5a 45 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  IZE.int sqlite3I
2b070 73 52 6f 77 69 64 4e 28 63 6f 6e 73 74 20 63 68  sRowidN(const ch
2b080 61 72 2a 2c 20 69 6e 74 29 3b 0a 23 65 6e 64 69  ar*, int);.#endi
2b090 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65  f.void sqlite3Ge
2b0a0 6e 65 72 61 74 65 52 6f 77 44 65 6c 65 74 65 28  nerateRowDelete(
2b0b0 0a 20 20 20 20 50 61 72 73 65 2a 2c 54 61 62 6c  .    Parse*,Tabl
2b0c0 65 2a 2c 54 72 69 67 67 65 72 2a 2c 69 6e 74 2c  e*,Trigger*,int,
2b0d0 69 6e 74 2c 69 6e 74 2c 69 31 36 2c 75 38 2c 75  int,int,i16,u8,u
2b0e0 38 2c 75 38 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  8,u8,int);.void 
2b0f0 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 52  sqlite3GenerateR
2b100 6f 77 49 6e 64 65 78 44 65 6c 65 74 65 28 50 61  owIndexDelete(Pa
2b110 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
2b120 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e  t, int, int*, in
2b130 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47  t);.int sqlite3G
2b140 65 6e 65 72 61 74 65 49 6e 64 65 78 4b 65 79 28  enerateIndexKey(
2b150 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20  Parse*, Index*, 
2b160 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  int, int, int, i
2b170 6e 74 2a 2c 49 6e 64 65 78 2a 2c 69 6e 74 29 3b  nt*,Index*,int);
2b180 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73  .void sqlite3Res
2b190 6f 6c 76 65 50 61 72 74 49 64 78 4c 61 62 65 6c  olvePartIdxLabel
2b1a0 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 69 6e  (Parse*,int);.in
2b1b0 74 20 73 71 6c 69 74 65 33 45 78 70 72 52 65 66  t sqlite3ExprRef
2b1c0 65 72 65 6e 63 65 73 55 70 64 61 74 65 64 43 6f  erencesUpdatedCo
2b1d0 6c 75 6d 6e 28 45 78 70 72 2a 2c 69 6e 74 2a 2c  lumn(Expr*,int*,
2b1e0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2b1f0 65 33 47 65 6e 65 72 61 74 65 43 6f 6e 73 74 72  e3GenerateConstr
2b200 61 69 6e 74 43 68 65 63 6b 73 28 50 61 72 73 65  aintChecks(Parse
2b210 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2a 2c 69 6e  *,Table*,int*,in
2b220 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 0a 20  t,int,int,int,. 
2b230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b250 20 20 20 20 75 38 2c 75 38 2c 69 6e 74 2c 69 6e      u8,u8,int,in
2b260 74 2a 2c 69 6e 74 2a 2c 55 70 73 65 72 74 2a 29  t*,int*,Upsert*)
2b270 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
2b280 45 4e 41 42 4c 45 5f 4e 55 4c 4c 5f 54 52 49 4d  ENABLE_NULL_TRIM
2b290 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 53  .  void sqlite3S
2b2a0 65 74 4d 61 6b 65 52 65 63 6f 72 64 50 35 28 56  etMakeRecordP5(V
2b2b0 64 62 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23 65  dbe*,Table*);.#e
2b2c0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
2b2d0 69 74 65 33 53 65 74 4d 61 6b 65 52 65 63 6f 72  ite3SetMakeRecor
2b2e0 64 50 35 28 41 2c 42 29 0a 23 65 6e 64 69 66 0a  dP5(A,B).#endif.
2b2f0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 70  void sqlite3Comp
2b300 6c 65 74 65 49 6e 73 65 72 74 69 6f 6e 28 50 61  leteInsertion(Pa
2b310 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c  rse*,Table*,int,
2b320 69 6e 74 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74  int,int,int*,int
2b330 2c 69 6e 74 2c 69 6e 74 29 3b 0a 69 6e 74 20 73  ,int,int);.int s
2b340 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 41  qlite3OpenTableA
2b350 6e 64 49 6e 64 69 63 65 73 28 50 61 72 73 65 2a  ndIndices(Parse*
2b360 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 75  , Table*, int, u
2b370 38 2c 20 69 6e 74 2c 20 75 38 2a 2c 20 69 6e 74  8, int, u8*, int
2b380 2a 2c 20 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73  *, int*);.void s
2b390 71 6c 69 74 65 33 42 65 67 69 6e 57 72 69 74 65  qlite3BeginWrite
2b3a0 4f 70 65 72 61 74 69 6f 6e 28 50 61 72 73 65 2a  Operation(Parse*
2b3b0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
2b3c0 64 20 73 71 6c 69 74 65 33 4d 75 6c 74 69 57 72  d sqlite3MultiWr
2b3d0 69 74 65 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  ite(Parse*);.voi
2b3e0 64 20 73 71 6c 69 74 65 33 4d 61 79 41 62 6f 72  d sqlite3MayAbor
2b3f0 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  t(Parse*);.void 
2b400 73 71 6c 69 74 65 33 48 61 6c 74 43 6f 6e 73 74  sqlite3HaltConst
2b410 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e  raint(Parse*, in
2b420 74 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2c 20 69  t, int, char*, i
2b430 38 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c  8, u8);.void sql
2b440 69 74 65 33 55 6e 69 71 75 65 43 6f 6e 73 74 72  ite3UniqueConstr
2b450 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74  aint(Parse*, int
2b460 2c 20 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20  , Index*);.void 
2b470 73 71 6c 69 74 65 33 52 6f 77 69 64 43 6f 6e 73  sqlite3RowidCons
2b480 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69  traint(Parse*, i
2b490 6e 74 2c 20 54 61 62 6c 65 2a 29 3b 0a 45 78 70  nt, Table*);.Exp
2b4a0 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 44 75  r *sqlite3ExprDu
2b4b0 70 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a  p(sqlite3*,Expr*
2b4c0 2c 69 6e 74 29 3b 0a 45 78 70 72 4c 69 73 74 20  ,int);.ExprList 
2b4d0 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74  *sqlite3ExprList
2b4e0 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 45 78 70  Dup(sqlite3*,Exp
2b4f0 72 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 53 72 63  rList*,int);.Src
2b500 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63  List *sqlite3Src
2b510 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a  ListDup(sqlite3*
2b520 2c 53 72 63 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a  ,SrcList*,int);.
2b530 49 64 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 49  IdList *sqlite3I
2b540 64 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65 33  dListDup(sqlite3
2b550 2a 2c 49 64 4c 69 73 74 2a 29 3b 0a 53 65 6c 65  *,IdList*);.Sele
2b560 63 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65 63  ct *sqlite3Selec
2b570 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 53 65  tDup(sqlite3*,Se
2b580 6c 65 63 74 2a 2c 69 6e 74 29 3b 0a 23 69 66 64  lect*,int);.#ifd
2b590 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
2b5a0 5f 4e 4f 52 4d 41 4c 49 5a 45 0a 46 75 6e 63 44  _NORMALIZE.FuncD
2b5b0 65 66 20 2a 73 71 6c 69 74 65 33 46 75 6e 63 74  ef *sqlite3Funct
2b5c0 69 6f 6e 53 65 61 72 63 68 4e 28 69 6e 74 2c 63  ionSearchN(int,c
2b5d0 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b  onst char*,int);
2b5e0 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
2b5f0 69 74 65 33 49 6e 73 65 72 74 42 75 69 6c 74 69  ite3InsertBuilti
2b600 6e 46 75 6e 63 73 28 46 75 6e 63 44 65 66 2a 2c  nFuncs(FuncDef*,
2b610 69 6e 74 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73  int);.FuncDef *s
2b620 71 6c 69 74 65 33 46 69 6e 64 46 75 6e 63 74 69  qlite3FindFuncti
2b630 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  on(sqlite3*,cons
2b640 74 20 63 68 61 72 2a 2c 69 6e 74 2c 75 38 2c 75  t char*,int,u8,u
2b650 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  8);.void sqlite3
2b660 52 65 67 69 73 74 65 72 42 75 69 6c 74 69 6e 46  RegisterBuiltinF
2b670 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a  unctions(void);.
2b680 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69  void sqlite3Regi
2b690 73 74 65 72 44 61 74 65 54 69 6d 65 46 75 6e 63  sterDateTimeFunc
2b6a0 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69  tions(void);.voi
2b6b0 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65  d sqlite3Registe
2b6c0 72 50 65 72 43 6f 6e 6e 65 63 74 69 6f 6e 42 75  rPerConnectionBu
2b6d0 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 28 73  iltinFunctions(s
2b6e0 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71  qlite3*);.int sq
2b6f0 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b  lite3SafetyCheck
2b700 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e  Ok(sqlite3*);.in
2b710 74 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43  t sqlite3SafetyC
2b720 68 65 63 6b 53 69 63 6b 4f 72 4f 6b 28 73 71 6c  heckSickOrOk(sql
2b730 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
2b740 69 74 65 33 43 68 61 6e 67 65 43 6f 6f 6b 69 65  ite3ChangeCookie
2b750 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 0a  (Parse*, int);..
2b760 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
2b770 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20 26  ITE_OMIT_VIEW) &
2b780 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
2b790 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a  E_OMIT_TRIGGER).
2b7a0 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 74 65  void sqlite3Mate
2b7b0 72 69 61 6c 69 7a 65 56 69 65 77 28 50 61 72 73  rializeView(Pars
2b7c0 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72  e*, Table*, Expr
2b7d0 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 45 78 70  *, ExprList*,Exp
2b7e0 72 2a 2c 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a  r*,int);.#endif.
2b7f0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2b800 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 20 20 76  OMIT_TRIGGER.  v
2b810 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e  oid sqlite3Begin
2b820 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20  Trigger(Parse*, 
2b830 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e  Token*,Token*,in
2b840 74 2c 69 6e 74 2c 49 64 4c 69 73 74 2a 2c 53 72  t,int,IdList*,Sr
2b850 63 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20  cList*,.        
2b860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b870 20 20 20 45 78 70 72 2a 2c 69 6e 74 2c 20 69 6e     Expr*,int, in
2b880 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  t);.  void sqlit
2b890 65 33 46 69 6e 69 73 68 54 72 69 67 67 65 72 28  e3FinishTrigger(
2b8a0 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 53  Parse*, TriggerS
2b8b0 74 65 70 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 20  tep*, Token*);. 
2b8c0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f   void sqlite3Dro
2b8d0 70 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c  pTrigger(Parse*,
2b8e0 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b   SrcList*, int);
2b8f0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44  .  void sqlite3D
2b900 72 6f 70 54 72 69 67 67 65 72 50 74 72 28 50 61  ropTriggerPtr(Pa
2b910 72 73 65 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b  rse*, Trigger*);
2b920 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69  .  Trigger *sqli
2b930 74 65 33 54 72 69 67 67 65 72 73 45 78 69 73 74  te3TriggersExist
2b940 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65 2a  (Parse *, Table*
2b950 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a  , int, ExprList*
2b960 2c 20 69 6e 74 20 2a 70 4d 61 73 6b 29 3b 0a 20  , int *pMask);. 
2b970 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69 74 65   Trigger *sqlite
2b980 33 54 72 69 67 67 65 72 4c 69 73 74 28 50 61 72  3TriggerList(Par
2b990 73 65 20 2a 2c 20 54 61 62 6c 65 20 2a 29 3b 0a  se *, Table *);.
2b9a0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f    void sqlite3Co
2b9b0 64 65 52 6f 77 54 72 69 67 67 65 72 28 50 61 72  deRowTrigger(Par
2b9c0 73 65 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c 20  se*, Trigger *, 
2b9d0 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  int, ExprList*, 
2b9e0 69 6e 74 2c 20 54 61 62 6c 65 20 2a 2c 0a 20 20  int, Table *,.  
2b9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ba00 20 20 20 20 20 20 20 20 20 20 69 6e 74 2c 20 69            int, i
2ba10 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  nt, int);.  void
2ba20 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54   sqlite3CodeRowT
2ba30 72 69 67 67 65 72 44 69 72 65 63 74 28 50 61 72  riggerDirect(Par
2ba40 73 65 20 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c  se *, Trigger *,
2ba50 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69   Table *, int, i
2ba60 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  nt, int);.  void
2ba70 20 73 71 6c 69 74 65 56 69 65 77 54 72 69 67 67   sqliteViewTrigg
2ba80 65 72 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ers(Parse*, Tabl
2ba90 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20  e*, Expr*, int, 
2baa0 45 78 70 72 4c 69 73 74 2a 29 3b 0a 20 20 76 6f  ExprList*);.  vo
2bab0 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  id sqlite3Delete
2bac0 54 72 69 67 67 65 72 53 74 65 70 28 73 71 6c 69  TriggerStep(sqli
2bad0 74 65 33 2a 2c 20 54 72 69 67 67 65 72 53 74 65  te3*, TriggerSte
2bae0 70 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74  p*);.  TriggerSt
2baf0 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67  ep *sqlite3Trigg
2bb00 65 72 53 65 6c 65 63 74 53 74 65 70 28 73 71 6c  erSelectStep(sql
2bb10 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 2c 0a 20  ite3*,Select*,. 
2bb20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bb30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bb40 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61         const cha
2bb50 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  r*,const char*);
2bb60 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
2bb70 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 49 6e  sqlite3TriggerIn
2bb80 73 65 72 74 53 74 65 70 28 50 61 72 73 65 2a 2c  sertStep(Parse*,
2bb90 54 6f 6b 65 6e 2a 2c 20 49 64 4c 69 73 74 2a 2c  Token*, IdList*,
2bba0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2bbb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bbc0 20 20 20 20 20 20 20 20 20 53 65 6c 65 63 74 2a           Select*
2bbd0 2c 75 38 2c 55 70 73 65 72 74 2a 2c 0a 20 20 20  ,u8,Upsert*,.   
2bbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bc00 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a       const char*
2bc10 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20  ,const char*);. 
2bc20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71   TriggerStep *sq
2bc30 6c 69 74 65 33 54 72 69 67 67 65 72 55 70 64 61  lite3TriggerUpda
2bc40 74 65 53 74 65 70 28 50 61 72 73 65 2a 2c 54 6f  teStep(Parse*,To
2bc50 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20  ken*,ExprList*, 
2bc60 45 78 70 72 2a 2c 20 75 38 2c 0a 20 20 20 20 20  Expr*, u8,.     
2bc70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bc80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bc90 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63     const char*,c
2bca0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 54  onst char*);.  T
2bcb0 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69  riggerStep *sqli
2bcc0 74 65 33 54 72 69 67 67 65 72 44 65 6c 65 74 65  te3TriggerDelete
2bcd0 53 74 65 70 28 50 61 72 73 65 2a 2c 54 6f 6b 65  Step(Parse*,Toke
2bce0 6e 2a 2c 20 45 78 70 72 2a 2c 0a 20 20 20 20 20  n*, Expr*,.     
2bcf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bd00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bd10 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63     const char*,c
2bd20 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76  onst char*);.  v
2bd30 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
2bd40 65 54 72 69 67 67 65 72 28 73 71 6c 69 74 65 33  eTrigger(sqlite3
2bd50 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20  *, Trigger*);.  
2bd60 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69  void sqlite3Unli
2bd70 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67  nkAndDeleteTrigg
2bd80 65 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  er(sqlite3*,int,
2bd90 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
2bda0 75 33 32 20 73 71 6c 69 74 65 33 54 72 69 67 67  u32 sqlite3Trigg
2bdb0 65 72 43 6f 6c 6d 61 73 6b 28 50 61 72 73 65 2a  erColmask(Parse*
2bdc0 2c 54 72 69 67 67 65 72 2a 2c 45 78 70 72 4c 69  ,Trigger*,ExprLi
2bdd0 73 74 2a 2c 69 6e 74 2c 69 6e 74 2c 54 61 62 6c  st*,int,int,Tabl
2bde0 65 2a 2c 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e  e*,int);.# defin
2bdf0 65 20 73 71 6c 69 74 65 33 50 61 72 73 65 54 6f  e sqlite3ParseTo
2be00 70 6c 65 76 65 6c 28 70 29 20 28 28 70 29 2d 3e  plevel(p) ((p)->
2be10 70 54 6f 70 6c 65 76 65 6c 20 3f 20 28 70 29 2d  pToplevel ? (p)-
2be20 3e 70 54 6f 70 6c 65 76 65 6c 20 3a 20 28 70 29  >pToplevel : (p)
2be30 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
2be40 65 33 49 73 54 6f 70 6c 65 76 65 6c 28 70 29 20  e3IsToplevel(p) 
2be50 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 3d  ((p)->pToplevel=
2be60 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  =0).#else.# defi
2be70 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67 67 65  ne sqlite3Trigge
2be80 72 73 45 78 69 73 74 28 42 2c 43 2c 44 2c 45 2c  rsExist(B,C,D,E,
2be90 46 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71  F) 0.# define sq
2bea0 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67  lite3DeleteTrigg
2beb0 65 72 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65  er(A,B).# define
2bec0 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67   sqlite3DropTrig
2bed0 67 65 72 50 74 72 28 41 2c 42 29 0a 23 20 64 65  gerPtr(A,B).# de
2bee0 66 69 6e 65 20 73 71 6c 69 74 65 33 55 6e 6c 69  fine sqlite3Unli
2bef0 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67  nkAndDeleteTrigg
2bf00 65 72 28 41 2c 42 2c 43 29 0a 23 20 64 65 66 69  er(A,B,C).# defi
2bf10 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f  ne sqlite3CodeRo
2bf20 77 54 72 69 67 67 65 72 28 41 2c 42 2c 43 2c 44  wTrigger(A,B,C,D
2bf30 2c 45 2c 46 2c 47 2c 48 2c 49 29 0a 23 20 64 65  ,E,F,G,H,I).# de
2bf40 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65  fine sqlite3Code
2bf50 52 6f 77 54 72 69 67 67 65 72 44 69 72 65 63 74  RowTriggerDirect
2bf60 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 29 0a 23 20  (A,B,C,D,E,F).# 
2bf70 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72  define sqlite3Tr
2bf80 69 67 67 65 72 4c 69 73 74 28 58 2c 20 59 29 20  iggerList(X, Y) 
2bf90 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  0.# define sqlit
2bfa0 65 33 50 61 72 73 65 54 6f 70 6c 65 76 65 6c 28  e3ParseToplevel(
2bfb0 70 29 20 70 0a 23 20 64 65 66 69 6e 65 20 73 71  p) p.# define sq
2bfc0 6c 69 74 65 33 49 73 54 6f 70 6c 65 76 65 6c 28  lite3IsToplevel(
2bfd0 70 29 20 31 0a 23 20 64 65 66 69 6e 65 20 73 71  p) 1.# define sq
2bfe0 6c 69 74 65 33 54 72 69 67 67 65 72 43 6f 6c 6d  lite3TriggerColm
2bff0 61 73 6b 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c  ask(A,B,C,D,E,F,
2c000 47 29 20 30 0a 23 65 6e 64 69 66 0a 0a 69 6e 74  G) 0.#endif..int
2c010 20 73 71 6c 69 74 65 33 4a 6f 69 6e 54 79 70 65   sqlite3JoinType
2c020 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c  (Parse*, Token*,
2c030 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29   Token*, Token*)
2c040 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72  ;.void sqlite3Cr
2c050 65 61 74 65 46 6f 72 65 69 67 6e 4b 65 79 28 50  eateForeignKey(P
2c060 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a  arse*, ExprList*
2c070 2c 20 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 4c 69  , Token*, ExprLi
2c080 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  st*, int);.void 
2c090 73 71 6c 69 74 65 33 44 65 66 65 72 46 6f 72 65  sqlite3DeferFore
2c0a0 69 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20 69  ignKey(Parse*, i
2c0b0 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  nt);.#ifndef SQL
2c0c0 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49  ITE_OMIT_AUTHORI
2c0d0 5a 41 54 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71  ZATION.  void sq
2c0e0 6c 69 74 65 33 41 75 74 68 52 65 61 64 28 50 61  lite3AuthRead(Pa
2c0f0 72 73 65 2a 2c 45 78 70 72 2a 2c 53 63 68 65 6d  rse*,Expr*,Schem
2c100 61 2a 2c 53 72 63 4c 69 73 74 2a 29 3b 0a 20 20  a*,SrcList*);.  
2c110 69 6e 74 20 73 71 6c 69 74 65 33 41 75 74 68 43  int sqlite3AuthC
2c120 68 65 63 6b 28 50 61 72 73 65 2a 2c 69 6e 74 2c  heck(Parse*,int,
2c130 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f   const char*, co
2c140 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
2c150 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20   char*);.  void 
2c160 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65  sqlite3AuthConte
2c170 78 74 50 75 73 68 28 50 61 72 73 65 2a 2c 20 41  xtPush(Parse*, A
2c180 75 74 68 43 6f 6e 74 65 78 74 2a 2c 20 63 6f 6e  uthContext*, con
2c190 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69  st char*);.  voi
2c1a0 64 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e  d sqlite3AuthCon
2c1b0 74 65 78 74 50 6f 70 28 41 75 74 68 43 6f 6e 74  textPop(AuthCont
2c1c0 65 78 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  ext*);.  int sql
2c1d0 69 74 65 33 41 75 74 68 52 65 61 64 43 6f 6c 28  ite3AuthReadCol(
2c1e0 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68  Parse*, const ch
2c1f0 61 72 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  ar *, const char
2c200 20 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a   *, int);.#else.
2c210 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2c220 41 75 74 68 52 65 61 64 28 61 2c 62 2c 63 2c 64  AuthRead(a,b,c,d
2c230 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
2c240 65 33 41 75 74 68 43 68 65 63 6b 28 61 2c 62 2c  e3AuthCheck(a,b,
2c250 63 2c 64 2c 65 29 20 20 20 20 53 51 4c 49 54 45  c,d,e)    SQLITE
2c260 5f 4f 4b 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  _OK.# define sql
2c270 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50  ite3AuthContextP
2c280 75 73 68 28 61 2c 62 2c 63 29 0a 23 20 64 65 66  ush(a,b,c).# def
2c290 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 43  ine sqlite3AuthC
2c2a0 6f 6e 74 65 78 74 50 6f 70 28 61 29 20 20 28 28  ontextPop(a)  ((
2c2b0 76 6f 69 64 29 28 61 29 29 0a 23 65 6e 64 69 66  void)(a)).#endif
2c2c0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 74 74  .void sqlite3Att
2c2d0 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ach(Parse*, Expr
2c2e0 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 29  *, Expr*, Expr*)
2c2f0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  ;.void sqlite3De
2c300 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70  tach(Parse*, Exp
2c310 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
2c320 33 46 69 78 49 6e 69 74 28 44 62 46 69 78 65 72  3FixInit(DbFixer
2c330 2a 2c 20 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  *, Parse*, int, 
2c340 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
2c350 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  st Token*);.int 
2c360 73 71 6c 69 74 65 33 46 69 78 53 72 63 4c 69 73  sqlite3FixSrcLis
2c370 74 28 44 62 46 69 78 65 72 2a 2c 20 53 72 63 4c  t(DbFixer*, SrcL
2c380 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
2c390 65 33 46 69 78 53 65 6c 65 63 74 28 44 62 46 69  e3FixSelect(DbFi
2c3a0 78 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  xer*, Select*);.
2c3b0 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 45 78  int sqlite3FixEx
2c3c0 70 72 28 44 62 46 69 78 65 72 2a 2c 20 45 78 70  pr(DbFixer*, Exp
2c3d0 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
2c3e0 46 69 78 45 78 70 72 4c 69 73 74 28 44 62 46 69  FixExprList(DbFi
2c3f0 78 65 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29  xer*, ExprList*)
2c400 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78  ;.int sqlite3Fix
2c410 54 72 69 67 67 65 72 53 74 65 70 28 44 62 46 69  TriggerStep(DbFi
2c420 78 65 72 2a 2c 20 54 72 69 67 67 65 72 53 74 65  xer*, TriggerSte
2c430 70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  p*);.int sqlite3
2c440 41 74 6f 46 28 63 6f 6e 73 74 20 63 68 61 72 20  AtoF(const char 
2c450 2a 7a 2c 20 64 6f 75 62 6c 65 2a 2c 20 69 6e 74  *z, double*, int
2c460 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74  , u8);.int sqlit
2c470 65 33 47 65 74 49 6e 74 33 32 28 63 6f 6e 73 74  e3GetInt32(const
2c480 20 63 68 61 72 20 2a 2c 20 69 6e 74 2a 29 3b 0a   char *, int*);.
2c490 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 69 28  int sqlite3Atoi(
2c4a0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 69  const char*);.#i
2c4b0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2c4c0 54 5f 55 54 46 31 36 0a 69 6e 74 20 73 71 6c 69  T_UTF16.int sqli
2c4d0 74 65 33 55 74 66 31 36 42 79 74 65 4c 65 6e 28  te3Utf16ByteLen(
2c4e0 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 44 61 74  const void *pDat
2c4f0 61 2c 20 69 6e 74 20 6e 43 68 61 72 29 3b 0a 23  a, int nChar);.#
2c500 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65  endif.int sqlite
2c510 33 55 74 66 38 43 68 61 72 4c 65 6e 28 63 6f 6e  3Utf8CharLen(con
2c520 73 74 20 63 68 61 72 20 2a 70 44 61 74 61 2c 20  st char *pData, 
2c530 69 6e 74 20 6e 42 79 74 65 29 3b 0a 75 33 32 20  int nByte);.u32 
2c540 73 71 6c 69 74 65 33 55 74 66 38 52 65 61 64 28  sqlite3Utf8Read(
2c550 63 6f 6e 73 74 20 75 38 2a 2a 29 3b 0a 4c 6f 67  const u8**);.Log
2c560 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73  Est sqlite3LogEs
2c570 74 28 75 36 34 29 3b 0a 4c 6f 67 45 73 74 20 73  t(u64);.LogEst s
2c580 71 6c 69 74 65 33 4c 6f 67 45 73 74 41 64 64 28  qlite3LogEstAdd(
2c590 4c 6f 67 45 73 74 2c 4c 6f 67 45 73 74 29 3b 0a  LogEst,LogEst);.
2c5a0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2c5b0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
2c5c0 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c  .LogEst sqlite3L
2c5d0 6f 67 45 73 74 46 72 6f 6d 44 6f 75 62 6c 65 28  ogEstFromDouble(
2c5e0 64 6f 75 62 6c 65 29 3b 0a 23 65 6e 64 69 66 0a  double);.#endif.
2c5f0 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
2c600 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53  TE_ENABLE_STMT_S
2c610 43 41 4e 53 54 41 54 55 53 29 20 7c 7c 20 5c 0a  CANSTATUS) || \.
2c620 20 20 20 20 64 65 66 69 6e 65 64 28 53 51 4c 49      defined(SQLI
2c630 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f  TE_ENABLE_STAT3_
2c640 4f 52 5f 53 54 41 54 34 29 20 7c 7c 20 5c 0a 20  OR_STAT4) || \. 
2c650 20 20 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54     defined(SQLIT
2c660 45 5f 45 58 50 4c 41 49 4e 5f 45 53 54 49 4d 41  E_EXPLAIN_ESTIMA
2c670 54 45 44 5f 52 4f 57 53 29 0a 75 36 34 20 73 71  TED_ROWS).u64 sq
2c680 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74  lite3LogEstToInt
2c690 28 4c 6f 67 45 73 74 29 3b 0a 23 65 6e 64 69 66  (LogEst);.#endif
2c6a0 0a 56 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 56  .VList *sqlite3V
2c6b0 4c 69 73 74 41 64 64 28 73 71 6c 69 74 65 33 2a  ListAdd(sqlite3*
2c6c0 2c 56 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68  ,VList*,const ch
2c6d0 61 72 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 63 6f  ar*,int,int);.co
2c6e0 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
2c6f0 33 56 4c 69 73 74 4e 75 6d 54 6f 4e 61 6d 65 28  3VListNumToName(
2c700 56 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 69 6e 74  VList*,int);.int
2c710 20 73 71 6c 69 74 65 33 56 4c 69 73 74 4e 61 6d   sqlite3VListNam
2c720 65 54 6f 4e 75 6d 28 56 4c 69 73 74 2a 2c 63 6f  eToNum(VList*,co
2c730 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a  nst char*,int);.
2c740 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65 73 20  ./*.** Routines 
2c750 74 6f 20 72 65 61 64 20 61 6e 64 20 77 72 69 74  to read and writ
2c760 65 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74  e variable-lengt
2c770 68 20 69 6e 74 65 67 65 72 73 2e 20 20 54 68 65  h integers.  The
2c780 73 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65  se used to.** be
2c790 20 64 65 66 69 6e 65 64 20 6c 6f 63 61 6c 6c 79   defined locally
2c7a0 2c 20 62 75 74 20 6e 6f 77 20 77 65 20 75 73 65  , but now we use
2c7b0 20 74 68 65 20 76 61 72 69 6e 74 20 72 6f 75 74   the varint rout
2c7c0 69 6e 65 73 20 69 6e 20 74 68 65 20 75 74 69 6c  ines in the util
2c7d0 2e 63 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2f 0a 69  .c.** file..*/.i
2c7e0 6e 74 20 73 71 6c 69 74 65 33 50 75 74 56 61 72  nt sqlite3PutVar
2c7f0 69 6e 74 28 75 6e 73 69 67 6e 65 64 20 63 68 61  int(unsigned cha
2c800 72 2a 2c 20 75 36 34 29 3b 0a 75 38 20 73 71 6c  r*, u64);.u8 sql
2c810 69 74 65 33 47 65 74 56 61 72 69 6e 74 28 63 6f  ite3GetVarint(co
2c820 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
2c830 72 20 2a 2c 20 75 36 34 20 2a 29 3b 0a 75 38 20  r *, u64 *);.u8 
2c840 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74  sqlite3GetVarint
2c850 33 32 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  32(const unsigne
2c860 64 20 63 68 61 72 20 2a 2c 20 75 33 32 20 2a 29  d char *, u32 *)
2c870 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61 72  ;.int sqlite3Var
2c880 69 6e 74 4c 65 6e 28 75 36 34 20 76 29 3b 0a 0a  intLen(u64 v);..
2c890 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e  /*.** The common
2c8a0 20 63 61 73 65 20 69 73 20 66 6f 72 20 61 20 76   case is for a v
2c8b0 61 72 69 6e 74 20 74 6f 20 62 65 20 61 20 73 69  arint to be a si
2c8c0 6e 67 6c 65 20 62 79 74 65 2e 20 20 54 68 65 79  ngle byte.  They
2c8d0 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 6d 61   following.** ma
2c8e0 63 72 6f 73 20 68 61 6e 64 6c 65 20 74 68 65 20  cros handle the 
2c8f0 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 69 74 68  common case with
2c900 6f 75 74 20 61 20 70 72 6f 63 65 64 75 72 65 20  out a procedure 
2c910 63 61 6c 6c 2c 20 62 75 74 20 74 68 65 6e 20 63  call, but then c
2c920 61 6c 6c 0a 2a 2a 20 74 68 65 20 70 72 6f 63 65  all.** the proce
2c930 64 75 72 65 20 66 6f 72 20 6c 61 72 67 65 72 20  dure for larger 
2c940 76 61 72 69 6e 74 73 2e 0a 2a 2f 0a 23 64 65 66  varints..*/.#def
2c950 69 6e 65 20 67 65 74 56 61 72 69 6e 74 33 32 28  ine getVarint32(
2c960 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29 28 28  A,B)  \.  (u8)((
2c970 2a 28 41 29 3c 28 75 38 29 30 78 38 30 29 3f 28  *(A)<(u8)0x80)?(
2c980 28 42 29 3d 28 75 33 32 29 2a 28 41 29 29 2c 31  (B)=(u32)*(A)),1
2c990 3a 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e  :sqlite3GetVarin
2c9a0 74 33 32 28 28 41 29 2c 28 75 33 32 20 2a 29 26  t32((A),(u32 *)&
2c9b0 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20 70 75  (B))).#define pu
2c9c0 74 56 61 72 69 6e 74 33 32 28 41 2c 42 29 20 20  tVarint32(A,B)  
2c9d0 5c 0a 20 20 28 75 38 29 28 28 28 75 33 32 29 28  \.  (u8)(((u32)(
2c9e0 42 29 3c 28 75 33 32 29 30 78 38 30 29 3f 28 2a  B)<(u32)0x80)?(*
2c9f0 28 41 29 3d 28 75 6e 73 69 67 6e 65 64 20 63 68  (A)=(unsigned ch
2ca00 61 72 29 28 42 29 29 2c 31 3a 5c 0a 20 20 73 71  ar)(B)),1:\.  sq
2ca10 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 28 28  lite3PutVarint((
2ca20 41 29 2c 28 42 29 29 29 0a 23 64 65 66 69 6e 65  A),(B))).#define
2ca30 20 67 65 74 56 61 72 69 6e 74 20 20 20 20 73 71   getVarint    sq
2ca40 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 0a 23  lite3GetVarint.#
2ca50 64 65 66 69 6e 65 20 70 75 74 56 61 72 69 6e 74  define putVarint
2ca60 20 20 20 20 73 71 6c 69 74 65 33 50 75 74 56 61      sqlite3PutVa
2ca70 72 69 6e 74 0a 0a 0a 63 6f 6e 73 74 20 63 68 61  rint...const cha
2ca80 72 20 2a 73 71 6c 69 74 65 33 49 6e 64 65 78 41  r *sqlite3IndexA
2ca90 66 66 69 6e 69 74 79 53 74 72 28 73 71 6c 69 74  ffinityStr(sqlit
2caa0 65 33 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 76 6f  e3*, Index*);.vo
2cab0 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65 41  id sqlite3TableA
2cac0 66 66 69 6e 69 74 79 28 56 64 62 65 2a 2c 20 54  ffinity(Vdbe*, T
2cad0 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 63 68 61  able*, int);.cha
2cae0 72 20 73 71 6c 69 74 65 33 43 6f 6d 70 61 72 65  r sqlite3Compare
2caf0 41 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70  Affinity(Expr *p
2cb00 45 78 70 72 2c 20 63 68 61 72 20 61 66 66 32 29  Expr, char aff2)
2cb10 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 64  ;.int sqlite3Ind
2cb20 65 78 41 66 66 69 6e 69 74 79 4f 6b 28 45 78 70  exAffinityOk(Exp
2cb30 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20 69  r *pExpr, char i
2cb40 64 78 5f 61 66 66 69 6e 69 74 79 29 3b 0a 63 68  dx_affinity);.ch
2cb50 61 72 20 73 71 6c 69 74 65 33 54 61 62 6c 65 43  ar sqlite3TableC
2cb60 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28 54 61  olumnAffinity(Ta
2cb70 62 6c 65 2a 2c 69 6e 74 29 3b 0a 63 68 61 72 20  ble*,int);.char 
2cb80 73 71 6c 69 74 65 33 45 78 70 72 41 66 66 69 6e  sqlite3ExprAffin
2cb90 69 74 79 28 45 78 70 72 20 2a 70 45 78 70 72 29  ity(Expr *pExpr)
2cba0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f  ;.int sqlite3Ato
2cbb0 69 36 34 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  i64(const char*,
2cbc0 20 69 36 34 2a 2c 20 69 6e 74 2c 20 75 38 29 3b   i64*, int, u8);
2cbd0 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 65 63 4f  .int sqlite3DecO
2cbe0 72 48 65 78 54 6f 49 36 34 28 63 6f 6e 73 74 20  rHexToI64(const 
2cbf0 63 68 61 72 2a 2c 20 69 36 34 2a 29 3b 0a 76 6f  char*, i64*);.vo
2cc00 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 57  id sqlite3ErrorW
2cc10 69 74 68 4d 73 67 28 73 71 6c 69 74 65 33 2a 2c  ithMsg(sqlite3*,
2cc20 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72   int, const char
2cc30 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c  *,...);.void sql
2cc40 69 74 65 33 45 72 72 6f 72 28 73 71 6c 69 74 65  ite3Error(sqlite
2cc50 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  3*,int);.void sq
2cc60 6c 69 74 65 33 53 79 73 74 65 6d 45 72 72 6f 72  lite3SystemError
2cc70 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a  (sqlite3*,int);.
2cc80 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 48 65 78  void *sqlite3Hex
2cc90 54 6f 42 6c 6f 62 28 73 71 6c 69 74 65 33 2a 2c  ToBlob(sqlite3*,
2cca0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20   const char *z, 
2ccb0 69 6e 74 20 6e 29 3b 0a 75 38 20 73 71 6c 69 74  int n);.u8 sqlit
2ccc0 65 33 48 65 78 54 6f 49 6e 74 28 69 6e 74 20 68  e3HexToInt(int h
2ccd0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 77  );.int sqlite3Tw
2cce0 6f 50 61 72 74 4e 61 6d 65 28 50 61 72 73 65 20  oPartName(Parse 
2ccf0 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65  *, Token *, Toke
2cd00 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2a 29 3b 0a  n *, Token **);.
2cd10 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
2cd20 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d  ITE_NEED_ERR_NAM
2cd30 45 29 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73  E).const char *s
2cd40 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28 69 6e  qlite3ErrName(in
2cd50 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  t);.#endif..#ifd
2cd60 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
2cd70 5f 44 45 53 45 52 49 41 4c 49 5a 45 0a 69 6e 74  _DESERIALIZE.int
2cd80 20 73 71 6c 69 74 65 33 4d 65 6d 64 62 49 6e 69   sqlite3MemdbIni
2cd90 74 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a  t(void);.#endif.
2cda0 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c  .const char *sql
2cdb0 69 74 65 33 45 72 72 53 74 72 28 69 6e 74 29 3b  ite3ErrStr(int);
2cdc0 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 61 64  .int sqlite3Read
2cdd0 53 63 68 65 6d 61 28 50 61 72 73 65 20 2a 70 50  Schema(Parse *pP
2cde0 61 72 73 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a  arse);.CollSeq *
2cdf0 73 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c 6c 53  sqlite3FindCollS
2ce00 65 71 28 73 71 6c 69 74 65 33 2a 2c 75 38 20 65  eq(sqlite3*,u8 e
2ce10 6e 63 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  nc, const char*,
2ce20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
2ce30 33 49 73 42 69 6e 61 72 79 28 63 6f 6e 73 74 20  3IsBinary(const 
2ce40 43 6f 6c 6c 53 65 71 2a 29 3b 0a 43 6f 6c 6c 53  CollSeq*);.CollS
2ce50 65 71 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74  eq *sqlite3Locat
2ce60 65 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a  eCollSeq(Parse *
2ce70 70 50 61 72 73 65 2c 20 63 6f 6e 73 74 20 63 68  pParse, const ch
2ce80 61 72 2a 7a 4e 61 6d 65 29 3b 0a 43 6f 6c 6c 53  ar*zName);.CollS
2ce90 65 71 20 2a 73 71 6c 69 74 65 33 45 78 70 72 43  eq *sqlite3ExprC
2cea0 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70 50  ollSeq(Parse *pP
2ceb0 61 72 73 65 2c 20 45 78 70 72 20 2a 70 45 78 70  arse, Expr *pExp
2cec0 72 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c  r);.CollSeq *sql
2ced0 69 74 65 33 45 78 70 72 4e 4e 43 6f 6c 6c 53 65  ite3ExprNNCollSe
2cee0 71 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c  q(Parse *pParse,
2cef0 20 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 69   Expr *pExpr);.i
2cf00 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
2cf10 6c 6c 53 65 71 4d 61 74 63 68 28 50 61 72 73 65  llSeqMatch(Parse
2cf20 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a  *,Expr*,Expr*);.
2cf30 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
2cf40 72 41 64 64 43 6f 6c 6c 61 74 65 54 6f 6b 65 6e  rAddCollateToken
2cf50 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20  (Parse *pParse, 
2cf60 45 78 70 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b  Expr*, const Tok
2cf70 65 6e 2a 2c 20 69 6e 74 29 3b 0a 45 78 70 72 20  en*, int);.Expr 
2cf80 2a 73 71 6c 69 74 65 33 45 78 70 72 41 64 64 43  *sqlite3ExprAddC
2cf90 6f 6c 6c 61 74 65 53 74 72 69 6e 67 28 50 61 72  ollateString(Par
2cfa0 73 65 2a 2c 45 78 70 72 2a 2c 63 6f 6e 73 74 20  se*,Expr*,const 
2cfb0 63 68 61 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71  char*);.Expr *sq
2cfc0 6c 69 74 65 33 45 78 70 72 53 6b 69 70 43 6f 6c  lite3ExprSkipCol
2cfd0 6c 61 74 65 28 45 78 70 72 2a 29 3b 0a 69 6e 74  late(Expr*);.int
2cfe0 20 73 71 6c 69 74 65 33 43 68 65 63 6b 43 6f 6c   sqlite3CheckCol
2cff0 6c 53 65 71 28 50 61 72 73 65 20 2a 2c 20 43 6f  lSeq(Parse *, Co
2d000 6c 6c 53 65 71 20 2a 29 3b 0a 69 6e 74 20 73 71  llSeq *);.int sq
2d010 6c 69 74 65 33 57 72 69 74 61 62 6c 65 53 63 68  lite3WritableSch
2d020 65 6d 61 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69  ema(sqlite3*);.i
2d030 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 4f  nt sqlite3CheckO
2d040 62 6a 65 63 74 4e 61 6d 65 28 50 61 72 73 65 20  bjectName(Parse 
2d050 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29  *, const char *)
2d060 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64  ;.void sqlite3Vd
2d070 62 65 53 65 74 43 68 61 6e 67 65 73 28 73 71 6c  beSetChanges(sql
2d080 69 74 65 33 20 2a 2c 20 69 6e 74 29 3b 0a 69 6e  ite3 *, int);.in
2d090 74 20 73 71 6c 69 74 65 33 41 64 64 49 6e 74 36  t sqlite3AddInt6
2d0a0 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74  4(i64*,i64);.int
2d0b0 20 73 71 6c 69 74 65 33 53 75 62 49 6e 74 36 34   sqlite3SubInt64
2d0c0 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20  (i64*,i64);.int 
2d0d0 73 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36 34 28  sqlite3MulInt64(
2d0e0 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73  i64*,i64);.int s
2d0f0 71 6c 69 74 65 33 41 62 73 49 6e 74 33 32 28 69  qlite3AbsInt32(i
2d100 6e 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  nt);.#ifdef SQLI
2d110 54 45 5f 45 4e 41 42 4c 45 5f 38 5f 33 5f 4e 41  TE_ENABLE_8_3_NA
2d120 4d 45 53 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  MES.void sqlite3
2d130 46 69 6c 65 53 75 66 66 69 78 33 28 63 6f 6e 73  FileSuffix3(cons
2d140 74 20 63 68 61 72 2a 2c 20 63 68 61 72 2a 29 3b  t char*, char*);
2d150 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
2d160 73 71 6c 69 74 65 33 46 69 6c 65 53 75 66 66 69  sqlite3FileSuffi
2d170 78 33 28 58 2c 59 29 0a 23 65 6e 64 69 66 0a 75  x3(X,Y).#endif.u
2d180 38 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c  8 sqlite3GetBool
2d190 65 61 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  ean(const char *
2d1a0 7a 2c 75 38 29 3b 0a 0a 63 6f 6e 73 74 20 76 6f  z,u8);..const vo
2d1b0 69 64 20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65  id *sqlite3Value
2d1c0 54 65 78 74 28 73 71 6c 69 74 65 33 5f 76 61 6c  Text(sqlite3_val
2d1d0 75 65 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71  ue*, u8);.int sq
2d1e0 6c 69 74 65 33 56 61 6c 75 65 42 79 74 65 73 28  lite3ValueBytes(
2d1f0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20  sqlite3_value*, 
2d200 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  u8);.void sqlite
2d210 33 56 61 6c 75 65 53 65 74 53 74 72 28 73 71 6c  3ValueSetStr(sql
2d220 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 69 6e 74  ite3_value*, int
2d230 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 2c 75  , const void *,u
2d240 38 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  8,.             
2d250 20 20 20 20 20 20 20 20 20 20 20 76 6f 69 64 28             void(
2d260 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69 64  *)(void*));.void
2d270 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74   sqlite3ValueSet
2d280 4e 75 6c 6c 28 73 71 6c 69 74 65 33 5f 76 61 6c  Null(sqlite3_val
2d290 75 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ue*);.void sqlit
2d2a0 65 33 56 61 6c 75 65 46 72 65 65 28 73 71 6c 69  e3ValueFree(sqli
2d2b0 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 73 71 6c  te3_value*);.sql
2d2c0 69 74 65 33 5f 76 61 6c 75 65 20 2a 73 71 6c 69  ite3_value *sqli
2d2d0 74 65 33 56 61 6c 75 65 4e 65 77 28 73 71 6c 69  te3ValueNew(sqli
2d2e0 74 65 33 20 2a 29 3b 0a 23 69 66 6e 64 65 66 20  te3 *);.#ifndef 
2d2f0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
2d300 36 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 55  6.char *sqlite3U
2d310 74 66 31 36 74 6f 38 28 73 71 6c 69 74 65 33 20  tf16to8(sqlite3 
2d320 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20  *, const void*, 
2d330 69 6e 74 2c 20 75 38 29 3b 0a 23 65 6e 64 69 66  int, u8);.#endif
2d340 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61 6c 75  .int sqlite3Valu
2d350 65 46 72 6f 6d 45 78 70 72 28 73 71 6c 69 74 65  eFromExpr(sqlite
2d360 33 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75 38 2c  3 *, Expr *, u8,
2d370 20 75 38 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c   u8, sqlite3_val
2d380 75 65 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ue **);.void sql
2d390 69 74 65 33 56 61 6c 75 65 41 70 70 6c 79 41 66  ite3ValueApplyAf
2d3a0 66 69 6e 69 74 79 28 73 71 6c 69 74 65 33 5f 76  finity(sqlite3_v
2d3b0 61 6c 75 65 20 2a 2c 20 75 38 2c 20 75 38 29 3b  alue *, u8, u8);
2d3c0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2d3d0 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 65 78 74  AMALGAMATION.ext
2d3e0 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e  ern const unsign
2d3f0 65 64 20 63 68 61 72 20 73 71 6c 69 74 65 33 4f  ed char sqlite3O
2d400 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d 3b  pcodeProperty[];
2d410 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 63 68  .extern const ch
2d420 61 72 20 73 71 6c 69 74 65 33 53 74 72 42 49 4e  ar sqlite3StrBIN
2d430 41 52 59 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f  ARY[];.extern co
2d440 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
2d450 72 20 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f  r sqlite3UpperTo
2d460 4c 6f 77 65 72 5b 5d 3b 0a 65 78 74 65 72 6e 20  Lower[];.extern 
2d470 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
2d480 68 61 72 20 73 71 6c 69 74 65 33 43 74 79 70 65  har sqlite3Ctype
2d490 4d 61 70 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f  Map[];.extern co
2d4a0 6e 73 74 20 54 6f 6b 65 6e 20 73 71 6c 69 74 65  nst Token sqlite
2d4b0 33 49 6e 74 54 6f 6b 65 6e 73 5b 5d 3b 0a 65 78  3IntTokens[];.ex
2d4c0 74 65 72 6e 20 53 51 4c 49 54 45 5f 57 53 44 20  tern SQLITE_WSD 
2d4d0 73 74 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f  struct Sqlite3Co
2d4e0 6e 66 69 67 20 73 71 6c 69 74 65 33 43 6f 6e 66  nfig sqlite3Conf
2d4f0 69 67 3b 0a 65 78 74 65 72 6e 20 46 75 6e 63 44  ig;.extern FuncD
2d500 65 66 48 61 73 68 20 73 71 6c 69 74 65 33 42 75  efHash sqlite3Bu
2d510 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 3b 0a  iltinFunctions;.
2d520 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2d530 4d 49 54 5f 57 53 44 0a 65 78 74 65 72 6e 20 69  MIT_WSD.extern i
2d540 6e 74 20 73 71 6c 69 74 65 33 50 65 6e 64 69 6e  nt sqlite3Pendin
2d550 67 42 79 74 65 3b 0a 23 65 6e 64 69 66 0a 23 65  gByte;.#endif.#e
2d560 6e 64 69 66 0a 23 69 66 64 65 66 20 56 44 42 45  ndif.#ifdef VDBE
2d570 5f 50 52 4f 46 49 4c 45 0a 65 78 74 65 72 6e 20  _PROFILE.extern 
2d580 73 71 6c 69 74 65 33 5f 75 69 6e 74 36 34 20 73  sqlite3_uint64 s
2d590 71 6c 69 74 65 33 4e 50 72 6f 66 69 6c 65 43 6e  qlite3NProfileCn
2d5a0 74 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  t;.#endif.void s
2d5b0 71 6c 69 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f  qlite3RootPageMo
2d5c0 76 65 64 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  ved(sqlite3*, in
2d5d0 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  t, int, int);.vo
2d5e0 69 64 20 73 71 6c 69 74 65 33 52 65 69 6e 64 65  id sqlite3Reinde
2d5f0 78 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  x(Parse*, Token*
2d600 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  , Token*);.void 
2d610 73 71 6c 69 74 65 33 41 6c 74 65 72 46 75 6e 63  sqlite3AlterFunc
2d620 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69  tions(void);.voi
2d630 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 52 65  d sqlite3AlterRe
2d640 6e 61 6d 65 54 61 62 6c 65 28 50 61 72 73 65 2a  nameTable(Parse*
2d650 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65  , SrcList*, Toke
2d660 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
2d670 33 41 6c 74 65 72 52 65 6e 61 6d 65 43 6f 6c 75  3AlterRenameColu
2d680 6d 6e 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  mn(Parse*, SrcLi
2d690 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  st*, Token*, Tok
2d6a0 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
2d6b0 33 47 65 74 54 6f 6b 65 6e 28 63 6f 6e 73 74 20  3GetToken(const 
2d6c0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c  unsigned char *,
2d6d0 20 69 6e 74 20 2a 29 3b 0a 23 69 66 64 65 66 20   int *);.#ifdef 
2d6e0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4e 4f  SQLITE_ENABLE_NO
2d6f0 52 4d 41 4c 49 5a 45 0a 69 6e 74 20 73 71 6c 69  RMALIZE.int sqli
2d700 74 65 33 47 65 74 54 6f 6b 65 6e 4e 6f 72 6d 61  te3GetTokenNorma
2d710 6c 69 7a 65 64 28 63 6f 6e 73 74 20 75 6e 73 69  lized(const unsi
2d720 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 69 6e 74  gned char *, int
2d730 20 2a 2c 20 69 6e 74 20 2a 29 3b 0a 23 65 6e 64   *, int *);.#end
2d740 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4e  if.void sqlite3N
2d750 65 73 74 65 64 50 61 72 73 65 28 50 61 72 73 65  estedParse(Parse
2d760 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
2d770 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ...);.void sqlit
2d780 65 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64  e3ExpirePrepared
2d790 53 74 61 74 65 6d 65 6e 74 73 28 73 71 6c 69 74  Statements(sqlit
2d7a0 65 33 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  e3*, int);.int s
2d7b0 71 6c 69 74 65 33 43 6f 64 65 53 75 62 73 65 6c  qlite3CodeSubsel
2d7c0 65 63 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ect(Parse*, Expr
2d7d0 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76   *, int, int);.v
2d7e0 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63  oid sqlite3Selec
2d7f0 74 50 72 65 70 28 50 61 72 73 65 2a 2c 20 53 65  tPrep(Parse*, Se
2d800 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65  lect*, NameConte
2d810 78 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  xt*);.void sqlit
2d820 65 33 53 65 6c 65 63 74 57 72 6f 6e 67 4e 75 6d  e3SelectWrongNum
2d830 54 65 72 6d 73 45 72 72 6f 72 28 50 61 72 73 65  TermsError(Parse
2d840 20 2a 70 50 61 72 73 65 2c 20 53 65 6c 65 63 74   *pParse, Select
2d850 20 2a 70 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65   *p);.int sqlite
2d860 33 4d 61 74 63 68 53 70 61 6e 4e 61 6d 65 28 63  3MatchSpanName(c
2d870 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
2d880 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
2d890 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
2d8a0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  *);.int sqlite3R
2d8b0 65 73 6f 6c 76 65 45 78 70 72 4e 61 6d 65 73 28  esolveExprNames(
2d8c0 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78  NameContext*, Ex
2d8d0 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
2d8e0 33 52 65 73 6f 6c 76 65 45 78 70 72 4c 69 73 74  3ResolveExprList
2d8f0 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78  Names(NameContex
2d900 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a  t*, ExprList*);.
2d910 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f  void sqlite3Reso
2d920 6c 76 65 53 65 6c 65 63 74 4e 61 6d 65 73 28 50  lveSelectNames(P
2d930 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  arse*, Select*, 
2d940 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76  NameContext*);.v
2d950 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c  oid sqlite3Resol
2d960 76 65 53 65 6c 66 52 65 66 65 72 65 6e 63 65 28  veSelfReference(
2d970 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e  Parse*,Table*,in
2d980 74 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74  t,Expr*,ExprList
2d990 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  *);.int sqlite3R
2d9a0 65 73 6f 6c 76 65 4f 72 64 65 72 47 72 6f 75 70  esolveOrderGroup
2d9b0 42 79 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63  By(Parse*, Selec
2d9c0 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 63  t*, ExprList*, c
2d9d0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
2d9e0 64 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 44  d sqlite3ColumnD
2d9f0 65 66 61 75 6c 74 28 56 64 62 65 20 2a 2c 20 54  efault(Vdbe *, T
2da00 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  able *, int, int
2da10 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
2da20 6c 74 65 72 46 69 6e 69 73 68 41 64 64 43 6f 6c  lterFinishAddCol
2da30 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b  umn(Parse *, Tok
2da40 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  en *);.void sqli
2da50 74 65 33 41 6c 74 65 72 42 65 67 69 6e 41 64 64  te3AlterBeginAdd
2da60 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20  Column(Parse *, 
2da70 53 72 63 4c 69 73 74 20 2a 29 3b 0a 76 6f 69 64  SrcList *);.void
2da80 20 2a 73 71 6c 69 74 65 33 52 65 6e 61 6d 65 54   *sqlite3RenameT
2da90 6f 6b 65 6e 4d 61 70 28 50 61 72 73 65 2a 2c 20  okenMap(Parse*, 
2daa0 76 6f 69 64 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  void*, Token*);.
2dab0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6e 61  void sqlite3Rena
2dac0 6d 65 54 6f 6b 65 6e 52 65 6d 61 70 28 50 61 72  meTokenRemap(Par
2dad0 73 65 2a 2c 20 76 6f 69 64 20 2a 70 54 6f 2c 20  se*, void *pTo, 
2dae0 76 6f 69 64 20 2a 70 46 72 6f 6d 29 3b 0a 76 6f  void *pFrom);.vo
2daf0 69 64 20 73 71 6c 69 74 65 33 52 65 6e 61 6d 65  id sqlite3Rename
2db00 45 78 70 72 55 6e 6d 61 70 28 50 61 72 73 65 2a  ExprUnmap(Parse*
2db10 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
2db20 71 6c 69 74 65 33 52 65 6e 61 6d 65 45 78 70 72  qlite3RenameExpr
2db30 6c 69 73 74 55 6e 6d 61 70 28 50 61 72 73 65 2a  listUnmap(Parse*
2db40 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 43 6f  , ExprList*);.Co
2db50 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 47 65  llSeq *sqlite3Ge
2db60 74 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 2a 2c  tCollSeq(Parse*,
2db70 20 75 38 2c 20 43 6f 6c 6c 53 65 71 20 2a 2c 20   u8, CollSeq *, 
2db80 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68  const char*);.ch
2db90 61 72 20 73 71 6c 69 74 65 33 41 66 66 69 6e 69  ar sqlite3Affini
2dba0 74 79 54 79 70 65 28 63 6f 6e 73 74 20 63 68 61  tyType(const cha
2dbb0 72 2a 2c 20 43 6f 6c 75 6d 6e 2a 29 3b 0a 76 6f  r*, Column*);.vo
2dbc0 69 64 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a  id sqlite3Analyz
2dbd0 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  e(Parse*, Token*
2dbe0 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
2dbf0 71 6c 69 74 65 33 49 6e 76 6f 6b 65 42 75 73 79  qlite3InvokeBusy
2dc00 48 61 6e 64 6c 65 72 28 42 75 73 79 48 61 6e 64  Handler(BusyHand
2dc10 6c 65 72 2a 2c 20 73 71 6c 69 74 65 33 5f 66 69  ler*, sqlite3_fi
2dc20 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  le*);.int sqlite
2dc30 33 46 69 6e 64 44 62 28 73 71 6c 69 74 65 33 2a  3FindDb(sqlite3*
2dc40 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
2dc50 71 6c 69 74 65 33 46 69 6e 64 44 62 4e 61 6d 65  qlite3FindDbName
2dc60 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73  (sqlite3 *, cons
2dc70 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73  t char *);.int s
2dc80 71 6c 69 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f  qlite3AnalysisLo
2dc90 61 64 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20  ad(sqlite3*,int 
2dca0 69 44 42 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  iDB);.void sqlit
2dcb0 65 33 44 65 6c 65 74 65 49 6e 64 65 78 53 61 6d  e3DeleteIndexSam
2dcc0 70 6c 65 73 28 73 71 6c 69 74 65 33 2a 2c 49 6e  ples(sqlite3*,In
2dcd0 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  dex*);.void sqli
2dce0 74 65 33 44 65 66 61 75 6c 74 52 6f 77 45 73 74  te3DefaultRowEst
2dcf0 28 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73  (Index*);.void s
2dd00 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 4c 69  qlite3RegisterLi
2dd10 6b 65 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69  keFunctions(sqli
2dd20 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  te3*, int);.int 
2dd30 73 71 6c 69 74 65 33 49 73 4c 69 6b 65 46 75 6e  sqlite3IsLikeFun
2dd40 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 45  ction(sqlite3*,E
2dd50 78 70 72 2a 2c 69 6e 74 2a 2c 63 68 61 72 2a 29  xpr*,int*,char*)
2dd60 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 63  ;.void sqlite3Sc
2dd70 68 65 6d 61 43 6c 65 61 72 28 76 6f 69 64 20 2a  hemaClear(void *
2dd80 29 3b 0a 53 63 68 65 6d 61 20 2a 73 71 6c 69 74  );.Schema *sqlit
2dd90 65 33 53 63 68 65 6d 61 47 65 74 28 73 71 6c 69  e3SchemaGet(sqli
2dda0 74 65 33 20 2a 2c 20 42 74 72 65 65 20 2a 29 3b  te3 *, Btree *);
2ddb0 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 63 68 65  .int sqlite3Sche
2ddc0 6d 61 54 6f 49 6e 64 65 78 28 73 71 6c 69 74 65  maToIndex(sqlite
2ddd0 33 20 2a 64 62 2c 20 53 63 68 65 6d 61 20 2a 29  3 *db, Schema *)
2dde0 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74  ;.KeyInfo *sqlit
2ddf0 65 33 4b 65 79 49 6e 66 6f 41 6c 6c 6f 63 28 73  e3KeyInfoAlloc(s
2de00 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 69 6e 74 29  qlite3*,int,int)
2de10 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4b 65  ;.void sqlite3Ke
2de20 79 49 6e 66 6f 55 6e 72 65 66 28 4b 65 79 49 6e  yInfoUnref(KeyIn
2de30 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73  fo*);.KeyInfo *s
2de40 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 52 65 66  qlite3KeyInfoRef
2de50 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49  (KeyInfo*);.KeyI
2de60 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49  nfo *sqlite3KeyI
2de70 6e 66 6f 4f 66 49 6e 64 65 78 28 50 61 72 73 65  nfoOfIndex(Parse
2de80 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 4b 65 79 49  *, Index*);.KeyI
2de90 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49  nfo *sqlite3KeyI
2dea0 6e 66 6f 46 72 6f 6d 45 78 70 72 4c 69 73 74 28  nfoFromExprList(
2deb0 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74  Parse*, ExprList
2dec0 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 23  *, int, int);..#
2ded0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
2dee0 55 47 0a 69 6e 74 20 73 71 6c 69 74 65 33 4b 65  UG.int sqlite3Ke
2def0 79 49 6e 66 6f 49 73 57 72 69 74 65 61 62 6c 65  yInfoIsWriteable
2df00 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 23 65 6e 64  (KeyInfo*);.#end
2df10 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 72  if.int sqlite3Cr
2df20 65 61 74 65 46 75 6e 63 28 73 71 6c 69 74 65 33  eateFunc(sqlite3
2df30 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a   *, const char *
2df40 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 76 6f 69 64  , int, int, void
2df50 20 2a 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28 73   *,.  void (*)(s
2df60 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
2df70 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
2df80 65 20 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a  e **),.  void (*
2df90 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
2dfa0 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
2dfb0 61 6c 75 65 20 2a 2a 29 2c 20 0a 20 20 76 6f 69  alue **), .  voi
2dfc0 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f  d (*)(sqlite3_co
2dfd0 6e 74 65 78 74 2a 29 2c 0a 20 20 76 6f 69 64 20  ntext*),.  void 
2dfe0 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  (*)(sqlite3_cont
2dff0 65 78 74 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a  ext*),.  void (*
2e000 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
2e010 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
2e020 61 6c 75 65 20 2a 2a 29 2c 20 0a 20 20 46 75 6e  alue **), .  Fun
2e030 63 44 65 73 74 72 75 63 74 6f 72 20 2a 70 44 65  cDestructor *pDe
2e040 73 74 72 75 63 74 6f 72 0a 29 3b 0a 76 6f 69 64  structor.);.void
2e050 20 73 71 6c 69 74 65 33 4e 6f 6f 70 44 65 73 74   sqlite3NoopDest
2e060 72 75 63 74 6f 72 28 76 6f 69 64 2a 29 3b 0a 76  ructor(void*);.v
2e070 6f 69 64 20 73 71 6c 69 74 65 33 4f 6f 6d 46 61  oid sqlite3OomFa
2e080 75 6c 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76  ult(sqlite3*);.v
2e090 6f 69 64 20 73 71 6c 69 74 65 33 4f 6f 6d 43 6c  oid sqlite3OomCl
2e0a0 65 61 72 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69  ear(sqlite3*);.i
2e0b0 6e 74 20 73 71 6c 69 74 65 33 41 70 69 45 78 69  nt sqlite3ApiExi
2e0c0 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 69  t(sqlite3 *db, i
2e0d0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
2e0e0 4f 70 65 6e 54 65 6d 70 44 61 74 61 62 61 73 65  OpenTempDatabase
2e0f0 28 50 61 72 73 65 20 2a 29 3b 0a 0a 76 6f 69 64  (Parse *);..void
2e100 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d   sqlite3StrAccum
2e110 49 6e 69 74 28 53 74 72 41 63 63 75 6d 2a 2c 20  Init(StrAccum*, 
2e120 73 71 6c 69 74 65 33 2a 2c 20 63 68 61 72 2a 2c  sqlite3*, char*,
2e130 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 63 68 61 72   int, int);.char
2e140 20 2a 73 71 6c 69 74 65 33 53 74 72 41 63 63 75   *sqlite3StrAccu
2e150 6d 46 69 6e 69 73 68 28 53 74 72 41 63 63 75 6d  mFinish(StrAccum
2e160 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2e170 53 65 6c 65 63 74 44 65 73 74 49 6e 69 74 28 53  SelectDestInit(S
2e180 65 6c 65 63 74 44 65 73 74 2a 2c 69 6e 74 2c 69  electDest*,int,i
2e190 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  nt);.Expr *sqlit
2e1a0 65 33 43 72 65 61 74 65 43 6f 6c 75 6d 6e 45 78  e3CreateColumnEx
2e1b0 70 72 28 73 71 6c 69 74 65 33 20 2a 2c 20 53 72  pr(sqlite3 *, Sr
2e1c0 63 4c 69 73 74 20 2a 2c 20 69 6e 74 2c 20 69 6e  cList *, int, in
2e1d0 74 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  t);..void sqlite
2e1e0 33 42 61 63 6b 75 70 52 65 73 74 61 72 74 28 73  3BackupRestart(s
2e1f0 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 29  qlite3_backup *)
2e200 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 61  ;.void sqlite3Ba
2e210 63 6b 75 70 55 70 64 61 74 65 28 73 71 6c 69 74  ckupUpdate(sqlit
2e220 65 33 5f 62 61 63 6b 75 70 20 2a 2c 20 50 67 6e  e3_backup *, Pgn
2e230 6f 2c 20 63 6f 6e 73 74 20 75 38 20 2a 29 3b 0a  o, const u8 *);.
2e240 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2e250 4f 4d 49 54 5f 53 55 42 51 55 45 52 59 0a 69 6e  OMIT_SUBQUERY.in
2e260 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 68 65  t sqlite3ExprChe
2e270 63 6b 49 4e 28 50 61 72 73 65 2a 2c 20 45 78 70  ckIN(Parse*, Exp
2e280 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  r*);.#else.# def
2e290 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 72 43  ine sqlite3ExprC
2e2a0 68 65 63 6b 49 4e 28 78 2c 79 29 20 53 51 4c 49  heckIN(x,y) SQLI
2e2b0 54 45 5f 4f 4b 0a 23 65 6e 64 69 66 0a 0a 23 69  TE_OK.#endif..#i
2e2c0 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
2e2d0 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
2e2e0 34 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6e  4.void sqlite3An
2e2f0 61 6c 79 7a 65 46 75 6e 63 74 69 6f 6e 73 28 76  alyzeFunctions(v
2e300 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  oid);.int sqlite
2e310 33 53 74 61 74 34 50 72 6f 62 65 53 65 74 56 61  3Stat4ProbeSetVa
2e320 6c 75 65 28 0a 20 20 20 20 50 61 72 73 65 2a 2c  lue(.    Parse*,
2e330 49 6e 64 65 78 2a 2c 55 6e 70 61 63 6b 65 64 52  Index*,UnpackedR
2e340 65 63 6f 72 64 2a 2a 2c 45 78 70 72 2a 2c 69 6e  ecord**,Expr*,in
2e350 74 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 69 6e 74  t,int,int*);.int
2e360 20 73 71 6c 69 74 65 33 53 74 61 74 34 56 61 6c   sqlite3Stat4Val
2e370 75 65 46 72 6f 6d 45 78 70 72 28 50 61 72 73 65  ueFromExpr(Parse
2e380 2a 2c 20 45 78 70 72 2a 2c 20 75 38 2c 20 73 71  *, Expr*, u8, sq
2e390 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a  lite3_value**);.
2e3a0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74  void sqlite3Stat
2e3b0 34 50 72 6f 62 65 46 72 65 65 28 55 6e 70 61 63  4ProbeFree(Unpac
2e3c0 6b 65 64 52 65 63 6f 72 64 2a 29 3b 0a 69 6e 74  kedRecord*);.int
2e3d0 20 73 71 6c 69 74 65 33 53 74 61 74 34 43 6f 6c   sqlite3Stat4Col
2e3e0 75 6d 6e 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f  umn(sqlite3*, co
2e3f0 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20  nst void*, int, 
2e400 69 6e 74 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c  int, sqlite3_val
2e410 75 65 2a 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69  ue**);.char sqli
2e420 74 65 33 49 6e 64 65 78 43 6f 6c 75 6d 6e 41 66  te3IndexColumnAf
2e430 66 69 6e 69 74 79 28 73 71 6c 69 74 65 33 2a 2c  finity(sqlite3*,
2e440 20 49 6e 64 65 78 2a 2c 20 69 6e 74 29 3b 0a 23   Index*, int);.#
2e450 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
2e460 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68   interface to th
2e470 65 20 4c 45 4d 4f 4e 2d 67 65 6e 65 72 61 74 65  e LEMON-generate
2e480 64 20 70 61 72 73 65 72 0a 2a 2f 0a 23 69 66 6e  d parser.*/.#ifn
2e490 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47  def SQLITE_AMALG
2e4a0 41 4d 41 54 49 4f 4e 0a 20 20 76 6f 69 64 20 2a  AMATION.  void *
2e4b0 73 71 6c 69 74 65 33 50 61 72 73 65 72 41 6c 6c  sqlite3ParserAll
2e4c0 6f 63 28 76 6f 69 64 2a 28 2a 29 28 75 36 34 29  oc(void*(*)(u64)
2e4d0 2c 20 50 61 72 73 65 2a 29 3b 0a 20 20 76 6f 69  , Parse*);.  voi
2e4e0 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 46  d sqlite3ParserF
2e4f0 72 65 65 28 76 6f 69 64 2a 2c 20 76 6f 69 64 28  ree(void*, void(
2e500 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 23 65 6e 64  *)(void*));.#end
2e510 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  if.void sqlite3P
2e520 61 72 73 65 72 28 76 6f 69 64 2a 2c 20 69 6e 74  arser(void*, int
2e530 2c 20 54 6f 6b 65 6e 29 3b 0a 69 6e 74 20 73 71  , Token);.int sq
2e540 6c 69 74 65 33 50 61 72 73 65 72 46 61 6c 6c 62  lite3ParserFallb
2e550 61 63 6b 28 69 6e 74 29 3b 0a 23 69 66 64 65 66  ack(int);.#ifdef
2e560 20 59 59 54 52 41 43 4b 4d 41 58 53 54 41 43 4b   YYTRACKMAXSTACK
2e570 44 45 50 54 48 0a 20 20 69 6e 74 20 73 71 6c 69  DEPTH.  int sqli
2e580 74 65 33 50 61 72 73 65 72 53 74 61 63 6b 50 65  te3ParserStackPe
2e590 61 6b 28 76 6f 69 64 2a 29 3b 0a 23 65 6e 64 69  ak(void*);.#endi
2e5a0 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  f..void sqlite3A
2e5b0 75 74 6f 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e  utoLoadExtension
2e5c0 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 69 66  s(sqlite3*);.#if
2e5d0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2e5e0 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e 0a  _LOAD_EXTENSION.
2e5f0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c    void sqlite3Cl
2e600 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28 73 71  oseExtensions(sq
2e610 6c 69 74 65 33 2a 29 3b 0a 23 65 6c 73 65 0a 23  lite3*);.#else.#
2e620 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43   define sqlite3C
2e630 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28 58  loseExtensions(X
2e640 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  ).#endif..#ifnde
2e650 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48  f SQLITE_OMIT_SH
2e660 41 52 45 44 5f 43 41 43 48 45 0a 20 20 76 6f 69  ARED_CACHE.  voi
2e670 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f  d sqlite3TableLo
2e680 63 6b 28 50 61 72 73 65 20 2a 2c 20 69 6e 74 2c  ck(Parse *, int,
2e690 20 69 6e 74 2c 20 75 38 2c 20 63 6f 6e 73 74 20   int, u8, const 
2e6a0 63 68 61 72 20 2a 29 3b 0a 23 65 6c 73 65 0a 20  char *);.#else. 
2e6b0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
2e6c0 54 61 62 6c 65 4c 6f 63 6b 28 76 2c 77 2c 78 2c  TableLock(v,w,x,
2e6d0 79 2c 7a 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66  y,z).#endif..#if
2e6e0 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
2e6f0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66    int sqlite3Utf
2e700 38 54 6f 38 28 75 6e 73 69 67 6e 65 64 20 63 68  8To8(unsigned ch
2e710 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  ar*);.#endif..#i
2e720 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
2e730 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 23 20  _VIRTUALTABLE.# 
2e740 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
2e750 74 61 62 43 6c 65 61 72 28 59 29 0a 23 20 20 64  tabClear(Y).#  d
2e760 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
2e770 62 53 79 6e 63 28 58 2c 59 29 20 53 51 4c 49 54  bSync(X,Y) SQLIT
2e780 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20 73  E_OK.#  define s
2e790 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61  qlite3VtabRollba
2e7a0 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20  ck(X).#  define 
2e7b0 73 71 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d 69  sqlite3VtabCommi
2e7c0 74 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73  t(X).#  define s
2e7d0 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63  qlite3VtabInSync
2e7e0 28 64 62 29 20 30 0a 23 20 20 64 65 66 69 6e 65  (db) 0.#  define
2e7f0 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b   sqlite3VtabLock
2e800 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71  (X).#  define sq
2e810 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28  lite3VtabUnlock(
2e820 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  X).#  define sql
2e830 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69  ite3VtabUnlockLi
2e840 73 74 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20  st(X).#  define 
2e850 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70  sqlite3VtabSavep
2e860 6f 69 6e 74 28 58 2c 20 59 2c 20 5a 29 20 53 51  oint(X, Y, Z) SQ
2e870 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e  LITE_OK.#  defin
2e880 65 20 73 71 6c 69 74 65 33 47 65 74 56 54 61 62  e sqlite3GetVTab
2e890 6c 65 28 58 2c 59 29 20 20 28 28 56 54 61 62 6c  le(X,Y)  ((VTabl
2e8a0 65 2a 29 30 29 0a 23 65 6c 73 65 0a 20 20 20 76  e*)0).#else.   v
2e8b0 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 43  oid sqlite3VtabC
2e8c0 6c 65 61 72 28 73 71 6c 69 74 65 33 20 2a 64 62  lear(sqlite3 *db
2e8d0 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 20 76 6f  , Table*);.   vo
2e8e0 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 44 69  id sqlite3VtabDi
2e8f0 73 63 6f 6e 6e 65 63 74 28 73 71 6c 69 74 65 33  sconnect(sqlite3
2e900 20 2a 64 62 2c 20 54 61 62 6c 65 20 2a 70 29 3b   *db, Table *p);
2e910 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56  .   int sqlite3V
2e920 74 61 62 53 79 6e 63 28 73 71 6c 69 74 65 33 20  tabSync(sqlite3 
2e930 2a 64 62 2c 20 56 64 62 65 2a 29 3b 0a 20 20 20  *db, Vdbe*);.   
2e940 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 52  int sqlite3VtabR
2e950 6f 6c 6c 62 61 63 6b 28 73 71 6c 69 74 65 33 20  ollback(sqlite3 
2e960 2a 64 62 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c  *db);.   int sql
2e970 69 74 65 33 56 74 61 62 43 6f 6d 6d 69 74 28 73  ite3VtabCommit(s
2e980 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 20  qlite3 *db);.   
2e990 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
2e9a0 4c 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a  Lock(VTable *);.
2e9b0 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56     void sqlite3V
2e9c0 74 61 62 55 6e 6c 6f 63 6b 28 56 54 61 62 6c 65  tabUnlock(VTable
2e9d0 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c   *);.   void sql
2e9e0 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69  ite3VtabUnlockLi
2e9f0 73 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 20 20  st(sqlite3*);.  
2ea00 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62   int sqlite3Vtab
2ea10 53 61 76 65 70 6f 69 6e 74 28 73 71 6c 69 74 65  Savepoint(sqlite
2ea20 33 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  3 *, int, int);.
2ea30 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56     void sqlite3V
2ea40 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28  tabImportErrmsg(
2ea50 56 64 62 65 2a 2c 20 73 71 6c 69 74 65 33 5f 76  Vdbe*, sqlite3_v
2ea60 74 61 62 2a 29 3b 0a 20 20 20 56 54 61 62 6c 65  tab*);.   VTable
2ea70 20 2a 73 71 6c 69 74 65 33 47 65 74 56 54 61 62   *sqlite3GetVTab
2ea80 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20 54 61 62  le(sqlite3*, Tab
2ea90 6c 65 2a 29 3b 0a 20 20 20 4d 6f 64 75 6c 65 20  le*);.   Module 
2eaa0 2a 73 71 6c 69 74 65 33 56 74 61 62 43 72 65 61  *sqlite3VtabCrea
2eab0 74 65 4d 6f 64 75 6c 65 28 0a 20 20 20 20 20 73  teModule(.     s
2eac0 71 6c 69 74 65 33 2a 2c 0a 20 20 20 20 20 63 6f  qlite3*,.     co
2ead0 6e 73 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20  nst char*,.     
2eae0 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f  const sqlite3_mo
2eaf0 64 75 6c 65 2a 2c 0a 20 20 20 20 20 76 6f 69 64  dule*,.     void
2eb00 2a 2c 0a 20 20 20 20 20 76 6f 69 64 28 2a 29 28  *,.     void(*)(
2eb10 76 6f 69 64 2a 29 0a 20 20 20 29 3b 0a 23 20 20  void*).   );.#  
2eb20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
2eb30 61 62 49 6e 53 79 6e 63 28 64 62 29 20 28 28 64  abInSync(db) ((d
2eb40 62 29 2d 3e 6e 56 54 72 61 6e 73 3e 30 20 26 26  b)->nVTrans>0 &&
2eb50 20 28 64 62 29 2d 3e 61 56 54 72 61 6e 73 3d 3d   (db)->aVTrans==
2eb60 30 29 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71  0).#endif.int sq
2eb70 6c 69 74 65 33 56 74 61 62 45 70 6f 6e 79 6d 6f  lite3VtabEponymo
2eb80 75 73 54 61 62 6c 65 49 6e 69 74 28 50 61 72 73  usTableInit(Pars
2eb90 65 2a 2c 4d 6f 64 75 6c 65 2a 29 3b 0a 76 6f 69  e*,Module*);.voi
2eba0 64 20 73 71 6c 69 74 65 33 56 74 61 62 45 70 6f  d sqlite3VtabEpo
2ebb0 6e 79 6d 6f 75 73 54 61 62 6c 65 43 6c 65 61 72  nymousTableClear
2ebc0 28 73 71 6c 69 74 65 33 2a 2c 4d 6f 64 75 6c 65  (sqlite3*,Module
2ebd0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2ebe0 56 74 61 62 4d 61 6b 65 57 72 69 74 61 62 6c 65  VtabMakeWritable
2ebf0 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b  (Parse*,Table*);
2ec00 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61  .void sqlite3Vta
2ec10 62 42 65 67 69 6e 50 61 72 73 65 28 50 61 72 73  bBeginParse(Pars
2ec20 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  e*, Token*, Toke
2ec30 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29  n*, Token*, int)
2ec40 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74  ;.void sqlite3Vt
2ec50 61 62 46 69 6e 69 73 68 50 61 72 73 65 28 50 61  abFinishParse(Pa
2ec60 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76  rse*, Token*);.v
2ec70 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 41  oid sqlite3VtabA
2ec80 72 67 49 6e 69 74 28 50 61 72 73 65 2a 29 3b 0a  rgInit(Parse*);.
2ec90 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
2eca0 41 72 67 45 78 74 65 6e 64 28 50 61 72 73 65 2a  ArgExtend(Parse*
2ecb0 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
2ecc0 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43 72  qlite3VtabCallCr
2ecd0 65 61 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 69  eate(sqlite3*, i
2ece0 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  nt, const char *
2ecf0 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 69 6e 74 20  , char **);.int 
2ed00 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43  sqlite3VtabCallC
2ed10 6f 6e 6e 65 63 74 28 50 61 72 73 65 2a 2c 20 54  onnect(Parse*, T
2ed20 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  able*);.int sqli
2ed30 74 65 33 56 74 61 62 43 61 6c 6c 44 65 73 74 72  te3VtabCallDestr
2ed40 6f 79 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  oy(sqlite3*, int
2ed50 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b  , const char *);
2ed60 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62  .int sqlite3Vtab
2ed70 42 65 67 69 6e 28 73 71 6c 69 74 65 33 20 2a 2c  Begin(sqlite3 *,
2ed80 20 56 54 61 62 6c 65 20 2a 29 3b 0a 46 75 6e 63   VTable *);.Func
2ed90 44 65 66 20 2a 73 71 6c 69 74 65 33 56 74 61 62  Def *sqlite3Vtab
2eda0 4f 76 65 72 6c 6f 61 64 46 75 6e 63 74 69 6f 6e  OverloadFunction
2edb0 28 73 71 6c 69 74 65 33 20 2a 2c 46 75 6e 63 44  (sqlite3 *,FuncD
2edc0 65 66 2a 2c 20 69 6e 74 20 6e 41 72 67 2c 20 45  ef*, int nArg, E
2edd0 78 70 72 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 69  xpr*);.sqlite3_i
2ede0 6e 74 36 34 20 73 71 6c 69 74 65 33 53 74 6d 74  nt64 sqlite3Stmt
2edf0 43 75 72 72 65 6e 74 54 69 6d 65 28 73 71 6c 69  CurrentTime(sqli
2ee00 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 0a 69  te3_context*);.i
2ee10 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 50 61  nt sqlite3VdbePa
2ee20 72 61 6d 65 74 65 72 49 6e 64 65 78 28 56 64 62  rameterIndex(Vdb
2ee30 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e*, const char*,
2ee40 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
2ee50 65 33 54 72 61 6e 73 66 65 72 42 69 6e 64 69 6e  e3TransferBindin
2ee60 67 73 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  gs(sqlite3_stmt 
2ee70 2a 2c 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  *, sqlite3_stmt 
2ee80 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2ee90 50 61 72 73 65 72 52 65 73 65 74 28 50 61 72 73  ParserReset(Pars
2eea0 65 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  e*);.#ifdef SQLI
2eeb0 54 45 5f 45 4e 41 42 4c 45 5f 4e 4f 52 4d 41 4c  TE_ENABLE_NORMAL
2eec0 49 5a 45 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  IZE.void sqlite3
2eed0 4e 6f 72 6d 61 6c 69 7a 65 28 56 64 62 65 2a 2c  Normalize(Vdbe*,
2eee0 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e   const char*, in
2eef0 74 2c 20 75 38 29 3b 0a 23 65 6e 64 69 66 0a 69  t, u8);.#endif.i
2ef00 6e 74 20 73 71 6c 69 74 65 33 52 65 70 72 65 70  nt sqlite3Reprep
2ef10 61 72 65 28 56 64 62 65 2a 29 3b 0a 76 6f 69 64  are(Vdbe*);.void
2ef20 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
2ef30 43 68 65 63 6b 4c 65 6e 67 74 68 28 50 61 72 73  CheckLength(Pars
2ef40 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 63  e*, ExprList*, c
2ef50 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 43 6f 6c  onst char*);.Col
2ef60 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 42 69 6e  lSeq *sqlite3Bin
2ef70 61 72 79 43 6f 6d 70 61 72 65 43 6f 6c 6c 53 65  aryCompareCollSe
2ef80 71 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20  q(Parse *, Expr 
2ef90 2a 2c 20 45 78 70 72 20 2a 29 3b 0a 69 6e 74 20  *, Expr *);.int 
2efa0 73 71 6c 69 74 65 33 54 65 6d 70 49 6e 4d 65 6d  sqlite3TempInMem
2efb0 6f 72 79 28 63 6f 6e 73 74 20 73 71 6c 69 74 65  ory(const sqlite
2efc0 33 2a 29 3b 0a 63 6f 6e 73 74 20 63 68 61 72 20  3*);.const char 
2efd0 2a 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d  *sqlite3JournalM
2efe0 6f 64 65 6e 61 6d 65 28 69 6e 74 29 3b 0a 23 69  odename(int);.#i
2eff0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2f000 54 5f 57 41 4c 0a 20 20 69 6e 74 20 73 71 6c 69  T_WAL.  int sqli
2f010 74 65 33 43 68 65 63 6b 70 6f 69 6e 74 28 73 71  te3Checkpoint(sq
2f020 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74  lite3*, int, int
2f030 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 20  , int*, int*);. 
2f040 20 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 44   int sqlite3WalD
2f050 65 66 61 75 6c 74 48 6f 6f 6b 28 76 6f 69 64 2a  efaultHook(void*
2f060 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  ,sqlite3*,const 
2f070 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 23 65 6e 64  char*,int);.#end
2f080 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
2f090 45 5f 4f 4d 49 54 5f 43 54 45 0a 20 20 57 69 74  E_OMIT_CTE.  Wit
2f0a0 68 20 2a 73 71 6c 69 74 65 33 57 69 74 68 41 64  h *sqlite3WithAd
2f0b0 64 28 50 61 72 73 65 2a 2c 57 69 74 68 2a 2c 54  d(Parse*,With*,T
2f0c0 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  oken*,ExprList*,
2f0d0 53 65 6c 65 63 74 2a 29 3b 0a 20 20 76 6f 69 64  Select*);.  void
2f0e0 20 73 71 6c 69 74 65 33 57 69 74 68 44 65 6c 65   sqlite3WithDele
2f0f0 74 65 28 73 71 6c 69 74 65 33 2a 2c 57 69 74 68  te(sqlite3*,With
2f100 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
2f110 65 33 57 69 74 68 50 75 73 68 28 50 61 72 73 65  e3WithPush(Parse
2f120 2a 2c 20 57 69 74 68 2a 2c 20 75 38 29 3b 0a 23  *, With*, u8);.#
2f130 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 73 71 6c  else.#define sql
2f140 69 74 65 33 57 69 74 68 50 75 73 68 28 78 2c 79  ite3WithPush(x,y
2f150 2c 7a 29 0a 23 64 65 66 69 6e 65 20 73 71 6c 69  ,z).#define sqli
2f160 74 65 33 57 69 74 68 44 65 6c 65 74 65 28 78 2c  te3WithDelete(x,
2f170 79 29 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  y).#endif.#ifnde
2f180 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 50  f SQLITE_OMIT_UP
2f190 53 45 52 54 0a 20 20 55 70 73 65 72 74 20 2a 73  SERT.  Upsert *s
2f1a0 71 6c 69 74 65 33 55 70 73 65 72 74 4e 65 77 28  qlite3UpsertNew(
2f1b0 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 4c 69 73  sqlite3*,ExprLis
2f1c0 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73  t*,Expr*,ExprLis
2f1d0 74 2a 2c 45 78 70 72 2a 29 3b 0a 20 20 76 6f 69  t*,Expr*);.  voi
2f1e0 64 20 73 71 6c 69 74 65 33 55 70 73 65 72 74 44  d sqlite3UpsertD
2f1f0 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 55  elete(sqlite3*,U
2f200 70 73 65 72 74 2a 29 3b 0a 20 20 55 70 73 65 72  psert*);.  Upser
2f210 74 20 2a 73 71 6c 69 74 65 33 55 70 73 65 72 74  t *sqlite3Upsert
2f220 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 55 70 73  Dup(sqlite3*,Ups
2f230 65 72 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  ert*);.  int sql
2f240 69 74 65 33 55 70 73 65 72 74 41 6e 61 6c 79 7a  ite3UpsertAnalyz
2f250 65 54 61 72 67 65 74 28 50 61 72 73 65 2a 2c 53  eTarget(Parse*,S
2f260 72 63 4c 69 73 74 2a 2c 55 70 73 65 72 74 2a 29  rcList*,Upsert*)
2f270 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2f280 55 70 73 65 72 74 44 6f 55 70 64 61 74 65 28 50  UpsertDoUpdate(P
2f290 61 72 73 65 2a 2c 55 70 73 65 72 74 2a 2c 54 61  arse*,Upsert*,Ta
2f2a0 62 6c 65 2a 2c 49 6e 64 65 78 2a 2c 69 6e 74 29  ble*,Index*,int)
2f2b0 3b 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20  ;.#else.#define 
2f2c0 73 71 6c 69 74 65 33 55 70 73 65 72 74 4e 65 77  sqlite3UpsertNew
2f2d0 28 76 2c 77 2c 78 2c 79 2c 7a 29 20 28 28 55 70  (v,w,x,y,z) ((Up
2f2e0 73 65 72 74 2a 29 30 29 0a 23 64 65 66 69 6e 65  sert*)0).#define
2f2f0 20 73 71 6c 69 74 65 33 55 70 73 65 72 74 44 65   sqlite3UpsertDe
2f300 6c 65 74 65 28 78 2c 79 29 0a 23 64 65 66 69 6e  lete(x,y).#defin
2f310 65 20 73 71 6c 69 74 65 33 55 70 73 65 72 74 44  e sqlite3UpsertD
2f320 75 70 28 78 2c 79 29 20 20 20 20 20 20 20 28 28  up(x,y)       ((
2f330 55 70 73 65 72 74 2a 29 30 29 0a 23 65 6e 64 69  Upsert*)0).#endi
2f340 66 0a 0a 0a 2f 2a 20 44 65 63 6c 61 72 61 74 69  f.../* Declarati
2f350 6f 6e 73 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e  ons for function
2f360 73 20 69 6e 20 66 6b 65 79 2e 63 2e 20 41 6c 6c  s in fkey.c. All
2f370 20 6f 66 20 74 68 65 73 65 20 61 72 65 20 72 65   of these are re
2f380 70 6c 61 63 65 64 20 62 79 0a 2a 2a 20 6e 6f 2d  placed by.** no-
2f390 6f 70 20 6d 61 63 72 6f 73 20 69 66 20 4f 4d 49  op macros if OMI
2f3a0 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73  T_FOREIGN_KEY is
2f3b0 20 64 65 66 69 6e 65 64 2e 20 49 6e 20 74 68 69   defined. In thi
2f3c0 73 20 63 61 73 65 20 6e 6f 20 66 6f 72 65 69 67  s case no foreig
2f3d0 6e 0a 2a 2a 20 6b 65 79 20 66 75 6e 63 74 69 6f  n.** key functio
2f3e0 6e 61 6c 69 74 79 20 69 73 20 61 76 61 69 6c 61  nality is availa
2f3f0 62 6c 65 2e 20 49 66 20 4f 4d 49 54 5f 54 52 49  ble. If OMIT_TRI
2f400 47 47 45 52 20 69 73 20 64 65 66 69 6e 65 64 20  GGER is defined 
2f410 62 75 74 0a 2a 2a 20 4f 4d 49 54 5f 46 4f 52 45  but.** OMIT_FORE
2f420 49 47 4e 5f 4b 45 59 20 69 73 20 6e 6f 74 2c 20  IGN_KEY is not, 
2f430 6f 6e 6c 79 20 73 6f 6d 65 20 6f 66 20 74 68 65  only some of the
2f440 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 6e   functions are n
2f450 6f 2d 6f 70 65 64 2e 20 49 6e 0a 2a 2a 20 74 68  o-oped. In.** th
2f460 69 73 20 63 61 73 65 20 66 6f 72 65 69 67 6e 20  is case foreign 
2f470 6b 65 79 73 20 61 72 65 20 70 61 72 73 65 64 2c  keys are parsed,
2f480 20 62 75 74 20 6e 6f 20 6f 74 68 65 72 20 66 75   but no other fu
2f490 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 0a 2a  nctionality is.*
2f4a0 2a 20 70 72 6f 76 69 64 65 64 20 28 65 6e 66 6f  * provided (enfo
2f4b0 72 63 65 6d 65 6e 74 20 6f 66 20 46 4b 20 63 6f  rcement of FK co
2f4c0 6e 73 74 72 61 69 6e 74 73 20 72 65 71 75 69 72  nstraints requir
2f4d0 65 73 20 74 68 65 20 74 72 69 67 67 65 72 73 20  es the triggers 
2f4e0 73 75 62 2d 73 79 73 74 65 6d 29 2e 0a 2a 2f 0a  sub-system)..*/.
2f4f0 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
2f500 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  ITE_OMIT_FOREIGN
2f510 5f 4b 45 59 29 20 26 26 20 21 64 65 66 69 6e 65  _KEY) && !define
2f520 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  d(SQLITE_OMIT_TR
2f530 49 47 47 45 52 29 0a 20 20 76 6f 69 64 20 73 71  IGGER).  void sq
2f540 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 50 61 72  lite3FkCheck(Par
2f550 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
2f560 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74  , int, int*, int
2f570 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
2f580 33 46 6b 44 72 6f 70 54 61 62 6c 65 28 50 61 72  3FkDropTable(Par
2f590 73 65 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20  se*, SrcList *, 
2f5a0 54 61 62 6c 65 2a 29 3b 0a 20 20 76 6f 69 64 20  Table*);.  void 
2f5b0 73 71 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e 73  sqlite3FkActions
2f5c0 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
2f5d0 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c   ExprList*, int,
2f5e0 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 69   int*, int);.  i
2f5f0 6e 74 20 73 71 6c 69 74 65 33 46 6b 52 65 71 75  nt sqlite3FkRequ
2f600 69 72 65 64 28 50 61 72 73 65 2a 2c 20 54 61 62  ired(Parse*, Tab
2f610 6c 65 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b  le*, int*, int);
2f620 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33 46 6b  .  u32 sqlite3Fk
2f630 4f 6c 64 6d 61 73 6b 28 50 61 72 73 65 2a 2c 20  Oldmask(Parse*, 
2f640 54 61 62 6c 65 2a 29 3b 0a 20 20 46 4b 65 79 20  Table*);.  FKey 
2f650 2a 73 71 6c 69 74 65 33 46 6b 52 65 66 65 72 65  *sqlite3FkRefere
2f660 6e 63 65 73 28 54 61 62 6c 65 20 2a 29 3b 0a 23  nces(Table *);.#
2f670 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
2f680 71 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e 73 28  qlite3FkActions(
2f690 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23  a,b,c,d,e,f).  #
2f6a0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
2f6b0 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 2c  Check(a,b,c,d,e,
2f6c0 66 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  f).  #define sql
2f6d0 69 74 65 33 46 6b 44 72 6f 70 54 61 62 6c 65 28  ite3FkDropTable(
2f6e0 61 2c 62 2c 63 29 0a 20 20 23 64 65 66 69 6e 65  a,b,c).  #define
2f6f0 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73   sqlite3FkOldmas
2f700 6b 28 61 2c 62 29 20 20 20 20 20 20 20 20 20 30  k(a,b)         0
2f710 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
2f720 65 33 46 6b 52 65 71 75 69 72 65 64 28 61 2c 62  e3FkRequired(a,b
2f730 2c 63 2c 64 29 20 20 20 20 30 0a 20 20 23 64 65  ,c,d)    0.  #de
2f740 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 52 65  fine sqlite3FkRe
2f750 66 65 72 65 6e 63 65 73 28 61 29 20 20 20 20 20  ferences(a)     
2f760 20 20 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 6e     0.#endif.#ifn
2f770 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2f780 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 20 20 76 6f  FOREIGN_KEY.  vo
2f790 69 64 20 73 71 6c 69 74 65 33 46 6b 44 65 6c 65  id sqlite3FkDele
2f7a0 74 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 54 61  te(sqlite3 *, Ta
2f7b0 62 6c 65 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  ble*);.  int sql
2f7c0 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65  ite3FkLocateInde
2f7d0 78 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c  x(Parse*,Table*,
2f7e0 46 4b 65 79 2a 2c 49 6e 64 65 78 2a 2a 2c 69 6e  FKey*,Index**,in
2f7f0 74 2a 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  t**);.#else.  #d
2f800 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44  efine sqlite3FkD
2f810 65 6c 65 74 65 28 61 2c 62 29 0a 20 20 23 64 65  elete(a,b).  #de
2f820 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 4c 6f  fine sqlite3FkLo
2f830 63 61 74 65 49 6e 64 65 78 28 61 2c 62 2c 63 2c  cateIndex(a,b,c,
2f840 64 2c 65 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a  d,e).#endif.../*
2f850 0a 2a 2a 20 41 76 61 69 6c 61 62 6c 65 20 66 61  .** Available fa
2f860 75 6c 74 20 69 6e 6a 65 63 74 6f 72 73 2e 20 20  ult injectors.  
2f870 53 68 6f 75 6c 64 20 62 65 20 6e 75 6d 62 65 72  Should be number
2f880 65 64 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74  ed beginning wit
2f890 68 20 30 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  h 0..*/.#define 
2f8a0 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45  SQLITE_FAULTINJE
2f8b0 43 54 4f 52 5f 4d 41 4c 4c 4f 43 20 20 20 20 20  CTOR_MALLOC     
2f8c0 30 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  0.#define SQLITE
2f8d0 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 43  _FAULTINJECTOR_C
2f8e0 4f 55 4e 54 20 20 20 20 20 20 31 0a 0a 2f 2a 0a  OUNT      1../*.
2f8f0 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63 65  ** The interface
2f900 20 74 6f 20 74 68 65 20 63 6f 64 65 20 69 6e 20   to the code in 
2f910 66 61 75 6c 74 2e 63 20 75 73 65 64 20 66 6f 72  fault.c used for
2f920 20 69 64 65 6e 74 69 66 79 69 6e 67 20 22 62 65   identifying "be
2f930 6e 69 67 6e 22 0a 2a 2a 20 6d 61 6c 6c 6f 63 20  nign".** malloc 
2f940 66 61 69 6c 75 72 65 73 2e 20 54 68 69 73 20 69  failures. This i
2f950 73 20 6f 6e 6c 79 20 70 72 65 73 65 6e 74 20 69  s only present i
2f960 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41  f SQLITE_UNTESTA
2f970 42 4c 45 0a 2a 2a 20 69 73 20 6e 6f 74 20 64 65  BLE.** is not de
2f980 66 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65  fined..*/.#ifnde
2f990 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41  f SQLITE_UNTESTA
2f9a0 42 4c 45 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  BLE.  void sqlit
2f9b0 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c  e3BeginBenignMal
2f9c0 6c 6f 63 28 76 6f 69 64 29 3b 0a 20 20 76 6f 69  loc(void);.  voi
2f9d0 64 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69  d sqlite3EndBeni
2f9e0 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a  gnMalloc(void);.
2f9f0 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
2fa00 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69  sqlite3BeginBeni
2fa10 67 6e 4d 61 6c 6c 6f 63 28 29 0a 20 20 23 64 65  gnMalloc().  #de
2fa20 66 69 6e 65 20 73 71 6c 69 74 65 33 45 6e 64 42  fine sqlite3EndB
2fa30 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 23 65  enignMalloc().#e
2fa40 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  ndif../*.** Allo
2fa50 77 65 64 20 72 65 74 75 72 6e 20 76 61 6c 75 65  wed return value
2fa60 73 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 46 69  s from sqlite3Fi
2fa70 6e 64 49 6e 49 6e 64 65 78 28 29 0a 2a 2f 0a 23  ndInIndex().*/.#
2fa80 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
2fa90 52 4f 57 49 44 20 20 20 20 20 20 20 20 31 20 20  ROWID        1  
2faa0 20 2f 2a 20 53 65 61 72 63 68 20 74 68 65 20 72   /* Search the r
2fab0 6f 77 69 64 20 6f 66 20 74 68 65 20 74 61 62 6c  owid of the tabl
2fac0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f  e */.#define IN_
2fad0 49 4e 44 45 58 5f 45 50 48 20 20 20 20 20 20 20  INDEX_EPH       
2fae0 20 20 20 32 20 20 20 2f 2a 20 53 65 61 72 63 68     2   /* Search
2faf0 20 61 6e 20 65 70 68 65 6d 65 72 61 6c 20 62 2d   an ephemeral b-
2fb00 74 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tree */.#define 
2fb10 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f 41  IN_INDEX_INDEX_A
2fb20 53 43 20 20 20 20 33 20 20 20 2f 2a 20 45 78 69  SC    3   /* Exi
2fb30 73 74 69 6e 67 20 69 6e 64 65 78 20 41 53 43 45  sting index ASCE
2fb40 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e 65  NDING */.#define
2fb50 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f   IN_INDEX_INDEX_
2fb60 44 45 53 43 20 20 20 34 20 20 20 2f 2a 20 45 78  DESC   4   /* Ex
2fb70 69 73 74 69 6e 67 20 69 6e 64 65 78 20 44 45 53  isting index DES
2fb80 43 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69  CENDING */.#defi
2fb90 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50  ne IN_INDEX_NOOP
2fba0 20 20 20 20 20 20 20 20 20 35 20 20 20 2f 2a 20           5   /* 
2fbb0 4e 6f 20 74 61 62 6c 65 20 61 76 61 69 6c 61 62  No table availab
2fbc0 6c 65 2e 20 55 73 65 20 63 6f 6d 70 61 72 69 73  le. Use comparis
2fbd0 6f 6e 73 20 2a 2f 0a 2f 2a 0a 2a 2a 20 41 6c 6c  ons */./*.** All
2fbe0 6f 77 65 64 20 66 6c 61 67 73 20 66 6f 72 20 74  owed flags for t
2fbf0 68 65 20 33 72 64 20 70 61 72 61 6d 65 74 65 72  he 3rd parameter
2fc00 20 74 6f 20 73 71 6c 69 74 65 33 46 69 6e 64 49   to sqlite3FindI
2fc10 6e 49 6e 64 65 78 28 29 2e 0a 2a 2f 0a 23 64 65  nIndex()..*/.#de
2fc20 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f  fine IN_INDEX_NO
2fc30 4f 50 5f 4f 4b 20 20 20 20 20 30 78 30 30 30 31  OP_OK     0x0001
2fc40 20 20 2f 2a 20 4f 4b 20 74 6f 20 72 65 74 75 72    /* OK to retur
2fc50 6e 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20  n IN_INDEX_NOOP 
2fc60 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  */.#define IN_IN
2fc70 44 45 58 5f 4d 45 4d 42 45 52 53 48 49 50 20 20  DEX_MEMBERSHIP  
2fc80 30 78 30 30 30 32 20 20 2f 2a 20 49 4e 20 6f 70  0x0002  /* IN op
2fc90 65 72 61 74 6f 72 20 75 73 65 64 20 66 6f 72 20  erator used for 
2fca0 6d 65 6d 62 65 72 73 68 69 70 20 74 65 73 74 20  membership test 
2fcb0 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  */.#define IN_IN
2fcc0 44 45 58 5f 4c 4f 4f 50 20 20 20 20 20 20 20 20  DEX_LOOP        
2fcd0 30 78 30 30 30 34 20 20 2f 2a 20 49 4e 20 6f 70  0x0004  /* IN op
2fce0 65 72 61 74 6f 72 20 75 73 65 64 20 61 73 20 61  erator used as a
2fcf0 20 6c 6f 6f 70 20 2a 2f 0a 69 6e 74 20 73 71 6c   loop */.int sql
2fd00 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28  ite3FindInIndex(
2fd10 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c  Parse *, Expr *,
2fd20 20 75 33 32 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a   u32, int*, int*
2fd30 29 3b 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a  );..int sqlite3J
2fd40 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74  ournalOpen(sqlit
2fd50 65 33 5f 76 66 73 20 2a 2c 20 63 6f 6e 73 74 20  e3_vfs *, const 
2fd60 63 68 61 72 20 2a 2c 20 73 71 6c 69 74 65 33 5f  char *, sqlite3_
2fd70 66 69 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  file *, int, int
2fd80 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f  );.int sqlite3Jo
2fd90 75 72 6e 61 6c 53 69 7a 65 28 73 71 6c 69 74 65  urnalSize(sqlite
2fda0 33 5f 76 66 73 20 2a 29 3b 0a 23 69 66 20 64 65  3_vfs *);.#if de
2fdb0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
2fdc0 42 4c 45 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45  BLE_ATOMIC_WRITE
2fdd0 29 20 5c 0a 20 7c 7c 20 64 65 66 69 6e 65 64 28  ) \. || defined(
2fde0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 42 41  SQLITE_ENABLE_BA
2fdf0 54 43 48 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45  TCH_ATOMIC_WRITE
2fe00 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a  ).  int sqlite3J
2fe10 6f 75 72 6e 61 6c 43 72 65 61 74 65 28 73 71 6c  ournalCreate(sql
2fe20 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 23 65  ite3_file *);.#e
2fe30 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65  ndif..int sqlite
2fe40 33 4a 6f 75 72 6e 61 6c 49 73 49 6e 4d 65 6d 6f  3JournalIsInMemo
2fe50 72 79 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20  ry(sqlite3_file 
2fe60 2a 70 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  *p);.void sqlite
2fe70 33 4d 65 6d 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28  3MemJournalOpen(
2fe80 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b  sqlite3_file *);
2fe90 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ..void sqlite3Ex
2fea0 70 72 53 65 74 48 65 69 67 68 74 41 6e 64 46 6c  prSetHeightAndFl
2feb0 61 67 73 28 50 61 72 73 65 20 2a 70 50 61 72 73  ags(Parse *pPars
2fec0 65 2c 20 45 78 70 72 20 2a 70 29 3b 0a 23 69 66  e, Expr *p);.#if
2fed0 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52   SQLITE_MAX_EXPR
2fee0 5f 44 45 50 54 48 3e 30 0a 20 20 69 6e 74 20 73  _DEPTH>0.  int s
2fef0 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 72  qlite3SelectExpr
2ff00 48 65 69 67 68 74 28 53 65 6c 65 63 74 20 2a 29  Height(Select *)
2ff10 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 45  ;.  int sqlite3E
2ff20 78 70 72 43 68 65 63 6b 48 65 69 67 68 74 28 50  xprCheckHeight(P
2ff30 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c  arse*, int);.#el
2ff40 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  se.  #define sql
2ff50 69 74 65 33 53 65 6c 65 63 74 45 78 70 72 48 65  ite3SelectExprHe
2ff60 69 67 68 74 28 78 29 20 30 0a 20 20 23 64 65 66  ight(x) 0.  #def
2ff70 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 72 43  ine sqlite3ExprC
2ff80 68 65 63 6b 48 65 69 67 68 74 28 78 2c 79 29 0a  heckHeight(x,y).
2ff90 23 65 6e 64 69 66 0a 0a 75 33 32 20 73 71 6c 69  #endif..u32 sqli
2ffa0 74 65 33 47 65 74 34 62 79 74 65 28 63 6f 6e 73  te3Get4byte(cons
2ffb0 74 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  t u8*);.void sql
2ffc0 69 74 65 33 50 75 74 34 62 79 74 65 28 75 38 2a  ite3Put4byte(u8*
2ffd0 2c 20 75 33 32 29 3b 0a 0a 23 69 66 64 65 66 20  , u32);..#ifdef 
2ffe0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e  SQLITE_ENABLE_UN
2fff0 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 76 6f  LOCK_NOTIFY.  vo
30000 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63  id sqlite3Connec
30010 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 73 71 6c 69  tionBlocked(sqli
30020 74 65 33 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a  te3 *, sqlite3 *
30030 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
30040 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63  3ConnectionUnloc
30050 6b 65 64 28 73 71 6c 69 74 65 33 20 2a 64 62 29  ked(sqlite3 *db)
30060 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
30070 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64  ConnectionClosed
30080 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 23  (sqlite3 *db);.#
30090 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
300a0 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e  qlite3Connection
300b0 42 6c 6f 63 6b 65 64 28 78 2c 79 29 0a 20 20 23  Blocked(x,y).  #
300c0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f  define sqlite3Co
300d0 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64  nnectionUnlocked
300e0 28 78 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  (x).  #define sq
300f0 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43  lite3ConnectionC
30100 6c 6f 73 65 64 28 78 29 0a 23 65 6e 64 69 66 0a  losed(x).#endif.
30110 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
30120 45 42 55 47 0a 20 20 76 6f 69 64 20 73 71 6c 69  EBUG.  void sqli
30130 74 65 33 50 61 72 73 65 72 54 72 61 63 65 28 46  te3ParserTrace(F
30140 49 4c 45 2a 2c 20 63 68 61 72 20 2a 29 3b 0a 23  ILE*, char *);.#
30150 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65  endif.#if define
30160 64 28 59 59 43 4f 56 45 52 41 47 45 29 0a 20 20  d(YYCOVERAGE).  
30170 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73 65  int sqlite3Parse
30180 72 43 6f 76 65 72 61 67 65 28 46 49 4c 45 2a 29  rCoverage(FILE*)
30190 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ;.#endif../*.** 
301a0 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e  If the SQLITE_EN
301b0 41 42 4c 45 20 49 4f 54 52 41 43 45 20 65 78 69  ABLE IOTRACE exi
301c0 73 74 73 20 74 68 65 6e 20 74 68 65 20 67 6c 6f  sts then the glo
301d0 62 61 6c 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20  bal variable.** 
301e0 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 69  sqlite3IoTrace i
301f0 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
30200 20 70 72 69 6e 74 66 2d 6c 69 6b 65 20 72 6f 75   printf-like rou
30210 74 69 6e 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20  tine used to.** 
30220 70 72 69 6e 74 20 49 2f 4f 20 74 72 61 63 69 6e  print I/O tracin
30230 67 20 6d 65 73 73 61 67 65 73 2e 0a 2a 2f 0a 23  g messages..*/.#
30240 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
30250 42 4c 45 5f 49 4f 54 52 41 43 45 0a 23 20 64 65  BLE_IOTRACE.# de
30260 66 69 6e 65 20 49 4f 54 52 41 43 45 28 41 29 20  fine IOTRACE(A) 
30270 20 69 66 28 20 73 71 6c 69 74 65 33 49 6f 54 72   if( sqlite3IoTr
30280 61 63 65 20 29 7b 20 73 71 6c 69 74 65 33 49 6f  ace ){ sqlite3Io
30290 54 72 61 63 65 20 41 3b 20 7d 0a 20 20 76 6f 69  Trace A; }.  voi
302a0 64 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54  d sqlite3VdbeIOT
302b0 72 61 63 65 53 71 6c 28 56 64 62 65 2a 29 3b 0a  raceSql(Vdbe*);.
302c0 53 51 4c 49 54 45 5f 41 50 49 20 53 51 4c 49 54  SQLITE_API SQLIT
302d0 45 5f 45 58 54 45 52 4e 20 76 6f 69 64 20 28 53  E_EXTERN void (S
302e0 51 4c 49 54 45 5f 43 44 45 43 4c 20 2a 73 71 6c  QLITE_CDECL *sql
302f0 69 74 65 33 49 6f 54 72 61 63 65 29 28 63 6f 6e  ite3IoTrace)(con
30300 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23  st char*,...);.#
30310 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 49 4f  else.# define IO
30320 54 52 41 43 45 28 41 29 0a 23 20 64 65 66 69 6e  TRACE(A).# defin
30330 65 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54  e sqlite3VdbeIOT
30340 72 61 63 65 53 71 6c 28 58 29 0a 23 65 6e 64 69  raceSql(X).#endi
30350 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 72  f../*.** These r
30360 6f 75 74 69 6e 65 73 20 61 72 65 20 61 76 61 69  outines are avai
30370 6c 61 62 6c 65 20 66 6f 72 20 74 68 65 20 6d 65  lable for the me
30380 6d 32 2e 63 20 64 65 62 75 67 67 69 6e 67 20 6d  m2.c debugging m
30390 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72 0a  emory allocator.
303a0 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 79 20 61  ** only.  They a
303b0 72 65 20 75 73 65 64 20 74 6f 20 76 65 72 69 66  re used to verif
303c0 79 20 74 68 61 74 20 64 69 66 66 65 72 65 6e 74  y that different
303d0 20 22 74 79 70 65 73 22 20 6f 66 20 6d 65 6d 6f   "types" of memo
303e0 72 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e  ry.** allocation
303f0 73 20 61 72 65 20 70 72 6f 70 65 72 6c 79 20 74  s are properly t
30400 72 61 63 6b 65 64 20 62 79 20 74 68 65 20 73 79  racked by the sy
30410 73 74 65 6d 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69  stem..**.** sqli
30420 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79  te3MemdebugSetTy
30430 70 65 28 29 20 73 65 74 73 20 74 68 65 20 22 74  pe() sets the "t
30440 79 70 65 22 20 6f 66 20 61 6e 20 61 6c 6c 6f 63  ype" of an alloc
30450 61 74 69 6f 6e 20 74 6f 20 6f 6e 65 20 6f 66 0a  ation to one of.
30460 2a 2a 20 74 68 65 20 4d 45 4d 54 59 50 45 5f 2a  ** the MEMTYPE_*
30470 20 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 64 20   macros defined 
30480 62 65 6c 6f 77 2e 20 20 54 68 65 20 74 79 70 65  below.  The type
30490 20 6d 75 73 74 20 62 65 20 61 20 62 69 74 6d 61   must be a bitma
304a0 73 6b 20 77 69 74 68 0a 2a 2a 20 61 20 73 69 6e  sk with.** a sin
304b0 67 6c 65 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a  gle bit set..**.
304c0 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ** sqlite3Memdeb
304d0 75 67 48 61 73 54 79 70 65 28 29 20 72 65 74 75  ugHasType() retu
304e0 72 6e 73 20 74 72 75 65 20 69 66 20 61 6e 79 20  rns true if any 
304f0 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e 20 69  of the bits in i
30500 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67  ts second.** arg
30510 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68 65 20  ument match the 
30520 74 79 70 65 20 73 65 74 20 62 79 20 74 68 65 20  type set by the 
30530 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74 65 33  previous sqlite3
30540 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28  MemdebugSetType(
30550 29 2e 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d  )..** sqlite3Mem
30560 64 65 62 75 67 48 61 73 54 79 70 65 28 29 20 69  debugHasType() i
30570 73 20 69 6e 74 65 6e 64 65 64 20 66 6f 72 20 75  s intended for u
30580 73 65 20 69 6e 73 69 64 65 20 61 73 73 65 72 74  se inside assert
30590 28 29 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a  () statements..*
305a0 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64  *.** sqlite3Memd
305b0 65 62 75 67 4e 6f 54 79 70 65 28 29 20 72 65 74  ebugNoType() ret
305c0 75 72 6e 73 20 74 72 75 65 20 69 66 20 6e 6f 6e  urns true if non
305d0 65 20 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e  e of the bits in
305e0 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61   its second.** a
305f0 72 67 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68  rgument match th
30600 65 20 74 79 70 65 20 73 65 74 20 62 79 20 74 68  e type set by th
30610 65 20 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74  e previous sqlit
30620 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70  e3MemdebugSetTyp
30630 65 28 29 2e 0a 2a 2a 0a 2a 2a 20 50 65 72 68 61  e()..**.** Perha
30640 70 73 20 74 68 65 20 6d 6f 73 74 20 69 6d 70 6f  ps the most impo
30650 72 74 61 6e 74 20 70 6f 69 6e 74 20 69 73 20 74  rtant point is t
30660 68 65 20 64 69 66 66 65 72 65 6e 63 65 20 62 65  he difference be
30670 74 77 65 65 6e 20 4d 45 4d 54 59 50 45 5f 48 45  tween MEMTYPE_HE
30680 41 50 0a 2a 2a 20 61 6e 64 20 4d 45 4d 54 59 50  AP.** and MEMTYP
30690 45 5f 4c 4f 4f 4b 41 53 49 44 45 2e 20 20 49 66  E_LOOKASIDE.  If
306a0 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69   an allocation i
306b0 73 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53  s MEMTYPE_LOOKAS
306c0 49 44 45 2c 20 74 68 61 74 20 6d 65 61 6e 73 0a  IDE, that means.
306d0 2a 2a 20 69 74 20 6d 69 67 68 74 20 68 61 76 65  ** it might have
306e0 20 62 65 65 6e 20 61 6c 6c 6f 63 61 74 65 64 20   been allocated 
306f0 62 79 20 6c 6f 6f 6b 61 73 69 64 65 2c 20 65 78  by lookaside, ex
30700 63 65 70 74 20 74 68 65 20 61 6c 6c 6f 63 61 74  cept the allocat
30710 69 6f 6e 20 77 61 73 0a 2a 2a 20 74 6f 6f 20 6c  ion was.** too l
30720 61 72 67 65 20 6f 72 20 6c 6f 6f 6b 61 73 69 64  arge or lookasid
30730 65 20 77 61 73 20 61 6c 72 65 61 64 79 20 66 75  e was already fu
30740 6c 6c 2e 20 20 49 74 20 69 73 20 69 6d 70 6f 72  ll.  It is impor
30750 74 61 6e 74 20 74 6f 20 76 65 72 69 66 79 0a 2a  tant to verify.*
30760 2a 20 74 68 61 74 20 61 6c 6c 6f 63 61 74 69 6f  * that allocatio
30770 6e 73 20 74 68 61 74 20 6d 69 67 68 74 20 68 61  ns that might ha
30780 76 65 20 62 65 65 6e 20 73 61 74 69 73 66 69 65  ve been satisfie
30790 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65 20 61  d by lookaside a
307a0 72 65 20 6e 6f 74 0a 2a 2a 20 70 61 73 73 65 64  re not.** passed
307b0 20 62 61 63 6b 20 74 6f 20 6e 6f 6e 2d 6c 6f 6f   back to non-loo
307c0 6b 61 73 69 64 65 20 66 72 65 65 28 29 20 72 6f  kaside free() ro
307d0 75 74 69 6e 65 73 2e 20 20 41 73 73 65 72 74 73  utines.  Asserts
307e0 20 73 75 63 68 20 61 73 20 74 68 65 0a 2a 2a 20   such as the.** 
307f0 65 78 61 6d 70 6c 65 20 61 62 6f 76 65 20 61 72  example above ar
30800 65 20 70 6c 61 63 65 64 20 6f 6e 20 74 68 65 20  e placed on the 
30810 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72  non-lookaside fr
30820 65 65 28 29 20 72 6f 75 74 69 6e 65 73 20 74 6f  ee() routines to
30830 20 76 65 72 69 66 79 0a 2a 2a 20 74 68 69 73 20   verify.** this 
30840 63 6f 6e 73 74 72 61 69 6e 74 2e 0a 2a 2a 0a 2a  constraint..**.*
30850 2a 20 41 6c 6c 20 6f 66 20 74 68 69 73 20 69 73  * All of this is
30860 20 6e 6f 2d 6f 70 20 66 6f 72 20 61 20 70 72 6f   no-op for a pro
30870 64 75 63 74 69 6f 6e 20 62 75 69 6c 64 2e 20 20  duction build.  
30880 49 74 20 6f 6e 6c 79 20 63 6f 6d 65 73 20 69 6e  It only comes in
30890 74 6f 0a 2a 2a 20 70 6c 61 79 20 77 68 65 6e 20  to.** play when 
308a0 74 68 65 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45  the SQLITE_MEMDE
308b0 42 55 47 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  BUG compile-time
308c0 20 6f 70 74 69 6f 6e 20 69 73 20 75 73 65 64 2e   option is used.
308d0 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
308e0 45 5f 4d 45 4d 44 45 42 55 47 0a 20 20 76 6f 69  E_MEMDEBUG.  voi
308f0 64 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  d sqlite3Memdebu
30900 67 53 65 74 54 79 70 65 28 76 6f 69 64 2a 2c 75  gSetType(void*,u
30910 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  8);.  int sqlite
30920 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65  3MemdebugHasType
30930 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e  (void*,u8);.  in
30940 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  t sqlite3Memdebu
30950 67 4e 6f 54 79 70 65 28 76 6f 69 64 2a 2c 75 38  gNoType(void*,u8
30960 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
30970 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  e sqlite3Memdebu
30980 67 53 65 74 54 79 70 65 28 58 2c 59 29 20 20 2f  gSetType(X,Y)  /
30990 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 20 64 65 66  * no-op */.# def
309a0 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  ine sqlite3Memde
309b0 62 75 67 48 61 73 54 79 70 65 28 58 2c 59 29 20  bugHasType(X,Y) 
309c0 20 31 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69   1.# define sqli
309d0 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70  te3MemdebugNoTyp
309e0 65 28 58 2c 59 29 20 20 20 31 0a 23 65 6e 64 69  e(X,Y)   1.#endi
309f0 66 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50  f.#define MEMTYP
30a00 45 5f 48 45 41 50 20 20 20 20 20 20 20 30 78 30  E_HEAP       0x0
30a10 31 20 20 2f 2a 20 47 65 6e 65 72 61 6c 20 68 65  1  /* General he
30a20 61 70 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a  ap allocations *
30a30 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50  /.#define MEMTYP
30a40 45 5f 4c 4f 4f 4b 41 53 49 44 45 20 20 30 78 30  E_LOOKASIDE  0x0
30a50 32 20 20 2f 2a 20 48 65 61 70 20 74 68 61 74 20  2  /* Heap that 
30a60 6d 69 67 68 74 20 68 61 76 65 20 62 65 65 6e 20  might have been 
30a70 6c 6f 6f 6b 61 73 69 64 65 20 2a 2f 0a 23 64 65  lookaside */.#de
30a80 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 50 43 41  fine MEMTYPE_PCA
30a90 43 48 45 20 20 20 20 20 30 78 30 34 20 20 2f 2a  CHE     0x04  /*
30aa0 20 50 61 67 65 20 63 61 63 68 65 20 61 6c 6c 6f   Page cache allo
30ab0 63 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a  cations */../*.*
30ac0 2a 20 54 68 72 65 61 64 69 6e 67 20 69 6e 74 65  * Threading inte
30ad0 72 66 61 63 65 0a 2a 2f 0a 23 69 66 20 53 51 4c  rface.*/.#if SQL
30ae0 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
30af0 48 52 45 41 44 53 3e 30 0a 69 6e 74 20 73 71 6c  HREADS>0.int sql
30b00 69 74 65 33 54 68 72 65 61 64 43 72 65 61 74 65  ite3ThreadCreate
30b10 28 53 51 4c 69 74 65 54 68 72 65 61 64 2a 2a 2c  (SQLiteThread**,
30b20 76 6f 69 64 2a 28 2a 29 28 76 6f 69 64 2a 29 2c  void*(*)(void*),
30b30 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  void*);.int sqli
30b40 74 65 33 54 68 72 65 61 64 4a 6f 69 6e 28 53 51  te3ThreadJoin(SQ
30b50 4c 69 74 65 54 68 72 65 61 64 2a 2c 20 76 6f 69  LiteThread*, voi
30b60 64 2a 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  d**);.#endif..#i
30b70 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
30b80 5f 45 4e 41 42 4c 45 5f 44 42 50 41 47 45 5f 56  _ENABLE_DBPAGE_V
30b90 54 41 42 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  TAB) || defined(
30ba0 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 69 6e 74  SQLITE_TEST).int
30bb0 20 73 71 6c 69 74 65 33 44 62 70 61 67 65 52 65   sqlite3DbpageRe
30bc0 67 69 73 74 65 72 28 73 71 6c 69 74 65 33 2a 29  gister(sqlite3*)
30bd0 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66  ;.#endif.#if def
30be0 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
30bf0 4c 45 5f 44 42 53 54 41 54 5f 56 54 41 42 29 20  LE_DBSTAT_VTAB) 
30c00 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  || defined(SQLIT
30c10 45 5f 54 45 53 54 29 0a 69 6e 74 20 73 71 6c 69  E_TEST).int sqli
30c20 74 65 33 44 62 73 74 61 74 52 65 67 69 73 74 65  te3DbstatRegiste
30c30 72 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6e  r(sqlite3*);.#en
30c40 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33  dif..int sqlite3
30c50 45 78 70 72 56 65 63 74 6f 72 53 69 7a 65 28 45  ExprVectorSize(E
30c60 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74  xpr *pExpr);.int
30c70 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 56 65   sqlite3ExprIsVe
30c80 63 74 6f 72 28 45 78 70 72 20 2a 70 45 78 70 72  ctor(Expr *pExpr
30c90 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
30ca0 56 65 63 74 6f 72 46 69 65 6c 64 53 75 62 65 78  VectorFieldSubex
30cb0 70 72 28 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  pr(Expr*, int);.
30cc0 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
30cd0 72 46 6f 72 56 65 63 74 6f 72 46 69 65 6c 64 28  rForVectorField(
30ce0 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 69 6e 74  Parse*,Expr*,int
30cf0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
30d00 65 63 74 6f 72 45 72 72 6f 72 4d 73 67 28 50 61  ectorErrorMsg(Pa
30d10 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 0a 23  rse*, Expr*);..#
30d20 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
30d30 49 54 5f 43 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e  IT_COMPILEOPTION
30d40 5f 44 49 41 47 53 0a 63 6f 6e 73 74 20 63 68 61  _DIAGS.const cha
30d50 72 20 2a 2a 73 71 6c 69 74 65 33 43 6f 6d 70 69  r **sqlite3Compi
30d60 6c 65 4f 70 74 69 6f 6e 73 28 69 6e 74 20 2a 70  leOptions(int *p
30d70 6e 4f 70 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  nOpt);.#endif..#
30d80 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 49  endif /* SQLITEI
30d90 4e 54 5f 48 20 2a 2f 0a                          NT_H */.